diff --git a/README.md b/README.md index eb89909eaa1..cfe1f022fb0 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,17 @@ # ZITADEL TypeScript with Turborepo and Changesets -This repository contains all TypeScript and JavaScript packages and applications you need to create your own ZITADEL Login UI. -The repo makes use of the [build system Turbo](https://turbo.build/repo) and the [Changesets CLI for versioning the packages](https://github.com/changesets/changesets). +This repository contains all TypeScript and JavaScript packages and applications you need to create your own ZITADEL +Login UI. +The repo makes use of the [build system Turbo](https://turbo.build/repo) and +the [Changesets CLI for versioning the packages](https://github.com/changesets/changesets). **⚠️ This repo and packages are in alpha state and subject to change ⚠️** The scope of functionality of this repo and packages is limited and under active development. Once the package structure is set and all APIs are fully implemented we'll move this repo to beta state. You can read the [contribution guide](/CONTRIBUTING.md) on how to contribute. -Questions can be raised in our [Discord channel](https://discord.gg/erh5Brh7jE) or as a [GitHub issue](https://github.com/zitadel/typescript/issues). +Questions can be raised in our [Discord channel](https://discord.gg/erh5Brh7jE) or as +a [GitHub issue](https://github.com/zitadel/typescript/issues). ## Developing Your Own ZITADEL Login UI @@ -25,8 +28,8 @@ We think the easiest path of getting up and running, is the following: ## Included Apps And Packages - `login`: The login UI used by ZITADEL Cloud, powered by Next.js -- `@zitadel/server`: core components for establishing node client connection, grpc stub -- `@zitadel/client`: core components for establishing web client connection, grpc stub +- `@zitadel/node`: core components for establishing node client connection, grpc stub +- `@zitadel/client`: shared client utilities - `@zitadel/proto`: shared protobuf types - `@zitadel/react`: shared React utilities and components built with tailwindcss - `@zitadel/next`: shared Next.js utilities @@ -38,9 +41,11 @@ Each package and app is 100% [TypeScript](https://www.typescriptlang.org/). ### Login The login is currently in a work in progress state. -The goal is to implement a login UI, using the session API of ZITADEL, which also implements the OIDC Standard and is ready to use for everyone. +The goal is to implement a login UI, using the session API of ZITADEL, which also implements the OIDC Standard and is +ready to use for everyone. -In the first phase we want to have a MVP login ready with the OIDC Standard and a basic feature set. In a second step the features will be extended. +In the first phase we want to have a MVP login ready with the OIDC Standard and a basic feature set. In a second step +the features will be extended. This list should show the current implementation state, and also what is missing. You can already use the current state, and extend it with your needs. @@ -105,11 +110,14 @@ You can already use the current state, and extend it with your needs. ## Versioning And Publishing Packages Package publishing has been configured using [Changesets](https://github.com/changesets/changesets). -Here is their [documentation](https://github.com/changesets/changesets#documentation) for more information about the workflow. +Here is their [documentation](https://github.com/changesets/changesets#documentation) for more information about the +workflow. -The [GitHub Action](https://github.com/changesets/action) needs an `NPM_TOKEN` and `GITHUB_TOKEN` in the repository settings. The [Changesets bot](https://github.com/apps/changeset-bot) should also be installed on the GitHub repository. +The [GitHub Action](https://github.com/changesets/action) needs an `NPM_TOKEN` and `GITHUB_TOKEN` in the repository +settings. The [Changesets bot](https://github.com/apps/changeset-bot) should also be installed on the GitHub repository. -Read the [changesets documentation](https://github.com/changesets/changesets/blob/main/docs/automating-changesets.md) for more information about this automation +Read the [changesets documentation](https://github.com/changesets/changesets/blob/main/docs/automating-changesets.md) +for more information about this automation ### NPM @@ -136,8 +144,10 @@ pnpm install ``` then setup the environment for the login application which needs a `.env.local` in `/apps/login`. -Go to your instance and create a service user for the application having the IAM_OWNER manager role. -This user is required to have access to create users on your primary organization and reading policy data so it can be restricted to your personal use case but we'll stick with IAM_OWNER for convenience. Create a PAT and copy the value to paste it under the `ZITADEL_SERVICE_USER_TOKEN` key. +Go to your instance and create a service user for the application having the `IAM_OWNER` manager role. +This user is required to have access to create users on your primary organization and reading policy data so it can be +restricted to your personal use case but we'll stick with `IAM_OWNER` for convenience. Create a PAT and copy the value to +paste it under the `ZITADEL_SERVICE_USER_TOKEN` key. The file should look as follows: ``` @@ -164,7 +174,8 @@ Open the login application with your favorite browser at `localhost:3000`. To deploy your own version on Vercel, navigate to your instance and create a service user. Copy its id from the overview and set it as ZITADEL_SERVICE_USER_ID. -Then create a personal access token (PAT), copy and set it as ZITADEL_SERVICE_USER_TOKEN, then navigate to your instance settings and make sure it gets IAM_OWNER permissions. +Then create a personal access token (PAT), copy and set it as ZITADEL_SERVICE_USER_TOKEN, then navigate to your instance +settings and make sure it gets IAM_OWNER permissions. Finally set your instance url as ZITADEL_API_URL. Make sure to set it without trailing slash. [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fzitadel%2Ftypescript&env=ZITADEL_API_URL,ZITADEL_SERVICE_USER_ID,ZITADEL_SERVICE_USER_TOKEN&root-directory=apps/login&envDescription=Setup%20a%20service%20account%20with%20IAM_OWNER%20membership%20on%20your%20instance%20and%20provide%20its%20id%20and%20personal%20access%20token.&project-name=zitadel-login&repository-name=zitadel-login) diff --git a/apps/login/package.json b/apps/login/package.json index 44dc1bb494b..44fd33885e9 100644 --- a/apps/login/package.json +++ b/apps/login/package.json @@ -32,13 +32,14 @@ "*": "prettier --write --ignore-unknown" }, "dependencies": { - "@headlessui/react": "^1.7.14", - "@heroicons/react": "2.0.13", - "@tailwindcss/forms": "0.5.3", - "@vercel/analytics": "^1.0.0", - "@zitadel/client": "workspace:*", + "@headlessui/react": "^1.7.18", + "@heroicons/react": "2.1.3", + "@tailwindcss/forms": "0.5.7", + "@vercel/analytics": "^1.2.2", + "@zitadel/proto": "workspace:*", + "@zitadel/client2": "workspace:*", "@zitadel/react": "workspace:*", - "@zitadel/server": "workspace:*", + "@zitadel/node": "workspace:*", "clsx": "1.2.1", "copy-to-clipboard": "^3.3.3", "moment": "^2.29.4", diff --git a/apps/login/src/app/(login)/accounts/page.tsx b/apps/login/src/app/(login)/accounts/page.tsx index 638b7de060f..b7b17d95b1c 100644 --- a/apps/login/src/app/(login)/accounts/page.tsx +++ b/apps/login/src/app/(login)/accounts/page.tsx @@ -1,17 +1,15 @@ -import { Session } from "@zitadel/server"; -import { getBrandingSettings, listSessions, server } from "@/lib/zitadel"; +import { getBrandingSettings, listSessions } from "@/lib/zitadel"; import { getAllSessionCookieIds } from "@/utils/cookies"; import { UserPlusIcon } from "@heroicons/react/24/outline"; import Link from "next/link"; import SessionsList from "@/ui/SessionsList"; import DynamicTheme from "@/ui/DynamicTheme"; -async function loadSessions(): Promise { +async function loadSessions() { const ids = await getAllSessionCookieIds(); if (ids && ids.length) { const response = await listSessions( - server, ids.filter((id: string | undefined) => !!id), ); return response?.sessions ?? []; @@ -31,7 +29,7 @@ export default async function Page({ let sessions = await loadSessions(); - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); return ( diff --git a/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx b/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx index 2c55493e953..188aed21bc9 100644 --- a/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx +++ b/apps/login/src/app/(login)/idp/[provider]/failure/page.tsx @@ -1,16 +1,6 @@ import { ProviderSlug } from "@/lib/demos"; -import { getBrandingSettings, server } from "@/lib/zitadel"; -import Alert, { AlertType } from "@/ui/Alert"; +import { getBrandingSettings } from "@/lib/zitadel"; import DynamicTheme from "@/ui/DynamicTheme"; -import IdpSignin from "@/ui/IdpSignin"; -import { - AddHumanUserRequest, - IDPInformation, - RetrieveIdentityProviderIntentResponse, - user, - IDPLink, -} from "@zitadel/server"; -import { ClientError } from "nice-grpc"; const PROVIDER_NAME_MAPPING: { [provider: string]: string; @@ -29,7 +19,7 @@ export default async function Page({ const { id, token, authRequestId, organization } = searchParams; const { provider } = params; - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); if (provider) { return ( diff --git a/apps/login/src/app/(login)/idp/[provider]/success/page.tsx b/apps/login/src/app/(login)/idp/[provider]/success/page.tsx index 4c40a9a0879..ddcd987e1ca 100644 --- a/apps/login/src/app/(login)/idp/[provider]/success/page.tsx +++ b/apps/login/src/app/(login)/idp/[provider]/success/page.tsx @@ -1,59 +1,73 @@ import { ProviderSlug } from "@/lib/demos"; -import { getBrandingSettings, server } from "@/lib/zitadel"; +import { getBrandingSettings, userService } from "@/lib/zitadel"; import Alert, { AlertType } from "@/ui/Alert"; import DynamicTheme from "@/ui/DynamicTheme"; import IdpSignin from "@/ui/IdpSignin"; +import { AddHumanUserRequest } from "@zitadel/proto/zitadel/user/v2beta/user_service_pb"; import { - AddHumanUserRequest, IDPInformation, - RetrieveIdentityProviderIntentResponse, - user, IDPLink, -} from "@zitadel/server"; -import { ClientError } from "nice-grpc"; +} from "@zitadel/proto/zitadel/user/v2beta/idp_pb"; +import { PartialMessage } from "@zitadel/client2"; const PROVIDER_MAPPING: { - [provider: string]: (rI: IDPInformation) => Partial; + [provider: string]: ( + rI: IDPInformation, + ) => PartialMessage; } = { [ProviderSlug.GOOGLE]: (idp: IDPInformation) => { - const idpLink: IDPLink = { + const rawInfo = idp.rawInformation?.toJson() as { + User: { + email: string; + name?: string; + given_name?: string; + family_name?: string; + }; + }; + + const idpLink: PartialMessage = { idpId: idp.idpId, userId: idp.userId, userName: idp.userName, }; - const req: Partial = { + + const req: PartialMessage = { username: idp.userName, email: { - email: idp.rawInformation?.User?.email, - isVerified: true, + email: rawInfo.User?.email, + verification: { case: "isVerified", value: true }, }, // organisation: Organisation | undefined; profile: { - displayName: idp.rawInformation?.User?.name ?? "", - givenName: idp.rawInformation?.User?.given_name ?? "", - familyName: idp.rawInformation?.User?.family_name ?? "", + displayName: rawInfo.User?.name ?? "", + givenName: rawInfo.User?.given_name ?? "", + familyName: rawInfo.User?.family_name ?? "", }, idpLinks: [idpLink], }; return req; }, [ProviderSlug.GITHUB]: (idp: IDPInformation) => { - const idpLink: IDPLink = { + const rawInfo = idp.rawInformation?.toJson() as { + email: string; + name: string; + }; + const idpLink: PartialMessage = { idpId: idp.idpId, userId: idp.userId, userName: idp.userName, }; - const req: Partial = { + const req: PartialMessage = { username: idp.userName, email: { - email: idp.rawInformation?.email, - isVerified: true, + email: rawInfo?.email, + verification: { case: "isVerified", value: true }, }, // organisation: Organisation | undefined; profile: { - displayName: idp.rawInformation?.name ?? "", - givenName: idp.rawInformation?.name ?? "", - familyName: idp.rawInformation?.name ?? "", + displayName: rawInfo?.name ?? "", + givenName: rawInfo?.name ?? "", + familyName: rawInfo?.name ?? "", }, idpLinks: [idpLink], }; @@ -61,11 +75,7 @@ const PROVIDER_MAPPING: { }, }; -function retrieveIDPIntent( - id: string, - token: string, -): Promise { - const userService = user.getUser(server); +function retrieveIDPIntent(id: string, token: string) { return userService.retrieveIdentityProviderIntent( { idpIntentId: id, idpIntentToken: token }, {}, @@ -77,7 +87,6 @@ function createUser( info: IDPInformation, ): Promise { const userData = PROVIDER_MAPPING[provider](info); - const userService = user.getUser(server); return userService.addHumanUser(userData, {}).then((resp) => resp.userId); } @@ -91,7 +100,7 @@ export default async function Page({ const { id, token, authRequestId, organization } = searchParams; const { provider } = params; - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); if (provider && id && token) { return retrieveIDPIntent(id, token) @@ -128,7 +137,7 @@ export default async function Page({ ); }) - .catch((error: ClientError) => { + .catch((error) => { return (
@@ -136,7 +145,7 @@ export default async function Page({
{ - {JSON.stringify(error.details)} + {JSON.stringify(error.message)} }
diff --git a/apps/login/src/app/(login)/idp/page.tsx b/apps/login/src/app/(login)/idp/page.tsx index f9ea08d8305..2a5186ec98f 100644 --- a/apps/login/src/app/(login)/idp/page.tsx +++ b/apps/login/src/app/(login)/idp/page.tsx @@ -1,28 +1,16 @@ import { getBrandingSettings, getLegalAndSupportSettings, - server, + settingsService, } from "@/lib/zitadel"; import DynamicTheme from "@/ui/DynamicTheme"; import { SignInWithIDP } from "@/ui/SignInWithIDP"; -import { - GetActiveIdentityProvidersResponse, - IdentityProvider, - ZitadelServer, - settings, -} from "@zitadel/server"; +import { makeReqCtx } from "@zitadel/client2/v2beta"; -function getIdentityProviders( - server: ZitadelServer, - orgId?: string, -): Promise { - const settingsService = settings.getSettings(server); +function getIdentityProviders(orgId?: string) { return settingsService - .getActiveIdentityProviders( - orgId ? { ctx: { orgId } } : { ctx: { instance: true } }, - {}, - ) - .then((resp: GetActiveIdentityProvidersResponse) => { + .getActiveIdentityProviders({ ctx: makeReqCtx(orgId) }, {}) + .then((resp) => { return resp.identityProviders; }); } @@ -35,15 +23,15 @@ export default async function Page({ const authRequestId = searchParams?.authRequestId; const organization = searchParams?.organization; - const legal = await getLegalAndSupportSettings(server, organization); + const legal = await getLegalAndSupportSettings(organization); - const identityProviders = await getIdentityProviders(server, organization); + const identityProviders = await getIdentityProviders(organization); const host = process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : "http://localhost:3000"; - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); return ( diff --git a/apps/login/src/app/(login)/loginname/page.tsx b/apps/login/src/app/(login)/loginname/page.tsx index ca875b6b6b1..20cdeb414a5 100644 --- a/apps/login/src/app/(login)/loginname/page.tsx +++ b/apps/login/src/app/(login)/loginname/page.tsx @@ -2,29 +2,17 @@ import { getBrandingSettings, getLegalAndSupportSettings, getLoginSettings, - server, + settingsService, } from "@/lib/zitadel"; import DynamicTheme from "@/ui/DynamicTheme"; import { SignInWithIDP } from "@/ui/SignInWithIDP"; import UsernameForm from "@/ui/UsernameForm"; -import { - GetActiveIdentityProvidersResponse, - IdentityProvider, - ZitadelServer, - settings, -} from "@zitadel/server"; +import { makeReqCtx } from "@zitadel/client2/v2beta"; -function getIdentityProviders( - server: ZitadelServer, - orgId?: string, -): Promise { - const settingsService = settings.getSettings(server); +function getIdentityProviders(orgId?: string) { return settingsService - .getActiveIdentityProviders( - orgId ? { ctx: { orgId } } : { ctx: { instance: true } }, - {}, - ) - .then((resp: GetActiveIdentityProvidersResponse) => { + .getActiveIdentityProviders({ ctx: makeReqCtx(orgId) }, {}) + .then((resp) => { return resp.identityProviders; }); } @@ -39,16 +27,16 @@ export default async function Page({ const organization = searchParams?.organization; const submit: boolean = searchParams?.submit === "true"; - const loginSettings = await getLoginSettings(server, organization); - const legal = await getLegalAndSupportSettings(server); + const loginSettings = await getLoginSettings(organization); + const legal = await getLegalAndSupportSettings(); - const identityProviders = await getIdentityProviders(server, organization); + const identityProviders = await getIdentityProviders(organization); const host = process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : "http://localhost:3000"; - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); return ( diff --git a/apps/login/src/app/(login)/mfa/create/page.tsx b/apps/login/src/app/(login)/mfa/create/page.tsx new file mode 100644 index 00000000000..4fd798f7e75 --- /dev/null +++ b/apps/login/src/app/(login)/mfa/create/page.tsx @@ -0,0 +1,35 @@ +"use client"; +import { Button, ButtonVariants } from "@/ui/Button"; +import { TextInput } from "@/ui/Input"; +import UserAvatar from "@/ui/UserAvatar"; +import { useRouter } from "next/navigation"; + +export default function Page() { + const router = useRouter(); + + return ( +
+

Password

+

Enter your password.

+ + + +
+ +
+
+ + +
+
+ ); +} diff --git a/apps/login/src/app/(login)/mfa/page.tsx b/apps/login/src/app/(login)/mfa/page.tsx index 1d13c02f8fa..4efaca0fd86 100644 --- a/apps/login/src/app/(login)/mfa/page.tsx +++ b/apps/login/src/app/(login)/mfa/page.tsx @@ -2,7 +2,6 @@ import { getBrandingSettings, getSession, listAuthenticationMethodTypes, - server, } from "@/lib/zitadel"; import Alert from "@/ui/Alert"; import ChooseSecondFactor from "@/ui/ChooseSecondFactor"; @@ -33,7 +32,7 @@ export default async function Page({ loginName, organization, ); - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { if (response?.session && response.session.factors?.user?.id) { return listAuthenticationMethodTypes( response.session.factors.user.id, @@ -49,7 +48,7 @@ export default async function Page({ async function loadSessionById(sessionId: string, organization?: string) { const recent = await getSessionCookieById(sessionId, organization); - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { if (response?.session && response.session.factors?.user?.id) { return listAuthenticationMethodTypes( response.session.factors.user.id, @@ -63,7 +62,7 @@ export default async function Page({ }); } - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); return ( diff --git a/apps/login/src/app/(login)/mfa/set/page.tsx b/apps/login/src/app/(login)/mfa/set/page.tsx index 9d855b105b8..eca46999ee4 100644 --- a/apps/login/src/app/(login)/mfa/set/page.tsx +++ b/apps/login/src/app/(login)/mfa/set/page.tsx @@ -4,7 +4,6 @@ import { getSession, getUserByID, listAuthenticationMethodTypes, - server, } from "@/lib/zitadel"; import Alert from "@/ui/Alert"; import ChooseSecondFactorToSetup from "@/ui/ChooseSecondFactorToSetup"; @@ -14,7 +13,6 @@ import { getMostRecentCookieWithLoginname, getSessionCookieById, } from "@/utils/cookies"; -import { user } from "@zitadel/server"; export default async function Page({ searchParams, @@ -36,16 +34,21 @@ export default async function Page({ loginName, organization, ); - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { if (response?.session && response.session.factors?.user?.id) { const userId = response.session.factors.user.id; return listAuthenticationMethodTypes(userId).then((methods) => { return getUserByID(userId).then((user) => { + const humanUser = + user.user?.type.case === "human" + ? user.user?.type.value + : undefined; + return { factors: response.session?.factors, authMethods: methods.authMethodTypes ?? [], - phoneVerified: user.user?.human?.phone?.isVerified ?? false, - emailVerified: user.user?.human?.email?.isVerified ?? false, + phoneVerified: humanUser?.phone?.isVerified ?? false, + emailVerified: humanUser?.email?.isVerified ?? false, }; }); }); @@ -55,16 +58,20 @@ export default async function Page({ async function loadSessionById(sessionId: string, organization?: string) { const recent = await getSessionCookieById(sessionId, organization); - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { if (response?.session && response.session.factors?.user?.id) { const userId = response.session.factors.user.id; return listAuthenticationMethodTypes(userId).then((methods) => { return getUserByID(userId).then((user) => { + const humanUser = + user.user?.type.case === "human" + ? user.user?.type.value + : undefined; return { factors: response.session?.factors, authMethods: methods.authMethodTypes ?? [], - phoneVerified: user.user?.human?.phone?.isVerified ?? false, - emailVerified: user.user?.human?.email?.isVerified ?? false, + phoneVerified: humanUser?.phone?.isVerified ?? false, + emailVerified: humanUser?.email?.isVerified ?? false, }; }); }); @@ -72,8 +79,8 @@ export default async function Page({ }); } - const branding = await getBrandingSettings(server, organization); - const loginSettings = await getLoginSettings(server, organization); + const branding = await getBrandingSettings(organization); + const loginSettings = await getLoginSettings(organization); return ( diff --git a/apps/login/src/app/(login)/otp/[method]/page.tsx b/apps/login/src/app/(login)/otp/[method]/page.tsx index 814c75e53c7..fc1641da5fb 100644 --- a/apps/login/src/app/(login)/otp/[method]/page.tsx +++ b/apps/login/src/app/(login)/otp/[method]/page.tsx @@ -2,7 +2,6 @@ import { getBrandingSettings, getLoginSettings, getSession, - server, } from "@/lib/zitadel"; import Alert from "@/ui/Alert"; import DynamicTheme from "@/ui/DynamicTheme"; @@ -24,7 +23,7 @@ export default async function Page({ const { session, token } = await loadSession(loginName, organization); - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); async function loadSession(loginName?: string, organization?: string) { const recent = await getMostRecentCookieWithLoginname( @@ -32,7 +31,7 @@ export default async function Page({ organization, ); - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { return { session: response?.session, token: recent.token }; }); } diff --git a/apps/login/src/app/(login)/otp/[method]/set/page.tsx b/apps/login/src/app/(login)/otp/[method]/set/page.tsx index f1785fd683d..d4161e09a05 100644 --- a/apps/login/src/app/(login)/otp/[method]/set/page.tsx +++ b/apps/login/src/app/(login)/otp/[method]/set/page.tsx @@ -4,7 +4,6 @@ import { getBrandingSettings, getSession, registerTOTP, - server, } from "@/lib/zitadel"; import Alert from "@/ui/Alert"; import { Button, ButtonVariants } from "@/ui/Button"; @@ -13,9 +12,8 @@ import { Spinner } from "@/ui/Spinner"; import TOTPRegister from "@/ui/TOTPRegister"; import UserAvatar from "@/ui/UserAvatar"; import { getMostRecentCookieWithLoginname } from "@/utils/cookies"; -import { RegisterTOTPResponse } from "@zitadel/server"; import Link from "next/link"; -import { ClientError } from "nice-grpc"; +import { RegisterTOTPResponse } from "@zitadel/proto/zitadel/user/v2beta/user_service_pb"; export default async function Page({ searchParams, @@ -28,11 +26,11 @@ export default async function Page({ searchParams; const { method } = params; - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); const { session, token } = await loadSession(loginName, organization); let totpResponse: RegisterTOTPResponse | undefined, - totpError: ClientError | undefined; + totpError: Error | undefined; if (session && session.factors?.user?.id) { if (method === "time-based") { await registerTOTP(session.factors.user.id) @@ -63,7 +61,7 @@ export default async function Page({ organization, ); - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { return { session: response?.session, token: recent.token }; }); } @@ -111,7 +109,7 @@ export default async function Page({ {totpError && (
- {totpError?.details} + {totpError?.message}
)} diff --git a/apps/login/src/app/(login)/passkey/add/page.tsx b/apps/login/src/app/(login)/passkey/add/page.tsx index 33980960fd7..ac8656342a4 100644 --- a/apps/login/src/app/(login)/passkey/add/page.tsx +++ b/apps/login/src/app/(login)/passkey/add/page.tsx @@ -1,4 +1,4 @@ -import { getBrandingSettings, getSession, server } from "@/lib/zitadel"; +import { getBrandingSettings, getSession } from "@/lib/zitadel"; import Alert, { AlertType } from "@/ui/Alert"; import DynamicTheme from "@/ui/DynamicTheme"; import RegisterPasskey from "@/ui/RegisterPasskey"; @@ -20,7 +20,7 @@ export default async function Page({ loginName, organization, ); - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { if (response?.session) { return response.session; } @@ -33,7 +33,7 @@ export default async function Page({ ? "When set up, you will be able to authenticate without a password." : "Your device will ask for your fingerprint, face, or screen lock"; - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); return ( diff --git a/apps/login/src/app/(login)/passkey/login/page.tsx b/apps/login/src/app/(login)/passkey/login/page.tsx index 00a1b2a1b9f..fe315348504 100644 --- a/apps/login/src/app/(login)/passkey/login/page.tsx +++ b/apps/login/src/app/(login)/passkey/login/page.tsx @@ -1,4 +1,4 @@ -import { getBrandingSettings, getSession, server } from "@/lib/zitadel"; +import { getBrandingSettings, getSession } from "@/lib/zitadel"; import Alert from "@/ui/Alert"; import DynamicTheme from "@/ui/DynamicTheme"; import LoginPasskey from "@/ui/LoginPasskey"; @@ -32,7 +32,7 @@ export default async function Page({ loginName, organization, ); - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { if (response?.session) { return response.session; } @@ -41,14 +41,14 @@ export default async function Page({ async function loadSessionById(sessionId: string, organization?: string) { const recent = await getSessionCookieById(sessionId, organization); - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { if (response?.session) { return response.session; } }); } - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); return ( diff --git a/apps/login/src/app/(login)/password/page.tsx b/apps/login/src/app/(login)/password/page.tsx index 75938ccddcb..c0fa08bd4a8 100644 --- a/apps/login/src/app/(login)/password/page.tsx +++ b/apps/login/src/app/(login)/password/page.tsx @@ -2,7 +2,6 @@ import { getBrandingSettings, getLoginSettings, getSession, - server, } from "@/lib/zitadel"; import Alert from "@/ui/Alert"; import DynamicTheme from "@/ui/DynamicTheme"; @@ -25,15 +24,15 @@ export default async function Page({ organization, ); - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { if (response?.session) { return response.session; } }); } - const branding = await getBrandingSettings(server, organization); - const loginSettings = await getLoginSettings(server, organization); + const branding = await getBrandingSettings(organization); + const loginSettings = await getLoginSettings(organization); return ( diff --git a/apps/login/src/app/(login)/register/page.tsx b/apps/login/src/app/(login)/register/page.tsx index b41634c488a..d9f7ef0f637 100644 --- a/apps/login/src/app/(login)/register/page.tsx +++ b/apps/login/src/app/(login)/register/page.tsx @@ -2,7 +2,6 @@ import { getBrandingSettings, getLegalAndSupportSettings, getPasswordComplexitySettings, - server, } from "@/lib/zitadel"; import DynamicTheme from "@/ui/DynamicTheme"; import RegisterFormWithoutPassword from "@/ui/RegisterFormWithoutPassword"; @@ -18,13 +17,11 @@ export default async function Page({ const setPassword = !!(firstname && lastname && email); - const legal = await getLegalAndSupportSettings(server, organization); - const passwordComplexitySettings = await getPasswordComplexitySettings( - server, - organization, - ); + const legal = await getLegalAndSupportSettings(organization); + const passwordComplexitySettings = + await getPasswordComplexitySettings(organization); - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); return setPassword ? ( diff --git a/apps/login/src/app/(login)/signedin/page.tsx b/apps/login/src/app/(login)/signedin/page.tsx index edf4b491c69..bdc6d0d6982 100644 --- a/apps/login/src/app/(login)/signedin/page.tsx +++ b/apps/login/src/app/(login)/signedin/page.tsx @@ -1,9 +1,4 @@ -import { - createCallback, - getBrandingSettings, - getSession, - server, -} from "@/lib/zitadel"; +import { createCallback, getBrandingSettings, getSession } from "@/lib/zitadel"; import DynamicTheme from "@/ui/DynamicTheme"; import UserAvatar from "@/ui/UserAvatar"; import { getMostRecentCookieWithLoginname } from "@/utils/cookies"; @@ -13,14 +8,17 @@ async function loadSession(loginName: string, authRequestId?: string) { const recent = await getMostRecentCookieWithLoginname(`${loginName}`); if (authRequestId) { - return createCallback(server, { + return createCallback({ authRequestId, - session: { sessionId: recent.id, sessionToken: recent.token }, + callbackKind: { + case: "session", + value: { sessionId: recent.id, sessionToken: recent.token }, + }, }).then(({ callbackUrl }) => { return redirect(callbackUrl); }); } - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { if (response?.session) { return response.session; } @@ -31,7 +29,7 @@ export default async function Page({ searchParams }: { searchParams: any }) { const { loginName, authRequestId, organization } = searchParams; const sessionFactors = await loadSession(loginName, authRequestId); - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); return ( diff --git a/apps/login/src/app/(login)/u2f/page.tsx b/apps/login/src/app/(login)/u2f/page.tsx index 87573bcaed3..2c8c8b19d63 100644 --- a/apps/login/src/app/(login)/u2f/page.tsx +++ b/apps/login/src/app/(login)/u2f/page.tsx @@ -2,7 +2,6 @@ import { getBrandingSettings, getLoginSettings, getSession, - server, } from "@/lib/zitadel"; import Alert from "@/ui/Alert"; import DynamicTheme from "@/ui/DynamicTheme"; @@ -22,7 +21,7 @@ export default async function Page({ }) { const { loginName, authRequestId, sessionId, organization } = searchParams; - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); const sessionFactors = sessionId ? await loadSessionById(sessionId, organization) @@ -36,7 +35,7 @@ export default async function Page({ loginName, organization, ); - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { if (response?.session) { return response.session; } @@ -45,7 +44,7 @@ export default async function Page({ async function loadSessionById(sessionId: string, organization?: string) { const recent = await getSessionCookieById(sessionId, organization); - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { if (response?.session) { return response.session; } diff --git a/apps/login/src/app/(login)/u2f/set/page.tsx b/apps/login/src/app/(login)/u2f/set/page.tsx index c51c88cf2e4..2b3caf3d7ff 100644 --- a/apps/login/src/app/(login)/u2f/set/page.tsx +++ b/apps/login/src/app/(login)/u2f/set/page.tsx @@ -1,4 +1,4 @@ -import { getBrandingSettings, getSession, server } from "@/lib/zitadel"; +import { getBrandingSettings, getSession } from "@/lib/zitadel"; import Alert, { AlertType } from "@/ui/Alert"; import DynamicTheme from "@/ui/DynamicTheme"; import RegisterPasskey from "@/ui/RegisterPasskey"; @@ -20,7 +20,7 @@ export default async function Page({ loginName, organization, ); - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { if (response?.session) { return response.session; } @@ -30,7 +30,7 @@ export default async function Page({ const description = "Your device will ask for your fingerprint, face, or screen lock"; - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); return ( diff --git a/apps/login/src/app/(login)/verify/page.tsx b/apps/login/src/app/(login)/verify/page.tsx index 0049fcecd9d..5bc0cb0eb64 100644 --- a/apps/login/src/app/(login)/verify/page.tsx +++ b/apps/login/src/app/(login)/verify/page.tsx @@ -1,4 +1,4 @@ -import { getBrandingSettings, server } from "@/lib/zitadel"; +import { getBrandingSettings } from "@/lib/zitadel"; import DynamicTheme from "@/ui/DynamicTheme"; import VerifyEmailForm from "@/ui/VerifyEmailForm"; import { ExclamationTriangleIcon } from "@heroicons/react/24/outline"; @@ -15,7 +15,7 @@ export default async function Page({ searchParams }: { searchParams: any }) { passwordset, } = searchParams; - const branding = await getBrandingSettings(server, organization); + const branding = await getBrandingSettings(organization); return ( diff --git a/apps/login/src/app/api/idp/start/route.ts b/apps/login/src/app/api/idp/start/route.ts index 795e563f8a2..7d7d967977b 100644 --- a/apps/login/src/app/api/idp/start/route.ts +++ b/apps/login/src/app/api/idp/start/route.ts @@ -1,4 +1,4 @@ -import { server, startIdentityProviderFlow } from "@/lib/zitadel"; +import { startIdentityProviderFlow } from "@/lib/zitadel"; import { NextRequest, NextResponse } from "next/server"; export async function POST(request: NextRequest) { @@ -6,7 +6,7 @@ export async function POST(request: NextRequest) { if (body) { let { idpId, successUrl, failureUrl } = body; - return startIdentityProviderFlow(server, { + return startIdentityProviderFlow({ idpId, urls: { successUrl, diff --git a/apps/login/src/app/api/loginname/route.ts b/apps/login/src/app/api/loginname/route.ts index 75c9635cb87..7707a01c6fc 100644 --- a/apps/login/src/app/api/loginname/route.ts +++ b/apps/login/src/app/api/loginname/route.ts @@ -7,11 +7,7 @@ export async function POST(request: NextRequest) { if (body) { const { loginName, authRequestId, organization } = body; return listUsers(loginName, organization).then((users) => { - if ( - users.details && - users.details.totalResult == 1 && - users.result[0].userId - ) { + if (users.details?.totalResult == BigInt(1) && users.result[0].userId) { const userId = users.result[0].userId; return createSessionForUserIdAndUpdateCookie( userId, diff --git a/apps/login/src/app/api/otp/set/route.ts b/apps/login/src/app/api/otp/set/route.ts index 244702cddad..b9d27b63cdf 100644 --- a/apps/login/src/app/api/otp/set/route.ts +++ b/apps/login/src/app/api/otp/set/route.ts @@ -5,8 +5,9 @@ import { getSessionCookieByLoginName, } from "@/utils/cookies"; import { setSessionAndUpdateCookie } from "@/utils/session"; -import { Checks } from "@zitadel/server"; import { NextRequest, NextResponse, userAgent } from "next/server"; +import { Checks } from "@zitadel/proto/zitadel/session/v2beta/session_service_pb"; +import { PlainMessage } from "@zitadel/client2"; export async function POST(request: NextRequest) { const body = await request.json(); @@ -31,7 +32,7 @@ export async function POST(request: NextRequest) { return recentPromise .then((recent) => { - const checks: Checks = {}; + const checks: PlainMessage = {}; if (method === "time-based") { checks.totp = { diff --git a/apps/login/src/app/api/passkeys/route.ts b/apps/login/src/app/api/passkeys/route.ts index 36293280ad6..4489bee3081 100644 --- a/apps/login/src/app/api/passkeys/route.ts +++ b/apps/login/src/app/api/passkeys/route.ts @@ -2,7 +2,6 @@ import { createPasskeyRegistrationLink, getSession, registerPasskey, - server, } from "@/lib/zitadel"; import { getSessionCookieById } from "@/utils/cookies"; import { NextRequest, NextResponse } from "next/server"; @@ -14,11 +13,7 @@ export async function POST(request: NextRequest) { const sessionCookie = await getSessionCookieById(sessionId); - const session = await getSession( - server, - sessionCookie.id, - sessionCookie.token, - ); + const session = await getSession(sessionCookie.id, sessionCookie.token); const domain: string = request.nextUrl.hostname; @@ -29,6 +24,9 @@ export async function POST(request: NextRequest) { return createPasskeyRegistrationLink(userId) .then((resp) => { const code = resp.code; + if (!code) { + throw new Error("Missing code in response"); + } return registerPasskey(userId, code, domain).then((resp) => { return NextResponse.json(resp); }); diff --git a/apps/login/src/app/api/passkeys/verify/route.ts b/apps/login/src/app/api/passkeys/verify/route.ts index 4cfd834253a..a09b848c083 100644 --- a/apps/login/src/app/api/passkeys/verify/route.ts +++ b/apps/login/src/app/api/passkeys/verify/route.ts @@ -1,4 +1,4 @@ -import { getSession, server, verifyPasskeyRegistration } from "@/lib/zitadel"; +import { getSession, verifyPasskeyRegistration } from "@/lib/zitadel"; import { getSessionCookieById } from "@/utils/cookies"; import { NextRequest, NextResponse, userAgent } from "next/server"; @@ -15,17 +15,12 @@ export async function POST(request: NextRequest) { } const sessionCookie = await getSessionCookieById(sessionId); - const session = await getSession( - server, - sessionCookie.id, - sessionCookie.token, - ); + const session = await getSession(sessionCookie.id, sessionCookie.token); const userId = session?.session?.factors?.user?.id; if (userId) { return verifyPasskeyRegistration( - server, passkeyId, passkeyName, publicKeyCredential, diff --git a/apps/login/src/app/api/registeruser/route.ts b/apps/login/src/app/api/registeruser/route.ts index 7ed49f48b08..dcb3626a635 100644 --- a/apps/login/src/app/api/registeruser/route.ts +++ b/apps/login/src/app/api/registeruser/route.ts @@ -1,4 +1,4 @@ -import { addHumanUser, server } from "@/lib/zitadel"; +import { addHumanUser } from "@/lib/zitadel"; import { createSessionAndUpdateCookie, createSessionForUserIdAndUpdateCookie, @@ -17,7 +17,7 @@ export async function POST(request: NextRequest) { authRequestId, } = body; - return addHumanUser(server, { + return addHumanUser({ email: email, firstName, lastName, diff --git a/apps/login/src/app/api/resendverifyemail/route.ts b/apps/login/src/app/api/resendverifyemail/route.ts index 3ccd724d432..bf75776d683 100644 --- a/apps/login/src/app/api/resendverifyemail/route.ts +++ b/apps/login/src/app/api/resendverifyemail/route.ts @@ -1,4 +1,4 @@ -import { setEmail, server } from "@/lib/zitadel"; +import { setEmail } from "@/lib/zitadel"; import { NextRequest, NextResponse } from "next/server"; export async function POST(request: NextRequest) { @@ -7,7 +7,7 @@ export async function POST(request: NextRequest) { const { userId, code } = body; // replace with resend Mail method once its implemented - return setEmail(server, userId) + return setEmail(userId) .then((resp) => { return NextResponse.json(resp); }) diff --git a/apps/login/src/app/api/session/route.ts b/apps/login/src/app/api/session/route.ts index 404933406c8..c0bc0d06e28 100644 --- a/apps/login/src/app/api/session/route.ts +++ b/apps/login/src/app/api/session/route.ts @@ -1,5 +1,4 @@ import { - server, deleteSession, getSession, getUserByID, @@ -17,7 +16,6 @@ import { createSessionForIdpAndUpdateCookie, setSessionAndUpdateCookie, } from "@/utils/session"; -import { Challenges, Checks, RequestChallenges } from "@zitadel/server"; import { NextRequest, NextResponse } from "next/server"; export async function POST(request: NextRequest) { @@ -104,27 +102,23 @@ export async function PUT(request: NextRequest) { challenges && (challenges.otpEmail === "" || challenges.otpSms === "") ) { - const sessionResponse = await getSession( - server, - recent.id, - recent.token, - ); + const sessionResponse = await getSession(recent.id, recent.token); + if (sessionResponse && sessionResponse.session?.factors?.user?.id) { const userResponse = await getUserByID( sessionResponse.session.factors.user.id, ); - if ( - challenges.otpEmail === "" && - userResponse.user?.human?.email?.email - ) { - challenges.otpEmail = userResponse.user?.human?.email?.email; + const humanUser = + userResponse.user?.type.case === "human" + ? userResponse.user?.type.value + : undefined; + + if (challenges.otpEmail === "" && humanUser?.email?.email) { + challenges.otpEmail = humanUser?.email?.email; } - if ( - challenges.otpSms === "" && - userResponse.user?.human?.phone?.phone - ) { - challenges.otpSms = userResponse.user?.human?.phone?.phone; + if (challenges.otpSms === "" && humanUser?.phone?.phone) { + challenges.otpSms = humanUser?.phone?.phone; } } } @@ -176,7 +170,7 @@ export async function DELETE(request: NextRequest) { if (id) { const session = await getSessionCookieById(id); - return deleteSession(server, session.id, session.token) + return deleteSession(session.id, session.token) .then(() => { return removeSessionFromCookie(session) .then(() => { diff --git a/apps/login/src/app/api/u2f/route.ts b/apps/login/src/app/api/u2f/route.ts index 368c5a80083..6a1c1a82b40 100644 --- a/apps/login/src/app/api/u2f/route.ts +++ b/apps/login/src/app/api/u2f/route.ts @@ -3,7 +3,6 @@ import { getSession, registerPasskey, registerU2F, - server, } from "@/lib/zitadel"; import { getSessionCookieById } from "@/utils/cookies"; import { NextRequest, NextResponse } from "next/server"; @@ -15,11 +14,7 @@ export async function POST(request: NextRequest) { const sessionCookie = await getSessionCookieById(sessionId); - const session = await getSession( - server, - sessionCookie.id, - sessionCookie.token, - ); + const session = await getSession(sessionCookie.id, sessionCookie.token); const domain: string = request.nextUrl.hostname; diff --git a/apps/login/src/app/api/u2f/verify/route.ts b/apps/login/src/app/api/u2f/verify/route.ts index 1ea83f72561..ef597e5f39e 100644 --- a/apps/login/src/app/api/u2f/verify/route.ts +++ b/apps/login/src/app/api/u2f/verify/route.ts @@ -1,7 +1,8 @@ -import { getSession, server, verifyU2FRegistration } from "@/lib/zitadel"; +import { getSession, verifyU2FRegistration } from "@/lib/zitadel"; import { getSessionCookieById } from "@/utils/cookies"; -import { VerifyU2FRegistrationRequest } from "@zitadel/server"; import { NextRequest, NextResponse, userAgent } from "next/server"; +import { VerifyU2FRegistrationRequest } from "@zitadel/proto/zitadel/user/v2beta/user_service_pb"; +import { PlainMessage } from "@zitadel/client2"; export async function POST(request: NextRequest) { const body = await request.json(); @@ -16,16 +17,12 @@ export async function POST(request: NextRequest) { } const sessionCookie = await getSessionCookieById(sessionId); - const session = await getSession( - server, - sessionCookie.id, - sessionCookie.token, - ); + const session = await getSession(sessionCookie.id, sessionCookie.token); const userId = session?.session?.factors?.user?.id; if (userId) { - const req: VerifyU2FRegistrationRequest = { + const req: PlainMessage = { publicKeyCredential, u2fId, userId, diff --git a/apps/login/src/app/api/verifyemail/route.ts b/apps/login/src/app/api/verifyemail/route.ts index e2aae9833d2..f8a21c467b3 100644 --- a/apps/login/src/app/api/verifyemail/route.ts +++ b/apps/login/src/app/api/verifyemail/route.ts @@ -1,4 +1,4 @@ -import { server, verifyEmail } from "@/lib/zitadel"; +import { verifyEmail } from "@/lib/zitadel"; import { NextRequest, NextResponse } from "next/server"; export async function POST(request: NextRequest) { @@ -6,7 +6,7 @@ export async function POST(request: NextRequest) { if (body) { const { userId, code } = body; - return verifyEmail(server, userId, code) + return verifyEmail(userId, code) .then((resp) => { return NextResponse.json(resp); }) diff --git a/apps/login/src/app/layout.tsx b/apps/login/src/app/layout.tsx index 0eb4b191b33..5e299faf04c 100644 --- a/apps/login/src/app/layout.tsx +++ b/apps/login/src/app/layout.tsx @@ -6,8 +6,6 @@ import { LayoutProviders } from "@/ui/LayoutProviders"; import { Analytics } from "@vercel/analytics/react"; import ThemeWrapper from "@/ui/ThemeWrapper"; import { getBrandingSettings } from "@/lib/zitadel"; -import { server } from "../lib/zitadel"; -import { BrandingSettings } from "@zitadel/server"; import ThemeProvider from "@/ui/ThemeProvider"; import Theme from "@/ui/Theme"; diff --git a/apps/login/src/app/login/route.ts b/apps/login/src/app/login/route.ts index e6a8c3357bd..e81f56637d8 100644 --- a/apps/login/src/app/login/route.ts +++ b/apps/login/src/app/login/route.ts @@ -3,15 +3,17 @@ import { getAuthRequest, getOrgByDomain, listSessions, - server, } from "@/lib/zitadel"; import { SessionCookie, getAllSessions } from "@/utils/cookies"; -import { Session, AuthRequest, Prompt } from "@zitadel/server"; import { NextRequest, NextResponse } from "next/server"; +import { Session } from "@zitadel/proto/zitadel/session/v2beta/session_pb"; +import { + AuthRequest, + Prompt, +} from "@zitadel/proto/zitadel/oidc/v2beta/authorization_pb"; async function loadSessions(ids: string[]): Promise { const response = await listSessions( - server, ids.filter((id: string | undefined) => !!id), ); @@ -81,9 +83,12 @@ export async function GET(request: NextRequest) { sessionToken: cookie?.token, }; - const { callbackUrl } = await createCallback(server, { + const { callbackUrl } = await createCallback({ authRequestId, - session, + callbackKind: { + case: "session", + value: session, + }, }); return NextResponse.redirect(callbackUrl); } @@ -92,7 +97,7 @@ export async function GET(request: NextRequest) { if (authRequestId) { console.log(`Login with authRequest: ${authRequestId}`); - const { authRequest } = await getAuthRequest(server, { authRequestId }); + const { authRequest } = await getAuthRequest({ authRequestId }); let organization = ""; @@ -132,7 +137,7 @@ export async function GET(request: NextRequest) { return NextResponse.redirect(accountsUrl); }; - if (authRequest && authRequest.prompt.includes(Prompt.PROMPT_CREATE)) { + if (authRequest && authRequest.prompt.includes(Prompt.CREATE)) { const registerUrl = new URL("/register", request.url); if (authRequest?.id) { registerUrl.searchParams.set("authRequestId", authRequest?.id); @@ -147,9 +152,9 @@ export async function GET(request: NextRequest) { // use existing session and hydrate it for oidc if (authRequest && sessions.length) { // if some accounts are available for selection and select_account is set - if (authRequest.prompt.includes(Prompt.PROMPT_SELECT_ACCOUNT)) { + if (authRequest.prompt.includes(Prompt.SELECT_ACCOUNT)) { return gotoAccounts(); - } else if (authRequest.prompt.includes(Prompt.PROMPT_LOGIN)) { + } else if (authRequest.prompt.includes(Prompt.LOGIN)) { // if prompt is login const loginNameUrl = new URL("/loginname", request.url); if (authRequest?.id) { @@ -162,7 +167,7 @@ export async function GET(request: NextRequest) { loginNameUrl.searchParams.set("organization", organization); } return NextResponse.redirect(loginNameUrl); - } else if (authRequest.prompt.includes(Prompt.PROMPT_NONE)) { + } else if (authRequest.prompt.includes(Prompt.NONE)) { // NONE prompt - silent authentication let selectedSession = findSession(sessions, authRequest); @@ -177,9 +182,12 @@ export async function GET(request: NextRequest) { sessionId: cookie?.id, sessionToken: cookie?.token, }; - const { callbackUrl } = await createCallback(server, { + const { callbackUrl } = await createCallback({ authRequestId, - session, + callbackKind: { + case: "session", + value: session, + }, }); return NextResponse.redirect(callbackUrl); } else { @@ -209,9 +217,12 @@ export async function GET(request: NextRequest) { sessionToken: cookie?.token, }; try { - const { callbackUrl } = await createCallback(server, { + const { callbackUrl } = await createCallback({ authRequestId, - session, + callbackKind: { + case: "session", + value: session, + }, }); if (callbackUrl) { return NextResponse.redirect(callbackUrl); diff --git a/apps/login/src/lib/demos.ts b/apps/login/src/lib/demos.ts index fa0742a46e4..464bb578897 100644 --- a/apps/login/src/lib/demos.ts +++ b/apps/login/src/lib/demos.ts @@ -35,7 +35,7 @@ export const demos: { name: string; items: Item[] }[] = [ }, { name: "IDP Register", - slug: "register/idp", + slug: "idp", description: "Add a user from an external identity provider", }, ], diff --git a/apps/login/src/lib/server-actions.ts b/apps/login/src/lib/server-actions.ts index 5ced55c6112..612f5f059c3 100644 --- a/apps/login/src/lib/server-actions.ts +++ b/apps/login/src/lib/server-actions.ts @@ -1,7 +1,7 @@ "use server"; import { getMostRecentCookieWithLoginname } from "@/utils/cookies"; -import { getSession, server, verifyTOTPRegistration } from "./zitadel"; +import { getSession, verifyTOTPRegistration } from "./zitadel"; export async function verifyTOTP( code: string, @@ -10,7 +10,7 @@ export async function verifyTOTP( ) { return getMostRecentCookieWithLoginname(loginName, organization) .then((recent) => { - return getSession(server, recent.id, recent.token).then((response) => { + return getSession(recent.id, recent.token).then((response) => { return { session: response?.session, token: recent.token }; }); }) diff --git a/apps/login/src/lib/zitadel.ts b/apps/login/src/lib/zitadel.ts index b4f0ec90e2e..f4d7f8e09f9 100644 --- a/apps/login/src/lib/zitadel.ts +++ b/apps/login/src/lib/zitadel.ts @@ -1,109 +1,51 @@ -import { VerifyU2FRegistrationRequest } from "@zitadel/server"; import { - GetUserByIDResponse, - RegisterTOTPResponse, - VerifyTOTPRegistrationResponse, -} from "@zitadel/server"; + createOIDCServiceClient, + createSessionServiceClient, + createSettingsServiceClient, + createUserServiceClient, + makeReqCtx, +} from "@zitadel/client2/v2beta"; +import { createManagementServiceClient } from "@zitadel/client2/v1"; +import { createServerTransport } from "@zitadel/node"; +import { Checks } from "@zitadel/proto/zitadel/session/v2beta/session_service_pb"; +import { RequestChallenges } from "@zitadel/proto/zitadel/session/v2beta/challenge_pb"; import { - LegalAndSupportSettings, - PasswordComplexitySettings, - ZitadelServer, - VerifyMyAuthFactorOTPResponse, - ZitadelServerOptions, - user, - oidc, - settings, - getServers, - auth, - initializeServer, - session, - GetGeneralSettingsResponse, - CreateSessionResponse, - GetBrandingSettingsResponse, - GetPasswordComplexitySettingsResponse, - RegisterU2FResponse, - GetLegalAndSupportSettingsResponse, - AddHumanUserResponse, - BrandingSettings, - ListSessionsResponse, - GetSessionResponse, - VerifyEmailResponse, - Checks, - SetSessionResponse, - SetSessionRequest, - ListUsersResponse, - management, - DeleteSessionResponse, - VerifyPasskeyRegistrationResponse, - LoginSettings, - GetOrgByDomainGlobalResponse, - GetLoginSettingsResponse, - ListAuthenticationMethodTypesResponse, - StartIdentityProviderIntentRequest, - StartIdentityProviderIntentResponse, RetrieveIdentityProviderIntentRequest, - RetrieveIdentityProviderIntentResponse, - GetAuthRequestResponse, - GetAuthRequestRequest, + VerifyU2FRegistrationRequest, +} from "@zitadel/proto/zitadel/user/v2beta/user_service_pb"; +import { CreateCallbackRequest, - CreateCallbackResponse, - RequestChallenges, - TextQueryMethod, - ListHumanAuthFactorsResponse, - AddHumanUserRequest, - AddOTPEmailResponse, - AddOTPSMSResponse, -} from "@zitadel/server"; +} from "@zitadel/proto/zitadel/oidc/v2beta/oidc_service_pb"; +import { TextQueryMethod } from "@zitadel/proto/zitadel/object/v2beta/object_pb"; +import type { RedirectURLs } from "@zitadel/proto/zitadel/user/v2beta/idp_pb"; +import { PlainMessage } from "@zitadel/client2"; const SESSION_LIFETIME_S = 3000; -export const zitadelConfig: ZitadelServerOptions = { - name: "zitadel login", - apiUrl: process.env.ZITADEL_API_URL ?? "", - token: process.env.ZITADEL_SERVICE_USER_TOKEN ?? "", -}; +const transport = createServerTransport( + process.env.ZITADEL_SERVICE_USER_TOKEN!, + {baseUrl: process.env.ZITADEL_API_URL!}, +); -let server: ZitadelServer; +export const sessionService = createSessionServiceClient(transport); +export const managementService = createManagementServiceClient(transport); +export const userService = createUserServiceClient(transport); +export const oidcService = createOIDCServiceClient(transport); +export const settingsService = createSettingsServiceClient(transport); -if (!getServers().length) { - console.log("initialize server"); - server = initializeServer(zitadelConfig); -} - -export async function getBrandingSettings( - server: ZitadelServer, - organization?: string, -): Promise { - const settingsService = settings.getSettings(server); +export async function getBrandingSettings(organization?: string) { return settingsService - .getBrandingSettings( - { ctx: organization ? { orgId: organization } : { instance: true } }, - {}, - ) - .then((resp: GetBrandingSettingsResponse) => resp.settings); + .getBrandingSettings({ ctx: makeReqCtx(organization) }, {}) + .then((resp) => resp.settings); } -export async function getLoginSettings( - server: ZitadelServer, - orgId?: string, -): Promise { - const settingsService = settings.getSettings(server); +export async function getLoginSettings(orgId?: string) { return settingsService - .getLoginSettings({ ctx: orgId ? { orgId } : { instance: true } }, {}) - .then((resp: GetLoginSettingsResponse) => resp.settings); + .getLoginSettings({ ctx: makeReqCtx(orgId) }, {}) + .then((resp) => resp.settings); } -export async function verifyMyAuthFactorOTP( - code: string, -): Promise { - const authService = auth.getAuth(server); - return authService.verifyMyAuthFactorOTP({ code }, {}); -} - -export async function addOTPEmail( - userId: string, -): Promise { - const userService = user.getUser(server); +export async function addOTPEmail(userId: string) { return userService.addOTPEmail( { userId, @@ -112,98 +54,72 @@ export async function addOTPEmail( ); } -export async function addOTPSMS( - userId: string, - token?: string, -): Promise { - let userService; - if (token) { - const authConfig: ZitadelServerOptions = { - name: "zitadel login", - apiUrl: process.env.ZITADEL_API_URL ?? "", - token: token, - }; +export async function addOTPSMS(userId: string, token?: string) { + // TODO: Follow up here, I do not understand the branching + // let userService; + // if (token) { + // const authConfig: ZitadelServerOptions = { + // name: "zitadel login", + // apiUrl: process.env.ZITADEL_API_URL ?? "", + // token: token, + // }; + // const sessionUser = initializeServer(authConfig); + // userService = user.getUser(sessionUser); + // } else { + // userService = user.getUser(server); + // } - const sessionUser = initializeServer(authConfig); - userService = user.getUser(sessionUser); - } else { - userService = user.getUser(server); - } return userService.addOTPSMS({ userId }, {}); } -export async function registerTOTP( - userId: string, - token?: string, -): Promise { - let userService; - if (token) { - const authConfig: ZitadelServerOptions = { - name: "zitadel login", - apiUrl: process.env.ZITADEL_API_URL ?? "", - token: token, - }; - - const sessionUser = initializeServer(authConfig); - userService = user.getUser(sessionUser); - } else { - userService = user.getUser(server); - } +export async function registerTOTP(userId: string, token?: string) { + // TODO: Follow up here, I do not understand the branching + // let userService; + // if (token) { + // const authConfig: ZitadelServerOptions = { + // name: "zitadel login", + // apiUrl: process.env.ZITADEL_API_URL ?? "", + // token: token, + // }; + // + // const sessionUser = initializeServer(authConfig); + // userService = user.getUser(sessionUser); + // } else { + // userService = user.getUser(server); + // } return userService.registerTOTP({ userId }, {}); } -export async function getGeneralSettings( - server: ZitadelServer, -): Promise { - const settingsService = settings.getSettings(server); +export async function getGeneralSettings() { return settingsService .getGeneralSettings({}, {}) - .then((resp: GetGeneralSettingsResponse) => resp.supportedLanguages); + .then((resp) => resp.supportedLanguages); } -export async function getLegalAndSupportSettings( - server: ZitadelServer, - organization?: string, -): Promise { - const settingsService = settings.getSettings(server); +export async function getLegalAndSupportSettings(organization?: string) { return settingsService - .getLegalAndSupportSettings( - { ctx: organization ? { orgId: organization } : { instance: true } }, - {}, - ) - .then((resp: GetLegalAndSupportSettingsResponse) => { + .getLegalAndSupportSettings({ ctx: makeReqCtx(organization) }, {}) + .then((resp) => { return resp.settings; }); } -export async function getPasswordComplexitySettings( - server: ZitadelServer, - organization?: string, -): Promise { - const settingsService = settings.getSettings(server); - +export async function getPasswordComplexitySettings(organization?: string) { return settingsService - .getPasswordComplexitySettings( - organization - ? { ctx: { orgId: organization } } - : { ctx: { instance: true } }, - {}, - ) - .then((resp: GetPasswordComplexitySettingsResponse) => resp.settings); + .getPasswordComplexitySettings({ ctx: makeReqCtx(organization) }) + .then((resp) => resp.settings); } export async function createSessionFromChecks( - server: ZitadelServer, - checks: Checks, - challenges: RequestChallenges | undefined, -): Promise { - const sessionService = session.getSession(server); + checks: PlainMessage, + challenges: PlainMessage | undefined, +) { return sessionService.createSession( { checks: checks, challenges, lifetime: { - seconds: SESSION_LIFETIME_S, + seconds: BigInt(SESSION_LIFETIME_S), nanos: 0, }, }, @@ -212,77 +128,69 @@ export async function createSessionFromChecks( } export async function createSessionForUserIdAndIdpIntent( - server: ZitadelServer, userId: string, idpIntent: { idpIntentId?: string | undefined; idpIntentToken?: string | undefined; }, -): Promise { - const sessionService = session.getSession(server); +) { + return sessionService.createSession({ + checks: { + user: { + search: { + case: "userId", + value: userId, + }, + }, + idpIntent, + }, + // lifetime: { + // seconds: 300, + // nanos: 0, + // }, + }); +} - return sessionService.createSession( +export async function setSession( + sessionId: string, + sessionToken: string, + challenges: RequestChallenges | undefined, + checks?: PlainMessage, +) { + return sessionService.setSession( { - checks: { user: { userId }, idpIntent }, - // lifetime: { - // seconds: 300, - // nanos: 0, - // }, + sessionId, + sessionToken, + challenges, + checks: checks ? checks : {}, + metadata: {}, }, {}, ); } -export async function setSession( - server: ZitadelServer, - sessionId: string, - sessionToken: string, - challenges: RequestChallenges | undefined, - checks: Checks, -): Promise { - const sessionService = session.getSession(server); - - const payload: SetSessionRequest = { - sessionId, - sessionToken, - challenges, - checks: {}, - metadata: {}, - }; - - if (checks && payload.checks) { - payload.checks = checks; - } - - return sessionService.setSession(payload, {}); -} - -export async function getSession( - server: ZitadelServer, - sessionId: string, - sessionToken: string, -): Promise { - const sessionService = session.getSession(server); +export async function getSession(sessionId: string, sessionToken: string) { return sessionService.getSession({ sessionId, sessionToken }, {}); } -export async function deleteSession( - server: ZitadelServer, - sessionId: string, - sessionToken: string, -): Promise { - const sessionService = session.getSession(server); +export async function deleteSession(sessionId: string, sessionToken: string) { return sessionService.deleteSession({ sessionId, sessionToken }, {}); } -export async function listSessions( - server: ZitadelServer, - ids: string[], -): Promise { - const sessionService = session.getSession(server); - const query = { offset: 0, limit: 100, asc: true }; - const queries = [{ idsQuery: { ids } }]; - return sessionService.listSessions({ queries: queries }, {}); +export async function listSessions(ids: string[]) { + return sessionService.listSessions( + { + queries: [ + { + query: { + case: "idsQuery", + value: { ids: ids }, + }, + }, + ], + }, + {}, + ); } export type AddHumanUserData = { @@ -293,89 +201,82 @@ export type AddHumanUserData = { organization: string | undefined; }; -export async function addHumanUser( - server: ZitadelServer, - { email, firstName, lastName, password, organization }: AddHumanUserData, -): Promise { - const userService = user.getUser(server); - - const payload: Partial = { +export async function addHumanUser({ + email, + firstName, + lastName, + password, + organization, +}: AddHumanUserData) { + return userService.addHumanUser({ email: { email }, username: email, profile: { givenName: firstName, familyName: lastName }, - }; - - if (organization) { - payload.organization = { orgId: organization }; - } - - return userService.addHumanUser( - password - ? { - ...payload, - password: { password }, - } - : payload, - {}, - ); + organization: organization + ? { org: { case: "orgId", value: organization } } + : undefined, + passwordType: password + ? { case: "password", value: { password: password } } + : undefined, + }); } export async function verifyTOTPRegistration( code: string, userId: string, token?: string, -): Promise { - let userService; - if (token) { - const authConfig: ZitadelServerOptions = { - name: "zitadel login", - apiUrl: process.env.ZITADEL_API_URL ?? "", - token: token, - }; - - const sessionUser = initializeServer(authConfig); - userService = user.getUser(sessionUser); - } else { - userService = user.getUser(server); - } +) { + // let userService; + // if (token) { + // const authConfig: ZitadelServerOptions = { + // name: "zitadel login", + // apiUrl: process.env.ZITADEL_API_URL ?? "", + // token: token, + // }; + // + // const sessionUser = initializeServer(authConfig); + // userService = user.getUser(sessionUser); + // } else { + // userService = user.getUser(server); + // } return userService.verifyTOTPRegistration({ code, userId }, {}); } -export async function getUserByID( - userId: string, -): Promise { - const userService = user.getUser(server); - +export async function getUserByID(userId: string) { return userService.getUserByID({ userId }, {}); } -export async function listUsers( - userName: string, - organizationId: string, -): Promise { - const userService = user.getUser(server); - +export async function listUsers(userName: string, organizationId: string) { return userService.listUsers( { queries: organizationId ? [ { - userNameQuery: { - userName, - method: TextQueryMethod.TEXT_QUERY_METHOD_EQUALS, + query: { + case: "userNameQuery", + value: { + userName, + method: TextQueryMethod.EQUALS, + }, }, }, { - organizationIdQuery: { - organizationId, + query: { + case: "organizationIdQuery", + value: { + organizationId, + }, }, }, ] : [ { - userNameQuery: { - userName, - method: TextQueryMethod.TEXT_QUERY_METHOD_EQUALS, + query: { + case: "userNameQuery", + value: { + userName, + method: TextQueryMethod.EQUALS, + }, }, }, ], @@ -384,64 +285,52 @@ export async function listUsers( ); } -export async function getOrgByDomain( - domain: string, -): Promise { - const mgmtService = management.getManagement(server); - return mgmtService.getOrgByDomainGlobal({ domain }, {}); +export async function getOrgByDomain(domain: string) { + return managementService.getOrgByDomainGlobal({ domain }, {}); } -export async function startIdentityProviderFlow( - server: ZitadelServer, - { idpId, urls }: StartIdentityProviderIntentRequest, -): Promise { - const userService = user.getUser(server); - +export async function startIdentityProviderFlow({ + idpId, + urls, +}: { + idpId: string; + urls: PlainMessage; +}) { return userService.startIdentityProviderIntent({ idpId, - urls, + content: { + case: "urls", + value: urls, + }, }); } -export async function retrieveIdentityProviderInformation( - server: ZitadelServer, - { idpIntentId, idpIntentToken }: RetrieveIdentityProviderIntentRequest, -): Promise { - const userService = user.getUser(server); - +export async function retrieveIdentityProviderInformation({ + idpIntentId, + idpIntentToken, +}: RetrieveIdentityProviderIntentRequest) { return userService.retrieveIdentityProviderIntent({ idpIntentId, idpIntentToken, }); } -export async function getAuthRequest( - server: ZitadelServer, - { authRequestId }: GetAuthRequestRequest, -): Promise { - const oidcService = oidc.getOidc(server); - +export async function getAuthRequest({ + authRequestId, +}: { + authRequestId: string; +}) { return oidcService.getAuthRequest({ authRequestId, }); } -export async function createCallback( - server: ZitadelServer, - req: CreateCallbackRequest, -): Promise { - const oidcService = oidc.getOidc(server); - +export async function createCallback(req: PlainMessage) { return oidcService.createCallback(req); } -export async function verifyEmail( - server: ZitadelServer, - userId: string, - verificationCode: string, -): Promise { - const userservice = user.getUser(server); - return userservice.verifyEmail( +export async function verifyEmail(userId: string, verificationCode: string) { + return userService.verifyEmail( { userId, verificationCode, @@ -452,16 +341,11 @@ export async function verifyEmail( /** * - * @param server * @param userId the id of the user where the email should be set * @returns the newly set email */ -export async function setEmail( - server: ZitadelServer, - userId: string, -): Promise { - const userservice = user.getUser(server); - return userservice.setEmail( +export async function setEmail(userId: string) { + return userService.setEmail( { userId, }, @@ -471,48 +355,44 @@ export async function setEmail( /** * - * @param server * @param userId the id of the user where the email should be set * @returns the newly set email */ export async function createPasskeyRegistrationLink( userId: string, token?: string, -): Promise { - let userService; - if (token) { - const authConfig: ZitadelServerOptions = { - name: "zitadel login", - apiUrl: process.env.ZITADEL_API_URL ?? "", - token: token, - }; - - const sessionUser = initializeServer(authConfig); - userService = user.getUser(sessionUser); - } else { - userService = user.getUser(server); - } +) { + // let userService; + // if (token) { + // const authConfig: ZitadelServerOptions = { + // name: "zitadel login", + // apiUrl: process.env.ZITADEL_API_URL ?? "", + // token: token, + // }; + // + // const sessionUser = initializeServer(authConfig); + // userService = user.getUser(sessionUser); + // } else { + // userService = user.getUser(server); + // } return userService.createPasskeyRegistrationLink({ userId, - returnCode: {}, + medium: { + case: "returnCode", + value: {}, + }, }); } /** * - * @param server * @param userId the id of the user where the email should be set * @param domain the domain on which the factor is registered * @returns the newly set email */ -export async function registerU2F( - userId: string, - domain: string, -): Promise { - const userservice = user.getUser(server); - - return userservice.registerU2F({ +export async function registerU2F(userId: string, domain: string) { + return userService.registerU2F({ userId, domain, }); @@ -520,27 +400,22 @@ export async function registerU2F( /** * - * @param server * @param userId the id of the user where the email should be set * @param domain the domain on which the factor is registered * @returns the newly set email */ export async function verifyU2FRegistration( - request: VerifyU2FRegistrationRequest, -): Promise { - const userservice = user.getUser(server); - - return userservice.verifyU2FRegistration(request, {}); + request: PlainMessage, +) { + return userService.verifyU2FRegistration(request, {}); } /** * - * @param server * @param userId the id of the user where the email should be set * @returns the newly set email */ export async function verifyPasskeyRegistration( - server: ZitadelServer, passkeyId: string, passkeyName: string, publicKeyCredential: @@ -549,9 +424,8 @@ export async function verifyPasskeyRegistration( } | undefined, userId: string, -): Promise { - const userservice = user.getUser(server); - return userservice.verifyPasskeyRegistration( +) { + return userService.verifyPasskeyRegistration( { passkeyId, passkeyName, @@ -564,7 +438,6 @@ export async function verifyPasskeyRegistration( /** * - * @param server * @param userId the id of the user where the email should be set * @returns the newly set email */ @@ -572,9 +445,8 @@ export async function registerPasskey( userId: string, code: { id: string; code: string }, domain: string, -): Promise { - const userservice = user.getUser(server); - return userservice.registerPasskey({ +) { + return userService.registerPasskey({ userId, code, domain, @@ -584,17 +456,11 @@ export async function registerPasskey( /** * - * @param server * @param userId the id of the user where the email should be set * @returns the newly set email */ -export async function listAuthenticationMethodTypes( - userId: string, -): Promise { - const userservice = user.getUser(server); - return userservice.listAuthenticationMethodTypes({ +export async function listAuthenticationMethodTypes(userId: string) { + return userService.listAuthenticationMethodTypes({ userId, }); } - -export { server }; diff --git a/apps/login/src/ui/ChooseSecondFactor.tsx b/apps/login/src/ui/ChooseSecondFactor.tsx index 46cef17756d..48154cf008c 100644 --- a/apps/login/src/ui/ChooseSecondFactor.tsx +++ b/apps/login/src/ui/ChooseSecondFactor.tsx @@ -1,15 +1,11 @@ "use client"; -import { - AuthenticationMethodType, - LoginSettings, - login, -} from "@zitadel/server"; import Link from "next/link"; import { BadgeState, StateBadge } from "./StateBadge"; import clsx from "clsx"; import { CheckIcon } from "@heroicons/react/24/outline"; import { EMAIL, SMS, TOTP, U2F } from "./AuthMethods"; +import { AuthenticationMethodType } from "@zitadel/proto/zitadel/user/v2beta/user_service_pb"; type Props = { loginName?: string; @@ -46,10 +42,14 @@ export default function ChooseSecondFactor({ {userMethods.map((method, i) => { return (
- {method === 4 && TOTP(false, "/otp/time-based?" + params)} - {method === 5 && U2F(false, "/u2f?" + params)} - {method === 7 && EMAIL(false, "/otp/email?" + params)} - {method === 6 && SMS(false, "/otp/sms?" + params)} + {method === AuthenticationMethodType.TOTP && + TOTP(false, "/otp/time-based?" + params)} + {method === AuthenticationMethodType.U2F && + U2F(false, "/u2f?" + params)} + {method === AuthenticationMethodType.OTP_EMAIL && + EMAIL(false, "/otp/email?" + params)} + {method === AuthenticationMethodType.OTP_SMS && + SMS(false, "/otp/sms?" + params)}
); })} diff --git a/apps/login/src/ui/ChooseSecondFactorToSetup.tsx b/apps/login/src/ui/ChooseSecondFactorToSetup.tsx index f868a235ab8..de502cb8af4 100644 --- a/apps/login/src/ui/ChooseSecondFactorToSetup.tsx +++ b/apps/login/src/ui/ChooseSecondFactorToSetup.tsx @@ -1,7 +1,8 @@ "use client"; -import { AuthenticationMethodType, LoginSettings } from "@zitadel/server"; import { EMAIL, SMS, TOTP, U2F } from "./AuthMethods"; +import { LoginSettings } from "@zitadel/proto/zitadel/settings/v2beta/login_settings_pb"; +import { AuthenticationMethodType } from "@zitadel/proto/zitadel/user/v2beta/user_service_pb"; type Props = { loginName?: string; @@ -48,13 +49,25 @@ export default function ChooseSecondFactorToSetup({
{loginSettings.secondFactors.map((factor, i) => { return factor === 1 - ? TOTP(userMethods.includes(4), "/otp/time-based/set?" + params) + ? TOTP( + userMethods.includes(AuthenticationMethodType.TOTP), + "/otp/time-based/set?" + params, + ) : factor === 2 - ? U2F(userMethods.includes(5), "/u2f/set?" + params) + ? U2F( + userMethods.includes(AuthenticationMethodType.U2F), + "/u2f/set?" + params, + ) : factor === 3 && emailVerified - ? EMAIL(userMethods.includes(7), "/otp/email/set?" + params) + ? EMAIL( + userMethods.includes(AuthenticationMethodType.OTP_EMAIL), + "/otp/email/set?" + params, + ) : factor === 4 && phoneVerified - ? SMS(userMethods.includes(6), "/otp/sms/set?" + params) + ? SMS( + userMethods.includes(AuthenticationMethodType.OTP_SMS), + "/otp/sms/set?" + params, + ) : null; })}
diff --git a/apps/login/src/ui/DynamicTheme.tsx b/apps/login/src/ui/DynamicTheme.tsx index 0a91d8a5d0f..6c8a1ffee75 100644 --- a/apps/login/src/ui/DynamicTheme.tsx +++ b/apps/login/src/ui/DynamicTheme.tsx @@ -1,10 +1,10 @@ "use client"; -import { BrandingSettings } from "@zitadel/server"; import React from "react"; import { Logo } from "@/ui/Logo"; import ThemeWrapper from "./ThemeWrapper"; import { LayoutProviders } from "./LayoutProviders"; +import { BrandingSettings } from "@zitadel/proto/zitadel/settings/v2beta/branding_settings_pb"; export default function DynamicTheme({ branding, diff --git a/apps/login/src/ui/LoginOTP.tsx b/apps/login/src/ui/LoginOTP.tsx index 1235d6ec87e..f95077bd263 100644 --- a/apps/login/src/ui/LoginOTP.tsx +++ b/apps/login/src/ui/LoginOTP.tsx @@ -6,10 +6,11 @@ import { coerceToArrayBuffer, coerceToBase64Url } from "@/utils/base64"; import { Button, ButtonVariants } from "./Button"; import Alert, { AlertType } from "./Alert"; import { Spinner } from "./Spinner"; -import { Checks } from "@zitadel/server"; import { useForm } from "react-hook-form"; import { TextInput } from "./Input"; -import { Challenges } from "@zitadel/server"; +import { Checks } from "@zitadel/proto/zitadel/session/v2beta/session_service_pb"; +import { PlainMessage } from "@zitadel/client2"; +import { Challenges } from "@zitadel/proto/zitadel/session/v2beta/challenge_pb"; // either loginName or sessionId must be provided type Props = { @@ -63,7 +64,7 @@ export default function LoginOTP({ }, []); async function updateSessionForOTPChallenge() { - const challenges: Challenges = {}; + const challenges: PlainMessage = {}; if (method === "email") { challenges.otpEmail = ""; @@ -111,7 +112,7 @@ export default function LoginOTP({ body.authRequestId = authRequestId; } - const checks: Checks = {}; + const checks: PlainMessage = {}; if (method === "sms") { checks.otpSms = { code: values.code }; } diff --git a/apps/login/src/ui/LoginPasskey.tsx b/apps/login/src/ui/LoginPasskey.tsx index 6048d5b73b0..da27581af08 100644 --- a/apps/login/src/ui/LoginPasskey.tsx +++ b/apps/login/src/ui/LoginPasskey.tsx @@ -6,7 +6,7 @@ import { coerceToArrayBuffer, coerceToBase64Url } from "@/utils/base64"; import { Button, ButtonVariants } from "./Button"; import Alert from "./Alert"; import { Spinner } from "./Spinner"; -import { Checks } from "@zitadel/server"; +import { Checks } from "@zitadel/proto/zitadel/session/v2beta/session_service_pb"; // either loginName or sessionId must be provided type Props = { diff --git a/apps/login/src/ui/PasswordComplexity.tsx b/apps/login/src/ui/PasswordComplexity.tsx index 7b18dffbb4f..35ee959cc2d 100644 --- a/apps/login/src/ui/PasswordComplexity.tsx +++ b/apps/login/src/ui/PasswordComplexity.tsx @@ -4,7 +4,7 @@ import { symbolValidator, upperCaseValidator, } from "@/utils/validators"; -import { PasswordComplexitySettings } from "@zitadel/server"; +import { PasswordComplexitySettings } from "@zitadel/proto/zitadel/settings/v2beta/password_settings_pb"; type Props = { passwordComplexitySettings: PasswordComplexitySettings; @@ -68,7 +68,7 @@ export default function PasswordComplexity({
{hasMinLength ? check : cross} - Password length {passwordComplexitySettings.minLength} + Password length {passwordComplexitySettings.minLength.toString()}
) : ( diff --git a/apps/login/src/ui/PasswordForm.tsx b/apps/login/src/ui/PasswordForm.tsx index d9e766b617c..26f21927a3d 100644 --- a/apps/login/src/ui/PasswordForm.tsx +++ b/apps/login/src/ui/PasswordForm.tsx @@ -7,12 +7,9 @@ import { useForm } from "react-hook-form"; import { useRouter } from "next/navigation"; import { Spinner } from "./Spinner"; import Alert from "./Alert"; -import { - LoginSettings, - AuthFactor, - Checks, - AuthenticationMethodType, -} from "@zitadel/server"; +import { LoginSettings } from "@zitadel/proto/zitadel/settings/v2beta/login_settings_pb"; +import { Checks } from "@zitadel/proto/zitadel/session/v2beta/session_service_pb"; +import { AuthenticationMethodType } from "@zitadel/proto/zitadel/user/v2beta/user_service_pb"; type Inputs = { password: string; @@ -83,7 +80,8 @@ export default function PasswordForm({ // exclude password const availableSecondFactors = resp.authMethods?.filter( - (m: AuthenticationMethodType) => m !== 1, + (m: AuthenticationMethodType) => + m !== AuthenticationMethodType.PASSWORD, ); if (availableSecondFactors.length == 1) { const params = new URLSearchParams({ diff --git a/apps/login/src/ui/PrivacyPolicyCheckboxes.tsx b/apps/login/src/ui/PrivacyPolicyCheckboxes.tsx index da94e428cff..4879bad3809 100644 --- a/apps/login/src/ui/PrivacyPolicyCheckboxes.tsx +++ b/apps/login/src/ui/PrivacyPolicyCheckboxes.tsx @@ -2,7 +2,7 @@ import React, { useState } from "react"; import Link from "next/link"; import { Checkbox } from "./Checkbox"; -import { LegalAndSupportSettings } from "@zitadel/server"; +import { LegalAndSupportSettings } from "@zitadel/proto/zitadel/settings/v2beta/legal_settings_pb"; type Props = { legal: LegalAndSupportSettings; diff --git a/apps/login/src/ui/RegisterFormWithoutPassword.tsx b/apps/login/src/ui/RegisterFormWithoutPassword.tsx index fc95aac02ae..c8dfb1f7ecd 100644 --- a/apps/login/src/ui/RegisterFormWithoutPassword.tsx +++ b/apps/login/src/ui/RegisterFormWithoutPassword.tsx @@ -1,6 +1,5 @@ "use client"; -import { LegalAndSupportSettings } from "@zitadel/server"; import { useState } from "react"; import { Button, ButtonVariants } from "./Button"; import { TextInput } from "./Input"; @@ -12,6 +11,7 @@ import AuthenticationMethodRadio, { methods, } from "./AuthenticationMethodRadio"; import Alert from "./Alert"; +import { LegalAndSupportSettings } from "@zitadel/proto/zitadel/settings/v2beta/legal_settings_pb"; type Inputs = | { diff --git a/apps/login/src/ui/RegisterPasskey.tsx b/apps/login/src/ui/RegisterPasskey.tsx index 67c864c0c4b..ffb30788447 100644 --- a/apps/login/src/ui/RegisterPasskey.tsx +++ b/apps/login/src/ui/RegisterPasskey.tsx @@ -6,8 +6,8 @@ import { useForm } from "react-hook-form"; import { useRouter } from "next/navigation"; import { Spinner } from "./Spinner"; import Alert from "./Alert"; -import { AuthRequest, RegisterPasskeyResponse } from "@zitadel/server"; import { coerceToArrayBuffer, coerceToBase64Url } from "@/utils/base64"; +import { RegisterPasskeyResponse } from "@zitadel/proto/zitadel/user/v2beta/user_service_pb"; type Inputs = {}; type Props = { @@ -89,37 +89,31 @@ export default function RegisterPasskey({ function submitRegisterAndContinue(value: Inputs): Promise { return submitRegister().then((resp: RegisterPasskeyResponse) => { const passkeyId = resp.passkeyId; + const options: CredentialCreationOptions = + (resp.publicKeyCredentialCreationOptions?.toJson() as CredentialCreationOptions) ?? + {}; - if ( - resp.publicKeyCredentialCreationOptions && - resp.publicKeyCredentialCreationOptions.publicKey - ) { - resp.publicKeyCredentialCreationOptions.publicKey.challenge = - coerceToArrayBuffer( - resp.publicKeyCredentialCreationOptions.publicKey.challenge, - "challenge", - ); - resp.publicKeyCredentialCreationOptions.publicKey.user.id = - coerceToArrayBuffer( - resp.publicKeyCredentialCreationOptions.publicKey.user.id, - "userid", - ); - if ( - resp.publicKeyCredentialCreationOptions.publicKey.excludeCredentials - ) { - resp.publicKeyCredentialCreationOptions.publicKey.excludeCredentials.map( - (cred: any) => { - cred.id = coerceToArrayBuffer( - cred.id as string, - "excludeCredentials.id", - ); - return cred; - }, - ); + if (options?.publicKey) { + options.publicKey.challenge = coerceToArrayBuffer( + options.publicKey.challenge, + "challenge", + ); + options.publicKey.user.id = coerceToArrayBuffer( + options.publicKey.user.id, + "userid", + ); + if (options.publicKey.excludeCredentials) { + options.publicKey.excludeCredentials.map((cred: any) => { + cred.id = coerceToArrayBuffer( + cred.id as string, + "excludeCredentials.id", + ); + return cred; + }); } navigator.credentials - .create(resp.publicKeyCredentialCreationOptions) + .create(options) .then((resp) => { if ( resp && diff --git a/apps/login/src/ui/RegisterU2F.tsx b/apps/login/src/ui/RegisterU2F.tsx index 71ccad812ab..9c5bf4d9284 100644 --- a/apps/login/src/ui/RegisterU2F.tsx +++ b/apps/login/src/ui/RegisterU2F.tsx @@ -6,8 +6,8 @@ import { useForm } from "react-hook-form"; import { useRouter } from "next/navigation"; import { Spinner } from "./Spinner"; import Alert from "./Alert"; -import { RegisterU2FResponse } from "@zitadel/server"; import { coerceToArrayBuffer, coerceToBase64Url } from "@/utils/base64"; +import { RegisterU2FResponse } from "@zitadel/proto/zitadel/user/v2beta/user_service_pb"; type Inputs = {}; type Props = { @@ -87,37 +87,31 @@ export default function RegisterU2F({ function submitRegisterAndContinue(value: Inputs): Promise { return submitRegister().then((resp: RegisterU2FResponse) => { const u2fId = resp.u2fId; + const options: CredentialCreationOptions = + (resp.publicKeyCredentialCreationOptions?.toJson() as CredentialCreationOptions) ?? + {}; - if ( - resp.publicKeyCredentialCreationOptions && - resp.publicKeyCredentialCreationOptions.publicKey - ) { - resp.publicKeyCredentialCreationOptions.publicKey.challenge = - coerceToArrayBuffer( - resp.publicKeyCredentialCreationOptions.publicKey.challenge, - "challenge", - ); - resp.publicKeyCredentialCreationOptions.publicKey.user.id = - coerceToArrayBuffer( - resp.publicKeyCredentialCreationOptions.publicKey.user.id, - "userid", - ); - if ( - resp.publicKeyCredentialCreationOptions.publicKey.excludeCredentials - ) { - resp.publicKeyCredentialCreationOptions.publicKey.excludeCredentials.map( - (cred: any) => { - cred.id = coerceToArrayBuffer( - cred.id as string, - "excludeCredentials.id", - ); - return cred; - }, - ); + if (options.publicKey) { + options.publicKey.challenge = coerceToArrayBuffer( + options.publicKey.challenge, + "challenge", + ); + options.publicKey.user.id = coerceToArrayBuffer( + options.publicKey.user.id, + "userid", + ); + if (options.publicKey.excludeCredentials) { + options.publicKey.excludeCredentials.map((cred: any) => { + cred.id = coerceToArrayBuffer( + cred.id as string, + "excludeCredentials.id", + ); + return cred; + }); } navigator.credentials - .create(resp.publicKeyCredentialCreationOptions) + .create(options) .then((resp) => { if ( resp && diff --git a/apps/login/src/ui/SessionItem.tsx b/apps/login/src/ui/SessionItem.tsx index 5a620f21085..fa13e86540e 100644 --- a/apps/login/src/ui/SessionItem.tsx +++ b/apps/login/src/ui/SessionItem.tsx @@ -1,10 +1,11 @@ "use client"; -import { Session } from "@zitadel/server"; + import Link from "next/link"; import { useState } from "react"; import { Avatar } from "./Avatar"; import moment from "moment"; import { XCircleIcon } from "@heroicons/react/24/outline"; +import { Session } from "@zitadel/proto/zitadel/session/v2beta/session_pb"; export default function SessionItem({ session, @@ -15,6 +16,8 @@ export default function SessionItem({ reload: () => void; authRequestId?: string; }) { + // TODO: remove casting when bufbuild/protobuf-es@v2 is released + session = Session.fromJson(session as any); const [loading, setLoading] = useState(false); async function clearSession(id: string) { @@ -43,7 +46,7 @@ export default function SessionItem({ const validPassword = session?.factors?.password?.verifiedAt; const validPasskey = session?.factors?.webAuthN?.verifiedAt; const stillValid = session.expirationDate - ? session.expirationDate > new Date() + ? session.expirationDate.toDate() > new Date() : true; const validDate = validPassword || validPasskey; @@ -96,7 +99,7 @@ export default function SessionItem({ {validUser && ( - {validDate && moment(new Date(validDate)).fromNow()} + {validDate && moment(validDate.toDate()).fromNow()} )}
diff --git a/apps/login/src/ui/SessionsList.tsx b/apps/login/src/ui/SessionsList.tsx index a7e0c4cfaa3..d55679f8c36 100644 --- a/apps/login/src/ui/SessionsList.tsx +++ b/apps/login/src/ui/SessionsList.tsx @@ -1,9 +1,9 @@ "use client"; -import { Session } from "@zitadel/server"; import SessionItem from "./SessionItem"; import Alert from "./Alert"; import { useEffect, useState } from "react"; +import { Session } from "@zitadel/proto/zitadel/session/v2beta/session_pb"; type Props = { sessions: Session[]; diff --git a/apps/login/src/ui/SetPasswordForm.tsx b/apps/login/src/ui/SetPasswordForm.tsx index ed74d7b6428..177d302a182 100644 --- a/apps/login/src/ui/SetPasswordForm.tsx +++ b/apps/login/src/ui/SetPasswordForm.tsx @@ -1,6 +1,5 @@ "use client"; -import { PasswordComplexitySettings } from "@zitadel/server"; import PasswordComplexity from "./PasswordComplexity"; import { useState } from "react"; import { Button, ButtonVariants } from "./Button"; @@ -15,6 +14,7 @@ import { import { useRouter } from "next/navigation"; import { Spinner } from "./Spinner"; import Alert from "./Alert"; +import { PasswordComplexitySettings } from "@zitadel/proto/zitadel/settings/v2beta/password_settings_pb"; type Inputs = | { diff --git a/apps/login/src/ui/SignInWithIDP.tsx b/apps/login/src/ui/SignInWithIDP.tsx index 4e74999953e..b6f1fe3a37b 100644 --- a/apps/login/src/ui/SignInWithIDP.tsx +++ b/apps/login/src/ui/SignInWithIDP.tsx @@ -10,11 +10,12 @@ import { import { useRouter } from "next/navigation"; import { ProviderSlug } from "@/lib/demos"; import Alert from "./Alert"; +import { IdentityProvider } from "@zitadel/proto/zitadel/settings/v2beta/login_settings_pb"; export interface SignInWithIDPProps { children?: ReactNode; host: string; - identityProviders: any[]; + identityProviders: IdentityProvider[]; authRequestId?: string; organization?: string; startIDPFlowPath?: (idpId: string) => string; @@ -30,6 +31,11 @@ export function SignInWithIDP({ organization, startIDPFlowPath = START_IDP_FLOW_PATH, }: SignInWithIDPProps) { + // TODO: remove casting when bufbuild/protobuf-es@v2 is released + identityProviders = identityProviders.map((idp) => + IdentityProvider.fromJson(idp as any), + ); + const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const router = useRouter(); diff --git a/apps/login/src/ui/TOTPRegister.tsx b/apps/login/src/ui/TOTPRegister.tsx index c24c18fda07..bdec18af5c6 100644 --- a/apps/login/src/ui/TOTPRegister.tsx +++ b/apps/login/src/ui/TOTPRegister.tsx @@ -10,7 +10,6 @@ import { useState } from "react"; import { useForm } from "react-hook-form"; import { useRouter } from "next/navigation"; import { verifyTOTP } from "@/lib/server-actions"; -import { login } from "@zitadel/server"; type Inputs = { code: string; diff --git a/apps/login/src/ui/ThemeWrapper.tsx b/apps/login/src/ui/ThemeWrapper.tsx index 9c9d0bc0a23..2cfdcbc0bf3 100644 --- a/apps/login/src/ui/ThemeWrapper.tsx +++ b/apps/login/src/ui/ThemeWrapper.tsx @@ -1,11 +1,12 @@ "use client"; -import { BrandingSettings } from "@zitadel/server"; import { setTheme } from "@/utils/colors"; import { useEffect } from "react"; +import { BrandingSettings } from "@zitadel/proto/zitadel/settings/v2beta/branding_settings_pb"; +import { PartialMessage } from "@zitadel/client2"; type Props = { - branding: Partial | undefined; + branding: PartialMessage | undefined; children: React.ReactNode; }; diff --git a/apps/login/src/ui/UsernameForm.tsx b/apps/login/src/ui/UsernameForm.tsx index e1f42a8c75e..39c54049282 100644 --- a/apps/login/src/ui/UsernameForm.tsx +++ b/apps/login/src/ui/UsernameForm.tsx @@ -6,8 +6,8 @@ import { TextInput } from "./Input"; import { useForm } from "react-hook-form"; import { useRouter } from "next/navigation"; import { Spinner } from "./Spinner"; -import { LoginSettings } from "@zitadel/server"; import Alert from "./Alert"; +import { LoginSettings } from "@zitadel/proto/zitadel/settings/v2beta/login_settings_pb"; type Inputs = { loginName: string; diff --git a/apps/login/src/utils/colors.ts b/apps/login/src/utils/colors.ts index a5fba8e0c9e..d542dea6ae6 100644 --- a/apps/login/src/utils/colors.ts +++ b/apps/login/src/utils/colors.ts @@ -1,6 +1,6 @@ import tinycolor from "tinycolor2"; - -import { BrandingSettings } from "@zitadel/server"; +import { BrandingSettings } from "@zitadel/proto/zitadel/settings/v2beta/branding_settings_pb"; +import { PartialMessage } from "@zitadel/client2"; export interface Color { name: string; @@ -69,7 +69,10 @@ type BrandingColors = { }; }; -export function setTheme(document: any, policy?: Partial) { +export function setTheme( + document: any, + policy?: PartialMessage, +) { const lP: BrandingColors = { lightTheme: { backgroundColor: policy?.lightTheme?.backgroundColor || BACKGROUND, diff --git a/apps/login/src/utils/session.ts b/apps/login/src/utils/session.ts index 22f57f2662d..36e16e0e1e8 100644 --- a/apps/login/src/utils/session.ts +++ b/apps/login/src/utils/session.ts @@ -4,7 +4,6 @@ import { createSessionFromChecks, createSessionForUserIdAndIdpIntent, getSession, - server, setSession, } from "@/lib/zitadel"; import { @@ -13,11 +12,12 @@ import { updateSessionCookie, } from "./cookies"; import { - Session, Challenges, RequestChallenges, - Checks, -} from "@zitadel/server"; +} from "@zitadel/proto/zitadel/session/v2beta/challenge_pb"; +import { Session } from "@zitadel/proto/zitadel/session/v2beta/session_pb"; +import { Checks } from "@zitadel/proto/zitadel/session/v2beta/session_service_pb"; +import { PlainMessage } from "@zitadel/client2"; export async function createSessionAndUpdateCookie( loginName: string, @@ -25,22 +25,20 @@ export async function createSessionAndUpdateCookie( challenges: RequestChallenges | undefined, organization?: string, authRequestId?: string, -): Promise { +) { const createdSession = await createSessionFromChecks( - server, password ? { - user: { loginName }, + user: { search: { case: "loginName", value: loginName } }, password: { password }, // totp: { code: totpCode }, } - : { user: { loginName } }, + : { user: { search: { case: "loginName", value: loginName } } }, challenges, ); if (createdSession) { return getSession( - server, createdSession.sessionId, createdSession.sessionToken, ).then((response) => { @@ -48,9 +46,9 @@ export async function createSessionAndUpdateCookie( const sessionCookie: SessionCookie = { id: createdSession.sessionId, token: createdSession.sessionToken, - creationDate: `${response.session.creationDate?.getTime() ?? ""}`, - expirationDate: `${response.session.expirationDate?.getTime() ?? ""}`, - changeDate: `${response.session.changeDate?.getTime() ?? ""}`, + creationDate: `${response.session.creationDate?.toDate().getTime() ?? ""}`, + expirationDate: `${response.session.expirationDate?.toDate().getTime() ?? ""}`, + changeDate: `${response.session.changeDate?.toDate().getTime() ?? ""}`, loginName: response.session.factors.user.loginName ?? "", organization: response.session.factors.user.organizationId ?? "", }; @@ -82,20 +80,18 @@ export async function createSessionForUserIdAndUpdateCookie( authRequestId: string | undefined, ): Promise { const createdSession = await createSessionFromChecks( - server, password ? { - user: { userId }, + user: { search: { case: "userId", value: userId } }, password: { password }, // totp: { code: totpCode }, } - : { user: { userId } }, + : { user: { search: { case: "userId", value: userId } } }, challenges, ); if (createdSession) { return getSession( - server, createdSession.sessionId, createdSession.sessionToken, ).then((response) => { @@ -103,9 +99,9 @@ export async function createSessionForUserIdAndUpdateCookie( const sessionCookie: SessionCookie = { id: createdSession.sessionId, token: createdSession.sessionToken, - creationDate: `${response.session.creationDate?.getTime() ?? ""}`, - expirationDate: `${response.session.expirationDate?.getTime() ?? ""}`, - changeDate: `${response.session.changeDate?.getTime() ?? ""}`, + creationDate: `${response.session.creationDate?.toDate().getTime() ?? ""}`, + expirationDate: `${response.session.expirationDate?.toDate().getTime() ?? ""}`, + changeDate: `${response.session.changeDate?.toDate().getTime() ?? ""}`, loginName: response.session.factors.user.loginName ?? "", }; @@ -140,14 +136,12 @@ export async function createSessionForIdpAndUpdateCookie( authRequestId: string | undefined, ): Promise { const createdSession = await createSessionForUserIdAndIdpIntent( - server, userId, idpIntent, ); if (createdSession) { return getSession( - server, createdSession.sessionId, createdSession.sessionToken, ).then((response) => { @@ -155,9 +149,9 @@ export async function createSessionForIdpAndUpdateCookie( const sessionCookie: SessionCookie = { id: createdSession.sessionId, token: createdSession.sessionToken, - creationDate: `${response.session.creationDate?.getTime() ?? ""}`, - expirationDate: `${response.session.expirationDate?.getTime() ?? ""}`, - changeDate: `${response.session.changeDate?.getTime() ?? ""}`, + creationDate: `${response.session.creationDate?.toDate().getTime() ?? ""}`, + expirationDate: `${response.session.expirationDate?.toDate().getTime() ?? ""}`, + changeDate: `${response.session.changeDate?.toDate().getTime() ?? ""}`, loginName: response.session.factors.user.loginName ?? "", organization: response.session.factors.user.organizationId ?? "", }; @@ -188,12 +182,11 @@ export type SessionWithChallenges = Session & { export async function setSessionAndUpdateCookie( recentCookie: SessionCookie, - checks: Checks, + checks: PlainMessage, challenges: RequestChallenges | undefined, authRequestId: string | undefined, -): Promise { +) { return setSession( - server, recentCookie.id, recentCookie.token, challenges, @@ -205,7 +198,7 @@ export async function setSessionAndUpdateCookie( token: updatedSession.sessionToken, creationDate: recentCookie.creationDate, expirationDate: recentCookie.expirationDate, - changeDate: `${updatedSession.details?.changeDate?.getTime() ?? ""}`, + changeDate: `${updatedSession.details?.changeDate?.toDate().getTime() ?? ""}`, loginName: recentCookie.loginName, organization: recentCookie.organization, }; @@ -214,7 +207,7 @@ export async function setSessionAndUpdateCookie( sessionCookie.authRequestId = authRequestId; } - return getSession(server, sessionCookie.id, sessionCookie.token).then( + return getSession(sessionCookie.id, sessionCookie.token).then( (response) => { if (response?.session && response.session.factors?.user?.loginName) { const { session } = response; @@ -223,7 +216,7 @@ export async function setSessionAndUpdateCookie( token: updatedSession.sessionToken, creationDate: sessionCookie.creationDate, expirationDate: sessionCookie.expirationDate, - changeDate: `${session.changeDate?.getTime() ?? ""}`, + changeDate: `${session.changeDate?.toDate().getTime() ?? ""}`, loginName: session.factors?.user?.loginName ?? "", organization: session.factors?.user?.organizationId ?? "", }; diff --git a/apps/login/tsconfig.json b/apps/login/tsconfig.json index 161099e1652..bf3a62f57d2 100755 --- a/apps/login/tsconfig.json +++ b/apps/login/tsconfig.json @@ -2,7 +2,6 @@ "extends": "@zitadel/tsconfig/nextjs.json", "compilerOptions": { "jsx": "preserve", - "rootDir": ".", "baseUrl": ".", "paths": { "@/*": ["./src/*"] diff --git a/apps/login/turbo.json b/apps/login/turbo.json index ff7aaf0a494..92110f0fdc5 100644 --- a/apps/login/turbo.json +++ b/apps/login/turbo.json @@ -6,16 +6,32 @@ "dependsOn": ["^build"] }, "test": { - "dependsOn": ["@zitadel/server#build", "@zitadel/react#build"] + "dependsOn": [ + "@zitadel/node#build", + "@zitadel/client2#build", + "@zitadel/react#build" + ] }, "test:integration": { - "dependsOn": ["@zitadel/server#build", "@zitadel/react#build"] + "dependsOn": [ + "@zitadel/node#build", + "@zitadel/client2#build", + "@zitadel/react#build" + ] }, "test:unit": { - "dependsOn": ["@zitadel/server#build"] + "dependsOn": [ + "@zitadel/node#build", + "@zitadel/client2#build", + "@zitadel/react#build" + ] }, "test:watch": { - "dependsOn": ["@zitadel/server#build", "@zitadel/react#build"] + "dependsOn": [ + "@zitadel/node#build", + "@zitadel/client2#build", + "@zitadel/react#build" + ] } } } diff --git a/packages/eslint-config-zitadel/package.json b/packages/eslint-config-zitadel/package.json index d45f0f4316f..0bf9d54eadc 100644 --- a/packages/eslint-config-zitadel/package.json +++ b/packages/eslint-config-zitadel/package.json @@ -3,14 +3,14 @@ "version": "0.0.0", "main": "index.js", "license": "MIT", + "publishConfig": { + "access": "public" + }, "dependencies": { "eslint-config-next": "^14.2.3", "@typescript-eslint/parser": "^7.9.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-react": "^7.34.1", "eslint-config-turbo": "^1.13.3" - }, - "publishConfig": { - "access": "public" } } diff --git a/packages/zitadel-next/package.json b/packages/zitadel-next/package.json index 3c84820b9a3..d39052f8d1d 100644 --- a/packages/zitadel-next/package.json +++ b/packages/zitadel-next/package.json @@ -9,6 +9,9 @@ "files": [ "dist/**" ], + "publishConfig": { + "access": "public" + }, "scripts": { "build": "tsup", "test": "pnpm test:unit", @@ -19,25 +22,21 @@ "lint": "eslint \"src/**/*.ts*\"", "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist" }, + "peerDependencies": { + "@zitadel/react": "workspace:*", + "@zitadel/node": "workspace:*", + "next": "^14.2.3", + "react": "18.2.0" + }, + "dependencies": { + "next": "^14.2.3" + }, "devDependencies": { "@types/react": "^17.0.13", "@zitadel/tsconfig": "workspace:*", "eslint-config-zitadel": "workspace:*", "tailwindcss": "3.2.4", "postcss": "8.4.21", - "zitadel-tailwind-config": "workspace:*", - "@zitadel/server": "workspace:*" - }, - "peerDependencies": { - "@zitadel/react": "workspace:*", - "@zitadel/server": "workspace:*", - "next": "^14.2.3", - "react": "18.2.0" - }, - "publishConfig": { - "access": "public" - }, - "dependencies": { - "next": "^14.2.3" + "zitadel-tailwind-config": "workspace:*" } } diff --git a/packages/zitadel-next/turbo.json b/packages/zitadel-next/turbo.json index 9f5409262c2..44e5e99f193 100644 --- a/packages/zitadel-next/turbo.json +++ b/packages/zitadel-next/turbo.json @@ -6,7 +6,7 @@ }, "build": { "outputs": ["dist/**"], - "dependsOn": ["@zitadel/react#build", "@zitadel/server#build"] + "dependsOn": ["@zitadel/react#build"] } } } diff --git a/packages/zitadel-node/package.json b/packages/zitadel-node/package.json index 6ed0d04e117..7d88eeba904 100644 --- a/packages/zitadel-node/package.json +++ b/packages/zitadel-node/package.json @@ -32,9 +32,11 @@ }, "dependencies": { "@connectrpc/connect-node": "^1.4.0", + "@connectrpc/connect-web": "^1.4.0", "jose": "^5.3.0" }, "devDependencies": { + "@types/node": "^20.14.2", "@zitadel/client2": "workspace:*", "@zitadel/tsconfig": "workspace:*", "eslint-config-zitadel": "workspace:*" diff --git a/packages/zitadel-node/src/index.ts b/packages/zitadel-node/src/index.ts index 99bd262f690..f21e9222456 100644 --- a/packages/zitadel-node/src/index.ts +++ b/packages/zitadel-node/src/index.ts @@ -1,8 +1,9 @@ import { NewAuthorizationBearerInterceptor } from "@zitadel/client2"; -import { - createGrpcWebTransport, - GrpcTransportOptions, -} from "@connectrpc/connect-node"; +// import { +// createGrpcWebTransport, +// GrpcWebTransportOptions, +// } from "@connectrpc/connect-node"; +import { createGrpcWebTransport, GrpcWebTransportOptions } from "@connectrpc/connect-web"; import { importPKCS8, SignJWT } from "jose"; /** @@ -12,7 +13,7 @@ import { importPKCS8, SignJWT } from "jose"; */ export function createServerTransport( token: string, - opts: GrpcTransportOptions, + opts: GrpcWebTransportOptions, ) { return createGrpcWebTransport({ ...opts, diff --git a/packages/zitadel-react/package.json b/packages/zitadel-react/package.json index c90f151f472..eb8592a5320 100644 --- a/packages/zitadel-react/package.json +++ b/packages/zitadel-react/package.json @@ -14,6 +14,9 @@ "./styles.css": "./dist/index.css", "./assets/*": "./dist/assets/*" }, + "publishConfig": { + "access": "public" + }, "scripts": { "build": "tsup", "test": "pnpm test:unit", @@ -25,6 +28,9 @@ "clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist", "copy-files": "cp -R ./src/public/ ./dist/" }, + "peerDependencies": { + "react": "^18.2.0" + }, "devDependencies": { "@testing-library/jest-dom": "^6.4.5", "@testing-library/react": "^14.0.0", @@ -38,11 +44,5 @@ "sass": "^1.77.1", "tailwindcss": "3.2.4", "zitadel-tailwind-config": "workspace:*" - }, - "publishConfig": { - "access": "public" - }, - "peerDependencies": { - "react": "18.2.0" } } diff --git a/packages/zitadel-react/tsconfig.json b/packages/zitadel-react/tsconfig.json index 460eef71f56..2200a65a4b6 100644 --- a/packages/zitadel-react/tsconfig.json +++ b/packages/zitadel-react/tsconfig.json @@ -1,5 +1,8 @@ { "extends": "@zitadel/tsconfig/react-library.json", "include": ["."], - "exclude": ["dist", "build", "node_modules"] + "exclude": ["dist", "build", "node_modules"], + "compilerOptions": { + "types": ["@testing-library/jest-dom"] + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a7fda764ead..d0988f41008 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,10 +13,10 @@ importers: devDependencies: '@changesets/cli': specifier: ^2.22.0 - version: 2.25.2 + version: 2.27.5 '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.2.1(vite@5.2.11(@types/node@18.11.9)(sass@1.77.1)) + version: 4.2.1(vite@5.2.11(@types/node@20.14.2)(sass@1.77.1)) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -37,34 +37,37 @@ importers: version: 5.4.5 vite-tsconfig-paths: specifier: ^4.3.2 - version: 4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@18.11.9)(sass@1.77.1)) + version: 4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.2)(sass@1.77.1)) vitest: specifier: ^1.6.0 - version: 1.6.0(@types/node@18.11.9)(jsdom@24.0.0)(sass@1.77.1) + version: 1.6.0(@types/node@20.14.2)(jsdom@24.0.0)(sass@1.77.1) apps/login: dependencies: '@headlessui/react': - specifier: ^1.7.14 - version: 1.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^1.7.18 + version: 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@heroicons/react': - specifier: 2.0.13 - version: 2.0.13(react@18.3.1) + specifier: 2.1.3 + version: 2.1.3(react@18.3.1) '@tailwindcss/forms': - specifier: 0.5.3 - version: 0.5.3(tailwindcss@3.2.4(postcss@8.4.21)) + specifier: 0.5.7 + version: 0.5.7(tailwindcss@3.2.4(postcss@8.4.21)) '@vercel/analytics': - specifier: ^1.0.0 - version: 1.0.0(react@18.3.1) - '@zitadel/client': + specifier: ^1.2.2 + version: 1.3.1(next@14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.1))(react@18.3.1) + '@zitadel/client2': specifier: workspace:* - version: link:../../packages/zitadel-client + version: link:../../packages/zitadel-client2 + '@zitadel/node': + specifier: workspace:* + version: link:../../packages/zitadel-node + '@zitadel/proto': + specifier: workspace:* + version: link:../../packages/zitadel-proto '@zitadel/react': specifier: workspace:* version: link:../../packages/zitadel-react - '@zitadel/server': - specifier: workspace:* - version: link:../../packages/zitadel-server clsx: specifier: 1.2.1 version: 1.2.1 @@ -257,6 +260,9 @@ importers: packages/zitadel-next: dependencies: + '@zitadel/node': + specifier: workspace:* + version: link:../zitadel-node '@zitadel/react': specifier: workspace:* version: link:../zitadel-react @@ -270,9 +276,6 @@ importers: '@types/react': specifier: ^17.0.13 version: 17.0.52 - '@zitadel/server': - specifier: workspace:* - version: link:../zitadel-server '@zitadel/tsconfig': specifier: workspace:* version: link:../zitadel-tsconfig @@ -294,10 +297,16 @@ importers: '@connectrpc/connect-node': specifier: ^1.4.0 version: 1.4.0(@bufbuild/protobuf@1.9.0)(@connectrpc/connect@1.4.0(@bufbuild/protobuf@1.9.0)) + '@connectrpc/connect-web': + specifier: ^1.4.0 + version: 1.4.0(@bufbuild/protobuf@1.9.0)(@connectrpc/connect@1.4.0(@bufbuild/protobuf@1.9.0)) jose: specifier: ^5.3.0 version: 5.3.0 devDependencies: + '@types/node': + specifier: ^20.14.2 + version: 20.14.2 '@zitadel/client2': specifier: workspace:* version: link:../zitadel-client2 @@ -323,15 +332,15 @@ importers: packages/zitadel-react: dependencies: react: - specifier: 18.2.0 - version: 18.2.0 + specifier: ^18.2.0 + version: 18.3.1 devDependencies: '@testing-library/jest-dom': specifier: ^6.4.5 - version: 6.4.5(vitest@1.6.0(@types/node@18.11.9)(jsdom@24.0.0)(sass@1.77.1)) + version: 6.4.5(vitest@1.6.0(@types/node@20.14.2)(jsdom@24.0.0)(sass@1.77.1)) '@testing-library/react': specifier: ^14.0.0 - version: 14.0.0(react-dom@18.3.1(react@18.2.0))(react@18.2.0) + version: 14.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/react': specifier: ^18.2.17 version: 18.2.17 @@ -383,7 +392,7 @@ importers: devDependencies: '@bufbuild/buf': specifier: ^1.14.0 - version: 1.15.0 + version: 1.32.1 '@zitadel/tsconfig': specifier: workspace:* version: link:../zitadel-tsconfig @@ -635,57 +644,60 @@ packages: '@bufbuild/protobuf@1.9.0': resolution: {integrity: sha512-W7gp8Q/v1NlCZLsv8pQ3Y0uCu/SHgXOVFK+eUluUKWXmsb6VHkpNx0apdOWWcDbB9sJoKeP8uPrjmehJz6xETQ==, tarball: https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.9.0.tgz} - '@changesets/apply-release-plan@6.1.2': - resolution: {integrity: sha512-H8TV9E/WtJsDfoDVbrDGPXmkZFSv7W2KLqp4xX4MKZXshb0hsQZUNowUa8pnus9qb/5OZrFFRVsUsDCVHNW/AQ==} + '@changesets/apply-release-plan@7.0.3': + resolution: {integrity: sha512-klL6LCdmfbEe9oyfLxnidIf/stFXmrbFO/3gT5LU5pcyoZytzJe4gWpTBx3BPmyNPl16dZ1xrkcW7b98e3tYkA==, tarball: https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-7.0.3.tgz} - '@changesets/assemble-release-plan@5.2.2': - resolution: {integrity: sha512-B1qxErQd85AeZgZFZw2bDKyOfdXHhG+X5S+W3Da2yCem8l/pRy4G/S7iOpEcMwg6lH8q2ZhgbZZwZ817D+aLuQ==} + '@changesets/assemble-release-plan@6.0.2': + resolution: {integrity: sha512-n9/Tdq+ze+iUtjmq0mZO3pEhJTKkku9hUxtUadW30jlN7kONqJG3O6ALeXrmc6gsi/nvoCuKjqEJ68Hk8RbMTQ==, tarball: https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-6.0.2.tgz} - '@changesets/changelog-git@0.1.13': - resolution: {integrity: sha512-zvJ50Q+EUALzeawAxax6nF2WIcSsC5PwbuLeWkckS8ulWnuPYx8Fn/Sjd3rF46OzeKA8t30loYYV6TIzp4DIdg==} + '@changesets/changelog-git@0.2.0': + resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==, tarball: https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.2.0.tgz} - '@changesets/cli@2.25.2': - resolution: {integrity: sha512-ACScBJXI3kRyMd2R8n8SzfttDHi4tmKSwVwXBazJOylQItSRSF4cGmej2E4FVf/eNfGy6THkL9GzAahU9ErZrA==} + '@changesets/cli@2.27.5': + resolution: {integrity: sha512-UVppOvzCjjylBenFcwcZNG5IaZ8jsIaEVraV/pbXgukYNb0Oqa0d8UWb0LkYzA1Bf1HmUrOfccFcRLheRuA7pA==, tarball: https://registry.npmjs.org/@changesets/cli/-/cli-2.27.5.tgz} hasBin: true - '@changesets/config@2.2.0': - resolution: {integrity: sha512-GGaokp3nm5FEDk/Fv2PCRcQCOxGKKPRZ7prcMqxEr7VSsG75MnChQE8plaW1k6V8L2bJE+jZWiRm19LbnproOw==} + '@changesets/config@3.0.1': + resolution: {integrity: sha512-nCr8pOemUjvGJ8aUu8TYVjqnUL+++bFOQHBVmtNbLvKzIDkN/uiP/Z4RKmr7NNaiujIURHySDEGFPftR4GbTUA==, tarball: https://registry.npmjs.org/@changesets/config/-/config-3.0.1.tgz} - '@changesets/errors@0.1.4': - resolution: {integrity: sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==} + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==, tarball: https://registry.npmjs.org/@changesets/errors/-/errors-0.2.0.tgz} - '@changesets/get-dependents-graph@1.3.4': - resolution: {integrity: sha512-+C4AOrrFY146ydrgKOo5vTZfj7vetNu1tWshOID+UjPUU9afYGDXI8yLnAeib1ffeBXV3TuGVcyphKpJ3cKe+A==} + '@changesets/get-dependents-graph@2.1.0': + resolution: {integrity: sha512-QOt6pQq9RVXKGHPVvyKimJDYJumx7p4DO5MO9AhRJYgAPgv0emhNqAqqysSVKHBm4sxKlGN4S1zXOIb5yCFuhQ==, tarball: https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-2.1.0.tgz} - '@changesets/get-release-plan@3.0.15': - resolution: {integrity: sha512-W1tFwxE178/en+zSj/Nqbc3mvz88mcdqUMJhRzN1jDYqN3QI4ifVaRF9mcWUU+KI0gyYEtYR65tour690PqTcA==} + '@changesets/get-release-plan@4.0.2': + resolution: {integrity: sha512-rOalz7nMuMV2vyeP7KBeAhqEB7FM2GFPO5RQSoOoUKKH9L6wW3QyPA2K+/rG9kBrWl2HckPVES73/AuwPvbH3w==, tarball: https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-4.0.2.tgz} - '@changesets/get-version-range-type@0.3.2': - resolution: {integrity: sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==} + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==, tarball: https://registry.npmjs.org/@changesets/get-version-range-type/-/get-version-range-type-0.4.0.tgz} - '@changesets/git@1.5.0': - resolution: {integrity: sha512-Xo8AT2G7rQJSwV87c8PwMm6BAc98BnufRMsML7m7Iw8Or18WFvFmxqG5aOL5PBvhgq9KrKvaeIBNIymracSuHg==} + '@changesets/git@3.0.0': + resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==, tarball: https://registry.npmjs.org/@changesets/git/-/git-3.0.0.tgz} - '@changesets/logger@0.0.5': - resolution: {integrity: sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==} + '@changesets/logger@0.1.0': + resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==, tarball: https://registry.npmjs.org/@changesets/logger/-/logger-0.1.0.tgz} - '@changesets/parse@0.3.15': - resolution: {integrity: sha512-3eDVqVuBtp63i+BxEWHPFj2P1s3syk0PTrk2d94W9JD30iG+OER0Y6n65TeLlY8T2yB9Fvj6Ev5Gg0+cKe/ZUA==} + '@changesets/parse@0.4.0': + resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==, tarball: https://registry.npmjs.org/@changesets/parse/-/parse-0.4.0.tgz} - '@changesets/pre@1.0.13': - resolution: {integrity: sha512-jrZc766+kGZHDukjKhpBXhBJjVQMied4Fu076y9guY1D3H622NOw8AQaLV3oQsDtKBTrT2AUFjt9Z2Y9Qx+GfA==} + '@changesets/pre@2.0.0': + resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==, tarball: https://registry.npmjs.org/@changesets/pre/-/pre-2.0.0.tgz} - '@changesets/read@0.5.8': - resolution: {integrity: sha512-eYaNfxemgX7f7ELC58e7yqQICW5FB7V+bd1lKt7g57mxUrTveYME+JPaBPpYx02nP53XI6CQp6YxnR9NfmFPKw==} + '@changesets/read@0.6.0': + resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==, tarball: https://registry.npmjs.org/@changesets/read/-/read-0.6.0.tgz} + + '@changesets/should-skip-package@0.1.0': + resolution: {integrity: sha512-FxG6Mhjw7yFStlSM7Z0Gmg3RiyQ98d/9VpQAZ3Fzr59dCOM9G6ZdYbjiSAt0XtFr9JR5U2tBaJWPjrkGGc618g==, tarball: https://registry.npmjs.org/@changesets/should-skip-package/-/should-skip-package-0.1.0.tgz} '@changesets/types@4.1.0': - resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==, tarball: https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz} - '@changesets/types@5.2.0': - resolution: {integrity: sha512-km/66KOqJC+eicZXsm2oq8A8bVTSpkZJ60iPV/Nl5Z5c7p9kk8xxh6XGRTlnludHldxOOfudhnDN2qPxtHmXzA==} + '@changesets/types@6.0.0': + resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==, tarball: https://registry.npmjs.org/@changesets/types/-/types-6.0.0.tgz} - '@changesets/write@0.2.2': - resolution: {integrity: sha512-kCYNHyF3xaId1Q/QE+DF3UTrHTyg3Cj/f++T8S8/EkC+jh1uK2LFnM9h+EzV+fsmnZDrs7r0J4LLpeI/VWC5Hg==} + '@changesets/write@0.3.1': + resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==, tarball: https://registry.npmjs.org/@changesets/write/-/write-0.3.1.tgz} '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==, tarball: https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz} @@ -698,6 +710,12 @@ packages: '@bufbuild/protobuf': ^1.4.2 '@connectrpc/connect': 1.4.0 + '@connectrpc/connect-web@1.4.0': + resolution: {integrity: sha512-13aO4psFbbm7rdOFGV0De2Za64DY/acMspgloDlcOKzLPPs0yZkhp1OOzAQeiAIr7BM/VOHIA3p8mF0inxCYTA==, tarball: https://registry.npmjs.org/@connectrpc/connect-web/-/connect-web-1.4.0.tgz} + peerDependencies: + '@bufbuild/protobuf': ^1.4.2 + '@connectrpc/connect': 1.4.0 + '@connectrpc/connect@1.4.0': resolution: {integrity: sha512-vZeOkKaAjyV4+RH3+rJZIfDFJAfr+7fyYr6sLDKbYX3uuTVszhFe9/YKf5DNqrDb5cKdKVlYkGn6DTDqMitAnA==, tarball: https://registry.npmjs.org/@connectrpc/connect/-/connect-1.4.0.tgz} peerDependencies: @@ -1009,7 +1027,7 @@ packages: engines: {node: '>=14'} '@grpc/grpc-js@1.8.13': - resolution: {integrity: sha512-iY3jsdfbc0ARoCLFvbvUB8optgyb0r1XLPb142u+QtgBcKJYkCIFt3Fd/881KqjLYWjsBJF57N3b8Eop9NDfUA==} + resolution: {integrity: sha512-iY3jsdfbc0ARoCLFvbvUB8optgyb0r1XLPb142u+QtgBcKJYkCIFt3Fd/881KqjLYWjsBJF57N3b8Eop9NDfUA==, tarball: https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.13.tgz} engines: {node: ^8.13.0 || >=10.10.0} '@grpc/proto-loader@0.7.6': @@ -1023,15 +1041,15 @@ packages: '@hapi/topo@5.1.0': resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - '@headlessui/react@1.7.14': - resolution: {integrity: sha512-znzdq9PG8rkwcu9oQ2FwIy0ZFtP9Z7ycS+BAqJ3R5EIqC/0bJGvhT7193rFf+45i9nnPsYvCQVW4V/bB9Xc+gA==} + '@headlessui/react@1.7.19': + resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==, tarball: https://registry.npmjs.org/@headlessui/react/-/react-1.7.19.tgz} engines: {node: '>=10'} peerDependencies: react: ^16 || ^17 || ^18 react-dom: ^16 || ^17 || ^18 - '@heroicons/react@2.0.13': - resolution: {integrity: sha512-iSN5XwmagrnirWlYEWNPdCDj9aRYVD/lnK3JlsC9/+fqGF80k8C7rl+1HCvBX0dBoagKqOFBs6fMhJJ1hOg1EQ==} + '@heroicons/react@2.1.3': + resolution: {integrity: sha512-fEcPfo4oN345SoqdlCDdSa4ivjaKbk0jTd+oubcgNxnNgAfzysfwWfQUr+51wigiWHQQRiZNd1Ao0M5Y3M2EGg==, tarball: https://registry.npmjs.org/@heroicons/react/-/react-2.1.3.tgz} peerDependencies: react: '>= 16' @@ -1091,10 +1109,10 @@ packages: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==, tarball: https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz} '@manypkg/find-root@1.1.0': - resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} + resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==, tarball: https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz} '@manypkg/get-packages@1.1.3': - resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} + resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==, tarball: https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz} '@mapbox/node-pre-gyp@1.0.10': resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} @@ -1181,34 +1199,34 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==, tarball: https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz} '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==, tarball: https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz} '@protobufjs/codegen@2.0.4': - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==, tarball: https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz} '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==, tarball: https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz} '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==, tarball: https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz} '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==, tarball: https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz} '@protobufjs/inquire@1.1.0': - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==, tarball: https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz} '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==, tarball: https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz} '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==, tarball: https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz} '@protobufjs/utf8@1.1.0': - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==, tarball: https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz} '@rollup/rollup-android-arm-eabi@4.17.2': resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==, tarball: https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.17.2.tgz} @@ -1312,10 +1330,24 @@ packages: resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==, tarball: https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz} '@tailwindcss/forms@0.5.3': - resolution: {integrity: sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==} + resolution: {integrity: sha512-y5mb86JUoiUgBjY/o6FJSFZSEttfb3Q5gllE4xoKjAAD+vBrnIhE4dViwUuow3va8mpH4s9jyUbUbrRGoRdc2Q==, tarball: https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.3.tgz} peerDependencies: tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' + '@tailwindcss/forms@0.5.7': + resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==, tarball: https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz} + peerDependencies: + tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1' + + '@tanstack/react-virtual@3.5.0': + resolution: {integrity: sha512-rtvo7KwuIvqK9zb0VZ5IL7fiJAEnG+0EiFZz8FUOs+2mhGqdGmjKIaT1XU7Zq0eFqL0jonLlhbayJI/J2SA/Bw==, tarball: https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.5.0.tgz} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@tanstack/virtual-core@3.5.0': + resolution: {integrity: sha512-KnPRCkQTyqhanNC0K63GBG3wA8I+D1fQuVnAvcBF8f13akOKeQp1gSbu6f77zCxhEk727iV5oQnbHLYzHrECLg==, tarball: https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.5.0.tgz} + '@testing-library/dom@10.1.0': resolution: {integrity: sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==, tarball: https://registry.npmjs.org/@testing-library/dom/-/dom-10.1.0.tgz} engines: {node: '>=18'} @@ -1381,9 +1413,6 @@ packages: '@types/estree@1.0.5': resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==, tarball: https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz} - '@types/is-ci@3.0.0': - resolution: {integrity: sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==} - '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==, tarball: https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz} @@ -1397,16 +1426,19 @@ packages: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} '@types/node@12.20.55': - resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==, tarball: https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz} '@types/node@18.11.9': resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==} + '@types/node@20.14.2': + resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==, tarball: https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz} + '@types/normalize-package-data@2.4.1': resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} '@types/object-hash@1.3.4': - resolution: {integrity: sha512-xFdpkAkikBgqBdG9vIlsqffDV8GpvnPEzs0IUtr1v3BEB97ijsFQ4RXVbUZwjFThhB4MDSTUfvmxUD5PGx0wXA==} + resolution: {integrity: sha512-xFdpkAkikBgqBdG9vIlsqffDV8GpvnPEzs0IUtr1v3BEB97ijsFQ4RXVbUZwjFThhB4MDSTUfvmxUD5PGx0wXA==, tarball: https://registry.npmjs.org/@types/object-hash/-/object-hash-1.3.4.tgz} '@types/prop-types@15.7.5': resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} @@ -1429,8 +1461,8 @@ packages: '@types/scheduler@0.16.2': resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} - '@types/semver@6.2.3': - resolution: {integrity: sha512-KQf+QAMWKMrtBMsB8/24w53tEsxllMj6TuA80TT/5igJalLI/zm0L3oXRbIAl4Ohfc85gyHX/jhMwsVkmhLU4A==} + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==, tarball: https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz} '@types/sinonjs__fake-timers@8.1.1': resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==, tarball: https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz} @@ -1481,10 +1513,16 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==, tarball: https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz} - '@vercel/analytics@1.0.0': - resolution: {integrity: sha512-RQmj7pv82JwGDHrnKeRc6TtSw2U7rWNubc2IH0ernTzWTj02yr9zvIYiYJeztsBzrJtWv7m8Nz6vxxb+cdEtJw==} + '@vercel/analytics@1.3.1': + resolution: {integrity: sha512-xhSlYgAuJ6Q4WQGkzYTLmXwhYl39sWjoMA3nHxfkvG+WdBT25c563a7QhwwKivEOZtPJXifYHR1m2ihoisbWyA==, tarball: https://registry.npmjs.org/@vercel/analytics/-/analytics-1.3.1.tgz} peerDependencies: - react: ^16.8||^17||^18 + next: '>= 13' + react: ^18 || ^19 + peerDependenciesMeta: + next: + optional: true + react: + optional: true '@vercel/git-hooks@1.0.0': resolution: {integrity: sha512-OxDFAAdyiJ/H0b8zR9rFCu3BIb78LekBXOphOYG3snV4ULhKFX387pBPpqZ9HLiRTejBWBxYEahkw79tuIgdAA==} @@ -1614,7 +1652,7 @@ packages: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, tarball: https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz} argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, tarball: https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz} @@ -1742,7 +1780,7 @@ packages: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==, tarball: https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz} better-path-resolve@1.0.0: - resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} + resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==, tarball: https://registry.npmjs.org/better-path-resolve/-/better-path-resolve-1.0.0.tgz} engines: {node: '>=4'} binary-extensions@2.2.0: @@ -1766,7 +1804,7 @@ packages: engines: {node: '>=8'} breakword@1.0.5: - resolution: {integrity: sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg==} + resolution: {integrity: sha512-ex5W9DoOQ/LUEU3PMdLs9ua/CYZl1678NUkKOdUSi8Aw5F1idieaiRURCBFJCwVcrD1J8Iy3vfWSloaMwO2qFg==, tarball: https://registry.npmjs.org/breakword/-/breakword-1.0.5.tgz} browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} @@ -1818,7 +1856,7 @@ packages: engines: {node: '>= 6'} camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} + resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==, tarball: https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz} engines: {node: '>=8'} camelcase-keys@7.0.2: @@ -1826,7 +1864,7 @@ packages: engines: {node: '>=12'} camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, tarball: https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz} engines: {node: '>=6'} camelcase@6.3.0: @@ -1851,7 +1889,7 @@ packages: engines: {node: '>=4'} chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, tarball: https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz} engines: {node: '>=4'} chalk@3.0.0: @@ -1863,7 +1901,7 @@ packages: engines: {node: '>=10'} chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==, tarball: https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz} check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==, tarball: https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz} @@ -1884,6 +1922,10 @@ packages: resolution: {integrity: sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg==} engines: {node: '>=8'} + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==, tarball: https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz} + engines: {node: '>=8'} + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -1909,10 +1951,10 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==, tarball: https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz} cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==, tarball: https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz} cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -1922,7 +1964,7 @@ packages: engines: {node: '>=12'} clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, tarball: https://registry.npmjs.org/clone/-/clone-1.0.4.tgz} engines: {node: '>=0.8'} clsx@1.2.1: @@ -1993,7 +2035,7 @@ packages: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==, tarball: https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz} cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==, tarball: https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz} cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -2015,16 +2057,16 @@ packages: resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} csv-generate@3.4.3: - resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} + resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==, tarball: https://registry.npmjs.org/csv-generate/-/csv-generate-3.4.3.tgz} csv-parse@4.16.3: - resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==} + resolution: {integrity: sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==, tarball: https://registry.npmjs.org/csv-parse/-/csv-parse-4.16.3.tgz} csv-stringify@5.6.5: - resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==} + resolution: {integrity: sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==, tarball: https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz} csv@5.5.3: - resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==} + resolution: {integrity: sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==, tarball: https://registry.npmjs.org/csv/-/csv-5.5.3.tgz} engines: {node: '>= 0.1.90'} cypress@13.9.0: @@ -2108,7 +2150,7 @@ packages: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==, tarball: https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz} define-data-property@1.1.0: resolution: {integrity: sha512-UzGwzcjyv3OtAvolTj1GoyNYzfFR+iqbGjcnBEENZVCpM4/Ng1yhGNvS3lR/xDS74Tb2wGG9WzNSNIOS9UVb2g==, tarball: https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.0.tgz} @@ -2150,7 +2192,7 @@ packages: engines: {node: '>=6'} detect-indent@6.1.0: - resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} + resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==, tarball: https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz} engines: {node: '>=8'} detect-libc@1.0.3: @@ -2179,7 +2221,7 @@ packages: engines: {node: '>=8'} dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==, tarball: https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz} doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==, tarball: https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz} @@ -2423,7 +2465,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, tarball: https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz} engines: {node: '>=4'} hasBin: true @@ -2476,10 +2518,10 @@ packages: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, tarball: https://registry.npmjs.org/extend/-/extend-3.0.2.tgz} extendable-error@0.1.7: - resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} + resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==, tarball: https://registry.npmjs.org/extendable-error/-/extendable-error-0.1.7.tgz} external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, tarball: https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz} engines: {node: '>=4'} extract-zip@2.0.1: @@ -2494,8 +2536,8 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, tarball: https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz} - fast-glob@3.2.12: - resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==, tarball: https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz} engines: {node: '>=8.6.0'} fast-json-stable-stringify@2.1.0: @@ -2531,7 +2573,7 @@ packages: engines: {node: '>=10'} find-yarn-workspace-root2@1.2.16: - resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==} + resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==, tarball: https://registry.npmjs.org/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz} flat-cache@3.0.4: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} @@ -2574,11 +2616,11 @@ packages: resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==, tarball: https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz} engines: {node: '>=6 <7 || >=8'} fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==, tarball: https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz} engines: {node: '>=6 <7 || >=8'} fs-extra@9.1.0: @@ -2720,7 +2762,7 @@ packages: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==, tarball: https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz} grapheme-splitter@1.0.4: - resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==, tarball: https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz} graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==, tarball: https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz} @@ -2782,7 +2824,7 @@ packages: engines: {node: '>= 0.4'} hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, tarball: https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz} hosted-git-info@4.1.0: resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} @@ -2809,7 +2851,7 @@ packages: engines: {node: '>= 14'} human-id@1.0.2: - resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} + resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==, tarball: https://registry.npmjs.org/human-id/-/human-id-1.0.2.tgz} human-signals@1.1.1: resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==, tarball: https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz} @@ -2828,7 +2870,7 @@ packages: engines: {node: '>=16.17.0'} iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, tarball: https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz} engines: {node: '>=0.10.0'} iconv-lite@0.6.3: @@ -3027,7 +3069,7 @@ packages: engines: {node: '>= 0.4'} is-subdir@1.2.0: - resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==} + resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==, tarball: https://registry.npmjs.org/is-subdir/-/is-subdir-1.2.0.tgz} engines: {node: '>=4'} is-symbol@1.0.4: @@ -3059,7 +3101,7 @@ packages: resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, tarball: https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz} engines: {node: '>=0.10.0'} is-wsl@2.2.0: @@ -3091,7 +3133,7 @@ packages: resolution: {integrity: sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==} jose@4.13.1: - resolution: {integrity: sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==} + resolution: {integrity: sha512-MSJQC5vXco5Br38mzaQKiq9mwt7lwj2eXpgpRyQYNHYt2lq1PjkWa7DLXX0WVcQLE9HhMh3jPiufS7fhJf+CLQ==, tarball: https://registry.npmjs.org/jose/-/jose-4.13.1.tgz} jose@5.3.0: resolution: {integrity: sha512-IChe9AtAE79ru084ow8jzkN2lNrG3Ntfiv65Cvj9uOCE2m5LNsdHG+9EbxWxAoWRF9TgDOqLN5jm08++owDVRg==, tarball: https://registry.npmjs.org/jose/-/jose-5.3.0.tgz} @@ -3110,7 +3152,7 @@ packages: resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==, tarball: https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz} js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, tarball: https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz} hasBin: true js-yaml@4.1.0: @@ -3159,7 +3201,7 @@ packages: hasBin: true jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==, tarball: https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz} jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==, tarball: https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz} @@ -3177,7 +3219,7 @@ packages: engines: {node: '>=0.10.0'} kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==, tarball: https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz} engines: {node: '>=6'} language-subtag-registry@0.3.22: @@ -3198,8 +3240,8 @@ packages: resolution: {integrity: sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==} engines: {node: '>=10'} - lilconfig@2.0.6: - resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==, tarball: https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz} engines: {node: '>=10'} lines-and-columns@1.2.4: @@ -3233,7 +3275,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} load-yaml-file@0.2.0: - resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} + resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==, tarball: https://registry.npmjs.org/load-yaml-file/-/load-yaml-file-0.2.0.tgz} engines: {node: '>=6'} local-pkg@0.5.0: @@ -3261,7 +3303,7 @@ packages: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} lodash.startcase@4.4.0: - resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} + resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==, tarball: https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz} lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -3275,10 +3317,10 @@ packages: engines: {node: '>=10'} long@4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==, tarball: https://registry.npmjs.org/long/-/long-4.0.0.tgz} long@5.2.1: - resolution: {integrity: sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==} + resolution: {integrity: sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==, tarball: https://registry.npmjs.org/long/-/long-5.2.1.tgz} loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==, tarball: https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz} @@ -3292,7 +3334,7 @@ packages: engines: {node: 14 || >=16.14} lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz} lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz} @@ -3333,7 +3375,7 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} meow@6.1.1: - resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} + resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==, tarball: https://registry.npmjs.org/meow/-/meow-6.1.1.tgz} engines: {node: '>=8'} merge-stream@2.0.0: @@ -3368,7 +3410,7 @@ packages: engines: {node: '>=4'} mini-svg-data-uri@1.4.4: - resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==} + resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==, tarball: https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz} hasBin: true minimatch@3.1.2: @@ -3402,7 +3444,7 @@ packages: engines: {node: '>= 8'} mixme@0.5.4: - resolution: {integrity: sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw==} + resolution: {integrity: sha512-3KYa4m4Vlqx98GPdOHghxSdNtTvcP8E0kkaJ5Dlh+h2DRzF7zpuVVcA8B0QpKd11YJeP9QQ7ASkKzOeu195Wzw==, tarball: https://registry.npmjs.org/mixme/-/mixme-0.5.4.tgz} engines: {node: '>= 8.0.0'} mkdirp@1.0.4: @@ -3464,13 +3506,13 @@ packages: optional: true nice-grpc-common@2.0.2: - resolution: {integrity: sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==} + resolution: {integrity: sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==, tarball: https://registry.npmjs.org/nice-grpc-common/-/nice-grpc-common-2.0.2.tgz} nice-grpc-web@3.2.3: resolution: {integrity: sha512-oNuCBhCffmpED/dTtbQycKkMkJ6DCaPeyi/W/hbLaGIZfiwSFg+kmWSKmTdI07XqMQ1POKxn//bdldXZsE1ZUg==} nice-grpc@2.0.1: - resolution: {integrity: sha512-Q5CGXO08STsv+HAkXeFgRayANT62X1LnIDhNXdCf+LP0XaP7EiHM0Cr3QefnoFjDZAx/Kxq+qiQfY66BrtKcNQ==} + resolution: {integrity: sha512-Q5CGXO08STsv+HAkXeFgRayANT62X1LnIDhNXdCf+LP0XaP7EiHM0Cr3QefnoFjDZAx/Kxq+qiQfY66BrtKcNQ==, tarball: https://registry.npmjs.org/nice-grpc/-/nice-grpc-2.0.1.tgz} node-fetch@2.6.9: resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} @@ -3502,7 +3544,7 @@ packages: hasBin: true normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==, tarball: https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz} normalize-package-data@3.0.3: resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} @@ -3535,7 +3577,7 @@ packages: engines: {node: '>=0.10.0'} object-hash@1.3.1: - resolution: {integrity: sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==} + resolution: {integrity: sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==, tarball: https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz} engines: {node: '>= 0.10.0'} object-hash@3.0.0: @@ -3606,21 +3648,21 @@ packages: engines: {node: '>= 0.8.0'} os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==, tarball: https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz} engines: {node: '>=0.10.0'} ospath@1.2.2: resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==, tarball: https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz} outdent@0.5.0: - resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} + resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==, tarball: https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz} p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} + resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==, tarball: https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz} engines: {node: '>=8'} p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, tarball: https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz} engines: {node: '>=6'} p-limit@3.1.0: @@ -3632,7 +3674,7 @@ packages: engines: {node: '>=18'} p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==, tarball: https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz} engines: {node: '>=8'} p-locate@5.0.0: @@ -3640,7 +3682,7 @@ packages: engines: {node: '>=10'} p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} + resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==, tarball: https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz} engines: {node: '>=6'} p-map@4.0.0: @@ -3652,7 +3694,7 @@ packages: engines: {node: '>=12'} p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, tarball: https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz} engines: {node: '>=6'} parent-module@1.0.1: @@ -3728,7 +3770,7 @@ packages: engines: {node: '>=0.10.0'} pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==, tarball: https://registry.npmjs.org/pify/-/pify-4.0.1.tgz} engines: {node: '>=6'} pirates@4.0.5: @@ -3736,7 +3778,7 @@ packages: engines: {node: '>= 6'} pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==, tarball: https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz} engines: {node: '>=8'} pkg-types@1.1.1: @@ -3808,7 +3850,7 @@ packages: engines: {node: ^10 || ^12 || >=14} preferred-pm@3.0.3: - resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==} + resolution: {integrity: sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==, tarball: https://registry.npmjs.org/preferred-pm/-/preferred-pm-3.0.3.tgz} engines: {node: '>=10'} prelude-ls@1.2.1: @@ -3851,11 +3893,11 @@ packages: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==, tarball: https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz} protobufjs@6.11.3: - resolution: {integrity: sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==} + resolution: {integrity: sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==, tarball: https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz} hasBin: true protobufjs@7.2.3: - resolution: {integrity: sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==} + resolution: {integrity: sha512-TtpvOqwB5Gdz/PQmOjgsrGH1nHjAQVCN7JG4A6r1sXRWESL5rNMAiRcBQlCAdKxZcAbstExQePYG8xof/JVRgg==, tarball: https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.3.tgz} engines: {node: '>=12.0.0'} proxy-from-env@1.0.0: @@ -3867,7 +3909,7 @@ packages: hasBin: true pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==, tarball: https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz} psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} @@ -3902,7 +3944,7 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} + resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==, tarball: https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz} engines: {node: '>=8'} quick-lru@5.1.1: @@ -3945,7 +3987,7 @@ packages: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==, tarball: https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz} engines: {node: '>=8'} read-pkg-up@8.0.0: @@ -3953,7 +3995,7 @@ packages: engines: {node: '>=12'} read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==, tarball: https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz} engines: {node: '>=8'} read-pkg@6.0.0: @@ -3961,7 +4003,7 @@ packages: engines: {node: '>=12'} read-yaml-file@1.1.0: - resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} + resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==, tarball: https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz} engines: {node: '>=6'} readable-stream@3.6.2: @@ -4003,7 +4045,7 @@ packages: engines: {node: '>=0.10.0'} require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, tarball: https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz} requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==, tarball: https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz} @@ -4016,12 +4058,8 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true - resolve@1.22.6: - resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} + resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==, tarball: https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz} hasBin: true resolve@2.0.0-next.5: @@ -4115,6 +4153,9 @@ packages: engines: {node: '>=10'} hasBin: true + server-only@0.0.1: + resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==, tarball: https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz} + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -4131,7 +4172,7 @@ packages: engines: {node: '>= 0.4'} shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==, tarball: https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz} engines: {node: '>=0.10.0'} shebang-command@2.0.0: @@ -4139,7 +4180,7 @@ packages: engines: {node: '>=8'} shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==, tarball: https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz} engines: {node: '>=0.10.0'} shebang-regex@3.0.0: @@ -4191,7 +4232,7 @@ packages: engines: {node: '>=12'} smartwrap@2.0.2: - resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} + resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==, tarball: https://registry.npmjs.org/smartwrap/-/smartwrap-2.0.2.tgz} engines: {node: '>=6'} hasBin: true @@ -4211,7 +4252,7 @@ packages: resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} spawndamnit@2.0.0: - resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==, tarball: https://registry.npmjs.org/spawndamnit/-/spawndamnit-2.0.0.tgz} spdx-correct@3.1.1: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} @@ -4229,7 +4270,7 @@ packages: resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, tarball: https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz} sshpk@1.17.0: resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==, tarball: https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz} @@ -4255,7 +4296,7 @@ packages: resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} stream-transform@2.1.3: - resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} + resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==, tarball: https://registry.npmjs.org/stream-transform/-/stream-transform-2.1.3.tgz} streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==, tarball: https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz} @@ -4383,7 +4424,7 @@ packages: engines: {node: ^14.18.0 || >=16.0.0} tailwindcss@3.2.4: - resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==} + resolution: {integrity: sha512-AhwtHCKMtR71JgeYDaswmZXhPcW9iuI9Sp2LvZPo9upDZ7231ZJ7eA9RaURbhpXGVlrjX4cFNlB4ieTetEb7hQ==, tarball: https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.4.tgz} engines: {node: '>=12.13.0'} hasBin: true peerDependencies: @@ -4398,7 +4439,7 @@ packages: engines: {node: '>=10'} term-size@2.2.1: - resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} + resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==, tarball: https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz} engines: {node: '>=8'} text-table@0.2.0: @@ -4435,7 +4476,7 @@ packages: engines: {node: '>=14.0.0'} tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, tarball: https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz} engines: {node: '>=0.6.0'} tmp@0.2.1: @@ -4476,7 +4517,7 @@ packages: hasBin: true trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} + resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==, tarball: https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz} engines: {node: '>=8'} trim-newlines@4.1.1: @@ -4490,7 +4531,7 @@ packages: typescript: '>=4.2.0' ts-error@1.0.6: - resolution: {integrity: sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==} + resolution: {integrity: sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==, tarball: https://registry.npmjs.org/ts-error/-/ts-error-1.0.6.tgz} ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -4499,10 +4540,10 @@ packages: resolution: {integrity: sha512-AjZEs4h2w4sDfwpHMxQKHrTlNh2wRbM5NRXmLz0RiH+yPGtSQFbe9hBpNocU8vqVNgfh0BIOiXR80xDz3kKxUQ==} ts-proto-descriptors@1.8.0: - resolution: {integrity: sha512-iV20plcI8+GRkeZIAygxOOH0p2xpOsKfw9kI1W20NCwawi1/4bG/YRd9rQY9XSJP+lD9j7XbSy3tFFuikfsljw==} + resolution: {integrity: sha512-iV20plcI8+GRkeZIAygxOOH0p2xpOsKfw9kI1W20NCwawi1/4bG/YRd9rQY9XSJP+lD9j7XbSy3tFFuikfsljw==, tarball: https://registry.npmjs.org/ts-proto-descriptors/-/ts-proto-descriptors-1.8.0.tgz} ts-proto@1.146.0: - resolution: {integrity: sha512-OyBZRjmqqw+aatLEUbRooWO6VKTtOLJQyaQFMciigEZPNgTsWtApqHpQDtqDMQFWEXhIARqEV+B7ZJx8cljhZA==} + resolution: {integrity: sha512-OyBZRjmqqw+aatLEUbRooWO6VKTtOLJQyaQFMciigEZPNgTsWtApqHpQDtqDMQFWEXhIARqEV+B7ZJx8cljhZA==, tarball: https://registry.npmjs.org/ts-proto/-/ts-proto-1.146.0.tgz} hasBin: true tsconfck@3.0.3: @@ -4541,7 +4582,7 @@ packages: optional: true tty-table@4.1.6: - resolution: {integrity: sha512-kRj5CBzOrakV4VRRY5kUWbNYvo/FpOsz65DzI5op9P+cHov3+IqPbo1JE1ZnQGkHdZgNFDsrEjrfqqy/Ply9fw==} + resolution: {integrity: sha512-kRj5CBzOrakV4VRRY5kUWbNYvo/FpOsz65DzI5op9P+cHov3+IqPbo1JE1ZnQGkHdZgNFDsrEjrfqqy/Ply9fw==, tarball: https://registry.npmjs.org/tty-table/-/tty-table-4.1.6.tgz} engines: {node: '>=8.0.0'} hasBin: true @@ -4594,7 +4635,7 @@ packages: engines: {node: '>=4'} type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} + resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz} engines: {node: '>=10'} type-fest@0.20.2: @@ -4606,11 +4647,11 @@ packages: engines: {node: '>=10'} type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz} engines: {node: '>=8'} type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz} engines: {node: '>=8'} type-fest@1.4.0: @@ -4662,12 +4703,15 @@ packages: undefsafe@2.0.5: resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==, tarball: https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz} + undici@5.28.4: resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==, tarball: https://registry.npmjs.org/undici/-/undici-5.28.4.tgz} engines: {node: '>=14.0'} universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==, tarball: https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz} engines: {node: '>= 4.0.0'} universalify@0.2.0: @@ -4795,7 +4839,7 @@ packages: hasBin: true wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==, tarball: https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz} webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, tarball: https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz} @@ -4836,10 +4880,10 @@ packages: resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==, tarball: https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz} which-module@2.0.0: - resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} + resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==, tarball: https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz} which-pm@2.0.0: - resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} + resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==, tarball: https://registry.npmjs.org/which-pm/-/which-pm-2.0.0.tgz} engines: {node: '>=8.15'} which-typed-array@1.1.11: @@ -4851,7 +4895,7 @@ packages: engines: {node: '>= 0.4'} which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, tarball: https://registry.npmjs.org/which/-/which-1.3.1.tgz} hasBin: true which@2.0.2: @@ -4910,14 +4954,14 @@ packages: engines: {node: '>=0.4'} y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, tarball: https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz} y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==, tarball: https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz} yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==, tarball: https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz} @@ -4934,7 +4978,7 @@ packages: engines: {node: '>= 14'} yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==, tarball: https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz} engines: {node: '>=6'} yargs-parser@20.2.9: @@ -4946,7 +4990,7 @@ packages: engines: {node: '>=12'} yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==, tarball: https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz} engines: {node: '>=8'} yargs@16.2.0: @@ -5203,13 +5247,14 @@ snapshots: '@bufbuild/protobuf@1.9.0': {} - '@changesets/apply-release-plan@6.1.2': + '@changesets/apply-release-plan@7.0.3': dependencies: '@babel/runtime': 7.22.3 - '@changesets/config': 2.2.0 - '@changesets/get-version-range-type': 0.3.2 - '@changesets/git': 1.5.0 - '@changesets/types': 5.2.0 + '@changesets/config': 3.0.1 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.0 + '@changesets/should-skip-package': 0.1.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 detect-indent: 6.1.0 fs-extra: 7.0.1 @@ -5217,136 +5262,144 @@ snapshots: outdent: 0.5.0 prettier: 2.8.0 resolve-from: 5.0.0 - semver: 5.7.1 + semver: 7.6.2 - '@changesets/assemble-release-plan@5.2.2': + '@changesets/assemble-release-plan@6.0.2': dependencies: '@babel/runtime': 7.22.3 - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.4 - '@changesets/types': 5.2.0 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.0 + '@changesets/should-skip-package': 0.1.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - semver: 5.7.1 + semver: 7.6.2 - '@changesets/changelog-git@0.1.13': + '@changesets/changelog-git@0.2.0': dependencies: - '@changesets/types': 5.2.0 + '@changesets/types': 6.0.0 - '@changesets/cli@2.25.2': + '@changesets/cli@2.27.5': dependencies: - '@babel/runtime': 7.20.1 - '@changesets/apply-release-plan': 6.1.2 - '@changesets/assemble-release-plan': 5.2.2 - '@changesets/changelog-git': 0.1.13 - '@changesets/config': 2.2.0 - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.4 - '@changesets/get-release-plan': 3.0.15 - '@changesets/git': 1.5.0 - '@changesets/logger': 0.0.5 - '@changesets/pre': 1.0.13 - '@changesets/read': 0.5.8 - '@changesets/types': 5.2.0 - '@changesets/write': 0.2.2 + '@babel/runtime': 7.22.3 + '@changesets/apply-release-plan': 7.0.3 + '@changesets/assemble-release-plan': 6.0.2 + '@changesets/changelog-git': 0.2.0 + '@changesets/config': 3.0.1 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.0 + '@changesets/get-release-plan': 4.0.2 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/should-skip-package': 0.1.0 + '@changesets/types': 6.0.0 + '@changesets/write': 0.3.1 '@manypkg/get-packages': 1.1.3 - '@types/is-ci': 3.0.0 - '@types/semver': 6.2.3 + '@types/semver': 7.5.8 ansi-colors: 4.1.3 chalk: 2.4.2 + ci-info: 3.9.0 enquirer: 2.3.6 external-editor: 3.1.0 fs-extra: 7.0.1 human-id: 1.0.2 - is-ci: 3.0.1 meow: 6.1.1 outdent: 0.5.0 p-limit: 2.3.0 preferred-pm: 3.0.3 resolve-from: 5.0.0 - semver: 5.7.1 + semver: 7.6.2 spawndamnit: 2.0.0 term-size: 2.2.1 tty-table: 4.1.6 - '@changesets/config@2.2.0': + '@changesets/config@3.0.1': dependencies: - '@changesets/errors': 0.1.4 - '@changesets/get-dependents-graph': 1.3.4 - '@changesets/logger': 0.0.5 - '@changesets/types': 5.2.0 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.0 + '@changesets/logger': 0.1.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 micromatch: 4.0.5 - '@changesets/errors@0.1.4': + '@changesets/errors@0.2.0': dependencies: extendable-error: 0.1.7 - '@changesets/get-dependents-graph@1.3.4': + '@changesets/get-dependents-graph@2.1.0': dependencies: - '@changesets/types': 5.2.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 chalk: 2.4.2 fs-extra: 7.0.1 - semver: 5.7.1 + semver: 7.6.2 - '@changesets/get-release-plan@3.0.15': + '@changesets/get-release-plan@4.0.2': dependencies: '@babel/runtime': 7.22.3 - '@changesets/assemble-release-plan': 5.2.2 - '@changesets/config': 2.2.0 - '@changesets/pre': 1.0.13 - '@changesets/read': 0.5.8 - '@changesets/types': 5.2.0 + '@changesets/assemble-release-plan': 6.0.2 + '@changesets/config': 3.0.1 + '@changesets/pre': 2.0.0 + '@changesets/read': 0.6.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 - '@changesets/get-version-range-type@0.3.2': {} + '@changesets/get-version-range-type@0.4.0': {} - '@changesets/git@1.5.0': + '@changesets/git@3.0.0': dependencies: '@babel/runtime': 7.22.3 - '@changesets/errors': 0.1.4 - '@changesets/types': 5.2.0 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 is-subdir: 1.2.0 + micromatch: 4.0.5 spawndamnit: 2.0.0 - '@changesets/logger@0.0.5': + '@changesets/logger@0.1.0': dependencies: chalk: 2.4.2 - '@changesets/parse@0.3.15': + '@changesets/parse@0.4.0': dependencies: - '@changesets/types': 5.2.0 + '@changesets/types': 6.0.0 js-yaml: 3.14.1 - '@changesets/pre@1.0.13': + '@changesets/pre@2.0.0': dependencies: '@babel/runtime': 7.22.3 - '@changesets/errors': 0.1.4 - '@changesets/types': 5.2.0 + '@changesets/errors': 0.2.0 + '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 - '@changesets/read@0.5.8': + '@changesets/read@0.6.0': dependencies: '@babel/runtime': 7.22.3 - '@changesets/git': 1.5.0 - '@changesets/logger': 0.0.5 - '@changesets/parse': 0.3.15 - '@changesets/types': 5.2.0 + '@changesets/git': 3.0.0 + '@changesets/logger': 0.1.0 + '@changesets/parse': 0.4.0 + '@changesets/types': 6.0.0 chalk: 2.4.2 fs-extra: 7.0.1 p-filter: 2.1.0 - '@changesets/types@4.1.0': {} - - '@changesets/types@5.2.0': {} - - '@changesets/write@0.2.2': + '@changesets/should-skip-package@0.1.0': dependencies: '@babel/runtime': 7.22.3 - '@changesets/types': 5.2.0 + '@changesets/types': 6.0.0 + '@manypkg/get-packages': 1.1.3 + + '@changesets/types@4.1.0': {} + + '@changesets/types@6.0.0': {} + + '@changesets/write@0.3.1': + dependencies: + '@babel/runtime': 7.22.3 + '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 prettier: 2.8.0 @@ -5360,6 +5413,11 @@ snapshots: '@connectrpc/connect': 1.4.0(@bufbuild/protobuf@1.9.0) undici: 5.28.4 + '@connectrpc/connect-web@1.4.0(@bufbuild/protobuf@1.9.0)(@connectrpc/connect@1.4.0(@bufbuild/protobuf@1.9.0))': + dependencies: + '@bufbuild/protobuf': 1.9.0 + '@connectrpc/connect': 1.4.0(@bufbuild/protobuf@1.9.0) + '@connectrpc/connect@1.4.0(@bufbuild/protobuf@1.9.0)': dependencies: '@bufbuild/protobuf': 1.9.0 @@ -5558,7 +5616,7 @@ snapshots: '@grpc/grpc-js@1.8.13': dependencies: '@grpc/proto-loader': 0.7.6 - '@types/node': 18.11.9 + '@types/node': 20.14.2 '@grpc/proto-loader@0.7.6': dependencies: @@ -5574,13 +5632,14 @@ snapshots: dependencies: '@hapi/hoek': 9.3.0 - '@headlessui/react@1.7.14(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@headlessui/react@1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: + '@tanstack/react-virtual': 3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) client-only: 0.0.1 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@heroicons/react@2.0.13(react@18.3.1)': + '@heroicons/react@2.1.3(react@18.3.1)': dependencies: react: 18.3.1 @@ -5821,16 +5880,24 @@ snapshots: '@swc/counter': 0.1.3 tslib: 2.4.1 - '@tailwindcss/forms@0.5.3(tailwindcss@3.2.4(postcss@8.4.21))': - dependencies: - mini-svg-data-uri: 1.4.4 - tailwindcss: 3.2.4(postcss@8.4.21) - '@tailwindcss/forms@0.5.3(tailwindcss@3.2.4(postcss@8.4.38))': dependencies: mini-svg-data-uri: 1.4.4 tailwindcss: 3.2.4(postcss@8.4.38) + '@tailwindcss/forms@0.5.7(tailwindcss@3.2.4(postcss@8.4.21))': + dependencies: + mini-svg-data-uri: 1.4.4 + tailwindcss: 3.2.4(postcss@8.4.21) + + '@tanstack/react-virtual@3.5.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@tanstack/virtual-core': 3.5.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@tanstack/virtual-core@3.5.0': {} + '@testing-library/dom@10.1.0': dependencies: '@babel/code-frame': 7.24.2 @@ -5866,13 +5933,26 @@ snapshots: optionalDependencies: vitest: 1.6.0(@types/node@18.11.9)(jsdom@24.0.0)(sass@1.77.1) - '@testing-library/react@14.0.0(react-dom@18.3.1(react@18.2.0))(react@18.2.0)': + '@testing-library/jest-dom@6.4.5(vitest@1.6.0(@types/node@20.14.2)(jsdom@24.0.0)(sass@1.77.1))': + dependencies: + '@adobe/css-tools': 4.3.3 + '@babel/runtime': 7.22.3 + aria-query: 5.1.3 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + optionalDependencies: + vitest: 1.6.0(@types/node@20.14.2)(jsdom@24.0.0)(sass@1.77.1) + + '@testing-library/react@14.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/runtime': 7.20.1 '@testing-library/dom': 9.3.0 '@types/react-dom': 18.2.7 - react: 18.2.0 - react-dom: 18.3.1(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) '@testing-library/react@15.0.7(@types/react@18.2.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -5909,10 +5989,6 @@ snapshots: '@types/estree@1.0.5': {} - '@types/is-ci@3.0.0': - dependencies: - ci-info: 3.6.2 - '@types/json5@0.0.29': {} '@types/long@4.0.2': {} @@ -5925,6 +6001,10 @@ snapshots: '@types/node@18.11.9': {} + '@types/node@20.14.2': + dependencies: + undici-types: 5.26.5 + '@types/normalize-package-data@2.4.1': {} '@types/object-hash@1.3.4': {} @@ -5959,7 +6039,7 @@ snapshots: '@types/scheduler@0.16.2': {} - '@types/semver@6.2.3': {} + '@types/semver@7.5.8': {} '@types/sinonjs__fake-timers@8.1.1': {} @@ -5971,7 +6051,7 @@ snapshots: '@types/yauzl@2.10.0': dependencies: - '@types/node': 18.11.9 + '@types/node': 20.14.2 optional: true '@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5)': @@ -6016,20 +6096,23 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vercel/analytics@1.0.0(react@18.3.1)': + '@vercel/analytics@1.3.1(next@14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.1))(react@18.3.1)': dependencies: + server-only: 0.0.1 + optionalDependencies: + next: 14.2.3(@babel/core@7.24.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.1) react: 18.3.1 '@vercel/git-hooks@1.0.0': {} - '@vitejs/plugin-react@4.2.1(vite@5.2.11(@types/node@18.11.9)(sass@1.77.1))': + '@vitejs/plugin-react@4.2.1(vite@5.2.11(@types/node@20.14.2)(sass@1.77.1))': dependencies: '@babel/core': 7.24.5 '@babel/plugin-transform-react-jsx-self': 7.24.5(@babel/core@7.24.5) '@babel/plugin-transform-react-jsx-source': 7.24.1(@babel/core@7.24.5) '@types/babel__core': 7.20.5 react-refresh: 0.14.2 - vite: 5.2.11(@types/node@18.11.9)(sass@1.77.1) + vite: 5.2.11(@types/node@20.14.2)(sass@1.77.1) transitivePeerDependencies: - supports-color @@ -6469,6 +6552,8 @@ snapshots: ci-info@3.6.2: {} + ci-info@3.9.0: {} + clean-stack@2.2.0: {} clean-stack@4.2.0: @@ -7393,7 +7478,7 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-glob@3.2.12: + fast-glob@3.3.2: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 @@ -7635,7 +7720,7 @@ snapshots: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.2 ignore: 5.2.0 merge2: 1.4.1 slash: 3.0.0 @@ -7643,7 +7728,7 @@ snapshots: globby@13.1.3: dependencies: dir-glob: 3.0.1 - fast-glob: 3.2.12 + fast-glob: 3.3.2 ignore: 5.2.0 merge2: 1.4.1 slash: 4.0.0 @@ -8106,7 +8191,7 @@ snapshots: lilconfig@2.0.5: {} - lilconfig@2.0.6: {} + lilconfig@2.1.0: {} lines-and-columns@1.2.4: {} @@ -8730,21 +8815,21 @@ snapshots: postcss-load-config@3.1.4(postcss@8.4.21): dependencies: - lilconfig: 2.0.6 + lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: postcss: 8.4.21 postcss-load-config@3.1.4(postcss@8.4.38): dependencies: - lilconfig: 2.0.6 + lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: postcss: 8.4.38 postcss-load-config@4.0.1(postcss@8.4.38): dependencies: - lilconfig: 2.0.6 + lilconfig: 2.1.0 yaml: 2.2.1 optionalDependencies: postcss: 8.4.38 @@ -8836,7 +8921,7 @@ snapshots: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 18.11.9 + '@types/node': 20.14.2 long: 4.0.0 protobufjs@7.2.3: @@ -9018,12 +9103,6 @@ snapshots: resolve-from@5.0.0: {} - resolve@1.22.1: - dependencies: - is-core-module: 2.13.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - resolve@1.22.6: dependencies: is-core-module: 2.13.0 @@ -9141,6 +9220,8 @@ snapshots: semver@7.6.2: {} + server-only@0.0.1: {} + set-blocking@2.0.0: {} set-function-length@1.2.2: @@ -9465,14 +9546,14 @@ snapshots: detective: 5.2.1 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.2.12 + fast-glob: 3.3.2 glob-parent: 6.0.2 is-glob: 4.0.3 - lilconfig: 2.0.6 + lilconfig: 2.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.0.0 + picocolors: 1.0.1 postcss: 8.4.21 postcss-import: 14.1.0(postcss@8.4.21) postcss-js: 4.0.1(postcss@8.4.21) @@ -9481,7 +9562,7 @@ snapshots: postcss-selector-parser: 6.0.11 postcss-value-parser: 4.2.0 quick-lru: 5.1.1 - resolve: 1.22.1 + resolve: 1.22.6 transitivePeerDependencies: - ts-node @@ -9493,14 +9574,14 @@ snapshots: detective: 5.2.1 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.2.12 + fast-glob: 3.3.2 glob-parent: 6.0.2 is-glob: 4.0.3 - lilconfig: 2.0.6 + lilconfig: 2.1.0 micromatch: 4.0.5 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.0.0 + picocolors: 1.0.1 postcss: 8.4.38 postcss-import: 14.1.0(postcss@8.4.38) postcss-js: 4.0.1(postcss@8.4.38) @@ -9509,7 +9590,7 @@ snapshots: postcss-selector-parser: 6.0.11 postcss-value-parser: 4.2.0 quick-lru: 5.1.1 - resolve: 1.22.1 + resolve: 1.22.6 transitivePeerDependencies: - ts-node @@ -9792,6 +9873,8 @@ snapshots: undefsafe@2.0.5: {} + undici-types@5.26.5: {} + undici@5.28.4: dependencies: '@fastify/busboy': 2.1.1 @@ -9860,14 +9943,32 @@ snapshots: - sugarss - supports-color - terser + optional: true - vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@18.11.9)(sass@1.77.1)): + vite-node@1.6.0(@types/node@20.14.2)(sass@1.77.1): + dependencies: + cac: 6.7.14 + debug: 4.3.4(supports-color@8.1.1) + pathe: 1.1.2 + picocolors: 1.0.1 + vite: 5.2.11(@types/node@20.14.2)(sass@1.77.1) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.2.11(@types/node@20.14.2)(sass@1.77.1)): dependencies: debug: 4.3.4(supports-color@8.1.1) globrex: 0.1.2 tsconfck: 3.0.3(typescript@5.4.5) optionalDependencies: - vite: 5.2.11(@types/node@18.11.9)(sass@1.77.1) + vite: 5.2.11(@types/node@20.14.2)(sass@1.77.1) transitivePeerDependencies: - supports-color - typescript @@ -9881,6 +9982,17 @@ snapshots: '@types/node': 18.11.9 fsevents: 2.3.3 sass: 1.77.1 + optional: true + + vite@5.2.11(@types/node@20.14.2)(sass@1.77.1): + dependencies: + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.17.2 + optionalDependencies: + '@types/node': 20.14.2 + fsevents: 2.3.3 + sass: 1.77.1 vitest@1.6.0(@types/node@18.11.9)(jsdom@24.0.0)(sass@1.77.1): dependencies: @@ -9915,6 +10027,41 @@ snapshots: - sugarss - supports-color - terser + optional: true + + vitest@1.6.0(@types/node@20.14.2)(jsdom@24.0.0)(sass@1.77.1): + dependencies: + '@vitest/expect': 1.6.0 + '@vitest/runner': 1.6.0 + '@vitest/snapshot': 1.6.0 + '@vitest/spy': 1.6.0 + '@vitest/utils': 1.6.0 + acorn-walk: 8.3.2 + chai: 4.4.1 + debug: 4.3.4(supports-color@8.1.1) + execa: 8.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.10 + pathe: 1.1.2 + picocolors: 1.0.1 + std-env: 3.7.0 + strip-literal: 2.1.0 + tinybench: 2.8.0 + tinypool: 0.8.4 + vite: 5.2.11(@types/node@20.14.2)(sass@1.77.1) + vite-node: 1.6.0(@types/node@20.14.2)(sass@1.77.1) + why-is-node-running: 2.2.2 + optionalDependencies: + '@types/node': 20.14.2 + jsdom: 24.0.0 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser w3c-xmlserializer@5.0.0: dependencies: