From 30b11b0ec8252281ed3cfb273e415edfa2fa1070 Mon Sep 17 00:00:00 2001 From: nirgur Date: Tue, 1 Oct 2024 23:54:43 +0300 Subject: [PATCH] feat: apps portal sdks (#808) Signed-off-by: nirgur Co-authored-by: Asaf Shen --- packages/sdks/angular-sdk/README.md | 13 + packages/sdks/angular-sdk/package.json | 1 + .../projects/angular-sdk/ng-package.json | 3 +- .../applications-portal.component.spec.ts | 99 +++++ .../applications-portal.component.ts | 77 ++++ .../src/lib/descope-auth.module.ts | 7 +- .../projects/angular-sdk/src/public-api.ts | 1 + .../demo-app/src/app/app-routing.module.ts | 2 + .../projects/demo-app/src/app/app.module.ts | 4 +- .../demo-app/src/app/home/home.component.html | 3 + .../demo-app/src/app/home/home.component.ts | 6 + .../my-applications-portal.component.html | 5 + .../my-applications-portal.component.spec.ts | 36 ++ .../my-applications-portal.component.ts | 15 + .../my-applications-portal.scss | 18 + packages/sdks/nextjs-sdk/CHANGELOG.md | 29 +- packages/sdks/nextjs-sdk/README.md | 17 + .../app/my-applications-portal/page.tsx | 20 + .../examples/app-router/app/page.tsx | 2 + packages/sdks/nextjs-sdk/jest.config.mjs | 3 +- .../nextjs-sdk/src/shared/DescopeWidgets.tsx | 4 +- .../test/shared/DescopeWidgets.test.tsx | 18 +- packages/sdks/react-sdk/README.md | 17 + packages/sdks/react-sdk/examples/app/App.tsx | 9 + packages/sdks/react-sdk/examples/app/Home.tsx | 3 + .../examples/app/MyApplicationsPortal.tsx | 68 +++ packages/sdks/react-sdk/package.json | 1 + .../src/components/ApplicationsPortal.tsx | 68 +++ packages/sdks/react-sdk/src/index.ts | 1 + packages/sdks/react-sdk/src/types.ts | 10 + packages/sdks/vue-sdk/README.md | 19 + .../sdks/vue-sdk/example/components/App.vue | 1 + .../components/MyApplicationsPortal.vue | 17 + .../example/components/MyUserProfile.vue | 2 +- packages/sdks/vue-sdk/example/router.ts | 26 +- packages/sdks/vue-sdk/package.json | 1 + .../sdks/vue-sdk/src/ApplicationsPortal.vue | 33 ++ packages/sdks/vue-sdk/src/index.ts | 1 + .../vue-sdk/tests/ApplicationsPortal.test.ts | 42 ++ .../web-component/src/lib/descope-wc/index.ts | 1 + .../src/lib/widget/api/sdk/mocks.ts | 2 +- .../initWidgetRootMixin.ts | 5 +- pnpm-lock.yaml | 394 +++++++++--------- 43 files changed, 878 insertions(+), 226 deletions(-) create mode 100644 packages/sdks/angular-sdk/projects/angular-sdk/src/lib/components/applications-portal/applications-portal.component.spec.ts create mode 100644 packages/sdks/angular-sdk/projects/angular-sdk/src/lib/components/applications-portal/applications-portal.component.ts create mode 100644 packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.component.html create mode 100644 packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.component.spec.ts create mode 100644 packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.component.ts create mode 100644 packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.scss create mode 100644 packages/sdks/nextjs-sdk/examples/app-router/app/my-applications-portal/page.tsx create mode 100644 packages/sdks/react-sdk/examples/app/MyApplicationsPortal.tsx create mode 100644 packages/sdks/react-sdk/src/components/ApplicationsPortal.tsx create mode 100644 packages/sdks/vue-sdk/example/components/MyApplicationsPortal.vue create mode 100644 packages/sdks/vue-sdk/src/ApplicationsPortal.vue create mode 100644 packages/sdks/vue-sdk/tests/ApplicationsPortal.test.ts diff --git a/packages/sdks/angular-sdk/README.md b/packages/sdks/angular-sdk/README.md index 567c0a952..7eb48e87d 100644 --- a/packages/sdks/angular-sdk/README.md +++ b/packages/sdks/angular-sdk/README.md @@ -533,6 +533,19 @@ The widget lets you: Example: [My User Profile](./projects/demo-app/src/app/my-user-profile/my-user-profile.component.html) +#### ApplicationsPortal + +The `ApplicationsPortal` lets you embed an applications portal component in your app and allows the logged-in user to open applications they are assigned to. + +###### Usage + +```angular2html + +``` + +Example: +[My User Profile](./projects/demo-app/src/app/my-applications-portal/my-applications-portal.component.html) + ## Code Example You can find an example angular app in the [examples folder](./projects/demo-app). diff --git a/packages/sdks/angular-sdk/package.json b/packages/sdks/angular-sdk/package.json index 9892eac09..9fd7a74cd 100644 --- a/packages/sdks/angular-sdk/package.json +++ b/packages/sdks/angular-sdk/package.json @@ -49,6 +49,7 @@ "@descope/role-management-widget": "workspace:*", "@descope/user-management-widget": "workspace:*", "@descope/user-profile-widget": "workspace:*", + "@descope/applications-portal-widget": "workspace:*", "@descope/web-component": "workspace:*", "@descope/web-js-sdk": "workspace:*", "@descope/core-js-sdk": "workspace:*", diff --git a/packages/sdks/angular-sdk/projects/angular-sdk/ng-package.json b/packages/sdks/angular-sdk/projects/angular-sdk/ng-package.json index 524c2a138..501b33a08 100644 --- a/packages/sdks/angular-sdk/projects/angular-sdk/ng-package.json +++ b/packages/sdks/angular-sdk/projects/angular-sdk/ng-package.json @@ -12,6 +12,7 @@ "@descope/role-management-widget", "@descope/access-key-management-widget", "@descope/audit-management-widget", - "@descope/user-profile-widget" + "@descope/user-profile-widget", + "@descope/applications-portal-widget" ] } diff --git a/packages/sdks/angular-sdk/projects/angular-sdk/src/lib/components/applications-portal/applications-portal.component.spec.ts b/packages/sdks/angular-sdk/projects/angular-sdk/src/lib/components/applications-portal/applications-portal.component.spec.ts new file mode 100644 index 000000000..7ca334dff --- /dev/null +++ b/packages/sdks/angular-sdk/projects/angular-sdk/src/lib/components/applications-portal/applications-portal.component.spec.ts @@ -0,0 +1,99 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ApplicationsPortalComponent } from './applications-portal.component'; +import createSdk from '@descope/web-js-sdk'; +import { DescopeAuthConfig } from '../../types/types'; +import { CUSTOM_ELEMENTS_SCHEMA, EventEmitter } from '@angular/core'; +import mocked = jest.mocked; + +jest.mock('@descope/web-js-sdk'); +//Mock DescopeApplicationsPortalWidget +jest.mock('@descope/applications-portal-widget', () => { + return jest.fn(() => { + // Create a mock DOM element + return document.createElement('descope-applications-portal-widget'); + }); +}); + +describe('DescopeApplicationsPortalComponent', () => { + let component: ApplicationsPortalComponent; + let fixture: ComponentFixture; + let mockedCreateSdk: jest.Mock; + const onSessionTokenChangeSpy = jest.fn(); + const onAuditChangeSpy = jest.fn(); + const afterRequestHooksSpy = jest.fn(); + const mockConfig: DescopeAuthConfig = { + projectId: 'someProject' + }; + + beforeEach(() => { + mockedCreateSdk = mocked(createSdk); + + mockedCreateSdk.mockReturnValue({ + onSessionTokenChange: onSessionTokenChangeSpy, + onAuditChange: onAuditChangeSpy, + httpClient: { + hooks: { + afterRequest: afterRequestHooksSpy + } + } + }); + + TestBed.configureTestingModule({ + schemas: [CUSTOM_ELEMENTS_SCHEMA], + providers: [ + DescopeAuthConfig, + { provide: DescopeAuthConfig, useValue: mockConfig } + ] + }); + + fixture = TestBed.createComponent(ApplicationsPortalComponent); + component = fixture.componentInstance; + component.projectId = '123'; + component.widgetId = 'widget-1'; + component.logout = new EventEmitter(); + component.logger = { + info: jest.fn(), + error: jest.fn(), + warn: jest.fn(), + debug: jest.fn() + }; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + const html: HTMLElement = fixture.nativeElement; + const webComponentHtml = html.querySelector( + 'descope-applications-portal-widget' + ); + expect(webComponentHtml).toBeDefined(); + }); + + it('should correctly setup attributes based on inputs', () => { + const html: HTMLElement = fixture.nativeElement; + const webComponentHtml = html.querySelector( + 'descope-applications-portal-widget' + )!; + expect(webComponentHtml.getAttribute('project-id')).toStrictEqual('123'); + expect(webComponentHtml.getAttribute('widget-id')).toStrictEqual( + 'widget-1' + ); + expect(webComponentHtml.getAttribute('logger')).toBeDefined(); + }); + + it('should emit logout when web component emits logout', () => { + const html: HTMLElement = fixture.nativeElement; + const webComponentHtml = html.querySelector( + 'descope-applications-portal-widget' + )!; + + const event = { + detail: 'logout' + }; + component.logout.subscribe((e) => { + expect(afterRequestHooksSpy).toHaveBeenCalled(); + expect(e.detail).toHaveBeenCalledWith(event.detail); + }); + webComponentHtml.dispatchEvent(new CustomEvent('logout', event)); + }); +}); diff --git a/packages/sdks/angular-sdk/projects/angular-sdk/src/lib/components/applications-portal/applications-portal.component.ts b/packages/sdks/angular-sdk/projects/angular-sdk/src/lib/components/applications-portal/applications-portal.component.ts new file mode 100644 index 000000000..15c34d077 --- /dev/null +++ b/packages/sdks/angular-sdk/projects/angular-sdk/src/lib/components/applications-portal/applications-portal.component.ts @@ -0,0 +1,77 @@ +import { + Component, + ElementRef, + EventEmitter, + Input, + OnChanges, + OnInit, + Output +} from '@angular/core'; +import DescopeApplicationsPortalWidget from '@descope/applications-portal-widget'; +import { ILogger } from '@descope/web-component'; +import { DescopeAuthConfig } from '../../types/types'; + +@Component({ + selector: 'applications-portal', + standalone: true, + template: '' +}) +export class ApplicationsPortalComponent implements OnInit, OnChanges { + projectId: string; + baseUrl?: string; + baseStaticUrl?: string; + @Input() widgetId: string; + + @Input() theme: 'light' | 'dark' | 'os'; + @Input() debug: boolean; + @Input() logger: ILogger; + + @Output() logout: EventEmitter = new EventEmitter(); + + private readonly webComponent = new DescopeApplicationsPortalWidget(); + + constructor( + private elementRef: ElementRef, + descopeConfig: DescopeAuthConfig + ) { + this.projectId = descopeConfig.projectId; + this.baseUrl = descopeConfig.baseUrl; + this.baseStaticUrl = descopeConfig.baseStaticUrl; + } + + ngOnInit() { + this.setupWebComponent(); + this.elementRef.nativeElement.appendChild(this.webComponent); + } + + ngOnChanges(): void { + this.setupWebComponent(); + } + + private setupWebComponent() { + this.webComponent.setAttribute('project-id', this.projectId); + this.webComponent.setAttribute('widget-id', this.widgetId); + if (this.baseUrl) { + this.webComponent.setAttribute('base-url', this.baseUrl); + } + if (this.baseStaticUrl) { + this.webComponent.setAttribute('base-static-url', this.baseStaticUrl); + } + if (this.theme) { + this.webComponent.setAttribute('theme', this.theme); + } + if (this.debug) { + this.webComponent.setAttribute('debug', this.debug.toString()); + } + + if (this.logger) { + (this.webComponent as any).logger = this.logger; + } + + if (this.logout) { + this.webComponent.addEventListener('logout', (e: Event) => { + this.logout?.emit(e as CustomEvent); + }); + } + } +} diff --git a/packages/sdks/angular-sdk/projects/angular-sdk/src/lib/descope-auth.module.ts b/packages/sdks/angular-sdk/projects/angular-sdk/src/lib/descope-auth.module.ts index e3444b5b5..e7096a87c 100644 --- a/packages/sdks/angular-sdk/projects/angular-sdk/src/lib/descope-auth.module.ts +++ b/packages/sdks/angular-sdk/projects/angular-sdk/src/lib/descope-auth.module.ts @@ -14,6 +14,7 @@ import { RoleManagementComponent } from './components/role-management/role-manag import { AccessKeyManagementComponent } from './components/access-key-management/access-key-management.component'; import { AuditManagementComponent } from './components/audit-management/audit-management.component'; import { UserProfileComponent } from './components/user-profile/user-profile.component'; +import { ApplicationsPortalComponent } from './components/applications-portal/applications-portal.component'; import { DescopeAuthConfig } from './types/types'; @NgModule({ @@ -27,7 +28,8 @@ import { DescopeAuthConfig } from './types/types'; RoleManagementComponent, AccessKeyManagementComponent, AuditManagementComponent, - UserProfileComponent + UserProfileComponent, + ApplicationsPortalComponent ], exports: [ DescopeComponent, @@ -38,7 +40,8 @@ import { DescopeAuthConfig } from './types/types'; RoleManagementComponent, AccessKeyManagementComponent, AuditManagementComponent, - UserProfileComponent + UserProfileComponent, + ApplicationsPortalComponent ] }) export class DescopeAuthModule { diff --git a/packages/sdks/angular-sdk/projects/angular-sdk/src/public-api.ts b/packages/sdks/angular-sdk/projects/angular-sdk/src/public-api.ts index f4cb79124..cc08c131b 100644 --- a/packages/sdks/angular-sdk/projects/angular-sdk/src/public-api.ts +++ b/packages/sdks/angular-sdk/projects/angular-sdk/src/public-api.ts @@ -15,4 +15,5 @@ export * from './lib/components/role-management/role-management.component'; export * from './lib/components/access-key-management/access-key-management.component'; export * from './lib/components/audit-management/audit-management.component'; export * from './lib/components/user-profile/user-profile.component'; +export * from './lib/components/applications-portal/applications-portal.component'; export * from './lib/types/types'; diff --git a/packages/sdks/angular-sdk/projects/demo-app/src/app/app-routing.module.ts b/packages/sdks/angular-sdk/projects/demo-app/src/app/app-routing.module.ts index 0b88a06f5..ceca6b5d4 100644 --- a/packages/sdks/angular-sdk/projects/demo-app/src/app/app-routing.module.ts +++ b/packages/sdks/angular-sdk/projects/demo-app/src/app/app-routing.module.ts @@ -9,6 +9,7 @@ import { ManageRolesComponent } from './manage-roles/manage-roles.component'; import { ManageAccessKeysComponent } from './manage-access-keys/manage-access-keys.component'; import { ManageAuditComponent } from './manage-audit/manage-audit.component'; import { MyUserProfileComponent } from './my-user-profile/my-user-profile.component'; +import { MyApplicationsPortalComponent } from './my-applications-portal/my-applications-portal.component'; const routes: Routes = [ { @@ -23,6 +24,7 @@ const routes: Routes = [ { path: 'manage-access-keys', component: ManageAccessKeysComponent }, { path: 'manage-audit', component: ManageAuditComponent }, { path: 'my-user-profile', component: MyUserProfileComponent }, + { path: 'my-applications-portal', component: MyApplicationsPortalComponent }, { path: '**', component: HomeComponent } ]; diff --git a/packages/sdks/angular-sdk/projects/demo-app/src/app/app.module.ts b/packages/sdks/angular-sdk/projects/demo-app/src/app/app.module.ts index f0caf89f2..b013512d8 100644 --- a/packages/sdks/angular-sdk/projects/demo-app/src/app/app.module.ts +++ b/packages/sdks/angular-sdk/projects/demo-app/src/app/app.module.ts @@ -15,6 +15,7 @@ import { ManageRolesComponent } from './manage-roles/manage-roles.component'; import { ManageAccessKeysComponent } from './manage-access-keys/manage-access-keys.component'; import { ManageAuditComponent } from './manage-audit/manage-audit.component'; import { MyUserProfileComponent } from './my-user-profile/my-user-profile.component'; +import { MyApplicationsPortalComponent } from './my-applications-portal/my-applications-portal.component'; import { HttpClientModule, provideHttpClient, @@ -36,7 +37,8 @@ export function initializeApp(authService: DescopeAuthService) { ManageRolesComponent, ManageAccessKeysComponent, ManageAuditComponent, - MyUserProfileComponent + MyUserProfileComponent, + MyApplicationsPortalComponent ], imports: [ BrowserModule, diff --git a/packages/sdks/angular-sdk/projects/demo-app/src/app/home/home.component.html b/packages/sdks/angular-sdk/projects/demo-app/src/app/home/home.component.html index 19bc99138..b267d0756 100644 --- a/packages/sdks/angular-sdk/projects/demo-app/src/app/home/home.component.html +++ b/packages/sdks/angular-sdk/projects/demo-app/src/app/home/home.component.html @@ -28,5 +28,8 @@

Hello {{ userName }}

+ diff --git a/packages/sdks/angular-sdk/projects/demo-app/src/app/home/home.component.ts b/packages/sdks/angular-sdk/projects/demo-app/src/app/home/home.component.ts index 864eb18e5..60c26b12a 100644 --- a/packages/sdks/angular-sdk/projects/demo-app/src/app/home/home.component.ts +++ b/packages/sdks/angular-sdk/projects/demo-app/src/app/home/home.component.ts @@ -82,4 +82,10 @@ export class HomeComponent implements OnInit { .navigate(['/my-user-profile']) .catch((err) => console.error(err)); } + + myApplicationsPortal() { + this.router + .navigate(['/my-applications-portal']) + .catch((err) => console.error(err)); + } } diff --git a/packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.component.html b/packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.component.html new file mode 100644 index 000000000..d5f2d8f80 --- /dev/null +++ b/packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.component.html @@ -0,0 +1,5 @@ + diff --git a/packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.component.spec.ts b/packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.component.spec.ts new file mode 100644 index 000000000..e0552d0b3 --- /dev/null +++ b/packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.component.spec.ts @@ -0,0 +1,36 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { MyApplicationsPortalComponent } from './my-applications-portal.component'; +import createSdk from '@descope/web-js-sdk'; +import { NO_ERRORS_SCHEMA } from '@angular/core'; +import { DescopeAuthConfig } from '../../../../angular-sdk/src/lib/types/types'; +import mocked = jest.mocked; + +jest.mock('@descope/web-js-sdk'); + +describe('MyApplicationsPortalComponent', () => { + let component: MyApplicationsPortalComponent; + let fixture: ComponentFixture; + + let mockedCreateSdk: jest.Mock; + + beforeEach(() => { + mockedCreateSdk = mocked(createSdk); + mockedCreateSdk.mockReturnValue({}); + + TestBed.configureTestingModule({ + schemas: [NO_ERRORS_SCHEMA], + declarations: [MyApplicationsPortalComponent], + providers: [ + DescopeAuthConfig, + { provide: DescopeAuthConfig, useValue: { projectId: 'test' } } + ] + }); + fixture = TestBed.createComponent(MyApplicationsPortalComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.component.ts b/packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.component.ts new file mode 100644 index 000000000..fc037a474 --- /dev/null +++ b/packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.component.ts @@ -0,0 +1,15 @@ +import { Component } from '@angular/core'; +import { environment } from '../../environments/environment'; +import { Router } from '@angular/router'; + +@Component({ + selector: 'app-my-applications-portal', + templateUrl: './my-applications-portal.component.html', + styleUrls: ['./my-applications-portal.scss'] +}) +export class MyApplicationsPortalComponent { + theme = (environment.descopeTheme as 'light' | 'dark' | 'os') ?? 'os'; + debugMode = environment.descopeDebugMode ?? false; + + constructor(private router: Router) {} +} diff --git a/packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.scss b/packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.scss new file mode 100644 index 000000000..9bb69415c --- /dev/null +++ b/packages/sdks/angular-sdk/projects/demo-app/src/app/my-applications-portal/my-applications-portal.scss @@ -0,0 +1,18 @@ +:host { + height: 100vh; + position: relative; +} +main { + border-radius: 10px; + margin: auto; + border: 1px solid lightgray; + padding: 20px; + max-width: 700px; + box-shadow: + 13px 13px 20px #cbced1, + -13px -13px 20px #fff; + background: #ecf0f3; + position: relative; + top: 50%; + transform: translateY(-50%); +} diff --git a/packages/sdks/nextjs-sdk/CHANGELOG.md b/packages/sdks/nextjs-sdk/CHANGELOG.md index bb7643c67..514ac03dc 100644 --- a/packages/sdks/nextjs-sdk/CHANGELOG.md +++ b/packages/sdks/nextjs-sdk/CHANGELOG.md @@ -20,34 +20,39 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/s ### Dependency Updates -* `react-sdk` updated to version `2.0.76` -* `web-component` updated to version `3.25.1` +- `react-sdk` updated to version `2.0.76` +- `web-component` updated to version `3.25.1` + ## [0.2.9](https://github.com/descope/descope-js/compare/nextjs-sdk-0.2.8...nextjs-sdk-0.2.9) (2024-09-17) ### Dependency Updates -* `web-js-sdk` updated to version `1.16.6` -* `react-sdk` updated to version `2.0.75` -* `core-js-sdk` updated to version `2.25.1` -* `web-component` updated to version `3.25.0` +- `web-js-sdk` updated to version `1.16.6` +- `react-sdk` updated to version `2.0.75` +- `core-js-sdk` updated to version `2.25.1` +- `web-component` updated to version `3.25.0` + ## [0.2.8](https://github.com/descope/descope-js/compare/nextjs-sdk-0.2.7...nextjs-sdk-0.2.8) (2024-09-12) ### Dependency Updates -* `react-sdk` updated to version `2.0.74` +- `react-sdk` updated to version `2.0.74` + ## [0.2.7](https://github.com/descope/descope-js/compare/nextjs-sdk-0.2.6...nextjs-sdk-0.2.7) (2024-09-11) ### Dependency Updates -* `web-js-sdk` updated to version `1.16.5` -* `react-sdk` updated to version `2.0.73` -* `core-js-sdk` updated to version `2.25.0` -* `web-component` updated to version `3.24.2` +- `web-js-sdk` updated to version `1.16.5` +- `react-sdk` updated to version `2.0.73` +- `core-js-sdk` updated to version `2.25.0` +- `web-component` updated to version `3.24.2` + ## [0.2.6](https://github.com/descope/descope-js/compare/nextjs-sdk-0.2.5...nextjs-sdk-0.2.6) (2024-09-05) ### Dependency Updates -* `react-sdk` updated to version `2.0.72` +- `react-sdk` updated to version `2.0.72` + ## [0.2.5](https://github.com/descope/descope-js/compare/nextjs-sdk-0.2.4...nextjs-sdk-0.2.5) (2024-09-03) ### Dependency Updates diff --git a/packages/sdks/nextjs-sdk/README.md b/packages/sdks/nextjs-sdk/README.md index e844bbc6c..c37283f25 100644 --- a/packages/sdks/nextjs-sdk/README.md +++ b/packages/sdks/nextjs-sdk/README.md @@ -422,6 +422,23 @@ import { UserProfile } from '@descope/nextjs-sdk'; Example: [User Profile](./examples/app-router/app/my-user-profile/page.tsx) +#### Applications Portal + +The `ApplicationsPortal` lets you embed an applications portal component in your app and allows the logged-in user to open applications they are assigned to. + +###### Usage + +```js +import { ApplicationsPortal } from '@descope/nextjs-sdk'; +... + +``` + +Example: +[User Profile](./examples/app-router/app/my-applications-portal/page.tsx) + ## Code Example You can find an example react app in the [examples folder](./examples). - [App Router](/examples/app-router/) - [Pages Router](/examples/pages-router/) diff --git a/packages/sdks/nextjs-sdk/examples/app-router/app/my-applications-portal/page.tsx b/packages/sdks/nextjs-sdk/examples/app-router/app/my-applications-portal/page.tsx new file mode 100644 index 000000000..2c2bb22ca --- /dev/null +++ b/packages/sdks/nextjs-sdk/examples/app-router/app/my-applications-portal/page.tsx @@ -0,0 +1,20 @@ +'use client'; + +import React from 'react'; +import { ApplicationsPortal } from '@descope/nextjs-sdk'; // eslint-disable-line + +export default () => ( +
+

Applications Portal

+ +
+); diff --git a/packages/sdks/nextjs-sdk/examples/app-router/app/page.tsx b/packages/sdks/nextjs-sdk/examples/app-router/app/page.tsx index af2a0a943..3c1e1e4d7 100644 --- a/packages/sdks/nextjs-sdk/examples/app-router/app/page.tsx +++ b/packages/sdks/nextjs-sdk/examples/app-router/app/page.tsx @@ -24,6 +24,8 @@ const Page = async () => { Manage Audit
User Profile +
+ Applications Portal ) } diff --git a/packages/sdks/nextjs-sdk/jest.config.mjs b/packages/sdks/nextjs-sdk/jest.config.mjs index 5c848d3c6..62d9ed4c5 100644 --- a/packages/sdks/nextjs-sdk/jest.config.mjs +++ b/packages/sdks/nextjs-sdk/jest.config.mjs @@ -26,6 +26,7 @@ export default { '@descope/role-management-widget': '/mockModule.js', '@descope/access-key-management-widget': '/mockModule.js', '@descope/audit-management-widget': '/mockModule.js', - '@descope/user-profile-widget': '/mockModule.js' + '@descope/user-profile-widget': '/mockModule.js', + '@descope/applications-portal-widget': '/mockModule.js' } }; diff --git a/packages/sdks/nextjs-sdk/src/shared/DescopeWidgets.tsx b/packages/sdks/nextjs-sdk/src/shared/DescopeWidgets.tsx index b54a8ba3b..388ad8c31 100644 --- a/packages/sdks/nextjs-sdk/src/shared/DescopeWidgets.tsx +++ b/packages/sdks/nextjs-sdk/src/shared/DescopeWidgets.tsx @@ -10,7 +10,8 @@ import { RoleManagement as RoleManagementWC, AccessKeyManagement as AccessKeyManagementWC, AuditManagement as AuditManagementWC, - UserProfile as UserProfileWc + UserProfile as UserProfileWc, + ApplicationsPortal as ApplicationsPortalWc } from '@descope/react-sdk'; // a helper function to dynamically load the components @@ -29,3 +30,4 @@ export const AccessKeyManagement = dynamicWidgetComponent( ); export const AuditManagement = dynamicWidgetComponent(AuditManagementWC); export const UserProfile = dynamicWidgetComponent(UserProfileWc); +export const ApplicationsPortal = dynamicWidgetComponent(ApplicationsPortalWc); diff --git a/packages/sdks/nextjs-sdk/test/shared/DescopeWidgets.test.tsx b/packages/sdks/nextjs-sdk/test/shared/DescopeWidgets.test.tsx index 5ab59794b..c4c9ef341 100644 --- a/packages/sdks/nextjs-sdk/test/shared/DescopeWidgets.test.tsx +++ b/packages/sdks/nextjs-sdk/test/shared/DescopeWidgets.test.tsx @@ -8,7 +8,8 @@ import { RoleManagement, AccessKeyManagement, AuditManagement, - UserProfile + UserProfile, + ApplicationsPortal } from '../../src/shared/DescopeWidgets'; const mockPush = jest.fn(); @@ -95,4 +96,19 @@ describe('Descope Widgets', () => { ).toBeInTheDocument() ); }); + + it('render ApplicationsPortal', async () => { + render( + + + + ); + + // Wait for the web component to be in the document + await waitFor(() => + expect( + document.querySelector('descope-applications-portal-widget') + ).toBeInTheDocument() + ); + }); }); diff --git a/packages/sdks/react-sdk/README.md b/packages/sdks/react-sdk/README.md index b49871478..d64e6d9ed 100644 --- a/packages/sdks/react-sdk/README.md +++ b/packages/sdks/react-sdk/README.md @@ -485,6 +485,23 @@ import { UserProfile } from '@descope/react-sdk'; Example: [User Profile](./examples/app/MyUserProfile.tsx) +#### Applications Portal + +The `ApplicationsPortal` lets you embed an applications portal component in your app and allows the logged-in user to open applications they are assigned to. + +###### Usage + +```js +import { ApplicationsPortal } from '@descope/react-sdk'; +... + +``` + +Example: +[Applications Portal](./examples/app/MyApplicationsPortal.tsx) + ## Code Example You can find an example react app in the [examples folder](./examples). diff --git a/packages/sdks/react-sdk/examples/app/App.tsx b/packages/sdks/react-sdk/examples/app/App.tsx index 6b6651838..959cd79f6 100644 --- a/packages/sdks/react-sdk/examples/app/App.tsx +++ b/packages/sdks/react-sdk/examples/app/App.tsx @@ -9,6 +9,7 @@ import ManageRoles from './ManageRoles'; import ManageAccessKeys from './ManageAccessKeys'; import ManageAudit from './ManageAudit'; import MyUserProfile from './MyUserProfile'; +import MyApplicationsPortal from './MyApplicationsPortal'; const Layout = () => (
( } /> + + + + } + /> } /> } /> diff --git a/packages/sdks/react-sdk/examples/app/Home.tsx b/packages/sdks/react-sdk/examples/app/Home.tsx index 9f6a7e214..07c386ce3 100644 --- a/packages/sdks/react-sdk/examples/app/Home.tsx +++ b/packages/sdks/react-sdk/examples/app/Home.tsx @@ -49,6 +49,9 @@ const Home = () => {

User Profile

+

+ Applications Portal +

{process.env.DESCOPE_STEP_UP_FLOW_ID && ( diff --git a/packages/sdks/react-sdk/examples/app/MyApplicationsPortal.tsx b/packages/sdks/react-sdk/examples/app/MyApplicationsPortal.tsx new file mode 100644 index 000000000..0ce2a6708 --- /dev/null +++ b/packages/sdks/react-sdk/examples/app/MyApplicationsPortal.tsx @@ -0,0 +1,68 @@ +import type { UserResponse } from '@descope/web-js-sdk'; +import React, { useCallback } from 'react'; +import { Link } from 'react-router-dom'; +import { useDescope, useUser, ApplicationsPortal } from '../../src'; + +const getUserDisplayName = (user?: UserResponse) => + user?.name || user?.loginIds?.[0] || ''; + +const MyApplicationsPortal = () => { + // useUser retrieves the logged in user information + const { user } = useUser(); + // useDescope retrieves Descope SDK for further operations related to authentication + // such as logout + const sdk = useDescope(); + + const onLogout = useCallback(() => { + sdk.logout(); + }, [sdk]); + + return ( + <> +

+

+ Home +

+
+

+ User:{' '} + + {getUserDisplayName(user)} + +

+

+ +

+

+ {process.env.DESCOPE_STEP_UP_FLOW_ID && ( + + Step Up + + )} +

+
+
+

Applications Portal

+ + + ); +}; + +export default MyApplicationsPortal; diff --git a/packages/sdks/react-sdk/package.json b/packages/sdks/react-sdk/package.json index 6ee932684..f66c50cf7 100644 --- a/packages/sdks/react-sdk/package.json +++ b/packages/sdks/react-sdk/package.json @@ -52,6 +52,7 @@ "@descope/role-management-widget": "workspace:*", "@descope/user-management-widget": "workspace:*", "@descope/user-profile-widget": "workspace:*", + "@descope/applications-portal-widget": "workspace:*", "@descope/web-component": "workspace:*", "@descope/web-js-sdk": "workspace:*", "@descope/core-js-sdk": "workspace:*" diff --git a/packages/sdks/react-sdk/src/components/ApplicationsPortal.tsx b/packages/sdks/react-sdk/src/components/ApplicationsPortal.tsx new file mode 100644 index 000000000..e19c4e85d --- /dev/null +++ b/packages/sdks/react-sdk/src/components/ApplicationsPortal.tsx @@ -0,0 +1,68 @@ +import React, { + lazy, + Suspense, + useEffect, + useImperativeHandle, + useState, +} from 'react'; +import Context from '../hooks/Context'; +import { ApplicationsPortalProps } from '../types'; + +// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading +const ApplicationsPortalWC = lazy(async () => { + await import('@descope/applications-portal-widget'); + + return { + default: ({ + projectId, + baseUrl, + baseStaticUrl, + innerRef, + widgetId, + theme, + debug, + }) => ( + + ), + }; +}); + +const ApplicationsPortal = React.forwardRef< + HTMLElement, + ApplicationsPortalProps +>(({ logger, theme, debug, widgetId }, ref) => { + const [innerRef, setInnerRef] = useState(null); + + useImperativeHandle(ref, () => innerRef); + + const { projectId, baseUrl, baseStaticUrl } = React.useContext(Context); + + useEffect(() => { + if (innerRef && logger) { + innerRef.logger = logger; + } + }, [innerRef, logger]); + return ( + + + + ); +}); + +export default ApplicationsPortal; diff --git a/packages/sdks/react-sdk/src/index.ts b/packages/sdks/react-sdk/src/index.ts index a93361516..9e49f4401 100644 --- a/packages/sdks/react-sdk/src/index.ts +++ b/packages/sdks/react-sdk/src/index.ts @@ -11,6 +11,7 @@ export { default as RoleManagement } from './components/RoleManagement'; export { default as AccessKeyManagement } from './components/AccessKeyManagement'; export { default as AuditManagement } from './components/AuditManagement'; export { default as UserProfile } from './components/UserProfile'; +export { default as ApplicationsPortal } from './components/ApplicationsPortal'; export { default as useDescope } from './hooks/useDescope'; export { default as useSession } from './hooks/useSession'; export { default as useUser } from './hooks/useUser'; diff --git a/packages/sdks/react-sdk/src/types.ts b/packages/sdks/react-sdk/src/types.ts index 69d54a8cc..6f40cdff1 100644 --- a/packages/sdks/react-sdk/src/types.ts +++ b/packages/sdks/react-sdk/src/types.ts @@ -11,6 +11,7 @@ import RoleManagementWidget from '@descope/role-management-widget'; import AccessKeyManagementWidget from '@descope/access-key-management-widget'; import AuditManagementWidget from '@descope/audit-management-widget'; import UserProfileWidget from '@descope/user-profile-widget'; +import ApplicationsPortalWidget from '@descope/applications-portal-widget'; import createSdk from './sdk'; declare global { @@ -22,6 +23,7 @@ declare global { ['descope-access-key-management-widget']: AccessKeyManagementCustomElement; ['descope-audit-management-widget']: AuditManagementCustomElement; ['descope-user-profile-widget']: UserProfileCustomElement; + ['descope-applications-portal-widget']: ApplicationsPortalCustomElement; } } } @@ -77,6 +79,10 @@ export type UserProfileCustomElement = CustomElement< typeof UserProfileWidget & UserProfileProps >; +export type ApplicationsPortalCustomElement = CustomElement< + typeof ApplicationsPortalWidget & ApplicationsPortalProps +>; + export interface IContext { fetchUser: () => void; user: User; @@ -133,5 +139,9 @@ export type UserProfileProps = Omit & { onLogout?: (e: CustomEvent) => void; }; +export type ApplicationsPortalProps = Omit & { + onLogout?: (e: CustomEvent) => void; +}; + export type { ILogger }; export type DefaultFlowProps = Omit; diff --git a/packages/sdks/vue-sdk/README.md b/packages/sdks/vue-sdk/README.md index 7c3af8a6f..786f57319 100644 --- a/packages/sdks/vue-sdk/README.md +++ b/packages/sdks/vue-sdk/README.md @@ -385,6 +385,25 @@ const onLogout = () => (window.location.href = '/login'); Example: [User Profile](./example/components/MyUserProfile.vue) +#### Applications Portal + +The `ApplicationsPortal` lets you embed an applications portal component in your app and allows the logged-in user to open applications they are assigned to. + +###### Usage + +```vue + + + +``` + +Example: +[User Profile](./example/components/MyApplicationsPortal.vue) + ## Code Example You can find an example Vue app in the [example folder](./example). diff --git a/packages/sdks/vue-sdk/example/components/App.vue b/packages/sdks/vue-sdk/example/components/App.vue index c439eacf7..43e05dffb 100644 --- a/packages/sdks/vue-sdk/example/components/App.vue +++ b/packages/sdks/vue-sdk/example/components/App.vue @@ -7,6 +7,7 @@ Manage Access Keys Manage Audit User Profile + Applications Portal Login
diff --git a/packages/sdks/vue-sdk/example/components/MyApplicationsPortal.vue b/packages/sdks/vue-sdk/example/components/MyApplicationsPortal.vue new file mode 100644 index 000000000..db539cbbe --- /dev/null +++ b/packages/sdks/vue-sdk/example/components/MyApplicationsPortal.vue @@ -0,0 +1,17 @@ + + + + + + diff --git a/packages/sdks/vue-sdk/example/components/MyUserProfile.vue b/packages/sdks/vue-sdk/example/components/MyUserProfile.vue index 794bd24bb..2372231fb 100644 --- a/packages/sdks/vue-sdk/example/components/MyUserProfile.vue +++ b/packages/sdks/vue-sdk/example/components/MyUserProfile.vue @@ -13,7 +13,7 @@ const onLogout = () => (window.location.href = '/login'); diff --git a/packages/sdks/vue-sdk/example/router.ts b/packages/sdks/vue-sdk/example/router.ts index bba0fe603..14691125a 100644 --- a/packages/sdks/vue-sdk/example/router.ts +++ b/packages/sdks/vue-sdk/example/router.ts @@ -7,6 +7,7 @@ import ManageAudit from './components/ManageAudit.vue'; import ManageRoles from './components/ManageRoles.vue'; import ManageUsers from './components/ManageUsers.vue'; import MyUserProfile from './components/MyUserProfile.vue'; +import MyApplicationsPortal from './components/MyApplicationsPortal.vue'; const router = createRouter({ history: createWebHistory(), @@ -20,16 +21,16 @@ const router = createRouter({ }, // Alternative method to guard route implemented in the beforeEach bellow: /* - beforeEnter: async (to, from, next) => { - // alternative method to guard route - const isAuthenticated = await routeGuard(); - if (!isAuthenticated) { - next({ name: 'login' }); - } else { - next(); - } - } - */ + beforeEnter: async (to, from, next) => { + // alternative method to guard route + const isAuthenticated = await routeGuard(); + if (!isAuthenticated) { + next({ name: 'login' }); + } else { + next(); + } + } + */ // alternative method to guard route implemented in the beforeEach bellow: // beforeEnter: routeGuard }, @@ -63,6 +64,11 @@ const router = createRouter({ name: 'user-profile', component: MyUserProfile, }, + { + path: '/applications-portal', + name: 'applications-portal', + component: MyApplicationsPortal, + }, ], }); diff --git a/packages/sdks/vue-sdk/package.json b/packages/sdks/vue-sdk/package.json index 1d589c96c..8aba92c31 100644 --- a/packages/sdks/vue-sdk/package.json +++ b/packages/sdks/vue-sdk/package.json @@ -41,6 +41,7 @@ "@descope/role-management-widget": "workspace:*", "@descope/user-management-widget": "workspace:*", "@descope/user-profile-widget": "workspace:*", + "@descope/applications-portal-widget": "workspace:*", "@descope/web-component": "workspace:*", "@descope/web-js-sdk": "workspace:*", "@descope/core-js-sdk": "workspace:*" diff --git a/packages/sdks/vue-sdk/src/ApplicationsPortal.vue b/packages/sdks/vue-sdk/src/ApplicationsPortal.vue new file mode 100644 index 000000000..1cab7fc4a --- /dev/null +++ b/packages/sdks/vue-sdk/src/ApplicationsPortal.vue @@ -0,0 +1,33 @@ + + + + diff --git a/packages/sdks/vue-sdk/src/index.ts b/packages/sdks/vue-sdk/src/index.ts index 9961eba86..2bcf94ff2 100644 --- a/packages/sdks/vue-sdk/src/index.ts +++ b/packages/sdks/vue-sdk/src/index.ts @@ -4,6 +4,7 @@ export { default as RoleManagement } from './RoleManagement.vue'; export { default as AccessKeyManagement } from './AccessKeyManagement.vue'; export { default as AuditManagement } from './AuditManagement.vue'; export { default as UserProfile } from './UserProfile.vue'; +export { default as ApplicationsPortal } from './ApplicationsPortal.vue'; export { useDescope, useSession, useUser } from './hooks'; export { default, routeGuard, getSdk } from './plugin'; export { diff --git a/packages/sdks/vue-sdk/tests/ApplicationsPortal.test.ts b/packages/sdks/vue-sdk/tests/ApplicationsPortal.test.ts new file mode 100644 index 000000000..bdc5314be --- /dev/null +++ b/packages/sdks/vue-sdk/tests/ApplicationsPortal.test.ts @@ -0,0 +1,42 @@ +import { shallowMount, mount } from '@vue/test-utils'; +import ApplicationsPortal from '../src/ApplicationsPortal.vue'; + +jest.mock('../src/hooks', () => ({ + useOptions: () => ({ projectId: 'project1', baseUrl: 'baseUrl' }), + useDescope: () => ({ httpClient: { hooks: { afterRequest: jest.fn() } } }), + useUser: () => ({}), + useSession: () => ({}), +})); + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +globalThis.Response = class {}; + +describe('ApplicationsPortal.vue', () => { + it('renders the widget', () => { + const wrapper = shallowMount(ApplicationsPortal, { + props: { widgetId: 'widget1' }, + }); + expect(wrapper.find('descope-applications-portal-widget').exists()).toBe( + true, + ); + }); + + it('renders a widget with the correct props', () => { + const wrapper = mount(ApplicationsPortal, { + props: { + widgetId: 'widget1', + theme: 'test-theme', + locale: 'test-locale', + debug: true, + }, + }); + + const descopeWc = wrapper.find('descope-applications-portal-widget'); + expect(descopeWc.exists()).toBe(true); + expect(descopeWc.attributes('project-id')).toBe('project1'); + expect(descopeWc.attributes('base-url')).toBe('baseUrl'); + expect(descopeWc.attributes('theme')).toBe('test-theme'); + expect(descopeWc.attributes('widget-id')).toBe('widget1'); + expect(descopeWc.attributes('debug')).toBe('true'); + }); +}); diff --git a/packages/sdks/web-component/src/lib/descope-wc/index.ts b/packages/sdks/web-component/src/lib/descope-wc/index.ts index e20dc3905..cf61d85ef 100644 --- a/packages/sdks/web-component/src/lib/descope-wc/index.ts +++ b/packages/sdks/web-component/src/lib/descope-wc/index.ts @@ -9,4 +9,5 @@ if (!customElements.get('descope-wc')) { export default DescopeWc; export type ILogger = Partial; + export type { AutoFocusOptions, ThemeOptions } from '../types'; diff --git a/packages/widgets/applications-portal-widget/src/lib/widget/api/sdk/mocks.ts b/packages/widgets/applications-portal-widget/src/lib/widget/api/sdk/mocks.ts index 5b24965b2..bc610d2d7 100644 --- a/packages/widgets/applications-portal-widget/src/lib/widget/api/sdk/mocks.ts +++ b/packages/widgets/applications-portal-widget/src/lib/widget/api/sdk/mocks.ts @@ -34,7 +34,7 @@ const load: () => Promise<{ apps: SSOApplication[] }> = async () => idpInitiatedUrl: 'http://idpInitiatedURL2.com', }, }, - ] + ], }); }); diff --git a/packages/widgets/applications-portal-widget/src/lib/widget/mixins/initMixin/initComponentsMixins/initWidgetRootMixin.ts b/packages/widgets/applications-portal-widget/src/lib/widget/mixins/initMixin/initComponentsMixins/initWidgetRootMixin.ts index ec812ee94..525fc64a7 100644 --- a/packages/widgets/applications-portal-widget/src/lib/widget/mixins/initMixin/initComponentsMixins/initWidgetRootMixin.ts +++ b/packages/widgets/applications-portal-widget/src/lib/widget/mixins/initMixin/initComponentsMixins/initWidgetRootMixin.ts @@ -44,7 +44,10 @@ export const initWidgetRootMixin = createSingletonMixin( async init() { await super.init?.(); - const [template] = await Promise.all([this.#initWidgetRoot(), this.actions.loadSSOApps()]); + const [template] = await Promise.all([ + this.#initWidgetRoot(), + this.actions.loadSSOApps(), + ]); // we want to render the template only after the data was fetched // so we won't show the apps-list empty state until the data is loaded this.#renderTemplate(template); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd3aa5e6a..57f587071 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -207,7 +207,7 @@ importers: version: 6.1.0(rollup@4.13.0)(typescript@5.4.5) rollup-plugin-esbuild: specifier: ^6.0.0 - version: 6.1.1(esbuild@0.23.1)(rollup@4.13.0) + version: 6.1.1(esbuild@0.24.0)(rollup@4.13.0) rollup-plugin-inject-process-env: specifier: ^1.3.1 version: 1.3.1 @@ -216,7 +216,7 @@ importers: version: 2.0.5 ts-jest: specifier: ^29.0.0 - version: 29.1.2(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.2(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@20.14.9)(typescript@5.4.5) @@ -339,7 +339,7 @@ importers: version: 6.1.0(rollup@4.13.0)(typescript@5.4.5) rollup-plugin-esbuild: specifier: ^6.0.0 - version: 6.1.1(esbuild@0.23.1)(rollup@4.13.0) + version: 6.1.1(esbuild@0.24.0)(rollup@4.13.0) rollup-plugin-inject-process-env: specifier: ^1.3.1 version: 1.3.1 @@ -348,7 +348,7 @@ importers: version: 2.0.5 ts-jest: specifier: ^29.0.0 - version: 29.1.2(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.2(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@20.14.9)(typescript@5.4.5) @@ -492,7 +492,7 @@ importers: version: 6.1.0(rollup@4.13.0)(typescript@5.4.5) rollup-plugin-esbuild: specifier: ^6.0.0 - version: 6.1.1(esbuild@0.23.1)(rollup@4.13.0) + version: 6.1.1(esbuild@0.24.0)(rollup@4.13.0) rollup-plugin-inject-process-env: specifier: ^1.3.1 version: 1.3.1 @@ -501,7 +501,7 @@ importers: version: 2.0.5 ts-jest: specifier: ^29.0.0 - version: 29.1.2(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.2(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@20.14.9)(typescript@5.4.5) @@ -516,6 +516,9 @@ importers: '@descope/access-key-management-widget': specifier: workspace:* version: link:../../widgets/access-key-management-widget + '@descope/applications-portal-widget': + specifier: workspace:* + version: link:../../widgets/applications-portal-widget '@descope/audit-management-widget': specifier: workspace:* version: link:../../widgets/audit-management-widget @@ -902,10 +905,10 @@ importers: version: 3.1.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2) + version: 29.7.0(@types/node@22.7.4)(ts-node@10.9.2) jest-config: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2) + version: 29.7.0(@types/node@22.7.4)(ts-node@10.9.2) jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 @@ -962,7 +965,7 @@ importers: version: 0.7.0(rollup@2.79.1) ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.7.1)(@types/node@22.5.5)(typescript@5.4.5) + version: 10.9.2(@swc/core@1.7.1)(@types/node@22.7.4)(typescript@5.4.5) typescript: specifier: ^5.0.2 version: 5.4.5 @@ -971,7 +974,7 @@ importers: dependencies: '@descope/nextjs-sdk': specifier: file:../.. - version: file:packages/sdks/nextjs-sdk(@types/react@18.3.6)(next@13.5.3)(react@18.3.1) + version: file:packages/sdks/nextjs-sdk(@types/react@18.3.10)(next@13.5.3)(react@18.3.1) next: specifier: ^13.5.3 version: 13.5.3(@babel/core@7.25.2)(react-dom@18.3.1)(react@18.3.1) @@ -986,7 +989,7 @@ importers: dependencies: '@descope/nextjs-sdk': specifier: file:../.. - version: file:packages/sdks/nextjs-sdk(@types/react@18.3.6)(next@13.5.3)(react@18.3.1) + version: file:packages/sdks/nextjs-sdk(@types/react@18.3.10)(next@13.5.3)(react@18.3.1) next: specifier: 13.5.3 version: 13.5.3(@babel/core@7.25.2)(react-dom@18.3.1)(react@18.3.1) @@ -1002,6 +1005,9 @@ importers: '@descope/access-key-management-widget': specifier: workspace:* version: link:../../widgets/access-key-management-widget + '@descope/applications-portal-widget': + specifier: workspace:* + version: link:../../widgets/applications-portal-widget '@descope/audit-management-widget': specifier: workspace:* version: link:../../widgets/audit-management-widget @@ -1224,6 +1230,9 @@ importers: '@descope/access-key-management-widget': specifier: workspace:* version: link:../../widgets/access-key-management-widget + '@descope/applications-portal-widget': + specifier: workspace:* + version: link:../../widgets/applications-portal-widget '@descope/audit-management-widget': specifier: workspace:* version: link:../../widgets/audit-management-widget @@ -1275,7 +1284,7 @@ importers: version: 5.0.8(@vue/cli-service@5.0.8)(@vue/vue3-jest@27.0.0)(jest@29.7.0)(ts-jest@27.1.5) '@vue/cli-service': specifier: ~5.0.0 - version: 5.0.8(@vue/compiler-sfc@3.5.6)(prettier@2.8.8)(vue@3.4.31) + version: 5.0.8(@vue/compiler-sfc@3.5.10)(prettier@2.8.8)(vue@3.4.31) '@vue/eslint-config-typescript': specifier: ^9.1.0 version: 9.1.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(eslint-plugin-vue@8.7.1)(eslint@7.32.0)(typescript@5.4.5) @@ -1347,7 +1356,7 @@ importers: version: 0.34.1(rollup@2.79.1)(typescript@5.4.5) rollup-plugin-vue: specifier: ^6.0.0 - version: 6.0.0(@vue/compiler-sfc@3.5.6) + version: 6.0.0(@vue/compiler-sfc@3.5.10) ts-jest: specifier: ^27.0.4 version: 27.1.5(@babel/core@7.25.2)(@types/jest@27.5.2)(babel-jest@27.5.1)(jest@29.7.0)(typescript@5.4.5) @@ -1420,7 +1429,7 @@ importers: version: 8.57.0 eslint-config-airbnb: specifier: 19.0.4 - version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.36.1)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.0)(eslint@8.57.0) eslint-config-airbnb-typescript: specifier: 18.0.0 version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0)(@typescript-eslint/parser@7.18.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) @@ -1504,7 +1513,7 @@ importers: version: 1.0.2 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@20.14.9)(typescript@5.4.5) @@ -1640,7 +1649,7 @@ importers: version: 6.1.0(rollup@4.14.3)(typescript@5.4.5) rollup-plugin-esbuild: specifier: ^6.0.0 - version: 6.1.1(esbuild@0.23.1)(rollup@4.14.3) + version: 6.1.1(esbuild@0.24.0)(rollup@4.14.3) rollup-plugin-inject-process-env: specifier: ^1.3.1 version: 1.3.1 @@ -1649,7 +1658,7 @@ importers: version: 2.0.5 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@20.14.9)(typescript@5.4.5) @@ -1736,7 +1745,7 @@ importers: version: 8.57.0 eslint-config-airbnb: specifier: 19.0.4 - version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.36.1)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.0)(eslint@8.57.0) eslint-config-airbnb-typescript: specifier: 18.0.0 version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0)(@typescript-eslint/parser@7.18.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) @@ -1829,7 +1838,7 @@ importers: version: 1.0.2 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@20.14.9)(typescript@5.4.5) @@ -1914,7 +1923,7 @@ importers: version: 8.57.0 eslint-config-airbnb: specifier: 19.0.4 - version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.36.1)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.0)(eslint@8.57.0) eslint-config-airbnb-typescript: specifier: 18.0.0 version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0)(@typescript-eslint/parser@7.18.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) @@ -2092,7 +2101,7 @@ importers: version: 8.57.0 eslint-config-airbnb: specifier: 19.0.4 - version: 19.0.4(eslint-plugin-import@2.28.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.36.1)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.28.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.0)(eslint@8.57.0) eslint-config-airbnb-typescript: specifier: 17.1.0 version: 17.1.0(@typescript-eslint/eslint-plugin@6.21.0)(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.28.1)(eslint@8.57.0) @@ -2185,7 +2194,7 @@ importers: version: 1.0.2 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@20.14.9)(typescript@5.4.5) @@ -2270,7 +2279,7 @@ importers: version: 8.57.0 eslint-config-airbnb: specifier: 19.0.4 - version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.36.1)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.0)(eslint@8.57.0) eslint-config-airbnb-typescript: specifier: 18.0.0 version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0)(@typescript-eslint/parser@7.18.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) @@ -2363,7 +2372,7 @@ importers: version: 1.0.2 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@20.14.9)(typescript@5.4.5) @@ -2451,7 +2460,7 @@ importers: version: 8.57.0 eslint-config-airbnb: specifier: 19.0.4 - version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.36.1)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.0)(eslint@8.57.0) eslint-config-airbnb-typescript: specifier: 18.0.0 version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0)(@typescript-eslint/parser@7.18.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) @@ -2544,7 +2553,7 @@ importers: version: 1.0.2 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@20.14.9)(typescript@5.4.5) @@ -2636,7 +2645,7 @@ importers: version: 8.57.0 eslint-config-airbnb: specifier: 19.0.4 - version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.36.1)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.0)(eslint@8.57.0) eslint-config-airbnb-typescript: specifier: 18.0.0 version: 18.0.0(@typescript-eslint/eslint-plugin@7.18.0)(@typescript-eslint/parser@7.18.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) @@ -2729,7 +2738,7 @@ importers: version: 1.0.2 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) ts-node: specifier: 10.9.2 version: 10.9.2(@types/node@20.14.9)(typescript@5.4.5) @@ -7435,8 +7444,8 @@ packages: jwt-decode: 3.1.2 dev: false - /@descope/core-js-sdk@2.25.0: - resolution: {integrity: sha512-jgGGWgEUq2dgyVQu6hebFm0WQTimNOr0gOXYXvKx25POQBwthLkHdhhG8MR3UM8xmnz8NAw2AxIr1DDcpAIYDQ==} + /@descope/core-js-sdk@2.25.1: + resolution: {integrity: sha512-qncEFoHHiz4dyOdgLvegReMmHB6BVvHculS1Z+qgFyikYeuh7LjZop3uQphU8RDr9o404FtiGaddzedq3U9Llg==} requiresBuild: true dependencies: jwt-decode: 4.0.0 @@ -7488,11 +7497,11 @@ packages: - supports-color dev: true - /@descope/web-js-sdk@1.16.5: - resolution: {integrity: sha512-heMUtGA/IYm5f2/vB/msjUlgJ2L8+F373s0hg1yYsQuDBMJ7OhShweKx4qqFTIOStq9Hvj7H9jrg+uO/TqUrTw==} + /@descope/web-js-sdk@1.16.6: + resolution: {integrity: sha512-Mxv9A7IN8zz0J0ey/wJJr/ZRUapNAI9PxLwOd3v5SmVbE8/cumocOM8P/BZBZxFDKhpN1OpMLsEhrdtGoxczhg==} requiresBuild: true dependencies: - '@descope/core-js-sdk': 2.25.0 + '@descope/core-js-sdk': 2.25.1 '@fingerprintjs/fingerprintjs-pro': 3.9.9 js-cookie: 3.0.5 jwt-decode: 4.0.0 @@ -7542,8 +7551,8 @@ packages: dev: true optional: true - /@esbuild/aix-ppc64@0.23.1: - resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + /@esbuild/aix-ppc64@0.24.0: + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -7578,8 +7587,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.23.1: - resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + /@esbuild/android-arm64@0.24.0: + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -7614,8 +7623,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.23.1: - resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + /@esbuild/android-arm@0.24.0: + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -7650,8 +7659,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.23.1: - resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + /@esbuild/android-x64@0.24.0: + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -7686,8 +7695,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.23.1: - resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + /@esbuild/darwin-arm64@0.24.0: + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -7722,8 +7731,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.23.1: - resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + /@esbuild/darwin-x64@0.24.0: + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -7758,8 +7767,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.23.1: - resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + /@esbuild/freebsd-arm64@0.24.0: + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -7794,8 +7803,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.23.1: - resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + /@esbuild/freebsd-x64@0.24.0: + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -7830,8 +7839,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.23.1: - resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + /@esbuild/linux-arm64@0.24.0: + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -7866,8 +7875,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.23.1: - resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + /@esbuild/linux-arm@0.24.0: + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -7902,8 +7911,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.23.1: - resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + /@esbuild/linux-ia32@0.24.0: + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -7938,8 +7947,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.23.1: - resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + /@esbuild/linux-loong64@0.24.0: + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -7974,8 +7983,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.23.1: - resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + /@esbuild/linux-mips64el@0.24.0: + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -8010,8 +8019,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.23.1: - resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + /@esbuild/linux-ppc64@0.24.0: + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -8046,8 +8055,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.23.1: - resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + /@esbuild/linux-riscv64@0.24.0: + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -8082,8 +8091,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.23.1: - resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + /@esbuild/linux-s390x@0.24.0: + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -8118,8 +8127,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.23.1: - resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + /@esbuild/linux-x64@0.24.0: + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -8154,8 +8163,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.23.1: - resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + /@esbuild/netbsd-x64@0.24.0: + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -8163,8 +8172,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-arm64@0.23.1: - resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + /@esbuild/openbsd-arm64@0.24.0: + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -8199,8 +8208,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.23.1: - resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + /@esbuild/openbsd-x64@0.24.0: + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -8235,8 +8244,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.23.1: - resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + /@esbuild/sunos-x64@0.24.0: + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -8271,8 +8280,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.23.1: - resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + /@esbuild/win32-arm64@0.24.0: + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -8307,8 +8316,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.23.1: - resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + /@esbuild/win32-ia32@0.24.0: + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -8343,8 +8352,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.23.1: - resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + /@esbuild/win32-x64@0.24.0: + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -9509,14 +9518,6 @@ packages: - nx dev: true - /@nrwl/devkit@19.3.2(nx@19.3.2): - resolution: {integrity: sha512-n3tFalVPUk1HAJ2VYNnF34yzB9j2+6swFUi4Y92PxD1vN7vrIXnNeaTx2qcee7JDjBpiJ7Zn0KLg2jwiH6hNwA==} - dependencies: - '@nx/devkit': 19.3.2(nx@19.3.2) - transitivePeerDependencies: - - nx - dev: true - /@nrwl/devkit@19.3.2(nx@19.5.2): resolution: {integrity: sha512-n3tFalVPUk1HAJ2VYNnF34yzB9j2+6swFUi4Y92PxD1vN7vrIXnNeaTx2qcee7JDjBpiJ7Zn0KLg2jwiH6hNwA==} dependencies: @@ -9714,7 +9715,7 @@ packages: peerDependencies: nx: '>= 17 <= 20' dependencies: - '@nrwl/devkit': 19.3.2(nx@19.3.2) + '@nrwl/devkit': 19.3.2(nx@19.5.2) ejs: 3.1.9 enquirer: 2.3.6 ignore: 5.3.2 @@ -11504,7 +11505,7 @@ packages: chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 - jest: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2) + jest: 29.7.0(@types/node@22.7.4)(ts-node@10.9.2) lodash: 4.17.21 redent: 3.0.0 dev: true @@ -11889,8 +11890,8 @@ packages: undici-types: 5.26.5 dev: true - /@types/node@22.5.5: - resolution: {integrity: sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==} + /@types/node@22.7.4: + resolution: {integrity: sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==} dependencies: undici-types: 6.19.8 dev: true @@ -11905,6 +11906,11 @@ packages: /@types/prop-types@15.7.12: resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + dev: true + + /@types/prop-types@15.7.13: + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + dev: false /@types/qs@6.9.15: resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} @@ -11941,19 +11947,19 @@ packages: '@types/react': 18.3.3 dev: true - /@types/react@18.3.3: - resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + /@types/react@18.3.10: + resolution: {integrity: sha512-02sAAlBnP39JgXwkAq3PeU9DVaaGpZyF3MGcC0MKgQVkZor5IiiDAipVaxQHtDJAmO4GIy/rVBy/LzVj76Cyqg==} dependencies: - '@types/prop-types': 15.7.12 + '@types/prop-types': 15.7.13 csstype: 3.1.3 - dev: true + dev: false - /@types/react@18.3.6: - resolution: {integrity: sha512-CnGaRYNu2iZlkGXGrOYtdg5mLK8neySj0woZ4e2wF/eli2E6Sazmq5X+Nrj6OBrrFVQfJWTUFeqAzoRhWQXYvg==} + /@types/react@18.3.3: + resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 - dev: false + dev: true /@types/relateurl@0.2.29: resolution: {integrity: sha512-QSvevZ+IRww2ldtfv1QskYsqVVVwCKQf1XbwtcyyoRvLIQzfyPhj/C+3+PKzSDRdiyejaiLgnq//XTkleorpLg==} @@ -13791,7 +13797,7 @@ packages: dependencies: '@babel/core': 7.24.7 '@vue/babel-preset-app': 5.0.8(@babel/core@7.24.7)(vue@3.4.31) - '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.6)(prettier@2.8.8)(vue@3.4.31) + '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.10)(prettier@2.8.8)(vue@3.4.31) '@vue/cli-shared-utils': 5.0.8 babel-loader: 8.3.0(@babel/core@7.24.7)(webpack@5.93.0) thread-loader: 3.0.4(webpack@5.93.0) @@ -13813,7 +13819,7 @@ packages: '@vue/cli-service': ^3.0.0 || ^4.0.0 || ^5.0.0-0 eslint: '>=7.5.0' dependencies: - '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.6)(prettier@2.8.8)(vue@3.4.31) + '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.10)(prettier@2.8.8)(vue@3.4.31) '@vue/cli-shared-utils': 5.0.8 eslint: 7.32.0 eslint-webpack-plugin: 3.2.0(eslint@7.32.0)(webpack@5.93.0) @@ -13833,7 +13839,7 @@ packages: peerDependencies: '@vue/cli-service': ^3.0.0 || ^4.0.0 || ^5.0.0-0 dependencies: - '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.6)(prettier@2.8.8)(vue@3.4.31) + '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.10)(prettier@2.8.8)(vue@3.4.31) '@vue/cli-shared-utils': 5.0.8 transitivePeerDependencies: - encoding @@ -13855,7 +13861,7 @@ packages: dependencies: '@babel/core': 7.24.7 '@types/webpack-env': 1.18.5 - '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.6)(prettier@2.8.8)(vue@3.4.31) + '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.10)(prettier@2.8.8)(vue@3.4.31) '@vue/cli-shared-utils': 5.0.8 babel-loader: 8.3.0(@babel/core@7.24.7)(webpack@5.93.0) fork-ts-checker-webpack-plugin: 6.5.3(eslint@7.32.0)(typescript@5.4.5)(webpack@5.93.0) @@ -13894,7 +13900,7 @@ packages: '@babel/core': 7.24.7 '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.7) '@types/jest': 27.5.2 - '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.6)(prettier@2.8.8)(vue@3.4.31) + '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.10)(prettier@2.8.8)(vue@3.4.31) '@vue/cli-shared-utils': 5.0.8 '@vue/vue3-jest': 27.0.0(@babel/core@7.25.2)(babel-jest@27.5.1)(jest@29.7.0)(ts-jest@27.1.5)(typescript@5.4.5)(vue@3.4.31) babel-jest: 27.5.1(@babel/core@7.24.7) @@ -13914,10 +13920,10 @@ packages: peerDependencies: '@vue/cli-service': ^3.0.0 || ^4.0.0 || ^5.0.0-0 dependencies: - '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.6)(prettier@2.8.8)(vue@3.4.31) + '@vue/cli-service': 5.0.8(@vue/compiler-sfc@3.5.10)(prettier@2.8.8)(vue@3.4.31) dev: true - /@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.6)(prettier@2.8.8)(vue@3.4.31): + /@vue/cli-service@5.0.8(@vue/compiler-sfc@3.5.10)(prettier@2.8.8)(vue@3.4.31): resolution: {integrity: sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==} engines: {node: ^12.0.0 || >= 14.0.0} hasBin: true @@ -13957,7 +13963,7 @@ packages: '@vue/cli-plugin-vuex': 5.0.8(@vue/cli-service@5.0.8) '@vue/cli-shared-utils': 5.0.8 '@vue/component-compiler-utils': 3.3.0 - '@vue/vue-loader-v15': /vue-loader@15.11.1(@vue/compiler-sfc@3.5.6)(css-loader@6.11.0)(prettier@2.8.8)(webpack@5.93.0) + '@vue/vue-loader-v15': /vue-loader@15.11.1(@vue/compiler-sfc@3.5.10)(css-loader@6.11.0)(prettier@2.8.8)(webpack@5.93.0) '@vue/web-component-wrapper': 1.3.0 acorn: 8.11.3 acorn-walk: 8.2.0 @@ -13994,7 +14000,7 @@ packages: ssri: 8.0.1 terser-webpack-plugin: 5.3.10(webpack@5.93.0) thread-loader: 3.0.4(webpack@5.93.0) - vue-loader: 17.4.2(@vue/compiler-sfc@3.5.6)(vue@3.4.31)(webpack@5.93.0) + vue-loader: 17.4.2(@vue/compiler-sfc@3.5.10)(vue@3.4.31)(webpack@5.93.0) vue-style-loader: 4.1.3 webpack: 5.93.0 webpack-bundle-analyzer: 4.10.2 @@ -14103,11 +14109,11 @@ packages: source-map-js: 1.2.0 dev: true - /@vue/compiler-core@3.5.6: - resolution: {integrity: sha512-r+gNu6K4lrvaQLQGmf+1gc41p3FO2OUJyWmNqaIITaJU6YFiV5PtQSFZt8jfztYyARwqhoCayjprC7KMvT3nRA==} + /@vue/compiler-core@3.5.10: + resolution: {integrity: sha512-iXWlk+Cg/ag7gLvY0SfVucU8Kh2CjysYZjhhP70w9qI4MvSox4frrP+vDGvtQuzIcgD8+sxM6lZvCtdxGunTAA==} dependencies: '@babel/parser': 7.25.6 - '@vue/shared': 3.5.6 + '@vue/shared': 3.5.10 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 @@ -14120,11 +14126,11 @@ packages: '@vue/shared': 3.4.31 dev: true - /@vue/compiler-dom@3.5.6: - resolution: {integrity: sha512-xRXqxDrIqK8v8sSScpistyYH0qYqxakpsIvqMD2e5sV/PXQ1mTwtXp4k42yHK06KXxKSmitop9e45Ui/3BrTEw==} + /@vue/compiler-dom@3.5.10: + resolution: {integrity: sha512-DyxHC6qPcktwYGKOIy3XqnHRrrXyWR2u91AjP+nLkADko380srsC2DC3s7Y1Rk6YfOlxOlvEQKa9XXmLI+W4ZA==} dependencies: - '@vue/compiler-core': 3.5.6 - '@vue/shared': 3.5.6 + '@vue/compiler-core': 3.5.10 + '@vue/shared': 3.5.10 dev: true /@vue/compiler-sfc@3.4.31: @@ -14141,14 +14147,14 @@ packages: source-map-js: 1.2.0 dev: true - /@vue/compiler-sfc@3.5.6: - resolution: {integrity: sha512-pjWJ8Kj9TDHlbF5LywjVso+BIxCY5wVOLhkEXRhuCHDxPFIeX1zaFefKs8RYoHvkSMqRWt93a0f2gNJVJixHwg==} + /@vue/compiler-sfc@3.5.10: + resolution: {integrity: sha512-to8E1BgpakV7224ZCm8gz1ZRSyjNCAWEplwFMWKlzCdP9DkMKhRRwt0WkCjY7jkzi/Vz3xgbpeig5Pnbly4Tow==} dependencies: '@babel/parser': 7.25.6 - '@vue/compiler-core': 3.5.6 - '@vue/compiler-dom': 3.5.6 - '@vue/compiler-ssr': 3.5.6 - '@vue/shared': 3.5.6 + '@vue/compiler-core': 3.5.10 + '@vue/compiler-dom': 3.5.10 + '@vue/compiler-ssr': 3.5.10 + '@vue/shared': 3.5.10 estree-walker: 2.0.2 magic-string: 0.30.11 postcss: 8.4.47 @@ -14162,11 +14168,11 @@ packages: '@vue/shared': 3.4.31 dev: true - /@vue/compiler-ssr@3.5.6: - resolution: {integrity: sha512-VpWbaZrEOCqnmqjE83xdwegtr5qO/2OPUC6veWgvNqTJ3bYysz6vY3VqMuOijubuUYPRpG3OOKIh9TD0Stxb9A==} + /@vue/compiler-ssr@3.5.10: + resolution: {integrity: sha512-hxP4Y3KImqdtyUKXDRSxKSRkSm1H9fCvhojEYrnaoWhE4w/y8vwWhnosJoPPe2AXm5sU7CSbYYAgkt2ZPhDz+A==} dependencies: - '@vue/compiler-dom': 3.5.6 - '@vue/shared': 3.5.6 + '@vue/compiler-dom': 3.5.10 + '@vue/shared': 3.5.10 dev: true /@vue/component-compiler-utils@3.3.0: @@ -14301,8 +14307,8 @@ packages: resolution: {integrity: sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA==} dev: true - /@vue/shared@3.5.6: - resolution: {integrity: sha512-eidH0HInnL39z6wAt6SFIwBrvGOpDWsDxlw3rCgo1B+CQ1781WzQUSU3YjxgdkcJo9Q8S6LmXTkvI+cLHGkQfA==} + /@vue/shared@3.5.10: + resolution: {integrity: sha512-VkkBhU97Ki+XJ0xvl4C9YJsIZ2uIlQ7HqPpZOS3m9VCvmROPaChZU6DexdMJqvz9tbgG+4EtFVrSuailUq5KGQ==} dev: true /@vue/test-utils@2.4.6: @@ -16907,7 +16913,7 @@ packages: - ts-node dev: true - /create-jest@29.7.0(@types/node@22.5.5)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@22.7.4)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -16916,7 +16922,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@22.7.4)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -18129,36 +18135,36 @@ packages: '@esbuild/win32-x64': 0.21.5 dev: true - /esbuild@0.23.1: - resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + /esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} engines: {node: '>=18'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/aix-ppc64': 0.23.1 - '@esbuild/android-arm': 0.23.1 - '@esbuild/android-arm64': 0.23.1 - '@esbuild/android-x64': 0.23.1 - '@esbuild/darwin-arm64': 0.23.1 - '@esbuild/darwin-x64': 0.23.1 - '@esbuild/freebsd-arm64': 0.23.1 - '@esbuild/freebsd-x64': 0.23.1 - '@esbuild/linux-arm': 0.23.1 - '@esbuild/linux-arm64': 0.23.1 - '@esbuild/linux-ia32': 0.23.1 - '@esbuild/linux-loong64': 0.23.1 - '@esbuild/linux-mips64el': 0.23.1 - '@esbuild/linux-ppc64': 0.23.1 - '@esbuild/linux-riscv64': 0.23.1 - '@esbuild/linux-s390x': 0.23.1 - '@esbuild/linux-x64': 0.23.1 - '@esbuild/netbsd-x64': 0.23.1 - '@esbuild/openbsd-arm64': 0.23.1 - '@esbuild/openbsd-x64': 0.23.1 - '@esbuild/sunos-x64': 0.23.1 - '@esbuild/win32-arm64': 0.23.1 - '@esbuild/win32-ia32': 0.23.1 - '@esbuild/win32-x64': 0.23.1 + '@esbuild/aix-ppc64': 0.24.0 + '@esbuild/android-arm': 0.24.0 + '@esbuild/android-arm64': 0.24.0 + '@esbuild/android-x64': 0.24.0 + '@esbuild/darwin-arm64': 0.24.0 + '@esbuild/darwin-x64': 0.24.0 + '@esbuild/freebsd-arm64': 0.24.0 + '@esbuild/freebsd-x64': 0.24.0 + '@esbuild/linux-arm': 0.24.0 + '@esbuild/linux-arm64': 0.24.0 + '@esbuild/linux-ia32': 0.24.0 + '@esbuild/linux-loong64': 0.24.0 + '@esbuild/linux-mips64el': 0.24.0 + '@esbuild/linux-ppc64': 0.24.0 + '@esbuild/linux-riscv64': 0.24.0 + '@esbuild/linux-s390x': 0.24.0 + '@esbuild/linux-x64': 0.24.0 + '@esbuild/netbsd-x64': 0.24.0 + '@esbuild/openbsd-arm64': 0.24.0 + '@esbuild/openbsd-x64': 0.24.0 + '@esbuild/sunos-x64': 0.24.0 + '@esbuild/win32-arm64': 0.24.0 + '@esbuild/win32-ia32': 0.24.0 + '@esbuild/win32-x64': 0.24.0 dev: true /escalade@3.1.2: @@ -18311,7 +18317,7 @@ packages: - eslint-plugin-import dev: true - /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.28.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.36.1)(eslint@8.57.0): + /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.28.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.0)(eslint@8.57.0): resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -18325,7 +18331,7 @@ packages: eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.28.1)(eslint@8.57.0) eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.0) - eslint-plugin-react: 7.36.1(eslint@8.57.0) + eslint-plugin-react: 7.37.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) object.assign: 4.1.5 object.entries: 1.1.8 @@ -18351,7 +18357,7 @@ packages: object.entries: 1.1.8 dev: true - /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.36.1)(eslint@8.57.0): + /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.0)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.0)(eslint@8.57.0): resolution: {integrity: sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==} engines: {node: ^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -18365,7 +18371,7 @@ packages: eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.0) - eslint-plugin-react: 7.36.1(eslint@8.57.0) + eslint-plugin-react: 7.37.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) object.assign: 4.1.5 object.entries: 1.1.8 @@ -18999,7 +19005,7 @@ packages: '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.56.0)(typescript@5.4.5) '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.4.5) eslint: 8.56.0 - jest: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2) + jest: 29.7.0(@types/node@22.7.4)(ts-node@10.9.2) transitivePeerDependencies: - supports-color - typescript @@ -19442,8 +19448,8 @@ packages: string.prototype.matchall: 4.0.11 dev: true - /eslint-plugin-react@7.36.1(eslint@8.57.0): - resolution: {integrity: sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==} + /eslint-plugin-react@7.37.0(eslint@8.57.0): + resolution: {integrity: sha512-IHBePmfWH5lKhJnJ7WB1V+v/GolbB0rjS8XYVCSQCZKaQCAUhMoVoOEn1Ef8Z8Wf0a7l8KTJvuZg5/e4qrZ6nA==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 @@ -21988,7 +21994,7 @@ packages: - ts-node dev: true - /jest-cli@29.7.0(@types/node@22.5.5)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@22.7.4)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -22002,10 +22008,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@22.7.4)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@22.7.4)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.1 @@ -22180,7 +22186,7 @@ packages: - supports-color dev: true - /jest-config@29.7.0(@types/node@22.5.5)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@22.7.4)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -22195,7 +22201,7 @@ packages: '@babel/core': 7.24.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.5.5 + '@types/node': 22.7.4 babel-jest: 29.7.0(@babel/core@7.24.7) chalk: 4.1.2 ci-info: 3.8.0 @@ -22215,7 +22221,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@swc/core@1.7.1)(@types/node@22.5.5)(typescript@5.4.5) + ts-node: 10.9.2(@swc/core@1.7.1)(@types/node@22.7.4)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -22466,10 +22472,10 @@ packages: jest-environment-jsdom: 29.7.0 jest-util: 29.7.0 pretty-format: 29.7.0 - ts-jest: 29.1.5(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@4.9.3) + ts-jest: 29.1.5(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@4.9.3) typescript: 4.9.3 optionalDependencies: - esbuild: 0.23.1 + esbuild: 0.24.0 transitivePeerDependencies: - '@babel/core' - '@jest/transform' @@ -22818,7 +22824,7 @@ packages: - ts-node dev: true - /jest@29.7.0(@types/node@22.5.5)(ts-node@10.9.2): + /jest@29.7.0(@types/node@22.7.4)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -22831,7 +22837,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@22.5.5)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@22.7.4)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -26878,7 +26884,7 @@ packages: - supports-color dev: true - /rollup-plugin-esbuild@6.1.1(esbuild@0.23.1)(rollup@4.13.0): + /rollup-plugin-esbuild@6.1.1(esbuild@0.24.0)(rollup@4.13.0): resolution: {integrity: sha512-CehMY9FAqJD5OUaE/Mi1r5z0kNeYxItmRO2zG4Qnv2qWKF09J2lTy5GUzjJR354ZPrLkCj4fiBN41lo8PzBUhw==} engines: {node: '>=14.18.0'} peerDependencies: @@ -26888,14 +26894,14 @@ packages: '@rollup/pluginutils': 5.1.0(rollup@4.13.0) debug: 4.3.4 es-module-lexer: 1.4.2 - esbuild: 0.23.1 + esbuild: 0.24.0 get-tsconfig: 4.7.3 rollup: 4.13.0 transitivePeerDependencies: - supports-color dev: true - /rollup-plugin-esbuild@6.1.1(esbuild@0.23.1)(rollup@4.14.3): + /rollup-plugin-esbuild@6.1.1(esbuild@0.24.0)(rollup@4.14.3): resolution: {integrity: sha512-CehMY9FAqJD5OUaE/Mi1r5z0kNeYxItmRO2zG4Qnv2qWKF09J2lTy5GUzjJR354ZPrLkCj4fiBN41lo8PzBUhw==} engines: {node: '>=14.18.0'} peerDependencies: @@ -26905,7 +26911,7 @@ packages: '@rollup/pluginutils': 5.1.0(rollup@4.14.3) debug: 4.3.4 es-module-lexer: 1.4.2 - esbuild: 0.23.1 + esbuild: 0.24.0 get-tsconfig: 4.7.3 rollup: 4.14.3 transitivePeerDependencies: @@ -27055,12 +27061,12 @@ packages: typescript: 5.4.5 dev: true - /rollup-plugin-vue@6.0.0(@vue/compiler-sfc@3.5.6): + /rollup-plugin-vue@6.0.0(@vue/compiler-sfc@3.5.10): resolution: {integrity: sha512-oVvUd84d5u73M2HYM3XsMDLtZRIA/tw2U0dmHlXU2UWP5JARYHzh/U9vcxaN/x/9MrepY7VH3pHFeOhrWpxs/Q==} peerDependencies: '@vue/compiler-sfc': '*' dependencies: - '@vue/compiler-sfc': 3.5.6 + '@vue/compiler-sfc': 3.5.10 debug: 4.3.4 hash-sum: 2.0.0 rollup-pluginutils: 2.8.2 @@ -28643,7 +28649,7 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-jest@29.1.2(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@5.4.5): + /ts-jest@29.1.2(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5): resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -28666,7 +28672,7 @@ packages: dependencies: '@babel/core': 7.25.2 bs-logger: 0.2.6 - esbuild: 0.23.1 + esbuild: 0.24.0 fast-json-stable-stringify: 2.1.0 jest: 29.7.0(@types/node@20.14.9)(ts-node@10.9.2) jest-util: 29.7.0 @@ -28754,7 +28760,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@29.1.5(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@4.9.3): + /ts-jest@29.1.5(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@4.9.3): resolution: {integrity: sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -28780,7 +28786,7 @@ packages: dependencies: '@babel/core': 7.25.2 bs-logger: 0.2.6 - esbuild: 0.23.1 + esbuild: 0.24.0 fast-json-stable-stringify: 2.1.0 jest: 29.7.0(@types/node@20.14.9)(ts-node@10.9.2) jest-util: 29.7.0 @@ -28792,7 +28798,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@29.1.5(@babel/core@7.25.2)(esbuild@0.23.1)(jest@29.7.0)(typescript@5.4.5): + /ts-jest@29.1.5(@babel/core@7.25.2)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5): resolution: {integrity: sha512-UuClSYxM7byvvYfyWdFI+/2UxMmwNyJb0NPkZPQE2hew3RurV7l7zURgOHAd/1I1ZdPpe3GUsXNXAcN8TFKSIg==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -28818,7 +28824,7 @@ packages: dependencies: '@babel/core': 7.25.2 bs-logger: 0.2.6 - esbuild: 0.23.1 + esbuild: 0.24.0 fast-json-stable-stringify: 2.1.0 jest: 29.7.0(@types/node@20.14.9)(ts-node@10.9.2) jest-util: 29.7.0 @@ -29013,7 +29019,7 @@ packages: yn: 3.1.1 dev: true - /ts-node@10.9.2(@swc/core@1.7.1)(@types/node@22.5.5)(typescript@5.4.5): + /ts-node@10.9.2(@swc/core@1.7.1)(@types/node@22.7.4)(typescript@5.4.5): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -29033,7 +29039,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 22.5.5 + '@types/node': 22.7.4 acorn: 8.12.1 acorn-walk: 8.2.0 arg: 4.1.3 @@ -29640,7 +29646,7 @@ packages: resolution: {integrity: sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==} dev: true - /vue-loader@15.11.1(@vue/compiler-sfc@3.5.6)(css-loader@6.11.0)(prettier@2.8.8)(webpack@5.93.0): + /vue-loader@15.11.1(@vue/compiler-sfc@3.5.10)(css-loader@6.11.0)(prettier@2.8.8)(webpack@5.93.0): resolution: {integrity: sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==} peerDependencies: '@vue/compiler-sfc': ^3.0.8 @@ -29659,7 +29665,7 @@ packages: vue-template-compiler: optional: true dependencies: - '@vue/compiler-sfc': 3.5.6 + '@vue/compiler-sfc': 3.5.10 '@vue/component-compiler-utils': 3.3.0 css-loader: 6.11.0(webpack@5.93.0) hash-sum: 1.0.2 @@ -29724,7 +29730,7 @@ packages: - whiskers dev: true - /vue-loader@17.4.2(@vue/compiler-sfc@3.5.6)(vue@3.4.31)(webpack@5.93.0): + /vue-loader@17.4.2(@vue/compiler-sfc@3.5.10)(vue@3.4.31)(webpack@5.93.0): resolution: {integrity: sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==} peerDependencies: '@vue/compiler-sfc': '*' @@ -29736,7 +29742,7 @@ packages: vue: optional: true dependencies: - '@vue/compiler-sfc': 3.5.6 + '@vue/compiler-sfc': 3.5.10 chalk: 4.1.2 hash-sum: 2.0.0 vue: 3.4.31(typescript@5.4.5) @@ -30592,7 +30598,7 @@ packages: tslib: 2.6.3 dev: true - file:packages/sdks/nextjs-sdk(@types/react@18.3.6)(next@13.5.3)(react@18.3.1): + file:packages/sdks/nextjs-sdk(@types/react@18.3.10)(next@13.5.3)(react@18.3.1): resolution: {directory: packages/sdks/nextjs-sdk, type: directory} id: file:packages/sdks/nextjs-sdk name: '@descope/nextjs-sdk' @@ -30606,11 +30612,11 @@ packages: '@descope/node-sdk': 1.6.9 '@descope/react-sdk': link:packages/sdks/react-sdk '@descope/web-component': link:packages/sdks/web-component - '@types/react': 18.3.6 + '@types/react': 18.3.10 next: 13.5.3(@babel/core@7.25.2)(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@descope/web-js-sdk': 1.16.5 + '@descope/web-js-sdk': 1.16.6 transitivePeerDependencies: - encoding dev: false