From 6eeadf7dad9c55d3b1d38f176e786f2f701db5bc Mon Sep 17 00:00:00 2001 From: Yordis Prieto Date: Wed, 29 May 2024 12:09:45 -0400 Subject: [PATCH] feat: migrate loginname page to buf --- README.md | 37 +-- apps/login/package.json | 2 + apps/login/src/app/(login)/loginname/page.tsx | 66 ++---- apps/login/src/lib/zitadel2.ts | 12 + apps/login/src/ui/DynamicTheme.tsx | 6 +- apps/login/src/ui/ThemeWrapper.tsx | 4 +- apps/login/tsconfig.json | 1 - apps/login/turbo.json | 8 +- package.json | 2 +- packages/eslint-config-zitadel/package.json | 10 +- packages/zitadel-react/tsconfig.json | 5 +- pnpm-lock.yaml | 221 ++++++++---------- 12 files changed, 177 insertions(+), 197 deletions(-) create mode 100644 apps/login/src/lib/zitadel2.ts diff --git a/README.md b/README.md index eb89909ea..cfe1f022f 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 44dc1bb49..81e9ed124 100644 --- a/apps/login/package.json +++ b/apps/login/package.json @@ -37,7 +37,9 @@ "@tailwindcss/forms": "0.5.3", "@vercel/analytics": "^1.0.0", "@zitadel/client": "workspace:*", + "@zitadel/client2": "workspace:*", "@zitadel/react": "workspace:*", + "@zitadel/node": "workspace:*", "@zitadel/server": "workspace:*", "clsx": "1.2.1", "copy-to-clipboard": "^3.3.3", diff --git a/apps/login/src/app/(login)/loginname/page.tsx b/apps/login/src/app/(login)/loginname/page.tsx index ca875b6b6..c84e42e29 100644 --- a/apps/login/src/app/(login)/loginname/page.tsx +++ b/apps/login/src/app/(login)/loginname/page.tsx @@ -1,73 +1,49 @@ -import { - getBrandingSettings, - getLegalAndSupportSettings, - getLoginSettings, - server, -} from "@/lib/zitadel"; import DynamicTheme from "@/ui/DynamicTheme"; -import { SignInWithIDP } from "@/ui/SignInWithIDP"; +import {SignInWithIDP} from "@/ui/SignInWithIDP"; import UsernameForm from "@/ui/UsernameForm"; -import { - GetActiveIdentityProvidersResponse, - IdentityProvider, - ZitadelServer, - settings, -} from "@zitadel/server"; +import {settingsService} from "@/lib/zitadel2"; +import {makeReqCtx} from "@zitadel/client2/v2beta"; -function getIdentityProviders( - server: ZitadelServer, - orgId?: string, -): Promise { - const settingsService = settings.getSettings(server); - return settingsService - .getActiveIdentityProviders( - orgId ? { ctx: { orgId } } : { ctx: { instance: true } }, - {}, - ) - .then((resp: GetActiveIdentityProvidersResponse) => { - return resp.identityProviders; - }); -} - -export default async function Page({ - searchParams, -}: { +export default async function Page(props: { searchParams: Record; }) { - const loginName = searchParams?.loginName; - const authRequestId = searchParams?.authRequestId; - const organization = searchParams?.organization; - const submit: boolean = searchParams?.submit === "true"; - - const loginSettings = await getLoginSettings(server, organization); - const legal = await getLegalAndSupportSettings(server); - - const identityProviders = await getIdentityProviders(server, organization); + const loginName = props.searchParams?.loginName; + const authRequestId = props.searchParams?.authRequestId; + const organization = props.searchParams?.organization; + const submit: boolean = props.searchParams?.submit === "true"; + + const loginSettings = await settingsService + .getLoginSettings({ ctx: makeReqCtx(organization) }); + const legalAndSupportSettings = await settingsService + .getLegalAndSupportSettings({ctx: makeReqCtx(organization)}); + const activeIdentityProviders = await settingsService + .getActiveIdentityProviders({ ctx: makeReqCtx(organization) }); const host = process.env.VERCEL_URL ? `https://${process.env.VERCEL_URL}` : "http://localhost:3000"; - const branding = await getBrandingSettings(server, organization); + const brandingSettings = await settingsService + .getBrandingSettings({ ctx: makeReqCtx(organization) }); return ( - +

Welcome back!

Enter your login data.

- {legal && identityProviders && process.env.ZITADEL_API_URL && ( + {legalAndSupportSettings.settings && activeIdentityProviders.identityProviders && process.env.ZITADEL_API_URL && ( diff --git a/apps/login/src/lib/zitadel2.ts b/apps/login/src/lib/zitadel2.ts new file mode 100644 index 000000000..e8b8f7367 --- /dev/null +++ b/apps/login/src/lib/zitadel2.ts @@ -0,0 +1,12 @@ +import {createServerTransport} from "@zitadel/node"; +import { createSettingsServiceClient } from "@zitadel/client2/v2beta"; + +const transport = createServerTransport( + process.env.ZITADEL_SERVICE_USER_TOKEN!, + { + baseUrl: process.env.ZITADEL_API_URL!, + httpVersion: "2", + }, +); + +export const settingsService = createSettingsServiceClient(transport); diff --git a/apps/login/src/ui/DynamicTheme.tsx b/apps/login/src/ui/DynamicTheme.tsx index 0a91d8a5d..98823d784 100644 --- a/apps/login/src/ui/DynamicTheme.tsx +++ b/apps/login/src/ui/DynamicTheme.tsx @@ -1,18 +1,20 @@ "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/client/src/proto/client/zitadel/settings/v2beta/branding_settings_pb"; export default function DynamicTheme({ branding, children, }: { children: React.ReactNode; - branding?: BrandingSettings; + branding?: BrandingSettings.AsObject; }) { + console.log('branding', branding); + let partial: Partial | undefined; if (branding) { partial = { diff --git a/apps/login/src/ui/ThemeWrapper.tsx b/apps/login/src/ui/ThemeWrapper.tsx index 9c9d0bc0a..42a5b5592 100644 --- a/apps/login/src/ui/ThemeWrapper.tsx +++ b/apps/login/src/ui/ThemeWrapper.tsx @@ -1,11 +1,11 @@ "use client"; -import { BrandingSettings } from "@zitadel/server"; import { setTheme } from "@/utils/colors"; import { useEffect } from "react"; +import {BrandingSettings} from "@zitadel/client/src/proto/client/zitadel/settings/v2beta/branding_settings_pb"; type Props = { - branding: Partial | undefined; + branding: Partial | undefined; children: React.ReactNode; }; diff --git a/apps/login/tsconfig.json b/apps/login/tsconfig.json index 161099e16..bf3a62f57 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 ff7aaf0a4..cda4cd04a 100644 --- a/apps/login/turbo.json +++ b/apps/login/turbo.json @@ -6,16 +6,16 @@ "dependsOn": ["^build"] }, "test": { - "dependsOn": ["@zitadel/server#build", "@zitadel/react#build"] + "dependsOn": ["@zitadel/client2#build", "@zitadel/node#build", "@zitadel/server#build", "@zitadel/react#build"] }, "test:integration": { - "dependsOn": ["@zitadel/server#build", "@zitadel/react#build"] + "dependsOn": ["@zitadel/client2#build", "@zitadel/node#build", "@zitadel/server#build", "@zitadel/react#build"] }, "test:unit": { - "dependsOn": ["@zitadel/server#build"] + "dependsOn": ["@zitadel/client2#build", "@zitadel/node#build", "@zitadel/server#build"] }, "test:watch": { - "dependsOn": ["@zitadel/server#build", "@zitadel/react#build"] + "dependsOn": ["@zitadel/client2#build", "@zitadel/node#build", "@zitadel/server#build", "@zitadel/react#build"] } } } diff --git a/package.json b/package.json index 05ea53a3c..651205a90 100755 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ }, "pnpm": { "overrides": { - "@typescript-eslint/parser": "^7.9.0" + "@typescript-eslint/parser": "^7.11.0" } }, "devDependencies": { diff --git a/packages/eslint-config-zitadel/package.json b/packages/eslint-config-zitadel/package.json index d45f0f431..dc99ba667 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", + "@typescript-eslint/parser": "^7.11.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-react": "^7.34.1", + "eslint-plugin-react": "^7.34.2", "eslint-config-turbo": "^1.13.3" - }, - "publishConfig": { - "access": "public" } } diff --git a/packages/zitadel-react/tsconfig.json b/packages/zitadel-react/tsconfig.json index 460eef71f..2200a65a4 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 a7fda764e..682e8cdc4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,7 @@ settings: excludeLinksFromLockfile: false overrides: - '@typescript-eslint/parser': ^7.9.0 + '@typescript-eslint/parser': ^7.11.0 importers: @@ -59,6 +59,12 @@ importers: '@zitadel/client': specifier: workspace:* version: link:../../packages/zitadel-client + '@zitadel/client2': + specifier: workspace:* + version: link:../../packages/zitadel-client2 + '@zitadel/node': + specifier: workspace:* + version: link:../../packages/zitadel-node '@zitadel/react': specifier: workspace:* version: link:../../packages/zitadel-react @@ -196,8 +202,8 @@ importers: packages/eslint-config-zitadel: dependencies: '@typescript-eslint/parser': - specifier: ^7.9.0 - version: 7.9.0(eslint@8.57.0)(typescript@5.4.5) + specifier: ^7.11.0 + version: 7.11.0(eslint@8.57.0)(typescript@5.4.5) eslint-config-next: specifier: ^14.2.3 version: 14.2.3(eslint@8.57.0)(typescript@5.4.5) @@ -208,8 +214,8 @@ importers: specifier: ^1.13.3 version: 1.13.3(eslint@8.57.0) eslint-plugin-react: - specifier: ^7.34.1 - version: 7.34.1(eslint@8.57.0) + specifier: ^7.34.2 + version: 7.34.2(eslint@8.57.0) packages/zitadel-client: dependencies: @@ -1447,8 +1453,8 @@ packages: '@types/yauzl@2.10.0': resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==, tarball: https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz} - '@typescript-eslint/parser@7.9.0': - resolution: {integrity: sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.9.0.tgz} + '@typescript-eslint/parser@7.11.0': + resolution: {integrity: sha512-yimw99teuaXVWsBcPO1Ais02kwJ1jmNA1KxE7ng0aT7ndr1pT1wqj0OJnsYVGKKlc4QJai86l/025L6z8CljOg==, tarball: https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.11.0.tgz} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -1457,16 +1463,16 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@7.9.0': - resolution: {integrity: sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.9.0.tgz} + '@typescript-eslint/scope-manager@7.11.0': + resolution: {integrity: sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==, tarball: https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.11.0.tgz} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@7.9.0': - resolution: {integrity: sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-7.9.0.tgz} + '@typescript-eslint/types@7.11.0': + resolution: {integrity: sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==, tarball: https://registry.npmjs.org/@typescript-eslint/types/-/types-7.11.0.tgz} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/typescript-estree@7.9.0': - resolution: {integrity: sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.9.0.tgz} + '@typescript-eslint/typescript-estree@7.11.0': + resolution: {integrity: sha512-cxkhZ2C/iyi3/6U9EPc5y+a6csqHItndvN/CzbNXTNrsC3/ASoYQZEt9uMaEp+xFNjasqQyszp5TumAVKKvJeQ==, tarball: https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.11.0.tgz} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -1474,8 +1480,8 @@ packages: typescript: optional: true - '@typescript-eslint/visitor-keys@7.9.0': - resolution: {integrity: sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.9.0.tgz} + '@typescript-eslint/visitor-keys@7.11.0': + resolution: {integrity: sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==, tarball: https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.11.0.tgz} engines: {node: ^18.18.0 || >=20.0.0} '@ungap/structured-clone@1.2.0': @@ -2074,7 +2080,7 @@ packages: optional: true debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, tarball: https://registry.npmjs.org/debug/-/debug-4.3.4.tgz} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -2273,10 +2279,6 @@ packages: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==, tarball: https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz} engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==, tarball: https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz} - engines: {node: '>= 0.4'} - es-set-tostringtag@2.0.3: resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==, tarball: https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz} engines: {node: '>= 0.4'} @@ -2394,8 +2396,8 @@ packages: peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - eslint-plugin-react@7.34.1: - resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==, tarball: https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz} + eslint-plugin-react@7.34.2: + resolution: {integrity: sha512-2HCmrU+/JNigDN6tg55cRDKCQWicYAPB38JGSFDQt95jDm8rrvSUo7YPkOIm5l6ts1j1zCvysNcasvfTMQzUOw==, tarball: https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.2.tgz} engines: {node: '>=4'} peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 @@ -2874,10 +2876,6 @@ packages: resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==, tarball: https://registry.npmjs.org/ini/-/ini-2.0.0.tgz} engines: {node: '>=10'} - internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==, tarball: https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz} - engines: {node: '>= 0.4'} - internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==, tarball: https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz} engines: {node: '>= 0.4'} @@ -4060,10 +4058,6 @@ packages: rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==, tarball: https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz} - engines: {node: '>=0.4'} - safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==, tarball: https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz} engines: {node: '>=0.4'} @@ -5974,12 +5968,12 @@ snapshots: '@types/node': 18.11.9 optional: true - '@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 7.9.0 - '@typescript-eslint/types': 7.9.0 - '@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.9.0 + '@typescript-eslint/scope-manager': 7.11.0 + '@typescript-eslint/types': 7.11.0 + '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.11.0 debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 optionalDependencies: @@ -5987,17 +5981,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.9.0': + '@typescript-eslint/scope-manager@7.11.0': dependencies: - '@typescript-eslint/types': 7.9.0 - '@typescript-eslint/visitor-keys': 7.9.0 + '@typescript-eslint/types': 7.11.0 + '@typescript-eslint/visitor-keys': 7.11.0 - '@typescript-eslint/types@7.9.0': {} + '@typescript-eslint/types@7.11.0': {} - '@typescript-eslint/typescript-estree@7.9.0(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@7.11.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 7.9.0 - '@typescript-eslint/visitor-keys': 7.9.0 + '@typescript-eslint/types': 7.11.0 + '@typescript-eslint/visitor-keys': 7.11.0 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -6009,9 +6003,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@7.9.0': + '@typescript-eslint/visitor-keys@7.11.0': dependencies: - '@typescript-eslint/types': 7.9.0 + '@typescript-eslint/types': 7.11.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -6214,17 +6208,17 @@ snapshots: array.prototype.flatmap@1.3.2: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 array.prototype.toreversed@1.1.2: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 - es-shim-unscopables: 1.0.0 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 array.prototype.tosorted@1.1.3: dependencies: @@ -6237,10 +6231,10 @@ snapshots: arraybuffer.prototype.slice@1.0.2: dependencies: array-buffer-byte-length: 1.0.0 - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 + es-abstract: 1.23.3 + get-intrinsic: 1.2.4 is-array-buffer: 3.0.2 is-shared-array-buffer: 1.0.2 @@ -6754,7 +6748,7 @@ snapshots: dependencies: get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.2 define-data-property@1.1.4: dependencies: @@ -6880,19 +6874,19 @@ snapshots: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.2 available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 + call-bind: 1.0.7 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.4 get-symbol-description: 1.0.0 globalthis: 1.0.3 gopd: 1.0.1 has: 1.0.3 - has-property-descriptors: 1.0.0 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - internal-slot: 1.0.5 + internal-slot: 1.0.7 is-array-buffer: 3.0.2 is-callable: 1.2.7 is-negative-zero: 2.0.2 @@ -6903,9 +6897,9 @@ snapshots: is-weakref: 1.0.2 object-inspect: 1.12.3 object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 safe-regex-test: 1.0.0 string.prototype.trim: 1.2.8 string.prototype.trimend: 1.0.7 @@ -7005,12 +6999,6 @@ snapshots: dependencies: es-errors: 1.3.0 - es-set-tostringtag@2.0.1: - dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 - has-tostringtag: 1.0.0 - es-set-tostringtag@2.0.3: dependencies: get-intrinsic: 1.2.4 @@ -7097,13 +7085,13 @@ snapshots: dependencies: '@next/eslint-plugin-next': 14.2.3 '@rushstack/eslint-patch': 1.4.0 - '@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.28.1)(eslint@8.57.0) - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.5.2)(eslint@8.57.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.5.2)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.57.0) - eslint-plugin-react: 7.34.1(eslint@8.57.0) + eslint-plugin-react: 7.34.2(eslint@8.57.0) eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.57.0) optionalDependencies: typescript: 5.4.5 @@ -7133,7 +7121,7 @@ snapshots: debug: 4.3.4(supports-color@8.1.1) enhanced-resolve: 5.14.1 eslint: 8.57.0 - eslint-plugin-import: 2.28.1(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.5.2)(eslint@8.57.0) + eslint-plugin-import: 2.28.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.5.2)(eslint@8.57.0) get-tsconfig: 4.3.0 globby: 13.1.3 is-core-module: 2.13.0 @@ -7142,18 +7130,18 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.2(eslint-plugin-import@2.28.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.2(eslint-plugin-import@2.28.1)(eslint@8.57.0))(eslint@8.57.0): dependencies: debug: 3.2.7(supports-color@5.5.0) optionalDependencies: - '@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.5.2(eslint-plugin-import@2.28.1)(eslint@8.57.0) transitivePeerDependencies: - supports-color - eslint-plugin-import@2.28.1(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.5.2)(eslint@8.57.0): + eslint-plugin-import@2.28.1(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-typescript@3.5.2)(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.3 @@ -7163,7 +7151,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.2(eslint-plugin-import@2.28.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.5.2(eslint-plugin-import@2.28.1)(eslint@8.57.0))(eslint@8.57.0) has: 1.0.3 is-core-module: 2.13.0 is-glob: 4.0.3 @@ -7174,7 +7162,7 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.14.2 optionalDependencies: - '@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.4.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -7204,7 +7192,7 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-react@7.34.1(eslint@8.57.0): + eslint-plugin-react@7.34.2(eslint@8.57.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -7548,7 +7536,7 @@ snapshots: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 @@ -7562,8 +7550,8 @@ snapshots: get-symbol-description@1.0.0: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 get-symbol-description@1.0.2: dependencies: @@ -7792,17 +7780,11 @@ snapshots: ini@2.0.0: {} - internal-slot@1.0.5: - dependencies: - get-intrinsic: 1.2.1 - has: 1.0.3 - side-channel: 1.0.4 - internal-slot@1.0.7: dependencies: es-errors: 1.3.0 hasown: 2.0.2 - side-channel: 1.0.4 + side-channel: 1.0.6 is-arguments@1.1.1: dependencies: @@ -7824,7 +7806,7 @@ snapshots: is-async-function@2.0.0: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-bigint@1.0.4: dependencies: @@ -7836,7 +7818,7 @@ snapshots: is-boolean-object@1.1.2: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 has-tostringtag: 1.0.0 is-callable@1.2.7: {} @@ -7871,7 +7853,7 @@ snapshots: is-generator-function@1.0.10: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-glob@4.0.3: dependencies: @@ -7925,7 +7907,7 @@ snapshots: is-string@1.0.7: dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-subdir@1.2.0: dependencies: @@ -7955,8 +7937,8 @@ snapshots: is-weakset@2.0.2: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 is-windows@1.0.2: {} @@ -7980,7 +7962,7 @@ snapshots: get-intrinsic: 1.2.4 has-symbols: 1.0.3 reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 + set-function-name: 2.0.2 jackspeak@2.3.6: dependencies: @@ -8085,7 +8067,7 @@ snapshots: jsx-ast-utils@3.3.3: dependencies: array-includes: 3.1.8 - object.assign: 4.1.4 + object.assign: 4.1.5 kind-of@6.0.3: {} @@ -9085,13 +9067,6 @@ snapshots: dependencies: tslib: 2.4.1 - safe-array-concat@1.0.1: - dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - has-symbols: 1.0.3 - isarray: 2.0.5 - safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 @@ -9103,8 +9078,8 @@ snapshots: safe-regex-test@1.0.0: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 is-regex: 1.1.4 safe-regex-test@1.0.3: @@ -9156,7 +9131,7 @@ snapshots: dependencies: define-data-property: 1.1.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.2 set-function-name@2.0.2: dependencies: @@ -9298,7 +9273,7 @@ snapshots: stop-iteration-iterator@1.0.0: dependencies: - internal-slot: 1.0.5 + internal-slot: 1.0.7 stream-combiner@0.0.4: dependencies: @@ -9341,9 +9316,9 @@ snapshots: string.prototype.trim@1.2.8: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.23.3 string.prototype.trim@1.2.9: dependencies: @@ -9354,9 +9329,9 @@ snapshots: string.prototype.trimend@1.0.7: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.23.3 string.prototype.trimend@1.0.8: dependencies: @@ -9366,9 +9341,9 @@ snapshots: string.prototype.trimstart@1.0.7: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.23.3 string.prototype.trimstart@1.0.8: dependencies: @@ -9722,8 +9697,8 @@ snapshots: typed-array-buffer@1.0.0: dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 is-typed-array: 1.1.12 typed-array-buffer@1.0.2: @@ -9734,9 +9709,9 @@ snapshots: typed-array-byte-length@1.0.0: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 + has-proto: 1.0.3 is-typed-array: 1.1.12 typed-array-byte-length@1.0.1: @@ -9750,9 +9725,9 @@ snapshots: typed-array-byte-offset@1.0.0: dependencies: available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 + has-proto: 1.0.3 is-typed-array: 1.1.12 typed-array-byte-offset@1.0.2: @@ -9766,7 +9741,7 @@ snapshots: typed-array-length@1.0.4: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 for-each: 0.3.3 is-typed-array: 1.1.12 @@ -9973,7 +9948,7 @@ snapshots: which-builtin-type@1.1.3: dependencies: function.prototype.name: 1.1.6 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.0.5 is-finalizationregistry: 1.0.2 @@ -9983,7 +9958,7 @@ snapshots: isarray: 2.0.5 which-boxed-primitive: 1.0.2 which-collection: 1.0.1 - which-typed-array: 1.1.11 + which-typed-array: 1.1.15 which-collection@1.0.1: dependencies: