From 1736a2b3a0c5227c93787944d12fb47f274d4390 Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Tue, 14 Jan 2025 13:13:57 +0100 Subject: [PATCH] fix deps, tsconfig, next-env-vars, zitadel api --- apps/login/next-env-vars.d.ts | 33 ++++ apps/login/package.json | 15 +- apps/login/src/lib/api.ts | 36 ++++ apps/login/src/lib/zitadel.ts | 145 ++++++++++++---- apps/login/tsconfig.json | 1 + package.json | 4 +- packages/zitadel-client/src/index.ts | 3 +- pnpm-lock.yaml | 248 +++++++++++++-------------- 8 files changed, 308 insertions(+), 177 deletions(-) create mode 100644 apps/login/next-env-vars.d.ts create mode 100644 apps/login/src/lib/api.ts diff --git a/apps/login/next-env-vars.d.ts b/apps/login/next-env-vars.d.ts new file mode 100644 index 00000000000..dce7ea90651 --- /dev/null +++ b/apps/login/next-env-vars.d.ts @@ -0,0 +1,33 @@ +declare namespace NodeJS { + interface ProcessEnv { + /** + * The system api url + */ + AUDIENCE: string; + + /** + * The system api service user ID + */ + SYSTEM_USER_ID: string; + + /** + * The service user key + */ + SYSTEM_USER_PRIVATE_KEY: string; + + /** + * The instance url + */ + ZITADEL_API_URL: string; + + /** + * The service user id for the instance + */ + ZITADEL_USER_ID: string; + + /** + * The service user token for the instance + */ + ZITADEL_USER_TOKEN: string; + } +} diff --git a/apps/login/package.json b/apps/login/package.json index 6617a416b08..0f913c2553b 100644 --- a/apps/login/package.json +++ b/apps/login/package.json @@ -44,14 +44,15 @@ "clsx": "1.2.1", "copy-to-clipboard": "^3.3.3", "deepmerge": "^4.3.1", + "jose": "^5.3.0", "moment": "^2.29.4", "next": "15.0.4-canary.23", "next-intl": "^3.25.1", "next-themes": "^0.2.1", "nice-grpc": "2.0.1", "qrcode.react": "^3.1.0", - "react": "19.0.0-rc-66855b96-20241106", - "react-dom": "19.0.0-rc-66855b96-20241106", + "react": "19.0.0", + "react-dom": "19.0.0", "react-hook-form": "7.39.5", "swr": "^2.2.0", "tinycolor2": "1.4.2" @@ -62,19 +63,20 @@ "@testing-library/react": "^16.0.1", "@types/ms": "0.7.34", "@types/node": "22.9.0", - "@types/react": "npm:types-react@19.0.0-rc.1", - "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1", + "@types/react": "19.0.2", + "@types/react-dom": "19.0.2", "@types/tinycolor2": "1.4.3", "@types/uuid": "^10.0.0", "@vercel/git-hooks": "1.0.0", + "@zitadel/eslint-config": "workspace:*", "@zitadel/prettier-config": "workspace:*", + "@zitadel/tailwind-config": "workspace:*", "@zitadel/tsconfig": "workspace:*", "autoprefixer": "10.4.20", "concurrently": "^9.1.0", "cypress": "^13.15.2", "del-cli": "6.0.0", "env-cmd": "^10.0.0", - "@zitadel/eslint-config": "workspace:*", "grpc-tools": "1.12.4", "jsdom": "^25.0.1", "lint-staged": "15.2.10", @@ -86,7 +88,6 @@ "start-server-and-test": "^2.0.8", "tailwindcss": "3.4.14", "ts-proto": "^2.2.7", - "typescript": "^5.6.3", - "@zitadel/tailwind-config": "workspace:*" + "typescript": "^5.6.3" } } diff --git a/apps/login/src/lib/api.ts b/apps/login/src/lib/api.ts new file mode 100644 index 00000000000..b6df92f4816 --- /dev/null +++ b/apps/login/src/lib/api.ts @@ -0,0 +1,36 @@ +import { importPKCS8, SignJWT } from "jose"; +import { getInstanceByHost } from "./zitadel"; + +export async function getInstanceUrl(host: string): Promise { + const instance = await getInstanceByHost(host); + const generatedDomain = instance.domains.find( + (domain) => domain.generated === true, + ); + + if (!generatedDomain?.domain) { + throw new Error("No generated domain found"); + } + + console.log(`host: ${host}, api: ${generatedDomain?.domain}`); + + return generatedDomain?.domain; +} + +export async function systemAPIToken() { + const audience = process.env.AUDIENCE; + const userID = process.env.SYSTEM_USER_ID; + const key = process.env.SYSTEM_USER_PRIVATE_KEY; + + const decodedToken = Buffer.from(key, "base64").toString("utf-8"); + + const token = new SignJWT({}) + .setProtectedHeader({ alg: "RS256" }) + .setIssuedAt() + .setExpirationTime("1h") + .setIssuer(userID) + .setSubject(userID) + .setAudience(audience) + .sign(await importPKCS8(decodedToken, "RS256")); + + return token; +} diff --git a/apps/login/src/lib/zitadel.ts b/apps/login/src/lib/zitadel.ts index 835b16a46b5..7ba45aca04f 100644 --- a/apps/login/src/lib/zitadel.ts +++ b/apps/login/src/lib/zitadel.ts @@ -1,32 +1,22 @@ +import { create, createClientFor, Duration } from "@zitadel/client"; import { createServerTransport } from "@zitadel/client/node"; -import { - createIdpServiceClient, - createOIDCServiceClient, - createOrganizationServiceClient, - createSessionServiceClient, - createSettingsServiceClient, - createUserServiceClient, - makeReqCtx, -} from "@zitadel/client/v2"; -import { RequestChallenges } from "@zitadel/proto/zitadel/session/v2/challenge_pb"; -import { Checks } from "@zitadel/proto/zitadel/session/v2/session_service_pb"; -import { - AddHumanUserRequest, - ResendEmailCodeRequest, - ResendEmailCodeRequestSchema, - RetrieveIdentityProviderIntentRequest, - SendEmailCodeRequestSchema, - SetPasswordRequest, - SetPasswordRequestSchema, - VerifyPasskeyRegistrationRequest, - VerifyU2FRegistrationRequest, -} from "@zitadel/proto/zitadel/user/v2/user_service_pb"; - -import { create, Duration } from "@zitadel/client"; +import { createSystemServiceClient } from "@zitadel/client/v1"; +import { makeReqCtx } from "@zitadel/client/v2"; +import { IdentityProviderService } from "@zitadel/proto/zitadel/idp/v2/idp_service_pb"; import { TextQueryMethod } from "@zitadel/proto/zitadel/object/v2/object_pb"; -import { CreateCallbackRequest } from "@zitadel/proto/zitadel/oidc/v2/oidc_service_pb"; +import { + CreateCallbackRequest, + OIDCService, +} from "@zitadel/proto/zitadel/oidc/v2/oidc_service_pb"; import { Organization } from "@zitadel/proto/zitadel/org/v2/org_pb"; +import { OrganizationService } from "@zitadel/proto/zitadel/org/v2/org_service_pb"; +import { RequestChallenges } from "@zitadel/proto/zitadel/session/v2/challenge_pb"; +import { + Checks, + SessionService, +} from "@zitadel/proto/zitadel/session/v2/session_service_pb"; import { LoginSettings } from "@zitadel/proto/zitadel/settings/v2/login_settings_pb"; +import { SettingsService } from "@zitadel/proto/zitadel/settings/v2/settings_service_pb"; import { SendEmailVerificationCodeSchema } from "@zitadel/proto/zitadel/user/v2/email_pb"; import type { RedirectURLsJson } from "@zitadel/proto/zitadel/user/v2/idp_pb"; import { @@ -42,19 +32,20 @@ import { User, UserState, } from "@zitadel/proto/zitadel/user/v2/user_pb"; +import { + AddHumanUserRequest, + ResendEmailCodeRequest, + ResendEmailCodeRequestSchema, + RetrieveIdentityProviderIntentRequest, + SendEmailCodeRequestSchema, + SetPasswordRequest, + SetPasswordRequestSchema, + UserService, + VerifyPasskeyRegistrationRequest, + VerifyU2FRegistrationRequest, +} from "@zitadel/proto/zitadel/user/v2/user_service_pb"; import { unstable_cacheLife as cacheLife } from "next/cache"; - -const transport = createServerTransport( - process.env.ZITADEL_SERVICE_USER_TOKEN!, - { baseUrl: process.env.ZITADEL_API_URL! }, -); - -export const sessionService = createSessionServiceClient(transport); -export const userService = createUserServiceClient(transport); -export const oidcService = createOIDCServiceClient(transport); -export const idpService = createIdpServiceClient(transport); -export const orgService = createOrganizationServiceClient(transport); -export const settingsService = createSettingsServiceClient(transport); +import { systemAPIToken } from "./api"; const useCache = process.env.DEBUG !== "true"; @@ -65,6 +56,86 @@ async function cacheWrapper(callback: Promise) { return callback; } +type ServiceClass = + | typeof IdentityProviderService + | typeof UserService + | typeof OrganizationService + | typeof SessionService + | typeof OIDCService + | typeof SettingsService; + +async function createServiceForHost(service: T) { + // const host = headers().get("X-Forwarded-Host"); + // if (!host) { + // throw new Error("No host header found!"); + // } + + // let instanceUrl; + // try { + // instanceUrl = await getInstanceUrl(host); + // } catch (error) { + // console.error( + // "Could not get instance url, fallback to ZITADEL_API_URL", + // error, + // ); + // instanceUrl = process.env.ZITADEL_API_URL; + // } + + // remove in favor of the above + const instanceUrl = process.env.ZITADEL_API_URL; + + const systemToken = await systemAPIToken(); + + const transport = createServerTransport(systemToken, { + baseUrl: instanceUrl, + }); + + return createClientFor(service)(transport); +} + +const idpService = await createServiceForHost(IdentityProviderService); +const orgService = await createServiceForHost(OrganizationService); +export const sessionService = await createServiceForHost(SessionService); +const userService = await createServiceForHost(UserService); +const oidcService = await createServiceForHost(OIDCService); +const settingsService = await createServiceForHost(SettingsService); + +const systemService = async () => { + const systemToken = await systemAPIToken(); + + const transport = createServerTransport(systemToken, { + baseUrl: process.env.ZITADEL_API_URL, + }); + + return createSystemServiceClient(transport); +}; + +export async function getInstanceByHost(host: string) { + return (await systemService()) + .listInstances( + { + queries: [ + { + query: { + case: "domainQuery", + value: { + domains: [host], + }, + }, + }, + ], + }, + {}, + ) + .then((resp) => { + if (resp.result.length !== 1) { + throw new Error("Could not find instance"); + } + + return resp.result[0]; + }); +} + export async function getBrandingSettings(organization?: string) { const callback = settingsService .getBrandingSettings({ ctx: makeReqCtx(organization) }, {}) diff --git a/apps/login/tsconfig.json b/apps/login/tsconfig.json index a1efe752c55..c855c432259 100755 --- a/apps/login/tsconfig.json +++ b/apps/login/tsconfig.json @@ -2,6 +2,7 @@ "extends": "@zitadel/tsconfig/nextjs.json", "compilerOptions": { "jsx": "preserve", + "target": "es2022", "baseUrl": ".", "paths": { "@/*": ["./src/*"] diff --git a/package.json b/package.json index 82d893f2389..560bf823325 100644 --- a/package.json +++ b/package.json @@ -29,9 +29,7 @@ }, "pnpm": { "overrides": { - "@typescript-eslint/parser": "^7.9.0", - "@types/react": "npm:types-react@19.0.0-rc.1", - "@types/react-dom": "npm:types-react-dom@19.0.0-rc.1" + "@typescript-eslint/parser": "^7.9.0" } }, "devDependencies": { diff --git a/packages/zitadel-client/src/index.ts b/packages/zitadel-client/src/index.ts index 64c3af50508..30fec394641 100644 --- a/packages/zitadel-client/src/index.ts +++ b/packages/zitadel-client/src/index.ts @@ -1,8 +1,9 @@ -export { toDate } from "./helpers"; +export { createClientFor, toDate } from "./helpers"; export { NewAuthorizationBearerInterceptor } from "./interceptors"; // TODO: Move this to `./protobuf.ts` and export it from there export { create, fromJson, toJson } from "@bufbuild/protobuf"; export type { JsonObject } from "@bufbuild/protobuf"; +export type { GenService } from "@bufbuild/protobuf/codegenv1"; export { TimestampSchema, timestampDate, timestampFromDate, timestampFromMs, timestampMs } from "@bufbuild/protobuf/wkt"; export type { Duration, Timestamp } from "@bufbuild/protobuf/wkt"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 61d01b79c57..b471e9e8eee 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,8 +6,6 @@ settings: overrides: '@typescript-eslint/parser': ^7.9.0 - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 importers: @@ -78,16 +76,16 @@ importers: dependencies: '@headlessui/react': specifier: ^2.1.9 - version: 2.1.9(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + version: 2.1.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@heroicons/react': specifier: 2.1.3 - version: 2.1.3(react@19.0.0-rc-66855b96-20241106) + version: 2.1.3(react@19.0.0) '@tailwindcss/forms': specifier: 0.5.7 version: 0.5.7(tailwindcss@3.4.14) '@vercel/analytics': specifier: ^1.2.2 - version: 1.3.1(next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(sass@1.80.7))(react@19.0.0-rc-66855b96-20241106) + version: 1.3.1(next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.80.7))(react@19.0.0) '@zitadel/client': specifier: workspace:* version: link:../../packages/zitadel-client @@ -103,36 +101,39 @@ importers: deepmerge: specifier: ^4.3.1 version: 4.3.1 + jose: + specifier: ^5.3.0 + version: 5.8.0 moment: specifier: ^2.29.4 version: 2.30.1 next: specifier: 15.0.4-canary.23 - version: 15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(sass@1.80.7) + version: 15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.80.7) next-intl: specifier: ^3.25.1 - version: 3.25.1(next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(sass@1.80.7))(react@19.0.0-rc-66855b96-20241106) + version: 3.25.1(next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.80.7))(react@19.0.0) next-themes: specifier: ^0.2.1 - version: 0.2.1(next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(sass@1.80.7))(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + version: 0.2.1(next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.80.7))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) nice-grpc: specifier: 2.0.1 version: 2.0.1 qrcode.react: specifier: ^3.1.0 - version: 3.1.0(react@19.0.0-rc-66855b96-20241106) + version: 3.1.0(react@19.0.0) react: - specifier: 19.0.0-rc-66855b96-20241106 - version: 19.0.0-rc-66855b96-20241106 + specifier: 19.0.0 + version: 19.0.0 react-dom: - specifier: 19.0.0-rc-66855b96-20241106 - version: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + specifier: 19.0.0 + version: 19.0.0(react@19.0.0) react-hook-form: specifier: 7.39.5 - version: 7.39.5(react@19.0.0-rc-66855b96-20241106) + version: 7.39.5(react@19.0.0) swr: specifier: ^2.2.0 - version: 2.2.5(react@19.0.0-rc-66855b96-20241106) + version: 2.2.5(react@19.0.0) tinycolor2: specifier: 1.4.2 version: 1.4.2 @@ -145,7 +146,7 @@ importers: version: 6.6.3 '@testing-library/react': specifier: ^16.0.1 - version: 16.0.1(@testing-library/dom@10.4.0)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1) + version: 16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@types/ms': specifier: 0.7.34 version: 0.7.34 @@ -153,11 +154,11 @@ importers: specifier: 22.9.0 version: 22.9.0 '@types/react': - specifier: npm:types-react@19.0.0-rc.1 - version: types-react@19.0.0-rc.1 + specifier: 19.0.2 + version: 19.0.2 '@types/react-dom': - specifier: npm:types-react-dom@19.0.0-rc.1 - version: types-react-dom@19.0.0-rc.1 + specifier: 19.0.2 + version: 19.0.2(@types/react@19.0.2) '@types/tinycolor2': specifier: 1.4.3 version: 1.4.3 @@ -1513,8 +1514,8 @@ packages: engines: {node: '>=18'} peerDependencies: '@testing-library/dom': ^10.0.0 - '@types/react': npm:types-react@19.0.0-rc.1 - '@types/react-dom': npm:types-react-dom@19.0.0-rc.1 + '@types/react': ^18.0.0 + '@types/react-dom': ^18.0.0 react: ^18.0.0 react-dom: ^18.0.0 peerDependenciesMeta: @@ -1553,11 +1554,13 @@ packages: '@types/node@22.9.0': resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} - '@types/prop-types@15.7.12': - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + '@types/react-dom@19.0.2': + resolution: {integrity: sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==} + peerDependencies: + '@types/react': ^19.0.0 - '@types/react@18.3.12': - resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} + '@types/react@19.0.2': + resolution: {integrity: sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==} '@types/sinonjs__fake-timers@8.1.1': resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} @@ -3947,10 +3950,10 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - react-dom@19.0.0-rc-66855b96-20241106: - resolution: {integrity: sha512-D25vdaytZ1wFIRiwNU98NPQ/upS2P8Co4/oNoa02PzHbh8deWdepjm5qwZM/46OdSiGv4WSWwxP55RO9obqJEQ==} + react-dom@19.0.0: + resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} peerDependencies: - react: 19.0.0-rc-66855b96-20241106 + react: ^19.0.0 react-hook-form@7.39.5: resolution: {integrity: sha512-OE0HKyz5IPc6svN2wd+e+evidZrw4O4WZWAWYzQVZuHi+hYnHFSLnxOq0ddjbdmaLIsLHut/ab7j72y2QT3+KA==} @@ -3968,8 +3971,8 @@ packages: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} - react@19.0.0-rc-66855b96-20241106: - resolution: {integrity: sha512-klH7xkT71SxRCx4hb1hly5FJB21Hz0ACyxbXYAECEqssUjtJeFUAaI2U1DgJAzkGEnvEm3DkxuBchMC/9K4ipg==} + react@19.0.0: + resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -4089,8 +4092,8 @@ packages: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} - scheduler@0.25.0-rc-66855b96-20241106: - resolution: {integrity: sha512-HQXp/Mnp/MMRSXMQF7urNFla+gmtXW/Gr1KliuR0iboTit4KvZRY8KYaq5ccCTAOJiUqQh2rE2F3wgUekmgdlA==} + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} @@ -4574,12 +4577,6 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - types-react-dom@19.0.0-rc.1: - resolution: {integrity: sha512-VSLZJl8VXCD0fAWp7DUTFUDCcZ8DVXOQmjhJMD03odgeFmu14ZQJHCXeETm3BEAhJqfgJaFkLnGkQv88sRx0fQ==} - - types-react@19.0.0-rc.1: - resolution: {integrity: sha512-RshndUfqTW6K3STLPis8BtAYCGOkMbtvYsi90gmVNDZBXUyUc5juf2PE9LfS/JmOlUIRO8cWTS/1MTnmhjDqyQ==} - typescript@5.6.3: resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} @@ -5438,18 +5435,18 @@ snapshots: '@floating-ui/core': 1.6.8 '@floating-ui/utils': 0.2.8 - '@floating-ui/react-dom@2.1.2(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + '@floating-ui/react-dom@2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@floating-ui/dom': 1.6.11 - react: 19.0.0-rc-66855b96-20241106 - react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@floating-ui/react@0.26.24(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + '@floating-ui/react@0.26.24(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) + '@floating-ui/react-dom': 2.1.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@floating-ui/utils': 0.2.8 - react: 19.0.0-rc-66855b96-20241106 - react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) tabbable: 6.2.0 '@floating-ui/utils@0.2.8': {} @@ -5501,18 +5498,18 @@ snapshots: dependencies: '@hapi/hoek': 9.3.0 - '@headlessui/react@2.1.9(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + '@headlessui/react@2.1.9(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: - '@floating-ui/react': 0.26.24(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) - '@react-aria/focus': 3.18.3(react@19.0.0-rc-66855b96-20241106) - '@react-aria/interactions': 3.22.3(react@19.0.0-rc-66855b96-20241106) - '@tanstack/react-virtual': 3.10.6(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) - react: 19.0.0-rc-66855b96-20241106 - react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + '@floating-ui/react': 0.26.24(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + '@react-aria/focus': 3.18.3(react@19.0.0) + '@react-aria/interactions': 3.22.3(react@19.0.0) + '@tanstack/react-virtual': 3.10.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - '@heroicons/react@2.1.3(react@19.0.0-rc-66855b96-20241106)': + '@heroicons/react@2.1.3(react@19.0.0)': dependencies: - react: 19.0.0-rc-66855b96-20241106 + react: 19.0.0 '@humanwhocodes/config-array@0.13.0': dependencies: @@ -5810,45 +5807,45 @@ snapshots: '@protobufjs/utf8@1.1.0': {} - '@react-aria/focus@3.18.3(react@19.0.0-rc-66855b96-20241106)': + '@react-aria/focus@3.18.3(react@19.0.0)': dependencies: - '@react-aria/interactions': 3.22.3(react@19.0.0-rc-66855b96-20241106) - '@react-aria/utils': 3.25.3(react@19.0.0-rc-66855b96-20241106) - '@react-types/shared': 3.25.0(react@19.0.0-rc-66855b96-20241106) + '@react-aria/interactions': 3.22.3(react@19.0.0) + '@react-aria/utils': 3.25.3(react@19.0.0) + '@react-types/shared': 3.25.0(react@19.0.0) '@swc/helpers': 0.5.5 clsx: 2.1.1 - react: 19.0.0-rc-66855b96-20241106 + react: 19.0.0 - '@react-aria/interactions@3.22.3(react@19.0.0-rc-66855b96-20241106)': + '@react-aria/interactions@3.22.3(react@19.0.0)': dependencies: - '@react-aria/ssr': 3.9.6(react@19.0.0-rc-66855b96-20241106) - '@react-aria/utils': 3.25.3(react@19.0.0-rc-66855b96-20241106) - '@react-types/shared': 3.25.0(react@19.0.0-rc-66855b96-20241106) + '@react-aria/ssr': 3.9.6(react@19.0.0) + '@react-aria/utils': 3.25.3(react@19.0.0) + '@react-types/shared': 3.25.0(react@19.0.0) '@swc/helpers': 0.5.5 - react: 19.0.0-rc-66855b96-20241106 + react: 19.0.0 - '@react-aria/ssr@3.9.6(react@19.0.0-rc-66855b96-20241106)': + '@react-aria/ssr@3.9.6(react@19.0.0)': dependencies: '@swc/helpers': 0.5.5 - react: 19.0.0-rc-66855b96-20241106 + react: 19.0.0 - '@react-aria/utils@3.25.3(react@19.0.0-rc-66855b96-20241106)': + '@react-aria/utils@3.25.3(react@19.0.0)': dependencies: - '@react-aria/ssr': 3.9.6(react@19.0.0-rc-66855b96-20241106) - '@react-stately/utils': 3.10.4(react@19.0.0-rc-66855b96-20241106) - '@react-types/shared': 3.25.0(react@19.0.0-rc-66855b96-20241106) + '@react-aria/ssr': 3.9.6(react@19.0.0) + '@react-stately/utils': 3.10.4(react@19.0.0) + '@react-types/shared': 3.25.0(react@19.0.0) '@swc/helpers': 0.5.5 clsx: 2.1.1 - react: 19.0.0-rc-66855b96-20241106 + react: 19.0.0 - '@react-stately/utils@3.10.4(react@19.0.0-rc-66855b96-20241106)': + '@react-stately/utils@3.10.4(react@19.0.0)': dependencies: '@swc/helpers': 0.5.13 - react: 19.0.0-rc-66855b96-20241106 + react: 19.0.0 - '@react-types/shared@3.25.0(react@19.0.0-rc-66855b96-20241106)': + '@react-types/shared@3.25.0(react@19.0.0)': dependencies: - react: 19.0.0-rc-66855b96-20241106 + react: 19.0.0 '@rollup/rollup-android-arm-eabi@4.25.0': optional: true @@ -5937,11 +5934,11 @@ snapshots: mini-svg-data-uri: 1.4.4 tailwindcss: 3.4.14 - '@tanstack/react-virtual@3.10.6(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)': + '@tanstack/react-virtual@3.10.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@tanstack/virtual-core': 3.10.6 - react: 19.0.0-rc-66855b96-20241106 - react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) '@tanstack/virtual-core@3.10.6': {} @@ -5966,15 +5963,15 @@ snapshots: lodash: 4.17.21 redent: 3.0.0 - '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(types-react-dom@19.0.0-rc.1)(types-react@19.0.0-rc.1)': + '@testing-library/react@16.0.1(@testing-library/dom@10.4.0)(@types/react-dom@19.0.2(@types/react@19.0.2))(@types/react@19.0.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@babel/runtime': 7.25.6 '@testing-library/dom': 10.4.0 - react: 19.0.0-rc-66855b96-20241106 - react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) optionalDependencies: - '@types/react': types-react@19.0.0-rc.1 - '@types/react-dom': types-react-dom@19.0.0-rc.1 + '@types/react': 19.0.2 + '@types/react-dom': 19.0.2(@types/react@19.0.2) '@types/aria-query@5.0.4': {} @@ -6011,11 +6008,12 @@ snapshots: dependencies: undici-types: 6.19.8 - '@types/prop-types@15.7.12': {} - - '@types/react@18.3.12': + '@types/react-dom@19.0.2(@types/react@19.0.2)': + dependencies: + '@types/react': 19.0.2 + + '@types/react@19.0.2': dependencies: - '@types/prop-types': 15.7.12 csstype: 3.1.3 '@types/sinonjs__fake-timers@8.1.1': {} @@ -6142,12 +6140,12 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vercel/analytics@1.3.1(next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(sass@1.80.7))(react@19.0.0-rc-66855b96-20241106)': + '@vercel/analytics@1.3.1(next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.80.7))(react@19.0.0)': dependencies: server-only: 0.0.1 optionalDependencies: - next: 15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(sass@1.80.7) - react: 19.0.0-rc-66855b96-20241106 + next: 15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.80.7) + react: 19.0.0 '@vercel/git-hooks@1.0.0': {} @@ -8212,21 +8210,21 @@ snapshots: negotiator@1.0.0: {} - next-intl@3.25.1(next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(sass@1.80.7))(react@19.0.0-rc-66855b96-20241106): + next-intl@3.25.1(next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.80.7))(react@19.0.0): dependencies: '@formatjs/intl-localematcher': 0.5.4 negotiator: 1.0.0 - next: 15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(sass@1.80.7) - react: 19.0.0-rc-66855b96-20241106 - use-intl: 3.25.1(react@19.0.0-rc-66855b96-20241106) + next: 15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.80.7) + react: 19.0.0 + use-intl: 3.25.1(react@19.0.0) - next-themes@0.2.1(next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(sass@1.80.7))(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106): + next-themes@0.2.1(next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.80.7))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: - next: 15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(sass@1.80.7) - react: 19.0.0-rc-66855b96-20241106 - react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + next: 15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.80.7) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) - next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106)(sass@1.80.7): + next@15.0.4-canary.23(@babel/core@7.26.0)(@playwright/test@1.48.2)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(sass@1.80.7): dependencies: '@next/env': 15.0.4-canary.23 '@swc/counter': 0.1.3 @@ -8234,9 +8232,9 @@ snapshots: busboy: 1.6.0 caniuse-lite: 1.0.30001680 postcss: 8.4.31 - react: 19.0.0-rc-66855b96-20241106 - react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) - styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.0.0) optionalDependencies: '@next/swc-darwin-arm64': 15.0.4-canary.23 '@next/swc-darwin-x64': 15.0.4-canary.23 @@ -8603,9 +8601,9 @@ snapshots: punycode@2.3.1: {} - qrcode.react@3.1.0(react@19.0.0-rc-66855b96-20241106): + qrcode.react@3.1.0(react@19.0.0): dependencies: - react: 19.0.0-rc-66855b96-20241106 + react: 19.0.0 qs@6.13.0: dependencies: @@ -8613,14 +8611,14 @@ snapshots: queue-microtask@1.2.3: {} - react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106): + react-dom@19.0.0(react@19.0.0): dependencies: - react: 19.0.0-rc-66855b96-20241106 - scheduler: 0.25.0-rc-66855b96-20241106 + react: 19.0.0 + scheduler: 0.25.0 - react-hook-form@7.39.5(react@19.0.0-rc-66855b96-20241106): + react-hook-form@7.39.5(react@19.0.0): dependencies: - react: 19.0.0-rc-66855b96-20241106 + react: 19.0.0 react-is@16.13.1: {} @@ -8628,7 +8626,7 @@ snapshots: react-refresh@0.14.2: {} - react@19.0.0-rc-66855b96-20241106: {} + react@19.0.0: {} read-cache@1.0.0: dependencies: @@ -8782,7 +8780,7 @@ snapshots: dependencies: xmlchars: 2.2.0 - scheduler@0.25.0-rc-66855b96-20241106: {} + scheduler@0.25.0: {} semver@6.3.1: {} @@ -9041,10 +9039,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(@babel/core@7.26.0)(react@19.0.0-rc-66855b96-20241106): + styled-jsx@5.1.6(@babel/core@7.26.0)(react@19.0.0): dependencies: client-only: 0.0.1 - react: 19.0.0-rc-66855b96-20241106 + react: 19.0.0 optionalDependencies: '@babel/core': 7.26.0 @@ -9072,11 +9070,11 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - swr@2.2.5(react@19.0.0-rc-66855b96-20241106): + swr@2.2.5(react@19.0.0): dependencies: client-only: 0.0.1 - react: 19.0.0-rc-66855b96-20241106 - use-sync-external-store: 1.2.2(react@19.0.0-rc-66855b96-20241106) + react: 19.0.0 + use-sync-external-store: 1.2.2(react@19.0.0) symbol-tree@3.2.4: {} @@ -9329,14 +9327,6 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - types-react-dom@19.0.0-rc.1: - dependencies: - '@types/react': 18.3.12 - - types-react@19.0.0-rc.1: - dependencies: - csstype: 3.1.3 - typescript@5.6.3: {} unbox-primitive@1.0.2: @@ -9374,15 +9364,15 @@ snapshots: dependencies: punycode: 2.3.1 - use-intl@3.25.1(react@19.0.0-rc-66855b96-20241106): + use-intl@3.25.1(react@19.0.0): dependencies: '@formatjs/fast-memoize': 2.2.3 intl-messageformat: 10.7.7 - react: 19.0.0-rc-66855b96-20241106 + react: 19.0.0 - use-sync-external-store@1.2.2(react@19.0.0-rc-66855b96-20241106): + use-sync-external-store@1.2.2(react@19.0.0): dependencies: - react: 19.0.0-rc-66855b96-20241106 + react: 19.0.0 util-deprecate@1.0.2: {}