diff --git a/.github/workflows/release-next-react-sdk.yml b/.github/workflows/release-next-react-sdk.yml index d1664b21c..bcc5127b4 100644 --- a/.github/workflows/release-next-react-sdk.yml +++ b/.github/workflows/release-next-react-sdk.yml @@ -4,7 +4,6 @@ on: push: branches: - main - - fix/react-sdk-next env: NODE_VERSION: 18.10.0 @@ -49,7 +48,8 @@ jobs: - name: Check if should run id: 'check' run: | - if $(npx nx show projects --affected --plain | grep -q "react-sdk"); then + # Check if the affected projects include "react-sdk" or "web-component" since the last commit + if $(npx nx show projects --affected --base HEAD~1 --head HEAD | grep -q "react-sdk\|web-component"); then echo "run=true" >> $GITHUB_OUTPUT else echo "run=false" >> $GITHUB_OUTPUT diff --git a/packages/libs/sdk-mixins/CHANGELOG.md b/packages/libs/sdk-mixins/CHANGELOG.md index f129481d0..e4d50a4dd 100644 --- a/packages/libs/sdk-mixins/CHANGELOG.md +++ b/packages/libs/sdk-mixins/CHANGELOG.md @@ -2,6 +2,20 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [0.6.0](https://github.com/descope/descope-js/compare/sdk-mixins-0.5.2...sdk-mixins-0.6.0) (2024-12-24) + + +### Features + +* Content from base url ([#871](https://github.com/descope/descope-js/issues/871)) RELEASE ([f3e437e](https://github.com/descope/descope-js/commit/f3e437e0793507627b157317063fe39174600c80)) + +## [0.5.2](https://github.com/descope/descope-js/compare/sdk-mixins-0.5.1...sdk-mixins-0.5.2) (2024-12-22) + + +### Bug Fixes + +* support react-19 ([#860](https://github.com/descope/descope-js/issues/860)) RELEASE ([efd6833](https://github.com/descope/descope-js/commit/efd6833dfefc854b7f461606084234603f2444e0)) + ## [0.5.1](https://github.com/descope/descope-js/compare/sdk-mixins-0.5.0...sdk-mixins-0.5.1) (2024-12-18) ## [0.5.0](https://github.com/descope/descope-js/compare/sdk-mixins-0.4.0...sdk-mixins-0.5.0) (2024-12-04) diff --git a/packages/libs/sdk-mixins/jest.config.cjs b/packages/libs/sdk-mixins/jest.config.cjs index fdd6efcd1..e03b3ce37 100644 --- a/packages/libs/sdk-mixins/jest.config.cjs +++ b/packages/libs/sdk-mixins/jest.config.cjs @@ -9,10 +9,10 @@ module.exports = { collectCoverageFrom: ['src/**/*.{js,jsx,ts,tsx}'], coverageThreshold: { global: { - branches: 80, - functions: 93.5, - lines: 93.5, - statements: 93.5, + branches: 12, + functions: 17, + lines: 36, + statements: 36, }, }, // A set of global variables that need to be available in all test environments diff --git a/packages/libs/sdk-mixins/package.json b/packages/libs/sdk-mixins/package.json index d55f74428..dcd334322 100644 --- a/packages/libs/sdk-mixins/package.json +++ b/packages/libs/sdk-mixins/package.json @@ -1,6 +1,6 @@ { "name": "@descope/sdk-mixins", - "version": "0.5.1", + "version": "0.6.0", "author": "Descope Team ", "homepage": "https://github.com/descope/sdk-mixins", "bugs": { @@ -21,7 +21,7 @@ "default": "./dist/cjs/index.js" } }, - "./themeMixin": { + "./theme-mixin": { "import": { "types": "./dist/index.d.ts", "default": "./dist/esm/mixins/themeMixin/index.js" @@ -30,13 +30,23 @@ "types": "./dist/index.d.ts", "default": "./dist/cjs/mixins/themeMixin/index.js" } + }, + "./static-resources-mixin": { + "import": { + "types": "./dist/index.d.ts", + "default": "./dist/esm/mixins/staticResourcesMixin/index.js" + }, + "require": { + "types": "./dist/index.d.ts", + "default": "./dist/cjs/mixins/staticResourcesMixin/index.js" + } } }, "type": "module", "description": "Descope JavaScript SDK mixins", "scripts": { "build": "rimraf dist && rollup -c", - "test": "echo no tests yet", + "test": "jest", "lint": "eslint '+(src|test|examples)/**/*.ts'" }, "license": "MIT", diff --git a/packages/libs/sdk-mixins/rollup.config.mjs b/packages/libs/sdk-mixins/rollup.config.mjs index d46c5c77e..9ea822e27 100644 --- a/packages/libs/sdk-mixins/rollup.config.mjs +++ b/packages/libs/sdk-mixins/rollup.config.mjs @@ -10,7 +10,11 @@ import noEmit from 'rollup-plugin-no-emit'; import packageJson from './package.json' assert { type: 'json' }; -const input = ['./src/index.ts', './src/mixins/themeMixin/index.ts']; +const input = [ + './src/index.ts', + './src/mixins/themeMixin/index.ts', + './src/mixins/staticResourcesMixin/index.ts', +]; const external = (id) => !id.startsWith('\0') && !id.startsWith('.') && !id.startsWith('/'); diff --git a/packages/libs/sdk-mixins/src/mixins/createValidateAttributesMixin/createValidateAttributesMixin.ts b/packages/libs/sdk-mixins/src/mixins/createValidateAttributesMixin/createValidateAttributesMixin.ts index b53fd99e6..68b21baf1 100644 --- a/packages/libs/sdk-mixins/src/mixins/createValidateAttributesMixin/createValidateAttributesMixin.ts +++ b/packages/libs/sdk-mixins/src/mixins/createValidateAttributesMixin/createValidateAttributesMixin.ts @@ -33,12 +33,11 @@ const createValidateAttributesMixin = } async init() { - await super.init?.(); - // check attributes initial values mappingsNames.forEach((attr) => this.#handleError(attr, this.getAttribute(attr)), ); + await super.init?.(); } }; }; diff --git a/packages/libs/sdk-mixins/src/mixins/loggerMixin/loggerMixin.ts b/packages/libs/sdk-mixins/src/mixins/loggerMixin/loggerMixin.ts index 0338fb594..70f270bd5 100644 --- a/packages/libs/sdk-mixins/src/mixins/loggerMixin/loggerMixin.ts +++ b/packages/libs/sdk-mixins/src/mixins/loggerMixin/loggerMixin.ts @@ -21,8 +21,8 @@ export const loggerMixin = createSingletonMixin( }, {}) as Logger; } - set logger(logger: Partial) { - this.#logger = this.#wrapLogger(logger); + set logger(logger: Partial | undefined) { + this.#logger = this.#wrapLogger(logger || console); } get logger(): Logger { diff --git a/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/fetchWithFallbacks.ts b/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/fetchWithFallbacks.ts new file mode 100644 index 000000000..3509ef7c9 --- /dev/null +++ b/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/fetchWithFallbacks.ts @@ -0,0 +1,40 @@ +import { Logger } from '../loggerMixin'; + +type FetchParams = Parameters; +const notLastMsgSuffix = 'Trying the next fallback URL...'; + +export const fetchWithFallbacks = async ( + fallbacks: FetchParams['0'] | FetchParams['0'][], + init: FetchParams['1'], + { + logger, + onSuccess, + }: { logger?: Logger; onSuccess?: (urlIndex: number) => void }, +): ReturnType => { + const fallbacksArr = Array.isArray(fallbacks) ? fallbacks : [fallbacks]; + + for (let index = 0; index < fallbacksArr.length; index++) { + const url = fallbacksArr[index]; + const isLast = index === fallbacksArr.length - 1; + + try { + const res = await fetch(url.toString(), init); + if (res.ok) { + onSuccess?.(index); + return res; + } + + const errMsg = `Error fetching URL ${url} [${res.status}]`; + + if (isLast) throw new Error(errMsg); + + logger?.debug(`${errMsg}. ${notLastMsgSuffix}`); + } catch (e) { + const errMsg = `Error fetching URL ${url} [${e.message}]`; + + if (isLast) throw new Error(errMsg); + + logger?.debug(`${errMsg}. ${notLastMsgSuffix}`); + } + } +}; diff --git a/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/staticResourcesMixin.ts b/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/staticResourcesMixin.ts index 676156433..a84cb2936 100644 --- a/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/staticResourcesMixin.ts +++ b/packages/libs/sdk-mixins/src/mixins/staticResourcesMixin/staticResourcesMixin.ts @@ -7,24 +7,29 @@ import { } from './constants'; import { projectIdMixin } from '../projectIdMixin'; import { baseUrlMixin } from '../baseUrlMixin'; +import { fetchWithFallbacks } from './fetchWithFallbacks'; type Format = 'text' | 'json'; +type CustomUrl = URL & { baseUrl: string }; + export function getResourceUrl({ projectId, filename, assetsFolder = ASSETS_FOLDER, - baseUrl, + baseUrl = BASE_CONTENT_URL, }: { projectId: string; filename: string; assetsFolder?: string; baseUrl?: string; }) { - const url = new URL(OVERRIDE_CONTENT_URL || baseUrl || BASE_CONTENT_URL); + const url: CustomUrl = new URL(baseUrl) as any; url.pathname = pathJoin(url.pathname, projectId, assetsFolder, filename); + // we want to keep the baseUrl so we can use it later + url.baseUrl = baseUrl; - return url.toString(); + return url; } export const staticResourcesMixin = createSingletonMixin( @@ -35,7 +40,56 @@ export const staticResourcesMixin = createSingletonMixin( baseUrlMixin, )(superclass); + // the logic should be as following: + // if there is a local storage override, use it + // otherwise, if there is a base-static-url attribute, use it + // otherwise, try to use base-url, and check if it's working + // if it's working, use it + // if not, use the default content url return class StaticResourcesMixinClass extends BaseClass { + #lastBaseUrl?: string; + #workingBaseUrl?: string; + + #getResourceUrls(filename: string): CustomUrl[] | CustomUrl { + const overrideUrl = OVERRIDE_CONTENT_URL || this.baseStaticUrl; + + if (overrideUrl) { + return getResourceUrl({ + projectId: this.projectId, + filename, + baseUrl: overrideUrl, + }); + } + + const isBaseUrlUpdated = this.#lastBaseUrl !== this.baseUrl; + const shouldFallbackFetch = isBaseUrlUpdated && !!this.baseUrl; + + // if the base url has changed, reset the working base url + if (isBaseUrlUpdated) { + this.#lastBaseUrl = this.baseUrl; + this.#workingBaseUrl = undefined; + } + + const resourceUrl = getResourceUrl({ + projectId: this.projectId, + filename, + baseUrl: this.#workingBaseUrl, + }); + + // if there is no reason to check the baseUrl, generate the resource url according to the priority + if (!shouldFallbackFetch) { + return resourceUrl; + } + + const resourceUrlFromBaseUrl = getResourceUrl({ + projectId: this.projectId, + filename, + baseUrl: this.baseUrl + '/pages', + }); + + return [resourceUrlFromBaseUrl, resourceUrl]; + } + async fetchStaticResource( filename: string, format: F, @@ -43,22 +97,33 @@ export const staticResourcesMixin = createSingletonMixin( body: F extends 'json' ? Record : string; headers: Record; }> { - const resourceUrl = getResourceUrl({ - projectId: this.projectId, - filename, - baseUrl: this.baseStaticUrl, - }); - const res = await fetch(resourceUrl, { cache: 'default' }); - if (!res.ok) { - this.logger.error( - `Error fetching URL ${resourceUrl} [${res.status}]`, + const resourceUrls = this.#getResourceUrls(filename); + + // if there are multiple resource urls, it means that there are fallbacks, + // if one of the options (which is not the last) is working, we want to keep using it by updating the workingBaseUrl + const onSuccess = !Array.isArray(resourceUrls) + ? null + : (index: number) => { + if (index !== resourceUrls.length - 1) { + const { baseUrl } = resourceUrls[index]; + this.#workingBaseUrl = baseUrl; + } + }; + + try { + const res = await fetchWithFallbacks( + resourceUrls, + { cache: 'default' }, + { logger: this.logger, onSuccess }, ); - } - return { - body: await res[format](), - headers: Object.fromEntries(res.headers.entries()), - }; + return { + body: await res[format](), + headers: Object.fromEntries(res.headers.entries()), + }; + } catch (e) { + this.logger.error(e.message); + } } get baseStaticUrl() { diff --git a/packages/libs/sdk-mixins/test/staticResourcesMixin.test.ts b/packages/libs/sdk-mixins/test/staticResourcesMixin.test.ts new file mode 100644 index 000000000..b4b474b99 --- /dev/null +++ b/packages/libs/sdk-mixins/test/staticResourcesMixin.test.ts @@ -0,0 +1,149 @@ +import { staticResourcesMixin } from '../src'; + +const createResponse = async ({ + body, + statusCode = 200, +}: { + body: string; + statusCode: number; +}) => ({ + json: async () => JSON.parse(body), + text: async () => body, + ok: statusCode < 400, +}); + +const createMixin = (config: Record) => { + const MixinClass = staticResourcesMixin( + class { + getAttribute(attr: string) { + return config[attr]; + } + } as any, + ); + + const mixin = new MixinClass(); + + mixin.logger = { debug: jest.fn() }; + + return mixin; +}; + +describe('staticResourcesMixin', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + it('should fetch resource from static base url', async () => { + globalThis.fetch = jest + .fn() + .mockResolvedValue(createResponse({ body: '{}', statusCode: 400 })); + const mixin = createMixin({ + 'base-static-url': 'https://static.example.com/pages', + 'project-id': '123', + 'base-url': 'https://example.com', + }); + await mixin.fetchStaticResource('file', 'json'); + + expect(globalThis.fetch).toHaveBeenCalledWith( + 'https://static.example.com/pages/123/v2-beta/file', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(1); + }); + + it('should try to fetch resource from base url if there is no static content', async () => { + globalThis.fetch = jest + .fn() + .mockResolvedValue(createResponse({ body: '{}', statusCode: 400 })); + const mixin = createMixin({ + 'project-id': '123', + 'base-url': 'https://example.com', + }); + await mixin.fetchStaticResource('file', 'json'); + + expect(globalThis.fetch).toHaveBeenNthCalledWith( + 1, + 'https://example.com/pages/123/v2-beta/file', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenNthCalledWith( + 2, + 'https://static.descope.com/pages/123/v2-beta/file', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(2); + }); + + it('should fetch resource from default url if there is no base url and base static url', async () => { + globalThis.fetch = jest + .fn() + .mockResolvedValue(createResponse({ body: '{}', statusCode: 400 })); + const mixin = createMixin({ 'project-id': '123' }); + await mixin.fetchStaticResource('file', 'json'); + + expect(globalThis.fetch).toHaveBeenCalledWith( + 'https://static.descope.com/pages/123/v2-beta/file', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(1); + }); + + it('should keep fetching content from base url in case it was ok', async () => { + globalThis.fetch = jest + .fn() + .mockResolvedValueOnce(createResponse({ body: '{}', statusCode: 200 })); + const mixin = createMixin({ + 'project-id': '123', + 'base-url': 'https://example.com', + }); + await mixin.fetchStaticResource('file', 'json'); + + expect(globalThis.fetch).toHaveBeenNthCalledWith( + 1, + 'https://example.com/pages/123/v2-beta/file', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(1); + + globalThis.fetch = jest + .fn() + .mockResolvedValueOnce(createResponse({ body: '{}', statusCode: 400 })); + + await mixin.fetchStaticResource('file2', 'json'); + expect(globalThis.fetch).toHaveBeenNthCalledWith( + 1, + 'https://example.com/pages/123/v2-beta/file2', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(1); + }); + + it('should not keep fetching content from base url in case it was not ok', async () => { + globalThis.fetch = jest + .fn() + .mockResolvedValueOnce(createResponse({ body: '{}', statusCode: 400 })); + const mixin = createMixin({ + 'project-id': '123', + 'base-url': 'https://example.com', + }); + await mixin.fetchStaticResource('file', 'json'); + + expect(globalThis.fetch).toHaveBeenNthCalledWith( + 1, + 'https://example.com/pages/123/v2-beta/file', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(2); + + globalThis.fetch = jest + .fn() + .mockResolvedValueOnce(createResponse({ body: '{}', statusCode: 400 })); + + await mixin.fetchStaticResource('file2', 'json'); + expect(globalThis.fetch).toHaveBeenNthCalledWith( + 1, + 'https://static.descope.com/pages/123/v2-beta/file2', + expect.any(Object), + ); + expect(globalThis.fetch).toHaveBeenCalledTimes(1); + }); +}); diff --git a/packages/sdks/angular-sdk/CHANGELOG.md b/packages/sdks/angular-sdk/CHANGELOG.md index 05323c27d..b8e7c98c5 100644 --- a/packages/sdks/angular-sdk/CHANGELOG.md +++ b/packages/sdks/angular-sdk/CHANGELOG.md @@ -2,6 +2,34 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [0.7.9](https://github.com/descope/descope-js/compare/angular-sdk-0.7.8...angular-sdk-0.7.9) (2024-12-24) + +### Dependency Updates + +* `access-key-management-widget` updated to version `0.3.5` +* `audit-management-widget` updated to version `0.2.9` +* `role-management-widget` updated to version `0.2.9` +* `user-management-widget` updated to version `0.6.3` +* `user-profile-widget` updated to version `0.2.5` +* `applications-portal-widget` updated to version `0.2.9` +* `web-component` updated to version `3.32.0` +## [0.7.8](https://github.com/descope/descope-js/compare/angular-sdk-0.7.7...angular-sdk-0.7.8) (2024-12-22) + +### Dependency Updates + +* `access-key-management-widget` updated to version `0.3.4` +* `audit-management-widget` updated to version `0.2.8` +* `role-management-widget` updated to version `0.2.8` +* `user-management-widget` updated to version `0.6.2` +* `user-profile-widget` updated to version `0.2.4` +* `applications-portal-widget` updated to version `0.2.8` +* `web-component` updated to version `3.31.3` +* `web-js-sdk` updated to version `1.23.1` + +### Bug Fixes + +* multiple flows on the same page ([#868](https://github.com/descope/descope-js/issues/868)) ([c4182b3](https://github.com/descope/descope-js/commit/c4182b3f3a282a45edab2a6d6b1a669721782096)) + ## [0.7.7](https://github.com/descope/descope-js/compare/angular-sdk-0.7.6...angular-sdk-0.7.7) (2024-12-18) ### Dependency Updates diff --git a/packages/sdks/angular-sdk/package.json b/packages/sdks/angular-sdk/package.json index 83aa95ac7..ea7f22e3c 100644 --- a/packages/sdks/angular-sdk/package.json +++ b/packages/sdks/angular-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@descope/angular-sdk", - "version": "0.7.7", + "version": "0.7.9", "peerDependencies": { "@angular/common": ">=16.0.0", "@angular/core": ">=16.0.0" diff --git a/packages/sdks/nextjs-sdk/CHANGELOG.md b/packages/sdks/nextjs-sdk/CHANGELOG.md index c48710573..a571c4aff 100644 --- a/packages/sdks/nextjs-sdk/CHANGELOG.md +++ b/packages/sdks/nextjs-sdk/CHANGELOG.md @@ -2,6 +2,36 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [0.3.18](https://github.com/descope/descope-js/compare/nextjs-sdk-0.3.17...nextjs-sdk-0.3.18) (2024-12-25) + + +### Bug Fixes + +* run pnpm ([#875](https://github.com/descope/descope-js/issues/875)) RELEASE ([523b86a](https://github.com/descope/descope-js/commit/523b86a55c9c1f7da0b225f2e48d3bbd77a32e8b)) + +## [0.3.17](https://github.com/descope/descope-js/compare/nextjs-sdk-0.3.16...nextjs-sdk-0.3.17) (2024-12-24) + +### Dependency Updates + +* `react-sdk` updated to version `2.3.9` +* `web-component` updated to version `3.32.0` +## [0.3.16](https://github.com/descope/descope-js/compare/nextjs-sdk-0.3.15...nextjs-sdk-0.3.16) (2024-12-24) + +### Dependency Updates + +* `react-sdk` updated to version `2.3.8` +## [0.3.15](https://github.com/descope/descope-js/compare/nextjs-sdk-0.3.14...nextjs-sdk-0.3.15) (2024-12-22) + +### Dependency Updates + +* `web-js-sdk` updated to version `1.23.1` +* `react-sdk` updated to version `2.3.7` +* `web-component` updated to version `3.31.3` + +### Bug Fixes + +* support react-19 ([#860](https://github.com/descope/descope-js/issues/860)) RELEASE ([efd6833](https://github.com/descope/descope-js/commit/efd6833dfefc854b7f461606084234603f2444e0)) + ## [0.3.14](https://github.com/descope/descope-js/compare/nextjs-sdk-0.3.13...nextjs-sdk-0.3.14) (2024-12-18) ### Dependency Updates diff --git a/packages/sdks/nextjs-sdk/examples/app-router/next-env.d.ts b/packages/sdks/nextjs-sdk/examples/app-router/next-env.d.ts index 4f11a03dc..40c3d6809 100644 --- a/packages/sdks/nextjs-sdk/examples/app-router/next-env.d.ts +++ b/packages/sdks/nextjs-sdk/examples/app-router/next-env.d.ts @@ -2,4 +2,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/packages/sdks/nextjs-sdk/package.json b/packages/sdks/nextjs-sdk/package.json index ab9025b48..66914cb1e 100644 --- a/packages/sdks/nextjs-sdk/package.json +++ b/packages/sdks/nextjs-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@descope/nextjs-sdk", - "version": "0.3.14", + "version": "0.3.18", "description": "Descope NextJS SDK", "author": "Descope Team ", "homepage": "https://github.com/descope/descope-js", @@ -89,9 +89,6 @@ "@testing-library/jest-dom": "^6.4.2", "@testing-library/react": "^14.2.1", "@types/jest": "^29.5.12", - "@types/react": "18.3.3", - "@types/react-dom": "18.2.18", - "@types/react-router-dom": "^5.3.3", "babel": "^6.23.0", "babel-jest": "^27.5.1", "eslint": "8.56.0", diff --git a/packages/sdks/nextjs-sdk/src/client/index.ts b/packages/sdks/nextjs-sdk/src/client/index.ts index 607ecfa07..1326b8696 100644 --- a/packages/sdks/nextjs-sdk/src/client/index.ts +++ b/packages/sdks/nextjs-sdk/src/client/index.ts @@ -1,6 +1,6 @@ 'use client'; -// export most of the things from the SDK +// Export most of the things from the SDK // we don't need to export AuthProvider, as it is exported from the root index.ts export { useDescope, diff --git a/packages/sdks/nextjs-sdk/src/server/session.ts b/packages/sdks/nextjs-sdk/src/server/session.ts index 8b763b07f..aa358ce9f 100644 --- a/packages/sdks/nextjs-sdk/src/server/session.ts +++ b/packages/sdks/nextjs-sdk/src/server/session.ts @@ -3,6 +3,10 @@ import { NextApiRequest } from 'next'; import { headers } from 'next/headers'; import { DESCOPE_SESSION_HEADER } from './constants'; +// This type is declared to allow simpler migration to Next.15 +// It will be removed in the future +type HeaderTypes = Awaited>; + const extractSession = ( descopeSession?: string ): AuthenticationInfo | undefined => { @@ -21,7 +25,10 @@ const extractSession = ( // returns the session token if it exists in the headers // This function require middleware export const session = (): AuthenticationInfo | undefined => { - const sessionHeader = headers()?.get(DESCOPE_SESSION_HEADER); + // from Next.js 15, headers() returns a Promise + // It can still be used synchronously to facilitate migration + const reqHeaders = headers() as never as HeaderTypes; + const sessionHeader = reqHeaders.get(DESCOPE_SESSION_HEADER); return extractSession(sessionHeader); }; diff --git a/packages/sdks/react-sdk/CHANGELOG.md b/packages/sdks/react-sdk/CHANGELOG.md index c2bb3203d..3ae7093f6 100644 --- a/packages/sdks/react-sdk/CHANGELOG.md +++ b/packages/sdks/react-sdk/CHANGELOG.md @@ -2,6 +2,43 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [2.3.9](https://github.com/descope/descope-js/compare/react-sdk-2.3.8...react-sdk-2.3.9) (2024-12-24) + +### Dependency Updates + +* `access-key-management-widget` updated to version `0.3.5` +* `audit-management-widget` updated to version `0.2.9` +* `role-management-widget` updated to version `0.2.9` +* `user-management-widget` updated to version `0.6.3` +* `user-profile-widget` updated to version `0.2.5` +* `applications-portal-widget` updated to version `0.2.9` +* `web-component` updated to version `3.32.0` +## [2.3.8](https://github.com/descope/descope-js/compare/react-sdk-2.3.7...react-sdk-2.3.8) (2024-12-24) + + +### Bug Fixes + +* ReactSDK publish-next affected workspaces ([#872](https://github.com/descope/descope-js/issues/872)) ([f6c19b5](https://github.com/descope/descope-js/commit/f6c19b5d5d2e2e05f05ae9aea1c7c12fc40c4145)) +* update affected projects check in release workflow ([#874](https://github.com/descope/descope-js/issues/874)) ([7311ea7](https://github.com/descope/descope-js/commit/7311ea713c5cdfdbd158a99179624482d9a61995)) + +## [2.3.7](https://github.com/descope/descope-js/compare/react-sdk-2.3.6...react-sdk-2.3.7) (2024-12-22) + +### Dependency Updates + +* `access-key-management-widget` updated to version `0.3.4` +* `audit-management-widget` updated to version `0.2.8` +* `role-management-widget` updated to version `0.2.8` +* `user-management-widget` updated to version `0.6.2` +* `user-profile-widget` updated to version `0.2.4` +* `applications-portal-widget` updated to version `0.2.8` +* `web-component` updated to version `3.31.3` +* `web-js-sdk` updated to version `1.23.1` + +### Bug Fixes + +* multiple flows on the same page ([#868](https://github.com/descope/descope-js/issues/868)) ([c4182b3](https://github.com/descope/descope-js/commit/c4182b3f3a282a45edab2a6d6b1a669721782096)) +* support react-19 ([#860](https://github.com/descope/descope-js/issues/860)) RELEASE ([efd6833](https://github.com/descope/descope-js/commit/efd6833dfefc854b7f461606084234603f2444e0)) + ## [2.3.6](https://github.com/descope/descope-js/compare/react-sdk-2.3.5...react-sdk-2.3.6) (2024-12-18) ### Dependency Updates diff --git a/packages/sdks/react-sdk/README.md b/packages/sdks/react-sdk/README.md index a66071d35..dc4365e9d 100644 --- a/packages/sdks/react-sdk/README.md +++ b/packages/sdks/react-sdk/README.md @@ -99,8 +99,8 @@ const App = () => { // - "skipFirstScreen": automatically focus on the first input of each screen, except first screen // autoFocus="skipFirstScreen" - // validateOnBlur: set it to true will show input validation errors on blur, in addition to on submit - + // validateOnBlur: set it to true will show input validation errors on blur, in addition to on submit + // restartOnError: if set to true, in case of flow version mismatch, will restart the flow if the components version was not changed. Default is false // errorTransformer is a function that receives an error object and returns a string. The returned string will be displayed to the user. diff --git a/packages/sdks/react-sdk/examples/app/App.tsx b/packages/sdks/react-sdk/examples/app/App.tsx index 959cd79f6..8bdf79be3 100644 --- a/packages/sdks/react-sdk/examples/app/App.tsx +++ b/packages/sdks/react-sdk/examples/app/App.tsx @@ -38,7 +38,7 @@ const Layout = () => ( ); -const ProtectedRoute = ({ children }: { children: JSX.Element }) => { +const ProtectedRoute = ({ children }: { children: React.ReactNode }) => { const { isAuthenticated, isSessionLoading } = useSession(); if (isSessionLoading) { diff --git a/packages/sdks/react-sdk/examples/app/Login.tsx b/packages/sdks/react-sdk/examples/app/Login.tsx index d3cb1cd51..f1169551b 100644 --- a/packages/sdks/react-sdk/examples/app/Login.tsx +++ b/packages/sdks/react-sdk/examples/app/Login.tsx @@ -59,11 +59,13 @@ const Login = () => { client={{ version: '1.0.2' }} // found in context key: client.version debug={process.env.DESCOPE_DEBUG_MODE === 'true'} theme={process.env.DESCOPE_THEME as any} + styleId={process.env.DESCOPE_STYLE_ID} locale={process.env.DESCOPE_LOCALE as string} redirectUrl={process.env.DESCOPE_REDIRECT_URL} tenant={process.env.DESCOPE_TENANT_ID} telemetryKey={process.env.DESCOPE_TELEMETRY_KEY} errorTransformer={errorTransformer} + logger={console} /> )} {errorMessage && ( diff --git a/packages/sdks/react-sdk/examples/app/ManageAccessKeys.tsx b/packages/sdks/react-sdk/examples/app/ManageAccessKeys.tsx index 659785cc9..1671b75e3 100644 --- a/packages/sdks/react-sdk/examples/app/ManageAccessKeys.tsx +++ b/packages/sdks/react-sdk/examples/app/ManageAccessKeys.tsx @@ -63,11 +63,19 @@ const ManageAccessKeys = () => {

Manage My Access Keys

); diff --git a/packages/sdks/react-sdk/examples/app/ManageAudit.tsx b/packages/sdks/react-sdk/examples/app/ManageAudit.tsx index d844535cb..cecc48876 100644 --- a/packages/sdks/react-sdk/examples/app/ManageAudit.tsx +++ b/packages/sdks/react-sdk/examples/app/ManageAudit.tsx @@ -62,7 +62,11 @@ const ManageAudit = () => {

Manage Audit

); diff --git a/packages/sdks/react-sdk/examples/app/ManageRoles.tsx b/packages/sdks/react-sdk/examples/app/ManageRoles.tsx index edfa369b5..3f785a8a9 100644 --- a/packages/sdks/react-sdk/examples/app/ManageRoles.tsx +++ b/packages/sdks/react-sdk/examples/app/ManageRoles.tsx @@ -62,7 +62,11 @@ const ManageRoles = () => {

Manage Roles

); diff --git a/packages/sdks/react-sdk/examples/app/ManageUsers.tsx b/packages/sdks/react-sdk/examples/app/ManageUsers.tsx index 1a22a550c..cf47b43b9 100644 --- a/packages/sdks/react-sdk/examples/app/ManageUsers.tsx +++ b/packages/sdks/react-sdk/examples/app/ManageUsers.tsx @@ -62,7 +62,11 @@ const ManageUsers = () => {

Manage Users

); diff --git a/packages/sdks/react-sdk/examples/app/MyApplicationsPortal.tsx b/packages/sdks/react-sdk/examples/app/MyApplicationsPortal.tsx index 0ce2a6708..3b5fe55ef 100644 --- a/packages/sdks/react-sdk/examples/app/MyApplicationsPortal.tsx +++ b/packages/sdks/react-sdk/examples/app/MyApplicationsPortal.tsx @@ -60,7 +60,13 @@ const MyApplicationsPortal = () => {

Applications Portal

- + ); }; diff --git a/packages/sdks/react-sdk/examples/app/MyUserProfile.tsx b/packages/sdks/react-sdk/examples/app/MyUserProfile.tsx index 0dd02675f..abdd9ff07 100644 --- a/packages/sdks/react-sdk/examples/app/MyUserProfile.tsx +++ b/packages/sdks/react-sdk/examples/app/MyUserProfile.tsx @@ -62,6 +62,10 @@ const MyUserProfile = () => {

My Profile

{ window.location.href = '/login'; }} diff --git a/packages/sdks/react-sdk/package.json b/packages/sdks/react-sdk/package.json index 8daeccf46..1fbbc550f 100644 --- a/packages/sdks/react-sdk/package.json +++ b/packages/sdks/react-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@descope/react-sdk", - "version": "2.3.6", + "version": "2.3.9", "description": "Descope React SDK", "author": "Descope Team ", "homepage": "https://github.com/descope/descope-js", @@ -50,7 +50,7 @@ "leaks": "bash ./scripts/gitleaks/gitleaks.sh", "lint": "eslint '+(src|examples)/**/*.+(ts|tsx)' --fix", "prepublishOnly": "npm run build", - "start": "npm run build && rollup -c rollup.config.app.mjs -w", + "start": "npx nx run react-sdk:build && rollup -c rollup.config.app.mjs -w", "test": "jest" }, "lint-staged": { @@ -59,6 +59,7 @@ ] }, "dependencies": { + "@descope/sdk-helpers": "workspace:*", "@descope/access-key-management-widget": "workspace:*", "@descope/audit-management-widget": "workspace:*", "@descope/role-management-widget": "workspace:*", diff --git a/packages/sdks/react-sdk/src/components/AccessKeyManagement.tsx b/packages/sdks/react-sdk/src/components/AccessKeyManagement.tsx index 8e62a4b0c..18b4b9d8d 100644 --- a/packages/sdks/react-sdk/src/components/AccessKeyManagement.tsx +++ b/packages/sdks/react-sdk/src/components/AccessKeyManagement.tsx @@ -1,40 +1,17 @@ -import React, { - lazy, - Suspense, - useEffect, - useImperativeHandle, - useState, -} from 'react'; +import React, { lazy, Suspense, useImperativeHandle, useState } from 'react'; import Context from '../hooks/Context'; import { AccessKeyManagementProps } from '../types'; +import withPropsMapping from './withPropsMapping'; // web-component code uses browser API, but can be used in SSR apps, hence the lazy loading const AccessKeyManagementWC = lazy(async () => { await import('@descope/access-key-management-widget'); return { - default: ({ - projectId, - baseUrl, - baseStaticUrl, - innerRef, - tenant, - widgetId, - theme, - debug, - styleId, - }) => ( - + default: withPropsMapping( + React.forwardRef((props, ref) => ( + + )), ), }; }); @@ -42,32 +19,32 @@ const AccessKeyManagementWC = lazy(async () => { const AccessKeyManagement = React.forwardRef< HTMLElement, AccessKeyManagementProps ->(({ logger, tenant, theme, debug, widgetId }, ref) => { +>(({ logger, tenant, theme, debug, widgetId, styleId }, 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 ( - - + - + ); }); diff --git a/packages/sdks/react-sdk/src/components/ApplicationsPortal.tsx b/packages/sdks/react-sdk/src/components/ApplicationsPortal.tsx index 0ff55c0df..ff54c2317 100644 --- a/packages/sdks/react-sdk/src/components/ApplicationsPortal.tsx +++ b/packages/sdks/react-sdk/src/components/ApplicationsPortal.tsx @@ -1,38 +1,17 @@ -import React, { - lazy, - Suspense, - useEffect, - useImperativeHandle, - useState, -} from 'react'; +import React, { lazy, Suspense, useImperativeHandle, useState } from 'react'; import Context from '../hooks/Context'; import { ApplicationsPortalProps } from '../types'; +import withPropsMapping from './withPropsMapping'; // 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, - styleId, - }) => ( - + default: withPropsMapping( + React.forwardRef((props, ref) => ( + + )), ), }; }); @@ -47,24 +26,24 @@ const ApplicationsPortal = React.forwardRef< const { projectId, baseUrl, baseStaticUrl } = React.useContext(Context); - useEffect(() => { - if (innerRef && logger) { - innerRef.logger = logger; - } - }, [innerRef, logger]); return ( - - + - + ); }); diff --git a/packages/sdks/react-sdk/src/components/AuditManagement.tsx b/packages/sdks/react-sdk/src/components/AuditManagement.tsx index 6361055fc..c810470bf 100644 --- a/packages/sdks/react-sdk/src/components/AuditManagement.tsx +++ b/packages/sdks/react-sdk/src/components/AuditManagement.tsx @@ -1,40 +1,17 @@ -import React, { - lazy, - Suspense, - useEffect, - useImperativeHandle, - useState, -} from 'react'; +import React, { lazy, Suspense, useImperativeHandle, useState } from 'react'; import Context from '../hooks/Context'; import { AuditManagementProps } from '../types'; +import withPropsMapping from './withPropsMapping'; // web-component code uses browser API, but can be used in SSR apps, hence the lazy loading const AuditManagementWC = lazy(async () => { await import('@descope/audit-management-widget'); return { - default: ({ - projectId, - baseUrl, - baseStaticUrl, - innerRef, - tenant, - widgetId, - theme, - debug, - styleId, - }) => ( - + default: withPropsMapping( + React.forwardRef((props, ref) => ( + + )), ), }; }); @@ -47,26 +24,25 @@ const AuditManagement = React.forwardRef( const { projectId, baseUrl, baseStaticUrl } = React.useContext(Context); - useEffect(() => { - if (innerRef && logger) { - innerRef.logger = logger; - } - }, [innerRef, logger]); - return ( - - + - + ); }, ); diff --git a/packages/sdks/react-sdk/src/components/AuthProvider/AuthProvider.tsx b/packages/sdks/react-sdk/src/components/AuthProvider/AuthProvider.tsx index ff64cfe9e..fab5cc3ca 100644 --- a/packages/sdks/react-sdk/src/components/AuthProvider/AuthProvider.tsx +++ b/packages/sdks/react-sdk/src/components/AuthProvider/AuthProvider.tsx @@ -27,7 +27,7 @@ interface IAuthProviderProps { storeLastAuthenticatedUser?: boolean; // If true, last authenticated user will not be removed after logout keepLastAuthenticatedUserAfterLogout?: boolean; - children?: JSX.Element; + children?: React.ReactNode; } const AuthProvider: FC = ({ diff --git a/packages/sdks/react-sdk/src/components/Descope.tsx b/packages/sdks/react-sdk/src/components/Descope.tsx index 48ba76500..6e2ef2b84 100644 --- a/packages/sdks/react-sdk/src/components/Descope.tsx +++ b/packages/sdks/react-sdk/src/components/Descope.tsx @@ -4,13 +4,13 @@ import React, { useCallback, useEffect, useImperativeHandle, - useMemo, useState, } from 'react'; import { baseHeaders } from '../constants'; import Context from '../hooks/Context'; import { DescopeProps } from '../types'; import { getGlobalSdk } from '../sdk'; +import withPropsMapping from './withPropsMapping'; // web-component code uses browser API, but can be used in SSR apps, hence the lazy loading const DescopeWC = lazy(async () => { @@ -40,46 +40,10 @@ const DescopeWC = lazy(async () => { }; return { - default: ({ - projectId, - flowId, - baseUrl, - baseStaticUrl, - innerRef, - tenant, - theme, - locale, - debug, - redirectUrl, - client, - form, - styleId, - autoFocus, - validateOnBlur, - autoClearError, - restartOnError, - storeLastAuthenticatedUser, - }) => ( - + default: withPropsMapping( + React.forwardRef((props, ref) => ( + + )), ), }; }); @@ -180,26 +144,6 @@ const Descope = React.forwardRef( }; }, [innerRef, onReady]); - useEffect(() => { - if (innerRef) { - innerRef.errorTransformer = errorTransformer; - } - }, [innerRef, errorTransformer]); - - useEffect(() => { - if (innerRef && logger) { - innerRef.logger = logger; - } - }, [innerRef, logger]); - - const { form: stringifiedForm, client: stringifiedClient } = useMemo( - () => ({ - form: JSON.stringify(form || {}), - client: JSON.stringify(client || {}), - }), - [form, client], - ); - return ( /** * in order to avoid redundant remounting of the WC, we are wrapping it with a form element @@ -207,34 +151,40 @@ const Descope = React.forwardRef( * it can be removed once this issue will be solved * https://bugs.chromium.org/p/chromium/issues/detail?id=1404106#c2 */ -
- - + + - - +
+ ); }, ); diff --git a/packages/sdks/react-sdk/src/components/RoleManagement.tsx b/packages/sdks/react-sdk/src/components/RoleManagement.tsx index 2dfac441a..9c91c7b7e 100644 --- a/packages/sdks/react-sdk/src/components/RoleManagement.tsx +++ b/packages/sdks/react-sdk/src/components/RoleManagement.tsx @@ -1,40 +1,17 @@ -import React, { - lazy, - Suspense, - useEffect, - useImperativeHandle, - useState, -} from 'react'; +import React, { lazy, Suspense, useImperativeHandle, useState } from 'react'; import Context from '../hooks/Context'; import { RoleManagementProps } from '../types'; +import withPropsMapping from './withPropsMapping'; // web-component code uses browser API, but can be used in SSR apps, hence the lazy loading const RoleManagementWC = lazy(async () => { await import('@descope/role-management-widget'); return { - default: ({ - projectId, - baseUrl, - baseStaticUrl, - innerRef, - tenant, - widgetId, - theme, - debug, - styleId, - }) => ( - + default: withPropsMapping( + React.forwardRef((props, ref) => ( + + )), ), }; }); @@ -47,26 +24,25 @@ const RoleManagement = React.forwardRef( const { projectId, baseUrl, baseStaticUrl } = React.useContext(Context); - useEffect(() => { - if (innerRef && logger) { - innerRef.logger = logger; - } - }, [innerRef, logger]); - return ( - - + - + ); }, ); diff --git a/packages/sdks/react-sdk/src/components/UserManagement.tsx b/packages/sdks/react-sdk/src/components/UserManagement.tsx index 56b1a7a75..831c4823b 100644 --- a/packages/sdks/react-sdk/src/components/UserManagement.tsx +++ b/packages/sdks/react-sdk/src/components/UserManagement.tsx @@ -1,40 +1,17 @@ -import React, { - lazy, - Suspense, - useEffect, - useImperativeHandle, - useState, -} from 'react'; +import React, { lazy, Suspense, useImperativeHandle, useState } from 'react'; import Context from '../hooks/Context'; import { UserManagementProps } from '../types'; +import withPropsMapping from './withPropsMapping'; // web-component code uses browser API, but can be used in SSR apps, hence the lazy loading const UserManagementWC = lazy(async () => { await import('@descope/user-management-widget'); return { - default: ({ - projectId, - baseUrl, - baseStaticUrl, - innerRef, - tenant, - widgetId, - theme, - debug, - styleId, - }) => ( - + default: withPropsMapping( + React.forwardRef((props, ref) => ( + + )), ), }; }); @@ -47,26 +24,25 @@ const UserManagement = React.forwardRef( const { projectId, baseUrl, baseStaticUrl } = React.useContext(Context); - useEffect(() => { - if (innerRef && logger) { - innerRef.logger = logger; - } - }, [innerRef, logger]); - return ( - - + - + ); }, ); diff --git a/packages/sdks/react-sdk/src/components/UserProfile.tsx b/packages/sdks/react-sdk/src/components/UserProfile.tsx index ff4ed5e39..7ee9c4059 100644 --- a/packages/sdks/react-sdk/src/components/UserProfile.tsx +++ b/packages/sdks/react-sdk/src/components/UserProfile.tsx @@ -7,32 +7,17 @@ import React, { } from 'react'; import Context from '../hooks/Context'; import { UserProfileProps } from '../types'; +import withPropsMapping from './withPropsMapping'; // web-component code uses browser API, but can be used in SSR apps, hence the lazy loading const UserProfileWC = lazy(async () => { await import('@descope/user-profile-widget'); return { - default: ({ - projectId, - baseUrl, - baseStaticUrl, - innerRef, - widgetId, - theme, - debug, - styleId, - }) => ( - + default: withPropsMapping( + React.forwardRef((props, ref) => ( + + )), ), }; }); @@ -45,12 +30,6 @@ const UserProfile = React.forwardRef( const { projectId, baseUrl, baseStaticUrl } = React.useContext(Context); - useEffect(() => { - if (innerRef && logger) { - innerRef.logger = logger; - } - }, [innerRef, logger]); - useEffect(() => { if (innerRef && onLogout) { innerRef.addEventListener('logout', onLogout); @@ -60,18 +39,24 @@ const UserProfile = React.forwardRef( }, [innerRef, onLogout]); return ( - - + - + ); }, ); diff --git a/packages/sdks/react-sdk/src/components/withPropsMapping/index.tsx b/packages/sdks/react-sdk/src/components/withPropsMapping/index.tsx new file mode 100644 index 000000000..27a8852ff --- /dev/null +++ b/packages/sdks/react-sdk/src/components/withPropsMapping/index.tsx @@ -0,0 +1,70 @@ +import React, { + useImperativeHandle, + useMemo, + ComponentType, + useCallback, + useRef, +} from 'react'; +import { kebabCase } from '@descope/sdk-helpers'; +import { transformAttrValue, transformKey } from './utils'; + +/** + * withPropsMapping is a React HOC that adapts React props to work seamlessly + * with web components by setting attributes and properties. + * + * - Props ending in `.prop` are set as properties on the web component. + * - Props ending in `.attr` are transformed to kebab-case and set as attributes on the web component. + * - All other props are set as kebab-case props + * + * This resolves attribute/property behavior differences in React 19. + * + * @see https://github.com/facebook/react/issues/29037 + */ +const withPropsMapping =

>( + Component: ComponentType, +) => + React.forwardRef((props, ref) => { + const { prop, attr, rest } = useMemo( + () => + Object.entries(props).reduce( + (acc, [key, value]) => { + const { trimmedKey, category } = transformKey(key); + if (category === 'prop') acc.prop.push([trimmedKey, value]); + else if (category === 'attr') + acc.attr.push([kebabCase(trimmedKey), transformAttrValue(value)]); + else Object.assign(acc.rest, { [kebabCase(trimmedKey)]: value }); + return acc; + }, + { attr: [], prop: [], rest: {} }, + ), + [props], + ); + + const currRef = useRef(null); + + const setInnerRef = useCallback( + (innerRef) => { + currRef.current = innerRef; + if (innerRef) { + prop.forEach(([key, value]) => { + currRef.current[key] = value; + }); + + attr.forEach(([key, value]) => { + if (value === undefined || value === null) { + innerRef.removeAttribute(key); + } else { + innerRef.setAttribute(key, value); + } + }); + } + }, + [prop, attr, currRef], + ); + + useImperativeHandle(ref, () => currRef.current); + + return ; + }); + +export default withPropsMapping; diff --git a/packages/sdks/react-sdk/src/components/withPropsMapping/utils.ts b/packages/sdks/react-sdk/src/components/withPropsMapping/utils.ts new file mode 100644 index 000000000..93ff848f1 --- /dev/null +++ b/packages/sdks/react-sdk/src/components/withPropsMapping/utils.ts @@ -0,0 +1,12 @@ +export const transformKey = (key: string) => { + // eslint-disable-next-line no-sparse-arrays + const [, trimmedKey, category] = /(.*)\.(prop|attr)$/.exec(key) || [ + , + key, + 'rest', + ]; + return { trimmedKey, category }; +}; + +export const transformAttrValue = (value: any) => + typeof value === 'string' || value == null ? value : JSON.stringify(value); diff --git a/packages/sdks/react-sdk/src/types.ts b/packages/sdks/react-sdk/src/types.ts index 099cb5081..ce384c5ea 100644 --- a/packages/sdks/react-sdk/src/types.ts +++ b/packages/sdks/react-sdk/src/types.ts @@ -14,7 +14,7 @@ import UserProfileWidget from '@descope/user-profile-widget'; import ApplicationsPortalWidget from '@descope/applications-portal-widget'; import createSdk from './sdk'; -declare global { +declare module 'react' { namespace JSX { interface IntrinsicElements { ['descope-wc']: DescopeCustomElement; @@ -53,7 +53,7 @@ export type Sdk = ReturnType; export type CustomElement = Partial< T & DOMAttributes & { - children: React.ReactChild; + children: React.ReactNode; ref: React.Ref; } >; diff --git a/packages/sdks/react-sdk/test/hooks/useSession.test.tsx b/packages/sdks/react-sdk/test/hooks/useSession.test.tsx index 3d9a321a0..d0882a7bd 100644 --- a/packages/sdks/react-sdk/test/hooks/useSession.test.tsx +++ b/packages/sdks/react-sdk/test/hooks/useSession.test.tsx @@ -31,7 +31,6 @@ describe('useSession', () => { expect(result.current.isSessionLoading).toBe(false); expect(result.current.sessionToken).toBe(session); expect(result.current.isAuthenticated).toBe(true); - expect(fetchSession).not.toHaveBeenCalled(); }); }); diff --git a/packages/sdks/vue-sdk/CHANGELOG.md b/packages/sdks/vue-sdk/CHANGELOG.md index 87252238f..9f9c6adca 100644 --- a/packages/sdks/vue-sdk/CHANGELOG.md +++ b/packages/sdks/vue-sdk/CHANGELOG.md @@ -2,6 +2,34 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [2.2.9](https://github.com/descope/descope-js/compare/vue-sdk-2.2.8...vue-sdk-2.2.9) (2024-12-24) + +### Dependency Updates + +* `access-key-management-widget` updated to version `0.3.5` +* `audit-management-widget` updated to version `0.2.9` +* `role-management-widget` updated to version `0.2.9` +* `user-management-widget` updated to version `0.6.3` +* `user-profile-widget` updated to version `0.2.5` +* `applications-portal-widget` updated to version `0.2.9` +* `web-component` updated to version `3.32.0` +## [2.2.8](https://github.com/descope/descope-js/compare/vue-sdk-2.2.7...vue-sdk-2.2.8) (2024-12-22) + +### Dependency Updates + +* `access-key-management-widget` updated to version `0.3.4` +* `audit-management-widget` updated to version `0.2.8` +* `role-management-widget` updated to version `0.2.8` +* `user-management-widget` updated to version `0.6.2` +* `user-profile-widget` updated to version `0.2.4` +* `applications-portal-widget` updated to version `0.2.8` +* `web-component` updated to version `3.31.3` +* `web-js-sdk` updated to version `1.23.1` + +### Bug Fixes + +* multiple flows on the same page ([#868](https://github.com/descope/descope-js/issues/868)) ([c4182b3](https://github.com/descope/descope-js/commit/c4182b3f3a282a45edab2a6d6b1a669721782096)) + ## [2.2.7](https://github.com/descope/descope-js/compare/vue-sdk-2.2.6...vue-sdk-2.2.7) (2024-12-18) ### Dependency Updates diff --git a/packages/sdks/vue-sdk/package.json b/packages/sdks/vue-sdk/package.json index 3fda81ab3..028c379f8 100644 --- a/packages/sdks/vue-sdk/package.json +++ b/packages/sdks/vue-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@descope/vue-sdk", - "version": "2.2.7", + "version": "2.2.9", "main": "dist/index.cjs", "module": "dist/index.mjs", "type": "module", diff --git a/packages/sdks/web-component/CHANGELOG.md b/packages/sdks/web-component/CHANGELOG.md index 5b6a2dc88..75e966f2e 100644 --- a/packages/sdks/web-component/CHANGELOG.md +++ b/packages/sdks/web-component/CHANGELOG.md @@ -2,6 +2,27 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [3.32.0](https://github.com/descope/descope-js/compare/web-component-3.31.3...web-component-3.32.0) (2024-12-24) + +### Dependency Updates + +* `sdk-mixins` updated to version `0.6.0` + +### Features + +* Content from base url ([#871](https://github.com/descope/descope-js/issues/871)) RELEASE ([f3e437e](https://github.com/descope/descope-js/commit/f3e437e0793507627b157317063fe39174600c80)) + +## [3.31.3](https://github.com/descope/descope-js/compare/web-component-3.31.2...web-component-3.31.3) (2024-12-22) + +### Dependency Updates + +* `sdk-mixins` updated to version `0.5.2` +* `web-js-sdk` updated to version `1.23.1` + +### Bug Fixes + +* multiple flows on the same page ([#868](https://github.com/descope/descope-js/issues/868)) ([c4182b3](https://github.com/descope/descope-js/commit/c4182b3f3a282a45edab2a6d6b1a669721782096)) + ## [3.31.2](https://github.com/descope/descope-js/compare/web-component-3.31.1...web-component-3.31.2) (2024-12-18) ### Dependency Updates diff --git a/packages/sdks/web-component/package.json b/packages/sdks/web-component/package.json index c90edfe6d..bb8898251 100644 --- a/packages/sdks/web-component/package.json +++ b/packages/sdks/web-component/package.json @@ -1,6 +1,6 @@ { "name": "@descope/web-component", - "version": "3.31.2", + "version": "3.32.0", "author": "Descope Team ", "homepage": "https://github.com/descope/descope-js", "bugs": { diff --git a/packages/sdks/web-component/src/lib/descope-wc/BaseDescopeWc.ts b/packages/sdks/web-component/src/lib/descope-wc/BaseDescopeWc.ts index 1e8125880..a28ceba7d 100644 --- a/packages/sdks/web-component/src/lib/descope-wc/BaseDescopeWc.ts +++ b/packages/sdks/web-component/src/lib/descope-wc/BaseDescopeWc.ts @@ -1,6 +1,9 @@ -import createSdk from '@descope/web-js-sdk'; -import { themeMixin } from '@descope/sdk-mixins/themeMixin'; import { compose } from '@descope/sdk-helpers'; +// eslint-disable-next-line import/no-duplicates +import { staticResourcesMixin } from '@descope/sdk-mixins/static-resources-mixin'; +// eslint-disable-next-line import/no-duplicates +import { themeMixin } from '@descope/sdk-mixins/theme-mixin'; +import createSdk from '@descope/web-js-sdk'; import { CONFIG_FILENAME, ELEMENTS_TO_IGNORE_ENTER_KEY_ON, @@ -17,30 +20,34 @@ import { State, withMemCache, } from '../helpers'; +import { + extractNestedAttribute, + transformFlowInputFormData, +} from '../helpers/flowInputs'; import { IsChanged } from '../helpers/state'; import { formMountMixin } from '../mixins'; import { AutoFocusOptions, DebuggerMessage, DebugState, - FlowState, - FlowStateUpdateFn, - SdkConfig, DescopeUI, - ProjectConfiguration, FlowConfig, + FlowState, + FlowStateUpdateFn, FlowStatus, + ProjectConfiguration, + SdkConfig, } from '../types'; import initTemplate from './initTemplate'; -import { - extractNestedAttribute, - transformFlowInputFormData, -} from '../helpers/flowInputs'; // this is replaced in build time declare const BUILD_VERSION: string; -const BaseClass = compose(themeMixin, formMountMixin)(HTMLElement); +const BaseClass = compose( + themeMixin, + staticResourcesMixin, + formMountMixin, +)(HTMLElement); // this base class is responsible for WC initialization class BaseDescopeWc extends BaseClass { @@ -303,6 +310,8 @@ class BaseDescopeWc extends BaseClass { return config.isMissingConfig && (await this.#isPrevVerConfig()); } + // we are not using fetchStaticResource here + // because we do not want to use the fallbacks mechanism async #isPrevVerConfig() { const prevVerConfigUrl = getContentUrl({ projectId: this.projectId, @@ -320,13 +329,11 @@ class BaseDescopeWc extends BaseClass { // we want to get the config only if we don't have it already getConfig = withMemCache(async () => { - const configUrl = getContentUrl({ - projectId: this.projectId, - filename: CONFIG_FILENAME, - baseUrl: this.baseStaticUrl, - }); try { - const { body, headers } = await fetchContent(configUrl, 'json'); + const { body, headers } = await this.fetchStaticResource( + CONFIG_FILENAME, + 'json', + ); return { projectConfig: body as ProjectConfiguration, executionContext: { geo: headers['x-geo'] }, diff --git a/packages/sdks/web-component/src/lib/descope-wc/DescopeWc.ts b/packages/sdks/web-component/src/lib/descope-wc/DescopeWc.ts index 3a0cdebbc..4060165f4 100644 --- a/packages/sdks/web-component/src/lib/descope-wc/DescopeWc.ts +++ b/packages/sdks/web-component/src/lib/descope-wc/DescopeWc.ts @@ -1,6 +1,6 @@ import { - ensureFingerprintIds, clearFingerprintData, + ensureFingerprintIds, } from '@descope/web-js-sdk'; import { CUSTOM_INTERACTIONS, @@ -15,30 +15,28 @@ import { URL_TOKEN_PARAM_NAME, } from '../constants'; import { - fetchContent, + clearPreviousExternalInputs, getAnimationDirection, - getContentUrl, getElementDescopeAttributes, + getFirstNonEmptyValue, + getUserLocale, handleAutoFocus, + handleReportValidityOnBlur, injectSamlIdpForm, isConditionalLoginSupported, - updateScreenFromScreenState, - updateTemplateFromScreenState, + leadingDebounce, setTOTPVariable, showFirstScreenOnExecutionInit, State, submitForm, - withMemCache, - getFirstNonEmptyValue, - leadingDebounce, - handleReportValidityOnBlur, - getUserLocale, - clearPreviousExternalInputs, timeoutPromise, + updateScreenFromScreenState, + updateTemplateFromScreenState, + withMemCache, } from '../helpers'; -import { calculateConditions, calculateCondition } from '../helpers/conditions'; -import { getLastAuth, setLastAuth } from '../helpers/lastAuth'; import { getABTestingKey } from '../helpers/abTestingKey'; +import { calculateCondition, calculateConditions } from '../helpers/conditions'; +import { getLastAuth, setLastAuth } from '../helpers/lastAuth'; import { IsChanged } from '../helpers/state'; import { disableWebauthnButtons, @@ -227,22 +225,25 @@ class DescopeWc extends BaseDescopeWc { return filenameWithLocale; } - async getPageContent(htmlUrl: string, htmlLocaleUrl: string) { - if (htmlLocaleUrl) { + async getPageContent(htmlFilename: string, htmlLocaleFilename: string) { + if (htmlLocaleFilename) { // try first locale url, if can't get for some reason, fallback to the original html url (the one without locale) try { - const { body } = await fetchContent(htmlLocaleUrl, 'text'); + const { body } = await this.fetchStaticResource( + htmlLocaleFilename, + 'text', + ); return body; } catch (ex) { this.loggerWrapper.error( - `Failed to fetch flow page from ${htmlLocaleUrl}. Fallback to url ${htmlUrl}`, + `Failed to fetch flow page from ${htmlLocaleFilename}. Fallback to url ${htmlFilename}`, ex, ); } } try { - const { body } = await fetchContent(htmlUrl, 'text'); + const { body } = await this.fetchStaticResource(htmlFilename, 'text'); return body; } catch (ex) { this.loggerWrapper.error(`Failed to fetch flow page`, ex.message); @@ -586,18 +587,8 @@ class DescopeWc extends BaseDescopeWc { name: this.sdk.getLastUserDisplayName() || loginId, }, }, - htmlUrl: getContentUrl({ - projectId, - filename: `${readyScreenId}.html`, - baseUrl: this.baseStaticUrl, - }), - htmlLocaleUrl: - filenameWithLocale && - getContentUrl({ - projectId, - filename: filenameWithLocale, - baseUrl: this.baseStaticUrl, - }), + htmlFilename: `${readyScreenId}.html`, + htmlLocaleFilename: filenameWithLocale, samlIdpUsername, oidcLoginHint, oidcPrompt, @@ -964,8 +955,8 @@ class DescopeWc extends BaseDescopeWc { async onStepChange(currentState: StepState, prevState: StepState) { const { - htmlUrl, - htmlLocaleUrl, + htmlFilename, + htmlLocaleFilename, direction, next, screenState, @@ -973,7 +964,10 @@ class DescopeWc extends BaseDescopeWc { } = currentState; const stepTemplate = document.createElement('template'); - stepTemplate.innerHTML = await this.getPageContent(htmlUrl, htmlLocaleUrl); + stepTemplate.innerHTML = await this.getPageContent( + htmlFilename, + htmlLocaleFilename, + ); const clone = stepTemplate.content.cloneNode(true) as DocumentFragment; @@ -1026,7 +1020,7 @@ class DescopeWc extends BaseDescopeWc { this.rootElement.replaceChildren(clone); // If before html url was empty, we deduce its the first time a screen is shown - const isFirstScreen = !prevState.htmlUrl; + const isFirstScreen = !prevState.htmlFilename; // we need to wait for all components to render before we can set its value setTimeout(() => { diff --git a/packages/sdks/web-component/src/lib/types.ts b/packages/sdks/web-component/src/lib/types.ts index afc1d2a20..01bfce0e4 100644 --- a/packages/sdks/web-component/src/lib/types.ts +++ b/packages/sdks/web-component/src/lib/types.ts @@ -92,8 +92,8 @@ export type FlowState = { export type StepState = { screenState: ScreenState; - htmlUrl: string; - htmlLocaleUrl: string; + htmlFilename: string; + htmlLocaleFilename: string; next: NextFn; direction: Direction | undefined; samlIdpUsername: string; diff --git a/packages/sdks/web-component/test/descope-wc.test.ts b/packages/sdks/web-component/test/descope-wc.test.ts index ae745a5af..5a19ee0cd 100644 --- a/packages/sdks/web-component/test/descope-wc.test.ts +++ b/packages/sdks/web-component/test/descope-wc.test.ts @@ -2982,7 +2982,7 @@ describe('web-component', () => { await waitFor(() => expect(startMock).toHaveBeenCalled()); await waitFor(() => screen.findByShadowText('It works!'), { - timeout: WAIT_TIMEOUT, + timeout: WAIT_TIMEOUT * 2, }); fireEvent.click(screen.getByShadowText('click')); diff --git a/packages/sdks/web-js-sdk/CHANGELOG.md b/packages/sdks/web-js-sdk/CHANGELOG.md index 06299e48b..b106b6c4e 100644 --- a/packages/sdks/web-js-sdk/CHANGELOG.md +++ b/packages/sdks/web-js-sdk/CHANGELOG.md @@ -2,6 +2,13 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [1.23.1](https://github.com/descope/descope-js/compare/web-js-sdk-1.23.0...web-js-sdk-1.23.1) (2024-12-22) + + +### Bug Fixes + +* support react-19 ([#860](https://github.com/descope/descope-js/issues/860)) RELEASE ([efd6833](https://github.com/descope/descope-js/commit/efd6833dfefc854b7f461606084234603f2444e0)) + ## [1.23.0](https://github.com/descope/descope-js/compare/web-js-sdk-1.22.0...web-js-sdk-1.23.0) (2024-12-18) diff --git a/packages/sdks/web-js-sdk/package.json b/packages/sdks/web-js-sdk/package.json index 2e2e99d3d..da059c952 100644 --- a/packages/sdks/web-js-sdk/package.json +++ b/packages/sdks/web-js-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@descope/web-js-sdk", - "version": "1.23.0", + "version": "1.23.1", "author": "Descope Team ", "homepage": "https://github.com/descope/descope-js", "bugs": { diff --git a/packages/sdks/web-js-sdk/test/fedcm.test.ts b/packages/sdks/web-js-sdk/test/fedcm.test.ts index 2c32f69ea..1b8917fcd 100644 --- a/packages/sdks/web-js-sdk/test/fedcm.test.ts +++ b/packages/sdks/web-js-sdk/test/fedcm.test.ts @@ -139,9 +139,9 @@ describe('fedcm', () => { ok: true, data: { clientId: 'C123', stateId: 'S123', nonce: 'N123' }, }); - + const onDismissed = jest.fn(); - + // Call oneTap with onDismissed callback sdk.fedcm.oneTap( 'google', @@ -150,16 +150,16 @@ describe('fedcm', () => { undefined, onDismissed, ); - + await new Promise(process.nextTick); - + // Simulate prompt callback with isDismissedMoment and getDismissedReason const promptCallback = googleClient.prompt.mock.calls[0][0]; promptCallback({ isDismissedMoment: () => true, getDismissedReason: () => 'credential_returned', }); - + expect(onDismissed).toHaveBeenCalledWith('credential_returned'); }); }); @@ -223,9 +223,9 @@ describe('fedcm', () => { // @ts-ignore global.navigator.credentials = { get: mockGet }; mockGet.mockResolvedValue({ token: 'mockToken' }); - + const result = await sdk.fedcm.isLoggedIn(); - + expect(mockGet).toHaveBeenCalledWith({ identity: { context: 'signin', @@ -239,27 +239,27 @@ describe('fedcm', () => { }); expect(result).toBe(true); }); - + it('should return false if navigator.credentials.get returns null', async () => { const mockGet = jest.fn(); // @ts-ignore global.navigator.credentials = { get: mockGet }; mockGet.mockResolvedValue(null); - + const result = await sdk.fedcm.isLoggedIn(); - + expect(mockGet).toHaveBeenCalled(); expect(result).toBe(false); }); - + it('should return false if navigator.credentials.get throws an error', async () => { const mockGet = jest.fn(); // @ts-ignore global.navigator.credentials = { get: mockGet }; mockGet.mockRejectedValue(new Error('Test Error')); - + const result = await sdk.fedcm.isLoggedIn(); - + expect(mockGet).toHaveBeenCalled(); expect(result).toBe(false); }); diff --git a/packages/widgets/access-key-management-widget/CHANGELOG.md b/packages/widgets/access-key-management-widget/CHANGELOG.md index b2acadb04..a7eea1ad0 100644 --- a/packages/widgets/access-key-management-widget/CHANGELOG.md +++ b/packages/widgets/access-key-management-widget/CHANGELOG.md @@ -2,6 +2,17 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [0.3.5](https://github.com/descope/descope-js/compare/access-key-management-widget-0.3.4...access-key-management-widget-0.3.5) (2024-12-24) + +### Dependency Updates + +* `sdk-mixins` updated to version `0.6.0` +## [0.3.4](https://github.com/descope/descope-js/compare/access-key-management-widget-0.3.3...access-key-management-widget-0.3.4) (2024-12-22) + +### Dependency Updates + +* `web-js-sdk` updated to version `1.23.1` +* `sdk-mixins` updated to version `0.5.2` ## [0.3.3](https://github.com/descope/descope-js/compare/access-key-management-widget-0.3.2...access-key-management-widget-0.3.3) (2024-12-18) ### Dependency Updates diff --git a/packages/widgets/access-key-management-widget/package.json b/packages/widgets/access-key-management-widget/package.json index 89d6b860a..04bea6e66 100644 --- a/packages/widgets/access-key-management-widget/package.json +++ b/packages/widgets/access-key-management-widget/package.json @@ -1,6 +1,6 @@ { "name": "@descope/access-key-management-widget", - "version": "0.3.3", + "version": "0.3.5", "author": "Descope Team ", "homepage": "https://github.com/descope/descope-js", "bugs": { diff --git a/packages/widgets/applications-portal-widget/CHANGELOG.md b/packages/widgets/applications-portal-widget/CHANGELOG.md index 501dffab9..25ae80b8e 100644 --- a/packages/widgets/applications-portal-widget/CHANGELOG.md +++ b/packages/widgets/applications-portal-widget/CHANGELOG.md @@ -2,6 +2,17 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [0.2.9](https://github.com/descope/descope-js/compare/applications-portal-widget-0.2.8...applications-portal-widget-0.2.9) (2024-12-24) + +### Dependency Updates + +* `sdk-mixins` updated to version `0.6.0` +## [0.2.8](https://github.com/descope/descope-js/compare/applications-portal-widget-0.2.7...applications-portal-widget-0.2.8) (2024-12-22) + +### Dependency Updates + +* `web-js-sdk` updated to version `1.23.1` +* `sdk-mixins` updated to version `0.5.2` ## [0.2.7](https://github.com/descope/descope-js/compare/applications-portal-widget-0.2.6...applications-portal-widget-0.2.7) (2024-12-18) ### Dependency Updates diff --git a/packages/widgets/applications-portal-widget/package.json b/packages/widgets/applications-portal-widget/package.json index d78d4bc42..548a6597e 100644 --- a/packages/widgets/applications-portal-widget/package.json +++ b/packages/widgets/applications-portal-widget/package.json @@ -1,6 +1,6 @@ { "name": "@descope/applications-portal-widget", - "version": "0.2.7", + "version": "0.2.9", "author": "Descope Team ", "homepage": "https://github.com/descope/descope-js", "bugs": { diff --git a/packages/widgets/audit-management-widget/CHANGELOG.md b/packages/widgets/audit-management-widget/CHANGELOG.md index 328a4224e..0ec47264c 100644 --- a/packages/widgets/audit-management-widget/CHANGELOG.md +++ b/packages/widgets/audit-management-widget/CHANGELOG.md @@ -2,6 +2,17 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [0.2.9](https://github.com/descope/descope-js/compare/audit-management-widget-0.2.8...audit-management-widget-0.2.9) (2024-12-24) + +### Dependency Updates + +* `sdk-mixins` updated to version `0.6.0` +## [0.2.8](https://github.com/descope/descope-js/compare/audit-management-widget-0.2.7...audit-management-widget-0.2.8) (2024-12-22) + +### Dependency Updates + +* `web-js-sdk` updated to version `1.23.1` +* `sdk-mixins` updated to version `0.5.2` ## [0.2.7](https://github.com/descope/descope-js/compare/audit-management-widget-0.2.6...audit-management-widget-0.2.7) (2024-12-18) ### Dependency Updates diff --git a/packages/widgets/audit-management-widget/package.json b/packages/widgets/audit-management-widget/package.json index 84c11f1bc..0ab49d995 100644 --- a/packages/widgets/audit-management-widget/package.json +++ b/packages/widgets/audit-management-widget/package.json @@ -1,6 +1,6 @@ { "name": "@descope/audit-management-widget", - "version": "0.2.7", + "version": "0.2.9", "author": "Descope Team ", "homepage": "https://github.com/descope/descope-js", "bugs": { diff --git a/packages/widgets/role-management-widget/CHANGELOG.md b/packages/widgets/role-management-widget/CHANGELOG.md index 413f2cdb7..6e766e692 100644 --- a/packages/widgets/role-management-widget/CHANGELOG.md +++ b/packages/widgets/role-management-widget/CHANGELOG.md @@ -2,6 +2,17 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [0.2.9](https://github.com/descope/descope-js/compare/role-management-widget-0.2.8...role-management-widget-0.2.9) (2024-12-24) + +### Dependency Updates + +* `sdk-mixins` updated to version `0.6.0` +## [0.2.8](https://github.com/descope/descope-js/compare/role-management-widget-0.2.7...role-management-widget-0.2.8) (2024-12-22) + +### Dependency Updates + +* `web-js-sdk` updated to version `1.23.1` +* `sdk-mixins` updated to version `0.5.2` ## [0.2.7](https://github.com/descope/descope-js/compare/role-management-widget-0.2.6...role-management-widget-0.2.7) (2024-12-18) ### Dependency Updates diff --git a/packages/widgets/role-management-widget/package.json b/packages/widgets/role-management-widget/package.json index 1671bd5ef..3efdd581c 100644 --- a/packages/widgets/role-management-widget/package.json +++ b/packages/widgets/role-management-widget/package.json @@ -1,6 +1,6 @@ { "name": "@descope/role-management-widget", - "version": "0.2.7", + "version": "0.2.9", "author": "Descope Team ", "homepage": "https://github.com/descope/descope-js", "bugs": { diff --git a/packages/widgets/user-management-widget/CHANGELOG.md b/packages/widgets/user-management-widget/CHANGELOG.md index b34cececf..6f3e2d864 100644 --- a/packages/widgets/user-management-widget/CHANGELOG.md +++ b/packages/widgets/user-management-widget/CHANGELOG.md @@ -2,6 +2,17 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [0.6.3](https://github.com/descope/descope-js/compare/user-management-widget-0.6.2...user-management-widget-0.6.3) (2024-12-24) + +### Dependency Updates + +* `sdk-mixins` updated to version `0.6.0` +## [0.6.2](https://github.com/descope/descope-js/compare/user-management-widget-0.6.1...user-management-widget-0.6.2) (2024-12-22) + +### Dependency Updates + +* `web-js-sdk` updated to version `1.23.1` +* `sdk-mixins` updated to version `0.5.2` ## [0.6.1](https://github.com/descope/descope-js/compare/user-management-widget-0.6.0...user-management-widget-0.6.1) (2024-12-18) ### Dependency Updates diff --git a/packages/widgets/user-management-widget/package.json b/packages/widgets/user-management-widget/package.json index 775fc8c73..f8253b887 100644 --- a/packages/widgets/user-management-widget/package.json +++ b/packages/widgets/user-management-widget/package.json @@ -1,6 +1,6 @@ { "name": "@descope/user-management-widget", - "version": "0.6.1", + "version": "0.6.3", "author": "Descope Team ", "homepage": "https://github.com/descope/descope-js", "bugs": { diff --git a/packages/widgets/user-profile-widget/CHANGELOG.md b/packages/widgets/user-profile-widget/CHANGELOG.md index e62373596..e60ad6c30 100644 --- a/packages/widgets/user-profile-widget/CHANGELOG.md +++ b/packages/widgets/user-profile-widget/CHANGELOG.md @@ -2,6 +2,24 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [0.2.5](https://github.com/descope/descope-js/compare/user-profile-widget-0.2.4...user-profile-widget-0.2.5) (2024-12-24) + +### Dependency Updates + +* `web-component` updated to version `3.32.0` +* `sdk-mixins` updated to version `0.6.0` +## [0.2.4](https://github.com/descope/descope-js/compare/user-profile-widget-0.2.3...user-profile-widget-0.2.4) (2024-12-22) + +### Dependency Updates + +* `web-js-sdk` updated to version `1.23.1` +* `web-component` updated to version `3.31.3` +* `sdk-mixins` updated to version `0.5.2` + +### Bug Fixes + +* multiple flows on the same page ([#868](https://github.com/descope/descope-js/issues/868)) ([c4182b3](https://github.com/descope/descope-js/commit/c4182b3f3a282a45edab2a6d6b1a669721782096)) + ## [0.2.3](https://github.com/descope/descope-js/compare/user-profile-widget-0.2.2...user-profile-widget-0.2.3) (2024-12-18) ### Dependency Updates diff --git a/packages/widgets/user-profile-widget/package.json b/packages/widgets/user-profile-widget/package.json index bd9a6e255..0cd9d1e12 100644 --- a/packages/widgets/user-profile-widget/package.json +++ b/packages/widgets/user-profile-widget/package.json @@ -1,6 +1,6 @@ { "name": "@descope/user-profile-widget", - "version": "0.2.3", + "version": "0.2.5", "author": "Descope Team ", "homepage": "https://github.com/descope/descope-js", "bugs": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c6b4a0f7f..275bea5b1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -299,7 +299,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.24.0)(rollup@4.13.0) + version: 6.1.1(esbuild@0.24.2)(rollup@4.13.0) rollup-plugin-inject-process-env: specifier: ^1.3.1 version: 1.3.1 @@ -308,7 +308,7 @@ importers: version: 2.0.5 ts-jest: specifier: ^29.0.0 - version: 29.1.2(@babel/core@7.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.2(@babel/core@7.26.0)(esbuild@0.24.2)(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) @@ -431,7 +431,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.24.0)(rollup@4.13.0) + version: 6.1.1(esbuild@0.24.2)(rollup@4.13.0) rollup-plugin-inject-process-env: specifier: ^1.3.1 version: 1.3.1 @@ -440,7 +440,7 @@ importers: version: 2.0.5 ts-jest: specifier: ^29.0.0 - version: 29.1.2(@babel/core@7.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.2(@babel/core@7.26.0)(esbuild@0.24.2)(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) @@ -584,7 +584,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.24.0)(rollup@4.13.0) + version: 6.1.1(esbuild@0.24.2)(rollup@4.13.0) rollup-plugin-inject-process-env: specifier: ^1.3.1 version: 1.3.1 @@ -596,7 +596,7 @@ importers: version: 1.2.1(rollup@4.13.0) ts-jest: specifier: ^29.0.0 - version: 29.1.2(@babel/core@7.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.2(@babel/core@7.26.0)(esbuild@0.24.2)(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) @@ -876,6 +876,9 @@ importers: '@descope/web-component': specifier: workspace:* version: link:../web-component + '@types/react': + specifier: '>=18' + version: 18.3.3 react: specifier: '>=18' version: 18.3.1 @@ -926,15 +929,6 @@ importers: '@types/jest': specifier: ^29.5.12 version: 29.5.12 - '@types/react': - specifier: 18.3.3 - version: 18.3.3 - '@types/react-dom': - specifier: 18.2.18 - version: 18.2.18 - '@types/react-router-dom': - specifier: ^5.3.3 - version: 5.3.3 babel: specifier: ^6.23.0 version: 6.23.0 @@ -1115,6 +1109,9 @@ importers: '@descope/role-management-widget': specifier: workspace:* version: link:../../widgets/role-management-widget + '@descope/sdk-helpers': + specifier: workspace:* + version: link:../../libs/sdk-helpers '@descope/user-management-widget': specifier: workspace:* version: link:../../widgets/user-management-widget @@ -1533,7 +1530,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.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.2)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.3)(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) @@ -1617,7 +1614,7 @@ importers: version: 1.0.2 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.2)(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) @@ -1753,7 +1750,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.24.0)(rollup@4.14.3) + version: 6.1.1(esbuild@0.24.2)(rollup@4.14.3) rollup-plugin-inject-process-env: specifier: ^1.3.1 version: 1.3.1 @@ -1762,7 +1759,7 @@ importers: version: 2.0.5 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.2)(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) @@ -1849,7 +1846,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.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.2)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.3)(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) @@ -1942,7 +1939,7 @@ importers: version: 1.0.2 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.2)(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) @@ -2027,7 +2024,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.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.2)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.3)(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) @@ -2205,7 +2202,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.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.2)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.28.1)(eslint-plugin-jsx-a11y@6.10.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.3)(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) @@ -2298,7 +2295,7 @@ importers: version: 1.0.2 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.2)(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) @@ -2383,7 +2380,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.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.2)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.3)(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) @@ -2476,7 +2473,7 @@ importers: version: 1.0.2 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.2)(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) @@ -2564,7 +2561,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.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.2)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.3)(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) @@ -2657,7 +2654,7 @@ importers: version: 1.0.2 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.2)(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) @@ -2749,7 +2746,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.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.2)(eslint@8.57.0) + version: 19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.3)(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) @@ -2842,7 +2839,7 @@ importers: version: 1.0.2 ts-jest: specifier: ^29.0.0 - version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5) + version: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.2)(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) @@ -7773,8 +7770,8 @@ packages: - supports-color dev: true - /@descope/web-js-sdk@1.23.0: - resolution: {integrity: sha512-ABfXKFq+e8eRNB/uO5jeUEuK0Iga7FdP+oY7C7K/9S6imySPUXRn/TH/br6Wr57xE9XpVfZtK6KnQvPIH+/3Pg==} + /@descope/web-js-sdk@1.23.1: + resolution: {integrity: sha512-gaYohKYQKTAwqED49dZBWKGIgqy2k9U45N8enzaI2hyQnyq1ZYfJkssZ3QgMo8NnubLO/JfQ6iwRu4dLEuVl2A==} requiresBuild: true dependencies: '@descope/core-js-sdk': 2.33.0 @@ -7827,8 +7824,8 @@ packages: dev: true optional: true - /@esbuild/aix-ppc64@0.24.0: - resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + /@esbuild/aix-ppc64@0.24.2: + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -7863,8 +7860,8 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.24.0: - resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + /@esbuild/android-arm64@0.24.2: + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -7899,8 +7896,8 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.24.0: - resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + /@esbuild/android-arm@0.24.2: + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -7935,8 +7932,8 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.24.0: - resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + /@esbuild/android-x64@0.24.2: + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -7971,8 +7968,8 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.24.0: - resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + /@esbuild/darwin-arm64@0.24.2: + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -8007,8 +8004,8 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.24.0: - resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + /@esbuild/darwin-x64@0.24.2: + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -8043,8 +8040,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.24.0: - resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + /@esbuild/freebsd-arm64@0.24.2: + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -8079,8 +8076,8 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.24.0: - resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + /@esbuild/freebsd-x64@0.24.2: + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -8115,8 +8112,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.24.0: - resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + /@esbuild/linux-arm64@0.24.2: + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -8151,8 +8148,8 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.24.0: - resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + /@esbuild/linux-arm@0.24.2: + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -8187,8 +8184,8 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.24.0: - resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + /@esbuild/linux-ia32@0.24.2: + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -8223,8 +8220,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.24.0: - resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + /@esbuild/linux-loong64@0.24.2: + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -8259,8 +8256,8 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.24.0: - resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + /@esbuild/linux-mips64el@0.24.2: + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -8295,8 +8292,8 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.24.0: - resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + /@esbuild/linux-ppc64@0.24.2: + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -8331,8 +8328,8 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.24.0: - resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + /@esbuild/linux-riscv64@0.24.2: + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -8367,8 +8364,8 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.24.0: - resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + /@esbuild/linux-s390x@0.24.2: + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -8403,8 +8400,8 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.24.0: - resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + /@esbuild/linux-x64@0.24.2: + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -8412,6 +8409,15 @@ packages: dev: true optional: true + /@esbuild/netbsd-arm64@0.24.2: + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + /@esbuild/netbsd-x64@0.18.17: resolution: {integrity: sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==} engines: {node: '>=12'} @@ -8439,8 +8445,8 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.24.0: - resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + /@esbuild/netbsd-x64@0.24.2: + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -8448,8 +8454,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-arm64@0.24.0: - resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + /@esbuild/openbsd-arm64@0.24.2: + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -8484,8 +8490,8 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.24.0: - resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + /@esbuild/openbsd-x64@0.24.2: + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -8520,8 +8526,8 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.24.0: - resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + /@esbuild/sunos-x64@0.24.2: + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -8556,8 +8562,8 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.24.0: - resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + /@esbuild/win32-arm64@0.24.2: + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -8592,8 +8598,8 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.24.0: - resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + /@esbuild/win32-ia32@0.24.2: + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -8628,8 +8634,8 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.24.0: - resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + /@esbuild/win32-x64@0.24.2: + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -9726,6 +9732,14 @@ 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: @@ -9923,7 +9937,7 @@ packages: peerDependencies: nx: '>= 17 <= 20' dependencies: - '@nrwl/devkit': 19.3.2(nx@19.5.2) + '@nrwl/devkit': 19.3.2(nx@19.3.2) ejs: 3.1.9 enquirer: 2.3.6 ignore: 5.3.2 @@ -12138,7 +12152,6 @@ packages: /@types/prop-types@15.7.12: resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - dev: true /@types/qs@6.9.15: resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} @@ -12148,12 +12161,6 @@ packages: resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} dev: true - /@types/react-dom@18.2.18: - resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==} - dependencies: - '@types/react': 18.3.3 - dev: true - /@types/react-dom@18.3.0: resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} dependencies: @@ -12180,7 +12187,6 @@ packages: dependencies: '@types/prop-types': 15.7.12 csstype: 3.1.3 - dev: true /@types/react@19.0.2: resolution: {integrity: sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==} @@ -15153,6 +15159,14 @@ packages: is-array-buffer: 3.0.4 dev: true + /array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + is-array-buffer: 3.0.5 + dev: true + /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true @@ -15228,7 +15242,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.6 + es-abstract: 1.23.7 es-shim-unscopables: 1.0.2 dev: true @@ -15270,10 +15284,10 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.1 + array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.6 + es-abstract: 1.23.7 es-errors: 1.3.0 get-intrinsic: 1.2.6 is-array-buffer: 3.0.5 @@ -16068,7 +16082,7 @@ packages: hasBin: true dependencies: caniuse-lite: 1.0.30001690 - electron-to-chromium: 1.5.74 + electron-to-chromium: 1.5.76 node-releases: 2.0.19 update-browserslist-db: 1.1.1(browserslist@4.24.3) @@ -17625,6 +17639,15 @@ packages: is-data-view: 1.0.1 dev: true + /data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + dev: true + /data-view-byte-length@1.0.1: resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} engines: {node: '>= 0.4'} @@ -17634,6 +17657,15 @@ packages: is-data-view: 1.0.1 dev: true + /data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bound: 1.0.3 + es-errors: 1.3.0 + is-data-view: 1.0.2 + dev: true + /data-view-byte-offset@1.0.0: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} @@ -18152,8 +18184,8 @@ packages: resolution: {integrity: sha512-VbeVexmZ1IFh+5EfrYz1I0HTzHVIlJa112UEWhciPyeOcKJGeTv6N8WnG4wsQB81DGCaVEGhpSb6o6a8WYFXXg==} dev: true - /electron-to-chromium@1.5.74: - resolution: {integrity: sha512-ck3//9RC+6oss/1Bh9tiAVFy5vfSKbRHAFh7Z3/eTRkEqJeWgymloShB17Vg3Z4nmDNp35vAd1BZ6CMW4Wt6Iw==} + /electron-to-chromium@1.5.76: + resolution: {integrity: sha512-CjVQyG7n7Sr+eBXE86HIulnL5N8xZY1sgmOPGuq/F0Rr0FJq63lg0kEtOIDfZBk44FnDLf6FUJ+dsJcuiUDdDQ==} /element-internals-polyfill@1.3.11: resolution: {integrity: sha512-SQLQNVY4wMdpnP/F/HtalJbpEenQd46Avtjm5hvUdeTs3QU0zHFNX5/AmtQIPPcfzePb0ipCkQGY4GwYJIhLJA==} @@ -18355,24 +18387,24 @@ packages: which-typed-array: 1.1.15 dev: true - /es-abstract@1.23.6: - resolution: {integrity: sha512-Ifco6n3yj2tMZDWNLyloZrytt9lqqlwvS83P3HtaETR0NUOYnIULGGHpktqYGObGy+8wc1okO25p8TjemhImvA==} + /es-abstract@1.23.7: + resolution: {integrity: sha512-OygGC8kIcDhXX+6yAZRGLqwi2CmEXCbLQixeGUgYeR+Qwlppqmo7DIDr8XibtEBZp+fJcoYpoatp5qwLMEdcqQ==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.1 + array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 call-bind: 1.0.8 call-bound: 1.0.3 - data-view-buffer: 1.0.1 - data-view-byte-length: 1.0.1 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 data-view-byte-offset: 1.0.1 es-define-property: 1.0.1 es-errors: 1.3.0 es-object-atoms: 1.0.0 es-set-tostringtag: 2.0.3 es-to-primitive: 1.3.0 - function.prototype.name: 1.1.7 + function.prototype.name: 1.1.8 get-intrinsic: 1.2.6 get-symbol-description: 1.1.0 globalthis: 1.0.4 @@ -18385,7 +18417,6 @@ packages: is-array-buffer: 3.0.5 is-callable: 1.2.7 is-data-view: 1.0.2 - is-negative-zero: 2.0.3 is-regex: 1.2.1 is-shared-array-buffer: 1.0.4 is-string: 1.1.1 @@ -18460,13 +18491,14 @@ packages: safe-array-concat: 1.1.2 dev: true - /es-iterator-helpers@1.2.0: - resolution: {integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==} + /es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 - es-abstract: 1.23.6 + es-abstract: 1.23.7 es-errors: 1.3.0 es-set-tostringtag: 2.0.3 function-bind: 1.1.2 @@ -18640,36 +18672,37 @@ packages: '@esbuild/win32-x64': 0.21.5 dev: true - /esbuild@0.24.0: - resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + /esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} engines: {node: '>=18'} hasBin: true requiresBuild: true optionalDependencies: - '@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 + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 dev: true /escalade@3.1.2: @@ -18828,7 +18861,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.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.2)(eslint@8.57.0): + /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.28.1)(eslint-plugin-jsx-a11y@6.10.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.3)(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: @@ -18842,7 +18875,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.2(eslint@8.57.0) - eslint-plugin-react: 7.37.2(eslint@8.57.0) + eslint-plugin-react: 7.37.3(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 @@ -18868,7 +18901,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.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.2)(eslint@8.57.0): + /eslint-config-airbnb@19.0.4(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.10.2)(eslint-plugin-react-hooks@4.6.2)(eslint-plugin-react@7.37.3)(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: @@ -18882,7 +18915,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.2(eslint@8.57.0) - eslint-plugin-react: 7.37.2(eslint@8.57.0) + eslint-plugin-react: 7.37.3(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 @@ -19980,8 +20013,8 @@ packages: string.prototype.matchall: 4.0.11 dev: true - /eslint-plugin-react@7.37.2(eslint@8.57.0): - resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} + /eslint-plugin-react@7.37.3(eslint@8.57.0): + resolution: {integrity: sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 @@ -19991,7 +20024,7 @@ packages: array.prototype.flatmap: 1.3.3 array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.2.0 + es-iterator-helpers: 1.2.1 eslint: 8.57.0 estraverse: 5.3.0 hasown: 2.0.2 @@ -20003,7 +20036,7 @@ packages: prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.11 + string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 dev: true @@ -21014,11 +21047,12 @@ packages: functions-have-names: 1.2.3 dev: true - /function.prototype.name@1.1.7: - resolution: {integrity: sha512-2g4x+HqTJKM9zcJqBSpjoRmdcPFtJM60J3xJisTQSXBWka5XqyBN/2tNUgma1mztTXyDuUsEtYe5qcs7xYzYQA==} + /function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.8 + call-bound: 1.0.3 define-properties: 1.2.1 functions-have-names: 1.2.3 hasown: 2.0.2 @@ -23197,10 +23231,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.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@4.9.3) + ts-jest: 29.1.5(@babel/core@7.26.0)(esbuild@0.24.2)(jest@29.7.0)(typescript@4.9.3) typescript: 4.9.3 optionalDependencies: - esbuild: 0.24.0 + esbuild: 0.24.2 transitivePeerDependencies: - '@babel/core' - '@jest/transform' @@ -27174,7 +27208,7 @@ packages: call-bind: 1.0.8 define-properties: 1.2.1 dunder-proto: 1.0.1 - es-abstract: 1.23.6 + es-abstract: 1.23.7 es-errors: 1.3.0 get-intrinsic: 1.2.6 gopd: 1.2.0 @@ -27685,7 +27719,7 @@ packages: - supports-color dev: true - /rollup-plugin-esbuild@6.1.1(esbuild@0.24.0)(rollup@4.13.0): + /rollup-plugin-esbuild@6.1.1(esbuild@0.24.2)(rollup@4.13.0): resolution: {integrity: sha512-CehMY9FAqJD5OUaE/Mi1r5z0kNeYxItmRO2zG4Qnv2qWKF09J2lTy5GUzjJR354ZPrLkCj4fiBN41lo8PzBUhw==} engines: {node: '>=14.18.0'} peerDependencies: @@ -27695,14 +27729,14 @@ packages: '@rollup/pluginutils': 5.1.0(rollup@4.13.0) debug: 4.3.4 es-module-lexer: 1.4.2 - esbuild: 0.24.0 + esbuild: 0.24.2 get-tsconfig: 4.7.3 rollup: 4.13.0 transitivePeerDependencies: - supports-color dev: true - /rollup-plugin-esbuild@6.1.1(esbuild@0.24.0)(rollup@4.14.3): + /rollup-plugin-esbuild@6.1.1(esbuild@0.24.2)(rollup@4.14.3): resolution: {integrity: sha512-CehMY9FAqJD5OUaE/Mi1r5z0kNeYxItmRO2zG4Qnv2qWKF09J2lTy5GUzjJR354ZPrLkCj4fiBN41lo8PzBUhw==} engines: {node: '>=14.18.0'} peerDependencies: @@ -27712,7 +27746,7 @@ packages: '@rollup/pluginutils': 5.1.0(rollup@4.14.3) debug: 4.3.4 es-module-lexer: 1.4.2 - esbuild: 0.24.0 + esbuild: 0.24.2 get-tsconfig: 4.7.3 rollup: 4.14.3 transitivePeerDependencies: @@ -28931,7 +28965,7 @@ packages: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.6 + es-abstract: 1.23.7 dev: true /string.prototype.matchall@4.0.11: @@ -28952,11 +28986,30 @@ packages: side-channel: 1.0.6 dev: true + /string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.3 + define-properties: 1.2.1 + es-abstract: 1.23.7 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.6 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.3 + set-function-name: 2.0.2 + side-channel: 1.1.0 + dev: true + /string.prototype.repeat@1.0.0: resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} dependencies: define-properties: 1.2.1 - es-abstract: 1.23.6 + es-abstract: 1.23.7 dev: true /string.prototype.trim@1.2.10: @@ -28967,7 +29020,7 @@ packages: call-bound: 1.0.3 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.6 + es-abstract: 1.23.7 es-object-atoms: 1.0.0 has-property-descriptors: 1.0.2 dev: true @@ -29591,7 +29644,7 @@ packages: yargs-parser: 20.2.9 dev: true - /ts-jest@29.1.2(@babel/core@7.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5): + /ts-jest@29.1.2(@babel/core@7.26.0)(esbuild@0.24.2)(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 @@ -29614,7 +29667,7 @@ packages: dependencies: '@babel/core': 7.26.0 bs-logger: 0.2.6 - esbuild: 0.24.0 + esbuild: 0.24.2 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 @@ -29702,7 +29755,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@29.1.5(@babel/core@7.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@4.9.3): + /ts-jest@29.1.5(@babel/core@7.26.0)(esbuild@0.24.2)(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 @@ -29728,7 +29781,7 @@ packages: dependencies: '@babel/core': 7.26.0 bs-logger: 0.2.6 - esbuild: 0.24.0 + esbuild: 0.24.2 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 @@ -29740,7 +29793,7 @@ packages: yargs-parser: 21.1.1 dev: true - /ts-jest@29.1.5(@babel/core@7.26.0)(esbuild@0.24.0)(jest@29.7.0)(typescript@5.4.5): + /ts-jest@29.1.5(@babel/core@7.26.0)(esbuild@0.24.2)(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 @@ -29766,7 +29819,7 @@ packages: dependencies: '@babel/core': 7.26.0 bs-logger: 0.2.6 - esbuild: 0.24.0 + esbuild: 0.24.2 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 @@ -31364,7 +31417,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bound: 1.0.3 - function.prototype.name: 1.1.7 + function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.1.0 @@ -31742,7 +31795,7 @@ packages: next: 14.2.10(@babel/core@7.26.0)(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 optionalDependencies: - '@descope/web-js-sdk': 1.23.0 + '@descope/web-js-sdk': 1.23.1 transitivePeerDependencies: - encoding dev: false