diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml index 6796658f6..4100347d6 100644 --- a/.github/workflows/e2e.yml +++ b/.github/workflows/e2e.yml @@ -50,7 +50,6 @@ jobs: with: working-directory: e2e browser: ${{ matrix.browser }} - command: npm run e2e config-file: cypress.config.ts - uses: actions/upload-artifact@v4 diff --git a/console/src/app/modules/policies/notification-sms-provider/notification-sms-provider.component.html b/console/src/app/modules/policies/notification-sms-provider/notification-sms-provider.component.html index b8a46bb34..228b343a7 100644 --- a/console/src/app/modules/policies/notification-sms-provider/notification-sms-provider.component.html +++ b/console/src/app/modules/policies/notification-sms-provider/notification-sms-provider.component.html @@ -5,7 +5,7 @@ -
+

Twilio

diff --git a/console/src/app/modules/settings-list/settings-list.component.html b/console/src/app/modules/settings-list/settings-list.component.html index f60427a30..0392a0384 100644 --- a/console/src/app/modules/settings-list/settings-list.component.html +++ b/console/src/app/modules/settings-list/settings-list.component.html @@ -1,4 +1,5 @@ l.id === changes['selectedId'].currentValue) ? changes['selectedId'].currentValue : ''; - } else { + } + } + + ngOnInit(): void { + if (!this.currentSetting) { this.currentSetting = this.settingsList ? this.settingsList[0].id : ''; } } diff --git a/console/src/app/modules/sidenav/sidenav.component.html b/console/src/app/modules/sidenav/sidenav.component.html index 9f37a2805..d12a3e1c2 100644 --- a/console/src/app/modules/sidenav/sidenav.component.html +++ b/console/src/app/modules/sidenav/sidenav.component.html @@ -5,8 +5,8 @@

{{ description }}

diff --git a/console/src/app/modules/sidenav/sidenav.component.ts b/console/src/app/modules/sidenav/sidenav.component.ts index b5d072e5f..dc7948a25 100644 --- a/console/src/app/modules/sidenav/sidenav.component.ts +++ b/console/src/app/modules/sidenav/sidenav.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, OnInit } from '@angular/core'; +import { Component, forwardRef, Input, OnInit } from '@angular/core'; import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms'; import { ActivatedRoute, Router } from '@angular/router'; @@ -19,9 +19,9 @@ export interface SidenavSetting { selector: 'cnsl-sidenav', templateUrl: './sidenav.component.html', styleUrls: ['./sidenav.component.scss'], - providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: SidenavComponent, multi: true }], + providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => SidenavComponent), multi: true }], }) -export class SidenavComponent implements ControlValueAccessor, OnInit { +export class SidenavComponent implements ControlValueAccessor { @Input() public title: string = ''; @Input() public description: string = ''; @Input() public indented: boolean = false; @@ -35,12 +35,6 @@ export class SidenavComponent implements ControlValueAccessor, OnInit { private route: ActivatedRoute, ) {} - ngOnInit(): void { - if (!this.value) { - this.value = this.settingsList[0].id; - } - } - private onChange = (current: string | undefined) => {}; private onTouch = (current: string | undefined) => {}; @@ -51,7 +45,7 @@ export class SidenavComponent implements ControlValueAccessor, OnInit { set value(setting: string | undefined) { this.currentSetting = setting; - if (setting || setting === undefined) { + if (setting || setting === undefined || setting === '') { this.onChange(setting); this.onTouch(setting); } diff --git a/console/src/app/pages/projects/owned-projects/owned-project-detail/owned-project-detail.component.ts b/console/src/app/pages/projects/owned-projects/owned-project-detail/owned-project-detail.component.ts index fa0081bad..021b0dc2b 100644 --- a/console/src/app/pages/projects/owned-projects/owned-project-detail/owned-project-detail.component.ts +++ b/console/src/app/pages/projects/owned-projects/owned-project-detail/owned-project-detail.component.ts @@ -61,7 +61,7 @@ export class OwnedProjectDetailComponent implements OnInit { public refreshChanges$: EventEmitter = new EventEmitter(); public settingsList: SidenavSetting[] = [GENERAL, ROLES, PROJECTGRANTS, GRANTS]; - public currentSetting: string | undefined = ''; + public currentSetting: string = ''; constructor( public translate: TranslateService, private route: ActivatedRoute, @@ -72,12 +72,11 @@ export class OwnedProjectDetailComponent implements OnInit { private router: Router, private breadcrumbService: BreadcrumbService, ) { + this.currentSetting = 'general'; route.queryParams.pipe(take(1)).subscribe((params: Params) => { const { id } = params; if (id) { this.currentSetting = id; - } else { - this.currentSetting = 'general'; } }); } diff --git a/e2e/cypress.config.ts b/e2e/cypress.config.ts index 1e3f8e5ba..16d017c87 100644 --- a/e2e/cypress.config.ts +++ b/e2e/cypress.config.ts @@ -61,6 +61,7 @@ export default defineConfig({ baseUrl: baseUrl(), experimentalRunAllSpecs: true, experimentalOriginDependencies: true, + pageLoadTimeout: 180000, setupNodeEvents(on, config) { startWebhookEventHandler() diff --git a/e2e/cypress/e2e/applications/applications.cy.ts b/e2e/cypress/e2e/applications/applications.cy.ts index ec5932165..3546fe3e6 100644 --- a/e2e/cypress/e2e/applications/applications.cy.ts +++ b/e2e/cypress/e2e/applications/applications.cy.ts @@ -26,13 +26,16 @@ describe('applications', () => { it('add web pkce app', () => { cy.get('[data-e2e="app-card-add"]').should('be.visible').click(); - cy.get('[formcontrolname="name"]').focus().type(testPKCEAppName); + cy.get('[formcontrolname="name"]').focus().should('be.enabled').type(testPKCEAppName); cy.get('[for="WEB"]').click(); cy.get('[data-e2e="continue-button-nameandtype"]').click(); cy.get('[for="PKCE"]').should('be.visible').click(); cy.get('[data-e2e="continue-button-authmethod"]').click(); - cy.get('[data-e2e="redirect-uris"] input').focus().type('http://localhost:3000/api/auth/callback/zitadel'); - cy.get('[data-e2e="postlogout-uris"] input').focus().type('http://localhost:3000'); + cy.get('[data-e2e="redirect-uris"] input') + .focus() + .should('be.enabled') + .type('http://localhost:3000/api/auth/callback/zitadel'); + cy.get('[data-e2e="postlogout-uris"] input').focus().should('be.enabled').type('http://localhost:3000'); cy.get('[data-e2e="continue-button-redirecturis"]').click(); cy.get('[data-e2e="create-button"]').click(); cy.get('[id*=overlay]').should('exist'); @@ -56,7 +59,7 @@ describe('applications', () => { it('add device code app', () => { cy.get('[data-e2e="app-card-add"]').should('be.visible').click(); - cy.get('[formcontrolname="name"]').focus().type(testDEVICECODEAppName); + cy.get('[formcontrolname="name"]').focus().should('be.enabled').type(testDEVICECODEAppName); cy.get('[for="N"]').click(); cy.get('[data-e2e="continue-button-nameandtype"]').click(); cy.get('[for="DEVICECODE"]').should('be.visible').click(); diff --git a/e2e/cypress/e2e/humans/humans.cy.ts b/e2e/cypress/e2e/humans/humans.cy.ts index d59dace0e..a018db60c 100644 --- a/e2e/cypress/e2e/humans/humans.cy.ts +++ b/e2e/cypress/e2e/humans/humans.cy.ts @@ -28,14 +28,14 @@ describe('humans', () => { it('should add a user', () => { cy.get('[data-e2e="create-user-button"]').should('be.visible').click(); cy.url().should('contain', 'users/create'); - cy.get('[formcontrolname="email"]').type('dummy@dummy.com'); + cy.get('[formcontrolname="email"]').should('be.enabled').type('dummy@dummy.com'); //force needed due to the prefilled username prefix - cy.get('[formcontrolname="userName"]').type(user.addName); - cy.get('[formcontrolname="firstName"]').type('e2ehumanfirstname'); - cy.get('[formcontrolname="lastName"]').type('e2ehumanlastname'); + cy.get('[formcontrolname="userName"]').should('be.enabled').type(user.addName); + cy.get('[formcontrolname="firstName"]').should('be.enabled').type('e2ehumanfirstname'); + cy.get('[formcontrolname="lastName"]').should('be.enabled').type('e2ehumanlastname'); cy.get('mat-select[data-cy="country-calling-code"]').click(); cy.contains('mat-option', 'Switzerland').scrollIntoView().click(); - cy.get('[formcontrolname="phone"]').type('123456789'); + cy.get('[formcontrolname="phone"]').should('be.enabled').type('123456789'); cy.get('[data-e2e="create-button"]').click({ force: true }); cy.shouldConfirmSuccess(); let loginName = user.addName; @@ -58,7 +58,7 @@ describe('humans', () => { it('should delete a human user', () => { const rowSelector = `tr:contains(${user.removeName})`; cy.get(rowSelector).find('[data-e2e="enabled-delete-button"]').click({ force: true }); - cy.get('[data-e2e="confirm-dialog-input"]').focus().type(user.removeName); + cy.get('[data-e2e="confirm-dialog-input"]').focus().should('be.enabled').type(user.removeName); cy.get('[data-e2e="confirm-dialog-button"]').click(); cy.shouldConfirmSuccess(); cy.shouldNotExist({ diff --git a/e2e/cypress/e2e/instance/settings/notifications.cy.ts b/e2e/cypress/e2e/instance/settings/notifications.cy.ts index ca7af80d4..99e68a4a0 100644 --- a/e2e/cypress/e2e/instance/settings/notifications.cy.ts +++ b/e2e/cypress/e2e/instance/settings/notifications.cy.ts @@ -1,3 +1,10 @@ +import { v4 as uuidv4 } from 'uuid'; + +import { Context } from '../../../support/commands'; +import { ensureOrgExists } from '../../../support/api/orgs'; +import { activateSMTPProvider, ensureSMTPProviderExists } from '../../../support/api/smtp'; +import { ensureSMSProviderDoesntExist, ensureSMSProviderExists } from '../../../support/api/sms'; + const notificationPath = `/instance?id=notifications`; const smtpPath = `/instance?id=smtpprovider`; const smsPath = `/instance?id=smsprovider`; @@ -6,6 +13,11 @@ beforeEach(() => { cy.context().as('ctx'); }); +type SMTPProvider = { + description: string; + rowSelector: string; +}; + describe('instance notifications', () => { describe('notification settings', () => { it(`should show notification settings`, () => { @@ -15,243 +27,195 @@ describe('instance notifications', () => { }); describe('smtp settings', () => { - it(`should show SMTP provider settings`, () => { - cy.visit(smtpPath); - cy.contains('SMTP Provider'); + beforeEach(() => { + const description = `mailgun-${uuidv4()}`; + cy.wrap({ description, rowSelector: `tr:contains('${description}')` }).as('provider'); }); + it(`should add Mailgun SMTP provider settings`, () => { - let rowSelector = `a:contains('Mailgun')`; - cy.visit(smtpPath); - cy.get(rowSelector).click(); - cy.get('[formcontrolname="hostAndPort"]').should('have.value', 'smtp.mailgun.org:587'); - cy.get('[formcontrolname="user"]').clear().type('user@example.com'); - cy.get('[formcontrolname="password"]').clear().type('password'); - cy.get('[data-e2e="continue-to-2nd-form"]').click(); - cy.get('[formcontrolname="senderAddress"]').clear().type('sender1@example.com'); - cy.get('[formcontrolname="senderName"]').clear().type('Test1'); - cy.get('[formcontrolname="replyToAddress"]').clear().type('replyto1@example.com'); - cy.get('[data-e2e="continue-button"]').click(); - cy.get('[data-e2e="create-button"]').click(); - cy.shouldConfirmSuccess(); - cy.get('[data-e2e="close-button"]').click(); - cy.get('tr').contains('mailgun'); - cy.get('tr').contains('smtp.mailgun.org:587'); - cy.get('tr').contains('sender1@example.com'); - }); - it(`should change Mailgun SMTP provider settings`, () => { - let rowSelector = `tr:contains('mailgun')`; - cy.visit(smtpPath); - cy.get(rowSelector).click(); - cy.get('[formcontrolname="hostAndPort"]').should('have.value', 'smtp.mailgun.org:587'); - cy.get('[formcontrolname="user"]').should('have.value', 'user@example.com'); - cy.get('[formcontrolname="user"]').clear().type('change@example.com'); - cy.get('[data-e2e="continue-to-2nd-form"]').click(); - cy.get('[formcontrolname="senderAddress"]').should('have.value', 'sender1@example.com'); - cy.get('[formcontrolname="senderName"]').should('have.value', 'Test1'); - cy.get('[formcontrolname="replyToAddress"]').should('have.value', 'replyto1@example.com'); - cy.get('[formcontrolname="senderAddress"]').clear().type('senderchange1@example.com'); - cy.get('[formcontrolname="senderName"]').clear().type('Change1'); - cy.get('[data-e2e="continue-button"]').click(); - cy.get('[data-e2e="create-button"]').click(); - cy.shouldConfirmSuccess(); - cy.get('[data-e2e="close-button"]').click(); - rowSelector = `tr:contains('mailgun')`; - cy.get(rowSelector).contains('mailgun'); - cy.get(rowSelector).contains('smtp.mailgun.org:587'); - cy.get(rowSelector).contains('senderchange1@example.com'); - }); - it(`should activate Mailgun SMTP provider settings`, () => { - let rowSelector = `tr:contains('smtp.mailgun.org:587')`; - cy.visit(smtpPath); - cy.get(rowSelector).find('[data-e2e="activate-provider-button"]').click({ force: true }); - cy.get('[data-e2e="confirm-dialog-button"]').click(); - cy.shouldConfirmSuccess(); - rowSelector = `tr:contains('smtp.mailgun.org:587')`; - cy.get(rowSelector).find('[data-e2e="active-provider"]'); - cy.get(rowSelector).contains('mailgun'); - cy.get(rowSelector).contains('smtp.mailgun.org:587'); - cy.get(rowSelector).contains('senderchange1@example.com'); - }); - it(`should add Mailjet SMTP provider settings`, () => { - let rowSelector = `a:contains('Mailjet')`; - cy.visit(smtpPath); - cy.get(rowSelector).click(); - cy.get('[formcontrolname="hostAndPort"]').should('have.value', 'in-v3.mailjet.com:587'); - cy.get('[formcontrolname="user"]').clear().type('user@example.com'); - cy.get('[formcontrolname="password"]').clear().type('password'); - cy.get('[data-e2e="continue-to-2nd-form"]').click(); - cy.get('[formcontrolname="senderAddress"]').clear().type('sender2@example.com'); - cy.get('[formcontrolname="senderName"]').clear().type('Test2'); - cy.get('[formcontrolname="replyToAddress"]').clear().type('replyto2@example.com'); - cy.get('[data-e2e="continue-button"]').click(); - cy.get('[data-e2e="create-button"]').click(); - cy.shouldConfirmSuccess(); - cy.get('[data-e2e="close-button"]').click(); - rowSelector = `tr:contains('mailjet')`; - cy.get(rowSelector).contains('mailjet'); - cy.get(rowSelector).contains('in-v3.mailjet.com:587'); - cy.get(rowSelector).contains('sender2@example.com'); - }); - it(`should activate Mailjet SMTP provider settings an disable Mailgun`, () => { - let rowSelector = `tr:contains('in-v3.mailjet.com:587')`; - cy.visit(smtpPath); - cy.get(rowSelector).find('[data-e2e="activate-provider-button"]').click({ force: true }); - cy.get('[data-e2e="confirm-dialog-button"]').click(); - cy.shouldConfirmSuccess(); - cy.get(rowSelector).find('[data-e2e="active-provider"]'); - cy.get(rowSelector).contains('mailjet'); - cy.get(rowSelector).contains('in-v3.mailjet.com:587'); - cy.get(rowSelector).contains('sender2@example.com'); - rowSelector = `tr:contains('mailgun')`; - cy.get(rowSelector).find('[data-e2e="active-provider"]').should('not.exist'); - }); - it(`should deactivate Mailjet SMTP provider`, () => { - let rowSelector = `tr:contains('mailjet')`; - cy.visit(smtpPath); - cy.get(rowSelector).find('[data-e2e="deactivate-provider-button"]').click({ force: true }); - cy.get('[data-e2e="confirm-dialog-button"]').click(); - cy.shouldConfirmSuccess(); - rowSelector = `tr:contains('mailjet')`; - cy.get(rowSelector).find('[data-e2e="active-provider"]').should('not.exist'); - rowSelector = `tr:contains('mailgun')`; - cy.get(rowSelector).find('[data-e2e="active-provider"]').should('not.exist'); - }); - it(`should delete Mailjet SMTP provider`, () => { - let rowSelector = `tr:contains('mailjet')`; - cy.visit(smtpPath); - cy.get(rowSelector).find('[data-e2e="delete-provider-button"]').click({ force: true }); - cy.get('[data-e2e="confirm-dialog-input"]').focus().type('Test2'); - cy.get('[data-e2e="confirm-dialog-button"]').click(); - cy.shouldConfirmSuccess(); - rowSelector = `tr:contains('mailjet')`; - cy.get(rowSelector).should('not.exist'); - }); - it(`should delete Mailgun SMTP provider`, () => { - let rowSelector = `tr:contains('mailgun')`; - cy.visit(smtpPath); - cy.get(rowSelector).find('[data-e2e="delete-provider-button"]').click({ force: true }); - cy.get('[data-e2e="confirm-dialog-input"]').focus().type('Change1'); - cy.get('[data-e2e="confirm-dialog-button"]').click(); - cy.shouldConfirmSuccess(); - rowSelector = `tr:contains('mailgun')`; - cy.get(rowSelector).should('not.exist'); + cy.get('@provider').then((provider) => { + cy.visit(smtpPath); + cy.get(`a:contains('Mailgun')`).click(); + cy.get('[formcontrolname="description"]').should('be.enabled').clear().type(provider.description); + cy.get('[formcontrolname="hostAndPort"]').should('have.value', 'smtp.mailgun.org:587'); + cy.get('[formcontrolname="user"]').should('be.enabled').clear().type('user@example.com'); + cy.get('[formcontrolname="password"]').should('be.enabled').clear().type('password'); + cy.get('[data-e2e="continue-to-2nd-form"]').should('be.enabled').click(); + cy.get('[formcontrolname="senderAddress"]').should('be.enabled').clear().type('sender1@example.com'); + cy.get('[formcontrolname="senderName"]').should('be.enabled').clear().type('Test1'); + cy.get('[formcontrolname="replyToAddress"]').should('be.enabled').clear().type('replyto1@example.com'); + cy.get('[data-e2e="continue-button"]').should('be.enabled').click(); + cy.get('[data-e2e="create-button"]').should('be.enabled').click(); + cy.shouldConfirmSuccess(); + cy.get('[data-e2e="close-button"]').should('be.enabled').click(); + cy.get(provider.rowSelector).contains('smtp.mailgun.org:587'); + cy.get(provider.rowSelector).contains('sender1@example.com'); + }); }); + it(`should add Mailgun SMTP provider settings and activate it using wizard`, () => { - let rowSelector = `a:contains('Mailgun')`; - cy.visit(smtpPath); - cy.get(rowSelector).click(); - cy.get('[formcontrolname="hostAndPort"]').should('have.value', 'smtp.mailgun.org:587'); - cy.get('[formcontrolname="user"]').clear().type('user@example.com'); - cy.get('[formcontrolname="password"]').clear().type('password'); - cy.get('[data-e2e="continue-to-2nd-form"]').click(); - cy.get('[formcontrolname="senderAddress"]').clear().type('sender1@example.com'); - cy.get('[formcontrolname="senderName"]').clear().type('Test1'); - cy.get('[formcontrolname="replyToAddress"]').clear().type('replyto1@example.com'); - cy.get('[data-e2e="continue-button"]').click(); - cy.get('[data-e2e="create-button"]').click(); - cy.shouldConfirmSuccess(); - cy.get('[data-e2e="activate-button"]').click(); - cy.shouldConfirmSuccess(); - cy.get('[data-e2e="close-button"]').click(); - rowSelector = `tr:contains('smtp.mailgun.org:587')`; - cy.get(rowSelector).find('[data-e2e="active-provider"]'); - cy.get(rowSelector).contains('mailgun'); - cy.get(rowSelector).contains('smtp.mailgun.org:587'); - cy.get(rowSelector).contains('sender1@example.com'); + cy.get('@provider').then((provider) => { + cy.visit(smtpPath); + cy.get(`a:contains('Mailgun')`).click(); + cy.get('[formcontrolname="description"]').should('be.enabled').clear().type(provider.description); + cy.get('[formcontrolname="hostAndPort"]').should('have.value', 'smtp.mailgun.org:587'); + cy.get('[formcontrolname="user"]').should('be.enabled').clear().type('user@example.com'); + cy.get('[formcontrolname="password"]').should('be.enabled').clear().type('password'); + cy.get('[data-e2e="continue-to-2nd-form"]').should('be.enabled').click(); + cy.get('[formcontrolname="senderAddress"]').should('be.enabled').clear().type('sender1@example.com'); + cy.get('[formcontrolname="senderName"]').should('be.enabled').clear().type('Test1'); + cy.get('[formcontrolname="replyToAddress"]').should('be.enabled').clear().type('replyto1@example.com'); + cy.get('[data-e2e="continue-button"]').should('be.enabled').click(); + cy.get('[data-e2e="create-button"]').click(); + cy.shouldConfirmSuccess(); + cy.get('[data-e2e="activate-button"]').click(); + cy.shouldConfirmSuccess(); + cy.get('[data-e2e="close-button"]').click(); + cy.get(provider.rowSelector).find('[data-e2e="active-provider"]'); + cy.get(provider.rowSelector).contains('smtp.mailgun.org:587'); + cy.get(provider.rowSelector).contains('sender1@example.com'); + }); }); - it(`should add Mailgun SMTP provider settings and deactivate it using wizard`, () => { - let rowSelector = `tr:contains('mailgun')`; - cy.visit(smtpPath); - cy.get(rowSelector).click(); - cy.get('[data-e2e="continue-to-2nd-form"]').click(); - cy.get('[data-e2e="continue-button"]').click(); - cy.get('[data-e2e="create-button"]').click(); - cy.shouldConfirmSuccess(); - cy.get('[data-e2e="deactivate-button"]').click(); - cy.shouldConfirmSuccess(); - cy.get('[data-e2e="close-button"]').click(); - rowSelector = `tr:contains('mailgun')`; - cy.get(rowSelector).find('[data-e2e="active-provider"]').should('not.exist'); + + describe('with inactive existing', () => { + beforeEach(() => { + cy.get('@ctx').then((ctx) => { + cy.get('@provider').then(({ description }) => { + ensureSMTPProviderExists(ctx.api, description); + }); + }); + cy.visit(smtpPath); + }); + + it(`should change Mailgun SMTP provider settings`, () => { + cy.get('@provider').then(({ rowSelector }) => { + cy.get(rowSelector).click(); + cy.get('[data-e2e="continue-to-2nd-form"]').click(); + cy.get('[formcontrolname="senderAddress"]').should('be.enabled').clear().type('senderchange1@example.com'); + cy.get('[formcontrolname="senderName"]').clear().type('Change1'); + cy.get('[data-e2e="continue-button"]').click(); + cy.get('[data-e2e="create-button"]').click(); + cy.shouldConfirmSuccess(); + cy.get('[data-e2e="close-button"]').click(); + cy.get(rowSelector).contains('senderchange1@example.com'); + }); + }); + it(`should activate Mailgun SMTP provider settings`, () => { + cy.get('@provider').then(({ rowSelector }) => { + cy.get(rowSelector).find('[data-e2e="activate-provider-button"]').click({ force: true }); + cy.get('[data-e2e="confirm-dialog-button"]').click(); + cy.shouldConfirmSuccess(); + cy.get(rowSelector).find('[data-e2e="active-provider"]'); + }); + }); + + it(`should delete Mailgun SMTP provider`, () => { + cy.get('@provider').then(({ rowSelector }) => { + cy.get(rowSelector).find('[data-e2e="delete-provider-button"]').click({ force: true }); + cy.get('[data-e2e="confirm-dialog-input"]').focus().should('be.enabled').type('A Sender'); + cy.get('[data-e2e="confirm-dialog-button"]').click(); + cy.shouldConfirmSuccess(); + cy.get(rowSelector).should('not.exist'); + }); + }); }); - it(`should delete Mailgun SMTP provider`, () => { - let rowSelector = `tr:contains('mailgun')`; - cy.visit(smtpPath); - cy.get(rowSelector).find('[data-e2e="delete-provider-button"]').click({ force: true }); - cy.get('[data-e2e="confirm-dialog-input"]').focus().type('Test1'); - cy.get('[data-e2e="confirm-dialog-button"]').click(); - cy.shouldConfirmSuccess(); - rowSelector = `tr:contains('mailgun')`; - cy.get(rowSelector).should('not.exist'); + describe('with active existing', () => { + beforeEach(() => { + cy.get('@ctx').then((ctx) => { + cy.get('@provider').then(({ description }) => { + ensureSMTPProviderExists(ctx.api, description).then((providerId) => { + activateSMTPProvider(ctx.api, providerId); + }); + }); + }); + cy.pause(); + cy.visit(smtpPath); + }); + + it(`should deactivate an existing Mailgun SMTP provider using wizard`, () => { + cy.get('@provider').then(({ rowSelector }) => { + cy.get(rowSelector).click(); + cy.get('[data-e2e="continue-to-2nd-form"]').click(); + cy.get('[data-e2e="continue-button"]').click(); + cy.get('[data-e2e="create-button"]').click(); + cy.shouldConfirmSuccess(); + cy.get('[data-e2e="deactivate-button"]').click(); + cy.shouldConfirmSuccess(); + cy.get('[data-e2e="close-button"]').click(); + cy.get(rowSelector).find('[data-e2e="active-provider"]').should('not.exist'); + }); + }); }); }); describe('sms settings', () => { - it(`should show SMS provider settings`, () => { - cy.visit(smsPath); - cy.contains('SMS Settings'); + beforeEach(() => { + cy.wrap(`twilio-${uuidv4()}`).as('uniqueSid'); }); - it(`should add SMS provider`, () => { - cy.visit(smsPath); - cy.get('[data-e2e="new-twilio-button"]').click(); - cy.get('[formcontrolname="sid"]').clear().type('test'); - cy.get('[formcontrolname="token"]').clear().type('token'); - cy.get('[formcontrolname="senderNumber"]').clear().type('2312123132'); - cy.get('[data-e2e="save-sms-settings-button"]').click(); - cy.shouldConfirmSuccess(); - cy.get('h4').contains('Twilio'); - cy.get('.state').contains('Inactive'); + describe('without existing', () => { + beforeEach(() => { + cy.get('@ctx').then((ctx) => { + ensureSMSProviderDoesntExist(ctx.api); + }); + }); + + it(`should add SMS provider`, () => { + cy.visit(smsPath); + cy.get('[data-e2e="new-twilio-button"]').click(); + cy.get('[formcontrolname="sid"]').should('be.enabled').clear().type('test'); + cy.get('[formcontrolname="token"]').should('be.enabled').clear().type('token'); + cy.get('[formcontrolname="senderNumber"]').should('be.enabled').clear().type('2312123132'); + cy.get('[data-e2e="save-sms-settings-button"]').click(); + cy.shouldConfirmSuccess(); + cy.get('h4').contains('Twilio'); + cy.get('.state').contains('Inactive'); + }); }); - it(`should activate SMS provider`, () => { - cy.visit(smsPath); - cy.get('h4').contains('Twilio'); - cy.get('.state').contains('Inactive'); - cy.get('[data-e2e="activate-sms-provider-button"]').click(); - cy.shouldConfirmSuccess(); - cy.get('.state').contains('Active'); - }); + describe('with inactive existing', () => { + beforeEach(() => { + cy.get('@ctx').then((ctx) => { + ensureSMSProviderExists(ctx.api); + cy.visit(smsPath); + }); + }); - it(`should edit SMS provider`, () => { - cy.visit(smsPath); - cy.get('h4').contains('Twilio'); - cy.get('.state').contains('Active'); - cy.get('[data-e2e="new-twilio-button"]').click(); - cy.get('[formcontrolname="sid"]').should('have.value', 'test'); - cy.get('[formcontrolname="senderNumber"]').should('have.value', '2312123132'); - cy.get('[formcontrolname="sid"]').clear().type('test2'); - cy.get('[formcontrolname="senderNumber"]').clear().type('6666666666'); - cy.get('[data-e2e="save-sms-settings-button"]').click(); - cy.shouldConfirmSuccess(); - }); + it(`should activate SMS provider`, () => { + cy.get('h4').contains('Twilio'); + cy.get('.state').contains('Inactive'); + cy.get('[data-e2e="activate-sms-provider-button"]').click(); + cy.shouldConfirmSuccess(); + cy.get('.state').contains('Active'); + }); - it(`should contain edited values`, () => { - cy.visit(smsPath); - cy.get('h4').contains('Twilio'); - cy.get('.state').contains('Active'); - cy.get('[data-e2e="new-twilio-button"]').click(); - cy.get('[formcontrolname="sid"]').should('have.value', 'test2'); - cy.get('[formcontrolname="senderNumber"]').should('have.value', '6666666666'); - }); + it(`should edit SMS provider`, () => { + cy.get('h4').contains('Twilio'); + cy.get('[data-e2e="new-twilio-button"]').click(); + cy.get('[formcontrolname="sid"]').should('be.enabled').clear().type('test2'); + cy.get('[formcontrolname="senderNumber"]').should('be.enabled').clear().type('6666666666'); + cy.get('[data-e2e="save-sms-settings-button"]').click(); + cy.shouldConfirmSuccess(); + cy.get('[data-e2e="new-twilio-button"]').click(); + cy.get('[formcontrolname="sid"]').should('have.value', 'test2'); + cy.get('[formcontrolname="senderNumber"]').should('have.value', '6666666666'); + }); - it(`should edit SMS provider token`, () => { - cy.visit(smsPath); - cy.get('h4').contains('Twilio'); - cy.get('.state').contains('Active'); - cy.get('[data-e2e="new-twilio-button"]').click(); - cy.get('[data-e2e="edit-sms-token-button"]').click(); - cy.get('[data-e2e="notification-setting-password"]').clear().type('newsupertoken'); - cy.get('[data-e2e="save-notification-setting-password-button"]').click(); - cy.shouldConfirmSuccess(); - }); + it(`should edit SMS provider token`, () => { + cy.get('h4').contains('Twilio'); + cy.get('[data-e2e="new-twilio-button"]').click(); + cy.get('[data-e2e="edit-sms-token-button"]').click(); + cy.get('[data-e2e="notification-setting-password"]').should('be.enabled').clear().type('newsupertoken'); + cy.get('[data-e2e="save-notification-setting-password-button"]').click(); + cy.shouldConfirmSuccess(); + }); - it(`should remove SMS provider`, () => { - cy.visit(smsPath); - cy.get('h4').contains('Twilio'); - cy.get('.state').contains('Active'); - cy.get('[data-e2e="remove-sms-provider-button"]').click(); - cy.get('[data-e2e="confirm-dialog-button"]').click(); - cy.shouldConfirmSuccess(); + it(`should remove SMS provider`, () => { + cy.get('h4').contains('Twilio'); + cy.get('[data-e2e="remove-sms-provider-button"]').click(); + cy.get('[data-e2e="confirm-dialog-button"]').click(); + cy.shouldConfirmSuccess(); + }); }); }); }); diff --git a/e2e/cypress/e2e/instance/settings/secret-generator.cy.ts b/e2e/cypress/e2e/instance/settings/secret-generator.cy.ts index 8ea2253e8..29316894e 100644 --- a/e2e/cypress/e2e/instance/settings/secret-generator.cy.ts +++ b/e2e/cypress/e2e/instance/settings/secret-generator.cy.ts @@ -101,7 +101,7 @@ describe('instance secret generators', () => { it(`Initialization Mail should update settings`, () => { cy.visit(secretGeneratorSettingsPath); cy.wait(1000); - cy.get('input[id="length1"]').clear().type('64'); + cy.get('input[id="length1"]').should('be.enabled').clear().type('64'); cy.get('mat-slide-toggle#includeLowerLetters1 button').click(); cy.get('button[id="saveSecretGenerator1"]').click(); cy.wait(1000); @@ -116,7 +116,7 @@ describe('instance secret generators', () => { it(`Email verification should update settings`, () => { cy.visit(secretGeneratorSettingsPath); cy.wait(1000); - cy.get('input[id="length2"]').clear().type('64'); + cy.get('input[id="length2"]').should('be.enabled').clear().type('64'); cy.get('mat-slide-toggle#includeUpperLetters2 button').click(); cy.get('button[id="saveSecretGenerator2"]').click(); cy.wait(1000); @@ -131,7 +131,7 @@ describe('instance secret generators', () => { it(`Phone verification should update settings`, () => { cy.visit(secretGeneratorSettingsPath); cy.wait(1000); - cy.get('input[id="expiry3"]').clear().type('10'); + cy.get('input[id="expiry3"]').should('be.enabled').clear().type('10'); cy.get('mat-slide-toggle#includeSymbols3 button').click(); cy.get('button[id="saveSecretGenerator3"]').click(); cy.wait(1000); @@ -146,7 +146,7 @@ describe('instance secret generators', () => { it(`Password Reset should update settings`, () => { cy.visit(secretGeneratorSettingsPath); cy.wait(1000); - cy.get('input[id="expiry4"]').clear().type('5'); + cy.get('input[id="expiry4"]').should('be.enabled').clear().type('5'); cy.get('mat-slide-toggle#includeDigits4 button').click(); cy.get('button[id="saveSecretGenerator4"]').click(); cy.wait(1000); @@ -161,7 +161,7 @@ describe('instance secret generators', () => { it(`Passwordless Initialization should update settings`, () => { cy.visit(secretGeneratorSettingsPath); cy.wait(1000); - cy.get('input[id="length5"]').clear().type('64'); + cy.get('input[id="length5"]').should('be.enabled').clear().type('64'); cy.get('mat-slide-toggle#includeDigits5 button').click(); cy.get('button[id="saveSecretGenerator5"]').click(); cy.wait(1000); @@ -176,8 +176,8 @@ describe('instance secret generators', () => { it(`App Secret should update settings`, () => { cy.visit(secretGeneratorSettingsPath); cy.wait(1000); - cy.get('input[id="length6"]').clear().type('32'); - cy.get('input[id="expiry6"]').clear().type('120'); + cy.get('input[id="length6"]').should('be.enabled').clear().type('32'); + cy.get('input[id="expiry6"]').should('be.enabled').clear().type('120'); cy.get('mat-slide-toggle#includeUpperLetters6 button').click(); cy.get('button[id="saveSecretGenerator6"]').click(); cy.wait(1000); @@ -192,7 +192,7 @@ describe('instance secret generators', () => { it(`One Time Password (OTP) - SMS should update settings`, () => { cy.visit(secretGeneratorSettingsPath); cy.wait(1000); - cy.get('input[id="expiry7"]').clear().type('120'); + cy.get('input[id="expiry7"]').should('be.enabled').clear().type('120'); cy.get('mat-slide-toggle#includeLowerLetters7 button').click(); cy.get('button[id="saveSecretGenerator7"]').click(); cy.wait(1000); @@ -207,8 +207,8 @@ describe('instance secret generators', () => { it(`One Time Password (OTP) should update settings`, () => { cy.visit(secretGeneratorSettingsPath); cy.wait(1000); - cy.get('input[id="length8"]').clear().type('12'); - cy.get('input[id="expiry8"]').clear().type('90'); + cy.get('input[id="length8"]').should('be.enabled').clear().type('12'); + cy.get('input[id="expiry8"]').should('be.enabled').clear().type('90'); cy.get('mat-slide-toggle#includeDigits8 button').click(); cy.get('mat-slide-toggle#includeSymbols8 button').click(); cy.get('button[id="saveSecretGenerator8"]').click(); diff --git a/e2e/cypress/e2e/machines/machines.cy.ts b/e2e/cypress/e2e/machines/machines.cy.ts index b0ca005e6..504dc88df 100644 --- a/e2e/cypress/e2e/machines/machines.cy.ts +++ b/e2e/cypress/e2e/machines/machines.cy.ts @@ -29,9 +29,9 @@ describe('machines', () => { cy.get('[data-e2e="create-user-button"]').should('be.visible').click(); cy.url().should('contain', 'users/create-machine'); //force needed due to the prefilled username prefix - cy.get('[formcontrolname="userName"]').type(machine.addName); - cy.get('[formcontrolname="name"]').type('e2emachinename'); - cy.get('[formcontrolname="description"]').type('e2emachinedescription'); + cy.get('[formcontrolname="userName"]').should('be.enabled').type(machine.addName); + cy.get('[formcontrolname="name"]').should('be.enabled').type('e2emachinename'); + cy.get('[formcontrolname="description"]').should('be.enabled').type('e2emachinedescription'); cy.get('[data-e2e="create-button"]').click(); cy.shouldConfirmSuccess(); let loginName = machine.addName; @@ -58,7 +58,7 @@ describe('machines', () => { it('should delete a machine', () => { const rowSelector = `tr:contains(${machine.removeName})`; cy.get(rowSelector).find('[data-e2e="enabled-delete-button"]').click({ force: true }); - cy.get('[data-e2e="confirm-dialog-input"]').focus().type(loginName); + cy.get('[data-e2e="confirm-dialog-input"]').focus().should('be.enabled').type(loginName); cy.get('[data-e2e="confirm-dialog-button"]').click(); cy.shouldConfirmSuccess(); cy.shouldNotExist({ diff --git a/e2e/cypress/e2e/organization/organizations.cy.ts b/e2e/cypress/e2e/organization/organizations.cy.ts index 773ac956e..ab08c3a47 100644 --- a/e2e/cypress/e2e/organization/organizations.cy.ts +++ b/e2e/cypress/e2e/organization/organizations.cy.ts @@ -18,7 +18,7 @@ describe('organizations', () => { describe('add and delete org', () => { it('should create an org', () => { cy.visit(orgsPathCreate); - cy.get('[data-e2e="org-name-input"]').focus().clear().type(newOrg); + cy.get('[data-e2e="org-name-input"]').focus().clear().should('be.enabled').type(newOrg); cy.get('[data-e2e="create-org-button"]').click(); cy.contains('tr', newOrg); }); @@ -30,7 +30,7 @@ describe('organizations', () => { cy.wait(1000); cy.get('[data-e2e="actions"]').click(); cy.get('[data-e2e="delete"]', { timeout: 1000 }).should('be.visible').click(); - cy.get('[data-e2e="confirm-dialog-input"]').focus().clear().type(newOrg); + cy.get('[data-e2e="confirm-dialog-input"]').focus().clear().should('be.enabled').type(newOrg); cy.get('[data-e2e="confirm-dialog-button"]').click(); cy.shouldConfirmSuccess(); cy.contains('tr', newOrg).should('not.exist'); @@ -49,7 +49,7 @@ describe('organizations', () => { cy.get('[data-e2e="actions"]').click(); cy.get('[data-e2e="rename"]', { timeout: 1000 }).should('be.visible').click(); - cy.get('[data-e2e="name"]').focus().clear().type(testOrgNameChange); + cy.get('[data-e2e="name"]').focus().clear().should('be.enabled').type(testOrgNameChange); cy.get('[data-e2e="dialog-submit"]').click(); cy.shouldConfirmSuccess(); cy.visit(orgPath); diff --git a/e2e/cypress/e2e/permissions/permissions.cy.ts b/e2e/cypress/e2e/permissions/permissions.cy.ts index d1755aa69..a123d7533 100644 --- a/e2e/cypress/e2e/permissions/permissions.cy.ts +++ b/e2e/cypress/e2e/permissions/permissions.cy.ts @@ -45,7 +45,7 @@ describe('permissions', () => { it('should add a manager', () => { cy.get('[data-e2e="add-member-button"]').click(); - cy.get('[data-e2e="add-member-input"]').type(testManagerUsername); + cy.get('[data-e2e="add-member-input"]').should('be.enabled').type(testManagerUsername); cy.get('[data-e2e="user-option"]').first().click(); cy.contains('[data-e2e="role-checkbox"]', roles[0]).click(); cy.get('[data-e2e="confirm-add-member-button"]').click(); @@ -174,9 +174,9 @@ describe('permissions', () => { it('should add a role', () => { cy.get('[data-e2e="sidenav-element-roles"]').click(); cy.get('[data-e2e="add-new-role"]').click(); - cy.get('[formcontrolname="key"]').type(testRoleName); - cy.get('[formcontrolname="displayName"]').type('e2eroleundertestdisplay'); - cy.get('[formcontrolname="group"]').type('e2eroleundertestgroup'); + cy.get('[formcontrolname="key"]').should('be.enabled').type(testRoleName); + cy.get('[formcontrolname="displayName"]').should('be.enabled').type('e2eroleundertestdisplay'); + cy.get('[formcontrolname="group"]').should('be.enabled').type('e2eroleundertestgroup'); cy.get('[data-e2e="save-button"]').click(); cy.shouldConfirmSuccess(); cy.contains('tr', testRoleName); diff --git a/e2e/cypress/e2e/projects/projects.cy.ts b/e2e/cypress/e2e/projects/projects.cy.ts index 36af2cd22..a0b8552e4 100644 --- a/e2e/cypress/e2e/projects/projects.cy.ts +++ b/e2e/cypress/e2e/projects/projects.cy.ts @@ -1,29 +1,29 @@ import { Context } from 'support/commands'; -import { ensureProjectDoesntExist, ensureProjectExists } from '../../support/api/projects'; +import { ensureProjectDoesntExist, ensureProjectExists, ensureRoleExists } from '../../support/api/projects'; import { ensureOrgExists } from 'support/api/orgs'; +import { ensureProjectGrantDoesntExist, ensureProjectGrantExists } from '../../support/api/grants'; describe('projects', () => { beforeEach(() => { cy.context().as('ctx'); }); - const defaultOrg = 'e2eorgnewdefault'; + const foreignOrg = 'e2eorgnewdefault'; const testProjectNameCreate = 'e2eprojectcreate'; const testProjectNameDelete = 'e2eprojectdelete'; + const testProjectRole = 'e2eprojectrole'; describe('add project', () => { beforeEach(`ensure it doesn't exist already`, () => { cy.get('@ctx').then((ctx) => { - ensureOrgExists(ctx, defaultOrg).then(() => { - ensureProjectDoesntExist(ctx.api, testProjectNameCreate); - cy.visit(`/projects`); - }); + ensureProjectDoesntExist(ctx.api, testProjectNameCreate); + cy.visit(`/projects`); }); }); it('should add a project', () => { cy.get('.add-project-button').click({ force: true }); - cy.get('input').type(testProjectNameCreate); + cy.get('input').should('be.enabled').type(testProjectNameCreate); cy.get('[data-e2e="continue-button"]').click(); cy.shouldConfirmSuccess(); }); @@ -32,41 +32,54 @@ describe('projects', () => { }); describe('create project grant', () => { - const testRoleName = 'e2eroleundertestname'; - beforeEach('ensure it exists', () => { cy.get('@ctx').then((ctx) => { ensureProjectExists(ctx.api, testProjectNameCreate).as('projectId'); - cy.get('@projectId').then((projectId) => { - cy.visit(`/projects/${projectId}`); - }); }); }); it('should add a role', () => { + const testRoleName = 'e2eroleundertestname'; + cy.get('@projectId').then((projectId) => { + cy.visit(`/projects/${projectId}`); + }); cy.get('[data-e2e="sidenav-element-roles"]').click(); cy.get('[data-e2e="add-new-role"]').click(); - cy.get('[formcontrolname="key"]').should('be.enabled').type(testRoleName); - cy.get('[formcontrolname="displayName"]').type('e2eroleundertestdisplay'); - cy.get('[formcontrolname="group"]').type('e2eroleundertestgroup'); + cy.get('[data-e2e="role-key-input"]').should('be.enabled').type(testRoleName); + cy.get('[formcontrolname="displayName"]').should('be.enabled').type('e2eroleundertestdisplay'); + cy.get('[formcontrolname="group"]').should('be.enabled').type('e2eroleundertestgroup'); cy.get('[data-e2e="save-button"]').click(); cy.shouldConfirmSuccess(); cy.contains('tr', testRoleName); }); - it('should add a project grant', () => { - const rowSelector = `tr:contains(${testRoleName})`; + describe('with existing role, without project grant', () => { + beforeEach(() => { + cy.get('@ctx').then((ctx) => { + cy.get('@projectId').then((projectId) => { + ensureOrgExists(ctx, foreignOrg).then((foreignOrgID) => { + ensureRoleExists(ctx.api, projectId, testProjectRole); + ensureProjectGrantDoesntExist(ctx, projectId, foreignOrgID); + cy.visit(`/projects/${projectId}`); + }); + }); + }); + }); - cy.get('[data-e2e="sidenav-element-projectgrants"]').click(); - cy.get('[data-e2e="create-project-grant-button"]').click(); - cy.get('[data-e2e="add-org-input"]').type(defaultOrg); - cy.get('mat-option').contains(defaultOrg).click(); - cy.get('button').should('be.enabled'); - cy.get('[data-e2e="project-grant-continue"]').first().click(); - cy.get(rowSelector).find('input').click({ force: true }); - cy.get('[data-e2e="save-project-grant-button"]').click(); - cy.contains('tr', defaultOrg); - cy.contains('tr', testRoleName); + it('should add a project grant', () => { + const rowSelector = `tr:contains(${testProjectRole})`; + + cy.get('[data-e2e="sidenav-element-projectgrants"]').click(); + cy.get('[data-e2e="create-project-grant-button"]').click(); + cy.get('[data-e2e="add-org-input"]').should('be.enabled').type(foreignOrg); + cy.get('mat-option').contains(foreignOrg).click(); + cy.get('button').should('be.enabled'); + cy.get('[data-e2e="project-grant-continue"]').first().click(); + cy.get(rowSelector).find('input').click({ force: true }); + cy.get('[data-e2e="save-project-grant-button"]').click(); + cy.contains('tr', foreignOrg); + cy.contains('tr', testProjectRole); + }); }); }); @@ -84,7 +97,7 @@ describe('projects', () => { cy.get('[data-e2e="toggle-grid"]').click(); cy.get('[data-e2e="timestamp"]'); cy.get(rowSelector).find('[data-e2e="delete-project-button"]').click({ force: true }); - cy.get('[data-e2e="confirm-dialog-input"]').focus().type(testProjectNameDelete); + cy.get('[data-e2e="confirm-dialog-input"]').focus().should('be.enabled').type(testProjectNameDelete); cy.get('[data-e2e="confirm-dialog-button"]').click(); cy.shouldConfirmSuccess(); cy.shouldNotExist({ @@ -96,7 +109,7 @@ describe('projects', () => { it('removes the project from grid view', () => { const cardSelector = `[data-e2e="grid-card"]:contains(${testProjectNameDelete})`; cy.get(cardSelector).find('[data-e2e="delete-project-button"]').click({ force: true }); - cy.get('[data-e2e="confirm-dialog-input"]').focus().type(testProjectNameDelete); + cy.get('[data-e2e="confirm-dialog-input"]').focus().should('be.enabled').type(testProjectNameDelete); cy.get('[data-e2e="confirm-dialog-button"]').click(); cy.shouldConfirmSuccess(); cy.shouldNotExist({ diff --git a/e2e/cypress/e2e/settings/external-links-settings.cy.ts b/e2e/cypress/e2e/settings/external-links-settings.cy.ts index ee23a2ad6..70ee137dd 100644 --- a/e2e/cypress/e2e/settings/external-links-settings.cy.ts +++ b/e2e/cypress/e2e/settings/external-links-settings.cy.ts @@ -17,7 +17,6 @@ describe('external link settings', () => { }); describe('instance', () => { - beforeEach(`visit`, () => { cy.visit(`/instance?id=privacypolicy`); }); @@ -94,5 +93,4 @@ describe('external link settings', () => { cy.get('[formcontrolname="docsLink"]').should('value', docsLink); }); }); -}) - +}); diff --git a/e2e/cypress/e2e/settings/oidc-settings.cy.ts b/e2e/cypress/e2e/settings/oidc-settings.cy.ts index dc6a8e8a0..42d68dcea 100644 --- a/e2e/cypress/e2e/settings/oidc-settings.cy.ts +++ b/e2e/cypress/e2e/settings/oidc-settings.cy.ts @@ -22,15 +22,25 @@ describe('oidc settings', () => { }); it(`should update oidc settings`, () => { - cy.get('[formcontrolname="accessTokenLifetime"]').should('value', accessTokenPrecondition).clear().type('2'); - cy.get('[formcontrolname="idTokenLifetime"]').should('value', idTokenPrecondition).clear().type('24'); + cy.get('[formcontrolname="accessTokenLifetime"]') + .should('value', accessTokenPrecondition) + .clear() + .should('be.enabled') + .type('2'); + cy.get('[formcontrolname="idTokenLifetime"]') + .should('value', idTokenPrecondition) + .clear() + .should('be.enabled') + .type('24'); cy.get('[formcontrolname="refreshTokenExpiration"]') .should('value', refreshTokenExpirationPrecondition) .clear() + .should('be.enabled') .type('30'); cy.get('[formcontrolname="refreshTokenIdleExpiration"]') .should('value', refreshTokenIdleExpirationPrecondition) .clear() + .should('be.enabled') .type('7'); cy.get('[data-e2e="save-button"]').click(); cy.shouldConfirmSuccess(); diff --git a/e2e/cypress/support/api/grants.ts b/e2e/cypress/support/api/grants.ts index 5f6f5f476..aefa662ba 100644 --- a/e2e/cypress/support/api/grants.ts +++ b/e2e/cypress/support/api/grants.ts @@ -1,6 +1,7 @@ import { Context } from 'support/commands'; -import { ensureItemExists } from './ensure'; +import { ensureItemDoesntExist, ensureItemExists } from './ensure'; import { getOrgUnderTest } from './orgs'; +import { API, Entity } from './types'; export function ensureProjectGrantExists(ctx: Context, foreignOrgId: string, foreignProjectId: string) { return getOrgUnderTest(ctx).then((orgUnderTest) => { @@ -16,3 +17,16 @@ export function ensureProjectGrantExists(ctx: Context, foreignOrgId: string, for ); }); } + +export function ensureProjectGrantDoesntExist(ctx: Context, projectId: number, foreignOrgId: string) { + return getOrgUnderTest(ctx).then((orgUnderTest) => { + console.log('removing grant to foreignOrgId', foreignOrgId, 'in orgUnderTest', orgUnderTest, 'projectId', projectId); + return ensureItemDoesntExist( + ctx.api, + `${ctx.api.mgmtBaseURL}/projectgrants/_search`, + (grant: any) => grant.grantedOrgId == foreignOrgId && grant.projectId == projectId, + (grant: any) => `${ctx.api.mgmtBaseURL}/projects/${projectId}/grants/${grant.grantId}`, + orgUnderTest.toString(), + ); + }); +} diff --git a/e2e/cypress/support/api/projects.ts b/e2e/cypress/support/api/projects.ts index ac368c775..e54af29b1 100644 --- a/e2e/cypress/support/api/projects.ts +++ b/e2e/cypress/support/api/projects.ts @@ -23,7 +23,11 @@ export function ensureProjectDoesntExist(api: API, projectName: string, orgId?: } class ResourceType { - constructor(public resourcePath: string, public compareProperty: string, public identifierProperty: string) {} + constructor( + public resourcePath: string, + public compareProperty: string, + public identifierProperty: string, + ) {} } export const Apps = new ResourceType('apps', 'name', 'id'); @@ -47,19 +51,16 @@ export function ensureProjectResourceDoesntExist( ); } -export function ensureApplicationExists(api: API, projectId: number, appName: string) { +export function ensureRoleExists(api: API, projectId: number, roleName: string) { return ensureItemExists( api, - `${api.mgmtBaseURL}/projects/${projectId}/${Apps.resourcePath}/_search`, - (resource: any) => resource.name === appName, - `${api.mgmtBaseURL}/projects/${projectId}/${Apps.resourcePath}/oidc`, + `${api.mgmtBaseURL}/projects/${projectId}/${Roles.resourcePath}/_search`, + (resource: any) => resource.key === roleName, + `${api.mgmtBaseURL}/projects/${projectId}/${Roles.resourcePath}`, { - name: appName, - redirectUris: ['https://e2eredirecturl.org'], - responseTypes: ['OIDC_RESPONSE_TYPE_CODE'], - grantTypes: ['OIDC_GRANT_TYPE_AUTHORIZATION_CODE'], - authMethodType: 'OIDC_AUTH_METHOD_TYPE_NONE', - postLogoutRedirectUris: ['https://e2elogoutredirecturl.org'], + name: roleName, + roleKey: roleName, + displayName: roleName, }, ); } diff --git a/e2e/cypress/support/api/sms.ts b/e2e/cypress/support/api/sms.ts new file mode 100644 index 000000000..324414c3b --- /dev/null +++ b/e2e/cypress/support/api/sms.ts @@ -0,0 +1,28 @@ +import { ensureItemDoesntExist, ensureItemExists } from './ensure'; +import { API, Entity } from './types'; +import { ensureSMTPProviderExists } from './smtp'; + +export function ensureSMSProviderExists(api: API) { + // remove and create + ensureSMSProviderDoesntExist(api); + return ensureItemExists( + api, + `${api.adminBaseURL}/sms/_search`, + ({ twilio: { sid: foundSid } }: any) => foundSid === 'initial-sid', + `${api.adminBaseURL}/sms/twilio`, + { + sid: 'initial-sid', + senderNumber: 'initial-senderNumber', + token: 'initial-token', + }, + ); +} + +export function ensureSMSProviderDoesntExist(api: API) { + return ensureItemDoesntExist( + api, + `${api.adminBaseURL}/sms/_search`, + (provider: any) => !!provider, + (provider) => `${api.adminBaseURL}/sms/${provider.id}`, + ); +} diff --git a/e2e/cypress/support/api/smtp.ts b/e2e/cypress/support/api/smtp.ts new file mode 100644 index 000000000..78b739397 --- /dev/null +++ b/e2e/cypress/support/api/smtp.ts @@ -0,0 +1,32 @@ +import { ensureItemDoesntExist, ensureItemExists } from './ensure'; +import { API, Entity } from './types'; + +export function ensureSMTPProviderExists(api: API, providerDescription: string) { + return ensureItemExists( + api, + `${api.adminBaseURL}/smtp/_search`, + (provider: any) => { + return provider.description === providerDescription; + }, + `${api.adminBaseURL}/smtp`, + { + name: providerDescription, + description: providerDescription, + senderAddress: 'a@sender.com', + senderName: 'A Sender', + host: 'smtp.host.com:587', + user: 'smtpuser', + }, + ); +} + +export function activateSMTPProvider(api: API, providerId: string) { + return cy.request({ + method: 'POST', + url: `${api.adminBaseURL}/smtp/${providerId}/_activate`, + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${api.token}`, + }, + }); +} diff --git a/e2e/package.json b/e2e/package.json index 4624e938b..01c299590 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -17,18 +17,18 @@ }, "private": true, "dependencies": { - "@types/pg": "^8.6.6", - "cypress-wait-until": "^1.7.2", - "jsonwebtoken": "^8.5.1", + "@types/pg": "^8.11.6", + "cypress-wait-until": "^3.0.2", + "jsonwebtoken": "^9.0.2", "mochawesome": "^7.1.3", - "pg": "^8.8.0", - "prettier": "^2.7.1", - "typescript": "^4.8.4", - "uuid": "^9.0.0", + "pg": "^8.12.0", + "prettier": "^3.3.3", + "typescript": "^5.5.4", + "uuid": "^10.0.0", "wait-on": "^7.2.0" }, "devDependencies": { - "@types/node": "^18.8.3", - "cypress": "^13.3.1" + "@types/node": "^22.3.0", + "cypress": "^13.13.3" } } diff --git a/e2e/yarn.lock b/e2e/yarn.lock index 84669a7fe..90befd406 100644 --- a/e2e/yarn.lock +++ b/e2e/yarn.lock @@ -7,7 +7,7 @@ resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== -"@cypress/request@^3.0.0": +"@cypress/request@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.1.tgz#72d7d5425236a2413bd3d8bb66d02d9dc3168960" integrity sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ== @@ -68,20 +68,17 @@ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== -"@types/node@*": - version "20.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.7.0.tgz#c03de4572f114a940bc2ca909a33ddb2b925e470" - integrity sha512-zI22/pJW2wUZOVyguFaUL1HABdmSVxpXrzIqkjsHmyUjNhPoWM1CKfvVuXfetHhIok4RY573cqS0mZ1SJEnoTg== +"@types/node@*", "@types/node@^22.3.0": + version "22.3.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.3.0.tgz#7f8da0e2b72c27c4f9bd3cb5ef805209d04d4f9e" + integrity sha512-nrWpWVaDZuaVc5X84xJ0vNrLvomM205oQyLsRt7OHNZbSHslcWsvgFR7O7hire2ZonjLrWBbedmotmIlJDVd6g== + dependencies: + undici-types "~6.18.2" -"@types/node@^18.8.3": - version "18.18.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.18.0.tgz#bd19d5133a6e5e2d0152ec079ac27c120e7f1763" - integrity sha512-3xA4X31gHT1F1l38ATDIL9GpRLdwVhnEFC8Uikv5ZLlXATwrCYyPq7ZWHxzxc3J/30SUiwiYT+bQe0/XvKlWbw== - -"@types/pg@^8.6.6": - version "8.10.3" - resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.10.3.tgz#39b3acba4f313a65c8fbb4b241fcb21cc1ba4126" - integrity sha512-BACzsw64lCZesclRpZGu55tnqgFAYcrCBP92xLh1KLypZLCOsvJTSTgaoFVTy3lCys/aZTQzfeDxtjwrvdzL2g== +"@types/pg@^8.11.6": + version "8.11.6" + resolved "https://registry.yarnpkg.com/@types/pg/-/pg-8.11.6.tgz#a2d0fb0a14b53951a17df5197401569fb9c0c54b" + integrity sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ== dependencies: "@types/node" "*" pg-protocol "*" @@ -93,14 +90,14 @@ integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== "@types/sizzle@^2.3.2": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.4.tgz#cd6531924f60834fa4a1b8081f9eecf9bb1117f0" - integrity sha512-jA2llq2zNkg8HrALI7DtWzhALcVH0l7i89yhY3iBdOz6cBPeACoFq+fkQrjHA39t1hnSFOboZ7A/AY5MMZSlag== + version "2.3.8" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.8.tgz#518609aefb797da19bf222feb199e8f653ff7627" + integrity sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg== "@types/yauzl@^2.9.1": - version "2.10.1" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.1.tgz#4e8f299f0934d60f36c74f59cb5a8483fd786691" - integrity sha512-CHzgNU3qYBnp/O4S3yv2tXPlvMTq0YWSTVg2/JYLqWZGHwwgJGAwd00poay/11asPq8wLFwHzubyInqHIFmmiw== + version "2.10.3" + resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.3.tgz#e9b2808b4f109504a03cda958259876f61017999" + integrity sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q== dependencies: "@types/node" "*" @@ -159,9 +156,9 @@ astral-regex@^2.0.0: integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== async@^3.2.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + version "3.2.5" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: version "0.4.0" @@ -179,24 +176,19 @@ aws-sign2@~0.7.0: integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + version "1.13.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.1.tgz#bb5f8b8a20739f6ae1caeaf7eea2c7913df8048e" + integrity sha512-u5w79Rd7SU4JaIlA/zFqG+gOiuq25q5VLyZ8E+ijJeILuTxVzZgp2CaGw/UTw6pXYN9XMO9yiqj/nEHmhTG5CA== axios@^1.6.1: - version "1.6.8" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" - integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + version "1.7.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.4.tgz#4c8ded1b43683c8dd362973c393f3ede24052aa2" + integrity sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -219,14 +211,6 @@ bluebird@^3.7.2: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - buffer-crc32@~0.2.3: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" @@ -237,11 +221,6 @@ buffer-equal-constant-time@1.0.1: resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== -buffer-writer@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-2.0.0.tgz#ce7eb81a38f7829db09c873f2fbb792c0c98ec04" - integrity sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw== - buffer@^5.7.1: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -255,13 +234,16 @@ cachedir@^2.3.0: resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" integrity sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ== -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== +call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" caseless@~0.12.0: version "0.12.0" @@ -282,9 +264,9 @@ check-more-types@^2.24.0: integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== clean-stack@^2.0.0: version "2.2.0" @@ -299,9 +281,9 @@ cli-cursor@^3.1.0: restore-cursor "^3.1.0" cli-table3@~0.6.1: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + version "0.6.5" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.5.tgz#013b91351762739c16a9567c21a04632e449bf2f" + integrity sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ== dependencies: string-width "^4.2.0" optionalDependencies: @@ -358,11 +340,6 @@ common-tags@^1.8.0: resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -377,17 +354,17 @@ cross-spawn@^7.0.0: shebang-command "^2.0.0" which "^2.0.1" -cypress-wait-until@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/cypress-wait-until/-/cypress-wait-until-1.7.2.tgz#7f534dd5a11c89b65359e7a0210f20d3dfc22107" - integrity sha512-uZ+M8/MqRcpf+FII/UZrU7g1qYZ4aVlHcgyVopnladyoBrpoaMJ4PKZDrdOJ05H5RHbr7s9Tid635X3E+ZLU/Q== +cypress-wait-until@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/cypress-wait-until/-/cypress-wait-until-3.0.2.tgz#c90dddfa4c46a2c422f5b91d486531c560bae46e" + integrity sha512-iemies796dD5CgjG5kV0MnpEmKSH+s7O83ZoJLVzuVbZmm4lheMsZqAVT73hlMx4QlkwhxbyUzhOBUOZwoOe0w== -cypress@^13.3.1: - version "13.7.2" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.7.2.tgz#61e841382abb20e0a9a063086ee0d850af3ef6bc" - integrity sha512-FF5hFI5wlRIHY8urLZjJjj/YvfCBrRpglbZCLr/cYcL9MdDe0+5usa8kTIrDHthlEc9lwihbkb5dmwqBDNS2yw== +cypress@^13.13.3: + version "13.13.3" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-13.13.3.tgz#21ee054bb4e00b3858f2e33b4f8f4e69128470a9" + integrity sha512-hUxPrdbJXhUOTzuML+y9Av7CKoYznbD83pt8g3klgpioEha0emfx4WNIuVRx0C76r0xV2MIwAW9WYiXfVJYFQw== dependencies: - "@cypress/request" "^3.0.0" + "@cypress/request" "^3.0.1" "@cypress/xvfb" "^1.2.4" "@types/sinonjs__fake-timers" "8.1.1" "@types/sizzle" "^2.3.2" @@ -426,7 +403,7 @@ cypress@^13.3.1: request-progress "^3.0.0" semver "^7.5.3" supports-color "^8.1.1" - tmp "~0.2.1" + tmp "~0.2.3" untildify "^4.0.0" yauzl "^2.10.0" @@ -443,9 +420,9 @@ dateformat@^4.5.1: integrity sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA== dayjs@^1.10.4: - version "1.11.10" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.10.tgz#68acea85317a6e164457d6d6947564029a6a16a0" - integrity sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ== + version "1.11.12" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.12.tgz#5245226cc7f40a15bf52e0b99fd2a04669ccac1d" + integrity sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg== debug@^3.1.0: version "3.2.7" @@ -455,21 +432,30 @@ debug@^3.1.0: ms "^2.1.1" debug@^4.1.1, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + version "4.3.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.6.tgz#2ab2c38fbaffebf8aa95fdfe6d88438c7a13c52b" + integrity sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg== dependencies: ms "2.1.2" +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== diff@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" - integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== ecc-jsbn@~0.1.1: version "0.1.2" @@ -506,10 +492,22 @@ enquirer@^2.3.6: ansi-colors "^4.1.1" strip-ansi "^6.0.1" +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-html@^1.0.3: version "1.0.3" @@ -635,35 +633,31 @@ fs-extra@^9.1.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - fsu@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/fsu/-/fsu-1.1.1.tgz#bd36d3579907c59d85b257a75b836aa9e0c31834" integrity sha512-xQVsnjJ/5pQtcKh+KjUoZGzVWn4uNkchxTF6Lwjr4Gf7nQr8fmUfhKJ62zE77+xQg9xnxi5KUps7XGs+VC986A== -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: - function-bind "^1.1.1" - has "^1.0.3" + es-errors "^1.3.0" + function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" + hasown "^2.0.0" get-stream@^5.0.0, get-stream@^5.1.0: version "5.2.0" @@ -686,18 +680,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - global-dirs@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" @@ -705,6 +687,13 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" @@ -715,22 +704,29 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== dependencies: - function-bind "^1.1.1" + function-bind "^1.1.2" http-signature@~1.3.6: version "1.3.6" @@ -756,19 +752,6 @@ indent-string@^4.0.0: resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - ini@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" @@ -825,9 +808,9 @@ isstream@~0.1.2: integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== joi@^17.11.0: - version "17.12.3" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.12.3.tgz#944646979cd3b460178547b12ba37aca8482f63d" - integrity sha512-2RRziagf555owrm9IRVtdKynOBeITiDpuZqIpgwqXShPncPKNiRQoiGsl/T8SQdq+8ugRzH2LqY67irr2y/d+g== + version "17.13.3" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.13.3.tgz#0f5cc1169c999b30d344366d384b12d92558bcec" + integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA== dependencies: "@hapi/hoek" "^9.3.0" "@hapi/topo" "^5.1.0" @@ -864,10 +847,10 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -jsonwebtoken@^8.5.1: - version "8.5.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" - integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== +jsonwebtoken@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== dependencies: jws "^3.2.2" lodash.includes "^4.3.0" @@ -878,7 +861,7 @@ jsonwebtoken@^8.5.1: lodash.isstring "^4.0.1" lodash.once "^4.0.0" ms "^2.1.1" - semver "^5.6.0" + semver "^7.5.4" jsprim@^2.0.2: version "2.0.2" @@ -1006,13 +989,6 @@ loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -1035,13 +1011,6 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - minimist@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -1103,17 +1072,17 @@ object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.1: + version "1.13.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" + integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== obuf@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -1144,16 +1113,6 @@ p-map@^4.0.0: dependencies: aggregate-error "^3.0.0" -packet-reader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-1.0.0.tgz#9238e5480dedabacfe1fe3f2771063f164157d74" - integrity sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" @@ -1174,10 +1133,10 @@ pg-cloudflare@^1.1.1: resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98" integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q== -pg-connection-string@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.2.tgz#713d82053de4e2bd166fab70cd4f26ad36aab475" - integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA== +pg-connection-string@^2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.4.tgz#f543862adfa49fa4e14bc8a8892d2a84d754246d" + integrity sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA== pg-int8@1.0.1: version "1.0.1" @@ -1189,15 +1148,15 @@ pg-numeric@1.0.2: resolved "https://registry.yarnpkg.com/pg-numeric/-/pg-numeric-1.0.2.tgz#816d9a44026086ae8ae74839acd6a09b0636aa3a" integrity sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw== -pg-pool@^3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.1.tgz#5a902eda79a8d7e3c928b77abf776b3cb7d351f7" - integrity sha512-jizsIzhkIitxCGfPRzJn1ZdcosIt3pz9Sh3V01fm1vZnbnCMgmGl5wvGGdNN2EL9Rmb0EcFoCkixH4Pu+sP9Og== +pg-pool@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.2.tgz#3a592370b8ae3f02a7c8130d245bc02fa2c5f3f2" + integrity sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg== -pg-protocol@*, pg-protocol@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.0.tgz#4c91613c0315349363af2084608db843502f8833" - integrity sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q== +pg-protocol@*, pg-protocol@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.1.tgz#21333e6d83b01faaebfe7a33a7ad6bfd9ed38cb3" + integrity sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg== pg-types@^2.1.0: version "2.2.0" @@ -1211,28 +1170,26 @@ pg-types@^2.1.0: postgres-interval "^1.1.0" pg-types@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-4.0.1.tgz#31857e89d00a6c66b06a14e907c3deec03889542" - integrity sha512-hRCSDuLII9/LE3smys1hRHcu5QGcLs9ggT7I/TCs0IE+2Eesxi9+9RWAAwZ0yaGjxoWICF/YHLOEjydGujoJ+g== + version "4.0.2" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-4.0.2.tgz#399209a57c326f162461faa870145bb0f918b76d" + integrity sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng== dependencies: pg-int8 "1.0.1" pg-numeric "1.0.2" postgres-array "~3.0.1" postgres-bytea "~3.0.0" - postgres-date "~2.0.1" + postgres-date "~2.1.0" postgres-interval "^3.0.0" postgres-range "^1.1.1" -pg@^8.8.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.3.tgz#d7db6e3fe268fcedd65b8e4599cda0b8b4bf76cb" - integrity sha512-+9iuvG8QfaaUrrph+kpF24cXkH1YOOUeArRNYIxq1viYHZagBxrTno7cecY1Fa44tJeZvaoG+Djpkc3JwehN5g== +pg@^8.12.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/pg/-/pg-8.12.0.tgz#9341724db571022490b657908f65aee8db91df79" + integrity sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ== dependencies: - buffer-writer "2.0.0" - packet-reader "1.0.0" - pg-connection-string "^2.6.2" - pg-pool "^3.6.1" - pg-protocol "^1.6.0" + pg-connection-string "^2.6.4" + pg-pool "^3.6.2" + pg-protocol "^1.6.1" pg-types "^2.1.0" pgpass "1.x" optionalDependencies: @@ -1277,10 +1234,10 @@ postgres-date@~1.0.4: resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8" integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q== -postgres-date@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-2.0.1.tgz#638b62e5c33764c292d37b08f5257ecb09231457" - integrity sha512-YtMKdsDt5Ojv1wQRvUhnyDJNSr2dGIC96mQVKz7xufp07nfuFONzdaowrMHjlAzY6GDLd4f+LUHHAAM1h4MdUw== +postgres-date@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-2.1.0.tgz#b85d3c1fb6fb3c6c8db1e9942a13a3bf625189d0" + integrity sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA== postgres-interval@^1.1.0: version "1.2.0" @@ -1295,14 +1252,14 @@ postgres-interval@^3.0.0: integrity sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw== postgres-range@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/postgres-range/-/postgres-range-1.1.3.tgz#9ccd7b01ca2789eb3c2e0888b3184225fa859f76" - integrity sha512-VdlZoocy5lCP0c/t66xAfclglEapXPCIVhqqJRncYpvbCgImF0w67aPKfbqUMr72tO2k5q0TdTZwCLjPTI6C9g== + version "1.1.4" + resolved "https://registry.yarnpkg.com/postgres-range/-/postgres-range-1.1.4.tgz#a59c5f9520909bcec5e63e8cf913a92e4c952863" + integrity sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w== -prettier@^2.7.1: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" + integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== pretty-bytes@^5.6.0: version "5.6.0" @@ -1347,9 +1304,9 @@ pump@^3.0.0: once "^1.3.1" punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== qs@6.10.4: version "6.10.4" @@ -1394,16 +1351,9 @@ restore-cursor@^3.1.0: signal-exit "^3.0.2" rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" + version "1.4.1" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" + integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== rxjs@^7.5.1, rxjs@^7.8.1: version "7.8.1" @@ -1422,17 +1372,22 @@ safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -semver@^5.6.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== +semver@^7.5.3, semver@^7.5.4: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== -semver@^7.5.3: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== dependencies: - lru-cache "^6.0.0" + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" shebang-command@^2.0.0: version "2.0.0" @@ -1447,13 +1402,14 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^3.0.2: version "3.0.7" @@ -1484,9 +1440,9 @@ split2@^4.1.0: integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== sshpk@^1.14.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -1546,26 +1502,24 @@ tcomb@^3.0.0, tcomb@^3.2.17: integrity sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ== throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g== + version "1.0.1" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.1.tgz#304ec51631c3b770c65c6c6f76938b384000f4d5" + integrity sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ== through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" +tmp@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== tough-cookie@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== dependencies: psl "^1.1.33" punycode "^2.1.1" @@ -1573,9 +1527,9 @@ tough-cookie@^4.1.3: url-parse "^1.5.3" tslib@^2.1.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + version "2.6.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" + integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== tunnel-agent@^0.6.0: version "0.6.0" @@ -1594,10 +1548,15 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== -typescript@^4.8.4: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@^5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== + +undici-types@~6.18.2: + version "6.18.2" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.18.2.tgz#8b678cf939d4fc9ec56be3c68ed69c619dee28b0" + integrity sha512-5ruQbENj95yDYJNS3TvcaxPMshV7aizdv/hWYjGIKoANWKjhWNBsr2YEuYZKodQulB1b8l7ILOuDQep3afowQQ== universalify@^0.2.0: version "0.2.0" @@ -1605,9 +1564,9 @@ universalify@^0.2.0: integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== untildify@^4.0.0: version "4.0.0" @@ -1622,20 +1581,20 @@ url-parse@^1.5.3: querystringify "^2.1.1" requires-port "^1.0.0" +uuid@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-10.0.0.tgz#5a95aa454e6e002725c79055fd42aaba30ca6294" + integrity sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== + uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== -uuid@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - validator@^13.6.0: - version "13.11.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.11.0.tgz#23ab3fd59290c61248364eabf4067f04955fbb1b" - integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ== + version "13.12.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.12.0.tgz#7d78e76ba85504da3fee4fd1922b385914d4b35f" + integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg== verror@1.10.0: version "1.10.0" @@ -1697,11 +1656,6 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"