diff --git a/apps/login/app/(login)/register/idp/[provider]/success/page.tsx b/apps/login/app/(login)/register/idp/[provider]/success/page.tsx new file mode 100644 index 00000000000..5485e4751d2 --- /dev/null +++ b/apps/login/app/(login)/register/idp/[provider]/success/page.tsx @@ -0,0 +1,120 @@ +import { ProviderSlug } from "#/lib/demos"; +import { addHumanUser, server } from "#/lib/zitadel"; +import { + AddHumanUserRequest, + AddHumanUserResponse, + IDPInformation, + Provider, + RetrieveIdentityProviderInformationResponse, + user, + IDPLink, +} from "@zitadel/server"; + +const PROVIDER_MAPPING: { + [provider: string]: (rI: IDPInformation) => Partial; +} = { + [ProviderSlug.GOOGLE]: (idp: IDPInformation) => { + console.log("idp", idp); + const idpLink: IDPLink = { + idpId: idp.idpId, + userId: idp.userId, + userName: idp.userName, + }; + const req: Partial = { + username: idp.userName, + email: { + email: idp.rawInformation?.User?.email, + isVerified: true, + }, + // organisation: Organisation | undefined; + profile: { + displayName: idp.rawInformation?.User?.name ?? "", + firstName: idp.rawInformation?.User?.given_name ?? "", + lastName: idp.rawInformation?.User?.family_name ?? "", + }, + idpLinks: [idpLink], + }; + return req; + }, + [ProviderSlug.GITHUB]: (idp: IDPInformation) => { + console.log("idp", idp); + const idpLink: IDPLink = { + idpId: idp.idpId, + userId: idp.userId, + userName: idp.userName, + }; + const req: Partial = { + username: idp.userName, + email: { + email: idp.rawInformation?.email, + isVerified: true, + }, + // organisation: Organisation | undefined; + profile: { + displayName: idp.rawInformation?.name ?? "", + firstName: idp.rawInformation?.name ?? "", + lastName: idp.rawInformation?.name ?? "", + }, + idpLinks: [idpLink], + }; + return req; + }, +}; + +function retrieveIDP( + id: string, + token: string +): Promise { + const userService = user.getUser(server); + console.log("req"); + return userService + .retrieveIdentityProviderInformation({ intentId: id, token: token }, {}) + .then((resp: RetrieveIdentityProviderInformationResponse) => { + return resp.idpInformation; + }); +} + +function createUser( + provider: ProviderSlug, + info: IDPInformation +): Promise { + const userData = (PROVIDER_MAPPING as any)[provider](info); + console.log(userData); + const userService = user.getUser(server); + console.log(userData.profile); + return userService.addHumanUser(userData, {}).then((resp) => resp.userId); +} + +export default async function Page({ + searchParams, + params, +}: { + searchParams: Record; + params: { provider: ProviderSlug }; +}) { + const { id, token } = searchParams; + const { provider } = params; + + if (provider && id && token) { + const information = await retrieveIDP(id, token); + let user; + if (information) { + user = await createUser(provider, information); + } + + return ( +
+

Register successful

+

Your account has successfully been created.

+ {user &&
{JSON.stringify(user)}
} +
+ ); + } else { + return ( +
+

Register successful

+

No id and token received!

+
+ ); + } +} diff --git a/apps/login/lib/demos.ts b/apps/login/lib/demos.ts index a973c83e570..d5f1b9f3e29 100644 --- a/apps/login/lib/demos.ts +++ b/apps/login/lib/demos.ts @@ -4,6 +4,11 @@ export type Item = { description?: string; }; +export enum ProviderSlug { + GOOGLE = "google", + GITHUB = "github", +} + export const demos: { name: string; items: Item[] }[] = [ { name: "Login", diff --git a/apps/login/lib/zitadel.ts b/apps/login/lib/zitadel.ts index 94d0268c0a8..97beffe4f7e 100644 --- a/apps/login/lib/zitadel.ts +++ b/apps/login/lib/zitadel.ts @@ -27,6 +27,8 @@ import { ListAuthenticationMethodTypesResponse, StartIdentityProviderFlowRequest, StartIdentityProviderFlowResponse, + RetrieveIdentityProviderInformationRequest, + RetrieveIdentityProviderInformationResponse, } from "@zitadel/server"; export const zitadelConfig: ZitadelServerOptions = { @@ -175,14 +177,14 @@ export async function addHumanUser( server: ZitadelServer, { email, firstName, lastName, password }: AddHumanUserData ): Promise { - const mgmt = user.getUser(server); + const userService = user.getUser(server); const payload = { email: { email }, username: email, profile: { firstName, lastName }, }; - return mgmt + return userService .addHumanUser( password ? { @@ -210,6 +212,18 @@ export async function startIdentityProviderFlow( }); } +export async function retrieveIdentityProviderInformation( + server: ZitadelServer, + { intentId, token }: RetrieveIdentityProviderInformationRequest +): Promise { + const userService = user.getUser(server); + + return userService.retrieveIdentityProviderInformation({ + intentId, + token, + }); +} + export async function verifyEmail( server: ZitadelServer, userId: string, diff --git a/apps/login/ui/AddressBar.tsx b/apps/login/ui/AddressBar.tsx index 8c5548bffcd..2f873b05885 100644 --- a/apps/login/ui/AddressBar.tsx +++ b/apps/login/ui/AddressBar.tsx @@ -27,8 +27,8 @@ export function AddressBar({ domain }: Props) {
-
- {domain} +
+ {domain}
{pathname ? ( <> diff --git a/apps/login/ui/SignInWithIDP.tsx b/apps/login/ui/SignInWithIDP.tsx index 841ee7afa08..6922903a69b 100644 --- a/apps/login/ui/SignInWithIDP.tsx +++ b/apps/login/ui/SignInWithIDP.tsx @@ -11,6 +11,7 @@ import { SignInWithGithub, } from "@zitadel/react"; import { useRouter } from "next/navigation"; +import { ProviderSlug } from "#/lib/demos"; export interface SignInWithIDPProps { children?: ReactNode; @@ -22,7 +23,7 @@ export function SignInWithIDP({ identityProviders }: SignInWithIDPProps) { const [error, setError] = useState(""); const router = useRouter(); - async function startFlow(idp: any) { + async function startFlow(idp: any, provider: ProviderSlug) { console.log("start flow"); const host = "http://localhost:3000"; setLoading(true); @@ -34,8 +35,8 @@ export function SignInWithIDP({ identityProviders }: SignInWithIDPProps) { }, body: JSON.stringify({ idpId: idp.id, - successUrl: `${host}`, - failureUrl: `${host}`, + successUrl: `${host}/register/idp/${provider}/success`, + failureUrl: `${host}/register/idp/${provider}/failure`, }), }); @@ -58,14 +59,26 @@ export function SignInWithIDP({ identityProviders }: SignInWithIDPProps) { return ( + startFlow(idp, ProviderSlug.GITHUB).then(({ authUrl }) => { + console.log("done"); + router.push(authUrl); + }) + } + // name={idp.name} > ); case 7: // IdentityProviderType.IDENTITY_PROVIDER_TYPE_GITHUB_ES: return ( + // startFlow(idp, ProviderSlug.GITHUB).then(({ authUrl }) => { + // console.log("done"); + // router.push(authUrl); + // }) + // } > ); case 5: // IdentityProviderType.IDENTITY_PROVIDER_TYPE_AZURE_AD: @@ -79,9 +92,9 @@ export function SignInWithIDP({ identityProviders }: SignInWithIDPProps) { return ( - startFlow(idp).then(({ authUrl }) => { + startFlow(idp, ProviderSlug.GOOGLE).then(({ authUrl }) => { console.log("done"); router.push(authUrl); }) diff --git a/packages/zitadel-react/package.json b/packages/zitadel-react/package.json index e2abee12bdd..f7e6a2c21b1 100644 --- a/packages/zitadel-react/package.json +++ b/packages/zitadel-react/package.json @@ -40,8 +40,8 @@ "tailwindcss": "3.2.4", "ts-jest": "^29.1.0", "ts-node": "^10.9.1", - "tsup": "^5.10.1", - "typescript": "^4.9.3", + "tsup": "^7.1.0", + "typescript": "^5.1.6", "zitadel-tailwind-config": "workspace:*" }, "publishConfig": { diff --git a/packages/zitadel-react/src/components/SignInWithGithub.tsx b/packages/zitadel-react/src/components/SignInWithGithub.tsx index e6c1c181270..fff70a358e5 100644 --- a/packages/zitadel-react/src/components/SignInWithGithub.tsx +++ b/packages/zitadel-react/src/components/SignInWithGithub.tsx @@ -11,38 +11,45 @@ export const SignInWithGithub = forwardRef< ) diff --git a/packages/zitadel-server/src/index.ts b/packages/zitadel-server/src/index.ts index 4a9e0314b51..288885e4a12 100644 --- a/packages/zitadel-server/src/index.ts +++ b/packages/zitadel-server/src/index.ts @@ -28,6 +28,10 @@ export { Session, Factors, } from "./proto/server/zitadel/session/v2alpha/session"; +export { + IDPInformation, + IDPLink, +} from "./proto/server/zitadel/user/v2alpha/idp"; export { ListSessionsResponse, GetSessionResponse, @@ -47,6 +51,7 @@ export { } from "./proto/server/zitadel/settings/v2alpha/settings_service"; export { AddHumanUserResponse, + AddHumanUserRequest, VerifyEmailResponse, VerifyPasskeyRegistrationRequest, VerifyPasskeyRegistrationResponse, @@ -59,6 +64,8 @@ export { AuthenticationMethodType, StartIdentityProviderFlowRequest, StartIdentityProviderFlowResponse, + RetrieveIdentityProviderInformationRequest, + RetrieveIdentityProviderInformationResponse, } from "./proto/server/zitadel/user/v2alpha/user_service"; export { SetHumanPasswordResponse, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82c14cd588d..3f2089ead21 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -200,7 +200,7 @@ importers: dependencies: eslint-config-next: specifier: latest - version: 13.4.12(eslint@7.32.0)(typescript@4.9.3) + version: 13.4.12(eslint@7.32.0)(typescript@5.1.6) eslint-config-prettier: specifier: ^8.3.0 version: 8.5.0(eslint@7.32.0) @@ -365,16 +365,16 @@ importers: version: 3.2.4(postcss@8.4.21)(ts-node@10.9.1) ts-jest: specifier: ^29.1.0 - version: 29.1.0(@babel/core@7.22.1)(esbuild@0.14.54)(jest@29.5.0)(typescript@4.9.3) + version: 29.1.0(@babel/core@7.22.1)(esbuild@0.18.17)(jest@29.5.0)(typescript@5.1.6) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.11.9)(typescript@4.9.3) + version: 10.9.1(@types/node@18.11.9)(typescript@5.1.6) tsup: - specifier: ^5.10.1 - version: 5.12.9(postcss@8.4.21)(ts-node@10.9.1)(typescript@4.9.3) + specifier: ^7.1.0 + version: 7.1.0(postcss@8.4.21)(ts-node@10.9.1)(typescript@5.1.6) typescript: - specifier: ^4.9.3 - version: 4.9.3 + specifier: ^5.1.6 + version: 5.1.6 zitadel-tailwind-config: specifier: workspace:* version: link:../zitadel-tailwind-config @@ -1090,6 +1090,96 @@ packages: - supports-color dev: true + /@esbuild/android-arm64@0.18.17: + resolution: {integrity: sha512-9np+YYdNDed5+Jgr1TdWBsozZ85U1Oa3xW0c7TWqH0y2aGghXtZsuT8nYRbzOMcl0bXZXjOGbksoTtVOlWrRZg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.18.17: + resolution: {integrity: sha512-wHsmJG/dnL3OkpAcwbgoBTTMHVi4Uyou3F5mf58ZtmUyIKfcdA7TROav/6tCzET4A3QW2Q2FC+eFneMU+iyOxg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.18.17: + resolution: {integrity: sha512-O+FeWB/+xya0aLg23hHEM2E3hbfwZzjqumKMSIqcHbNvDa+dza2D0yLuymRBQQnC34CWrsJUXyH2MG5VnLd6uw==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.18.17: + resolution: {integrity: sha512-M9uJ9VSB1oli2BE/dJs3zVr9kcCBBsE883prage1NWz6pBS++1oNn/7soPNS3+1DGj0FrkSvnED4Bmlu1VAE9g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.18.17: + resolution: {integrity: sha512-XDre+J5YeIJDMfp3n0279DFNrGCXlxOuGsWIkRb1NThMZ0BsrWXoTg23Jer7fEXQ9Ye5QjrvXpxnhzl3bHtk0g==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.18.17: + resolution: {integrity: sha512-cjTzGa3QlNfERa0+ptykyxs5A6FEUQQF0MuilYXYBGdBxD3vxJcKnzDlhDCa1VAJCmAxed6mYhA2KaJIbtiNuQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.18.17: + resolution: {integrity: sha512-sOxEvR8d7V7Kw8QqzxWc7bFfnWnGdaFBut1dRUYtu+EIRXefBc/eIsiUiShnW0hM3FmQ5Zf27suDuHsKgZ5QrA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.18.17: + resolution: {integrity: sha512-c9w3tE7qA3CYWjT+M3BMbwMt+0JYOp3vCMKgVBrCl1nwjAlOMYzEo+gG7QaZ9AtqZFj5MbUc885wuBBmu6aADQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.18.17: + resolution: {integrity: sha512-2d3Lw6wkwgSLC2fIvXKoMNGVaeY8qdN0IC3rfuVxJp89CRfA3e3VqWifGDfuakPmp90+ZirmTfye1n4ncjv2lg==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.18.17: + resolution: {integrity: sha512-1DS9F966pn5pPnqXYz16dQqWIB0dmDfAQZd6jSSpiT9eX1NzKh07J6VKR3AoXXXEk6CqZMojiVDSZi1SlmKVdg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + /@esbuild/linux-loong64@0.14.54: resolution: {integrity: sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==} engines: {node: '>=12'} @@ -1099,6 +1189,114 @@ packages: dev: true optional: true + /@esbuild/linux-loong64@0.18.17: + resolution: {integrity: sha512-EvLsxCk6ZF0fpCB6w6eOI2Fc8KW5N6sHlIovNe8uOFObL2O+Mr0bflPHyHwLT6rwMg9r77WOAWb2FqCQrVnwFg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.18.17: + resolution: {integrity: sha512-e0bIdHA5p6l+lwqTE36NAW5hHtw2tNRmHlGBygZC14QObsA3bD4C6sXLJjvnDIjSKhW1/0S3eDy+QmX/uZWEYQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.18.17: + resolution: {integrity: sha512-BAAilJ0M5O2uMxHYGjFKn4nJKF6fNCdP1E0o5t5fvMYYzeIqy2JdAP88Az5LHt9qBoUa4tDaRpfWt21ep5/WqQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.18.17: + resolution: {integrity: sha512-Wh/HW2MPnC3b8BqRSIme/9Zhab36PPH+3zam5pqGRH4pE+4xTrVLx2+XdGp6fVS3L2x+DrsIcsbMleex8fbE6g==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.18.17: + resolution: {integrity: sha512-j/34jAl3ul3PNcK3pfI0NSlBANduT2UO5kZ7FCaK33XFv3chDhICLY8wJJWIhiQ+YNdQ9dxqQctRg2bvrMlYgg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.18.17: + resolution: {integrity: sha512-QM50vJ/y+8I60qEmFxMoxIx4de03pGo2HwxdBeFd4nMh364X6TIBZ6VQ5UQmPbQWUVWHWws5MmJXlHAXvJEmpQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.18.17: + resolution: {integrity: sha512-/jGlhWR7Sj9JPZHzXyyMZ1RFMkNPjC6QIAan0sDOtIo2TYk3tZn5UDrkE0XgsTQCxWTTOcMPf9p6Rh2hXtl5TQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.18.17: + resolution: {integrity: sha512-rSEeYaGgyGGf4qZM2NonMhMOP/5EHp4u9ehFiBrg7stH6BYEEjlkVREuDEcQ0LfIl53OXLxNbfuIj7mr5m29TA==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.18.17: + resolution: {integrity: sha512-Y7ZBbkLqlSgn4+zot4KUNYst0bFoO68tRgI6mY2FIM+b7ZbyNVtNbDP5y8qlu4/knZZ73fgJDlXID+ohY5zt5g==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.18.17: + resolution: {integrity: sha512-bwPmTJsEQcbZk26oYpc4c/8PvTY3J5/QK8jM19DVlEsAB41M39aWovWoHtNm78sd6ip6prilxeHosPADXtEJFw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.18.17: + resolution: {integrity: sha512-H/XaPtPKli2MhW+3CQueo6Ni3Avggi6hP/YvgkEe1aSaxw+AeO8MFjq8DlgfTd9Iz4Yih3QCZI6YLMoyccnPRg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.18.17: + resolution: {integrity: sha512-fGEb8f2BSA3CW7riJVurug65ACLuQAzKq0SSqkY2b2yHHH0MzDfbLyKIGzHwOI/gkHcxM/leuSW6D5w/LMNitA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + /@eslint/eslintrc@0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -1962,7 +2160,7 @@ packages: /@types/react-dom@18.0.9: resolution: {integrity: sha512-qnVvHxASt/H7i+XG1U1xMiY5t+IHcPGUK7TDMDzom08xa7e86eCeKOiLZezwCKVxJn6NEiiy2ekgX8aQssjIKg==} dependencies: - '@types/react': 17.0.52 + '@types/react': 18.2.17 dev: true /@types/react-dom@18.2.7: @@ -2057,7 +2255,7 @@ packages: dev: true optional: true - /@typescript-eslint/parser@5.44.0(eslint@7.32.0)(typescript@4.9.3): + /@typescript-eslint/parser@5.44.0(eslint@7.32.0)(typescript@5.1.6): resolution: {integrity: sha512-H7LCqbZnKqkkgQHaKLGC6KUjt3pjJDx8ETDqmwncyb6PuoigYajyAwBGz08VU/l86dZWZgI4zm5k2VaKqayYyA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2069,10 +2267,10 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.44.0 '@typescript-eslint/types': 5.44.0 - '@typescript-eslint/typescript-estree': 5.44.0(typescript@4.9.3) + '@typescript-eslint/typescript-estree': 5.44.0(typescript@5.1.6) debug: 4.3.4(supports-color@8.1.1) eslint: 7.32.0 - typescript: 4.9.3 + typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: false @@ -2090,7 +2288,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: false - /@typescript-eslint/typescript-estree@5.44.0(typescript@4.9.3): + /@typescript-eslint/typescript-estree@5.44.0(typescript@5.1.6): resolution: {integrity: sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2105,8 +2303,8 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.8 - tsutils: 3.21.0(typescript@4.9.3) - typescript: 4.9.3 + tsutils: 3.21.0(typescript@5.1.6) + typescript: 5.1.6 transitivePeerDependencies: - supports-color dev: false @@ -2629,6 +2827,16 @@ packages: load-tsconfig: 0.2.3 dev: true + /bundle-require@4.0.1(esbuild@0.18.17): + resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: '>=0.17' + dependencies: + esbuild: 0.18.17 + load-tsconfig: 0.2.3 + dev: true + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} @@ -3689,6 +3897,36 @@ packages: esbuild-windows-arm64: 0.14.54 dev: true + /esbuild@0.18.17: + resolution: {integrity: sha512-1GJtYnUxsJreHYA0Y+iQz2UEykonY66HNWOb0yXYZi9/kNrORUEHVg87eQsCtqh59PEJ5YVZJO98JHznMJSWjg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.17 + '@esbuild/android-arm64': 0.18.17 + '@esbuild/android-x64': 0.18.17 + '@esbuild/darwin-arm64': 0.18.17 + '@esbuild/darwin-x64': 0.18.17 + '@esbuild/freebsd-arm64': 0.18.17 + '@esbuild/freebsd-x64': 0.18.17 + '@esbuild/linux-arm': 0.18.17 + '@esbuild/linux-arm64': 0.18.17 + '@esbuild/linux-ia32': 0.18.17 + '@esbuild/linux-loong64': 0.18.17 + '@esbuild/linux-mips64el': 0.18.17 + '@esbuild/linux-ppc64': 0.18.17 + '@esbuild/linux-riscv64': 0.18.17 + '@esbuild/linux-s390x': 0.18.17 + '@esbuild/linux-x64': 0.18.17 + '@esbuild/netbsd-x64': 0.18.17 + '@esbuild/openbsd-x64': 0.18.17 + '@esbuild/sunos-x64': 0.18.17 + '@esbuild/win32-arm64': 0.18.17 + '@esbuild/win32-ia32': 0.18.17 + '@esbuild/win32-x64': 0.18.17 + dev: true + /escalade@3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} @@ -3724,7 +3962,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-next@13.4.12(eslint@7.32.0)(typescript@4.9.3): + /eslint-config-next@13.4.12(eslint@7.32.0)(typescript@5.1.6): resolution: {integrity: sha512-ZF0r5vxKaVazyZH/37Au/XItiG7qUOBw+HaH3PeyXltIMwXorsn6bdrl0Nn9N5v5v9spc+6GM2ryjugbjF6X2g==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -3735,7 +3973,7 @@ packages: dependencies: '@next/eslint-plugin-next': 13.4.12 '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/parser': 5.44.0(eslint@7.32.0)(typescript@4.9.3) + '@typescript-eslint/parser': 5.44.0(eslint@7.32.0)(typescript@5.1.6) eslint: 7.32.0 eslint-import-resolver-node: 0.3.6 eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.26.0)(eslint@7.32.0) @@ -3743,7 +3981,7 @@ packages: eslint-plugin-jsx-a11y: 6.6.1(eslint@7.32.0) eslint-plugin-react: 7.31.11(eslint@7.32.0) eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@7.32.0) - typescript: 4.9.3 + typescript: 5.1.6 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color @@ -3817,7 +4055,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.44.0(eslint@7.32.0)(typescript@4.9.3) + '@typescript-eslint/parser': 5.44.0(eslint@7.32.0)(typescript@5.1.6) debug: 3.2.7(supports-color@5.5.0) eslint: 7.32.0 eslint-import-resolver-node: 0.3.6 @@ -3836,7 +4074,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.44.0(eslint@7.32.0)(typescript@4.9.3) + '@typescript-eslint/parser': 5.44.0(eslint@7.32.0)(typescript@5.1.6) array-includes: 3.1.6 array.prototype.flat: 1.3.1 debug: 2.6.9 @@ -5168,7 +5406,7 @@ packages: pretty-format: 29.5.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.11.9)(typescript@5.0.4) + ts-node: 10.9.1(@types/node@18.11.9)(typescript@5.1.6) transitivePeerDependencies: - supports-color dev: true @@ -6658,7 +6896,7 @@ packages: dependencies: lilconfig: 2.0.6 postcss: 8.4.21 - ts-node: 10.9.1(@types/node@18.11.9)(typescript@5.0.4) + ts-node: 10.9.1(@types/node@18.11.9)(typescript@5.1.6) yaml: 1.10.2 /postcss-load-config@3.1.4(ts-node@10.9.1): @@ -6678,6 +6916,24 @@ packages: yaml: 1.10.2 dev: true + /postcss-load-config@4.0.1(postcss@8.4.21)(ts-node@10.9.1): + resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.0.6 + postcss: 8.4.21 + ts-node: 10.9.1(@types/node@18.11.9)(typescript@5.1.6) + yaml: 2.2.1 + dev: true + /postcss-nested@6.0.0(postcss@8.4.21): resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} engines: {node: '>=12.0'} @@ -7117,6 +7373,14 @@ packages: fsevents: 2.3.2 dev: true + /rollup@3.26.3: + resolution: {integrity: sha512-7Tin0C8l86TkpcMtXvQu6saWH93nhG3dGQ1/+l5V2TDMceTxO7kDiK6GzbfLWNNxqJXm591PcEZUozZm51ogwQ==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: @@ -7877,6 +8141,41 @@ packages: yargs-parser: 21.1.1 dev: true + /ts-jest@29.1.0(@babel/core@7.22.1)(esbuild@0.18.17)(jest@29.5.0)(typescript@5.1.6): + resolution: {integrity: sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + dependencies: + '@babel/core': 7.22.1 + bs-logger: 0.2.6 + esbuild: 0.18.17 + fast-json-stable-stringify: 2.1.0 + jest: 29.5.0(@types/node@18.11.9)(ts-node@10.9.1) + jest-util: 29.5.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.3.8 + typescript: 5.1.6 + yargs-parser: 21.1.1 + dev: true + /ts-node@10.9.1(@types/node@18.11.9)(typescript@4.9.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true @@ -7937,6 +8236,37 @@ packages: typescript: 5.0.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + dev: true + + /ts-node@10.9.1(@types/node@18.11.9)(typescript@5.1.6): + resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.9 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 18.11.9 + acorn: 8.8.1 + acorn-walk: 8.2.0 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.1.6 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 /ts-poet@6.4.1: resolution: {integrity: sha512-AjZEs4h2w4sDfwpHMxQKHrTlNh2wRbM5NRXmLz0RiH+yPGtSQFbe9hBpNocU8vqVNgfh0BIOiXR80xDz3kKxUQ==} @@ -8051,14 +8381,51 @@ packages: - ts-node dev: true - /tsutils@3.21.0(typescript@4.9.3): + /tsup@7.1.0(postcss@8.4.21)(ts-node@10.9.1)(typescript@5.1.6): + resolution: {integrity: sha512-mazl/GRAk70j8S43/AbSYXGgvRP54oQeX8Un4iZxzATHt0roW0t6HYDVZIXMw0ZQIpvr1nFMniIVnN5186lW7w==} + engines: {node: '>=16.14'} + hasBin: true + peerDependencies: + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.1.0' + peerDependenciesMeta: + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + dependencies: + bundle-require: 4.0.1(esbuild@0.18.17) + cac: 6.7.14 + chokidar: 3.5.3 + debug: 4.3.4(supports-color@8.1.1) + esbuild: 0.18.17 + execa: 5.1.1 + globby: 11.1.0 + joycon: 3.1.1 + postcss: 8.4.21 + postcss-load-config: 4.0.1(postcss@8.4.21)(ts-node@10.9.1) + resolve-from: 5.0.0 + rollup: 3.26.3 + source-map: 0.8.0-beta.0 + sucrase: 3.29.0 + tree-kill: 1.2.2 + typescript: 5.1.6 + transitivePeerDependencies: + - supports-color + - ts-node + dev: true + + /tsutils@3.21.0(typescript@5.1.6): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 4.9.3 + typescript: 5.1.6 dev: false /tty-table@4.1.6: @@ -8197,11 +8564,18 @@ packages: resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==} engines: {node: '>=4.2.0'} hasBin: true + dev: true /typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} hasBin: true + dev: true + + /typescript@5.1.6: + resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} + engines: {node: '>=14.17'} + hasBin: true /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}