From a0770238d45f831c50a7c6b7bafa2e45a749d49f Mon Sep 17 00:00:00 2001 From: jnsdls Date: Fri, 13 Dec 2024 06:12:14 +0000 Subject: [PATCH 01/49] allow passing `null` to service scope, do not check domains on `secretKey` auth (#5728) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixes: DASH-621 --- ## PR-Codex overview This PR focuses on enhancing the authorization process by introducing an `authMethod` property and allowing `null` service scopes, while modifying billing statuses and service configuration types. ### Detailed summary - Added `authMethod` to `teamAndProjectResponse`. - Allowed passing `null` to `serviceScope` in `CoreServiceConfig`. - Changed `billingStatus` from `"noCustomer"` to `"noPayment"`. - Updated `TeamAndProjectResponse` to include `authMethod` type. - Adjusted authorization logic for `secretKey` and null service scopes. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/chatty-llamas-drum.md | 5 +++++ packages/service-utils/src/core/api.ts | 9 ++++++--- packages/service-utils/src/core/authorize/client.ts | 9 ++++++++- packages/service-utils/src/core/authorize/index.ts | 1 + .../service-utils/src/core/authorize/service.ts | 13 ++++++++++++- packages/service-utils/src/mocks.ts | 3 ++- 6 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 .changeset/chatty-llamas-drum.md diff --git a/.changeset/chatty-llamas-drum.md b/.changeset/chatty-llamas-drum.md new file mode 100644 index 00000000000..f856bb43a55 --- /dev/null +++ b/.changeset/chatty-llamas-drum.md @@ -0,0 +1,5 @@ +--- +"@thirdweb-dev/service-utils": patch +--- + +allow passing `null` to service scope, do not validate domains/bundleids when using secretKey auth method diff --git a/packages/service-utils/src/core/api.ts b/packages/service-utils/src/core/api.ts index 23380a102d3..3ea16ab7fcb 100644 --- a/packages/service-utils/src/core/api.ts +++ b/packages/service-utils/src/core/api.ts @@ -16,7 +16,9 @@ export type PolicyResult = { export type CoreServiceConfig = { apiUrl: string; - serviceScope: ServiceName; + // if EXPLICITLY set to null, service will not be checked for authorization + // this is meant for services that are not possible to be turned off by users, such as "social" and "analytics" + serviceScope: ServiceName | null; serviceApiKey: string; serviceAction?: string; useWalletAuth?: boolean; @@ -24,6 +26,7 @@ export type CoreServiceConfig = { }; export type TeamAndProjectResponse = { + authMethod: "secretKey" | "publishableKey" | "jwt" | "teamId"; team: TeamResponse; project?: ProjectResponse | null; }; @@ -42,11 +45,11 @@ export type TeamResponse = { name: string; slug: string; image: string | null; - billingPlan: string; + billingPlan: "free" | "starter" | "growth" | "pro"; createdAt: Date; updatedAt: Date | null; billingEmail: string | null; - billingStatus: string | null; + billingStatus: "noPayment" | "validPayment" | "invalidPayment" | null; growthTrialEligible: boolean | null; enabledScopes: ServiceName[]; }; diff --git a/packages/service-utils/src/core/authorize/client.ts b/packages/service-utils/src/core/authorize/client.ts index 5e497f38fa5..0419a0aba42 100644 --- a/packages/service-utils/src/core/authorize/client.ts +++ b/packages/service-utils/src/core/authorize/client.ts @@ -12,18 +12,25 @@ export function authorizeClient( teamAndProjectResponse: TeamAndProjectResponse, ): AuthorizationResult { const { origin, bundleId } = authOptions; - const { team, project } = teamAndProjectResponse; + const { team, project, authMethod } = teamAndProjectResponse; const authResult: AuthorizationResult = { authorized: true, team, project, + authMethod, }; + // if there's no project, we'll return the authResult (JWT or teamId auth) if (!project) { return authResult; } + if (authMethod === "secretKey") { + // if the auth was done using secretKey, we do not want to enforce domains or bundleIds + return authResult; + } + // check for public restrictions if (project.domains.includes("*")) { return authResult; diff --git a/packages/service-utils/src/core/authorize/index.ts b/packages/service-utils/src/core/authorize/index.ts index 8758b7ae478..f8b6fd68958 100644 --- a/packages/service-utils/src/core/authorize/index.ts +++ b/packages/service-utils/src/core/authorize/index.ts @@ -148,5 +148,6 @@ export async function authorize( authorized: true, team: teamAndProjectResponse.team, project: teamAndProjectResponse.project, + authMethod: clientAuth.authMethod, }; } diff --git a/packages/service-utils/src/core/authorize/service.ts b/packages/service-utils/src/core/authorize/service.ts index 91cf4ddd457..6f2265e70a2 100644 --- a/packages/service-utils/src/core/authorize/service.ts +++ b/packages/service-utils/src/core/authorize/service.ts @@ -5,7 +5,16 @@ export function authorizeService( teamAndProjectResponse: TeamAndProjectResponse, serviceConfig: CoreServiceConfig, ): AuthorizationResult { - const { team, project } = teamAndProjectResponse; + const { team, project, authMethod } = teamAndProjectResponse; + + if (serviceConfig.serviceScope === null) { + // if explicitly set to null, we do not want to check for service level authorization + return { + authorized: true, + team, + authMethod, + }; + } if (!team.enabledScopes.includes(serviceConfig.serviceScope)) { return { @@ -21,6 +30,7 @@ export function authorizeService( return { authorized: true, team, + authMethod, }; } @@ -57,5 +67,6 @@ export function authorizeService( authorized: true, team, project, + authMethod, }; } diff --git a/packages/service-utils/src/mocks.ts b/packages/service-utils/src/mocks.ts index 31c1ec5a01e..5902dacd5aa 100644 --- a/packages/service-utils/src/mocks.ts +++ b/packages/service-utils/src/mocks.ts @@ -43,7 +43,7 @@ export const validTeamResponse: TeamResponse = { updatedAt: new Date("2024-06-01"), billingPlan: "free", billingEmail: "test@example.com", - billingStatus: "noCustomer", + billingStatus: "noPayment", growthTrialEligible: false, enabledScopes: ["storage", "rpc", "bundler"], }; @@ -51,6 +51,7 @@ export const validTeamResponse: TeamResponse = { export const validTeamAndProjectResponse: TeamAndProjectResponse = { team: validTeamResponse, project: validProjectResponse, + authMethod: "publishableKey", }; export const validServiceConfig: CoreServiceConfig = { From 67f63c3a4883bcfa4896de92e8ee5c568cdb6aeb Mon Sep 17 00:00:00 2001 From: jnsdls Date: Fri, 13 Dec 2024 06:18:35 +0000 Subject: [PATCH 02/49] remove client ID derivation from secret key (#5729) fixes: DASH-621 we explicitly *DO NOT* want to derive from secretKey anymore - this would otherwise block multi secret key per project --- packages/service-utils/src/cf-worker/index.ts | 12 -------- packages/service-utils/src/core/api.ts | 1 - packages/service-utils/src/node/index.ts | 29 ------------------- 3 files changed, 42 deletions(-) diff --git a/packages/service-utils/src/cf-worker/index.ts b/packages/service-utils/src/cf-worker/index.ts index f3f20f87ad3..0702d149b0b 100644 --- a/packages/service-utils/src/cf-worker/index.ts +++ b/packages/service-utils/src/cf-worker/index.ts @@ -129,14 +129,6 @@ export async function extractAuthorizationData( if (secretKey) { // hash the secret key secretKeyHash = await hashSecretKey(secretKey); - // derive the client id from the secret key hash - const derivedClientId = deriveClientIdFromSecretKeyHash(secretKeyHash); - // if we already have a client id passed in we need to make sure they match - if (clientId && clientId !== derivedClientId) { - throw new Error("KEY_CONFLICT"); - } - // otherwise set the client id to the derived client id (client id based off of secret key) - clientId = derivedClientId; } let jwt: string | null = null; @@ -170,10 +162,6 @@ export async function hashSecretKey(secretKey: string) { ); } -export function deriveClientIdFromSecretKeyHash(secretKeyHash: string) { - return secretKeyHash.slice(0, 32); -} - function bufferToHex(buffer: ArrayBuffer) { return [...new Uint8Array(buffer)] .map((x) => x.toString(16).padStart(2, "0")) diff --git a/packages/service-utils/src/core/api.ts b/packages/service-utils/src/core/api.ts index 3ea16ab7fcb..3544b325e10 100644 --- a/packages/service-utils/src/core/api.ts +++ b/packages/service-utils/src/core/api.ts @@ -22,7 +22,6 @@ export type CoreServiceConfig = { serviceApiKey: string; serviceAction?: string; useWalletAuth?: boolean; - includeUsage?: boolean; }; export type TeamAndProjectResponse = { diff --git a/packages/service-utils/src/node/index.ts b/packages/service-utils/src/node/index.ts index ec181da4939..07f858401e8 100644 --- a/packages/service-utils/src/node/index.ts +++ b/packages/service-utils/src/node/index.ts @@ -21,23 +21,6 @@ export type AuthInput = CoreAuthInput & { req: IncomingMessage | Request; }; -/** - * - * @param {AuthInput['req']} authInput.req - The incoming request from which information will be pulled from. These information includes (checks are in order and terminates on first match): - * - clientId: Checks header `x-client-id`, search param `clientId` - * - bundleId: Checks header `x-bundle-id`, search param `bundleId` - * - secretKey: Checks header `x-secret-key` - * - origin (the requesting domain): Checks header `origin`, `referer` - * @param {AuthInput['clientId']} authInput.clientId - Overrides any clientId found on the `req` object - * @param {AuthInput['targetAddress']} authInput.targetAddress - Only used in smart wallets to determine if the request is authorized to interact with the target address. - * @param {NodeServiceConfig['enforceAuth']} serviceConfig - Always `true` unless you need to turn auth off. Tells the service whether or not to enforce auth. - * @param {NodeServiceConfig['apiUrl']} serviceConfig.apiUrl - The url of the api server to fetch information for verification. `https://api.thirdweb.com` for production and `https://api.staging.thirdweb.com` for staging - * @param {NodeServiceConfig['serviceApiKey']} serviceConfig.serviceApiKey - secret key to be used authenticate the caller of the api-server. Check the api-server's env variable for the keys. - * @param {NodeServiceConfig['serviceScope']} serviceConfig.serviceScope - The service that we are requesting authorization for. E.g. `relayer`, `rpc`, 'bundler', 'storage' etc. - * @param {NodeServiceConfig['serviceAction']} serviceConfig.serviceAction - Needed when the `serviceScope` is `storage`. Can be either `read` or `write`. - * @param {NodeServiceConfig['useWalletAuth']} serviceConfig.useWalletAuth - If true it pings the `wallet/me` or else, `account/me`. You most likely can leave this as false. - * @returns {AuthorizationResult} authorizationResult - contains if the request is authorized, and information about the account if it is authorized. Otherwise, it contains the error message and status code. - */ export async function authorizeNode( authInput: AuthInput, serviceConfig: NodeServiceConfig, @@ -150,14 +133,6 @@ export function extractAuthorizationData( if (secretKey) { // hash the secret key secretKeyHash = hashSecretKey(secretKey); - // derive the client id from the secret key hash - const derivedClientId = deriveClientIdFromSecretKeyHash(secretKeyHash); - // if we already have a client id passed in we need to make sure they match - if (clientId && clientId !== derivedClientId) { - throw new Error("KEY_CONFLICT"); - } - // otherwise set the client id to the derived client id (client id based off of secret key) - clientId = derivedClientId; } let jwt: null | string = null; @@ -195,10 +170,6 @@ export function hashSecretKey(secretKey: string) { return createHash("sha256").update(secretKey).digest("hex"); } -export function deriveClientIdFromSecretKeyHash(secretKeyHash: string) { - return secretKeyHash.slice(0, 32); -} - export function logHttpRequest({ clientId, req, From 29d32b8409af21e4652f815c179b2d73ca045ef2 Mon Sep 17 00:00:00 2001 From: Jonas Daniels Date: Thu, 12 Dec 2024 22:43:45 -0800 Subject: [PATCH 03/49] Version Packages (#5727) Co-authored-by: github-actions[bot] --- .changeset/chatty-llamas-drum.md | 5 ----- .changeset/tidy-squids-end.md | 5 ----- packages/service-utils/CHANGELOG.md | 8 ++++++++ packages/service-utils/package.json | 2 +- 4 files changed, 9 insertions(+), 11 deletions(-) delete mode 100644 .changeset/chatty-llamas-drum.md delete mode 100644 .changeset/tidy-squids-end.md diff --git a/.changeset/chatty-llamas-drum.md b/.changeset/chatty-llamas-drum.md deleted file mode 100644 index f856bb43a55..00000000000 --- a/.changeset/chatty-llamas-drum.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@thirdweb-dev/service-utils": patch ---- - -allow passing `null` to service scope, do not validate domains/bundleids when using secretKey auth method diff --git a/.changeset/tidy-squids-end.md b/.changeset/tidy-squids-end.md deleted file mode 100644 index 4f00a5d5b94..00000000000 --- a/.changeset/tidy-squids-end.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@thirdweb-dev/service-utils": patch ---- - -Accept Request in authorizeNode diff --git a/packages/service-utils/CHANGELOG.md b/packages/service-utils/CHANGELOG.md index 4f952bb4a89..b5c64f04e62 100644 --- a/packages/service-utils/CHANGELOG.md +++ b/packages/service-utils/CHANGELOG.md @@ -1,5 +1,13 @@ # @thirdweb-dev/service-utils +## 0.5.1 + +### Patch Changes + +- [#5728](https://github.com/thirdweb-dev/js/pull/5728) [`a077023`](https://github.com/thirdweb-dev/js/commit/a0770238d45f831c50a7c6b7bafa2e45a749d49f) Thanks [@jnsdls](https://github.com/jnsdls)! - allow passing `null` to service scope, do not validate domains/bundleids when using secretKey auth method + +- [#5724](https://github.com/thirdweb-dev/js/pull/5724) [`90a16da`](https://github.com/thirdweb-dev/js/commit/90a16da48ef2d0f1f31fc4753f42b347d782da2c) Thanks [@gregfromstl](https://github.com/gregfromstl)! - Accept Request in authorizeNode + ## 0.5.0 ### Minor Changes diff --git a/packages/service-utils/package.json b/packages/service-utils/package.json index 322ced66d92..d8e7719c158 100644 --- a/packages/service-utils/package.json +++ b/packages/service-utils/package.json @@ -1,6 +1,6 @@ { "name": "@thirdweb-dev/service-utils", - "version": "0.5.0", + "version": "0.5.1", "type": "module", "main": "dist/cjs/index.js", "module": "dist/esm/index.js", From 77c8d0eff0e9946efca630bd87d47b810127ee47 Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Fri, 13 Dec 2024 20:25:13 +1300 Subject: [PATCH 04/49] test: Add wallet connection hook tests (#5689) --- .../wallets/useAddConnectedWallet.test.tsx | 52 +++++++++ .../core/hooks/wallets/useConnect.test.tsx | 105 ++++++++++++++++++ .../hooks/wallets/useSetActiveWallet.test.tsx | 53 +++++++++ packages/thirdweb/test/src/mocks/storage.ts | 25 ++++- 4 files changed, 231 insertions(+), 4 deletions(-) create mode 100644 packages/thirdweb/src/react/core/hooks/wallets/useAddConnectedWallet.test.tsx create mode 100644 packages/thirdweb/src/react/core/hooks/wallets/useConnect.test.tsx create mode 100644 packages/thirdweb/src/react/core/hooks/wallets/useSetActiveWallet.test.tsx diff --git a/packages/thirdweb/src/react/core/hooks/wallets/useAddConnectedWallet.test.tsx b/packages/thirdweb/src/react/core/hooks/wallets/useAddConnectedWallet.test.tsx new file mode 100644 index 00000000000..7b439d2c402 --- /dev/null +++ b/packages/thirdweb/src/react/core/hooks/wallets/useAddConnectedWallet.test.tsx @@ -0,0 +1,52 @@ +import { renderHook } from "@testing-library/react"; +import type { ReactNode } from "react"; +import { describe, expect, it } from "vitest"; +import { MockStorage } from "../../../../../test/src/mocks/storage.js"; +import { TEST_CLIENT } from "../../../../../test/src/test-clients.js"; +import { TEST_ACCOUNT_A } from "../../../../../test/src/test-wallets.js"; +import { createWalletAdapter } from "../../../../adapters/wallet-adapter.js"; +import { ethereum } from "../../../../chains/chain-definitions/ethereum.js"; +import { createConnectionManager } from "../../../../wallets/manager/index.js"; +import { ConnectionManagerCtx } from "../../providers/connection-manager.js"; +import { useAddConnectedWallet } from "./useAddConnectedWallet.js"; + +describe("useAddConnectedWallet", () => { + // Mock the connection manager + const mockStorage = new MockStorage(); + const manager = createConnectionManager(mockStorage); + + // Create a wrapper component with the mocked context + const wrapper = ({ children }: { children: ReactNode }) => { + return ( + + {children} + + ); + }; + + const wallet = createWalletAdapter({ + adaptedAccount: TEST_ACCOUNT_A, + client: TEST_CLIENT, + chain: ethereum, + onDisconnect: () => {}, + switchChain: () => {}, + }); + + it("should add a wallet to the connection manager", async () => { + // Render the hook + const { result } = renderHook(() => useAddConnectedWallet(), { wrapper }); + result.current(wallet); + + expect(manager.connectedWallets.getValue()).toHaveLength(1); + expect(manager.connectedWallets.getValue()[0]).toEqual(wallet); + // add connected wallet should not set the active wallet + expect(manager.activeWalletStore.getValue()).toBeUndefined(); + }); + + it("should throw an error when used outside of ThirdwebProvider", () => { + // Render the hook without a provider + expect(() => { + renderHook(() => useAddConnectedWallet()); + }).toThrow("useAddConnectedWallet must be used within "); + }); +}); diff --git a/packages/thirdweb/src/react/core/hooks/wallets/useConnect.test.tsx b/packages/thirdweb/src/react/core/hooks/wallets/useConnect.test.tsx new file mode 100644 index 00000000000..eac4407c0ee --- /dev/null +++ b/packages/thirdweb/src/react/core/hooks/wallets/useConnect.test.tsx @@ -0,0 +1,105 @@ +import { renderHook } from "@testing-library/react"; +import type { ReactNode } from "react"; +import { beforeEach, describe, expect, it } from "vitest"; +import { MockStorage } from "../../../../../test/src/mocks/storage.js"; +import { TEST_CLIENT } from "../../../../../test/src/test-clients.js"; +import { TEST_ACCOUNT_A } from "../../../../../test/src/test-wallets.js"; +import { createWalletAdapter } from "../../../../adapters/wallet-adapter.js"; +import { ethereum } from "../../../../chains/chain-definitions/ethereum.js"; +import { + type ConnectionManager, + createConnectionManager, +} from "../../../../wallets/manager/index.js"; +import { ConnectionManagerCtx } from "../../providers/connection-manager.js"; +import { useActiveWalletConnectionStatus } from "./useActiveWalletConnectionStatus.js"; +import { useConnect } from "./useConnect.js"; + +describe("useAddConnectedWallet", () => { + // Mock the connection manager + const mockStorage = new MockStorage(); + let manager: ConnectionManager; + + // Create a wrapper component with the mocked context + const wrapper = ({ children }: { children: ReactNode }) => { + return ( + + {children} + + ); + }; + + const wallet = createWalletAdapter({ + adaptedAccount: TEST_ACCOUNT_A, + client: TEST_CLIENT, + chain: ethereum, + onDisconnect: () => {}, + switchChain: () => {}, + }); + + beforeEach(() => { + manager = createConnectionManager(mockStorage); + }); + + it("should connect a wallet to the connection manager", async () => { + const { result: statusResult } = renderHook( + () => useActiveWalletConnectionStatus(), + { + wrapper, + }, + ); + const { result } = renderHook(() => useConnect(), { wrapper }); + expect(statusResult.current).toEqual("disconnected"); + await result.current.connect(async () => wallet); + expect(statusResult.current).toEqual("connected"); + + // should add to connected wallets + expect(manager.connectedWallets.getValue()).toHaveLength(1); + expect(manager.connectedWallets.getValue()[0]).toEqual(wallet); + // should set the active wallet + expect(manager.activeWalletStore.getValue()).toEqual(wallet); + }); + + it("should handle a function that returns a wallet", async () => { + const { result: statusResult } = renderHook( + () => useActiveWalletConnectionStatus(), + { + wrapper, + }, + ); + const { result } = renderHook(() => useConnect(), { wrapper }); + expect(statusResult.current).toEqual("disconnected"); + await result.current.connect(async () => wallet); + expect(statusResult.current).toEqual("connected"); + + // should add to connected wallets + expect(manager.connectedWallets.getValue()).toHaveLength(1); + expect(manager.connectedWallets.getValue()[0]).toEqual(wallet); + // should set the active wallet + expect(manager.activeWalletStore.getValue()).toEqual(wallet); + }); + + it("should handle an error when connecting a wallet", async () => { + const { result: statusResult } = renderHook( + () => useActiveWalletConnectionStatus(), + { + wrapper, + }, + ); + expect(statusResult.current).toEqual("disconnected"); + const { result } = renderHook(() => useConnect(), { wrapper }); + await result.current.connect(async () => { + throw new Error("test"); + }); + + expect(statusResult.current).toEqual("disconnected"); + // should set the active wallet + expect(manager.activeWalletStore.getValue()).toEqual(undefined); + }); + + it("should throw an error when used outside of ThirdwebProvider", () => { + // Render the hook without a provider + expect(() => { + renderHook(() => useConnect()); + }).toThrow("useConnect must be used within "); + }); +}); diff --git a/packages/thirdweb/src/react/core/hooks/wallets/useSetActiveWallet.test.tsx b/packages/thirdweb/src/react/core/hooks/wallets/useSetActiveWallet.test.tsx new file mode 100644 index 00000000000..bef745a8d2a --- /dev/null +++ b/packages/thirdweb/src/react/core/hooks/wallets/useSetActiveWallet.test.tsx @@ -0,0 +1,53 @@ +import { renderHook } from "@testing-library/react"; +import type { ReactNode } from "react"; +import { describe, expect, it } from "vitest"; +import { MockStorage } from "../../../../../test/src/mocks/storage.js"; +import { TEST_CLIENT } from "../../../../../test/src/test-clients.js"; +import { TEST_ACCOUNT_A } from "../../../../../test/src/test-wallets.js"; +import { createWalletAdapter } from "../../../../adapters/wallet-adapter.js"; +import { ethereum } from "../../../../chains/chain-definitions/ethereum.js"; +import { createConnectionManager } from "../../../../wallets/manager/index.js"; +import { ConnectionManagerCtx } from "../../providers/connection-manager.js"; +import { useSetActiveWallet } from "./useSetActiveWallet.js"; + +describe("useAddConnectedWallet", () => { + // Mock the connection manager + const mockStorage = new MockStorage(); + const manager = createConnectionManager(mockStorage); + + // Create a wrapper component with the mocked context + const wrapper = ({ children }: { children: ReactNode }) => { + return ( + + {children} + + ); + }; + + const wallet = createWalletAdapter({ + adaptedAccount: TEST_ACCOUNT_A, + client: TEST_CLIENT, + chain: ethereum, + onDisconnect: () => {}, + switchChain: () => {}, + }); + + it("should add a wallet to the connection manager", async () => { + // Render the hook + const { result } = renderHook(() => useSetActiveWallet(), { wrapper }); + result.current(wallet); + + // should add to connected wallets + expect(manager.connectedWallets.getValue()).toHaveLength(1); + expect(manager.connectedWallets.getValue()[0]).toEqual(wallet); + // should set the active wallet + expect(manager.activeWalletStore.getValue()).toEqual(wallet); + }); + + it("should throw an error when used outside of ThirdwebProvider", () => { + // Render the hook without a provider + expect(() => { + renderHook(() => useSetActiveWallet()); + }).toThrow("useSetActiveWallet must be used within "); + }); +}); diff --git a/packages/thirdweb/test/src/mocks/storage.ts b/packages/thirdweb/test/src/mocks/storage.ts index eecf647b761..35b1ebec24c 100644 --- a/packages/thirdweb/test/src/mocks/storage.ts +++ b/packages/thirdweb/test/src/mocks/storage.ts @@ -1,5 +1,6 @@ import { http, HttpResponse } from "msw"; import { getThirdwebDomains } from "../../../src/utils/domains.js"; +import type { AsyncStorage } from "../../../src/utils/storage/AsyncStorage.js"; export const handlers = [ http.post( @@ -7,11 +8,11 @@ export const handlers = [ async ({ request }) => { console.log("MSW handler hit for IPFS upload"); const formData = await request.formData(); - const files = formData.getAll('file'); + const files = formData.getAll("file"); const fileNames = files.map((file: any) => file.name); - + const mockIpfsHash = "QmTest1234567890TestHash"; - + if (fileNames.length === 1 && fileNames[0] === "file.txt") { return HttpResponse.json({ IpfsHash: mockIpfsHash }); } else { @@ -20,7 +21,7 @@ export const handlers = [ files: fileNames.reduce((acc, fileName) => { acc[fileName] = { cid: mockIpfsHash }; return acc; - }, {}) + }, {}), }); } }, @@ -40,3 +41,19 @@ export const handlers = [ }); }), ]; + +export class MockStorage implements AsyncStorage { + private storage: Map = new Map(); + + getItem(key: string): Promise { + return Promise.resolve(this.storage.get(key) ?? null); + } + setItem(key: string, value: string): Promise { + this.storage.set(key, value); + return Promise.resolve(); + } + removeItem(key: string): Promise { + this.storage.delete(key); + return Promise.resolve(); + } +} From 8761fe6102d215933b0e585f68dd753daeb83e68 Mon Sep 17 00:00:00 2001 From: kumaryash90 Date: Fri, 13 Dec 2024 09:16:09 +0000 Subject: [PATCH 05/49] Process deploy param ref only when non-empty (#5730) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PROT-935 --- ## PR-Codex overview This PR focuses on enhancing the handling of `implementationConstructorParams` and `initializeParams` by adding null checks to ensure that they are defined before processing. This improves the robustness of the code. ### Detailed summary - Changed `processedImplParams` and `processedInitializeParams` from constants to `undefined` initially. - Added checks to confirm that `implementationConstructorParams` and `initializeParams` are defined before processing. - Retained the logic for processing parameters using `processRefDeployments`. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../extensions/prebuilts/deploy-published.ts | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/packages/thirdweb/src/extensions/prebuilts/deploy-published.ts b/packages/thirdweb/src/extensions/prebuilts/deploy-published.ts index fbdb48aefbd..ce0e0f662ff 100644 --- a/packages/thirdweb/src/extensions/prebuilts/deploy-published.ts +++ b/packages/thirdweb/src/extensions/prebuilts/deploy-published.ts @@ -150,28 +150,35 @@ export async function deployContractfromDeployMetadata( salt, } = options; - const processedImplParams: Record = {}; - for (const key in implementationConstructorParams) { - processedImplParams[key] = await processRefDeployments({ - client, - account, - chain, - paramValue: implementationConstructorParams[key] as - | string - | ImplementationConstructorParam, - }); + let processedImplParams: Record | undefined; + let processedInitializeParams: Record | undefined; + + if (implementationConstructorParams) { + processedImplParams = {}; + for (const key in implementationConstructorParams) { + processedImplParams[key] = await processRefDeployments({ + client, + account, + chain, + paramValue: implementationConstructorParams[key] as + | string + | ImplementationConstructorParam, + }); + } } - const processedInitializeParams: Record = {}; - for (const key in initializeParams) { - processedInitializeParams[key] = await processRefDeployments({ - client, - account, - chain, - paramValue: initializeParams[key] as - | string - | ImplementationConstructorParam, - }); + if (initializeParams) { + processedInitializeParams = {}; + for (const key in initializeParams) { + processedInitializeParams[key] = await processRefDeployments({ + client, + account, + chain, + paramValue: initializeParams[key] as + | string + | ImplementationConstructorParam, + }); + } } switch (deployMetadata?.deployType) { From 498a26ebbce091fd433c54f797f2ae7b8a6421df Mon Sep 17 00:00:00 2001 From: kien-ngo Date: Fri, 13 Dec 2024 16:14:41 +0000 Subject: [PATCH 06/49] [Playground] Chain components (#5678) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR introduces new `Chain` components to enhance the user interface for blockchain applications, allowing for the display of chain icons and names. It includes new pages and components that integrate these features into the existing playground web application. ### Detailed summary - Added a new `Chain` entry in `navLinks.ts`. - Created a new page in `page.tsx` for `Chain` components with metadata. - Integrated `ThirdwebProvider`, `APIHeader`, `ChainIconBasic`, and `ChainNameBasic` components. - Implemented `ChainIconBasic` and `ChainNameBasic` components in `chain-examples.tsx` to showcase chain icons and names. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../src/app/connect/ui/chain/page.tsx | 44 +++++++++++ .../src/app/connect/ui/token/page.tsx | 1 - apps/playground-web/src/app/navLinks.ts | 4 + .../components/headless-ui/chain-examples.tsx | 78 +++++++++++++++++++ .../src/react/web/ui/prebuilt/Chain/icon.tsx | 2 +- 5 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 apps/playground-web/src/app/connect/ui/chain/page.tsx create mode 100644 apps/playground-web/src/components/headless-ui/chain-examples.tsx diff --git a/apps/playground-web/src/app/connect/ui/chain/page.tsx b/apps/playground-web/src/app/connect/ui/chain/page.tsx new file mode 100644 index 00000000000..1956ff07554 --- /dev/null +++ b/apps/playground-web/src/app/connect/ui/chain/page.tsx @@ -0,0 +1,44 @@ +import { APIHeader } from "@/components/blocks/APIHeader"; +import { + ChainIconBasic, + ChainNameBasic, +} from "@/components/headless-ui/chain-examples"; +import ThirdwebProvider from "@/components/thirdweb-provider"; +import { metadataBase } from "@/lib/constants"; +import type { Metadata } from "next"; + +export const metadata: Metadata = { + metadataBase, + title: "Chain Components", + description: + "Enhance your applications with our Chain components, featuring a collection of chain icons, names, and symbols. These customizable components simplify the integration of blockchain information, allowing developers to easily display and manage multiple chains in their user interfaces.", +}; + +export default function Page() { + return ( + +
+ + Enhance your applications with our Chain components, featuring a + collection of chain icons, names, and symbols. These customizable + components simplify the integration of blockchain information, + allowing developers to easily display and manage multiple chains + in their user interfaces. + + } + docsLink="https://portal.thirdweb.com/react/v5/components/onchain#chains" + heroLink="/headless-ui-header.png" + /> +
+ +
+
+ +
+
+
+ ); +} diff --git a/apps/playground-web/src/app/connect/ui/token/page.tsx b/apps/playground-web/src/app/connect/ui/token/page.tsx index 83469d373f4..4dc116d41d5 100644 --- a/apps/playground-web/src/app/connect/ui/token/page.tsx +++ b/apps/playground-web/src/app/connect/ui/token/page.tsx @@ -1,5 +1,4 @@ import { APIHeader } from "@/components/blocks/APIHeader"; -import {} from "@/components/headless-ui/nft-examples"; import { TokenCard, TokenImageBasic, diff --git a/apps/playground-web/src/app/navLinks.ts b/apps/playground-web/src/app/navLinks.ts index 92adb1be81b..69b11575838 100644 --- a/apps/playground-web/src/app/navLinks.ts +++ b/apps/playground-web/src/app/navLinks.ts @@ -127,6 +127,10 @@ export const navLinks: SidebarLink[] = [ name: "Token", href: "/connect/ui/token", }, + { + name: "Chain", + href: "/connect/ui/chain", + }, ], }, ]; diff --git a/apps/playground-web/src/components/headless-ui/chain-examples.tsx b/apps/playground-web/src/components/headless-ui/chain-examples.tsx new file mode 100644 index 00000000000..e191ddf99ae --- /dev/null +++ b/apps/playground-web/src/components/headless-ui/chain-examples.tsx @@ -0,0 +1,78 @@ +"use client"; + +import { THIRDWEB_CLIENT } from "@/lib/client"; +import { avalanche } from "thirdweb/chains"; +import { ChainIcon, ChainName, ChainProvider } from "thirdweb/react"; +import { CodeExample } from "../code/code-example"; + +export function ChainIconBasic() { + return ( + <> +
+

+ ChainIcon +

+

+ Show the native icon of a network +

+
+ + + Loading...} + /> + + } + code={`import { ChainProvider, ChainIcon } from "thirdweb/react"; + +function App() { + return ( + + Loading...} + /> + + ) +}`} + lang="tsx" + /> + + ); +} + +export function ChainNameBasic() { + return ( + <> +
+

+ ChainName +

+

Show the name of the chain

+
+ + + Loading...} /> + + } + code={`import { ChainProvider, ChainName } from "thirdweb/react"; + +function App() { + return ( + + Loading...} /> + + ) +}`} + lang="tsx" + /> + + ); +} diff --git a/packages/thirdweb/src/react/web/ui/prebuilt/Chain/icon.tsx b/packages/thirdweb/src/react/web/ui/prebuilt/Chain/icon.tsx index b90e4b2485c..2ddc4c55239 100644 --- a/packages/thirdweb/src/react/web/ui/prebuilt/Chain/icon.tsx +++ b/packages/thirdweb/src/react/web/ui/prebuilt/Chain/icon.tsx @@ -143,7 +143,7 @@ export function ChainIcon({ } // Check if the chain object already has "icon" if (chain.icon?.url) { - return chain.icon.url; + return resolveScheme({ uri: chain.icon.url, client }); } const possibleUrl = await getChainMetadata(chain).then( (data) => data.icon?.url, From 2db85824f02ee2e39c910e83d411f2905b4f4c01 Mon Sep 17 00:00:00 2001 From: MananTank Date: Fri, 13 Dec 2024 16:59:01 +0000 Subject: [PATCH 07/49] [DASH-610] Fix useActiveWalletChain missing chain overrides added in dashboard (#5731) Fixes: DASH-610 --- .../react/components/connect-wallet/index.tsx | 9 ++----- apps/dashboard/src/app/providers.tsx | 27 +++++++++++++++++-- apps/dashboard/src/hooks/chains/allChains.ts | 9 ++++++- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx index 846d15f23a8..684abf256b1 100644 --- a/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx +++ b/apps/dashboard/src/@3rdweb-sdk/react/components/connect-wallet/index.tsx @@ -48,12 +48,7 @@ export const CustomConnectWallet = (props: { // chains const favChainIdsQuery = useFavoriteChainIds(); const recentChainIds = useStore(recentlyUsedChainIdsStore); - const { idToChain, allChains } = useAllChainsData(); - - const allChainsWithMetadata = useMemo( - () => allChains.map(mapV4ChainToV5Chain), - [allChains], - ); + const { idToChain, allChainsV5 } = useAllChainsData(); const recentlyUsedChainsWithMetadata = useMemo( () => @@ -170,7 +165,7 @@ export const CustomConnectWallet = (props: { detailsButton={{ className: props.detailsButtonClassName, }} - chains={allChainsWithMetadata} + chains={allChainsV5} detailsModal={{ networkSelector: { sections: chainSections, diff --git a/apps/dashboard/src/app/providers.tsx b/apps/dashboard/src/app/providers.tsx index 39680b3d838..8a5e1cf908a 100644 --- a/apps/dashboard/src/app/providers.tsx +++ b/apps/dashboard/src/app/providers.tsx @@ -2,11 +2,16 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { ThemeProvider } from "next-themes"; -import { useMemo } from "react"; -import { ThirdwebProvider, useActiveAccount } from "thirdweb/react"; +import { useEffect, useMemo } from "react"; +import { + ThirdwebProvider, + useActiveAccount, + useConnectionManager, +} from "thirdweb/react"; import { CustomConnectWallet } from "../@3rdweb-sdk/react/components/connect-wallet"; import { PosthogIdentifier } from "../components/wallets/PosthogIdentifier"; import { isSanctionedAddress } from "../data/eth-sanctioned-addresses"; +import { useAllChainsData } from "../hooks/chains/allChains"; import { SyncChainStores } from "../stores/chainStores"; import { TWAutoConnect } from "./components/autoconnect"; @@ -17,6 +22,7 @@ export function AppRouterProviders(props: { children: React.ReactNode }) { + { + if (allChainsV5.length > 0) { + connectionManager.defineChains(allChainsV5); + } + }, [allChainsV5, connectionManager]); + + return null; +} + const SanctionedAddressesChecker = ({ children, }: { diff --git a/apps/dashboard/src/hooks/chains/allChains.ts b/apps/dashboard/src/hooks/chains/allChains.ts index 2f2def68005..b68db380936 100644 --- a/apps/dashboard/src/hooks/chains/allChains.ts +++ b/apps/dashboard/src/hooks/chains/allChains.ts @@ -4,7 +4,8 @@ import { isProd } from "@/constants/env"; import { createStore, useStore } from "@/lib/reactive"; import { useQuery } from "@tanstack/react-query"; import { useEffect } from "react"; -import type { ChainMetadata } from "thirdweb/chains"; +import type { Chain, ChainMetadata } from "thirdweb/chains"; +import { mapV4ChainToV5Chain } from "../../contexts/map-chains"; import { type StoredChain, chainOverridesStore, @@ -12,6 +13,7 @@ import { type AllChainsStore = { allChains: StoredChain[]; + allChainsV5: Chain[]; idToChain: Map; nameToChain: Map; slugToChain: Map; @@ -20,6 +22,7 @@ type AllChainsStore = { function createAllChainsStore() { const store = createStore({ allChains: [], + allChainsV5: [], idToChain: new Map(), nameToChain: new Map(), slugToChain: new Map(), @@ -47,6 +50,7 @@ function createAllChainsStore() { // but don't ignore if chainOverrides is empty! const allChains: StoredChain[] = []; + const allChainsV5: Chain[] = []; const idToChain: Map = new Map(); const nameToChain: Map = new Map(); const slugToChain: Map = new Map(); @@ -71,6 +75,8 @@ function createAllChainsStore() { chainOverrides.find((x) => x.chainId === _chain.chainId) || _chain; allChains.push(chain); + // eslint-disable-next-line no-restricted-syntax + allChainsV5.push(mapV4ChainToV5Chain(chain)); idToChain.set(chain.chainId, chain); nameToChain.set(chain.name, chain); slugToChain.set(chain.slug, chain); @@ -88,6 +94,7 @@ function createAllChainsStore() { store.setValue({ allChains, + allChainsV5, idToChain: idToChain, nameToChain: nameToChain, slugToChain: slugToChain, From f6c040719c33aa50eb78c2f91a52c3479df0ffce Mon Sep 17 00:00:00 2001 From: MananTank Date: Fri, 13 Dec 2024 17:11:58 +0000 Subject: [PATCH 08/49] [DASH-612] Nebula: Add title and description meta (#5732) DASH-612 --- apps/dashboard/src/app/nebula-app/layout.tsx | 21 ++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 apps/dashboard/src/app/nebula-app/layout.tsx diff --git a/apps/dashboard/src/app/nebula-app/layout.tsx b/apps/dashboard/src/app/nebula-app/layout.tsx new file mode 100644 index 00000000000..77298a40e8a --- /dev/null +++ b/apps/dashboard/src/app/nebula-app/layout.tsx @@ -0,0 +1,21 @@ +import type { Metadata } from "next"; + +const title = + "thirdweb Nebula: The Most powerful AI for interacting with the blockchain"; +const description = + "The most powerful AI for interacting with the blockchain, with real-time access to EVM chains and their data"; + +export const metadata: Metadata = { + title, + description, + openGraph: { + title, + description, + }, +}; + +export default function Layout(props: { + children: React.ReactNode; +}) { + return props.children; +} From be6433dcf263c8982786f96fd43e6b16524284e8 Mon Sep 17 00:00:00 2001 From: Will Cory Date: Fri, 13 Dec 2024 09:42:05 -0800 Subject: [PATCH 09/49] docs: Add more context on guest mode (#5733) Signed-off-by: Will Cory --- .../src/app/connect/wallet/sign-in-methods/guest/page.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/portal/src/app/connect/wallet/sign-in-methods/guest/page.mdx b/apps/portal/src/app/connect/wallet/sign-in-methods/guest/page.mdx index 1d4bc5b49ea..f1b122926a8 100644 --- a/apps/portal/src/app/connect/wallet/sign-in-methods/guest/page.mdx +++ b/apps/portal/src/app/connect/wallet/sign-in-methods/guest/page.mdx @@ -20,7 +20,7 @@ export const metadata = createMetadata({ # Guest Mode -Sometimes users want to get started using your app without signing in. You can now give users an in-memory "guest account" that can then be converted into a standard account by linking another auth method. +Sometimes users want to get started using your app without signing in. You can now give users an in-memory "guest account" that can then be converted into a standard account by linking another auth method. An example is if you want to wait til a user tries to make a transaction before forcing them to onboard. A guest mode account is not persisted durably and only exists in memory until linked to an Auth method. ## Logging in with Guest Mode From 80b54a937ccb896cc5953bad44f480cebd0e4348 Mon Sep 17 00:00:00 2001 From: jnsdls Date: Fri, 13 Dec 2024 18:14:08 +0000 Subject: [PATCH 10/49] use resolved ENS name if available (#5734) fixes: DASH-572 --- apps/dashboard/next-env.d.ts | 2 +- apps/dashboard/package.json | 2 +- .../profile/[addressOrEns]/ProfileUI.tsx | 2 +- .../components/profile-header.tsx | 32 ++++++++++++------- .../profile/[addressOrEns]/page.tsx | 2 +- 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/apps/dashboard/next-env.d.ts b/apps/dashboard/next-env.d.ts index 725dd6f2451..3cd7048ed94 100644 --- a/apps/dashboard/next-env.d.ts +++ b/apps/dashboard/next-env.d.ts @@ -3,4 +3,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. +// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/apps/dashboard/package.json b/apps/dashboard/package.json index 4862744e870..ca3d5ef9f6f 100644 --- a/apps/dashboard/package.json +++ b/apps/dashboard/package.json @@ -4,7 +4,7 @@ "private": true, "scripts": { "preinstall": "npx only-allow pnpm", - "dev": "next dev", + "dev": "next dev --turbo", "build": "NODE_OPTIONS=--max-old-space-size=6144 next build", "start": "next start", "format": "biome format ./src --write", diff --git a/apps/dashboard/src/app/(dashboard)/profile/[addressOrEns]/ProfileUI.tsx b/apps/dashboard/src/app/(dashboard)/profile/[addressOrEns]/ProfileUI.tsx index 3c54a8870b5..e76688122de 100644 --- a/apps/dashboard/src/app/(dashboard)/profile/[addressOrEns]/ProfileUI.tsx +++ b/apps/dashboard/src/app/(dashboard)/profile/[addressOrEns]/ProfileUI.tsx @@ -14,7 +14,7 @@ export function ProfileUI(props: { return (
- +
diff --git a/apps/dashboard/src/app/(dashboard)/profile/[addressOrEns]/components/profile-header.tsx b/apps/dashboard/src/app/(dashboard)/profile/[addressOrEns]/components/profile-header.tsx index 36e6d6d2b6b..fb2dd1103c7 100644 --- a/apps/dashboard/src/app/(dashboard)/profile/[addressOrEns]/components/profile-header.tsx +++ b/apps/dashboard/src/app/(dashboard)/profile/[addressOrEns]/components/profile-header.tsx @@ -12,7 +12,10 @@ import { } from "thirdweb/react"; import { shortenIfAddress } from "utils/usedapp-external"; -export function ProfileHeader(props: { profileAddress: string }) { +export function ProfileHeader(props: { + profileAddress: string; + ensName: string | undefined; +}) { const client = useThirdwebClient(); return ( @@ -27,17 +30,22 @@ export function ProfileHeader(props: { profileAddress: string }) { />

- - shortenIfAddress(replaceDeployerAddress(addr)) - } - /> - } - loadingComponent={} - formatFn={(name) => replaceDeployerAddress(name)} - /> + {/* if we already have an ensName just use it */} + {props.ensName ? ( + props.ensName + ) : ( + + shortenIfAddress(replaceDeployerAddress(addr)) + } + /> + } + loadingComponent={} + formatFn={(name) => replaceDeployerAddress(name)} + /> + )}

diff --git a/apps/dashboard/src/app/(dashboard)/profile/[addressOrEns]/page.tsx b/apps/dashboard/src/app/(dashboard)/profile/[addressOrEns]/page.tsx index f9c5ef1a707..173bdc95b93 100644 --- a/apps/dashboard/src/app/(dashboard)/profile/[addressOrEns]/page.tsx +++ b/apps/dashboard/src/app/(dashboard)/profile/[addressOrEns]/page.tsx @@ -21,7 +21,7 @@ export default async function Page(props: PageProps) { return ( ); From 22bc557090cfd507a5fd7cbb95d10ea215ff5b7a Mon Sep 17 00:00:00 2001 From: greg Date: Fri, 13 Dec 2024 10:31:00 -0800 Subject: [PATCH 11/49] [CI] Chore: Update allowed teams (#5735) --- .github/workflows/issue.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/issue.yml b/.github/workflows/issue.yml index 9a141a6c280..661d5e2ab4d 100644 --- a/.github/workflows/issue.yml +++ b/.github/workflows/issue.yml @@ -5,7 +5,7 @@ on: types: [opened, edited] env: - VALID_ISSUE_PREFIXES: "CNCT|DASH|PROT|INSIGHT" + VALID_ISSUE_PREFIXES: "CNCT|DASH|PROT|INSIGHT|ENGINE|CS|DES|BIL|DEVX|SOLU|NEB" jobs: linear: From 9b58a086b63b1943cabc67ec42730273211a0af8 Mon Sep 17 00:00:00 2001 From: MananTank Date: Fri, 13 Dec 2024 20:08:49 +0000 Subject: [PATCH 12/49] [Dashboard] Nebula - Update context filters + Add OG image (#5736) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved DASH-615 --- ## PR-Codex overview This PR primarily focuses on enhancing the context filter functionality within the application by introducing support for `walletAddresses`, updating related types, and modifying components to accommodate these changes. ### Detailed summary - Added `walletAddresses` to various types and API parameters. - Updated `SessionContextFilter` to include `wallet_addresses`. - Modified `ChatPageContent` to handle and display `walletAddresses`. - Enhanced `ContextFiltersButton` to show wallet address badges. - Updated form handling to include validation for `walletAddresses`. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../src/app/nebula-app/(app)/api/chat.ts | 1 + .../src/app/nebula-app/(app)/api/session.ts | 2 + .../src/app/nebula-app/(app)/api/types.ts | 16 +-- .../(app)/components/ChatPageContent.tsx | 46 ++++++- .../components/ContextFilters.stories.tsx | 58 ++++++++- .../(app)/components/ContextFilters.tsx | 120 +++++++++++++----- .../src/app/nebula-app/opengraph-image.png | Bin 0 -> 33810 bytes 7 files changed, 195 insertions(+), 48 deletions(-) create mode 100644 apps/dashboard/src/app/nebula-app/opengraph-image.png diff --git a/apps/dashboard/src/app/nebula-app/(app)/api/chat.ts b/apps/dashboard/src/app/nebula-app/(app)/api/chat.ts index 1135e87c3f9..262103605e9 100644 --- a/apps/dashboard/src/app/nebula-app/(app)/api/chat.ts +++ b/apps/dashboard/src/app/nebula-app/(app)/api/chat.ts @@ -7,6 +7,7 @@ import type { ExecuteConfig } from "./types"; export type ContextFilters = { chainIds?: string[]; contractAddresses?: string[]; + walletAddresses?: string[]; }; export async function promptNebula(params: { diff --git a/apps/dashboard/src/app/nebula-app/(app)/api/session.ts b/apps/dashboard/src/app/nebula-app/(app)/api/session.ts index c4cadb128ee..12052c24810 100644 --- a/apps/dashboard/src/app/nebula-app/(app)/api/session.ts +++ b/apps/dashboard/src/app/nebula-app/(app)/api/session.ts @@ -27,6 +27,7 @@ export async function createSession(params: { body.context_filter = { chain_ids: params.contextFilters.chainIds || [], contract_addresses: params.contextFilters.contractAddresses || [], + wallet_addresses: params.contextFilters.walletAddresses || [], }; } @@ -62,6 +63,7 @@ export async function updateSession(params: { body.context_filter = { chain_ids: params.contextFilters.chainIds || [], contract_addresses: params.contextFilters.contractAddresses || [], + wallet_addresses: params.contextFilters.walletAddresses || [], }; } diff --git a/apps/dashboard/src/app/nebula-app/(app)/api/types.ts b/apps/dashboard/src/app/nebula-app/(app)/api/types.ts index 638d40ecb01..315d1ffbd37 100644 --- a/apps/dashboard/src/app/nebula-app/(app)/api/types.ts +++ b/apps/dashboard/src/app/nebula-app/(app)/api/types.ts @@ -19,6 +19,12 @@ type ClientConfig = { export type ExecuteConfig = EngineConfig | SessionKeyConfig | ClientConfig; +type SessionContextFilter = { + chain_ids: string[] | null; + contract_addresses: string[] | null; + wallet_addresses: string[] | null; +}; + export type SessionInfo = { id: string; account_id: string; @@ -37,10 +43,7 @@ export type SessionInfo = { archived_at: string | null; title: string | null; is_public: boolean | null; - context_filter: { - chain_ids: string[]; - contract_addresses: string[]; - } | null; + context_filter: SessionContextFilter | null; // memory // action: array | null; <-- type of this is not available on https://nebula-api.thirdweb-dev.com/docs#/default/get_session_session__session_id__get }; @@ -50,10 +53,7 @@ export type UpdatedSessionInfo = { modal_name: string; account_id: string; execute_config: ExecuteConfig | null; - context_filter: { - chain_ids: string[]; - contract_addresses: string[]; - } | null; + context_filter: SessionContextFilter | null; }; export type DeletedSessionInfo = { diff --git a/apps/dashboard/src/app/nebula-app/(app)/components/ChatPageContent.tsx b/apps/dashboard/src/app/nebula-app/(app)/components/ChatPageContent.tsx index 92dc3e64aef..498c7eddb09 100644 --- a/apps/dashboard/src/app/nebula-app/(app)/components/ChatPageContent.tsx +++ b/apps/dashboard/src/app/nebula-app/(app)/components/ChatPageContent.tsx @@ -5,7 +5,8 @@ import { ScrollShadow } from "@/components/ui/ScrollShadow/ScrollShadow"; import { useThirdwebClient } from "@/constants/thirdweb.client"; import type { Account } from "@3rdweb-sdk/react/hooks/useApi"; import { useMutation } from "@tanstack/react-query"; -import { useEffect, useRef, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; +import { useActiveAccount } from "thirdweb/react"; import { type ContextFilters, promptNebula } from "../api/chat"; import { createSession, updateSession } from "../api/session"; import type { ExecuteConfig, SessionInfo } from "../api/types"; @@ -22,6 +23,7 @@ export function ChatPageContent(props: { type: "landing" | "new-chat"; account: Account; }) { + const address = useActiveAccount()?.address; const client = useThirdwebClient(); const [userHasSubmittedMessage, setUserHasSubmittedMessage] = useState(false); const [messages, setMessages] = useState>(() => { @@ -36,17 +38,47 @@ export function ChatPageContent(props: { }); const [_config, setConfig] = useState(); - const [contextFilters, setContextFilters] = useState< + const [hasUserUpdatedContextFilters, setHasUserUpdatedContextFilters] = + useState(false); + + const [_contextFilters, _setContextFilters] = useState< ContextFilters | undefined >(() => { const contextFilterRes = props.session?.context_filter; - if (contextFilterRes) { + const value: ContextFilters = { + chainIds: contextFilterRes?.chain_ids || undefined, + contractAddresses: contextFilterRes?.contract_addresses || undefined, + walletAddresses: contextFilterRes?.wallet_addresses || undefined, + }; + + return value; + }); + + function setContextFilters(filters: ContextFilters | undefined) { + _setContextFilters(filters); + setHasUserUpdatedContextFilters(true); + } + + const isNewSession = !props.session; + + // if this is a new session, user has not manually updated context filters + // and no wallet address is set in context filters, add the current wallet address + const contextFilters = useMemo(() => { + if ( + isNewSession && + !hasUserUpdatedContextFilters && + address && + (!_contextFilters?.walletAddresses || + _contextFilters.walletAddresses.length === 0) + ) { return { - chainIds: contextFilterRes.chain_ids, - contractAddresses: contextFilterRes.contract_addresses, + ..._contextFilters, + walletAddresses: [address], }; } - }); + + return _contextFilters; + }, [_contextFilters, address, isNewSession, hasUserUpdatedContextFilters]); const config = _config || { mode: "client", @@ -293,7 +325,7 @@ export function ChatPageContent(props: { return (
-
+
+
+ + + + + + + + + + +
diff --git a/apps/dashboard/src/app/nebula-app/(app)/components/ContextFilters.tsx b/apps/dashboard/src/app/nebula-app/(app)/components/ContextFilters.tsx index 29af4ac1184..d2f9852fbfe 100644 --- a/apps/dashboard/src/app/nebula-app/(app)/components/ContextFilters.tsx +++ b/apps/dashboard/src/app/nebula-app/(app)/components/ContextFilters.tsx @@ -1,6 +1,7 @@ "use client"; import { Spinner } from "@/components/ui/Spinner/Spinner"; +import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Dialog, @@ -42,14 +43,46 @@ export default function ContextFiltersButton(props: { mutationFn: props.updateContextFilters, }); + const chainIds = props.contextFilters?.chainIds; + const contractAddresses = props.contextFilters?.contractAddresses; + const walletAddresses = props.contextFilters?.walletAddresses; + return ( - @@ -74,6 +107,18 @@ export default function ContextFiltersButton(props: { ); } +const commaSeparateListOfAddresses = z.string().refine( + (s) => { + if (s.trim() === "") { + return true; + } + return s.split(",").every((s) => isAddress(s.trim())); + }, + { + message: "Must be a comma-separated list of valid addresses", + }, +); + const formSchema = z.object({ chainIds: z.string().refine( (s) => { @@ -89,18 +134,8 @@ const formSchema = z.object({ message: "Chain IDs must be a comma-separated list of integers", }, ), - contractAddresses: z.string().refine( - (s) => { - if (s.trim() === "") { - return true; - } - return s.trim().split(",").every(isAddress); - }, - { - message: - "Contract addresses must be a comma-separated list of valid addresses", - }, - ), + contractAddresses: commaSeparateListOfAddresses, + walletAddresses: commaSeparateListOfAddresses, }); function ContextFilterDialogContent(props: { @@ -117,25 +152,31 @@ function ContextFilterDialogContent(props: { contractAddresses: props.contextFilters?.contractAddresses ? props.contextFilters.contractAddresses.join(",") : "", + walletAddresses: props.contextFilters?.walletAddresses + ? props.contextFilters.walletAddresses.join(",") + : "", }, reValidateMode: "onChange", }); function onSubmit(values: z.infer) { - const { chainIds, contractAddresses } = values; - const chainIdsArray = chainIds.trim().split(",").filter(Boolean); + const { chainIds, contractAddresses, walletAddresses } = values; + + const chainIdsArray = chainIds.split(",").filter((id) => id.trim()); + const contractAddressesArray = contractAddresses - .trim() .split(",") - .filter(Boolean); - if (chainIdsArray.length === 0 && contractAddressesArray.length === 0) { - props.updateFilters(undefined); - } else { - props.updateFilters({ - chainIds: chainIdsArray, - contractAddresses: contractAddressesArray, - }); - } + .filter((v) => v.trim()); + + const walletAddressesArray = walletAddresses + .split(",") + .filter((v) => v.trim()); + + props.updateFilters({ + chainIds: chainIdsArray, + contractAddresses: contractAddressesArray, + walletAddresses: walletAddressesArray, + }); } return ( @@ -195,6 +236,27 @@ function ContextFilterDialogContent(props: { )} /> + + ( + + Wallet Addresses + + + + + Comma separated list of wallet addresses + + + + )} + />
diff --git a/apps/dashboard/src/app/nebula-app/opengraph-image.png b/apps/dashboard/src/app/nebula-app/opengraph-image.png new file mode 100644 index 0000000000000000000000000000000000000000..6c632879f474cb0a1641b53fecebb5bf25d95456 GIT binary patch literal 33810 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 literal 0 HcmV?d00001 From 9954b37b015eee01b23022bdd2c9d84db2244500 Mon Sep 17 00:00:00 2001 From: MananTank Date: Fri, 13 Dec 2024 21:10:48 +0000 Subject: [PATCH 13/49] [DASH-624] Add tracking in insight playground (#5737) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved DASH-624 --- ## PR-Codex overview This PR focuses on enhancing the `CodeBlockContainer` and related components to support an `onCopy` callback, allowing for custom actions when code is copied. It also introduces tracking for user interactions within the `BlueprintPlayground` component. ### Detailed summary - Added `onCopy` prop to `CodeBlockContainer`, `RenderCode`, `PlainTextCodeBlock`, and `CodeClient`. - Updated button click handler in `CodeBlockContainer` to call `onCopy` and pass the copied code. - Integrated `useTrack` for tracking user events in `BlueprintPlayground`. - Added tracking for "run", "copy-url", and "copy-response" actions in relevant components. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../components/ui/code/CodeBlockContainer.tsx | 6 +++- .../src/@/components/ui/code/RenderCode.tsx | 2 ++ .../src/@/components/ui/code/code.client.tsx | 4 +++ .../@/components/ui/code/plaintext-code.tsx | 2 ++ .../blueprint-playground.client.tsx | 28 +++++++++++++++++++ 5 files changed, 41 insertions(+), 1 deletion(-) diff --git a/apps/dashboard/src/@/components/ui/code/CodeBlockContainer.tsx b/apps/dashboard/src/@/components/ui/code/CodeBlockContainer.tsx index d927a06cf90..bfc697747f6 100644 --- a/apps/dashboard/src/@/components/ui/code/CodeBlockContainer.tsx +++ b/apps/dashboard/src/@/components/ui/code/CodeBlockContainer.tsx @@ -14,6 +14,7 @@ export function CodeBlockContainer(props: { scrollableContainerClassName?: string; copyButtonClassName?: string; shadowColor?: string; + onCopy?: (code: string) => void; }) { const { hasCopied, onCopy } = useClipboard(props.codeToCopy); @@ -38,7 +39,10 @@ export function CodeBlockContainer(props: { Date: Sat, 14 Dec 2024 10:26:48 +0000 Subject: [PATCH 15/49] [SDK] Headless Wallet components | CNCT-2620 (#5691) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CNCT-2620 --- ## PR-Codex overview This PR introduces new headless components for wallet management in the `thirdweb` library, enhancing user interface options for wallet context, icons, and names. ### Detailed summary - Added `WalletProvider`, `WalletIcon`, and `WalletName` components. - Updated `ChainProvider` to mark it as `@beta`. - Introduced utility functions `getQueryKeys` for both chain and wallet components. - Updated documentation and tests for new wallet components. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .changeset/hip-houses-hear.md | 5 + .../app/react/v5/components/onchain/page.mdx | 23 +++ packages/thirdweb/src/exports/react.ts | 14 ++ .../react/web/ui/prebuilt/Chain/name.test.tsx | 20 ++- .../src/react/web/ui/prebuilt/Chain/name.tsx | 32 ++-- .../react/web/ui/prebuilt/Chain/provider.tsx | 1 + .../web/ui/prebuilt/Wallet/icon.test.tsx | 30 ++++ .../src/react/web/ui/prebuilt/Wallet/icon.tsx | 120 +++++++++++++ .../web/ui/prebuilt/Wallet/name.test.tsx | 55 ++++++ .../src/react/web/ui/prebuilt/Wallet/name.tsx | 164 ++++++++++++++++++ .../web/ui/prebuilt/Wallet/provider.test.tsx | 61 +++++++ .../react/web/ui/prebuilt/Wallet/provider.tsx | 65 +++++++ 12 files changed, 576 insertions(+), 14 deletions(-) create mode 100644 .changeset/hip-houses-hear.md create mode 100644 packages/thirdweb/src/react/web/ui/prebuilt/Wallet/icon.test.tsx create mode 100644 packages/thirdweb/src/react/web/ui/prebuilt/Wallet/icon.tsx create mode 100644 packages/thirdweb/src/react/web/ui/prebuilt/Wallet/name.test.tsx create mode 100644 packages/thirdweb/src/react/web/ui/prebuilt/Wallet/name.tsx create mode 100644 packages/thirdweb/src/react/web/ui/prebuilt/Wallet/provider.test.tsx create mode 100644 packages/thirdweb/src/react/web/ui/prebuilt/Wallet/provider.tsx diff --git a/.changeset/hip-houses-hear.md b/.changeset/hip-houses-hear.md new file mode 100644 index 00000000000..f6b5453b9fb --- /dev/null +++ b/.changeset/hip-houses-hear.md @@ -0,0 +1,5 @@ +--- +"thirdweb": minor +--- + +Add headless components for Wallets: WalletProvider, WalletIcon and WalletName diff --git a/apps/portal/src/app/react/v5/components/onchain/page.mdx b/apps/portal/src/app/react/v5/components/onchain/page.mdx index 17c72de5d27..301490bd514 100644 --- a/apps/portal/src/app/react/v5/components/onchain/page.mdx +++ b/apps/portal/src/app/react/v5/components/onchain/page.mdx @@ -136,4 +136,27 @@ Build your own UI and interact with onchain data using headless components. description="Component to display the name of a chain" /> +### Wallets + + + + + + + diff --git a/packages/thirdweb/src/exports/react.ts b/packages/thirdweb/src/exports/react.ts index 7f1cefba34c..329df064db3 100644 --- a/packages/thirdweb/src/exports/react.ts +++ b/packages/thirdweb/src/exports/react.ts @@ -273,3 +273,17 @@ export { // Utils export { getLastAuthProvider } from "../react/web/utils/storage.js"; + +// Wallet +export { + WalletProvider, + type WalletProviderProps, +} from "../react/web/ui/prebuilt/Wallet/provider.js"; +export { + WalletIcon, + type WalletIconProps, +} from "../react/web/ui/prebuilt/Wallet/icon.js"; +export { + WalletName, + type WalletNameProps, +} from "../react/web/ui/prebuilt/Wallet/name.js"; diff --git a/packages/thirdweb/src/react/web/ui/prebuilt/Chain/name.test.tsx b/packages/thirdweb/src/react/web/ui/prebuilt/Chain/name.test.tsx index 1279dbceb3f..402a36fb614 100644 --- a/packages/thirdweb/src/react/web/ui/prebuilt/Chain/name.test.tsx +++ b/packages/thirdweb/src/react/web/ui/prebuilt/Chain/name.test.tsx @@ -2,7 +2,8 @@ import { describe, expect, it } from "vitest"; import { render, screen, waitFor } from "~test/react-render.js"; import { ethereum } from "../../../../../chains/chain-definitions/ethereum.js"; import { defineChain } from "../../../../../chains/utils.js"; -import { ChainName, fetchChainName } from "./name.js"; +import { getFunctionId } from "../../../../../utils/function-id.js"; +import { ChainName, fetchChainName, getQueryKeys } from "./name.js"; import { ChainProvider } from "./provider.js"; describe.runIf(process.env.TW_SECRET_KEY)("ChainName component", () => { @@ -97,4 +98,21 @@ describe.runIf(process.env.TW_SECRET_KEY)("ChainName component", () => { }); expect(res).toBe("eth_mainnet"); }); + + it("getQueryKeys should work without nameResolver", () => { + expect(getQueryKeys({ chainId: 1 })).toStrictEqual([ + "_internal_chain_name_", + 1, + ]); + }); + + it("getQueryKeys should work WITH nameResolver", () => { + const nameResolver = () => "tw"; + const fnId = getFunctionId(nameResolver); + expect(getQueryKeys({ chainId: 1, nameResolver })).toStrictEqual([ + "_internal_chain_name_", + 1, + { resolver: fnId }, + ]); + }); }); diff --git a/packages/thirdweb/src/react/web/ui/prebuilt/Chain/name.tsx b/packages/thirdweb/src/react/web/ui/prebuilt/Chain/name.tsx index 7cbfa0e6a0f..3cf9c80b83e 100644 --- a/packages/thirdweb/src/react/web/ui/prebuilt/Chain/name.tsx +++ b/packages/thirdweb/src/react/web/ui/prebuilt/Chain/name.tsx @@ -48,7 +48,7 @@ export interface ChainNameProps * name was not fetched succesfully * @example * ```tsx - * Failed to load} * /> * ``` */ @@ -157,18 +157,7 @@ export function ChainName({ }: ChainNameProps) { const { chain } = useChainContext(); const nameQuery = useQuery({ - queryKey: [ - "_internal_chain_name_", - chain.id, - { - resolver: - typeof nameResolver === "string" - ? nameResolver - : typeof nameResolver === "function" - ? getFunctionId(nameResolver) - : undefined, - }, - ] as const, + queryKey: getQueryKeys({ chainId: chain.id, nameResolver }), queryFn: async () => fetchChainName({ chain, nameResolver }), ...queryOptions, }); @@ -205,3 +194,20 @@ export async function fetchChainName(props: { } return getChainMetadata(chain).then((data) => data.name); } + +/** + * @internal Exported for tests + */ +export function getQueryKeys(props: { + chainId: number; + nameResolver?: string | (() => string) | (() => Promise); +}) { + if (typeof props.nameResolver === "function") { + return [ + "_internal_chain_name_", + props.chainId, + { resolver: getFunctionId(props.nameResolver) }, + ] as const; + } + return ["_internal_chain_name_", props.chainId] as const; +} diff --git a/packages/thirdweb/src/react/web/ui/prebuilt/Chain/provider.tsx b/packages/thirdweb/src/react/web/ui/prebuilt/Chain/provider.tsx index 97c21ca52d6..a1079668aa6 100644 --- a/packages/thirdweb/src/react/web/ui/prebuilt/Chain/provider.tsx +++ b/packages/thirdweb/src/react/web/ui/prebuilt/Chain/provider.tsx @@ -48,6 +48,7 @@ const ChainProviderContext = /* @__PURE__ */ createContext< * ``` * @component * @chain + * @beta */ export function ChainProvider( props: React.PropsWithChildren, diff --git a/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/icon.test.tsx b/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/icon.test.tsx new file mode 100644 index 00000000000..b4c7bc66615 --- /dev/null +++ b/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/icon.test.tsx @@ -0,0 +1,30 @@ +import { describe, expect, it } from "vitest"; +import { render, waitFor } from "~test/react-render.js"; +import { WalletIcon, fetchWalletImage } from "./icon.js"; +import { WalletProvider } from "./provider.js"; + +describe("WalletIcon", () => { + it("should fetch wallet image", async () => { + expect(await fetchWalletImage({ id: "io.metamask" })).toBe( + "data:image/webp;base64,UklGRsgFAABXRUJQVlA4ILwFAAAwHgCdASqAAIAAPm0ylEWkIyIXTGzMQAbEoAzQSPDffG8qhx7LpfeDUfnDee/tP6gP2u9Yf0a/7L0/+pc3nivc0JlTXBvMVYW1Wt7JbdRJ1a5UhpH9+sdhAvGug20WzG+wRD+P/7/raQ1NqZ5EfcOwosQsP7NRVflPNArBLCbFJWE3EvTLNOmMfR2f+r+E2y6y1lWanc3n9RtF4lYbcW38t3UG/W2jXng4loXFOy3Vjm/r/1KHwXlpAuhAIzK/XF+ChayRFhBD+lbRrgQ3CSVjdmXw6agYPoMQ+tpjPUN/3qdGcvnN1sKWt57OGozQVSjMu0aA58MPKVWiAP77l9VfptKhZ7in3+r1DqZZQEYqO1p+MENah/WS/QQDvPuew8P0OXfahcjbCg7h4QEEEjDyfoFUbQHdw+meAsydryxVs/Ij+eB619Uj/sMgtwIifIyTieCT/hdsDmpLqGD+vOIArZfzSkordRkngojxVgvWRht84IaCHCs5Dn208UHFmyQE4KCxHef1iLYeAEPxnIAovGHIl7rCjiYE12obAM3ZCnt+RFqcT3q2rorCswc4/8f8TOhCSo63/dszpMkNQonGwtyhAFnm1EKqLPDcy99ggKQL95VYePoHcv8sHOG5zJ7lircX7VPpxkloNVWnlp/drJjQrp0h5BsOnqYn756+wcFw5qapAOnYCKUHujsoSz2BlLs1702rFpvi1iVczo2aO9GN1TaM3zBqMX0NN0YEU8pz/3+xwkK5M5q+Qb4FNJeugjdOp2kcYoOCbyAg/0OyGswYHPwDN/opVaDHWj0FcKzLq43uEjUZMG8t7O6BkoK0FmpYOeTQrinuF5F6W6ENly78daVmGPYTU22R9No5+xr8F2ESYTaJzOR3UoouY15xHrsxhDCukfebOiHljS6jUjF0TWaIAb58k57DZ3gdjkpxnJDyEmCsCOlASNWMn1ay3G8PDriQOdwsL7bgx/jZXN6XZHVx2hst/6Qcljnnn4um8eD1NcP1rTV7HMZzAb/d7ntki9zU1IFl695zPs3YT+h0PS4JuQYLzYoxpmMUQ35sVx/3KkL4Pm/TlvuNpnopM0+l2b/0OS6+5GwJYEMpzM4peYZS3qZkz/kxWNPTLv3UcCguDqpGxZ39l/VQJhSImKPZBa1RWCtSj29VCzCEZlX/eAdAKgZwhMKR4C5osznEbxjfRdHHPxjZwstCwugFa5w/WykOTFGAzk0sLSuvxO9kw/f++0WvG5La11GQaqbDDJ/ks7bcELqEGtvLHiJgxOXW9PqCk5Ap9EYelPTmdhHZgzWxtz4idN+JX+DGyYtJYjtW+Ay4kJ4Hol+Iavfje1f/22S69z1XSZ8OOcrDHKQdO1JlGaTkKQmCg5Tr05Qy9NQSfh67Vpui6OyMu38BnbG+cfWPRx/MjGQITY8w8sb1GUGd5hD9eVqycVtz8yFlYrXYQSBkAxMYgkBaiWe6kk24SoOCgt74nNs3pyTWUERw9ENESB6PyO9HjcsUZWIh97RKlf6thPtqxdlfr9i3McON9zvI7M2TtYcneXhOnqN8V4wqqII2J3DQ6/DZFNj5eNkCp2ijt7UWuKduhEmbZlLahfxD8eqBHAZR/H5rulzc4oVlyXr6qPXf9LCEuDRSDE8VNFY4NuTcaRTZO33RrWmWzbXAwpEKeH/Xf78XMoeynLBSyB+pS6y8Fqh7ExdmnvtW2gW3pwNrLc5lXlZJW8VcBzaSpy1Dmqj6Xll9BS8RyWqNx0O3fY8NJpf1exbNYMWA8juddzn2d9lHypEbiym0ASxI/jgGkbis5fecZ60QtJusJgdC8HAJEh64A9EuOCAnnISc5CElwpsvJTdEZhYv3t7MtLDvHp20lAtylt5l9yxqfCy/sqC6qZ/8+tsTAHzziGF6NKoaD0FVhZ2CER5AonJdBz5sg0rcD7arFe96uzujFDCQAAAA", + ); + }); + + it("should throw error if WalletId is not supported", async () => { + await expect(() => + // @ts-ignore For test + fetchWalletImage({ id: "__undefined__" }), + ).rejects.toThrowError("Wallet with id __undefined__ not found"); + }); + + it("should render an image", async () => { + const { container } = render( + + + , + ); + await waitFor(() => { + expect(container.querySelector("img")).not.toBe(null); + }); + }); +}); diff --git a/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/icon.tsx b/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/icon.tsx new file mode 100644 index 00000000000..90451b13e7c --- /dev/null +++ b/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/icon.tsx @@ -0,0 +1,120 @@ +"use client"; + +import { type UseQueryOptions, useQuery } from "@tanstack/react-query"; +import type { JSX } from "react"; +import { getWalletInfo } from "../../../../../wallets/__generated__/getWalletInfo.js"; +import type { WalletId } from "../../../../../wallets/wallet-types.js"; +import { useWalletContext } from "./provider.js"; + +export interface WalletIconProps + extends Omit, "src"> { + /** + * This component will be shown while the icon of the wallet is being fetched + * If not passed, the component will return `null`. + * + * You can/should pass a loading sign or spinner to this prop. + * @example + * ```tsx + * } /> + * ``` + */ + loadingComponent?: JSX.Element; + /** + * This component will be shown if the icon fails to be retreived + * If not passed, the component will return `null`. + * + * You can/should pass a descriptive text/component to this prop, indicating that the + * icon was not fetched succesfully + * @example + * ```tsx + * Failed to load} + * /> + * ``` + */ + fallbackComponent?: JSX.Element; + /** + * Optional `useQuery` params + */ + queryOptions?: Omit, "queryFn" | "queryKey">; +} + +/** + * This component tries to resolve the icon of a given wallet, then return an image. + * @returns an with the src of the wallet icon + * + * @example + * ### Basic usage + * ```tsx + * import { WalletProvider, WalletIcon } from "thirdweb/react"; + * + * + * + * + * ``` + * + * Result: An component with the src of the icon + * ```html + * + * ``` + * + * ### Show a loading sign while the icon is being loaded + * ```tsx + * } /> + * ``` + * + * ### Fallback to a dummy image if the wallet icon fails to resolve + * ```tsx + * } /> + * ``` + * + * ### Usage with queryOptions + * WalletIcon uses useQuery() from tanstack query internally. + * It allows you to pass a custom queryOptions of your choice for more control of the internal fetching logic + * ```tsx + * + * ``` + * + * @component + * @wallet + * @beta + */ +export function WalletIcon({ + loadingComponent, + fallbackComponent, + queryOptions, + ...restProps +}: WalletIconProps) { + const imageQuery = useWalletIcon({ queryOptions }); + if (imageQuery.isLoading) { + return loadingComponent || null; + } + if (!imageQuery.data) { + return fallbackComponent || null; + } + return {restProps.alt}; +} + +/** + * @internal + */ +function useWalletIcon(props: { + queryOptions?: Omit, "queryFn" | "queryKey">; +}) { + const { id } = useWalletContext(); + const imageQuery = useQuery({ + queryKey: ["walletIcon", id], + queryFn: async () => fetchWalletImage({ id }), + ...props.queryOptions, + }); + return imageQuery; +} + +/** + * @internal Exported for tests only + */ +export async function fetchWalletImage(props: { + id: WalletId; +}) { + const image_src = await getWalletInfo(props.id, true); + return image_src; +} diff --git a/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/name.test.tsx b/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/name.test.tsx new file mode 100644 index 00000000000..c8d50206015 --- /dev/null +++ b/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/name.test.tsx @@ -0,0 +1,55 @@ +import { describe, expect, it } from "vitest"; +import { render, waitFor } from "~test/react-render.js"; +import { getFunctionId } from "../../../../../utils/function-id.js"; +import { WalletName, fetchWalletName, getQueryKeys } from "./name.js"; +import { WalletProvider } from "./provider.js"; + +describe.runIf(process.env.TW_SECRET_KEY)("WalletName", () => { + it("fetchWalletName: should fetch wallet name from id", async () => { + const name = await fetchWalletName({ id: "io.metamask" }); + expect(name).toBe("MetaMask"); + }); + + it("fetchWalletName should throw error if failed to get name", async () => { + // @ts-ignore for test + await expect(() => fetchWalletName({ id: "test___" })).rejects.toThrowError( + "Wallet with id test___ not found", + ); + }); + + it("fetchWalletName should work with formatFn", async () => { + const formatFn = (str: string) => `${str} Wallet`; + expect(await fetchWalletName({ id: "io.metamask", formatFn })).toBe( + "MetaMask Wallet", + ); + }); + + it("getQueryKeys should work without a formatFn", () => { + expect(getQueryKeys({ id: "ai.hacken" })).toStrictEqual([ + "walletName", + "ai.hacken", + ]); + }); + + it("getQueryKeys should work WITH a formatFn", () => { + const fn = (str: string) => `test:${str}`; + const fnId = getFunctionId(fn); + expect(getQueryKeys({ id: "ai.hacken", formatFn: fn })).toStrictEqual([ + "walletName", + "ai.hacken", + { resolver: fnId }, + ]); + }); + + it("should render a span", async () => { + const { container } = render( + + + , + ); + + await waitFor(() => { + expect(container.querySelector("span")).not.toBe(null); + }); + }); +}); diff --git a/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/name.tsx b/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/name.tsx new file mode 100644 index 00000000000..92a8fac34d6 --- /dev/null +++ b/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/name.tsx @@ -0,0 +1,164 @@ +"use client"; + +import { type UseQueryOptions, useQuery } from "@tanstack/react-query"; +import type { JSX } from "react"; +import { getFunctionId } from "../../../../../utils/function-id.js"; +import { getWalletInfo } from "../../../../../wallets/__generated__/getWalletInfo.js"; +import type { WalletId } from "../../../../../wallets/wallet-types.js"; +import { useWalletContext } from "./provider.js"; + +/** + * Props for the WalletName component + * @component + * @wallet + */ +export interface WalletNameProps + extends Omit, "children"> { + /** + * This component will be shown while the name of the wallet name is being fetched + * If not passed, the component will return `null`. + * + * You can/should pass a loading sign or spinner to this prop. + * @example + * ```tsx + * } /> + * ``` + */ + loadingComponent?: JSX.Element; + /** + * This component will be shown if the name fails to be retreived + * If not passed, the component will return `null`. + * + * You can/should pass a descriptive text/component to this prop, indicating that the + * name was not fetched succesfully + * @example + * ```tsx + * Failed to load} + * /> + * ``` + */ + fallbackComponent?: JSX.Element; + /** + * Optional `useQuery` params + */ + queryOptions?: Omit, "queryFn" | "queryKey">; + /** + * A function to format the name's display value + * ```tsx + * doSomething()} /> + * ``` + */ + formatFn?: (str: string) => string; +} + +/** + * This component fetches then shows the name of a wallet. + * It inherits all the attributes of a HTML component, hence you can style it just like how you would style a normal + * + * @example + * ### Basic usage + * ```tsx + * import { WalletProvider, WalletName } from "thirdweb/react"; + * + * + * + * + * ``` + * Result: + * ```html + * MetaMask + * ``` + * + * ### Show a loading sign when the name is being fetched + * ```tsx + * import { WalletProvider, WalletName } from "thirdweb/react"; + * + * + * } /> + * + * ``` + * + * ### Fallback to something when the name fails to resolve + * ```tsx + * + * Failed to load} /> + * + * ``` + * + * ### Custom query options for useQuery + * This component uses `@tanstack-query`'s useQuery internally. + * You can use the `queryOptions` prop for more fine-grained control + * ```tsx + * + * @component + * @beta + * @wallet + */ +export function WalletName({ + loadingComponent, + fallbackComponent, + queryOptions, + formatFn, + ...restProps +}: WalletNameProps) { + const nameQuery = useWalletName({ queryOptions, formatFn }); + if (nameQuery.isLoading) { + return loadingComponent || null; + } + if (!nameQuery.data) { + return fallbackComponent || null; + } + return {nameQuery.data}; +} + +/** + * @internal + */ +function useWalletName(props: { + formatFn?: (str: string) => string; + queryOptions?: Omit, "queryFn" | "queryKey">; +}) { + const { id } = useWalletContext(); + const nameQuery = useQuery({ + queryKey: getQueryKeys({ id, formatFn: props.formatFn }), + queryFn: async () => fetchWalletName({ id, formatFn: props.formatFn }), + ...props.queryOptions, + }); + return nameQuery; +} + +/** + * @internal Exported for tests only + */ +export function getQueryKeys(props: { + id: WalletId; + formatFn?: (str: string) => string; +}) { + if (typeof props.formatFn === "function") { + return [ + "walletName", + props.id, + { resolver: getFunctionId(props.formatFn) }, + ] as const; + } + return ["walletName", props.id] as const; +} + +/** + * @internal Exported for tests only + */ +export async function fetchWalletName(props: { + id: WalletId; + formatFn?: (str: string) => string; +}) { + const info = await getWalletInfo(props.id); + if (typeof props.formatFn === "function") { + return props.formatFn(info.name); + } + return info.name; +} diff --git a/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/provider.test.tsx b/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/provider.test.tsx new file mode 100644 index 00000000000..db97a5ce152 --- /dev/null +++ b/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/provider.test.tsx @@ -0,0 +1,61 @@ +import { type FC, useContext } from "react"; +import { describe, expect, it, vi } from "vitest"; +import { render, renderHook, screen } from "~test/react-render.js"; +import { + WalletProvider, + WalletProviderContext, + useWalletContext, +} from "./provider.js"; + +describe.runIf(process.env.TW_SECRET_KEY)("WalletProvider", () => { + it("useWalletContext should throw an error when used outside of WalletProvider", () => { + const consoleErrorSpy = vi + .spyOn(console, "error") + .mockImplementation(() => {}); + + expect(() => { + renderHook(() => useWalletContext()); + }).toThrow( + "WalletProviderContext not found. Make sure you are using WalletIcon, WalletName, etc. inside a component", + ); + + consoleErrorSpy.mockRestore(); + }); + + it("useWalletContext should return the context value when used within WalletProvider", () => { + const wrapper: FC = ({ children }: React.PropsWithChildren) => ( + {children} + ); + + const { result } = renderHook(() => useWalletContext(), { wrapper }); + + expect(result.current.id).toStrictEqual("io.metamask"); + }); + + it("should render children correctly", () => { + render( + +
Child Component
+
, + ); + + expect(screen.getByText("Child Component")).toBeInTheDocument(); + }); + + it("should provide context values to children", () => { + function WalletConsumer() { + const context = useContext(WalletProviderContext); + if (!context) { + return
No context
; + } + return
{String(context.id)}
; + } + render( + + + , + ); + + expect(screen.getByText("io.metamask")).toBeInTheDocument(); + }); +}); diff --git a/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/provider.tsx b/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/provider.tsx new file mode 100644 index 00000000000..97d91fde1c7 --- /dev/null +++ b/packages/thirdweb/src/react/web/ui/prebuilt/Wallet/provider.tsx @@ -0,0 +1,65 @@ +"use client"; + +import type React from "react"; +import { createContext, useContext } from "react"; +import type { WalletId } from "../../../../../wallets/wallet-types.js"; + +/** + * Props for the WalletProvider component + * @component + * @wallet + */ +export type WalletProviderProps = { + id: WalletId; +}; + +/** + * @internal Exported for tests only + */ +export const WalletProviderContext = /* @__PURE__ */ createContext< + WalletProviderProps | undefined +>(undefined); + +/** +/** + * A React context provider component that supplies Wallet-related data to its child components. + * + * This component serves as a wrapper around the `WalletProviderContext.Provider` and passes + * the provided wallet data down to all of its child components through the context API. + * + * @example + * ### Basic usage + * ```tsx + * import { WalletProvider, WalletIcon, WalletName } from "thirdweb/react"; + * + * + * + * + * + * ``` + * @beta + * @component + * @wallet + */ +export function WalletProvider( + props: React.PropsWithChildren, +) { + return ( + + {props.children} + + ); +} + +/** + * @internal + */ +export function useWalletContext() { + const ctx = useContext(WalletProviderContext); + if (!ctx) { + throw new Error( + "WalletProviderContext not found. Make sure you are using WalletIcon, WalletName, etc. inside a component", + ); + } + return ctx; +} From 2b5080d90177b2a5f72b5c37482a0d32e7091338 Mon Sep 17 00:00:00 2001 From: kien-ngo Date: Sat, 14 Dec 2024 11:27:08 +0000 Subject: [PATCH 16/49] Playground: Examples for Wallet components (#5692) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR introduces a new `Wallet` navigation link and implements a new `Wallet` page with components for displaying wallet icons and names, enhancing the user interface for crypto wallet applications. ### Detailed summary - Added a new navigation link for `Wallet`. - Created `page.tsx` for the `Wallet` section with metadata and layout. - Implemented `APIHeader` for the `Wallet` page. - Added three components: `WalletIconBasic`, `WalletNameBasic`, and `WalletNameFormat` in `wallet-examples.tsx`. - Each component includes a description and code example for usage. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../src/app/connect/ui/wallet/page.tsx | 49 ++++++++ apps/playground-web/src/app/navLinks.ts | 4 + .../headless-ui/wallet-examples.tsx | 109 ++++++++++++++++++ 3 files changed, 162 insertions(+) create mode 100644 apps/playground-web/src/app/connect/ui/wallet/page.tsx create mode 100644 apps/playground-web/src/components/headless-ui/wallet-examples.tsx diff --git a/apps/playground-web/src/app/connect/ui/wallet/page.tsx b/apps/playground-web/src/app/connect/ui/wallet/page.tsx new file mode 100644 index 00000000000..e97a2dd5599 --- /dev/null +++ b/apps/playground-web/src/app/connect/ui/wallet/page.tsx @@ -0,0 +1,49 @@ +import { APIHeader } from "@/components/blocks/APIHeader"; +import { + WalletIconBasic, + WalletNameBasic, + WalletNameFormat, +} from "@/components/headless-ui/wallet-examples"; + +import ThirdwebProvider from "@/components/thirdweb-provider"; +import { metadataBase } from "@/lib/constants"; +import type { Metadata } from "next"; + +export const metadata: Metadata = { + metadataBase, + title: "Wallet Components", + description: + "Boost your crypto wallet applications with our React headless UI components, optimized for digital asset management. These flexible, unstyled elements simplify cryptocurrency operations while granting developers complete control over the user interface design.", +}; + +export default function Page() { + return ( + +
+ + Boost your crypto wallet applications with our React headless UI + components, optimized for digital asset management. These + flexible, unstyled elements simplify cryptocurrency operations + while granting developers complete control over the user interface + design. + + } + docsLink="https://portal.thirdweb.com/react/v5/connecting-wallets/ui-components" + heroLink="/headless-ui-header.png" + /> +
+ +
+
+ +
+
+ +
+
+
+ ); +} diff --git a/apps/playground-web/src/app/navLinks.ts b/apps/playground-web/src/app/navLinks.ts index 69b11575838..241234ffd50 100644 --- a/apps/playground-web/src/app/navLinks.ts +++ b/apps/playground-web/src/app/navLinks.ts @@ -131,6 +131,10 @@ export const navLinks: SidebarLink[] = [ name: "Chain", href: "/connect/ui/chain", }, + { + name: "Wallet", + href: "/connect/ui/wallet", + }, ], }, ]; diff --git a/apps/playground-web/src/components/headless-ui/wallet-examples.tsx b/apps/playground-web/src/components/headless-ui/wallet-examples.tsx new file mode 100644 index 00000000000..c91788eae2d --- /dev/null +++ b/apps/playground-web/src/components/headless-ui/wallet-examples.tsx @@ -0,0 +1,109 @@ +"use client"; + +import { WalletIcon, WalletName, WalletProvider } from "thirdweb/react"; +import { CodeExample } from "../code/code-example"; + +export function WalletIconBasic() { + return ( + <> +
+

+ WalletIcon +

+

+ Show the icon of a crypto wallet +

+
+ + + Loading...
} + /> + + } + code={`import { WalletProvider, WalletIcon } from "thirdweb/react"; + +function App() { + return ( + + Loading...} + /> + + ) +}`} + lang="tsx" + /> + + ); +} + +export function WalletNameBasic() { + return ( + <> +
+

+ WalletName +

+

+ Show the name of a crypto wallet +

+
+ + + Loading...} /> + + } + code={`import { WalletProvider, WalletName } from "thirdweb/react"; + +function App() { + return ( + + Loading...} /> + + ) +}`} + lang="tsx" + /> + + ); +} + +export function WalletNameFormat() { + return ( + <> +
+

+ Transform the wallet name using the formatFn prop. +

+
+ + + `${str} Wallet`} /> + + } + code={`import { WalletProvider, WalletName } from "thirdweb/react"; + +function App() { + return ( + + Loading...} + formatFn={(str: string) => \`\${str} Wallet\`} + /> + + ) +}`} + lang="tsx" + /> + + ); +} From dc1e07b5e47af69d2a35ab426c36cab77da98796 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Sat, 14 Dec 2024 17:38:50 +0000 Subject: [PATCH 17/49] [CI] Chore: Only run actions for contributors (#5739) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR enhances the GitHub workflows for pull requests by adding conditions for author associations and expanding issue types. ### Detailed summary - In `.github/workflows/auto-assign.yml`, added checks to assign authors only if they are `MEMBER`, `OWNER`, or `COLLABORATOR`. - In `.github/workflows/issue.yml`, expanded the `types` to include `ready_for_review`. - Added logic to automatically pass checks for external contributors. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .github/workflows/auto-assign.yml | 6 +++++- .github/workflows/issue.yml | 13 ++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.github/workflows/auto-assign.yml b/.github/workflows/auto-assign.yml index 0c78598d065..8d08b73452e 100644 --- a/.github/workflows/auto-assign.yml +++ b/.github/workflows/auto-assign.yml @@ -2,7 +2,7 @@ name: Auto Author Assign on: pull_request: - types: [ opened, reopened ] + types: [opened, reopened] permissions: pull-requests: write @@ -10,5 +10,9 @@ permissions: jobs: assign-author: runs-on: ubuntu-latest + if: | + github.event.pull_request.author_association == 'MEMBER' || + github.event.pull_request.author_association == 'OWNER' || + github.event.pull_request.author_association == 'COLLABORATOR' steps: - uses: toshimaru/auto-author-assign@v2.1.1 diff --git a/.github/workflows/issue.yml b/.github/workflows/issue.yml index 661d5e2ab4d..3e8dd3623fa 100644 --- a/.github/workflows/issue.yml +++ b/.github/workflows/issue.yml @@ -2,7 +2,7 @@ name: Linked Issue on: pull_request: - types: [opened, edited] + types: [opened, edited, ready_for_review] env: VALID_ISSUE_PREFIXES: "CNCT|DASH|PROT|INSIGHT|ENGINE|CS|DES|BIL|DEVX|SOLU|NEB" @@ -22,6 +22,17 @@ jobs: pull_number: context.issue.number }); + // Check if contributor is external + const isInternalContributor = ['MEMBER', 'OWNER', 'COLLABORATOR'].includes( + context.payload.pull_request.author_association + ); + + // Automatically pass for external contributors + if (!isInternalContributor) { + console.log('External contributor detected - automatically passing check'); + return; + } + const body = pr.data.body || ''; const branchName = pr.data.head.ref; const issueRegex = new RegExp(`(${process.env.VALID_ISSUE_PREFIXES})-\\d+`, 'i'); From f91f6310e9396918d0ffc5217eeb4a44cef0b8c8 Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Sat, 14 Dec 2024 17:43:15 +0000 Subject: [PATCH 18/49] [CI] Feature: Deploy typedoc to permalink (#5740) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## PR-Codex overview This PR introduces a new `TypeDoc` workflow for generating documentation and updates the `parse.mjs` script to process documentation data. It also modifies the `package.json` to include the `typedoc-better-json` dependency and adjusts the `pnpm-lock.yaml` accordingly. ### Detailed summary - Added `TypeDoc` GitHub Actions workflow in `.github/workflows/typedoc.yml`. - Created a new `parse.mjs` script in `packages/thirdweb/scripts` for transforming documentation data. - Updated `package.json` to include `typedoc-better-json` as a dependency. - Adjusted `pnpm-lock.yaml` to reflect changes in dependencies and versions. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .github/workflows/typedoc.yml | 50 ++ packages/thirdweb/package.json | 749 ++++++++++++++-------------- packages/thirdweb/scripts/parse.mjs | 19 + pnpm-lock.yaml | 213 ++++---- 4 files changed, 551 insertions(+), 480 deletions(-) create mode 100644 .github/workflows/typedoc.yml create mode 100644 packages/thirdweb/scripts/parse.mjs diff --git a/.github/workflows/typedoc.yml b/.github/workflows/typedoc.yml new file mode 100644 index 00000000000..9ef79f524fa --- /dev/null +++ b/.github/workflows/typedoc.yml @@ -0,0 +1,50 @@ +name: TypeDoc + +on: + push: + branches: + - main + +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment +concurrency: + group: "typedoc" + cancel-in-progress: true + +jobs: + build: + name: "Generate TypeDoc" + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Install + uses: ./.github/composite-actions/install + + - name: Run TypeDoc + run: pnpm typedoc + + - name: Update Gist + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GIST_TOKEN }} + script: | + const fs = require('fs'); + const content = fs.readFileSync('./packages/thirdweb/typedoc/parsed.json', 'utf8'); + const gistId = '678fe1f331a01270bb002fee660f285d'; + + await github.rest.gists.update({ + gist_id: gistId, + files: { + 'data.json': { + content: content + } + } + }); + + console.log(`Permalink: https://gist.githubusercontent.com/raw/${gistId}/data.json`); diff --git a/packages/thirdweb/package.json b/packages/thirdweb/package.json index acfedf6dfc3..28063925b83 100644 --- a/packages/thirdweb/package.json +++ b/packages/thirdweb/package.json @@ -1,376 +1,377 @@ { - "name": "thirdweb", - "version": "5.78.0", - "repository": { - "type": "git", - "url": "git+https://github.com/thirdweb-dev/js.git#main" - }, - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/thirdweb-dev/js/issues" - }, - "author": "thirdweb eng ", - "type": "module", - "bin": { - "thirdweb": "./dist/esm/cli/bin.js", - "thirdweb-cli": "./dist/esm/cli/bin.js" - }, - "main": "./dist/cjs/exports/thirdweb.js", - "module": "./dist/esm/exports/thirdweb.js", - "types": "./dist/types/exports/thirdweb.d.ts", - "typings": "./dist/types/exports/thirdweb.d.ts", - "exports": { - ".": { - "types": "./dist/types/exports/thirdweb.d.ts", - "import": "./dist/esm/exports/thirdweb.js", - "default": "./dist/cjs/exports/thirdweb.js" - }, - "./adapters/*": { - "types": "./dist/types/exports/adapters/*.d.ts", - "import": "./dist/esm/exports/adapters/*.js", - "default": "./dist/cjs/exports/adapters/*.js" - }, - "./auth": { - "types": "./dist/types/exports/auth.d.ts", - "import": "./dist/esm/exports/auth.js", - "default": "./dist/cjs/exports/auth.js" - }, - "./chains": { - "types": "./dist/types/exports/chains.d.ts", - "import": "./dist/esm/exports/chains.js", - "default": "./dist/cjs/exports/chains.js" - }, - "./contract": { - "types": "./dist/types/exports/contract.d.ts", - "import": "./dist/esm/exports/contract.js", - "default": "./dist/cjs/exports/contract.js" - }, - "./deploys": { - "types": "./dist/types/exports/deploys.d.ts", - "import": "./dist/esm/exports/deploys.js", - "default": "./dist/cjs/exports/deploys.js" - }, - "./event": { - "types": "./dist/types/exports/event.d.ts", - "import": "./dist/esm/exports/event.js", - "default": "./dist/cjs/exports/event.js" - }, - "./extensions/*": { - "types": "./dist/types/exports/extensions/*.d.ts", - "import": "./dist/esm/exports/extensions/*.js", - "default": "./dist/cjs/exports/extensions/*.js" - }, - "./pay": { - "types": "./dist/types/exports/pay.d.ts", - "import": "./dist/esm/exports/pay.js", - "default": "./dist/cjs/exports/pay.js" - }, - "./react": { - "types": "./dist/types/exports/react.d.ts", - "import": "./dist/esm/exports/react.js", - "react-native": "./dist/esm/exports/react.native.js", - "default": "./dist/cjs/exports/react.js" - }, - "./react-native": { - "types": "./dist/types/exports/react-native.d.ts", - "import": "./dist/esm/exports/react-native.js", - "default": "./dist/cjs/exports/react-native.js" - }, - "./rpc": { - "types": "./dist/types/exports/rpc.d.ts", - "import": "./dist/esm/exports/rpc.js", - "default": "./dist/cjs/exports/rpc.js" - }, - "./storage": { - "types": "./dist/types/exports/storage.d.ts", - "import": "./dist/esm/exports/storage.js", - "default": "./dist/cjs/exports/storage.js" - }, - "./transaction": { - "types": "./dist/types/exports/transaction.d.ts", - "import": "./dist/esm/exports/transaction.js", - "default": "./dist/cjs/exports/transaction.js" - }, - "./utils": { - "types": "./dist/types/exports/utils.d.ts", - "import": "./dist/esm/exports/utils.js", - "default": "./dist/cjs/exports/utils.js" - }, - "./wallets": { - "types": "./dist/types/exports/wallets.d.ts", - "import": "./dist/esm/exports/wallets.js", - "react-native": "./dist/esm/exports/wallets.native.js", - "default": "./dist/cjs/exports/wallets.js" - }, - "./wallets/in-app": { - "types": "./dist/types/exports/wallets/in-app.d.ts", - "import": "./dist/esm/exports/wallets/in-app.js", - "react-native": "./dist/esm/exports/wallets/in-app.native.js", - "default": "./dist/cjs/exports/wallets/in-app.js" - }, - "./wallets/*": { - "types": "./dist/types/exports/wallets/*.d.ts", - "import": "./dist/esm/exports/wallets/*.js", - "default": "./dist/cjs/exports/wallets/*.js" - }, - "./modules": { - "types": "./dist/types/exports/modules.d.ts", - "import": "./dist/esm/exports/modules.js", - "default": "./dist/cjs/exports/modules.js" - }, - "./social": { - "types": "./dist/types/exports/social.d.ts", - "import": "./dist/esm/exports/social.js", - "default": "./dist/cjs/exports/social.js" - }, - "./package.json": "./package.json" - }, - "typesVersions": { - "*": { - "adapters/*": [ - "./dist/types/exports/adapters/*.d.ts" - ], - "auth": [ - "./dist/types/exports/auth.d.ts" - ], - "chains": [ - "./dist/types/exports/chains.d.ts" - ], - "contract": [ - "./dist/types/exports/contract.d.ts" - ], - "deploys": [ - "./dist/types/exports/deploys.d.ts" - ], - "event": [ - "./dist/types/exports/event.d.ts" - ], - "extensions/*": [ - "./dist/types/exports/extensions/*.d.ts" - ], - "pay": [ - "./dist/types/exports/pay.d.ts" - ], - "react": [ - "./dist/types/exports/react.d.ts" - ], - "react-native": [ - "./dist/types/exports/react-native.d.ts" - ], - "rpc": [ - "./dist/types/exports/rpc.d.ts" - ], - "storage": [ - "./dist/types/exports/storage.d.ts" - ], - "transaction": [ - "./dist/types/exports/transaction.d.ts" - ], - "utils": [ - "./dist/types/exports/utils.d.ts" - ], - "wallets": [ - "./dist/types/exports/wallets.d.ts" - ], - "wallets/*": [ - "./dist/types/exports/wallets/*.d.ts" - ], - "modules": [ - "./dist/types/exports/modules.d.ts" - ], - "social": [ - "./dist/types/exports/social.d.ts" - ] - } - }, - "browser": { - "crypto": false - }, - "sideEffects": false, - "files": [ - "dist/*", - "src/*", - "!**/*.tsbuildinfo", - "!**/*.test.ts", - "!**/*.test.tsx", - "!**/*.test.ts.snap", - "!**/*.test-d.ts", - "!**/*.bench.ts", - "!tsconfig.build.json" - ], - "dependencies": { - "@coinbase/wallet-sdk": "4.2.4", - "@emotion/react": "11.14.0", - "@emotion/styled": "11.14.0", - "@google/model-viewer": "2.1.1", - "@noble/curves": "1.7.0", - "@noble/hashes": "1.6.1", - "@passwordless-id/webauthn": "^2.1.2", - "@radix-ui/react-dialog": "1.1.2", - "@radix-ui/react-focus-scope": "1.1.0", - "@radix-ui/react-icons": "1.3.2", - "@radix-ui/react-tooltip": "1.1.4", - "@tanstack/react-query": "5.62.7", - "@walletconnect/ethereum-provider": "2.17.2", - "@walletconnect/sign-client": "2.17.2", - "abitype": "1.0.7", - "fuse.js": "7.0.0", - "input-otp": "^1.4.1", - "mipd": "0.0.7", - "ox": "0.4.1", - "uqr": "0.1.2", - "viem": "2.21.54" - }, - "peerDependencies": { - "@aws-sdk/client-lambda": "^3", - "@aws-sdk/credential-providers": "^3", - "@coinbase/wallet-mobile-sdk": "^1", - "@mobile-wallet-protocol/client": "0.1.1", - "@react-native-async-storage/async-storage": "^1 || ^2", - "ethers": "^5 || ^6", - "expo-linking": "^6", - "expo-web-browser": "^13 || ^14", - "react": "^18 || ^19", - "react-native": "*", - "react-native-aes-gcm-crypto": "^0.2", - "react-native-passkey": "^3", - "react-native-quick-crypto": ">=0.7.0-rc.6 || >=0.7", - "react-native-svg": "^15", - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-native": { - "optional": true - }, - "ethers": { - "optional": true - }, - "typescript": { - "optional": true - }, - "react-native-aes-gcm-crypto": { - "optional": true - }, - "expo-linking": { - "optional": true - }, - "expo-web-browser": { - "optional": true - }, - "react-native-quick-crypto": { - "optional": true - }, - "react-native-passkey": { - "optional": true - }, - "react-native-svg": { - "optional": true - }, - "@aws-sdk/client-lambda": { - "optional": true - }, - "@aws-sdk/client-kms": { - "optional": true - }, - "@aws-sdk/credential-providers": { - "optional": true - }, - "@react-native-async-storage/async-storage": { - "optional": true - }, - "@coinbase/wallet-mobile-sdk": { - "optional": true - }, - "@mobile-wallet-protocol/client": { - "optional": true - } - }, - "scripts": { - "bench:compare": "bun run ./benchmarks/run.ts", - "bench": "vitest -c ./test/vitest.config.ts bench", - "format": "biome format ./src --write", - "lint": "knip && biome check ./src && tsc --project ./tsconfig.build.json --module esnext --noEmit", - "fix": "biome check ./src --fix", - "knip": "knip", - "build:generate": "bun scripts/generate/generate.ts", - "build:generate-wallets": "bun scripts/wallets/generate.ts", - "dev": "tsc --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm --watch", - "dev:cjs": "printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json && tsc --noCheck --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false --watch", - "dev:esm": "printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json && tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm --watch", - "build": "pnpm clean && pnpm build:types && pnpm build:cjs && pnpm build:esm", - "build:cjs": "tsc --noCheck --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false && printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json", - "build:esm": "tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json", - "build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", - "clean": "rimraf dist", - "size": "size-limit", - "test:watch": "vitest -c ./test/vitest.config.ts dev", - "test": "vitest run -c ./test/vitest.config.ts --coverage", - "test:cov": "vitest dev -c ./test/vitest.config.ts --coverage", - "test:ui": "vitest dev -c ./test/vitest.config.ts --coverage --ui", - "test:dev": "vitest run -c ./test/vitest.config.ts", - "test:react": "vitest run -c ./test/vitest.config.ts dev --ui src/react", - "typedoc": "bun run scripts/typedoc.mjs", - "update-version": "node scripts/version.mjs", - "storybook": "storybook dev -p 6006", - "build-storybook": "storybook build" - }, - "engines": { - "node": ">=18" - }, - "devDependencies": { - "@aws-sdk/client-kms": "3.709.0", - "@aws-sdk/client-lambda": "3.709.0", - "@aws-sdk/credential-providers": "3.709.0", - "@biomejs/biome": "1.9.4", - "@chromatic-com/storybook": "3.2.2", - "@codspeed/vitest-plugin": "4.0.0", - "@coinbase/wallet-mobile-sdk": "1.1.2", - "@mobile-wallet-protocol/client": "0.1.2", - "@react-native-async-storage/async-storage": "2.1.0", - "@size-limit/preset-big-lib": "11.1.6", - "@storybook/addon-essentials": "8.4.7", - "@storybook/addon-interactions": "8.4.7", - "@storybook/addon-links": "8.4.7", - "@storybook/addon-onboarding": "8.4.7", - "@storybook/react": "8.4.7", - "@storybook/react-vite": "8.4.7", - "@storybook/test": "8.4.7", - "@testing-library/jest-dom": "^6.6.3", - "@testing-library/react": "^16.1.0", - "@testing-library/user-event": "^14.5.2", - "@types/cross-spawn": "^6.0.6", - "@types/react": "19.0.1", - "@viem/anvil": "0.0.10", - "@vitejs/plugin-react": "^4.3.4", - "@vitest/coverage-v8": "2.1.8", - "@vitest/ui": "2.1.8", - "cross-spawn": "7.0.6", - "dotenv-mono": "^1.3.14", - "ethers5": "npm:ethers@5", - "ethers6": "npm:ethers@6", - "expo-linking": "7.0.3", - "expo-web-browser": "14.0.1", - "happy-dom": "15.11.7", - "knip": "5.39.4", - "msw": "2.6.8", - "prettier": "3.3.3", - "react": "19.0.0", - "react-dom": "19.0.0", - "react-native": "0.76.5", - "react-native-aes-gcm-crypto": "0.2.2", - "react-native-passkey": "3.0.0", - "react-native-quick-crypto": "0.7.8", - "react-native-svg": "15.10.1", - "rimraf": "6.0.1", - "sharp": "^0.33.5", - "size-limit": "11.1.6", - "storybook": "8.4.7", - "typedoc": "0.27.4", - "typescript": "5.7.2", - "vite": "6.0.3", - "vitest": "2.1.8" - } + "name": "thirdweb", + "version": "5.78.0", + "repository": { + "type": "git", + "url": "git+https://github.com/thirdweb-dev/js.git#main" + }, + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/thirdweb-dev/js/issues" + }, + "author": "thirdweb eng ", + "type": "module", + "bin": { + "thirdweb": "./dist/esm/cli/bin.js", + "thirdweb-cli": "./dist/esm/cli/bin.js" + }, + "main": "./dist/cjs/exports/thirdweb.js", + "module": "./dist/esm/exports/thirdweb.js", + "types": "./dist/types/exports/thirdweb.d.ts", + "typings": "./dist/types/exports/thirdweb.d.ts", + "exports": { + ".": { + "types": "./dist/types/exports/thirdweb.d.ts", + "import": "./dist/esm/exports/thirdweb.js", + "default": "./dist/cjs/exports/thirdweb.js" + }, + "./adapters/*": { + "types": "./dist/types/exports/adapters/*.d.ts", + "import": "./dist/esm/exports/adapters/*.js", + "default": "./dist/cjs/exports/adapters/*.js" + }, + "./auth": { + "types": "./dist/types/exports/auth.d.ts", + "import": "./dist/esm/exports/auth.js", + "default": "./dist/cjs/exports/auth.js" + }, + "./chains": { + "types": "./dist/types/exports/chains.d.ts", + "import": "./dist/esm/exports/chains.js", + "default": "./dist/cjs/exports/chains.js" + }, + "./contract": { + "types": "./dist/types/exports/contract.d.ts", + "import": "./dist/esm/exports/contract.js", + "default": "./dist/cjs/exports/contract.js" + }, + "./deploys": { + "types": "./dist/types/exports/deploys.d.ts", + "import": "./dist/esm/exports/deploys.js", + "default": "./dist/cjs/exports/deploys.js" + }, + "./event": { + "types": "./dist/types/exports/event.d.ts", + "import": "./dist/esm/exports/event.js", + "default": "./dist/cjs/exports/event.js" + }, + "./extensions/*": { + "types": "./dist/types/exports/extensions/*.d.ts", + "import": "./dist/esm/exports/extensions/*.js", + "default": "./dist/cjs/exports/extensions/*.js" + }, + "./pay": { + "types": "./dist/types/exports/pay.d.ts", + "import": "./dist/esm/exports/pay.js", + "default": "./dist/cjs/exports/pay.js" + }, + "./react": { + "types": "./dist/types/exports/react.d.ts", + "import": "./dist/esm/exports/react.js", + "react-native": "./dist/esm/exports/react.native.js", + "default": "./dist/cjs/exports/react.js" + }, + "./react-native": { + "types": "./dist/types/exports/react-native.d.ts", + "import": "./dist/esm/exports/react-native.js", + "default": "./dist/cjs/exports/react-native.js" + }, + "./rpc": { + "types": "./dist/types/exports/rpc.d.ts", + "import": "./dist/esm/exports/rpc.js", + "default": "./dist/cjs/exports/rpc.js" + }, + "./storage": { + "types": "./dist/types/exports/storage.d.ts", + "import": "./dist/esm/exports/storage.js", + "default": "./dist/cjs/exports/storage.js" + }, + "./transaction": { + "types": "./dist/types/exports/transaction.d.ts", + "import": "./dist/esm/exports/transaction.js", + "default": "./dist/cjs/exports/transaction.js" + }, + "./utils": { + "types": "./dist/types/exports/utils.d.ts", + "import": "./dist/esm/exports/utils.js", + "default": "./dist/cjs/exports/utils.js" + }, + "./wallets": { + "types": "./dist/types/exports/wallets.d.ts", + "import": "./dist/esm/exports/wallets.js", + "react-native": "./dist/esm/exports/wallets.native.js", + "default": "./dist/cjs/exports/wallets.js" + }, + "./wallets/in-app": { + "types": "./dist/types/exports/wallets/in-app.d.ts", + "import": "./dist/esm/exports/wallets/in-app.js", + "react-native": "./dist/esm/exports/wallets/in-app.native.js", + "default": "./dist/cjs/exports/wallets/in-app.js" + }, + "./wallets/*": { + "types": "./dist/types/exports/wallets/*.d.ts", + "import": "./dist/esm/exports/wallets/*.js", + "default": "./dist/cjs/exports/wallets/*.js" + }, + "./modules": { + "types": "./dist/types/exports/modules.d.ts", + "import": "./dist/esm/exports/modules.js", + "default": "./dist/cjs/exports/modules.js" + }, + "./social": { + "types": "./dist/types/exports/social.d.ts", + "import": "./dist/esm/exports/social.js", + "default": "./dist/cjs/exports/social.js" + }, + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "adapters/*": [ + "./dist/types/exports/adapters/*.d.ts" + ], + "auth": [ + "./dist/types/exports/auth.d.ts" + ], + "chains": [ + "./dist/types/exports/chains.d.ts" + ], + "contract": [ + "./dist/types/exports/contract.d.ts" + ], + "deploys": [ + "./dist/types/exports/deploys.d.ts" + ], + "event": [ + "./dist/types/exports/event.d.ts" + ], + "extensions/*": [ + "./dist/types/exports/extensions/*.d.ts" + ], + "pay": [ + "./dist/types/exports/pay.d.ts" + ], + "react": [ + "./dist/types/exports/react.d.ts" + ], + "react-native": [ + "./dist/types/exports/react-native.d.ts" + ], + "rpc": [ + "./dist/types/exports/rpc.d.ts" + ], + "storage": [ + "./dist/types/exports/storage.d.ts" + ], + "transaction": [ + "./dist/types/exports/transaction.d.ts" + ], + "utils": [ + "./dist/types/exports/utils.d.ts" + ], + "wallets": [ + "./dist/types/exports/wallets.d.ts" + ], + "wallets/*": [ + "./dist/types/exports/wallets/*.d.ts" + ], + "modules": [ + "./dist/types/exports/modules.d.ts" + ], + "social": [ + "./dist/types/exports/social.d.ts" + ] + } + }, + "browser": { + "crypto": false + }, + "sideEffects": false, + "files": [ + "dist/*", + "src/*", + "!**/*.tsbuildinfo", + "!**/*.test.ts", + "!**/*.test.tsx", + "!**/*.test.ts.snap", + "!**/*.test-d.ts", + "!**/*.bench.ts", + "!tsconfig.build.json" + ], + "dependencies": { + "@coinbase/wallet-sdk": "4.2.4", + "@emotion/react": "11.14.0", + "@emotion/styled": "11.14.0", + "@google/model-viewer": "2.1.1", + "@noble/curves": "1.7.0", + "@noble/hashes": "1.6.1", + "@passwordless-id/webauthn": "^2.1.2", + "@radix-ui/react-dialog": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-icons": "1.3.2", + "@radix-ui/react-tooltip": "1.1.4", + "@tanstack/react-query": "5.62.7", + "@walletconnect/ethereum-provider": "2.17.2", + "@walletconnect/sign-client": "2.17.2", + "abitype": "1.0.7", + "fuse.js": "7.0.0", + "input-otp": "^1.4.1", + "mipd": "0.0.7", + "ox": "0.4.1", + "uqr": "0.1.2", + "viem": "2.21.54" + }, + "peerDependencies": { + "@aws-sdk/client-lambda": "^3", + "@aws-sdk/credential-providers": "^3", + "@coinbase/wallet-mobile-sdk": "^1", + "@mobile-wallet-protocol/client": "0.1.1", + "@react-native-async-storage/async-storage": "^1 || ^2", + "ethers": "^5 || ^6", + "expo-linking": "^6", + "expo-web-browser": "^13 || ^14", + "react": "^18 || ^19", + "react-native": "*", + "react-native-aes-gcm-crypto": "^0.2", + "react-native-passkey": "^3", + "react-native-quick-crypto": ">=0.7.0-rc.6 || >=0.7", + "react-native-svg": "^15", + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-native": { + "optional": true + }, + "ethers": { + "optional": true + }, + "typescript": { + "optional": true + }, + "react-native-aes-gcm-crypto": { + "optional": true + }, + "expo-linking": { + "optional": true + }, + "expo-web-browser": { + "optional": true + }, + "react-native-quick-crypto": { + "optional": true + }, + "react-native-passkey": { + "optional": true + }, + "react-native-svg": { + "optional": true + }, + "@aws-sdk/client-lambda": { + "optional": true + }, + "@aws-sdk/client-kms": { + "optional": true + }, + "@aws-sdk/credential-providers": { + "optional": true + }, + "@react-native-async-storage/async-storage": { + "optional": true + }, + "@coinbase/wallet-mobile-sdk": { + "optional": true + }, + "@mobile-wallet-protocol/client": { + "optional": true + } + }, + "scripts": { + "bench:compare": "bun run ./benchmarks/run.ts", + "bench": "vitest -c ./test/vitest.config.ts bench", + "format": "biome format ./src --write", + "lint": "knip && biome check ./src && tsc --project ./tsconfig.build.json --module esnext --noEmit", + "fix": "biome check ./src --fix", + "knip": "knip", + "build:generate": "bun scripts/generate/generate.ts", + "build:generate-wallets": "bun scripts/wallets/generate.ts", + "dev": "tsc --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm --watch", + "dev:cjs": "printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json && tsc --noCheck --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false --watch", + "dev:esm": "printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json && tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm --watch", + "build": "pnpm clean && pnpm build:types && pnpm build:cjs && pnpm build:esm", + "build:cjs": "tsc --noCheck --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false && printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json", + "build:esm": "tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json", + "build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "clean": "rimraf dist", + "size": "size-limit", + "test:watch": "vitest -c ./test/vitest.config.ts dev", + "test": "vitest run -c ./test/vitest.config.ts --coverage", + "test:cov": "vitest dev -c ./test/vitest.config.ts --coverage", + "test:ui": "vitest dev -c ./test/vitest.config.ts --coverage --ui", + "test:dev": "vitest run -c ./test/vitest.config.ts", + "test:react": "vitest run -c ./test/vitest.config.ts dev --ui src/react", + "typedoc": "node scripts/typedoc.mjs && node scripts/parse.mjs", + "update-version": "node scripts/version.mjs", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" + }, + "engines": { + "node": ">=18" + }, + "devDependencies": { + "@aws-sdk/client-kms": "3.709.0", + "@aws-sdk/client-lambda": "3.709.0", + "@aws-sdk/credential-providers": "3.709.0", + "@biomejs/biome": "1.9.4", + "@chromatic-com/storybook": "3.2.2", + "@codspeed/vitest-plugin": "4.0.0", + "@coinbase/wallet-mobile-sdk": "1.1.2", + "@mobile-wallet-protocol/client": "0.1.2", + "@react-native-async-storage/async-storage": "2.1.0", + "@size-limit/preset-big-lib": "11.1.6", + "@storybook/addon-essentials": "8.4.7", + "@storybook/addon-interactions": "8.4.7", + "@storybook/addon-links": "8.4.7", + "@storybook/addon-onboarding": "8.4.7", + "@storybook/react": "8.4.7", + "@storybook/react-vite": "8.4.7", + "@storybook/test": "8.4.7", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.1.0", + "@testing-library/user-event": "^14.5.2", + "@types/cross-spawn": "^6.0.6", + "@types/react": "19.0.1", + "@viem/anvil": "0.0.10", + "@vitejs/plugin-react": "^4.3.4", + "@vitest/coverage-v8": "2.1.8", + "@vitest/ui": "2.1.8", + "cross-spawn": "7.0.6", + "dotenv-mono": "^1.3.14", + "ethers5": "npm:ethers@5", + "ethers6": "npm:ethers@6", + "expo-linking": "7.0.3", + "expo-web-browser": "14.0.1", + "happy-dom": "15.11.7", + "knip": "5.39.4", + "msw": "2.6.8", + "prettier": "3.3.3", + "react": "19.0.0", + "react-dom": "19.0.0", + "react-native": "0.76.5", + "react-native-aes-gcm-crypto": "0.2.2", + "react-native-passkey": "3.0.0", + "react-native-quick-crypto": "0.7.8", + "react-native-svg": "15.10.1", + "rimraf": "6.0.1", + "sharp": "^0.33.5", + "size-limit": "11.1.6", + "storybook": "8.4.7", + "typedoc": "0.27.4", + "typedoc-better-json": "0.9.4", + "typescript": "5.7.2", + "vite": "6.0.3", + "vitest": "2.1.8" + } } diff --git a/packages/thirdweb/scripts/parse.mjs b/packages/thirdweb/scripts/parse.mjs new file mode 100644 index 00000000000..b14ecd09921 --- /dev/null +++ b/packages/thirdweb/scripts/parse.mjs @@ -0,0 +1,19 @@ +import { transform } from "typedoc-better-json"; +import { readFile, writeFile } from "fs/promises"; + +const inputPath = "typedoc/documentation.json"; +const outputPath = "typedoc/parsed.json"; + +try { + const fileContent = await readFile(inputPath, "utf-8"); + const fileData = JSON.parse(fileContent); + + const transformedData = transform(fileData); + + await writeFile(outputPath, JSON.stringify(transformedData, null, 2)); + + console.log(`File saved at ${outputPath}`); +} catch (error) { + console.error("Error:", error); + process.exit(1); +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ddf883e764b..f610364c713 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -135,7 +135,7 @@ importers: version: 1.1.4(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@sentry/nextjs': specifier: 8.43.0 - version: 8.43.0(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + version: 8.43.0(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(@swc/core@1.10.1)) '@shazow/whatsabi': specifier: ^0.17.0 version: 0.17.0(@noble/hashes@1.6.1)(typescript@5.7.2)(zod@3.24.1) @@ -150,7 +150,7 @@ importers: version: link:../../packages/service-utils '@vercel/functions': specifier: ^1.5.1 - version: 1.5.1(@aws-sdk/credential-provider-web-identity@3.709.0(@aws-sdk/client-sts@3.709.0)) + version: 1.5.1(@aws-sdk/credential-provider-web-identity@3.709.0) '@vercel/og': specifier: ^0.6.4 version: 0.6.4 @@ -279,7 +279,7 @@ importers: version: 2.5.5 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))) + version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -328,7 +328,7 @@ importers: version: 8.4.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)) '@storybook/nextjs': specifier: 8.4.7 - version: 8.4.7(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(type-fest@4.30.0)(typescript@5.7.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + version: 8.4.7(@swc/core@1.10.1)(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(type-fest@4.30.0)(typescript@5.7.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1)) '@storybook/react': specifier: 8.4.7 version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) @@ -376,7 +376,7 @@ importers: version: 10.4.20(postcss@8.4.49) checkly: specifier: ^4.15.0 - version: 4.15.0(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10) + version: 4.15.0(@swc/core@1.10.1)(@types/node@22.10.2)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10) eslint: specifier: 8.57.0 version: 8.57.0 @@ -403,7 +403,7 @@ importers: version: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) tailwindcss: specifier: 3.4.16 - version: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) + version: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) typescript: specifier: 5.7.2 version: 5.7.2 @@ -527,10 +527,10 @@ importers: version: 8.4.49 tailwindcss: specifier: 3.4.16 - version: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) + version: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))) + version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) typescript: specifier: 5.7.2 version: 5.7.2 @@ -542,13 +542,13 @@ importers: version: 1.0.6(react@19.0.0) '@mdx-js/loader': specifier: ^2.3.0 - version: 2.3.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) + version: 2.3.0(webpack@5.97.1) '@mdx-js/react': specifier: ^2.3.0 version: 2.3.0(react@19.0.0) '@next/mdx': specifier: 15.1.0 - version: 15.1.0(@mdx-js/loader@2.3.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))))(@mdx-js/react@2.3.0(react@19.0.0)) + version: 15.1.0(@mdx-js/loader@2.3.0(webpack@5.97.1))(@mdx-js/react@2.3.0(react@19.0.0)) '@radix-ui/react-dialog': specifier: 1.1.2 version: 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -629,7 +629,7 @@ importers: version: 2.5.5 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))) + version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -687,7 +687,7 @@ importers: version: 1.2.4 eslint-plugin-tailwindcss: specifier: ^3.17.5 - version: 3.17.5(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))) + version: 3.17.5(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) next-sitemap: specifier: ^4.2.3 version: 4.2.3(next@15.1.0(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) @@ -696,7 +696,7 @@ importers: version: 8.4.49 tailwindcss: specifier: 3.4.16 - version: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) + version: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) tsx: specifier: 4.19.2 version: 4.19.2 @@ -765,7 +765,7 @@ importers: version: 2.5.5 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))) + version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -814,7 +814,7 @@ importers: version: 6.0.1(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.1) tailwindcss: specifier: 3.4.16 - version: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) + version: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) typescript: specifier: 5.7.2 version: 5.7.2 @@ -997,7 +997,7 @@ importers: version: 2.1.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@16.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@19.0.1)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)) '@size-limit/preset-big-lib': specifier: 11.1.6 - version: 11.1.6(bufferutil@4.0.8)(size-limit@11.1.6)(utf-8-validate@5.0.10) + version: 11.1.6(bufferutil@4.0.8)(esbuild@0.24.0)(size-limit@11.1.6)(utf-8-validate@5.0.10) '@storybook/addon-essentials': specifier: 8.4.7 version: 8.4.7(@types/react@19.0.1)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)) @@ -1112,6 +1112,9 @@ importers: typedoc: specifier: 0.27.4 version: 0.27.4(typescript@5.7.2) + typedoc-better-json: + specifier: 0.9.4 + version: 0.9.4(typescript@5.7.2) typescript: specifier: 5.7.2 version: 5.7.2 @@ -17267,11 +17270,11 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - '@mdx-js/loader@2.3.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)))': + '@mdx-js/loader@2.3.0(webpack@5.97.1)': dependencies: '@mdx-js/mdx': 2.3.0 source-map: 0.7.4 - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)) + webpack: 5.97.1 transitivePeerDependencies: - supports-color @@ -17411,11 +17414,11 @@ snapshots: dependencies: fast-glob: 3.3.1 - '@next/mdx@15.1.0(@mdx-js/loader@2.3.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))))(@mdx-js/react@2.3.0(react@19.0.0))': + '@next/mdx@15.1.0(@mdx-js/loader@2.3.0(webpack@5.97.1))(@mdx-js/react@2.3.0(react@19.0.0))': dependencies: source-map: 0.7.4 optionalDependencies: - '@mdx-js/loader': 2.3.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) + '@mdx-js/loader': 2.3.0(webpack@5.97.1) '@mdx-js/react': 2.3.0(react@19.0.0) '@next/swc-darwin-arm64@15.1.0': @@ -17567,7 +17570,7 @@ snapshots: widest-line: 3.1.0 wrap-ansi: 7.0.0 - '@oclif/core@2.8.11(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)': + '@oclif/core@2.8.11(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)': dependencies: '@types/cli-progress': 3.11.6 ansi-escapes: 4.3.2 @@ -17593,7 +17596,7 @@ snapshots: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.3.0 - ts-node: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) + ts-node: 10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) tslib: 2.8.1 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -17631,10 +17634,10 @@ snapshots: dependencies: '@oclif/core': 1.26.2 - '@oclif/plugin-not-found@2.3.23(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)': + '@oclif/plugin-not-found@2.3.23(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)': dependencies: '@oclif/color': 1.0.13 - '@oclif/core': 2.8.11(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) + '@oclif/core': 2.8.11(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) fast-levenshtein: 3.0.0 lodash: 4.17.21 transitivePeerDependencies: @@ -17659,9 +17662,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@oclif/plugin-warn-if-update-available@2.0.24(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)': + '@oclif/plugin-warn-if-update-available@2.0.24(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)': dependencies: - '@oclif/core': 2.8.11(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) + '@oclif/core': 2.8.11(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) chalk: 4.1.2 debug: 4.4.0(supports-color@8.1.1) fs-extra: 9.1.0 @@ -18033,7 +18036,7 @@ snapshots: dependencies: playwright: 1.49.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.30.0)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.30.0)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.39.0 @@ -18043,7 +18046,7 @@ snapshots: react-refresh: 0.14.2 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) optionalDependencies: type-fest: 4.30.0 webpack-hot-middleware: 2.26.1 @@ -19034,7 +19037,7 @@ snapshots: '@sentry/core@8.43.0': {} - '@sentry/nextjs@8.43.0(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0))': + '@sentry/nextjs@8.43.0(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(@swc/core@1.10.1))': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 @@ -19045,7 +19048,7 @@ snapshots: '@sentry/opentelemetry': 8.43.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.28.0) '@sentry/react': 8.43.0(react@19.0.0) '@sentry/vercel-edge': 8.43.0 - '@sentry/webpack-plugin': 2.22.7(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + '@sentry/webpack-plugin': 2.22.7(webpack@5.97.1(@swc/core@1.10.1)) chalk: 3.0.0 next: 15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) resolve: 1.22.8 @@ -19121,12 +19124,12 @@ snapshots: '@opentelemetry/api': 1.9.0 '@sentry/core': 8.43.0 - '@sentry/webpack-plugin@2.22.7(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0))': + '@sentry/webpack-plugin@2.22.7(webpack@5.97.1(@swc/core@1.10.1))': dependencies: '@sentry/bundler-plugin-core': 2.22.7 unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) transitivePeerDependencies: - encoding - supports-color @@ -19193,11 +19196,11 @@ snapshots: dependencies: size-limit: 11.1.6 - '@size-limit/preset-big-lib@11.1.6(bufferutil@4.0.8)(size-limit@11.1.6)(utf-8-validate@5.0.10)': + '@size-limit/preset-big-lib@11.1.6(bufferutil@4.0.8)(esbuild@0.24.0)(size-limit@11.1.6)(utf-8-validate@5.0.10)': dependencies: '@size-limit/file': 11.1.6(size-limit@11.1.6) '@size-limit/time': 11.1.6(bufferutil@4.0.8)(size-limit@11.1.6)(utf-8-validate@5.0.10) - '@size-limit/webpack': 11.1.6(size-limit@11.1.6) + '@size-limit/webpack': 11.1.6(esbuild@0.24.0)(size-limit@11.1.6) size-limit: 11.1.6 transitivePeerDependencies: - '@swc/core' @@ -19217,11 +19220,11 @@ snapshots: - supports-color - utf-8-validate - '@size-limit/webpack@11.1.6(size-limit@11.1.6)': + '@size-limit/webpack@11.1.6(esbuild@0.24.0)(size-limit@11.1.6)': dependencies: nanoid: 5.0.7 size-limit: 11.1.6 - webpack: 5.97.1 + webpack: 5.97.1(esbuild@0.24.0) transitivePeerDependencies: - '@swc/core' - esbuild @@ -19861,7 +19864,7 @@ snapshots: ts-dedent: 2.2.0 vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(lightningcss@1.28.2)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) - '@storybook/builder-webpack5@8.4.7(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2)': + '@storybook/builder-webpack5@8.4.7(@swc/core@1.10.1)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2)': dependencies: '@storybook/core-webpack': 8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)) '@types/node': 22.10.2 @@ -19870,23 +19873,23 @@ snapshots: case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.1 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.10.1)) es-module-lexer: 1.5.4 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) - html-webpack-plugin: 5.6.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)) + html-webpack-plugin: 5.6.3(webpack@5.97.1(@swc/core@1.10.1)) magic-string: 0.30.15 path-browserify: 1.0.1 process: 0.11.10 semver: 7.6.3 storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) - terser-webpack-plugin: 5.3.10(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + style-loader: 3.3.4(webpack@5.97.1(@swc/core@1.10.1)) + terser-webpack-plugin: 5.3.10(@swc/core@1.10.1)(webpack@5.97.1(@swc/core@1.10.1)) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) - webpack-dev-middleware: 6.1.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + webpack: 5.97.1(@swc/core@1.10.1) + webpack-dev-middleware: 6.1.3(webpack@5.97.1(@swc/core@1.10.1)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -19998,7 +20001,7 @@ snapshots: dependencies: storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) - '@storybook/nextjs@8.4.7(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(type-fest@4.30.0)(typescript@5.7.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0))': + '@storybook/nextjs@8.4.7(@swc/core@1.10.1)(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(type-fest@4.30.0)(typescript@5.7.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) @@ -20013,31 +20016,31 @@ snapshots: '@babel/preset-react': 7.26.3(@babel/core@7.26.0) '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) '@babel/runtime': 7.26.0 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(type-fest@4.30.0)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) - '@storybook/builder-webpack5': 8.4.7(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) - '@storybook/preset-react-webpack': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(type-fest@4.30.0)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1)) + '@storybook/builder-webpack5': 8.4.7(@swc/core@1.10.1)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) + '@storybook/preset-react-webpack': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(@swc/core@1.10.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) '@storybook/react': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) '@storybook/test': 8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)) '@types/node': 22.10.2 '@types/semver': 7.5.8 - babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) - css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.1)) + css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.10.1)) find-up: 5.0.0 image-size: 1.1.1 loader-utils: 3.3.1 next: 15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - node-polyfill-webpack-plugin: 2.0.1(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + node-polyfill-webpack-plugin: 2.0.1(webpack@5.97.1(@swc/core@1.10.1)) pnp-webpack-plugin: 1.7.0(typescript@5.7.2) postcss: 8.4.49 - postcss-loader: 8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + postcss-loader: 8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) react-refresh: 0.14.2 resolve-url-loader: 5.0.0 - sass-loader: 13.3.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + sass-loader: 13.3.3(webpack@5.97.1(@swc/core@1.10.1)) semver: 7.6.3 storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + style-loader: 3.3.4(webpack@5.97.1(@swc/core@1.10.1)) styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.0.0) ts-dedent: 2.2.0 tsconfig-paths: 4.2.0 @@ -20045,7 +20048,7 @@ snapshots: optionalDependencies: sharp: 0.33.5 typescript: 5.7.2 - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -20065,11 +20068,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2)': + '@storybook/preset-react-webpack@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(@swc/core@1.10.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2)': dependencies: '@storybook/core-webpack': 8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)) '@storybook/react': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)) '@types/node': 22.10.2 '@types/semver': 7.5.8 find-up: 5.0.0 @@ -20081,7 +20084,7 @@ snapshots: semver: 7.6.3 storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) tsconfig-paths: 4.2.0 - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: @@ -20100,7 +20103,7 @@ snapshots: dependencies: storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1))': dependencies: debug: 4.4.0(supports-color@8.1.1) endent: 2.1.0 @@ -20110,7 +20113,7 @@ snapshots: react-docgen-typescript: 2.2.2(typescript@5.7.2) tslib: 2.8.1 typescript: 5.7.2 - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) transitivePeerDependencies: - supports-color @@ -20598,7 +20601,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.10.1': optional: true - '@swc/core@1.10.1(@swc/helpers@0.5.15)': + '@swc/core@1.10.1': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.17 @@ -20613,7 +20616,6 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.10.1 '@swc/core-win32-ia32-msvc': 1.10.1 '@swc/core-win32-x64-msvc': 1.10.1 - '@swc/helpers': 0.5.15 optional: true '@swc/counter@0.1.3': {} @@ -21166,7 +21168,7 @@ snapshots: '@urql/core': 5.1.0(graphql@16.9.0) wonka: 6.3.4 - '@vercel/functions@1.5.1(@aws-sdk/credential-provider-web-identity@3.709.0(@aws-sdk/client-sts@3.709.0))': + '@vercel/functions@1.5.1(@aws-sdk/credential-provider-web-identity@3.709.0)': optionalDependencies: '@aws-sdk/credential-provider-web-identity': 3.709.0(@aws-sdk/client-sts@3.709.0) @@ -22065,12 +22067,12 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): + babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.1)): dependencies: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) babel-plugin-istanbul@6.1.1: dependencies: @@ -22540,13 +22542,13 @@ snapshots: check-error@2.1.1: {} - checkly@4.15.0(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10): + checkly@4.15.0(@swc/core@1.10.1)(@types/node@22.10.2)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10): dependencies: - '@oclif/core': 2.8.11(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) + '@oclif/core': 2.8.11(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) '@oclif/plugin-help': 5.1.20 - '@oclif/plugin-not-found': 2.3.23(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) + '@oclif/plugin-not-found': 2.3.23(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) '@oclif/plugin-plugins': 5.4.4 - '@oclif/plugin-warn-if-update-available': 2.0.24(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) + '@oclif/plugin-warn-if-update-available': 2.0.24(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.7.2) acorn: 8.8.1 acorn-walk: 8.2.0 @@ -22992,7 +22994,7 @@ snapshots: css-gradient-parser@0.0.16: {} - css-loader@6.11.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): + css-loader@6.11.0(webpack@5.97.1(@swc/core@1.10.1)): dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 @@ -23003,7 +23005,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) css-select@4.3.0: dependencies: @@ -23893,11 +23895,11 @@ snapshots: eslint-plugin-svg-jsx@1.2.4: {} - eslint-plugin-tailwindcss@3.17.5(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))): + eslint-plugin-tailwindcss@3.17.5(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))): dependencies: fast-glob: 3.3.2 postcss: 8.4.49 - tailwindcss: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) + tailwindcss: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) eslint-scope@5.1.1: dependencies: @@ -24579,7 +24581,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)): dependencies: '@babel/code-frame': 7.26.2 chalk: 4.1.2 @@ -24594,7 +24596,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.7.2 - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) form-data-encoder@2.1.4: {} @@ -25067,7 +25069,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): + html-webpack-plugin@5.6.3(webpack@5.97.1(@swc/core@1.10.1)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -25075,7 +25077,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) htmlparser2@3.10.1: dependencies: @@ -27571,7 +27573,7 @@ snapshots: node-int64@0.4.0: {} - node-polyfill-webpack-plugin@2.0.1(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): + node-polyfill-webpack-plugin@2.0.1(webpack@5.97.1(@swc/core@1.10.1)): dependencies: assert: 2.1.0 browserify-zlib: 0.2.0 @@ -27598,7 +27600,7 @@ snapshots: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) node-releases@2.0.18: {} @@ -28223,13 +28225,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.49 - postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)): + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)): dependencies: lilconfig: 3.1.3 yaml: 2.6.1 optionalDependencies: postcss: 8.4.49 - ts-node: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) + ts-node: 10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) postcss-load-config@6.0.1(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.1): dependencies: @@ -28240,14 +28242,14 @@ snapshots: tsx: 4.19.2 yaml: 2.6.1 - postcss-loader@8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): + postcss-loader@8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)): dependencies: cosmiconfig: 9.0.0(typescript@5.7.2) jiti: 1.21.6 postcss: 8.4.49 semver: 7.6.3 optionalDependencies: - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) transitivePeerDependencies: - typescript @@ -29404,10 +29406,10 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@13.3.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): + sass-loader@13.3.3(webpack@5.97.1(@swc/core@1.10.1)): dependencies: neo-async: 2.6.2 - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) satori@0.12.0: dependencies: @@ -29956,9 +29958,9 @@ snapshots: structured-headers@0.4.1: {} - style-loader@3.3.4(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): + style-loader@3.3.4(webpack@5.97.1(@swc/core@1.10.1)): dependencies: - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) style-to-object@0.4.4: dependencies: @@ -30103,11 +30105,11 @@ snapshots: tailwind-merge@2.5.5: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))): dependencies: - tailwindcss: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) + tailwindcss: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) - tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)): + tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -30126,7 +30128,7 @@ snapshots: postcss: 8.4.49 postcss-import: 15.1.0(postcss@8.4.49) postcss-js: 4.0.1(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -30188,28 +30190,27 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.10(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): + terser-webpack-plugin@5.3.10(@swc/core@1.10.1)(webpack@5.97.1(@swc/core@1.10.1)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.37.0 - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) optionalDependencies: - '@swc/core': 1.10.1(@swc/helpers@0.5.15) - esbuild: 0.24.0 + '@swc/core': 1.10.1 - terser-webpack-plugin@5.3.10(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))): + terser-webpack-plugin@5.3.10(esbuild@0.24.0)(webpack@5.97.1(esbuild@0.24.0)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.37.0 - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)) + webpack: 5.97.1(esbuild@0.24.0) optionalDependencies: - '@swc/core': 1.10.1(@swc/helpers@0.5.15) + esbuild: 0.24.0 terser-webpack-plugin@5.3.10(webpack@5.97.1): dependencies: @@ -30348,7 +30349,7 @@ snapshots: ts-mixer@6.0.4: {} - ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2): + ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -30366,7 +30367,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.10.1(@swc/helpers@0.5.15) + '@swc/core': 1.10.1 ts-pnp@1.2.0(typescript@5.7.2): optionalDependencies: @@ -31116,7 +31117,7 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@6.1.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): + webpack-dev-middleware@6.1.3(webpack@5.97.1(@swc/core@1.10.1)): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -31124,7 +31125,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1) webpack-hot-middleware@2.26.1: dependencies: @@ -31168,7 +31169,7 @@ snapshots: - esbuild - uglify-js - webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)): + webpack@5.97.1(@swc/core@1.10.1): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -31190,7 +31191,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) + terser-webpack-plugin: 5.3.10(@swc/core@1.10.1)(webpack@5.97.1(@swc/core@1.10.1)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -31198,7 +31199,7 @@ snapshots: - esbuild - uglify-js - webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0): + webpack@5.97.1(esbuild@0.24.0): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -31220,7 +31221,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + terser-webpack-plugin: 5.3.10(esbuild@0.24.0)(webpack@5.97.1(esbuild@0.24.0)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: From 0ddc1238073c2b7c3d876f79daa542363ec45c0b Mon Sep 17 00:00:00 2001 From: gregfromstl Date: Sun, 15 Dec 2024 23:38:20 +0000 Subject: [PATCH 19/49] [Dashboard] Fix: Nebula send transaction params (#5744) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## PR-Codex overview This PR enhances the `SendTransactionButton` component in `Chats.tsx` by introducing improved transaction handling and validation through the addition of a blockchain `chain` context and the `sendTransaction` method. ### Detailed summary - Added import for `sendTransaction` from `thirdweb`. - Introduced `chain` variable using `useV5DashboardChain`. - Updated transaction validation to check for both `txData` and `chain`. - Refactored transaction sending logic to use `sendTransaction` with detailed parameters. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../app/nebula-app/(app)/components/Chats.tsx | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/apps/dashboard/src/app/nebula-app/(app)/components/Chats.tsx b/apps/dashboard/src/app/nebula-app/(app)/components/Chats.tsx index a5355bfe06d..082b1660468 100644 --- a/apps/dashboard/src/app/nebula-app/(app)/components/Chats.tsx +++ b/apps/dashboard/src/app/nebula-app/(app)/components/Chats.tsx @@ -15,10 +15,13 @@ import { import { useState } from "react"; import { toast } from "sonner"; import type { ThirdwebClient } from "thirdweb"; +import { sendTransaction } from "thirdweb"; import { useActiveAccount } from "thirdweb/react"; import type { Account } from "thirdweb/wallets"; +import { getThirdwebClient } from "../../../../@/constants/thirdweb.server"; import { TransactionButton } from "../../../../components/buttons/TransactionButton"; import { MarkdownRenderer } from "../../../../components/contract-components/published-contract/markdown-renderer"; +import { useV5DashboardChain } from "../../../../lib/v5-adapter"; import { submitFeedback } from "../api/feedback"; import { NebulaIcon } from "../icons/NebulaIcon"; @@ -241,16 +244,28 @@ function SendTransactionButton(props: { twAccount: TWAccount; }) { const account = useActiveAccount(); + const chain = useV5DashboardChain(props.txData?.chainId); + const sendTxMutation = useMutation({ mutationFn: () => { if (!account) { throw new Error("No active account"); } - if (!props.txData) { + if (!props.txData || !chain) { throw new Error("Invalid transaction"); } - return account.sendTransaction(props.txData); + + return sendTransaction({ + account, + transaction: { + ...props.txData, + nonce: Number(props.txData.nonce), + to: props.txData.to || undefined, // Get rid of the potential null value + chain, + client: getThirdwebClient(), + }, + }); }, }); From e42ffc6a931a8d80492a091d79e2d9b38e4ba1d7 Mon Sep 17 00:00:00 2001 From: Joaquim Verges Date: Tue, 17 Dec 2024 00:27:00 +1300 Subject: [PATCH 20/49] Fix migration to enclave wallets in react native (#5746) --- .changeset/eighty-days-pump.md | 5 + .changeset/wicked-yaks-flow.md | 5 + packages/react-native-adapter/package.json | 13 +- packages/thirdweb/package.json | 714 +++++----- .../in-app/native/helpers/constants.ts | 2 +- pnpm-lock.yaml | 1199 ++++++++++++++--- 6 files changed, 1343 insertions(+), 595 deletions(-) create mode 100644 .changeset/eighty-days-pump.md create mode 100644 .changeset/wicked-yaks-flow.md diff --git a/.changeset/eighty-days-pump.md b/.changeset/eighty-days-pump.md new file mode 100644 index 00000000000..949189f9846 --- /dev/null +++ b/.changeset/eighty-days-pump.md @@ -0,0 +1,5 @@ +--- +"thirdweb": patch +--- + +Fix migration to enclave in react native diff --git a/.changeset/wicked-yaks-flow.md b/.changeset/wicked-yaks-flow.md new file mode 100644 index 00000000000..ee3ab0d8389 --- /dev/null +++ b/.changeset/wicked-yaks-flow.md @@ -0,0 +1,5 @@ +--- +"@thirdweb-dev/react-native-adapter": patch +--- + +Downgrade aws libraries diff --git a/packages/react-native-adapter/package.json b/packages/react-native-adapter/package.json index 8d718e9fb7c..ae03023fbcf 100644 --- a/packages/react-native-adapter/package.json +++ b/packages/react-native-adapter/package.json @@ -23,14 +23,11 @@ }, "./package.json": "./package.json" }, - "files": [ - "dist/*", - "src/*" - ], + "files": ["dist/*", "src/*"], "dependencies": { - "@aws-sdk/client-kms": "3.709.0", - "@aws-sdk/client-lambda": "3.709.0", - "@aws-sdk/credential-providers": "3.709.0", + "@aws-sdk/client-kms": "3.592.0", + "@aws-sdk/client-lambda": "3.592.0", + "@aws-sdk/credential-providers": "3.592.0", "@mobile-wallet-protocol/client": "0.1.2" }, "devDependencies": { @@ -47,7 +44,7 @@ "react-native": ">=0.70", "react-native-aes-gcm-crypto": "^0.2", "react-native-get-random-values": "^1", - "react-native-quick-crypto": ">=0.7.0-rc.6 || >=0.7", + "react-native-quick-crypto": ">=0.7", "react-native-svg": "^15", "typescript": ">=5.0.4" }, diff --git a/packages/thirdweb/package.json b/packages/thirdweb/package.json index 28063925b83..66c78a768da 100644 --- a/packages/thirdweb/package.json +++ b/packages/thirdweb/package.json @@ -1,377 +1,341 @@ { - "name": "thirdweb", - "version": "5.78.0", - "repository": { - "type": "git", - "url": "git+https://github.com/thirdweb-dev/js.git#main" - }, - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/thirdweb-dev/js/issues" - }, - "author": "thirdweb eng ", - "type": "module", - "bin": { - "thirdweb": "./dist/esm/cli/bin.js", - "thirdweb-cli": "./dist/esm/cli/bin.js" - }, - "main": "./dist/cjs/exports/thirdweb.js", - "module": "./dist/esm/exports/thirdweb.js", - "types": "./dist/types/exports/thirdweb.d.ts", - "typings": "./dist/types/exports/thirdweb.d.ts", - "exports": { - ".": { - "types": "./dist/types/exports/thirdweb.d.ts", - "import": "./dist/esm/exports/thirdweb.js", - "default": "./dist/cjs/exports/thirdweb.js" - }, - "./adapters/*": { - "types": "./dist/types/exports/adapters/*.d.ts", - "import": "./dist/esm/exports/adapters/*.js", - "default": "./dist/cjs/exports/adapters/*.js" - }, - "./auth": { - "types": "./dist/types/exports/auth.d.ts", - "import": "./dist/esm/exports/auth.js", - "default": "./dist/cjs/exports/auth.js" - }, - "./chains": { - "types": "./dist/types/exports/chains.d.ts", - "import": "./dist/esm/exports/chains.js", - "default": "./dist/cjs/exports/chains.js" - }, - "./contract": { - "types": "./dist/types/exports/contract.d.ts", - "import": "./dist/esm/exports/contract.js", - "default": "./dist/cjs/exports/contract.js" - }, - "./deploys": { - "types": "./dist/types/exports/deploys.d.ts", - "import": "./dist/esm/exports/deploys.js", - "default": "./dist/cjs/exports/deploys.js" - }, - "./event": { - "types": "./dist/types/exports/event.d.ts", - "import": "./dist/esm/exports/event.js", - "default": "./dist/cjs/exports/event.js" - }, - "./extensions/*": { - "types": "./dist/types/exports/extensions/*.d.ts", - "import": "./dist/esm/exports/extensions/*.js", - "default": "./dist/cjs/exports/extensions/*.js" - }, - "./pay": { - "types": "./dist/types/exports/pay.d.ts", - "import": "./dist/esm/exports/pay.js", - "default": "./dist/cjs/exports/pay.js" - }, - "./react": { - "types": "./dist/types/exports/react.d.ts", - "import": "./dist/esm/exports/react.js", - "react-native": "./dist/esm/exports/react.native.js", - "default": "./dist/cjs/exports/react.js" - }, - "./react-native": { - "types": "./dist/types/exports/react-native.d.ts", - "import": "./dist/esm/exports/react-native.js", - "default": "./dist/cjs/exports/react-native.js" - }, - "./rpc": { - "types": "./dist/types/exports/rpc.d.ts", - "import": "./dist/esm/exports/rpc.js", - "default": "./dist/cjs/exports/rpc.js" - }, - "./storage": { - "types": "./dist/types/exports/storage.d.ts", - "import": "./dist/esm/exports/storage.js", - "default": "./dist/cjs/exports/storage.js" - }, - "./transaction": { - "types": "./dist/types/exports/transaction.d.ts", - "import": "./dist/esm/exports/transaction.js", - "default": "./dist/cjs/exports/transaction.js" - }, - "./utils": { - "types": "./dist/types/exports/utils.d.ts", - "import": "./dist/esm/exports/utils.js", - "default": "./dist/cjs/exports/utils.js" - }, - "./wallets": { - "types": "./dist/types/exports/wallets.d.ts", - "import": "./dist/esm/exports/wallets.js", - "react-native": "./dist/esm/exports/wallets.native.js", - "default": "./dist/cjs/exports/wallets.js" - }, - "./wallets/in-app": { - "types": "./dist/types/exports/wallets/in-app.d.ts", - "import": "./dist/esm/exports/wallets/in-app.js", - "react-native": "./dist/esm/exports/wallets/in-app.native.js", - "default": "./dist/cjs/exports/wallets/in-app.js" - }, - "./wallets/*": { - "types": "./dist/types/exports/wallets/*.d.ts", - "import": "./dist/esm/exports/wallets/*.js", - "default": "./dist/cjs/exports/wallets/*.js" - }, - "./modules": { - "types": "./dist/types/exports/modules.d.ts", - "import": "./dist/esm/exports/modules.js", - "default": "./dist/cjs/exports/modules.js" - }, - "./social": { - "types": "./dist/types/exports/social.d.ts", - "import": "./dist/esm/exports/social.js", - "default": "./dist/cjs/exports/social.js" - }, - "./package.json": "./package.json" - }, - "typesVersions": { - "*": { - "adapters/*": [ - "./dist/types/exports/adapters/*.d.ts" - ], - "auth": [ - "./dist/types/exports/auth.d.ts" - ], - "chains": [ - "./dist/types/exports/chains.d.ts" - ], - "contract": [ - "./dist/types/exports/contract.d.ts" - ], - "deploys": [ - "./dist/types/exports/deploys.d.ts" - ], - "event": [ - "./dist/types/exports/event.d.ts" - ], - "extensions/*": [ - "./dist/types/exports/extensions/*.d.ts" - ], - "pay": [ - "./dist/types/exports/pay.d.ts" - ], - "react": [ - "./dist/types/exports/react.d.ts" - ], - "react-native": [ - "./dist/types/exports/react-native.d.ts" - ], - "rpc": [ - "./dist/types/exports/rpc.d.ts" - ], - "storage": [ - "./dist/types/exports/storage.d.ts" - ], - "transaction": [ - "./dist/types/exports/transaction.d.ts" - ], - "utils": [ - "./dist/types/exports/utils.d.ts" - ], - "wallets": [ - "./dist/types/exports/wallets.d.ts" - ], - "wallets/*": [ - "./dist/types/exports/wallets/*.d.ts" - ], - "modules": [ - "./dist/types/exports/modules.d.ts" - ], - "social": [ - "./dist/types/exports/social.d.ts" - ] - } - }, - "browser": { - "crypto": false - }, - "sideEffects": false, - "files": [ - "dist/*", - "src/*", - "!**/*.tsbuildinfo", - "!**/*.test.ts", - "!**/*.test.tsx", - "!**/*.test.ts.snap", - "!**/*.test-d.ts", - "!**/*.bench.ts", - "!tsconfig.build.json" - ], - "dependencies": { - "@coinbase/wallet-sdk": "4.2.4", - "@emotion/react": "11.14.0", - "@emotion/styled": "11.14.0", - "@google/model-viewer": "2.1.1", - "@noble/curves": "1.7.0", - "@noble/hashes": "1.6.1", - "@passwordless-id/webauthn": "^2.1.2", - "@radix-ui/react-dialog": "1.1.2", - "@radix-ui/react-focus-scope": "1.1.0", - "@radix-ui/react-icons": "1.3.2", - "@radix-ui/react-tooltip": "1.1.4", - "@tanstack/react-query": "5.62.7", - "@walletconnect/ethereum-provider": "2.17.2", - "@walletconnect/sign-client": "2.17.2", - "abitype": "1.0.7", - "fuse.js": "7.0.0", - "input-otp": "^1.4.1", - "mipd": "0.0.7", - "ox": "0.4.1", - "uqr": "0.1.2", - "viem": "2.21.54" - }, - "peerDependencies": { - "@aws-sdk/client-lambda": "^3", - "@aws-sdk/credential-providers": "^3", - "@coinbase/wallet-mobile-sdk": "^1", - "@mobile-wallet-protocol/client": "0.1.1", - "@react-native-async-storage/async-storage": "^1 || ^2", - "ethers": "^5 || ^6", - "expo-linking": "^6", - "expo-web-browser": "^13 || ^14", - "react": "^18 || ^19", - "react-native": "*", - "react-native-aes-gcm-crypto": "^0.2", - "react-native-passkey": "^3", - "react-native-quick-crypto": ">=0.7.0-rc.6 || >=0.7", - "react-native-svg": "^15", - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-native": { - "optional": true - }, - "ethers": { - "optional": true - }, - "typescript": { - "optional": true - }, - "react-native-aes-gcm-crypto": { - "optional": true - }, - "expo-linking": { - "optional": true - }, - "expo-web-browser": { - "optional": true - }, - "react-native-quick-crypto": { - "optional": true - }, - "react-native-passkey": { - "optional": true - }, - "react-native-svg": { - "optional": true - }, - "@aws-sdk/client-lambda": { - "optional": true - }, - "@aws-sdk/client-kms": { - "optional": true - }, - "@aws-sdk/credential-providers": { - "optional": true - }, - "@react-native-async-storage/async-storage": { - "optional": true - }, - "@coinbase/wallet-mobile-sdk": { - "optional": true - }, - "@mobile-wallet-protocol/client": { - "optional": true - } - }, - "scripts": { - "bench:compare": "bun run ./benchmarks/run.ts", - "bench": "vitest -c ./test/vitest.config.ts bench", - "format": "biome format ./src --write", - "lint": "knip && biome check ./src && tsc --project ./tsconfig.build.json --module esnext --noEmit", - "fix": "biome check ./src --fix", - "knip": "knip", - "build:generate": "bun scripts/generate/generate.ts", - "build:generate-wallets": "bun scripts/wallets/generate.ts", - "dev": "tsc --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm --watch", - "dev:cjs": "printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json && tsc --noCheck --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false --watch", - "dev:esm": "printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json && tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm --watch", - "build": "pnpm clean && pnpm build:types && pnpm build:cjs && pnpm build:esm", - "build:cjs": "tsc --noCheck --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false && printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json", - "build:esm": "tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json", - "build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", - "clean": "rimraf dist", - "size": "size-limit", - "test:watch": "vitest -c ./test/vitest.config.ts dev", - "test": "vitest run -c ./test/vitest.config.ts --coverage", - "test:cov": "vitest dev -c ./test/vitest.config.ts --coverage", - "test:ui": "vitest dev -c ./test/vitest.config.ts --coverage --ui", - "test:dev": "vitest run -c ./test/vitest.config.ts", - "test:react": "vitest run -c ./test/vitest.config.ts dev --ui src/react", - "typedoc": "node scripts/typedoc.mjs && node scripts/parse.mjs", - "update-version": "node scripts/version.mjs", - "storybook": "storybook dev -p 6006", - "build-storybook": "storybook build" - }, - "engines": { - "node": ">=18" - }, - "devDependencies": { - "@aws-sdk/client-kms": "3.709.0", - "@aws-sdk/client-lambda": "3.709.0", - "@aws-sdk/credential-providers": "3.709.0", - "@biomejs/biome": "1.9.4", - "@chromatic-com/storybook": "3.2.2", - "@codspeed/vitest-plugin": "4.0.0", - "@coinbase/wallet-mobile-sdk": "1.1.2", - "@mobile-wallet-protocol/client": "0.1.2", - "@react-native-async-storage/async-storage": "2.1.0", - "@size-limit/preset-big-lib": "11.1.6", - "@storybook/addon-essentials": "8.4.7", - "@storybook/addon-interactions": "8.4.7", - "@storybook/addon-links": "8.4.7", - "@storybook/addon-onboarding": "8.4.7", - "@storybook/react": "8.4.7", - "@storybook/react-vite": "8.4.7", - "@storybook/test": "8.4.7", - "@testing-library/jest-dom": "^6.6.3", - "@testing-library/react": "^16.1.0", - "@testing-library/user-event": "^14.5.2", - "@types/cross-spawn": "^6.0.6", - "@types/react": "19.0.1", - "@viem/anvil": "0.0.10", - "@vitejs/plugin-react": "^4.3.4", - "@vitest/coverage-v8": "2.1.8", - "@vitest/ui": "2.1.8", - "cross-spawn": "7.0.6", - "dotenv-mono": "^1.3.14", - "ethers5": "npm:ethers@5", - "ethers6": "npm:ethers@6", - "expo-linking": "7.0.3", - "expo-web-browser": "14.0.1", - "happy-dom": "15.11.7", - "knip": "5.39.4", - "msw": "2.6.8", - "prettier": "3.3.3", - "react": "19.0.0", - "react-dom": "19.0.0", - "react-native": "0.76.5", - "react-native-aes-gcm-crypto": "0.2.2", - "react-native-passkey": "3.0.0", - "react-native-quick-crypto": "0.7.8", - "react-native-svg": "15.10.1", - "rimraf": "6.0.1", - "sharp": "^0.33.5", - "size-limit": "11.1.6", - "storybook": "8.4.7", - "typedoc": "0.27.4", - "typedoc-better-json": "0.9.4", - "typescript": "5.7.2", - "vite": "6.0.3", - "vitest": "2.1.8" - } + "name": "thirdweb", + "version": "5.78.0", + "repository": { + "type": "git", + "url": "git+https://github.com/thirdweb-dev/js.git#main" + }, + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/thirdweb-dev/js/issues" + }, + "author": "thirdweb eng ", + "type": "module", + "bin": { + "thirdweb": "./dist/esm/cli/bin.js", + "thirdweb-cli": "./dist/esm/cli/bin.js" + }, + "main": "./dist/cjs/exports/thirdweb.js", + "module": "./dist/esm/exports/thirdweb.js", + "types": "./dist/types/exports/thirdweb.d.ts", + "typings": "./dist/types/exports/thirdweb.d.ts", + "exports": { + ".": { + "types": "./dist/types/exports/thirdweb.d.ts", + "import": "./dist/esm/exports/thirdweb.js", + "default": "./dist/cjs/exports/thirdweb.js" + }, + "./adapters/*": { + "types": "./dist/types/exports/adapters/*.d.ts", + "import": "./dist/esm/exports/adapters/*.js", + "default": "./dist/cjs/exports/adapters/*.js" + }, + "./auth": { + "types": "./dist/types/exports/auth.d.ts", + "import": "./dist/esm/exports/auth.js", + "default": "./dist/cjs/exports/auth.js" + }, + "./chains": { + "types": "./dist/types/exports/chains.d.ts", + "import": "./dist/esm/exports/chains.js", + "default": "./dist/cjs/exports/chains.js" + }, + "./contract": { + "types": "./dist/types/exports/contract.d.ts", + "import": "./dist/esm/exports/contract.js", + "default": "./dist/cjs/exports/contract.js" + }, + "./deploys": { + "types": "./dist/types/exports/deploys.d.ts", + "import": "./dist/esm/exports/deploys.js", + "default": "./dist/cjs/exports/deploys.js" + }, + "./event": { + "types": "./dist/types/exports/event.d.ts", + "import": "./dist/esm/exports/event.js", + "default": "./dist/cjs/exports/event.js" + }, + "./extensions/*": { + "types": "./dist/types/exports/extensions/*.d.ts", + "import": "./dist/esm/exports/extensions/*.js", + "default": "./dist/cjs/exports/extensions/*.js" + }, + "./pay": { + "types": "./dist/types/exports/pay.d.ts", + "import": "./dist/esm/exports/pay.js", + "default": "./dist/cjs/exports/pay.js" + }, + "./react": { + "types": "./dist/types/exports/react.d.ts", + "import": "./dist/esm/exports/react.js", + "react-native": "./dist/esm/exports/react.native.js", + "default": "./dist/cjs/exports/react.js" + }, + "./react-native": { + "types": "./dist/types/exports/react-native.d.ts", + "import": "./dist/esm/exports/react-native.js", + "default": "./dist/cjs/exports/react-native.js" + }, + "./rpc": { + "types": "./dist/types/exports/rpc.d.ts", + "import": "./dist/esm/exports/rpc.js", + "default": "./dist/cjs/exports/rpc.js" + }, + "./storage": { + "types": "./dist/types/exports/storage.d.ts", + "import": "./dist/esm/exports/storage.js", + "default": "./dist/cjs/exports/storage.js" + }, + "./transaction": { + "types": "./dist/types/exports/transaction.d.ts", + "import": "./dist/esm/exports/transaction.js", + "default": "./dist/cjs/exports/transaction.js" + }, + "./utils": { + "types": "./dist/types/exports/utils.d.ts", + "import": "./dist/esm/exports/utils.js", + "default": "./dist/cjs/exports/utils.js" + }, + "./wallets": { + "types": "./dist/types/exports/wallets.d.ts", + "import": "./dist/esm/exports/wallets.js", + "react-native": "./dist/esm/exports/wallets.native.js", + "default": "./dist/cjs/exports/wallets.js" + }, + "./wallets/in-app": { + "types": "./dist/types/exports/wallets/in-app.d.ts", + "import": "./dist/esm/exports/wallets/in-app.js", + "react-native": "./dist/esm/exports/wallets/in-app.native.js", + "default": "./dist/cjs/exports/wallets/in-app.js" + }, + "./wallets/*": { + "types": "./dist/types/exports/wallets/*.d.ts", + "import": "./dist/esm/exports/wallets/*.js", + "default": "./dist/cjs/exports/wallets/*.js" + }, + "./modules": { + "types": "./dist/types/exports/modules.d.ts", + "import": "./dist/esm/exports/modules.js", + "default": "./dist/cjs/exports/modules.js" + }, + "./social": { + "types": "./dist/types/exports/social.d.ts", + "import": "./dist/esm/exports/social.js", + "default": "./dist/cjs/exports/social.js" + }, + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "adapters/*": ["./dist/types/exports/adapters/*.d.ts"], + "auth": ["./dist/types/exports/auth.d.ts"], + "chains": ["./dist/types/exports/chains.d.ts"], + "contract": ["./dist/types/exports/contract.d.ts"], + "deploys": ["./dist/types/exports/deploys.d.ts"], + "event": ["./dist/types/exports/event.d.ts"], + "extensions/*": ["./dist/types/exports/extensions/*.d.ts"], + "pay": ["./dist/types/exports/pay.d.ts"], + "react": ["./dist/types/exports/react.d.ts"], + "react-native": ["./dist/types/exports/react-native.d.ts"], + "rpc": ["./dist/types/exports/rpc.d.ts"], + "storage": ["./dist/types/exports/storage.d.ts"], + "transaction": ["./dist/types/exports/transaction.d.ts"], + "utils": ["./dist/types/exports/utils.d.ts"], + "wallets": ["./dist/types/exports/wallets.d.ts"], + "wallets/*": ["./dist/types/exports/wallets/*.d.ts"], + "modules": ["./dist/types/exports/modules.d.ts"], + "social": ["./dist/types/exports/social.d.ts"] + } + }, + "browser": { + "crypto": false + }, + "sideEffects": false, + "files": [ + "dist/*", + "src/*", + "!**/*.tsbuildinfo", + "!**/*.test.ts", + "!**/*.test.tsx", + "!**/*.test.ts.snap", + "!**/*.test-d.ts", + "!**/*.bench.ts", + "!tsconfig.build.json" + ], + "dependencies": { + "@coinbase/wallet-sdk": "4.2.4", + "@emotion/react": "11.14.0", + "@emotion/styled": "11.14.0", + "@google/model-viewer": "2.1.1", + "@noble/curves": "1.7.0", + "@noble/hashes": "1.6.1", + "@passwordless-id/webauthn": "^2.1.2", + "@radix-ui/react-dialog": "1.1.2", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-icons": "1.3.2", + "@radix-ui/react-tooltip": "1.1.4", + "@tanstack/react-query": "5.62.7", + "@walletconnect/ethereum-provider": "2.17.2", + "@walletconnect/sign-client": "2.17.2", + "abitype": "1.0.7", + "fuse.js": "7.0.0", + "input-otp": "^1.4.1", + "mipd": "0.0.7", + "ox": "0.4.1", + "uqr": "0.1.2", + "viem": "2.21.54" + }, + "peerDependencies": { + "@aws-sdk/client-lambda": "^3", + "@aws-sdk/credential-providers": "^3", + "@coinbase/wallet-mobile-sdk": "^1", + "@mobile-wallet-protocol/client": "0.1.1", + "@react-native-async-storage/async-storage": "^1 || ^2", + "ethers": "^5 || ^6", + "expo-linking": "^6", + "expo-web-browser": "^13 || ^14", + "react": "^18 || ^19", + "react-native": "*", + "react-native-aes-gcm-crypto": "^0.2", + "react-native-passkey": "^3", + "react-native-quick-crypto": ">=0.7.0-rc.6 || >=0.7", + "react-native-svg": "^15", + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-native": { + "optional": true + }, + "ethers": { + "optional": true + }, + "typescript": { + "optional": true + }, + "react-native-aes-gcm-crypto": { + "optional": true + }, + "expo-linking": { + "optional": true + }, + "expo-web-browser": { + "optional": true + }, + "react-native-quick-crypto": { + "optional": true + }, + "react-native-passkey": { + "optional": true + }, + "react-native-svg": { + "optional": true + }, + "@aws-sdk/client-lambda": { + "optional": true + }, + "@aws-sdk/client-kms": { + "optional": true + }, + "@aws-sdk/credential-providers": { + "optional": true + }, + "@react-native-async-storage/async-storage": { + "optional": true + }, + "@coinbase/wallet-mobile-sdk": { + "optional": true + }, + "@mobile-wallet-protocol/client": { + "optional": true + } + }, + "scripts": { + "bench:compare": "bun run ./benchmarks/run.ts", + "bench": "vitest -c ./test/vitest.config.ts bench", + "format": "biome format ./src --write", + "lint": "knip && biome check ./src && tsc --project ./tsconfig.build.json --module esnext --noEmit", + "fix": "biome check ./src --fix", + "knip": "knip", + "build:generate": "bun scripts/generate/generate.ts", + "build:generate-wallets": "bun scripts/wallets/generate.ts", + "dev": "tsc --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm --watch", + "dev:cjs": "printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json && tsc --noCheck --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false --watch", + "dev:esm": "printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json && tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm --watch", + "build": "pnpm clean && pnpm build:types && pnpm build:cjs && pnpm build:esm", + "build:cjs": "tsc --noCheck --project ./tsconfig.build.json --module commonjs --outDir ./dist/cjs --verbatimModuleSyntax false && printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json", + "build:esm": "tsc --noCheck --project ./tsconfig.build.json --module es2020 --outDir ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json", + "build:types": "tsc --project ./tsconfig.build.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap", + "clean": "rimraf dist", + "size": "size-limit", + "test:watch": "vitest -c ./test/vitest.config.ts dev", + "test": "vitest run -c ./test/vitest.config.ts --coverage", + "test:cov": "vitest dev -c ./test/vitest.config.ts --coverage", + "test:ui": "vitest dev -c ./test/vitest.config.ts --coverage --ui", + "test:dev": "vitest run -c ./test/vitest.config.ts", + "test:react": "vitest run -c ./test/vitest.config.ts dev --ui src/react", + "typedoc": "node scripts/typedoc.mjs && node scripts/parse.mjs", + "update-version": "node scripts/version.mjs", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" + }, + "engines": { + "node": ">=18" + }, + "devDependencies": { + "@aws-sdk/client-kms": "3.592.0", + "@aws-sdk/client-lambda": "3.592.0", + "@aws-sdk/credential-providers": "3.592.0", + "@biomejs/biome": "1.9.4", + "@chromatic-com/storybook": "3.2.2", + "@codspeed/vitest-plugin": "4.0.0", + "@coinbase/wallet-mobile-sdk": "1.1.2", + "@mobile-wallet-protocol/client": "0.1.2", + "@react-native-async-storage/async-storage": "2.1.0", + "@size-limit/preset-big-lib": "11.1.6", + "@storybook/addon-essentials": "8.4.7", + "@storybook/addon-interactions": "8.4.7", + "@storybook/addon-links": "8.4.7", + "@storybook/addon-onboarding": "8.4.7", + "@storybook/react": "8.4.7", + "@storybook/react-vite": "8.4.7", + "@storybook/test": "8.4.7", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.1.0", + "@testing-library/user-event": "^14.5.2", + "@types/cross-spawn": "^6.0.6", + "@types/react": "19.0.1", + "@viem/anvil": "0.0.10", + "@vitejs/plugin-react": "^4.3.4", + "@vitest/coverage-v8": "2.1.8", + "@vitest/ui": "2.1.8", + "cross-spawn": "7.0.6", + "dotenv-mono": "^1.3.14", + "ethers5": "npm:ethers@5", + "ethers6": "npm:ethers@6", + "expo-linking": "7.0.3", + "expo-web-browser": "14.0.1", + "happy-dom": "15.11.7", + "knip": "5.39.4", + "msw": "2.6.8", + "prettier": "3.3.3", + "react": "19.0.0", + "react-dom": "19.0.0", + "react-native": "0.76.5", + "react-native-aes-gcm-crypto": "0.2.2", + "react-native-passkey": "3.0.0", + "react-native-quick-crypto": "0.7.8", + "react-native-svg": "15.10.1", + "rimraf": "6.0.1", + "sharp": "^0.33.5", + "size-limit": "11.1.6", + "storybook": "8.4.7", + "typedoc": "0.27.4", + "typedoc-better-json": "0.9.4", + "typescript": "5.7.2", + "vite": "6.0.3", + "vitest": "2.1.8" + } } diff --git a/packages/thirdweb/src/wallets/in-app/native/helpers/constants.ts b/packages/thirdweb/src/wallets/in-app/native/helpers/constants.ts index 130c1f2b4e1..b42317f6c0b 100644 --- a/packages/thirdweb/src/wallets/in-app/native/helpers/constants.ts +++ b/packages/thirdweb/src/wallets/in-app/native/helpers/constants.ts @@ -23,7 +23,7 @@ export const GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V1 = export const GENERATE_RECOVERY_PASSWORD_LAMBDA_FUNCTION_V2 = "arn:aws:lambda:us-west-2:324457261097:function:lambda-thirdweb-auth-enc-key-prod-ThirdwebAuthEncKeyFunction"; export const ENCLAVE_KMS_KEY_ARN = - "arn:aws:kms:us-west-2:324457261097:key/8b2a8cd5-9b22-4ea0-a6bc-463824a78f20"; + "arn:aws:kms:us-west-2:324457261097:key/ccfb9ecd-f45d-4f37-864a-25fe72dcb49e"; // TODO allow overriding domain const DOMAIN_URL_2023 = getThirdwebBaseUrl("inAppWallet"); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f610364c713..da358b8fcd6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -135,7 +135,7 @@ importers: version: 1.1.4(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@sentry/nextjs': specifier: 8.43.0 - version: 8.43.0(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(@swc/core@1.10.1)) + version: 8.43.0(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) '@shazow/whatsabi': specifier: ^0.17.0 version: 0.17.0(@noble/hashes@1.6.1)(typescript@5.7.2)(zod@3.24.1) @@ -150,7 +150,7 @@ importers: version: link:../../packages/service-utils '@vercel/functions': specifier: ^1.5.1 - version: 1.5.1(@aws-sdk/credential-provider-web-identity@3.709.0) + version: 1.5.1(@aws-sdk/credential-provider-web-identity@3.709.0(@aws-sdk/client-sts@3.709.0)) '@vercel/og': specifier: ^0.6.4 version: 0.6.4 @@ -279,7 +279,7 @@ importers: version: 2.5.5 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) + version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -328,7 +328,7 @@ importers: version: 8.4.7(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)) '@storybook/nextjs': specifier: 8.4.7 - version: 8.4.7(@swc/core@1.10.1)(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(type-fest@4.30.0)(typescript@5.7.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1)) + version: 8.4.7(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(type-fest@4.30.0)(typescript@5.7.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) '@storybook/react': specifier: 8.4.7 version: 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) @@ -376,7 +376,7 @@ importers: version: 10.4.20(postcss@8.4.49) checkly: specifier: ^4.15.0 - version: 4.15.0(@swc/core@1.10.1)(@types/node@22.10.2)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10) + version: 4.15.0(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10) eslint: specifier: 8.57.0 version: 8.57.0 @@ -403,7 +403,7 @@ importers: version: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) tailwindcss: specifier: 3.4.16 - version: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) + version: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) typescript: specifier: 5.7.2 version: 5.7.2 @@ -527,10 +527,10 @@ importers: version: 8.4.49 tailwindcss: specifier: 3.4.16 - version: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) + version: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) + version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))) typescript: specifier: 5.7.2 version: 5.7.2 @@ -542,13 +542,13 @@ importers: version: 1.0.6(react@19.0.0) '@mdx-js/loader': specifier: ^2.3.0 - version: 2.3.0(webpack@5.97.1) + version: 2.3.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) '@mdx-js/react': specifier: ^2.3.0 version: 2.3.0(react@19.0.0) '@next/mdx': specifier: 15.1.0 - version: 15.1.0(@mdx-js/loader@2.3.0(webpack@5.97.1))(@mdx-js/react@2.3.0(react@19.0.0)) + version: 15.1.0(@mdx-js/loader@2.3.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))))(@mdx-js/react@2.3.0(react@19.0.0)) '@radix-ui/react-dialog': specifier: 1.1.2 version: 1.1.2(@types/react-dom@19.0.2(@types/react@19.0.1))(@types/react@19.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) @@ -629,7 +629,7 @@ importers: version: 2.5.5 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) + version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -687,7 +687,7 @@ importers: version: 1.2.4 eslint-plugin-tailwindcss: specifier: ^3.17.5 - version: 3.17.5(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) + version: 3.17.5(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))) next-sitemap: specifier: ^4.2.3 version: 4.2.3(next@15.1.0(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)) @@ -696,7 +696,7 @@ importers: version: 8.4.49 tailwindcss: specifier: 3.4.16 - version: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) + version: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) tsx: specifier: 4.19.2 version: 4.19.2 @@ -765,7 +765,7 @@ importers: version: 2.5.5 tailwindcss-animate: specifier: ^1.0.7 - version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))) + version: 1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))) thirdweb: specifier: workspace:* version: link:../../packages/thirdweb @@ -814,7 +814,7 @@ importers: version: 6.0.1(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.1) tailwindcss: specifier: 3.4.16 - version: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) + version: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) typescript: specifier: 5.7.2 version: 5.7.2 @@ -822,14 +822,14 @@ importers: packages/react-native-adapter: dependencies: '@aws-sdk/client-kms': - specifier: 3.709.0 - version: 3.709.0 + specifier: 3.592.0 + version: 3.592.0 '@aws-sdk/client-lambda': - specifier: 3.709.0 - version: 3.709.0 + specifier: 3.592.0 + version: 3.592.0 '@aws-sdk/credential-providers': - specifier: 3.709.0 - version: 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0)) + specifier: 3.592.0 + version: 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0)) '@coinbase/wallet-mobile-sdk': specifier: ^1 version: 1.1.2(expo@52.0.18(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(bufferutil@4.0.8)(graphql@16.9.0)(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@16.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0)(utf-8-validate@5.0.10))(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@16.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0) @@ -864,7 +864,7 @@ importers: specifier: ^1 version: 1.11.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@16.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)) react-native-quick-crypto: - specifier: '>=0.7.0-rc.6 || >=0.7' + specifier: '>=0.7' version: 0.7.8(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@16.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10))(react@19.0.0) react-native-svg: specifier: ^15 @@ -969,14 +969,14 @@ importers: version: 2.21.54(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10)(zod@3.24.1) devDependencies: '@aws-sdk/client-kms': - specifier: 3.709.0 - version: 3.709.0 + specifier: 3.592.0 + version: 3.592.0 '@aws-sdk/client-lambda': - specifier: 3.709.0 - version: 3.709.0 + specifier: 3.592.0 + version: 3.592.0 '@aws-sdk/credential-providers': - specifier: 3.709.0 - version: 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0)) + specifier: 3.592.0 + version: 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0)) '@biomejs/biome': specifier: 1.9.4 version: 1.9.4 @@ -997,7 +997,7 @@ importers: version: 2.1.0(react-native@0.76.5(@babel/core@7.26.0)(@babel/preset-env@7.26.0(@babel/core@7.26.0))(@react-native-community/cli-server-api@16.0.0(bufferutil@4.0.8)(utf-8-validate@5.0.10))(@types/react@19.0.1)(bufferutil@4.0.8)(react@19.0.0)(utf-8-validate@5.0.10)) '@size-limit/preset-big-lib': specifier: 11.1.6 - version: 11.1.6(bufferutil@4.0.8)(esbuild@0.24.0)(size-limit@11.1.6)(utf-8-validate@5.0.10) + version: 11.1.6(bufferutil@4.0.8)(size-limit@11.1.6)(utf-8-validate@5.0.10) '@storybook/addon-essentials': specifier: 8.4.7 version: 8.4.7(@types/react@19.0.1)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.3.3)(utf-8-validate@5.0.10)) @@ -1172,29 +1172,48 @@ packages: resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} engines: {node: '>=16.0.0'} + '@aws-crypto/ie11-detection@3.0.0': + resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==} + + '@aws-crypto/sha256-browser@3.0.0': + resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==} + '@aws-crypto/sha256-browser@5.2.0': resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + '@aws-crypto/sha256-js@3.0.0': + resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==} + '@aws-crypto/sha256-js@5.2.0': resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} engines: {node: '>=16.0.0'} + '@aws-crypto/supports-web-crypto@3.0.0': + resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==} + '@aws-crypto/supports-web-crypto@5.2.0': resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + '@aws-crypto/util@3.0.0': + resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} + '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-cognito-identity@3.709.0': - resolution: {integrity: sha512-I5a8ilF+jKAz6fmOOuHy2UEcod9ikRGBjACcC6ayxs4z4VqTnWynD6ALKvtUR3lk1Ur6nzAG1tTm/qAYKKmyBg==} + '@aws-sdk/client-cognito-identity@3.592.0': + resolution: {integrity: sha512-mk3JOBsk5hlrLTZFuoGIhFKFflOdxqMKmOgyUFs5+gBLuH0/lN3wNWJxk+BiY1nHzkxhBND1hDHc5dvZRugBJA==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-kms@3.709.0': - resolution: {integrity: sha512-0qx0Dmsx5JiV4swrBr55lYRIhw6kYQul5aBOnzoGCMx1SFixtBKdzeQYp9lyaU9RPhst6KCE8J6mxG0CxkSQGw==} + '@aws-sdk/client-kms@3.592.0': + resolution: {integrity: sha512-BjarFhm7be+5SFKFIg+H9gxEuOkMjuYd+Rhh4BusmWkOH1/AXHPFpAvRJeWUYgSQs7z2KKpG/cmW4uGP5i8OLA==} engines: {node: '>=16.0.0'} - '@aws-sdk/client-lambda@3.709.0': - resolution: {integrity: sha512-MKnx5n7/Wp4qk+Wd1nJQGJ/520rNJDUnBbHTY3x8iPyeKK+8fNy25hWi0lV3gsHhTDvAcVb7UgSSJ5qNVec0GA==} + '@aws-sdk/client-lambda@3.592.0': + resolution: {integrity: sha512-uCtyrccg+qZ/KbZtY9OHb8dXG59yYDvoQULiQaj+73XkI/P4Z69prflg87cA5UpXoSeoAinCahwyJM5+G/EXYw==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/client-sso-oidc@3.592.0': + resolution: {integrity: sha512-11Zvm8nm0s/UF3XCjzFRpQU+8FFVW5rcr3BHfnH6xAe5JEoN6bJN/n+wOfnElnjek+90hh+Qc7s141AMrCjiiw==} engines: {node: '>=16.0.0'} '@aws-sdk/client-sso-oidc@3.709.0': @@ -1203,88 +1222,166 @@ packages: peerDependencies: '@aws-sdk/client-sts': ^3.709.0 + '@aws-sdk/client-sso@3.592.0': + resolution: {integrity: sha512-w+SuW47jQqvOC7fonyjFjsOh3yjqJ+VpWdVrmrl0E/KryBE7ho/Wn991Buf/EiHHeJikoWgHsAIPkBH29+ntdA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/client-sso@3.709.0': resolution: {integrity: sha512-Qxeo8cN0jNy6Wnbqq4wucffAGJM6sJjofoTgNtPA6cC7sPYx7aYC6OAAAo6NaMRY+WywOKdS9Wgjx2QYRxKx7w==} engines: {node: '>=16.0.0'} + '@aws-sdk/client-sts@3.592.0': + resolution: {integrity: sha512-KUrOdszZfcrlpKr4dpdkGibZ/qq3Lnfu1rjv1U+V1QJQ9OuMo9J3sDWpWV9tigNqY0aGllarWH5cJbz9868W/w==} + engines: {node: '>=16.0.0'} + '@aws-sdk/client-sts@3.709.0': resolution: {integrity: sha512-cBAvlPg6yslXNL385UUGFPw+XY+lA9BzioNdIFkMo3fEUlTShogTtiWz4LsyLHoN6LhKojssP9DSmmWKWjCZIw==} engines: {node: '>=16.0.0'} + '@aws-sdk/core@3.592.0': + resolution: {integrity: sha512-gLPMXR/HXDP+9gXAt58t7gaMTvRts9i6Q7NMISpkGF54wehskl5WGrbdtHJFylrlJ5BQo3XVY6i661o+EuR1wg==} + engines: {node: '>=16.0.0'} + '@aws-sdk/core@3.709.0': resolution: {integrity: sha512-7kuSpzdOTAE026j85wq/fN9UDZ70n0OHw81vFqMWwlEFtm5IQ/MRCLKcC4HkXxTdfy1PqFlmoXxWqeBa15tujw==} engines: {node: '>=16.0.0'} - '@aws-sdk/credential-provider-cognito-identity@3.709.0': - resolution: {integrity: sha512-WLzDcYo7pob8fPeeOhgVqYuV21uUKWb1RobITQzZhv0ZSToIl1KjuyRQsznC23Sot9CFl+0V2QLFFNwRiIuH7w==} + '@aws-sdk/credential-provider-cognito-identity@3.592.0': + resolution: {integrity: sha512-uHiMPCkFhZOhlSfKgVqPhMdruiOuVkLUn07gQqvxHYhFKkEOPV+6BZbPKBwBTXr8TIREztQzCMPswa5pGk2zbQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/credential-provider-env@3.587.0': + resolution: {integrity: sha512-Hyg/5KFECIk2k5o8wnVEiniV86yVkhn5kzITUydmNGCkXdBFHMHRx6hleQ1bqwJHbBskyu8nbYamzcwymmGwmw==} engines: {node: '>=16.0.0'} '@aws-sdk/credential-provider-env@3.709.0': resolution: {integrity: sha512-ZMAp9LSikvHDFVa84dKpQmow6wsg956Um20cKuioPpX2GGreJFur7oduD+tRJT6FtIOHn+64YH+0MwiXLhsaIQ==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-http@3.587.0': + resolution: {integrity: sha512-Su1SRWVRCuR1e32oxX3C1V4c5hpPN20WYcRfdcr2wXwHqSvys5DrnmuCC+JoEnS/zt3adUJhPliTqpfKgSdMrA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-http@3.709.0': resolution: {integrity: sha512-lIS7XLwCOyJnLD70f+VIRr8DNV1HPQe9oN6aguYrhoczqz7vDiVZLe3lh714cJqq9rdxzFypK5DqKHmcscMEPQ==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-ini@3.592.0': + resolution: {integrity: sha512-3kG6ngCIOPbLJZZ3RV+NsU7HVK6vX1+1DrPJKj9fVlPYn7IXsk8NAaUT5885yC7+jKizjv0cWLrLKvAJV5gfUA==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.592.0 + '@aws-sdk/credential-provider-ini@3.709.0': resolution: {integrity: sha512-qCF8IIGcPoUp+Ib3ANhbF5gElxFd+kIrtv2/1tKdvhudMANstQbMiWV0LTH47ZZR6c3as4iSrm09NZnpEoD/pA==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sts': ^3.709.0 + '@aws-sdk/credential-provider-node@3.592.0': + resolution: {integrity: sha512-BguihBGTrEjVBQ07hm+ZsO29eNJaxwBwUZMftgGAm2XcMIEClNPfm5hydxu2BmA4ouIJQJ6nG8pNYghEumM+Aw==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-node@3.709.0': resolution: {integrity: sha512-4HRX9KYWPSjO5O/Vg03YAsebKpvTjTvpK1n7zHYBmlLMBLxUrVsL1nNKKC5p2/7OW3RL8XR1ki3QkoV7kGRxUQ==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-process@3.587.0': + resolution: {integrity: sha512-V4xT3iCqkF8uL6QC4gqBJg/2asd/damswP1h9HCfqTllmPWzImS+8WD3VjgTLw5b0KbTy+ZdUhKc0wDnyzkzxg==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-process@3.709.0': resolution: {integrity: sha512-IAC+jPlGQII6jhIylHOwh3RgSobqlgL59nw2qYTURr8hMCI0Z1p5y2ee646HTVt4WeCYyzUAXfxr6YI/Vitv+Q==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-sso@3.592.0': + resolution: {integrity: sha512-fYFzAdDHKHvhtufPPtrLdSv8lO6GuW3em6n3erM5uFdpGytNpjXvr3XGokIsuXcNkETAY/Xihg+G9ksNE8WJxQ==} + engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-sso@3.709.0': resolution: {integrity: sha512-rYdTDOxazS2GdGScelsRK5CAkktRLCCdRjlwXaxrcW57j749hEqxcF5uTv9RD6WBwInfedcSywErNZB+hylQlg==} engines: {node: '>=16.0.0'} + '@aws-sdk/credential-provider-web-identity@3.587.0': + resolution: {integrity: sha512-XqIx/I2PG7kyuw3WjAP9wKlxy8IvFJwB8asOFT1xPFoVfZYKIogjG9oLP5YiRtfvDkWIztHmg5MlVv3HdJDGRw==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sts': ^3.587.0 + '@aws-sdk/credential-provider-web-identity@3.709.0': resolution: {integrity: sha512-2lbDfE0IQ6gma/7BB2JpkjW5G0wGe4AS0x80oybYAYYviJmUtIR3Cn2pXun6bnAWElt4wYKl4su7oC36rs5rNA==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sts': ^3.709.0 - '@aws-sdk/credential-providers@3.709.0': - resolution: {integrity: sha512-v1OfAWhYhAz7XPtjWlQ3jDLZHCpuNrLP2bRWTEjRty8yZLN92ANehincULUGvUNszFO8rfpq2g4dmtk8XmqTzA==} + '@aws-sdk/credential-providers@3.592.0': + resolution: {integrity: sha512-fHAt001Aemiy9p8VtLKWiPQ36g1YgiLC1pm31W+WmKxU663dbt2yYTIAyVOB1nQC7HrVCOZEg2FU0TtuZt/wXQ==} + engines: {node: '>=16.0.0'} + + '@aws-sdk/middleware-host-header@3.577.0': + resolution: {integrity: sha512-9ca5MJz455CODIVXs0/sWmJm7t3QO4EUa1zf8pE8grLpzf0J94bz/skDWm37Pli13T3WaAQBHCTiH2gUVfCsWg==} engines: {node: '>=16.0.0'} '@aws-sdk/middleware-host-header@3.709.0': resolution: {integrity: sha512-8gQYCYAaIw4lOCd5WYdf15Y/61MgRsAnrb2eiTl+icMlUOOzl8aOl5iDwm/Idp0oHZTflwxM4XSvGXO83PRWcw==} engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-logger@3.577.0': + resolution: {integrity: sha512-aPFGpGjTZcJYk+24bg7jT4XdIp42mFXSuPt49lw5KygefLyJM/sB0bKKqPYYivW0rcuZ9brQ58eZUNthrzYAvg==} + engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-logger@3.709.0': resolution: {integrity: sha512-jDoGSccXv9zebnpUoisjWd5u5ZPIalrmm6TjvPzZ8UqzQt3Beiz0tnQwmxQD6KRc7ADweWP5Ntiqzbw9xpVajg==} engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-recursion-detection@3.577.0': + resolution: {integrity: sha512-pn3ZVEd2iobKJlR3H+bDilHjgRnNrQ6HMmK9ZzZw89Ckn3Dcbv48xOv4RJvu0aU8SDLl/SNCxppKjeLDTPGBNA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-recursion-detection@3.709.0': resolution: {integrity: sha512-PObL/wLr4lkfbQ0yXUWaoCWu/jcwfwZzCjsUiXW/H6hW9b/00enZxmx7OhtJYaR6xmh/Lcx5wbhIoDCbzdv0tw==} engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-user-agent@3.587.0': + resolution: {integrity: sha512-SyDomN+IOrygLucziG7/nOHkjUXES5oH5T7p8AboO8oakMQJdnudNXiYWTicQWO52R51U6CR27rcMPTGeMedYA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/middleware-user-agent@3.709.0': resolution: {integrity: sha512-ooc9ZJvgkjPhi9q05XwSfNTXkEBEIfL4hleo5rQBKwHG3aTHvwOM7LLzhdX56QZVa6sorPBp6fwULuRDSqiQHw==} engines: {node: '>=16.0.0'} + '@aws-sdk/region-config-resolver@3.587.0': + resolution: {integrity: sha512-93I7IPZtulZQoRK+O20IJ4a1syWwYPzoO2gc3v+/GNZflZPV3QJXuVbIm0pxBsu0n/mzKGUKqSOLPIaN098HcQ==} + engines: {node: '>=16.0.0'} + '@aws-sdk/region-config-resolver@3.709.0': resolution: {integrity: sha512-/NoCAMEVKAg3kBKOrNtgOfL+ECt6nrl+L7q2SyYmrcY4tVCmwuECVqewQaHc03fTnJijfKLccw0Fj+6wOCnB6w==} engines: {node: '>=16.0.0'} + '@aws-sdk/token-providers@3.587.0': + resolution: {integrity: sha512-ULqhbnLy1hmJNRcukANBWJmum3BbjXnurLPSFXoGdV0llXYlG55SzIla2VYqdveQEEjmsBuTZdFvXAtNpmS5Zg==} + engines: {node: '>=16.0.0'} + peerDependencies: + '@aws-sdk/client-sso-oidc': ^3.587.0 + '@aws-sdk/token-providers@3.709.0': resolution: {integrity: sha512-q5Ar6k71nci43IbULFgC8a89d/3EHpmd7HvBzqVGRcHnoPwh8eZDBfbBXKH83NGwcS1qPSRYiDbVfeWPm4/1jA==} engines: {node: '>=16.0.0'} peerDependencies: '@aws-sdk/client-sso-oidc': ^3.709.0 + '@aws-sdk/types@3.577.0': + resolution: {integrity: sha512-FT2JZES3wBKN/alfmhlo+3ZOq/XJ0C7QOZcDNrpKjB0kqYoKjhVKZ/Hx6ArR0czkKfHzBBEs6y40ebIHx2nSmA==} + engines: {node: '>=16.0.0'} + '@aws-sdk/types@3.709.0': resolution: {integrity: sha512-ArtLTMxgjf13Kfu3gWH3Ez9Q5TkDdcRZUofpKH3pMGB/C6KAbeSCtIIDKfoRTUABzyGlPyCrZdnFjKyH+ypIpg==} engines: {node: '>=16.0.0'} + '@aws-sdk/util-endpoints@3.587.0': + resolution: {integrity: sha512-8I1HG6Em8wQWqKcRW6m358mqebRVNpL8XrrEoT4In7xqkKkmYtHRNVYP6lcmiQh5pZ/c/FXu8dSchuFIWyEtqQ==} + engines: {node: '>=16.0.0'} + '@aws-sdk/util-endpoints@3.709.0': resolution: {integrity: sha512-Mbc7AtL5WGCTKC16IGeUTz+sjpC3ptBda2t0CcK0kMVw3THDdcSq6ZlNKO747cNqdbwUvW34oHteUiHv4/z88Q==} engines: {node: '>=16.0.0'} @@ -1293,9 +1390,21 @@ packages: resolution: {integrity: sha512-ttrag6haJLWABhLqtg1Uf+4LgHWIMOVSYL+VYZmAp2v4PUGOwWmWQH0Zk8RM7YuQcLfH/EoR72/Yxz6A4FKcuw==} engines: {node: '>=16.0.0'} + '@aws-sdk/util-user-agent-browser@3.577.0': + resolution: {integrity: sha512-zEAzHgR6HWpZOH7xFgeJLc6/CzMcx4nxeQolZxVZoB5pPaJd3CjyRhZN0xXeZB0XIRCWmb4yJBgyiugXLNMkLA==} + '@aws-sdk/util-user-agent-browser@3.709.0': resolution: {integrity: sha512-/rL2GasJzdTWUURCQKFldw2wqBtY4k4kCiA2tVZSKg3y4Ey7zO34SW8ebaeCE2/xoWOyLR2/etdKyphoo4Zrtg==} + '@aws-sdk/util-user-agent-node@3.587.0': + resolution: {integrity: sha512-Pnl+DUe/bvnbEEDHP3iVJrOtE3HbFJBPgsD6vJ+ml/+IYk1Eq49jEG+EHZdNTPz3SDG0kbp2+7u41MKYJHR/iQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + '@aws-sdk/util-user-agent-node@3.709.0': resolution: {integrity: sha512-trBfzSCVWy7ILgqhEXgiuM7hfRCw4F4a8IK90tjk9YL0jgoJ6eJuOp7+DfCtHJaygoBxD3cdMFkOu+lluFmGBA==} engines: {node: '>=16.0.0'} @@ -1305,6 +1414,9 @@ packages: aws-crt: optional: true + '@aws-sdk/util-utf8-browser@3.259.0': + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + '@babel/code-frame@7.10.4': resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} @@ -4897,6 +5009,9 @@ packages: resolution: {integrity: sha512-L1Ib66+gg9uTnqp/18Gz4MDpJPKRE44geOjOQ2SVc0eiaO5l255ADziATZgjQjqumC7yPtp1XnjHlF1srcwjKw==} engines: {node: '>=16.0.0'} + '@smithy/fetch-http-handler@3.2.9': + resolution: {integrity: sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==} + '@smithy/fetch-http-handler@4.1.2': resolution: {integrity: sha512-R7rU7Ae3ItU4rC0c5mB2sP5mJNbCfoDc8I5XlYjIZnquyUwec7fEo78F6DA3SmgJgkU1qTMcZJuGblxZsl10ZA==} @@ -4967,6 +5082,10 @@ packages: resolution: {integrity: sha512-1xKSGI+U9KKdbG2qDvIR9dGrw3CNx+baqJfyr0igKEpjbHL5stsqAesYBzHChYHlelWtb87VnLWlhvfCz13H8Q==} engines: {node: '>=16.0.0'} + '@smithy/signature-v4@3.1.2': + resolution: {integrity: sha512-3BcPylEsYtD0esM4Hoyml/+s7WP2LFhcM3J2AGdcL2vx9O60TtfpDOL72gjb4lU8NeRPeKAwR77YNyyGvMbuEA==} + engines: {node: '>=16.0.0'} + '@smithy/signature-v4@4.2.4': resolution: {integrity: sha512-5JWeMQYg81TgU4cG+OexAWdvDTs5JDdbEZx+Qr1iPbvo91QFGzjy0IkXAKaXUHqmKUJgSHK0ZxnCkgZpzkeNTA==} engines: {node: '>=16.0.0'} @@ -8317,6 +8436,10 @@ packages: fast-uri@3.0.3: resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} + fast-xml-parser@4.2.5: + resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==} + hasBin: true + fast-xml-parser@4.4.1: resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} hasBin: true @@ -12851,12 +12974,15 @@ packages: sudo-prompt@8.2.5: resolution: {integrity: sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. sudo-prompt@9.1.1: resolution: {integrity: sha512-es33J1g2HjMpyAhz8lOR+ICmXXAqTuKbuXuUWLhOLew20oN9oUCgCJx615U/v7aioZg7IX5lIh9x34vwneu4pA==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. sudo-prompt@9.2.1: resolution: {integrity: sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. summary@2.1.0: resolution: {integrity: sha512-nMIjMrd5Z2nuB2RZCKJfFMjgS3fygbeyGk9PxPPaJR1RIcyN9yn4A63Isovzm3ZtQuEkLBVgMdPup8UeLH7aQw==} @@ -14167,6 +14293,21 @@ snapshots: '@aws-sdk/types': 3.709.0 tslib: 2.8.1 + '@aws-crypto/ie11-detection@3.0.0': + dependencies: + tslib: 1.14.1 + + '@aws-crypto/sha256-browser@3.0.0': + dependencies: + '@aws-crypto/ie11-detection': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-crypto/supports-web-crypto': 3.0.0 + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.709.0 + '@aws-sdk/util-locate-window': 3.693.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + '@aws-crypto/sha256-browser@5.2.0': dependencies: '@aws-crypto/sha256-js': 5.2.0 @@ -14177,42 +14318,58 @@ snapshots: '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 + '@aws-crypto/sha256-js@3.0.0': + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.709.0 + tslib: 1.14.1 + '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 '@aws-sdk/types': 3.709.0 tslib: 2.8.1 + '@aws-crypto/supports-web-crypto@3.0.0': + dependencies: + tslib: 1.14.1 + '@aws-crypto/supports-web-crypto@5.2.0': dependencies: tslib: 2.8.1 + '@aws-crypto/util@3.0.0': + dependencies: + '@aws-sdk/types': 3.709.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 1.14.1 + '@aws-crypto/util@5.2.0': dependencies: '@aws-sdk/types': 3.709.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-cognito-identity@3.709.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.709.0(@aws-sdk/client-sts@3.709.0) - '@aws-sdk/client-sts': 3.709.0 - '@aws-sdk/core': 3.709.0 - '@aws-sdk/credential-provider-node': 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))(@aws-sdk/client-sts@3.709.0) - '@aws-sdk/middleware-host-header': 3.709.0 - '@aws-sdk/middleware-logger': 3.709.0 - '@aws-sdk/middleware-recursion-detection': 3.709.0 - '@aws-sdk/middleware-user-agent': 3.709.0 - '@aws-sdk/region-config-resolver': 3.709.0 - '@aws-sdk/types': 3.709.0 - '@aws-sdk/util-endpoints': 3.709.0 - '@aws-sdk/util-user-agent-browser': 3.709.0 - '@aws-sdk/util-user-agent-node': 3.709.0 + '@aws-sdk/client-cognito-identity@3.592.0': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/core': 3.592.0 + '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.587.0 + '@aws-sdk/region-config-resolver': 3.587.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.587.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.587.0 '@smithy/config-resolver': 3.0.13 '@smithy/core': 2.5.5 - '@smithy/fetch-http-handler': 4.1.2 + '@smithy/fetch-http-handler': 3.2.9 '@smithy/hash-node': 3.0.11 '@smithy/invalid-dependency': 3.0.11 '@smithy/middleware-content-length': 3.0.13 @@ -14239,26 +14396,122 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-kms@3.709.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.709.0(@aws-sdk/client-sts@3.709.0) - '@aws-sdk/client-sts': 3.709.0 - '@aws-sdk/core': 3.709.0 - '@aws-sdk/credential-provider-node': 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))(@aws-sdk/client-sts@3.709.0) - '@aws-sdk/middleware-host-header': 3.709.0 - '@aws-sdk/middleware-logger': 3.709.0 - '@aws-sdk/middleware-recursion-detection': 3.709.0 - '@aws-sdk/middleware-user-agent': 3.709.0 - '@aws-sdk/region-config-resolver': 3.709.0 - '@aws-sdk/types': 3.709.0 - '@aws-sdk/util-endpoints': 3.709.0 - '@aws-sdk/util-user-agent-browser': 3.709.0 - '@aws-sdk/util-user-agent-node': 3.709.0 + '@aws-sdk/client-kms@3.592.0': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/core': 3.592.0 + '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.587.0 + '@aws-sdk/region-config-resolver': 3.587.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.587.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.587.0 '@smithy/config-resolver': 3.0.13 '@smithy/core': 2.5.5 - '@smithy/fetch-http-handler': 4.1.2 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.11 + '@smithy/invalid-dependency': 3.0.11 + '@smithy/middleware-content-length': 3.0.13 + '@smithy/middleware-endpoint': 3.2.5 + '@smithy/middleware-retry': 3.0.30 + '@smithy/middleware-serde': 3.0.11 + '@smithy/middleware-stack': 3.0.11 + '@smithy/node-config-provider': 3.1.12 + '@smithy/node-http-handler': 3.3.2 + '@smithy/protocol-http': 4.1.8 + '@smithy/smithy-client': 3.5.0 + '@smithy/types': 3.7.2 + '@smithy/url-parser': 3.0.11 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.30 + '@smithy/util-defaults-mode-node': 3.0.30 + '@smithy/util-endpoints': 2.1.7 + '@smithy/util-middleware': 3.0.11 + '@smithy/util-retry': 3.0.11 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-lambda@3.592.0': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/core': 3.592.0 + '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.587.0 + '@aws-sdk/region-config-resolver': 3.587.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.587.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.587.0 + '@smithy/config-resolver': 3.0.13 + '@smithy/core': 2.5.5 + '@smithy/eventstream-serde-browser': 3.0.14 + '@smithy/eventstream-serde-config-resolver': 3.0.11 + '@smithy/eventstream-serde-node': 3.0.13 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.11 + '@smithy/invalid-dependency': 3.0.11 + '@smithy/middleware-content-length': 3.0.13 + '@smithy/middleware-endpoint': 3.2.5 + '@smithy/middleware-retry': 3.0.30 + '@smithy/middleware-serde': 3.0.11 + '@smithy/middleware-stack': 3.0.11 + '@smithy/node-config-provider': 3.1.12 + '@smithy/node-http-handler': 3.3.2 + '@smithy/protocol-http': 4.1.8 + '@smithy/smithy-client': 3.5.0 + '@smithy/types': 3.7.2 + '@smithy/url-parser': 3.0.11 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.30 + '@smithy/util-defaults-mode-node': 3.0.30 + '@smithy/util-endpoints': 2.1.7 + '@smithy/util-middleware': 3.0.11 + '@smithy/util-retry': 3.0.11 + '@smithy/util-stream': 3.3.2 + '@smithy/util-utf8': 3.0.0 + '@smithy/util-waiter': 3.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0)': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/core': 3.592.0 + '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.587.0 + '@aws-sdk/region-config-resolver': 3.587.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.587.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.587.0 + '@smithy/config-resolver': 3.0.13 + '@smithy/core': 2.5.5 + '@smithy/fetch-http-handler': 3.2.9 '@smithy/hash-node': 3.0.11 '@smithy/invalid-dependency': 3.0.11 '@smithy/middleware-content-length': 3.0.13 @@ -14283,16 +14536,16 @@ snapshots: '@smithy/util-utf8': 3.0.0 tslib: 2.8.1 transitivePeerDependencies: + - '@aws-sdk/client-sts' - aws-crt - '@aws-sdk/client-lambda@3.709.0': + '@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0)': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/client-sso-oidc': 3.709.0(@aws-sdk/client-sts@3.709.0) - '@aws-sdk/client-sts': 3.709.0 + '@aws-sdk/client-sts': 3.592.0 '@aws-sdk/core': 3.709.0 - '@aws-sdk/credential-provider-node': 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))(@aws-sdk/client-sts@3.709.0) + '@aws-sdk/credential-provider-node': 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) '@aws-sdk/middleware-host-header': 3.709.0 '@aws-sdk/middleware-logger': 3.709.0 '@aws-sdk/middleware-recursion-detection': 3.709.0 @@ -14304,9 +14557,6 @@ snapshots: '@aws-sdk/util-user-agent-node': 3.709.0 '@smithy/config-resolver': 3.0.13 '@smithy/core': 2.5.5 - '@smithy/eventstream-serde-browser': 3.0.14 - '@smithy/eventstream-serde-config-resolver': 3.0.11 - '@smithy/eventstream-serde-node': 3.0.13 '@smithy/fetch-http-handler': 4.1.2 '@smithy/hash-node': 3.0.11 '@smithy/invalid-dependency': 3.0.11 @@ -14329,9 +14579,7 @@ snapshots: '@smithy/util-endpoints': 2.1.7 '@smithy/util-middleware': 3.0.11 '@smithy/util-retry': 3.0.11 - '@smithy/util-stream': 3.3.2 '@smithy/util-utf8': 3.0.0 - '@smithy/util-waiter': 3.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt @@ -14381,6 +14629,49 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-sso@3.592.0': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/core': 3.592.0 + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.587.0 + '@aws-sdk/region-config-resolver': 3.587.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.587.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.587.0 + '@smithy/config-resolver': 3.0.13 + '@smithy/core': 2.5.5 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.11 + '@smithy/invalid-dependency': 3.0.11 + '@smithy/middleware-content-length': 3.0.13 + '@smithy/middleware-endpoint': 3.2.5 + '@smithy/middleware-retry': 3.0.30 + '@smithy/middleware-serde': 3.0.11 + '@smithy/middleware-stack': 3.0.11 + '@smithy/node-config-provider': 3.1.12 + '@smithy/node-http-handler': 3.3.2 + '@smithy/protocol-http': 4.1.8 + '@smithy/smithy-client': 3.5.0 + '@smithy/types': 3.7.2 + '@smithy/url-parser': 3.0.11 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.30 + '@smithy/util-defaults-mode-node': 3.0.30 + '@smithy/util-endpoints': 2.1.7 + '@smithy/util-middleware': 3.0.11 + '@smithy/util-retry': 3.0.11 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/client-sso@3.709.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -14424,6 +14715,51 @@ snapshots: transitivePeerDependencies: - aws-crt + '@aws-sdk/client-sts@3.592.0': + dependencies: + '@aws-crypto/sha256-browser': 3.0.0 + '@aws-crypto/sha256-js': 3.0.0 + '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/core': 3.592.0 + '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/middleware-host-header': 3.577.0 + '@aws-sdk/middleware-logger': 3.577.0 + '@aws-sdk/middleware-recursion-detection': 3.577.0 + '@aws-sdk/middleware-user-agent': 3.587.0 + '@aws-sdk/region-config-resolver': 3.587.0 + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.587.0 + '@aws-sdk/util-user-agent-browser': 3.577.0 + '@aws-sdk/util-user-agent-node': 3.587.0 + '@smithy/config-resolver': 3.0.13 + '@smithy/core': 2.5.5 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/hash-node': 3.0.11 + '@smithy/invalid-dependency': 3.0.11 + '@smithy/middleware-content-length': 3.0.13 + '@smithy/middleware-endpoint': 3.2.5 + '@smithy/middleware-retry': 3.0.30 + '@smithy/middleware-serde': 3.0.11 + '@smithy/middleware-stack': 3.0.11 + '@smithy/node-config-provider': 3.1.12 + '@smithy/node-http-handler': 3.3.2 + '@smithy/protocol-http': 4.1.8 + '@smithy/smithy-client': 3.5.0 + '@smithy/types': 3.7.2 + '@smithy/url-parser': 3.0.11 + '@smithy/util-base64': 3.0.0 + '@smithy/util-body-length-browser': 3.0.0 + '@smithy/util-body-length-node': 3.0.0 + '@smithy/util-defaults-mode-browser': 3.0.30 + '@smithy/util-defaults-mode-node': 3.0.30 + '@smithy/util-endpoints': 2.1.7 + '@smithy/util-middleware': 3.0.11 + '@smithy/util-retry': 3.0.11 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + '@aws-sdk/client-sts@3.709.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 @@ -14469,60 +14805,274 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.709.0': + '@aws-sdk/core@3.592.0': + dependencies: + '@smithy/core': 2.5.5 + '@smithy/protocol-http': 4.1.8 + '@smithy/signature-v4': 3.1.2 + '@smithy/smithy-client': 3.5.0 + '@smithy/types': 3.7.2 + fast-xml-parser: 4.2.5 + tslib: 2.8.1 + + '@aws-sdk/core@3.709.0': + dependencies: + '@aws-sdk/types': 3.709.0 + '@smithy/core': 2.5.5 + '@smithy/node-config-provider': 3.1.12 + '@smithy/property-provider': 3.1.11 + '@smithy/protocol-http': 4.1.8 + '@smithy/signature-v4': 4.2.4 + '@smithy/smithy-client': 3.5.0 + '@smithy/types': 3.7.2 + '@smithy/util-middleware': 3.0.11 + fast-xml-parser: 4.4.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-cognito-identity@3.592.0': + dependencies: + '@aws-sdk/client-cognito-identity': 3.592.0 + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.11 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-env@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.11 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.709.0': + dependencies: + '@aws-sdk/core': 3.709.0 + '@aws-sdk/types': 3.709.0 + '@smithy/property-provider': 3.1.11 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/fetch-http-handler': 3.2.9 + '@smithy/node-http-handler': 3.3.2 + '@smithy/property-provider': 3.1.11 + '@smithy/protocol-http': 4.1.8 + '@smithy/smithy-client': 3.5.0 + '@smithy/types': 3.7.2 + '@smithy/util-stream': 3.3.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.709.0': + dependencies: + '@aws-sdk/core': 3.709.0 + '@aws-sdk/types': 3.709.0 + '@smithy/fetch-http-handler': 4.1.2 + '@smithy/node-http-handler': 3.3.2 + '@smithy/property-provider': 3.1.11 + '@smithy/protocol-http': 4.1.8 + '@smithy/smithy-client': 3.5.0 + '@smithy/types': 3.7.2 + '@smithy/util-stream': 3.3.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0)': + dependencies: + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0) + '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.2.8 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-ini@3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0)': + dependencies: + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0) + '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.2.8 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-ini@3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0)': + dependencies: + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0)) + '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.2.8 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-ini@3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))(@aws-sdk/client-sts@3.592.0)': + dependencies: + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0)) + '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.2.8 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-ini@3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0)': dependencies: + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/core': 3.709.0 + '@aws-sdk/credential-provider-env': 3.709.0 + '@aws-sdk/credential-provider-http': 3.709.0 + '@aws-sdk/credential-provider-process': 3.709.0 + '@aws-sdk/credential-provider-sso': 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0)) + '@aws-sdk/credential-provider-web-identity': 3.709.0(@aws-sdk/client-sts@3.592.0) '@aws-sdk/types': 3.709.0 - '@smithy/core': 2.5.5 - '@smithy/node-config-provider': 3.1.12 + '@smithy/credential-provider-imds': 3.2.8 '@smithy/property-provider': 3.1.11 - '@smithy/protocol-http': 4.1.8 - '@smithy/signature-v4': 4.2.4 - '@smithy/smithy-client': 3.5.0 + '@smithy/shared-ini-file-loader': 3.1.12 '@smithy/types': 3.7.2 - '@smithy/util-middleware': 3.0.11 - fast-xml-parser: 4.4.1 tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt - '@aws-sdk/credential-provider-cognito-identity@3.709.0': + '@aws-sdk/credential-provider-ini@3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))(@aws-sdk/client-sts@3.709.0)': dependencies: - '@aws-sdk/client-cognito-identity': 3.709.0 + '@aws-sdk/client-sts': 3.709.0 + '@aws-sdk/core': 3.709.0 + '@aws-sdk/credential-provider-env': 3.709.0 + '@aws-sdk/credential-provider-http': 3.709.0 + '@aws-sdk/credential-provider-process': 3.709.0 + '@aws-sdk/credential-provider-sso': 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0)) + '@aws-sdk/credential-provider-web-identity': 3.709.0(@aws-sdk/client-sts@3.709.0) '@aws-sdk/types': 3.709.0 + '@smithy/credential-provider-imds': 3.2.8 '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 '@smithy/types': 3.7.2 tslib: 2.8.1 transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-env@3.709.0': + '@aws-sdk/credential-provider-node@3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0)': dependencies: - '@aws-sdk/core': 3.709.0 - '@aws-sdk/types': 3.709.0 + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-ini': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0) + '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.2.8 '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 '@smithy/types': 3.7.2 tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt - '@aws-sdk/credential-provider-http@3.709.0': + '@aws-sdk/credential-provider-node@3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0)': dependencies: - '@aws-sdk/core': 3.709.0 - '@aws-sdk/types': 3.709.0 - '@smithy/fetch-http-handler': 4.1.2 - '@smithy/node-http-handler': 3.3.2 + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-ini': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0)(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.592.0) + '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.2.8 '@smithy/property-provider': 3.1.11 - '@smithy/protocol-http': 4.1.8 - '@smithy/smithy-client': 3.5.0 + '@smithy/shared-ini-file-loader': 3.1.12 '@smithy/types': 3.7.2 - '@smithy/util-stream': 3.3.2 tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt - '@aws-sdk/credential-provider-ini@3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))(@aws-sdk/client-sts@3.709.0)': + '@aws-sdk/credential-provider-node@3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-ini': 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0)) + '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.2.8 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + + '@aws-sdk/credential-provider-node@3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))(@aws-sdk/client-sts@3.592.0)': + dependencies: + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-ini': 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0)) + '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.2.8 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' + - aws-crt + + '@aws-sdk/credential-provider-node@3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0)': dependencies: - '@aws-sdk/client-sts': 3.709.0 - '@aws-sdk/core': 3.709.0 '@aws-sdk/credential-provider-env': 3.709.0 '@aws-sdk/credential-provider-http': 3.709.0 + '@aws-sdk/credential-provider-ini': 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) '@aws-sdk/credential-provider-process': 3.709.0 - '@aws-sdk/credential-provider-sso': 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0)) - '@aws-sdk/credential-provider-web-identity': 3.709.0(@aws-sdk/client-sts@3.709.0) + '@aws-sdk/credential-provider-sso': 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0)) + '@aws-sdk/credential-provider-web-identity': 3.709.0(@aws-sdk/client-sts@3.592.0) '@aws-sdk/types': 3.709.0 '@smithy/credential-provider-imds': 3.2.8 '@smithy/property-provider': 3.1.11 @@ -14531,6 +15081,7 @@ snapshots: tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/client-sso-oidc' + - '@aws-sdk/client-sts' - aws-crt '@aws-sdk/credential-provider-node@3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))(@aws-sdk/client-sts@3.709.0)': @@ -14552,6 +15103,14 @@ snapshots: - '@aws-sdk/client-sts' - aws-crt + '@aws-sdk/credential-provider-process@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + '@aws-sdk/credential-provider-process@3.709.0': dependencies: '@aws-sdk/core': 3.709.0 @@ -14561,6 +15120,59 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@aws-sdk/credential-provider-sso@3.592.0(@aws-sdk/client-sso-oidc@3.592.0)': + dependencies: + '@aws-sdk/client-sso': 3.592.0 + '@aws-sdk/token-providers': 3.587.0(@aws-sdk/client-sso-oidc@3.592.0) + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-sso@3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))': + dependencies: + '@aws-sdk/client-sso': 3.592.0 + '@aws-sdk/token-providers': 3.587.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0)) + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-sso@3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))': + dependencies: + '@aws-sdk/client-sso': 3.592.0 + '@aws-sdk/token-providers': 3.587.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0)) + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-provider-sso@3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))': + dependencies: + '@aws-sdk/client-sso': 3.709.0 + '@aws-sdk/core': 3.709.0 + '@aws-sdk/token-providers': 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0)) + '@aws-sdk/types': 3.709.0 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + '@aws-sdk/credential-provider-sso@3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))': dependencies: '@aws-sdk/client-sso': 3.709.0 @@ -14575,30 +15187,68 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt - '@aws-sdk/credential-provider-web-identity@3.709.0(@aws-sdk/client-sts@3.709.0)': + '@aws-sdk/credential-provider-web-identity@3.587.0(@aws-sdk/client-sts@3.592.0)': dependencies: - '@aws-sdk/client-sts': 3.709.0 + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.11 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-web-identity@3.709.0(@aws-sdk/client-sts@3.592.0)': + dependencies: + '@aws-sdk/client-sts': 3.592.0 '@aws-sdk/core': 3.709.0 '@aws-sdk/types': 3.709.0 '@smithy/property-provider': 3.1.11 '@smithy/types': 3.7.2 tslib: 2.8.1 - '@aws-sdk/credential-providers@3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))': + '@aws-sdk/credential-provider-web-identity@3.709.0(@aws-sdk/client-sts@3.709.0)': dependencies: - '@aws-sdk/client-cognito-identity': 3.709.0 - '@aws-sdk/client-sso': 3.709.0 '@aws-sdk/client-sts': 3.709.0 '@aws-sdk/core': 3.709.0 - '@aws-sdk/credential-provider-cognito-identity': 3.709.0 - '@aws-sdk/credential-provider-env': 3.709.0 - '@aws-sdk/credential-provider-http': 3.709.0 - '@aws-sdk/credential-provider-ini': 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))(@aws-sdk/client-sts@3.709.0) - '@aws-sdk/credential-provider-node': 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))(@aws-sdk/client-sts@3.709.0) - '@aws-sdk/credential-provider-process': 3.709.0 - '@aws-sdk/credential-provider-sso': 3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0)) - '@aws-sdk/credential-provider-web-identity': 3.709.0(@aws-sdk/client-sts@3.709.0) '@aws-sdk/types': 3.709.0 + '@smithy/property-provider': 3.1.11 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@aws-sdk/credential-providers@3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))': + dependencies: + '@aws-sdk/client-cognito-identity': 3.592.0 + '@aws-sdk/client-sso': 3.592.0 + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/credential-provider-cognito-identity': 3.592.0 + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-ini': 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0)) + '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.577.0 + '@smithy/credential-provider-imds': 3.2.8 + '@smithy/property-provider': 3.1.11 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + transitivePeerDependencies: + - '@aws-sdk/client-sso-oidc' + - aws-crt + + '@aws-sdk/credential-providers@3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))': + dependencies: + '@aws-sdk/client-cognito-identity': 3.592.0 + '@aws-sdk/client-sso': 3.592.0 + '@aws-sdk/client-sts': 3.592.0 + '@aws-sdk/credential-provider-cognito-identity': 3.592.0 + '@aws-sdk/credential-provider-env': 3.587.0 + '@aws-sdk/credential-provider-http': 3.587.0 + '@aws-sdk/credential-provider-ini': 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/credential-provider-node': 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/credential-provider-process': 3.587.0 + '@aws-sdk/credential-provider-sso': 3.592.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0)) + '@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.577.0 '@smithy/credential-provider-imds': 3.2.8 '@smithy/property-provider': 3.1.11 '@smithy/types': 3.7.2 @@ -14607,6 +15257,13 @@ snapshots: - '@aws-sdk/client-sso-oidc' - aws-crt + '@aws-sdk/middleware-host-header@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/protocol-http': 4.1.8 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + '@aws-sdk/middleware-host-header@3.709.0': dependencies: '@aws-sdk/types': 3.709.0 @@ -14614,12 +15271,25 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@aws-sdk/middleware-logger@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + '@aws-sdk/middleware-logger@3.709.0': dependencies: '@aws-sdk/types': 3.709.0 '@smithy/types': 3.7.2 tslib: 2.8.1 + '@aws-sdk/middleware-recursion-detection@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/protocol-http': 4.1.8 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + '@aws-sdk/middleware-recursion-detection@3.709.0': dependencies: '@aws-sdk/types': 3.709.0 @@ -14627,6 +15297,14 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@aws-sdk/middleware-user-agent@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@aws-sdk/util-endpoints': 3.587.0 + '@smithy/protocol-http': 4.1.8 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + '@aws-sdk/middleware-user-agent@3.709.0': dependencies: '@aws-sdk/core': 3.709.0 @@ -14637,6 +15315,15 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@aws-sdk/region-config-resolver@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/node-config-provider': 3.1.12 + '@smithy/types': 3.7.2 + '@smithy/util-config-provider': 3.0.0 + '@smithy/util-middleware': 3.0.11 + tslib: 2.8.1 + '@aws-sdk/region-config-resolver@3.709.0': dependencies: '@aws-sdk/types': 3.709.0 @@ -14646,6 +15333,42 @@ snapshots: '@smithy/util-middleware': 3.0.11 tslib: 2.8.1 + '@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.592.0)': + dependencies: + '@aws-sdk/client-sso-oidc': 3.592.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.709.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.709.0(@aws-sdk/client-sts@3.709.0) + '@aws-sdk/types': 3.577.0 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.592.0))': + dependencies: + '@aws-sdk/client-sso-oidc': 3.709.0(@aws-sdk/client-sts@3.592.0) + '@aws-sdk/types': 3.709.0 + '@smithy/property-provider': 3.1.11 + '@smithy/shared-ini-file-loader': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + '@aws-sdk/token-providers@3.709.0(@aws-sdk/client-sso-oidc@3.709.0(@aws-sdk/client-sts@3.709.0))': dependencies: '@aws-sdk/client-sso-oidc': 3.709.0(@aws-sdk/client-sts@3.709.0) @@ -14655,11 +15378,23 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@aws-sdk/types@3.577.0': + dependencies: + '@smithy/types': 3.7.2 + tslib: 2.8.1 + '@aws-sdk/types@3.709.0': dependencies: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@aws-sdk/util-endpoints@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/types': 3.7.2 + '@smithy/util-endpoints': 2.1.7 + tslib: 2.8.1 + '@aws-sdk/util-endpoints@3.709.0': dependencies: '@aws-sdk/types': 3.709.0 @@ -14671,6 +15406,13 @@ snapshots: dependencies: tslib: 2.8.1 + '@aws-sdk/util-user-agent-browser@3.577.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/types': 3.7.2 + bowser: 2.11.0 + tslib: 2.8.1 + '@aws-sdk/util-user-agent-browser@3.709.0': dependencies: '@aws-sdk/types': 3.709.0 @@ -14678,6 +15420,13 @@ snapshots: bowser: 2.11.0 tslib: 2.8.1 + '@aws-sdk/util-user-agent-node@3.587.0': + dependencies: + '@aws-sdk/types': 3.577.0 + '@smithy/node-config-provider': 3.1.12 + '@smithy/types': 3.7.2 + tslib: 2.8.1 + '@aws-sdk/util-user-agent-node@3.709.0': dependencies: '@aws-sdk/middleware-user-agent': 3.709.0 @@ -14686,6 +15435,10 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@aws-sdk/util-utf8-browser@3.259.0': + dependencies: + tslib: 2.8.1 + '@babel/code-frame@7.10.4': dependencies: '@babel/highlight': 7.25.9 @@ -17270,11 +18023,11 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - '@mdx-js/loader@2.3.0(webpack@5.97.1)': + '@mdx-js/loader@2.3.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)))': dependencies: '@mdx-js/mdx': 2.3.0 source-map: 0.7.4 - webpack: 5.97.1 + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)) transitivePeerDependencies: - supports-color @@ -17414,11 +18167,11 @@ snapshots: dependencies: fast-glob: 3.3.1 - '@next/mdx@15.1.0(@mdx-js/loader@2.3.0(webpack@5.97.1))(@mdx-js/react@2.3.0(react@19.0.0))': + '@next/mdx@15.1.0(@mdx-js/loader@2.3.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))))(@mdx-js/react@2.3.0(react@19.0.0))': dependencies: source-map: 0.7.4 optionalDependencies: - '@mdx-js/loader': 2.3.0(webpack@5.97.1) + '@mdx-js/loader': 2.3.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) '@mdx-js/react': 2.3.0(react@19.0.0) '@next/swc-darwin-arm64@15.1.0': @@ -17570,7 +18323,7 @@ snapshots: widest-line: 3.1.0 wrap-ansi: 7.0.0 - '@oclif/core@2.8.11(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)': + '@oclif/core@2.8.11(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)': dependencies: '@types/cli-progress': 3.11.6 ansi-escapes: 4.3.2 @@ -17596,7 +18349,7 @@ snapshots: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.3.0 - ts-node: 10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) + ts-node: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) tslib: 2.8.1 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -17634,10 +18387,10 @@ snapshots: dependencies: '@oclif/core': 1.26.2 - '@oclif/plugin-not-found@2.3.23(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)': + '@oclif/plugin-not-found@2.3.23(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)': dependencies: '@oclif/color': 1.0.13 - '@oclif/core': 2.8.11(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) + '@oclif/core': 2.8.11(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) fast-levenshtein: 3.0.0 lodash: 4.17.21 transitivePeerDependencies: @@ -17662,9 +18415,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@oclif/plugin-warn-if-update-available@2.0.24(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2)': + '@oclif/plugin-warn-if-update-available@2.0.24(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)': dependencies: - '@oclif/core': 2.8.11(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) + '@oclif/core': 2.8.11(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) chalk: 4.1.2 debug: 4.4.0(supports-color@8.1.1) fs-extra: 9.1.0 @@ -18036,7 +18789,7 @@ snapshots: dependencies: playwright: 1.49.1 - '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.30.0)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1))': + '@pmmmwh/react-refresh-webpack-plugin@0.5.15(react-refresh@0.14.2)(type-fest@4.30.0)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0))': dependencies: ansi-html: 0.0.9 core-js-pure: 3.39.0 @@ -18046,7 +18799,7 @@ snapshots: react-refresh: 0.14.2 schema-utils: 4.2.0 source-map: 0.7.4 - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) optionalDependencies: type-fest: 4.30.0 webpack-hot-middleware: 2.26.1 @@ -19037,7 +19790,7 @@ snapshots: '@sentry/core@8.43.0': {} - '@sentry/nextjs@8.43.0(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(@swc/core@1.10.1))': + '@sentry/nextjs@8.43.0(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react@19.0.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0))': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 @@ -19048,7 +19801,7 @@ snapshots: '@sentry/opentelemetry': 8.43.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.56.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.29.0(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.28.0) '@sentry/react': 8.43.0(react@19.0.0) '@sentry/vercel-edge': 8.43.0 - '@sentry/webpack-plugin': 2.22.7(webpack@5.97.1(@swc/core@1.10.1)) + '@sentry/webpack-plugin': 2.22.7(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) chalk: 3.0.0 next: 15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) resolve: 1.22.8 @@ -19124,12 +19877,12 @@ snapshots: '@opentelemetry/api': 1.9.0 '@sentry/core': 8.43.0 - '@sentry/webpack-plugin@2.22.7(webpack@5.97.1(@swc/core@1.10.1))': + '@sentry/webpack-plugin@2.22.7(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0))': dependencies: '@sentry/bundler-plugin-core': 2.22.7 unplugin: 1.0.1 uuid: 9.0.1 - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) transitivePeerDependencies: - encoding - supports-color @@ -19196,11 +19949,11 @@ snapshots: dependencies: size-limit: 11.1.6 - '@size-limit/preset-big-lib@11.1.6(bufferutil@4.0.8)(esbuild@0.24.0)(size-limit@11.1.6)(utf-8-validate@5.0.10)': + '@size-limit/preset-big-lib@11.1.6(bufferutil@4.0.8)(size-limit@11.1.6)(utf-8-validate@5.0.10)': dependencies: '@size-limit/file': 11.1.6(size-limit@11.1.6) '@size-limit/time': 11.1.6(bufferutil@4.0.8)(size-limit@11.1.6)(utf-8-validate@5.0.10) - '@size-limit/webpack': 11.1.6(esbuild@0.24.0)(size-limit@11.1.6) + '@size-limit/webpack': 11.1.6(size-limit@11.1.6) size-limit: 11.1.6 transitivePeerDependencies: - '@swc/core' @@ -19220,11 +19973,11 @@ snapshots: - supports-color - utf-8-validate - '@size-limit/webpack@11.1.6(esbuild@0.24.0)(size-limit@11.1.6)': + '@size-limit/webpack@11.1.6(size-limit@11.1.6)': dependencies: nanoid: 5.0.7 size-limit: 11.1.6 - webpack: 5.97.1(esbuild@0.24.0) + webpack: 5.97.1 transitivePeerDependencies: - '@swc/core' - esbuild @@ -19293,6 +20046,14 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/fetch-http-handler@3.2.9': + dependencies: + '@smithy/protocol-http': 4.1.8 + '@smithy/querystring-builder': 3.0.11 + '@smithy/types': 3.7.2 + '@smithy/util-base64': 3.0.0 + tslib: 2.8.1 + '@smithy/fetch-http-handler@4.1.2': dependencies: '@smithy/protocol-http': 4.1.8 @@ -19405,6 +20166,16 @@ snapshots: '@smithy/types': 3.7.2 tslib: 2.8.1 + '@smithy/signature-v4@3.1.2': + dependencies: + '@smithy/is-array-buffer': 3.0.0 + '@smithy/types': 3.7.2 + '@smithy/util-hex-encoding': 3.0.0 + '@smithy/util-middleware': 3.0.11 + '@smithy/util-uri-escape': 3.0.0 + '@smithy/util-utf8': 3.0.0 + tslib: 2.8.1 + '@smithy/signature-v4@4.2.4': dependencies: '@smithy/is-array-buffer': 3.0.0 @@ -19864,7 +20635,7 @@ snapshots: ts-dedent: 2.2.0 vite: 6.0.3(@types/node@22.10.2)(jiti@2.4.1)(lightningcss@1.28.2)(terser@5.37.0)(tsx@4.19.2)(yaml@2.6.1) - '@storybook/builder-webpack5@8.4.7(@swc/core@1.10.1)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2)': + '@storybook/builder-webpack5@8.4.7(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2)': dependencies: '@storybook/core-webpack': 8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)) '@types/node': 22.10.2 @@ -19873,23 +20644,23 @@ snapshots: case-sensitive-paths-webpack-plugin: 2.4.0 cjs-module-lexer: 1.4.1 constants-browserify: 1.0.0 - css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.10.1)) + css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) es-module-lexer: 1.5.4 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)) - html-webpack-plugin: 5.6.3(webpack@5.97.1(@swc/core@1.10.1)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + html-webpack-plugin: 5.6.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) magic-string: 0.30.15 path-browserify: 1.0.1 process: 0.11.10 semver: 7.6.3 storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.97.1(@swc/core@1.10.1)) - terser-webpack-plugin: 5.3.10(@swc/core@1.10.1)(webpack@5.97.1(@swc/core@1.10.1)) + style-loader: 3.3.4(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + terser-webpack-plugin: 5.3.10(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) ts-dedent: 2.2.0 url: 0.11.4 util: 0.12.5 util-deprecate: 1.0.2 - webpack: 5.97.1(@swc/core@1.10.1) - webpack-dev-middleware: 6.1.3(webpack@5.97.1(@swc/core@1.10.1)) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) + webpack-dev-middleware: 6.1.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: @@ -20001,7 +20772,7 @@ snapshots: dependencies: storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) - '@storybook/nextjs@8.4.7(@swc/core@1.10.1)(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(type-fest@4.30.0)(typescript@5.7.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1))': + '@storybook/nextjs@8.4.7(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(next@15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(type-fest@4.30.0)(typescript@5.7.2)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0))': dependencies: '@babel/core': 7.26.0 '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) @@ -20016,31 +20787,31 @@ snapshots: '@babel/preset-react': 7.26.3(@babel/core@7.26.0) '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) '@babel/runtime': 7.26.0 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(type-fest@4.30.0)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1)) - '@storybook/builder-webpack5': 8.4.7(@swc/core@1.10.1)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) - '@storybook/preset-react-webpack': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(@swc/core@1.10.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.15(react-refresh@0.14.2)(type-fest@4.30.0)(webpack-hot-middleware@2.26.1)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + '@storybook/builder-webpack5': 8.4.7(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) + '@storybook/preset-react-webpack': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) '@storybook/react': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) '@storybook/test': 8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)) '@types/node': 22.10.2 '@types/semver': 7.5.8 - babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.1)) - css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.10.1)) + babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) + css-loader: 6.11.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) find-up: 5.0.0 image-size: 1.1.1 loader-utils: 3.3.1 next: 15.1.0(@babel/core@7.26.0)(@opentelemetry/api@1.9.0)(@playwright/test@1.49.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - node-polyfill-webpack-plugin: 2.0.1(webpack@5.97.1(@swc/core@1.10.1)) + node-polyfill-webpack-plugin: 2.0.1(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) pnp-webpack-plugin: 1.7.0(typescript@5.7.2) postcss: 8.4.49 - postcss-loader: 8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)) + postcss-loader: 8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) react-refresh: 0.14.2 resolve-url-loader: 5.0.0 - sass-loader: 13.3.3(webpack@5.97.1(@swc/core@1.10.1)) + sass-loader: 13.3.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) semver: 7.6.3 storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) - style-loader: 3.3.4(webpack@5.97.1(@swc/core@1.10.1)) + style-loader: 3.3.4(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) styled-jsx: 5.1.6(@babel/core@7.26.0)(react@19.0.0) ts-dedent: 2.2.0 tsconfig-paths: 4.2.0 @@ -20048,7 +20819,7 @@ snapshots: optionalDependencies: sharp: 0.33.5 typescript: 5.7.2 - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -20068,11 +20839,11 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/preset-react-webpack@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(@swc/core@1.10.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2)': + '@storybook/preset-react-webpack@8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2)': dependencies: '@storybook/core-webpack': 8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)) '@storybook/react': 8.4.7(@storybook/test@8.4.7(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10))(typescript@5.7.2) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) '@types/node': 22.10.2 '@types/semver': 7.5.8 find-up: 5.0.0 @@ -20084,7 +20855,7 @@ snapshots: semver: 7.6.3 storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) tsconfig-paths: 4.2.0 - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) optionalDependencies: typescript: 5.7.2 transitivePeerDependencies: @@ -20103,7 +20874,7 @@ snapshots: dependencies: storybook: 8.4.7(bufferutil@4.0.8)(prettier@3.4.2)(utf-8-validate@5.0.10) - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0))': dependencies: debug: 4.4.0(supports-color@8.1.1) endent: 2.1.0 @@ -20113,7 +20884,7 @@ snapshots: react-docgen-typescript: 2.2.2(typescript@5.7.2) tslib: 2.8.1 typescript: 5.7.2 - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) transitivePeerDependencies: - supports-color @@ -20601,7 +21372,7 @@ snapshots: '@swc/core-win32-x64-msvc@1.10.1': optional: true - '@swc/core@1.10.1': + '@swc/core@1.10.1(@swc/helpers@0.5.15)': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.17 @@ -20616,6 +21387,7 @@ snapshots: '@swc/core-win32-arm64-msvc': 1.10.1 '@swc/core-win32-ia32-msvc': 1.10.1 '@swc/core-win32-x64-msvc': 1.10.1 + '@swc/helpers': 0.5.15 optional: true '@swc/counter@0.1.3': {} @@ -21168,7 +21940,7 @@ snapshots: '@urql/core': 5.1.0(graphql@16.9.0) wonka: 6.3.4 - '@vercel/functions@1.5.1(@aws-sdk/credential-provider-web-identity@3.709.0)': + '@vercel/functions@1.5.1(@aws-sdk/credential-provider-web-identity@3.709.0(@aws-sdk/client-sts@3.709.0))': optionalDependencies: '@aws-sdk/credential-provider-web-identity': 3.709.0(@aws-sdk/client-sts@3.709.0) @@ -22067,12 +22839,12 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.1)): + babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): dependencies: '@babel/core': 7.26.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) babel-plugin-istanbul@6.1.1: dependencies: @@ -22542,13 +23314,13 @@ snapshots: check-error@2.1.1: {} - checkly@4.15.0(@swc/core@1.10.1)(@types/node@22.10.2)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10): + checkly@4.15.0(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(bufferutil@4.0.8)(typescript@5.7.2)(utf-8-validate@5.0.10): dependencies: - '@oclif/core': 2.8.11(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) + '@oclif/core': 2.8.11(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) '@oclif/plugin-help': 5.1.20 - '@oclif/plugin-not-found': 2.3.23(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) + '@oclif/plugin-not-found': 2.3.23(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) '@oclif/plugin-plugins': 5.4.4 - '@oclif/plugin-warn-if-update-available': 2.0.24(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) + '@oclif/plugin-warn-if-update-available': 2.0.24(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.7.2) acorn: 8.8.1 acorn-walk: 8.2.0 @@ -22994,7 +23766,7 @@ snapshots: css-gradient-parser@0.0.16: {} - css-loader@6.11.0(webpack@5.97.1(@swc/core@1.10.1)): + css-loader@6.11.0(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): dependencies: icss-utils: 5.1.0(postcss@8.4.49) postcss: 8.4.49 @@ -23005,7 +23777,7 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.3 optionalDependencies: - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) css-select@4.3.0: dependencies: @@ -23895,11 +24667,11 @@ snapshots: eslint-plugin-svg-jsx@1.2.4: {} - eslint-plugin-tailwindcss@3.17.5(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))): + eslint-plugin-tailwindcss@3.17.5(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))): dependencies: fast-glob: 3.3.2 postcss: 8.4.49 - tailwindcss: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) + tailwindcss: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) eslint-scope@5.1.1: dependencies: @@ -24414,6 +25186,10 @@ snapshots: fast-uri@3.0.3: {} + fast-xml-parser@4.2.5: + dependencies: + strnum: 1.0.5 + fast-xml-parser@4.4.1: dependencies: strnum: 1.0.5 @@ -24581,7 +25357,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): dependencies: '@babel/code-frame': 7.26.2 chalk: 4.1.2 @@ -24596,7 +25372,7 @@ snapshots: semver: 7.6.3 tapable: 2.2.1 typescript: 5.7.2 - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) form-data-encoder@2.1.4: {} @@ -25069,7 +25845,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.3(webpack@5.97.1(@swc/core@1.10.1)): + html-webpack-plugin@5.6.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -25077,7 +25853,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) htmlparser2@3.10.1: dependencies: @@ -27573,7 +28349,7 @@ snapshots: node-int64@0.4.0: {} - node-polyfill-webpack-plugin@2.0.1(webpack@5.97.1(@swc/core@1.10.1)): + node-polyfill-webpack-plugin@2.0.1(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): dependencies: assert: 2.1.0 browserify-zlib: 0.2.0 @@ -27600,7 +28376,7 @@ snapshots: url: 0.11.4 util: 0.12.5 vm-browserify: 1.1.2 - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) node-releases@2.0.18: {} @@ -28225,13 +29001,13 @@ snapshots: camelcase-css: 2.0.1 postcss: 8.4.49 - postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)): + postcss-load-config@4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)): dependencies: lilconfig: 3.1.3 yaml: 2.6.1 optionalDependencies: postcss: 8.4.49 - ts-node: 10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2) + ts-node: 10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2) postcss-load-config@6.0.1(jiti@2.4.1)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.1): dependencies: @@ -28242,14 +29018,14 @@ snapshots: tsx: 4.19.2 yaml: 2.6.1 - postcss-loader@8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1)): + postcss-loader@8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): dependencies: cosmiconfig: 9.0.0(typescript@5.7.2) jiti: 1.21.6 postcss: 8.4.49 semver: 7.6.3 optionalDependencies: - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) transitivePeerDependencies: - typescript @@ -29406,10 +30182,10 @@ snapshots: safer-buffer@2.1.2: {} - sass-loader@13.3.3(webpack@5.97.1(@swc/core@1.10.1)): + sass-loader@13.3.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): dependencies: neo-async: 2.6.2 - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) satori@0.12.0: dependencies: @@ -29958,9 +30734,9 @@ snapshots: structured-headers@0.4.1: {} - style-loader@3.3.4(webpack@5.97.1(@swc/core@1.10.1)): + style-loader@3.3.4(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): dependencies: - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) style-to-object@0.4.4: dependencies: @@ -30105,11 +30881,11 @@ snapshots: tailwind-merge@2.5.5: {} - tailwindcss-animate@1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2))): + tailwindcss-animate@1.0.7(tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2))): dependencies: - tailwindcss: 3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) + tailwindcss: 3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) - tailwindcss@3.4.16(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)): + tailwindcss@3.4.16(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -30128,7 +30904,7 @@ snapshots: postcss: 8.4.49 postcss-import: 15.1.0(postcss@8.4.49) postcss-js: 4.0.1(postcss@8.4.49) - postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@types/node@22.10.2)(typescript@5.7.2)) + postcss-load-config: 4.0.2(postcss@8.4.49)(ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2)) postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 @@ -30190,27 +30966,28 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.10(@swc/core@1.10.1)(webpack@5.97.1(@swc/core@1.10.1)): + terser-webpack-plugin@5.3.10(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.37.0 - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) optionalDependencies: - '@swc/core': 1.10.1 + '@swc/core': 1.10.1(@swc/helpers@0.5.15) + esbuild: 0.24.0 - terser-webpack-plugin@5.3.10(esbuild@0.24.0)(webpack@5.97.1(esbuild@0.24.0)): + terser-webpack-plugin@5.3.10(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.37.0 - webpack: 5.97.1(esbuild@0.24.0) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)) optionalDependencies: - esbuild: 0.24.0 + '@swc/core': 1.10.1(@swc/helpers@0.5.15) terser-webpack-plugin@5.3.10(webpack@5.97.1): dependencies: @@ -30349,7 +31126,7 @@ snapshots: ts-mixer@6.0.4: {} - ts-node@10.9.2(@swc/core@1.10.1)(@types/node@22.10.2)(typescript@5.7.2): + ts-node@10.9.2(@swc/core@1.10.1(@swc/helpers@0.5.15))(@types/node@22.10.2)(typescript@5.7.2): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -30367,7 +31144,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.10.1 + '@swc/core': 1.10.1(@swc/helpers@0.5.15) ts-pnp@1.2.0(typescript@5.7.2): optionalDependencies: @@ -31117,7 +31894,7 @@ snapshots: - bufferutil - utf-8-validate - webpack-dev-middleware@6.1.3(webpack@5.97.1(@swc/core@1.10.1)): + webpack-dev-middleware@6.1.3(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)): dependencies: colorette: 2.0.20 memfs: 3.5.3 @@ -31125,7 +31902,7 @@ snapshots: range-parser: 1.2.1 schema-utils: 4.2.0 optionalDependencies: - webpack: 5.97.1(@swc/core@1.10.1) + webpack: 5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0) webpack-hot-middleware@2.26.1: dependencies: @@ -31169,7 +31946,7 @@ snapshots: - esbuild - uglify-js - webpack@5.97.1(@swc/core@1.10.1): + webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15)): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -31191,7 +31968,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(@swc/core@1.10.1)(webpack@5.97.1(@swc/core@1.10.1)) + terser-webpack-plugin: 5.3.10(@swc/core@1.10.1(@swc/helpers@0.5.15))(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -31199,7 +31976,7 @@ snapshots: - esbuild - uglify-js - webpack@5.97.1(esbuild@0.24.0): + webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 @@ -31221,7 +31998,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(esbuild@0.24.0)(webpack@5.97.1(esbuild@0.24.0)) + terser-webpack-plugin: 5.3.10(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)(webpack@5.97.1(@swc/core@1.10.1(@swc/helpers@0.5.15))(esbuild@0.24.0)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: From 6994310d1628eedb87cab8c7acde73b990cd8096 Mon Sep 17 00:00:00 2001 From: Jonas Daniels Date: Mon, 16 Dec 2024 04:08:47 -0800 Subject: [PATCH 21/49] Version Packages (#5741) Co-authored-by: github-actions[bot] --- .changeset/eighty-days-pump.md | 5 -- .changeset/hip-houses-hear.md | 5 -- .changeset/wicked-yaks-flow.md | 5 -- packages/react-native-adapter/CHANGELOG.md | 6 ++ packages/react-native-adapter/package.json | 7 +- packages/thirdweb/CHANGELOG.md | 10 +++ packages/thirdweb/package.json | 74 ++++++++++++++++------ packages/wagmi-adapter/CHANGELOG.md | 2 + packages/wagmi-adapter/package.json | 2 +- 9 files changed, 79 insertions(+), 37 deletions(-) delete mode 100644 .changeset/eighty-days-pump.md delete mode 100644 .changeset/hip-houses-hear.md delete mode 100644 .changeset/wicked-yaks-flow.md diff --git a/.changeset/eighty-days-pump.md b/.changeset/eighty-days-pump.md deleted file mode 100644 index 949189f9846..00000000000 --- a/.changeset/eighty-days-pump.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"thirdweb": patch ---- - -Fix migration to enclave in react native diff --git a/.changeset/hip-houses-hear.md b/.changeset/hip-houses-hear.md deleted file mode 100644 index f6b5453b9fb..00000000000 --- a/.changeset/hip-houses-hear.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"thirdweb": minor ---- - -Add headless components for Wallets: WalletProvider, WalletIcon and WalletName diff --git a/.changeset/wicked-yaks-flow.md b/.changeset/wicked-yaks-flow.md deleted file mode 100644 index ee3ab0d8389..00000000000 --- a/.changeset/wicked-yaks-flow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@thirdweb-dev/react-native-adapter": patch ---- - -Downgrade aws libraries diff --git a/packages/react-native-adapter/CHANGELOG.md b/packages/react-native-adapter/CHANGELOG.md index e4647bc8610..622950cd0c1 100644 --- a/packages/react-native-adapter/CHANGELOG.md +++ b/packages/react-native-adapter/CHANGELOG.md @@ -1,5 +1,11 @@ # @thirdweb-dev/react-native-adapter +## 1.5.3 + +### Patch Changes + +- [#5746](https://github.com/thirdweb-dev/js/pull/5746) [`e42ffc6`](https://github.com/thirdweb-dev/js/commit/e42ffc6a931a8d80492a091d79e2d9b38e4ba1d7) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Downgrade aws libraries + ## 1.5.2 ### Patch Changes diff --git a/packages/react-native-adapter/package.json b/packages/react-native-adapter/package.json index ae03023fbcf..7d77b8625ae 100644 --- a/packages/react-native-adapter/package.json +++ b/packages/react-native-adapter/package.json @@ -1,6 +1,6 @@ { "name": "@thirdweb-dev/react-native-adapter", - "version": "1.5.2", + "version": "1.5.3", "repository": { "type": "git", "url": "git+https://github.com/thirdweb-dev/js.git#main" @@ -23,7 +23,10 @@ }, "./package.json": "./package.json" }, - "files": ["dist/*", "src/*"], + "files": [ + "dist/*", + "src/*" + ], "dependencies": { "@aws-sdk/client-kms": "3.592.0", "@aws-sdk/client-lambda": "3.592.0", diff --git a/packages/thirdweb/CHANGELOG.md b/packages/thirdweb/CHANGELOG.md index 81f3e35eb22..aff470a590e 100644 --- a/packages/thirdweb/CHANGELOG.md +++ b/packages/thirdweb/CHANGELOG.md @@ -1,5 +1,15 @@ # thirdweb +## 5.79.0 + +### Minor Changes + +- [#5691](https://github.com/thirdweb-dev/js/pull/5691) [`5be197b`](https://github.com/thirdweb-dev/js/commit/5be197bac97393edf39bf7287b5fa258cf83ec06) Thanks [@kien-ngo](https://github.com/kien-ngo)! - Add headless components for Wallets: WalletProvider, WalletIcon and WalletName + +### Patch Changes + +- [#5746](https://github.com/thirdweb-dev/js/pull/5746) [`e42ffc6`](https://github.com/thirdweb-dev/js/commit/e42ffc6a931a8d80492a091d79e2d9b38e4ba1d7) Thanks [@joaquim-verges](https://github.com/joaquim-verges)! - Fix migration to enclave in react native + ## 5.78.0 ### Minor Changes diff --git a/packages/thirdweb/package.json b/packages/thirdweb/package.json index 66c78a768da..1a36c383d22 100644 --- a/packages/thirdweb/package.json +++ b/packages/thirdweb/package.json @@ -1,6 +1,6 @@ { "name": "thirdweb", - "version": "5.78.0", + "version": "5.79.0", "repository": { "type": "git", "url": "git+https://github.com/thirdweb-dev/js.git#main" @@ -127,24 +127,60 @@ }, "typesVersions": { "*": { - "adapters/*": ["./dist/types/exports/adapters/*.d.ts"], - "auth": ["./dist/types/exports/auth.d.ts"], - "chains": ["./dist/types/exports/chains.d.ts"], - "contract": ["./dist/types/exports/contract.d.ts"], - "deploys": ["./dist/types/exports/deploys.d.ts"], - "event": ["./dist/types/exports/event.d.ts"], - "extensions/*": ["./dist/types/exports/extensions/*.d.ts"], - "pay": ["./dist/types/exports/pay.d.ts"], - "react": ["./dist/types/exports/react.d.ts"], - "react-native": ["./dist/types/exports/react-native.d.ts"], - "rpc": ["./dist/types/exports/rpc.d.ts"], - "storage": ["./dist/types/exports/storage.d.ts"], - "transaction": ["./dist/types/exports/transaction.d.ts"], - "utils": ["./dist/types/exports/utils.d.ts"], - "wallets": ["./dist/types/exports/wallets.d.ts"], - "wallets/*": ["./dist/types/exports/wallets/*.d.ts"], - "modules": ["./dist/types/exports/modules.d.ts"], - "social": ["./dist/types/exports/social.d.ts"] + "adapters/*": [ + "./dist/types/exports/adapters/*.d.ts" + ], + "auth": [ + "./dist/types/exports/auth.d.ts" + ], + "chains": [ + "./dist/types/exports/chains.d.ts" + ], + "contract": [ + "./dist/types/exports/contract.d.ts" + ], + "deploys": [ + "./dist/types/exports/deploys.d.ts" + ], + "event": [ + "./dist/types/exports/event.d.ts" + ], + "extensions/*": [ + "./dist/types/exports/extensions/*.d.ts" + ], + "pay": [ + "./dist/types/exports/pay.d.ts" + ], + "react": [ + "./dist/types/exports/react.d.ts" + ], + "react-native": [ + "./dist/types/exports/react-native.d.ts" + ], + "rpc": [ + "./dist/types/exports/rpc.d.ts" + ], + "storage": [ + "./dist/types/exports/storage.d.ts" + ], + "transaction": [ + "./dist/types/exports/transaction.d.ts" + ], + "utils": [ + "./dist/types/exports/utils.d.ts" + ], + "wallets": [ + "./dist/types/exports/wallets.d.ts" + ], + "wallets/*": [ + "./dist/types/exports/wallets/*.d.ts" + ], + "modules": [ + "./dist/types/exports/modules.d.ts" + ], + "social": [ + "./dist/types/exports/social.d.ts" + ] } }, "browser": { diff --git a/packages/wagmi-adapter/CHANGELOG.md b/packages/wagmi-adapter/CHANGELOG.md index 6e1003c4f3c..a30ddd42af4 100644 --- a/packages/wagmi-adapter/CHANGELOG.md +++ b/packages/wagmi-adapter/CHANGELOG.md @@ -1,5 +1,7 @@ # @thirdweb-dev/wagmi-adapter +## 0.1.2 + ## 0.1.1 ### Patch Changes diff --git a/packages/wagmi-adapter/package.json b/packages/wagmi-adapter/package.json index cccd7de8121..8e696e234a1 100644 --- a/packages/wagmi-adapter/package.json +++ b/packages/wagmi-adapter/package.json @@ -1,6 +1,6 @@ { "name": "@thirdweb-dev/wagmi-adapter", - "version": "0.1.1", + "version": "0.1.2", "repository": { "type": "git", "url": "git+https://github.com/thirdweb-dev/js.git#main" From 7819e1ebabdeeea4693ca0119924069d29f3d133 Mon Sep 17 00:00:00 2001 From: kien-ngo Date: Mon, 16 Dec 2024 16:46:51 +0000 Subject: [PATCH 22/49] [Dashboard] Add a form to let user manually input data for Marketplace listings (#5654) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Short description of the bug fixed or feature added --- ## PR-Codex overview This PR enhances the `CreateListingButton` and `CreateListingsForm` components by adding support for multiple listing modes (automatic and manual) and improving NFT validation logic, ensuring users can list NFTs more effectively based on the selected mode. ### Detailed summary - Introduced `LISTING_MODES` for "Select NFT" and "Manual" modes. - Added logic to toggle between automatic and manual listing modes. - Enhanced NFT validation for manual mode, including contract address and token ID checks. - Updated NFT approval checks based on listing mode. - Modified form controls and error handling for improved user experience. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../(marketplace)/components/list-button.tsx | 62 ++- .../(marketplace)/components/list-form.tsx | 376 +++++++++++------- 2 files changed, 294 insertions(+), 144 deletions(-) diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-button.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-button.tsx index af4c121a0ee..b05e7f9932c 100644 --- a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-button.tsx +++ b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-button.tsx @@ -8,8 +8,12 @@ import { SheetTitle, SheetTrigger, } from "@/components/ui/sheet"; +import { TabButtons } from "@/components/ui/tabs"; import { ListerOnly } from "@3rdweb-sdk/react/components/roles/lister-only"; import type { Account } from "@3rdweb-sdk/react/hooks/useApi"; +import { isAlchemySupported } from "lib/wallet/nfts/alchemy"; +import { isMoralisSupported } from "lib/wallet/nfts/moralis"; +import { isSimpleHashSupported } from "lib/wallet/nfts/simpleHash"; import { PlusIcon } from "lucide-react"; import { useState } from "react"; import type { ThirdwebContract } from "thirdweb"; @@ -23,6 +27,8 @@ interface CreateListingButtonProps { twAccount: Account | undefined; } +const LISTING_MODES = ["Select NFT", "Manual"] as const; + export const CreateListingButton: React.FC = ({ createText = "Create", type, @@ -32,7 +38,13 @@ export const CreateListingButton: React.FC = ({ }) => { const address = useActiveAccount()?.address; const [open, setOpen] = useState(false); - + const [listingMode, setListingMode] = + useState<(typeof LISTING_MODES)[number]>("Select NFT"); + const isSupportedChain = + contract.chain.id && + (isSimpleHashSupported(contract.chain.id) || + isAlchemySupported(contract.chain.id) || + isMoralisSupported(contract.chain.id)); return ( @@ -43,15 +55,47 @@ export const CreateListingButton: React.FC = ({ - {createText} + {createText} - + {/* + If the chain is not supported by the indexer providers + we don't show the tabs, we only show the Manual input form. + Otherwise we show both */} + {isSupportedChain ? ( + <> + ({ + name: mode, + isActive: mode === listingMode, + onClick: () => setListingMode(mode), + isEnabled: true, + }))} + tabClassName="text-sm gap-2 !text-sm" + tabContainerClassName="gap-0.5" + /> +
+ +
+ + ) : ( +
+ +
+ )}
diff --git a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx index c82438cc496..c330fdc0bcf 100644 --- a/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx +++ b/apps/dashboard/src/app/(dashboard)/(chain)/[chain_id]/[contractAddress]/(marketplace)/components/list-form.tsx @@ -37,10 +37,14 @@ import { import { decimals } from "thirdweb/extensions/erc20"; import { isApprovedForAll as isApprovedForAll721, + isERC721, + ownerOf, setApprovalForAll as setApprovalForAll721, } from "thirdweb/extensions/erc721"; import { + balanceOf, isApprovedForAll as isApprovedForAll1155, + isERC1155, setApprovalForAll as setApprovalForAll1155, } from "thirdweb/extensions/erc1155"; import { createAuction, createListing } from "thirdweb/extensions/marketplace"; @@ -49,6 +53,7 @@ import type { CreateListingParams, } from "thirdweb/extensions/marketplace"; import { useActiveAccount, useSendAndConfirmTransaction } from "thirdweb/react"; +import { shortenAddress } from "thirdweb/utils"; import { FormErrorMessage, FormHelperText, FormLabel } from "tw-components"; import { NFTMediaWithEmptyState } from "tw-components/nft-media"; import { shortenIfAddress } from "utils/usedapp-external"; @@ -78,6 +83,7 @@ type CreateListingsFormProps = { contract: ThirdwebContract; actionText: string; setOpen: Dispatch>; + mode: "automatic" | "manual"; type?: "direct-listings" | "english-auctions"; twAccount: Account | undefined; }; @@ -98,6 +104,7 @@ export const CreateListingsForm: React.FC = ({ actionText, setOpen, twAccount, + mode, }) => { const trackEvent = useTrack(); const chainId = contract.chain.id; @@ -162,7 +169,8 @@ export const CreateListingsForm: React.FC = ({ !selectedContract || isSupportedChain || isWalletNFTsLoading || - (walletNFTs?.result || []).length > 0, + (walletNFTs?.result || []).length > 0 || + mode === "manual", }); const isSelected = (nft: WalletNFT) => { @@ -208,34 +216,112 @@ export const CreateListingsForm: React.FC = ({ className="flex flex-col gap-6 pb-16" id={LIST_FORM_ID} onSubmit={form.handleSubmit(async (formData) => { - if (!formData.selected || !selectedContract) { - return; - } - if (!account) { return toast.error("No account detected"); } - setIsFormLoading(true); - + let nftType: "ERC1155" | "ERC721"; + let _selectedContract: ThirdwebContract; + let selectedTokenId: bigint; + const selectedQuantity = BigInt(formData.quantity); try { + if (mode === "manual") { + if (!formData.assetContractAddress) { + setIsFormLoading(false); + return toast.error("Enter a valid NFT contract address"); + } + _selectedContract = getContract({ + address: formData.assetContractAddress, + chain: contract.chain, + client: contract.client, + }); + /** + * In manual mode we need to detect the NFT type ourselves + * instead of relying on the third-party providers + */ + const [is721, is1155] = await Promise.all([ + isERC721({ contract: _selectedContract }), + isERC1155({ contract: _selectedContract }), + ]); + if (!is721 && !is1155) { + setIsFormLoading(false); + return toast.error( + `Error: ${formData.assetContractAddress} is neither an ERC721 or ERC1155 contract`, + ); + } + selectedTokenId = BigInt(formData.tokenId); + nftType = is721 ? "ERC721" : "ERC1155"; + /** + * Also in manual mode we need to make sure the user owns the tokenId they entered + * For ERC1155, the owned balance must be >= the entered quantity + * For ERC721, the owner address must match theirs + */ + if (nftType === "ERC1155") { + const balance = await balanceOf({ + contract: _selectedContract, + tokenId: selectedTokenId, + owner: account.address, + }); + if (balance === 0n) { + setIsFormLoading(false); + return toast.error( + `You do not own any tokenId #${selectedTokenId.toString()} from the collection: ${shortenAddress(formData.assetContractAddress)}`, + ); + } + if (balance < selectedQuantity) { + setIsFormLoading(false); + return toast.error( + `The balance you own for tokenId #${selectedTokenId.toString()} is less than the quantity (you own ${balance.toString()})`, + ); + } + } else { + if (selectedQuantity !== 1n) { + setIsFormLoading(false); + return toast.error( + "The quantity can only be 1 for ERC721 token", + ); + } + const owner = await ownerOf({ + contract: _selectedContract, + tokenId: selectedTokenId, + }).catch(() => undefined); + if (owner?.toLowerCase() !== account.address.toLowerCase()) { + setIsFormLoading(false); + return toast.error( + `You do not own the tokenId #${selectedTokenId.toString()} from the collection: ${shortenAddress(formData.assetContractAddress)}`, + ); + } + } + } else { + if (!formData.selected || !selectedContract) { + setIsFormLoading(false); + return toast.error("Please select an NFT to list"); + } + nftType = formData.selected.type; + _selectedContract = selectedContract; + selectedTokenId = BigInt(formData.selected.id); + } + /** + * Make sure the selected item is approved to be listed on the marketplace contract + * todo: We are checking "isApprovedForAll" for both erc1155 and 721. + * However for ERC721 there's also a function called "getApproved" which is used to check for approval status of a single token + * - might worth adding that logic here. + */ const isNftApproved = - formData.selected.type === "ERC1155" - ? isApprovedForAll1155 - : isApprovedForAll721; + nftType === "ERC1155" ? isApprovedForAll1155 : isApprovedForAll721; const isApproved = await isNftApproved({ - contract: selectedContract, + contract: _selectedContract, operator: contract.address, owner: account.address, }); if (!isApproved) { const setNftApproval = - formData.selected.type === "ERC1155" + nftType === "ERC1155" ? setApprovalForAll1155 : setApprovalForAll721; const approveTx = setNftApproval({ - contract: selectedContract, + contract: _selectedContract, operator: contract.address, approved: true, }); @@ -256,10 +342,10 @@ export const CreateListingsForm: React.FC = ({ ); const transaction = createListing({ contract, - assetContractAddress: formData.selected.contractAddress, - tokenId: BigInt(formData.selected.id), + assetContractAddress: _selectedContract.address, + tokenId: selectedTokenId, currencyContractAddress: formData.currencyContractAddress, - quantity: BigInt(formData.quantity), + quantity: selectedQuantity, startTimestamp: formData.startTimestamp, pricePerToken: String(formData.pricePerToken), endTimestamp, @@ -305,18 +391,16 @@ export const CreateListingsForm: React.FC = ({ const transaction = createAuction({ contract, - assetContractAddress: formData.selected.contractAddress, - tokenId: BigInt(formData.selected.id), + assetContractAddress: _selectedContract.address, + tokenId: selectedTokenId, startTimestamp: formData.startTimestamp, currencyContractAddress: formData.currencyContractAddress, endTimestamp: new Date( new Date().getTime() + Number.parseInt(formData.listingDurationInSeconds) * 1000, ), - minimumBidAmountWei: - minimumBidAmountWei * BigInt(formData.quantity), - buyoutBidAmountWei: - buyoutBidAmountWei * BigInt(formData.quantity), + minimumBidAmountWei: minimumBidAmountWei * selectedQuantity, + buyoutBidAmountWei: buyoutBidAmountWei * selectedQuantity, }); const promise = sendAndConfirmTx.mutateAsync(transaction, { @@ -353,116 +437,138 @@ export const CreateListingsForm: React.FC = ({ setIsFormLoading(false); })} > - - Select NFT - - Select the NFT you want to list for sale - - {!isSupportedChain ? ( - -
- -

- This chain is not supported by our NFT API yet, please enter the - contract address of the NFT you want to list. -

-
- - Contract address - - - {form.formState.errors.selected?.contractAddress?.message} - - - This will display all the NFTs you own from this contract. - - -
- ) : null} - {isWalletNFTsLoading || - (isOwnedNFTsLoading && - !isSupportedChain && - form.watch("selected.contractAddress")) ? ( -
- -
- ) : nfts && nfts.length !== 0 ? ( - - {nfts?.map((nft) => { - return ( - -
    -
  • - Name: {nft.metadata?.name || "N/A"} -
  • -
  • - Contract Address:{" "} - {shortenIfAddress(nft.contractAddress)} -
  • -
  • - Token ID: {nft.id.toString()} -
  • -
  • - Token Standard: {nft.type} -
  • -
- - } + {mode === "manual" ? ( + <> + + + Manually enter the contract address and token ID of the NFT you + want to list for sale + + NFT Contract Address + + + + Token ID + + + + ) : ( + <> + + + Select the NFT you want to list for sale + + {!isSupportedChain ? ( + +
+ +

+ This chain is not supported by our NFT API yet, please enter + the contract address of the NFT you want to list. +

+
+ - - isSelected(nft) - ? form.setValue("selected", undefined) - : form.setValue("selected", nft) - } - outline={isSelected(nft) ? "3px solid" : undefined} - outlineColor={isSelected(nft) ? "purple.500" : undefined} - overflow="hidden" - > - - -
- ); - })} -
- ) : nfts && nfts.length === 0 ? ( -
- -

- There are no NFTs owned by this wallet. You need NFTs to create a - listing. You can create NFTs with thirdweb.{" "} - - Explore NFT contracts - - . -

-
- ) : null} -
- + Contract address + + + {form.formState.errors.selected?.contractAddress?.message} + + + This will display all the NFTs you own from this contract. + + + + ) : null} + {isWalletNFTsLoading || + (isOwnedNFTsLoading && + !isSupportedChain && + form.watch("selected.contractAddress")) ? ( +
+ +
+ ) : nfts && nfts.length !== 0 ? ( + + {nfts?.map((nft) => { + return ( + +
    +
  • + Name:{" "} + {nft.metadata?.name || "N/A"} +
  • +
  • + Contract Address:{" "} + {shortenIfAddress(nft.contractAddress)} +
  • +
  • + Token ID: {nft.id.toString()} +
  • +
  • + Token Standard: {nft.type} +
  • +
+ + } + > + + isSelected(nft) + ? form.setValue("selected", undefined) + : form.setValue("selected", nft) + } + outline={isSelected(nft) ? "3px solid" : undefined} + outlineColor={ + isSelected(nft) ? "purple.500" : undefined + } + overflow="hidden" + > + + +
+ ); + })} +
+ ) : nfts && nfts.length === 0 ? ( +
+ +

+ There are no NFTs owned by this wallet. You need NFTs to + create a listing. You can create NFTs with thirdweb.{" "} + + Explore NFT contracts + + . +

+
+ ) : null} + + + )} + + Listing Currency = ({ The currency you want to sell your tokens for. - + {form.watch("listingType") === "auction" ? "Buyout Price Per Token" @@ -489,7 +595,7 @@ export const CreateListingsForm: React.FC = ({ {form.watch("selected")?.type?.toLowerCase() !== "erc721" && ( - +
Quantity
@@ -501,7 +607,7 @@ export const CreateListingsForm: React.FC = ({ )} {form.watch("listingType") === "auction" && ( <> - + Reserve Price Per Token @@ -522,7 +628,7 @@ export const CreateListingsForm: React.FC = ({ )} - {!form.watch("selected.id") && ( + {mode === "automatic" && !form.watch("selected.id") && ( No NFT selected From f1cf2fad2b04bd5b7b08161e744c8b347f1b1d89 Mon Sep 17 00:00:00 2001 From: MananTank Date: Mon, 16 Dec 2024 16:59:51 +0000 Subject: [PATCH 23/49] Fix API key redirect URL schema on in-app wallet settings and unresponsive general project settings page (#5747) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Problem solved Fixes: DASH-629 --- ## PR-Codex overview This PR focuses on updating the validation schema and related components for project settings, particularly around custom authentication endpoints and redirect URIs. The changes enhance the form handling and validation logic in the dashboard. ### Detailed summary - Introduced `expandCustomAuthEndpointField` for conditional rendering of custom authentication endpoint fields. - Updated `checked` property of `GatedSwitch` to use the new variable. - Modified the placeholder of `Textarea` in `NativeAppsFieldset`. - Changed `UpdateAPIForm` type to use `ProjectSettingsPageFormSchema`. - Updated form initialization to use `projectSettingsPageFormSchema`. - Refined validation logic for redirect URIs, allowing specific formats. - Created a new `redirectUriSchema` for validating redirect URIs. - Updated `redirectUrls` validation to use the new schema. - Changed the exported validation type from `ApiKeyValidationSchema` to `ProjectSettingsPageFormSchema`. > ✨ Ask PR-Codex anything about this PR by commenting with `/codex {your question}` --- .../settings/ProjectGeneralSettingsPage.tsx | 12 ++-- .../embedded-wallets/Configure/index.tsx | 15 +++-- .../settings/ApiKeys/validations.ts | 65 ++++++++++++++----- 3 files changed, 64 insertions(+), 28 deletions(-) diff --git a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/ProjectGeneralSettingsPage.tsx b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/ProjectGeneralSettingsPage.tsx index 55211eb2fb0..86c8a961ee1 100644 --- a/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/ProjectGeneralSettingsPage.tsx +++ b/apps/dashboard/src/app/team/[team_slug]/[project_slug]/settings/ProjectGeneralSettingsPage.tsx @@ -35,9 +35,9 @@ import { type FieldArrayWithId, useFieldArray } from "react-hook-form"; import { toast } from "sonner"; import { joinWithComma, toArrFromList } from "utils/string"; import { - type ApiKeyValidationSchema, HIDDEN_SERVICES, - apiKeyValidationSchema, + type ProjectSettingsPageFormSchema, + projectSettingsPageFormSchema, } from "../../../../../components/settings/ApiKeys/validations"; type EditProjectUIPaths = { @@ -86,7 +86,7 @@ interface EditApiKeyProps { showNebulaSettings: boolean; } -type UpdateAPIForm = UseFormReturn; +type UpdateAPIForm = UseFormReturn; export const ProjectGeneralSettingsPageUI: React.FC = ( props, @@ -94,8 +94,8 @@ export const ProjectGeneralSettingsPageUI: React.FC = ( const { apiKey, updateMutation, deleteMutation } = props; const trackEvent = useTrack(); const router = useDashboardRouter(); - const form = useForm({ - resolver: zodResolver(apiKeyValidationSchema), + const form = useForm({ + resolver: zodResolver(projectSettingsPageFormSchema), defaultValues: { name: apiKey.name, domains: joinWithComma(apiKey.domains), @@ -484,7 +484,7 @@ function EnabledServicesSetting(props: { }); const handleAction = ( srvIdx: number, - srv: FieldArrayWithId, + srv: FieldArrayWithId, actionName: string, checked: boolean, ) => { diff --git a/apps/dashboard/src/components/embedded-wallets/Configure/index.tsx b/apps/dashboard/src/components/embedded-wallets/Configure/index.tsx index 4fa6c060ccf..5f00301e239 100644 --- a/apps/dashboard/src/components/embedded-wallets/Configure/index.tsx +++ b/apps/dashboard/src/components/embedded-wallets/Configure/index.tsx @@ -422,6 +422,10 @@ function AuthEndpointFields(props: { name: "customAuthEndpoint.customHeaders", }); + const expandCustomAuthEndpointField = + form.watch("customAuthEndpoint")?.authEndpoint !== undefined && + canEditAdvancedFeatures; + return (
{ form.setValue( @@ -464,7 +466,7 @@ function AuthEndpointFields(props: { Allowed redirect URIs -