From bf2ff24e69b566c81e57440844513688d242c0a1 Mon Sep 17 00:00:00 2001 From: andrej romanov <50377758+auumgn@users.noreply.github.com> Date: Mon, 13 May 2024 11:06:01 +0300 Subject: [PATCH 1/7] ignore sensitive cypress data --- ui/.gitignore | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/ui/.gitignore b/ui/.gitignore index 0711527ef..324410beb 100644 --- a/ui/.gitignore +++ b/ui/.gitignore @@ -40,3 +40,12 @@ testem.log # System files .DS_Store Thumbs.db + +# Cypress +/cypress/plugins/credentials_qa.json +/cypress/plugins/token_qa.json +/cypress/fixtures/credentials.json +/cypress/fixtures/downloadedAffiliations.csv +/cypress/fixtures/editAffiliations.csv +/cypress/videos +/cypress/screenshots \ No newline at end of file From 617ffd6f29d585769a381562aed9ce5ca869a325 Mon Sep 17 00:00:00 2001 From: andrej romanov <50377758+auumgn@users.noreply.github.com> Date: Mon, 13 May 2024 11:06:46 +0300 Subject: [PATCH 2/7] add cypress tests --- ui/cypress.json | 6 + ui/cypress/fixtures/affiliations.csv | 10 + .../bulk-edit-salesforce-ids-config.json | 8 + ui/cypress/fixtures/csv-orcid-record.json | 4 + .../fixtures/csv-populated-orcid-record.json | 11 + ui/cypress/fixtures/invalidAffiliations.csv | 2 + ui/cypress/fixtures/orcid-record.json | 42 ++ .../fixtures/populated-orcid-record.json | 11 + ui/cypress/fixtures/test-data.json | 112 ++++ ui/cypress/helpers/helpers.js | 21 + ui/cypress/helpers/setup-test-data.js | 12 + .../integration/bulk-edit-salesforce-ids.js | 123 ++++ ui/cypress/integration/reset-test-data.js | 57 ++ .../integration/retention/add-affiliation.js | 165 ++++++ .../integration/retention/add-member.js | 89 +++ ui/cypress/integration/retention/add-user.js | 83 +++ .../retention/csv-add-affiliations.js | 137 +++++ .../retention/csv-edit-affiliations.js | 91 +++ .../retention/csv-invalid-affiliations.js | 18 + .../integration/retention/edit-affiliation.js | 69 +++ .../integration/retention/edit-member.js | 70 +++ ui/cypress/integration/retention/edit-user.js | 49 ++ .../integration/retention/notifications.js | 108 ++++ .../integration/retention/reset-password.js | 58 ++ .../retention/restricted-access.js | 49 ++ .../integration/retention/ui-authorities.js | 223 +++++++ .../integration/retention/ui-homepage-edit.js | 72 +++ .../integration/retention/ui-homepage.js | 103 ++++ ui/cypress/integration/retention/ui-login.js | 17 + .../integration/retention/ui-pagination.js | 51 ++ .../integration/retention/ui-reports.js | 252 ++++++++ ui/cypress/plugins/index.js | 52 ++ ui/cypress/support/commands.js | 549 ++++++++++++++++++ ui/cypress/support/index.js | 20 + 34 files changed, 2744 insertions(+) create mode 100644 ui/cypress.json create mode 100644 ui/cypress/fixtures/affiliations.csv create mode 100644 ui/cypress/fixtures/bulk-edit-salesforce-ids-config.json create mode 100644 ui/cypress/fixtures/csv-orcid-record.json create mode 100644 ui/cypress/fixtures/csv-populated-orcid-record.json create mode 100644 ui/cypress/fixtures/invalidAffiliations.csv create mode 100644 ui/cypress/fixtures/orcid-record.json create mode 100644 ui/cypress/fixtures/populated-orcid-record.json create mode 100644 ui/cypress/fixtures/test-data.json create mode 100644 ui/cypress/helpers/helpers.js create mode 100644 ui/cypress/helpers/setup-test-data.js create mode 100644 ui/cypress/integration/bulk-edit-salesforce-ids.js create mode 100644 ui/cypress/integration/reset-test-data.js create mode 100644 ui/cypress/integration/retention/add-affiliation.js create mode 100644 ui/cypress/integration/retention/add-member.js create mode 100644 ui/cypress/integration/retention/add-user.js create mode 100644 ui/cypress/integration/retention/csv-add-affiliations.js create mode 100644 ui/cypress/integration/retention/csv-edit-affiliations.js create mode 100644 ui/cypress/integration/retention/csv-invalid-affiliations.js create mode 100644 ui/cypress/integration/retention/edit-affiliation.js create mode 100644 ui/cypress/integration/retention/edit-member.js create mode 100644 ui/cypress/integration/retention/edit-user.js create mode 100644 ui/cypress/integration/retention/notifications.js create mode 100644 ui/cypress/integration/retention/reset-password.js create mode 100644 ui/cypress/integration/retention/restricted-access.js create mode 100644 ui/cypress/integration/retention/ui-authorities.js create mode 100644 ui/cypress/integration/retention/ui-homepage-edit.js create mode 100644 ui/cypress/integration/retention/ui-homepage.js create mode 100644 ui/cypress/integration/retention/ui-login.js create mode 100644 ui/cypress/integration/retention/ui-pagination.js create mode 100644 ui/cypress/integration/retention/ui-reports.js create mode 100644 ui/cypress/plugins/index.js create mode 100644 ui/cypress/support/commands.js create mode 100644 ui/cypress/support/index.js diff --git a/ui/cypress.json b/ui/cypress.json new file mode 100644 index 000000000..67fd508c2 --- /dev/null +++ b/ui/cypress.json @@ -0,0 +1,6 @@ +{ + "baseUrl": "https://member-portal.qa.orcid.org", + "taskTimeout": 300000, + "defaultCommandTimeout": 10000, + "video": false +} diff --git a/ui/cypress/fixtures/affiliations.csv b/ui/cypress/fixtures/affiliations.csv new file mode 100644 index 000000000..4ee58e65b --- /dev/null +++ b/ui/cypress/fixtures/affiliations.csv @@ -0,0 +1,10 @@ +email,affiliation-section,department-name,role-title,start-date,end-date,org-name,org-country,org-city,org-region,disambiguated-organization-identifier,disambiguation-source,url +qa+cy_mp_csv_add_affiliations_test@orcid.org,education,Psychology,Associate Professor,2014-04,,Member Portal University,US,Madison,WI,5228,RINGGOLD,https://member-portal.qa.orcid.org/ +qa+cy_mp_csv_add_affiliations_test@orcid.org,employment,Psychology,Associate Professor,2014-04,,Member Portal University,US,Madison,WI,5228,RINGGOLD,https://member-portal.qa.orcid.org/ +qa+cy_mp_csv_add_affiliations_test@orcid.org,qualification,Psychology,Associate Professor,2014-04,,Member Portal University,US,Madison,WI,5228,RINGGOLD,https://member-portal.qa.orcid.org/ +qa+cy_mp_csv_add_affiliations_test@orcid.org,invited_position,Psychology,Associate Professor,2014-04,,Member Portal University,US,Madison,WI,5228,RINGGOLD,https://member-portal.qa.orcid.org/ +qa+cy_mp_csv_add_affiliations_test@orcid.org,distinction,Psychology,Associate Professor,2014-04,,Member Portal University,US,Madison,WI,5228,RINGGOLD,https://member-portal.qa.orcid.org/ +qa+cy_mp_csv_add_affiliations_test@orcid.org,membership,Psychology,Associate Professor,2014-04,,Member Portal University,US,Madison,WI,5228,RINGGOLD,https://member-portal.qa.orcid.org/ +qa+cy_mp_csv_add_affiliations_test@orcid.org,service,Psychology,Associate Professor,2014-04,,Member Portal University,US,Madison,WI,5228,RINGGOLD,https://member-portal.qa.orcid.org/ +qa+cy_mp_csv_add_affiliations_test@orcid.org,service,Psychology,Associate Professor,2014-04,,Member Portal University,US,Madison,WI,5228,RINGGOLD,https://member-portal.qa.orcid.org/ +qa+cy_mp_csv_add_affiliations_test@orcid.org,service,Psychology,Associate Professor,2014-04,,Member Portal University,US,Madison,WI,5228,RINGGOLD,https://member-portal.qa.orcid.org/ \ No newline at end of file diff --git a/ui/cypress/fixtures/bulk-edit-salesforce-ids-config.json b/ui/cypress/fixtures/bulk-edit-salesforce-ids-config.json new file mode 100644 index 000000000..048272d52 --- /dev/null +++ b/ui/cypress/fixtures/bulk-edit-salesforce-ids-config.json @@ -0,0 +1,8 @@ +{ + "endpoint": "", + "token": "", + "base_url": "", + "email": "", + "password": "" + +} \ No newline at end of file diff --git a/ui/cypress/fixtures/csv-orcid-record.json b/ui/cypress/fixtures/csv-orcid-record.json new file mode 100644 index 000000000..b92ceb4ec --- /dev/null +++ b/ui/cypress/fixtures/csv-orcid-record.json @@ -0,0 +1,4 @@ +{ + "id": "0000-0003-2720-0566", + "email": "qa+cy_mp_csv_add_affiliations_test@orcid.org" +} diff --git a/ui/cypress/fixtures/csv-populated-orcid-record.json b/ui/cypress/fixtures/csv-populated-orcid-record.json new file mode 100644 index 000000000..2bab555e9 --- /dev/null +++ b/ui/cypress/fixtures/csv-populated-orcid-record.json @@ -0,0 +1,11 @@ +{ + "id": "0000-0002-5941-7893", + "email": "qa+mp_csv_populated_record@mailinator.com", + "invalidEmail": "@test@email.com", + "affiliation": { + "id": "624acdc830c49e0008fcf505", + "type": "SERVICE", + "countryCode": "BH", + "country": "Bahrain" + } +} diff --git a/ui/cypress/fixtures/invalidAffiliations.csv b/ui/cypress/fixtures/invalidAffiliations.csv new file mode 100644 index 000000000..497666348 --- /dev/null +++ b/ui/cypress/fixtures/invalidAffiliations.csv @@ -0,0 +1,2 @@ +email,affiliation-section,department-name,role-title,start-date,end-date,org-name,org-country,org-city,org-region,disambiguated-organization-identifier,disambiguation-source,url +,,,,,,,,, \ No newline at end of file diff --git a/ui/cypress/fixtures/orcid-record.json b/ui/cypress/fixtures/orcid-record.json new file mode 100644 index 000000000..4395577ef --- /dev/null +++ b/ui/cypress/fixtures/orcid-record.json @@ -0,0 +1,42 @@ +{ + "id": "0000-0002-4386-4349", + "email": "qa+cy_mp_test@orcid.org", + "nonregisteredEmail": "qa+cy_mp_nonexistent@orcid.org", + "invalidEmail": "@test@email.com", + "affiliation": { + "type": "SERVICE", + "countryCode": "BH", + "country": "Bahrain", + "org": { + "ror": { + "id": "https://ror.org/04z60tq39", + "shortId": "04z60tq39", + "invalidId": "test12345678", + "name": "ROR" + }, + "grid": { + "id": "grid.238252.c", + "invalidId": "grd.238252.c", + "name": "GRID" + }, + "ringgold": { + "id": "5072", + "invalidId": "test", + "name": "RINGGOLD" + } + }, + "startDate": { + "year": "2021", + "month": "January", + "invalidDay": "02", + "day": "01" + }, + "endDate": { + "year": "2021", + "month": "January", + "day": "01" + }, + "invalidUrl": "test.test", + "url": "http://example.com" + } +} diff --git a/ui/cypress/fixtures/populated-orcid-record.json b/ui/cypress/fixtures/populated-orcid-record.json new file mode 100644 index 000000000..08bf67d95 --- /dev/null +++ b/ui/cypress/fixtures/populated-orcid-record.json @@ -0,0 +1,11 @@ +{ + "id": "0000-0001-6964-278X", + "email": "qa+mp_populated_record@mailinator.com", + "invalidEmail": "@test@email.com", + "affiliation": { + "id": "624acdc830c49e0008fcf505", + "type": "SERVICE", + "countryCode": "BH", + "country": "Bahrain" + } +} diff --git a/ui/cypress/fixtures/test-data.json b/ui/cypress/fixtures/test-data.json new file mode 100644 index 000000000..13c8d3820 --- /dev/null +++ b/ui/cypress/fixtures/test-data.json @@ -0,0 +1,112 @@ +{ + "testString": " !@#$%^&*()-=_ 密漏 2022-04-04t16-20-02 ", + "invalidEmail": "@test@email.com", + "invalidWebsite": "orcid.org", + "invalidString": "a", + "italianLanguageCode": "7: it", + "outbox": { + "email": "info@member-portal.qa.orcid.org", + "updateEmail": "update@notify.orcid.org", + "activationSubject": "ORCID Member Portal activation", + "resetPasswordSubject": "ORCID Member Portal password reset", + "ownerUpdateSubject": "ORCID Member Portal organization owner updated", + "csvUpload": "Your affiliation CSV upload", + "csvDownload": "Your affiliations for edit file", + "notificationConfirmation": "ORCID Member Portal Notifications sent", + "notificationRegisteredUser": "[ORCID] Cypress Test Record you have new notifications", + "notificationNonRegisteredUser": "NOTIFICATIONS TEST would like to add a validated affiliation to your ORCID record", + "notificationNonRegisteredUserItalian": "NOTIFICATIONS TEST vorrebbe aggiungere un’affiliazione convalidata al tuo record ORCID" + }, + "member": { + "id": "619cc62aa7b11b00085b5bf8", + "clientName": "!@#$%^&*()-= проверка test 2", + "clientId": "APP-9GN1GYLRUONIPZRE", + "salesforceId": "TestSalesforceId", + "users": { + "owner": { + "id": "62264e8badbe1d0008bc0c31", + "email": "qa+mp0307220827@orcid.org" + }, + "newUser": { + "id": "", + "email": "qa+mp_cy_2022-04-04t16-20-02@orcid.org" + } + } + }, + "populatedMember": { + "id": "61b3400030c49e0008ffc6c4", + "clientName": "!@#$%^&*()-= проверка test 3", + "clientId": "APP-9GN1GYLRUONIPZRE", + "salesforceId": "0012i00000jXKkwAAG", + "users": { + "owner": { + "id": "624583472ab79c0008809b89", + "email": "qa+mp_cy_test_account@orcid.org" + }, + "user": { + "id": "624d5a402ab79c000880a3ce", + "email": "qa+mp_cy_test_user@orcid.org" + } + } + }, + "csvMember": { + "id": "6177cf5830c49e00080c3010", + "clientName": "CYPRESS CSV TEST", + "clientId": "APP-3KN4PG7TU5YV8H0J", + "salesforceId": "CYPRESS CSV TEST", + "users": { + "owner": { + "id": "624583472ab79c0008809b89", + "email": "qa+mp_cy_csv_member_owner@orcid.org" + } + } + }, + "csvPopulatedMember": { + "id": "626ab042b3cb1f00087f07c3", + "clientName": "CYPRESS CSV EDIT TEST", + "clientId": "APP-3KN4PG7TU5YV8H0J", + "salesforceId": "CYPRESS CSV EDIT TEST", + "users": { + "owner": { + "id": "626ab07a30c49e0008669c9c", + "email": "qa+mp_cy_csv_populated_member_owner@orcid.org" + } + } + }, + "paginationMember": { + "id": "628b508030c49e00082f2a25", + "clientName": "PAGINATION TEST", + "clientId": "APP-3KN4PG7TU5YV8H0J", + "salesforceId": "PAGINATION TEST", + "users": { + "owner": { + "id": "628b5552adbe1d0008d89d6e", + "email": "qa+mp_cy_pagination1@orcid.org" + } + }, + "assertionEmail1": "20@orcid.org", + "assertionEmail2": "21@orcid.org", + "assertionEmail3": "22@orcid.org", + "assertionData1": "Psychology 5", + "assertionData2": "Psychology 6" + }, + "notificationsMember": { + "id": "636986e7b3cb1f00091c3f31", + "clientName": "NOTIFICATIONS TEST", + "salesforceId": "0012i00000h6xnUAAQ", + "users": { + "owner": { + "id": "63f50e8ba7b11b000885d6e4", + "email": "qa+mp_cy_notifications@orcid.org" + } + } + }, + "homepageTestMembers": { + "directMemberEmail": "qa+cy_mp_flyandmighty@orcid.org", + "consortiumLeadEmail": "qa+cy_mp_mambono5@orcid.org", + "consortiumMember": {"email": "qa+cy_mp_almondsforest@orcid.org", "name": "Almonds Forest", "salesforceId": "0012i00000aA9dFAAS"}, + "consortiumMemberEmail2": "qa+cy_mp_gratefulfrogs@orcid.org", + "consortiumLeadAndMember": {"email": "qa+cy_mp_theharvestascendancy@orcid.org", "salesforceId": "0012i00000h6xo5AAA"}, + "inactiveConsortiumMemberEmail": "qa+cy_mp_considineandsons@orcid.org" + } +} \ No newline at end of file diff --git a/ui/cypress/helpers/helpers.js b/ui/cypress/helpers/helpers.js new file mode 100644 index 000000000..db87a2bc6 --- /dev/null +++ b/ui/cypress/helpers/helpers.js @@ -0,0 +1,21 @@ +let newUser = () => { + let date = new Date().toISOString().substring(0, 19).replace(/:/g, "-").replace(/\./g, "-").toLowerCase() + let testString = ' !@#$%^&*()-=_ ' + randomString() + ' ' + date + ' ' + return { + email: 'qa' + '+mp_cy_' + date + '@orcid.org', + testString + } +} + +let randomString = () => { + let text = '' + let possible = + 'ñáéíóú-北查爾斯頓工廠的安全漏洞已經引起了航空公司和監管機構的密切關注' + + for (var i = 0; i < 2; i++) + text += possible.charAt(Math.floor(Math.random() * possible.length)) + + return text +} + +module.exports.newUser = newUser() \ No newline at end of file diff --git a/ui/cypress/helpers/setup-test-data.js b/ui/cypress/helpers/setup-test-data.js new file mode 100644 index 000000000..9af233939 --- /dev/null +++ b/ui/cypress/helpers/setup-test-data.js @@ -0,0 +1,12 @@ +const fs = require('fs'); +const helpers = require('./helpers.js'); +const fileName = '../fixtures/test-data.json'; +const file = require(fileName); + +const newUser = helpers.newUser; +file.member.users.newUser.email = newUser.email +file.testString = newUser.testString + +fs.writeFile(fileName, JSON.stringify(file, null, 2), function writeJSON(err) { + if (err) return console.log(err); +}); \ No newline at end of file diff --git a/ui/cypress/integration/bulk-edit-salesforce-ids.js b/ui/cypress/integration/bulk-edit-salesforce-ids.js new file mode 100644 index 000000000..8040afe5d --- /dev/null +++ b/ui/cypress/integration/bulk-edit-salesforce-ids.js @@ -0,0 +1,123 @@ +/// +import config from '../fixtures/bulk-edit-salesforce-ids-config.json'; + +describe('Bulk edit invalid salesforce ids', () => { + it('Replace all invalid ids with unused valid ones', () => { + cy.request({ + url: config.endpoint, + method: 'GET', + headers: { + Authorization: config.token + } + }).then(res => { + let totalPages = 0; + let sfIds = []; + let mpIds = []; + let data = res.body; + data = JSON.parse(data); + for (const id in data.records) { + if (!sfIds.includes(data.records[id]['Id'])) { + sfIds.push(data.records[id]['Id']); + } + } + cy.visit(config.base_url); + cy.get('#username') + .clear() + .type(config.username) + .get('#password') + .type(config.password) + .get('button') + .filter('[type="submit"]') + .click(); + cy.get('#admin-menu').click(); + cy.get('a') + .filter('[href="/member"]') + .click(); + cy.wait(1000); + cy.get('.pagination') + .children() + .eq(-3) + .then(e => { + totalPages = +e[0].textContent.replace('(current)', '').trim(); + // get list of salesforce ids used in the portal + for (let i = 0; i < totalPages; i++) { + cy.get('tbody') + .children() + .each($e => { + mpIds.push($e[0].children[0].textContent); + }); + cy.get('.pagination') + .children() + .eq(-2) + .click(); + cy.wait(200); + } + }) + .then(() => { + cy.get('tbody') + .children() + .each($e => { + mpIds.push($e[0].children[0].textContent); + }); + // create list of salesforce ids not used in the portal + let filteredIds = []; + for (var i = 0; i < sfIds.length; i += 1) { + if (mpIds.indexOf(sfIds[i]) == -1) { + filteredIds.push(sfIds[i]); + } + } + // go back to first page + cy.get('.pagination') + .children() + .eq(0) + .click(); + cy.wait(1000); + for (var i = 0; i < totalPages; i++) { + cy.get('.pagination > li.active').then(page => { + // get current page number + const pageNumber = +page[0].textContent.replace('(current)', '').trim(); + cy.get('tbody') + .children() + .each($e => { + if ($e[0].children[0].textContent !== '001G000001AP83e') { + if (!sfIds.includes($e[0].children[0].textContent)) { + // click on the edit button + cy.get('tbody') + .children() + .eq($e[0].sectionRowIndex) + .children() + .eq(6) + .children() + .eq(0) + .click(); + // change id + cy.get('#field_salesforceId') + .clear() + .type(filteredIds[0]); + cy.get('#save-entity').click(); + filteredIds.shift() + // saving the id redirects you to page 1, make sure you return to the relevant page + if (pageNumber !== 1) { + for (var p = 1; p < pageNumber; p++) { + cy.get('.pagination') + .children() + .eq(-2) + .click(); + } + cy.wait(200); + } + } + } + }); + // go to the next page + cy.get('.pagination') + .children() + .eq(-2) + .click(); + cy.wait(250); + }); + } + }); + }); + }); +}); diff --git a/ui/cypress/integration/reset-test-data.js b/ui/cypress/integration/reset-test-data.js new file mode 100644 index 000000000..19a15a46c --- /dev/null +++ b/ui/cypress/integration/reset-test-data.js @@ -0,0 +1,57 @@ +/// +import data from '../fixtures/test-data.json'; +import credentials from '../fixtures/credentials.json'; + +describe('Add new user', () => { + it('Reset organization owner', () => { + cy.programmaticSignin(credentials.adminEmail, credentials.adminPassword) + cy.changeOrgOwner() + }) + + it('Remove all affiliations from test group', function () { + cy.programmaticSignin(data.member.users.owner.email, credentials.password) + cy.visit('/assertion') + cy.get('.btn-group').each($e => { + cy.wrap($e).children().last().click() + cy.get('#jhi-confirm-delete-assertion').click() + }) + cy.visit('/user') + cy.get('.btn-group').each($e => { + cy.wrap($e).children().last().invoke('attr', 'disabled').then((disabled) => { + disabled ? cy.log("Skipping user, button is disabled") : cy.removeAffiliation($e) + }) + }) + cy.programmaticSignout() + }) + + it('Remove all affiliations from test member', function () { + cy.programmaticSignin(data.member.users.owner.email, credentials.password) + cy.visit('/user') + cy.get('.btn-group').each($e => { + cy.wrap($e).children().last().invoke('attr', 'disabled').then((disabled) => { + disabled ? cy.log("Skipping user, button is disabled") : cy.removeAffiliation($e) + }) + }) + cy.programmaticSignout() + }) + + it('Remove all affiliations from csv test member', function () { + cy.programmaticSignin(data.csvMember.users.owner.email, credentials.password) + cy.visit('/assertion') + cy.get('.btn-group').each($e => { + cy.wrap($e).children().last().click() + cy.get('#jhi-confirm-delete-assertion').click() + }) + cy.programmaticSignout() + }) + + it('Remove all affiliations from the notifications member', function() { + cy.programmaticSignin(data.notificationsMember.users.owner.email, credentials.password); + cy.visit('/assertion') + cy.get('.btn-group').each($e => { + cy.wrap($e).children().last().click() + cy.get('#jhi-confirm-delete-assertion').click() + }) + cy.programmaticSignout() + }); +}) diff --git a/ui/cypress/integration/retention/add-affiliation.js b/ui/cypress/integration/retention/add-affiliation.js new file mode 100644 index 000000000..c9d672210 --- /dev/null +++ b/ui/cypress/integration/retention/add-affiliation.js @@ -0,0 +1,165 @@ +/// +import data from '../../fixtures/test-data.json'; +import record from '../../fixtures/orcid-record.json'; +import credentials from '../../fixtures/credentials.json'; +import { recurse } from 'cypress-recurse'; + +const months = { + January: '01', + February: '02', + March: '03', + April: '04', + May: '05', + June: '06', + July: '07', + August: '08', + September: '09', + October: '10', + November: '11', + December: '12' +}; +const { country, countryCode, url, invalidUrl, startDate, endDate, type } = record.affiliation; +const { ringgold, grid, ror } = record.affiliation.org; +describe('Add and remove affiliation', () => { + /* beforeEach(() => { + cy.programmaticSignin(data.member.users.owner.email, credentials.password); + }); + + afterEach(() => { + cy.programmaticSignout(); + });*/ + + it('Add affiliation', function () { + cy.programmaticSignin(data.member.users.owner.email, credentials.password); + cy.visit('/assertion/new'); + + cy.get('#field_email').type(record.invalidEmail); + cy.get('small.text-danger').should('exist'); + cy.get('#field_email') + .clear() + .type(record.email); + cy.get('small.text-danger').should('not.exist'); + cy.get('#field_affiliationSection').select(type); + cy.get('#field_orgName').type(data.testString); + cy.get('#field_orgCity').type(data.testString); + cy.get('#field_orgCountry').select(country); + cy.checkOrgId(ringgold.name, ringgold.invalidId, ringgold.id); + cy.checkOrgId(grid.name, grid.invalidId, grid.id); + cy.checkOrgId(ror.name, ror.invalidId, ror.id); + cy.get('#field_departmentName').type(data.testString); + cy.get('#field_roleTitle').type(data.testString); + cy.get('#field_url').type(invalidUrl); + cy.get('#field_startYear').select(startDate.year); + cy.get('#field_startMonth').select(startDate.month); + cy.get('#field_startDay').select(startDate.invalidDay); + cy.get('#field_endYear').select(endDate.year); + cy.get('#field_endMonth').select(endDate.month); + cy.get('#field_endDay').select(endDate.day); + cy.get('small') + .filter('[jhitranslate="entity.validation.endDate.string"]') + .should('exist'); + cy.get('#save-entity') + .invoke('attr', 'disabled') + .should('exist'); + cy.get('#field_startDay').select(startDate.day); + cy.get('small').should('not.exist'); + cy.get('#save-entity').click(); + cy.get('.alerts') + .children() + .should('have.length', 1); + + cy.get('#save-entity').click(); + cy.get('.alerts') + .children() + .should('have.length', 2); + cy.get('#field_url') + .clear() + .type(url) + .get('#save-entity') + .click(); + cy.get('.alert-success').should('exist'); + cy.programmaticSignout(); + }); + + it('Grant permission and check ORCID record for added affiliation', () => { + cy.programmaticSignin(data.member.users.owner.email, credentials.password); + // Get permission link + cy.visit('/assertion'); + cy.get('tbody').children().first().children().eq(0).contains(record.email); + cy.get('tbody').children().first().children().eq(1).should('not.contain', record.id); + cy.get('tbody').children().first().children().eq(2).contains(record.affiliation.type); + cy.get('tbody').children().first().children().eq(4).contains('Pending'); + + cy.fetchLinkAndGrantPermission(record.email); + + recurse( + () => + cy.request({ + url: `https://pub.qa.orcid.org/v3.0/${record.id}/services`, + headers: { Accept: 'application/json' } + }), + res => { + const service = res.body['affiliation-group'][0]['summaries'][0]['service-summary']; + expect(res.body['affiliation-group']).to.have.length(1); + expect(service['department-name']).to.eq(data.testString); + expect(service['role-title']).to.eq(data.testString); + expect(service['organization']['address']['city']).to.eq(data.testString.trim()); + expect(service['organization']['address']['country']).to.eq(countryCode); + expect(service['organization']['name']).to.eq(data.testString.trim()); + expect(service['url']['value']).to.eq(url); + expect(service['start-date']['year']['value']).to.eq(startDate.year); + expect(service['start-date']['month']['value']).to.eq(months[startDate.month]); + expect(service['start-date']['day']['value']).to.eq(startDate.day); + expect(service['end-date']['year']['value']).to.eq(endDate.year); + expect(service['end-date']['month']['value']).to.eq(months[endDate.month]); + expect(service['end-date']['day']['value']).to.eq(endDate.day); + expect(service['organization']['disambiguated-organization']['disambiguated-organization-identifier']).to.eq(ror.id); + expect(service['organization']['disambiguated-organization']['disambiguation-source']).to.eq(ror.name); + }, + { + log: true, + limit: 20, // max number of iterations + timeout: 600000, // time limit in ms + delay: 30000 // delay before next iteration, ms + } + ); + }); + + it('Confirm UI changes on the assertion page', () => { + cy.programmaticSignin(data.member.users.owner.email, credentials.password); + cy.visit('/assertion'); + cy.get('tbody').children().first().children().eq(1).contains(record.id); + cy.get('tbody').children().first().children().eq(4).contains('In ORCID'); + cy.programmaticSignout(); + }) + + it('Delete affiliation', () => { + cy.programmaticSignin(data.member.users.owner.email, credentials.password); + cy.visit('/assertion'); + cy.get('.btn-group').each($e => { + cy.wrap($e) + .children() + .last() + .click(); + cy.get('#jhi-confirm-delete-assertion').click(); + }); + recurse( + () => + cy.request({ + url: `https://pub.qa.orcid.org/v3.0/${record.id}/services`, + headers: { Accept: 'application/json' } + }), + res => { + console.log(res); + expect(res.body['affiliation-group']).to.have.length(0); + }, + { + log: true, + limit: 20, // max number of iterations + timeout: 600000, // time limit in ms + delay: 30000 // delay before next iteration, ms + } + ); + cy.programmaticSignout(); + }); +}); diff --git a/ui/cypress/integration/retention/add-member.js b/ui/cypress/integration/retention/add-member.js new file mode 100644 index 000000000..2e4db291d --- /dev/null +++ b/ui/cypress/integration/retention/add-member.js @@ -0,0 +1,89 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; +const { salesforceId, clientName, clientId } = data.member; + +describe('Test "Add member" functionality', () => { + it('Add member', function() { + cy.programmaticSignin(credentials.adminEmail, credentials.adminPassword); + cy.visit('/member'); + cy.get('tbody') + .children() + // Fetch existing salesforce id + .first().children().first().then(existingSfId => { + // Check required field flags + cy.visit('/member/new') + cy.get('#field_salesforceId').should('have.class', 'ng-invalid'); + cy.get('#field_clientName').should('have.class', 'ng-invalid'); + // Save button should be disabled + cy.get('#save-entity') + .invoke('attr', 'disabled') + .should('exist'); + // Check salesforce id warning message when field is clear + cy.get('#field_salesforceId') + .type(salesforceId) + .clear(); + cy.get('small').should('exist'); + cy.get('#save-entity') + .invoke('attr', 'disabled') + .should('exist'); + // Enter existing salesforce id to generate an error + cy.get('#field_salesforceId').type(existingSfId.text()); + cy.get('#field_parentSalesforceId').type(clientName); + // Enter invalid client name to generate an error + cy.get('#field_clientName') + .type(data.invalidString) + .clear(); + cy.get('small').should('exist'); + cy.get('#save-entity') + .invoke('attr', 'disabled') + .should('exist'); + cy.get('#field_clientName').type(data.populatedMember.clientName); + cy.get('#save-entity').click(); + // Two error messages should appear for existing salesforce id and member name + cy.get('.validation-errors') + .children() + .should('have.length', 2); + // Enter invalid client id to generate an error + cy.get('#field_clientId').type(data.invalidString); + cy.get('small').should('exist'); + // Check for flag on client id input field + cy.get('#field_clientId').should('have.class', 'ng-invalid'); + cy.get('#save-entity') + .invoke('attr', 'disabled') + .should('exist'); + // Check the enable assertions checkbox + cy.get('#field_assertionServiceEnabled').check(); + cy.get('#field_clientId') + .clear() + .type(clientId); + cy.get('#field_clientName') + .clear() + .type(clientName); + // Checkbox should be unchecked after clearing client id field + cy.get('#field_assertionServiceEnabled') + .should('not.be.checked') + .check(); + // Parent salesforce id for consortium lead members must match salesforce id or be blank + cy.get('#field_isConsortiumLead') + .should('not.be.checked') + .check(); + cy.get('#save-entity') + .invoke('attr', 'disabled') + .should('exist'); + cy.get('#field_parentSalesforceId') + .clear() + .type(salesforceId); + // Save button should still be disabled due to invalid parent SF id + cy.get('#save-entity') + .invoke('attr', 'disabled') + .should('exist'); + cy.get('#field_parentSalesforceId') + .clear() + .type(existingSfId.text()); + cy.get('#save-entity') + .invoke('attr', 'disabled') + .should('not.exist'); + }); + }); +}); diff --git a/ui/cypress/integration/retention/add-user.js b/ui/cypress/integration/retention/add-user.js new file mode 100644 index 000000000..84b6e607c --- /dev/null +++ b/ui/cypress/integration/retention/add-user.js @@ -0,0 +1,83 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; + +describe('Add new user', () => { + it('Add user', function() { + // enter email + cy.programmaticSignin(data.member.users.owner.email, credentials.password); + cy.visit('/user/new'); + // type in invalid email address + cy.get('#field_email').type(data.invalidEmail); + // type in name and surname + cy.get('#field_firstName').type(data.testString); + cy.get('#field_lastName').type(data.testString); + // save button should be disabled + cy.get('#save-entity2') + .invoke('attr', 'disabled') + .should('exist'); + // email input field should have warning label + cy.get('#field_email') + .should('have.class', 'ng-invalid') + // enter existing email address + .clear() + .type(data.member.users.owner.email); + cy.get('#save-entity2').click(); + cy.get('.validation-errors') + .children() + .should('have.length', 1); + cy.get('#field_email') + .clear() + .type(data.member.users.newUser.email); + // check "Organization owner" + cy.get('#field_mainContact').click(); + // Admin checkbox should not exist + cy.get('#field_isAdmin').should('not.exist'); + // save + cy.get('#save-entity').click(); + cy.get('.alert-success').should('exist'); + + // check org owner update email + const date = new Date(); + cy.task('checkInbox', { + subject: data.outbox.ownerUpdateSubject, + to: data.member.users.newUser.email, + }); + + // check activation email and follow the provided url + cy.task('checkInbox', { + subject: data.outbox.activationSubject, + to: data.member.users.newUser.email, + }).then(email => { + cy.visitLinkFromEmail(email); + }); + + cy.processPasswordForm('#password'); + // check success message + cy.get('.alert-success').within(() => { + cy.get('a') + .filter('[jhitranslate="global.messages.info.authenticated.link.string"]') + .click(); + }); + // sign in and confirm the activation was successful + }); + + it('Change organisation owner back to the original user', function() { + cy.programmaticSignin(data.member.users.newUser.email, credentials.password); + cy.changeOrgOwner(); + }); + + it('Remove added user', function() { + cy.programmaticSignin(data.member.users.owner.email, credentials.password); + cy.visit('/user'); + cy.get('.btn-group').each($e => { + cy.wrap($e) + .children() + .last() + .invoke('attr', 'disabled') + .then(disabled => { + disabled ? cy.log('Skipping user, button is disabled') : cy.removeAffiliation($e); + }); + }); + }); +}); diff --git a/ui/cypress/integration/retention/csv-add-affiliations.js b/ui/cypress/integration/retention/csv-add-affiliations.js new file mode 100644 index 000000000..0779615c6 --- /dev/null +++ b/ui/cypress/integration/retention/csv-add-affiliations.js @@ -0,0 +1,137 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; +import record from '../../fixtures/csv-orcid-record.json'; +import { recurse } from 'cypress-recurse'; + +describe('Test adding affiliations via CSV', () => { + beforeEach(() => { + cy.programmaticSignin(data.csvMember.users.owner.email, credentials.password); + cy.visit('/assertion'); + }) + + it('Upload CSV and check inbox for the confirmation email', function() { + cy.uploadCsv('../fixtures/affiliations.csv'); + cy.task('checkInbox', { + subject: data.outbox.csvUpload, + to: data.csvMember.users.owner.email, + }).then(email => { + const body = email[0].body.html; + expect(body).to.have.string('The CSV upload was successfully processed with the following results:'); + expect(body).to.have.string('7\r\n\t  \r\n\t affiliations added'); + expect(body).to.have.string('0\r\n\t  \r\n\t affiliations updated'); + expect(body).to.have.string('0\r\n\t  \r\n\t affiliations deleted'); + expect(body).to.have.string('2\r\n\t  \r\n\t duplicate(s) ignored'); + }); + }); + + it('Grant permission and confirm that the affiliations were added to the UI and the registry', function() { + cy.get('tbody').within(() => { + cy.get('tr').each(($e) => { + cy.wrap($e).children().eq(0).contains(record.email); + cy.wrap($e).children().eq(1).should('not.contain', record.id); + cy.wrap($e).children().eq(4).contains('Pending'); + }) + }) + cy.fetchLinkAndGrantPermission(record.email); + + recurse( + () => + cy.request({ + url: `https://pub.qa.orcid.org/v3.0/${record.id}/activities`, + headers: { Accept: 'application/json' } + }), + res => { + expect(res.body['distinctions']['affiliation-group']).to.have.length(1); + expect(res.body['educations']['affiliation-group']).to.have.length(1); + expect(res.body['employments']['affiliation-group']).to.have.length(1); + expect(res.body['invited-positions']['affiliation-group']).to.have.length(1); + expect(res.body['memberships']['affiliation-group']).to.have.length(1); + expect(res.body['qualifications']['affiliation-group']).to.have.length(1); + expect(res.body['services']['affiliation-group']).to.have.length(1); + }, + { + log: true, + limit: 20, // max number of iterations + timeout: 600000, // time limit in ms + delay: 30000 // delay before next iteration, ms + } + ); + }); + + it ('Check that the statuses of the affiliations have changed to "In ORCID"', function() { + cy.get('tbody').within(() => { + cy.get('tr').each(($e) => { + cy.wrap($e).children().eq(1).contains(record.id); + cy.wrap($e).children().eq(4).contains('In ORCID'); + }) + }) + }) + + it('Download the CSV and edit the contents to have the affiliations removed', function() { + cy.intercept('https://member-portal.qa.orcid.org/services/assertionservice/api/assertion/csv').as('generateCsv') + cy.get('#jh-generate-csv').click(); + // Occasionally, trying to download the csv results in a 403 code due to an invalid CSRF token, in which case we retry + cy.wait('@generateCsv').then((int) => { + if (int.response.statusCode !== 200) { + cy.get('#jh-generate-csv').click(); + } + }) + cy.task('checkInbox', { + to: data.csvMember.users.owner.email, + subject: data.outbox.csvDownload, + include_attachments: true, + }).then(csv => { + const csvContents = Buffer.from(csv[0].attachments[0].data, 'base64') + .toString('ascii') + .trim(); + const lines = csvContents.split('\n'); + console.log(lines); + for (var i = 1; i < lines.length; i++) { + lines[i] = ',,,,,,,,,,,,,,,' + lines[i].slice(lines[i].lastIndexOf(',')); + } + const data = lines.join('\n'); + cy.writeFile('./cypress/fixtures/downloadedAffiliations.csv', data); + }); + }); + + it('Upload second CSV and check inbox for the confirmation email', function() { + cy.uploadCsv('../fixtures/downloadedAffiliations.csv'); + cy.task('checkInbox', { + subject: data.outbox.csvUpload, + to: data.csvMember.users.owner.email, + }).then(email => { + const body = email[0].body.html; + expect(body).to.have.string('The CSV upload was successfully processed with the following results:'); + expect(body).to.have.string('0\r\n\t  \r\n\t affiliations added'); + expect(body).to.have.string('0\r\n\t  \r\n\t affiliations updated'); + expect(body).to.have.string('7\r\n\t  \r\n\t affiliations deleted'); + expect(body).to.have.string('0\r\n\t  \r\n\t duplicate(s) ignored'); + }); + }); + + it ('Confirm that the affiliations have been removed from the UI and the registry', function() { + recurse( + () => + cy.request({ + url: `https://pub.qa.orcid.org/v3.0/${record.id}/activities`, + headers: { Accept: 'application/json' } + }), + res => { + expect(res.body['distinctions']['affiliation-group']).to.have.length(0); + expect(res.body['educations']['affiliation-group']).to.have.length(0); + expect(res.body['employments']['affiliation-group']).to.have.length(0); + expect(res.body['invited-positions']['affiliation-group']).to.have.length(0); + expect(res.body['memberships']['affiliation-group']).to.have.length(0); + expect(res.body['qualifications']['affiliation-group']).to.have.length(0); + expect(res.body['services']['affiliation-group']).to.have.length(0); + }, + { + log: true, + limit: 20, // max number of iterations + timeout: 600000, // time limit in ms + delay: 30000 // delay before next iteration, ms + } + ); + }) +}); diff --git a/ui/cypress/integration/retention/csv-edit-affiliations.js b/ui/cypress/integration/retention/csv-edit-affiliations.js new file mode 100644 index 000000000..98d5548e7 --- /dev/null +++ b/ui/cypress/integration/retention/csv-edit-affiliations.js @@ -0,0 +1,91 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; +import record from '../../fixtures/csv-populated-orcid-record.json'; +import helpers from '../../helpers/helpers.js'; +import { recurse } from 'cypress-recurse'; +const testString = helpers.newUser.testString; + +describe('Test updating affiliations via CSV', () => { + beforeEach(() => { + cy.programmaticSignin(data.csvPopulatedMember.users.owner.email, credentials.password); + cy.visit('/assertion'); + }); + + it('Edit the contents of the existing CSV file', function() { + let editSections = ['department-name', 'org-city', 'org-name', 'role-title']; + let result = ''; + cy.readFile('./cypress/fixtures/editAffiliations.csv').then(csv => { + console.log(csv); + let lines = csv.trim().split('\n'); + let headers = lines[0].split(','); + result = lines[0] + '\n'; + for (var i = 1; i < lines.length; i++) { + let currentline = lines[i].split(','); + for (var j = 0; j < headers.length; j++) { + if (editSections.includes(headers[j])) currentline[j] = `"${testString}"`; + } + result += currentline.join(',') + '\n'; + } + console.log(result); + cy.writeFile('./cypress/fixtures/editAffiliations.csv', result); + }) + + }); + + it('Upload CSV and check inbox for the confirmation email', function() { + cy.uploadCsv('../fixtures/editAffiliations.csv'); + cy.task('checkInbox', { + subject: data.outbox.csvUpload, + to: data.csvPopulatedMember.users.owner.email + }).then(email => { + const body = email[0].body.html; + expect(body).to.have.string('The CSV upload was successfully processed with the following results:'); + expect(body).to.have.string('0\r\n\t  \r\n\t affiliations added'); + expect(body).to.have.string('7\r\n\t  \r\n\t affiliations updated'); + expect(body).to.have.string('0\r\n\t  \r\n\t affiliations deleted'); + expect(body).to.have.string('0\r\n\t  \r\n\t duplicate(s) ignored'); + }); + }); + + it('Confirm the changes in the registry', function() { + recurse( + () => + cy.request({ + url: `https://pub.qa.orcid.org/v3.0/${record.id}/activities`, + headers: { Accept: 'application/json' } + }), + res => { + const distinction = res.body['distinctions']['affiliation-group'][0]['summaries'][0]['distinction-summary']; + const education = res.body['educations']['affiliation-group'][0]['summaries'][0]['education-summary']; + const employment = res.body['employments']['affiliation-group'][0]['summaries'][0]['employment-summary']; + const invitedPosition = res.body['invited-positions']['affiliation-group'][0]['summaries'][0]['invited-position-summary']; + const membership = res.body['memberships']['affiliation-group'][0]['summaries'][0]['membership-summary']; + const qualification = res.body['qualifications']['affiliation-group'][0]['summaries'][0]['qualification-summary']; + const service = res.body['services']['affiliation-group'][0]['summaries'][0]['service-summary']; + const trimmedString = testString.trim(); + // cy.checkAffiliationChanges will not retry on fail, which is why we make sure all sections got updated before asserting everything + expect(distinction['department-name']).to.eq(trimmedString); + expect(education['department-name']).to.eq(trimmedString); + expect(employment['department-name']).to.eq(trimmedString); + expect(invitedPosition['department-name']).to.eq(trimmedString); + expect(membership['department-name']).to.eq(trimmedString); + expect(qualification['department-name']).to.eq(trimmedString); + expect(service['department-name']).to.eq(trimmedString); + cy.checkAffiliationChanges(distinction, trimmedString); + cy.checkAffiliationChanges(education, trimmedString); + cy.checkAffiliationChanges(employment, trimmedString); + cy.checkAffiliationChanges(invitedPosition, trimmedString); + cy.checkAffiliationChanges(membership, trimmedString); + cy.checkAffiliationChanges(qualification, trimmedString); + cy.checkAffiliationChanges(service, trimmedString); + }, + { + log: true, + limit: 20, // max number of iterations + timeout: 600000, // time limit in ms + delay: 30000 // delay before next iteration, ms + } + ); + }) +}); diff --git a/ui/cypress/integration/retention/csv-invalid-affiliations.js b/ui/cypress/integration/retention/csv-invalid-affiliations.js new file mode 100644 index 000000000..de11a9b11 --- /dev/null +++ b/ui/cypress/integration/retention/csv-invalid-affiliations.js @@ -0,0 +1,18 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; + +describe('Test invalid CSV upload', () => { + it('Upload CSV and check inbox for the error message', function() { + cy.programmaticSignin(data.csvMember.users.owner.email, credentials.password); + cy.visit('/assertion'); + cy.uploadCsv('../fixtures/invalidAffiliations.csv'); + cy.task('checkInbox', { + subject: data.outbox.csvUpload, + to: data.csvMember.users.owner.email + }).then(email => { + const body = email[0].body.html; + expect(body).to.have.string('There was a problem with your CSV upload. Pleases fix the errors below and try again.'); + }); + }); +}); diff --git a/ui/cypress/integration/retention/edit-affiliation.js b/ui/cypress/integration/retention/edit-affiliation.js new file mode 100644 index 000000000..00276d04c --- /dev/null +++ b/ui/cypress/integration/retention/edit-affiliation.js @@ -0,0 +1,69 @@ +/// +import data from '../../fixtures/test-data.json'; +import record from '../../fixtures/populated-orcid-record.json'; +import credentials from '../../fixtures/credentials.json'; +import helpers from '../../helpers/helpers.js'; +import { recurse } from 'cypress-recurse'; +const testString = helpers.newUser.testString; + +describe('Edit an affiliation', () => { + beforeEach(() => { + cy.programmaticSignin(data.populatedMember.users.owner.email, credentials.password); + }) + it('Edit affiliation in the member portal', function() { + cy.visit('/assertion') + cy.visit(`/assertion/${record.affiliation.id}/edit`); + + cy.get('#field_orgName') + .clear() + .type(testString); + cy.get('#field_orgCity') + .clear() + .type(testString); + cy.get('#field_departmentName') + .clear() + .type(testString); + cy.get('#field_roleTitle') + .clear() + .type(testString); + cy.get('#save-entity').click(); + + cy.get('tbody') + .children() + .first() + .children() + .eq(4) + .contains('Pending update in ORCID'); + }); + + it('Confirm the affiliation has been updated in the registry', () => { + recurse( + () => + cy.request({ + url: `https://pub.qa.orcid.org/v3.0/${record.id}/educations`, + headers: { Accept: 'application/json' } + }), + res => { + const education = res.body['affiliation-group'][0]['summaries'][0]['education-summary']; + expect(res.body['affiliation-group']).to.have.length(1); + expect(education['department-name']).to.eq(testString); + expect(education['role-title']).to.eq(testString); + expect(education['organization']['address']['city']).to.eq(testString.trim()); + expect(education['organization']['name']).to.eq(testString.trim()); + }, + { + log: true, + limit: 20, // max number of iterations + timeout: 600000, // time limit in ms + delay: 30000 // delay before next iteration, ms + } + ); + cy.visit('assertion') + cy.get('tbody') + .children() + .first() + .children() + .eq(4) + .contains('In ORCID'); + }); +}); diff --git a/ui/cypress/integration/retention/edit-member.js b/ui/cypress/integration/retention/edit-member.js new file mode 100644 index 000000000..a3002fae8 --- /dev/null +++ b/ui/cypress/integration/retention/edit-member.js @@ -0,0 +1,70 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; +const { salesforceId, clientName, clientId } = data.member; + +describe('Manage members menu', () => { + it('Test edit member form', function() { + cy.programmaticSignin(credentials.adminEmail, credentials.adminPassword); + cy.visit(`/member/${data.member.id}/edit`); + cy.get('#field_isConsortiumLead') + .should('be.checked') + .uncheck(); + cy.get('#field_salesforceId') + .invoke('attr', 'disabled') + .should('exist'); + cy.get('#field_parentSalesforceId') + .clear() + .type(clientName); + // Shouldn't be able to save without a client name + cy.get('#field_clientName').clear(); + cy.get('#save-entity') + .invoke('attr', 'disabled') + .should('exist'); + cy.get('small') + .filter('[jhitranslate="entity.validation.required.string"]') + .should('exist'); + // Enter existing client name and check for relevant error message + cy.get('#field_clientName').type(data.populatedMember.clientName); + cy.get('#save-entity').click(); + cy.get('.validation-errors') + .children() + .should('have.length', 1); + cy.get('#field_clientName') + .clear() + .type(clientName); + // Check client id warning message + cy.get('#field_clientId').type(data.invalidString); + cy.get('small').should('exist'); + cy.get('#save-entity') + .invoke('attr', 'disabled') + .should('exist'); + cy.get('#field_clientId').clear(); + cy.get('#field_clientId').type(clientId); + // Assertions enabled checkbox should be unchecked after clearing client id field + cy.get('#field_assertionServiceEnabled') + .should('not.be.checked') + .check(); + // Parent salesforce id for consortium lead members must match salesforce id or be blank + cy.get('#field_isConsortiumLead') + .should('not.be.checked') + .check(); + cy.get('#save-entity') + .invoke('attr', 'disabled') + .should('exist'); + cy.get('#field_parentSalesforceId') + .clear() + .type(salesforceId); + cy.get('#save-entity') + .invoke('attr', 'disabled') + .should('exist'); + cy.get('#field_salesforceId') + .invoke('val') + .then(id => { + cy.get('#field_parentSalesforceId') + .clear() + .type(id); + cy.get('#save-entity').click(); + }); + }); +}); diff --git a/ui/cypress/integration/retention/edit-user.js b/ui/cypress/integration/retention/edit-user.js new file mode 100644 index 000000000..be041aedd --- /dev/null +++ b/ui/cypress/integration/retention/edit-user.js @@ -0,0 +1,49 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; + +describe('Test the edit user form', () => { + it('Edit user', function() { + cy.programmaticSignin(data.populatedMember.users.owner.email, credentials.password); + cy.visit(`/user/${data.populatedMember.users.owner.id}/edit`); + // Clear first name input field + cy.get('#field_firstName').clear(); + // Shouldn't be possible to save with an empty name field + cy.get('#save-entity2') + .invoke('attr', 'disabled') + .should('exist'); + // Check for 'required' flag on the input field + cy.get('#field_firstName') + .should('have.class', 'ng-invalid') + .type("Automated") + // Clear last name input field + cy.get('#field_lastName').clear(); + // Shouldn't be possible to save with an empty name field + cy.get('#save-entity2') + .invoke('attr', 'disabled') + .should('exist'); + // Check for 'required' flag on the input field + cy.get('#field_lastName') + .should('have.class', 'ng-invalid') + .type("Test") + // Check disabled fields + cy.get('#field_email') + .invoke('attr', 'disabled') + .should('exist'); + cy.get('#field_mainContact') + .invoke('attr', 'disabled') + .should('exist'); + cy.get('#field_salesforceId') + .invoke('attr', 'disabled') + .should('exist'); + // Admin checkbox should not exist + cy.get('#field_isAdmin').should('not.exist'); + // 'Activated' checkbox is missing the 'disabled' attr + /*cy.get('#field_activated') + .invoke('attr', 'disabled') + .should('exist');*/ + // save + cy.get('#save-entity2').click(); + cy.get('.alert-success').should('exist'); + }); +}); diff --git a/ui/cypress/integration/retention/notifications.js b/ui/cypress/integration/retention/notifications.js new file mode 100644 index 000000000..6e082fe32 --- /dev/null +++ b/ui/cypress/integration/retention/notifications.js @@ -0,0 +1,108 @@ +/// +import data from '../../fixtures/test-data.json'; +import record from '../../fixtures/orcid-record.json'; +import credentials from '../../fixtures/credentials.json'; + +const { country, type } = record.affiliation; +const { ror } = record.affiliation.org; + +describe('Test notifications', () => { + it('Add an affiliation with an email missing from the registry', function() { + cy.programmaticSignin(data.notificationsMember.users.owner.email, credentials.password); + cy.visit('/assertion/new'); + cy.get('#field_email').type(record.nonregisteredEmail); + cy.get('#field_affiliationSection').select(type); + cy.get('#field_orgName').type(data.testString); + cy.get('#field_orgCity').type(data.testString); + cy.get('#field_orgCountry').select(country); + cy.get('#field_disambiguationSource').select(ror.name); + cy.get('#field_disambiguatedOrgId').type(ror.id); + cy.get('#save-entity').click(); + cy.get('.alert-success').should('exist'); + cy.programmaticSignout(); + }); + + it('Add an affiliation with an email present in the registry and generate notifications', function() { + cy.programmaticSignin(data.notificationsMember.users.owner.email, credentials.password); + cy.visit('/assertion/new'); + cy.get('#field_email').type(record.email); + cy.get('#field_affiliationSection').select(type); + cy.get('#field_orgName').type(data.testString + ' 2'); + cy.get('#field_orgCity').type(data.testString + ' 2'); + cy.get('#field_orgCountry').select(country); + cy.get('#field_disambiguationSource').select(ror.name); + cy.get('#field_disambiguatedOrgId').type(ror.id); + cy.get('#save-entity').click(); + cy.get('.alert-success').should('exist'); + cy.visit('/assertion'); + cy.get('#jh-send-notifications').click(); + cy.get('#langKey').should('have.value', data.italianLanguageCode); + cy.get('#jhi-confirm-csv-upload').click(); + cy.get('.alert-success').should('exist'); + cy.get('tbody') + .children() + .should('have.length', 2); + cy.get('tbody') + .children() + .eq(0) + .children() + .eq(4) + .contains('Notification requested'); + cy.get('tbody') + .children() + .eq(1) + .children() + .eq(4) + .contains('Notification requested'); + cy.programmaticSignout(); + }); + + it('Check inbox for succesful notfications confirmation', function() { + cy.task('checkInbox', { + subject: data.outbox.notificationConfirmation, + to: data.notificationsMember.users.owner.email + }).then(email => { + const body = email[0].body.html; + expect(body).to.have.string('Thank you for choosing to use the permission notification process.'); + expect(body).to.have.string('1\r\n  \r\n ORCID inbox notifications'); + expect(body).to.have.string('1\r\n  \r\n emails'); + }); + }); + + it('Check inbox for translated notification for non-registered email', function() { + cy.task('checkInbox', { + subject: data.outbox.notificationNonRegisteredUserItalian, + to: record.nonregisteredEmail + }).then(email => { + const body = email[0].body.html; + cy.log(body); + expect(body).to.have.string('Consentendo a NOTIFICATIONS TEST di aggiungere le informazioni di ricerca al tuo record ORCID, puoi dedicare più tempo alla ricerca e meno alla gestione! Prima però avremo bisogno del tuo permesso, quindi clicca sul link di seguito per iniziare. Ti reindirizzeremo su ORCID; dopo aver eseguito l’accesso, clicca su “autorizza accesso” per consentire a NOTIFICATIONS TEST di aggiungere informazioni al tuo record'); + expect(body).to.have.string('Dopo aver concesso il permesso, al tuo record ORCID verrà aggiunta una voce di affiliazione. Tieni presente che potrebbero volerci fino a 5 minuti per l’aggiornamento del tuo record ORCID.'); + }); + }); + + it('Check inbox for translated notification for the registered email', function() { + cy.task('checkInbox', { + subject: data.outbox.notificationRegisteredUser, + to: record.email, + from: data.outbox.updateEmail + }).then(email => { + const body = email[0].body.html; + expect(body).to.have.string('Le affiliazioni possono essere aggiunte al tuo archivio dalle organizzazioni a te associate. Questo ti fa risparmiare tempo e aumenta il livello di fiducia in archivio.'); + expect(body).to.have.string('Grant permission \r\n '); + expect(body).to.have.string('href="https://qa.orcid.org/inbox/encrypted/'); + expect(body).to.have.string('ORCID Member Portal - QA\r\n has asked for permission to make changes to your ORCID record'); + }); + }); + + it('Delete added affiliations', function() { + cy.programmaticSignin(data.notificationsMember.users.owner.email, credentials.password); + cy.visit('/assertion') + cy.get('.btn-group').each($e => { + cy.wrap($e).children().last().click() + cy.get('#jhi-confirm-delete-assertion').click() + }) + cy.programmaticSignout() + }); + +}); diff --git a/ui/cypress/integration/retention/reset-password.js b/ui/cypress/integration/retention/reset-password.js new file mode 100644 index 000000000..4375d5c3a --- /dev/null +++ b/ui/cypress/integration/retention/reset-password.js @@ -0,0 +1,58 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; + +describe('Test the password reset functionality', () => { + it('Forgot your password?', function() { + cy.visit('/reset/request'); + cy.get('#email').type(data.invalidEmail); + cy.get('small') + .filter('[jhitranslate="global.messages.validate.email.invalid.string"]') + .should('exist'); + cy.get('button') + .filter('[type="submit"]') + .invoke('attr', 'disabled') + .should('exist'); + cy.get('#email') + .clear() + .type(data.member.users.owner.email); + cy.get('button') + .filter('[type="submit"]') + .click(); + + cy.task('checkInbox', { + to: data.member.users.owner.email, + subject: data.outbox.resetPasswordSubject + }).then(email => { + cy.visitLinkFromEmail(email); + }); + + cy.processPasswordForm('#password'); + + cy.get('.alert-success').within(() => { + cy.get('a') + .filter('[jhitranslate="global.messages.info.authenticated.link.string"]') + .click(); + }); + // sign in and confirm the activation was successful + cy.programmaticSignin(data.member.users.owner.email, credentials.password); + cy.programmaticSignout(); + }); + + it('Change password', function() { + cy.programmaticSignin(data.populatedMember.users.owner.email, credentials.password); + cy.visit('/password'); + cy.get('#currentPassword').type(credentials.wrongConfirmationPasssword); + cy.processPasswordForm('#newPassword'); + cy.get('.alert-danger') + .filter('[jhitranslate="password.messages.error.string"]') + .should('exist'); + cy.get('#currentPassword') + .clear() + .type(credentials.password); + cy.get('button') + .filter('[type="submit"]') + .click(); + cy.get('.alert-success').should('exist'); + }); +}); diff --git a/ui/cypress/integration/retention/restricted-access.js b/ui/cypress/integration/retention/restricted-access.js new file mode 100644 index 000000000..875b642fd --- /dev/null +++ b/ui/cypress/integration/retention/restricted-access.js @@ -0,0 +1,49 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; + +describe('Test restricted access', () => { + afterEach(() => { + cy.programmaticSignout(); + }) + + it('Regular users should not be able to access the Manage Members menu', function() { + cy.programmaticSignin(data.populatedMember.users.user.email, credentials.password); + cy.visit('/member'); + cy.get('h1').filter('[jhitranslate="error.title.string"]').contains('Your request cannot be processed') + cy.get('div').filter('[jhitranslate="error.http.403.string"]').invoke('attr', 'hidden').should('not.exist') + }); + + it('Regular users should not be able to access the Manage Users menu', function() { + cy.programmaticSignin(data.populatedMember.users.user.email, credentials.password); + cy.visit('/user'); + cy.get('h1').filter('[jhitranslate="error.title.string"]').contains('Your request cannot be processed') + cy.get('div').filter('[jhitranslate="error.http.403.string"]').invoke('attr', 'hidden').should('not.exist') + }); + + it('Org owners should not be able to access the Manage Members menu', function() { + cy.programmaticSignin(data.populatedMember.users.owner.email, credentials.password); + cy.visit('/member'); + cy.get('h1').filter('[jhitranslate="error.title.string"]').contains('Your request cannot be processed') + cy.get('div').filter('[jhitranslate="error.http.403.string"]').invoke('attr', 'hidden').should('not.exist') + }); + + it('Cannot access the assertion menu if assertions are not enabled', function() { + cy.programmaticSignin(data.homepageTestMembers.consortiumLeadAndMember.email, credentials.password); + cy.visit('/assertion'); + cy.get('h1').filter('[jhitranslate="error.title.string"]').contains('Your request cannot be processed') + cy.get('div').filter('[jhitranslate="error.http.403.string"]').invoke('attr', 'hidden').should('not.exist') + }); + + /* it('Anonymous users cannot access anything', function() { + cy.visit('/assertion'); + cy.get('h1').filter('[jhitranslate="error.title.string"]').contains('Your request cannot be processed') + cy.get('div').filter('[jhitranslate="error.http.403.string"]').invoke('attr', 'hidden').should('not.exist') + cy.visit('/user'); + cy.get('h1').filter('[jhitranslate="error.title.string"]').contains('Your request cannot be processed') + cy.get('div').filter('[jhitranslate="error.http.403.string"]').invoke('attr', 'hidden').should('not.exist') + cy.visit('/member'); + cy.get('h1').filter('[jhitranslate="error.title.string"]').contains('Your request cannot be processed') + cy.get('div').filter('[jhitranslate="error.http.403.string"]').invoke('attr', 'hidden').should('not.exist') + }); */ +}); diff --git a/ui/cypress/integration/retention/ui-authorities.js b/ui/cypress/integration/retention/ui-authorities.js new file mode 100644 index 000000000..19886e6c8 --- /dev/null +++ b/ui/cypress/integration/retention/ui-authorities.js @@ -0,0 +1,223 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; + +describe('Test authorities', () => { + afterEach(() => { + cy.programmaticSignout(); + }); + + /* ************************************************************************************************************************ + * ************************************************************************************************************************ + * REGULAR USER + * ************************************************************************************************************************ + * ************************************************************************************************************************ + */ + + it('User', function () { + cy.programmaticSignin(data.populatedMember.users.user.email, credentials.password); + cy.visit('/'); + cy.get('#admin-menu').should('not.exist'); + cy.get('#entity-menu').should('exist'); + cy.get('a') + .filter('[href="/assertion"]') + .should('exist'); + cy.get('a') + .filter('[href="/user"]') + .should('not.exist'); + cy.get('a') + .filter('[href="/member"]') + .should('not.exist'); + + cy.getUsersBySfId(data.populatedMember.salesforceId, 401); + cy.getUsersBySfId(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 400, "Salesforce id doesn't match current user's memeber"); + cy.getAllUsers(403, 'Forbidden'); + cy.getAllMembers(403, 'Forbidden'); + cy.addMember(data.populatedMember.salesforceId, false, false, 403, 'Forbidden'); + cy.updateMember(data.populatedMember.salesforceId, false, false, 403, 'Forbidden'); + cy.validateMember(data.populatedMember.salesforceId, false, false, 403, 'Forbidden'); + + //cy.changeNotificationLanguage(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, data.italianLanguageCode, 401); + + cy.updateContact(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 401, 'Unauthorized'); + cy.updateMemberDetails(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, "The Harvest Ascendancy", 401, 'Unauthorized'); + cy.getMemberDetails(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 401, 'Unauthorized'); + cy.getMemberContacts(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 401, 'Unauthorized'); + cy.getMemberOrgIds(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 401, 'Unauthorized'); + + + cy.getMembersList(403, 'Forbidden'); + + // TODO: Awaiting endpoint changes + cy.getMember(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 200); + + cy.deleteMember(data.populatedMember.salesforceId, 403, 'Forbidden'); + + cy.addConsortiumMember(403, 'Forbidden'); + cy.removeConsortiumMember(403, 'Forbidden'); + + cy.getAssertions(200); + }); + + /* ************************************************************************************************************************ + * ************************************************************************************************************************ + * ORG OWNER + * ************************************************************************************************************************ + * ************************************************************************************************************************ + */ + + it('Org owner', function () { + cy.programmaticSignin(data.populatedMember.users.owner.email, credentials.password); + cy.visit('/'); + cy.get('#admin-menu').should('exist'); + cy.get('#entity-menu').should('exist'); + cy.get('a') + .filter('[href="/user"]') + .should('exist'); + cy.get('a') + .filter('[href="/assertion"]') + .should('exist'); + cy.get('a') + .filter('[href="/member"]') + .should('not.exist'); + + cy.getUsersBySfId(data.populatedMember.salesforceId, 200); + cy.getUsersBySfId(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 400, "Salesforce id doesn't match current user's memeber"); + cy.getAllUsers(403, 'Forbidden'); + cy.getAllMembers(403, 'Forbidden'); + cy.addMember(data.populatedMember.salesforceId, false, false, 403, 'Forbidden'); + cy.updateMember(data.populatedMember.salesforceId, false, false, 403, 'Forbidden'); + cy.validateMember(data.populatedMember.salesforceId, false, false, 403, 'Forbidden'); + + //cy.changeNotificationLanguage(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, data.italianLanguageCode, 401); + + cy.updateContact(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 401, 'Unauthorized'); + cy.updateMemberDetails(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 'The Harvest Ascendancy', 401, 'Unauthorized'); + cy.getMemberDetails(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 401, 'Unauthorized'); + cy.getMemberContacts(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 401, 'Unauthorized'); + cy.getMemberOrgIds(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 401, 'Unauthorized'); + + + cy.getMembersList(403, 'Forbidden'); + + // TODO: Awaiting endpoint changes + cy.getMember(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 200); + + cy.addConsortiumMember(403, 'Forbidden'); + cy.removeConsortiumMember(403, 'Forbidden'); + + cy.deleteMember(data.populatedMember.salesforceId, 403, 'Forbidden'); + cy.getAssertions(200); + }); + + /* ************************************************************************************************************************ + * ************************************************************************************************************************ + * ADMIN + * ************************************************************************************************************************ + * ************************************************************************************************************************ + */ + + it('Admin', function () { + cy.programmaticSignin(credentials.adminEmail, credentials.adminPassword); + cy.visit('/'); + cy.get('#admin-menu').should('exist'); + cy.get('#entity-menu').should('exist'); + cy.get('a') + .filter('[href="/user"]') + .should('exist'); + cy.get('a') + .filter('[href="/assertion"]') + .should('exist'); + cy.get('a') + .filter('[href="/member"]') + .should('exist'); + + cy.getUsersBySfId(data.populatedMember.salesforceId, 400, "Salesforce id doesn't match current user's memeber"); + cy.getAllUsers(200); + cy.getAllMembers(200); + cy.addMember(data.populatedMember.salesforceId, false, false, 400, 'Member invalid'); + cy.updateMember(data.invalidString, false, false, 500, 'Internal Server Error'); + cy.validateMember(data.populatedMember.salesforceId, false, false, 200); + + //cy.changeNotificationLanguage(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, data.italianLanguageCode, 401); + + cy.updateContact(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 401, 'Unauthorized'); + cy.updateMemberDetails(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 'The Harvest Ascendancy', 401, 'Unauthorized'); + cy.getMemberDetails(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 401, 'Unauthorized'); + cy.getMemberContacts(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 401, 'Unauthorized'); + cy.getMemberOrgIds(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 401, 'Unauthorized'); + + cy.getMembersList(200); + + // TODO: Awaiting endpoint changes + cy.getMember(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 200); + + cy.addConsortiumMember(403, 'Forbidden'); + cy.removeConsortiumMember(403, 'Forbidden'); + + cy.deleteMember(data.invalidString, 400, 'Invalid id'); + cy.getAssertions(200); + }); + + /* ************************************************************************************************************************ + * ************************************************************************************************************************ + * CONSORTIUM LEAD / AFFILIATION MANAGER DISABLED + * ************************************************************************************************************************ + * ************************************************************************************************************************ + */ + + it('Consortium lead', function () { + cy.programmaticSignin(data.homepageTestMembers.consortiumLeadAndMember.email, credentials.password); + cy.visit('/'); + cy.get('#admin-menu').should('not.exist'); + cy.get('#entity-menu').should('not.exist'); + cy.get('a') + .filter('[href="/user"]') + .should('not.exist'); + cy.get('a') + .filter('[href="/assertion"]') + .should('not.exist'); + cy.get('a') + .filter('[href="/member"]') + .should('not.exist'); + + cy.getUsersBySfId(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 401); + cy.getUsersBySfId(data.populatedMember.salesforceId, 400, "Salesforce id doesn't match current user's memeber"); + cy.getAllUsers(403, 'Forbidden'); + cy.getAllMembers(403, 'Forbidden'); + cy.addMember(data.populatedMember.salesforceId, false, false, 403, 'Forbidden'); + cy.updateMember(data.populatedMember.salesforceId, false, false, 403, 'Forbidden'); + cy.validateMember(data.populatedMember.salesforceId, false, false, 403, 'Forbidden'); + + //cy.changeNotificationLanguage(data.populatedMember.salesforceId, data.italianLanguageCode, 401); + + cy.updateContact(data.populatedMember.salesforceId, 401, 'Unauthorized'); + cy.updateMemberDetails(data.populatedMember.salesforceId, "Test", 401, 'Unauthorized'); + cy.getMemberDetails(data.populatedMember.salesforceId, 401, 'Unauthorized'); + cy.getMemberContacts(data.populatedMember.salesforceId, 401, 'Unauthorized'); + cy.getMemberOrgIds(data.populatedMember.salesforceId, 401, 'Unauthorized'); + + cy.getMembersList(403, 'Forbidden'); + + // TODO: Awaiting endpoint changes + cy.getMember(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 200); + + cy.deleteMember(data.homepageTestMembers.consortiumLeadAndMember.salesforceId, 403, 'Forbidden'); + cy.addConsortiumMember(200); + cy.removeConsortiumMember(200); + + // TODO: Awaiting endpoint changes + cy.getAssertions(200); + }); + + // TODO: enable once the issue with signed out users not being able to visit routes is fixed + /* it('Anonymous', function() { + cy.programmaticSignin(credentials.adminEmail, credentials.adminPassword); + cy.visit('/'); + cy.get('#admin-menu').should('not.exist'); + cy.get('#entity-menu').should('not.exist') + cy.get('a').filter('[href="/user"]').should('not.exist'); + cy.get('a').filter('[href="/assertion"]').should('not.exist'); + cy.get('a').filter('[href="/member"]').should('not.exist'); + }); */ +}); diff --git a/ui/cypress/integration/retention/ui-homepage-edit.js b/ui/cypress/integration/retention/ui-homepage-edit.js new file mode 100644 index 000000000..9a3637334 --- /dev/null +++ b/ui/cypress/integration/retention/ui-homepage-edit.js @@ -0,0 +1,72 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; + +const { email, name } = data.homepageTestMembers.consortiumMember; + +describe('Test editing member details', () => { + it('Editing Almonds Forest member details', function () { + const date = Date.now(); + cy.programmaticSignin(email, credentials.password); + cy.visit('/'); + cy.get('app-member-info-landing') + .contains(date) + .should('not.exist'); + cy.visit('/edit'); + cy.get('.text-danger').should('not.exist'); + // wait for data to load + cy.intercept(`/services/memberservice/api/members/${data.homepageTestMembers.consortiumMember.salesforceId}/member-contacts`).as('details'); + cy.wait('@details'); + cy.get('[name="orgName"]').clear().blur(); + cy.get('small').contains('Organization name cannot be empty'); + cy.get('[name="orgName"]').type(name); + cy.get('small').contains('Organization cannot be empty').should('not.exist'); + cy.get('[name="publicName"]').clear().blur(); + cy.get('small').contains('Public organization name cannot be empty'); + cy.get('[name="publicName"]').type(name + ' ' + date); + cy.get('small').contains('Public organization name cannot be empty').should('not.exist'); + cy.get('[name="country"]').invoke('attr', 'readonly').should('exist'); + cy.get('[name="state"]').should('not.exist') + cy.get('[name="trademarkLicense"][value="Yes"]').click(); + cy.get('[name="street"]').clear().type('Street ' + date); + cy.get('[name="city"]').clear().type('City ' + date); + cy.get('[name="postcode"]').clear().type(date); + + cy.get('.ql-editor') + .clear() + .type('Description: ' + date); + + cy.get('[name="website"]') + .clear() + .type(data.invalidWebsite).blur(); + cy.get('.text-danger').should('have.length', 3); + cy.get('[name="website"]') + .clear() + .type('https://' + date + '.org').blur(); + cy.get('.text-danger').should('not.exist'); + + cy.get('[name="email"]') + .clear() + .type(data.invalidEmail).blur(); + cy.get('.text-danger').should('have.length', 3); + cy.get('[name="email"]') + .clear() + .type(date + '@orcid.org').blur(); + cy.get('.text-danger').should('not.exist'); + cy.get('[type="submit"]').click(); + cy.get('app-member-info-landing', { timeout: 20000 }).contains(`${name} ${date}`); + cy.get('app-member-info-landing').contains(date + '@orcid.org'); + cy.get('app-member-info-landing').contains('https://' + date + '.org'); + cy.get('app-member-info-landing').contains('Description: ' + date); + cy.get('app-member-info-landing').contains('Street ' + date + ", City " + date + ", " + date); + cy.get('app-member-info-landing').contains(`YES - ORCID can use trademarked assets`); + cy.visit('/edit'); + // wait for data to load + cy.intercept(`/services/memberservice/api/members/${data.homepageTestMembers.consortiumMember.salesforceId}/member-contacts`).as('details'); + cy.wait('@details'); + cy.get('[name="trademarkLicense"][value="No"]').click(); + cy.get('[name="website"]').clear() + cy.get('[type="submit"]').click(); + cy.get('app-member-info-landing').contains(`NO - ORCID cannot use this organization's trademarked name and logos`); + }); +}); \ No newline at end of file diff --git a/ui/cypress/integration/retention/ui-homepage.js b/ui/cypress/integration/retention/ui-homepage.js new file mode 100644 index 000000000..513664348 --- /dev/null +++ b/ui/cypress/integration/retention/ui-homepage.js @@ -0,0 +1,103 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; + +describe('Test homepage', () => { + it('Direct member', function() { + cy.programmaticSignin(data.homepageTestMembers.directMemberEmail, credentials.password); + cy.visit('/'); + cy.get('app-member-info-landing', {timeout: 20000}) + cy.get('app-generic-landing').should('not.exist') + cy.get('.side-bar').contains("Public details") + cy.get('.side-bar').contains("Website") + cy.get('.side-bar').contains("Email") + cy.get('.side-bar').contains("https://orcid.org") + cy.get('.side-bar').contains("orcid@orcid.org") + cy.get('.main-section').contains("Membership: Active") + cy.get('.main-section').contains('Fly and Mighty') + cy.get('.main-section').contains('Contacts') + cy.get('.main-section').contains('Main relationship contact (OFFICIAL)') + cy.get('.main-section').contains('h.hanger@testingthisemail.com') + }); + + it('Consortium lead', function() { + cy.programmaticSignin(data.homepageTestMembers.consortiumLeadEmail, credentials.password); + cy.visit('/'); + cy.get('app-member-info-landing', {timeout: 20000}) + cy.get('app-generic-landing').should('not.exist') + cy.get('.side-bar').contains("Public details") + cy.get('.side-bar').contains("Website") + cy.get('.side-bar').contains("Email") + cy.get('.side-bar').contains("No website added") + cy.get('.side-bar').contains("No email added") + cy.get('.main-section').contains("Consortium lead") + cy.get('.main-section').contains("Mambo No 5") + cy.get('.main-section').contains("Consortium Members (4)") + cy.get('.main-section').contains("Member name") + cy.get('.main-section').contains("Almonds Forest") + cy.get('.main-section').contains('Contacts') + cy.get('.main-section').contains('Main relationship contact (OFFICIAL)') + cy.get('.main-section').contains('first.last@orcid.org') + }); + + it('Consortium member', function() { + cy.programmaticSignin(data.homepageTestMembers.consortiumMember.email, credentials.password); + cy.visit('/'); + cy.get('app-member-info-landing', {timeout: 20000}) + cy.get('app-generic-landing').should('not.exist') + cy.get('.side-bar').contains("Public details") + cy.get('.side-bar').contains("Website") + cy.get('.side-bar').contains("Email") + cy.get('.side-bar').contains("No website added") + cy.get('.side-bar').contains("@orcid.org") + cy.get('.main-section').contains("Consortium/Parent organization: Mambo No 5") + cy.get('.main-section').contains("Membership: Active") + cy.get('.main-section').contains("Almonds Forest") + cy.get('.main-section').contains("Description") + cy.get('.main-section').contains('Contacts') + cy.get('.main-section').contains('Agreement signatory (OFFICIAL)') + cy.get('.main-section').contains('last@orcid.org') + }); + + it('Consortium member 2', function() { + cy.programmaticSignin(data.homepageTestMembers.consortiumMemberEmail2, credentials.password); + cy.visit('/'); + cy.get('app-member-info-landing', {timeout: 20000}) + cy.get('app-generic-landing').should('not.exist') + cy.get('.side-bar').contains("Public details") + cy.get('.side-bar').contains("Website") + cy.get('.side-bar').contains("Email") + cy.get('.side-bar').contains("canadapost.ca") + cy.get('.side-bar').contains("support@orcid.org") + cy.get('.main-section').contains("Consortium/Parent organization: The Concord of Kinship") + cy.get('.main-section').contains("Membership: Active") + cy.get('.main-section').contains("Grateful Frogs") + }); + + it('Consortium member and lead', function() { + cy.programmaticSignin(data.homepageTestMembers.consortiumLeadAndMember.email, credentials.password); + cy.visit('/'); + cy.get('app-member-info-landing', {timeout: 20000}) + cy.get('app-generic-landing').should('not.exist') + cy.get('.side-bar').contains("Public details") + cy.get('.side-bar').contains("Website") + cy.get('.side-bar').contains("Email") + cy.get('.side-bar').contains("www.haevesting.com") + cy.get('.side-bar').contains("hhh@hhh.com") + cy.get('.main-section').contains("Consortium lead") + cy.get('.main-section').contains("Consortium Members (2)") + cy.get('.main-section').contains("Member name") + cy.get('.main-section').contains("Yellow member") + cy.get('.main-section').contains("The Harvest Ascendancy") + cy.get('.main-section').contains('Contacts') + cy.get('.main-section').contains('Product Contact') + cy.get('.main-section').contains('testingagain@orcid.org') + }); + + it('Inactive member', function() { + cy.programmaticSignin(data.homepageTestMembers.inactiveConsortiumMemberEmail, credentials.password); + cy.visit('/'); + cy.get('app-generic-landing', {timeout: 20000}).contains('Something has gone wrong...') + cy.get('app-member-info-landing').should('not.exist') + }); +}); diff --git a/ui/cypress/integration/retention/ui-login.js b/ui/cypress/integration/retention/ui-login.js new file mode 100644 index 000000000..15fe364a2 --- /dev/null +++ b/ui/cypress/integration/retention/ui-login.js @@ -0,0 +1,17 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; + +describe('Test sign in form', () => { + it('Sign in', function() { + cy.visit(`/`); + cy.get('#username') + .clear() + .type(data.member.users.owner.email); + cy.get('#password').type(credentials.password); + cy.get('button') + .filter('[type="submit"]') + .click(); + cy.get('#home-logged-message').should('exist'); + }); +}); diff --git a/ui/cypress/integration/retention/ui-pagination.js b/ui/cypress/integration/retention/ui-pagination.js new file mode 100644 index 000000000..625729118 --- /dev/null +++ b/ui/cypress/integration/retention/ui-pagination.js @@ -0,0 +1,51 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; + +describe('Test pagination', () => { + beforeEach(() => { + cy.programmaticSignin(data.paginationMember.users.owner.email, credentials.password); + }) + + afterEach(() => { + cy.programmaticSignout(); + }) + + it('Test the "Manage users" page', function() { + cy.visit('/user'); + /* + cy.get('.container-fluid').within(() => { + cy.get('p') + .contains('Showing 1 - 20 of 22 items') + })*/ + cy.get('tbody').children().should('have.length', 20); + cy.get('.pagination').contains("1"); + cy.get('.pagination').contains("3").should('not.exist'); + cy.get('.pagination').contains("2").click(); + cy.get('tbody').children().should('have.length', 2); + cy.get('tbody').within(() => { + cy.get('td').contains(data.paginationMember.assertionEmail1).should('not.exist'); + cy.get('td').contains(data.paginationMember.assertionEmail2); + cy.get('td').contains(data.paginationMember.assertionEmail3); + }) + }); + + it('Test the "Affiliations" page', function() { + cy.visit('/assertion'); + /* + cy.get('.container-fluid').within(() => { + cy.get('p') + .contains('Showing 1 - 20 of 22 items') + })*/ + cy.get('tbody').children().should('have.length', 20); + cy.get('.pagination').contains("1"); + cy.get('.pagination').contains("2"); + cy.get('.pagination').contains("4").should('not.exist'); + cy.get('.pagination').contains("3").click(); + cy.get('tbody').children().should('have.length', 2); + cy.get('tbody').within(() => { + cy.get('td').contains(data.paginationMember.assertionData1).should('not.exist'); + cy.get('td').contains(data.paginationMember.assertionData2); + }) + }); +}); diff --git a/ui/cypress/integration/retention/ui-reports.js b/ui/cypress/integration/retention/ui-reports.js new file mode 100644 index 000000000..d912520b7 --- /dev/null +++ b/ui/cypress/integration/retention/ui-reports.js @@ -0,0 +1,252 @@ +/// +import data from '../../fixtures/test-data.json'; +import credentials from '../../fixtures/credentials.json'; + +describe('Test report menus', () => { + it('Direct member', function() { + cy.programmaticSignin(data.homepageTestMembers.directMemberEmail, credentials.password); + cy.visit('/'); + cy.get('app-member-info-landing', { timeout: 20000 }); + cy.get('#entity-menu').click(); + cy.get('[href="/report/member"]').should('be.visible'); + cy.get('[href="/report/integration"]').should('be.visible'); + cy.get('[href="/report/affiliation"]').should('be.visible'); + cy.get('[href="/report/consortia"]').should('not.exist'); + cy.get('[href="/report/consortia-member-affiliations"]').should('not.exist'); + cy.request({ + url: '/services/memberservice/api/reports/member', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/integration', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/affiliation', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/consortia', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(400); + }); + cy.request({ + url: '/services/memberservice/api/reports/consortia-member-affiliations', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(400); + }); + }); + + it('Consortium lead', function() { + cy.programmaticSignin(data.homepageTestMembers.consortiumLeadEmail, credentials.password); + cy.visit('/'); + cy.get('#entity-menu').click(); + cy.get('[href="/report/member"]').should('be.visible'); + cy.get('[href="/report/integration"]').should('be.visible'); + cy.get('[href="/report/affiliation"]').should('be.visible'); + cy.get('[href="/report/consortia"]').should('be.visible'); + cy.get('[href="/report/consortia-member-affiliations"]').should('be.visible'); + cy.request({ + url: '/services/memberservice/api/reports/member', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/integration', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/affiliation', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/consortia', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/consortia-member-affiliations', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + }); + + it('Consortium member', function() { + cy.programmaticSignin(data.homepageTestMembers.consortiumMember.email, credentials.password); + cy.visit('/'); + cy.get('#entity-menu').click(); + cy.get('[href="/report/member"]').should('be.visible'); + cy.get('[href="/report/integration"]').should('be.visible'); + cy.get('[href="/report/affiliation"]').should('be.visible'); + cy.get('[href="/report/consortia"]').should('not.exist'); + cy.get('[href="/report/consortia-member-affiliations"]').should('not.exist'); + cy.request({ + url: '/services/memberservice/api/reports/member', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/integration', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/affiliation', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/consortia', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(400); + }); + cy.request({ + url: '/services/memberservice/api/reports/consortia-member-affiliations', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(400); + }); + }); + + it('Consortium member 2', function() { + cy.programmaticSignin(data.homepageTestMembers.consortiumMemberEmail2, credentials.password); + cy.visit('/'); + cy.get('#entity-menu').click(); + cy.get('[href="/report/member"]').should('be.visible'); + cy.get('[href="/report/integration"]').should('be.visible'); + cy.get('[href="/report/affiliation"]').should('be.visible'); + cy.get('[href="/report/consortia"]').should('not.exist'); + cy.get('[href="/report/consortia-member-affiliations"]').should('not.exist'); + cy.request({ + url: '/services/memberservice/api/reports/member', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/integration', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/affiliation', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/consortia', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(400); + }); + cy.request({ + url: '/services/memberservice/api/reports/consortia-member-affiliations', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(400); + }); + }); + + it('Consortium member and lead', function() { + cy.programmaticSignin(data.homepageTestMembers.consortiumLeadAndMember.email, credentials.password); + cy.visit('/'); + cy.get('#entity-menu').click(); + cy.get('[href="/report/member"]').should('be.visible'); + cy.get('[href="/report/integration"]').should('be.visible'); + cy.get('[href="/report/affiliation"]').should('be.visible'); + cy.get('[href="/report/consortia"]').should('be.visible'); + cy.get('[href="/report/consortia-member-affiliations"]').should('be.visible'); + cy.request({ + url: '/services/memberservice/api/reports/member', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/integration', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/affiliation', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/consortia', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/consortia-member-affiliations', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + }); + + it('Inactive member', function() { + cy.programmaticSignin(data.homepageTestMembers.inactiveConsortiumMemberEmail, credentials.password); + cy.visit('/'); + cy.get('#entity-menu').click(); + cy.get('[href="/report/member"]').should('be.visible'); + cy.get('[href="/report/integration"]').should('be.visible'); + cy.get('[href="/report/affiliation"]').should('be.visible'); + cy.get('[href="/report/consortia"]').should('not.exist'); + cy.get('[href="/report/consortia-member-affiliations"]').should('not.exist'); + cy.request({ + url: '/services/memberservice/api/reports/member', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/integration', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/affiliation', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: '/services/memberservice/api/reports/consortia', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(400); + }); + cy.request({ + url: '/services/memberservice/api/reports/consortia-member-affiliations', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(400); + }); + }); +}); diff --git a/ui/cypress/plugins/index.js b/ui/cypress/plugins/index.js new file mode 100644 index 000000000..e23160d6b --- /dev/null +++ b/ui/cypress/plugins/index.js @@ -0,0 +1,52 @@ +/// +// *********************************************************** +// This example plugins/index.js can be used to load plugins +// +// You can change the location of this file or turn off loading +// the plugins file with the 'pluginsFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/plugins-guide +// *********************************************************** + +// This function is called when a project is opened or re-opened (e.g. due to +// the project's config changing) +const data = require('../fixtures/test-data.json'); +const gmail_tester = require('gmail-tester') +const path = require('path') +const tokenFileName = 'token_qa.json' //token file is inside plugins/ directory +const credentialsFileName = 'credentials_qa.json' //credentials is inside plugins/ directory +const clipboardy = require('clipboardy') +/** + * @type {Cypress.PluginConfig} + */ +// eslint-disable-next-line no-unused-vars + +module.exports = (on, config) => { + on('task', { + checkInbox: async (args) => { + const { include_body, include_attachments, subject, after, to, from = data.outbox.email } = args; + const email = await gmail_tester.check_inbox( + path.resolve(__dirname, credentialsFileName), + path.resolve(__dirname, tokenFileName), + { + from, + wait_time_sec: 15, + max_wait_time_sec: 300, + include_body: true, + include_attachments: true, + after: new Date( Date.now() - 1000 * 60 ), + to, + subject, + } + ) + return email //this task returns one email (JSON object) + }, + }); + + on('task', { + getClipboard () { + return clipboardy.readSync(); + } + }); +} diff --git a/ui/cypress/support/commands.js b/ui/cypress/support/commands.js new file mode 100644 index 000000000..31fa5ce63 --- /dev/null +++ b/ui/cypress/support/commands.js @@ -0,0 +1,549 @@ +// *********************************************** +// This example commands.js shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** +// +// +// -- This is a parent command -- +// Cypress.Commands.add('login', (email, password) => { ... }) +// +// +// -- This is a child command -- +// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) +// +// +// -- This is a dual command -- +// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) +// +// +// -- This will overwrite an existing command -- +// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) +import 'cypress-file-upload'; +import data from '../fixtures/test-data.json'; +import credentials from '../fixtures/credentials.json'; +import record from '../fixtures/orcid-record.json'; + +Cypress.Commands.add('signin', (email, password) => { + cy.visit('./'); + cy.get('#username') + .clear() + .type(email) + .get('#password') + .type(password) + .get('button') + .filter('[type="submit"]') + .click(); + cy.get('#home-logged-message').should('exist'); +}); + +Cypress.Commands.add('checkOrgId', (org, invalidId, id) => { + cy.get('#field_disambiguationSource').select(org); + cy.get('small.text-danger').should('exist'); + cy.get('#field_disambiguatedOrgId') + .clear() + .type(invalidId); + cy.get('small.text-danger').should('exist'); + cy.get('#field_disambiguatedOrgId') + .clear() + .type(id); + cy.get('small.text-danger').should('not.exist'); +}); + +Cypress.Commands.add('programmaticSignin', (username, password) => { + cy.getCookie('XSRF-TOKEN').then(csrfCookie => { + if (!csrfCookie) { + return cy + .visit('/') + .getCookie('XSRF-TOKEN') + .then(() => cy.programmaticSignin(username, password)); + } else { + cy.log(csrfCookie.value); + cy.request({ + method: 'POST', + url: '/auth/login', + headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + failOnStatusCode: false, // dont fail so we can make assertions + body: { + username, + password + } + }).then(r => { + if (r.status != 200) { + cy.signin(username, password); + } + }); + } + }); +}); + +Cypress.Commands.add('programmaticSignout', () => { + cy.getCookie('XSRF-TOKEN').then(csrfCookie => { + cy.log(csrfCookie.value); + cy.request({ + method: 'POST', + url: '/auth/logout', + headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + failOnStatusCode: false // dont fail so we can make assertions + }).then(r => { + cy.log(r); + // expect(r.status).to.eq(204); + }); + }); +}); + +Cypress.Commands.add('processPasswordForm', newPasswordFieldId => { + cy.get('button') + .filter('[type="submit"]') + // make sure you can't activate account without providing a password + .invoke('attr', 'disabled') + .should('exist'); + // type invalid passwords + cy.get(newPasswordFieldId) + .clear() + .type(credentials.shortPassword); + cy.get('#confirmPassword') + .clear() + .type(credentials.shortConfirmationPassword); + // check for min length error messages + cy.get('small') + .filter('[jhitranslate="global.messages.validate.newpassword.minlength.string"]') + .should('exist'); + cy.get('small') + .filter('[jhitranslate="global.messages.validate.confirmpassword.minlength.string"]') + .should('exist'); + // fix password + cy.get(newPasswordFieldId) + .clear() + .type(credentials.password); + // enter invalid confirmation password + cy.get('#confirmPassword') + .clear() + .type(credentials.wrongConfirmationPasssword); + // make sure you can't activate account + cy.get('button') + .filter('[type="submit"]') + .click(); + // check for confirmation error message + cy.get('div') + .filter('[jhitranslate="global.messages.error.dontmatch.string"]') + .should('exist'); + // fix confirmation password + cy.get('#confirmPassword') + .clear() + .type(credentials.password); + // activate account + cy.get('button') + .filter('[type="submit"]') + .click(); +}); + +Cypress.Commands.add('visitLinkFromEmail', email => { + const emailBody = email[0].body.html; + assert.isNotNull(emailBody); + cy.log('>>>>>>>>>Email body is: ' + JSON.stringify(email.body)); + //convert string to DOM + const htmlDom = new DOMParser().parseFromString(emailBody, 'text/html'); + //href points to correct endpoint + const href = htmlDom.querySelector('a[href*="https://member-portal.qa.orcid.org/reset/finish?key="]').href; + cy.visit(href); +}); + +Cypress.Commands.add('checkInbox', (subject, recipient, date) => { + cy.task('checkInbox', { + options: { + from: data.outbox.email, + to: recipient, + subject, + include_body: true, + after: date + } + }); +}); + +Cypress.Commands.add('removeAffiliation', $e => { + cy.wrap($e) + .children() + .last() + .click(); + cy.get('#jhi-confirm-delete-msUser').click(); +}); + +Cypress.Commands.add('changeOrgOwner', () => { + cy.visit(`/user/${data.member.users.owner.id}/edit`); + cy.get('#field_mainContact').click(); + cy.get('#save-entity').click(); + cy.get('.alert-success').should('exist'); + cy.programmaticSignout(); +}); + +Cypress.Commands.add('readCsv', data => { + var lines = data.split('\n'); + var result = []; + var headers = lines[0].split(','); + for (var i = 1; i < lines.length; i++) { + var obj = {}; + var currentline = lines[i].split(','); + + for (var j = 0; j < headers.length; j++) { + obj[headers[j]] = currentline[j]; + } + result.push(obj); + } + return result; +}); + +Cypress.Commands.add('uploadCsv', path => { + cy.get('#jh-upload-entities').click(); + cy.get('#field_filePath').attachFile(path); + cy.intercept('https://member-portal.qa.orcid.org/services/assertionservice/api/assertion/upload').as('upload'); + cy.get('#jhi-confirm-csv-upload').click(); + // Occasionally, trying to upload the csv results in a 403 code due to an invalid CSRF token, in which case we retry + cy.wait('@upload').then(int => { + if (int.response.statusCode !== 200) { + cy.get('#jhi-confirm-csv-upload').click(); + } + }); +}); + +Cypress.Commands.add('fetchLinkAndGrantPermission', email => { + // get permission link from first affiliation in the list + cy.get('tbody') + .children() + .last() + .within(() => { + cy.get('a') + .filter('[jhitranslate="gatewayApp.assertionServiceAssertion.details.string"]') + .click(); + }); + cy.get('.jh-entity-details').within(() => + cy + .get('button') + .filter('[jhitranslate="gatewayApp.assertionServiceAssertion.copyClipboard.string"]') + .click() + ); + cy.task('getClipboard').then(link => { + cy.visit(link); + }); + // Handle cookies + cy.get('#onetrust-reject-all-handler').click(); + // Grant permission + cy.get('#username') + .clear() + .type(email); + cy.get('#password').type(credentials.password); + cy.get('#signin-button').click(); + + // *ADD ID + cy.get('.mt-5').within(() => { + cy.get('h2') + .filter('[jhitranslate="landingPage.success.thanks.string"]') + .should('exist'); + }); +}); + +Cypress.Commands.add('checkAffiliationChanges', (affiliation, value) => { + expect(affiliation['department-name']).to.eq(value); + expect(affiliation['role-title']).to.eq(value); + expect(affiliation['organization']['address']['city']).to.eq(value); + expect(affiliation['organization']['name']).to.eq(value); +}); + +/** ****************************************************************************** + * ******************************************************************************* + * + * SECURITY TESTS + * + * ******************************************************************************* + * *******************************************************************************/ + +/** **** + * ***** + * + * USERS + * + * ***** + * *****/ + +Cypress.Commands.add('getUsersBySfId', (salesforceId, code, title) => { + cy.log('getUsersBySfId'); + cy.request({ + url: `/services/userservice/api/users/salesforce/${salesforceId}`, + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); +}); + +Cypress.Commands.add('getAllUsers', (code, title) => { + cy.log('getAllUsers'); + cy.request({ + url: '/services/userservice/api/users/', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); +}); + +/** ****** + * ******* + * + * MEMBERS + * + * ******* + * *******/ + +Cypress.Commands.add('getAllMembers', (code, title) => { + cy.log('getAllMembers'); + cy.request({ + url: '/services/memberservice/api/members', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); +}); + +Cypress.Commands.add('addMember', (salesforceId, assertionServiceEnabled, isConsortiumLead, code, title) => { + cy.log('addMember'); + cy.getCookie('XSRF-TOKEN').then(csrfCookie => { + cy.request({ + method: 'POST', + url: '/services/memberservice/api/members', + headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + failOnStatusCode: false, + body: { + salesforceId, + assertionServiceEnabled, + isConsortiumLead + } + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); + }); +}); + +Cypress.Commands.add('updateMember', (salesforceId, assertionServiceEnabled, isConsortiumLead, code, title) => { + cy.log('updateMember'); + cy.getCookie('XSRF-TOKEN').then(csrfCookie => { + cy.request({ + method: 'PUT', + url: '/services/memberservice/api/members', + headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + failOnStatusCode: false, + body: { + salesforceId, + assertionServiceEnabled, + isConsortiumLead + } + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); + }); +}); + +Cypress.Commands.add('validateMember', (salesforceId, assertionServiceEnabled, isConsortiumLead, code, title) => { + cy.log('validateMember'); + cy.getCookie('XSRF-TOKEN').then(csrfCookie => { + cy.request({ + method: 'POST', + url: '/services/memberservice/api/members/validate', + headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + failOnStatusCode: false, + body: { + salesforceId, + assertionServiceEnabled, + isConsortiumLead + } + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); + }); +}); + +Cypress.Commands.add('changeNotificationLanguage', (salesforceId, language, code, title) => { + cy.log('changeNotificationLanguage'); + cy.getCookie('XSRF-TOKEN').then(csrfCookie => { + cy.request({ + method: 'POST', + url: `/services/memberservice/api/members/${salesforceId}/language/${language}`, + headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); + }); +}); + +Cypress.Commands.add('updateContact', (salesforceId, code, title) => { + cy.log('updateContact'); + cy.getCookie('XSRF-TOKEN').then(csrfCookie => { + cy.request({ + method: 'POST', + url: `/services/memberservice/api/members/${salesforceId}/contact-update`, + headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + failOnStatusCode: false, + body: { + + } + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.statusText).to.eq(title); + }); + }); +}); + +Cypress.Commands.add('updateMemberDetails', (salesforceId, publicName, code, title) => { + cy.log('updateMemberDetails'); + cy.getCookie('XSRF-TOKEN').then(csrfCookie => { + cy.request({ + method: 'PUT', + url: `/services/memberservice/api/members/${salesforceId}/member-details`, + headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + failOnStatusCode: false, + body: { + publicName, + salesforceId + } + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.statusText).to.eq(title); + }); + }); +}); + +Cypress.Commands.add('getMemberDetails', (salesforceId, code, title) => { + cy.log('getMemberDetails'); + cy.request({ + url: `/services/memberservice/api/members/${salesforceId}/member-details`, + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.statusText).to.eq(title); + }); +}); + +Cypress.Commands.add('getMemberContacts', (salesforceId, code, title) => { + cy.log('getMemberContacts'); + cy.request({ + url: `/services/memberservice/api/members/${salesforceId}/member-contacts`, + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.statusText).to.eq(title); + }); +}); + +Cypress.Commands.add('getMemberOrgIds', (salesforceId, code, title) => { + cy.log('getMemberOrgIds'); + cy.request({ + url: `/services/memberservice/api/members/${salesforceId}/member-org-ids`, + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.statusText).to.eq(title); + }); +}); + + +Cypress.Commands.add('getMembersList', (code, title) => { + cy.log('getMemberList'); + cy.request({ + url: '/services/memberservice/api/members/list/all', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); +}); + +Cypress.Commands.add('getMember', (salesforceId, code, title) => { + cy.log('getMember'); + cy.request({ + url: `/services/memberservice/api/members/${salesforceId}`, + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); +}); + +Cypress.Commands.add('deleteMember', (salesforceId, code, title) => { + cy.log('deleteMember'); + cy.getCookie('XSRF-TOKEN').then(csrfCookie => { + cy.request({ + method: 'DELETE', + url: `/services/memberservice/api/members/${salesforceId}`, + headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); + }); +}); + +Cypress.Commands.add('addConsortiumMember', (code, title) => { + cy.log('addConsortiumMember'); + cy.getCookie('XSRF-TOKEN').then(csrfCookie => { + cy.request({ + method: 'POST', + url: `/services/memberservice/api/members/add-consortium-member`, + headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + failOnStatusCode: false, + body: { + + } + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.body?.title).to.eq(title); + }); + }); +}); + +Cypress.Commands.add('removeConsortiumMember', (code, title) => { + cy.log('removeConsortiumMember'); + cy.getCookie('XSRF-TOKEN').then(csrfCookie => { + cy.request({ + method: 'POST', + url: `/services/memberservice/api/members/remove-consortium-member`, + headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + failOnStatusCode: false, + body: { + + } + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.body?.title).to.eq(title); + }); + }); +}); + +/** ********* + * ********** + * + * ASSERTIONS + * + * ********** + * **********/ + +Cypress.Commands.add('getAssertions', (code, title) => { + cy.log('getAssertions'); + cy.request({ + url: '/services/assertionservice/api/assertions', + failOnStatusCode: false + }).then(resp => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); +}); diff --git a/ui/cypress/support/index.js b/ui/cypress/support/index.js new file mode 100644 index 000000000..d68db96df --- /dev/null +++ b/ui/cypress/support/index.js @@ -0,0 +1,20 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands' + +// Alternatively you can use CommonJS syntax: +// require('./commands') From 55e294da1fd529fd71aeb693b2e4db43ab8939ae Mon Sep 17 00:00:00 2001 From: andrej romanov <50377758+auumgn@users.noreply.github.com> Date: Mon, 13 May 2024 12:20:19 +0300 Subject: [PATCH 3/7] add cypress npm package --- ui/package-lock.json | 1952 +++++++++++++++++++++++++++++++++++++++++- ui/package.json | 1 + 2 files changed, 1940 insertions(+), 13 deletions(-) diff --git a/ui/package-lock.json b/ui/package-lock.json index 01cf3ec80..0597b3626 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -47,6 +47,7 @@ "@types/quill": "^1.3.10", "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", + "cypress": "^13.9.0", "eslint": "^8.49.0", "jasmine-core": "~4.3.0", "karma": "~6.4.0", @@ -2623,6 +2624,83 @@ "node": ">=0.1.90" } }, + "node_modules/@cypress/request": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", + "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.10.4", + "safe-buffer": "^5.1.2", + "tough-cookie": "^4.1.3", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/@cypress/request/node_modules/qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -4951,6 +5029,18 @@ "@types/node": "*" } }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "node_modules/@types/sizzle": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", + "dev": true + }, "node_modules/@types/sockjs": { "version": "0.3.34", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.34.tgz", @@ -4969,6 +5059,16 @@ "@types/node": "*" } }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", @@ -5760,6 +5860,26 @@ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/are-we-there-yet": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", @@ -5806,6 +5926,33 @@ "node": ">=8" } }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -5818,6 +5965,15 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -5851,6 +6007,21 @@ "postcss": "^8.1.0" } }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, "node_modules/axios": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz", @@ -6007,6 +6178,15 @@ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -6035,6 +6215,18 @@ "readable-stream": "^3.4.0" } }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, "node_modules/body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -6191,6 +6383,15 @@ "ieee754": "^1.1.13" } }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -6256,6 +6457,15 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -6311,6 +6521,12 @@ } ] }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -6330,6 +6546,15 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -6374,6 +6599,21 @@ "node": ">=6.0" } }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -6407,6 +6647,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -6502,6 +6773,15 @@ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", "dev": true }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -6988,6 +7268,267 @@ "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", "dev": true }, + "node_modules/cypress": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.9.0.tgz", + "integrity": "sha512-atNjmYfHsvTuCaxTxLZr9xGoHz53LLui3266WWxXJHY7+N6OdwJdg/feEa3T+buez9dmUXHT1izCOklqG82uCQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@cypress/request": "^3.0.0", + "@cypress/xvfb": "^1.2.4", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.7.1", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.1", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "process": "^0.11.10", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.5.3", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^16.0.0 || ^18.0.0 || >=20.0.0" + } + }, + "node_modules/cypress/node_modules/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cypress/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cypress/node_modules/chalk/node_modules/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, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cypress/node_modules/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 + }, + "node_modules/cypress/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cypress/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/cypress/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cypress/node_modules/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, + "engines": { + "node": ">=8" + } + }, + "node_modules/cypress/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/cypress/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/cypress/node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/cypress/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/cypress/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", @@ -7011,6 +7552,12 @@ "node": ">=4.0" } }, + "node_modules/dayjs": { + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -7331,6 +7878,16 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -8124,6 +8681,12 @@ "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", "dev": true }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, "node_modules/eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -8162,6 +8725,27 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/executable/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/exponential-backoff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", @@ -8286,6 +8870,50 @@ "node": ">=4" } }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -8346,6 +8974,15 @@ "node": ">=0.8.0" } }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -8556,6 +9193,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -8758,6 +9404,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, "node_modules/glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", @@ -8797,6 +9461,30 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -9178,6 +9866,20 @@ } } }, + "node_modules/http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -9505,6 +10207,18 @@ "node": ">=8" } }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, "node_modules/is-core-module": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", @@ -9574,6 +10288,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -9664,6 +10394,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -9727,6 +10463,12 @@ "node": ">=0.10.0" } }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -10031,6 +10773,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, "node_modules/jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -10121,6 +10869,12 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -10133,6 +10887,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -10167,6 +10927,21 @@ "node >= 0.2.0" ] }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, "node_modules/jsrsasign": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-11.1.0.tgz", @@ -10444,6 +11219,15 @@ "shell-quote": "^1.8.1" } }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "engines": { + "node": "> 0.8" + } + }, "node_modules/less": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", @@ -10573,6 +11357,33 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "node_modules/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -10621,6 +11432,12 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -10707,6 +11524,88 @@ "node": ">=8" } }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-update/node_modules/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 + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/log4js": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.0.tgz", @@ -10981,9 +11880,9 @@ } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12304,6 +13203,12 @@ "node": ">=0.10.0" } }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -12597,6 +13502,18 @@ "node": ">=8" } }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -12895,6 +13812,15 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -12961,6 +13887,16 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -13266,6 +14202,15 @@ "jsesc": "bin/jsesc" } }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "dependencies": { + "throttleit": "^1.0.0" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -13959,10 +14904,57 @@ "engines": { "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi/node_modules/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, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/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, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, + "node_modules/slice-ansi/node_modules/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 + }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -14190,6 +15182,31 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/ssri": { "version": "10.0.5", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", @@ -14609,6 +15626,15 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/throttleit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -14760,6 +15786,24 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -14925,6 +15969,15 @@ "node": ">= 0.8" } }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -15034,6 +16087,26 @@ "node": ">= 0.8" } }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, "node_modules/vite": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", @@ -15705,6 +16778,16 @@ "node": ">=12" } }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "node_modules/yocto-queue": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", @@ -17511,6 +18594,75 @@ "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true }, + "@cypress/request": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", + "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "http-signature": "~1.3.6", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.10.4", + "safe-buffer": "^5.1.2", + "tough-cookie": "^4.1.3", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "dependencies": { + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "qs": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", + "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, "@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -19318,6 +20470,18 @@ "@types/node": "*" } }, + "@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "@types/sizzle": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", + "dev": true + }, "@types/sockjs": { "version": "0.3.34", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.34.tgz", @@ -19336,6 +20500,16 @@ "@types/node": "*" } }, + "@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "optional": true, + "requires": { + "@types/node": "*" + } + }, "@typescript-eslint/eslint-plugin": { "version": "5.62.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", @@ -19920,6 +21094,12 @@ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, "are-we-there-yet": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", @@ -19960,6 +21140,27 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, "async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", @@ -19972,6 +21173,12 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, "autoprefixer": { "version": "10.4.14", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", @@ -19986,6 +21193,18 @@ "postcss-value-parser": "^4.2.0" } }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, "axios": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz", @@ -20104,6 +21323,15 @@ "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "dev": true }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, "big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", @@ -20126,6 +21354,18 @@ "readable-stream": "^3.4.0" } }, + "blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, "body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -20231,6 +21471,12 @@ "ieee754": "^1.1.13" } }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -20286,6 +21532,12 @@ } } }, + "cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true + }, "call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -20315,6 +21567,12 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001542.tgz", "integrity": "sha512-UrtAXVcj1mvPBFQ4sKd38daP8dEcXXr5sQe6QNNinaPd0iA/cxg9/l3VrSdL73jgw5sKyuQ6jNgiKO12W3SsVA==" }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -20331,6 +21589,12 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -20358,6 +21622,12 @@ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true }, + "ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true + }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -20379,6 +21649,26 @@ "integrity": "sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==", "dev": true }, + "cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "requires": { + "@colors/colors": "1.5.0", + "string-width": "^4.2.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + } + }, "cli-width": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", @@ -20459,6 +21749,12 @@ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", "dev": true }, + "common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true + }, "compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", @@ -20831,11 +22127,210 @@ } } }, - "custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true + "custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true + }, + "cypress": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.9.0.tgz", + "integrity": "sha512-atNjmYfHsvTuCaxTxLZr9xGoHz53LLui3266WWxXJHY7+N6OdwJdg/feEa3T+buez9dmUXHT1izCOklqG82uCQ==", + "dev": true, + "requires": { + "@cypress/request": "^3.0.0", + "@cypress/xvfb": "^1.2.4", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.7.1", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.1", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "process": "^0.11.10", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.5.3", + "supports-color": "^8.1.1", + "tmp": "~0.2.1", + "untildify": "^4.0.0", + "yauzl": "^2.10.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.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", + "supports-color": "^7.1.0" + }, + "dependencies": { + "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" + } + } + } + }, + "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 + }, + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true + }, + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "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 + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true + } + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } }, "data-urls": { "version": "2.0.0", @@ -20854,6 +22349,12 @@ "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", "dev": true }, + "dayjs": { + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==", + "dev": true + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -21092,6 +22593,16 @@ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -21673,6 +23184,12 @@ "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", "dev": true }, + "eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, "eventemitter3": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", @@ -21702,6 +23219,23 @@ "strip-final-newline": "^2.0.0" } }, + "executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "requires": { + "pify": "^2.2.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + } + } + }, "exponential-backoff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", @@ -21813,6 +23347,35 @@ "tmp": "^0.0.33" } }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -21867,6 +23430,15 @@ "websocket-driver": ">=0.5.1" } }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, "figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", @@ -22021,6 +23593,12 @@ } } }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true + }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -22163,6 +23741,24 @@ "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true }, + "getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "requires": { + "async": "^3.2.0" + } + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, "glob": { "version": "10.3.10", "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", @@ -22190,6 +23786,23 @@ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, + "global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "requires": { + "ini": "2.0.0" + }, + "dependencies": { + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true + } + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -22483,6 +24096,17 @@ "micromatch": "^4.0.2" } }, + "http-signature": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", + "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.14.1" + } + }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -22720,6 +24344,15 @@ "binary-extensions": "^2.0.0" } }, + "is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "requires": { + "ci-info": "^3.2.0" + } + }, "is-core-module": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", @@ -22762,6 +24395,16 @@ "is-extglob": "^2.1.1" } }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, "is-interactive": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", @@ -22822,6 +24465,12 @@ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -22867,6 +24516,12 @@ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -23098,6 +24753,12 @@ "esprima": "^4.0.0" } }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, "jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -23159,6 +24820,12 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, "json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -23171,6 +24838,12 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, "json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -23196,6 +24869,18 @@ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, + "jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, "jsrsasign": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/jsrsasign/-/jsrsasign-11.1.0.tgz", @@ -23422,6 +25107,12 @@ "shell-quote": "^1.8.1" } }, + "lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true + }, "less": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", @@ -23508,6 +25199,22 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, + "listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "requires": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + } + }, "loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -23547,6 +25254,12 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -23608,6 +25321,66 @@ } } }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.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 + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, "log4js": { "version": "6.7.0", "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.7.0.tgz", @@ -23817,9 +25590,9 @@ } }, "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "minipass": { @@ -24798,6 +26571,12 @@ "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true }, + "ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -25021,6 +26800,18 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -25202,6 +26993,12 @@ "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", "dev": true }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -25261,6 +27058,16 @@ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -25500,6 +27307,15 @@ } } }, + "request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -26009,6 +27825,43 @@ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.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 + } + } + }, "smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -26198,6 +28051,23 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, "ssri": { "version": "10.0.5", "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", @@ -26504,6 +28374,12 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "throttleit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "dev": true + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -26623,6 +28499,21 @@ "make-fetch-happen": "^11.1.1" } }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -26728,6 +28619,12 @@ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "dev": true }, + "untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true + }, "update-browserslist-db": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", @@ -26805,6 +28702,25 @@ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "dev": true }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + } + } + }, "vite": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.2.tgz", @@ -27255,6 +29171,16 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, "yocto-queue": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", diff --git a/ui/package.json b/ui/package.json index 4fa77790e..ed13040ce 100644 --- a/ui/package.json +++ b/ui/package.json @@ -53,6 +53,7 @@ "@types/quill": "^1.3.10", "@typescript-eslint/eslint-plugin": "5.62.0", "@typescript-eslint/parser": "5.62.0", + "cypress": "^13.9.0", "eslint": "^8.49.0", "jasmine-core": "~4.3.0", "karma": "~6.4.0", From 6dc1cb16117c01d5b976c9d7cdb67ce40d3f882d Mon Sep 17 00:00:00 2001 From: andrej romanov <50377758+auumgn@users.noreply.github.com> Date: Mon, 13 May 2024 15:00:25 +0300 Subject: [PATCH 4/7] migrate cypress, fix reports test --- ui/cypress.config.ts | 16 + ui/cypress.json | 6 - .../bulk-edit-salesforce-ids.cy.js} | 0 .../reset-test-data.cy.js} | 0 .../retention/add-affiliation.cy.js} | 0 .../retention/add-member.cy.js} | 0 .../retention/add-user.cy.js} | 0 .../retention/csv-add-affiliations.cy.js} | 0 .../retention/csv-edit-affiliations.cy.js} | 0 .../retention/csv-invalid-affiliations.cy.js} | 0 .../retention/edit-affiliation.cy.js} | 0 .../retention/edit-member.cy.js} | 0 .../retention/edit-user.cy.js} | 0 .../retention/notifications.cy.js} | 0 .../retention/reset-password.cy.js} | 0 .../retention/restricted-access.cy.js} | 0 .../retention/ui-authorities.cy.js} | 0 .../e2e/retention/ui-homepage-edit.cy.js | 86 ++ ui/cypress/e2e/retention/ui-homepage.cy.js | 127 ++ ui/cypress/e2e/retention/ui-login.cy.js | 13 + .../retention/ui-pagination.cy.js} | 0 ui/cypress/e2e/retention/ui-reports.cy.js | 282 ++++ .../integration/retention/ui-homepage-edit.js | 72 - .../integration/retention/ui-homepage.js | 103 -- ui/cypress/integration/retention/ui-login.js | 17 - .../integration/retention/ui-reports.js | 252 ---- ui/cypress/plugins/index.js | 45 +- ui/cypress/support/commands.js | 583 ++++---- ui/cypress/support/{index.js => e2e.js} | 0 ui/package-lock.json | 1325 +++++++++++------ ui/package.json | 3 + ui/src/app/home/home.component.html | 2 +- 32 files changed, 1715 insertions(+), 1217 deletions(-) create mode 100644 ui/cypress.config.ts delete mode 100644 ui/cypress.json rename ui/cypress/{integration/bulk-edit-salesforce-ids.js => e2e/bulk-edit-salesforce-ids.cy.js} (100%) rename ui/cypress/{integration/reset-test-data.js => e2e/reset-test-data.cy.js} (100%) rename ui/cypress/{integration/retention/add-affiliation.js => e2e/retention/add-affiliation.cy.js} (100%) rename ui/cypress/{integration/retention/add-member.js => e2e/retention/add-member.cy.js} (100%) rename ui/cypress/{integration/retention/add-user.js => e2e/retention/add-user.cy.js} (100%) rename ui/cypress/{integration/retention/csv-add-affiliations.js => e2e/retention/csv-add-affiliations.cy.js} (100%) rename ui/cypress/{integration/retention/csv-edit-affiliations.js => e2e/retention/csv-edit-affiliations.cy.js} (100%) rename ui/cypress/{integration/retention/csv-invalid-affiliations.js => e2e/retention/csv-invalid-affiliations.cy.js} (100%) rename ui/cypress/{integration/retention/edit-affiliation.js => e2e/retention/edit-affiliation.cy.js} (100%) rename ui/cypress/{integration/retention/edit-member.js => e2e/retention/edit-member.cy.js} (100%) rename ui/cypress/{integration/retention/edit-user.js => e2e/retention/edit-user.cy.js} (100%) rename ui/cypress/{integration/retention/notifications.js => e2e/retention/notifications.cy.js} (100%) rename ui/cypress/{integration/retention/reset-password.js => e2e/retention/reset-password.cy.js} (100%) rename ui/cypress/{integration/retention/restricted-access.js => e2e/retention/restricted-access.cy.js} (100%) rename ui/cypress/{integration/retention/ui-authorities.js => e2e/retention/ui-authorities.cy.js} (100%) create mode 100644 ui/cypress/e2e/retention/ui-homepage-edit.cy.js create mode 100644 ui/cypress/e2e/retention/ui-homepage.cy.js create mode 100644 ui/cypress/e2e/retention/ui-login.cy.js rename ui/cypress/{integration/retention/ui-pagination.js => e2e/retention/ui-pagination.cy.js} (100%) create mode 100644 ui/cypress/e2e/retention/ui-reports.cy.js delete mode 100644 ui/cypress/integration/retention/ui-homepage-edit.js delete mode 100644 ui/cypress/integration/retention/ui-homepage.js delete mode 100644 ui/cypress/integration/retention/ui-login.js delete mode 100644 ui/cypress/integration/retention/ui-reports.js rename ui/cypress/support/{index.js => e2e.js} (100%) diff --git a/ui/cypress.config.ts b/ui/cypress.config.ts new file mode 100644 index 000000000..1c54937e0 --- /dev/null +++ b/ui/cypress.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'cypress'; + +export default defineConfig({ + taskTimeout: 300000, + defaultCommandTimeout: 10000, + video: false, + e2e: { + // We've imported your old cypress plugins here. + // You may want to clean this up later by importing these. + setupNodeEvents(on, config) { + return require('./cypress/plugins/index.js')(on, config); + }, + // TODO: cy.visit('ui') should be changed to cy.visit('/') + baseUrl: 'https://member-portal.qa.orcid.org', + }, +}); diff --git a/ui/cypress.json b/ui/cypress.json deleted file mode 100644 index 67fd508c2..000000000 --- a/ui/cypress.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "baseUrl": "https://member-portal.qa.orcid.org", - "taskTimeout": 300000, - "defaultCommandTimeout": 10000, - "video": false -} diff --git a/ui/cypress/integration/bulk-edit-salesforce-ids.js b/ui/cypress/e2e/bulk-edit-salesforce-ids.cy.js similarity index 100% rename from ui/cypress/integration/bulk-edit-salesforce-ids.js rename to ui/cypress/e2e/bulk-edit-salesforce-ids.cy.js diff --git a/ui/cypress/integration/reset-test-data.js b/ui/cypress/e2e/reset-test-data.cy.js similarity index 100% rename from ui/cypress/integration/reset-test-data.js rename to ui/cypress/e2e/reset-test-data.cy.js diff --git a/ui/cypress/integration/retention/add-affiliation.js b/ui/cypress/e2e/retention/add-affiliation.cy.js similarity index 100% rename from ui/cypress/integration/retention/add-affiliation.js rename to ui/cypress/e2e/retention/add-affiliation.cy.js diff --git a/ui/cypress/integration/retention/add-member.js b/ui/cypress/e2e/retention/add-member.cy.js similarity index 100% rename from ui/cypress/integration/retention/add-member.js rename to ui/cypress/e2e/retention/add-member.cy.js diff --git a/ui/cypress/integration/retention/add-user.js b/ui/cypress/e2e/retention/add-user.cy.js similarity index 100% rename from ui/cypress/integration/retention/add-user.js rename to ui/cypress/e2e/retention/add-user.cy.js diff --git a/ui/cypress/integration/retention/csv-add-affiliations.js b/ui/cypress/e2e/retention/csv-add-affiliations.cy.js similarity index 100% rename from ui/cypress/integration/retention/csv-add-affiliations.js rename to ui/cypress/e2e/retention/csv-add-affiliations.cy.js diff --git a/ui/cypress/integration/retention/csv-edit-affiliations.js b/ui/cypress/e2e/retention/csv-edit-affiliations.cy.js similarity index 100% rename from ui/cypress/integration/retention/csv-edit-affiliations.js rename to ui/cypress/e2e/retention/csv-edit-affiliations.cy.js diff --git a/ui/cypress/integration/retention/csv-invalid-affiliations.js b/ui/cypress/e2e/retention/csv-invalid-affiliations.cy.js similarity index 100% rename from ui/cypress/integration/retention/csv-invalid-affiliations.js rename to ui/cypress/e2e/retention/csv-invalid-affiliations.cy.js diff --git a/ui/cypress/integration/retention/edit-affiliation.js b/ui/cypress/e2e/retention/edit-affiliation.cy.js similarity index 100% rename from ui/cypress/integration/retention/edit-affiliation.js rename to ui/cypress/e2e/retention/edit-affiliation.cy.js diff --git a/ui/cypress/integration/retention/edit-member.js b/ui/cypress/e2e/retention/edit-member.cy.js similarity index 100% rename from ui/cypress/integration/retention/edit-member.js rename to ui/cypress/e2e/retention/edit-member.cy.js diff --git a/ui/cypress/integration/retention/edit-user.js b/ui/cypress/e2e/retention/edit-user.cy.js similarity index 100% rename from ui/cypress/integration/retention/edit-user.js rename to ui/cypress/e2e/retention/edit-user.cy.js diff --git a/ui/cypress/integration/retention/notifications.js b/ui/cypress/e2e/retention/notifications.cy.js similarity index 100% rename from ui/cypress/integration/retention/notifications.js rename to ui/cypress/e2e/retention/notifications.cy.js diff --git a/ui/cypress/integration/retention/reset-password.js b/ui/cypress/e2e/retention/reset-password.cy.js similarity index 100% rename from ui/cypress/integration/retention/reset-password.js rename to ui/cypress/e2e/retention/reset-password.cy.js diff --git a/ui/cypress/integration/retention/restricted-access.js b/ui/cypress/e2e/retention/restricted-access.cy.js similarity index 100% rename from ui/cypress/integration/retention/restricted-access.js rename to ui/cypress/e2e/retention/restricted-access.cy.js diff --git a/ui/cypress/integration/retention/ui-authorities.js b/ui/cypress/e2e/retention/ui-authorities.cy.js similarity index 100% rename from ui/cypress/integration/retention/ui-authorities.js rename to ui/cypress/e2e/retention/ui-authorities.cy.js diff --git a/ui/cypress/e2e/retention/ui-homepage-edit.cy.js b/ui/cypress/e2e/retention/ui-homepage-edit.cy.js new file mode 100644 index 000000000..fa409843e --- /dev/null +++ b/ui/cypress/e2e/retention/ui-homepage-edit.cy.js @@ -0,0 +1,86 @@ +/// +import data from "../../fixtures/test-data.json"; +import credentials from "../../fixtures/credentials.json"; + +const { email, name } = data.homepageTestMembers.consortiumMember; + +describe("Test editing member details", () => { + it("Editing Almonds Forest member details", function () { + const date = Date.now(); + cy.programmaticSignin(email, credentials.password); + cy.visit("/"); + cy.get("app-member-info").contains(date).should("not.exist"); + cy.visit("/edit"); + cy.get(".text-danger").should("not.exist"); + // wait for data to load + cy.intercept( + `/services/memberservice/api/members/${data.homepageTestMembers.consortiumMember.salesforceId}/member-contacts`, + ).as("details"); + cy.wait("@details"); + cy.get('[name="orgName"]').clear().blur(); + cy.get("small").contains("Organization name cannot be empty"); + cy.get('[name="orgName"]').type(name); + cy.get("small") + .contains("Organization cannot be empty") + .should("not.exist"); + cy.get('[name="publicName"]').clear().blur(); + cy.get("small").contains("Public organization name cannot be empty"); + cy.get('[name="publicName"]').type(name + " " + date); + cy.get("small") + .contains("Public organization name cannot be empty") + .should("not.exist"); + cy.get('[name="country"]').invoke("attr", "readonly").should("exist"); + cy.get('[name="state"]').should("not.exist"); + cy.get('[name="trademarkLicense"][value="Yes"]').click(); + cy.get('[name="street"]') + .clear() + .type("Street " + date); + cy.get('[name="city"]') + .clear() + .type("City " + date); + cy.get('[name="postcode"]').clear().type(date); + + cy.get(".ql-editor") + .clear() + .type("Description: " + date); + + cy.get('[name="website"]').clear().type(data.invalidWebsite).blur(); + cy.get(".text-danger").should("have.length", 3); + cy.get('[name="website"]') + .clear() + .type("https://" + date + ".org") + .blur(); + cy.get(".text-danger").should("not.exist"); + + cy.get('[name="email"]').clear().type(data.invalidEmail).blur(); + cy.get(".text-danger").should("have.length", 3); + cy.get('[name="email"]') + .clear() + .type(date + "@orcid.org") + .blur(); + cy.get(".text-danger").should("not.exist"); + cy.get('[type="submit"]').click(); + cy.get("app-member-info", { timeout: 20000 }).contains(`${name} ${date}`); + cy.get("app-member-info").contains(date + "@orcid.org"); + cy.get("app-member-info").contains("https://" + date + ".org"); + cy.get("app-member-info").contains("Description: " + date); + cy.get("app-member-info").contains( + "Street " + date + ", City " + date + ", " + date, + ); + cy.get("app-member-info").contains( + `YES - ORCID can use trademarked assets`, + ); + cy.visit("/edit"); + // wait for data to load + cy.intercept( + `/services/memberservice/api/members/${data.homepageTestMembers.consortiumMember.salesforceId}/member-contacts`, + ).as("details"); + cy.wait("@details"); + cy.get('[name="trademarkLicense"][value="No"]').click(); + cy.get('[name="website"]').clear(); + cy.get('[type="submit"]').click(); + cy.get("app-member-info").contains( + `NO - ORCID cannot use this organization's trademarked name and logos`, + ); + }); +}); diff --git a/ui/cypress/e2e/retention/ui-homepage.cy.js b/ui/cypress/e2e/retention/ui-homepage.cy.js new file mode 100644 index 000000000..e629c277c --- /dev/null +++ b/ui/cypress/e2e/retention/ui-homepage.cy.js @@ -0,0 +1,127 @@ +/// +import data from "../../fixtures/test-data.json"; +import credentials from "../../fixtures/credentials.json"; + +describe("Test homepage", () => { + it("Direct member", function () { + cy.programmaticSignin( + data.homepageTestMembers.directMemberEmail, + credentials.password, + ); + cy.visit("/"); + cy.get("app-member-info", { timeout: 20000 }); + cy.get("app-generic-landing").should("not.exist"); + cy.get(".side-bar").contains("Public details"); + cy.get(".side-bar").contains("Website"); + cy.get(".side-bar").contains("Email"); + cy.get(".side-bar").contains("https://orcid.org"); + cy.get(".side-bar").contains("orcid@orcid.org"); + cy.get(".main-section").contains("Membership: Active"); + cy.get(".main-section").contains("Fly and Mighty"); + cy.get(".main-section").contains("Contacts"); + cy.get(".main-section").contains("Main relationship contact (OFFICIAL)"); + cy.get(".main-section").contains("h.hanger@testingthisemail.com"); + }); + + it("Consortium lead", function () { + cy.programmaticSignin( + data.homepageTestMembers.consortiumLeadEmail, + credentials.password, + ); + cy.visit("/"); + cy.get("app-member-info", { timeout: 20000 }); + cy.get("app-generic-landing").should("not.exist"); + cy.get(".side-bar").contains("Public details"); + cy.get(".side-bar").contains("Website"); + cy.get(".side-bar").contains("Email"); + cy.get(".side-bar").contains("No website added"); + cy.get(".side-bar").contains("No email added"); + cy.get(".main-section").contains("Consortium lead"); + cy.get(".main-section").contains("Mambo No 5"); + cy.get(".main-section").contains("Consortium Members (4)"); + cy.get(".main-section").contains("Member name"); + cy.get(".main-section").contains("Almonds Forest"); + cy.get(".main-section").contains("Contacts"); + cy.get(".main-section").contains("Main relationship contact (OFFICIAL)"); + cy.get(".main-section").contains("first.last@orcid.org"); + }); + + it("Consortium member", function () { + cy.programmaticSignin( + data.homepageTestMembers.consortiumMember.email, + credentials.password, + ); + cy.visit("/"); + cy.get("app-member-info", { timeout: 20000 }); + cy.get("app-generic-landing").should("not.exist"); + cy.get(".side-bar").contains("Public details"); + cy.get(".side-bar").contains("Website"); + cy.get(".side-bar").contains("Email"); + cy.get(".side-bar").contains("No website added"); + cy.get(".side-bar").contains("@orcid.org"); + cy.get(".main-section").contains( + "Consortium/Parent organization: Mambo No 5", + ); + cy.get(".main-section").contains("Membership: Active"); + cy.get(".main-section").contains("Almonds Forest"); + cy.get(".main-section").contains("Description"); + cy.get(".main-section").contains("Contacts"); + cy.get(".main-section").contains("Agreement signatory (OFFICIAL)"); + cy.get(".main-section").contains("last@orcid.org"); + }); + + it("Consortium member 2", function () { + cy.programmaticSignin( + data.homepageTestMembers.consortiumMemberEmail2, + credentials.password, + ); + cy.visit("/"); + cy.get("app-member-info", { timeout: 20000 }); + cy.get("app-generic-landing").should("not.exist"); + cy.get(".side-bar").contains("Public details"); + cy.get(".side-bar").contains("Website"); + cy.get(".side-bar").contains("Email"); + cy.get(".side-bar").contains("canadapost.ca"); + cy.get(".side-bar").contains("support@orcid.org"); + cy.get(".main-section").contains( + "Consortium/Parent organization: The Concord of Kinship", + ); + cy.get(".main-section").contains("Membership: Active"); + cy.get(".main-section").contains("Grateful Frogs"); + }); + + it("Consortium member and lead", function () { + cy.programmaticSignin( + data.homepageTestMembers.consortiumLeadAndMember.email, + credentials.password, + ); + cy.visit("/"); + cy.get("app-member-info", { timeout: 20000 }); + cy.get("app-generic-landing").should("not.exist"); + cy.get(".side-bar").contains("Public details"); + cy.get(".side-bar").contains("Website"); + cy.get(".side-bar").contains("Email"); + cy.get(".side-bar").contains("www.haevesting.com"); + cy.get(".side-bar").contains("hhh@hhh.com"); + cy.get(".main-section").contains("Consortium lead"); + cy.get(".main-section").contains("Consortium Members (2)"); + cy.get(".main-section").contains("Member name"); + cy.get(".main-section").contains("Yellow member"); + cy.get(".main-section").contains("The Harvest Ascendancy"); + cy.get(".main-section").contains("Contacts"); + cy.get(".main-section").contains("Product Contact"); + cy.get(".main-section").contains("testingagain@orcid.org"); + }); + + it("Inactive member", function () { + cy.programmaticSignin( + data.homepageTestMembers.inactiveConsortiumMemberEmail, + credentials.password, + ); + cy.visit("/"); + cy.get("app-generic-landing", { timeout: 20000 }).contains( + "Something has gone wrong...", + ); + cy.get("app-member-info").should("not.exist"); + }); +}); diff --git a/ui/cypress/e2e/retention/ui-login.cy.js b/ui/cypress/e2e/retention/ui-login.cy.js new file mode 100644 index 000000000..10cbd2a3c --- /dev/null +++ b/ui/cypress/e2e/retention/ui-login.cy.js @@ -0,0 +1,13 @@ +/// +import data from "../../fixtures/test-data.json"; +import credentials from "../../fixtures/credentials.json"; + +describe("Test sign in form", () => { + it("Sign in", function () { + cy.visit(`/`); + cy.get("#username").clear().type(data.member.users.owner.email); + cy.get("#password").type(credentials.password); + cy.get("button").filter('[type="submit"]').click(); + cy.get('[data-cy="signedInMessage"]').should("exist"); + }); +}); diff --git a/ui/cypress/integration/retention/ui-pagination.js b/ui/cypress/e2e/retention/ui-pagination.cy.js similarity index 100% rename from ui/cypress/integration/retention/ui-pagination.js rename to ui/cypress/e2e/retention/ui-pagination.cy.js diff --git a/ui/cypress/e2e/retention/ui-reports.cy.js b/ui/cypress/e2e/retention/ui-reports.cy.js new file mode 100644 index 000000000..015949675 --- /dev/null +++ b/ui/cypress/e2e/retention/ui-reports.cy.js @@ -0,0 +1,282 @@ +/// +import data from "../../fixtures/test-data.json"; +import credentials from "../../fixtures/credentials.json"; + +describe("Test report menus", () => { + it("Direct member", function () { + cy.programmaticSignin( + data.homepageTestMembers.directMemberEmail, + credentials.password, + ); + cy.visit("ui/en/"); + cy.get("app-member-info", { timeout: 20000 }); + cy.get("#tools-menu").click(); + cy.get('[routerLink="/report/member"]').should("be.visible"); + cy.get('[routerLink="/report/integration"]').should("be.visible"); + cy.get('[routerLink="/report/affiliation"]').should("be.visible"); + cy.get('[routerLink="/report/consortia"]').should("not.exist"); + cy.get('[routerLink="/report/consortia-member-affiliations"]').should( + "not.exist", + ); + cy.request({ + url: "/services/memberservice/api/reports/member", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/integration", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/affiliation", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/consortia", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(400); + }); + cy.request({ + url: "/services/memberservice/api/reports/consortia-member-affiliations", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(400); + }); + }); + + it("Consortium lead", function () { + cy.programmaticSignin( + data.homepageTestMembers.consortiumLeadEmail, + credentials.password, + ); + cy.visit("ui/en/"); + cy.get("#tools-menu").click(); + cy.get('[routerlink="/report/member"]').should("be.visible"); + cy.get('[routerlink="/report/integration"]').should("be.visible"); + cy.get('[routerlink="/report/affiliation"]').should("be.visible"); + cy.get('[routerlink="/report/consortia"]').should("be.visible"); + cy.get('[routerlink="/report/consortia-member-affiliations"]').should( + "be.visible", + ); + cy.request({ + url: "/services/memberservice/api/reports/member", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/integration", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/affiliation", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/consortia", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/consortia-member-affiliations", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + }); + + it("Consortium member", function () { + cy.programmaticSignin( + data.homepageTestMembers.consortiumMember.email, + credentials.password, + ); + cy.visit("ui/en/"); + cy.get("#tools-menu").click(); + cy.get('[routerlink="/report/member"]').should("be.visible"); + cy.get('[routerlink="/report/integration"]').should("be.visible"); + cy.get('[routerlink="/report/affiliation"]').should("be.visible"); + cy.get('[routerlink="/report/consortia"]').should("not.exist"); + cy.get('[routerlink="/report/consortia-member-affiliations"]').should( + "not.exist", + ); + cy.request({ + url: "/services/memberservice/api/reports/member", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/integration", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/affiliation", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/consortia", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(400); + }); + cy.request({ + url: "/services/memberservice/api/reports/consortia-member-affiliations", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(400); + }); + }); + + it("Consortium member 2", function () { + cy.programmaticSignin( + data.homepageTestMembers.consortiumMemberEmail2, + credentials.password, + ); + cy.visit("ui/en/"); + cy.get("#tools-menu").click(); + cy.get('[routerlink="/report/member"]').should("be.visible"); + cy.get('[routerlink="/report/integration"]').should("be.visible"); + cy.get('[routerlink="/report/affiliation"]').should("be.visible"); + cy.get('[routerlink="/report/consortia"]').should("not.exist"); + cy.get('[routerlink="/report/consortia-member-affiliations"]').should( + "not.exist", + ); + cy.request({ + url: "/services/memberservice/api/reports/member", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/integration", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/affiliation", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/consortia", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(400); + }); + cy.request({ + url: "/services/memberservice/api/reports/consortia-member-affiliations", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(400); + }); + }); + + it("Consortium member and lead", function () { + cy.programmaticSignin( + data.homepageTestMembers.consortiumLeadAndMember.email, + credentials.password, + ); + cy.visit("ui/en/"); + cy.get("#tools-menu").click(); + cy.get('[routerlink="/report/member"]').should("be.visible"); + cy.get('[routerlink="/report/integration"]').should("be.visible"); + cy.get('[routerlink="/report/affiliation"]').should("be.visible"); + cy.get('[routerlink="/report/consortia"]').should("be.visible"); + cy.get('[routerlink="/report/consortia-member-affiliations"]').should( + "be.visible", + ); + cy.request({ + url: "/services/memberservice/api/reports/member", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/integration", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/affiliation", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/consortia", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/consortia-member-affiliations", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + }); + + it("Inactive member", function () { + cy.programmaticSignin( + data.homepageTestMembers.inactiveConsortiumMemberEmail, + credentials.password, + ); + cy.visit("ui/en/"); + cy.get("#tools-menu").click(); + cy.get('[routerLink="/report/member"]').should("be.visible"); + cy.get('[routerLink="/report/integration"]').should("be.visible"); + cy.get('[routerLink="/report/affiliation"]').should("be.visible"); + cy.get('[routerLink="/report/consortia"]').should("not.exist"); + cy.get('[routerLink="/report/consortia-member-affiliations"]').should( + "not.exist", + ); + cy.request({ + url: "/services/memberservice/api/reports/member", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/integration", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/affiliation", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(200); + }); + cy.request({ + url: "/services/memberservice/api/reports/consortia", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(400); + }); + cy.request({ + url: "/services/memberservice/api/reports/consortia-member-affiliations", + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(400); + }); + }); +}); diff --git a/ui/cypress/integration/retention/ui-homepage-edit.js b/ui/cypress/integration/retention/ui-homepage-edit.js deleted file mode 100644 index 9a3637334..000000000 --- a/ui/cypress/integration/retention/ui-homepage-edit.js +++ /dev/null @@ -1,72 +0,0 @@ -/// -import data from '../../fixtures/test-data.json'; -import credentials from '../../fixtures/credentials.json'; - -const { email, name } = data.homepageTestMembers.consortiumMember; - -describe('Test editing member details', () => { - it('Editing Almonds Forest member details', function () { - const date = Date.now(); - cy.programmaticSignin(email, credentials.password); - cy.visit('/'); - cy.get('app-member-info-landing') - .contains(date) - .should('not.exist'); - cy.visit('/edit'); - cy.get('.text-danger').should('not.exist'); - // wait for data to load - cy.intercept(`/services/memberservice/api/members/${data.homepageTestMembers.consortiumMember.salesforceId}/member-contacts`).as('details'); - cy.wait('@details'); - cy.get('[name="orgName"]').clear().blur(); - cy.get('small').contains('Organization name cannot be empty'); - cy.get('[name="orgName"]').type(name); - cy.get('small').contains('Organization cannot be empty').should('not.exist'); - cy.get('[name="publicName"]').clear().blur(); - cy.get('small').contains('Public organization name cannot be empty'); - cy.get('[name="publicName"]').type(name + ' ' + date); - cy.get('small').contains('Public organization name cannot be empty').should('not.exist'); - cy.get('[name="country"]').invoke('attr', 'readonly').should('exist'); - cy.get('[name="state"]').should('not.exist') - cy.get('[name="trademarkLicense"][value="Yes"]').click(); - cy.get('[name="street"]').clear().type('Street ' + date); - cy.get('[name="city"]').clear().type('City ' + date); - cy.get('[name="postcode"]').clear().type(date); - - cy.get('.ql-editor') - .clear() - .type('Description: ' + date); - - cy.get('[name="website"]') - .clear() - .type(data.invalidWebsite).blur(); - cy.get('.text-danger').should('have.length', 3); - cy.get('[name="website"]') - .clear() - .type('https://' + date + '.org').blur(); - cy.get('.text-danger').should('not.exist'); - - cy.get('[name="email"]') - .clear() - .type(data.invalidEmail).blur(); - cy.get('.text-danger').should('have.length', 3); - cy.get('[name="email"]') - .clear() - .type(date + '@orcid.org').blur(); - cy.get('.text-danger').should('not.exist'); - cy.get('[type="submit"]').click(); - cy.get('app-member-info-landing', { timeout: 20000 }).contains(`${name} ${date}`); - cy.get('app-member-info-landing').contains(date + '@orcid.org'); - cy.get('app-member-info-landing').contains('https://' + date + '.org'); - cy.get('app-member-info-landing').contains('Description: ' + date); - cy.get('app-member-info-landing').contains('Street ' + date + ", City " + date + ", " + date); - cy.get('app-member-info-landing').contains(`YES - ORCID can use trademarked assets`); - cy.visit('/edit'); - // wait for data to load - cy.intercept(`/services/memberservice/api/members/${data.homepageTestMembers.consortiumMember.salesforceId}/member-contacts`).as('details'); - cy.wait('@details'); - cy.get('[name="trademarkLicense"][value="No"]').click(); - cy.get('[name="website"]').clear() - cy.get('[type="submit"]').click(); - cy.get('app-member-info-landing').contains(`NO - ORCID cannot use this organization's trademarked name and logos`); - }); -}); \ No newline at end of file diff --git a/ui/cypress/integration/retention/ui-homepage.js b/ui/cypress/integration/retention/ui-homepage.js deleted file mode 100644 index 513664348..000000000 --- a/ui/cypress/integration/retention/ui-homepage.js +++ /dev/null @@ -1,103 +0,0 @@ -/// -import data from '../../fixtures/test-data.json'; -import credentials from '../../fixtures/credentials.json'; - -describe('Test homepage', () => { - it('Direct member', function() { - cy.programmaticSignin(data.homepageTestMembers.directMemberEmail, credentials.password); - cy.visit('/'); - cy.get('app-member-info-landing', {timeout: 20000}) - cy.get('app-generic-landing').should('not.exist') - cy.get('.side-bar').contains("Public details") - cy.get('.side-bar').contains("Website") - cy.get('.side-bar').contains("Email") - cy.get('.side-bar').contains("https://orcid.org") - cy.get('.side-bar').contains("orcid@orcid.org") - cy.get('.main-section').contains("Membership: Active") - cy.get('.main-section').contains('Fly and Mighty') - cy.get('.main-section').contains('Contacts') - cy.get('.main-section').contains('Main relationship contact (OFFICIAL)') - cy.get('.main-section').contains('h.hanger@testingthisemail.com') - }); - - it('Consortium lead', function() { - cy.programmaticSignin(data.homepageTestMembers.consortiumLeadEmail, credentials.password); - cy.visit('/'); - cy.get('app-member-info-landing', {timeout: 20000}) - cy.get('app-generic-landing').should('not.exist') - cy.get('.side-bar').contains("Public details") - cy.get('.side-bar').contains("Website") - cy.get('.side-bar').contains("Email") - cy.get('.side-bar').contains("No website added") - cy.get('.side-bar').contains("No email added") - cy.get('.main-section').contains("Consortium lead") - cy.get('.main-section').contains("Mambo No 5") - cy.get('.main-section').contains("Consortium Members (4)") - cy.get('.main-section').contains("Member name") - cy.get('.main-section').contains("Almonds Forest") - cy.get('.main-section').contains('Contacts') - cy.get('.main-section').contains('Main relationship contact (OFFICIAL)') - cy.get('.main-section').contains('first.last@orcid.org') - }); - - it('Consortium member', function() { - cy.programmaticSignin(data.homepageTestMembers.consortiumMember.email, credentials.password); - cy.visit('/'); - cy.get('app-member-info-landing', {timeout: 20000}) - cy.get('app-generic-landing').should('not.exist') - cy.get('.side-bar').contains("Public details") - cy.get('.side-bar').contains("Website") - cy.get('.side-bar').contains("Email") - cy.get('.side-bar').contains("No website added") - cy.get('.side-bar').contains("@orcid.org") - cy.get('.main-section').contains("Consortium/Parent organization: Mambo No 5") - cy.get('.main-section').contains("Membership: Active") - cy.get('.main-section').contains("Almonds Forest") - cy.get('.main-section').contains("Description") - cy.get('.main-section').contains('Contacts') - cy.get('.main-section').contains('Agreement signatory (OFFICIAL)') - cy.get('.main-section').contains('last@orcid.org') - }); - - it('Consortium member 2', function() { - cy.programmaticSignin(data.homepageTestMembers.consortiumMemberEmail2, credentials.password); - cy.visit('/'); - cy.get('app-member-info-landing', {timeout: 20000}) - cy.get('app-generic-landing').should('not.exist') - cy.get('.side-bar').contains("Public details") - cy.get('.side-bar').contains("Website") - cy.get('.side-bar').contains("Email") - cy.get('.side-bar').contains("canadapost.ca") - cy.get('.side-bar').contains("support@orcid.org") - cy.get('.main-section').contains("Consortium/Parent organization: The Concord of Kinship") - cy.get('.main-section').contains("Membership: Active") - cy.get('.main-section').contains("Grateful Frogs") - }); - - it('Consortium member and lead', function() { - cy.programmaticSignin(data.homepageTestMembers.consortiumLeadAndMember.email, credentials.password); - cy.visit('/'); - cy.get('app-member-info-landing', {timeout: 20000}) - cy.get('app-generic-landing').should('not.exist') - cy.get('.side-bar').contains("Public details") - cy.get('.side-bar').contains("Website") - cy.get('.side-bar').contains("Email") - cy.get('.side-bar').contains("www.haevesting.com") - cy.get('.side-bar').contains("hhh@hhh.com") - cy.get('.main-section').contains("Consortium lead") - cy.get('.main-section').contains("Consortium Members (2)") - cy.get('.main-section').contains("Member name") - cy.get('.main-section').contains("Yellow member") - cy.get('.main-section').contains("The Harvest Ascendancy") - cy.get('.main-section').contains('Contacts') - cy.get('.main-section').contains('Product Contact') - cy.get('.main-section').contains('testingagain@orcid.org') - }); - - it('Inactive member', function() { - cy.programmaticSignin(data.homepageTestMembers.inactiveConsortiumMemberEmail, credentials.password); - cy.visit('/'); - cy.get('app-generic-landing', {timeout: 20000}).contains('Something has gone wrong...') - cy.get('app-member-info-landing').should('not.exist') - }); -}); diff --git a/ui/cypress/integration/retention/ui-login.js b/ui/cypress/integration/retention/ui-login.js deleted file mode 100644 index 15fe364a2..000000000 --- a/ui/cypress/integration/retention/ui-login.js +++ /dev/null @@ -1,17 +0,0 @@ -/// -import data from '../../fixtures/test-data.json'; -import credentials from '../../fixtures/credentials.json'; - -describe('Test sign in form', () => { - it('Sign in', function() { - cy.visit(`/`); - cy.get('#username') - .clear() - .type(data.member.users.owner.email); - cy.get('#password').type(credentials.password); - cy.get('button') - .filter('[type="submit"]') - .click(); - cy.get('#home-logged-message').should('exist'); - }); -}); diff --git a/ui/cypress/integration/retention/ui-reports.js b/ui/cypress/integration/retention/ui-reports.js deleted file mode 100644 index d912520b7..000000000 --- a/ui/cypress/integration/retention/ui-reports.js +++ /dev/null @@ -1,252 +0,0 @@ -/// -import data from '../../fixtures/test-data.json'; -import credentials from '../../fixtures/credentials.json'; - -describe('Test report menus', () => { - it('Direct member', function() { - cy.programmaticSignin(data.homepageTestMembers.directMemberEmail, credentials.password); - cy.visit('/'); - cy.get('app-member-info-landing', { timeout: 20000 }); - cy.get('#entity-menu').click(); - cy.get('[href="/report/member"]').should('be.visible'); - cy.get('[href="/report/integration"]').should('be.visible'); - cy.get('[href="/report/affiliation"]').should('be.visible'); - cy.get('[href="/report/consortia"]').should('not.exist'); - cy.get('[href="/report/consortia-member-affiliations"]').should('not.exist'); - cy.request({ - url: '/services/memberservice/api/reports/member', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/integration', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/affiliation', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/consortia', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(400); - }); - cy.request({ - url: '/services/memberservice/api/reports/consortia-member-affiliations', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(400); - }); - }); - - it('Consortium lead', function() { - cy.programmaticSignin(data.homepageTestMembers.consortiumLeadEmail, credentials.password); - cy.visit('/'); - cy.get('#entity-menu').click(); - cy.get('[href="/report/member"]').should('be.visible'); - cy.get('[href="/report/integration"]').should('be.visible'); - cy.get('[href="/report/affiliation"]').should('be.visible'); - cy.get('[href="/report/consortia"]').should('be.visible'); - cy.get('[href="/report/consortia-member-affiliations"]').should('be.visible'); - cy.request({ - url: '/services/memberservice/api/reports/member', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/integration', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/affiliation', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/consortia', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/consortia-member-affiliations', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - }); - - it('Consortium member', function() { - cy.programmaticSignin(data.homepageTestMembers.consortiumMember.email, credentials.password); - cy.visit('/'); - cy.get('#entity-menu').click(); - cy.get('[href="/report/member"]').should('be.visible'); - cy.get('[href="/report/integration"]').should('be.visible'); - cy.get('[href="/report/affiliation"]').should('be.visible'); - cy.get('[href="/report/consortia"]').should('not.exist'); - cy.get('[href="/report/consortia-member-affiliations"]').should('not.exist'); - cy.request({ - url: '/services/memberservice/api/reports/member', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/integration', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/affiliation', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/consortia', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(400); - }); - cy.request({ - url: '/services/memberservice/api/reports/consortia-member-affiliations', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(400); - }); - }); - - it('Consortium member 2', function() { - cy.programmaticSignin(data.homepageTestMembers.consortiumMemberEmail2, credentials.password); - cy.visit('/'); - cy.get('#entity-menu').click(); - cy.get('[href="/report/member"]').should('be.visible'); - cy.get('[href="/report/integration"]').should('be.visible'); - cy.get('[href="/report/affiliation"]').should('be.visible'); - cy.get('[href="/report/consortia"]').should('not.exist'); - cy.get('[href="/report/consortia-member-affiliations"]').should('not.exist'); - cy.request({ - url: '/services/memberservice/api/reports/member', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/integration', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/affiliation', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/consortia', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(400); - }); - cy.request({ - url: '/services/memberservice/api/reports/consortia-member-affiliations', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(400); - }); - }); - - it('Consortium member and lead', function() { - cy.programmaticSignin(data.homepageTestMembers.consortiumLeadAndMember.email, credentials.password); - cy.visit('/'); - cy.get('#entity-menu').click(); - cy.get('[href="/report/member"]').should('be.visible'); - cy.get('[href="/report/integration"]').should('be.visible'); - cy.get('[href="/report/affiliation"]').should('be.visible'); - cy.get('[href="/report/consortia"]').should('be.visible'); - cy.get('[href="/report/consortia-member-affiliations"]').should('be.visible'); - cy.request({ - url: '/services/memberservice/api/reports/member', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/integration', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/affiliation', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/consortia', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/consortia-member-affiliations', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - }); - - it('Inactive member', function() { - cy.programmaticSignin(data.homepageTestMembers.inactiveConsortiumMemberEmail, credentials.password); - cy.visit('/'); - cy.get('#entity-menu').click(); - cy.get('[href="/report/member"]').should('be.visible'); - cy.get('[href="/report/integration"]').should('be.visible'); - cy.get('[href="/report/affiliation"]').should('be.visible'); - cy.get('[href="/report/consortia"]').should('not.exist'); - cy.get('[href="/report/consortia-member-affiliations"]').should('not.exist'); - cy.request({ - url: '/services/memberservice/api/reports/member', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/integration', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/affiliation', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(200); - }); - cy.request({ - url: '/services/memberservice/api/reports/consortia', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(400); - }); - cy.request({ - url: '/services/memberservice/api/reports/consortia-member-affiliations', - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(400); - }); - }); -}); diff --git a/ui/cypress/plugins/index.js b/ui/cypress/plugins/index.js index e23160d6b..b2ef5a068 100644 --- a/ui/cypress/plugins/index.js +++ b/ui/cypress/plugins/index.js @@ -11,21 +11,28 @@ // This function is called when a project is opened or re-opened (e.g. due to // the project's config changing) -const data = require('../fixtures/test-data.json'); -const gmail_tester = require('gmail-tester') -const path = require('path') -const tokenFileName = 'token_qa.json' //token file is inside plugins/ directory -const credentialsFileName = 'credentials_qa.json' //credentials is inside plugins/ directory -const clipboardy = require('clipboardy') +const data = require("../fixtures/test-data.json"); +const gmail_tester = require("gmail-tester"); +const path = require("path"); +const tokenFileName = "token_qa.json"; //token file is inside plugins/ directory +const credentialsFileName = "credentials_qa.json"; //credentials is inside plugins/ directory +const clipboardy = require("clipboardy"); /** * @type {Cypress.PluginConfig} */ // eslint-disable-next-line no-unused-vars module.exports = (on, config) => { - on('task', { - checkInbox: async (args) => { - const { include_body, include_attachments, subject, after, to, from = data.outbox.email } = args; + on("task", { + checkInbox: async (args) => { + const { + include_body, + include_attachments, + subject, + after, + to, + from = data.outbox.email, + } = args; const email = await gmail_tester.check_inbox( path.resolve(__dirname, credentialsFileName), path.resolve(__dirname, tokenFileName), @@ -35,18 +42,18 @@ module.exports = (on, config) => { max_wait_time_sec: 300, include_body: true, include_attachments: true, - after: new Date( Date.now() - 1000 * 60 ), + after: new Date(Date.now() - 1000 * 60), to, subject, - } - ) - return email //this task returns one email (JSON object) - }, - }); + }, + ); + return email; //this task returns one email (JSON object) + }, + }); - on('task', { - getClipboard () { + on("task", { + getClipboard() { return clipboardy.readSync(); - } + }, }); -} +}; diff --git a/ui/cypress/support/commands.js b/ui/cypress/support/commands.js index 31fa5ce63..498a2a5dc 100644 --- a/ui/cypress/support/commands.js +++ b/ui/cypress/support/commands.js @@ -23,56 +23,52 @@ // // -- This will overwrite an existing command -- // Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) -import 'cypress-file-upload'; -import data from '../fixtures/test-data.json'; -import credentials from '../fixtures/credentials.json'; -import record from '../fixtures/orcid-record.json'; - -Cypress.Commands.add('signin', (email, password) => { - cy.visit('./'); - cy.get('#username') +import "cypress-file-upload"; +import data from "../fixtures/test-data.json"; +import credentials from "../fixtures/credentials.json"; +import record from "../fixtures/orcid-record.json"; + +Cypress.Commands.add("signin", (email, password) => { + cy.visit("./"); + cy.get("#username") .clear() .type(email) - .get('#password') + .get("#password") .type(password) - .get('button') + .get("button") .filter('[type="submit"]') .click(); - cy.get('#home-logged-message').should('exist'); + cy.get('[data-cy="signedInMessage"]').should("exist"); }); -Cypress.Commands.add('checkOrgId', (org, invalidId, id) => { - cy.get('#field_disambiguationSource').select(org); - cy.get('small.text-danger').should('exist'); - cy.get('#field_disambiguatedOrgId') - .clear() - .type(invalidId); - cy.get('small.text-danger').should('exist'); - cy.get('#field_disambiguatedOrgId') - .clear() - .type(id); - cy.get('small.text-danger').should('not.exist'); +Cypress.Commands.add("checkOrgId", (org, invalidId, id) => { + cy.get("#field_disambiguationSource").select(org); + cy.get("small.text-danger").should("exist"); + cy.get("#field_disambiguatedOrgId").clear().type(invalidId); + cy.get("small.text-danger").should("exist"); + cy.get("#field_disambiguatedOrgId").clear().type(id); + cy.get("small.text-danger").should("not.exist"); }); -Cypress.Commands.add('programmaticSignin', (username, password) => { - cy.getCookie('XSRF-TOKEN').then(csrfCookie => { +Cypress.Commands.add("programmaticSignin", (username, password) => { + cy.getCookie("XSRF-TOKEN").then((csrfCookie) => { if (!csrfCookie) { return cy - .visit('/') - .getCookie('XSRF-TOKEN') + .visit("/") + .getCookie("XSRF-TOKEN") .then(() => cy.programmaticSignin(username, password)); } else { cy.log(csrfCookie.value); cy.request({ - method: 'POST', - url: '/auth/login', - headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + method: "POST", + url: "/auth/login", + headers: { "X-XSRF-TOKEN": csrfCookie.value }, failOnStatusCode: false, // dont fail so we can make assertions body: { username, - password - } - }).then(r => { + password, + }, + }).then((r) => { if (r.status != 200) { cy.signin(username, password); } @@ -81,113 +77,106 @@ Cypress.Commands.add('programmaticSignin', (username, password) => { }); }); -Cypress.Commands.add('programmaticSignout', () => { - cy.getCookie('XSRF-TOKEN').then(csrfCookie => { +Cypress.Commands.add("programmaticSignout", () => { + cy.getCookie("XSRF-TOKEN").then((csrfCookie) => { cy.log(csrfCookie.value); cy.request({ - method: 'POST', - url: '/auth/logout', - headers: { 'X-XSRF-TOKEN': csrfCookie.value }, - failOnStatusCode: false // dont fail so we can make assertions - }).then(r => { + method: "POST", + url: "/auth/logout", + headers: { "X-XSRF-TOKEN": csrfCookie.value }, + failOnStatusCode: false, // dont fail so we can make assertions + }).then((r) => { cy.log(r); // expect(r.status).to.eq(204); }); }); }); -Cypress.Commands.add('processPasswordForm', newPasswordFieldId => { - cy.get('button') +Cypress.Commands.add("processPasswordForm", (newPasswordFieldId) => { + cy.get("button") .filter('[type="submit"]') // make sure you can't activate account without providing a password - .invoke('attr', 'disabled') - .should('exist'); + .invoke("attr", "disabled") + .should("exist"); // type invalid passwords - cy.get(newPasswordFieldId) - .clear() - .type(credentials.shortPassword); - cy.get('#confirmPassword') + cy.get(newPasswordFieldId).clear().type(credentials.shortPassword); + cy.get("#confirmPassword") .clear() .type(credentials.shortConfirmationPassword); // check for min length error messages - cy.get('small') - .filter('[jhitranslate="global.messages.validate.newpassword.minlength.string"]') - .should('exist'); - cy.get('small') - .filter('[jhitranslate="global.messages.validate.confirmpassword.minlength.string"]') - .should('exist'); + cy.get("small") + .filter( + '[jhitranslate="global.messages.validate.newpassword.minlength.string"]', + ) + .should("exist"); + cy.get("small") + .filter( + '[jhitranslate="global.messages.validate.confirmpassword.minlength.string"]', + ) + .should("exist"); // fix password - cy.get(newPasswordFieldId) - .clear() - .type(credentials.password); + cy.get(newPasswordFieldId).clear().type(credentials.password); // enter invalid confirmation password - cy.get('#confirmPassword') + cy.get("#confirmPassword") .clear() .type(credentials.wrongConfirmationPasssword); // make sure you can't activate account - cy.get('button') - .filter('[type="submit"]') - .click(); + cy.get("button").filter('[type="submit"]').click(); // check for confirmation error message - cy.get('div') + cy.get("div") .filter('[jhitranslate="global.messages.error.dontmatch.string"]') - .should('exist'); + .should("exist"); // fix confirmation password - cy.get('#confirmPassword') - .clear() - .type(credentials.password); + cy.get("#confirmPassword").clear().type(credentials.password); // activate account - cy.get('button') - .filter('[type="submit"]') - .click(); + cy.get("button").filter('[type="submit"]').click(); }); -Cypress.Commands.add('visitLinkFromEmail', email => { +Cypress.Commands.add("visitLinkFromEmail", (email) => { const emailBody = email[0].body.html; assert.isNotNull(emailBody); - cy.log('>>>>>>>>>Email body is: ' + JSON.stringify(email.body)); + cy.log(">>>>>>>>>Email body is: " + JSON.stringify(email.body)); //convert string to DOM - const htmlDom = new DOMParser().parseFromString(emailBody, 'text/html'); + const htmlDom = new DOMParser().parseFromString(emailBody, "text/html"); //href points to correct endpoint - const href = htmlDom.querySelector('a[href*="https://member-portal.qa.orcid.org/reset/finish?key="]').href; + const href = htmlDom.querySelector( + 'a[href*="https://member-portal.qa.orcid.org/reset/finish?key="]', + ).href; cy.visit(href); }); -Cypress.Commands.add('checkInbox', (subject, recipient, date) => { - cy.task('checkInbox', { +Cypress.Commands.add("checkInbox", (subject, recipient, date) => { + cy.task("checkInbox", { options: { from: data.outbox.email, to: recipient, subject, include_body: true, - after: date - } + after: date, + }, }); }); -Cypress.Commands.add('removeAffiliation', $e => { - cy.wrap($e) - .children() - .last() - .click(); - cy.get('#jhi-confirm-delete-msUser').click(); +Cypress.Commands.add("removeAffiliation", ($e) => { + cy.wrap($e).children().last().click(); + cy.get("#jhi-confirm-delete-msUser").click(); }); -Cypress.Commands.add('changeOrgOwner', () => { +Cypress.Commands.add("changeOrgOwner", () => { cy.visit(`/user/${data.member.users.owner.id}/edit`); - cy.get('#field_mainContact').click(); - cy.get('#save-entity').click(); - cy.get('.alert-success').should('exist'); + cy.get("#field_mainContact").click(); + cy.get("#save-entity").click(); + cy.get(".alert-success").should("exist"); cy.programmaticSignout(); }); -Cypress.Commands.add('readCsv', data => { - var lines = data.split('\n'); +Cypress.Commands.add("readCsv", (data) => { + var lines = data.split("\n"); var result = []; - var headers = lines[0].split(','); + var headers = lines[0].split(","); for (var i = 1; i < lines.length; i++) { var obj = {}; - var currentline = lines[i].split(','); + var currentline = lines[i].split(","); for (var j = 0; j < headers.length; j++) { obj[headers[j]] = currentline[j]; @@ -197,95 +186,99 @@ Cypress.Commands.add('readCsv', data => { return result; }); -Cypress.Commands.add('uploadCsv', path => { - cy.get('#jh-upload-entities').click(); - cy.get('#field_filePath').attachFile(path); - cy.intercept('https://member-portal.qa.orcid.org/services/assertionservice/api/assertion/upload').as('upload'); - cy.get('#jhi-confirm-csv-upload').click(); +Cypress.Commands.add("uploadCsv", (path) => { + cy.get("#jh-upload-entities").click(); + cy.get("#field_filePath").attachFile(path); + cy.intercept( + "https://member-portal.qa.orcid.org/services/assertionservice/api/assertion/upload", + ).as("upload"); + cy.get("#jhi-confirm-csv-upload").click(); // Occasionally, trying to upload the csv results in a 403 code due to an invalid CSRF token, in which case we retry - cy.wait('@upload').then(int => { + cy.wait("@upload").then((int) => { if (int.response.statusCode !== 200) { - cy.get('#jhi-confirm-csv-upload').click(); + cy.get("#jhi-confirm-csv-upload").click(); } }); }); -Cypress.Commands.add('fetchLinkAndGrantPermission', email => { +Cypress.Commands.add("fetchLinkAndGrantPermission", (email) => { // get permission link from first affiliation in the list - cy.get('tbody') + cy.get("tbody") .children() .last() .within(() => { - cy.get('a') - .filter('[jhitranslate="gatewayApp.assertionServiceAssertion.details.string"]') + cy.get("a") + .filter( + '[jhitranslate="gatewayApp.assertionServiceAssertion.details.string"]', + ) .click(); }); - cy.get('.jh-entity-details').within(() => + cy.get(".jh-entity-details").within(() => cy - .get('button') - .filter('[jhitranslate="gatewayApp.assertionServiceAssertion.copyClipboard.string"]') - .click() + .get("button") + .filter( + '[jhitranslate="gatewayApp.assertionServiceAssertion.copyClipboard.string"]', + ) + .click(), ); - cy.task('getClipboard').then(link => { + cy.task("getClipboard").then((link) => { cy.visit(link); }); // Handle cookies - cy.get('#onetrust-reject-all-handler').click(); + cy.get("#onetrust-reject-all-handler").click(); // Grant permission - cy.get('#username') - .clear() - .type(email); - cy.get('#password').type(credentials.password); - cy.get('#signin-button').click(); + cy.get("#username").clear().type(email); + cy.get("#password").type(credentials.password); + cy.get("#signin-button").click(); // *ADD ID - cy.get('.mt-5').within(() => { - cy.get('h2') + cy.get(".mt-5").within(() => { + cy.get("h2") .filter('[jhitranslate="landingPage.success.thanks.string"]') - .should('exist'); + .should("exist"); }); }); -Cypress.Commands.add('checkAffiliationChanges', (affiliation, value) => { - expect(affiliation['department-name']).to.eq(value); - expect(affiliation['role-title']).to.eq(value); - expect(affiliation['organization']['address']['city']).to.eq(value); - expect(affiliation['organization']['name']).to.eq(value); +Cypress.Commands.add("checkAffiliationChanges", (affiliation, value) => { + expect(affiliation["department-name"]).to.eq(value); + expect(affiliation["role-title"]).to.eq(value); + expect(affiliation["organization"]["address"]["city"]).to.eq(value); + expect(affiliation["organization"]["name"]).to.eq(value); }); /** ****************************************************************************** * ******************************************************************************* - * - * SECURITY TESTS - * + * + * SECURITY TESTS + * * ******************************************************************************* * *******************************************************************************/ /** **** * ***** - * + * * USERS - * + * * ***** * *****/ -Cypress.Commands.add('getUsersBySfId', (salesforceId, code, title) => { - cy.log('getUsersBySfId'); +Cypress.Commands.add("getUsersBySfId", (salesforceId, code, title) => { + cy.log("getUsersBySfId"); cy.request({ url: `/services/userservice/api/users/salesforce/${salesforceId}`, - failOnStatusCode: false - }).then(resp => { + failOnStatusCode: false, + }).then((resp) => { expect(resp.status).to.eq(code); expect(resp.body.title).to.eq(title); }); }); -Cypress.Commands.add('getAllUsers', (code, title) => { - cy.log('getAllUsers'); +Cypress.Commands.add("getAllUsers", (code, title) => { + cy.log("getAllUsers"); cy.request({ - url: '/services/userservice/api/users/', - failOnStatusCode: false - }).then(resp => { + url: "/services/userservice/api/users/", + failOnStatusCode: false, + }).then((resp) => { expect(resp.status).to.eq(code); expect(resp.body.title).to.eq(title); }); @@ -293,236 +286,244 @@ Cypress.Commands.add('getAllUsers', (code, title) => { /** ****** * ******* - * + * * MEMBERS - * + * * ******* * *******/ -Cypress.Commands.add('getAllMembers', (code, title) => { - cy.log('getAllMembers'); +Cypress.Commands.add("getAllMembers", (code, title) => { + cy.log("getAllMembers"); cy.request({ - url: '/services/memberservice/api/members', - failOnStatusCode: false - }).then(resp => { + url: "/services/memberservice/api/members", + failOnStatusCode: false, + }).then((resp) => { expect(resp.status).to.eq(code); expect(resp.body.title).to.eq(title); }); }); -Cypress.Commands.add('addMember', (salesforceId, assertionServiceEnabled, isConsortiumLead, code, title) => { - cy.log('addMember'); - cy.getCookie('XSRF-TOKEN').then(csrfCookie => { - cy.request({ - method: 'POST', - url: '/services/memberservice/api/members', - headers: { 'X-XSRF-TOKEN': csrfCookie.value }, - failOnStatusCode: false, - body: { - salesforceId, - assertionServiceEnabled, - isConsortiumLead - } - }).then(resp => { - expect(resp.status).to.eq(code); - expect(resp.body.title).to.eq(title); +Cypress.Commands.add( + "addMember", + (salesforceId, assertionServiceEnabled, isConsortiumLead, code, title) => { + cy.log("addMember"); + cy.getCookie("XSRF-TOKEN").then((csrfCookie) => { + cy.request({ + method: "POST", + url: "/services/memberservice/api/members", + headers: { "X-XSRF-TOKEN": csrfCookie.value }, + failOnStatusCode: false, + body: { + salesforceId, + assertionServiceEnabled, + isConsortiumLead, + }, + }).then((resp) => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); }); - }); -}); - -Cypress.Commands.add('updateMember', (salesforceId, assertionServiceEnabled, isConsortiumLead, code, title) => { - cy.log('updateMember'); - cy.getCookie('XSRF-TOKEN').then(csrfCookie => { - cy.request({ - method: 'PUT', - url: '/services/memberservice/api/members', - headers: { 'X-XSRF-TOKEN': csrfCookie.value }, - failOnStatusCode: false, - body: { - salesforceId, - assertionServiceEnabled, - isConsortiumLead - } - }).then(resp => { - expect(resp.status).to.eq(code); - expect(resp.body.title).to.eq(title); + }, +); + +Cypress.Commands.add( + "updateMember", + (salesforceId, assertionServiceEnabled, isConsortiumLead, code, title) => { + cy.log("updateMember"); + cy.getCookie("XSRF-TOKEN").then((csrfCookie) => { + cy.request({ + method: "PUT", + url: "/services/memberservice/api/members", + headers: { "X-XSRF-TOKEN": csrfCookie.value }, + failOnStatusCode: false, + body: { + salesforceId, + assertionServiceEnabled, + isConsortiumLead, + }, + }).then((resp) => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); }); - }); -}); - -Cypress.Commands.add('validateMember', (salesforceId, assertionServiceEnabled, isConsortiumLead, code, title) => { - cy.log('validateMember'); - cy.getCookie('XSRF-TOKEN').then(csrfCookie => { - cy.request({ - method: 'POST', - url: '/services/memberservice/api/members/validate', - headers: { 'X-XSRF-TOKEN': csrfCookie.value }, - failOnStatusCode: false, - body: { - salesforceId, - assertionServiceEnabled, - isConsortiumLead - } - }).then(resp => { - expect(resp.status).to.eq(code); - expect(resp.body.title).to.eq(title); + }, +); + +Cypress.Commands.add( + "validateMember", + (salesforceId, assertionServiceEnabled, isConsortiumLead, code, title) => { + cy.log("validateMember"); + cy.getCookie("XSRF-TOKEN").then((csrfCookie) => { + cy.request({ + method: "POST", + url: "/services/memberservice/api/members/validate", + headers: { "X-XSRF-TOKEN": csrfCookie.value }, + failOnStatusCode: false, + body: { + salesforceId, + assertionServiceEnabled, + isConsortiumLead, + }, + }).then((resp) => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); }); - }); -}); - -Cypress.Commands.add('changeNotificationLanguage', (salesforceId, language, code, title) => { - cy.log('changeNotificationLanguage'); - cy.getCookie('XSRF-TOKEN').then(csrfCookie => { - cy.request({ - method: 'POST', - url: `/services/memberservice/api/members/${salesforceId}/language/${language}`, - headers: { 'X-XSRF-TOKEN': csrfCookie.value }, - failOnStatusCode: false - }).then(resp => { - expect(resp.status).to.eq(code); - expect(resp.body.title).to.eq(title); + }, +); + +Cypress.Commands.add( + "changeNotificationLanguage", + (salesforceId, language, code, title) => { + cy.log("changeNotificationLanguage"); + cy.getCookie("XSRF-TOKEN").then((csrfCookie) => { + cy.request({ + method: "POST", + url: `/services/memberservice/api/members/${salesforceId}/language/${language}`, + headers: { "X-XSRF-TOKEN": csrfCookie.value }, + failOnStatusCode: false, + }).then((resp) => { + expect(resp.status).to.eq(code); + expect(resp.body.title).to.eq(title); + }); }); - }); -}); + }, +); -Cypress.Commands.add('updateContact', (salesforceId, code, title) => { - cy.log('updateContact'); - cy.getCookie('XSRF-TOKEN').then(csrfCookie => { +Cypress.Commands.add("updateContact", (salesforceId, code, title) => { + cy.log("updateContact"); + cy.getCookie("XSRF-TOKEN").then((csrfCookie) => { cy.request({ - method: 'POST', + method: "POST", url: `/services/memberservice/api/members/${salesforceId}/contact-update`, - headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + headers: { "X-XSRF-TOKEN": csrfCookie.value }, failOnStatusCode: false, - body: { - - } - }).then(resp => { + body: {}, + }).then((resp) => { expect(resp.status).to.eq(code); expect(resp.statusText).to.eq(title); }); }); }); -Cypress.Commands.add('updateMemberDetails', (salesforceId, publicName, code, title) => { - cy.log('updateMemberDetails'); - cy.getCookie('XSRF-TOKEN').then(csrfCookie => { - cy.request({ - method: 'PUT', - url: `/services/memberservice/api/members/${salesforceId}/member-details`, - headers: { 'X-XSRF-TOKEN': csrfCookie.value }, - failOnStatusCode: false, - body: { - publicName, - salesforceId - } - }).then(resp => { - expect(resp.status).to.eq(code); - expect(resp.statusText).to.eq(title); +Cypress.Commands.add( + "updateMemberDetails", + (salesforceId, publicName, code, title) => { + cy.log("updateMemberDetails"); + cy.getCookie("XSRF-TOKEN").then((csrfCookie) => { + cy.request({ + method: "PUT", + url: `/services/memberservice/api/members/${salesforceId}/member-details`, + headers: { "X-XSRF-TOKEN": csrfCookie.value }, + failOnStatusCode: false, + body: { + publicName, + salesforceId, + }, + }).then((resp) => { + expect(resp.status).to.eq(code); + expect(resp.statusText).to.eq(title); + }); }); - }); -}); + }, +); -Cypress.Commands.add('getMemberDetails', (salesforceId, code, title) => { - cy.log('getMemberDetails'); +Cypress.Commands.add("getMemberDetails", (salesforceId, code, title) => { + cy.log("getMemberDetails"); cy.request({ url: `/services/memberservice/api/members/${salesforceId}/member-details`, - failOnStatusCode: false - }).then(resp => { + failOnStatusCode: false, + }).then((resp) => { expect(resp.status).to.eq(code); expect(resp.statusText).to.eq(title); }); }); -Cypress.Commands.add('getMemberContacts', (salesforceId, code, title) => { - cy.log('getMemberContacts'); +Cypress.Commands.add("getMemberContacts", (salesforceId, code, title) => { + cy.log("getMemberContacts"); cy.request({ url: `/services/memberservice/api/members/${salesforceId}/member-contacts`, - failOnStatusCode: false - }).then(resp => { + failOnStatusCode: false, + }).then((resp) => { expect(resp.status).to.eq(code); expect(resp.statusText).to.eq(title); }); }); -Cypress.Commands.add('getMemberOrgIds', (salesforceId, code, title) => { - cy.log('getMemberOrgIds'); +Cypress.Commands.add("getMemberOrgIds", (salesforceId, code, title) => { + cy.log("getMemberOrgIds"); cy.request({ url: `/services/memberservice/api/members/${salesforceId}/member-org-ids`, - failOnStatusCode: false - }).then(resp => { + failOnStatusCode: false, + }).then((resp) => { expect(resp.status).to.eq(code); expect(resp.statusText).to.eq(title); }); }); - -Cypress.Commands.add('getMembersList', (code, title) => { - cy.log('getMemberList'); +Cypress.Commands.add("getMembersList", (code, title) => { + cy.log("getMemberList"); cy.request({ - url: '/services/memberservice/api/members/list/all', - failOnStatusCode: false - }).then(resp => { + url: "/services/memberservice/api/members/list/all", + failOnStatusCode: false, + }).then((resp) => { expect(resp.status).to.eq(code); expect(resp.body.title).to.eq(title); }); }); -Cypress.Commands.add('getMember', (salesforceId, code, title) => { - cy.log('getMember'); +Cypress.Commands.add("getMember", (salesforceId, code, title) => { + cy.log("getMember"); cy.request({ url: `/services/memberservice/api/members/${salesforceId}`, - failOnStatusCode: false - }).then(resp => { + failOnStatusCode: false, + }).then((resp) => { expect(resp.status).to.eq(code); expect(resp.body.title).to.eq(title); }); }); -Cypress.Commands.add('deleteMember', (salesforceId, code, title) => { - cy.log('deleteMember'); - cy.getCookie('XSRF-TOKEN').then(csrfCookie => { +Cypress.Commands.add("deleteMember", (salesforceId, code, title) => { + cy.log("deleteMember"); + cy.getCookie("XSRF-TOKEN").then((csrfCookie) => { cy.request({ - method: 'DELETE', + method: "DELETE", url: `/services/memberservice/api/members/${salesforceId}`, - headers: { 'X-XSRF-TOKEN': csrfCookie.value }, - failOnStatusCode: false - }).then(resp => { + headers: { "X-XSRF-TOKEN": csrfCookie.value }, + failOnStatusCode: false, + }).then((resp) => { expect(resp.status).to.eq(code); expect(resp.body.title).to.eq(title); }); }); }); -Cypress.Commands.add('addConsortiumMember', (code, title) => { - cy.log('addConsortiumMember'); - cy.getCookie('XSRF-TOKEN').then(csrfCookie => { +Cypress.Commands.add("addConsortiumMember", (code, title) => { + cy.log("addConsortiumMember"); + cy.getCookie("XSRF-TOKEN").then((csrfCookie) => { cy.request({ - method: 'POST', + method: "POST", url: `/services/memberservice/api/members/add-consortium-member`, - headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + headers: { "X-XSRF-TOKEN": csrfCookie.value }, failOnStatusCode: false, - body: { - - } - }).then(resp => { + body: {}, + }).then((resp) => { expect(resp.status).to.eq(code); expect(resp.body?.title).to.eq(title); }); }); }); -Cypress.Commands.add('removeConsortiumMember', (code, title) => { - cy.log('removeConsortiumMember'); - cy.getCookie('XSRF-TOKEN').then(csrfCookie => { +Cypress.Commands.add("removeConsortiumMember", (code, title) => { + cy.log("removeConsortiumMember"); + cy.getCookie("XSRF-TOKEN").then((csrfCookie) => { cy.request({ - method: 'POST', + method: "POST", url: `/services/memberservice/api/members/remove-consortium-member`, - headers: { 'X-XSRF-TOKEN': csrfCookie.value }, + headers: { "X-XSRF-TOKEN": csrfCookie.value }, failOnStatusCode: false, - body: { - - } - }).then(resp => { + body: {}, + }).then((resp) => { expect(resp.status).to.eq(code); expect(resp.body?.title).to.eq(title); }); @@ -531,18 +532,18 @@ Cypress.Commands.add('removeConsortiumMember', (code, title) => { /** ********* * ********** - * + * * ASSERTIONS - * + * * ********** * **********/ -Cypress.Commands.add('getAssertions', (code, title) => { - cy.log('getAssertions'); +Cypress.Commands.add("getAssertions", (code, title) => { + cy.log("getAssertions"); cy.request({ - url: '/services/assertionservice/api/assertions', - failOnStatusCode: false - }).then(resp => { + url: "/services/assertionservice/api/assertions", + failOnStatusCode: false, + }).then((resp) => { expect(resp.status).to.eq(code); expect(resp.body.title).to.eq(title); }); diff --git a/ui/cypress/support/index.js b/ui/cypress/support/e2e.js similarity index 100% rename from ui/cypress/support/index.js rename to ui/cypress/support/e2e.js diff --git a/ui/package-lock.json b/ui/package-lock.json index 0597b3626..1d91d30d4 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -22,6 +22,8 @@ "@fortawesome/free-solid-svg-icons": "^6.4.2", "@ng-bootstrap/ng-bootstrap": "^15.1.1", "bootstrap": "^5.3.2", + "clipboardy": "^2.3.0", + "cypress-file-upload": "^5.0.8", "jsrsasign": "^11.1.0", "jsrsasign-util": "^1.0.5", "moment": "^2.29.4", @@ -49,6 +51,7 @@ "@typescript-eslint/parser": "5.62.0", "cypress": "^13.9.0", "eslint": "^8.49.0", + "gmail-tester": "^1.3.8", "jasmine-core": "~4.3.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.1.0", @@ -2619,7 +2622,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.1.90" } @@ -2628,7 +2631,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", - "dev": true, "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -2657,7 +2659,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -2671,7 +2672,6 @@ "version": "6.10.4", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "dev": true, "dependencies": { "side-channel": "^1.0.4" }, @@ -2686,7 +2686,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, "dependencies": { "debug": "^3.1.0", "lodash.once": "^4.1.1" @@ -2696,7 +2695,6 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -4964,7 +4962,7 @@ "version": "18.11.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true + "devOptional": true }, "node_modules/@types/qs": { "version": "6.9.8", @@ -5032,14 +5030,12 @@ "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==" }, "node_modules/@types/sizzle": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", - "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", - "dev": true + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==" }, "node_modules/@types/sockjs": { "version": "0.3.34", @@ -5063,7 +5059,6 @@ "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, "optional": true, "dependencies": { "@types/node": "*" @@ -5733,7 +5728,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -5791,7 +5785,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, "engines": { "node": ">=6" } @@ -5800,7 +5793,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -5864,7 +5856,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true, "funding": [ { "type": "github", @@ -5926,11 +5917,19 @@ "node": ">=8" } }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, "dependencies": { "safer-buffer": "~2.1.0" } @@ -5939,7 +5938,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, "engines": { "node": ">=0.8" } @@ -5948,7 +5946,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, "engines": { "node": ">=8" } @@ -5956,20 +5953,17 @@ "node_modules/async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, "engines": { "node": ">= 4.0.0" } @@ -6011,7 +6005,6 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, "engines": { "node": "*" } @@ -6019,8 +6012,7 @@ "node_modules/aws4": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "node_modules/axios": { "version": "1.6.3", @@ -6147,7 +6139,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -6182,7 +6173,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, "dependencies": { "tweetnacl": "^0.14.3" } @@ -6196,6 +6186,15 @@ "node": "*" } }, + "node_modules/bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -6218,14 +6217,12 @@ "node_modules/blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==" }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "node_modules/body-parser": { "version": "1.20.2", @@ -6363,7 +6360,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "funding": [ { "type": "github", @@ -6387,11 +6383,16 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, "engines": { "node": "*" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -6461,7 +6462,6 @@ "version": "2.4.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", - "dev": true, "engines": { "node": ">=6" } @@ -6524,8 +6524,7 @@ "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "node_modules/chalk": { "version": "2.4.2", @@ -6550,7 +6549,6 @@ "version": "2.24.0", "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true, "engines": { "node": ">= 0.8.0" } @@ -6603,7 +6601,6 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, "funding": [ { "type": "github", @@ -6618,7 +6615,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, "engines": { "node": ">=6" } @@ -6627,7 +6623,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, "dependencies": { "restore-cursor": "^3.1.0" }, @@ -6651,7 +6646,6 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0" }, @@ -6666,7 +6660,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, "dependencies": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -6687,6 +6680,116 @@ "node": ">= 10" } }, + "node_modules/clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dependencies": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clipboardy/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/clipboardy/node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clipboardy/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clipboardy/node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clipboardy/node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clipboardy/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/clipboardy/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/clipboardy/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clipboardy/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -6746,14 +6849,12 @@ "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -6777,7 +6878,6 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true, "engines": { "node": ">=4.0.0" } @@ -7147,7 +7247,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -7161,7 +7260,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -7272,7 +7370,6 @@ "version": "13.9.0", "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.9.0.tgz", "integrity": "sha512-atNjmYfHsvTuCaxTxLZr9xGoHz53LLui3266WWxXJHY7+N6OdwJdg/feEa3T+buez9dmUXHT1izCOklqG82uCQ==", - "dev": true, "hasInstallScript": true, "dependencies": { "@cypress/request": "^3.0.0", @@ -7325,11 +7422,21 @@ "node": "^16.0.0 || ^18.0.0 || >=20.0.0" } }, + "node_modules/cypress-file-upload": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/cypress-file-upload/-/cypress-file-upload-5.0.8.tgz", + "integrity": "sha512-+8VzNabRk3zG6x8f8BWArF/xA/W0VK4IZNx3MV0jFWrJS/qKn8eHfa5nU73P9fOQAgwHFJx7zjg4lwOnljMO8g==", + "engines": { + "node": ">=8.2.1" + }, + "peerDependencies": { + "cypress": ">3.0.0" + } + }, "node_modules/cypress/node_modules/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, "dependencies": { "color-convert": "^2.0.1" }, @@ -7344,7 +7451,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7360,7 +7466,6 @@ "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, "dependencies": { "has-flag": "^4.0.0" }, @@ -7372,7 +7477,6 @@ "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, "dependencies": { "color-name": "~1.1.4" }, @@ -7383,14 +7487,12 @@ "node_modules/cypress/node_modules/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/cypress/node_modules/commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true, "engines": { "node": ">= 6" } @@ -7399,7 +7501,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -7422,7 +7523,6 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -7437,7 +7537,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, "dependencies": { "pump": "^3.0.0" }, @@ -7452,7 +7551,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -7461,7 +7559,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true, "engines": { "node": ">=8.12.0" } @@ -7470,7 +7567,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "dependencies": { "universalify": "^2.0.0" }, @@ -7481,14 +7577,12 @@ "node_modules/cypress/node_modules/proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==" }, "node_modules/cypress/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -7503,7 +7597,6 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true, "engines": { "node": ">=14.14" } @@ -7512,7 +7605,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, "engines": { "node": ">= 10.0.0" } @@ -7521,7 +7613,6 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, "dependencies": { "assert-plus": "^1.0.0" }, @@ -7555,8 +7646,7 @@ "node_modules/dayjs": { "version": "1.11.11", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", - "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==", - "dev": true + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" }, "node_modules/debug": { "version": "4.3.4", @@ -7676,7 +7766,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -7882,12 +7971,20 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -7964,7 +8061,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "dependencies": { "once": "^1.4.0" } @@ -8016,7 +8112,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, "dependencies": { "ansi-colors": "^4.1.1" }, @@ -8684,8 +8779,7 @@ "node_modules/eventemitter2": { "version": "6.4.7", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==" }, "node_modules/eventemitter3": { "version": "4.0.7", @@ -8729,7 +8823,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, "dependencies": { "pify": "^2.2.0" }, @@ -8741,7 +8834,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -8874,7 +8966,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -8894,7 +8985,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, "dependencies": { "pump": "^3.0.0" }, @@ -8909,7 +8999,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, "engines": [ "node >=0.6.0" ] @@ -8954,6 +9043,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-text-encoding": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "dev": true + }, "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -8978,7 +9073,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, "dependencies": { "pend": "~1.2.0" } @@ -8987,7 +9081,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -9197,7 +9290,6 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, "engines": { "node": "*" } @@ -9349,6 +9441,34 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/gaxios": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "dev": true, + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/gcp-metadata": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "dev": true, + "dependencies": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -9408,7 +9528,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, "dependencies": { "async": "^3.2.0" } @@ -9417,7 +9536,6 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, "dependencies": { "assert-plus": "^1.0.0" } @@ -9465,7 +9583,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, "dependencies": { "ini": "2.0.0" }, @@ -9480,7 +9597,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, "engines": { "node": ">=10" } @@ -9512,6 +9628,107 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gmail-tester": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/gmail-tester/-/gmail-tester-1.3.8.tgz", + "integrity": "sha512-7k1zihQ611RXzzHjmfZjCUCdL8p1cv5iQCAJ9ZPKlOa8mWSPB0x1pu50ZlXJN4OfIA3lSA6iFfZ4Ybbxh8K+2w==", + "dev": true, + "dependencies": { + "googleapis": "^109.0.1", + "open": "^8.4.0", + "server-destroy": "^1.0.1" + } + }, + "node_modules/google-auth-library": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", + "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", + "dev": true, + "dependencies": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.3.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/google-auth-library/node_modules/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, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "dev": true, + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/googleapis": { + "version": "109.0.1", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-109.0.1.tgz", + "integrity": "sha512-x286OtNu0ngzxfGz2XgRs4aMhrwutRCkCE12dh2M1jIZOpOndB7ELFXEhmtxaJ7z3257flKIbiiCJZeBO+ze/Q==", + "dev": true, + "dependencies": { + "google-auth-library": "^8.0.2", + "googleapis-common": "^6.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/googleapis-common": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-6.0.4.tgz", + "integrity": "sha512-m4ErxGE8unR1z0VajT6AYk3s6a9gIMM6EkDZfkPnES8joeOlEtFEJeF8IyZkb0tjPXkktUfYrE4b3Li1DNyOwA==", + "dev": true, + "dependencies": { + "extend": "^3.0.2", + "gaxios": "^5.0.1", + "google-auth-library": "^8.0.2", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/googleapis-common/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -9526,8 +9743,7 @@ "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "node_modules/graphemer": { "version": "1.4.0", @@ -9535,15 +9751,29 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "node_modules/guess-parser": { - "version": "0.4.22", - "resolved": "https://registry.npmjs.org/guess-parser/-/guess-parser-0.4.22.tgz", - "integrity": "sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg==", + "node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", "dev": true, "dependencies": { - "@wessberg/ts-evaluator": "0.0.27" + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" }, - "peerDependencies": { + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/guess-parser": { + "version": "0.4.22", + "resolved": "https://registry.npmjs.org/guess-parser/-/guess-parser-0.4.22.tgz", + "integrity": "sha512-KcUWZ5ACGaBM69SbqwVIuWGoSAgD+9iJnchR9j/IarVI1jHVeXv+bUXBIMeqVMSKt3zrn0Dgf9UpcOEpPBLbSg==", + "dev": true, + "dependencies": { + "@wessberg/ts-evaluator": "0.0.27" + }, + "peerDependencies": { "typescript": ">=3.7.5" } }, @@ -9870,7 +10100,6 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", @@ -9939,7 +10168,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -10033,7 +10261,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, "engines": { "node": ">=8" } @@ -10211,7 +10438,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, "dependencies": { "ci-info": "^3.2.0" }, @@ -10250,7 +10476,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, "bin": { "is-docker": "cli.js" }, @@ -10292,7 +10517,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -10331,7 +10555,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -10386,7 +10609,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, "engines": { "node": ">=8" }, @@ -10397,14 +10619,12 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, "engines": { "node": ">=10" }, @@ -10422,7 +10642,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, "dependencies": { "is-docker": "^2.0.0" }, @@ -10451,8 +10670,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/isobject": { "version": "3.0.1", @@ -10466,8 +10684,7 @@ "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", @@ -10776,8 +10993,7 @@ "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "node_modules/jsdom": { "version": "16.7.0", @@ -10857,6 +11073,15 @@ "node": ">=4" } }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -10872,8 +11097,7 @@ "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "node_modules/json-schema-traverse": { "version": "1.0.0", @@ -10890,8 +11114,7 @@ "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "node_modules/json5": { "version": "2.2.3", @@ -10931,7 +11154,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, "engines": [ "node >=0.6.0" ], @@ -10959,6 +11181,27 @@ "jsrsasign": ">= 4.8.2" } }, + "node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dev": true, + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, "node_modules/karma": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", @@ -11223,7 +11466,6 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true, "engines": { "node": "> 0.8" } @@ -11361,7 +11603,6 @@ "version": "3.14.0", "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, "dependencies": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -11417,8 +11658,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -11435,14 +11675,12 @@ "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -11458,7 +11696,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -11473,7 +11710,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11489,7 +11725,6 @@ "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, "dependencies": { "color-name": "~1.1.4" }, @@ -11500,14 +11735,12 @@ "node_modules/log-symbols/node_modules/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/log-symbols/node_modules/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, "engines": { "node": ">=8" } @@ -11516,7 +11749,6 @@ "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, "dependencies": { "has-flag": "^4.0.0" }, @@ -11528,7 +11760,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, "dependencies": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -11546,7 +11777,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -11561,7 +11791,6 @@ "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, "dependencies": { "color-name": "~1.1.4" }, @@ -11572,14 +11801,12 @@ "node_modules/log-update/node_modules/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/log-update/node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -11596,7 +11823,6 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -11765,8 +11991,7 @@ "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "node_modules/merge2": { "version": "1.4.1", @@ -11813,7 +12038,6 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, "engines": { "node": ">= 0.6" } @@ -11822,7 +12046,6 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "dependencies": { "mime-db": "1.52.0" }, @@ -11834,7 +12057,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, "engines": { "node": ">=6" } @@ -11883,7 +12105,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12358,12 +12579,59 @@ "node-gyp-build": "^4.2.2" } }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, "node_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -12615,7 +12883,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, "dependencies": { "path-key": "^3.0.0" }, @@ -12977,7 +13244,6 @@ "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -13047,7 +13313,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -13056,7 +13321,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -13206,8 +13470,15 @@ "node_modules/ospath": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==" + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "engines": { + "node": ">=4" + } }, "node_modules/p-limit": { "version": "2.3.0", @@ -13240,7 +13511,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, "dependencies": { "aggregate-error": "^3.0.0" }, @@ -13451,7 +13721,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -13505,14 +13774,12 @@ "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "node_modules/picocolors": { "version": "1.0.0", @@ -13795,7 +14062,6 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true, "engines": { "node": ">=6" }, @@ -13816,7 +14082,6 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, "engines": { "node": ">= 0.6.0" } @@ -13884,14 +14149,12 @@ "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -13901,7 +14164,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, "engines": { "node": ">=6" } @@ -13933,8 +14195,7 @@ "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -14206,7 +14467,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, "dependencies": { "throttleit": "^1.0.0" } @@ -14231,8 +14491,7 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "node_modules/resolve": { "version": "1.22.2", @@ -14303,7 +14562,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -14333,8 +14591,7 @@ "node_modules/rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "node_modules/rimraf": { "version": "3.0.2", @@ -14452,7 +14709,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -14471,8 +14727,7 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/safevalues": { "version": "0.3.4", @@ -14772,6 +15027,12 @@ "node": ">= 0.8.0" } }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -14831,7 +15092,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -14843,7 +15103,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -14861,7 +15120,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -14874,8 +15132,7 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/sigstore": { "version": "1.9.0", @@ -14912,7 +15169,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -14926,7 +15182,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -14941,7 +15196,6 @@ "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, "dependencies": { "color-name": "~1.1.4" }, @@ -14952,8 +15206,7 @@ "node_modules/slice-ansi/node_modules/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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/smart-buffer": { "version": "4.2.0", @@ -15186,7 +15439,6 @@ "version": "1.18.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dev": true, "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -15321,11 +15573,18 @@ "node": ">=4" } }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, "engines": { "node": ">=6" } @@ -15630,7 +15889,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", - "dev": true, "funding": { "url": "https://github.com/sponsors/sindresorhus" } @@ -15638,8 +15896,7 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/thunky": { "version": "1.1.0", @@ -15691,7 +15948,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -15706,7 +15962,6 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, "engines": { "node": ">= 4.0.0" } @@ -15790,7 +16045,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, "dependencies": { "safe-buffer": "^5.0.1" }, @@ -15801,8 +16055,7 @@ "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, "node_modules/type-check": { "version": "0.4.0", @@ -15820,7 +16073,6 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, "engines": { "node": ">=10" }, @@ -15973,7 +16225,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, "engines": { "node": ">=8" } @@ -16020,12 +16271,17 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, + "node_modules/url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", + "dev": true + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -16045,7 +16301,6 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, "bin": { "uuid": "dist/bin/uuid" } @@ -16091,7 +16346,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, "engines": [ "node >=0.6.0" ], @@ -16104,8 +16358,7 @@ "node_modules/verror/node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, "node_modules/vite": { "version": "4.5.2", @@ -16559,7 +16812,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -16682,8 +16934,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { "version": "8.11.0", @@ -16782,7 +17033,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -18592,13 +18842,12 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true + "devOptional": true }, "@cypress/request": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.1.tgz", "integrity": "sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==", - "dev": true, "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -18624,7 +18873,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", @@ -18635,7 +18883,6 @@ "version": "6.10.4", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.4.tgz", "integrity": "sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==", - "dev": true, "requires": { "side-channel": "^1.0.4" } @@ -18646,7 +18893,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", - "dev": true, "requires": { "debug": "^3.1.0", "lodash.once": "^4.1.1" @@ -18656,7 +18902,6 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, "requires": { "ms": "^2.1.1" } @@ -20405,7 +20650,7 @@ "version": "18.11.9", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "dev": true + "devOptional": true }, "@types/qs": { "version": "6.9.8", @@ -20473,14 +20718,12 @@ "@types/sinonjs__fake-timers": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", - "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", - "dev": true + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==" }, "@types/sizzle": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", - "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==", - "dev": true + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==" }, "@types/sockjs": { "version": "0.3.34", @@ -20504,7 +20747,6 @@ "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, "optional": true, "requires": { "@types/node": "*" @@ -21009,7 +21251,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, "requires": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -21048,14 +21289,12 @@ "ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "requires": { "type-fest": "^0.21.3" } @@ -21097,8 +21336,7 @@ "arch": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==" }, "are-we-there-yet": { "version": "3.0.1", @@ -21140,11 +21378,16 @@ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true }, + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true + }, "asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, "requires": { "safer-buffer": "~2.1.0" } @@ -21152,32 +21395,27 @@ "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==" }, "astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" }, "async": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" }, "autoprefixer": { "version": "10.4.14", @@ -21196,14 +21434,12 @@ "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==" }, "aws4": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "axios": { "version": "1.6.3", @@ -21308,8 +21544,7 @@ "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "base64id": { "version": "2.0.0", @@ -21327,7 +21562,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, "requires": { "tweetnacl": "^0.14.3" } @@ -21338,6 +21572,12 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, + "bignumber.js": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz", + "integrity": "sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==", + "dev": true + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -21357,14 +21597,12 @@ "blob-util": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", - "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", - "dev": true + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==" }, "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "body-parser": { "version": "1.20.2", @@ -21465,7 +21703,6 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, "requires": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -21474,7 +21711,12 @@ "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", "dev": true }, "buffer-from": { @@ -21535,8 +21777,7 @@ "cachedir": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", - "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", - "dev": true + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==" }, "call-bind": { "version": "1.0.7", @@ -21570,8 +21811,7 @@ "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" }, "chalk": { "version": "2.4.2", @@ -21592,8 +21832,7 @@ "check-more-types": { "version": "2.24.0", "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", - "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", - "dev": true + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==" }, "chokidar": { "version": "3.5.3", @@ -21625,20 +21864,17 @@ "ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==" }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, "requires": { "restore-cursor": "^3.1.0" } @@ -21653,7 +21889,6 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", - "dev": true, "requires": { "@colors/colors": "1.5.0", "string-width": "^4.2.0" @@ -21663,7 +21898,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, "requires": { "slice-ansi": "^3.0.0", "string-width": "^4.2.0" @@ -21675,6 +21909,88 @@ "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true }, + "clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "requires": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "requires": { + "path-key": "^2.0.0" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" + } + } + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -21725,14 +22041,12 @@ "colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==" }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -21752,8 +22066,7 @@ "common-tags": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", - "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==" }, "compressible": { "version": "2.0.18", @@ -22045,7 +22358,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -22056,7 +22368,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -22137,7 +22448,6 @@ "version": "13.9.0", "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.9.0.tgz", "integrity": "sha512-atNjmYfHsvTuCaxTxLZr9xGoHz53LLui3266WWxXJHY7+N6OdwJdg/feEa3T+buez9dmUXHT1izCOklqG82uCQ==", - "dev": true, "requires": { "@cypress/request": "^3.0.0", "@cypress/xvfb": "^1.2.4", @@ -22187,7 +22497,6 @@ "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" } @@ -22196,7 +22505,6 @@ "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", "supports-color": "^7.1.0" @@ -22206,7 +22514,6 @@ "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" } @@ -22217,7 +22524,6 @@ "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" } @@ -22225,20 +22531,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" }, "execa": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dev": true, "requires": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -22255,7 +22558,6 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -22267,7 +22569,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, "requires": { "pump": "^3.0.0" } @@ -22275,20 +22576,17 @@ "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "dev": true + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -22297,14 +22595,12 @@ "proxy-from-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", - "dev": true + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==" }, "supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -22312,22 +22608,25 @@ "tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", - "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", - "dev": true + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==" }, "universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" } } }, + "cypress-file-upload": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/cypress-file-upload/-/cypress-file-upload-5.0.8.tgz", + "integrity": "sha512-+8VzNabRk3zG6x8f8BWArF/xA/W0VK4IZNx3MV0jFWrJS/qKn8eHfa5nU73P9fOQAgwHFJx7zjg4lwOnljMO8g==", + "requires": {} + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -22352,8 +22651,7 @@ "dayjs": { "version": "1.11.11", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.11.tgz", - "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==", - "dev": true + "integrity": "sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==" }, "debug": { "version": "4.3.4", @@ -22437,8 +22735,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, "delegates": { "version": "1.0.0", @@ -22597,12 +22894,20 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, "requires": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -22666,7 +22971,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -22709,7 +23013,6 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, "requires": { "ansi-colors": "^4.1.1" } @@ -23187,8 +23490,7 @@ "eventemitter2": { "version": "6.4.7", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", - "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", - "dev": true + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==" }, "eventemitter3": { "version": "4.0.7", @@ -23223,7 +23525,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", - "dev": true, "requires": { "pify": "^2.2.0" }, @@ -23231,8 +23532,7 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" } } }, @@ -23351,7 +23651,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, "requires": { "@types/yauzl": "^2.9.1", "debug": "^4.1.1", @@ -23363,7 +23662,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, "requires": { "pump": "^3.0.0" } @@ -23373,8 +23671,7 @@ "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==" }, "fast-deep-equal": { "version": "3.1.3", @@ -23413,6 +23710,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-text-encoding": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "dev": true + }, "fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", @@ -23434,7 +23737,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, "requires": { "pend": "~1.2.0" } @@ -23443,7 +23745,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } @@ -23596,8 +23897,7 @@ "forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==" }, "form-data": { "version": "3.0.1", @@ -23707,6 +24007,28 @@ "wide-align": "^1.1.5" } }, + "gaxios": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", + "integrity": "sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==", + "dev": true, + "requires": { + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + } + }, + "gcp-metadata": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.3.0.tgz", + "integrity": "sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==", + "dev": true, + "requires": { + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -23745,7 +24067,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "dev": true, "requires": { "async": "^3.2.0" } @@ -23754,7 +24075,6 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, "requires": { "assert-plus": "^1.0.0" } @@ -23790,7 +24110,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dev": true, "requires": { "ini": "2.0.0" }, @@ -23798,8 +24117,7 @@ "ini": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" } } }, @@ -23821,6 +24139,86 @@ "slash": "^4.0.0" } }, + "gmail-tester": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/gmail-tester/-/gmail-tester-1.3.8.tgz", + "integrity": "sha512-7k1zihQ611RXzzHjmfZjCUCdL8p1cv5iQCAJ9ZPKlOa8mWSPB0x1pu50ZlXJN4OfIA3lSA6iFfZ4Ybbxh8K+2w==", + "dev": true, + "requires": { + "googleapis": "^109.0.1", + "open": "^8.4.0", + "server-destroy": "^1.0.1" + } + }, + "google-auth-library": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.9.0.tgz", + "integrity": "sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg==", + "dev": true, + "requires": { + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.3.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" + }, + "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" + } + } + } + }, + "google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "dev": true, + "requires": { + "node-forge": "^1.3.1" + } + }, + "googleapis": { + "version": "109.0.1", + "resolved": "https://registry.npmjs.org/googleapis/-/googleapis-109.0.1.tgz", + "integrity": "sha512-x286OtNu0ngzxfGz2XgRs4aMhrwutRCkCE12dh2M1jIZOpOndB7ELFXEhmtxaJ7z3257flKIbiiCJZeBO+ze/Q==", + "dev": true, + "requires": { + "google-auth-library": "^8.0.2", + "googleapis-common": "^6.0.0" + } + }, + "googleapis-common": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-6.0.4.tgz", + "integrity": "sha512-m4ErxGE8unR1z0VajT6AYk3s6a9gIMM6EkDZfkPnES8joeOlEtFEJeF8IyZkb0tjPXkktUfYrE4b3Li1DNyOwA==", + "dev": true, + "requires": { + "extend": "^3.0.2", + "gaxios": "^5.0.1", + "google-auth-library": "^8.0.2", + "qs": "^6.7.0", + "url-template": "^2.0.8", + "uuid": "^9.0.0" + }, + "dependencies": { + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true + } + } + }, "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -23832,8 +24230,7 @@ "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "graphemer": { "version": "1.4.0", @@ -23841,6 +24238,17 @@ "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, + "gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "dev": true, + "requires": { + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + } + }, "guess-parser": { "version": "0.4.22", "resolved": "https://registry.npmjs.org/guess-parser/-/guess-parser-0.4.22.tgz", @@ -24100,7 +24508,6 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.3.6.tgz", "integrity": "sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==", - "dev": true, "requires": { "assert-plus": "^1.0.0", "jsprim": "^2.0.2", @@ -24151,8 +24558,7 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { "version": "5.2.4", @@ -24209,8 +24615,7 @@ "indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "inflight": { "version": "1.0.6", @@ -24348,7 +24753,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, "requires": { "ci-info": "^3.2.0" } @@ -24374,8 +24778,7 @@ "is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" }, "is-extglob": { "version": "2.1.1", @@ -24399,7 +24802,6 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, "requires": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -24425,8 +24827,7 @@ "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, "is-plain-obj": { "version": "3.0.0", @@ -24462,20 +24863,17 @@ "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, "is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==" }, "is-what": { "version": "3.14.1", @@ -24487,7 +24885,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, "requires": { "is-docker": "^2.0.0" } @@ -24507,8 +24904,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { "version": "3.0.1", @@ -24519,8 +24915,7 @@ "isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "istanbul-lib-coverage": { "version": "3.2.0", @@ -24756,8 +25151,7 @@ "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "jsdom": { "version": "16.7.0", @@ -24808,6 +25202,15 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, + "json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "dev": true, + "requires": { + "bignumber.js": "^9.0.0" + } + }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -24823,8 +25226,7 @@ "json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "json-schema-traverse": { "version": "1.0.0", @@ -24841,8 +25243,7 @@ "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, "json5": { "version": "2.2.3", @@ -24873,7 +25274,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", - "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", @@ -24895,6 +25295,27 @@ "jsrsasign": ">= 4.8.2" } }, + "jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "dev": true, + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dev": true, + "requires": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, "karma": { "version": "6.4.1", "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.1.tgz", @@ -25110,8 +25531,7 @@ "lazy-ass": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", - "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", - "dev": true + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==" }, "less": { "version": "4.1.3", @@ -25203,7 +25623,6 @@ "version": "3.14.0", "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", - "dev": true, "requires": { "cli-truncate": "^2.1.0", "colorette": "^2.0.16", @@ -25239,8 +25658,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.debounce": { "version": "4.0.8", @@ -25257,14 +25675,12 @@ "lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, "log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, "requires": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -25274,7 +25690,6 @@ "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" } @@ -25283,7 +25698,6 @@ "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", "supports-color": "^7.1.0" @@ -25293,7 +25707,6 @@ "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" } @@ -25301,20 +25714,17 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "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 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "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" } @@ -25325,7 +25735,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", - "dev": true, "requires": { "ansi-escapes": "^4.3.0", "cli-cursor": "^3.1.0", @@ -25337,7 +25746,6 @@ "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" } @@ -25346,7 +25754,6 @@ "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" } @@ -25354,14 +25761,12 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -25372,7 +25777,6 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -25515,8 +25919,7 @@ "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { "version": "1.4.1", @@ -25547,14 +25950,12 @@ "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, "requires": { "mime-db": "1.52.0" } @@ -25562,8 +25963,7 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mini-css-extract-plugin": { "version": "2.7.6", @@ -25592,8 +25992,7 @@ "minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "minipass": { "version": "5.0.0", @@ -25943,12 +26342,50 @@ "node-gyp-build": "^4.2.2" } }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, "node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "dev": true }, + "node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, "node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", @@ -26137,7 +26574,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, "requires": { "path-key": "^3.0.0" } @@ -26408,8 +26844,7 @@ "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" }, "object-is": { "version": "1.1.6", @@ -26458,7 +26893,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "requires": { "wrappy": "1" } @@ -26467,7 +26901,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -26574,8 +27007,12 @@ "ospath": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", - "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", - "dev": true + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==" }, "p-limit": { "version": "2.3.0", @@ -26599,7 +27036,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, "requires": { "aggregate-error": "^3.0.0" } @@ -26761,8 +27197,7 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", @@ -26803,14 +27238,12 @@ "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, "picocolors": { "version": "1.0.0", @@ -26984,8 +27417,7 @@ "pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", - "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" }, "proc-log": { "version": "3.0.0", @@ -26996,8 +27428,7 @@ "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" }, "process-nextick-args": { "version": "2.0.1", @@ -27055,14 +27486,12 @@ "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -27071,8 +27500,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "qjobs": { "version": "1.2.0", @@ -27092,8 +27520,7 @@ "querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "queue-microtask": { "version": "1.2.3", @@ -27311,7 +27738,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, "requires": { "throttleit": "^1.0.0" } @@ -27330,8 +27756,7 @@ "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, "resolve": { "version": "1.22.2", @@ -27386,7 +27811,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -27406,8 +27830,7 @@ "rfdc": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==" }, "rimraf": { "version": "3.0.2", @@ -27487,14 +27910,12 @@ "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "safevalues": { "version": "0.3.4", @@ -27722,6 +28143,12 @@ "send": "0.18.0" } }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -27772,7 +28199,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -27780,8 +28206,7 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "shell-quote": { "version": "1.8.1", @@ -27793,7 +28218,6 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -27803,8 +28227,7 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sigstore": { "version": "1.9.0", @@ -27829,7 +28252,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -27840,7 +28262,6 @@ "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" } @@ -27849,7 +28270,6 @@ "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" } @@ -27857,8 +28277,7 @@ "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 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" } } }, @@ -28055,7 +28474,6 @@ "version": "1.18.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", - "dev": true, "requires": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -28155,11 +28573,15 @@ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==" + }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, "strip-json-comments": { "version": "3.1.1", @@ -28377,14 +28799,12 @@ "throttleit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", - "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", - "dev": true + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==" }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "thunky": { "version": "1.1.0", @@ -28424,7 +28844,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -28435,8 +28854,7 @@ "universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" } } }, @@ -28503,7 +28921,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, "requires": { "safe-buffer": "^5.0.1" } @@ -28511,8 +28928,7 @@ "tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, "type-check": { "version": "0.4.0", @@ -28526,8 +28942,7 @@ "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" }, "type-is": { "version": "1.6.18", @@ -28622,8 +29037,7 @@ "untildify": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==" }, "update-browserslist-db": { "version": "1.0.13", @@ -28647,12 +29061,17 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, "requires": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, + "url-template": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz", + "integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==", + "dev": true + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -28668,8 +29087,7 @@ "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "v8-compile-cache": { "version": "2.3.0", @@ -28706,7 +29124,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, "requires": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", @@ -28716,8 +29133,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" } } }, @@ -29006,7 +29422,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -29099,8 +29514,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { "version": "8.11.0", @@ -29175,7 +29589,6 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, "requires": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" diff --git a/ui/package.json b/ui/package.json index ed13040ce..2ccd871a0 100644 --- a/ui/package.json +++ b/ui/package.json @@ -28,6 +28,8 @@ "@fortawesome/free-solid-svg-icons": "^6.4.2", "@ng-bootstrap/ng-bootstrap": "^15.1.1", "bootstrap": "^5.3.2", + "clipboardy": "^2.3.0", + "cypress-file-upload": "^5.0.8", "jsrsasign": "^11.1.0", "jsrsasign-util": "^1.0.5", "moment": "^2.29.4", @@ -55,6 +57,7 @@ "@typescript-eslint/parser": "5.62.0", "cypress": "^13.9.0", "eslint": "^8.49.0", + "gmail-tester": "^1.3.8", "jasmine-core": "~4.3.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.1.0", diff --git a/ui/src/app/home/home.component.html b/ui/src/app/home/home.component.html index 3541e3439..f2ac1d9a3 100644 --- a/ui/src/app/home/home.component.html +++ b/ui/src/app/home/home.component.html @@ -1,5 +1,5 @@
-
{{ loggedInMessage }}
+
{{ loggedInMessage }}
From 4630cadd8b5cbe6006adf60f054b16682e9bae53 Mon Sep 17 00:00:00 2001 From: andrej romanov <50377758+auumgn@users.noreply.github.com> Date: Mon, 13 May 2024 15:13:14 +0300 Subject: [PATCH 5/7] tweak pagination test --- ui/cypress/e2e/retention/ui-pagination.cy.js | 67 +++++++++++--------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/ui/cypress/e2e/retention/ui-pagination.cy.js b/ui/cypress/e2e/retention/ui-pagination.cy.js index 625729118..5a7c73bbe 100644 --- a/ui/cypress/e2e/retention/ui-pagination.cy.js +++ b/ui/cypress/e2e/retention/ui-pagination.cy.js @@ -1,51 +1,58 @@ /// -import data from '../../fixtures/test-data.json'; -import credentials from '../../fixtures/credentials.json'; +import data from "../../fixtures/test-data.json"; +import credentials from "../../fixtures/credentials.json"; -describe('Test pagination', () => { +describe("Test pagination", () => { beforeEach(() => { - cy.programmaticSignin(data.paginationMember.users.owner.email, credentials.password); - }) + cy.programmaticSignin( + data.paginationMember.users.owner.email, + credentials.password, + ); + }); afterEach(() => { cy.programmaticSignout(); - }) + }); - it('Test the "Manage users" page', function() { - cy.visit('/user'); + it('Test the "Manage users" page', function () { + cy.visit("ui/en/users"); /* cy.get('.container-fluid').within(() => { cy.get('p') .contains('Showing 1 - 20 of 22 items') })*/ - cy.get('tbody').children().should('have.length', 20); - cy.get('.pagination').contains("1"); - cy.get('.pagination').contains("3").should('not.exist'); - cy.get('.pagination').contains("2").click(); - cy.get('tbody').children().should('have.length', 2); - cy.get('tbody').within(() => { - cy.get('td').contains(data.paginationMember.assertionEmail1).should('not.exist'); - cy.get('td').contains(data.paginationMember.assertionEmail2); - cy.get('td').contains(data.paginationMember.assertionEmail3); - }) + cy.get("tbody").children().should("have.length", 20); + cy.get(".pagination").contains("1"); + cy.get(".pagination").contains("3").should("not.exist"); + cy.get(".pagination").contains("2").click(); + cy.get("tbody").children().should("have.length", 2); + cy.get("tbody").within(() => { + cy.get("td") + .contains(data.paginationMember.assertionEmail1) + .should("not.exist"); + cy.get("td").contains(data.paginationMember.assertionEmail2); + cy.get("td").contains(data.paginationMember.assertionEmail3); + }); }); - it('Test the "Affiliations" page', function() { - cy.visit('/assertion'); + it('Test the "Affiliations" page', function () { + cy.visit("ui/en/affiliations"); /* cy.get('.container-fluid').within(() => { cy.get('p') .contains('Showing 1 - 20 of 22 items') })*/ - cy.get('tbody').children().should('have.length', 20); - cy.get('.pagination').contains("1"); - cy.get('.pagination').contains("2"); - cy.get('.pagination').contains("4").should('not.exist'); - cy.get('.pagination').contains("3").click(); - cy.get('tbody').children().should('have.length', 2); - cy.get('tbody').within(() => { - cy.get('td').contains(data.paginationMember.assertionData1).should('not.exist'); - cy.get('td').contains(data.paginationMember.assertionData2); - }) + cy.get("tbody").children().should("have.length", 20); + cy.get(".pagination").contains("1"); + cy.get(".pagination").contains("2"); + cy.get(".pagination").contains("4").should("not.exist"); + cy.get(".pagination").contains("3").click(); + cy.get("tbody").children().should("have.length", 2); + cy.get("tbody").within(() => { + cy.get("td") + .contains(data.paginationMember.assertionData1) + .should("not.exist"); + cy.get("td").contains(data.paginationMember.assertionData2); + }); }); }); From 6f5b43c3c7cdddf0fdbb1bc5fe3ee4c6e54f77b1 Mon Sep 17 00:00:00 2001 From: andrej romanov <50377758+auumgn@users.noreply.github.com> Date: Mon, 13 May 2024 16:22:15 +0300 Subject: [PATCH 6/7] tweak login test --- ui/cypress/e2e/retention/ui-login.cy.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/cypress/e2e/retention/ui-login.cy.js b/ui/cypress/e2e/retention/ui-login.cy.js index 10cbd2a3c..56175b2ed 100644 --- a/ui/cypress/e2e/retention/ui-login.cy.js +++ b/ui/cypress/e2e/retention/ui-login.cy.js @@ -4,7 +4,7 @@ import credentials from "../../fixtures/credentials.json"; describe("Test sign in form", () => { it("Sign in", function () { - cy.visit(`/`); + cy.visit(`ui/en/`); cy.get("#username").clear().type(data.member.users.owner.email); cy.get("#password").type(credentials.password); cy.get("button").filter('[type="submit"]').click(); From 0e4fbc2af224a44bfc839904a168d615b264d9ad Mon Sep 17 00:00:00 2001 From: andrej romanov <50377758+auumgn@users.noreply.github.com> Date: Mon, 13 May 2024 16:53:47 +0300 Subject: [PATCH 7/7] partial homepage fix --- ui/cypress/e2e/retention/ui-homepage.cy.js | 33 +++++++++------------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/ui/cypress/e2e/retention/ui-homepage.cy.js b/ui/cypress/e2e/retention/ui-homepage.cy.js index e629c277c..1abc04e97 100644 --- a/ui/cypress/e2e/retention/ui-homepage.cy.js +++ b/ui/cypress/e2e/retention/ui-homepage.cy.js @@ -8,15 +8,15 @@ describe("Test homepage", () => { data.homepageTestMembers.directMemberEmail, credentials.password, ); - cy.visit("/"); + cy.visit("ui/en/"); cy.get("app-member-info", { timeout: 20000 }); - cy.get("app-generic-landing").should("not.exist"); cy.get(".side-bar").contains("Public details"); cy.get(".side-bar").contains("Website"); cy.get(".side-bar").contains("Email"); cy.get(".side-bar").contains("https://orcid.org"); cy.get(".side-bar").contains("orcid@orcid.org"); - cy.get(".main-section").contains("Membership: Active"); + cy.get(".main-section").first().contains("Membership:"); + cy.get(".main-section").first().contains("Active"); cy.get(".main-section").contains("Fly and Mighty"); cy.get(".main-section").contains("Contacts"); cy.get(".main-section").contains("Main relationship contact (OFFICIAL)"); @@ -28,19 +28,18 @@ describe("Test homepage", () => { data.homepageTestMembers.consortiumLeadEmail, credentials.password, ); - cy.visit("/"); + cy.visit("ui/en/"); cy.get("app-member-info", { timeout: 20000 }); - cy.get("app-generic-landing").should("not.exist"); cy.get(".side-bar").contains("Public details"); cy.get(".side-bar").contains("Website"); cy.get(".side-bar").contains("Email"); - cy.get(".side-bar").contains("No website added"); - cy.get(".side-bar").contains("No email added"); + cy.get(".side-bar").contains("https://www.testtest1.com"); + cy.get(".side-bar").contains("mambono5@mailinator.com"); cy.get(".main-section").contains("Consortium lead"); - cy.get(".main-section").contains("Mambo No 5"); - cy.get(".main-section").contains("Consortium Members (4)"); + cy.get(".main-section").contains("Mambo no 5"); + cy.get(".main-section").contains("Consortium Members (2)"); cy.get(".main-section").contains("Member name"); - cy.get(".main-section").contains("Almonds Forest"); + cy.get(".main-section").contains("A Public Hot Metro"); cy.get(".main-section").contains("Contacts"); cy.get(".main-section").contains("Main relationship contact (OFFICIAL)"); cy.get(".main-section").contains("first.last@orcid.org"); @@ -51,9 +50,8 @@ describe("Test homepage", () => { data.homepageTestMembers.consortiumMember.email, credentials.password, ); - cy.visit("/"); + cy.visit("ui/en/"); cy.get("app-member-info", { timeout: 20000 }); - cy.get("app-generic-landing").should("not.exist"); cy.get(".side-bar").contains("Public details"); cy.get(".side-bar").contains("Website"); cy.get(".side-bar").contains("Email"); @@ -75,9 +73,8 @@ describe("Test homepage", () => { data.homepageTestMembers.consortiumMemberEmail2, credentials.password, ); - cy.visit("/"); + cy.visit("ui/en/"); cy.get("app-member-info", { timeout: 20000 }); - cy.get("app-generic-landing").should("not.exist"); cy.get(".side-bar").contains("Public details"); cy.get(".side-bar").contains("Website"); cy.get(".side-bar").contains("Email"); @@ -95,9 +92,8 @@ describe("Test homepage", () => { data.homepageTestMembers.consortiumLeadAndMember.email, credentials.password, ); - cy.visit("/"); + cy.visit("ui/en/"); cy.get("app-member-info", { timeout: 20000 }); - cy.get("app-generic-landing").should("not.exist"); cy.get(".side-bar").contains("Public details"); cy.get(".side-bar").contains("Website"); cy.get(".side-bar").contains("Email"); @@ -118,10 +114,9 @@ describe("Test homepage", () => { data.homepageTestMembers.inactiveConsortiumMemberEmail, credentials.password, ); - cy.visit("/"); - cy.get("app-generic-landing", { timeout: 20000 }).contains( + cy.visit("ui/en/"); + cy.get("app-member-info", { timeout: 20000 }).contains( "Something has gone wrong...", ); - cy.get("app-member-info").should("not.exist"); }); });