From 19af275a7bf567b5abb8525d70b3700800075868 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 11 Apr 2021 16:42:28 +0200 Subject: [PATCH 01/22] Use project yjs room to share metadata --- frontend/project-list.js | 143 ++++++++++++++++++++++++++++----------- frontend/util/auth.js | 6 +- 2 files changed, 107 insertions(+), 42 deletions(-) diff --git a/frontend/project-list.js b/frontend/project-list.js index d278e82..374b937 100644 --- a/frontend/project-list.js +++ b/frontend/project-list.js @@ -136,6 +136,12 @@ export class ProjectList extends LitElement { listedProjects: { type: Array }, + /** + * The currently selected project, i.e. last one clicked on. + */ + selectedProject: { + type: Object + }, /** * This property allows to disable the "All projects" tab. It can be set to "true" if only the projects where * the user is a member of should be listed. If set to "false", then all projects that are available will be @@ -164,28 +170,34 @@ export class ProjectList extends LitElement { }, /** - * URL where the frontend can access the las2peer contact service REST API. - */ + * URL where the frontend can access the las2peer contact service REST API. + */ contactServiceURL: { type: String }, /** - * Yjs address used for the online user list. - * Only required if the online user list is used. + * Yjs address that should be used for keeping the metadata in the frontend up-to-date. + * Can also be used for the online user list. */ yjsAddress: { type: String }, /** - * Yjs resource path used for the online user list. - * Only required if the online user list is used. + * Yjs resource path used for sharing the metadata and for the online user list. */ yjsResourcePath: { type: String }, + /** + * Yjs instance. + */ + y: { + type: Object + }, + /** * If the user opens the project options dialog, then the project * for which the dialog is opened gets stored in this variable. @@ -200,12 +212,13 @@ export class ProjectList extends LitElement { super(); this.groups = []; this.projects = []; + this.selectedProject = null; this.listedProjects = ["sss"]; this.projectsOnlineUser = new Object(); // use a default value for project service URL for local testing this.projectServiceURL = "http://127.0.0.1:8080"; this.contactServiceURL = "http://127.0.0.1:8080/contactservice"; - window.addEventListener('metadata-changed', this._changeMetadata.bind(this)); + window.addEventListener('metadata-change-request', this._changeMetadata.bind(this)); this.disableAllProjects = false; this.yjsAddress = "http://127.0.0.1:1234"; this.yjsResourcePath = "./socket.io"; @@ -218,15 +231,18 @@ export class ProjectList extends LitElement { this.showProjects(false); } - _changeMetadata(event){ - console.log("Project is: " + event.detail.project); - console.log("New Metadata is: " + event.detail.newMetadata); - var project = JSON.parse(event.detail.project); + _changeMetadata(event) { + console.log(event); + let newMetadata = event.detail; + + var project = this.selectedProject; var projectName = project.name; - var oldMetadata = project.metadata; - var newMetadata = event.detail.newMetadata; - // due to my lack of experience in frontend programming, I didnt know how to access the this.projectserviceurl var :( - fetch("http://127.0.0.1:8080"+ "/projects/" + this.system + "/changeMetadata/", { + var oldMetadata = this.selectedProject.metadata; + + console.log("Project is: ", project); + console.log("New Metadata is: ", newMetadata); + + fetch(this.projectServiceURL + "/projects/" + this.system + "/changeMetadata/", { method: "POST", headers: Auth.getAuthHeaderWithSub(), body: JSON.stringify({ @@ -236,16 +252,22 @@ export class ProjectList extends LitElement { "newMetadata": newMetadata }) }).then( response => { - if(!response.ok) throw Error(response.status); - return response.json(); + if(!response.ok) throw Error(response.status); + return response.json(); }).then(data => { - console.log(data); + console.log(data); + + if(this.y) { + // since the service successfully updated the metadata, we can also update it in the Yjs room + this.y.share.data.set("projectMetadata", newMetadata); + } + }).catch(error => { if(error.message == "401") { // user is not authorized // maybe the access token has expired Auth.removeAuthDataFromLocalStorage(); - // location.reload(); + // location.reload(); } else { console.log(error); } @@ -410,12 +432,11 @@ export class ProjectList extends LitElement { // disable create button until user entered a project name this.shadowRoot.getElementById("dialog-button-create").disabled = true; }).catch(error => { - console.log("ssdlkjidhaidjkol" + error.message); if(error.message == "401") { // user is not authorized // maybe the access token has expired Auth.removeAuthDataFromLocalStorage(); - // location.reload(); + // location.reload(); } else { console.log(error); // in case of contactservice not running, which should not happen in real deployment @@ -428,7 +449,7 @@ export class ProjectList extends LitElement { }); } - + /** * Gets called when the search input gets updated by the user. Updates listedProjects array correspondingly. @@ -475,7 +496,7 @@ export class ProjectList extends LitElement { // clear current project list this.projects = []; this.listedProjects = []; - + fetch(this.projectServiceURL + "/projects/" + this.system, { method: "GET", headers: Auth.getAuthHeaderWithSub() @@ -483,8 +504,6 @@ export class ProjectList extends LitElement { if(!response.ok) throw Error(response.status); return response.json(); }).then(data => { - console.log("data"); - console.log(data); console.log("Projects are", data.projects); // set loading to false, then the spinner gets hidden this.projectsLoading = false; @@ -511,7 +530,7 @@ export class ProjectList extends LitElement { // user is not authorized // maybe the access token has expired Auth.removeAuthDataFromLocalStorage(); - // location.reload(); + // location.reload(); } else { console.log(error); } @@ -525,39 +544,81 @@ export class ProjectList extends LitElement { * @private */ _onProjectItemClicked(projectName) { - // TODO: give full information on the project and whether the user is a member of it + this.selectedProject = this.getProjectByName(projectName); let event = new CustomEvent("project-selected", { detail: { message: "Selected project in project list.", - project: this.getProjectByName(projectName) + project: this.selectedProject }, bubbles: true }); this.dispatchEvent(event); + + // join Yjs room for the project metadata + if(this.y) { + // TODO: check if there is a way to clean up the previous used yjs object + //this.y.destroy(); + //this.y = undefined; + } + Y({ + db: { + name: "memory" // store the shared data in memory + }, + connector: { + name: "websockets-client", // use the websockets connector + room: "projects_" + this.system + "_" + projectName, + authI: { + accessToken: Auth.getAccessToken(), + basicAuth: Auth.getBasicAuthPart() + }, + //options: { resource: this.yjsResourcePath}, + url: this.yjsAddress + }, + share: { // specify the shared content + data: 'Map' + } + }).then(function(y) { + this.y = y; + const currentMetadataYjs = y.share.data.get("projectMetadata"); + + y.share.data.observe(event => { + if(event.name == "projectMetadata") { + this.selectedProject.metadata = y.share.data.get("projectMetadata"); + window.dispatchEvent(new CustomEvent("metadata-changed", { + detail: this.selectedProject.metadata, + bubbles: true + })); + } + }); + + if(!currentMetadataYjs) { + y.share.data.set("projectMetadata", this.selectedProject.metadata); + } + }.bind(this)); } - + getProjectByName(name) { return this.listedProjects.find(x => x.name === name); } - /** + /** * Gets called when the user clicks on a project in the project list. Fires an event that notifies the parent * elements that a project got selected. * @param projectName Name of the project that got selected in the project list. * @private */ - _onGroupChangeDone(project) { - // TODO: give full information on the project and whether the user is a member of it - let event = new CustomEvent("project-selected", { - detail: { - message: "Selected project in project list.", - project: project - }, - bubbles: true - }); - this.dispatchEvent(event); - } + _onGroupChangeDone(project) { + // TODO: give full information on the project and whether the user is a member of it + let event = new CustomEvent("project-selected", { + detail: { + message: "Selected project in project list.", + project: project + }, + bubbles: true + }); + this.dispatchEvent(event); + } /** * Gets called when the user clicks on the "Close" button in the create project dialog. diff --git a/frontend/util/auth.js b/frontend/util/auth.js index 7bc0fd2..578d568 100644 --- a/frontend/util/auth.js +++ b/frontend/util/auth.js @@ -28,13 +28,17 @@ export default class Auth { * Also adds a "fake" basic auth since las2peer seems to need a password. */ static getAuthHeaderWithSub() { - console.log(localStorage.getItem(this.KEY_USER_INFO)); var userInfo = JSON.parse(localStorage.getItem(this.KEY_USER_INFO)); return { "access-token": localStorage.getItem(this.KEY_ACCESS_TOKEN), "Authorization": "Basic "+ btoa(userInfo.preferred_username + ":" + userInfo.sub) } } + + static getBasicAuthPart() { + var userInfo = JSON.parse(localStorage.getItem(this.KEY_USER_INFO)); + return btoa(userInfo.preferred_username + ":" + userInfo.sub); + } /** From c493f2a2db97b7ee8d4b96b0da8b720ab46ab81a Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Mon, 5 Jul 2021 08:49:08 +0200 Subject: [PATCH 02/22] Updated package-lock.json --- frontend/package-lock.json | 745 +++++++++++++++++-------------------- 1 file changed, 341 insertions(+), 404 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index c256abf..4431410 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,33 +1,46 @@ { - "name": "las2peer-project-service-frontend", + "name": "@rwth-acis/las2peer-project-service-frontend", "version": "0.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", "dev": true, "requires": { - "@babel/highlight": "^7.12.13" + "@babel/highlight": "^7.14.5" } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", "dev": true }, "@babel/highlight": { - "version": "7.13.8", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.13.8.tgz", - "integrity": "sha512-4vrIhfJyfNf+lCtXC2ck1rKSzDwciqF7IWFhXXrSOUC2O5DrVp+w4c6ed4AllTxhTkUP5x2tYj41VaxdVMMRDw==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.12.11", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } } }, "@polymer/font-roboto": { @@ -36,9 +49,9 @@ "integrity": "sha512-tx5TauYSmzsIvmSqepUPDYbs4/Ejz2XbZ1IkD7JEGqkdNUJlh+9KU85G56Tfdk/xjEZ8zorFfN09OSwiMrIQWA==" }, "@polymer/iron-a11y-announcer": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@polymer/iron-a11y-announcer/-/iron-a11y-announcer-3.1.0.tgz", - "integrity": "sha512-lc5i4NKB8kSQHH0Hwu8WS3ym93m+J69OHJWSSBxwd17FI+h2wmgxDzeG9LI4ojMMck17/uc2pLe7g/UHt5/K/A==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@polymer/iron-a11y-announcer/-/iron-a11y-announcer-3.2.0.tgz", + "integrity": "sha512-We+hyaFHcg7Ke8ovsoxUpYEXFIJLHxMCDaLehTB4dELS+C+K0zMnGSiqQvb/YzGS+nSYpAfkQIyg1msOCdHMtA==", "requires": { "@polymer/polymer": "^3.0.0" } @@ -101,9 +114,9 @@ } }, "@polymer/iron-fit-behavior": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@polymer/iron-fit-behavior/-/iron-fit-behavior-3.0.2.tgz", - "integrity": "sha512-JndryJYbBR3gSN5IlST4rCHsd01+OyvYpRO6z5Zd3C6u5V/m07TwAtcf3aXwZ8WBNt2eLG28OcvdSO7XR2v2pg==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@polymer/iron-fit-behavior/-/iron-fit-behavior-3.1.0.tgz", + "integrity": "sha512-ABcgIYqrjhmUT8tiuolqeGttF/8pd3sEymUDrO1vXbZu4FWIvoLNndrMDFvs++AGd12Mjf5pYy84NJc6dB8Vig==", "requires": { "@polymer/polymer": "^3.0.0" } @@ -350,9 +363,9 @@ } }, "@polymer/paper-dropdown-menu": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@polymer/paper-dropdown-menu/-/paper-dropdown-menu-3.1.0.tgz", - "integrity": "sha512-orxH2FzBCjUleXex//STZHjgWXm7z09+JRPnhJld7xEheRDE7XrKsrsS0Xl7f8bBqUrisdaL9HTX9yBJ/k8bbQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@polymer/paper-dropdown-menu/-/paper-dropdown-menu-3.2.0.tgz", + "integrity": "sha512-2ohwSHF+RLSK6kA0UkkMiMQF6EZcaEYWAA25kfisI6DWie7yozKrpQNsqvwfOEHU6DdDMIotrOtH1TM88YS8Zg==", "requires": { "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", "@polymer/iron-form-element-behavior": "^3.0.0-pre.26", @@ -361,7 +374,7 @@ "@polymer/iron-validatable-behavior": "^3.0.0-pre.26", "@polymer/paper-behaviors": "^3.0.0-pre.27", "@polymer/paper-input": "^3.1.0", - "@polymer/paper-menu-button": "^3.0.0-pre.26", + "@polymer/paper-menu-button": "^3.1.0", "@polymer/paper-ripple": "^3.0.0-pre.26", "@polymer/paper-styles": "^3.0.0-pre.26", "@polymer/polymer": "^3.3.1" @@ -415,14 +428,14 @@ } }, "@polymer/paper-menu-button": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@polymer/paper-menu-button/-/paper-menu-button-3.0.1.tgz", - "integrity": "sha512-Rxte2Fp7N2BMI2FMM7tB25IkvD11DhjMklcg97JP1jnlHbJNrXPh5SSX2bdtabz49UE8vejIsrxZ+AGsB5nqIQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@polymer/paper-menu-button/-/paper-menu-button-3.1.0.tgz", + "integrity": "sha512-q0G0/rvYD/FFmIBMGCQWjfXzRqwFw9+WHSYV4uOQzM1Ln8LMXSAd+2CENsbVwtMh6fmBePj15ZlU8SM2dt1WDQ==", "requires": { "@polymer/iron-a11y-keys-behavior": "^3.0.0-pre.26", "@polymer/iron-behaviors": "^3.0.0-pre.26", "@polymer/iron-dropdown": "^3.0.0-pre.26", - "@polymer/iron-fit-behavior": "^3.0.0-pre.26", + "@polymer/iron-fit-behavior": "^3.1.0", "@polymer/neon-animation": "^3.0.0-pre.26", "@polymer/paper-styles": "^3.0.0-pre.26", "@polymer/polymer": "^3.0.0" @@ -504,9 +517,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.0.tgz", - "integrity": "sha512-qHjNIKYt5pCcn+5RUBQxK8krhRvf1HnyVgUCcFFcweDS7fhkOLZeYh0mhHK6Ery8/bb9tvN/ubPzmfF0qjDCTA==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -587,9 +600,9 @@ "dev": true }, "@types/express": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.11.tgz", - "integrity": "sha512-no+R6rW60JEc59977wIxreQVsIEOAYwgCqldrA/vkpCnbD7MqTefO97lmoBe4WE0F156bC4uLSP1XHDOySnChg==", + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.12.tgz", + "integrity": "sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q==", "dev": true, "requires": { "@types/body-parser": "*", @@ -599,9 +612,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.18", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.18.tgz", - "integrity": "sha512-m4JTwx5RUBNZvky/JJ8swEJPKFd8si08pPF2PfizYjGZOKr/svUWPcoUmLow6MmPzhasphB7gSTINY67xn3JNA==", + "version": "4.17.22", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.22.tgz", + "integrity": "sha512-WdqmrUsRS4ootGha6tVwk/IVHM1iorU8tGehftQD2NWiPniw/sm7xdJOIlXLwqdInL9wBw/p7oO8vaYEF3NDmA==", "dev": true, "requires": { "@types/node": "*", @@ -628,9 +641,9 @@ "dev": true }, "@types/koa": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.0.tgz", - "integrity": "sha512-hNs1Z2lX+R5sZroIy/WIGbPlH/719s/Nd5uIjSIAdHn9q+g7z6mxOnhwMjK1urE4/NUP0SOoYUOD4MnvD9FRNw==", + "version": "2.13.3", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.3.tgz", + "integrity": "sha512-TaujBV+Dhe/FvmSMZJtCFBms+bqQacgUebk/M2C2tq8iGmHE/DDf4DcW2Hc7NqusVZmy5xzrWOjtdPKNP+fTfw==", "dev": true, "requires": { "@types/accepts": "*", @@ -659,9 +672,9 @@ "dev": true }, "@types/node": { - "version": "14.14.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz", - "integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g==", + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.0.0.tgz", + "integrity": "sha512-TmCW5HoZ2o2/z2EYi109jLqIaPIi9y/lc2LmDCWzuCi35bcaQ+OtUh6nwBiFK7SOu25FAU5+YKdqFZUwtqGSdg==", "dev": true }, "@types/parse5": { @@ -671,9 +684,9 @@ "dev": true }, "@types/qs": { - "version": "6.9.5", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.5.tgz", - "integrity": "sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ==", + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==", "dev": true }, "@types/range-parser": { @@ -702,9 +715,9 @@ } }, "@types/ws": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.0.tgz", - "integrity": "sha512-Y29uQ3Uy+58bZrFLhX36hcI3Np37nqWE7ky5tjiDoy1GDZnIwVxS0CgF+s+1bXMzjKBFy+fqaRfb708iNzdinw==", + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-ijZ1vzRawI7QoWnTNL8KpHixd2b2XVb9I9HAqI3triPsh1EC0xH0Eg6w2O3TKbDCgiNNlJqfrof6j4T2I+l9vw==", "dev": true, "requires": { "@types/node": "*" @@ -717,46 +730,20 @@ "dev": true, "requires": { "semver": "^7.3.4" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", - "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } } }, "@web/dev-server": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.8.tgz", - "integrity": "sha512-HBxzKfRf2XENgTDgCRQ+dQ4F5TQFAMvsr5mB/KYBWKMJJ4PXHRYbfCFvhAgq6s2CrZzicGWp7VZpMHLEVjEqpQ==", + "version": "0.1.18", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.18.tgz", + "integrity": "sha512-mMXI9IgowYmRXlKfvDCAPDvfjtuqpo74GmbDbd1ZF5IIHanvCF4d1xBPxc+w403bnbwj2cqjWc8wed+zp8JSoQ==", "dev": true, "requires": { "@babel/code-frame": "^7.12.11", "@rollup/plugin-node-resolve": "^11.0.1", "@types/command-line-args": "^5.0.0", "@web/config-loader": "^0.1.3", - "@web/dev-server-core": "^0.3.7", - "@web/dev-server-rollup": "^0.3.2", + "@web/dev-server-core": "^0.3.12", + "@web/dev-server-rollup": "^0.3.5", "camelcase": "^6.2.0", "chalk": "^4.1.0", "command-line-args": "^5.1.1", @@ -764,71 +751,14 @@ "debounce": "^1.2.0", "deepmerge": "^4.2.2", "ip": "^1.1.5", - "open": "^7.3.0", + "open": "^8.0.2", "portfinder": "^1.0.28" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", - "dev": true - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } } }, "@web/dev-server-core": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.3.7.tgz", - "integrity": "sha512-uJJMe8V2hLTM6EYrmlzldT7W5TH0L6Sn2DX1YvNT6fx+ztNDhDwH46RJwmDix3+fUqP9Th0iaZ/BJc45T76+Bw==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.3.13.tgz", + "integrity": "sha512-bGJHPeFRWATNfuL9Pp2LfqhnmqhBCc5eOO5AWQa0X+WQAwHiFo6xZNfsvsnJ1gvxXgsE4jKBAGu9lQRisvFRFA==", "dev": true, "requires": { "@types/koa": "^2.11.6", @@ -836,7 +766,7 @@ "@web/parse5-utils": "^1.2.0", "chokidar": "^3.4.3", "clone": "^2.1.2", - "es-module-lexer": "^0.3.26", + "es-module-lexer": "^0.4.0", "get-stream": "^6.0.0", "is-stream": "^2.0.0", "isbinaryfile": "^4.0.6", @@ -851,48 +781,18 @@ "ws": "^7.4.2" }, "dependencies": { - "get-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", - "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", - "dev": true - }, - "koa-etag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-4.0.0.tgz", - "integrity": "sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==", - "dev": true, - "requires": { - "etag": "^1.8.1" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "ws": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz", + "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==", "dev": true } } }, "@web/dev-server-rollup": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.2.tgz", - "integrity": "sha512-c5ROnMAUrOJPXTQFFXZiOy0ta4Y5yXLA2QkD71htNhIcqeOI4yx6ueDtuFqovRxVI0qcWGk46UdfZ0UGT/9MIg==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.5.tgz", + "integrity": "sha512-eDLy3Da3qXqfPxOB7qZvR5NscXCZ63NyxoyPR0R/ukPs7ThvkAfwrtnKXckQo4vh5+FMytZXhyDcqPgeGDlGlg==", "dev": true, "requires": { "@web/dev-server-core": "^0.3.3", @@ -900,107 +800,16 @@ "parse5": "^6.0.1", "rollup": "^2.35.1", "whatwg-url": "^8.4.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tr46": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.0.2.tgz", - "integrity": "sha512-3n1qG+/5kg+jrbTzwAykB5yRYtQCTqOGKq5U5PE3b0a1/mzo6snDhjGS0zJVJunO0NrT3Dg1MLy5TjWP/UJppg==", - "dev": true, - "requires": { - "punycode": "^2.1.1" - } - }, - "webidl-conversions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", - "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true - }, - "whatwg-url": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.4.0.tgz", - "integrity": "sha512-vwTUFf6V4zhcPkWp/4CQPr1TW9Ml6SF4lVyaIMBdJw5i6qUUJ1QWM4Z6YYVkfka0OUIzVo/0aNtGVGk256IKWw==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^2.0.2", - "webidl-conversions": "^6.1.0" - } - } } }, "@web/parse5-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-1.2.1.tgz", - "integrity": "sha512-FX5evV+qf5GjnNtvyHhuVKPVFqnSSECp0MnMtRLL63GV3aygiKe6B+Iqt6Xn0n1NsfKyh7zo2pw/rk0JtG2Vpw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-1.2.2.tgz", + "integrity": "sha512-B68DoJ5qF8Cu3o7nDA2RQTCf9bslVz2b0WHTk3qir5YCbWfhnPEGhDOedOjbE8xDiHqgzI1zXQsJ2+655aluLA==", "dev": true, "requires": { "@types/parse5": "^5.0.3", "parse5": "^6.0.1" - }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true - } } }, "@webcomponents/shadycss": { @@ -1044,9 +853,9 @@ "dev": true }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -1182,31 +991,77 @@ "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=" }, + "camelcase": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "dev": true + }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" } }, "clone": { @@ -1261,11 +1116,22 @@ }, "dependencies": { "array-back": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", - "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "typical": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", @@ -1321,19 +1187,15 @@ "optional": true }, "debounce": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", - "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", "dev": true }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", + "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" }, "deep-equal": { "version": "1.0.1", @@ -1353,6 +1215,12 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true + }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -1409,11 +1277,6 @@ "ms": "0.6.2" } }, - "ms": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz", - "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=" - }, "parseuri": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.4.tgz", @@ -1421,17 +1284,6 @@ "requires": { "better-assert": "~1.0.0" } - }, - "ws": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-0.8.0.tgz", - "integrity": "sha1-rGDrrTEhIdAeFswzg9fsZ60PDx8=", - "requires": { - "bufferutil": "1.2.x", - "options": ">=0.0.5", - "ultron": "1.0.x", - "utf-8-validate": "1.2.x" - } } } }, @@ -1449,9 +1301,9 @@ } }, "es-module-lexer": { - "version": "0.3.26", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.3.26.tgz", - "integrity": "sha512-Va0Q/xqtrss45hWzP8CZJwzGSZJjDM5/MJRE3IXXnUCcVLElR9BRaE9F62BopysASyc4nM3uwhSW7FFB9nlWAA==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", "dev": true }, "escape-html": { @@ -1515,10 +1367,16 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -1644,18 +1502,18 @@ } }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", + "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", "dev": true, "requires": { "has": "^1.0.3" } }, "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, "is-extglob": { @@ -1665,9 +1523,9 @@ "dev": true }, "is-generator-function": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.8.tgz", - "integrity": "sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", + "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", "dev": true }, "is-glob": { @@ -1712,9 +1570,9 @@ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" }, "isbinaryfile": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.6.tgz", - "integrity": "sha512-ORrEy+SNVqUhrCaal4hA4fBzhggQQ+BaLntyPOdoEiwlKZW9BZiJXjg3RMiruE4tPEI3pyVPpySHQF/dKWperg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", + "integrity": "sha512-53h6XFniq77YdW+spoRrebh0mnmTxRPTlcuIArO57lmMdq4uBKFKaeTjnb92oYWrSn/LVL+LT+Hap2tFQj8V+w==", "dev": true }, "js-tokens": { @@ -1817,6 +1675,15 @@ } } }, + "koa-etag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-4.0.0.tgz", + "integrity": "sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==", + "dev": true, + "requires": { + "etag": "^1.8.1" + } + }, "koa-send": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", @@ -1826,6 +1693,23 @@ "debug": "^4.1.1", "http-errors": "^1.7.3", "resolve-path": "^1.4.0" + }, + "dependencies": { + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "koa-static": { @@ -1846,11 +1730,17 @@ "requires": { "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, "las2peer-frontend-statusbar": { - "version": "github:rwth-acis/las2peer-frontend-statusbar#9032b23df7b438edc0e4b856fad3472524e48d3b", + "version": "github:rwth-acis/las2peer-frontend-statusbar#b2f8b8bd7381a7057bd7eefbf10eaf4748616939", "from": "github:rwth-acis/las2peer-frontend-statusbar#fixUserGroups", "requires": { "@polymer/lit-element": "^0.6.3", @@ -1859,7 +1749,7 @@ } }, "las2peer-frontend-user-widget": { - "version": "github:rwth-acis/las2peer-frontend-user-widget#38f29e91caf19bc2d6066ec321e7b1b8c2167256", + "version": "github:rwth-acis/las2peer-frontend-user-widget#3c46f97d7dc7bed9de276cb7e2adba65817010f4", "from": "github:rwth-acis/las2peer-frontend-user-widget#fixUserGroups", "requires": { "@polymer/iron-ajax": "^3.0.1", @@ -1886,17 +1776,17 @@ } }, "lit-element": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.4.0.tgz", - "integrity": "sha512-pBGLglxyhq/Prk2H91nA0KByq/hx/wssJBQFiYqXhGDvEnY31PRGYf1RglVzyLeRysu0IHm2K0P196uLLWmwFg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-2.5.1.tgz", + "integrity": "sha512-ogu7PiJTA33bEK0xGu1dmaX5vhcRjBXCFexPja0e7P7jqLhTpNKYRPmE+GmiCaRVAbiQKGkUgkh/i6+bh++dPQ==", "requires": { "lit-html": "^1.1.1" } }, "lit-html": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.3.0.tgz", - "integrity": "sha512-0Q1bwmaFH9O14vycPHw8C/IeHMk/uSDldVLIefu/kfbTBGIc44KGH6A8p1bDfxUfHdc8q6Ct7kQklWoHgr4t1Q==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-1.4.1.tgz", + "integrity": "sha512-B9btcSgPYb1q4oSOb/PrOT6Z/H+r6xuNzfH4lFli/AWhYwdtrgQkQWBbIc6mdnf6E2IL3gDXdkkqNktpU0OZQA==" }, "lodash": { "version": "4.17.21", @@ -1910,11 +1800,14 @@ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } }, "media-typer": { "version": "0.3.0", @@ -1923,18 +1816,18 @@ "dev": true }, "mime-db": { - "version": "1.46.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", - "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==", + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", "dev": true }, "mime-types": { - "version": "2.1.29", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", - "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", "dev": true, "requires": { - "mime-db": "1.46.0" + "mime-db": "1.48.0" } }, "minimist": { @@ -1953,10 +1846,9 @@ } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz", + "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=" }, "nan": { "version": "2.14.2", @@ -2006,13 +1898,14 @@ "dev": true }, "open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/open/-/open-8.2.1.tgz", + "integrity": "sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==", "dev": true, "requires": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, "openidconnect-signin": { @@ -2028,6 +1921,12 @@ "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz", "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=" }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, "parsejson": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.1.tgz", @@ -2065,15 +1964,15 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "portfinder": { @@ -2095,6 +1994,12 @@ "requires": { "ms": "^2.1.1" } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, @@ -2105,9 +2010,9 @@ "dev": true }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { "picomatch": "^2.2.1" @@ -2178,12 +2083,12 @@ } }, "rollup": { - "version": "2.40.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.40.0.tgz", - "integrity": "sha512-WiOGAPbXoHu+TOz6hyYUxIksOwsY/21TRWoO593jgYt8mvYafYqQl+axaA8y1z2HFazNUUrsMSjahV2A6/2R9A==", + "version": "2.52.7", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.7.tgz", + "integrity": "sha512-55cSH4CCU6MaPr9TAOyrIC+7qFCHscL7tkNsm1MBfIJRRqRbCEY0mmeFn4Wg8FKsHtEH8r389Fz38r/o+kgXLg==", "dev": true, "requires": { - "fsevents": "~2.3.1" + "fsevents": "~2.3.2" } }, "safe-buffer": { @@ -2192,6 +2097,15 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", @@ -2214,13 +2128,6 @@ "parseuri": "0.0.2", "socket.io-parser": "2.2.4", "to-array": "0.1.3" - }, - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" - } } }, "socket.io-parser": { @@ -2233,13 +2140,6 @@ "debug": "0.7.4", "isarray": "0.0.1", "json3": "3.2.6" - }, - "dependencies": { - "debug": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz", - "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=" - } } }, "statuses": { @@ -2258,9 +2158,9 @@ } }, "table-layout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", - "integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", "dev": true, "requires": { "array-back": "^4.0.1", @@ -2270,9 +2170,9 @@ }, "dependencies": { "array-back": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", - "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", "dev": true }, "typical": { @@ -2303,6 +2203,15 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, "tsscmp": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", @@ -2359,14 +2268,31 @@ "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true + }, + "whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "requires": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + } + }, "wordwrapjs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz", - "integrity": "sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", "dev": true, "requires": { "reduce-flatten": "^2.0.0", - "typical": "^5.0.0" + "typical": "^5.2.0" }, "dependencies": { "typical": { @@ -2378,10 +2304,15 @@ } }, "ws": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.3.tgz", - "integrity": "sha512-hr6vCR76GsossIRsr8OLR9acVVm1jyfEWvhbNjtgPOrfvAlKzvyeg/P6r8RuDjRyrcQoPQT7K0DGEPc7Ae6jzA==", - "dev": true + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-0.8.0.tgz", + "integrity": "sha1-rGDrrTEhIdAeFswzg9fsZ60PDx8=", + "requires": { + "bufferutil": "1.2.x", + "options": ">=0.0.5", + "ultron": "1.0.x", + "utf-8-validate": "1.2.x" + } }, "xmlhttprequest": { "version": "https://github.com/rase-/node-XMLHttpRequest/archive/a6b6f2.tar.gz", @@ -2405,6 +2336,12 @@ "socket.io-client": "1.3.7" } }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "yjs": { "version": "12.3.3", "resolved": "https://registry.npmjs.org/yjs/-/yjs-12.3.3.tgz", From dbe5d137e60c5add3d315db89cb58c3c3fe78753 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Mon, 5 Jul 2021 09:03:19 +0200 Subject: [PATCH 03/22] Add npmjs badge --- README.md | 1 + frontend/README.md | 1 + 2 files changed, 2 insertions(+) diff --git a/README.md b/README.md index 6048c87..6c9ce27 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ [![Java CI with Gradle](https://github.com/rwth-acis/las2peer-project-service/actions/workflows/gradle.yml/badge.svg?branch=main)](https://github.com/rwth-acis/las2peer-project-service/actions/workflows/gradle.yml) [![codecov](https://codecov.io/gh/rwth-acis/las2peer-project-service/branch/main/graph/badge.svg)](https://codecov.io/gh/rwth-acis/las2peer-project-service) +[![npmjs](https://img.shields.io/npm/v/@rwth-acis/las2peer-project-service-frontend)](https://www.npmjs.com/package/@rwth-acis/las2peer-project-service-frontend) A [las2peer](https://github.com/rwth-acis/las2peer) service for managing projects and their members. We provide a project-list [LitElement](/frontend) which can be used as a frontend for this service. diff --git a/frontend/README.md b/frontend/README.md index 56f71ff..7c5bf36 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,4 +1,5 @@ # \ +[![npmjs](https://img.shields.io/npm/v/@rwth-acis/las2peer-project-service-frontend)](https://www.npmjs.com/package/@rwth-acis/las2peer-project-service-frontend) A LitElement for listing projects given by the las2peer-project-service and for creating new projects. From 34eb3c3c44434fec4c191e0362b331aa6e622a4e Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 18 Jul 2021 07:58:40 +0200 Subject: [PATCH 04/22] Test using Yjs secured rooms --- frontend/package-lock.json | 253 ++++++++++++++++++++----------------- frontend/package.json | 4 +- frontend/project-list.js | 2 +- 3 files changed, 143 insertions(+), 116 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 4431410..e8931ff 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -551,9 +551,9 @@ } }, "@types/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-a6bTJ21vFOGIkwM0kzh9Yr89ziVxq4vYH2fQ6N8AeipEzai/cFK6aGMArIkUeIdRIgpwQa+2bXiLuUJCpSf2Cg==", "dev": true, "requires": { "@types/connect": "*", @@ -561,30 +561,30 @@ } }, "@types/command-line-args": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.0.0.tgz", - "integrity": "sha512-4eOPXyn5DmP64MCMF8ePDvdlvlzt2a+F8ZaVjqmh2yFCpGjc1kI3kGnCFYX9SCsGTjQcWIyVZ86IHCEyjy/MNg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.0.1.tgz", + "integrity": "sha512-+pAMlf+fHYWFDf4OvzEXPsVKLIahB66drrWXPxMe9IapFxjF5Ir+kFAR9qctKxZW4weuFL5ydm3V5yCGnJieew==", "dev": true }, "@types/connect": { - "version": "3.4.34", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.34.tgz", - "integrity": "sha512-ePPA/JuI+X0vb+gSWlPKOY0NdNAie/rPUqX2GUPpbZwiKTkSPhjXWuee47E4MtE54QVzGCQMQkAL6JhV2E1+cQ==", + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, "requires": { "@types/node": "*" } }, "@types/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-P1bffQfhD3O4LW0ioENXUhZ9OIa0Zn+P7M+pWgkCKaT53wVLSq0mrKksCID/FGHpFhRSxRGhgrQmfhRuzwtKdg==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/@types/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-0mPF08jn9zYI0n0Q/Pnz7C4kThdSt+6LD4amsrYDDpgBfrVWa3TcCOxKX1zkGgYniGagRv8heN2cbh+CAn+uuQ==", "dev": true }, "@types/cookies": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.6.tgz", - "integrity": "sha512-FK4U5Qyn7/Sc5ih233OuHO0qAkOpEcD/eG6584yEiLKizTFRny86qHLe/rej3HFQrkBuUjF4whFliAdODbVN/w==", + "version": "0.7.7", + "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.7.tgz", + "integrity": "sha512-h7BcvPUogWbKCzBR2lY4oqaZbO3jXZksexYJVFvkrFeLgbZjQkU4x8pRq6eg2MHXQhY0McQdqmmsxRWlVAHooA==", "dev": true, "requires": { "@types/connect": "*", @@ -600,9 +600,9 @@ "dev": true }, "@types/express": { - "version": "4.17.12", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.12.tgz", - "integrity": "sha512-pTYas6FrP15B1Oa0bkN5tQMNqOcVXa9j4FTFtO8DWI9kppKib+6NJtfTOOLcwxuuYvcX2+dVG6et1SxW/Kc17Q==", + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dev": true, "requires": { "@types/body-parser": "*", @@ -612,9 +612,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.22", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.22.tgz", - "integrity": "sha512-WdqmrUsRS4ootGha6tVwk/IVHM1iorU8tGehftQD2NWiPniw/sm7xdJOIlXLwqdInL9wBw/p7oO8vaYEF3NDmA==", + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.24.tgz", + "integrity": "sha512-3UJuW+Qxhzwjq3xhwXm2onQcFHn76frIYVbTu+kn24LFxI+dEhdfISDFovPB8VpEgW8oQCTpRuCe+0zJxB7NEA==", "dev": true, "requires": { "@types/node": "*", @@ -629,9 +629,9 @@ "dev": true }, "@types/http-errors": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.0.tgz", - "integrity": "sha512-2aoSC4UUbHDj2uCsCxcG/vRMXey/m17bC7UwitVm5hn22nI8O8Y9iDpA76Orc+DWkQ4zZrOKEshCqR/jSuXAHA==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-e+2rjEwK6KDaNOm5Aa9wNGgyS9oSZU/4pfSMMPYNOfjvFI0WVXm29+ITRFr6aKDvvKo7uU1jV68MW4ScsfDi7Q==", "dev": true }, "@types/keygrip": { @@ -641,9 +641,9 @@ "dev": true }, "@types/koa": { - "version": "2.13.3", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.3.tgz", - "integrity": "sha512-TaujBV+Dhe/FvmSMZJtCFBms+bqQacgUebk/M2C2tq8iGmHE/DDf4DcW2Hc7NqusVZmy5xzrWOjtdPKNP+fTfw==", + "version": "2.13.4", + "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.13.4.tgz", + "integrity": "sha512-dfHYMfU+z/vKtQB7NUrthdAEiSvnLebvBjwHtfFmpZmB7em2N3WVQdHgnFq+xvyVgxW5jKDmjWfLD3lw4g4uTw==", "dev": true, "requires": { "@types/accepts": "*", @@ -672,9 +672,9 @@ "dev": true }, "@types/node": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.0.0.tgz", - "integrity": "sha512-TmCW5HoZ2o2/z2EYi109jLqIaPIi9y/lc2LmDCWzuCi35bcaQ+OtUh6nwBiFK7SOu25FAU5+YKdqFZUwtqGSdg==", + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.3.3.tgz", + "integrity": "sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ==", "dev": true }, "@types/parse5": { @@ -684,15 +684,15 @@ "dev": true }, "@types/qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==", + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", "dev": true }, "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", "dev": true }, "@types/resolve": { @@ -705,9 +705,9 @@ } }, "@types/serve-static": { - "version": "1.13.9", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.9.tgz", - "integrity": "sha512-ZFqF6qa48XsPdjXV5Gsz0Zqmux2PerNd3a/ktL45mHpa19cuMi/cL8tcxdAx497yRh+QtYPuofjT9oWw9P7nkA==", + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "dev": true, "requires": { "@types/mime": "^1", @@ -782,9 +782,9 @@ }, "dependencies": { "ws": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.2.tgz", - "integrity": "sha512-lkF7AWRicoB9mAgjeKbGqVUekLnSNO4VjKVnuPHpQeOxZOErX6BPXwJk70nFslRCEEA8EVW7ZjKwXaP9N+1sKQ==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", "dev": true } } @@ -832,6 +832,11 @@ "negotiator": "0.6.2" } }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + }, "after": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/after/-/after-0.8.1.tgz", @@ -882,35 +887,6 @@ "lodash": "^4.17.14" } }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", - "optional": true, - "requires": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" - } - }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "optional": true, - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" - }, - "dependencies": { - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", - "optional": true - } - } - }, "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", @@ -921,6 +897,11 @@ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.2.tgz", "integrity": "sha1-R030qfLaJOBd8xWMOx2zw81GoVQ=" }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, "benchmark": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-1.0.0.tgz", @@ -1092,12 +1073,12 @@ "dev": true }, "command-line-args": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.1.tgz", - "integrity": "sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.3.tgz", + "integrity": "sha512-a5tF6mjqRSOBswBwdMkKY47JQ464Dkg9Pcwbxwo9wxRhKWZjtBktmBASllk3AMJ7qBuWgsAGtVa7b2/+EsymOQ==", "dev": true, "requires": { - "array-back": "^3.0.1", + "array-back": "^3.1.0", "find-replace": "^3.0.0", "lodash.camelcase": "^4.3.0", "typical": "^4.0.0" @@ -1162,6 +1143,14 @@ "dev": true, "requires": { "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } } }, "content-type": { @@ -1181,10 +1170,14 @@ } }, "core-js": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", - "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", - "optional": true + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", + "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==" + }, + "crypto-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", + "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" }, "debounce": { "version": "1.2.1", @@ -1502,9 +1495,9 @@ } }, "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", + "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", "dev": true, "requires": { "has": "^1.0.3" @@ -1586,11 +1579,6 @@ "resolved": "https://registry.npmjs.org/json3/-/json3-3.2.6.tgz", "integrity": "sha1-9u/JPAagTemuxTBT3yVZuxniA4s=" }, - "jsrsasign": { - "version": "8.0.24", - "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-8.0.24.tgz", - "integrity": "sha512-u45jAyusqUpyGbFc2IbHoeE4rSkoBWQgLe/w99temHenX+GyCz4nflU5sjK7ajU1ffZTezl6le7u43Yjr/lkQg==" - }, "keygrip": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", @@ -1746,11 +1734,40 @@ "@polymer/lit-element": "^0.6.3", "las2peer-frontend-user-widget": "github:rwth-acis/las2peer-frontend-user-widget#fixUserGroups", "openidconnect-signin": "github:rwth-acis/openidconnect-signin" + }, + "dependencies": { + "las2peer-frontend-user-widget": { + "version": "github:rwth-acis/las2peer-frontend-user-widget#3c46f97d7dc7bed9de276cb7e2adba65817010f4", + "from": "github:rwth-acis/las2peer-frontend-user-widget#fixUserGroups", + "requires": { + "@polymer/iron-ajax": "^3.0.1", + "@polymer/iron-dropdown": "^3.0.1", + "@polymer/iron-flex-layout": "^3.0.1", + "@polymer/iron-form": "^3.0.1", + "@polymer/iron-icon": "^3.0.1", + "@polymer/iron-icons": "^3.0.1", + "@polymer/iron-list": "^3.0.1", + "@polymer/paper-badge": "^3.0.1", + "@polymer/paper-button": "^3.0.1", + "@polymer/paper-card": "^3.0.1", + "@polymer/paper-dialog": "^3.0.1", + "@polymer/paper-dialog-scrollable": "^3.0.1", + "@polymer/paper-dropdown-menu": "^3.0.1", + "@polymer/paper-icon-button": "^3.0.1", + "@polymer/paper-input": "^3.0.1", + "@polymer/paper-item": "^3.0.1", + "@polymer/paper-spinner": "^3.0.1", + "@polymer/paper-styles": "^3.0.1", + "@polymer/paper-toast": "^3.0.1", + "@polymer/paper-toggle-button": "^3.0.1", + "@webcomponents/webcomponentsjs": "^2.2.1" + } + } } }, "las2peer-frontend-user-widget": { - "version": "github:rwth-acis/las2peer-frontend-user-widget#3c46f97d7dc7bed9de276cb7e2adba65817010f4", - "from": "github:rwth-acis/las2peer-frontend-user-widget#fixUserGroups", + "version": "github:rwth-acis/las2peer-frontend-user-widget#63ad251f95b323938b78e0d68b14ec67a1a05511", + "from": "github:rwth-acis/las2peer-frontend-user-widget#0.3.0", "requires": { "@polymer/iron-ajax": "^3.0.1", "@polymer/iron-dropdown": "^3.0.1", @@ -1874,12 +1891,14 @@ "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" }, "oidc-client": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/oidc-client/-/oidc-client-1.6.1.tgz", - "integrity": "sha512-buA9G0hlFjUwxoL/xuHunBtTgoICtJSojnZtATqMliUTKxPYAzHprOQ85Lj0hgF+Zv8lI/ViqaNFDG0Z5KCUKA==", + "version": "github:rwth-acis/oidc-client-js#d3205cf842a127bc645446a9aada46c9801a4709", + "from": "github:rwth-acis/oidc-client-js", "requires": { - "babel-polyfill": ">=6.9.1", - "jsrsasign": "^8.0.12" + "acorn": "^7.4.1", + "base64-js": "^1.5.1", + "core-js": "^3.8.3", + "crypto-js": "^4.0.0", + "serialize-javascript": "^4.0.0" } }, "on-finished": { @@ -1909,11 +1928,11 @@ } }, "openidconnect-signin": { - "version": "github:rwth-acis/openidconnect-signin#e9167a965acacfa3e686eb6d78a59e4b863939b4", + "version": "github:rwth-acis/openidconnect-signin#35c3810a25964c6b8792e2ee7c14b9cec3be5613", "from": "github:rwth-acis/openidconnect-signin", "requires": { - "lit-element": "^2.0.0", - "oidc-client": "1.6.1" + "lit-element": "^2.5.1", + "oidc-client": "github:rwth-acis/oidc-client-js" } }, "options": { @@ -2009,6 +2028,14 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -2024,12 +2051,6 @@ "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", "dev": true }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "optional": true - }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", @@ -2083,19 +2104,18 @@ } }, "rollup": { - "version": "2.52.7", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.52.7.tgz", - "integrity": "sha512-55cSH4CCU6MaPr9TAOyrIC+7qFCHscL7tkNsm1MBfIJRRqRbCEY0mmeFn4Wg8FKsHtEH8r389Fz38r/o+kgXLg==", + "version": "2.53.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.53.2.tgz", + "integrity": "sha512-1CtEYuS5CRCzFZ7SNW5528SlDlk4VDXIRGwbm/2POQxA/G4+7/crIqJwkmnj8Q/74hGx4oVlNvh4E1CJQ5hZ6w==", "dev": true, "requires": { "fsevents": "~2.3.2" } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "semver": { "version": "7.3.5", @@ -2106,6 +2126,14 @@ "lru-cache": "^6.0.0" } }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "^2.1.0" + } + }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", @@ -2329,9 +2357,8 @@ "integrity": "sha512-OrcReh6DgZhz5R7JGXqAH53T0Ygw24qcxKj4jN9w2DIi2eIiKFCD5Y6apBTTNxiw2FaVP15F+M8phRRIMXFGBQ==" }, "y-websockets-client": { - "version": "8.0.16", - "resolved": "https://registry.npmjs.org/y-websockets-client/-/y-websockets-client-8.0.16.tgz", - "integrity": "sha1-pQsK11RpUlQqPTMAvU0OhaL7dEM=", + "version": "github:rwth-acis/y-websockets-client#1b23b939ed8ddf7830f47510d59903d44c99bd03", + "from": "github:rwth-acis/y-websockets-client#v8", "requires": { "socket.io-client": "1.3.7" } diff --git a/frontend/package.json b/frontend/package.json index d4a70cb..eac0441 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -25,11 +25,11 @@ "@polymer/paper-spinner": "^3.0.2", "@polymer/paper-tabs": "^3.1.0", "las2peer-frontend-statusbar": "github:rwth-acis/las2peer-frontend-statusbar#fixUserGroups", - "las2peer-frontend-user-widget": "github:rwth-acis/las2peer-frontend-user-widget#fixUserGroups", + "las2peer-frontend-user-widget": "github:rwth-acis/las2peer-frontend-user-widget#0.3.0", "lit-element": "^2.4.0", "y-map": "^10.1.3", "y-memory": "^8.0.9", - "y-websockets-client": "^8.0.16", + "y-websockets-client": "rwth-acis/y-websockets-client#v8", "yjs": "^12.3.3" }, "devDependencies": { diff --git a/frontend/project-list.js b/frontend/project-list.js index 374b937..93d8353 100644 --- a/frontend/project-list.js +++ b/frontend/project-list.js @@ -567,7 +567,7 @@ export class ProjectList extends LitElement { connector: { name: "websockets-client", // use the websockets connector room: "projects_" + this.system + "_" + projectName, - authI: { + authInfo: { accessToken: Auth.getAccessToken(), basicAuth: Auth.getBasicAuthPart() }, From aac1e896c58f7c1055de8a76ef771e947a78b242 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 18 Jul 2021 15:33:00 +0200 Subject: [PATCH 05/22] Add metadata-reload-request to frontend --- frontend/package-lock.json | 2 +- frontend/package.json | 2 +- frontend/project-list.js | 27 +++++++++++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index e8931ff..7ac3336 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,6 +1,6 @@ { "name": "@rwth-acis/las2peer-project-service-frontend", - "version": "0.0.0", + "version": "0.0.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index eac0441..aca69a7 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "@rwth-acis/las2peer-project-service-frontend", - "version": "0.0.0", + "version": "0.0.2", "description": "Frontend for las2peer project service.", "main": "project-list.js", "module": "project-list.js", diff --git a/frontend/project-list.js b/frontend/project-list.js index 93d8353..465b568 100644 --- a/frontend/project-list.js +++ b/frontend/project-list.js @@ -219,6 +219,7 @@ export class ProjectList extends LitElement { this.projectServiceURL = "http://127.0.0.1:8080"; this.contactServiceURL = "http://127.0.0.1:8080/contactservice"; window.addEventListener('metadata-change-request', this._changeMetadata.bind(this)); + window.addEventListener('metadata-reload-request', this._reloadMetadata.bind(this)); this.disableAllProjects = false; this.yjsAddress = "http://127.0.0.1:1234"; this.yjsResourcePath = "./socket.io"; @@ -274,6 +275,32 @@ export class ProjectList extends LitElement { }); } + /** + * Gets called on the "metadata-reload-request" event and re-fetches the metadata of the currently selected + * project. The fetched metadata gets put into the project's Yjs room. + * This event should be used if the metadata got updated from somewhere else than the frontend, because then + * using the "metadata-change-request" event is not working anymore as the project-list contains out-of-date + * metadata and is not able to send the update metadata request to the project service successfully. + * @param event + * @private + */ + _reloadMetadata(event) { + fetch(this.projectServiceURL + "/projects/" + this.system + "/" + this.selectedProject.name, { + method: "GET", + headers: Auth.getAuthHeaderWithSub() + }).then(response => { + if(!response.ok) throw Error(response.status); + return response.json(); + }).then(data => { + const metadata = data.metadata; + + if(this.y) { + // update metadata in yjs room => this will also update it in this.selectedProject automatically + this.y.share.data.set("projectMetadata", metadata); + } + }); + } + render() { return html`
From b6e0d39206c734c346eb3eb79e0370251b40132e Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Mon, 19 Jul 2021 14:18:22 +0200 Subject: [PATCH 06/22] Extended demo to showcase metadata sharing via Yjs --- frontend/dev/demo-element.js | 23 ++++++++++++++-------- frontend/index.html | 5 +++++ frontend/package-lock.json | 37 ++++-------------------------------- frontend/package.json | 2 +- 4 files changed, 25 insertions(+), 42 deletions(-) diff --git a/frontend/dev/demo-element.js b/frontend/dev/demo-element.js index ed738b3..ac579e0 100644 --- a/frontend/dev/demo-element.js +++ b/frontend/dev/demo-element.js @@ -33,9 +33,11 @@ export class DemoElement extends LitElement { console.log(event.detail.access_token); Auth.setAuthDataToLocalStorage(event.detail.access_token); - var url = localStorage.userinfo_endpoint + '?access_token=' + localStorage.access_token; + var url = "https://api.learning-layers.eu/auth/realms/main/protocol/openid-connect/userinfo"; console.log(url); - fetch(url, {method: "GET"}).then(response => { + fetch(url, {method: "GET", headers: { + "Authorization": "Bearer " + Auth.getAccessToken() + }}).then(response => { if(response.ok) { return response.json(); } @@ -61,8 +63,8 @@ export class DemoElement extends LitElement { service="Project List Demo" oidcpopupsigninurl="/callbacks/popup-signin-callback.html" oidcpopupsignouturl="/callbacks/popup-signout-callback.html" - oidcsilentsigninturl="/callbacks/silent-callback.html" - oidcclientid="d8e6c0d3-fb09-49cc-9a6d-f1763d39a0a7" + oidcsilentsigninurl="/callbacks/silent-callback.html" + oidcclientid="localtestclient" suppresswidgeterror="true" autoAppendWidget=true > @@ -88,11 +90,9 @@ export class DemoElement extends LitElement { } _triggerChange(event){ - let events = new CustomEvent("metadata-changed", { + let events = new CustomEvent("metadata-change-request", { detail: { - message: "Changed Project", - project: this.selectedProject, - newMetadata: {"random":this.shadowRoot.querySelector("#metadataInput").value} + "random": this.shadowRoot.querySelector("#metadataInput").value }, bubbles: true }); @@ -116,6 +116,13 @@ export class DemoElement extends LitElement { */ _onProjectsLoaded(event) { let projects = event.detail.projects; + + window.addEventListener("metadata-changed", e => { + console.log("metadata has changed", e.detail); + const project = JSON.parse(this.selectedProject); + project.metadata = e.detail; + this.selectedProject = JSON.stringify(project); + }); // uncomment this, if you want to test the online user list /*let mapProjectRooms = {}; diff --git a/frontend/index.html b/frontend/index.html index 782c6fc..b278820 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -5,6 +5,11 @@ project-list Demo + + + + +
diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 7ac3336..9254e47 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1728,41 +1728,12 @@ } }, "las2peer-frontend-statusbar": { - "version": "github:rwth-acis/las2peer-frontend-statusbar#b2f8b8bd7381a7057bd7eefbf10eaf4748616939", - "from": "github:rwth-acis/las2peer-frontend-statusbar#fixUserGroups", + "version": "github:rwth-acis/las2peer-frontend-statusbar#b969a8d05c208e6702bf650e5d6b6b3b42980890", + "from": "github:rwth-acis/las2peer-frontend-statusbar#0.3.1", "requires": { "@polymer/lit-element": "^0.6.3", - "las2peer-frontend-user-widget": "github:rwth-acis/las2peer-frontend-user-widget#fixUserGroups", + "las2peer-frontend-user-widget": "github:rwth-acis/las2peer-frontend-user-widget#0.3.0", "openidconnect-signin": "github:rwth-acis/openidconnect-signin" - }, - "dependencies": { - "las2peer-frontend-user-widget": { - "version": "github:rwth-acis/las2peer-frontend-user-widget#3c46f97d7dc7bed9de276cb7e2adba65817010f4", - "from": "github:rwth-acis/las2peer-frontend-user-widget#fixUserGroups", - "requires": { - "@polymer/iron-ajax": "^3.0.1", - "@polymer/iron-dropdown": "^3.0.1", - "@polymer/iron-flex-layout": "^3.0.1", - "@polymer/iron-form": "^3.0.1", - "@polymer/iron-icon": "^3.0.1", - "@polymer/iron-icons": "^3.0.1", - "@polymer/iron-list": "^3.0.1", - "@polymer/paper-badge": "^3.0.1", - "@polymer/paper-button": "^3.0.1", - "@polymer/paper-card": "^3.0.1", - "@polymer/paper-dialog": "^3.0.1", - "@polymer/paper-dialog-scrollable": "^3.0.1", - "@polymer/paper-dropdown-menu": "^3.0.1", - "@polymer/paper-icon-button": "^3.0.1", - "@polymer/paper-input": "^3.0.1", - "@polymer/paper-item": "^3.0.1", - "@polymer/paper-spinner": "^3.0.1", - "@polymer/paper-styles": "^3.0.1", - "@polymer/paper-toast": "^3.0.1", - "@polymer/paper-toggle-button": "^3.0.1", - "@webcomponents/webcomponentsjs": "^2.2.1" - } - } } }, "las2peer-frontend-user-widget": { @@ -2357,7 +2328,7 @@ "integrity": "sha512-OrcReh6DgZhz5R7JGXqAH53T0Ygw24qcxKj4jN9w2DIi2eIiKFCD5Y6apBTTNxiw2FaVP15F+M8phRRIMXFGBQ==" }, "y-websockets-client": { - "version": "github:rwth-acis/y-websockets-client#1b23b939ed8ddf7830f47510d59903d44c99bd03", + "version": "github:rwth-acis/y-websockets-client#a9774fe79b6ac85e41fff41af751ab9f48cb9fd9", "from": "github:rwth-acis/y-websockets-client#v8", "requires": { "socket.io-client": "1.3.7" diff --git a/frontend/package.json b/frontend/package.json index aca69a7..99fe870 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -24,7 +24,7 @@ "@polymer/paper-listbox": "^3.0.1", "@polymer/paper-spinner": "^3.0.2", "@polymer/paper-tabs": "^3.1.0", - "las2peer-frontend-statusbar": "github:rwth-acis/las2peer-frontend-statusbar#fixUserGroups", + "las2peer-frontend-statusbar": "github:rwth-acis/las2peer-frontend-statusbar#0.3.1", "las2peer-frontend-user-widget": "github:rwth-acis/las2peer-frontend-user-widget#0.3.0", "lit-element": "^2.4.0", "y-map": "^10.1.3", From 41b0878bf99c2663bdc0b9e2502e8b1671fe1b9d Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sat, 31 Jul 2021 13:58:17 +0200 Subject: [PATCH 07/22] Remove y.close() in online user list helper --- frontend/util/online-user-list-helper.js | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/util/online-user-list-helper.js b/frontend/util/online-user-list-helper.js index 2bff367..5e9a049 100644 --- a/frontend/util/online-user-list-helper.js +++ b/frontend/util/online-user-list-helper.js @@ -49,7 +49,6 @@ export default class OnlineUserListHelper { y.share.join.set("invisible_user", false); setTimeout(function () { - y.close(); resolve(list); }, 5000); })); From 016c341eafe4bae771161773154c5c90225dac6c Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 1 Aug 2021 13:18:13 +0200 Subject: [PATCH 08/22] Update version of frontend widget to 0.0.3 --- frontend/package-lock.json | 2 +- frontend/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 9254e47..f269a71 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,6 +1,6 @@ { "name": "@rwth-acis/las2peer-project-service-frontend", - "version": "0.0.2", + "version": "0.0.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index 99fe870..1e89600 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "@rwth-acis/las2peer-project-service-frontend", - "version": "0.0.2", + "version": "0.0.3", "description": "Frontend for las2peer project service.", "main": "project-list.js", "module": "project-list.js", From 831fc38235cccc1a5e763bae905e982f1e815e56 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 1 Aug 2021 18:09:40 +0200 Subject: [PATCH 09/22] Use copy of project and metadata when sharing it --- frontend/project-list.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/frontend/project-list.js b/frontend/project-list.js index 465b568..aed998e 100644 --- a/frontend/project-list.js +++ b/frontend/project-list.js @@ -575,7 +575,7 @@ export class ProjectList extends LitElement { let event = new CustomEvent("project-selected", { detail: { message: "Selected project in project list.", - project: this.selectedProject + project: JSON.parse(JSON.stringify(this.selectedProject)) }, bubbles: true }); @@ -612,14 +612,14 @@ export class ProjectList extends LitElement { if(event.name == "projectMetadata") { this.selectedProject.metadata = y.share.data.get("projectMetadata"); window.dispatchEvent(new CustomEvent("metadata-changed", { - detail: this.selectedProject.metadata, + detail: JSON.parse(JSON.stringify(this.selectedProject.metadata)), bubbles: true })); } }); if(!currentMetadataYjs) { - y.share.data.set("projectMetadata", this.selectedProject.metadata); + y.share.data.set("projectMetadata", JSON.parse(JSON.stringify(this.selectedProject.metadata))); } }.bind(this)); } From 458920fd001ea8ce58ea9c86121e47ad9feb0c67 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 8 Aug 2021 14:18:28 +0200 Subject: [PATCH 10/22] Correct frontend version in package.json --- frontend/package-lock.json | 2 +- frontend/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f269a71..4840b45 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,6 +1,6 @@ { "name": "@rwth-acis/las2peer-project-service-frontend", - "version": "0.0.3", + "version": "0.0.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index 1e89600..859c23d 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "@rwth-acis/las2peer-project-service-frontend", - "version": "0.0.3", + "version": "0.0.4", "description": "Frontend for las2peer project service.", "main": "project-list.js", "module": "project-list.js", From a8b875ff897f02215e703ef0754a8b3ac2106685 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 8 Aug 2021 15:47:18 +0200 Subject: [PATCH 11/22] Use latest y-websockets-client (v8) --- frontend/package-lock.json | 165 ++++++++++++++++++++----------------- 1 file changed, 91 insertions(+), 74 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 4840b45..6413997 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -14,9 +14,9 @@ } }, "@babel/helper-validator-identifier": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", - "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "version": "7.14.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", + "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", "dev": true }, "@babel/highlight": { @@ -561,9 +561,9 @@ } }, "@types/command-line-args": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.0.1.tgz", - "integrity": "sha512-+pAMlf+fHYWFDf4OvzEXPsVKLIahB66drrWXPxMe9IapFxjF5Ir+kFAR9qctKxZW4weuFL5ydm3V5yCGnJieew==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", "dev": true }, "@types/connect": { @@ -623,9 +623,9 @@ } }, "@types/http-assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz", - "integrity": "sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.2.tgz", + "integrity": "sha512-Ddzuzv/bB2prZnJKlS1sEYhaeT50wfJjhcTTTQLjEsEZJlk3XB4Xohieyq+P4VXIzg7lrQ1Spd/PfRnBpQsdqA==", "dev": true }, "@types/http-errors": { @@ -672,15 +672,15 @@ "dev": true }, "@types/node": { - "version": "16.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.3.3.tgz", - "integrity": "sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ==", + "version": "16.4.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.4.13.tgz", + "integrity": "sha512-bLL69sKtd25w7p1nvg9pigE4gtKVpGTPojBFLMkGHXuUgap2sLqQt2qUnqmVCDfzGUL0DRNZP+1prIZJbMeAXg==", "dev": true }, "@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-ARATsLdrGPUnaBvxLhUlnltcMgn7pQG312S8ccdYlnyijabrX9RN/KN/iGj9Am96CoW8e/K9628BA7Bv4XHdrA==", "dev": true }, "@types/qs": { @@ -715,9 +715,9 @@ } }, "@types/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-ijZ1vzRawI7QoWnTNL8KpHixd2b2XVb9I9HAqI3triPsh1EC0xH0Eg6w2O3TKbDCgiNNlJqfrof6j4T2I+l9vw==", + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "dev": true, "requires": { "@types/node": "*" @@ -733,9 +733,9 @@ } }, "@web/dev-server": { - "version": "0.1.18", - "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.18.tgz", - "integrity": "sha512-mMXI9IgowYmRXlKfvDCAPDvfjtuqpo74GmbDbd1ZF5IIHanvCF4d1xBPxc+w403bnbwj2cqjWc8wed+zp8JSoQ==", + "version": "0.1.20", + "resolved": "https://registry.npmjs.org/@web/dev-server/-/dev-server-0.1.20.tgz", + "integrity": "sha512-jn+X91xfTlTtidQFPp/o9HvbYCdFMGwc7gA8NBHv+PTPSIu79wxQESV2DONKFMyR0RXshMvT3mwQwlIvPEzuBg==", "dev": true, "requires": { "@babel/code-frame": "^7.12.11", @@ -743,7 +743,7 @@ "@types/command-line-args": "^5.0.0", "@web/config-loader": "^0.1.3", "@web/dev-server-core": "^0.3.12", - "@web/dev-server-rollup": "^0.3.5", + "@web/dev-server-rollup": "^0.3.7", "camelcase": "^6.2.0", "chalk": "^4.1.0", "command-line-args": "^5.1.1", @@ -790,37 +790,37 @@ } }, "@web/dev-server-rollup": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.5.tgz", - "integrity": "sha512-eDLy3Da3qXqfPxOB7qZvR5NscXCZ63NyxoyPR0R/ukPs7ThvkAfwrtnKXckQo4vh5+FMytZXhyDcqPgeGDlGlg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@web/dev-server-rollup/-/dev-server-rollup-0.3.8.tgz", + "integrity": "sha512-IoQh/mcqssyCL3nNB4dAwcV3VMZfwAcRw2TDFnY4bKnPnkZSOSFR3R+SuyvwhvvnG14NmnNE6RA2Lf7lt7AsmA==", "dev": true, "requires": { "@web/dev-server-core": "^0.3.3", "chalk": "^4.1.0", "parse5": "^6.0.1", "rollup": "^2.35.1", - "whatwg-url": "^8.4.0" + "whatwg-url": "^9.0.0" } }, "@web/parse5-utils": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-1.2.2.tgz", - "integrity": "sha512-B68DoJ5qF8Cu3o7nDA2RQTCf9bslVz2b0WHTk3qir5YCbWfhnPEGhDOedOjbE8xDiHqgzI1zXQsJ2+655aluLA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@web/parse5-utils/-/parse5-utils-1.3.0.tgz", + "integrity": "sha512-Pgkx3ECc8EgXSlS5EyrgzSOoUbM6P8OKS471HLAyvOBcP1NCBn0to4RN/OaKASGq8qa3j+lPX9H14uA5AHEnQg==", "dev": true, "requires": { - "@types/parse5": "^5.0.3", + "@types/parse5": "^6.0.1", "parse5": "^6.0.1" } }, "@webcomponents/shadycss": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.10.2.tgz", - "integrity": "sha512-9Iseu8bRtecb0klvv+WXZOVZatsRkbaH7M97Z+f+Pt909R4lDfgUODAnra23DOZTpeMTAkVpf4m/FZztN7Ox1A==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webcomponents/shadycss/-/shadycss-1.11.0.tgz", + "integrity": "sha512-L5O/+UPum8erOleNjKq6k58GVl3fNsEQdSOyh0EUhNmi7tHUyRuCJy1uqJiWydWcLARE5IPsMoPYMZmUGrz1JA==" }, "@webcomponents/webcomponentsjs": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.5.0.tgz", - "integrity": "sha512-C0l51MWQZ9kLzcxOZtniOMohpIFdCLZum7/TEHv3XWFc1Fvt5HCpbSX84x8ltka/JuNKcuiDnxXFkiB2gaePcg==" + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@webcomponents/webcomponentsjs/-/webcomponentsjs-2.6.0.tgz", + "integrity": "sha512-Moog+Smx3ORTbWwuPqoclr+uvfLnciVd6wdCaVscHPrxbmQ/IJKm3wbB7hpzJtXWjAq2l/6QMlO85aZiOdtv5Q==" }, "accepts": { "version": "1.3.7", @@ -979,9 +979,9 @@ "dev": true }, "chalk": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", - "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", @@ -1073,9 +1073,9 @@ "dev": true }, "command-line-args": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.3.tgz", - "integrity": "sha512-a5tF6mjqRSOBswBwdMkKY47JQ464Dkg9Pcwbxwo9wxRhKWZjtBktmBASllk3AMJ7qBuWgsAGtVa7b2/+EsymOQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.0.tgz", + "integrity": "sha512-4zqtU1hYsSJzcJBOcNZIbW5Fbk9BkjCp1pZVhQKoRaWL5J7N4XphDLwo8aWwdQpTugxwu+jf9u2ZhkXiqp5Z6A==", "dev": true, "requires": { "array-back": "^3.1.0", @@ -1170,14 +1170,14 @@ } }, "core-js": { - "version": "3.15.2", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.15.2.tgz", - "integrity": "sha512-tKs41J7NJVuaya8DxIOCnl8QuPHx5/ZVbFo1oKgVl1qHFBBrDctzQGtuLjPpRdNTWmKPH6oEvgN/MUID+l485Q==" + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz", + "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==" }, "crypto-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz", - "integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" }, "debounce": { "version": "1.2.1", @@ -1410,6 +1410,21 @@ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "http-assert": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz", @@ -1516,10 +1531,13 @@ "dev": true }, "is-generator-function": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", - "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", - "dev": true + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-glob": { "version": "4.0.1", @@ -1543,9 +1561,9 @@ "dev": true }, "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, "is-wsl": { @@ -1804,18 +1822,18 @@ "dev": true }, "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==", "dev": true }, "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", "dev": true, "requires": { - "mime-db": "1.48.0" + "mime-db": "1.49.0" } }, "minimist": { @@ -1839,9 +1857,9 @@ "integrity": "sha1-2JwhJMb9wTU9Zai3e/GqxLGTcIw=" }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "optional": true }, "negotiator": { @@ -1899,7 +1917,7 @@ } }, "openidconnect-signin": { - "version": "github:rwth-acis/openidconnect-signin#35c3810a25964c6b8792e2ee7c14b9cec3be5613", + "version": "github:rwth-acis/openidconnect-signin#f3ad5e95d3014ca0149615c17a12182de0ede3d3", "from": "github:rwth-acis/openidconnect-signin", "requires": { "lit-element": "^2.5.1", @@ -2075,9 +2093,9 @@ } }, "rollup": { - "version": "2.53.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.53.2.tgz", - "integrity": "sha512-1CtEYuS5CRCzFZ7SNW5528SlDlk4VDXIRGwbm/2POQxA/G4+7/crIqJwkmnj8Q/74hGx4oVlNvh4E1CJQ5hZ6w==", + "version": "2.56.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.1.tgz", + "integrity": "sha512-KkrsNjeiTfGJMUFBi/PNfj3fnt70akqdoNXOjlzwo98uA1qrlkmgt6SGaK5OwhyDYCVnJb6jb2Xa2wbI47P4Nw==", "dev": true, "requires": { "fsevents": "~2.3.2" @@ -2274,12 +2292,11 @@ "dev": true }, "whatwg-url": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", - "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", + "integrity": "sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==", "dev": true, "requires": { - "lodash": "^4.7.0", "tr46": "^2.1.0", "webidl-conversions": "^6.1.0" } @@ -2328,7 +2345,7 @@ "integrity": "sha512-OrcReh6DgZhz5R7JGXqAH53T0Ygw24qcxKj4jN9w2DIi2eIiKFCD5Y6apBTTNxiw2FaVP15F+M8phRRIMXFGBQ==" }, "y-websockets-client": { - "version": "github:rwth-acis/y-websockets-client#a9774fe79b6ac85e41fff41af751ab9f48cb9fd9", + "version": "github:rwth-acis/y-websockets-client#d29f50a4ce514313fc4813dae345d1bd31376de1", "from": "github:rwth-acis/y-websockets-client#v8", "requires": { "socket.io-client": "1.3.7" From a0cad06aee050f2ef59a09fc9890a404669de271 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 8 Aug 2021 16:03:06 +0200 Subject: [PATCH 12/22] Disconnect from previous project room when selecting another one --- frontend/project-list.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/frontend/project-list.js b/frontend/project-list.js index aed998e..31aea9a 100644 --- a/frontend/project-list.js +++ b/frontend/project-list.js @@ -583,9 +583,7 @@ export class ProjectList extends LitElement { // join Yjs room for the project metadata if(this.y) { - // TODO: check if there is a way to clean up the previous used yjs object - //this.y.destroy(); - //this.y = undefined; + this.y.connector.disconnect(); } Y({ db: { From d2491838834a9a2beae8fd9d3aba66431c9224e7 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 8 Aug 2021 17:36:02 +0200 Subject: [PATCH 13/22] Updated READMEs --- README.md | 2 +- frontend/README.md | 91 +++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 82 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 6c9ce27..29bbcca 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![Java CI with Gradle](https://github.com/rwth-acis/las2peer-project-service/actions/workflows/gradle.yml/badge.svg?branch=main)](https://github.com/rwth-acis/las2peer-project-service/actions/workflows/gradle.yml) [![codecov](https://codecov.io/gh/rwth-acis/las2peer-project-service/branch/main/graph/badge.svg)](https://codecov.io/gh/rwth-acis/las2peer-project-service) -[![npmjs](https://img.shields.io/npm/v/@rwth-acis/las2peer-project-service-frontend)](https://www.npmjs.com/package/@rwth-acis/las2peer-project-service-frontend) +[![npmjs](https://img.shields.io/npm/v/@rwth-acis/las2peer-project-service-frontend?color=success)](https://www.npmjs.com/package/@rwth-acis/las2peer-project-service-frontend) A [las2peer](https://github.com/rwth-acis/las2peer) service for managing projects and their members. We provide a project-list [LitElement](/frontend) which can be used as a frontend for this service. diff --git a/frontend/README.md b/frontend/README.md index 7c5bf36..19a2d8f 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,15 +1,86 @@ -# \ -[![npmjs](https://img.shields.io/npm/v/@rwth-acis/las2peer-project-service-frontend)](https://www.npmjs.com/package/@rwth-acis/las2peer-project-service-frontend) +# Project-List Frontend +[![npmjs](https://img.shields.io/npm/v/@rwth-acis/las2peer-project-service-frontend?color=success)](https://www.npmjs.com/package/@rwth-acis/las2peer-project-service-frontend) -A LitElement for listing projects given by the las2peer-project-service and for creating new projects. +The project-list is a LitElement for listing projects given by the las2peer-project-service and for creating new projects. -## Development -For testing the element during development, run `npm i` and `npm run serve`. +## Basic Usage +------------------- + +To use the project-list LitElement in your project, just install it from [npmjs](https://www.npmjs.com/package/@rwth-acis/las2peer-project-service-frontend): + +``` +npm i @rwth-acis/las2peer-project-service-frontend +``` + +Then you can use the project-list element as follows: + +```html + +``` + +Here, SYSTEM_NAME needs to match with a system that is configured in the project-service. +For the configuration of systems, see the [main README](../). +Set PROJECT_SERVICE_URL and CONTACT_SERVICE_URL to the address of the webconnector, where the respective service can be found. + +The project-list element uses [Yjs](https://github.com/yjs/yjs) to share the metadata of the currently selected/opened project with other project members that have selected the same project. +This ensures, that every project member always gets the latest changes to the metadata. +To configure the used y-websockets-server instance, use the attributes `yjsAddress` and `yjsResourcePath`. +Please note: To keep the metadata of projects secured, the project-list uses an extended version of y-websockets-server and y-websockets-client. +This extension allows to use Yjs rooms that only project members can access. +The extensions can be found in the rwth-acis forks [rwth-acis/y-websockets-server#project-service](https://github.com/rwth-acis/y-websockets-server/tree/project-service) and [rwth-acis/y-websockets-client#v8](https://github.com/rwth-acis/y-websockets-client/tree/v8). + + +You may also use the `disableAllProjects` attribute to disable the tab where all available projects are listed. + +## Events +------------- + +**Events fired by the project-list element:** + +`"projects-loaded"`: -## Slots +The project-list element fires this event whenever the projects are reloaded from the project-service. +The event details contain a list of all projects that the current user can access. +Depending on how the visibility of all projects is configured in the project-service, also projects where the current user is no member of will be part of the list. -The component can be extended or overridden at these slots. +`"project-selected"`: -| Slot | Description | -|--------|------------------------------------------------------| -| TODO | TODO | \ No newline at end of file +Whenever the user clicks on one of the projects in the list, this event will be fired. +It contains detailed information on the selected project and its metadata. + +`"metadata-changed"`: + +If the metadata of the currently selected/opened project got changed, this event will be fired. +It contains the updated project metadata. +If you display the metadata in the UI and want to keep it up-to-date, then you can use this event. + +**Events that the project-list element listens for:** + +`"metadata-change-request"`: + +The project-list element listens to the event "metadata-change-request". +It can be used to update the metadata of the currently selected project. +If you send the event and set the event details to the updated metadata, the project-list element will send it to the project-service and after that the "metadata-changed" event will be fired. + +`"metadata-reload-request"`: + +If you updated the metadata without using the "metadata-change-request" event, as an example by using the RMI interface of the project-service, then you should use this event to inform the project-list element about it. +When receiving the event, the project-list will fetch the metadata from the project-service again and will also send a "metadata-changed" event. + +## Extension: SyncMeta Online User List +------------------------------------------- + +If your projects are using [SyncMeta](https://github.com/rwth-acis/syncmeta), you can use the online user list extension. +It allows to display the users that are currently online in a project / SyncMeta room. +To use the online user list, the project-list element needs to know which project is using which Yjs room(s) for modelling. +You can use the method "setOnlineUserListYjsRooms", that the project-list element provides, for this. +As a parameter you use a map that maps project names to a list of Yjs room names (which are used for modelling inside the project). + +## Development +----------------------------- +For testing the element during development, run `npm i` and `npm run serve`. +There is a demo available that can be used during development. From fe642615f89725d39249739a1260a602f1521fd2 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 8 Aug 2021 17:38:38 +0200 Subject: [PATCH 14/22] Add GitHub repository to package.json --- frontend/package.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/frontend/package.json b/frontend/package.json index 859c23d..803d33e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,6 +9,10 @@ "serve": "web-dev-server --node-resolve --watch --open", "build": "echo \"This is not a TypeScript project, so no need to build.\"" }, + "repository": { + "type": "git", + "url": "https://github.com/rwth-acis/las2peer-project-service" + }, "author": { "name": "ACIS Group, RWTH Aachen", "email": "acis@dbis.rwth-aachen.de" From ec135d823e5cabe5cd217f628fc12957e62f5250 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 8 Aug 2021 17:42:33 +0200 Subject: [PATCH 15/22] Update READMEs --- README.md | 2 +- frontend/README.md | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 29bbcca..736179d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ [![codecov](https://codecov.io/gh/rwth-acis/las2peer-project-service/branch/main/graph/badge.svg)](https://codecov.io/gh/rwth-acis/las2peer-project-service) [![npmjs](https://img.shields.io/npm/v/@rwth-acis/las2peer-project-service-frontend?color=success)](https://www.npmjs.com/package/@rwth-acis/las2peer-project-service-frontend) -A [las2peer](https://github.com/rwth-acis/las2peer) service for managing projects and their members. We provide a project-list [LitElement](/frontend) which can be used as a frontend for this service. +A [las2peer](https://github.com/rwth-acis/las2peer) service for managing projects and their members. We provide a [project-list](/frontend) LitElement which can be used as a frontend for this service. Build -------- diff --git a/frontend/README.md b/frontend/README.md index 19a2d8f..3027430 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -3,7 +3,7 @@ The project-list is a LitElement for listing projects given by the las2peer-project-service and for creating new projects. -## Basic Usage +Basic Usage ------------------- To use the project-list LitElement in your project, just install it from [npmjs](https://www.npmjs.com/package/@rwth-acis/las2peer-project-service-frontend): @@ -23,7 +23,7 @@ Then you can use the project-list element as follows: ``` Here, SYSTEM_NAME needs to match with a system that is configured in the project-service. -For the configuration of systems, see the [main README](../). +For the configuration of systems, see the [main README](/). Set PROJECT_SERVICE_URL and CONTACT_SERVICE_URL to the address of the webconnector, where the respective service can be found. The project-list element uses [Yjs](https://github.com/yjs/yjs) to share the metadata of the currently selected/opened project with other project members that have selected the same project. @@ -36,7 +36,7 @@ The extensions can be found in the rwth-acis forks [rwth-acis/y-websockets-serve You may also use the `disableAllProjects` attribute to disable the tab where all available projects are listed. -## Events +Events ------------- **Events fired by the project-list element:** @@ -71,7 +71,7 @@ If you send the event and set the event details to the updated metadata, the pro If you updated the metadata without using the "metadata-change-request" event, as an example by using the RMI interface of the project-service, then you should use this event to inform the project-list element about it. When receiving the event, the project-list will fetch the metadata from the project-service again and will also send a "metadata-changed" event. -## Extension: SyncMeta Online User List +Extension: SyncMeta Online User List ------------------------------------------- If your projects are using [SyncMeta](https://github.com/rwth-acis/syncmeta), you can use the online user list extension. @@ -80,7 +80,7 @@ To use the online user list, the project-list element needs to know which projec You can use the method "setOnlineUserListYjsRooms", that the project-list element provides, for this. As a parameter you use a map that maps project names to a list of Yjs room names (which are used for modelling inside the project). -## Development +Development ----------------------------- For testing the element during development, run `npm i` and `npm run serve`. There is a demo available that can be used during development. From e1c32f1d9cc0375d1f48b08b6609d3a5676522a3 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 8 Aug 2021 17:44:00 +0200 Subject: [PATCH 16/22] Update README --- frontend/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/README.md b/frontend/README.md index 3027430..03e65d5 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -23,7 +23,7 @@ Then you can use the project-list element as follows: ``` Here, SYSTEM_NAME needs to match with a system that is configured in the project-service. -For the configuration of systems, see the [main README](/). +For the configuration of systems, see the [main README](https://github.com/rwth-acis/las2peer-project-service). Set PROJECT_SERVICE_URL and CONTACT_SERVICE_URL to the address of the webconnector, where the respective service can be found. The project-list element uses [Yjs](https://github.com/yjs/yjs) to share the metadata of the currently selected/opened project with other project members that have selected the same project. From e4fe7c443f425c0f8016323eb59c9d0ca1ae4e0c Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 8 Aug 2021 17:45:55 +0200 Subject: [PATCH 17/22] Update version of project-list element --- frontend/package-lock.json | 2 +- frontend/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 6413997..2cc9c57 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,6 +1,6 @@ { "name": "@rwth-acis/las2peer-project-service-frontend", - "version": "0.0.4", + "version": "0.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index 803d33e..f04a779 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "@rwth-acis/las2peer-project-service-frontend", - "version": "0.0.4", + "version": "0.1.0", "description": "Frontend for las2peer project service.", "main": "project-list.js", "module": "project-list.js", From 80c773e3f9668d526871db0e665ff3e8011b5807 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 8 Aug 2021 17:50:19 +0200 Subject: [PATCH 18/22] Remove unused file --- frontend/static.js | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 frontend/static.js diff --git a/frontend/static.js b/frontend/static.js deleted file mode 100644 index 69107ca..0000000 --- a/frontend/static.js +++ /dev/null @@ -1,33 +0,0 @@ - -export default class Static { -} -// these ids are used for yjs room names -Static.FrontendSpaceId = 'frontend-modeling'; -Static.MicroserviceSpaceId = 'microservice-modeling'; -Static.ApplicationSpaceId = 'application-modeling'; - -// store the URL to the project management service, model persistence service and webhost (for widgets) -// this gets updated when using docker env variables -// and should not end with a "/" -Static.ProjectManagementServiceURL = 'http://localhost:8081/project-management'; -Static.WebhostURL = 'http://localhost:8070'; -Static.ModelPersistenceServiceURL = 'http://localhost:8081/CAE'; -Static.CodeGenServiceURL = 'http://localhost:8081/CodeGen'; -// Yjs configuration -Static.YjsAddress = "http://localhost:1234"; -Static.YjsResourcePath = "/socket.io"; - -Static.ContactServiceUrl = 'http://localhost:8080/contactservice'; - -// URL where the deployed application can be seen -Static.DeploymentURL = "http://localhost:8087"; -// name of the GitHub organization where the source code is hosted -Static.GitHubOrg = "CAETESTRWTH"; -Static.GitHubOAuthClientId = "e36f1d4edfc6ee7ff9c7"; - -// the following links are not edited through the docker container -Static.las2peerURL = "https://las2peer.org"; -Static.ExternalDependenciesWiki = "https://github.com/rwth-acis/CAE/wiki/External-Dependencies"; - -Static.ReqBazBackend = "https://requirements-bazaar.org/bazaar"; -Static.ReqBazFrontend = "https://requirements-bazaar.org"; \ No newline at end of file From b15bc90109a6a78b3717c60e0c0f8f76213c3459 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Fri, 13 Aug 2021 18:12:24 +0200 Subject: [PATCH 19/22] Demo uses correct y-websockets-client dist file --- frontend/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.html b/frontend/index.html index b278820..5ca7109 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -9,7 +9,7 @@ - +
From 0d7bf8df9bbc40e7a2de725ca007397142e66493 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Fri, 13 Aug 2021 18:19:54 +0200 Subject: [PATCH 20/22] Only fetch projects if user is logged in --- frontend/project-list.js | 6 ++++++ frontend/util/auth.js | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/frontend/project-list.js b/frontend/project-list.js index 31aea9a..8266f6f 100644 --- a/frontend/project-list.js +++ b/frontend/project-list.js @@ -524,6 +524,12 @@ export class ProjectList extends LitElement { this.projects = []; this.listedProjects = []; + if(!Auth.userInfoAvailable()) { + // user is not logged in (cannot load projects) + this.projectsLoading = false; + return; + } + fetch(this.projectServiceURL + "/projects/" + this.system, { method: "GET", headers: Auth.getAuthHeaderWithSub() diff --git a/frontend/util/auth.js b/frontend/util/auth.js index 578d568..d257871 100644 --- a/frontend/util/auth.js +++ b/frontend/util/auth.js @@ -35,6 +35,10 @@ export default class Auth { } } + static userInfoAvailable() { + return localStorage.getItem(this.KEY_USER_INFO) !== null; + } + static getBasicAuthPart() { var userInfo = JSON.parse(localStorage.getItem(this.KEY_USER_INFO)); return btoa(userInfo.preferred_username + ":" + userInfo.sub); From 29b35295cb3a5cde3e148fd6f6ca86771bd4e064 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 15 Aug 2021 11:22:39 +0200 Subject: [PATCH 21/22] Update version of frontend --- frontend/package-lock.json | 2 +- frontend/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2cc9c57..1cf4bcd 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,6 +1,6 @@ { "name": "@rwth-acis/las2peer-project-service-frontend", - "version": "0.1.0", + "version": "0.1.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index f04a779..3989a2c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "@rwth-acis/las2peer-project-service-frontend", - "version": "0.1.0", + "version": "0.1.1", "description": "Frontend for las2peer project service.", "main": "project-list.js", "module": "project-list.js", From 948976b66ca1196d691a40573ffc488691e88750 Mon Sep 17 00:00:00 2001 From: Philipp Dolif Date: Sun, 15 Aug 2021 11:52:42 +0200 Subject: [PATCH 22/22] Event listener for reloading the projects --- frontend/README.md | 15 ++++++++++----- frontend/dev/demo-element.js | 32 ++++++++++++++++---------------- frontend/package-lock.json | 2 +- frontend/package.json | 2 +- frontend/project-list.js | 2 +- 5 files changed, 29 insertions(+), 24 deletions(-) diff --git a/frontend/README.md b/frontend/README.md index 03e65d5..0296f08 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -41,18 +41,18 @@ Events **Events fired by the project-list element:** -`"projects-loaded"`: +`projects-loaded`: The project-list element fires this event whenever the projects are reloaded from the project-service. The event details contain a list of all projects that the current user can access. Depending on how the visibility of all projects is configured in the project-service, also projects where the current user is no member of will be part of the list. -`"project-selected"`: +`project-selected`: Whenever the user clicks on one of the projects in the list, this event will be fired. It contains detailed information on the selected project and its metadata. -`"metadata-changed"`: +`metadata-changed`: If the metadata of the currently selected/opened project got changed, this event will be fired. It contains the updated project metadata. @@ -60,17 +60,22 @@ If you display the metadata in the UI and want to keep it up-to-date, then you c **Events that the project-list element listens for:** -`"metadata-change-request"`: +`metadata-change-request`: The project-list element listens to the event "metadata-change-request". It can be used to update the metadata of the currently selected project. If you send the event and set the event details to the updated metadata, the project-list element will send it to the project-service and after that the "metadata-changed" event will be fired. -`"metadata-reload-request"`: +`metadata-reload-request`: If you updated the metadata without using the "metadata-change-request" event, as an example by using the RMI interface of the project-service, then you should use this event to inform the project-list element about it. When receiving the event, the project-list will fetch the metadata from the project-service again and will also send a "metadata-changed" event. +`projects-reload-request`: + +This event can be used to reload the list of projects. +It might be used after the user has logged in. + Extension: SyncMeta Online User List ------------------------------------------- diff --git a/frontend/dev/demo-element.js b/frontend/dev/demo-element.js index ac579e0..0e934f9 100644 --- a/frontend/dev/demo-element.js +++ b/frontend/dev/demo-element.js @@ -20,7 +20,6 @@ export class DemoElement extends LitElement { } // I didnt get how to use ready, so simply used firstUpdated which is always called after render... firstUpdated(changedProperties){ - console.log("sas"); const statusBar = this.shadowRoot.querySelector("#statusBar"); // in the following we use (event) => this.method(event) in order to be able to access // this.shadowRoot in the handleLogin and handleLogout methods @@ -29,24 +28,25 @@ export class DemoElement extends LitElement { } handleLogin(event) { - console.log("swsqwsw"); console.log(event.detail.access_token); Auth.setAuthDataToLocalStorage(event.detail.access_token); - var url = "https://api.learning-layers.eu/auth/realms/main/protocol/openid-connect/userinfo"; - console.log(url); - fetch(url, {method: "GET", headers: { - "Authorization": "Bearer " + Auth.getAccessToken() - }}).then(response => { - if(response.ok) { - return response.json(); - } - }).then(data => { - console.log(data.name); - // const userInfo = Common.getUserInfo(); - //userInfo.sub = data.sub; - Common.storeUserInfo(data); - }); + var url = "https://api.learning-layers.eu/auth/realms/main/protocol/openid-connect/userinfo"; + fetch(url, {method: "GET", headers: { + "Authorization": "Bearer " + Auth.getAccessToken() + }}).then(response => { + if(response.ok) { + return response.json(); + } + }).then(data => { + console.log(data.name); + // const userInfo = Common.getUserInfo(); + //userInfo.sub = data.sub; + Common.storeUserInfo(data); + + // reload projects + window.dispatchEvent(new CustomEvent("projects-reload-request", { bubbles: true })); + }); } handleLogout() { diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 1cf4bcd..b6d642e 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,6 +1,6 @@ { "name": "@rwth-acis/las2peer-project-service-frontend", - "version": "0.1.1", + "version": "0.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/frontend/package.json b/frontend/package.json index 3989a2c..8d28312 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "@rwth-acis/las2peer-project-service-frontend", - "version": "0.1.1", + "version": "0.2.0", "description": "Frontend for las2peer project service.", "main": "project-list.js", "module": "project-list.js", diff --git a/frontend/project-list.js b/frontend/project-list.js index 8266f6f..11c3dd3 100644 --- a/frontend/project-list.js +++ b/frontend/project-list.js @@ -220,6 +220,7 @@ export class ProjectList extends LitElement { this.contactServiceURL = "http://127.0.0.1:8080/contactservice"; window.addEventListener('metadata-change-request', this._changeMetadata.bind(this)); window.addEventListener('metadata-reload-request', this._reloadMetadata.bind(this)); + window.addEventListener('projects-reload-request', (e) => this.showProjects(false)); this.disableAllProjects = false; this.yjsAddress = "http://127.0.0.1:1234"; this.yjsResourcePath = "./socket.io"; @@ -519,7 +520,6 @@ export class ProjectList extends LitElement { showProjects(allProjects) { // set loading to true this.projectsLoading = true; - console.log("sasaq"); // clear current project list this.projects = []; this.listedProjects = [];