From 4402bd1564237b9a295dbdc1dc63db7f27e14840 Mon Sep 17 00:00:00 2001 From: Ry Racherbaumer Date: Thu, 24 Oct 2024 14:56:22 -0500 Subject: [PATCH 1/8] Update react app tsconfig --- shared/tsconfig/react-app.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/tsconfig/react-app.json b/shared/tsconfig/react-app.json index 5481553f5..375fa60ee 100644 --- a/shared/tsconfig/react-app.json +++ b/shared/tsconfig/react-app.json @@ -4,7 +4,7 @@ "extends": "./base.json", "compilerOptions": { "jsx": "react-jsx", - "lib": ["DOM", "DOM.Iterable", "ESNext"], + "lib": ["DOM", "DOM.Iterable", "ESNext", "WebWorker"], "module": "ESNext", "moduleResolution": "Bundler", "target": "ESNext" From cab3190dfb25eb79a953004049e86809c99bbbb4 Mon Sep 17 00:00:00 2001 From: Ry Racherbaumer Date: Thu, 24 Oct 2024 14:57:22 -0500 Subject: [PATCH 2/8] Add Browser SDK --- sdks/browser-sdk/LICENSE | 21 + sdks/browser-sdk/README.md | 118 ++++ sdks/browser-sdk/package.json | 101 +++ sdks/browser-sdk/rollup.config.js | 67 ++ sdks/browser-sdk/src/Client.ts | 181 +++++ sdks/browser-sdk/src/ClientWorkerClass.ts | 71 ++ sdks/browser-sdk/src/Conversation.ts | 285 ++++++++ sdks/browser-sdk/src/Conversations.ts | 50 ++ sdks/browser-sdk/src/DecodedMessage.ts | 71 ++ sdks/browser-sdk/src/Utils.ts | 28 + sdks/browser-sdk/src/UtilsWorkerClass.ts | 71 ++ sdks/browser-sdk/src/WorkerClient.ts | 124 ++++ sdks/browser-sdk/src/WorkerConversation.ts | 169 +++++ sdks/browser-sdk/src/WorkerConversations.ts | 60 ++ sdks/browser-sdk/src/constants.ts | 5 + sdks/browser-sdk/src/index.ts | 9 + sdks/browser-sdk/src/types/clientEvents.ts | 426 ++++++++++++ sdks/browser-sdk/src/types/index.ts | 4 + sdks/browser-sdk/src/types/options.ts | 59 ++ sdks/browser-sdk/src/types/utils.ts | 46 ++ sdks/browser-sdk/src/types/utilsEvents.ts | 53 ++ sdks/browser-sdk/src/utils/conversions.ts | 352 ++++++++++ sdks/browser-sdk/src/utils/createClient.ts | 30 + sdks/browser-sdk/src/utils/date.ts | 3 + sdks/browser-sdk/src/workers/client.ts | 689 ++++++++++++++++++++ sdks/browser-sdk/src/workers/utils.ts | 72 ++ sdks/browser-sdk/test/Client.test.ts | 66 ++ sdks/browser-sdk/test/Conversation.test.ts | 375 +++++++++++ sdks/browser-sdk/test/Conversations.test.ts | 188 ++++++ sdks/browser-sdk/test/Utils.test.ts | 19 + sdks/browser-sdk/test/helpers.ts | 103 +++ sdks/browser-sdk/tsconfig.json | 11 + sdks/browser-sdk/typedoc.json | 8 + sdks/browser-sdk/vite.config.ts | 32 + 34 files changed, 3967 insertions(+) create mode 100644 sdks/browser-sdk/LICENSE create mode 100644 sdks/browser-sdk/README.md create mode 100644 sdks/browser-sdk/package.json create mode 100644 sdks/browser-sdk/rollup.config.js create mode 100644 sdks/browser-sdk/src/Client.ts create mode 100644 sdks/browser-sdk/src/ClientWorkerClass.ts create mode 100644 sdks/browser-sdk/src/Conversation.ts create mode 100644 sdks/browser-sdk/src/Conversations.ts create mode 100644 sdks/browser-sdk/src/DecodedMessage.ts create mode 100644 sdks/browser-sdk/src/Utils.ts create mode 100644 sdks/browser-sdk/src/UtilsWorkerClass.ts create mode 100644 sdks/browser-sdk/src/WorkerClient.ts create mode 100644 sdks/browser-sdk/src/WorkerConversation.ts create mode 100644 sdks/browser-sdk/src/WorkerConversations.ts create mode 100644 sdks/browser-sdk/src/constants.ts create mode 100644 sdks/browser-sdk/src/index.ts create mode 100644 sdks/browser-sdk/src/types/clientEvents.ts create mode 100644 sdks/browser-sdk/src/types/index.ts create mode 100644 sdks/browser-sdk/src/types/options.ts create mode 100644 sdks/browser-sdk/src/types/utils.ts create mode 100644 sdks/browser-sdk/src/types/utilsEvents.ts create mode 100644 sdks/browser-sdk/src/utils/conversions.ts create mode 100644 sdks/browser-sdk/src/utils/createClient.ts create mode 100644 sdks/browser-sdk/src/utils/date.ts create mode 100644 sdks/browser-sdk/src/workers/client.ts create mode 100644 sdks/browser-sdk/src/workers/utils.ts create mode 100644 sdks/browser-sdk/test/Client.test.ts create mode 100644 sdks/browser-sdk/test/Conversation.test.ts create mode 100644 sdks/browser-sdk/test/Conversations.test.ts create mode 100644 sdks/browser-sdk/test/Utils.test.ts create mode 100644 sdks/browser-sdk/test/helpers.ts create mode 100644 sdks/browser-sdk/tsconfig.json create mode 100644 sdks/browser-sdk/typedoc.json create mode 100644 sdks/browser-sdk/vite.config.ts diff --git a/sdks/browser-sdk/LICENSE b/sdks/browser-sdk/LICENSE new file mode 100644 index 000000000..ae6695abd --- /dev/null +++ b/sdks/browser-sdk/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 XMTP (xmtp.org) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/sdks/browser-sdk/README.md b/sdks/browser-sdk/README.md new file mode 100644 index 000000000..9c29c43e2 --- /dev/null +++ b/sdks/browser-sdk/README.md @@ -0,0 +1,118 @@ +# XMTP client SDK for browsers + +This package provides the XMTP client SDK for browsers. + +To keep up with the latest SDK developments, see the [Issues tab](https://github.com/xmtp/xmtp-js/issues) in this repo. + +To learn more about XMTP and get answers to frequently asked questions, see the [XMTP documentation](https://xmtp.org/docs). + +> [!CAUTION] +> This SDK is currently in alpha. The API is subject to change and it is not yet recommended for production use. + +## Requirements + +### Response headers + +Server response headers must be set to the following values: + +- `Cross-Origin-Embedder-Policy: require-corp` +- `Cross-Origin-Opener-Policy: same-origin` + +### Bundlers + +This SDK uses a WebAssembly (WASM) module and bundlers must be configured properly to handle it. + +#### Vite + +Add the following to `vite.config.ts`: + +```typescript +import { defineConfig } from "vite"; + +// https://vitejs.dev/config/ +export default defineConfig({ + optimizeDeps: { + exclude: ["@xmtp/wasm-bindings"], + }, +}); +``` + +#### Next.js + +Add the following to `next.config.mjs`: + +```typescript +const nextConfig = { + serverComponentsExternalPackages: ["@xmtp/wasm-bindings"], +}; + +export default nextConfig; +``` + +## Install + +**NPM** + +```bash +npm install @xmtp/browser-sdk +``` + +**PNPM** + +```bash +pnpm install @xmtp/browser-sdk +``` + +**Yarn** + +```bash +yarn add @xmtp/browser-sdk +``` + +## Reference docs + +Access the XMTP client browser SDK [reference documentation](TBD). + +## Usage + +Check out our [official documentation](https://xmtp.org/docs/build/get-started/overview) to get started developing with XMTP. + +## XMTP network environments + +XMTP provides `production`, `dev`, and `local` network environments to support the development phases of your project. To learn more about these environments, see our [official documentation](https://xmtp.org/docs/build/authentication#environments). + +> **Important** +> When you [create a client](https://xmtp.org/docs/build/authentication#create-a-client), it connects to the XMTP `dev` environment by default. To learn how to use the `env` parameter to set your client's network environment, see [Configure the client](https://xmtp.org/docs/build/authentication#configure-the-client). + +## Breaking revisions + +Because this SDK is in active development, you should expect breaking revisions that might require you to adopt the latest SDK release to enable your app to continue working as expected. + +XMTP communicates about breaking revisions in the [XMTP Discord community](https://discord.gg/xmtp), providing as much advance notice as possible. Additionally, breaking revisions in a release are described on the [Releases page](https://github.com/xmtp/xmtp-js/releases). + +## Deprecation + +Older versions of the SDK will eventually be deprecated, which means: + +1. The network will not support and eventually actively reject connections from clients using deprecated versions. +2. Bugs will not be fixed in deprecated versions. + +The following table provides the deprecation schedule. + +| Announced | Effective | Minimum Version | Rationale | +| -------------------------------------------------------------- | --------- | --------------- | --------- | +| There are no deprecations scheduled for this SDK at this time. | | | | + +Bug reports, feature requests, and PRs are welcome in accordance with these [contribution guidelines](https://github.com/xmtp/xmtp-web/blob/main/CONTRIBUTING.md). + +## Developing + +Run `yarn dev` to build the SDK and watch for changes, which will trigger a rebuild. + +### Useful commands + +- `yarn build`: Builds the SDK +- `yarn clean`: Removes `node_modules`, `dist`, and `.turbo` folders +- `yarn dev`: Builds the SDK and watches for changes, which will trigger a rebuild +- `yarn test`: Runs all tests +- `yarn typecheck`: Runs `tsc` diff --git a/sdks/browser-sdk/package.json b/sdks/browser-sdk/package.json new file mode 100644 index 000000000..d5b0ca68c --- /dev/null +++ b/sdks/browser-sdk/package.json @@ -0,0 +1,101 @@ +{ + "name": "@xmtp/browser-sdk", + "version": "0.0.1", + "description": "XMTP client SDK for browsers written in TypeScript", + "keywords": [ + "xmtp", + "messaging", + "web3", + "sdk", + "js", + "ts", + "javascript", + "typescript" + ], + "homepage": "https://github.com/xmtp/xmtp-js", + "bugs": { + "url": "https://github.com/xmtp/xmtp-js/issues" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/xmtp/xmtp-js.git", + "directory": "sdks/browser-sdk" + }, + "license": "MIT", + "author": "XMTP Labs ", + "sideEffects": false, + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "default": "./dist/index.js" + } + }, + "module": "dist/index.js", + "browser": "dist/index.js", + "types": "dist/index.d.ts", + "files": [ + "dist", + "src", + "tsconfig.json" + ], + "scripts": { + "build": "yarn clean:dist && yarn rollup -c", + "clean": "rm -rf .turbo && rm -rf node_modules && yarn clean:dist", + "clean:dist": "rm -rf dist", + "dev": "yarn clean:dist && yarn rollup -c --watch", + "test": "vitest run", + "typecheck": "tsc", + "typedoc": "typedoc" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 3 chrome versions", + "last 3 firefox versions", + "last 3 safari versions" + ] + }, + "dependencies": { + "@xmtp/content-type-group-updated": "^1.0.0", + "@xmtp/content-type-primitives": "^1.0.1", + "@xmtp/content-type-text": "^1.0.0", + "@xmtp/proto": "^3.70.0", + "@xmtp/wasm-bindings": "^0.0.1", + "uuid": "^10.0.0" + }, + "devDependencies": { + "@rollup/plugin-terser": "^0.4.4", + "@rollup/plugin-typescript": "^11.1.6", + "@testing-library/dom": "^10.3.2", + "@testing-library/jest-dom": "^6.4.6", + "@types/uuid": "^10.0.0", + "@vitest/browser": "^2.1.3", + "@vitest/coverage-v8": "^2.0.3", + "@web/rollup-plugin-copy": "^0.5.1", + "playwright": "^1.48.1", + "rollup": "^4.18.1", + "rollup-plugin-dts": "^6.1.1", + "rollup-plugin-filesize": "^10.0.0", + "rollup-plugin-tsconfig-paths": "^1.5.2", + "tsconfig": "workspace:*", + "typedoc": "^0.26.4", + "typescript": "^5.5.3", + "viem": "^2.17.4", + "vite": "^5.4.9", + "vite-tsconfig-paths": "^5.0.1", + "vitest": "^2.1.3" + }, + "engines": { + "node": ">=20" + }, + "publishConfig": { + "access": "public", + "provenance": true, + "registry": "https://registry.npmjs.org/" + } +} diff --git a/sdks/browser-sdk/rollup.config.js b/sdks/browser-sdk/rollup.config.js new file mode 100644 index 000000000..c8c6d8dc0 --- /dev/null +++ b/sdks/browser-sdk/rollup.config.js @@ -0,0 +1,67 @@ +import terser from "@rollup/plugin-terser"; +import typescript from "@rollup/plugin-typescript"; +import { defineConfig } from "rollup"; +import { dts } from "rollup-plugin-dts"; +import filesize from "rollup-plugin-filesize"; +import tsConfigPaths from "rollup-plugin-tsconfig-paths"; + +const plugins = [ + tsConfigPaths(), + typescript({ + declaration: false, + declarationMap: false, + }), + terser(), + filesize({ + showMinifiedSize: false, + }), +]; + +const external = [ + "@xmtp/content-type-text", + "@xmtp/wasm-bindings", + "@xmtp/content-type-primitives", + "@xmtp/proto", + "uuid", +]; + +export default defineConfig([ + { + input: "src/index.ts", + output: { + file: "dist/index.js", + format: "es", + sourcemap: true, + }, + plugins, + external, + }, + { + input: "src/workers/client.ts", + output: { + file: "dist/workers/client.js", + format: "es", + sourcemap: true, + }, + plugins, + external, + }, + { + input: "src/workers/utils.ts", + output: { + file: "dist/workers/utils.js", + format: "es", + sourcemap: true, + }, + plugins, + external, + }, + { + input: "src/index.ts", + output: { + file: "dist/index.d.ts", + format: "es", + }, + plugins: [tsConfigPaths(), dts()], + }, +]); diff --git a/sdks/browser-sdk/src/Client.ts b/sdks/browser-sdk/src/Client.ts new file mode 100644 index 000000000..50d395ea8 --- /dev/null +++ b/sdks/browser-sdk/src/Client.ts @@ -0,0 +1,181 @@ +import { + ContentTypeGroupUpdated, + GroupUpdatedCodec, +} from "@xmtp/content-type-group-updated"; +import type { + ContentCodec, + ContentTypeId, +} from "@xmtp/content-type-primitives"; +import { TextCodec } from "@xmtp/content-type-text"; +import { + WasmGroupMessageKind, + type WasmConsentEntityType, + type WasmSignatureRequestType, +} from "@xmtp/wasm-bindings"; +import { ClientWorkerClass } from "@/ClientWorkerClass"; +import { Conversations } from "@/Conversations"; +import type { ClientOptions } from "@/types"; +import { + fromSafeEncodedContent, + toSafeEncodedContent, + type SafeConsent, + type SafeMessage, +} from "@/utils/conversions"; + +export class Client extends ClientWorkerClass { + address: string; + + options?: ClientOptions; + + #isReady = false; + + #inboxId: string | undefined; + + #installationId: string | undefined; + + #conversations: Conversations; + + #codecs: Map; + + constructor(address: string, options?: ClientOptions) { + const worker = new Worker(new URL("./workers/client", import.meta.url), { + type: "module", + }); + super(worker, options?.enableLogging ?? false); + this.address = address; + this.options = options; + this.#conversations = new Conversations(this); + const codecs = [ + new GroupUpdatedCodec(), + new TextCodec(), + ...(options?.codecs ?? []), + ]; + this.#codecs = new Map( + codecs.map((codec) => [codec.contentType.toString(), codec]), + ); + } + + async init() { + const result = await this.sendMessage("init", { + address: this.address, + options: this.options, + }); + this.#inboxId = result.inboxId; + this.#installationId = result.installationId; + this.#isReady = true; + } + + static async create(address: string, options?: ClientOptions) { + const client = new Client(address, options); + await client.init(); + return client; + } + + get isReady() { + return this.#isReady; + } + + get inboxId() { + return this.#inboxId; + } + + get installationId() { + return this.#installationId; + } + + async getCreateInboxSignatureText() { + return this.sendMessage("getCreateInboxSignatureText", undefined); + } + + async getAddWalletSignatureText(accountAddress: string) { + return this.sendMessage("getAddWalletSignatureText", { accountAddress }); + } + + async getRevokeWalletSignatureText(accountAddress: string) { + return this.sendMessage("getRevokeWalletSignatureText", { accountAddress }); + } + + async addSignature(type: WasmSignatureRequestType, bytes: Uint8Array) { + return this.sendMessage("addSignature", { type, bytes }); + } + + async applySignaturesRequests() { + return this.sendMessage("applySignaturesRequests", undefined); + } + + async registerIdentity() { + return this.sendMessage("registerIdentity", undefined); + } + + async isRegistered() { + return this.sendMessage("isRegistered", undefined); + } + + async canMessage(accountAddresses: string[]) { + return this.sendMessage("canMessage", { accountAddresses }); + } + + async findInboxIdByAddress(address: string) { + return this.sendMessage("findInboxIdByAddress", { address }); + } + + async inboxState(refreshFromNetwork: boolean) { + return this.sendMessage("inboxState", { refreshFromNetwork }); + } + + async getLatestInboxState(inboxId: string) { + return this.sendMessage("getLatestInboxState", { inboxId }); + } + + async setConsentStates(records: SafeConsent[]) { + return this.sendMessage("setConsentStates", { records }); + } + + async getConsentState(entityType: WasmConsentEntityType, entity: string) { + return this.sendMessage("getConsentState", { entityType, entity }); + } + + get conversations() { + return this.#conversations; + } + + codecFor(contentType: ContentTypeId) { + return this.#codecs.get(contentType.toString()); + } + + encodeContent(content: any, contentType: ContentTypeId) { + const codec = this.codecFor(contentType); + if (!codec) { + throw new Error( + `Codec not found for "${contentType.toString()}" content type`, + ); + } + const encoded = codec.encode(content, this); + const fallback = codec.fallback(content); + if (fallback) { + encoded.fallback = fallback; + } + return toSafeEncodedContent(encoded); + } + + decodeContent(message: SafeMessage, contentType: ContentTypeId) { + const codec = this.codecFor(contentType); + if (!codec) { + throw new Error( + `Codec not found for "${contentType.toString()}" content type`, + ); + } + + // throw an error if there's an invalid group membership change message + if ( + contentType.sameAs(ContentTypeGroupUpdated) && + message.kind !== WasmGroupMessageKind.MembershipChange + ) { + throw new Error("Error decoding group membership change"); + } + + const encodedContent = fromSafeEncodedContent(message.content); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return codec.decode(encodedContent, this); + } +} diff --git a/sdks/browser-sdk/src/ClientWorkerClass.ts b/sdks/browser-sdk/src/ClientWorkerClass.ts new file mode 100644 index 000000000..791be8755 --- /dev/null +++ b/sdks/browser-sdk/src/ClientWorkerClass.ts @@ -0,0 +1,71 @@ +import { v4 } from "uuid"; +import type { + ClientEventsActions, + ClientEventsErrorData, + ClientEventsResult, + ClientEventsWorkerMessageData, + ClientSendMessageData, +} from "@/types"; + +const handleError = (event: ErrorEvent) => { + console.error(`Worker error on line ${event.lineno} in "${event.filename}"`); + console.error(event.message); +}; + +export class ClientWorkerClass { + #worker: Worker; + + #enableLogging: boolean; + + #promises = new Map< + string, + { resolve: (value: any) => void; reject: (reason?: any) => void } + >(); + + constructor(worker: Worker, enableLogging: boolean) { + this.#worker = worker; + this.#worker.addEventListener("message", this.handleMessage); + this.#worker.addEventListener("error", handleError); + this.#enableLogging = enableLogging; + } + + sendMessage( + action: A, + data: ClientSendMessageData, + ) { + const promiseId = v4(); + this.#worker.postMessage({ + action, + id: promiseId, + data, + }); + const promise = new Promise>((resolve, reject) => { + this.#promises.set(promiseId, { resolve, reject }); + }); + return promise; + } + + handleMessage = ( + event: MessageEvent, + ) => { + const eventData = event.data; + if (this.#enableLogging) { + console.log("client received event data", eventData); + } + const promise = this.#promises.get(eventData.id); + if (promise) { + this.#promises.delete(eventData.id); + if ("error" in eventData) { + promise.reject(new Error(eventData.error)); + } else { + promise.resolve(eventData.result); + } + } + }; + + close() { + this.#worker.removeEventListener("message", this.handleMessage); + this.#worker.removeEventListener("error", handleError); + this.#worker.terminate(); + } +} diff --git a/sdks/browser-sdk/src/Conversation.ts b/sdks/browser-sdk/src/Conversation.ts new file mode 100644 index 000000000..01e73b382 --- /dev/null +++ b/sdks/browser-sdk/src/Conversation.ts @@ -0,0 +1,285 @@ +import type { ContentTypeId } from "@xmtp/content-type-primitives"; +import { ContentTypeText } from "@xmtp/content-type-text"; +import type { WasmConsentState } from "@xmtp/wasm-bindings"; +import type { Client } from "@/Client"; +import { DecodedMessage } from "@/DecodedMessage"; +import type { + SafeConversation, + SafeListMessagesOptions, +} from "@/utils/conversions"; +import { nsToDate } from "@/utils/date"; + +export class Conversation { + #client: Client; + + #id: string; + + #name?: SafeConversation["name"]; + + #imageUrl?: SafeConversation["imageUrl"]; + + #description?: SafeConversation["description"]; + + #pinnedFrameUrl?: SafeConversation["pinnedFrameUrl"]; + + #isActive?: SafeConversation["isActive"]; + + #addedByInboxId?: SafeConversation["addedByInboxId"]; + + #metadata?: SafeConversation["metadata"]; + + #permissions?: SafeConversation["permissions"]; + + #createdAtNs?: SafeConversation["createdAtNs"]; + + constructor(client: Client, id: string, data?: SafeConversation) { + this.#client = client; + this.#id = id; + this.#syncData(data); + } + + #syncData(data?: SafeConversation) { + this.#name = data?.name ?? ""; + this.#imageUrl = data?.imageUrl ?? ""; + this.#description = data?.description ?? ""; + this.#pinnedFrameUrl = data?.pinnedFrameUrl ?? ""; + this.#isActive = data?.isActive ?? undefined; + this.#addedByInboxId = data?.addedByInboxId ?? ""; + this.#metadata = data?.metadata ?? undefined; + this.#permissions = data?.permissions ?? undefined; + this.#createdAtNs = data?.createdAtNs ?? undefined; + } + + get id() { + return this.#id; + } + + get name() { + return this.#name; + } + + async updateName(name: string) { + await this.#client.sendMessage("updateGroupName", { + id: this.#id, + name, + }); + this.#name = name; + } + + get imageUrl() { + return this.#imageUrl; + } + + async updateImageUrl(imageUrl: string) { + await this.#client.sendMessage("updateGroupImageUrlSquare", { + id: this.#id, + imageUrl, + }); + this.#imageUrl = imageUrl; + } + + get description() { + return this.#description; + } + + async updateDescription(description: string) { + await this.#client.sendMessage("updateGroupDescription", { + id: this.#id, + description, + }); + this.#description = description; + } + + get pinnedFrameUrl() { + return this.#pinnedFrameUrl; + } + + async updatePinnedFrameUrl(pinnedFrameUrl: string) { + await this.#client.sendMessage("updateGroupPinnedFrameUrl", { + id: this.#id, + pinnedFrameUrl, + }); + this.#pinnedFrameUrl = pinnedFrameUrl; + } + + get isActive() { + return this.#isActive; + } + + get addedByInboxId() { + return this.#addedByInboxId; + } + + get createdAtNs() { + return this.#createdAtNs; + } + + get createdAt() { + return this.#createdAtNs ? nsToDate(this.#createdAtNs) : undefined; + } + + get metadata() { + return this.#metadata; + } + + async members() { + return this.#client.sendMessage("getGroupMembers", { + id: this.#id, + }); + } + + async admins() { + return this.#client.sendMessage("getGroupAdmins", { + id: this.#id, + }); + } + + async superAdmins() { + return this.#client.sendMessage("getGroupSuperAdmins", { + id: this.#id, + }); + } + + get permissions() { + return this.#permissions; + } + + async isAdmin(inboxId: string) { + const admins = await this.admins(); + return admins.includes(inboxId); + } + + async isSuperAdmin(inboxId: string) { + const superAdmins = await this.superAdmins(); + return superAdmins.includes(inboxId); + } + + async sync() { + const data = await this.#client.sendMessage("syncGroup", { + id: this.#id, + }); + this.#syncData(data); + } + + async addMembers(accountAddresses: string[]) { + return this.#client.sendMessage("addGroupMembers", { + id: this.#id, + accountAddresses, + }); + } + + async addMembersByInboxId(inboxIds: string[]) { + return this.#client.sendMessage("addGroupMembersByInboxId", { + id: this.#id, + inboxIds, + }); + } + + async removeMembers(accountAddresses: string[]) { + return this.#client.sendMessage("removeGroupMembers", { + id: this.#id, + accountAddresses, + }); + } + + async removeMembersByInboxId(inboxIds: string[]) { + return this.#client.sendMessage("removeGroupMembersByInboxId", { + id: this.#id, + inboxIds, + }); + } + + async addAdmin(inboxId: string) { + return this.#client.sendMessage("addGroupAdmin", { + id: this.#id, + inboxId, + }); + } + + async removeAdmin(inboxId: string) { + return this.#client.sendMessage("removeGroupAdmin", { + id: this.#id, + inboxId, + }); + } + + async addSuperAdmin(inboxId: string) { + return this.#client.sendMessage("addGroupSuperAdmin", { + id: this.#id, + inboxId, + }); + } + + async removeSuperAdmin(inboxId: string) { + return this.#client.sendMessage("removeGroupSuperAdmin", { + id: this.#id, + inboxId, + }); + } + + async publishMessages() { + return this.#client.sendMessage("publishGroupMessages", { + id: this.#id, + }); + } + + async sendOptimistic(content: any, contentType?: ContentTypeId) { + if (typeof content !== "string" && !contentType) { + throw new Error( + "Content type is required when sending content other than text", + ); + } + + const safeEncodedContent = + typeof content === "string" + ? this.#client.encodeContent(content, contentType ?? ContentTypeText) + : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + this.#client.encodeContent(content, contentType!); + + return this.#client.sendMessage("sendOptimisticGroupMessage", { + id: this.#id, + content: safeEncodedContent, + }); + } + + async send(content: any, contentType?: ContentTypeId) { + if (typeof content !== "string" && !contentType) { + throw new Error( + "Content type is required when sending content other than text", + ); + } + + const safeEncodedContent = + typeof content === "string" + ? this.#client.encodeContent(content, contentType ?? ContentTypeText) + : // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + this.#client.encodeContent(content, contentType!); + + return this.#client.sendMessage("sendGroupMessage", { + id: this.#id, + content: safeEncodedContent, + }); + } + + async messages(options?: SafeListMessagesOptions) { + const messages = await this.#client.sendMessage("getGroupMessages", { + id: this.#id, + options, + }); + + return messages.map((message) => new DecodedMessage(this.#client, message)); + } + + async consentState() { + return this.#client.sendMessage("getGroupConsentState", { + id: this.#id, + }); + } + + async updateConsentState(state: WasmConsentState) { + return this.#client.sendMessage("updateGroupConsentState", { + id: this.#id, + state, + }); + } +} diff --git a/sdks/browser-sdk/src/Conversations.ts b/sdks/browser-sdk/src/Conversations.ts new file mode 100644 index 000000000..f2c3316f4 --- /dev/null +++ b/sdks/browser-sdk/src/Conversations.ts @@ -0,0 +1,50 @@ +import type { Client } from "@/Client"; +import { Conversation } from "@/Conversation"; +import type { + SafeCreateGroupOptions, + SafeListConversationsOptions, +} from "@/utils/conversions"; + +export class Conversations { + #client: Client; + + constructor(client: Client) { + this.#client = client; + } + + async sync() { + return this.#client.sendMessage("syncConversations", undefined); + } + + async getConversationById(id: string) { + return this.#client.sendMessage("getConversationById", { + id, + }); + } + + async getMessageById(id: string) { + return this.#client.sendMessage("getMessageById", { + id, + }); + } + + async list(options?: SafeListConversationsOptions) { + const conversations = await this.#client.sendMessage("getConversations", { + options, + }); + + return conversations.map( + (conversation) => + new Conversation(this.#client, conversation.id, conversation), + ); + } + + async newGroup(accountAddresses: string[], options?: SafeCreateGroupOptions) { + const conversation = await this.#client.sendMessage("newGroup", { + accountAddresses, + options, + }); + + return new Conversation(this.#client, conversation.id, conversation); + } +} diff --git a/sdks/browser-sdk/src/DecodedMessage.ts b/sdks/browser-sdk/src/DecodedMessage.ts new file mode 100644 index 000000000..37298da21 --- /dev/null +++ b/sdks/browser-sdk/src/DecodedMessage.ts @@ -0,0 +1,71 @@ +import type { ContentTypeId } from "@xmtp/content-type-primitives"; +import { WasmDeliveryStatus, WasmGroupMessageKind } from "@xmtp/wasm-bindings"; +import type { Client } from "@/Client"; +import { fromSafeContentTypeId, type SafeMessage } from "@/utils/conversions"; + +export type MessageKind = "application" | "membership_change"; +export type MessageDeliveryStatus = "unpublished" | "published" | "failed"; + +export class DecodedMessage { + #client: Client; + + content: any; + + contentType: ContentTypeId; + + conversationId: string; + + deliveryStatus: MessageDeliveryStatus; + + fallback?: string; + + compression?: number; + + id: string; + + kind: MessageKind; + + parameters: Map; + + senderInboxId: string; + + sentAtNs: bigint; + + constructor(client: Client, message: SafeMessage) { + this.#client = client; + this.id = message.id; + this.sentAtNs = message.sentAtNs; + this.conversationId = message.convoId; + this.senderInboxId = message.senderInboxId; + + switch (message.kind) { + case WasmGroupMessageKind.Application: + this.kind = "application"; + break; + case WasmGroupMessageKind.MembershipChange: + this.kind = "membership_change"; + break; + // no default + } + + switch (message.deliveryStatus) { + case WasmDeliveryStatus.Unpublished: + this.deliveryStatus = "unpublished"; + break; + case WasmDeliveryStatus.Published: + this.deliveryStatus = "published"; + break; + case WasmDeliveryStatus.Failed: + this.deliveryStatus = "failed"; + break; + // no default + } + + this.contentType = fromSafeContentTypeId(message.content.type); + this.parameters = new Map(Object.entries(message.content.parameters)); + this.fallback = message.content.fallback; + this.compression = message.content.compression; + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + this.content = this.#client.decodeContent(message, this.contentType); + } +} diff --git a/sdks/browser-sdk/src/Utils.ts b/sdks/browser-sdk/src/Utils.ts new file mode 100644 index 000000000..85703ca11 --- /dev/null +++ b/sdks/browser-sdk/src/Utils.ts @@ -0,0 +1,28 @@ +import type { XmtpEnv } from "@/types/options"; +import { UtilsWorkerClass } from "@/UtilsWorkerClass"; + +export class Utils extends UtilsWorkerClass { + #enableLogging: boolean; + constructor(enableLogging?: boolean) { + const worker = new Worker(new URL("./workers/utils", import.meta.url), { + type: "module", + }); + super(worker, enableLogging ?? false); + this.#enableLogging = enableLogging ?? false; + } + + async generateInboxId(address: string) { + return this.sendMessage("generateInboxId", { + address, + enableLogging: this.#enableLogging, + }); + } + + async getInboxIdForAddress(address: string, env?: XmtpEnv) { + return this.sendMessage("getInboxIdForAddress", { + address, + env, + enableLogging: this.#enableLogging, + }); + } +} diff --git a/sdks/browser-sdk/src/UtilsWorkerClass.ts b/sdks/browser-sdk/src/UtilsWorkerClass.ts new file mode 100644 index 000000000..8f1ec4072 --- /dev/null +++ b/sdks/browser-sdk/src/UtilsWorkerClass.ts @@ -0,0 +1,71 @@ +import { v4 } from "uuid"; +import type { + UtilsEventsActions, + UtilsEventsErrorData, + UtilsEventsResult, + UtilsEventsWorkerMessageData, + UtilsSendMessageData, +} from "@/types"; + +const handleError = (event: ErrorEvent) => { + console.error(`Worker error on line ${event.lineno} in "${event.filename}"`); + console.error(event.message); +}; + +export class UtilsWorkerClass { + #worker: Worker; + + #enableLogging: boolean; + + #promises = new Map< + string, + { resolve: (value: any) => void; reject: (reason?: any) => void } + >(); + + constructor(worker: Worker, enableLogging: boolean) { + this.#worker = worker; + this.#worker.addEventListener("message", this.handleMessage); + this.#worker.addEventListener("error", handleError); + this.#enableLogging = enableLogging; + } + + sendMessage( + action: A, + data: UtilsSendMessageData, + ) { + const promiseId = v4(); + this.#worker.postMessage({ + action, + id: promiseId, + data, + }); + const promise = new Promise>((resolve, reject) => { + this.#promises.set(promiseId, { resolve, reject }); + }); + return promise; + } + + handleMessage = ( + event: MessageEvent, + ) => { + const eventData = event.data; + if (this.#enableLogging) { + console.log("utils received event data", eventData); + } + const promise = this.#promises.get(eventData.id); + if (promise) { + this.#promises.delete(eventData.id); + if ("error" in eventData) { + promise.reject(new Error(eventData.error)); + } else { + promise.resolve(eventData.result); + } + } + }; + + close() { + this.#worker.removeEventListener("message", this.handleMessage); + this.#worker.removeEventListener("error", handleError); + this.#worker.terminate(); + } +} diff --git a/sdks/browser-sdk/src/WorkerClient.ts b/sdks/browser-sdk/src/WorkerClient.ts new file mode 100644 index 000000000..8b630317f --- /dev/null +++ b/sdks/browser-sdk/src/WorkerClient.ts @@ -0,0 +1,124 @@ +import { + type WasmClient, + type WasmConsentEntityType, + type WasmSignatureRequestType, +} from "@xmtp/wasm-bindings"; +import type { ClientOptions } from "@/types"; +import { fromSafeConsent, type SafeConsent } from "@/utils/conversions"; +import { createClient } from "@/utils/createClient"; +import { WorkerConversations } from "@/WorkerConversations"; + +export class WorkerClient { + #client: WasmClient; + + #conversations: WorkerConversations; + + #accountAddress: string; + + constructor(client: WasmClient) { + this.#client = client; + this.#accountAddress = client.accountAddress; + this.#conversations = new WorkerConversations(this, client.conversations()); + } + + static async create( + accountAddress: string, + options?: Omit, + ) { + const client = await createClient(accountAddress, options); + return new WorkerClient(client); + } + + get accountAddress() { + return this.#accountAddress; + } + + get inboxId() { + return this.#client.inboxId; + } + + get installationId() { + return this.#client.installationId; + } + + get isRegistered() { + return this.#client.isRegistered; + } + + async getCreateInboxSignatureText() { + try { + return await this.#client.createInboxSignatureText(); + } catch { + return undefined; + } + } + + async getAddWalletSignatureText(accountAddress: string) { + try { + return await this.#client.addWalletSignatureText( + this.#accountAddress, + accountAddress, + ); + } catch { + return undefined; + } + } + + async getRevokeWalletSignatureText(accountAddress: string) { + try { + return await this.#client.revokeWalletSignatureText(accountAddress); + } catch { + return undefined; + } + } + + async getRevokeInstallationsSignatureText() { + try { + return await this.#client.revokeInstallationsSignatureText(); + } catch { + return undefined; + } + } + + async addSignature(type: WasmSignatureRequestType, bytes: Uint8Array) { + return this.#client.addSignature(type, bytes); + } + + async applySignaturesRequests() { + return this.#client.applySignatureRequests(); + } + + async canMessage(accountAddresses: string[]) { + return this.#client.canMessage(accountAddresses) as Promise< + Map + >; + } + + async registerIdentity() { + return this.#client.registerIdentity(); + } + + async findInboxIdByAddress(address: string) { + return this.#client.findInboxIdByAddress(address); + } + + async inboxState(refreshFromNetwork: boolean) { + return this.#client.inboxState(refreshFromNetwork); + } + + async getLatestInboxState(inboxId: string) { + return this.#client.getLatestInboxState(inboxId); + } + + async setConsentStates(records: SafeConsent[]) { + return this.#client.setConsentStates(records.map(fromSafeConsent)); + } + + async getConsentState(entityType: WasmConsentEntityType, entity: string) { + return this.#client.getConsentState(entityType, entity); + } + + get conversations() { + return this.#conversations; + } +} diff --git a/sdks/browser-sdk/src/WorkerConversation.ts b/sdks/browser-sdk/src/WorkerConversation.ts new file mode 100644 index 000000000..b92abcb2c --- /dev/null +++ b/sdks/browser-sdk/src/WorkerConversation.ts @@ -0,0 +1,169 @@ +import type { + WasmConsentState, + WasmEncodedContent, + WasmGroup, + WasmGroupMember, +} from "@xmtp/wasm-bindings"; +import { + fromSafeListMessagesOptions, + type SafeListMessagesOptions, +} from "@/utils/conversions"; +import type { WorkerClient } from "@/WorkerClient"; + +export class WorkerConversation { + // eslint-disable-next-line no-unused-private-class-members + #client: WorkerClient; + + #group: WasmGroup; + + constructor(client: WorkerClient, group: WasmGroup) { + this.#client = client; + this.#group = group; + } + + get id() { + return this.#group.id(); + } + + get name() { + return this.#group.group_name(); + } + + async updateName(name: string) { + return this.#group.update_group_name(name); + } + + get imageUrl() { + return this.#group.group_image_url_square(); + } + + async updateImageUrl(imageUrl: string) { + return this.#group.update_group_image_url_square(imageUrl); + } + + get description() { + return this.#group.group_description(); + } + + async updateDescription(description: string) { + return this.#group.update_group_description(description); + } + + get pinnedFrameUrl() { + return this.#group.group_pinned_frame_url(); + } + + async updatePinnedFrameUrl(pinnedFrameUrl: string) { + return this.#group.update_group_pinned_frame_url(pinnedFrameUrl); + } + + get isActive() { + return this.#group.is_active(); + } + + get addedByInboxId() { + return this.#group.added_by_inbox_id(); + } + + get createdAtNs() { + return this.#group.created_at_ns(); + } + + get metadata() { + const metadata = this.#group.group_metadata(); + return { + creatorInboxId: metadata.creator_inbox_id(), + conversationType: metadata.conversation_type(), + }; + } + + async members() { + return this.#group.list_members() as Promise; + } + + get admins() { + return this.#group.admin_list(); + } + + get superAdmins() { + return this.#group.super_admin_list(); + } + + get permissions() { + const permissions = this.#group.group_permissions(); + return { + policyType: permissions.policy_type(), + policySet: permissions.policy_set(), + }; + } + + isAdmin(inboxId: string) { + return this.#group.is_admin(inboxId); + } + + isSuperAdmin(inboxId: string) { + return this.#group.is_super_admin(inboxId); + } + + async sync() { + return this.#group.sync(); + } + + async addMembers(accountAddresses: string[]) { + return this.#group.add_members(accountAddresses); + } + + async addMembersByInboxId(inboxIds: string[]) { + return this.#group.add_members_by_inbox_id(inboxIds); + } + + async removeMembers(accountAddresses: string[]) { + return this.#group.remove_members(accountAddresses); + } + + async removeMembersByInboxId(inboxIds: string[]) { + return this.#group.remove_members_by_inbox_id(inboxIds); + } + + async addAdmin(inboxId: string) { + return this.#group.add_admin(inboxId); + } + + async removeAdmin(inboxId: string) { + return this.#group.remove_admin(inboxId); + } + + async addSuperAdmin(inboxId: string) { + return this.#group.add_super_admin(inboxId); + } + + async removeSuperAdmin(inboxId: string) { + return this.#group.remove_super_admin(inboxId); + } + + async publishMessages() { + return this.#group.publish_messages(); + } + + sendOptimistic(encodedContent: WasmEncodedContent) { + return this.#group.send_optimistic(encodedContent); + } + + async send(encodedContent: WasmEncodedContent) { + return this.#group.send(encodedContent); + } + + messages(options?: SafeListMessagesOptions) { + return this.#group.find_messages( + options ? fromSafeListMessagesOptions(options) : undefined, + ); + } + + get consentState() { + return this.#group.consent_state(); + } + + updateConsentState(state: WasmConsentState) { + this.#group.update_consent_state(state); + } +} diff --git a/sdks/browser-sdk/src/WorkerConversations.ts b/sdks/browser-sdk/src/WorkerConversations.ts new file mode 100644 index 000000000..d7a631b82 --- /dev/null +++ b/sdks/browser-sdk/src/WorkerConversations.ts @@ -0,0 +1,60 @@ +import type { WasmConversations, WasmGroup } from "@xmtp/wasm-bindings"; +import { + fromSafeCreateGroupOptions, + fromSafeListConversationsOptions, + toSafeMessage, + type SafeCreateGroupOptions, + type SafeListConversationsOptions, +} from "@/utils/conversions"; +import type { WorkerClient } from "@/WorkerClient"; +import { WorkerConversation } from "@/WorkerConversation"; + +export class WorkerConversations { + #client: WorkerClient; + + #conversations: WasmConversations; + + constructor(client: WorkerClient, conversations: WasmConversations) { + this.#client = client; + this.#conversations = conversations; + } + + async sync() { + return this.#conversations.sync(); + } + + getConversationById(id: string) { + try { + const group = this.#conversations.find_group_by_id(id); + // findGroupById will throw if group is not found + return new WorkerConversation(this.#client, group); + } catch { + return undefined; + } + } + + getMessageById(id: string) { + try { + // findMessageById will throw if message is not found + const message = this.#conversations.find_message_by_id(id); + return toSafeMessage(message); + } catch { + return undefined; + } + } + + async list(options?: SafeListConversationsOptions) { + const groups = (await this.#conversations.list( + options ? fromSafeListConversationsOptions(options) : undefined, + )) as WasmGroup[]; + return groups.map((group) => new WorkerConversation(this.#client, group)); + } + + async newGroup(accountAddresses: string[], options?: SafeCreateGroupOptions) { + const group = await this.#conversations.create_group( + accountAddresses, + options ? fromSafeCreateGroupOptions(options) : undefined, + ); + return new WorkerConversation(this.#client, group); + } +} diff --git a/sdks/browser-sdk/src/constants.ts b/sdks/browser-sdk/src/constants.ts new file mode 100644 index 000000000..b64fd31d6 --- /dev/null +++ b/sdks/browser-sdk/src/constants.ts @@ -0,0 +1,5 @@ +export const ApiUrls = { + local: "http://localhost:5555", + dev: "https://dev.xmtp.network", + production: "https://production.xmtp.network", +} as const; diff --git a/sdks/browser-sdk/src/index.ts b/sdks/browser-sdk/src/index.ts new file mode 100644 index 000000000..67da20342 --- /dev/null +++ b/sdks/browser-sdk/src/index.ts @@ -0,0 +1,9 @@ +export { Client } from "./Client"; +export { Conversations } from "./Conversations"; +export { Conversation } from "./Conversation"; +export * from "./DecodedMessage"; +export { Utils } from "./Utils"; +export { ApiUrls } from "./constants"; +export type * from "./types"; +export * from "./utils/conversions"; +export type * from "@xmtp/wasm-bindings"; diff --git a/sdks/browser-sdk/src/types/clientEvents.ts b/sdks/browser-sdk/src/types/clientEvents.ts new file mode 100644 index 000000000..7b4912622 --- /dev/null +++ b/sdks/browser-sdk/src/types/clientEvents.ts @@ -0,0 +1,426 @@ +import type { + WasmConsentEntityType, + WasmConsentState, + WasmSignatureRequestType, +} from "@xmtp/wasm-bindings"; +import type { + ClientOptions, + EventsClientMessageData, + EventsClientPostMessageData, + EventsErrorData, + EventsResult, + EventsWorkerMessageData, + EventsWorkerPostMessageData, + SendMessageData, +} from "@/types"; +import type { + SafeConsent, + SafeConversation, + SafeCreateGroupOptions, + SafeEncodedContent, + SafeGroupMember, + SafeInboxState, + SafeListConversationsOptions, + SafeListMessagesOptions, + SafeMessage, +} from "@/utils/conversions"; + +export type ClientEvents = + /** + * Client actions + */ + | { + action: "init"; + id: string; + result: { + inboxId: string; + installationId: string; + }; + data: { + address: string; + options?: ClientOptions; + }; + } + | { + action: "getCreateInboxSignatureText"; + id: string; + result: string | undefined; + data: undefined; + } + | { + action: "getAddWalletSignatureText"; + id: string; + result: string | undefined; + data: { + accountAddress: string; + }; + } + | { + action: "getRevokeWalletSignatureText"; + id: string; + result: string | undefined; + data: { + accountAddress: string; + }; + } + | { + action: "getRevokeInstallationsSignatureText"; + id: string; + result: string | undefined; + data: undefined; + } + | { + action: "addSignature"; + id: string; + result: undefined; + data: { + type: WasmSignatureRequestType; + bytes: Uint8Array; + }; + } + | { + action: "applySignaturesRequests"; + id: string; + result: undefined; + data: undefined; + } + | { + action: "registerIdentity"; + id: string; + result: undefined; + data: undefined; + } + | { + action: "isRegistered"; + id: string; + result: boolean; + data: undefined; + } + | { + action: "canMessage"; + id: string; + result: Map; + data: { + accountAddresses: string[]; + }; + } + | { + action: "inboxState"; + id: string; + result: SafeInboxState; + data: { + refreshFromNetwork: boolean; + }; + } + | { + action: "getLatestInboxState"; + id: string; + result: SafeInboxState; + data: { + inboxId: string; + }; + } + | { + action: "setConsentStates"; + id: string; + result: undefined; + data: { + records: SafeConsent[]; + }; + } + | { + action: "getConsentState"; + id: string; + result: WasmConsentState; + data: { + entityType: WasmConsentEntityType; + entity: string; + }; + } + | { + action: "findInboxIdByAddress"; + id: string; + result: string | undefined; + data: { + address: string; + }; + } + /** + * Conversations actions + */ + | { + action: "getConversationById"; + id: string; + result: SafeConversation | undefined; + data: { + id: string; + }; + } + | { + action: "getMessageById"; + id: string; + result: SafeMessage | undefined; + data: { + id: string; + }; + } + | { + action: "getConversations"; + id: string; + result: SafeConversation[]; + data: { + options?: SafeListConversationsOptions; + }; + } + | { + action: "newGroup"; + id: string; + result: SafeConversation; + data: { + accountAddresses: string[]; + options?: SafeCreateGroupOptions; + }; + } + | { + action: "syncConversations"; + id: string; + result: undefined; + data: undefined; + } + /** + * Group actions + */ + | { + action: "syncGroup"; + id: string; + result: SafeConversation; + data: { + id: string; + }; + } + | { + action: "sendGroupMessage"; + id: string; + result: string; + data: { + id: string; + content: SafeEncodedContent; + }; + } + | { + action: "sendOptimisticGroupMessage"; + id: string; + result: string; + data: { + id: string; + content: SafeEncodedContent; + }; + } + | { + action: "publishGroupMessages"; + id: string; + result: undefined; + data: { + id: string; + }; + } + | { + action: "getGroupMessages"; + id: string; + result: SafeMessage[]; + data: { + id: string; + options?: SafeListMessagesOptions; + }; + } + | { + action: "getGroupMembers"; + id: string; + result: SafeGroupMember[]; + data: { + id: string; + }; + } + | { + action: "getGroupAdmins"; + id: string; + result: string[]; + data: { + id: string; + }; + } + | { + action: "getGroupSuperAdmins"; + id: string; + result: string[]; + data: { + id: string; + }; + } + | { + action: "isGroupAdmin"; + id: string; + result: boolean; + data: { + id: string; + inboxId: string; + }; + } + | { + action: "isGroupSuperAdmin"; + id: string; + result: boolean; + data: { + id: string; + inboxId: string; + }; + } + | { + action: "addGroupMembers"; + id: string; + result: undefined; + data: { + id: string; + accountAddresses: string[]; + }; + } + | { + action: "removeGroupMembers"; + id: string; + result: undefined; + data: { + id: string; + accountAddresses: string[]; + }; + } + | { + action: "addGroupMembersByInboxId"; + id: string; + result: undefined; + data: { + id: string; + inboxIds: string[]; + }; + } + | { + action: "removeGroupMembersByInboxId"; + id: string; + result: undefined; + data: { + id: string; + inboxIds: string[]; + }; + } + | { + action: "addGroupAdmin"; + id: string; + result: undefined; + data: { + id: string; + inboxId: string; + }; + } + | { + action: "removeGroupAdmin"; + id: string; + result: undefined; + data: { + id: string; + inboxId: string; + }; + } + | { + action: "addGroupSuperAdmin"; + id: string; + result: undefined; + data: { + id: string; + inboxId: string; + }; + } + | { + action: "removeGroupSuperAdmin"; + id: string; + result: undefined; + data: { + id: string; + inboxId: string; + }; + } + | { + action: "updateGroupName"; + id: string; + result: undefined; + data: { + id: string; + name: string; + }; + } + | { + action: "updateGroupDescription"; + id: string; + result: undefined; + data: { + id: string; + description: string; + }; + } + | { + action: "updateGroupImageUrlSquare"; + id: string; + result: undefined; + data: { + id: string; + imageUrl: string; + }; + } + | { + action: "updateGroupPinnedFrameUrl"; + id: string; + result: undefined; + data: { + id: string; + pinnedFrameUrl: string; + }; + } + | { + action: "getGroupConsentState"; + id: string; + result: WasmConsentState; + data: { + id: string; + }; + } + | { + action: "updateGroupConsentState"; + id: string; + result: undefined; + data: { + id: string; + state: WasmConsentState; + }; + }; + +export type ClientEventsActions = ClientEvents["action"]; + +export type ClientEventsClientMessageData = + EventsClientMessageData; + +export type ClientEventsWorkerMessageData = + EventsWorkerMessageData; + +export type ClientEventsResult = EventsResult< + ClientEvents, + A +>; + +export type ClientSendMessageData = + SendMessageData; + +export type ClientEventsWorkerPostMessageData = + EventsWorkerPostMessageData; + +export type ClientEventsClientPostMessageData = + EventsClientPostMessageData; + +export type ClientEventsErrorData = EventsErrorData; diff --git a/sdks/browser-sdk/src/types/index.ts b/sdks/browser-sdk/src/types/index.ts new file mode 100644 index 000000000..b0e2bc3c6 --- /dev/null +++ b/sdks/browser-sdk/src/types/index.ts @@ -0,0 +1,4 @@ +export type * from "./options"; +export type * from "./clientEvents"; +export type * from "./utilsEvents"; +export type * from "./utils"; diff --git a/sdks/browser-sdk/src/types/options.ts b/sdks/browser-sdk/src/types/options.ts new file mode 100644 index 000000000..6d016c3df --- /dev/null +++ b/sdks/browser-sdk/src/types/options.ts @@ -0,0 +1,59 @@ +import type { ContentCodec } from "@xmtp/content-type-primitives"; +import type { ApiUrls } from "@/constants"; + +export type XmtpEnv = keyof typeof ApiUrls; + +/** + * Network options + */ +export type NetworkOptions = { + /** + * Specify which XMTP environment to connect to. (default: `dev`) + */ + env?: XmtpEnv; + /** + * apiUrl can be used to override the `env` flag and connect to a + * specific endpoint + */ + apiUrl?: string; +}; + +/** + * Encryption options + */ +export type EncryptionOptions = { + /** + * Encryption key to use for the local DB + */ + encryptionKey?: Uint8Array; +}; + +/** + * Storage options + */ +export type StorageOptions = { + /** + * Path to the local DB + */ + dbPath?: string; +}; + +export type ContentOptions = { + /** + * Allow configuring codecs for additional content types + */ + codecs?: ContentCodec[]; +}; + +export type OtherOptions = { + /** + * Enable logging of events between the client and worker + */ + enableLogging?: boolean; +}; + +export type ClientOptions = NetworkOptions & + EncryptionOptions & + StorageOptions & + ContentOptions & + OtherOptions; diff --git a/sdks/browser-sdk/src/types/utils.ts b/sdks/browser-sdk/src/types/utils.ts new file mode 100644 index 000000000..3ea6f6418 --- /dev/null +++ b/sdks/browser-sdk/src/types/utils.ts @@ -0,0 +1,46 @@ +export type GenericEvent = { + action: string; + id: string; + result: unknown; + data: unknown; +}; + +export type EventsClientMessageData = { + [Action in Events["action"]]: Omit< + Extract, + "result" + >; +}[Events["action"]]; + +export type EventsWorkerMessageData = { + [Action in Events["action"]]: Omit< + Extract, + "data" + >; +}[Events["action"]]; + +export type EventsResult< + Events extends GenericEvent, + Action extends Events["action"], +> = Extract["result"]; + +export type SendMessageData< + Events extends GenericEvent, + Action extends Events["action"], +> = Extract["data"]; + +export type EventsWorkerPostMessageData< + Events extends GenericEvent, + Action extends Events["action"], +> = Omit, "data">; + +export type EventsClientPostMessageData< + Events extends GenericEvent, + Action extends Events["action"], +> = Omit, "result">; + +export type EventsErrorData = { + id: string; + action: Events["action"]; + error: string; +}; diff --git a/sdks/browser-sdk/src/types/utilsEvents.ts b/sdks/browser-sdk/src/types/utilsEvents.ts new file mode 100644 index 000000000..9b9a25927 --- /dev/null +++ b/sdks/browser-sdk/src/types/utilsEvents.ts @@ -0,0 +1,53 @@ +import type { + EventsClientMessageData, + EventsClientPostMessageData, + EventsErrorData, + EventsResult, + EventsWorkerMessageData, + EventsWorkerPostMessageData, + SendMessageData, + XmtpEnv, +} from "@/types"; + +export type UtilsEvents = + | { + action: "generateInboxId"; + id: string; + result: string; + data: { + address: string; + enableLogging: boolean; + }; + } + | { + action: "getInboxIdForAddress"; + id: string; + result: string | undefined; + data: { + address: string; + env?: XmtpEnv; + enableLogging: boolean; + }; + }; + +export type UtilsEventsActions = UtilsEvents["action"]; + +export type UtilsEventsClientMessageData = EventsClientMessageData; + +export type UtilsEventsWorkerMessageData = EventsWorkerMessageData; + +export type UtilsEventsResult = EventsResult< + UtilsEvents, + A +>; + +export type UtilsSendMessageData = + SendMessageData; + +export type UtilsEventsWorkerPostMessageData = + EventsWorkerPostMessageData; + +export type UtilsEventsClientPostMessageData = + EventsClientPostMessageData; + +export type UtilsEventsErrorData = EventsErrorData; diff --git a/sdks/browser-sdk/src/utils/conversions.ts b/sdks/browser-sdk/src/utils/conversions.ts new file mode 100644 index 000000000..103a10563 --- /dev/null +++ b/sdks/browser-sdk/src/utils/conversions.ts @@ -0,0 +1,352 @@ +import { + ContentTypeId, + type EncodedContent, +} from "@xmtp/content-type-primitives"; +import { + WasmConsent, + WasmContentTypeId, + WasmCreateGroupOptions, + WasmEncodedContent, + WasmGroupMember, + WasmListConversationsOptions, + WasmListMessagesOptions, + type WasmConsentEntityType, + type WasmConsentState, + type WasmDeliveryStatus, + type WasmGroupMessageKind, + type WasmGroupPermissionsOptions, + type WasmInboxState, + type WasmInstallation, + type WasmMessage, + type WasmPermissionLevel, + type WasmPermissionPolicy, +} from "@xmtp/wasm-bindings"; +import type { WorkerConversation } from "@/WorkerConversation"; + +export const toContentTypeId = ( + contentTypeId: WasmContentTypeId, +): ContentTypeId => + new ContentTypeId({ + authorityId: contentTypeId.authority_id, + typeId: contentTypeId.type_id, + versionMajor: contentTypeId.version_major, + versionMinor: contentTypeId.version_minor, + }); + +export const fromContentTypeId = ( + contentTypeId: ContentTypeId, +): WasmContentTypeId => + new WasmContentTypeId( + contentTypeId.authorityId, + contentTypeId.typeId, + contentTypeId.versionMajor, + contentTypeId.versionMinor, + ); + +export type SafeContentTypeId = { + authorityId: string; + typeId: string; + versionMajor: number; + versionMinor: number; +}; + +export const toSafeContentTypeId = ( + contentTypeId: ContentTypeId, +): SafeContentTypeId => ({ + authorityId: contentTypeId.authorityId, + typeId: contentTypeId.typeId, + versionMajor: contentTypeId.versionMajor, + versionMinor: contentTypeId.versionMinor, +}); + +export const fromSafeContentTypeId = ( + contentTypeId: SafeContentTypeId, +): ContentTypeId => + new ContentTypeId({ + authorityId: contentTypeId.authorityId, + typeId: contentTypeId.typeId, + versionMajor: contentTypeId.versionMajor, + versionMinor: contentTypeId.versionMinor, + }); + +export const toEncodedContent = ( + content: WasmEncodedContent, +): EncodedContent => ({ + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + type: toContentTypeId(content.type!), + parameters: Object.fromEntries(content.parameters as Map), + fallback: content.fallback, + compression: content.compression, + content: content.content, +}); + +export const fromEncodedContent = ( + content: EncodedContent, +): WasmEncodedContent => + new WasmEncodedContent( + fromContentTypeId(content.type), + new Map(Object.entries(content.parameters)), + content.fallback, + content.compression, + content.content, + ); + +export type SafeEncodedContent = { + type: SafeContentTypeId; + parameters: Record; + fallback?: string; + compression?: number; + content: Uint8Array; +}; + +export const toSafeEncodedContent = ( + content: EncodedContent, +): SafeEncodedContent => ({ + type: toSafeContentTypeId(content.type), + parameters: content.parameters, + fallback: content.fallback, + compression: content.compression, + content: content.content, +}); + +export const fromSafeEncodedContent = ( + content: SafeEncodedContent, +): EncodedContent => ({ + type: fromSafeContentTypeId(content.type), + parameters: content.parameters, + fallback: content.fallback, + compression: content.compression, + content: content.content, +}); + +export type SafeMessage = { + content: SafeEncodedContent; + convoId: string; + deliveryStatus: WasmDeliveryStatus; + id: string; + kind: WasmGroupMessageKind; + senderInboxId: string; + sentAtNs: bigint; +}; + +export const toSafeMessage = (message: WasmMessage): SafeMessage => ({ + content: toSafeEncodedContent(toEncodedContent(message.content)), + convoId: message.convo_id, + deliveryStatus: message.delivery_status, + id: message.id, + kind: message.kind, + senderInboxId: message.sender_inbox_id, + sentAtNs: message.sent_at_ns, +}); + +export type SafeListMessagesOptions = { + delivery_status?: WasmDeliveryStatus; + limit?: bigint; + sent_after_ns?: bigint; + sent_before_ns?: bigint; +}; + +export const toSafeListMessagesOptions = ( + options: WasmListMessagesOptions, +): SafeListMessagesOptions => ({ + delivery_status: options.delivery_status, + limit: options.limit, + sent_after_ns: options.sent_after_ns, + sent_before_ns: options.sent_before_ns, +}); + +export const fromSafeListMessagesOptions = ( + options: SafeListMessagesOptions, +): WasmListMessagesOptions => + new WasmListMessagesOptions( + options.sent_before_ns, + options.sent_after_ns, + options.limit, + options.delivery_status, + ); + +export type SafeListConversationsOptions = { + created_after_ns?: bigint; + created_before_ns?: bigint; + limit?: bigint; +}; + +export const toSafeListConversationsOptions = ( + options: WasmListConversationsOptions, +): SafeListConversationsOptions => ({ + created_after_ns: options.created_after_ns, + created_before_ns: options.created_before_ns, + limit: options.limit, +}); + +export const fromSafeListConversationsOptions = ( + options: SafeListConversationsOptions, +): WasmListConversationsOptions => + new WasmListConversationsOptions( + options.created_after_ns, + options.created_before_ns, + options.limit, + ); + +export type SafeCreateGroupOptions = { + permissions?: WasmGroupPermissionsOptions; + name?: string; + imageUrlSquare?: string; + description?: string; + pinnedFrameUrl?: string; +}; + +export const toSafeCreateGroupOptions = ( + options: WasmCreateGroupOptions, +): SafeCreateGroupOptions => ({ + permissions: options.permissions, + name: options.group_name, + imageUrlSquare: options.group_image_url_square, + description: options.group_description, + pinnedFrameUrl: options.group_pinned_frame_url, +}); + +export const fromSafeCreateGroupOptions = ( + options: SafeCreateGroupOptions, +): WasmCreateGroupOptions => + new WasmCreateGroupOptions( + options.permissions, + options.name, + options.imageUrlSquare, + options.description, + options.pinnedFrameUrl, + ); + +export type SafeConversation = { + id: string; + name: string; + imageUrl: string; + description: string; + pinnedFrameUrl: string; + permissions: { + policyType: WasmGroupPermissionsOptions; + policySet: { + addAdminPolicy: WasmPermissionPolicy; + addMemberPolicy: WasmPermissionPolicy; + removeAdminPolicy: WasmPermissionPolicy; + removeMemberPolicy: WasmPermissionPolicy; + updateGroupDescriptionPolicy: WasmPermissionPolicy; + updateGroupImageUrlSquarePolicy: WasmPermissionPolicy; + updateGroupNamePolicy: WasmPermissionPolicy; + updateGroupPinnedFrameUrlPolicy: WasmPermissionPolicy; + }; + }; + isActive: boolean; + addedByInboxId: string; + metadata: { + creatorInboxId: string; + conversationType: string; + }; + admins: string[]; + superAdmins: string[]; + createdAtNs: bigint; +}; + +export const toSafeConversation = ( + conversation: WorkerConversation, +): SafeConversation => ({ + id: conversation.id, + name: conversation.name, + imageUrl: conversation.imageUrl, + description: conversation.description, + pinnedFrameUrl: conversation.pinnedFrameUrl, + permissions: { + policyType: conversation.permissions.policyType, + policySet: { + addAdminPolicy: conversation.permissions.policySet.add_admin_policy, + addMemberPolicy: conversation.permissions.policySet.add_member_policy, + removeAdminPolicy: conversation.permissions.policySet.remove_admin_policy, + removeMemberPolicy: + conversation.permissions.policySet.remove_member_policy, + updateGroupDescriptionPolicy: + conversation.permissions.policySet.update_group_description_policy, + updateGroupImageUrlSquarePolicy: + conversation.permissions.policySet.update_group_image_url_square_policy, + updateGroupNamePolicy: + conversation.permissions.policySet.update_group_name_policy, + updateGroupPinnedFrameUrlPolicy: + conversation.permissions.policySet.update_group_pinned_frame_url_policy, + }, + }, + isActive: conversation.isActive, + addedByInboxId: conversation.addedByInboxId, + metadata: conversation.metadata, + admins: conversation.admins, + superAdmins: conversation.superAdmins, + createdAtNs: conversation.createdAtNs, +}); + +export type SafeInstallation = { + id: string; + clientTimestampNs?: bigint; +}; + +export const toSafeInstallation = ( + installation: WasmInstallation, +): SafeInstallation => ({ + id: installation.id, + clientTimestampNs: installation.client_timestamp_ns, +}); + +export type SafeInboxState = { + accountAddresses: string[]; + inboxId: string; + installations: SafeInstallation[]; + recoveryAddress: string; +}; + +export const toSafeInboxState = ( + inboxState: WasmInboxState, +): SafeInboxState => ({ + accountAddresses: inboxState.account_addresses, + inboxId: inboxState.inbox_id, + installations: inboxState.installations.map(toSafeInstallation), + recoveryAddress: inboxState.recovery_address, +}); + +export type SafeConsent = { + entity: string; + entityType: WasmConsentEntityType; + state: WasmConsentState; +}; + +export const toSafeConsent = (consent: WasmConsent): SafeConsent => ({ + entity: consent.entity, + entityType: consent.entity_type, + state: consent.state, +}); + +export const fromSafeConsent = (consent: SafeConsent): WasmConsent => + new WasmConsent(consent.entityType, consent.state, consent.entity); + +export type SafeGroupMember = { + accountAddresses: string[]; + consentState: WasmConsentState; + inboxId: string; + installationIds: string[]; + permissionLevel: WasmPermissionLevel; +}; + +export const toSafeGroupMember = ( + member: WasmGroupMember, +): SafeGroupMember => ({ + accountAddresses: member.account_addresses, + consentState: member.consent_state, + inboxId: member.inbox_id, + installationIds: member.installation_ids, + permissionLevel: member.permission_level, +}); + +export const fromSafeGroupMember = (member: SafeGroupMember): WasmGroupMember => + new WasmGroupMember( + member.inboxId, + member.accountAddresses, + member.installationIds, + member.permissionLevel, + member.consentState, + ); diff --git a/sdks/browser-sdk/src/utils/createClient.ts b/sdks/browser-sdk/src/utils/createClient.ts new file mode 100644 index 000000000..e5f6cbaf5 --- /dev/null +++ b/sdks/browser-sdk/src/utils/createClient.ts @@ -0,0 +1,30 @@ +import init, { + createClient as createWasmClient, + generateInboxId, + getInboxIdForAddress, +} from "@xmtp/wasm-bindings"; +import { ApiUrls } from "@/constants"; +import type { ClientOptions } from "@/types"; + +export const createClient = async ( + accountAddress: string, + options?: Omit, +) => { + // initialize WASM module + await init(); + + const host = options?.apiUrl ?? ApiUrls[options?.env ?? "dev"]; + const dbPath = `xmtp-${options?.env ?? "dev"}-${accountAddress}.db3`; + + const inboxId = + (await getInboxIdForAddress(host, accountAddress)) || + generateInboxId(accountAddress); + + return createWasmClient( + host, + inboxId, + accountAddress, + dbPath, + options?.encryptionKey, + ); +}; diff --git a/sdks/browser-sdk/src/utils/date.ts b/sdks/browser-sdk/src/utils/date.ts new file mode 100644 index 000000000..b15e9987b --- /dev/null +++ b/sdks/browser-sdk/src/utils/date.ts @@ -0,0 +1,3 @@ +export function nsToDate(ns: bigint): Date { + return new Date(Number(ns / 1_000_000n)); +} diff --git a/sdks/browser-sdk/src/workers/client.ts b/sdks/browser-sdk/src/workers/client.ts new file mode 100644 index 000000000..548f88129 --- /dev/null +++ b/sdks/browser-sdk/src/workers/client.ts @@ -0,0 +1,689 @@ +import type { + ClientEventsActions, + ClientEventsClientMessageData, + ClientEventsErrorData, + ClientEventsWorkerPostMessageData, +} from "@/types"; +import { + fromEncodedContent, + fromSafeEncodedContent, + toSafeConversation, + toSafeGroupMember, + toSafeInboxState, + toSafeMessage, +} from "@/utils/conversions"; +import { WorkerClient } from "@/WorkerClient"; + +let client: WorkerClient; +let enableLogging = false; + +/** + * Type-safe postMessage + */ +const postMessage = ( + data: ClientEventsWorkerPostMessageData, +) => { + self.postMessage(data); +}; + +/** + * Type-safe postMessage for errors + */ +const postMessageError = (data: ClientEventsErrorData) => { + self.postMessage(data); +}; + +self.onmessage = async (event: MessageEvent) => { + const { action, id, data } = event.data; + + if (enableLogging) { + console.log("client worker received event data", event.data); + } + + // a client is required for all actions except init + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition + if (action !== "init" && !client) { + postMessageError({ + id, + action, + error: "Client not initialized", + }); + return; + } + + try { + switch (action) { + /** + * Client actions + */ + case "init": + client = await WorkerClient.create(data.address, data.options); + enableLogging = data.options?.enableLogging ?? false; + postMessage({ + id, + action, + result: { + inboxId: client.inboxId, + installationId: client.installationId, + }, + }); + break; + case "getCreateInboxSignatureText": { + const result = await client.getCreateInboxSignatureText(); + postMessage({ + id, + action, + result, + }); + break; + } + case "getAddWalletSignatureText": { + const result = await client.getAddWalletSignatureText( + data.accountAddress, + ); + postMessage({ + id, + action, + result, + }); + break; + } + case "getRevokeWalletSignatureText": { + const result = await client.getRevokeWalletSignatureText( + data.accountAddress, + ); + postMessage({ + id, + action, + result, + }); + break; + } + case "addSignature": + await client.addSignature(data.type, data.bytes); + postMessage({ + id, + action, + result: undefined, + }); + break; + case "applySignaturesRequests": + await client.applySignaturesRequests(); + postMessage({ + id, + action, + result: undefined, + }); + break; + case "registerIdentity": + await client.registerIdentity(); + postMessage({ + id, + action, + result: undefined, + }); + break; + case "isRegistered": { + const result = client.isRegistered; + postMessage({ + id, + action, + result, + }); + break; + } + case "canMessage": { + const result = await client.canMessage(data.accountAddresses); + postMessage({ + id, + action, + result, + }); + break; + } + case "inboxState": { + const result = await client.inboxState(data.refreshFromNetwork); + postMessage({ + id, + action, + result: toSafeInboxState(result), + }); + break; + } + case "getLatestInboxState": { + const result = await client.getLatestInboxState(data.inboxId); + postMessage({ + id, + action, + result: toSafeInboxState(result), + }); + break; + } + case "setConsentStates": { + await client.setConsentStates(data.records); + postMessage({ + id, + action, + result: undefined, + }); + break; + } + case "getConsentState": { + const result = await client.getConsentState( + data.entityType, + data.entity, + ); + postMessage({ + id, + action, + result, + }); + break; + } + case "findInboxIdByAddress": { + const result = await client.findInboxIdByAddress(data.address); + postMessage({ + id, + action, + result, + }); + break; + } + /** + * Conversations actions + */ + case "getConversations": { + const conversations = await client.conversations.list(data.options); + postMessage({ + id, + action, + result: conversations.map((conversation) => + toSafeConversation(conversation), + ), + }); + break; + } + case "newGroup": { + const conversation = await client.conversations.newGroup( + data.accountAddresses, + data.options, + ); + postMessage({ + id, + action, + result: toSafeConversation(conversation), + }); + break; + } + case "syncConversations": { + await client.conversations.sync(); + postMessage({ + id, + action, + result: undefined, + }); + break; + } + case "getConversationById": { + const conversation = client.conversations.getConversationById(data.id); + postMessage({ + id, + action, + result: conversation ? toSafeConversation(conversation) : undefined, + }); + break; + } + case "getMessageById": { + const message = client.conversations.getMessageById(data.id); + postMessage({ + id, + action, + result: message, + }); + break; + } + /** + * Group actions + */ + case "syncGroup": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.sync(); + postMessage({ + id, + action, + result: toSafeConversation(group), + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "updateGroupName": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.updateName(data.name); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "updateGroupDescription": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.updateDescription(data.description); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "updateGroupImageUrlSquare": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.updateImageUrl(data.imageUrl); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "updateGroupPinnedFrameUrl": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.updatePinnedFrameUrl(data.pinnedFrameUrl); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "sendGroupMessage": { + const group = client.conversations.getConversationById(data.id); + if (group) { + const result = await group.send( + fromEncodedContent(fromSafeEncodedContent(data.content)), + ); + postMessage({ + id, + action, + result, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "sendOptimisticGroupMessage": { + const group = client.conversations.getConversationById(data.id); + if (group) { + const result = group.sendOptimistic( + fromEncodedContent(fromSafeEncodedContent(data.content)), + ); + postMessage({ + id, + action, + result, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "publishGroupMessages": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.publishMessages(); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "getGroupMessages": { + const group = client.conversations.getConversationById(data.id); + if (group) { + const messages = group.messages(data.options); + postMessage({ + id, + action, + result: messages.map((message) => toSafeMessage(message)), + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "getGroupMembers": { + const group = client.conversations.getConversationById(data.id); + if (group) { + const members = await group.members(); + postMessage({ + id, + action, + result: members.map((member) => toSafeGroupMember(member)), + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "getGroupAdmins": { + const group = client.conversations.getConversationById(data.id); + if (group) { + postMessage({ + id, + action, + result: group.admins, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "getGroupSuperAdmins": { + const group = client.conversations.getConversationById(data.id); + if (group) { + postMessage({ + id, + action, + result: group.superAdmins, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "getGroupConsentState": { + const group = client.conversations.getConversationById(data.id); + if (group) { + postMessage({ + id, + action, + result: group.consentState, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "updateGroupConsentState": { + const group = client.conversations.getConversationById(data.id); + if (group) { + group.updateConsentState(data.state); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "addGroupAdmin": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.addAdmin(data.inboxId); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "removeGroupAdmin": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.removeAdmin(data.inboxId); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "addGroupSuperAdmin": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.addSuperAdmin(data.inboxId); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "removeGroupSuperAdmin": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.removeSuperAdmin(data.inboxId); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "addGroupMembers": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.addMembers(data.accountAddresses); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "removeGroupMembers": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.removeMembers(data.accountAddresses); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "addGroupMembersByInboxId": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.addMembersByInboxId(data.inboxIds); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "removeGroupMembersByInboxId": { + const group = client.conversations.getConversationById(data.id); + if (group) { + await group.removeMembersByInboxId(data.inboxIds); + postMessage({ + id, + action, + result: undefined, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "isGroupAdmin": { + const group = client.conversations.getConversationById(data.id); + if (group) { + const result = group.isAdmin(data.inboxId); + postMessage({ + id, + action, + result, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + case "isGroupSuperAdmin": { + const group = client.conversations.getConversationById(data.id); + if (group) { + const result = group.isSuperAdmin(data.inboxId); + postMessage({ + id, + action, + result, + }); + } else { + postMessageError({ + id, + action, + error: "Group not found", + }); + } + break; + } + } + } catch (e) { + postMessageError({ + id, + action, + error: (e as Error).message, + }); + } +}; diff --git a/sdks/browser-sdk/src/workers/utils.ts b/sdks/browser-sdk/src/workers/utils.ts new file mode 100644 index 000000000..7beee4949 --- /dev/null +++ b/sdks/browser-sdk/src/workers/utils.ts @@ -0,0 +1,72 @@ +import init, { + generateInboxId as generate_inbox_id, + getInboxIdForAddress as get_inbox_id_for_address, +} from "@xmtp/wasm-bindings"; +import { ApiUrls } from "@/constants"; +import type { + UtilsEventsActions, + UtilsEventsClientMessageData, + UtilsEventsErrorData, + UtilsEventsWorkerPostMessageData, + XmtpEnv, +} from "@/types"; + +/** + * Type-safe postMessage + */ +const postMessage = ( + data: UtilsEventsWorkerPostMessageData, +) => { + self.postMessage(data); +}; + +/** + * Type-safe postMessage for errors + */ +const postMessageError = (data: UtilsEventsErrorData) => { + self.postMessage(data); +}; + +export const generateInboxId = async (address: string) => { + await init(); + return generate_inbox_id(address); +}; + +export const getInboxIdForAddress = async (address: string, env?: XmtpEnv) => { + await init(); + const host = env ? ApiUrls[env] : ApiUrls.dev; + return get_inbox_id_for_address(host, address); +}; + +self.onmessage = async (event: MessageEvent) => { + const { action, id, data } = event.data; + if (data.enableLogging) { + console.log("utils worker received event data", event.data); + } + + try { + switch (action) { + case "generateInboxId": + postMessage({ + id, + action, + result: await generateInboxId(data.address), + }); + break; + case "getInboxIdForAddress": + postMessage({ + id, + action, + result: await getInboxIdForAddress(data.address, data.env), + }); + break; + // no default + } + } catch (e) { + postMessageError({ + id, + action, + error: (e as Error).message, + }); + } +}; diff --git a/sdks/browser-sdk/test/Client.test.ts b/sdks/browser-sdk/test/Client.test.ts new file mode 100644 index 000000000..404a0a5d9 --- /dev/null +++ b/sdks/browser-sdk/test/Client.test.ts @@ -0,0 +1,66 @@ +import { describe, expect, it } from "vitest"; +import { + createClient, + createRegisteredClient, + createUser, +} from "@test/helpers"; + +describe("Client", () => { + it("should create a client", async () => { + const user = createUser(); + const client = await createClient(user); + expect(client.address).toBe(user.account.address); + expect(await client.isRegistered()).toBe(false); + expect(await client.getCreateInboxSignatureText()).not.toBeUndefined(); + expect(client.inboxId).toBeDefined(); + expect(client.installationId).toBeDefined(); + }); + + it("should register an identity", async () => { + const user = createUser(); + await createRegisteredClient(user); + const client2 = await createRegisteredClient(user); + expect(await client2.isRegistered()).toBe(true); + expect(await client2.getCreateInboxSignatureText()).toBeUndefined(); + expect( + Object.fromEntries(await client2.canMessage([user.account.address])), + ).toEqual({ + [user.account.address.toLowerCase()]: true, + }); + }); + + it("should get an inbox ID from an address", async () => { + const user = createUser(); + const client = await createRegisteredClient(user); + const inboxId = await client.findInboxIdByAddress(user.account.address); + expect(inboxId).toBe(client.inboxId); + }); + + it("should return the correct inbox state", async () => { + const user = createUser(); + const client = await createRegisteredClient(user); + const inboxState = await client.inboxState(false); + expect(inboxState.inboxId).toBe(client.inboxId); + expect(inboxState.installations.map((install) => install.id)).toEqual([ + client.installationId, + ]); + expect(inboxState.accountAddresses).toEqual([ + user.account.address.toLowerCase(), + ]); + expect(inboxState.recoveryAddress).toBe(user.account.address.toLowerCase()); + }); + + it("should get latest inbox state from inbox ID", async () => { + const user = createUser(); + const client = await createRegisteredClient(user); + const inboxState = await client.getLatestInboxState(client.inboxId!); + expect(inboxState.inboxId).toBe(client.inboxId); + expect(inboxState.installations.map((install) => install.id)).toEqual([ + client.installationId, + ]); + expect(inboxState.accountAddresses).toEqual([ + user.account.address.toLowerCase(), + ]); + expect(inboxState.recoveryAddress).toBe(user.account.address.toLowerCase()); + }); +}); diff --git a/sdks/browser-sdk/test/Conversation.test.ts b/sdks/browser-sdk/test/Conversation.test.ts new file mode 100644 index 000000000..1bcd1cc6d --- /dev/null +++ b/sdks/browser-sdk/test/Conversation.test.ts @@ -0,0 +1,375 @@ +import { describe, expect, it } from "vitest"; +import { + ContentTypeTest, + createRegisteredClient, + createUser, + TestCodec, +} from "@test/helpers"; + +describe("Conversation", () => { + it("should update conversation name", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1); + const client2 = await createRegisteredClient(user2); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + const newName = "foo"; + await conversation.updateName(newName); + expect(conversation.name).toBe(newName); + const messages = await conversation.messages(); + expect(messages.length).toBe(2); + + await client2.conversations.sync(); + const conversations = await client2.conversations.list(); + expect(conversations.length).toBe(1); + + const conversation2 = conversations[0]; + expect(conversation2).toBeDefined(); + await conversation2.sync(); + expect(conversation2.id).toBe(conversation.id); + expect(conversation2.name).toBe(newName); + const messages2 = await conversation2.messages(); + expect(messages2.length).toBe(1); + }); + + it("should update conversation image URL", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1); + const client2 = await createRegisteredClient(user2); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + const imageUrl = "https://foo/bar.jpg"; + await conversation.updateImageUrl(imageUrl); + expect(conversation.imageUrl).toBe(imageUrl); + const messages = await conversation.messages(); + expect(messages.length).toBe(2); + + await client2.conversations.sync(); + const conversations = await client2.conversations.list(); + expect(conversations.length).toBe(1); + + const conversation2 = conversations[0]; + expect(conversation2).toBeDefined(); + await conversation2.sync(); + expect(conversation2.id).toBe(conversation.id); + expect(conversation2.imageUrl).toBe(imageUrl); + const messages2 = await conversation2.messages(); + expect(messages2.length).toBe(1); + }); + + it("should update conversation description", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1); + const client2 = await createRegisteredClient(user2); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + const newDescription = "foo"; + await conversation.updateDescription(newDescription); + expect(conversation.description).toBe(newDescription); + const messages = await conversation.messages(); + expect(messages.length).toBe(2); + + await client2.conversations.sync(); + const conversations = await client2.conversations.list(); + expect(conversations.length).toBe(1); + + const conversation2 = conversations[0]; + expect(conversation2).toBeDefined(); + await conversation2.sync(); + expect(conversation2.id).toBe(conversation.id); + expect(conversation2.description).toBe(newDescription); + const messages2 = await conversation2.messages(); + expect(messages2.length).toBe(1); + }); + + it("should update conversation pinned frame URL", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1); + const client2 = await createRegisteredClient(user2); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + const pinnedFrameUrl = "https://foo/bar"; + await conversation.updatePinnedFrameUrl(pinnedFrameUrl); + expect(conversation.pinnedFrameUrl).toBe(pinnedFrameUrl); + const messages = await conversation.messages(); + expect(messages.length).toBe(2); + + await client2.conversations.sync(); + const conversations = await client2.conversations.list(); + expect(conversations.length).toBe(1); + + const conversation2 = conversations[0]; + expect(conversation2).toBeDefined(); + await conversation2.sync(); + expect(conversation2.id).toBe(conversation.id); + expect(conversation2.pinnedFrameUrl).toBe(pinnedFrameUrl); + const messages2 = await conversation2.messages(); + expect(messages2.length).toBe(1); + }); + + it("should add and remove members", async () => { + const user1 = createUser(); + const user2 = createUser(); + const user3 = createUser(); + const client1 = await createRegisteredClient(user1); + const client2 = await createRegisteredClient(user2); + const client3 = await createRegisteredClient(user3); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + + const members = await conversation.members(); + + const memberInboxIds = members.map((member) => member.inboxId); + expect(memberInboxIds).toContain(client1.inboxId); + expect(memberInboxIds).toContain(client2.inboxId); + expect(memberInboxIds).not.toContain(client3.inboxId); + + await conversation.addMembers([user3.account.address]); + + const members2 = await conversation.members(); + expect(members2.length).toBe(3); + + const memberInboxIds2 = members2.map((member) => member.inboxId); + expect(memberInboxIds2).toContain(client1.inboxId); + expect(memberInboxIds2).toContain(client2.inboxId); + expect(memberInboxIds2).toContain(client3.inboxId); + + await conversation.removeMembers([user2.account.address]); + + const members3 = await conversation.members(); + expect(members3.length).toBe(2); + + const memberInboxIds3 = members3.map((member) => member.inboxId); + expect(memberInboxIds3).toContain(client1.inboxId); + expect(memberInboxIds3).not.toContain(client2.inboxId); + expect(memberInboxIds3).toContain(client3.inboxId); + }); + + it("should add and remove members by inbox id", async () => { + const user1 = createUser(); + const user2 = createUser(); + const user3 = createUser(); + const client1 = await createRegisteredClient(user1); + const client2 = await createRegisteredClient(user2); + const client3 = await createRegisteredClient(user3); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + + const members = await conversation.members(); + const memberInboxIds = members.map((member) => member.inboxId); + expect(memberInboxIds).toContain(client1.inboxId); + expect(memberInboxIds).toContain(client2.inboxId); + expect(memberInboxIds).not.toContain(client3.inboxId); + + await conversation.addMembersByInboxId([client3.inboxId!]); + + const members2 = await conversation.members(); + expect(members2.length).toBe(3); + + const memberInboxIds2 = members2.map((member) => member.inboxId); + expect(memberInboxIds2).toContain(client1.inboxId); + expect(memberInboxIds2).toContain(client2.inboxId); + expect(memberInboxIds2).toContain(client3.inboxId); + + await conversation.removeMembersByInboxId([client2.inboxId!]); + + const members3 = await conversation.members(); + expect(members3.length).toBe(2); + + const memberInboxIds3 = members3.map((member) => member.inboxId); + expect(memberInboxIds3).toContain(client1.inboxId); + expect(memberInboxIds3).not.toContain(client2.inboxId); + expect(memberInboxIds3).toContain(client3.inboxId); + }); + + it("should send and list messages", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1); + const client2 = await createRegisteredClient(user2); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + + const text = "gm"; + await conversation.send(text); + + const messages = await conversation.messages(); + expect(messages.length).toBe(2); + expect(messages[1].content).toBe(text); + + await client2.conversations.sync(); + const conversations = await client2.conversations.list(); + expect(conversations.length).toBe(1); + + const conversation2 = conversations[0]; + expect(conversation2).toBeDefined(); + await conversation2.sync(); + expect(conversation2.id).toBe(conversation.id); + + const messages2 = await conversation2.messages(); + expect(messages2.length).toBe(1); + expect(messages2[0].content).toBe(text); + }); + + it("should require content type when sending non-string content", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1, { + codecs: [new TestCodec()], + }); + await createRegisteredClient(user2); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + + await expect(() => conversation.send(1)).rejects.toThrow(); + await expect(() => conversation.send({ foo: "bar" })).rejects.toThrow(); + await expect( + conversation.send({ foo: "bar" }, ContentTypeTest), + ).resolves.not.toThrow(); + }); + + it("should optimistically send and list messages", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1); + const client2 = await createRegisteredClient(user2); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + + const text = "gm"; + await conversation.sendOptimistic(text); + + const messages = await conversation.messages(); + expect(messages.length).toBe(2); + expect(messages[1].content).toBe(text); + + await client2.conversations.sync(); + const conversations = await client2.conversations.list(); + expect(conversations.length).toBe(1); + + const conversation2 = conversations[0]; + expect(conversation2).toBeDefined(); + + await conversation2.sync(); + expect(conversation2.id).toBe(conversation.id); + + const messages2 = await conversation2.messages(); + expect(messages2.length).toBe(0); + + await conversation.publishMessages(); + await conversation2.sync(); + + const messages4 = await conversation2.messages(); + expect(messages4.length).toBe(1); + expect(messages4[0].content).toBe(text); + }); + + it("should require content type when optimistically sending non-string content", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1, { + codecs: [new TestCodec()], + }); + await createRegisteredClient(user2); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + + await expect(() => conversation.sendOptimistic(1)).rejects.toThrow(); + await expect(() => + conversation.sendOptimistic({ foo: "bar" }), + ).rejects.toThrow(); + await expect( + conversation.sendOptimistic({ foo: "bar" }, ContentTypeTest), + ).resolves.not.toThrow(); + }); + + it("should throw when sending content without a codec", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1); + await createRegisteredClient(user2); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + + await expect( + conversation.send({ foo: "bar" }, ContentTypeTest), + ).rejects.toThrow(); + }); + + it("should add and remove admins", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1); + const client2 = await createRegisteredClient(user2); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + + expect(await conversation.isSuperAdmin(client1.inboxId!)).toBe(true); + const superAdmins = await conversation.superAdmins(); + expect(superAdmins.length).toBe(1); + expect(superAdmins).toContain(client1.inboxId); + expect(await conversation.isAdmin(client1.inboxId!)).toBe(false); + expect(await conversation.isAdmin(client2.inboxId!)).toBe(false); + const admins = await conversation.admins(); + expect(admins.length).toBe(0); + + await conversation.addAdmin(client2.inboxId!); + expect(await conversation.isAdmin(client2.inboxId!)).toBe(true); + const admins2 = await conversation.admins(); + expect(admins2.length).toBe(1); + expect(admins2).toContain(client2.inboxId); + + await conversation.removeAdmin(client2.inboxId!); + expect(await conversation.isAdmin(client2.inboxId!)).toBe(false); + const admins3 = await conversation.admins(); + expect(admins3.length).toBe(0); + }); + + it("should add and remove super admins", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1); + const client2 = await createRegisteredClient(user2); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + + expect(await conversation.isSuperAdmin(client1.inboxId!)).toBe(true); + expect(await conversation.isSuperAdmin(client2.inboxId!)).toBe(false); + + const superAdmins = await conversation.superAdmins(); + expect(superAdmins.length).toBe(1); + expect(superAdmins).toContain(client1.inboxId); + + await conversation.addSuperAdmin(client2.inboxId!); + expect(await conversation.isSuperAdmin(client2.inboxId!)).toBe(true); + + const superAdmins2 = await conversation.superAdmins(); + expect(superAdmins2.length).toBe(2); + expect(superAdmins2).toContain(client1.inboxId); + expect(superAdmins2).toContain(client2.inboxId); + + await conversation.removeSuperAdmin(client2.inboxId!); + expect(await conversation.isSuperAdmin(client2.inboxId!)).toBe(false); + + const superAdmins3 = await conversation.superAdmins(); + expect(superAdmins3.length).toBe(1); + expect(superAdmins3).toContain(client1.inboxId); + }); +}); diff --git a/sdks/browser-sdk/test/Conversations.test.ts b/sdks/browser-sdk/test/Conversations.test.ts new file mode 100644 index 000000000..b0d5ee7a5 --- /dev/null +++ b/sdks/browser-sdk/test/Conversations.test.ts @@ -0,0 +1,188 @@ +import { WasmGroupPermissionsOptions } from "@xmtp/wasm-bindings"; +import { describe, expect, it } from "vitest"; +import { createRegisteredClient, createUser } from "@test/helpers"; + +describe("Conversations", () => { + it("should not have initial conversations", async () => { + const user = createUser(); + const client = await createRegisteredClient(user); + const conversations = await client.conversations.list(); + expect(conversations.length).toBe(0); + }); + + it("should create a new conversation", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1); + const client2 = await createRegisteredClient(user2); + const conversation = await client1.conversations.newGroup([ + user2.account.address, + ]); + expect(conversation).toBeDefined(); + + expect( + (await client1.conversations.getConversationById(conversation.id))?.id, + ).toBe(conversation.id); + expect(conversation.id).toBeDefined(); + expect(conversation.createdAtNs).toBeDefined(); + expect(conversation.createdAt).toBeDefined(); + expect(conversation.isActive).toBe(true); + expect(conversation.name).toBe(""); + expect(conversation.permissions?.policyType).toBe( + WasmGroupPermissionsOptions.AllMembers, + ); + expect(conversation.permissions?.policySet).toEqual({ + addMemberPolicy: 0, + removeMemberPolicy: 2, + addAdminPolicy: 3, + removeAdminPolicy: 3, + updateGroupNamePolicy: 0, + updateGroupDescriptionPolicy: 0, + updateGroupImageUrlSquarePolicy: 0, + updateGroupPinnedFrameUrlPolicy: 0, + }); + expect(conversation.addedByInboxId).toBe(client1.inboxId); + expect((await conversation.messages()).length).toBe(1); + + const members = await conversation.members(); + expect(members.length).toBe(2); + const memberInboxIds = members.map((member) => member.inboxId); + expect(memberInboxIds).toContain(client1.inboxId); + expect(memberInboxIds).toContain(client2.inboxId); + expect(conversation.metadata).toEqual({ + conversationType: "group", + creatorInboxId: client1.inboxId, + }); + + const conversations1 = await client1.conversations.list(); + expect(conversations1.length).toBe(1); + expect(conversations1[0].id).toBe(conversation.id); + + expect((await client2.conversations.list()).length).toBe(0); + + await client2.conversations.sync(); + + const conversations2 = await client2.conversations.list(); + expect(conversations2.length).toBe(1); + expect(conversations2[0].id).toBe(conversation.id); + }); + + it("should get a group by ID", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1); + await createRegisteredClient(user2); + const group = await client1.conversations.newGroup([user2.account.address]); + expect(group).toBeDefined(); + expect(group.id).toBeDefined(); + const foundGroup = await client1.conversations.getConversationById( + group.id, + ); + expect(foundGroup).toBeDefined(); + expect(foundGroup!.id).toBe(group.id); + }); + + it("should get a message by ID", async () => { + const user1 = createUser(); + const user2 = createUser(); + const client1 = await createRegisteredClient(user1); + await createRegisteredClient(user2); + const group = await client1.conversations.newGroup([user2.account.address]); + const messageId = await group.send("gm!"); + expect(messageId).toBeDefined(); + + const message = await client1.conversations.getMessageById(messageId); + expect(message).toBeDefined(); + expect(message!.id).toBe(messageId); + }); + + it("should create a new conversation with options", async () => { + const user1 = createUser(); + const user2 = createUser(); + const user3 = createUser(); + const user4 = createUser(); + const user5 = createUser(); + const client1 = await createRegisteredClient(user1); + await createRegisteredClient(user2); + await createRegisteredClient(user3); + await createRegisteredClient(user4); + await createRegisteredClient(user5); + const groupWithName = await client1.conversations.newGroup( + [user2.account.address], + { + name: "foo", + }, + ); + expect(groupWithName).toBeDefined(); + expect(groupWithName.name).toBe("foo"); + expect(groupWithName.imageUrl).toBe(""); + + const groupWithImageUrl = await client1.conversations.newGroup( + [user3.account.address], + { + imageUrlSquare: "https://foo/bar.png", + }, + ); + expect(groupWithImageUrl).toBeDefined(); + expect(groupWithImageUrl.name).toBe(""); + expect(groupWithImageUrl.imageUrl).toBe("https://foo/bar.png"); + + const groupWithNameAndImageUrl = await client1.conversations.newGroup( + [user4.account.address], + { + imageUrlSquare: "https://foo/bar.png", + name: "foo", + }, + ); + expect(groupWithNameAndImageUrl).toBeDefined(); + expect(groupWithNameAndImageUrl.name).toBe("foo"); + expect(groupWithNameAndImageUrl.imageUrl).toBe("https://foo/bar.png"); + + const groupWithPermissions = await client1.conversations.newGroup( + [user4.account.address], + { + permissions: WasmGroupPermissionsOptions.AdminOnly, + }, + ); + expect(groupWithPermissions).toBeDefined(); + expect(groupWithPermissions.name).toBe(""); + expect(groupWithPermissions.imageUrl).toBe(""); + expect(groupWithPermissions.permissions?.policyType).toBe( + WasmGroupPermissionsOptions.AdminOnly, + ); + + expect(groupWithPermissions.permissions?.policySet).toEqual({ + addMemberPolicy: 2, + removeMemberPolicy: 2, + addAdminPolicy: 3, + removeAdminPolicy: 3, + updateGroupNamePolicy: 2, + updateGroupDescriptionPolicy: 2, + updateGroupImageUrlSquarePolicy: 2, + updateGroupPinnedFrameUrlPolicy: 2, + }); + + const groupWithDescription = await client1.conversations.newGroup( + [user2.account.address], + { + description: "foo", + }, + ); + expect(groupWithDescription).toBeDefined(); + expect(groupWithDescription.name).toBe(""); + expect(groupWithDescription.imageUrl).toBe(""); + expect(groupWithDescription.description).toBe("foo"); + + const groupWithPinnedFrameUrl = await client1.conversations.newGroup( + [user2.account.address], + { + pinnedFrameUrl: "https://foo/bar", + }, + ); + expect(groupWithPinnedFrameUrl).toBeDefined(); + expect(groupWithPinnedFrameUrl.name).toBe(""); + expect(groupWithPinnedFrameUrl.imageUrl).toBe(""); + expect(groupWithPinnedFrameUrl.description).toBe(""); + expect(groupWithPinnedFrameUrl.pinnedFrameUrl).toBe("https://foo/bar"); + }); +}); diff --git a/sdks/browser-sdk/test/Utils.test.ts b/sdks/browser-sdk/test/Utils.test.ts new file mode 100644 index 000000000..b7b7692f0 --- /dev/null +++ b/sdks/browser-sdk/test/Utils.test.ts @@ -0,0 +1,19 @@ +import { describe, expect, it } from "vitest"; +import { Utils } from "@/Utils"; +import { createRegisteredClient, createUser } from "@test/helpers"; + +describe("Utils", () => { + it("should generate inbox id", async () => { + const utils = new Utils(); + const inboxId = await utils.generateInboxId("0x1234"); + expect(inboxId).toBeDefined(); + }); + + it("should get inbox id for address", async () => { + const user = createUser(); + const client = await createRegisteredClient(user); + const utils = new Utils(); + const inboxId = await utils.getInboxIdForAddress(client.address, "local"); + expect(inboxId).toBe(client.inboxId); + }); +}); diff --git a/sdks/browser-sdk/test/helpers.ts b/sdks/browser-sdk/test/helpers.ts new file mode 100644 index 000000000..cbeeaa4cc --- /dev/null +++ b/sdks/browser-sdk/test/helpers.ts @@ -0,0 +1,103 @@ +import { + ContentTypeId, + type ContentCodec, + type EncodedContent, +} from "@xmtp/content-type-primitives"; +import { WasmSignatureRequestType } from "@xmtp/wasm-bindings"; +import { createWalletClient, http, toBytes } from "viem"; +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; +import { sepolia } from "viem/chains"; +import { Client } from "@/Client"; +import type { ClientOptions } from "@/types"; + +export const createUser = () => { + const key = generatePrivateKey(); + const account = privateKeyToAccount(key); + return { + key, + account, + wallet: createWalletClient({ + account, + chain: sepolia, + transport: http(), + }), + }; +}; + +export type User = ReturnType; + +export const getSignature = async (client: Client, user: User) => { + const signatureText = await client.getCreateInboxSignatureText(); + if (signatureText) { + const signature = await user.wallet.signMessage({ + message: signatureText, + }); + return toBytes(signature); + } + return null; +}; + +export const createClient = async (user: User, options?: ClientOptions) => { + const opts = { + ...options, + env: options?.env ?? "local", + }; + return Client.create(user.account.address, { + ...opts, + dbPath: `./test-${user.account.address}.db3`, + }); +}; + +export const createRegisteredClient = async ( + user: User, + options?: ClientOptions, +) => { + const client = await createClient(user, options); + const isRegistered = await client.isRegistered(); + if (!isRegistered) { + const signature = await getSignature(client, user); + if (signature) { + await client.addSignature( + WasmSignatureRequestType.CreateInbox, + signature, + ); + } + await client.registerIdentity(); + } + return client; +}; + +export const ContentTypeTest = new ContentTypeId({ + authorityId: "xmtp.org", + typeId: "test", + versionMajor: 1, + versionMinor: 0, +}); + +export class TestCodec implements ContentCodec { + get contentType(): ContentTypeId { + return ContentTypeTest; + } + + encode(content: Record) { + return { + type: this.contentType, + parameters: {}, + content: new TextEncoder().encode(JSON.stringify(content)), + }; + } + + decode(content: EncodedContent) { + const decoded = new TextDecoder().decode(content.content); + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return JSON.parse(decoded); + } + + fallback() { + return undefined; + } + + shouldPush() { + return false; + } +} diff --git a/sdks/browser-sdk/tsconfig.json b/sdks/browser-sdk/tsconfig.json new file mode 100644 index 000000000..c293d120e --- /dev/null +++ b/sdks/browser-sdk/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "tsconfig/react-sdk.json", + "include": ["src", "test", "vite.config.ts", "rollup.config.js"], + "compilerOptions": { + "paths": { + "@/*": ["./src/*"], + "@test/*": ["./test/*"] + }, + "types": ["@vitest/browser/providers/playwright"] + } +} diff --git a/sdks/browser-sdk/typedoc.json b/sdks/browser-sdk/typedoc.json new file mode 100644 index 000000000..accbb58d3 --- /dev/null +++ b/sdks/browser-sdk/typedoc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://typedoc.org/schema.json", + "entryPoints": ["src/index.ts"], + "out": "docs", + "excludeExternals": true, + "excludePrivate": true, + "excludeProtected": true +} diff --git a/sdks/browser-sdk/vite.config.ts b/sdks/browser-sdk/vite.config.ts new file mode 100644 index 000000000..7f9fe601d --- /dev/null +++ b/sdks/browser-sdk/vite.config.ts @@ -0,0 +1,32 @@ +import { defineConfig, mergeConfig } from "vite"; +import tsconfigPaths from "vite-tsconfig-paths"; +import { defineConfig as defineVitestConfig } from "vitest/config"; + +// https://vitejs.dev/config/ +const viteConfig = defineConfig({ + plugins: [tsconfigPaths()], +}); + +const vitestConfig = defineVitestConfig({ + optimizeDeps: { + exclude: ["@xmtp/wasm-bindings"], + }, + test: { + browser: { + provider: "playwright", + enabled: true, + name: "chromium", + headless: true, + screenshotFailures: false, + }, + testTimeout: 60000, + }, + server: { + headers: { + "Cross-Origin-Embedder-Policy": "require-corp", + "Cross-Origin-Opener-Policy": "same-origin", + }, + }, +}); + +export default mergeConfig(viteConfig, vitestConfig); From 418e9b6076fd7e181cb5f384ea0b986e4a6d7a1f Mon Sep 17 00:00:00 2001 From: Ry Racherbaumer Date: Thu, 24 Oct 2024 14:57:47 -0500 Subject: [PATCH 3/8] Add examples workspace --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index e5a3937aa..27b8ded76 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "type": "module", "workspaces": [ "content-types/*", + "examples/*", "packages/*", "sdks/*", "shared/*" From c9faee906ff4987140430e0eae860400c1f3dc79 Mon Sep 17 00:00:00 2001 From: Ry Racherbaumer Date: Thu, 24 Oct 2024 14:58:09 -0500 Subject: [PATCH 4/8] Add GitHub workflow for Browser SDK --- .github/workflows/browser-sdk.yml | 78 +++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 .github/workflows/browser-sdk.yml diff --git a/.github/workflows/browser-sdk.yml b/.github/workflows/browser-sdk.yml new file mode 100644 index 000000000..b0e825baf --- /dev/null +++ b/.github/workflows/browser-sdk.yml @@ -0,0 +1,78 @@ +name: Browser SDK + +on: + push: + branches: + - main + + pull_request: + paths: + - "sdks/browser-sdk/**" + - ".github/workflows/browser-sdk.yml" + - "dev/**" + - ".node-version" + - ".nvmrc" + - ".yarnrc.yml" + - "turbo.json" + - "yarn.lock" + +jobs: + typecheck: + name: Typecheck + runs-on: warp-ubuntu-latest-x64-8x + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: ".nvmrc" + cache: "yarn" + env: + SKIP_YARN_COREPACK_CHECK: "1" + - name: Enable corepack + run: corepack enable + - name: Install dependencies + run: yarn + - name: Typecheck + run: yarn turbo run typecheck --filter='./sdks/browser-sdk' + + test: + name: Test + runs-on: warp-ubuntu-latest-x64-8x + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: ".nvmrc" + cache: "yarn" + env: + SKIP_YARN_COREPACK_CHECK: "1" + - name: Enable corepack + run: corepack enable + - name: Install dependencies + run: yarn + - name: Install playwright browsers + run: yarn playwright install + - name: Start dev environment + run: ./dev/up + - name: Sleep for 5 seconds + run: sleep 5s + - name: Run tests + run: yarn turbo run test --filter='./sdks/browser-sdk' + + build: + name: Build + runs-on: warp-ubuntu-latest-x64-8x + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version-file: ".nvmrc" + cache: "yarn" + env: + SKIP_YARN_COREPACK_CHECK: "1" + - name: Enable corepack + run: corepack enable + - name: Install dependencies + run: yarn + - name: Build + run: yarn turbo run build --filter='./sdks/browser-sdk' From 54632f16e0f76cf92da727f1f7fb9027332e4617 Mon Sep 17 00:00:00 2001 From: Ry Racherbaumer Date: Thu, 24 Oct 2024 14:58:29 -0500 Subject: [PATCH 5/8] Add Browser SDK example --- examples/react-vite-browser-sdk/README.md | 28 ++ examples/react-vite-browser-sdk/index.html | 12 + examples/react-vite-browser-sdk/package.json | 34 +++ .../react-vite-browser-sdk/postcss.config.cjs | 5 + .../public/xmtp-icon.png | Bin 0 -> 21829 bytes examples/react-vite-browser-sdk/src/App.tsx | 253 ++++++++++++++++++ .../src/createClient.ts | 35 +++ .../react-vite-browser-sdk/src/globals.d.ts | 15 ++ examples/react-vite-browser-sdk/src/index.css | 111 ++++++++ examples/react-vite-browser-sdk/src/main.tsx | 33 +++ .../react-vite-browser-sdk/src/wallets.ts | 31 +++ examples/react-vite-browser-sdk/tsconfig.json | 4 + .../react-vite-browser-sdk/vite.config.ts | 16 ++ 13 files changed, 577 insertions(+) create mode 100644 examples/react-vite-browser-sdk/README.md create mode 100644 examples/react-vite-browser-sdk/index.html create mode 100644 examples/react-vite-browser-sdk/package.json create mode 100644 examples/react-vite-browser-sdk/postcss.config.cjs create mode 100644 examples/react-vite-browser-sdk/public/xmtp-icon.png create mode 100644 examples/react-vite-browser-sdk/src/App.tsx create mode 100644 examples/react-vite-browser-sdk/src/createClient.ts create mode 100644 examples/react-vite-browser-sdk/src/globals.d.ts create mode 100644 examples/react-vite-browser-sdk/src/index.css create mode 100644 examples/react-vite-browser-sdk/src/main.tsx create mode 100644 examples/react-vite-browser-sdk/src/wallets.ts create mode 100644 examples/react-vite-browser-sdk/tsconfig.json create mode 100644 examples/react-vite-browser-sdk/vite.config.ts diff --git a/examples/react-vite-browser-sdk/README.md b/examples/react-vite-browser-sdk/README.md new file mode 100644 index 000000000..3795dcc31 --- /dev/null +++ b/examples/react-vite-browser-sdk/README.md @@ -0,0 +1,28 @@ +# React Vite example app + +Use this React Vite example app as a tool to start building an app with XMTP. This basic messaging app has an intentionally unopinionated UI to help make it easier for you to build with. + +The app is built using the [React XMTP client SDK](/packages/react-sdk/README.md), [React](https://react.dev/), [Vite](https://vitejs.dev/), and [RainbowKit](https://www.rainbowkit.com/). + +To keep up with the latest example app developments, see the [Issues tab](https://github.com/xmtp/xmtp-web/issues) in this repo. + +To learn more about XMTP and get answers to frequently asked questions, see the [XMTP documentation](https://xmtp.org/docs). + +## Limitations + +This example app isn't a complete solution. For example, the list of conversations doesn't update when new messages arrive in existing conversations. + +## Developing + +1. In `packages/react-sdk`, run `yarn build` to build the React SDK. +2. In `examples/react-vite`, run `yarn dev` to start the development server. + +## Useful commands + +- `yarn build`: Builds the example app +- `yarn clean`: Removes `node_modules`, `dist`, and `.turbo` folders +- `yarn dev`: Launches the example app and watches for changes, which will trigger a rebuild +- `yarn format`: Runs prettier format and write changes +- `yarn format:check`: Runs prettier format check +- `yarn lint`: Runs ESLint +- `yarn typecheck`: Runs `tsc` diff --git a/examples/react-vite-browser-sdk/index.html b/examples/react-vite-browser-sdk/index.html new file mode 100644 index 000000000..31cf5d729 --- /dev/null +++ b/examples/react-vite-browser-sdk/index.html @@ -0,0 +1,12 @@ + + + + + + XMTP V3 Browser SDK Example + + +
+ + + diff --git a/examples/react-vite-browser-sdk/package.json b/examples/react-vite-browser-sdk/package.json new file mode 100644 index 000000000..102500c6b --- /dev/null +++ b/examples/react-vite-browser-sdk/package.json @@ -0,0 +1,34 @@ +{ + "name": "@xmtp/react-vite-browser-sdk-example", + "version": "0.0.0", + "private": true, + "type": "module", + "scripts": { + "clean": "rm -rf .turbo && rm -rf node_modules && yarn clean:dist", + "clean:dist": "rm -rf dist", + "dev": "vite", + "quickstart": "yarn dev", + "typecheck": "tsc" + }, + "dependencies": { + "@rainbow-me/rainbowkit": "^2.1.3", + "@tanstack/react-query": "^5.51.1", + "@wagmi/core": "^2.11.7", + "@xmtp/browser-sdk": "workspace:*", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "viem": "^2.17.4", + "wagmi": "^2.10.10" + }, + "devDependencies": { + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.1", + "autoprefixer": "^10.4.19", + "postcss": "^8.4.39", + "postcss-preset-env": "^9.6.0", + "tsconfig": "workspace:*", + "typescript": "^5.5.3", + "vite": "^5.4.9" + } +} diff --git a/examples/react-vite-browser-sdk/postcss.config.cjs b/examples/react-vite-browser-sdk/postcss.config.cjs new file mode 100644 index 000000000..eaccdea29 --- /dev/null +++ b/examples/react-vite-browser-sdk/postcss.config.cjs @@ -0,0 +1,5 @@ +module.exports = { + plugins: { + "postcss-preset-env": {}, + }, +}; diff --git a/examples/react-vite-browser-sdk/public/xmtp-icon.png b/examples/react-vite-browser-sdk/public/xmtp-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6c610d7d85a9de809ff0fd3dca4d3f0c22f853f3 GIT binary patch literal 21829 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 T*oxXIqNI9SS2Sxi@R9!q&(Ik; literal 0 HcmV?d00001 diff --git a/examples/react-vite-browser-sdk/src/App.tsx b/examples/react-vite-browser-sdk/src/App.tsx new file mode 100644 index 000000000..ea6e39b27 --- /dev/null +++ b/examples/react-vite-browser-sdk/src/App.tsx @@ -0,0 +1,253 @@ +import { + Conversation, + type Client, + type DecodedMessage, +} from "@xmtp/browser-sdk"; +import { useState } from "react"; +import { createClient } from "./createClient"; + +export const App = () => { + const [client, setClient] = useState(undefined); + const [conversations, setConversations] = useState([]); + const [messages, setMessages] = useState>( + new Map(), + ); + + const handleCreateClient = async () => { + setClient(await createClient("key1")); + }; + + const handleResetClient = () => { + if (client) { + client.close(); + } + setClient(undefined); + setConversations([]); + setMessages(new Map()); + }; + + const handleListGroups = async () => { + if (client) { + const groups = await client.conversations.list(); + setConversations(groups); + } + }; + + const handleUpdateGroupName = async (groupId: string, elementId: string) => { + if (client) { + const conversation = new Conversation(client, groupId); + await conversation.sync(); + const element = document.getElementById(elementId) as HTMLInputElement; + const name = element.value; + await conversation.updateName(name); + element.value = ""; + await handleListGroups(); + } + }; + + const handleUpdateGroupDescription = async ( + groupId: string, + elementId: string, + ) => { + if (client) { + const conversation = new Conversation(client, groupId); + await conversation.sync(); + const element = document.getElementById(elementId) as HTMLInputElement; + const description = element.value; + await conversation.updateDescription(description); + element.value = ""; + await handleListGroups(); + } + }; + + const handleListGroupMessages = async (groupId: string) => { + if (client) { + const conversation = new Conversation(client, groupId); + await conversation.sync(); + const groupMessages = await conversation.messages(); + setMessages((prevMessages) => { + const newMessages = new Map(prevMessages); + newMessages.set(groupId, groupMessages); + return newMessages; + }); + } + }; + + const handleSendGroupMessage = async (groupId: string, elementId: string) => { + if (client) { + const conversation = new Conversation(client, groupId); + await conversation.sync(); + const element = document.getElementById(elementId) as HTMLInputElement; + const message = element.value; + await conversation.send(message); + element.value = ""; + } + }; + + const handleCreateGroup = async () => { + if (client) { + const element = document.getElementById( + "create-group-name", + ) as HTMLInputElement; + const name = element.value; + const group = await client.conversations.newGroup([]); + await group.sync(); + await group.updateName(name); + element.value = ""; + await handleListGroups(); + } + }; + + const handleSyncGroup = async (groupId: string) => { + if (client) { + const conversation = new Conversation(client, groupId); + await conversation.sync(); + await handleListGroupMessages(groupId); + } + }; + + return ( +
+

XMTP V3

+
+ {!client && ( + + )} + {client && ( + <> + + + + )} +
+ {client && ( + <> +
+

Client details

+
+
Address:
+
{client.address}
+
+
+
Inbox ID:
+
{client.inboxId}
+
+
+
Installation ID:
+
{client.installationId}
+
+
+
+
+ + +
+
+ + )} + {conversations.length > 0 && ( +
+

Conversations

+
+ {conversations.map((conversation) => ( +
+

{conversation.id}

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+
Name:
+
{conversation.name}
+
+
+
Description:
+
{conversation.description}
+
+ {messages.get(conversation.id) && ( +
+

Messages

+ {messages.get(conversation.id)?.map((message) => ( +
+
{JSON.stringify(message.content, null, 2)}
+
+ ))} +
+ )} +
+ ))} +
+
+ )} +
+ ); +}; diff --git a/examples/react-vite-browser-sdk/src/createClient.ts b/examples/react-vite-browser-sdk/src/createClient.ts new file mode 100644 index 000000000..c9b362f5b --- /dev/null +++ b/examples/react-vite-browser-sdk/src/createClient.ts @@ -0,0 +1,35 @@ +import { Client, WasmSignatureRequestType } from "@xmtp/browser-sdk"; +import { toBytes } from "viem/utils"; +import { createWallet } from "./wallets"; + +type Wallet = ReturnType; + +export const getSignature = async (client: Client, wallet: Wallet) => { + const signatureText = await client.getCreateInboxSignatureText(); + if (signatureText) { + const signature = await wallet.signMessage({ + message: signatureText, + }); + return toBytes(signature); + } + return null; +}; + +export const createClient = async (walletKey: string) => { + const wallet = createWallet(walletKey); + const client = await Client.create(wallet.account.address, { + env: "local", + }); + const isRegistered = await client.isRegistered(); + if (!isRegistered) { + const signature = await getSignature(client, wallet); + if (signature) { + await client.addSignature( + WasmSignatureRequestType.CreateInbox, + signature, + ); + } + await client.registerIdentity(); + } + return client; +}; diff --git a/examples/react-vite-browser-sdk/src/globals.d.ts b/examples/react-vite-browser-sdk/src/globals.d.ts new file mode 100644 index 000000000..5b948c9b6 --- /dev/null +++ b/examples/react-vite-browser-sdk/src/globals.d.ts @@ -0,0 +1,15 @@ +interface ImportMeta { + env: { + VITE_PROJECT_ID: string; + }; +} + +declare module "*.module.css" { + const classes: { [key: string]: string }; + export default classes; +} + +declare module "*.png" { + const src: string; + export default src; +} diff --git a/examples/react-vite-browser-sdk/src/index.css b/examples/react-vite-browser-sdk/src/index.css new file mode 100644 index 000000000..cf988d17b --- /dev/null +++ b/examples/react-vite-browser-sdk/src/index.css @@ -0,0 +1,111 @@ +:root { + font-family: "SF Pro Rounded", Inter, system-ui, Avenir, Helvetica, Arial, + sans-serif; + line-height: 1.3; + font-weight: 400; + font-synthesis: none; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-text-size-adjust: 100%; +} + +body { + margin: 0; + min-width: 320px; + height: 100vh; + display: flex; + flex-direction: column; + color: #213547; + background-color: #fff; +} + +#root { + flex-grow: 1; + display: flex; + flex-direction: column; +} + +#root > [data-rk] { + flex-grow: 1; + display: flex; + flex-direction: column; +} + +.App { + width: 800px; + margin: 0 auto; + padding: 20px; +} + +.App h1 { + text-align: center; + margin-top: 0; +} + +.Actions { + display: flex; + gap: 10px; + justify-content: center; + padding: 20px; +} + +.ClientDetail { + display: flex; + gap: 10px; + justify-content: space-between; +} + +.ConversationActions { + display: flex; + gap: 10px; + justify-content: center; + align-items: center; + padding: 10px; +} + +.ConversationAction { + padding: 6px; + border: 1px solid #213547; + border-radius: 6px; + background-color: #f0f0f0; + display: flex; + gap: 2px; + flex-direction: column; +} + +.ConversationWrapper { + display: flex; + flex-direction: column; + gap: 10px; +} + +.Conversation { + border: 1px solid #213547; + border-radius: 10px; + padding: 10px; +} + +.Conversation > h3 { + margin-top: 0; +} + +.ConversationDetail { + display: flex; + gap: 10px; + justify-content: space-between; +} + +.ConversationMessages { + display: flex; + flex-direction: column; + gap: 4px; +} + +.ConversationMessage { + border: 1px solid #213547; + border-radius: 6px; + padding: 4px; + background-color: #f0f0f0; + text-wrap: pretty; +} diff --git a/examples/react-vite-browser-sdk/src/main.tsx b/examples/react-vite-browser-sdk/src/main.tsx new file mode 100644 index 000000000..c4833794e --- /dev/null +++ b/examples/react-vite-browser-sdk/src/main.tsx @@ -0,0 +1,33 @@ +import "@rainbow-me/rainbowkit/styles.css"; +import { getDefaultConfig, RainbowKitProvider } from "@rainbow-me/rainbowkit"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; +import { http } from "@wagmi/core"; +import { mainnet } from "@wagmi/core/chains"; +import { StrictMode } from "react"; +import { createRoot } from "react-dom/client"; +import { WagmiProvider } from "wagmi"; +import { App } from "./App"; +import "./index.css"; + +export const config = getDefaultConfig({ + appName: "XMTP V3 Browser SDK Example", + projectId: import.meta.env.VITE_PROJECT_ID, + chains: [mainnet], + transports: { + [mainnet.id]: http(), + }, +}); + +const queryClient = new QueryClient(); + +createRoot(document.getElementById("root") as HTMLElement).render( + + + + + + + + + , +); diff --git a/examples/react-vite-browser-sdk/src/wallets.ts b/examples/react-vite-browser-sdk/src/wallets.ts new file mode 100644 index 000000000..a2b438a7c --- /dev/null +++ b/examples/react-vite-browser-sdk/src/wallets.ts @@ -0,0 +1,31 @@ +import { + createWalletClient, + http, + type PrivateKeyAccount, + type Transport, + type WalletClient, +} from "viem"; +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; +import { mainnet } from "viem/chains"; + +const keys: Record = { + // address: 0xb879f1d8FD73EC057c02D681880169e5721a6d7F + key1: "0xf8ced372cdb9a67bed1843650a89a59859369bf9900c0bc75741f2740e93cb04", + // address: 0x7ad9d3892D5EEC0586920D3E0ac813aaeF881488 + key2: "0xb562d61bc9fe203a639dfc0c3f875b3411fe8ae211c5722ab9124a1009bda32a", + // address: 0x73655B77df59d378d396918C3426cc5219EfB3c8 + key3: "0x724028dcbf931ff1f2730ad76c0b7b8b07dbf7f0a56408be3e305be1b81edfe0", + // address: 0x5aB557A6b8FF7D7a9A42F223fAA376A4732Eb15a + key4: "0x4420cde3d475a038739d1d47cfd690799c0f2e1b84d871c24f221c2dee4e4121", + // address: 0x38F966794cf349f2c91116e94f587Fc3aafDC3F4 + key5: "0xd34cc37587785349013f3f10cadbe7bf8dfeb8a95c86724887e58816b734fcfb", +}; + +export const createWallet = ( + key: keyof typeof keys, +): WalletClient => + createWalletClient({ + account: privateKeyToAccount(keys[key] ?? generatePrivateKey()), + chain: mainnet, + transport: http(), + }); diff --git a/examples/react-vite-browser-sdk/tsconfig.json b/examples/react-vite-browser-sdk/tsconfig.json new file mode 100644 index 000000000..ce1c7e0fd --- /dev/null +++ b/examples/react-vite-browser-sdk/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "tsconfig/react-app.json", + "include": ["src", "vite.config.ts", "postcss.config.cjs"] +} diff --git a/examples/react-vite-browser-sdk/vite.config.ts b/examples/react-vite-browser-sdk/vite.config.ts new file mode 100644 index 000000000..3d7f96fe2 --- /dev/null +++ b/examples/react-vite-browser-sdk/vite.config.ts @@ -0,0 +1,16 @@ +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + optimizeDeps: { + exclude: ["@xmtp/wasm-bindings"], + }, + server: { + headers: { + "Cross-Origin-Embedder-Policy": "require-corp", + "Cross-Origin-Opener-Policy": "same-origin", + }, + }, +}); From ef8357228f62654c729b38e114c72761de2079a4 Mon Sep 17 00:00:00 2001 From: Ry Racherbaumer Date: Mon, 28 Oct 2024 13:13:00 -0500 Subject: [PATCH 6/8] Update yarn.lock --- yarn.lock | 5531 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 5283 insertions(+), 248 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6b715185a..975d12bed 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,13 @@ __metadata: version: 8 cacheKey: 10 +"@adobe/css-tools@npm:^4.4.0": + version: 4.4.0 + resolution: "@adobe/css-tools@npm:4.4.0" + checksum: 10/9c6315fe9efa5075d6ddb6ded7a1424bc9c41a01f2314b6bdcc368723985fe161008d03ddcc2b27b2da50cb9c14190fbce965d15cefe5f9a31bdd43f35b52115 + languageName: node + linkType: hard + "@adraffy/ens-normalize@npm:1.10.0": version: 1.10.0 resolution: "@adraffy/ens-normalize@npm:1.10.0" @@ -80,7 +87,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.24.2, @babel/code-frame@npm:^7.25.7": +"@babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.24.2, @babel/code-frame@npm:^7.25.7": version: 7.25.7 resolution: "@babel/code-frame@npm:7.25.7" dependencies: @@ -97,7 +104,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.24.0": +"@babel/core@npm:^7.24.0, @babel/core@npm:^7.25.2": version: 7.25.8 resolution: "@babel/core@npm:7.25.8" dependencies: @@ -169,6 +176,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-plugin-utils@npm:7.25.7" + checksum: 10/e1b0ea5e67b05378d6360e3fc370e99bfb247eed9f68145b5cce541da703424e1887fb6fc60ab2f7f743c72dcbfbed79d3032af43f2c251c229c734dc2572a5b + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.25.7": version: 7.25.7 resolution: "@babel/helper-simple-access@npm:7.25.7" @@ -222,7 +236,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.24.0, @babel/parser@npm:^7.25.4, @babel/parser@npm:^7.25.7, @babel/parser@npm:^7.25.8": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.25.4, @babel/parser@npm:^7.25.7, @babel/parser@npm:^7.25.8": version: 7.25.8 resolution: "@babel/parser@npm:7.25.8" dependencies: @@ -233,7 +247,29 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.5.5": +"@babel/plugin-transform-react-jsx-self@npm:^7.24.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.25.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/5374a91374f8cd17e05be2a3fea36db79048402e988264afe563c136ab2b78991353f6f6e89391376431621714629eb87476ca714c298186fc6621c6cb01a458 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx-source@npm:^7.24.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.25.7" + dependencies: + "@babel/helper-plugin-utils": "npm:^7.25.7" + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 10/1d0c2b3c42ba23f90ff675de3dd32c9722cf4c940d3f39d43c68bcc9d6313b1350e6d5f2fd7f02f0aa411e484efda66ed98ea43fecf4357f80aed9356086a692 + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.19.4, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.5.5": version: 7.25.7 resolution: "@babel/runtime@npm:7.25.7" dependencies: @@ -268,7 +304,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.24.0, @babel/types@npm:^7.25.4, @babel/types@npm:^7.25.7, @babel/types@npm:^7.25.8": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.24.0, @babel/types@npm:^7.25.4, @babel/types@npm:^7.25.7, @babel/types@npm:^7.25.8": version: 7.25.8 resolution: "@babel/types@npm:7.25.8" dependencies: @@ -286,6 +322,34 @@ __metadata: languageName: node linkType: hard +"@bundled-es-modules/cookie@npm:^2.0.0": + version: 2.0.0 + resolution: "@bundled-es-modules/cookie@npm:2.0.0" + dependencies: + cookie: "npm:^0.5.0" + checksum: 10/c8ef02aa5d3f6c786cfa407e1c93b4af29c600eb09990973f47a7a49e4771c1bec37c8f8e567638bb9cbc41f4e38d065ff1d8eaf9bf91f0c3613a6d60bc82c8c + languageName: node + linkType: hard + +"@bundled-es-modules/statuses@npm:^1.0.1": + version: 1.0.1 + resolution: "@bundled-es-modules/statuses@npm:1.0.1" + dependencies: + statuses: "npm:^2.0.1" + checksum: 10/9bf6a2bcf040a66fb805da0e1446041fd9def7468bb5da29c5ce02adf121a3f7cec123664308059a62a46fcaee666add83094b76df6dce72e5cafa8e6bebe60d + languageName: node + linkType: hard + +"@bundled-es-modules/tough-cookie@npm:^0.1.6": + version: 0.1.6 + resolution: "@bundled-es-modules/tough-cookie@npm:0.1.6" + dependencies: + "@types/tough-cookie": "npm:^4.0.5" + tough-cookie: "npm:^4.1.4" + checksum: 10/4f24a820f02c08c3ca0ff21272317357152093f76f9c8cc182517f61fa426ae53dadc4d68a3d6da5078e8d73f0ff8c0907a9f994c0be756162ba9c7358533e57 + languageName: node + linkType: hard + "@changesets/apply-release-plan@npm:^7.0.5": version: 7.0.5 resolution: "@changesets/apply-release-plan@npm:7.0.5" @@ -520,6 +584,491 @@ __metadata: languageName: node linkType: hard +"@coinbase/wallet-sdk@npm:4.0.4": + version: 4.0.4 + resolution: "@coinbase/wallet-sdk@npm:4.0.4" + dependencies: + buffer: "npm:^6.0.3" + clsx: "npm:^1.2.1" + eventemitter3: "npm:^5.0.1" + keccak: "npm:^3.0.3" + preact: "npm:^10.16.0" + sha.js: "npm:^2.4.11" + checksum: 10/4915f90e78cbd734e791ad99b360ec7bf9cd6f76addfdeac537a0891956db7f19b8ccbd5e7ea72292ce37a45807bee9e44f67664b79e2c7ab07266f4dfc92116 + languageName: node + linkType: hard + +"@csstools/cascade-layer-name-parser@npm:^1.0.13": + version: 1.0.13 + resolution: "@csstools/cascade-layer-name-parser@npm:1.0.13" + peerDependencies: + "@csstools/css-parser-algorithms": ^2.7.1 + "@csstools/css-tokenizer": ^2.4.1 + checksum: 10/7f243147d1ba8ee20ce66a049020e844a6b069b502e9d6cd301bbf23344777ccbfa8cd8d808d06d7a3ba20585181eb47a149a5ce1d43387494b0ead0638d8a23 + languageName: node + linkType: hard + +"@csstools/color-helpers@npm:^4.2.1": + version: 4.2.1 + resolution: "@csstools/color-helpers@npm:4.2.1" + checksum: 10/58f00c14a73d7db643b35193271166d8493072ea23f426b0496dc6dfbd1480169d03b42aae949cd46a6dc3683c9bf9dc646e7d4250db2d26e81abb448e3eb2d9 + languageName: node + linkType: hard + +"@csstools/css-calc@npm:^1.2.4": + version: 1.2.4 + resolution: "@csstools/css-calc@npm:1.2.4" + peerDependencies: + "@csstools/css-parser-algorithms": ^2.7.1 + "@csstools/css-tokenizer": ^2.4.1 + checksum: 10/cf73e40ab88172bbdf2657876c8cd2f44e6f81fd938523c6f5bf037d96916461359386a5fa5245efeff00a5bc6018fd7db20f855dc650591b4af37039c0c3c96 + languageName: node + linkType: hard + +"@csstools/css-color-parser@npm:^2.0.4": + version: 2.0.5 + resolution: "@csstools/css-color-parser@npm:2.0.5" + dependencies: + "@csstools/color-helpers": "npm:^4.2.1" + "@csstools/css-calc": "npm:^1.2.4" + peerDependencies: + "@csstools/css-parser-algorithms": ^2.7.1 + "@csstools/css-tokenizer": ^2.4.1 + checksum: 10/4d55a4a5493b5e18cfec67d96a36685fb826c472f279f31fe11c5118ee2c6addc5d1da6ac87066d92bcfc88f944b77f3cbb4d3bb3d53816e8dfd459fbdfc2c3e + languageName: node + linkType: hard + +"@csstools/css-parser-algorithms@npm:^2.7.1": + version: 2.7.1 + resolution: "@csstools/css-parser-algorithms@npm:2.7.1" + peerDependencies: + "@csstools/css-tokenizer": ^2.4.1 + checksum: 10/939b23652c970dc4af8c20776e5da9e592cae4a590025f07ddb3263799076d4b6cf1bf8c4de97b29780bfa169177a31945effe94d2a11e0972138b5ff7d93654 + languageName: node + linkType: hard + +"@csstools/css-tokenizer@npm:^2.4.1": + version: 2.4.1 + resolution: "@csstools/css-tokenizer@npm:2.4.1" + checksum: 10/a368e5c96d3b11e147f95951e336105480acfa457cdbc6fdf97e8873ff92ab9ee6b4b6224ac1b263f08798802f6b29b8977a502d070f9ab695c9b9905b964198 + languageName: node + linkType: hard + +"@csstools/media-query-list-parser@npm:^2.1.13": + version: 2.1.13 + resolution: "@csstools/media-query-list-parser@npm:2.1.13" + peerDependencies: + "@csstools/css-parser-algorithms": ^2.7.1 + "@csstools/css-tokenizer": ^2.4.1 + checksum: 10/4a771d94eb01a23279d493cd668c71ae230b660c1e6ebcff1bec6e959eae6987ece7ce01b094b44afbae8695dc98d8617580d488db16de9ec4a7378ed5adf57f + languageName: node + linkType: hard + +"@csstools/postcss-cascade-layers@npm:^4.0.6": + version: 4.0.6 + resolution: "@csstools/postcss-cascade-layers@npm:4.0.6" + dependencies: + "@csstools/selector-specificity": "npm:^3.1.1" + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10/786389825088face995a5d5c883d0d1608d26e2e3b126cbfab102d29e223f8253db03b41e056c8495dddc5f9b3389f05ae08e1f1f677b9eab9fcd6e1d4e6efaa + languageName: node + linkType: hard + +"@csstools/postcss-color-function@npm:^3.0.19": + version: 3.0.19 + resolution: "@csstools/postcss-color-function@npm:3.0.19" + dependencies: + "@csstools/css-color-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/postcss-progressive-custom-properties": "npm:^3.3.0" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/3bfec99a1c73de7697d4fa345a65a2ffeb147d83c266dc6cda002051f776e7a43d54992ef82e429cfcd370a9e3015d4b4c0a25c2a1663e7820495ca863060912 + languageName: node + linkType: hard + +"@csstools/postcss-color-mix-function@npm:^2.0.19": + version: 2.0.19 + resolution: "@csstools/postcss-color-mix-function@npm:2.0.19" + dependencies: + "@csstools/css-color-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/postcss-progressive-custom-properties": "npm:^3.3.0" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/37304000953aced335ba493cfc5c70d8e3253c9c84cb4e2d10c2694b8562c46d25ea07cfe0026b6b49d2d8e3d0d8b0a658f5163a76fb7d7b9abdb77d78a45c93 + languageName: node + linkType: hard + +"@csstools/postcss-content-alt-text@npm:^1.0.0": + version: 1.0.0 + resolution: "@csstools/postcss-content-alt-text@npm:1.0.0" + dependencies: + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/postcss-progressive-custom-properties": "npm:^3.3.0" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/69461bb5213b34288736fc7f111a356c54fd34137abf8ba1c3fcb6eab3730085e1062e5ddfc79f41fde909ebfd3599b24127e5010ae58bafcc3f60bcc56969ab + languageName: node + linkType: hard + +"@csstools/postcss-exponential-functions@npm:^1.0.9": + version: 1.0.9 + resolution: "@csstools/postcss-exponential-functions@npm:1.0.9" + dependencies: + "@csstools/css-calc": "npm:^1.2.4" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + peerDependencies: + postcss: ^8.4 + checksum: 10/4bb0d13b1a5e2b119caeb0cf60f66d8ad8238688f662fc73dd29f342ff94835990792d3e92887744c19388dd93b293039a756ef73bc19a80dadc4c87e8f23e26 + languageName: node + linkType: hard + +"@csstools/postcss-font-format-keywords@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/postcss-font-format-keywords@npm:3.0.2" + dependencies: + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/67e1f4b96b6d62a588c6c8430f3a4f761483783d470135decee3a9f370a9afd1b795b1ac985b2e666d97d6233825fca2a8bc3fa41d2dd0232f2738ce781d7625 + languageName: node + linkType: hard + +"@csstools/postcss-gamut-mapping@npm:^1.0.11": + version: 1.0.11 + resolution: "@csstools/postcss-gamut-mapping@npm:1.0.11" + dependencies: + "@csstools/css-color-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + peerDependencies: + postcss: ^8.4 + checksum: 10/fe62a7dcff7e0ec6fce4c35153557b7a9f43226af68adda115535cb5a13322c8b2604c13886490a4b8e181617caeee8e92ac8f8eb9e2e395b503b41772c2b161 + languageName: node + linkType: hard + +"@csstools/postcss-gradients-interpolation-method@npm:^4.0.20": + version: 4.0.20 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:4.0.20" + dependencies: + "@csstools/css-color-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/postcss-progressive-custom-properties": "npm:^3.3.0" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/8338c4b53dbf072b3bba23845adf366a41c6174eca6cab146f577ec1492a78a488f4533bac3b5d6434ad88b46be2633c8f062de220e6bc0430086de169b2c7a4 + languageName: node + linkType: hard + +"@csstools/postcss-hwb-function@npm:^3.0.18": + version: 3.0.18 + resolution: "@csstools/postcss-hwb-function@npm:3.0.18" + dependencies: + "@csstools/css-color-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/postcss-progressive-custom-properties": "npm:^3.3.0" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/29089ac8d00e55abdbb248e1e652812cab3cf6cac3356db7abdc2300799183275652b9817488530cc920f7cfe1d9d19879f20a1ccfb1c520975e3e3a187ee86f + languageName: node + linkType: hard + +"@csstools/postcss-ic-unit@npm:^3.0.7": + version: 3.0.7 + resolution: "@csstools/postcss-ic-unit@npm:3.0.7" + dependencies: + "@csstools/postcss-progressive-custom-properties": "npm:^3.3.0" + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/590ea1130db89042bd71602372420fca325700b094c8839df3da4a4a1454ec950096a3291e518b0d2848b5b624feebe0f1e5f0076ae7e34d576e44459db81e99 + languageName: node + linkType: hard + +"@csstools/postcss-initial@npm:^1.0.1": + version: 1.0.1 + resolution: "@csstools/postcss-initial@npm:1.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10/b99d9737caeba56b4532b248ced1013807e0a29fa3b3da6c63b803099ac83c9a27de1c06193805c1f35d65406c5b0d527674d1cb0cd5eaf7137e07f7fe67b35b + languageName: node + linkType: hard + +"@csstools/postcss-is-pseudo-class@npm:^4.0.8": + version: 4.0.8 + resolution: "@csstools/postcss-is-pseudo-class@npm:4.0.8" + dependencies: + "@csstools/selector-specificity": "npm:^3.1.1" + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10/dcd4e1b07205d94e60e5fcd42b5d16f1063ec06318192ccd0295d419cfce45903489f5af7c13d2f829ba4895a2e6600c2f81b3ee5f25b38d7b84dfa05e3a4186 + languageName: node + linkType: hard + +"@csstools/postcss-light-dark-function@npm:^1.0.8": + version: 1.0.8 + resolution: "@csstools/postcss-light-dark-function@npm:1.0.8" + dependencies: + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/postcss-progressive-custom-properties": "npm:^3.3.0" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/0d49f5094a61d1d79e6f5d1578a8cfe85f459bc03304dea0cf3860ed8bbb49d9a11bb6bd7f9613ae73e11ad8113867b36db059e276a69fcd65390c56f9a7bc38 + languageName: node + linkType: hard + +"@csstools/postcss-logical-float-and-clear@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/postcss-logical-float-and-clear@npm:2.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10/f92283a31699f980f159cfeaafa937d02ce7056c16bfbc82e586545f7c02f39329ff3ef36fba135f01f2f0e671d1e2855c3804c454ac81eabc8fa1f63a8269c9 + languageName: node + linkType: hard + +"@csstools/postcss-logical-overflow@npm:^1.0.1": + version: 1.0.1 + resolution: "@csstools/postcss-logical-overflow@npm:1.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10/b30e4e5c32b524b1b3c2d262b80027e059516e9d9b9224607e059ac043f968c9cdc635c4a26cb97f75b7ff5d6d56c12487322fdd956f62271645f5b6288b2114 + languageName: node + linkType: hard + +"@csstools/postcss-logical-overscroll-behavior@npm:^1.0.1": + version: 1.0.1 + resolution: "@csstools/postcss-logical-overscroll-behavior@npm:1.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10/6c56f07d2d8b9350fe03e98aa7d47b2ae716e2fc4d6d35123bfa30fb15dfa3d8f00f7e49c8dd586bd11453faa3c2b7c168b5a0d56b59cc486eee0f056827f8dc + languageName: node + linkType: hard + +"@csstools/postcss-logical-resize@npm:^2.0.1": + version: 2.0.1 + resolution: "@csstools/postcss-logical-resize@npm:2.0.1" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/60d24dc65676f368861b4e13ad66189b123af91e8da96bbfe1c948aed84d72bdc95813d0e75b51a92b0161fe5120f4811ed95844333aca87eb7839ab30e1a0ac + languageName: node + linkType: hard + +"@csstools/postcss-logical-viewport-units@npm:^2.0.11": + version: 2.0.11 + resolution: "@csstools/postcss-logical-viewport-units@npm:2.0.11" + dependencies: + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/6c292fe00e3823284f5e644e5cb71ffe22d299f3a16cb17309d54a390f2877490f53c7aad8b5420abe0b073a30e35ba892ae1eff771579cf55a1aa3de671c6a0 + languageName: node + linkType: hard + +"@csstools/postcss-media-minmax@npm:^1.1.8": + version: 1.1.8 + resolution: "@csstools/postcss-media-minmax@npm:1.1.8" + dependencies: + "@csstools/css-calc": "npm:^1.2.4" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/media-query-list-parser": "npm:^2.1.13" + peerDependencies: + postcss: ^8.4 + checksum: 10/f2688a8b13703a556439b1633d196ccd8792a2578ab796487adc4efbddb503941820c51f12fa350c13cf174207dca16d8b028d3339f894a22537ceff23f47efe + languageName: node + linkType: hard + +"@csstools/postcss-media-queries-aspect-ratio-number-values@npm:^2.0.11": + version: 2.0.11 + resolution: "@csstools/postcss-media-queries-aspect-ratio-number-values@npm:2.0.11" + dependencies: + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/media-query-list-parser": "npm:^2.1.13" + peerDependencies: + postcss: ^8.4 + checksum: 10/36ef5c6a27bb4888646d1bf9991eecc2dfe7f8c6dc4055853dad07cbdcca8ad52f45feab0dcf758ed18a77ada153aabf25eeff4e010e187e63423e850a2c2120 + languageName: node + linkType: hard + +"@csstools/postcss-nested-calc@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/postcss-nested-calc@npm:3.0.2" + dependencies: + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/ac6a253974929f19e7d792c12382615fae99a8a3bdc1189bd0f6fbbf5b9d655380b60d977bd75427e3cc9791e024c8c7e5e80d27794a6dcfb0752682664a3082 + languageName: node + linkType: hard + +"@csstools/postcss-normalize-display-values@npm:^3.0.2": + version: 3.0.2 + resolution: "@csstools/postcss-normalize-display-values@npm:3.0.2" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/792e419483e3947bba1ea139fb693c80704be64bc9e8e6e12b26518142ef623462066d0d6f76f8ed54fd2abaf88110e719959aa0893e7b3e2c9c3d3385abd570 + languageName: node + linkType: hard + +"@csstools/postcss-oklab-function@npm:^3.0.19": + version: 3.0.19 + resolution: "@csstools/postcss-oklab-function@npm:3.0.19" + dependencies: + "@csstools/css-color-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/postcss-progressive-custom-properties": "npm:^3.3.0" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/3dd464e3f6a4997f1404c644bdb8fd51b8a595d82a6dcd00283e8e662d1115cdb97d9daf05cc7c23a70a021208cab062db4a3f518f7d3dddfd79a9d3803ed6a3 + languageName: node + linkType: hard + +"@csstools/postcss-progressive-custom-properties@npm:^3.3.0": + version: 3.3.0 + resolution: "@csstools/postcss-progressive-custom-properties@npm:3.3.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/7a7bf43cff64df8c1d2d96be866fda37be62e2f91126e2466df3374538ddbc9c2dee8cdd0dec820e872983eab861dea8cde70bc881c073abb9d16812dff3881f + languageName: node + linkType: hard + +"@csstools/postcss-relative-color-syntax@npm:^2.0.19": + version: 2.0.19 + resolution: "@csstools/postcss-relative-color-syntax@npm:2.0.19" + dependencies: + "@csstools/css-color-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/postcss-progressive-custom-properties": "npm:^3.3.0" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/8e3b65b647e7b4ec2c37fafeac9cc5f9ddc5d54908ae1c06f2a2f76114937048a59966a3486de14f5e9bc40e9ed1fad1209e8655e4d708009f0f17d9e47da971 + languageName: node + linkType: hard + +"@csstools/postcss-scope-pseudo-class@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/postcss-scope-pseudo-class@npm:3.0.1" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10/82f7602b633c71ac1492e3258c7ee40cae67c350c8a778799e1461b7e965204fc6dd53a80f7d0048c5c708436ef1e87bcc07b8422771eee87eb470fe1068c5f3 + languageName: node + linkType: hard + +"@csstools/postcss-stepped-value-functions@npm:^3.0.10": + version: 3.0.10 + resolution: "@csstools/postcss-stepped-value-functions@npm:3.0.10" + dependencies: + "@csstools/css-calc": "npm:^1.2.4" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + peerDependencies: + postcss: ^8.4 + checksum: 10/334480a7341ce98b891c08cfa7d109b9c3a0068c4141e65e363c8c444cebe12e3d426ce40e3abc73b3c71162275b824b24d668ddfe9bd16dff76d4b7c7910134 + languageName: node + linkType: hard + +"@csstools/postcss-text-decoration-shorthand@npm:^3.0.7": + version: 3.0.7 + resolution: "@csstools/postcss-text-decoration-shorthand@npm:3.0.7" + dependencies: + "@csstools/color-helpers": "npm:^4.2.1" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/725fa6210b459202cec59974551fe97fca47f543ea094cedcfa9c41ee766b35134b25f55e489b4e041a924fd9c270f2e5a50347141f4b61386a42f21d0e1a317 + languageName: node + linkType: hard + +"@csstools/postcss-trigonometric-functions@npm:^3.0.10": + version: 3.0.10 + resolution: "@csstools/postcss-trigonometric-functions@npm:3.0.10" + dependencies: + "@csstools/css-calc": "npm:^1.2.4" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + peerDependencies: + postcss: ^8.4 + checksum: 10/d1c9efcaf33ee34f42b4f09474546e4ca54f90e5156d38ae9c63f2d1129c95322dc193d595eea5d66b80864b855df73342543bb3a8d90c9caa75146363ca79f0 + languageName: node + linkType: hard + +"@csstools/postcss-unset-value@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/postcss-unset-value@npm:3.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10/71d92f4679d93ef9f62758923d246c1c07f1c00dca8d5823863aa5fca0fbdbd5e21c4a12e49197b7e706c4cdcaf7f0c325229a1b58d9cf6b6c4ca19ef0259355 + languageName: node + linkType: hard + +"@csstools/selector-resolve-nested@npm:^1.1.0": + version: 1.1.0 + resolution: "@csstools/selector-resolve-nested@npm:1.1.0" + peerDependencies: + postcss-selector-parser: ^6.0.13 + checksum: 10/bb7591e790cf6112157870f8ba3ebb7018924b88f49feff51ab07476ceca3b290cae900734e0aad30d308add07e07082f0e61625b3931572c04952c5531df2b2 + languageName: node + linkType: hard + +"@csstools/selector-specificity@npm:^3.1.1": + version: 3.1.1 + resolution: "@csstools/selector-specificity@npm:3.1.1" + peerDependencies: + postcss-selector-parser: ^6.0.13 + checksum: 10/3786a6afea97b08ad739ee8f4004f7e0a9e25049cee13af809dbda6462090744012a54bd9275a44712791e8f103f85d21641f14e81799f9dab946b0459a5e1ef + languageName: node + linkType: hard + +"@csstools/utilities@npm:^1.0.0": + version: 1.0.0 + resolution: "@csstools/utilities@npm:1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/4ca0d80a252ed1d9d3085217ba9c6669e9c9dc2b828432b4732204e4e0dd3e5aec4bb0f92aa95f63df44012bea6b7851c29abe94b7f5c40b06436a61e33904fe + languageName: node + linkType: hard + +"@emotion/hash@npm:^0.9.0": + version: 0.9.2 + resolution: "@emotion/hash@npm:0.9.2" + checksum: 10/379bde2830ccb0328c2617ec009642321c0e009a46aa383dfbe75b679c6aea977ca698c832d225a893901f29d7b3eef0e38cf341f560f6b2b56f1ff23c172387 + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.21.5": version: 0.21.5 resolution: "@esbuild/aix-ppc64@npm:0.21.5" @@ -788,7 +1337,7 @@ __metadata: languageName: node linkType: hard -"@ethereumjs/tx@npm:^4.2.0": +"@ethereumjs/tx@npm:^4.1.2, @ethereumjs/tx@npm:^4.2.0": version: 4.2.0 resolution: "@ethereumjs/tx@npm:4.2.0" dependencies: @@ -1278,13 +1827,68 @@ __metadata: languageName: node linkType: hard -"@isaacs/cliui@npm:^8.0.2": - version: 8.0.2 - resolution: "@isaacs/cliui@npm:8.0.2" +"@inquirer/confirm@npm:^3.0.0": + version: 3.2.0 + resolution: "@inquirer/confirm@npm:3.2.0" dependencies: - string-width: "npm:^5.1.2" - string-width-cjs: "npm:string-width@^4.2.0" - strip-ansi: "npm:^7.0.1" + "@inquirer/core": "npm:^9.1.0" + "@inquirer/type": "npm:^1.5.3" + checksum: 10/6b032a26c64075dc14769558720b17f09bc6784a223bbf2c85ec42e491be6ce4c4b83518433c47e05d7e8836ba680ab1b2f6b9c553410d4326582308a1fd2259 + languageName: node + linkType: hard + +"@inquirer/core@npm:^9.1.0": + version: 9.2.1 + resolution: "@inquirer/core@npm:9.2.1" + dependencies: + "@inquirer/figures": "npm:^1.0.6" + "@inquirer/type": "npm:^2.0.0" + "@types/mute-stream": "npm:^0.0.4" + "@types/node": "npm:^22.5.5" + "@types/wrap-ansi": "npm:^3.0.0" + ansi-escapes: "npm:^4.3.2" + cli-width: "npm:^4.1.0" + mute-stream: "npm:^1.0.0" + signal-exit: "npm:^4.1.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^6.2.0" + yoctocolors-cjs: "npm:^2.1.2" + checksum: 10/bf35e46e70add8ffa9e9d4ae6b528ac660484afca082bca31af95ce8a145a2f8c8d0d07cc7a8627771452e68ade9849c9c9c450a004133ed10ac2d6730900452 + languageName: node + linkType: hard + +"@inquirer/figures@npm:^1.0.6": + version: 1.0.7 + resolution: "@inquirer/figures@npm:1.0.7" + checksum: 10/ce896860de9d822a7c2a212667bcfd0f04cf2ce86d9a2411cc9c077bb59cd61732cb5f72ac66e88d52912466eec433f005bf8a25efa658f41e1a32f3977080bd + languageName: node + linkType: hard + +"@inquirer/type@npm:^1.5.3": + version: 1.5.5 + resolution: "@inquirer/type@npm:1.5.5" + dependencies: + mute-stream: "npm:^1.0.0" + checksum: 10/bd3f3d7510785af4ad599e042e99e4be6380f52f79f3db140fe6fed0a605acf27b1a0a20fb5cc688eaf7b8aa0c36dacb1d89c7bba4586f38cbf58ba9f159e7b5 + languageName: node + linkType: hard + +"@inquirer/type@npm:^2.0.0": + version: 2.0.0 + resolution: "@inquirer/type@npm:2.0.0" + dependencies: + mute-stream: "npm:^1.0.0" + checksum: 10/e85f359866c28cce06272d2d51cc17788a5c9de9fda7f181c27775dd26821de0dacbc947b521cfe2009cd2965ec54696799035ef3a25a9a5794e47d8e8bdf794 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" strip-ansi-cjs: "npm:strip-ansi@^6.0.1" wrap-ansi: "npm:^8.1.0" wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" @@ -1351,6 +1955,22 @@ __metadata: languageName: node linkType: hard +"@lit-labs/ssr-dom-shim@npm:^1.0.0, @lit-labs/ssr-dom-shim@npm:^1.1.0": + version: 1.2.1 + resolution: "@lit-labs/ssr-dom-shim@npm:1.2.1" + checksum: 10/48e28c1f132eb1d5b385454dd23db2837bf913d108a0908e73816ceb594b1b09db34e05ccb86a18fb9c02fc100d62bbab350b6ec88e2c175f2c21c5f0220bfdd + languageName: node + linkType: hard + +"@lit/reactive-element@npm:^1.3.0, @lit/reactive-element@npm:^1.6.0": + version: 1.6.3 + resolution: "@lit/reactive-element@npm:1.6.3" + dependencies: + "@lit-labs/ssr-dom-shim": "npm:^1.0.0" + checksum: 10/664c899bb0b144590dc4faf83b358b1504810eac107778c3aeb384affc65a7ef4eda754944bcc34a57237db03dff145332406345ac24da19ca37cf4b3cb343d3 + languageName: node + linkType: hard + "@manypkg/find-root@npm:^1.1.0": version: 1.1.0 resolution: "@manypkg/find-root@npm:1.1.0" @@ -1377,6 +1997,17 @@ __metadata: languageName: node linkType: hard +"@metamask/eth-json-rpc-provider@npm:^1.0.0": + version: 1.0.1 + resolution: "@metamask/eth-json-rpc-provider@npm:1.0.1" + dependencies: + "@metamask/json-rpc-engine": "npm:^7.0.0" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^5.0.1" + checksum: 10/4ed1a96afc32eb46f585ff54e16cb2aee2e7027dcf6a142d875b9c6248f15c9a00dd1df43035f2e64efbf01a96954040699d9d97e3b483c958f5b1d6c0fa6f50 + languageName: node + linkType: hard + "@metamask/json-rpc-engine@npm:^10.0.0": version: 10.0.0 resolution: "@metamask/json-rpc-engine@npm:10.0.0" @@ -1388,6 +2019,28 @@ __metadata: languageName: node linkType: hard +"@metamask/json-rpc-engine@npm:^7.0.0": + version: 7.3.3 + resolution: "@metamask/json-rpc-engine@npm:7.3.3" + dependencies: + "@metamask/rpc-errors": "npm:^6.2.1" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^8.3.0" + checksum: 10/116664c974c522d280335d9a02cba731e4f08562c2980415f7535513cd308c7e612e52618086996e5ac2b67db7f1e6ac1bd8201aba7825163db17a25f2874cc9 + languageName: node + linkType: hard + +"@metamask/json-rpc-engine@npm:^8.0.1, @metamask/json-rpc-engine@npm:^8.0.2": + version: 8.0.2 + resolution: "@metamask/json-rpc-engine@npm:8.0.2" + dependencies: + "@metamask/rpc-errors": "npm:^6.2.1" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^8.3.0" + checksum: 10/f088f4b648b9b55875b56e8237853e7282f13302a9db6a1f9bba06314dfd6cd0a23b3d27f8fde05a157b97ebb03b67bc2699ba455c99553dfb2ecccd73ab3474 + languageName: node + linkType: hard + "@metamask/json-rpc-engine@npm:^9.0.1": version: 9.0.3 resolution: "@metamask/json-rpc-engine@npm:9.0.3" @@ -1399,6 +2052,18 @@ __metadata: languageName: node linkType: hard +"@metamask/json-rpc-middleware-stream@npm:^7.0.1": + version: 7.0.2 + resolution: "@metamask/json-rpc-middleware-stream@npm:7.0.2" + dependencies: + "@metamask/json-rpc-engine": "npm:^8.0.2" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^8.3.0" + readable-stream: "npm:^3.6.2" + checksum: 10/850a857418fc6b8c73fb4f978b76d2cdc0372ccb2f0f7e6f0229117882a4687d716fc37638483c9ac1338f7957b3f8207bc6be8a3d4c0708339fe9dfc3510fe0 + languageName: node + linkType: hard + "@metamask/json-rpc-middleware-stream@npm:^8.0.1": version: 8.0.4 resolution: "@metamask/json-rpc-middleware-stream@npm:8.0.4" @@ -1421,6 +2086,35 @@ __metadata: languageName: node linkType: hard +"@metamask/onboarding@npm:^1.0.1": + version: 1.0.1 + resolution: "@metamask/onboarding@npm:1.0.1" + dependencies: + bowser: "npm:^2.9.0" + checksum: 10/2aa288e58fc34cb4708e311fc08abd33a0d9bc67671610955a2bd8d43a16330261f1159174c365611e249751ec984da9a9cb963bb0a87b3a6945d7caa6cc8799 + languageName: node + linkType: hard + +"@metamask/providers@npm:16.1.0": + version: 16.1.0 + resolution: "@metamask/providers@npm:16.1.0" + dependencies: + "@metamask/json-rpc-engine": "npm:^8.0.1" + "@metamask/json-rpc-middleware-stream": "npm:^7.0.1" + "@metamask/object-multiplex": "npm:^2.0.0" + "@metamask/rpc-errors": "npm:^6.2.1" + "@metamask/safe-event-emitter": "npm:^3.1.1" + "@metamask/utils": "npm:^8.3.0" + detect-browser: "npm:^5.2.0" + extension-port-stream: "npm:^3.0.0" + fast-deep-equal: "npm:^3.1.3" + is-stream: "npm:^2.0.0" + readable-stream: "npm:^3.6.2" + webextension-polyfill: "npm:^0.10.0" + checksum: 10/596bcc0206355e5698cc41458b07caa748f589790e1a3210f1a32d21103a3318902d953a641d4583b8179d653659ba29c42e65fba019a98533bdcf68316bf915 + languageName: node + linkType: hard + "@metamask/providers@npm:^17.1.1": version: 17.2.1 resolution: "@metamask/providers@npm:17.2.1" @@ -1442,7 +2136,7 @@ __metadata: languageName: node linkType: hard -"@metamask/rpc-errors@npm:^6.3.1": +"@metamask/rpc-errors@npm:^6.2.1, @metamask/rpc-errors@npm:^6.3.1": version: 6.4.0 resolution: "@metamask/rpc-errors@npm:6.4.0" dependencies: @@ -1462,6 +2156,13 @@ __metadata: languageName: node linkType: hard +"@metamask/safe-event-emitter@npm:^2.0.0": + version: 2.0.0 + resolution: "@metamask/safe-event-emitter@npm:2.0.0" + checksum: 10/3e4f00c64aa1ddf9b9ae5c2337fb8cee359b6c481ded0ec21ef70610960c51cdcc4a9b569de334dcd7cb1fe445cafd298360907c1e211e244c5990b55246f350 + languageName: node + linkType: hard + "@metamask/safe-event-emitter@npm:^3.0.0, @metamask/safe-event-emitter@npm:^3.1.1": version: 3.1.1 resolution: "@metamask/safe-event-emitter@npm:3.1.1" @@ -1469,13 +2170,122 @@ __metadata: languageName: node linkType: hard -"@metamask/superstruct@npm:^3.1.0": +"@metamask/sdk-communication-layer@npm:0.28.2": + version: 0.28.2 + resolution: "@metamask/sdk-communication-layer@npm:0.28.2" + dependencies: + bufferutil: "npm:^4.0.8" + date-fns: "npm:^2.29.3" + debug: "npm:^4.3.4" + utf-8-validate: "npm:^5.0.2" + uuid: "npm:^8.3.2" + peerDependencies: + cross-fetch: ^4.0.0 + eciesjs: ^0.3.16 + eventemitter2: ^6.4.7 + readable-stream: ^3.6.2 + socket.io-client: ^4.5.1 + checksum: 10/f417b37fc010e91eee424272d47941bbe6b07d443ecfe86fb04e93f2980b26d4ab7e1f56f1b2011c8d256bf128b8d777e7fbc80e23a8b83424d557a671a315ce + languageName: node + linkType: hard + +"@metamask/sdk-install-modal-web@npm:0.28.1": + version: 0.28.1 + resolution: "@metamask/sdk-install-modal-web@npm:0.28.1" + dependencies: + qr-code-styling: "npm:^1.6.0-rc.1" + peerDependencies: + i18next: 23.11.5 + react: ^18.2.0 + react-dom: ^18.2.0 + react-native: "*" + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + react-native: + optional: true + checksum: 10/000ed12ea42235dbaecd262c51f9eefab160db6fe245b0baf4e2da88c3a5f6e69aeff3cfae5eb0488e7f80c404df4c9b01ec20eb210dacd73485331bf7cd9bc3 + languageName: node + linkType: hard + +"@metamask/sdk@npm:0.28.4": + version: 0.28.4 + resolution: "@metamask/sdk@npm:0.28.4" + dependencies: + "@metamask/onboarding": "npm:^1.0.1" + "@metamask/providers": "npm:16.1.0" + "@metamask/sdk-communication-layer": "npm:0.28.2" + "@metamask/sdk-install-modal-web": "npm:0.28.1" + "@types/dom-screen-wake-lock": "npm:^1.0.0" + "@types/uuid": "npm:^10.0.0" + bowser: "npm:^2.9.0" + cross-fetch: "npm:^4.0.0" + debug: "npm:^4.3.4" + eciesjs: "npm:^0.3.15" + eth-rpc-errors: "npm:^4.0.3" + eventemitter2: "npm:^6.4.7" + i18next: "npm:23.11.5" + i18next-browser-languagedetector: "npm:7.1.0" + obj-multiplex: "npm:^1.0.0" + pump: "npm:^3.0.0" + qrcode-terminal-nooctal: "npm:^0.12.1" + react-native-webview: "npm:^11.26.0" + readable-stream: "npm:^3.6.2" + rollup-plugin-visualizer: "npm:^5.9.2" + socket.io-client: "npm:^4.5.1" + util: "npm:^0.12.4" + uuid: "npm:^8.3.2" + peerDependencies: + react: ^18.2.0 + react-dom: ^18.2.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + checksum: 10/8c8dc44e770acfefc7a227f5e0e7b43700ea3db72c0eec93eb704e826f9676d0fa0e6b8d1b5830fc5bf599b0acf7c9b4a8d21a925cf916c91dee6ed2bbaf4f62 + languageName: node + linkType: hard + +"@metamask/superstruct@npm:^3.0.0, @metamask/superstruct@npm:^3.1.0": version: 3.1.0 resolution: "@metamask/superstruct@npm:3.1.0" checksum: 10/5066fe228d5f11da387606d7f9545de2b473ab5a9e0f1bb8aea2f52d3e2c9d25e427151acde61f4a2de80a07a9871fe9505ad06abca6a61b7c3b54ed5c403b01 languageName: node linkType: hard +"@metamask/utils@npm:^5.0.1": + version: 5.0.2 + resolution: "@metamask/utils@npm:5.0.2" + dependencies: + "@ethereumjs/tx": "npm:^4.1.2" + "@types/debug": "npm:^4.1.7" + debug: "npm:^4.3.4" + semver: "npm:^7.3.8" + superstruct: "npm:^1.0.3" + checksum: 10/c0d3ee4c3144b557936ab01c1a64950c0f99782bd0cf5596c0fabe8fd224dba48ed3483c0ea954791fe2ee81064a445adb489df50c776bbbeb67b5b96e930115 + languageName: node + linkType: hard + +"@metamask/utils@npm:^8.3.0": + version: 8.5.0 + resolution: "@metamask/utils@npm:8.5.0" + dependencies: + "@ethereumjs/tx": "npm:^4.2.0" + "@metamask/superstruct": "npm:^3.0.0" + "@noble/hashes": "npm:^1.3.1" + "@scure/base": "npm:^1.1.3" + "@types/debug": "npm:^4.1.7" + debug: "npm:^4.3.4" + pony-cause: "npm:^2.1.10" + semver: "npm:^7.5.4" + uuid: "npm:^9.0.1" + checksum: 10/68a42a55f7dc750b75467fb7c05a496c20dac073a2753e0f4d9642c4d8dcb3f9ddf51a09d30337e11637f1777f3dfe22e15b5159dbafb0fdb7bd8c9236056153 + languageName: node + linkType: hard + "@metamask/utils@npm:^9.0.0, @metamask/utils@npm:^9.1.0": version: 9.3.0 resolution: "@metamask/utils@npm:9.3.0" @@ -1493,6 +2303,105 @@ __metadata: languageName: node linkType: hard +"@motionone/animation@npm:^10.15.1, @motionone/animation@npm:^10.18.0": + version: 10.18.0 + resolution: "@motionone/animation@npm:10.18.0" + dependencies: + "@motionone/easing": "npm:^10.18.0" + "@motionone/types": "npm:^10.17.1" + "@motionone/utils": "npm:^10.18.0" + tslib: "npm:^2.3.1" + checksum: 10/c7fc04dd10d6cade3d3b63d26f2532a2b2731233afc0454722e55ad8061fb3923d926db9cc09f1bcedb39f504fcee1e80adaab270523846998aad3017364a583 + languageName: node + linkType: hard + +"@motionone/dom@npm:^10.16.2, @motionone/dom@npm:^10.16.4": + version: 10.18.0 + resolution: "@motionone/dom@npm:10.18.0" + dependencies: + "@motionone/animation": "npm:^10.18.0" + "@motionone/generators": "npm:^10.18.0" + "@motionone/types": "npm:^10.17.1" + "@motionone/utils": "npm:^10.18.0" + hey-listen: "npm:^1.0.8" + tslib: "npm:^2.3.1" + checksum: 10/18abb5c174a84c90b2e59459fa3a9f8b655d063c259f2f3be5b6740e660285d2f66a8b25437dd963c3b9cdeae9fa5984ee8d217881088ea4d392cf39f8493a84 + languageName: node + linkType: hard + +"@motionone/easing@npm:^10.18.0": + version: 10.18.0 + resolution: "@motionone/easing@npm:10.18.0" + dependencies: + "@motionone/utils": "npm:^10.18.0" + tslib: "npm:^2.3.1" + checksum: 10/a455a06ccee907ce9da7b1dfe392060a473132733e3f92bbee3a99c36af7baa333cf3c6e38c6d44ad0f9878fdafca3c3f4bcfe55aaeb2a633e45d8e0429f8fa5 + languageName: node + linkType: hard + +"@motionone/generators@npm:^10.18.0": + version: 10.18.0 + resolution: "@motionone/generators@npm:10.18.0" + dependencies: + "@motionone/types": "npm:^10.17.1" + "@motionone/utils": "npm:^10.18.0" + tslib: "npm:^2.3.1" + checksum: 10/149720881e8db6a1ff38cea98349c3a00f72e5318b645459b68a2aeddb1f2be63ad2ae8978f6c4a63e2414f39e65f06de13a43fd35cf24dc3fb3e3c7f87526bc + languageName: node + linkType: hard + +"@motionone/svelte@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/svelte@npm:10.16.4" + dependencies: + "@motionone/dom": "npm:^10.16.4" + tslib: "npm:^2.3.1" + checksum: 10/5ad532d4d9bb16a9f311487e6409fa7e1a66ec12f82e3c36434ab6dfe3cedc61b35dae6314cee4fba8dca463b8a259cafb83801a932b7ad5f4a6e45baaa581f4 + languageName: node + linkType: hard + +"@motionone/types@npm:^10.15.1, @motionone/types@npm:^10.17.1": + version: 10.17.1 + resolution: "@motionone/types@npm:10.17.1" + checksum: 10/21d92d733ba30f810b72609fe04f2ef86125ba0160b826974605cc4cc5fbb6ab7bbf1640cbc64fd6298eb8d36fb920ad3ca646c76adf0e2c47a4920200616952 + languageName: node + linkType: hard + +"@motionone/utils@npm:^10.15.1, @motionone/utils@npm:^10.18.0": + version: 10.18.0 + resolution: "@motionone/utils@npm:10.18.0" + dependencies: + "@motionone/types": "npm:^10.17.1" + hey-listen: "npm:^1.0.8" + tslib: "npm:^2.3.1" + checksum: 10/0fa9232d132383880d6004522ded763d60f490946584e02bca7f64df98fae07421071f3a85de06aa6ecb52632a47a7586b4143e824e459a87cc852fab657e549 + languageName: node + linkType: hard + +"@motionone/vue@npm:^10.16.2": + version: 10.16.4 + resolution: "@motionone/vue@npm:10.16.4" + dependencies: + "@motionone/dom": "npm:^10.16.4" + tslib: "npm:^2.3.1" + checksum: 10/2400d31bbf5c3e02bc68f4b88d96d9c0672ba646bca0b6566e555cd7e8f14849a645f558f574e658fd90574a0b548b61712ae5edcee055c60288fd9382d711ea + languageName: node + linkType: hard + +"@mswjs/interceptors@npm:^0.35.8": + version: 0.35.9 + resolution: "@mswjs/interceptors@npm:0.35.9" + dependencies: + "@open-draft/deferred-promise": "npm:^2.2.0" + "@open-draft/logger": "npm:^0.3.0" + "@open-draft/until": "npm:^2.0.0" + is-node-process: "npm:^1.2.0" + outvariant: "npm:^1.4.3" + strict-event-emitter: "npm:^0.5.1" + checksum: 10/9eaf8d7876c9a38c2c9a1259873f8ad27ab41c68a49f7e14a55cd9f596458d9232adb85a5084b044d4eead3be1e7ef5bf54ed6d774d16b02d96caf1e7faa2ab3 + languageName: node + linkType: hard + "@noble/curves@npm:1.2.0, @noble/curves@npm:~1.2.0": version: 1.2.0 resolution: "@noble/curves@npm:1.2.0" @@ -1681,6 +2590,30 @@ __metadata: languageName: node linkType: hard +"@open-draft/deferred-promise@npm:^2.2.0": + version: 2.2.0 + resolution: "@open-draft/deferred-promise@npm:2.2.0" + checksum: 10/bc3bb1668a555bb87b33383cafcf207d9561e17d2ca0d9e61b7ce88e82b66e36a333d3676c1d39eb5848022c03c8145331fcdc828ba297f88cb1de9c5cef6c19 + languageName: node + linkType: hard + +"@open-draft/logger@npm:^0.3.0": + version: 0.3.0 + resolution: "@open-draft/logger@npm:0.3.0" + dependencies: + is-node-process: "npm:^1.2.0" + outvariant: "npm:^1.4.0" + checksum: 10/7a280f170bcd4e91d3eedbefe628efd10c3bd06dd2461d06a7fdbced89ef457a38785847f88cc630fb4fd7dfa176d6f77aed17e5a9b08000baff647433b5ff78 + languageName: node + linkType: hard + +"@open-draft/until@npm:^2.0.0, @open-draft/until@npm:^2.1.0": + version: 2.1.0 + resolution: "@open-draft/until@npm:2.1.0" + checksum: 10/622be42950afc8e89715d0fd6d56cbdcd13e36625e23b174bd3d9f06f80e25f9adf75d6698af93bca1e1bf465b9ce00ec05214a12189b671fb9da0f58215b6f4 + languageName: node + linkType: hard + "@open-frames/proxy-client@npm:^0.3.3": version: 0.3.3 resolution: "@open-frames/proxy-client@npm:0.3.3" @@ -1706,102 +2639,275 @@ __metadata: languageName: node linkType: hard -"@pkgjs/parseargs@npm:^0.11.0": - version: 0.11.0 - resolution: "@pkgjs/parseargs@npm:0.11.0" - checksum: 10/115e8ceeec6bc69dff2048b35c0ab4f8bbee12d8bb6c1f4af758604586d802b6e669dcb02dda61d078de42c2b4ddce41b3d9e726d7daa6b4b850f4adbf7333ff +"@parcel/watcher-android-arm64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-android-arm64@npm:2.4.1" + conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@pkgr/core@npm:^0.1.0": - version: 0.1.1 - resolution: "@pkgr/core@npm:0.1.1" - checksum: 10/6f25fd2e3008f259c77207ac9915b02f1628420403b2630c92a07ff963129238c9262afc9e84344c7a23b5cc1f3965e2cd17e3798219f5fd78a63d144d3cceba +"@parcel/watcher-darwin-arm64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-darwin-arm64@npm:2.4.1" + conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": - version: 1.1.2 - resolution: "@protobufjs/aspromise@npm:1.1.2" - checksum: 10/8a938d84fe4889411296db66b29287bd61ea3c14c2d23e7a8325f46a2b8ce899857c5f038d65d7641805e6c1d06b495525c7faf00c44f85a7ee6476649034969 +"@parcel/watcher-darwin-x64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-darwin-x64@npm:2.4.1" + conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@protobufjs/base64@npm:^1.1.2": - version: 1.1.2 - resolution: "@protobufjs/base64@npm:1.1.2" - checksum: 10/c71b100daeb3c9bdccab5cbc29495b906ba0ae22ceedc200e1ba49717d9c4ab15a6256839cebb6f9c6acae4ed7c25c67e0a95e734f612b258261d1a3098fe342 +"@parcel/watcher-freebsd-x64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-freebsd-x64@npm:2.4.1" + conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@protobufjs/codegen@npm:^2.0.4": - version: 2.0.4 - resolution: "@protobufjs/codegen@npm:2.0.4" - checksum: 10/c6ee5fa172a8464f5253174d3c2353ea520c2573ad7b6476983d9b1346f4d8f2b44aa29feb17a949b83c1816bc35286a5ea265ed9d8fdd2865acfa09668c0447 +"@parcel/watcher-linux-arm-glibc@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-arm-glibc@npm:2.4.1" + conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@protobufjs/eventemitter@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/eventemitter@npm:1.1.0" - checksum: 10/03af3e99f17ad421283d054c88a06a30a615922a817741b43ca1b13e7c6b37820a37f6eba9980fb5150c54dba6e26cb6f7b64a6f7d8afa83596fafb3afa218c3 +"@parcel/watcher-linux-arm64-glibc@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-arm64-glibc@npm:2.4.1" + conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@protobufjs/fetch@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/fetch@npm:1.1.0" - dependencies: - "@protobufjs/aspromise": "npm:^1.1.1" - "@protobufjs/inquire": "npm:^1.1.0" - checksum: 10/67ae40572ad536e4ef94269199f252c024b66e3059850906bdaee161ca1d75c73d04d35cd56f147a8a5a079f5808e342b99e61942c1dae15604ff0600b09a958 +"@parcel/watcher-linux-arm64-musl@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-arm64-musl@npm:2.4.1" + conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@protobufjs/float@npm:^1.0.2": - version: 1.0.2 - resolution: "@protobufjs/float@npm:1.0.2" - checksum: 10/634c2c989da0ef2f4f19373d64187e2a79f598c5fb7991afb689d29a2ea17c14b796b29725945fa34b9493c17fb799e08ac0a7ccaae460ee1757d3083ed35187 +"@parcel/watcher-linux-x64-glibc@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-x64-glibc@npm:2.4.1" + conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@protobufjs/inquire@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/inquire@npm:1.1.0" - checksum: 10/c09efa34a5465cb120775e1a482136f2340a58b4abce7e93d72b8b5a9324a0e879275016ef9fcd73d72a4731639c54f2bb755bb82f916e4a78892d1d840bb3d2 +"@parcel/watcher-linux-x64-musl@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-linux-x64-musl@npm:2.4.1" + conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@protobufjs/path@npm:^1.1.2": - version: 1.1.2 - resolution: "@protobufjs/path@npm:1.1.2" - checksum: 10/bb709567935fd385a86ad1f575aea98131bbd719c743fb9b6edd6b47ede429ff71a801cecbd64fc72deebf4e08b8f1bd8062793178cdaed3713b8d15771f9b83 +"@parcel/watcher-wasm@npm:^2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-wasm@npm:2.4.1" + dependencies: + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.5" + napi-wasm: "npm:^1.1.0" + checksum: 10/df32eec32ce1ac895c3ee2ae4574dd5f73f4c886820992e2e7c11e8bf4913d271484cb6c4863914129bd8a104e6924c767efa75bb19e17dde9a5c14408660cd2 languageName: node linkType: hard -"@protobufjs/pool@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/pool@npm:1.1.0" - checksum: 10/b9c7047647f6af28e92aac54f6f7c1f7ff31b201b4bfcc7a415b2861528854fce3ec666d7e7e10fd744da905f7d4aef2205bbcc8944ca0ca7a82e18134d00c46 +"@parcel/watcher-win32-arm64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-win32-arm64@npm:2.4.1" + conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@protobufjs/utf8@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/utf8@npm:1.1.0" - checksum: 10/131e289c57534c1d73a0e55782d6751dd821db1583cb2f7f7e017c9d6747addaebe79f28120b2e0185395d990aad347fb14ffa73ef4096fa38508d61a0e64602 +"@parcel/watcher-win32-ia32@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-win32-ia32@npm:2.4.1" + conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@rollup/plugin-json@npm:^6.1.0": - version: 6.1.0 - resolution: "@rollup/plugin-json@npm:6.1.0" - dependencies: - "@rollup/pluginutils": "npm:^5.1.0" - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: +"@parcel/watcher-win32-x64@npm:2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher-win32-x64@npm:2.4.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@parcel/watcher@npm:^2.4.1": + version: 2.4.1 + resolution: "@parcel/watcher@npm:2.4.1" + dependencies: + "@parcel/watcher-android-arm64": "npm:2.4.1" + "@parcel/watcher-darwin-arm64": "npm:2.4.1" + "@parcel/watcher-darwin-x64": "npm:2.4.1" + "@parcel/watcher-freebsd-x64": "npm:2.4.1" + "@parcel/watcher-linux-arm-glibc": "npm:2.4.1" + "@parcel/watcher-linux-arm64-glibc": "npm:2.4.1" + "@parcel/watcher-linux-arm64-musl": "npm:2.4.1" + "@parcel/watcher-linux-x64-glibc": "npm:2.4.1" + "@parcel/watcher-linux-x64-musl": "npm:2.4.1" + "@parcel/watcher-win32-arm64": "npm:2.4.1" + "@parcel/watcher-win32-ia32": "npm:2.4.1" + "@parcel/watcher-win32-x64": "npm:2.4.1" + detect-libc: "npm:^1.0.3" + is-glob: "npm:^4.0.3" + micromatch: "npm:^4.0.5" + node-addon-api: "npm:^7.0.0" + node-gyp: "npm:latest" + dependenciesMeta: + "@parcel/watcher-android-arm64": + optional: true + "@parcel/watcher-darwin-arm64": + optional: true + "@parcel/watcher-darwin-x64": + optional: true + "@parcel/watcher-freebsd-x64": + optional: true + "@parcel/watcher-linux-arm-glibc": + optional: true + "@parcel/watcher-linux-arm64-glibc": + optional: true + "@parcel/watcher-linux-arm64-musl": + optional: true + "@parcel/watcher-linux-x64-glibc": + optional: true + "@parcel/watcher-linux-x64-musl": + optional: true + "@parcel/watcher-win32-arm64": + optional: true + "@parcel/watcher-win32-ia32": + optional: true + "@parcel/watcher-win32-x64": + optional: true + checksum: 10/c163dff1828fa249c00f24931332dea5a8f2fcd1bfdd0e304ccdf7619c58bff044526fa39241fd2121d2a2141f71775ce3117450d78c4df3070d152282017644 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10/115e8ceeec6bc69dff2048b35c0ab4f8bbee12d8bb6c1f4af758604586d802b6e669dcb02dda61d078de42c2b4ddce41b3d9e726d7daa6b4b850f4adbf7333ff + languageName: node + linkType: hard + +"@pkgr/core@npm:^0.1.0": + version: 0.1.1 + resolution: "@pkgr/core@npm:0.1.1" + checksum: 10/6f25fd2e3008f259c77207ac9915b02f1628420403b2630c92a07ff963129238c9262afc9e84344c7a23b5cc1f3965e2cd17e3798219f5fd78a63d144d3cceba + languageName: node + linkType: hard + +"@polka/url@npm:^1.0.0-next.24": + version: 1.0.0-next.28 + resolution: "@polka/url@npm:1.0.0-next.28" + checksum: 10/7402aaf1de781d0eb0870d50cbcd394f949aee11b38a267a5c3b4e3cfee117e920693e6e93ce24c87ae2d477a59634f39d9edde8e86471cae756839b07c79af7 + languageName: node + linkType: hard + +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: 10/8a938d84fe4889411296db66b29287bd61ea3c14c2d23e7a8325f46a2b8ce899857c5f038d65d7641805e6c1d06b495525c7faf00c44f85a7ee6476649034969 + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: 10/c71b100daeb3c9bdccab5cbc29495b906ba0ae22ceedc200e1ba49717d9c4ab15a6256839cebb6f9c6acae4ed7c25c67e0a95e734f612b258261d1a3098fe342 + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 10/c6ee5fa172a8464f5253174d3c2353ea520c2573ad7b6476983d9b1346f4d8f2b44aa29feb17a949b83c1816bc35286a5ea265ed9d8fdd2865acfa09668c0447 + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 10/03af3e99f17ad421283d054c88a06a30a615922a817741b43ca1b13e7c6b37820a37f6eba9980fb5150c54dba6e26cb6f7b64a6f7d8afa83596fafb3afa218c3 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.1" + "@protobufjs/inquire": "npm:^1.1.0" + checksum: 10/67ae40572ad536e4ef94269199f252c024b66e3059850906bdaee161ca1d75c73d04d35cd56f147a8a5a079f5808e342b99e61942c1dae15604ff0600b09a958 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 10/634c2c989da0ef2f4f19373d64187e2a79f598c5fb7991afb689d29a2ea17c14b796b29725945fa34b9493c17fb799e08ac0a7ccaae460ee1757d3083ed35187 + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: 10/c09efa34a5465cb120775e1a482136f2340a58b4abce7e93d72b8b5a9324a0e879275016ef9fcd73d72a4731639c54f2bb755bb82f916e4a78892d1d840bb3d2 + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 10/bb709567935fd385a86ad1f575aea98131bbd719c743fb9b6edd6b47ede429ff71a801cecbd64fc72deebf4e08b8f1bd8062793178cdaed3713b8d15771f9b83 + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: 10/b9c7047647f6af28e92aac54f6f7c1f7ff31b201b4bfcc7a415b2861528854fce3ec666d7e7e10fd744da905f7d4aef2205bbcc8944ca0ca7a82e18134d00c46 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: 10/131e289c57534c1d73a0e55782d6751dd821db1583cb2f7f7e017c9d6747addaebe79f28120b2e0185395d990aad347fb14ffa73ef4096fa38508d61a0e64602 + languageName: node + linkType: hard + +"@rainbow-me/rainbowkit@npm:^2.1.3": + version: 2.1.7 + resolution: "@rainbow-me/rainbowkit@npm:2.1.7" + dependencies: + "@vanilla-extract/css": "npm:1.15.5" + "@vanilla-extract/dynamic": "npm:2.1.2" + "@vanilla-extract/sprinkles": "npm:1.6.3" + clsx: "npm:2.1.1" + qrcode: "npm:1.5.4" + react-remove-scroll: "npm:2.6.0" + ua-parser-js: "npm:^1.0.37" + peerDependencies: + "@tanstack/react-query": ">=5.0.0" + react: ">=18" + react-dom: ">=18" + viem: 2.x + wagmi: ^2.9.0 + checksum: 10/759187003cb33173bba01cafd5205c59df9a3dcc30a454dfc2a9234a35820fcf716ec054ff88abb294a39d4f3419cfd6f73a52c03a018ccc458567a6e33910ad + languageName: node + linkType: hard + +"@rollup/plugin-json@npm:^6.1.0": + version: 6.1.0 + resolution: "@rollup/plugin-json@npm:6.1.0" + dependencies: + "@rollup/pluginutils": "npm:^5.1.0" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: optional: true checksum: 10/cc018d20c80242a2b8b44fae61a968049cf31bb8406218187cc7cda35747616594e79452dd65722e7da6dd825b392e90d4599d43cd4461a02fefa2865945164e languageName: node @@ -1823,6 +2929,25 @@ __metadata: languageName: node linkType: hard +"@rollup/plugin-typescript@npm:^11.1.6": + version: 11.1.6 + resolution: "@rollup/plugin-typescript@npm:11.1.6" + dependencies: + "@rollup/pluginutils": "npm:^5.1.0" + resolve: "npm:^1.22.1" + peerDependencies: + rollup: ^2.14.0||^3.0.0||^4.0.0 + tslib: "*" + typescript: ">=3.7.0" + peerDependenciesMeta: + rollup: + optional: true + tslib: + optional: true + checksum: 10/4ae4d6cfc929393171288df2f18b5eb837fa53d8689118d9661b3064567341f6f6cf8389af55f1d5f015e3682abf30a64ab609fdf75ecb5a84224505e407eb69 + languageName: node + linkType: hard + "@rollup/plugin-typescript@npm:^12.1.1": version: 12.1.1 resolution: "@rollup/plugin-typescript@npm:12.1.1" @@ -1970,6 +3095,33 @@ __metadata: languageName: node linkType: hard +"@safe-global/safe-apps-provider@npm:0.18.3": + version: 0.18.3 + resolution: "@safe-global/safe-apps-provider@npm:0.18.3" + dependencies: + "@safe-global/safe-apps-sdk": "npm:^9.1.0" + events: "npm:^3.3.0" + checksum: 10/fb0bf260a224195923394c61265f421c655f096cce4c9f10643f5ff2787ca964269dbb539cfd08959ce88395af9c08f0cef60581cb06e14f1505b03bb7973bd1 + languageName: node + linkType: hard + +"@safe-global/safe-apps-sdk@npm:9.1.0, @safe-global/safe-apps-sdk@npm:^9.1.0": + version: 9.1.0 + resolution: "@safe-global/safe-apps-sdk@npm:9.1.0" + dependencies: + "@safe-global/safe-gateway-typescript-sdk": "npm:^3.5.3" + viem: "npm:^2.1.1" + checksum: 10/b81e1a554509fc41f5b8ec3bcccaf477fd55824010774699dd2c00dee8431cfd351bf13893ff6acb1450028ce4de31a1316548a0e77a66d801ff9e0b4e08b9ff + languageName: node + linkType: hard + +"@safe-global/safe-gateway-typescript-sdk@npm:^3.5.3": + version: 3.22.2 + resolution: "@safe-global/safe-gateway-typescript-sdk@npm:3.22.2" + checksum: 10/7f2b3cab4a1673647c8f7fd927be280f891dc74dba733f302862dee135fedd9d8e1875b1790c75b84c54164b517727bfe08a6dcaf7411659db13eeaefd1407fd + languageName: node + linkType: hard + "@scure/base@npm:^1.1.3, @scure/base@npm:~1.1.0, @scure/base@npm:~1.1.2, @scure/base@npm:~1.1.6, @scure/base@npm:~1.1.7, @scure/base@npm:~1.1.8": version: 1.1.9 resolution: "@scure/base@npm:1.1.9" @@ -2129,148 +3281,454 @@ __metadata: languageName: node linkType: hard -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: 10/ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 +"@socket.io/component-emitter@npm:~3.1.0": + version: 3.1.2 + resolution: "@socket.io/component-emitter@npm:3.1.2" + checksum: 10/89888f00699eb34e3070624eb7b8161fa29f064aeb1389a48f02195d55dd7c52a504e52160016859f6d6dffddd54324623cdd47fd34b3d46f9ed96c18c456edc languageName: node linkType: hard -"@tufjs/canonical-json@npm:1.0.0": - version: 1.0.0 - resolution: "@tufjs/canonical-json@npm:1.0.0" - checksum: 10/9ff3bcd12988fb23643690da3e009f9130b7b10974f8e7af4bd8ad230a228119de8609aa76d75264fe80f152b50872dea6ea53def69534436a4c24b4fcf6a447 +"@stablelib/aead@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/aead@npm:1.0.1" + checksum: 10/1a6f68d138f105d17dd65349751515bd252ab0498c77255b8555478d28415600dde493f909eb718245047a993f838dfae546071e1687566ffb7b8c3e10c918d9 languageName: node linkType: hard -"@tufjs/models@npm:1.0.4": - version: 1.0.4 - resolution: "@tufjs/models@npm:1.0.4" +"@stablelib/binary@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/binary@npm:1.0.1" dependencies: - "@tufjs/canonical-json": "npm:1.0.0" - minimatch: "npm:^9.0.0" - checksum: 10/2c63e9cfc04a4ce8888e9cc9668a7207e3047d64c50dccc3d2c30057d8bd6c4e89256b6094d2109549278da72c75e20cd8717bb5f4b544dc2323288a2a96607f + "@stablelib/int": "npm:^1.0.1" + checksum: 10/c5ed769e2b5d607a5cdb72d325fcf98db437627862fade839daad934bd9ccf02a6f6e34f9de8cb3b18d72fce2ba6cc019a5d22398187d7d69d2607165f27f8bf languageName: node linkType: hard -"@types/benchmark@npm:^2.1.5": - version: 2.1.5 - resolution: "@types/benchmark@npm:2.1.5" - checksum: 10/1540d8698620da2f4ef0d93dd6e57e40583bb3d5c735768d94c52bdfc039f474f83213badcc66013f0c1f73edcebec99dc731fa8943fc13b4f0d18ddfdf77bee +"@stablelib/bytes@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/bytes@npm:1.0.1" + checksum: 10/23d4d632a8a15ca91be1dc56da92eefed695d9b66068d1ab27a5655d0233dc2ac0b8668f875af542ca4ed526893c65dd53e777c72c8056f3648115aac98823ee languageName: node linkType: hard -"@types/bl@npm:^5.1.0": - version: 5.1.0 - resolution: "@types/bl@npm:5.1.0" +"@stablelib/chacha20poly1305@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha20poly1305@npm:1.0.1" dependencies: - bl: "npm:*" - checksum: 10/36eff164e8b731c51675db8f00ae7b7dec0107a8bef8c6b60a7421a8541d8da8f45f6a920409df471d04ccbf55245633f88077e6cb0979f726e173c2f9039177 + "@stablelib/aead": "npm:^1.0.1" + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/chacha": "npm:^1.0.1" + "@stablelib/constant-time": "npm:^1.0.1" + "@stablelib/poly1305": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/2a4df136b078b7c09acb3c6fe029613d4c9f70a0ce8bec65551a4a5016930a4f9091d3b83ed1cfc9c2e7bd6ec7f5ee93a7dc729b784b3900dcb97f3c7f5da84a languageName: node linkType: hard -"@types/bn.js@npm:*": - version: 5.1.6 - resolution: "@types/bn.js@npm:5.1.6" +"@stablelib/chacha@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/chacha@npm:1.0.1" dependencies: - "@types/node": "npm:*" - checksum: 10/db565b5a2af59b09459d74441153bf23a0e80f1fb2d070330786054e7ce1a7285dc40afcd8f289426c61a83166bdd70814f70e2d439744686aac5d3ea75daf13 + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/38cd8095d94eda29a9bb8a742b1c945dba7f9ec91fc07ab351c826680d03976641ac6366c3d004a00a72d746fcd838215fe1263ef4b0660c453c5de18a0a4295 languageName: node linkType: hard -"@types/callback-to-async-iterator@npm:^1.1.7": - version: 1.1.7 - resolution: "@types/callback-to-async-iterator@npm:1.1.7" - checksum: 10/80e49dc85a8a8e0682f2b92b39ac8d85710e8eaedeb22920335b2272329b5282a41b5a9077826275d47330cd8f897ec6707ed73bcbd8de36fc70f6f7f8a6ba9f +"@stablelib/constant-time@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/constant-time@npm:1.0.1" + checksum: 10/dba4f4bf508de2ff15f7f0cbd875e70391aa3ba3698290fe1ed2feb151c243ba08a90fc6fb390ec2230e30fcc622318c591a7c0e35dcb8150afb50c797eac3d7 languageName: node linkType: hard -"@types/debug@npm:^4.1.7": - version: 4.1.12 - resolution: "@types/debug@npm:4.1.12" +"@stablelib/ed25519@npm:^1.0.2": + version: 1.0.3 + resolution: "@stablelib/ed25519@npm:1.0.3" dependencies: - "@types/ms": "npm:*" - checksum: 10/47876a852de8240bfdaf7481357af2b88cb660d30c72e73789abf00c499d6bc7cd5e52f41c915d1b9cd8ec9fef5b05688d7b7aef17f7f272c2d04679508d1053 + "@stablelib/random": "npm:^1.0.2" + "@stablelib/sha512": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/52e861e4fbd9d3d0a1a370d9ad96de8e2e15f133249bbbc32da66b8993e843db598054a3af17a746beb3fd5043b7529613a5dda7f2e79de6613eb3ebe5ffe3dd languageName: node linkType: hard -"@types/elliptic@npm:^6.4.18": - version: 6.4.18 - resolution: "@types/elliptic@npm:6.4.18" - dependencies: - "@types/bn.js": "npm:*" - checksum: 10/06493e18167a581fa48d3c0f7034b9ad107993610767d5251ae2788be4bc5bdeda292d9ae18bbf366faa4a492eb669fc31060392f79bd5fdccb4efbd729ae66a +"@stablelib/hash@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hash@npm:1.0.1" + checksum: 10/3ff1f12d1a4082aaf4b6cdf40c2010aabe5c4209d3b40b97b5bbb0d9abc0ee94abdc545e57de0614afaea807ca0212ac870e247ec8f66cdce91ec39ce82948cf languageName: node linkType: hard -"@types/eslint@npm:*": - version: 9.6.1 - resolution: "@types/eslint@npm:9.6.1" +"@stablelib/hkdf@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/hkdf@npm:1.0.1" dependencies: - "@types/estree": "npm:*" - "@types/json-schema": "npm:*" - checksum: 10/719fcd255760168a43d0e306ef87548e1e15bffe361d5f4022b0f266575637acc0ecb85604ac97879ee8ae83c6a6d0613b0ed31d0209ddf22a0fe6d608fc56fe + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/hmac": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/9d45e303715a1835c8612b78e6c1b9d2b7463699b484241d8681fb5c17e0f2bbde5ce211c882134b64616a402e09177baeba80426995ff227b3654a155ab225d languageName: node linkType: hard -"@types/eslint__js@npm:^8.42.3": - version: 8.42.3 - resolution: "@types/eslint__js@npm:8.42.3" +"@stablelib/hmac@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/hmac@npm:1.0.1" dependencies: - "@types/eslint": "npm:*" - checksum: 10/e31f19de642d35a664695d0cab873ce6de19b8a3506755835b91f8a49a8c41099dcace449df49f1a486de6fa6565d21ceb1fa33be6004fc7adef9226e5d256a1 + "@stablelib/constant-time": "npm:^1.0.1" + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/d3ac9e2fea2b4972a5d874ee9d96c94f8c8207452e2d243a2668b1325a7b20bd9a1541df32387789a0e9bfef82c3fe021a785f46eb3442c782443863faf75205 languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:1.0.6, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": - version: 1.0.6 - resolution: "@types/estree@npm:1.0.6" - checksum: 10/9d35d475095199c23e05b431bcdd1f6fec7380612aed068b14b2a08aa70494de8a9026765a5a91b1073f636fb0368f6d8973f518a31391d519e20c59388ed88d +"@stablelib/int@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/int@npm:1.0.1" + checksum: 10/65bfbf50a382eea70c68e05366bf379cfceff8fbc076f1c267ef2f2411d7aed64fd140c415cb6c29f19a3910d3b8b7805d4b32ad5721a5007a8e744a808c7ae3 languageName: node linkType: hard -"@types/hast@npm:^3.0.0, @types/hast@npm:^3.0.4": - version: 3.0.4 - resolution: "@types/hast@npm:3.0.4" +"@stablelib/keyagreement@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/keyagreement@npm:1.0.1" dependencies: - "@types/unist": "npm:*" - checksum: 10/732920d81bb7605895776841b7658b4d8cc74a43a8fa176017cc0fb0ecc1a4c82a2b75a4fe6b71aa262b649d3fb62858c6789efa3793ea1d40269953af96ecb5 + "@stablelib/bytes": "npm:^1.0.1" + checksum: 10/3c8ec904dd50f72f3162f5447a0fa8f1d9ca6e24cd272d3dbe84971267f3b47f9bd5dc4e4eeedf3fbac2fe01f2d9277053e57c8e60db8c5544bfb35c62d290dd languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15": - version: 7.0.15 - resolution: "@types/json-schema@npm:7.0.15" - checksum: 10/1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 +"@stablelib/poly1305@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/poly1305@npm:1.0.1" + dependencies: + "@stablelib/constant-time": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/b01d4b532a42e5260f7f263e3a670924849c7ba51569abd8ece8279a448e625cbe4049bff1d50ad0d3a9d5f268c1b52fc611808640a6e684550edd7589a0a581 languageName: node linkType: hard -"@types/mdast@npm:^4.0.0": - version: 4.0.4 - resolution: "@types/mdast@npm:4.0.4" +"@stablelib/random@npm:1.0.2, @stablelib/random@npm:^1.0.1, @stablelib/random@npm:^1.0.2": + version: 1.0.2 + resolution: "@stablelib/random@npm:1.0.2" dependencies: - "@types/unist": "npm:*" - checksum: 10/efe3ec11b9ee0015a396c4fb4cd1b6f31b51b8ae9783c59560e6fc0bf6c2fa1dcc7fccaf45fa09a6c8b3397fab9dc8d431433935cae3835caa70a18f7fc775f8 + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/f5ace0a588dc4c21f01cb85837892d4c872e994ae77a58a8eb7dd61aa0b26fb1e9b46b0445e71af57d963ef7d9f5965c64258fc0d04df7b2947bc48f2d3560c5 languageName: node linkType: hard -"@types/ms@npm:*": - version: 0.7.34 - resolution: "@types/ms@npm:0.7.34" - checksum: 10/f38d36e7b6edecd9badc9cf50474159e9da5fa6965a75186cceaf883278611b9df6669dc3a3cc122b7938d317b68a9e3d573d316fcb35d1be47ec9e468c6bd8a +"@stablelib/sha256@npm:1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha256@npm:1.0.1" + dependencies: + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/4d55f6c676e2cc0dd2a32be0cfa96837f3e15ae48dc50a340e56db2b201f1341a9ecabb429a3a44a5bf31adee0a8151467a8e7cc15346c561c914faad415d4d4 languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=13.7.0": - version: 22.7.6 - resolution: "@types/node@npm:22.7.6" +"@stablelib/sha512@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/sha512@npm:1.0.1" dependencies: - undici-types: "npm:~6.19.2" - checksum: 10/46a8d6bcd61098ece36f790c4bd500537cf78fe075dbfe48f1e07a29efa6cba18cff3b2564aed80fb183244f5d9a95a63b09e27c9f5181ed927ac16ef493bd95 + "@stablelib/binary": "npm:^1.0.1" + "@stablelib/hash": "npm:^1.0.1" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/35d188cd62f20d27e1d61ea07984022e9a78815a023c8f7c747d92456a60823f0683138591e87158a47cd72e73cf24ecf97f8936aa6fba8b3bef6fcb138e723d languageName: node linkType: hard -"@types/node@npm:22.7.5": +"@stablelib/wipe@npm:^1.0.1": + version: 1.0.1 + resolution: "@stablelib/wipe@npm:1.0.1" + checksum: 10/287802eb146810a46ba72af70b82022caf83a8aeebde23605f5ee0decf64fe2b97a60c856e43b6617b5801287c30cfa863cfb0469e7fcde6f02d143cf0c6cbf4 + languageName: node + linkType: hard + +"@stablelib/x25519@npm:1.0.3": + version: 1.0.3 + resolution: "@stablelib/x25519@npm:1.0.3" + dependencies: + "@stablelib/keyagreement": "npm:^1.0.1" + "@stablelib/random": "npm:^1.0.2" + "@stablelib/wipe": "npm:^1.0.1" + checksum: 10/fb5469e390ee2515d926633e3e179038894ac4f5e8c8cd2c2fc912022e34a051112eab0fe80c4dbc6e59129679844182562a036abff89444e5c4a05dd42ed329 + languageName: node + linkType: hard + +"@tanstack/query-core@npm:5.59.9": + version: 5.59.9 + resolution: "@tanstack/query-core@npm:5.59.9" + checksum: 10/b328f127f242cd78a3cbbb3e8d8c8b7914aeea319fb42d2644fb4448f6307a919aaaffcf4215f9ee20f58bf11bbd160b1c691ce87220a06b29074ed3d8b35799 + languageName: node + linkType: hard + +"@tanstack/react-query@npm:^5.51.1": + version: 5.59.9 + resolution: "@tanstack/react-query@npm:5.59.9" + dependencies: + "@tanstack/query-core": "npm:5.59.9" + peerDependencies: + react: ^18 || ^19 + checksum: 10/aa7c251fa6342c38972b03fa24679ea58aff85f9695ecc096751ac9781546aeb5eafbf4a4b502c51bf82e39e1bc61efeaa3f1e96a0a13a40cf3a52782476cc04 + languageName: node + linkType: hard + +"@testing-library/dom@npm:^10.3.2, @testing-library/dom@npm:^10.4.0": + version: 10.4.0 + resolution: "@testing-library/dom@npm:10.4.0" + dependencies: + "@babel/code-frame": "npm:^7.10.4" + "@babel/runtime": "npm:^7.12.5" + "@types/aria-query": "npm:^5.0.1" + aria-query: "npm:5.3.0" + chalk: "npm:^4.1.0" + dom-accessibility-api: "npm:^0.5.9" + lz-string: "npm:^1.5.0" + pretty-format: "npm:^27.0.2" + checksum: 10/05825ee9a15b88cbdae12c137db7111c34069ed3c7a1bd03b6696cb1b37b29f6f2d2de581ebf03033e7df1ab7ebf08399310293f440a4845d95c02c0a9ecc899 + languageName: node + linkType: hard + +"@testing-library/jest-dom@npm:^6.4.6": + version: 6.5.0 + resolution: "@testing-library/jest-dom@npm:6.5.0" + dependencies: + "@adobe/css-tools": "npm:^4.4.0" + aria-query: "npm:^5.0.0" + chalk: "npm:^3.0.0" + css.escape: "npm:^1.5.1" + dom-accessibility-api: "npm:^0.6.3" + lodash: "npm:^4.17.21" + redent: "npm:^3.0.0" + checksum: 10/3d2080888af5fd7306f57448beb5a23f55d965e265b5e53394fffc112dfb0678d616a5274ff0200c46c7618f293520f86fc8562eecd8bdbc0dbb3294d63ec431 + languageName: node + linkType: hard + +"@testing-library/user-event@npm:^14.5.2": + version: 14.5.2 + resolution: "@testing-library/user-event@npm:14.5.2" + peerDependencies: + "@testing-library/dom": ">=7.21.4" + checksum: 10/49821459d81c6bc435d97128d6386ca24f1e4b3ba8e46cb5a96fe3643efa6e002d88c1b02b7f2ec58da593e805c59b78d7fdf0db565c1f02ba782f63ee984040 + languageName: node + linkType: hard + +"@tootallnate/once@npm:2": + version: 2.0.0 + resolution: "@tootallnate/once@npm:2.0.0" + checksum: 10/ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 + languageName: node + linkType: hard + +"@tufjs/canonical-json@npm:1.0.0": + version: 1.0.0 + resolution: "@tufjs/canonical-json@npm:1.0.0" + checksum: 10/9ff3bcd12988fb23643690da3e009f9130b7b10974f8e7af4bd8ad230a228119de8609aa76d75264fe80f152b50872dea6ea53def69534436a4c24b4fcf6a447 + languageName: node + linkType: hard + +"@tufjs/models@npm:1.0.4": + version: 1.0.4 + resolution: "@tufjs/models@npm:1.0.4" + dependencies: + "@tufjs/canonical-json": "npm:1.0.0" + minimatch: "npm:^9.0.0" + checksum: 10/2c63e9cfc04a4ce8888e9cc9668a7207e3047d64c50dccc3d2c30057d8bd6c4e89256b6094d2109549278da72c75e20cd8717bb5f4b544dc2323288a2a96607f + languageName: node + linkType: hard + +"@types/aria-query@npm:^5.0.1": + version: 5.0.4 + resolution: "@types/aria-query@npm:5.0.4" + checksum: 10/c0084c389dc030daeaf0115a92ce43a3f4d42fc8fef2d0e22112d87a42798d4a15aac413019d4a63f868327d52ad6740ab99609462b442fe6b9286b172d2e82e + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.20.5": + version: 7.20.5 + resolution: "@types/babel__core@npm:7.20.5" + dependencies: + "@babel/parser": "npm:^7.20.7" + "@babel/types": "npm:^7.20.7" + "@types/babel__generator": "npm:*" + "@types/babel__template": "npm:*" + "@types/babel__traverse": "npm:*" + checksum: 10/c32838d280b5ab59d62557f9e331d3831f8e547ee10b4f85cb78753d97d521270cebfc73ce501e9fb27fe71884d1ba75e18658692c2f4117543f0fc4e3e118b3 + languageName: node + linkType: hard + +"@types/babel__generator@npm:*": + version: 7.6.8 + resolution: "@types/babel__generator@npm:7.6.8" + dependencies: + "@babel/types": "npm:^7.0.0" + checksum: 10/b53c215e9074c69d212402990b0ca8fa57595d09e10d94bda3130aa22b55d796e50449199867879e4ea0ee968f3a2099e009cfb21a726a53324483abbf25cd30 + languageName: node + linkType: hard + +"@types/babel__template@npm:*": + version: 7.4.4 + resolution: "@types/babel__template@npm:7.4.4" + dependencies: + "@babel/parser": "npm:^7.1.0" + "@babel/types": "npm:^7.0.0" + checksum: 10/d7a02d2a9b67e822694d8e6a7ddb8f2b71a1d6962dfd266554d2513eefbb205b33ca71a0d163b1caea3981ccf849211f9964d8bd0727124d18ace45aa6c9ae29 + languageName: node + linkType: hard + +"@types/babel__traverse@npm:*": + version: 7.20.6 + resolution: "@types/babel__traverse@npm:7.20.6" + dependencies: + "@babel/types": "npm:^7.20.7" + checksum: 10/63d13a3789aa1e783b87a8b03d9fb2c2c90078de7782422feff1631b8c2a25db626e63a63ac5a1465d47359201c73069dacb4b52149d17c568187625da3064ae + languageName: node + linkType: hard + +"@types/benchmark@npm:^2.1.5": + version: 2.1.5 + resolution: "@types/benchmark@npm:2.1.5" + checksum: 10/1540d8698620da2f4ef0d93dd6e57e40583bb3d5c735768d94c52bdfc039f474f83213badcc66013f0c1f73edcebec99dc731fa8943fc13b4f0d18ddfdf77bee + languageName: node + linkType: hard + +"@types/bl@npm:^5.1.0": + version: 5.1.0 + resolution: "@types/bl@npm:5.1.0" + dependencies: + bl: "npm:*" + checksum: 10/36eff164e8b731c51675db8f00ae7b7dec0107a8bef8c6b60a7421a8541d8da8f45f6a920409df471d04ccbf55245633f88077e6cb0979f726e173c2f9039177 + languageName: node + linkType: hard + +"@types/bn.js@npm:*": + version: 5.1.6 + resolution: "@types/bn.js@npm:5.1.6" + dependencies: + "@types/node": "npm:*" + checksum: 10/db565b5a2af59b09459d74441153bf23a0e80f1fb2d070330786054e7ce1a7285dc40afcd8f289426c61a83166bdd70814f70e2d439744686aac5d3ea75daf13 + languageName: node + linkType: hard + +"@types/callback-to-async-iterator@npm:^1.1.7": + version: 1.1.7 + resolution: "@types/callback-to-async-iterator@npm:1.1.7" + checksum: 10/80e49dc85a8a8e0682f2b92b39ac8d85710e8eaedeb22920335b2272329b5282a41b5a9077826275d47330cd8f897ec6707ed73bcbd8de36fc70f6f7f8a6ba9f + languageName: node + linkType: hard + +"@types/cookie@npm:^0.6.0": + version: 0.6.0 + resolution: "@types/cookie@npm:0.6.0" + checksum: 10/b883348d5bf88695fbc2c2276b1c49859267a55cae3cf11ea1dccc1b3be15b466e637ce3242109ba27d616c77c6aa4efe521e3d557110b4fdd9bc332a12445c2 + languageName: node + linkType: hard + +"@types/debug@npm:^4.1.7": + version: 4.1.12 + resolution: "@types/debug@npm:4.1.12" + dependencies: + "@types/ms": "npm:*" + checksum: 10/47876a852de8240bfdaf7481357af2b88cb660d30c72e73789abf00c499d6bc7cd5e52f41c915d1b9cd8ec9fef5b05688d7b7aef17f7f272c2d04679508d1053 + languageName: node + linkType: hard + +"@types/dom-screen-wake-lock@npm:^1.0.0": + version: 1.0.3 + resolution: "@types/dom-screen-wake-lock@npm:1.0.3" + checksum: 10/66bece3508b4f4147db97a530c758f8f5d3132ef00c06cab1db4bf2b4af6a3a614ae0a0ba6b53ddc4177a6545adf9d312547087256efc8eff7314b13221380b8 + languageName: node + linkType: hard + +"@types/elliptic@npm:^6.4.18": + version: 6.4.18 + resolution: "@types/elliptic@npm:6.4.18" + dependencies: + "@types/bn.js": "npm:*" + checksum: 10/06493e18167a581fa48d3c0f7034b9ad107993610767d5251ae2788be4bc5bdeda292d9ae18bbf366faa4a492eb669fc31060392f79bd5fdccb4efbd729ae66a + languageName: node + linkType: hard + +"@types/eslint@npm:*": + version: 9.6.1 + resolution: "@types/eslint@npm:9.6.1" + dependencies: + "@types/estree": "npm:*" + "@types/json-schema": "npm:*" + checksum: 10/719fcd255760168a43d0e306ef87548e1e15bffe361d5f4022b0f266575637acc0ecb85604ac97879ee8ae83c6a6d0613b0ed31d0209ddf22a0fe6d608fc56fe + languageName: node + linkType: hard + +"@types/eslint__js@npm:^8.42.3": + version: 8.42.3 + resolution: "@types/eslint__js@npm:8.42.3" + dependencies: + "@types/eslint": "npm:*" + checksum: 10/e31f19de642d35a664695d0cab873ce6de19b8a3506755835b91f8a49a8c41099dcace449df49f1a486de6fa6565d21ceb1fa33be6004fc7adef9226e5d256a1 + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:1.0.6, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10/9d35d475095199c23e05b431bcdd1f6fec7380612aed068b14b2a08aa70494de8a9026765a5a91b1073f636fb0368f6d8973f518a31391d519e20c59388ed88d + languageName: node + linkType: hard + +"@types/hast@npm:^3.0.0, @types/hast@npm:^3.0.4": + version: 3.0.4 + resolution: "@types/hast@npm:3.0.4" + dependencies: + "@types/unist": "npm:*" + checksum: 10/732920d81bb7605895776841b7658b4d8cc74a43a8fa176017cc0fb0ecc1a4c82a2b75a4fe6b71aa262b649d3fb62858c6789efa3793ea1d40269953af96ecb5 + languageName: node + linkType: hard + +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15": + version: 7.0.15 + resolution: "@types/json-schema@npm:7.0.15" + checksum: 10/1a3c3e06236e4c4aab89499c428d585527ce50c24fe8259e8b3926d3df4cfbbbcf306cfc73ddfb66cbafc973116efd15967020b0f738f63e09e64c7d260519e7 + languageName: node + linkType: hard + +"@types/mdast@npm:^4.0.0": + version: 4.0.4 + resolution: "@types/mdast@npm:4.0.4" + dependencies: + "@types/unist": "npm:*" + checksum: 10/efe3ec11b9ee0015a396c4fb4cd1b6f31b51b8ae9783c59560e6fc0bf6c2fa1dcc7fccaf45fa09a6c8b3397fab9dc8d431433935cae3835caa70a18f7fc775f8 + languageName: node + linkType: hard + +"@types/ms@npm:*": + version: 0.7.34 + resolution: "@types/ms@npm:0.7.34" + checksum: 10/f38d36e7b6edecd9badc9cf50474159e9da5fa6965a75186cceaf883278611b9df6669dc3a3cc122b7938d317b68a9e3d573d316fcb35d1be47ec9e468c6bd8a + languageName: node + linkType: hard + +"@types/mute-stream@npm:^0.0.4": + version: 0.0.4 + resolution: "@types/mute-stream@npm:0.0.4" + dependencies: + "@types/node": "npm:*" + checksum: 10/af8d83ad7b68ea05d9357985daf81b6c9b73af4feacb2f5c2693c7fd3e13e5135ef1bd083ce8d5bdc8e97acd28563b61bb32dec4e4508a8067fcd31b8a098632 + languageName: node + linkType: hard + +"@types/node@npm:*, @types/node@npm:>=13.7.0, @types/node@npm:^22.5.5": + version: 22.7.6 + resolution: "@types/node@npm:22.7.6" + dependencies: + undici-types: "npm:~6.19.2" + checksum: 10/46a8d6bcd61098ece36f790c4bd500537cf78fe075dbfe48f1e07a29efa6cba18cff3b2564aed80fb183244f5d9a95a63b09e27c9f5181ed927ac16ef493bd95 + languageName: node + linkType: hard + +"@types/node@npm:22.7.5": version: 22.7.5 resolution: "@types/node@npm:22.7.5" dependencies: @@ -2295,6 +3753,32 @@ __metadata: languageName: node linkType: hard +"@types/prop-types@npm:*": + version: 15.7.13 + resolution: "@types/prop-types@npm:15.7.13" + checksum: 10/8935cad87c683c665d09a055919d617fe951cb3b2d5c00544e3a913f861a2bd8d2145b51c9aa6d2457d19f3107ab40784c40205e757232f6a80cc8b1c815513c + languageName: node + linkType: hard + +"@types/react-dom@npm:^18.3.0": + version: 18.3.0 + resolution: "@types/react-dom@npm:18.3.0" + dependencies: + "@types/react": "npm:*" + checksum: 10/6ff53f5a7b7fba952a68e114d3b542ebdc1e87a794234785ebab0bcd9bde7fb4885f21ebaf93d26dc0a1b5b93287f42cad68b78ae04dddf6b20da7aceff0beaf + languageName: node + linkType: hard + +"@types/react@npm:*, @types/react@npm:^18.3.3": + version: 18.3.11 + resolution: "@types/react@npm:18.3.11" + dependencies: + "@types/prop-types": "npm:*" + csstype: "npm:^3.0.2" + checksum: 10/a36f0707fdfe9fe19cbe5892bcdab0f042ecadb501ea4e1c39519943f3e74cffbd31e892d3860f5c87cf33f5f223552b246a552bed0087b95954f2cb39d5cf65 + languageName: node + linkType: hard + "@types/readable-stream@npm:^4.0.0": version: 4.0.15 resolution: "@types/readable-stream@npm:4.0.15" @@ -2305,6 +3789,36 @@ __metadata: languageName: node linkType: hard +"@types/secp256k1@npm:^4.0.6": + version: 4.0.6 + resolution: "@types/secp256k1@npm:4.0.6" + dependencies: + "@types/node": "npm:*" + checksum: 10/211f823be990b55612e604d620acf0dc3bc942d3836bdd8da604269effabc86d98161e5947487b4e4e128f9180fc1682daae2f89ea7a4d9648fdfe52fba365fc + languageName: node + linkType: hard + +"@types/statuses@npm:^2.0.4": + version: 2.0.5 + resolution: "@types/statuses@npm:2.0.5" + checksum: 10/3f2609f660b45a878c6782f2fb2cef9f08bbd4e89194bf7512e747b8a73b056839be1ad6f64b1353765528cd8a5e93adeffc471cde24d0d9f7b528264e7154e5 + languageName: node + linkType: hard + +"@types/tough-cookie@npm:^4.0.5": + version: 4.0.5 + resolution: "@types/tough-cookie@npm:4.0.5" + checksum: 10/01fd82efc8202670865928629697b62fe9bf0c0dcbc5b1c115831caeb073a2c0abb871ff393d7df1ae94ea41e256cb87d2a5a91fd03cdb1b0b4384e08d4ee482 + languageName: node + linkType: hard + +"@types/trusted-types@npm:^2.0.2": + version: 2.0.7 + resolution: "@types/trusted-types@npm:2.0.7" + checksum: 10/8e4202766a65877efcf5d5a41b7dd458480b36195e580a3b1085ad21e948bc417d55d6f8af1fd2a7ad008015d4117d5fdfe432731157da3c68678487174e4ba3 + languageName: node + linkType: hard + "@types/unist@npm:*, @types/unist@npm:^3.0.0": version: 3.0.3 resolution: "@types/unist@npm:3.0.3" @@ -2312,6 +3826,20 @@ __metadata: languageName: node linkType: hard +"@types/uuid@npm:^10.0.0": + version: 10.0.0 + resolution: "@types/uuid@npm:10.0.0" + checksum: 10/e3958f8b0fe551c86c14431f5940c3470127293280830684154b91dc7eb3514aeb79fe3216968833cf79d4d1c67f580f054b5be2cd562bebf4f728913e73e944 + languageName: node + linkType: hard + +"@types/wrap-ansi@npm:^3.0.0": + version: 3.0.0 + resolution: "@types/wrap-ansi@npm:3.0.0" + checksum: 10/8aa644946ca4e859668c36b8e2bcf2ac4bdee59dac760414730ea57be8a93ae9166ebd40a088f2ab714843aaea2a2a67f0e6e6ec11cfc9c8701b2466ca1c4089 + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:8.10.0": version: 8.10.0 resolution: "@typescript-eslint/eslint-plugin@npm:8.10.0" @@ -2435,6 +3963,120 @@ __metadata: languageName: node linkType: hard +"@vanilla-extract/css@npm:1.15.5": + version: 1.15.5 + resolution: "@vanilla-extract/css@npm:1.15.5" + dependencies: + "@emotion/hash": "npm:^0.9.0" + "@vanilla-extract/private": "npm:^1.0.6" + css-what: "npm:^6.1.0" + cssesc: "npm:^3.0.0" + csstype: "npm:^3.0.7" + dedent: "npm:^1.5.3" + deep-object-diff: "npm:^1.1.9" + deepmerge: "npm:^4.2.2" + lru-cache: "npm:^10.4.3" + media-query-parser: "npm:^2.0.2" + modern-ahocorasick: "npm:^1.0.0" + picocolors: "npm:^1.0.0" + checksum: 10/4820caea8f7d63d5e691c72d3d324a09707040afa6b0abaaf0fea7d9ee1c133a19e5f3a383fd903453680cd0d698de0428ad2a7316e0c5e9771ffd79d813ddf6 + languageName: node + linkType: hard + +"@vanilla-extract/dynamic@npm:2.1.2": + version: 2.1.2 + resolution: "@vanilla-extract/dynamic@npm:2.1.2" + dependencies: + "@vanilla-extract/private": "npm:^1.0.6" + checksum: 10/576b22e3f1a61abad2bc758d95f6f9eae9418f1bb6c8366211e82da7eed97ac8cf9b69fea3239832ccba280dab93d5b1def4290f64943b295f146fca78049d2d + languageName: node + linkType: hard + +"@vanilla-extract/private@npm:^1.0.6": + version: 1.0.6 + resolution: "@vanilla-extract/private@npm:1.0.6" + checksum: 10/50463610da0fc9069b3e2b33b6222ea2f005487432db9110ea430e474e29b3b756bcd1fffd47b87536358829d47bce6510398f050b5f6de07ee1e4e92eeade5a + languageName: node + linkType: hard + +"@vanilla-extract/sprinkles@npm:1.6.3": + version: 1.6.3 + resolution: "@vanilla-extract/sprinkles@npm:1.6.3" + peerDependencies: + "@vanilla-extract/css": ^1.0.0 + checksum: 10/74f8e2b189c0d48e279f1b85b5fedebf1f615ab31839964cf3861f2c5cf574567c0caeddf9c8b11327d81213f81d195efc79f136b725e6013b6d645d238d5c2b + languageName: node + linkType: hard + +"@vitejs/plugin-react@npm:^4.3.1": + version: 4.3.2 + resolution: "@vitejs/plugin-react@npm:4.3.2" + dependencies: + "@babel/core": "npm:^7.25.2" + "@babel/plugin-transform-react-jsx-self": "npm:^7.24.7" + "@babel/plugin-transform-react-jsx-source": "npm:^7.24.7" + "@types/babel__core": "npm:^7.20.5" + react-refresh: "npm:^0.14.2" + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + checksum: 10/9ff278942d76e21f4680f0f9e4d8d3bfe12fe19701e0f07014dfbff83d772f10237114581a3ec2637c32856d0a99400a14e6cd80969f99b88b1a64227c531ddb + languageName: node + linkType: hard + +"@vitest/browser@npm:^2.1.3": + version: 2.1.3 + resolution: "@vitest/browser@npm:2.1.3" + dependencies: + "@testing-library/dom": "npm:^10.4.0" + "@testing-library/user-event": "npm:^14.5.2" + "@vitest/mocker": "npm:2.1.3" + "@vitest/utils": "npm:2.1.3" + magic-string: "npm:^0.30.11" + msw: "npm:^2.3.5" + sirv: "npm:^2.0.4" + tinyrainbow: "npm:^1.2.0" + ws: "npm:^8.18.0" + peerDependencies: + playwright: "*" + vitest: 2.1.3 + webdriverio: "*" + peerDependenciesMeta: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + checksum: 10/e639496fa529140fb9e7dce97890c5b75fffbfb41881bee5ef25b194832d3cadcb77490d9b54777bfa968b993f6878649fe4961d6ef312ca1222b9a2fc8d4f12 + languageName: node + linkType: hard + +"@vitest/coverage-v8@npm:^2.0.3": + version: 2.1.2 + resolution: "@vitest/coverage-v8@npm:2.1.2" + dependencies: + "@ampproject/remapping": "npm:^2.3.0" + "@bcoe/v8-coverage": "npm:^0.2.3" + debug: "npm:^4.3.6" + istanbul-lib-coverage: "npm:^3.2.2" + istanbul-lib-report: "npm:^3.0.1" + istanbul-lib-source-maps: "npm:^5.0.6" + istanbul-reports: "npm:^3.1.7" + magic-string: "npm:^0.30.11" + magicast: "npm:^0.3.4" + std-env: "npm:^3.7.0" + test-exclude: "npm:^7.0.1" + tinyrainbow: "npm:^1.2.0" + peerDependencies: + "@vitest/browser": 2.1.2 + vitest: 2.1.2 + peerDependenciesMeta: + "@vitest/browser": + optional: true + checksum: 10/513b96310eacc99f97f8beb95801c725788b5d64434a820d0008dd94731a09250f68d31a84bbb6cdf3110ee9ad86b4c50d02c1d3d4d651bf56bac4b409b95a62 + languageName: node + linkType: hard + "@vitest/coverage-v8@npm:^2.1.3": version: 2.1.3 resolution: "@vitest/coverage-v8@npm:2.1.3" @@ -2523,26 +4165,427 @@ __metadata: languageName: node linkType: hard -"@vitest/spy@npm:2.1.3": - version: 2.1.3 - resolution: "@vitest/spy@npm:2.1.3" +"@vitest/spy@npm:2.1.3": + version: 2.1.3 + resolution: "@vitest/spy@npm:2.1.3" + dependencies: + tinyspy: "npm:^3.0.0" + checksum: 10/94d6f1bc34da5d0c973d9382c133b938e555fcf2d238edf0aaad3de1a98dd57ebf7c104ba229c6beec48122d2e6f55386d8d2cf96a5804dc95ac683a54754cc7 + languageName: node + linkType: hard + +"@vitest/utils@npm:2.1.3": + version: 2.1.3 + resolution: "@vitest/utils@npm:2.1.3" + dependencies: + "@vitest/pretty-format": "npm:2.1.3" + loupe: "npm:^3.1.1" + tinyrainbow: "npm:^1.2.0" + checksum: 10/f064e6634cb84c925a17d8937df7441d150c3e24fa5bbd6304151d11dab6cdeb0cb3d5a95a9aacb8b416c87fb0d9aa8c6b9cc5e174191784231e8345948d6d18 + languageName: node + linkType: hard + +"@wagmi/connectors@npm:5.1.15": + version: 5.1.15 + resolution: "@wagmi/connectors@npm:5.1.15" + dependencies: + "@coinbase/wallet-sdk": "npm:4.0.4" + "@metamask/sdk": "npm:0.28.4" + "@safe-global/safe-apps-provider": "npm:0.18.3" + "@safe-global/safe-apps-sdk": "npm:9.1.0" + "@walletconnect/ethereum-provider": "npm:2.17.0" + "@walletconnect/modal": "npm:2.7.0" + cbw-sdk: "npm:@coinbase/wallet-sdk@3.9.3" + peerDependencies: + "@wagmi/core": 2.13.8 + typescript: ">=5.0.4" + viem: 2.x + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/2524f3c7b3f9065019b34f7290dbe9ff35f6d339d13e6ce39d172ae7822b07a336c1cf9cc601e491b9b00abf149855e588563cdaed19124d04aed2b6e3c66193 + languageName: node + linkType: hard + +"@wagmi/core@npm:2.13.8, @wagmi/core@npm:^2.11.7": + version: 2.13.8 + resolution: "@wagmi/core@npm:2.13.8" + dependencies: + eventemitter3: "npm:5.0.1" + mipd: "npm:0.0.7" + zustand: "npm:4.4.1" + peerDependencies: + "@tanstack/query-core": ">=5.0.0" + typescript: ">=5.0.4" + viem: 2.x + peerDependenciesMeta: + "@tanstack/query-core": + optional: true + typescript: + optional: true + checksum: 10/1cb18ab7092c2d49a9e34443ca2d4249c64d7cb848cc7489f0c40af37689608e57b9b54e63e176f4d5785e285997dcbcdb70c1ab38eb8bb8639b3ed363fc3cc0 + languageName: node + linkType: hard + +"@walletconnect/core@npm:2.17.0": + version: 2.17.0 + resolution: "@walletconnect/core@npm:2.17.0" + dependencies: + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/jsonrpc-ws-connection": "npm:1.0.14" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/relay-api": "npm:1.0.11" + "@walletconnect/relay-auth": "npm:1.0.4" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.17.0" + "@walletconnect/utils": "npm:2.17.0" + events: "npm:3.3.0" + lodash.isequal: "npm:4.5.0" + uint8arrays: "npm:3.1.0" + checksum: 10/a37eff1a9b479fe1d51b4173128adecc0b9afd4897d912b396d19e5c2df6a928caa0fdb487f47ca26fae7f3ca59f263754f21b1861a178cfc11b4b2a783e50c4 + languageName: node + linkType: hard + +"@walletconnect/environment@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/environment@npm:1.0.1" + dependencies: + tslib: "npm:1.14.1" + checksum: 10/f6a1e3456e50cc7cfa58d99fd513ecac75573d0b8bcbbedcb1d7ec04ca9108df16b471afd40761b2a5cb4f66d8e33b7ba25f02c62c8365d68b1bd1ef52c1813e + languageName: node + linkType: hard + +"@walletconnect/ethereum-provider@npm:2.17.0": + version: 2.17.0 + resolution: "@walletconnect/ethereum-provider@npm:2.17.0" + dependencies: + "@walletconnect/jsonrpc-http-connection": "npm:1.0.8" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/modal": "npm:2.7.0" + "@walletconnect/sign-client": "npm:2.17.0" + "@walletconnect/types": "npm:2.17.0" + "@walletconnect/universal-provider": "npm:2.17.0" + "@walletconnect/utils": "npm:2.17.0" + events: "npm:3.3.0" + checksum: 10/7f86efca38e6a1a59623de090296f5beff3886af50757ea024c6c0d3237e7dd7e3719be979770d4257dfae3708b1c33a242fb061b9f981fe298d666522a2610f + languageName: node + linkType: hard + +"@walletconnect/events@npm:1.0.1, @walletconnect/events@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/events@npm:1.0.1" + dependencies: + keyvaluestorage-interface: "npm:^1.0.0" + tslib: "npm:1.14.1" + checksum: 10/b5a105e9ac4d7d0a500085afd77b71e71a8ab78fd38b033e4ce91f8626fd8c254b1ba49a59c8c0ed8a00a7e8b93995163f414eda73c58694f8f830e453a902b6 + languageName: node + linkType: hard + +"@walletconnect/heartbeat@npm:1.2.2": + version: 1.2.2 + resolution: "@walletconnect/heartbeat@npm:1.2.2" + dependencies: + "@walletconnect/events": "npm:^1.0.1" + "@walletconnect/time": "npm:^1.0.2" + events: "npm:^3.3.0" + checksum: 10/f3a1c3c255ac9bd374b25e1ef65a61b1f623b9118d48471acaac1f9ee4ee1438d8d8cbc77733cdd980809b468443c046328fe5ac4084e01e0892f8c699cf44e7 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-http-connection@npm:1.0.8": + version: 1.0.8 + resolution: "@walletconnect/jsonrpc-http-connection@npm:1.0.8" + dependencies: + "@walletconnect/jsonrpc-utils": "npm:^1.0.6" + "@walletconnect/safe-json": "npm:^1.0.1" + cross-fetch: "npm:^3.1.4" + events: "npm:^3.3.0" + checksum: 10/c545906243df27fdbde3c8e9005217069dd22ce0f496c59f55843ca8fcb0c1a90d2c0ac6ecb16fa110ed85c36e5486f5a74621a5ca6230667d77ee3b0ae36cc6 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-provider@npm:1.0.14": + version: 1.0.14 + resolution: "@walletconnect/jsonrpc-provider@npm:1.0.14" + dependencies: + "@walletconnect/jsonrpc-utils": "npm:^1.0.8" + "@walletconnect/safe-json": "npm:^1.0.2" + events: "npm:^3.3.0" + checksum: 10/c3c78f00148043b70213f5174d537b210f1fb231d96103cbf7d0101626578d3c13fe99ac080df7a0056c7128ce488b0523eda0e3d1deed75754672848b4909a5 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-types@npm:1.0.4, @walletconnect/jsonrpc-types@npm:^1.0.2, @walletconnect/jsonrpc-types@npm:^1.0.3": + version: 1.0.4 + resolution: "@walletconnect/jsonrpc-types@npm:1.0.4" + dependencies: + events: "npm:^3.3.0" + keyvaluestorage-interface: "npm:^1.0.0" + checksum: 10/8cdc9f7b5e3ae0d702a44a6fc4c388a2b627188df758ffd103ba9aac6596a787d2f319aa8f6928a03d990c71c17d9b876028f36b8e0c37bd5c9026231ed9ba45 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-utils@npm:1.0.8, @walletconnect/jsonrpc-utils@npm:^1.0.6, @walletconnect/jsonrpc-utils@npm:^1.0.8": + version: 1.0.8 + resolution: "@walletconnect/jsonrpc-utils@npm:1.0.8" + dependencies: + "@walletconnect/environment": "npm:^1.0.1" + "@walletconnect/jsonrpc-types": "npm:^1.0.3" + tslib: "npm:1.14.1" + checksum: 10/4687b4582a5c33883d94e87ca8bb22d129a2a47b6e1d9e2c3210b74f02d9677723b3bf2283d2f0fa69866b0a66a80cdfada9a2f1c204d485fbd10d2baed1f0a6 + languageName: node + linkType: hard + +"@walletconnect/jsonrpc-ws-connection@npm:1.0.14": + version: 1.0.14 + resolution: "@walletconnect/jsonrpc-ws-connection@npm:1.0.14" + dependencies: + "@walletconnect/jsonrpc-utils": "npm:^1.0.6" + "@walletconnect/safe-json": "npm:^1.0.2" + events: "npm:^3.3.0" + ws: "npm:^7.5.1" + checksum: 10/2ad66217b62fb57a43c8edd33c27da0c9ba09cfec79f4d43e5d30bcb8224a48c1d1f0d6273be0371f2c7e33d8138a6fe03afa499b429ab7829d719677cd48f4d + languageName: node + linkType: hard + +"@walletconnect/keyvaluestorage@npm:1.1.1": + version: 1.1.1 + resolution: "@walletconnect/keyvaluestorage@npm:1.1.1" + dependencies: + "@walletconnect/safe-json": "npm:^1.0.1" + idb-keyval: "npm:^6.2.1" + unstorage: "npm:^1.9.0" + peerDependencies: + "@react-native-async-storage/async-storage": 1.x + peerDependenciesMeta: + "@react-native-async-storage/async-storage": + optional: true + checksum: 10/fd9c275b3249d8e9f722866703b5c040eb35d0670c92a297428ffb700ac36c6b9978242beac5d2cfe97eb522ae01307cacd9c79ecf95640878804fce0f13c5e7 + languageName: node + linkType: hard + +"@walletconnect/logger@npm:2.1.2": + version: 2.1.2 + resolution: "@walletconnect/logger@npm:2.1.2" + dependencies: + "@walletconnect/safe-json": "npm:^1.0.2" + pino: "npm:7.11.0" + checksum: 10/2e6d438bd352595fff6691712c83953e3ad6b2b9ab298c5a8b670a024f53a3f744b165e5aa081a79261ee4801b93b6c60698a39947d613d49a8f6e6215ecd4c2 + languageName: node + linkType: hard + +"@walletconnect/modal-core@npm:2.7.0": + version: 2.7.0 + resolution: "@walletconnect/modal-core@npm:2.7.0" + dependencies: + valtio: "npm:1.11.2" + checksum: 10/1549f9ba5c98dfed2f97fbfccfcd2e342550c7ba7a85970bff224258dd397bad0a29721b90fef408dcc6cdfa65c52253476a04c16fece9b4d48792f03c3a4b4f + languageName: node + linkType: hard + +"@walletconnect/modal-ui@npm:2.7.0": + version: 2.7.0 + resolution: "@walletconnect/modal-ui@npm:2.7.0" + dependencies: + "@walletconnect/modal-core": "npm:2.7.0" + lit: "npm:2.8.0" + motion: "npm:10.16.2" + qrcode: "npm:1.5.3" + checksum: 10/00d17001bde7646def34eaffef81c4a580f09fdf10902a7a938cd2a3738f8f1cbb10520c229989b64e147df9f4df8ca31bd1d904f9019acc63327b495fb5b3ed + languageName: node + linkType: hard + +"@walletconnect/modal@npm:2.7.0": + version: 2.7.0 + resolution: "@walletconnect/modal@npm:2.7.0" + dependencies: + "@walletconnect/modal-core": "npm:2.7.0" + "@walletconnect/modal-ui": "npm:2.7.0" + checksum: 10/a6b78cc06479e0aa98516784ff1f81b24839777f0ec38d2f9cc85b4dc932ad6e823187bbb699f80f898e7d4b09d1232134f348eb9d12697e74e742eeaec189f2 + languageName: node + linkType: hard + +"@walletconnect/relay-api@npm:1.0.11": + version: 1.0.11 + resolution: "@walletconnect/relay-api@npm:1.0.11" + dependencies: + "@walletconnect/jsonrpc-types": "npm:^1.0.2" + checksum: 10/d85f88b9744917ee5b36d2df23bf4012819b14b73229f9bdca942bee11dd3b3428808c7528c2b1f6b3d91fa1d34a22b1e20b46533e402301318cbd4ab59b9c17 + languageName: node + linkType: hard + +"@walletconnect/relay-auth@npm:1.0.4": + version: 1.0.4 + resolution: "@walletconnect/relay-auth@npm:1.0.4" + dependencies: + "@stablelib/ed25519": "npm:^1.0.2" + "@stablelib/random": "npm:^1.0.1" + "@walletconnect/safe-json": "npm:^1.0.1" + "@walletconnect/time": "npm:^1.0.2" + tslib: "npm:1.14.1" + uint8arrays: "npm:^3.0.0" + checksum: 10/d9128b2a25f38ebf2f49f8c184dad5c997ad6343513bddd7941459c2f2757e6acfbcdd36dc9c12d0491f55723d5e2c5c0ee2e9cf381b3247274b920e95d4db0e + languageName: node + linkType: hard + +"@walletconnect/safe-json@npm:1.0.2, @walletconnect/safe-json@npm:^1.0.1, @walletconnect/safe-json@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/safe-json@npm:1.0.2" + dependencies: + tslib: "npm:1.14.1" + checksum: 10/b9d031dab3916d20fa5241d7ad2be425368ae489995ba3ba18d6ad88e81ad3ed093b8e867b8a4fc44759099896aeb5afee5635858cb80c4819ebc7ebb71ed5a6 + languageName: node + linkType: hard + +"@walletconnect/sign-client@npm:2.17.0": + version: 2.17.0 + resolution: "@walletconnect/sign-client@npm:2.17.0" + dependencies: + "@walletconnect/core": "npm:2.17.0" + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.17.0" + "@walletconnect/utils": "npm:2.17.0" + events: "npm:3.3.0" + checksum: 10/e3eb391b4f01ae353e7c5f3580971ac7e5b9bd5a6bdb77783d8954e9c0243bb32945de230cfd09fddb2a589f28a9359de8ca313e83eae2b2e396753957d87b4c + languageName: node + linkType: hard + +"@walletconnect/time@npm:1.0.2, @walletconnect/time@npm:^1.0.2": + version: 1.0.2 + resolution: "@walletconnect/time@npm:1.0.2" + dependencies: + tslib: "npm:1.14.1" + checksum: 10/ea84d0850e63306837f98a228e08a59f6945da38ba5553b1f158abeaa8ec4dc8a0025a0f0cfc843ddf05ce2947da95c02ac1e8cedce7092bbe1c2d46ca816dd9 + languageName: node + linkType: hard + +"@walletconnect/types@npm:2.17.0": + version: 2.17.0 + resolution: "@walletconnect/types@npm:2.17.0" + dependencies: + "@walletconnect/events": "npm:1.0.1" + "@walletconnect/heartbeat": "npm:1.2.2" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/keyvaluestorage": "npm:1.1.1" + "@walletconnect/logger": "npm:2.1.2" + events: "npm:3.3.0" + checksum: 10/a0ac222a0ef92c88c159178e643752345978c69109522adea6bebb217c29a182337b2698cb16864151a0c79a457ea1b8659602af1f00dd45e1bd5308c89585cf + languageName: node + linkType: hard + +"@walletconnect/universal-provider@npm:2.17.0": + version: 2.17.0 + resolution: "@walletconnect/universal-provider@npm:2.17.0" + dependencies: + "@walletconnect/jsonrpc-http-connection": "npm:1.0.8" + "@walletconnect/jsonrpc-provider": "npm:1.0.14" + "@walletconnect/jsonrpc-types": "npm:1.0.4" + "@walletconnect/jsonrpc-utils": "npm:1.0.8" + "@walletconnect/logger": "npm:2.1.2" + "@walletconnect/sign-client": "npm:2.17.0" + "@walletconnect/types": "npm:2.17.0" + "@walletconnect/utils": "npm:2.17.0" + events: "npm:3.3.0" + checksum: 10/d03d5178677864c996460eb48072e7f9ca290fe2a1f660f4b9ec8c52e3d574af483fdbca8a95206cbe41cbc89a21b75b2ad13c55ababd3cad2e9a6e3567d2a0a + languageName: node + linkType: hard + +"@walletconnect/utils@npm:2.17.0": + version: 2.17.0 + resolution: "@walletconnect/utils@npm:2.17.0" + dependencies: + "@stablelib/chacha20poly1305": "npm:1.0.1" + "@stablelib/hkdf": "npm:1.0.1" + "@stablelib/random": "npm:1.0.2" + "@stablelib/sha256": "npm:1.0.1" + "@stablelib/x25519": "npm:1.0.3" + "@walletconnect/relay-api": "npm:1.0.11" + "@walletconnect/relay-auth": "npm:1.0.4" + "@walletconnect/safe-json": "npm:1.0.2" + "@walletconnect/time": "npm:1.0.2" + "@walletconnect/types": "npm:2.17.0" + "@walletconnect/window-getters": "npm:1.0.1" + "@walletconnect/window-metadata": "npm:1.0.1" + detect-browser: "npm:5.3.0" + elliptic: "npm:^6.5.7" + query-string: "npm:7.1.3" + uint8arrays: "npm:3.1.0" + checksum: 10/b460aeb0eb0c8e9d50677596f5fd04f940a922027b4d348e53b026e4290cb67a08941bfc6dc0fad8ae55d7434554fbe07907741658845f710a1befa39e47698c + languageName: node + linkType: hard + +"@walletconnect/window-getters@npm:1.0.1, @walletconnect/window-getters@npm:^1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-getters@npm:1.0.1" + dependencies: + tslib: "npm:1.14.1" + checksum: 10/8d3fcb134fbbe903ba4a63f1fa5a7849fd443874bf45488260afc2fe3b1cbe211f86da1d76ee844be7c0e8618ae67402f94c213432fd80b04715eaf72e2e00e3 + languageName: node + linkType: hard + +"@walletconnect/window-metadata@npm:1.0.1": + version: 1.0.1 + resolution: "@walletconnect/window-metadata@npm:1.0.1" dependencies: - tinyspy: "npm:^3.0.0" - checksum: 10/94d6f1bc34da5d0c973d9382c133b938e555fcf2d238edf0aaad3de1a98dd57ebf7c104ba229c6beec48122d2e6f55386d8d2cf96a5804dc95ac683a54754cc7 + "@walletconnect/window-getters": "npm:^1.0.1" + tslib: "npm:1.14.1" + checksum: 10/cf322e0860c4448cefcd81f34bc6d49d1a235a81e74a6146baefb74e47cf6c3c8050b65e534a3dc13f8d2aed3fc59732ccf48d5a01b5b23e08e1847fcffa950c languageName: node linkType: hard -"@vitest/utils@npm:2.1.3": - version: 2.1.3 - resolution: "@vitest/utils@npm:2.1.3" +"@web/rollup-plugin-copy@npm:^0.5.1": + version: 0.5.1 + resolution: "@web/rollup-plugin-copy@npm:0.5.1" dependencies: - "@vitest/pretty-format": "npm:2.1.3" - loupe: "npm:^3.1.1" - tinyrainbow: "npm:^1.2.0" - checksum: 10/f064e6634cb84c925a17d8937df7441d150c3e24fa5bbd6304151d11dab6cdeb0cb3d5a95a9aacb8b416c87fb0d9aa8c6b9cc5e174191784231e8345948d6d18 + glob: "npm:^10.0.0" + checksum: 10/fa11f8b8a778476102bd94c3878271ae4e7b4fc7e1c5dcad1d840e42e5471253e25e77ae66061f8e5bf686850dfe9ae197825a6468712f4d25d594f76392576b languageName: node linkType: hard +"@xmtp/browser-sdk@workspace:*, @xmtp/browser-sdk@workspace:sdks/browser-sdk": + version: 0.0.0-use.local + resolution: "@xmtp/browser-sdk@workspace:sdks/browser-sdk" + dependencies: + "@rollup/plugin-terser": "npm:^0.4.4" + "@rollup/plugin-typescript": "npm:^11.1.6" + "@testing-library/dom": "npm:^10.3.2" + "@testing-library/jest-dom": "npm:^6.4.6" + "@types/uuid": "npm:^10.0.0" + "@vitest/browser": "npm:^2.1.3" + "@vitest/coverage-v8": "npm:^2.0.3" + "@web/rollup-plugin-copy": "npm:^0.5.1" + "@xmtp/content-type-group-updated": "npm:^1.0.0" + "@xmtp/content-type-primitives": "npm:^1.0.1" + "@xmtp/content-type-text": "npm:^1.0.0" + "@xmtp/proto": "npm:^3.70.0" + "@xmtp/wasm-bindings": "npm:^0.0.1" + playwright: "npm:^1.48.1" + rollup: "npm:^4.18.1" + rollup-plugin-dts: "npm:^6.1.1" + rollup-plugin-filesize: "npm:^10.0.0" + rollup-plugin-tsconfig-paths: "npm:^1.5.2" + tsconfig: "workspace:*" + typedoc: "npm:^0.26.4" + typescript: "npm:^5.5.3" + uuid: "npm:^10.0.0" + viem: "npm:^2.17.4" + vite: "npm:^5.4.9" + vite-tsconfig-paths: "npm:^5.0.1" + vitest: "npm:^2.1.3" + languageName: unknown + linkType: soft + "@xmtp/consent-proof-signature@npm:^0.1.3, @xmtp/consent-proof-signature@workspace:packages/consent-proof-signature": version: 0.0.0-use.local resolution: "@xmtp/consent-proof-signature@workspace:packages/consent-proof-signature" @@ -2563,7 +4606,7 @@ __metadata: languageName: unknown linkType: soft -"@xmtp/content-type-group-updated@workspace:content-types/content-type-group-updated": +"@xmtp/content-type-group-updated@npm:^1.0.0, @xmtp/content-type-group-updated@workspace:content-types/content-type-group-updated": version: 0.0.0-use.local resolution: "@xmtp/content-type-group-updated@workspace:content-types/content-type-group-updated" dependencies: @@ -2859,7 +4902,7 @@ __metadata: languageName: node linkType: hard -"@xmtp/proto@npm:^3.61.1, @xmtp/proto@npm:^3.62.1, @xmtp/proto@npm:^3.68.0, @xmtp/proto@npm:^3.71.0": +"@xmtp/proto@npm:^3.61.1, @xmtp/proto@npm:^3.62.1, @xmtp/proto@npm:^3.68.0, @xmtp/proto@npm:^3.70.0, @xmtp/proto@npm:^3.71.0": version: 3.71.0 resolution: "@xmtp/proto@npm:3.71.0" dependencies: @@ -2871,6 +4914,30 @@ __metadata: languageName: node linkType: hard +"@xmtp/react-vite-browser-sdk-example@workspace:examples/react-vite-browser-sdk": + version: 0.0.0-use.local + resolution: "@xmtp/react-vite-browser-sdk-example@workspace:examples/react-vite-browser-sdk" + dependencies: + "@rainbow-me/rainbowkit": "npm:^2.1.3" + "@tanstack/react-query": "npm:^5.51.1" + "@types/react": "npm:^18.3.3" + "@types/react-dom": "npm:^18.3.0" + "@vitejs/plugin-react": "npm:^4.3.1" + "@wagmi/core": "npm:^2.11.7" + "@xmtp/browser-sdk": "workspace:*" + autoprefixer: "npm:^10.4.19" + postcss: "npm:^8.4.39" + postcss-preset-env: "npm:^9.6.0" + react: "npm:^18.3.1" + react-dom: "npm:^18.3.1" + tsconfig: "workspace:*" + typescript: "npm:^5.5.3" + viem: "npm:^2.17.4" + vite: "npm:^5.4.9" + wagmi: "npm:^2.10.10" + languageName: unknown + linkType: soft + "@xmtp/rollup-plugin-resolve-extensions@npm:1.0.1, @xmtp/rollup-plugin-resolve-extensions@npm:^1.0.1": version: 1.0.1 resolution: "@xmtp/rollup-plugin-resolve-extensions@npm:1.0.1" @@ -2891,6 +4958,13 @@ __metadata: languageName: node linkType: hard +"@xmtp/wasm-bindings@npm:^0.0.1": + version: 0.0.1 + resolution: "@xmtp/wasm-bindings@npm:0.0.1" + checksum: 10/0af5824306d9499376e5a0e0a33d4372239d7b5d7e91ad6ac131749cf4461c3a8171fe7756a1da6902871d43241b1c68202f85c887ca7ae4e480616ad968d8a4 + languageName: node + linkType: hard + "@xmtp/xmtp-js@npm:^11.6.3": version: 11.6.3 resolution: "@xmtp/xmtp-js@npm:11.6.3" @@ -3037,6 +5111,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.12.1": + version: 8.12.1 + resolution: "acorn@npm:8.12.1" + bin: + acorn: bin/acorn + checksum: 10/d08c2d122bba32d0861e0aa840b2ee25946c286d5dc5990abca991baf8cdbfbe199b05aacb221b979411a2fea36f83e26b5ac4f6b4e0ce49038c62316c1848f0 + languageName: node + linkType: hard + "aes-js@npm:3.0.0": version: 3.0.0 resolution: "aes-js@npm:3.0.0" @@ -3116,7 +5199,7 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.3.0": +"ansi-escapes@npm:^4.3.0, ansi-escapes@npm:^4.3.2": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -3157,6 +5240,13 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^5.0.0": + version: 5.2.0 + resolution: "ansi-styles@npm:5.2.0" + checksum: 10/d7f4e97ce0623aea6bc0d90dcd28881ee04cba06c570b97fd3391bd7a268eedfd9d5e2dd4fdcbdd82b8105df5faf6f24aaedc08eaf3da898e702db5948f63469 + languageName: node + linkType: hard + "ansi-styles@npm:^6.1.0": version: 6.2.1 resolution: "ansi-styles@npm:6.2.1" @@ -3164,6 +5254,16 @@ __metadata: languageName: node linkType: hard +"anymatch@npm:^3.1.3, anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 10/3e044fd6d1d26545f235a9fe4d7a534e2029d8e59fa7fd9f2a6eb21230f6b5380ea1eaf55136e60cbf8e613544b3b766e7a6fa2102e2a3a117505466e3025dc2 + languageName: node + linkType: hard + "aproba@npm:^1.0.3 || ^2.0.0": version: 2.0.0 resolution: "aproba@npm:2.0.0" @@ -3197,6 +5297,22 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:5.3.0": + version: 5.3.0 + resolution: "aria-query@npm:5.3.0" + dependencies: + dequal: "npm:^2.0.3" + checksum: 10/c3e1ed127cc6886fea4732e97dd6d3c3938e64180803acfb9df8955517c4943760746ffaf4020ce8f7ffaa7556a3b5f85c3769a1f5ca74a1288e02d042f9ae4e + languageName: node + linkType: hard + +"aria-query@npm:^5.0.0": + version: 5.3.2 + resolution: "aria-query@npm:5.3.2" + checksum: 10/b2fe9bc98bd401bc322ccb99717c1ae2aaf53ea0d468d6e7aebdc02fac736e4a99b46971ee05b783b08ade23c675b2d8b60e4a1222a95f6e27bc4d2a0bfdcc03 + languageName: node + linkType: hard + "array-union@npm:^2.1.0": version: 2.1.0 resolution: "array-union@npm:2.1.0" @@ -3218,6 +5334,15 @@ __metadata: languageName: node linkType: hard +"async-mutex@npm:^0.2.6": + version: 0.2.6 + resolution: "async-mutex@npm:0.2.6" + dependencies: + tslib: "npm:^2.0.0" + checksum: 10/3cf676fc48b4686abf534cc02d4784bab3f35d7836a0a7476c96e57c3f6607dd3d94cc0989b29d33ce5ae5cde8be8e1a96f3e769ba3b0e1ba4a244f873aa5623 + languageName: node + linkType: hard + "async-mutex@npm:^0.5.0": version: 0.5.0 resolution: "async-mutex@npm:0.5.0" @@ -3227,6 +5352,40 @@ __metadata: languageName: node linkType: hard +"atomic-sleep@npm:^1.0.0": + version: 1.0.0 + resolution: "atomic-sleep@npm:1.0.0" + checksum: 10/3ab6d2cf46b31394b4607e935ec5c1c3c4f60f3e30f0913d35ea74b51b3585e84f590d09e58067f11762eec71c87d25314ce859030983dc0e4397eed21daa12e + languageName: node + linkType: hard + +"autoprefixer@npm:^10.4.19": + version: 10.4.20 + resolution: "autoprefixer@npm:10.4.20" + dependencies: + browserslist: "npm:^4.23.3" + caniuse-lite: "npm:^1.0.30001646" + fraction.js: "npm:^4.3.7" + normalize-range: "npm:^0.1.2" + picocolors: "npm:^1.0.1" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.1.0 + bin: + autoprefixer: bin/autoprefixer + checksum: 10/d3c4b562fc4af2393623a0207cc336f5b9f94c4264ae1c316376904c279702ce2b12dc3f27205f491195d1e29bb52ffc269970ceb0f271f035fadee128a273f7 + languageName: node + linkType: hard + +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10/6c9da3a66caddd83c875010a1ca8ef11eac02ba15fb592dc9418b2b5e7b77b645fa7729380a92d9835c2f05f2ca1b6251f39b993e0feb3f1517c74fa1af02cab + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -3284,6 +5443,13 @@ __metadata: languageName: node linkType: hard +"binary-extensions@npm:^2.0.0": + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: 10/bcad01494e8a9283abf18c1b967af65ee79b0c6a9e6fcfafebfe91dbe6e0fc7272bafb73389e198b310516ae04f7ad17d79aacf6cb4c0d5d5202a7e2e52c7d98 + languageName: node + linkType: hard + "bl@npm:*": version: 6.0.16 resolution: "bl@npm:6.0.16" @@ -3310,6 +5476,13 @@ __metadata: languageName: node linkType: hard +"bowser@npm:^2.9.0": + version: 2.11.0 + resolution: "bowser@npm:2.11.0" + checksum: 10/ef46500eafe35072455e7c3ae771244e97827e0626686a9a3601c436d16eb272dad7ccbd49e2130b599b617ca9daa67027de827ffc4c220e02f63c84b69a8751 + languageName: node + linkType: hard + "boxen@npm:^5.0.0": version: 5.1.2 resolution: "boxen@npm:5.1.2" @@ -3345,7 +5518,7 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.3": +"braces@npm:^3.0.3, braces@npm:~3.0.2": version: 3.0.3 resolution: "braces@npm:3.0.3" dependencies: @@ -3370,7 +5543,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.24.0": +"browserslist@npm:^4.23.1, browserslist@npm:^4.23.3, browserslist@npm:^4.24.0": version: 4.24.0 resolution: "browserslist@npm:4.24.0" dependencies: @@ -3401,6 +5574,16 @@ __metadata: languageName: node linkType: hard +"bufferutil@npm:^4.0.8": + version: 4.0.8 + resolution: "bufferutil@npm:4.0.8" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.3.0" + checksum: 10/d9337badc960a19d5a031db5de47159d7d8a11b6bab399bdfbf464ffa9ecd2972fef19bb61a7d2827e0c55f912c20713e12343386b86cb013f2b99c2324ab6a3 + languageName: node + linkType: hard + "cac@npm:^6.7.14": version: 6.7.14 resolution: "cac@npm:6.7.14" @@ -3474,6 +5657,19 @@ __metadata: languageName: node linkType: hard +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.1" + checksum: 10/cd6fe658e007af80985da5185bff7b55e12ef4c2b6f41829a26ed1eef254b1f1c12e3dfd5b2b068c6ba8b86aba62390842d81752e67dcbaec4f6f76e7113b6b7 + languageName: node + linkType: hard + "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -3481,6 +5677,13 @@ __metadata: languageName: node linkType: hard +"camelcase@npm:^5.0.0": + version: 5.3.1 + resolution: "camelcase@npm:5.3.1" + checksum: 10/e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b + languageName: node + linkType: hard + "camelcase@npm:^6.2.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" @@ -3488,6 +5691,13 @@ __metadata: languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001646": + version: 1.0.30001667 + resolution: "caniuse-lite@npm:1.0.30001667" + checksum: 10/5f0c48abb806737c422f05d0d9dda72facc25ee8adbae2c2ea9c57b87d9c2fa9ad8c3f6d54f21aca4e31ee1742cb5dd1543bf6b9133e3f77f79a645876322414 + languageName: node + linkType: hard + "caniuse-lite@npm:^1.0.30001663": version: 1.0.30001669 resolution: "caniuse-lite@npm:1.0.30001669" @@ -3495,6 +5705,23 @@ __metadata: languageName: node linkType: hard +"cbw-sdk@npm:@coinbase/wallet-sdk@3.9.3": + version: 3.9.3 + resolution: "@coinbase/wallet-sdk@npm:3.9.3" + dependencies: + bn.js: "npm:^5.2.1" + buffer: "npm:^6.0.3" + clsx: "npm:^1.2.1" + eth-block-tracker: "npm:^7.1.0" + eth-json-rpc-filters: "npm:^6.0.0" + eventemitter3: "npm:^5.0.1" + keccak: "npm:^3.0.3" + preact: "npm:^10.16.0" + sha.js: "npm:^2.4.11" + checksum: 10/3bc3f0edad8ea46cb7a127993373093d95b6fef03d2a6a40bae7983a1d9a20a114faa8e7bf1230efd380ffb67b42dae405c6617cd6fad6d278bf9b9e021a0280 + languageName: node + linkType: hard + "ccount@npm:^2.0.0": version: 2.0.1 resolution: "ccount@npm:2.0.1" @@ -3526,7 +5753,17 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.1.0": +"chalk@npm:^3.0.0": + version: 3.0.0 + resolution: "chalk@npm:3.0.0" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10/37f90b31fd655fb49c2bd8e2a68aebefddd64522655d001ef417e6f955def0ed9110a867ffc878a533f2dafea5f2032433a37c8a7614969baa7f8a1cd424ddfc + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -3564,6 +5801,25 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:^3.6.0": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 10/c327fb07704443f8d15f7b4a7ce93b2f0bc0e6cea07ec28a7570aa22cd51fcf0379df589403976ea956c369f25aa82d84561947e227cd925902e1751371658df + languageName: node + linkType: hard + "chownr@npm:^2.0.0": version: 2.0.0 resolution: "chownr@npm:2.0.0" @@ -3578,6 +5834,15 @@ __metadata: languageName: node linkType: hard +"citty@npm:^0.1.5, citty@npm:^0.1.6": + version: 0.1.6 + resolution: "citty@npm:0.1.6" + dependencies: + consola: "npm:^3.2.3" + checksum: 10/3208947e73abb699a12578ee2bfee254bf8dd1ce0d5698e8a298411cabf16bd3620d63433aef5bd88cdb2b9da71aef18adefa3b4ffd18273bb62dd1d28c344f5 + languageName: node + linkType: hard + "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -3601,6 +5866,60 @@ __metadata: languageName: node linkType: hard +"cli-width@npm:^4.1.0": + version: 4.1.0 + resolution: "cli-width@npm:4.1.0" + checksum: 10/b58876fbf0310a8a35c79b72ecfcf579b354e18ad04e6b20588724ea2b522799a758507a37dfe132fafaf93a9922cafd9514d9e1598e6b2cd46694853aed099f + languageName: node + linkType: hard + +"clipboardy@npm:^4.0.0": + version: 4.0.0 + resolution: "clipboardy@npm:4.0.0" + dependencies: + execa: "npm:^8.0.1" + is-wsl: "npm:^3.1.0" + is64bit: "npm:^2.0.0" + checksum: 10/ec4ebe7e5c81d9c9cb994637e7b0e068c1c8fc272167ecd5519f967427271ec66e0e64da7268a2630b860eff42933aeabe25ba5e42bb80dbf1fae6362df059ed + languageName: node + linkType: hard + +"cliui@npm:^6.0.0": + version: 6.0.0 + resolution: "cliui@npm:6.0.0" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.0" + wrap-ansi: "npm:^6.2.0" + checksum: 10/44afbcc29df0899e87595590792a871cd8c4bc7d6ce92832d9ae268d141a77022adafca1aeaeccff618b62a613b8354e57fe22a275c199ec04baf00d381ef6ab + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10/eaa5561aeb3135c2cddf7a3b3f562fc4238ff3b3fc666869ef2adf264be0f372136702f16add9299087fb1907c2e4ec5dbfe83bd24bce815c70a80c6c1a2e950 + languageName: node + linkType: hard + +"clsx@npm:2.1.1": + version: 2.1.1 + resolution: "clsx@npm:2.1.1" + checksum: 10/cdfb57fa6c7649bbff98d9028c2f0de2f91c86f551179541cf784b1cfdc1562dcb951955f46d54d930a3879931a980e32a46b598acaea274728dbe068deca919 + languageName: node + linkType: hard + +"clsx@npm:^1.2.1": + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 10/5ded6f61f15f1fa0350e691ccec43a28b12fb8e64c8e94715f2a937bc3722d4c3ed41d6e945c971fc4dcc2a7213a43323beaf2e1c28654af63ba70c9968a8643 + languageName: node + linkType: hard + "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -3684,6 +6003,20 @@ __metadata: languageName: node linkType: hard +"confbox@npm:^0.1.8": + version: 0.1.8 + resolution: "confbox@npm:0.1.8" + checksum: 10/4ebcfb1c6a3b25276734ec5722e88768eb61fc02f98e11960b845c5c62bc27fd05f493d2a8244d9675b24ef95afe4c0d511cdcad02c72f5eeea463cc26687999 + languageName: node + linkType: hard + +"consola@npm:^3.2.3": + version: 3.2.3 + resolution: "consola@npm:3.2.3" + checksum: 10/02972dcb048c337357a3628438e5976b8e45bcec22fdcfbe9cd17622992953c4d695d5152f141464a02deac769b1d23028e8ac87f56483838df7a6bbf8e0f5a2 + languageName: node + linkType: hard + "console-control-strings@npm:^1.1.0": version: 1.1.0 resolution: "console-control-strings@npm:1.1.0" @@ -3691,45 +6024,172 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^2.0.0": - version: 2.0.0 - resolution: "convert-source-map@npm:2.0.0" - checksum: 10/c987be3ec061348cdb3c2bfb924bec86dea1eacad10550a85ca23edb0fe3556c3a61c7399114f3331ccb3499d7fd0285ab24566e5745929412983494c3926e15 +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 10/c987be3ec061348cdb3c2bfb924bec86dea1eacad10550a85ca23edb0fe3556c3a61c7399114f3331ccb3499d7fd0285ab24566e5745929412983494c3926e15 + languageName: node + linkType: hard + +"cookie-es@npm:^1.2.2": + version: 1.2.2 + resolution: "cookie-es@npm:1.2.2" + checksum: 10/0fd742c11caa185928e450543f84df62d4b2c1fc7b5041196b57b7db04e1c6ac6585fb40e4f579a2819efefd2d6a9cbb4d17f71240d05f4dcd8f74ae81341a20 + languageName: node + linkType: hard + +"cookie@npm:^0.5.0": + version: 0.5.0 + resolution: "cookie@npm:0.5.0" + checksum: 10/aae7911ddc5f444a9025fbd979ad1b5d60191011339bce48e555cb83343d0f98b865ff5c4d71fecdfb8555a5cafdc65632f6fce172f32aaf6936830a883a0380 + languageName: node + linkType: hard + +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 10/9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + +"crc-32@npm:^1.2.0": + version: 1.2.2 + resolution: "crc-32@npm:1.2.2" + bin: + crc32: bin/crc32.njs + checksum: 10/824f696a5baaf617809aa9cd033313c8f94f12d15ebffa69f10202480396be44aef9831d900ab291638a8022ed91c360696dd5b1ba691eb3f34e60be8835b7c3 + languageName: node + linkType: hard + +"cross-fetch@npm:^3.1.4": + version: 3.1.8 + resolution: "cross-fetch@npm:3.1.8" + dependencies: + node-fetch: "npm:^2.6.12" + checksum: 10/ac8c4ca87d2ac0e17a19b6a293a67ee8934881aee5ec9a5a8323c30e9a9a60a0f5291d3c0d633ec2a2f970cbc60978d628804dfaf03add92d7e720b6d37f392c + languageName: node + linkType: hard + +"cross-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "cross-fetch@npm:4.0.0" + dependencies: + node-fetch: "npm:^2.6.12" + checksum: 10/e231a71926644ef122d334a3a4e73d9ba3ba4b480a8a277fb9badc434c1ba905b3d60c8034e18b348361a09afbec40ba9371036801ba2b675a7b84588f9f55d8 + languageName: node + linkType: hard + +"cross-spawn@npm:^5.1.0": + version: 5.1.0 + resolution: "cross-spawn@npm:5.1.0" + dependencies: + lru-cache: "npm:^4.0.1" + shebang-command: "npm:^1.2.0" + which: "npm:^1.2.9" + checksum: 10/726939c9954fc70c20e538923feaaa33bebc253247d13021737c3c7f68cdc3e0a57f720c0fe75057c0387995349f3f12e20e9bfdbf12274db28019c7ea4ec166 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10/e1a13869d2f57d974de0d9ef7acbf69dc6937db20b918525a01dacb5032129bd552d290d886d981e99f1b624cb03657084cc87bd40f115c07ecf376821c729ce + languageName: node + linkType: hard + +"crossws@npm:>=0.2.0 <0.4.0": + version: 0.3.1 + resolution: "crossws@npm:0.3.1" + dependencies: + uncrypto: "npm:^0.1.3" + checksum: 10/d358a58b364b3314a0e42ee66b1432c01d416128e53eda983eb121abdad5ff39831a1f1ea3e90e80157ceaa0fc925f5193c151b156aa62af9e0c9bcb2fb2a15a + languageName: node + linkType: hard + +"css-blank-pseudo@npm:^6.0.2": + version: 6.0.2 + resolution: "css-blank-pseudo@npm:6.0.2" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10/f3ec174c03e35d0fd5cb4cad313d304d564a0821b9d4cba13d9022d8875edeee8be6e240831b513c0f03ecf84493c0ef2fcf3307458304e3d21e1eebf574b267 + languageName: node + linkType: hard + +"css-has-pseudo@npm:^6.0.5": + version: 6.0.5 + resolution: "css-has-pseudo@npm:6.0.5" + dependencies: + "@csstools/selector-specificity": "npm:^3.1.1" + postcss-selector-parser: "npm:^6.0.13" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/6af2d35447bf8a5c7e7f1e8db270e2022a638e8f2c4bf1ff064e918698c4219b17d33fba35d02f63efeb47d3c18d237ba121badc8120d2197869b11f4b6fe6b7 + languageName: node + linkType: hard + +"css-prefers-color-scheme@npm:^9.0.1": + version: 9.0.1 + resolution: "css-prefers-color-scheme@npm:9.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10/eca516ebb7ef3795eabf327a46189c62db92befa4c0d7d92f29bd1177d2f5f02200e2f511a53bd291b96b6fce4a2a053eaf546ed526a75330e1823eaa184fad7 + languageName: node + linkType: hard + +"css-what@npm:^6.1.0": + version: 6.1.0 + resolution: "css-what@npm:6.1.0" + checksum: 10/c67a3a2d0d81843af87f8bf0a4d0845b0f952377714abbb2884e48942409d57a2110eabee003609d02ee487b054614bdfcfc59ee265728ff105bd5aa221c1d0e + languageName: node + linkType: hard + +"css.escape@npm:^1.5.1": + version: 1.5.1 + resolution: "css.escape@npm:1.5.1" + checksum: 10/f6d38088d870a961794a2580b2b2af1027731bb43261cfdce14f19238a88664b351cc8978abc20f06cc6bbde725699dec8deb6fe9816b139fc3f2af28719e774 + languageName: node + linkType: hard + +"cssdb@npm:^8.1.0": + version: 8.1.1 + resolution: "cssdb@npm:8.1.1" + checksum: 10/81b4fe1fda50e293a9613581bf0d026f0c67e4a6b46f01dfc75e6ec1d432055127183495594c63a8fdd48e134d382b3cfd008d2971b1b1a0e29a6dbdc5714eed languageName: node linkType: hard -"crc-32@npm:^1.2.0": - version: 1.2.2 - resolution: "crc-32@npm:1.2.2" +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" bin: - crc32: bin/crc32.njs - checksum: 10/824f696a5baaf617809aa9cd033313c8f94f12d15ebffa69f10202480396be44aef9831d900ab291638a8022ed91c360696dd5b1ba691eb3f34e60be8835b7c3 + cssesc: bin/cssesc + checksum: 10/0e161912c1306861d8f46e1883be1cbc8b1b2879f0f509287c0db71796e4ddfb97ac96bdfca38f77f452e2c10554e1bb5678c99b07a5cf947a12778f73e47e12 languageName: node linkType: hard -"cross-spawn@npm:^5.1.0": - version: 5.1.0 - resolution: "cross-spawn@npm:5.1.0" - dependencies: - lru-cache: "npm:^4.0.1" - shebang-command: "npm:^1.2.0" - which: "npm:^1.2.9" - checksum: 10/726939c9954fc70c20e538923feaaa33bebc253247d13021737c3c7f68cdc3e0a57f720c0fe75057c0387995349f3f12e20e9bfdbf12274db28019c7ea4ec166 +"csstype@npm:^3.0.2, csstype@npm:^3.0.7": + version: 3.1.3 + resolution: "csstype@npm:3.1.3" + checksum: 10/f593cce41ff5ade23f44e77521e3a1bcc2c64107041e1bf6c3c32adc5187d0d60983292fda326154d20b01079e24931aa5b08e4467cc488b60bb1e7f6d478ade languageName: node linkType: hard -"cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" +"date-fns@npm:^2.29.3": + version: 2.30.0 + resolution: "date-fns@npm:2.30.0" dependencies: - path-key: "npm:^3.1.0" - shebang-command: "npm:^2.0.0" - which: "npm:^2.0.1" - checksum: 10/e1a13869d2f57d974de0d9ef7acbf69dc6937db20b918525a01dacb5032129bd552d290d886d981e99f1b624cb03657084cc87bd40f115c07ecf376821c729ce + "@babel/runtime": "npm:^7.21.0" + checksum: 10/70b3e8ea7aaaaeaa2cd80bd889622a4bcb5d8028b4de9162cbcda359db06e16ff6e9309e54eead5341e71031818497f19aaf9839c87d1aba1e27bb4796e758a9 languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.6": +"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4, debug@npm:^4.3.6, debug@npm:~4.3.1, debug@npm:~4.3.2": version: 4.3.7 resolution: "debug@npm:4.3.7" dependencies: @@ -3741,6 +6201,32 @@ __metadata: languageName: node linkType: hard +"decamelize@npm:^1.2.0": + version: 1.2.0 + resolution: "decamelize@npm:1.2.0" + checksum: 10/ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa + languageName: node + linkType: hard + +"decode-uri-component@npm:^0.2.2": + version: 0.2.2 + resolution: "decode-uri-component@npm:0.2.2" + checksum: 10/17a0e5fa400bf9ea84432226e252aa7b5e72793e16bf80b907c99b46a799aeacc139ec20ea57121e50c7bd875a1a4365928f884e92abf02e21a5a13790a0f33e + languageName: node + linkType: hard + +"dedent@npm:^1.5.3": + version: 1.5.3 + resolution: "dedent@npm:1.5.3" + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + checksum: 10/e5277f6268f288649503125b781a7b7a2c9b22d011139688c0b3619fe40121e600eb1f077c891938d4b2428bdb6326cc3c77a763e4b1cc681bd9666ab1bad2a1 + languageName: node + linkType: hard + "deep-eql@npm:^5.0.1": version: 5.0.2 resolution: "deep-eql@npm:5.0.2" @@ -3755,6 +6241,45 @@ __metadata: languageName: node linkType: hard +"deep-object-diff@npm:^1.1.9": + version: 1.1.9 + resolution: "deep-object-diff@npm:1.1.9" + checksum: 10/b9771cc1ca08a34e408309eaab967bd2ab697684abdfa1262f4283ced8230a9ace966322f356364ff71a785c6e9cc356b7596582e900da5726e6b87d4b2a1463 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10/058d9e1b0ff1a154468bf3837aea436abcfea1ba1d165ddaaf48ca93765fdd01a30d33c36173da8fbbed951dd0a267602bc782fe288b0fc4b7e1e7091afc4529 + languageName: node + linkType: hard + +"define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10/abdcb2505d80a53524ba871273e5da75e77e52af9e15b3aa65d8aad82b8a3a424dad7aee2cc0b71470ac7acf501e08defac362e8b6a73cdb4309f028061df4ae + languageName: node + linkType: hard + +"define-lazy-prop@npm:^2.0.0": + version: 2.0.0 + resolution: "define-lazy-prop@npm:2.0.0" + checksum: 10/0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 + languageName: node + linkType: hard + +"defu@npm:^6.1.4": + version: 6.1.4 + resolution: "defu@npm:6.1.4" + checksum: 10/aeffdb47300f45b4fdef1c5bd3880ac18ea7a1fd5b8a8faf8df29350ff03bf16dd34f9800205cab513d476e4c0a3783aa0cff0a433aff0ac84a67ddc4c8a2d64 + languageName: node + linkType: hard + "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" @@ -3762,14 +6287,21 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.0": +"dequal@npm:^2.0.0, dequal@npm:^2.0.3": version: 2.0.3 resolution: "dequal@npm:2.0.3" checksum: 10/6ff05a7561f33603df87c45e389c9ac0a95e3c056be3da1a0c4702149e3a7f6fe5ffbb294478687ba51a9e95f3a60e8b6b9005993acd79c292c7d15f71964b6b languageName: node linkType: hard -"detect-browser@npm:^5.2.0": +"destr@npm:^2.0.3": + version: 2.0.3 + resolution: "destr@npm:2.0.3" + checksum: 10/dbb756baa876810ec0ca4bcb702d86cc3b480ed14f36bf5747718ed211f96bca5520b63a4109eb181ad940ee2a645677d9a63d4a0ed11a7510619dae97317201 + languageName: node + linkType: hard + +"detect-browser@npm:5.3.0, detect-browser@npm:^5.2.0": version: 5.3.0 resolution: "detect-browser@npm:5.3.0" checksum: 10/4a8551e1f5170633c9aa976f16c57f81f1044d071b2eb853c572bd817bf9cd0cc90c9c520d950edb5accd31b1b0c8ddb7a96e82040b0b5579f9f09c77446a117 @@ -3790,6 +6322,15 @@ __metadata: languageName: node linkType: hard +"detect-libc@npm:^1.0.3": + version: 1.0.3 + resolution: "detect-libc@npm:1.0.3" + bin: + detect-libc: ./bin/detect-libc.js + checksum: 10/3849fe7720feb153e4ac9407086956e073f1ce1704488290ef0ca8aab9430a8d48c8a9f8351889e7cdc64e5b1128589501e4fef48f3a4a49ba92cd6d112d0757 + languageName: node + linkType: hard + "detect-newline@npm:^4.0.0": version: 4.0.1 resolution: "detect-newline@npm:4.0.1" @@ -3797,6 +6338,13 @@ __metadata: languageName: node linkType: hard +"detect-node-es@npm:^1.1.0": + version: 1.1.0 + resolution: "detect-node-es@npm:1.1.0" + checksum: 10/e46307d7264644975b71c104b9f028ed1d3d34b83a15b8a22373640ce5ea630e5640b1078b8ea15f202b54641da71e4aa7597093bd4b91f113db520a26a37449 + languageName: node + linkType: hard + "devlop@npm:^1.0.0": version: 1.1.0 resolution: "devlop@npm:1.1.0" @@ -3806,6 +6354,13 @@ __metadata: languageName: node linkType: hard +"dijkstrajs@npm:^1.0.1": + version: 1.0.3 + resolution: "dijkstrajs@npm:1.0.3" + checksum: 10/0d8429699a6d5897ed371de494ef3c7072e8052b42abbd978e686a9b8689e70af005fa3e93e93263ee3653673ff5f89c36db830a57ae7c2e088cb9c496307507 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -3815,6 +6370,20 @@ __metadata: languageName: node linkType: hard +"dom-accessibility-api@npm:^0.5.9": + version: 0.5.16 + resolution: "dom-accessibility-api@npm:0.5.16" + checksum: 10/377b4a7f9eae0a5d72e1068c369c99e0e4ca17fdfd5219f3abd32a73a590749a267475a59d7b03a891f9b673c27429133a818c44b2e47e32fec024b34274e2ca + languageName: node + linkType: hard + +"dom-accessibility-api@npm:^0.6.3": + version: 0.6.3 + resolution: "dom-accessibility-api@npm:0.6.3" + checksum: 10/83d3371f8226487fbad36e160d44f1d9017fb26d46faba6a06fcad15f34633fc827b8c3e99d49f71d5f3253d866e2131826866fd0a3c86626f8eccfc361881ff + languageName: node + linkType: hard + "duplexer@npm:0.1.1": version: 0.1.1 resolution: "duplexer@npm:0.1.1" @@ -3829,6 +6398,18 @@ __metadata: languageName: node linkType: hard +"duplexify@npm:^4.1.2": + version: 4.1.3 + resolution: "duplexify@npm:4.1.3" + dependencies: + end-of-stream: "npm:^1.4.1" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + stream-shift: "npm:^1.0.2" + checksum: 10/b44b98ba0ffac3a658b4b1bf877219e996db288c5ae6f3dc55ca9b2cbef7df60c10eabfdd947f3d73a623eb9975a74a66d6d61e6f26bff90155315adb362aa77 + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -3836,6 +6417,17 @@ __metadata: languageName: node linkType: hard +"eciesjs@npm:^0.3.15": + version: 0.3.20 + resolution: "eciesjs@npm:0.3.20" + dependencies: + "@types/secp256k1": "npm:^4.0.6" + futoin-hkdf: "npm:^1.5.3" + secp256k1: "npm:^5.0.0" + checksum: 10/c05eb1fddb81d10400e9722a3f5c1f8af6fc6bacdaeddce4ed0471504a5303279b737e4986308f2d8b29a02654efdc136718bd265b80afcbff6b6c7b451572ef + languageName: node + linkType: hard + "electron-to-chromium@npm:^1.5.28": version: 1.5.41 resolution: "electron-to-chromium@npm:1.5.41" @@ -3887,6 +6479,13 @@ __metadata: languageName: node linkType: hard +"encode-utf8@npm:^1.0.3": + version: 1.0.3 + resolution: "encode-utf8@npm:1.0.3" + checksum: 10/0204c37cda21bf19bb8f87f7ec6c89a23d43488c2ef1e5cfa40b64ee9568e63e15dc323fa7f50a491e2c6d33843a6b409f6de09afbf6cf371cb8da596cc64b44 + languageName: node + linkType: hard + "encoding@npm:^0.1.13": version: 0.1.13 resolution: "encoding@npm:0.1.13" @@ -3896,6 +6495,35 @@ __metadata: languageName: node linkType: hard +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: "npm:^1.4.0" + checksum: 10/530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b + languageName: node + linkType: hard + +"engine.io-client@npm:~6.6.1": + version: 6.6.1 + resolution: "engine.io-client@npm:6.6.1" + dependencies: + "@socket.io/component-emitter": "npm:~3.1.0" + debug: "npm:~4.3.1" + engine.io-parser: "npm:~5.2.1" + ws: "npm:~8.17.1" + xmlhttprequest-ssl: "npm:~2.1.1" + checksum: 10/9346c3ee60ebb7a58966e927e479b8b3c5d6bc82788ad5efc38b976c4a3b2b27420d08cb29b84de8213004d49bdeed47ecd473b427498e54301a8853cd85e0c9 + languageName: node + linkType: hard + +"engine.io-parser@npm:~5.2.1": + version: 5.2.3 + resolution: "engine.io-parser@npm:5.2.3" + checksum: 10/eb0023fff5766e7ae9d59e52d92df53fea06d472cfd7b52e5d2c36b4c1dbf78cab5fde1052bcb3d4bb85bdb5aee10ae85d8a1c6c04676dac0c6cdf16bcba6380 + languageName: node + linkType: hard + "enquirer@npm:^2.3.0": version: 2.4.1 resolution: "enquirer@npm:2.4.1" @@ -3927,6 +6555,22 @@ __metadata: languageName: node linkType: hard +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: "npm:^1.2.4" + checksum: 10/f66ece0a887b6dca71848fa71f70461357c0e4e7249696f81bad0a1f347eed7b31262af4a29f5d726dc026426f085483b6b90301855e647aa8e21936f07293c6 + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10/96e65d640156f91b707517e8cdc454dd7d47c32833aa3e85d79f24f9eb7ea85f39b63e36216ef0114996581969b59fe609a94e30316b08f5f4df1d44134cf8d5 + languageName: node + linkType: hard + "esbuild@npm:^0.21.3": version: 0.21.5 resolution: "esbuild@npm:0.21.5" @@ -4007,13 +6651,20 @@ __metadata: languageName: node linkType: hard -"escalade@npm:^3.2.0": +"escalade@npm:^3.1.1, escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" checksum: 10/9d7169e3965b2f9ae46971afa392f6e5a25545ea30f2e2dd99c9b0a95a3f52b5653681a84f5b2911a413ddad2d7a93d3514165072f349b5ffc59c75a899970d6 languageName: node linkType: hard +"escape-string-regexp@npm:2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 10/9f8a2d5743677c16e85c810e3024d54f0c8dea6424fad3c79ef6666e81dd0846f7437f5e729dfcdac8981bc9e5294c39b4580814d114076b8d36318f46ae4395 + languageName: node + linkType: hard + "escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -4202,6 +6853,51 @@ __metadata: languageName: node linkType: hard +"eth-block-tracker@npm:^7.1.0": + version: 7.1.0 + resolution: "eth-block-tracker@npm:7.1.0" + dependencies: + "@metamask/eth-json-rpc-provider": "npm:^1.0.0" + "@metamask/safe-event-emitter": "npm:^3.0.0" + "@metamask/utils": "npm:^5.0.1" + json-rpc-random-id: "npm:^1.0.1" + pify: "npm:^3.0.0" + checksum: 10/b001ecb126e949a9ff19950596d5180b2f1bc5504e3dec0c01b3417e8ad190f4a53dfc61be901b72ab6dd558d1d711b73eca560bc8a605d0348eef9f501defab + languageName: node + linkType: hard + +"eth-json-rpc-filters@npm:^6.0.0": + version: 6.0.1 + resolution: "eth-json-rpc-filters@npm:6.0.1" + dependencies: + "@metamask/safe-event-emitter": "npm:^3.0.0" + async-mutex: "npm:^0.2.6" + eth-query: "npm:^2.1.2" + json-rpc-engine: "npm:^6.1.0" + pify: "npm:^5.0.0" + checksum: 10/d1fa8bb21da07c2f5d37c1e6053d499b272b4f49542077efc6b05eebe49affa9df7221c8c2439c4e33caa3f4ccb35240a6105abc83b83375dae03c0de53113a7 + languageName: node + linkType: hard + +"eth-query@npm:^2.1.2": + version: 2.1.2 + resolution: "eth-query@npm:2.1.2" + dependencies: + json-rpc-random-id: "npm:^1.0.0" + xtend: "npm:^4.0.1" + checksum: 10/af4f3575b8315f8156a83a24e850881053748aca97e4aee12dd6645ab56f0985c7000a5c45ccf315702f3e532f0c6464e03f4aba294c658dee89f5e5d1b86702 + languageName: node + linkType: hard + +"eth-rpc-errors@npm:^4.0.2, eth-rpc-errors@npm:^4.0.3": + version: 4.0.3 + resolution: "eth-rpc-errors@npm:4.0.3" + dependencies: + fast-safe-stringify: "npm:^2.0.6" + checksum: 10/47ce14170eabaee51ab1cc7e643bb3ef96ee6b15c6404806aedcd51750e00ae0b1a12c37785b180679b8d452b6dd44a0240bb018d01fa73efc85fcfa808b35a7 + languageName: node + linkType: hard + "ethereum-cryptography@npm:^2.0.0": version: 2.2.1 resolution: "ethereum-cryptography@npm:2.2.1" @@ -4274,13 +6970,44 @@ __metadata: languageName: node linkType: hard -"events@npm:^3.3.0": +"eventemitter2@npm:^6.4.7": + version: 6.4.9 + resolution: "eventemitter2@npm:6.4.9" + checksum: 10/b829b1c6b11e15926b635092b5ad62b4463d1c928859831dcae606e988cf41893059e3541f5a8209d21d2f15314422ddd4d84d20830b4bf44978608d15b06b08 + languageName: node + linkType: hard + +"eventemitter3@npm:5.0.1, eventemitter3@npm:^5.0.1": + version: 5.0.1 + resolution: "eventemitter3@npm:5.0.1" + checksum: 10/ac6423ec31124629c84c7077eed1e6987f6d66c31cf43c6fcbf6c87791d56317ce808d9ead483652436df171b526fc7220eccdc9f3225df334e81582c3cf7dd5 + languageName: node + linkType: hard + +"events@npm:3.3.0, events@npm:^3.3.0": version: 3.3.0 resolution: "events@npm:3.3.0" checksum: 10/a3d47e285e28d324d7180f1e493961a2bbb4cad6412090e4dec114f4db1f5b560c7696ee8e758f55e23913ede856e3689cd3aa9ae13c56b5d8314cd3b3ddd1be languageName: node linkType: hard +"execa@npm:^8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" + dependencies: + cross-spawn: "npm:^7.0.3" + get-stream: "npm:^8.0.1" + human-signals: "npm:^5.0.0" + is-stream: "npm:^3.0.0" + merge-stream: "npm:^2.0.0" + npm-run-path: "npm:^5.1.0" + onetime: "npm:^6.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^3.0.0" + checksum: 10/d2ab5fe1e2bb92b9788864d0713f1fce9a07c4594e272c0c97bc18c90569897ab262e4ea58d27a694d288227a2e24f16f5e2575b44224ad9983b799dc7f1098d + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.1 resolution: "exponential-backoff@npm:3.1.1" @@ -4295,6 +7022,16 @@ __metadata: languageName: node linkType: hard +"extension-port-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "extension-port-stream@npm:3.0.0" + dependencies: + readable-stream: "npm:^3.6.2 || ^4.4.2" + webextension-polyfill: "npm:>=0.10.0 <1.0" + checksum: 10/4f51d2258a96154c2d916a8a5425636a2b0817763e9277f7dc378d08b6f050c90d185dbde4313d27cf66ad99d4b3116479f9f699c40358c64cccfa524d2b55bf + languageName: node + linkType: hard + "extension-port-stream@npm:^4.1.0": version: 4.2.0 resolution: "extension-port-stream@npm:4.2.0" @@ -4358,6 +7095,13 @@ __metadata: languageName: node linkType: hard +"fast-redact@npm:^3.0.0": + version: 3.5.0 + resolution: "fast-redact@npm:3.5.0" + checksum: 10/24b27e2023bd5a62f908d97a753b1adb8d89206b260f97727728e00b693197dea2fc2aa3711147a385d0ec6e713569fd533df37a4ef947e08cb65af3019c7ad5 + languageName: node + linkType: hard + "fast-safe-stringify@npm:^2.0.6": version: 2.1.1 resolution: "fast-safe-stringify@npm:2.1.1" @@ -4399,6 +7143,13 @@ __metadata: languageName: node linkType: hard +"filter-obj@npm:^1.1.0": + version: 1.1.0 + resolution: "filter-obj@npm:1.1.0" + checksum: 10/9d681939eec2b4b129cb4f307b7e93d954a0657421d4e5357d86093b26d3f4f570909ed43717dcfd62428b3cf8cddd9841b35f9d40d12ac62cfabaa677942593 + languageName: node + linkType: hard + "find-up@npm:^4.1.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" @@ -4447,6 +7198,15 @@ __metadata: languageName: node linkType: hard +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: "npm:^1.1.3" + checksum: 10/fdac0cde1be35610bd635ae958422e8ce0cc1313e8d32ea6d34cfda7b60850940c1fd07c36456ad76bd9c24aef6ff5e03b02beb58c83af5ef6c968a64eada676 + languageName: node + linkType: hard + "foreground-child@npm:^3.1.0": version: 3.3.0 resolution: "foreground-child@npm:3.3.0" @@ -4457,6 +7217,13 @@ __metadata: languageName: node linkType: hard +"fraction.js@npm:^4.3.7": + version: 4.3.7 + resolution: "fraction.js@npm:4.3.7" + checksum: 10/bb5ebcdeeffcdc37b68ead3bdfc244e68de188e0c64e9702197333c72963b95cc798883ad16adc21588088b942bca5b6a6ff4aeb1362d19f6f3b629035dc15f5 + languageName: node + linkType: hard + "fs-extra@npm:^10.0.0": version: 10.1.0 resolution: "fs-extra@npm:10.1.0" @@ -4515,6 +7282,16 @@ __metadata: languageName: node linkType: hard +"fsevents@npm:2.3.2": + version: 2.3.2 + resolution: "fsevents@npm:2.3.2" + dependencies: + node-gyp: "npm:latest" + checksum: 10/6b5b6f5692372446ff81cf9501c76e3e0459a4852b3b5f1fc72c103198c125a6b8c72f5f166bdd76ffb2fca261e7f6ee5565daf80dca6e571e55bcc589cc1256 + conditions: os=darwin + languageName: node + linkType: hard + "fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" @@ -4525,6 +7302,15 @@ __metadata: languageName: node linkType: hard +"fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin": + version: 2.3.2 + resolution: "fsevents@patch:fsevents@npm%3A2.3.2#optional!builtin::version=2.3.2&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + "fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" @@ -4541,6 +7327,13 @@ __metadata: languageName: node linkType: hard +"futoin-hkdf@npm:^1.5.3": + version: 1.5.3 + resolution: "futoin-hkdf@npm:1.5.3" + checksum: 10/aa64b93b4fdca77e6e9c7f045c539dd912f10077bc31d933e219eb5784e88e90a6d830b5d34431da840cc7477c0ed5f2d504dec49718b9f57941de5f23c20471 + languageName: node + linkType: hard + "gauge@npm:^4.0.3": version: 4.0.4 resolution: "gauge@npm:4.0.4" @@ -4564,6 +7357,40 @@ __metadata: languageName: node linkType: hard +"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10/b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + has-proto: "npm:^1.0.1" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.0" + checksum: 10/85bbf4b234c3940edf8a41f4ecbd4e25ce78e5e6ad4e24ca2f77037d983b9ef943fd72f00f3ee97a49ec622a506b67db49c36246150377efcda1c9eb03e5f06d + languageName: node + linkType: hard + +"get-nonce@npm:^1.0.0": + version: 1.0.1 + resolution: "get-nonce@npm:1.0.1" + checksum: 10/ad5104871d114a694ecc506a2d406e2331beccb961fe1e110dc25556b38bcdbf399a823a8a375976cd8889668156a9561e12ebe3fa6a4c6ba169c8466c2ff868 + languageName: node + linkType: hard + +"get-port-please@npm:^3.1.2": + version: 3.1.2 + resolution: "get-port-please@npm:3.1.2" + checksum: 10/ec8b8da9f816edde114b76742ec29695730094904bb0e94309081e4adf3f797b483b9d648abcf5e0511c4e21a7bf68334672b9575f8b23bccf93bf97eb517f0e + languageName: node + linkType: hard + "get-stdin@npm:^9.0.0": version: 9.0.0 resolution: "get-stdin@npm:9.0.0" @@ -4571,6 +7398,13 @@ __metadata: languageName: node linkType: hard +"get-stream@npm:^8.0.1": + version: 8.0.1 + resolution: "get-stream@npm:8.0.1" + checksum: 10/dde5511e2e65a48e9af80fea64aff11b4921b14b6e874c6f8294c50975095af08f41bfb0b680c887f28b566dd6ec2cb2f960f9d36a323359be324ce98b766e9e + languageName: node + linkType: hard + "git-hooks-list@npm:^3.0.0": version: 3.1.0 resolution: "git-hooks-list@npm:3.1.0" @@ -4578,7 +7412,7 @@ __metadata: languageName: node linkType: hard -"glob-parent@npm:^5.1.2": +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" dependencies: @@ -4596,7 +7430,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.4.1": +"glob@npm:^10.0.0, glob@npm:^10.2.2, glob@npm:^10.3.10, glob@npm:^10.4.1": version: 10.4.5 resolution: "glob@npm:10.4.5" dependencies: @@ -4710,6 +7544,15 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: "npm:^1.1.3" + checksum: 10/5fbc7ad57b368ae4cd2f41214bd947b045c1a4be2f194a7be1778d71f8af9dbf4004221f3b6f23e30820eb0d052b4f819fe6ebe8221e2a3c6f0ee4ef173421ca + languageName: node + linkType: hard + "graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" @@ -4724,6 +7567,13 @@ __metadata: languageName: node linkType: hard +"graphql@npm:^16.8.1": + version: 16.9.0 + resolution: "graphql@npm:16.9.0" + checksum: 10/5833f82bb6c31bec120bbf9cd400eda873e1bb7ef5c17974fa262cd82dc68728fda5d4cb859dc8aaa4c4fe4f6fe1103a9c47efc01a12c02ae5cb581d8e4029e2 + languageName: node + linkType: hard + "gzip-size@npm:^6.0.0": version: 6.0.0 resolution: "gzip-size@npm:6.0.0" @@ -4733,6 +7583,24 @@ __metadata: languageName: node linkType: hard +"h3@npm:^1.12.0": + version: 1.13.0 + resolution: "h3@npm:1.13.0" + dependencies: + cookie-es: "npm:^1.2.2" + crossws: "npm:>=0.2.0 <0.4.0" + defu: "npm:^6.1.4" + destr: "npm:^2.0.3" + iron-webcrypto: "npm:^1.2.1" + ohash: "npm:^1.1.4" + radix3: "npm:^1.1.2" + ufo: "npm:^1.5.4" + uncrypto: "npm:^0.1.3" + unenv: "npm:^1.10.0" + checksum: 10/ecdbe3cdddc767ea6f9be9939b14192dd296eb434641bbecc5b665f7210de8c03910ae40931668788395b5de6cd517afaa628d7b5ce0fb60786fce1ad6e81bcb + languageName: node + linkType: hard + "happy-dom@npm:^15.7.4": version: 15.7.4 resolution: "happy-dom@npm:15.7.4" @@ -4758,6 +7626,38 @@ __metadata: languageName: node linkType: hard +"has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10/2d8c9ab8cebb572e3362f7d06139a4592105983d4317e68f7adba320fe6ddfc8874581e0971e899e633fd5f72e262830edce36d5a0bc863dad17ad20572484b2 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: 10/0b67c2c94e3bea37db3e412e3c41f79d59259875e636ba471e94c009cdfb1fa82bf045deeffafc7dbb9c148e36cae6b467055aaa5d9fad4316e11b41e3ba551a + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: 10/464f97a8202a7690dadd026e6d73b1ceeddd60fe6acfd06151106f050303eaa75855aaa94969df8015c11ff7c505f196114d22f7386b4a471038da5874cf5e9b + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10/c74c5f5ceee3c8a5b8bc37719840dc3749f5b0306d818974141dda2471a1a2ca6c8e46b9d6ac222c5345df7a901c9b6f350b1e6d62763fec877e26609a401bfe + languageName: node + linkType: hard + "has-unicode@npm:^2.0.1": version: 2.0.1 resolution: "has-unicode@npm:2.0.1" @@ -4775,7 +7675,7 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.2": +"hasown@npm:^2.0.0, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: @@ -4812,6 +7712,20 @@ __metadata: languageName: node linkType: hard +"headers-polyfill@npm:^4.0.2": + version: 4.0.3 + resolution: "headers-polyfill@npm:4.0.3" + checksum: 10/3a008aa2ef71591e2077706efb48db1b2729b90cf646cc217f9b69744e35cca4ba463f39debb6000904aa7de4fada2e5cc682463025d26bcc469c1d99fa5af27 + languageName: node + linkType: hard + +"hey-listen@npm:^1.0.8": + version: 1.0.8 + resolution: "hey-listen@npm:1.0.8" + checksum: 10/744b5f4c18c7cfb82b22bd22e1d300a9ac4eafe05a22e58fb87e48addfca8be00604d9aa006434ea02f9530990eb4b393ddb28659e2ab7f833ce873e32eb809c + languageName: node + linkType: hard + "hmac-drbg@npm:^1.0.1": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" @@ -4874,6 +7788,13 @@ __metadata: languageName: node linkType: hard +"http-shutdown@npm:^1.2.2": + version: 1.2.2 + resolution: "http-shutdown@npm:1.2.2" + checksum: 10/1c99b575b1a7ebd749950e7f59410348723638808336063321d89588b7f7b548d61c8e3566af0f1f4f961d941c758677d062d2289bc63356ead143da4d8f3daf + languageName: node + linkType: hard + "https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -4901,6 +7822,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^5.0.0": + version: 5.0.0 + resolution: "human-signals@npm:5.0.0" + checksum: 10/30f8870d831cdcd2d6ec0486a7d35d49384996742052cee792854273fa9dd9e7d5db06bb7985d4953e337e10714e994e0302e90dc6848069171b05ec836d65b0 + languageName: node + linkType: hard + "humanize-ms@npm:^1.2.1": version: 1.2.1 resolution: "humanize-ms@npm:1.2.1" @@ -4910,6 +7838,24 @@ __metadata: languageName: node linkType: hard +"i18next-browser-languagedetector@npm:7.1.0": + version: 7.1.0 + resolution: "i18next-browser-languagedetector@npm:7.1.0" + dependencies: + "@babel/runtime": "npm:^7.19.4" + checksum: 10/3b06c8a5df09092cffc0b6637b542bb572e8a25dcba97d0d8a5e5dd7539b90bf00000f3a279654693f4b5908c5fc4d1d4f3766dfb461dacab46be3d071266384 + languageName: node + linkType: hard + +"i18next@npm:23.11.5": + version: 23.11.5 + resolution: "i18next@npm:23.11.5" + dependencies: + "@babel/runtime": "npm:^7.23.2" + checksum: 10/3a8e0d5d2b9ac6c6fa8c2180452aaf816d60e1cc790da69d6be515feec85553f8af9fcc19414ade1a621f08236e84f38df4415a8234919fa97fa2e35624e86b6 + languageName: node + linkType: hard + "iconv-lite@npm:^0.4.24": version: 0.4.24 resolution: "iconv-lite@npm:0.4.24" @@ -4928,6 +7874,13 @@ __metadata: languageName: node linkType: hard +"idb-keyval@npm:^6.2.1": + version: 6.2.1 + resolution: "idb-keyval@npm:6.2.1" + checksum: 10/9a1416ff5e2ceff3832f5645518f438833a5ff6ee316fe3ec111d580db120425991d64d8098a847be7541bbbb7cc941984b4d0d62d541c39f7a0f415594837c2 + languageName: node + linkType: hard + "ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" @@ -4992,13 +7945,22 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4": +"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10/cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 languageName: node linkType: hard +"invariant@npm:2.2.4, invariant@npm:^2.2.4": + version: 2.2.4 + resolution: "invariant@npm:2.2.4" + dependencies: + loose-envify: "npm:^1.0.0" + checksum: 10/cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 + languageName: node + linkType: hard + "ip-address@npm:^9.0.5": version: 9.0.5 resolution: "ip-address@npm:9.0.5" @@ -5009,6 +7971,39 @@ __metadata: languageName: node linkType: hard +"iron-webcrypto@npm:^1.2.1": + version: 1.2.1 + resolution: "iron-webcrypto@npm:1.2.1" + checksum: 10/c1f52ccfe2780efa5438c134538ee4b26c96a87d22f351d896781219efbce25b4fe716d1cb7f248e02da96881760541135acbcc7c0622ffedf71cb0e227bebf9 + languageName: node + linkType: hard + +"is-arguments@npm:^1.0.4": + version: 1.1.1 + resolution: "is-arguments@npm:1.1.1" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 10/a170c7e26082e10de9be6e96d32ae3db4d5906194051b792e85fae3393b53cf2cb5b3557863e5c8ccbab55e2fd8f2f75aa643d437613f72052cf0356615c34be + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: "npm:^2.0.0" + checksum: 10/078e51b4f956c2c5fd2b26bb2672c3ccf7e1faff38e0ebdba45612265f4e3d9fc3127a1fa8370bbf09eab61339203c3d3b7af5662cbf8be4030f8fac37745b0e + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 10/48a9297fb92c99e9df48706241a189da362bff3003354aea4048bd5f7b2eb0d823cd16d0a383cece3d76166ba16d85d9659165ac6fcce1ac12e6c649d66dbdb9 + languageName: node + linkType: hard + "is-core-module@npm:^2.13.0, is-core-module@npm:^2.8.1": version: 2.15.1 resolution: "is-core-module@npm:2.15.1" @@ -5018,6 +8013,24 @@ __metadata: languageName: node linkType: hard +"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": + version: 2.2.1 + resolution: "is-docker@npm:2.2.1" + bin: + is-docker: cli.js + checksum: 10/3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 + languageName: node + linkType: hard + +"is-docker@npm:^3.0.0": + version: 3.0.0 + resolution: "is-docker@npm:3.0.0" + bin: + is-docker: cli.js + checksum: 10/b698118f04feb7eaf3338922bd79cba064ea54a1c3db6ec8c0c8d8ee7613e7e5854d802d3ef646812a8a3ace81182a085dfa0a71cc68b06f3fa794b9783b3c90 + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -5032,7 +8045,16 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": +"is-generator-function@npm:^1.0.7": + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10/499a3ce6361064c3bd27fbff5c8000212d48506ebe1977842bbd7b3e708832d0deb1f4cc69186ece3640770e8c4f1287b24d99588a0b8058b2dbdd344bc1f47f + languageName: node + linkType: hard + +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -5041,6 +8063,17 @@ __metadata: languageName: node linkType: hard +"is-inside-container@npm:^1.0.0": + version: 1.0.0 + resolution: "is-inside-container@npm:1.0.0" + dependencies: + is-docker: "npm:^3.0.0" + bin: + is-inside-container: cli.js + checksum: 10/c50b75a2ab66ab3e8b92b3bc534e1ea72ca25766832c0623ac22d134116a98bcf012197d1caabe1d1c4bd5f84363d4aa5c36bb4b585fbcaf57be172cd10a1a03 + languageName: node + linkType: hard + "is-lambda@npm:^1.0.1": version: 1.0.1 resolution: "is-lambda@npm:1.0.1" @@ -5048,6 +8081,13 @@ __metadata: languageName: node linkType: hard +"is-node-process@npm:^1.2.0": + version: 1.2.0 + resolution: "is-node-process@npm:1.2.0" + checksum: 10/930765cdc6d81ab8f1bbecbea4a8d35c7c6d88a3ff61f3630e0fc7f22d624d7661c1df05c58547d0eb6a639dfa9304682c8e342c4113a6ed51472b704cee2928 + languageName: node + linkType: hard + "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -5069,6 +8109,13 @@ __metadata: languageName: node linkType: hard +"is-stream@npm:^3.0.0": + version: 3.0.0 + resolution: "is-stream@npm:3.0.0" + checksum: 10/172093fe99119ffd07611ab6d1bcccfe8bc4aa80d864b15f43e63e54b7abc71e779acd69afdb854c4e2a67fdc16ae710e370eda40088d1cfc956a50ed82d8f16 + languageName: node + linkType: hard + "is-subdir@npm:^1.1.1": version: 1.2.0 resolution: "is-subdir@npm:1.2.0" @@ -5078,6 +8125,15 @@ __metadata: languageName: node linkType: hard +"is-typed-array@npm:^1.1.3": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: "npm:^1.1.14" + checksum: 10/f850ba08286358b9a11aee6d93d371a45e3c59b5953549ee1c1a9a55ba5c1dd1bd9952488ae194ad8f32a9cf5e79c8fa5f0cc4d78c00720aa0bbcf238b38062d + languageName: node + linkType: hard + "is-windows@npm:^1.0.0": version: 1.0.2 resolution: "is-windows@npm:1.0.2" @@ -5085,6 +8141,40 @@ __metadata: languageName: node linkType: hard +"is-wsl@npm:^2.2.0": + version: 2.2.0 + resolution: "is-wsl@npm:2.2.0" + dependencies: + is-docker: "npm:^2.0.0" + checksum: 10/20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 + languageName: node + linkType: hard + +"is-wsl@npm:^3.1.0": + version: 3.1.0 + resolution: "is-wsl@npm:3.1.0" + dependencies: + is-inside-container: "npm:^1.0.0" + checksum: 10/f9734c81f2f9cf9877c5db8356bfe1ff61680f1f4c1011e91278a9c0564b395ae796addb4bf33956871041476ec82c3e5260ed57b22ac91794d4ae70a1d2f0a9 + languageName: node + linkType: hard + +"is64bit@npm:^2.0.0": + version: 2.0.0 + resolution: "is64bit@npm:2.0.0" + dependencies: + system-architecture: "npm:^0.1.0" + checksum: 10/94dafd5f29bfb96c542e89ef8c33e811159ca7d07a2890ab83026fa87706612af4101308d9392e9ee68e046e8604a6b59a8f41091f8556f6235efbcfd9c5574c + languageName: node + linkType: hard + +"isarray@npm:~1.0.0": + version: 1.0.0 + resolution: "isarray@npm:1.0.0" + checksum: 10/f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -5178,6 +8268,15 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^2.1.2": + version: 2.3.3 + resolution: "jiti@npm:2.3.3" + bin: + jiti: lib/jiti-cli.mjs + checksum: 10/21d1e89d909101c702769537e75ad87b433f980bc6938a6f64a90d1fbe7cb1510a0d4b82d4020b3093b47cebff5568af5e39d883e26aa4413564ced43b8cfd84 + languageName: node + linkType: hard + "js-sha3@npm:0.8.0": version: 0.8.0 resolution: "js-sha3@npm:0.8.0" @@ -5185,7 +8284,7 @@ __metadata: languageName: node linkType: hard -"js-tokens@npm:^4.0.0": +"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" checksum: 10/af37d0d913fb56aec6dc0074c163cc71cd23c0b8aad5c2350747b6721d37ba118af35abdd8b33c47ec2800de07dedb16a527ca9c530ee004093e04958bd0cbf2 @@ -5245,6 +8344,23 @@ __metadata: languageName: node linkType: hard +"json-rpc-engine@npm:^6.1.0": + version: 6.1.0 + resolution: "json-rpc-engine@npm:6.1.0" + dependencies: + "@metamask/safe-event-emitter": "npm:^2.0.0" + eth-rpc-errors: "npm:^4.0.2" + checksum: 10/00d5b5228e90f126dd52176598db6e5611d295d3a3f7be21254c30c1b6555811260ef2ec2df035cd8e583e4b12096259da721e29f4ea2affb615f7dfc960a6a6 + languageName: node + linkType: hard + +"json-rpc-random-id@npm:^1.0.0, json-rpc-random-id@npm:^1.0.1": + version: 1.0.1 + resolution: "json-rpc-random-id@npm:1.0.1" + checksum: 10/fcd2e884193a129ace4002bd65a86e9cdb206733b4693baea77bd8b372cf8de3043fbea27716a2c9a716581a908ca8d978d9dfec4847eb2cf77edb4cf4b2252c + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -5313,6 +8429,18 @@ __metadata: languageName: node linkType: hard +"keccak@npm:^3.0.3": + version: 3.0.4 + resolution: "keccak@npm:3.0.4" + dependencies: + node-addon-api: "npm:^2.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.2.0" + readable-stream: "npm:^3.6.0" + checksum: 10/45478bb0a57e44d0108646499b8360914b0fbc8b0e088f1076659cb34faaa9eb829c40f6dd9dadb3460bb86cc33153c41fed37fe5ce09465a60e71e78c23fa55 + languageName: node + linkType: hard + "keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" @@ -5322,6 +8450,13 @@ __metadata: languageName: node linkType: hard +"keyvaluestorage-interface@npm:^1.0.0": + version: 1.0.0 + resolution: "keyvaluestorage-interface@npm:1.0.0" + checksum: 10/e652448bc915f9c21b9916678ed58f5314c831f0a284d190a340c0370296c71918e0cdc1156a17b12d1993941b302f0881e23fb9c395079e2065a7d2f33d0199 + languageName: node + linkType: hard + "kleur@npm:^4.1.4": version: 4.1.5 resolution: "kleur@npm:4.1.5" @@ -5348,6 +8483,66 @@ __metadata: languageName: node linkType: hard +"listhen@npm:^1.7.2": + version: 1.9.0 + resolution: "listhen@npm:1.9.0" + dependencies: + "@parcel/watcher": "npm:^2.4.1" + "@parcel/watcher-wasm": "npm:^2.4.1" + citty: "npm:^0.1.6" + clipboardy: "npm:^4.0.0" + consola: "npm:^3.2.3" + crossws: "npm:>=0.2.0 <0.4.0" + defu: "npm:^6.1.4" + get-port-please: "npm:^3.1.2" + h3: "npm:^1.12.0" + http-shutdown: "npm:^1.2.2" + jiti: "npm:^2.1.2" + mlly: "npm:^1.7.1" + node-forge: "npm:^1.3.1" + pathe: "npm:^1.1.2" + std-env: "npm:^3.7.0" + ufo: "npm:^1.5.4" + untun: "npm:^0.1.3" + uqr: "npm:^0.1.2" + bin: + listen: bin/listhen.mjs + listhen: bin/listhen.mjs + checksum: 10/72b869c8604301352c5d5825a7737705f0df2ce1795af8e779b6f956ba71302e13b12b2d35142687fb4e1e8ccc2747e2be3c9cbf20f7f96b73f897881aa3c384 + languageName: node + linkType: hard + +"lit-element@npm:^3.3.0": + version: 3.3.3 + resolution: "lit-element@npm:3.3.3" + dependencies: + "@lit-labs/ssr-dom-shim": "npm:^1.1.0" + "@lit/reactive-element": "npm:^1.3.0" + lit-html: "npm:^2.8.0" + checksum: 10/7968e7f3ce3994911f27c4c54acc956488c91d8af81677cce3d6f0c2eaea45cceb79b064077159392238d6e43d46015a950269db9914fea8913566aacb17eaa1 + languageName: node + linkType: hard + +"lit-html@npm:^2.8.0": + version: 2.8.0 + resolution: "lit-html@npm:2.8.0" + dependencies: + "@types/trusted-types": "npm:^2.0.2" + checksum: 10/3503e55e2927c2ff94773cf041fc4128f92291869c9192f36eacb7f95132d11f6b329e5b910ab60a4456349cd2e6d23b33d83291b24d557bcd6b904d6314ac1a + languageName: node + linkType: hard + +"lit@npm:2.8.0": + version: 2.8.0 + resolution: "lit@npm:2.8.0" + dependencies: + "@lit/reactive-element": "npm:^1.6.0" + lit-element: "npm:^3.3.0" + lit-html: "npm:^2.8.0" + checksum: 10/aa64c1136b855ba328d41157dba67657d480345aeec3c1dd829abeb67719d759c9ff2ade9903f9cfb4f9d012b16087034aaa5b33f1182e70c615765562e3251b + languageName: node + linkType: hard + "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -5382,6 +8577,13 @@ __metadata: languageName: node linkType: hard +"lodash.isequal@npm:4.5.0": + version: 4.5.0 + resolution: "lodash.isequal@npm:4.5.0" + checksum: 10/82fc58a83a1555f8df34ca9a2cd300995ff94018ac12cc47c349655f0ae1d4d92ba346db4c19bbfc90510764e0c00ddcc985a358bdcd4b3b965abf8f2a48a214 + languageName: node + linkType: hard + "lodash.merge@npm:^4.6.2": version: 4.6.2 resolution: "lodash.merge@npm:4.6.2" @@ -5396,7 +8598,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:^4.17.4": +"lodash@npm:^4.17.21, lodash@npm:^4.17.4": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: 10/c08619c038846ea6ac754abd6dd29d2568aa705feb69339e836dfa8d8b09abbb2f859371e86863eda41848221f9af43714491467b5b0299122431e202bb0c532 @@ -5422,6 +8624,17 @@ __metadata: languageName: node linkType: hard +"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0": + version: 1.4.0 + resolution: "loose-envify@npm:1.4.0" + dependencies: + js-tokens: "npm:^3.0.0 || ^4.0.0" + bin: + loose-envify: cli.js + checksum: 10/6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 + languageName: node + linkType: hard + "loupe@npm:^3.1.0, loupe@npm:^3.1.1": version: 3.1.2 resolution: "loupe@npm:3.1.2" @@ -5429,7 +8642,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0, lru-cache@npm:^10.4.3": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" checksum: 10/e6e90267360476720fa8e83cc168aa2bf0311f3f2eea20a6ba78b90a885ae72071d9db132f40fda4129c803e7dcec3a6b6a6fbb44ca90b081630b810b5d6a41a @@ -5476,6 +8689,15 @@ __metadata: languageName: node linkType: hard +"lz-string@npm:^1.5.0": + version: 1.5.0 + resolution: "lz-string@npm:1.5.0" + bin: + lz-string: bin/bin.js + checksum: 10/e86f0280e99a8d8cd4eef24d8601ddae15ce54e43ac9990dfcb79e1e081c255ad24424a30d78d2ad8e51a8ce82a66a930047fed4b4aa38c6f0b392ff9300edfc + languageName: node + linkType: hard + "magic-string@npm:^0.30.10, magic-string@npm:^0.30.11": version: 0.30.12 resolution: "magic-string@npm:0.30.12" @@ -5612,6 +8834,22 @@ __metadata: languageName: node linkType: hard +"media-query-parser@npm:^2.0.2": + version: 2.0.2 + resolution: "media-query-parser@npm:2.0.2" + dependencies: + "@babel/runtime": "npm:^7.12.5" + checksum: 10/9dff3ed135149944717a8687567f4fda1d39d28637f265c6ce7efe5ed55cd88ed49136c912ee0c7f3a6e5debc50b1ff969db609d862318f1af97f48752b08b0b + languageName: node + linkType: hard + +"merge-stream@npm:^2.0.0": + version: 2.0.0 + resolution: "merge-stream@npm:2.0.0" + checksum: 10/6fa4dcc8d86629705cea944a4b88ef4cb0e07656ebf223fa287443256414283dd25d91c1cd84c77987f2aec5927af1a9db6085757cb43d90eb170ebf4b47f4f4 + languageName: node + linkType: hard + "merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" @@ -5668,7 +8906,7 @@ __metadata: languageName: node linkType: hard -"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4": +"micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": version: 4.0.8 resolution: "micromatch@npm:4.0.8" dependencies: @@ -5678,6 +8916,15 @@ __metadata: languageName: node linkType: hard +"mime@npm:^3.0.0": + version: 3.0.0 + resolution: "mime@npm:3.0.0" + bin: + mime: cli.js + checksum: 10/b2d31580deb58be89adaa1877cbbf152b7604b980fd7ef8f08b9e96bfedf7d605d9c23a8ba62aa12c8580b910cd7c1d27b7331d0f40f7a14e17d5a0bbec3b49f + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -5685,6 +8932,20 @@ __metadata: languageName: node linkType: hard +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 10/995dcece15ee29aa16e188de6633d43a3db4611bcf93620e7e62109ec41c79c0f34277165b8ce5e361205049766e371851264c21ac64ca35499acb5421c2ba56 + languageName: node + linkType: hard + +"min-indent@npm:^1.0.0": + version: 1.0.1 + resolution: "min-indent@npm:1.0.1" + checksum: 10/bfc6dd03c5eaf623a4963ebd94d087f6f4bbbfd8c41329a7f09706b0cb66969c4ddd336abeb587bc44bc6f08e13bf90f0b374f9d71f9f01e04adc2cd6f083ef1 + languageName: node + linkType: hard + "minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": version: 1.0.1 resolution: "minimalistic-assert@npm:1.0.1" @@ -5853,6 +9114,18 @@ __metadata: languageName: node linkType: hard +"mipd@npm:0.0.7": + version: 0.0.7 + resolution: "mipd@npm:0.0.7" + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/c14dffef0ef7a3e71469aee553f5735f4a6a9f9a2b47ca02798040f2e006261c2e7e8b26ee0dc56a815c04d5612eb4be1eed474e7bb4e496eb0f5ada2fe1d2e7 + languageName: node + linkType: hard + "mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" @@ -5862,6 +9135,39 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^1.7.1, mlly@npm:^1.7.2": + version: 1.7.2 + resolution: "mlly@npm:1.7.2" + dependencies: + acorn: "npm:^8.12.1" + pathe: "npm:^1.1.2" + pkg-types: "npm:^1.2.0" + ufo: "npm:^1.5.4" + checksum: 10/c28e9f32cfc7b204e4d089a9af01b6af30547f39dd97244486fe208523c1453828b694430ebfa2d06297116861d464f150d3273040bf5e11ef5a357958f142d5 + languageName: node + linkType: hard + +"modern-ahocorasick@npm:^1.0.0": + version: 1.0.1 + resolution: "modern-ahocorasick@npm:1.0.1" + checksum: 10/ec83479f406511f37a966d66ce1c2b1701bb4a2cc2aabbbc257001178c9fbc48ce748c88eb10dfe72ba8b7f991a0bc7f1fa14683f444685edd1a9eeb32ecbc1e + languageName: node + linkType: hard + +"motion@npm:10.16.2": + version: 10.16.2 + resolution: "motion@npm:10.16.2" + dependencies: + "@motionone/animation": "npm:^10.15.1" + "@motionone/dom": "npm:^10.16.2" + "@motionone/svelte": "npm:^10.16.2" + "@motionone/types": "npm:^10.15.1" + "@motionone/utils": "npm:^10.15.1" + "@motionone/vue": "npm:^10.16.2" + checksum: 10/2470f12b97371eb876337b355ad158c545622b2cc7c83b0ba540d2c02afedb49990e78898e520b8f74cccc9ecf11d366ae005a35c60e92178fadd7434860a966 + languageName: node + linkType: hard + "mri@npm:^1.2.0": version: 1.2.0 resolution: "mri@npm:1.2.0" @@ -5869,6 +9175,13 @@ __metadata: languageName: node linkType: hard +"mrmime@npm:^2.0.0": + version: 2.0.0 + resolution: "mrmime@npm:2.0.0" + checksum: 10/8d95f714ea200c6cf3e3777cbc6168be04b05ac510090a9b41eef5ec081efeb1d1de3e535ffb9c9689fffcc42f59864fd52a500e84a677274f070adeea615c45 + languageName: node + linkType: hard + "ms@npm:^2.0.0, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -5876,6 +9189,52 @@ __metadata: languageName: node linkType: hard +"msw@npm:^2.3.5": + version: 2.4.11 + resolution: "msw@npm:2.4.11" + dependencies: + "@bundled-es-modules/cookie": "npm:^2.0.0" + "@bundled-es-modules/statuses": "npm:^1.0.1" + "@bundled-es-modules/tough-cookie": "npm:^0.1.6" + "@inquirer/confirm": "npm:^3.0.0" + "@mswjs/interceptors": "npm:^0.35.8" + "@open-draft/until": "npm:^2.1.0" + "@types/cookie": "npm:^0.6.0" + "@types/statuses": "npm:^2.0.4" + chalk: "npm:^4.1.2" + graphql: "npm:^16.8.1" + headers-polyfill: "npm:^4.0.2" + is-node-process: "npm:^1.2.0" + outvariant: "npm:^1.4.3" + path-to-regexp: "npm:^6.3.0" + strict-event-emitter: "npm:^0.5.1" + type-fest: "npm:^4.26.1" + yargs: "npm:^17.7.2" + peerDependencies: + typescript: ">= 4.8.x" + peerDependenciesMeta: + typescript: + optional: true + bin: + msw: cli/index.js + checksum: 10/d073ede4bfc7f1f41f7a0cb05b3d20d9befc1658e53faacd3f217a7cb78e3e748a3ee8e937e2a4d93fd09f16b35cba00d71df767736dd567ac15fd8e01aa7d6e + languageName: node + linkType: hard + +"multiformats@npm:^9.4.2": + version: 9.9.0 + resolution: "multiformats@npm:9.9.0" + checksum: 10/ad55c7d480d22f4258a68fd88aa2aab744fe0cb1e68d732fc886f67d858b37e3aa6c2cec12b2960ead7730d43be690931485238569952d8a3d7f90fdc726c652 + languageName: node + linkType: hard + +"mute-stream@npm:^1.0.0": + version: 1.0.0 + resolution: "mute-stream@npm:1.0.0" + checksum: 10/36fc968b0e9c9c63029d4f9dc63911950a3bdf55c9a87f58d3a266289b67180201cade911e7699f8b2fa596b34c9db43dad37649e3f7fdd13c3bb9edb0017ee7 + languageName: node + linkType: hard + "nanoid@npm:^3.3.7": version: 3.3.7 resolution: "nanoid@npm:3.3.7" @@ -5885,6 +9244,13 @@ __metadata: languageName: node linkType: hard +"napi-wasm@npm:^1.1.0": + version: 1.1.3 + resolution: "napi-wasm@npm:1.1.3" + checksum: 10/5cad19c3ba4c8b176453149542ea72f156be5db6d249611a76537833381f5cec802ed4d7ae5c3f7c0ef69d439c037f7247bbae7db711ed84f915be2a9fc43bb4 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -5892,10 +9258,76 @@ __metadata: languageName: node linkType: hard -"negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: 10/2723fb822a17ad55c93a588a4bc44d53b22855bf4be5499916ca0cab1e7165409d0b288ba2577d7b029f10ce18cf2ed8e703e5af31c984e1e2304277ef979837 +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10/2723fb822a17ad55c93a588a4bc44d53b22855bf4be5499916ca0cab1e7165409d0b288ba2577d7b029f10ce18cf2ed8e703e5af31c984e1e2304277ef979837 + languageName: node + linkType: hard + +"node-addon-api@npm:^2.0.0": + version: 2.0.2 + resolution: "node-addon-api@npm:2.0.2" + dependencies: + node-gyp: "npm:latest" + checksum: 10/e4ce4daac5b2fefa6b94491b86979a9c12d9cceba571d2c6df1eb5859f9da68e5dc198f128798e1785a88aafee6e11f4992dcccd4bf86bec90973927d158bd60 + languageName: node + linkType: hard + +"node-addon-api@npm:^5.0.0": + version: 5.1.0 + resolution: "node-addon-api@npm:5.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10/595f59ffb4630564f587c502119cbd980d302e482781021f3b479f5fc7e41cf8f2f7280fdc2795f32d148e4f3259bd15043c52d4a3442796aa6f1ae97b959636 + languageName: node + linkType: hard + +"node-addon-api@npm:^7.0.0": + version: 7.1.1 + resolution: "node-addon-api@npm:7.1.1" + dependencies: + node-gyp: "npm:latest" + checksum: 10/ee1e1ed6284a2f8cd1d59ac6175ecbabf8978dcf570345e9a8095a9d0a2b9ced591074ae77f9009287b00c402352b38aa9322a34f2199cdc9f567b842a636b94 + languageName: node + linkType: hard + +"node-fetch-native@npm:^1.6.4": + version: 1.6.4 + resolution: "node-fetch-native@npm:1.6.4" + checksum: 10/39c4c6d0c2a4bed1444943e1647ad0d79eb6638cf159bc37dffeafd22cffcf6a998e006aa1f3dd1d9d2258db7d78dee96b44bee4ba0bbaf0440ed348794f2543 + languageName: node + linkType: hard + +"node-fetch@npm:^2.6.12": + version: 2.7.0 + resolution: "node-fetch@npm:2.7.0" + dependencies: + whatwg-url: "npm:^5.0.0" + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 10/b24f8a3dc937f388192e59bcf9d0857d7b6940a2496f328381641cb616efccc9866e89ec43f2ec956bbd6c3d3ee05524ce77fe7b29ccd34692b3a16f237d6676 + languageName: node + linkType: hard + +"node-forge@npm:^1.3.1": + version: 1.3.1 + resolution: "node-forge@npm:1.3.1" + checksum: 10/05bab6868633bf9ad4c3b1dd50ec501c22ffd69f556cdf169a00998ca1d03e8107a6032ba013852f202035372021b845603aeccd7dfcb58cdb7430013b3daa8d + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.2.0, node-gyp-build@npm:^4.3.0": + version: 4.8.2 + resolution: "node-gyp-build@npm:4.8.2" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10/e3a365eed7a2d950864a1daa34527588c16fe43ae189d0aeb8fd1dfec91ba42a0e1b499322bff86c2832029fec4f5901bf26e32005e1e17a781dcd5177b6a657 languageName: node linkType: hard @@ -5981,6 +9413,20 @@ __metadata: languageName: node linkType: hard +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 10/88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20 + languageName: node + linkType: hard + +"normalize-range@npm:^0.1.2": + version: 0.1.2 + resolution: "normalize-range@npm:0.1.2" + checksum: 10/9b2f14f093593f367a7a0834267c24f3cb3e887a2d9809c77d8a7e5fd08738bcd15af46f0ab01cc3a3d660386f015816b5c922cea8bf2ee79777f40874063184 + languageName: node + linkType: hard + "npm-bundled@npm:^3.0.0": version: 3.0.1 resolution: "npm-bundled@npm:3.0.1" @@ -6054,6 +9500,15 @@ __metadata: languageName: node linkType: hard +"npm-run-path@npm:^5.1.0": + version: 5.3.0 + resolution: "npm-run-path@npm:5.3.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: 10/ae8e7a89da9594fb9c308f6555c73f618152340dcaae423e5fb3620026fefbec463618a8b761920382d666fa7a2d8d240b6fe320e8a6cdd54dc3687e2b659d25 + languageName: node + linkType: hard + "npmlog@npm:^6.0.0": version: 6.0.2 resolution: "npmlog@npm:6.0.2" @@ -6066,7 +9521,43 @@ __metadata: languageName: node linkType: hard -"once@npm:^1.3.0, once@npm:^1.4.0": +"obj-multiplex@npm:^1.0.0": + version: 1.0.0 + resolution: "obj-multiplex@npm:1.0.0" + dependencies: + end-of-stream: "npm:^1.4.0" + once: "npm:^1.4.0" + readable-stream: "npm:^2.3.3" + checksum: 10/6bdcb7d48a1cd4458a7ff0be0b3c1dc58e8e9e6504f937c10b1eac096a3d459b85d7ba32bdd9a45382bb238e245eb42ebcd91430c72f04b0a57c97f846f2d06f + languageName: node + linkType: hard + +"ofetch@npm:^1.3.4": + version: 1.4.1 + resolution: "ofetch@npm:1.4.1" + dependencies: + destr: "npm:^2.0.3" + node-fetch-native: "npm:^1.6.4" + ufo: "npm:^1.5.4" + checksum: 10/329ecd5595eff6da090c728e66f4223ad7ba5c2c309446f3707245c1b213da47dfd1eb1740f26b3da9e31ed7b7a903733bdaae85187b714514da865a0c5a4a9c + languageName: node + linkType: hard + +"ohash@npm:^1.1.4": + version: 1.1.4 + resolution: "ohash@npm:1.1.4" + checksum: 10/b11445234e59c9c2b00f357f8f00b6ba00e14c84fc0a232cdc14eb1d80066479b09d27af0201631e84b7a15ba7c4a1939f4cc47f2030e9bf83c9e8afc3ff7dfd + languageName: node + linkType: hard + +"on-exit-leak-free@npm:^0.2.0": + version: 0.2.0 + resolution: "on-exit-leak-free@npm:0.2.0" + checksum: 10/36a3a1baea964dc01088884e9d87824cc1a3304ae702e7c688bdb5deec61fbb79325977dd6cba5988f60ad40fedc6ef31ec705adf65b4b042bc0d2686186c0dd + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: @@ -6084,6 +9575,15 @@ __metadata: languageName: node linkType: hard +"onetime@npm:^6.0.0": + version: 6.0.0 + resolution: "onetime@npm:6.0.0" + dependencies: + mimic-fn: "npm:^4.0.0" + checksum: 10/0846ce78e440841335d4e9182ef69d5762e9f38aa7499b19f42ea1c4cd40f0b4446094c455c713f9adac3f4ae86f613bb5e30c99e52652764d06a89f709b3788 + languageName: node + linkType: hard + "oniguruma-to-js@npm:0.4.3": version: 0.4.3 resolution: "oniguruma-to-js@npm:0.4.3" @@ -6093,6 +9593,17 @@ __metadata: languageName: node linkType: hard +"open@npm:^8.4.0": + version: 8.4.2 + resolution: "open@npm:8.4.2" + dependencies: + define-lazy-prop: "npm:^2.0.0" + is-docker: "npm:^2.1.1" + is-wsl: "npm:^2.2.0" + checksum: 10/acd81a1d19879c818acb3af2d2e8e9d81d17b5367561e623248133deb7dd3aefaed527531df2677d3e6aaf0199f84df57b6b2262babff8bf46ea0029aac536c9 + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" @@ -6121,6 +9632,13 @@ __metadata: languageName: node linkType: hard +"outvariant@npm:^1.4.0, outvariant@npm:^1.4.3": + version: 1.4.3 + resolution: "outvariant@npm:1.4.3" + checksum: 10/3a7582745850cb344d49641867a4c080858c54f4091afd91b9c0765ba6e471c2bc841348f0fff344845ddd0a4db42fd5d68c6f7ebaf32d4b676a3a9987b2488a + languageName: node + linkType: hard + "p-filter@npm:^2.1.0": version: 2.1.0 resolution: "p-filter@npm:2.1.0" @@ -6286,6 +9804,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10/8e6c314ae6d16b83e93032c61020129f6f4484590a777eed709c4a01b50e498822b00f76ceaf94bc64dbd90b327df56ceadce27da3d83393790f1219e07721d7 + languageName: node + linkType: hard + "path-parse@npm:^1.0.7": version: 1.0.7 resolution: "path-parse@npm:1.0.7" @@ -6313,6 +9838,13 @@ __metadata: languageName: node linkType: hard +"path-to-regexp@npm:^6.3.0": + version: 6.3.0 + resolution: "path-to-regexp@npm:6.3.0" + checksum: 10/6822f686f01556d99538b350722ef761541ec0ce95ca40ce4c29e20a5b492fe8361961f57993c71b2418de12e604478dcf7c430de34b2c31a688363a7a944d9c + languageName: node + linkType: hard + "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -6320,7 +9852,7 @@ __metadata: languageName: node linkType: hard -"pathe@npm:^1.1.2": +"pathe@npm:^1.1.1, pathe@npm:^1.1.2": version: 1.1.2 resolution: "pathe@npm:1.1.2" checksum: 10/f201d796351bf7433d147b92c20eb154a4e0ea83512017bf4ec4e492a5d6e738fb45798be4259a61aa81270179fce11026f6ff0d3fa04173041de044defe9d80 @@ -6341,35 +9873,521 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.3.1": +"picocolors@npm:^1.0.1": + version: 1.1.0 + resolution: "picocolors@npm:1.1.0" + checksum: 10/a2ad60d94d185c30f2a140b19c512547713fb89b920d32cc6cf658fa786d63a37ba7b8451872c3d9fc34883971fb6e5878e07a20b60506e0bb2554dce9169ccb + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 10/60c2595003b05e4535394d1da94850f5372c9427ca4413b71210f437f7b2ca091dbd611c45e8b37d10036fa8eade25c1b8951654f9d3973bfa66a2ff4d3b08bc languageName: node linkType: hard -"pify@npm:^4.0.1": - version: 4.0.1 - resolution: "pify@npm:4.0.1" - checksum: 10/8b97cbf9dc6d4c1320cc238a2db0fc67547f9dc77011729ff353faf34f1936ea1a4d7f3c63b2f4980b253be77bcc72ea1e9e76ee3fd53cce2aafb6a8854d07ec +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 10/668c1dc8d9fc1b34b9ce3b16ba59deb39d4dc743527bf2ed908d2b914cb8ba40aa5ba6960b27c417c241531c5aafd0598feeac2d50cb15278cf9863fa6b02a77 + languageName: node + linkType: hard + +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 10/8b97cbf9dc6d4c1320cc238a2db0fc67547f9dc77011729ff353faf34f1936ea1a4d7f3c63b2f4980b253be77bcc72ea1e9e76ee3fd53cce2aafb6a8854d07ec + languageName: node + linkType: hard + +"pify@npm:^5.0.0": + version: 5.0.0 + resolution: "pify@npm:5.0.0" + checksum: 10/443e3e198ad6bfa8c0c533764cf75c9d5bc976387a163792fb553ffe6ce923887cf14eebf5aea9b7caa8eab930da8c33612990ae85bd8c2bc18bedb9eae94ecb + languageName: node + linkType: hard + +"pino-abstract-transport@npm:v0.5.0": + version: 0.5.0 + resolution: "pino-abstract-transport@npm:0.5.0" + dependencies: + duplexify: "npm:^4.1.2" + split2: "npm:^4.0.0" + checksum: 10/d304a104e5cb0c3fef62ea544a4a39bf2472a602cdd7ddb136b0671b9c324ad93fa7888825c4cf33e624802436e897081ba92440f40518b9f2dbdbc0c889e409 + languageName: node + linkType: hard + +"pino-std-serializers@npm:^4.0.0": + version: 4.0.0 + resolution: "pino-std-serializers@npm:4.0.0" + checksum: 10/cec586f9634ef0e6582f62bc8fc5ca5b6e5e11ab88fe3950c66fb0fd5d6690f66bc39cd3f27216b925d2963ad5c3bba415718819ac20ebe0390c7d056cbfea1b + languageName: node + linkType: hard + +"pino@npm:7.11.0": + version: 7.11.0 + resolution: "pino@npm:7.11.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + fast-redact: "npm:^3.0.0" + on-exit-leak-free: "npm:^0.2.0" + pino-abstract-transport: "npm:v0.5.0" + pino-std-serializers: "npm:^4.0.0" + process-warning: "npm:^1.0.0" + quick-format-unescaped: "npm:^4.0.3" + real-require: "npm:^0.1.0" + safe-stable-stringify: "npm:^2.1.0" + sonic-boom: "npm:^2.2.1" + thread-stream: "npm:^0.15.1" + bin: + pino: bin.js + checksum: 10/1c7b4b52fea76e0bc5d8b1190a0fee24279cb16d76fdb5833b32b64256fd8a94d641574b850faba5be72514f04045206b6d902a9a3f5ceae2a4296687088e073 + languageName: node + linkType: hard + +"pkg-types@npm:^1.2.0": + version: 1.2.1 + resolution: "pkg-types@npm:1.2.1" + dependencies: + confbox: "npm:^0.1.8" + mlly: "npm:^1.7.2" + pathe: "npm:^1.1.2" + checksum: 10/d61f4b7a2351b55b22f1d08f5f9b4236928d5660886131cc0e11576362e2b3bfcb54084bb4a0ba79147b707a27dcae87444a86e731113e152ffd3b6155ce5a5a + languageName: node + linkType: hard + +"platform@npm:^1.3.3": + version: 1.3.6 + resolution: "platform@npm:1.3.6" + checksum: 10/1f2d8333e23ea6a7620c828d2fc1ccbbd33e01928fb142323420506114d7325ebdeb1b38544efbf64e90ab73af0847f874d0f475b9327bcf53510fa827a4ef95 + languageName: node + linkType: hard + +"playwright-core@npm:1.48.1": + version: 1.48.1 + resolution: "playwright-core@npm:1.48.1" + bin: + playwright-core: cli.js + checksum: 10/81b51d288be78b75898470eb192ef0bc65594eebfb5f7602d83ba2505e1d2163c9923a0d7bae46779d5f3a16e1daf392acfbccde01d9f302cdf90bf2b21b8988 + languageName: node + linkType: hard + +"playwright@npm:^1.48.1": + version: 1.48.1 + resolution: "playwright@npm:1.48.1" + dependencies: + fsevents: "npm:2.3.2" + playwright-core: "npm:1.48.1" + dependenciesMeta: + fsevents: + optional: true + bin: + playwright: cli.js + checksum: 10/39e231af3d9e576ba835813c5319b8773d8536ba54c7e34c7004cf06fadb412b6bbfc91badf4bb5cda3f138e5a8994c314de4c76d06d9424430e415f86fb3dd1 + languageName: node + linkType: hard + +"pngjs@npm:^5.0.0": + version: 5.0.0 + resolution: "pngjs@npm:5.0.0" + checksum: 10/345781644740779752505af2fea3e9043f6c7cc349b18e1fb8842796360d1624791f0c24d33c0f27b05658373f90ffaa177a849e932e5fea1f540cef3975f3c9 + languageName: node + linkType: hard + +"pony-cause@npm:^2.1.10": + version: 2.1.11 + resolution: "pony-cause@npm:2.1.11" + checksum: 10/ed7d0bb6e3e69f753080bf736b71f40e6ae4c13ec0c8c473ff73345345c088819966fdd68a62ad7482d464bf41176cf9421f5f63715d1a4532005eedc099db55 + languageName: node + linkType: hard + +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: 10/8ed3e96dfeea1c5880c1f4c9cb707e5fb26e8be22f14f82ef92df20fd2004e635c62ba47fbe8f2bb63bfd80dac1474be2fb39798da8c2feba2815435d1f749af + languageName: node + linkType: hard + +"postcss-attribute-case-insensitive@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-attribute-case-insensitive@npm:6.0.3" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10/f72f87a3c4110051f2a14a0502512ad03825160881fa792f1522dfdfd59d95c9fc128a37554705f6d5a77af11e0955348d02bfb5769cc3ca3dad3cbd19f3fc20 + languageName: node + linkType: hard + +"postcss-clamp@npm:^4.1.0": + version: 4.1.0 + resolution: "postcss-clamp@npm:4.1.0" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4.6 + checksum: 10/fb38286d3e607a8b11ef28c89272bd572a077f5a496e2838c3996697bbc4cfb8f7a5be4b4a8987e6b0223db48c9ce5683c9d840f7afe54210ab0f77127628415 + languageName: node + linkType: hard + +"postcss-color-functional-notation@npm:^6.0.14": + version: 6.0.14 + resolution: "postcss-color-functional-notation@npm:6.0.14" + dependencies: + "@csstools/css-color-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/postcss-progressive-custom-properties": "npm:^3.3.0" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/a30c608477484b1386c19d58ba82260272762bdc9183930274cb9b29af16d8e0d1bbeb2bc31d54194b58d2e4945f4b683270cc5432fca9b1d8dbab6d379881cf + languageName: node + linkType: hard + +"postcss-color-hex-alpha@npm:^9.0.4": + version: 9.0.4 + resolution: "postcss-color-hex-alpha@npm:9.0.4" + dependencies: + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/30078c054438e4c330b5d6932d834a5b044fe9ff0035e098907b37e5271f0a9ba8c9db2b31f9a04ca69ec44d4961c14b031f450f44f1d5c51591c522ffdc2582 + languageName: node + linkType: hard + +"postcss-color-rebeccapurple@npm:^9.0.3": + version: 9.0.3 + resolution: "postcss-color-rebeccapurple@npm:9.0.3" + dependencies: + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/3e7142a1750837edbfb8ae7d8892990fd52a5b48bf879e9b1e186c3399dfcd2f4dd4c6a4e95d395720841b2c9af129c4a01ffb8efa0eab0d604c91bfbd503dcf + languageName: node + linkType: hard + +"postcss-custom-media@npm:^10.0.8": + version: 10.0.8 + resolution: "postcss-custom-media@npm:10.0.8" + dependencies: + "@csstools/cascade-layer-name-parser": "npm:^1.0.13" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/media-query-list-parser": "npm:^2.1.13" + peerDependencies: + postcss: ^8.4 + checksum: 10/ad770a7b4b2eddf93c6b18b3c6a8da1e918fe3098c4c0e648b901f3cd2a9190fe4a604b0fb1fb948f28ac0c7e152678548dc687228dd140323caa2eba9c1ac36 + languageName: node + linkType: hard + +"postcss-custom-properties@npm:^13.3.12": + version: 13.3.12 + resolution: "postcss-custom-properties@npm:13.3.12" + dependencies: + "@csstools/cascade-layer-name-parser": "npm:^1.0.13" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/e377c0cbf9015c7b1dba28503a7773cd6fcdc0124f308779a4b86f47e7d14f03aeee0d0fdce621cffd717dac43ed6b6ab270a8b4e5956a039fe493a65dfe5c00 + languageName: node + linkType: hard + +"postcss-custom-selectors@npm:^7.1.12": + version: 7.1.12 + resolution: "postcss-custom-selectors@npm:7.1.12" + dependencies: + "@csstools/cascade-layer-name-parser": "npm:^1.0.13" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + postcss-selector-parser: "npm:^6.1.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/5b879c2629db7b0528d8f8a90292bf291d2be3b53d57ba3b53b831341ca7c931bafbb0ed2412dc0f03fb19cd13cdaaf3ea0759f1c0722935377be859f2b9ffe4 + languageName: node + linkType: hard + +"postcss-dir-pseudo-class@npm:^8.0.1": + version: 8.0.1 + resolution: "postcss-dir-pseudo-class@npm:8.0.1" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10/64ae6fa46bb2df349fd9244fad06f0540542806c82da4e340810e737aedfe1a2d155bbe50be6d954f6c4782525f0b7eeb2fbec1562f8a377e373025ae98185a4 + languageName: node + linkType: hard + +"postcss-double-position-gradients@npm:^5.0.7": + version: 5.0.7 + resolution: "postcss-double-position-gradients@npm:5.0.7" + dependencies: + "@csstools/postcss-progressive-custom-properties": "npm:^3.3.0" + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/a05620cbfcecb39f9a9c950954b15668ecbe9f8eb83058ad7893f71227e6c6afc2880af4b6ca47bd43a909dc9b02eca1f4e41f89acd6475218185ef0624b2b74 + languageName: node + linkType: hard + +"postcss-focus-visible@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-focus-visible@npm:9.0.1" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10/867997d6ab295c60b4ca01002dd3524843dd4b8aed0090dc76a4b3bf60c824bb98379319ba896db61bf920f27626507cf15c549bd64ad653894acfd06321d70b + languageName: node + linkType: hard + +"postcss-focus-within@npm:^8.0.1": + version: 8.0.1 + resolution: "postcss-focus-within@npm:8.0.1" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10/2c9346c50aa615fd7fa1a9a2f87d84aa0e321bf674053614c20c562459b6c3a7027f486d3148cea901ccef15f5cf275c9ee7c6b77e3d61fa4addd014bd3bcd7a + languageName: node + linkType: hard + +"postcss-font-variant@npm:^5.0.0": + version: 5.0.0 + resolution: "postcss-font-variant@npm:5.0.0" + peerDependencies: + postcss: ^8.1.0 + checksum: 10/738328282cf71750f6efc72d72017f938a6e76c9c49602aae4cc4337beac6d13e72a4ade608567293cb87cad2af502e6aaef652fdcc500e09b4aba38c3e32fc6 + languageName: node + linkType: hard + +"postcss-gap-properties@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-gap-properties@npm:5.0.1" + peerDependencies: + postcss: ^8.4 + checksum: 10/82d3cee4d21220cb20201b4d9f15dedbcdc16bd108ce259bf8c848a0b3bd34fb88d1cf8e5e7799ca7afe136579270cc0af9a0883927c4809c9139b4cd969e0d0 + languageName: node + linkType: hard + +"postcss-image-set-function@npm:^6.0.3": + version: 6.0.3 + resolution: "postcss-image-set-function@npm:6.0.3" + dependencies: + "@csstools/utilities": "npm:^1.0.0" + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/0c27e43a05509a5fb280737b968404390cfc2c84a1753fb52e97cafd9991cdf861e14b5b2c139b921515b0403c694e16f6e7d668d31a16c998bff386f2c68947 + languageName: node + linkType: hard + +"postcss-lab-function@npm:^6.0.19": + version: 6.0.19 + resolution: "postcss-lab-function@npm:6.0.19" + dependencies: + "@csstools/css-color-parser": "npm:^2.0.4" + "@csstools/css-parser-algorithms": "npm:^2.7.1" + "@csstools/css-tokenizer": "npm:^2.4.1" + "@csstools/postcss-progressive-custom-properties": "npm:^3.3.0" + "@csstools/utilities": "npm:^1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/e260d6d3f30396ec4770c5f91c9d5eb5de6ef4d11d4db235fc9947edf6904d046bf10783b0766c2dc3eb0ea124991725c4b81d2e9ffa53289c5cb0d3b7d55b12 + languageName: node + linkType: hard + +"postcss-logical@npm:^7.0.1": + version: 7.0.1 + resolution: "postcss-logical@npm:7.0.1" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/15e671ec72e12e304aef2ab2a999408e5957e7084fe687eb3957854e3343de2c3243a6d30b2a3c8fe19c627f453bf136d4e06584f1f8f1799d77cc641c7da5b4 + languageName: node + linkType: hard + +"postcss-nesting@npm:^12.1.5": + version: 12.1.5 + resolution: "postcss-nesting@npm:12.1.5" + dependencies: + "@csstools/selector-resolve-nested": "npm:^1.1.0" + "@csstools/selector-specificity": "npm:^3.1.1" + postcss-selector-parser: "npm:^6.1.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/fe2632b4c7f81249bbea21f9f6dce327d06eb76efb8bf5d47c5a780fc2f8b48a26b61e85cebbc19588d079b750e5ab670eca93716fa36a9388ba231044906669 + languageName: node + linkType: hard + +"postcss-opacity-percentage@npm:^2.0.0": + version: 2.0.0 + resolution: "postcss-opacity-percentage@npm:2.0.0" + peerDependencies: + postcss: ^8.2 + checksum: 10/57948eb722fef5c733eb598fca93e92b364b91c565bd2fd35c59234bf52f797df613be8c790a77c85700d4a62172cfb2e21d4e313093cd32023531190b8e20d4 + languageName: node + linkType: hard + +"postcss-overflow-shorthand@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-overflow-shorthand@npm:5.0.1" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/968ba209c17006d3f4bea05564e916126861fa64dd33d828032f4d94164b6a1d697cd7ff03f61ed81d02eabdd1aefb07fc5121286450da27f4f9f0770b3b8bc8 + languageName: node + linkType: hard + +"postcss-page-break@npm:^3.0.4": + version: 3.0.4 + resolution: "postcss-page-break@npm:3.0.4" + peerDependencies: + postcss: ^8 + checksum: 10/a7d08c945fc691f62c77ac701e64722218b14ec5c8fc1972b8af9c21553492d40808cf95e61b9697b1dacaf7e6180636876d7fee314f079e6c9e39ac1b1edc6f + languageName: node + linkType: hard + +"postcss-place@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-place@npm:9.0.1" + dependencies: + postcss-value-parser: "npm:^4.2.0" + peerDependencies: + postcss: ^8.4 + checksum: 10/b4833784e1b0f6366f648e96416e7c571e4c1b51425a337b7c411c20614177c0810379ac27ddd804a06feb428c04c509df69f8bd591a4c6b01292d6c1aa61699 + languageName: node + linkType: hard + +"postcss-preset-env@npm:^9.6.0": + version: 9.6.0 + resolution: "postcss-preset-env@npm:9.6.0" + dependencies: + "@csstools/postcss-cascade-layers": "npm:^4.0.6" + "@csstools/postcss-color-function": "npm:^3.0.19" + "@csstools/postcss-color-mix-function": "npm:^2.0.19" + "@csstools/postcss-content-alt-text": "npm:^1.0.0" + "@csstools/postcss-exponential-functions": "npm:^1.0.9" + "@csstools/postcss-font-format-keywords": "npm:^3.0.2" + "@csstools/postcss-gamut-mapping": "npm:^1.0.11" + "@csstools/postcss-gradients-interpolation-method": "npm:^4.0.20" + "@csstools/postcss-hwb-function": "npm:^3.0.18" + "@csstools/postcss-ic-unit": "npm:^3.0.7" + "@csstools/postcss-initial": "npm:^1.0.1" + "@csstools/postcss-is-pseudo-class": "npm:^4.0.8" + "@csstools/postcss-light-dark-function": "npm:^1.0.8" + "@csstools/postcss-logical-float-and-clear": "npm:^2.0.1" + "@csstools/postcss-logical-overflow": "npm:^1.0.1" + "@csstools/postcss-logical-overscroll-behavior": "npm:^1.0.1" + "@csstools/postcss-logical-resize": "npm:^2.0.1" + "@csstools/postcss-logical-viewport-units": "npm:^2.0.11" + "@csstools/postcss-media-minmax": "npm:^1.1.8" + "@csstools/postcss-media-queries-aspect-ratio-number-values": "npm:^2.0.11" + "@csstools/postcss-nested-calc": "npm:^3.0.2" + "@csstools/postcss-normalize-display-values": "npm:^3.0.2" + "@csstools/postcss-oklab-function": "npm:^3.0.19" + "@csstools/postcss-progressive-custom-properties": "npm:^3.3.0" + "@csstools/postcss-relative-color-syntax": "npm:^2.0.19" + "@csstools/postcss-scope-pseudo-class": "npm:^3.0.1" + "@csstools/postcss-stepped-value-functions": "npm:^3.0.10" + "@csstools/postcss-text-decoration-shorthand": "npm:^3.0.7" + "@csstools/postcss-trigonometric-functions": "npm:^3.0.10" + "@csstools/postcss-unset-value": "npm:^3.0.1" + autoprefixer: "npm:^10.4.19" + browserslist: "npm:^4.23.1" + css-blank-pseudo: "npm:^6.0.2" + css-has-pseudo: "npm:^6.0.5" + css-prefers-color-scheme: "npm:^9.0.1" + cssdb: "npm:^8.1.0" + postcss-attribute-case-insensitive: "npm:^6.0.3" + postcss-clamp: "npm:^4.1.0" + postcss-color-functional-notation: "npm:^6.0.14" + postcss-color-hex-alpha: "npm:^9.0.4" + postcss-color-rebeccapurple: "npm:^9.0.3" + postcss-custom-media: "npm:^10.0.8" + postcss-custom-properties: "npm:^13.3.12" + postcss-custom-selectors: "npm:^7.1.12" + postcss-dir-pseudo-class: "npm:^8.0.1" + postcss-double-position-gradients: "npm:^5.0.7" + postcss-focus-visible: "npm:^9.0.1" + postcss-focus-within: "npm:^8.0.1" + postcss-font-variant: "npm:^5.0.0" + postcss-gap-properties: "npm:^5.0.1" + postcss-image-set-function: "npm:^6.0.3" + postcss-lab-function: "npm:^6.0.19" + postcss-logical: "npm:^7.0.1" + postcss-nesting: "npm:^12.1.5" + postcss-opacity-percentage: "npm:^2.0.0" + postcss-overflow-shorthand: "npm:^5.0.1" + postcss-page-break: "npm:^3.0.4" + postcss-place: "npm:^9.0.1" + postcss-pseudo-class-any-link: "npm:^9.0.2" + postcss-replace-overflow-wrap: "npm:^4.0.0" + postcss-selector-not: "npm:^7.0.2" + peerDependencies: + postcss: ^8.4 + checksum: 10/5bf801786a3cbfbbc9e48dfd57a7516e1fd31319806251760751e5e718044f493c6849d8f48f20b4a96a2e2b7d4c5a8c7d7ebc8552dd8a12e4e6f89a18be43ec + languageName: node + linkType: hard + +"postcss-pseudo-class-any-link@npm:^9.0.2": + version: 9.0.2 + resolution: "postcss-pseudo-class-any-link@npm:9.0.2" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10/5bfbe04d93406de51a8ebb083702196f49160f2b66aa8b09805764d4fddf173b7d3d652d8e81488c043834396889307b0f2fbc78c848bf84b77956d2378e9bd8 + languageName: node + linkType: hard + +"postcss-replace-overflow-wrap@npm:^4.0.0": + version: 4.0.0 + resolution: "postcss-replace-overflow-wrap@npm:4.0.0" + peerDependencies: + postcss: ^8.0.3 + checksum: 10/0629ec17deae65e27dc3059ecec1c6bc833ee65291093b476fce151ab0af45c9e1a56ce250eb9ec4bbc306c19ab318cc982fdbcca8651d347d7dfaa3c9fc9201 + languageName: node + linkType: hard + +"postcss-selector-not@npm:^7.0.2": + version: 7.0.2 + resolution: "postcss-selector-not@npm:7.0.2" + dependencies: + postcss-selector-parser: "npm:^6.0.13" + peerDependencies: + postcss: ^8.4 + checksum: 10/51e422d9bd6e4935f598b68ac12ec2c38c5208d43ca43193706a2caafa0fdb461961ccc9fed27f6d3c06f61857a706a6cefbc50e667f707369121182180867d0 languageName: node linkType: hard -"platform@npm:^1.3.3": - version: 1.3.6 - resolution: "platform@npm:1.3.6" - checksum: 10/1f2d8333e23ea6a7620c828d2fc1ccbbd33e01928fb142323420506114d7325ebdeb1b38544efbf64e90ab73af0847f874d0f475b9327bcf53510fa827a4ef95 +"postcss-selector-parser@npm:^6.0.13, postcss-selector-parser@npm:^6.1.0": + version: 6.1.2 + resolution: "postcss-selector-parser@npm:6.1.2" + dependencies: + cssesc: "npm:^3.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10/190034c94d809c115cd2f32ee6aade84e933450a43ec3899c3e78e7d7b33efd3a2a975bb45d7700b6c5b196c06a7d9acf3f1ba6f1d87032d9675a29d8bca1dd3 languageName: node linkType: hard -"pony-cause@npm:^2.1.10": - version: 2.1.11 - resolution: "pony-cause@npm:2.1.11" - checksum: 10/ed7d0bb6e3e69f753080bf736b71f40e6ae4c13ec0c8c473ff73345345c088819966fdd68a62ad7482d464bf41176cf9421f5f63715d1a4532005eedc099db55 +"postcss-value-parser@npm:^4.2.0": + version: 4.2.0 + resolution: "postcss-value-parser@npm:4.2.0" + checksum: 10/e4e4486f33b3163a606a6ed94f9c196ab49a37a7a7163abfcd469e5f113210120d70b8dd5e33d64636f41ad52316a3725655421eb9a1094f1bcab1db2f555c62 languageName: node linkType: hard -"postcss@npm:^8.4.43": +"postcss@npm:^8.4.39, postcss@npm:^8.4.43": version: 8.4.47 resolution: "postcss@npm:8.4.47" dependencies: @@ -6380,6 +10398,13 @@ __metadata: languageName: node linkType: hard +"preact@npm:^10.16.0": + version: 10.24.2 + resolution: "preact@npm:10.24.2" + checksum: 10/12b13122ccddb06533daef5ff00ddd4c6a4307f008a235c0b006e72a63c99a33403428f76e8e5e184af8daec344c10a26ce082fb07a62d7c4d6383e9f8e71ee4 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -6429,6 +10454,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^27.0.2": + version: 27.5.1 + resolution: "pretty-format@npm:27.5.1" + dependencies: + ansi-regex: "npm:^5.0.1" + ansi-styles: "npm:^5.0.0" + react-is: "npm:^17.0.1" + checksum: 10/248990cbef9e96fb36a3e1ae6b903c551ca4ddd733f8d0912b9cc5141d3d0b3f9f8dfb4d799fb1c6723382c9c2083ffbfa4ad43ff9a0e7535d32d41fd5f01da6 + languageName: node + linkType: hard + "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" @@ -6443,6 +10479,20 @@ __metadata: languageName: node linkType: hard +"process-nextick-args@npm:~2.0.0": + version: 2.0.1 + resolution: "process-nextick-args@npm:2.0.1" + checksum: 10/1d38588e520dab7cea67cbbe2efdd86a10cc7a074c09657635e34f035277b59fbb57d09d8638346bf7090f8e8ebc070c96fa5fd183b777fff4f5edff5e9466cf + languageName: node + linkType: hard + +"process-warning@npm:^1.0.0": + version: 1.0.0 + resolution: "process-warning@npm:1.0.0" + checksum: 10/8736d11d8d71c349d176e210305e84d74b13af06efb3c779377b056bfd608257d1e4e32b8fbbf90637c900f0313e40f7c9f583140884f667a21fc10a869b840c + languageName: node + linkType: hard + "process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" @@ -6494,6 +10544,13 @@ __metadata: languageName: node linkType: hard +"proxy-compare@npm:2.5.1": + version: 2.5.1 + resolution: "proxy-compare@npm:2.5.1" + checksum: 10/64b6277d08d89f0b2c468a84decf43f82a4e88da7075651e6adebc69d1b87fadc17cfeb43c024c00b65faa3f0908f7ac1e61f5f6849a404a547a742e6aa527a6 + languageName: node + linkType: hard + "pseudomap@npm:^1.0.2": version: 1.0.2 resolution: "pseudomap@npm:1.0.2" @@ -6501,6 +10558,23 @@ __metadata: languageName: node linkType: hard +"psl@npm:^1.1.33": + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 10/d07879d4bfd0ac74796306a8e5a36a93cfb9c4f4e8ee8e63fbb909066c192fe1008cd8f12abd8ba2f62ca28247949a20c8fb32e1d18831d9e71285a1569720f9 + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.2 + resolution: "pump@npm:3.0.2" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10/e0c4216874b96bd25ddf31a0b61a5613e26cc7afa32379217cf39d3915b0509def3565f5f6968fafdad2894c8bbdbd67d340e84f3634b2a29b950cffb6442d9f + languageName: node + linkType: hard + "punycode.js@npm:^2.3.1": version: 2.3.1 resolution: "punycode.js@npm:2.3.1" @@ -6508,13 +10582,84 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: 10/febdc4362bead22f9e2608ff0171713230b57aff9dddc1c273aa2a651fbd366f94b7d6a71d78342a7c0819906750351ca7f2edd26ea41b626d87d6a13d1bd059 languageName: node linkType: hard +"qr-code-styling@npm:^1.6.0-rc.1": + version: 1.6.0-rc.1 + resolution: "qr-code-styling@npm:1.6.0-rc.1" + dependencies: + qrcode-generator: "npm:^1.4.3" + checksum: 10/5654e75497eae7123143bd8fc87afae3b03e01b24f7cbd2c08df20e84f412d0ac1309191c89c9590396b8d38ba37ef15ea6461713c7cea0c710f8a2dbdeec892 + languageName: node + linkType: hard + +"qrcode-generator@npm:^1.4.3": + version: 1.4.4 + resolution: "qrcode-generator@npm:1.4.4" + checksum: 10/65b2bba237d1f230eba0d08ae4267d04f326859c2265775ade99191be1b522158b623fcc0b613bbfc9d4edbbafb928fc41c66d61053b333f2eb0bcedb2ebadca + languageName: node + linkType: hard + +"qrcode-terminal-nooctal@npm:^0.12.1": + version: 0.12.1 + resolution: "qrcode-terminal-nooctal@npm:0.12.1" + bin: + qrcode-terminal: bin/qrcode-terminal.js + checksum: 10/8f437f9e95d8211c3b4eb3de572abd8e9695efa51b327e68e843fcbc2f017e32d6407caf4d8a8dca64d2d1270cf1cc1b16ebb6f2a69a1f891df430e8efdef66a + languageName: node + linkType: hard + +"qrcode@npm:1.5.3": + version: 1.5.3 + resolution: "qrcode@npm:1.5.3" + dependencies: + dijkstrajs: "npm:^1.0.1" + encode-utf8: "npm:^1.0.3" + pngjs: "npm:^5.0.0" + yargs: "npm:^15.3.1" + bin: + qrcode: bin/qrcode + checksum: 10/823642d59a81ba5f406a1e78415fee37fd53856038f49a85c4ca7aa32ba6b8505ab059a832718ac16612bed75aa2a18584faae38cf3c25e2c90fb19b8c55fe46 + languageName: node + linkType: hard + +"qrcode@npm:1.5.4": + version: 1.5.4 + resolution: "qrcode@npm:1.5.4" + dependencies: + dijkstrajs: "npm:^1.0.1" + pngjs: "npm:^5.0.0" + yargs: "npm:^15.3.1" + bin: + qrcode: bin/qrcode + checksum: 10/9a1b61760e4ea334545a0f54bbc11c537aba0a17cf52cab9fa1b07f8a1337eed0bc6f7fde41b197f2c82c249bc48728983bfaf861bb7ecb29dc597b2ae33c424 + languageName: node + linkType: hard + +"query-string@npm:7.1.3": + version: 7.1.3 + resolution: "query-string@npm:7.1.3" + dependencies: + decode-uri-component: "npm:^0.2.2" + filter-obj: "npm:^1.1.0" + split-on-first: "npm:^1.0.0" + strict-uri-encode: "npm:^2.0.0" + checksum: 10/3b6f2c167e76ca4094c5f1a9eb276efcbb9ebfd8b1a28c413f3c4e4e7d6428c8187bf46c8cbc9f92a229369dd0015de10a7fd712c8cee98d5d84c2ac6140357e + languageName: node + linkType: hard + +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 10/46ab16f252fd892fc29d6af60966d338cdfeea68a231e9457631ffd22d67cec1e00141e0a5236a2eb16c0d7d74175d9ec1d6f963660c6f2b1c2fc85b194c5680 + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -6522,6 +10667,20 @@ __metadata: languageName: node linkType: hard +"quick-format-unescaped@npm:^4.0.3": + version: 4.0.4 + resolution: "quick-format-unescaped@npm:4.0.4" + checksum: 10/591eca457509a99368b623db05248c1193aa3cedafc9a077d7acab09495db1231017ba3ad1b5386e5633271edd0a03b312d8640a59ee585b8516a42e15438aa7 + languageName: node + linkType: hard + +"radix3@npm:^1.1.2": + version: 1.1.2 + resolution: "radix3@npm:1.1.2" + checksum: 10/5ed01a8e4b753e325c6ecb01d993de77f690e548ef9e149e7dc403ee7b109c2cb41e3d09bc3ce004d872c67c8dca1d556dbf7808b1ac7df9f86994e57d757557 + languageName: node + linkType: hard + "randombytes@npm:^2.1.0": version: 2.1.0 resolution: "randombytes@npm:2.1.0" @@ -6531,6 +10690,106 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:^18.3.1": + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" + dependencies: + loose-envify: "npm:^1.1.0" + scheduler: "npm:^0.23.2" + peerDependencies: + react: ^18.3.1 + checksum: 10/3f4b73a3aa083091173b29812b10394dd06f4ac06aff410b74702cfb3aa29d7b0ced208aab92d5272919b612e5cda21aeb1d54191848cf6e46e9e354f3541f81 + languageName: node + linkType: hard + +"react-is@npm:^17.0.1": + version: 17.0.2 + resolution: "react-is@npm:17.0.2" + checksum: 10/73b36281e58eeb27c9cc6031301b6ae19ecdc9f18ae2d518bdb39b0ac564e65c5779405d623f1df9abf378a13858b79442480244bd579968afc1faf9a2ce5e05 + languageName: node + linkType: hard + +"react-native-webview@npm:^11.26.0": + version: 11.26.1 + resolution: "react-native-webview@npm:11.26.1" + dependencies: + escape-string-regexp: "npm:2.0.0" + invariant: "npm:2.2.4" + peerDependencies: + react: "*" + react-native: "*" + checksum: 10/d64123c73e7795096434135a1bec2aef5caf71a4c1c95b1416cc528bc55f5c4a89df2d311ad3637594f120e864b5798e2c4ea4eb7153bf938ad167c54e7a7e61 + languageName: node + linkType: hard + +"react-refresh@npm:^0.14.2": + version: 0.14.2 + resolution: "react-refresh@npm:0.14.2" + checksum: 10/512abf97271ab8623486061be04b608c39d932e3709f9af1720b41573415fa4993d0009fa5138b6705b60a98f4102f744d4e26c952b14f41a0e455521c6be4cc + languageName: node + linkType: hard + +"react-remove-scroll-bar@npm:^2.3.6": + version: 2.3.6 + resolution: "react-remove-scroll-bar@npm:2.3.6" + dependencies: + react-style-singleton: "npm:^2.2.1" + tslib: "npm:^2.0.0" + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10/5ab8eda61d5b10825447d11e9c824486c929351a471457c22452caa19b6898e18c3af6a46c3fa68010c713baed1eb9956106d068b4a1058bdcf97a1a9bbed734 + languageName: node + linkType: hard + +"react-remove-scroll@npm:2.6.0": + version: 2.6.0 + resolution: "react-remove-scroll@npm:2.6.0" + dependencies: + react-remove-scroll-bar: "npm:^2.3.6" + react-style-singleton: "npm:^2.2.1" + tslib: "npm:^2.1.0" + use-callback-ref: "npm:^1.3.0" + use-sidecar: "npm:^1.1.2" + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10/9fac79e1c2ed2c85729bfe82f61ef4ae5ce51f478736a13892a9a11e05cbd4e9599f9f0e012cb5fc0719e18dc1dd687ab61f516193228615df636db8b851245e + languageName: node + linkType: hard + +"react-style-singleton@npm:^2.2.1": + version: 2.2.1 + resolution: "react-style-singleton@npm:2.2.1" + dependencies: + get-nonce: "npm:^1.0.0" + invariant: "npm:^2.2.4" + tslib: "npm:^2.0.0" + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10/80c58fd6aac3594e351e2e7b048d8a5b09508adb21031a38b3c40911fe58295572eddc640d4b20a7be364842c8ed1120fe30097e22ea055316b375b88d4ff02a + languageName: node + linkType: hard + +"react@npm:^18.3.1": + version: 18.3.1 + resolution: "react@npm:18.3.1" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 10/261137d3f3993eaa2368a83110466fc0e558bc2c7f7ae7ca52d94f03aac945f45146bd85e5f481044db1758a1dbb57879e2fcdd33924e2dde1bdc550ce73f7bf + languageName: node + linkType: hard + "read-package-json-fast@npm:^3.0.0": version: 3.0.2 resolution: "read-package-json-fast@npm:3.0.2" @@ -6565,7 +10824,22 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": +"readable-stream@npm:^2.3.3": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" + dependencies: + core-util-is: "npm:~1.0.0" + inherits: "npm:~2.0.3" + isarray: "npm:~1.0.0" + process-nextick-args: "npm:~2.0.0" + safe-buffer: "npm:~5.1.1" + string_decoder: "npm:~1.1.1" + util-deprecate: "npm:~1.0.1" + checksum: 10/8500dd3a90e391d6c5d889256d50ec6026c059fadee98ae9aa9b86757d60ac46fff24fafb7a39fa41d54cb39d8be56cc77be202ebd4cd8ffcf4cb226cbaa40d4 + languageName: node + linkType: hard + +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -6589,6 +10863,32 @@ __metadata: languageName: node linkType: hard +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: "npm:^2.2.1" + checksum: 10/196b30ef6ccf9b6e18c4e1724b7334f72a093d011a99f3b5920470f0b3406a51770867b3e1ae9711f227ef7a7065982f6ee2ce316746b2cb42c88efe44297fe7 + languageName: node + linkType: hard + +"real-require@npm:^0.1.0": + version: 0.1.0 + resolution: "real-require@npm:0.1.0" + checksum: 10/0ba1c440dc9b7777d35a97f755312bf236be0847249f76cc9789c5c08d141f5d80b8564888e6a94ed0253fabf597b6892f8502c4e5658fb98f88642633a39723 + languageName: node + linkType: hard + +"redent@npm:^3.0.0": + version: 3.0.0 + resolution: "redent@npm:3.0.0" + dependencies: + indent-string: "npm:^4.0.0" + strip-indent: "npm:^3.0.0" + checksum: 10/fa1ef20404a2d399235e83cc80bd55a956642e37dd197b4b612ba7327bf87fa32745aeb4a1634b2bab25467164ab4ed9c15be2c307923dd08b0fe7c52431ae6b + languageName: node + linkType: hard + "regenerator-runtime@npm:^0.14.0": version: 0.14.1 resolution: "regenerator-runtime@npm:0.14.1" @@ -6603,6 +10903,27 @@ __metadata: languageName: node linkType: hard +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10/a72468e2589270d91f06c7d36ec97a88db53ae5d6fe3787fadc943f0b0276b10347f89b363b2a82285f650bdcc135ad4a257c61bdd4d00d6df1fa24875b0ddaf + languageName: node + linkType: hard + +"require-main-filename@npm:^2.0.0": + version: 2.0.0 + resolution: "require-main-filename@npm:2.0.0" + checksum: 10/8604a570c06a69c9d939275becc33a65676529e1c3e5a9f42d58471674df79357872b96d70bb93a0380a62d60dc9031c98b1a9dad98c946ffdd61b7ac0c8cedd + languageName: node + linkType: hard + +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: 10/878880ee78ccdce372784f62f52a272048e2d0827c29ae31e7f99da18b62a2b9463ea03a75f277352f4697c100183debb0532371ad515a2d49d4bfe596dd4c20 + languageName: node + linkType: hard + "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -6733,7 +11054,26 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.20.0, rollup@npm:^4.24.0": +"rollup-plugin-visualizer@npm:^5.9.2": + version: 5.12.0 + resolution: "rollup-plugin-visualizer@npm:5.12.0" + dependencies: + open: "npm:^8.4.0" + picomatch: "npm:^2.3.1" + source-map: "npm:^0.7.4" + yargs: "npm:^17.5.1" + peerDependencies: + rollup: 2.x || 3.x || 4.x + peerDependenciesMeta: + rollup: + optional: true + bin: + rollup-plugin-visualizer: dist/bin/cli.js + checksum: 10/47358feb672291d6edcfd94197577c192a84c24cb644119425dae8241fb6f5a52556efd0c501f38b276c07534642a80c0885ef681babb474e83c7b5a3b475b84 + languageName: node + linkType: hard + +"rollup@npm:^4.18.1, rollup@npm:^4.20.0, rollup@npm:^4.24.0": version: 4.24.0 resolution: "rollup@npm:4.24.0" dependencies: @@ -6814,20 +11154,27 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10/32872cd0ff68a3ddade7a7617b8f4c2ae8764d8b7d884c651b74457967a9e0e886267d3ecc781220629c44a865167b61c375d2da6c720c840ecd73f45d5d9451 languageName: node linkType: hard -"safe-buffer@npm:~5.1.1": +"safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" checksum: 10/7eb5b48f2ed9a594a4795677d5a150faa7eb54483b2318b568dc0c4fc94092a6cce5be02c7288a0500a156282f5276d5688bce7259299568d1053b2150ef374a languageName: node linkType: hard +"safe-stable-stringify@npm:^2.1.0": + version: 2.5.0 + resolution: "safe-stable-stringify@npm:2.5.0" + checksum: 10/2697fa186c17c38c3ca5309637b4ac6de2f1c3d282da27cd5e1e3c88eca0fb1f9aea568a6aabdf284111592c8782b94ee07176f17126031be72ab1313ed46c5c + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -6835,6 +11182,15 @@ __metadata: languageName: node linkType: hard +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" + dependencies: + loose-envify: "npm:^1.1.0" + checksum: 10/e8d68b89d18d5b028223edf090092846868a765a591944760942b77ea1f69b17235f7e956696efbb62c8130ab90af7e0949bfb8eba7896335507317236966bc9 + languageName: node + linkType: hard + "scrypt-js@npm:3.0.1": version: 3.0.1 resolution: "scrypt-js@npm:3.0.1" @@ -6842,6 +11198,18 @@ __metadata: languageName: node linkType: hard +"secp256k1@npm:^5.0.0": + version: 5.0.0 + resolution: "secp256k1@npm:5.0.0" + dependencies: + elliptic: "npm:^6.5.4" + node-addon-api: "npm:^5.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.2.0" + checksum: 10/6e146c876ef202dbfbb35836d6ccd0ea3779dc09bad632bb9e0fe2e702848a4ee96638f39da54895430de832232d6292d858529e2eda56db3ddda13e40d7facc + languageName: node + linkType: hard + "semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" @@ -6851,7 +11219,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0": +"semver@npm:^7.1.1, semver@npm:^7.3.5, semver@npm:^7.3.8, semver@npm:^7.5.2, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:^7.6.0": version: 7.6.3 resolution: "semver@npm:7.6.3" bin: @@ -6876,6 +11244,32 @@ __metadata: languageName: node linkType: hard +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10/505d62b8e088468917ca4e3f8f39d0e29f9a563b97dbebf92f4bd2c3172ccfb3c5b8e4566d5fcd00784a00433900e7cb8fbc404e2dbd8c3818ba05bb9d4a8a6d + languageName: node + linkType: hard + +"sha.js@npm:^2.4.11": + version: 2.4.11 + resolution: "sha.js@npm:2.4.11" + dependencies: + inherits: "npm:^2.0.1" + safe-buffer: "npm:^5.0.1" + bin: + sha.js: ./bin.js + checksum: 10/d833bfa3e0a67579a6ce6e1bc95571f05246e0a441dd8c76e3057972f2a3e098465687a4369b07e83a0375a88703577f71b5b2e966809e67ebc340dbedb478c7 + languageName: node + linkType: hard + "shebang-command@npm:^1.2.0": version: 1.2.0 resolution: "shebang-command@npm:1.2.0" @@ -6936,7 +11330,7 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^4.0.1": +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" checksum: 10/c9fa63bbbd7431066174a48ba2dd9986dfd930c3a8b59de9c29d7b6854ec1c12a80d15310869ea5166d413b99f041bfa3dd80a7947bcd44ea8e6eb3ffeabfa1f @@ -6958,6 +11352,17 @@ __metadata: languageName: node linkType: hard +"sirv@npm:^2.0.4": + version: 2.0.4 + resolution: "sirv@npm:2.0.4" + dependencies: + "@polka/url": "npm:^1.0.0-next.24" + mrmime: "npm:^2.0.0" + totalist: "npm:^3.0.0" + checksum: 10/24f42cf06895017e589c9d16fc3f1c6c07fe8b0dbafce8a8b46322cfba67b7f2498610183954cb0e9d089c8cb60002a7ee7e8bca6a91a0d7042bfbc3473c95c3 + languageName: node + linkType: hard + "slash@npm:^3.0.0": version: 3.0.0 resolution: "slash@npm:3.0.0" @@ -6997,6 +11402,28 @@ __metadata: languageName: node linkType: hard +"socket.io-client@npm:^4.5.1": + version: 4.8.0 + resolution: "socket.io-client@npm:4.8.0" + dependencies: + "@socket.io/component-emitter": "npm:~3.1.0" + debug: "npm:~4.3.2" + engine.io-client: "npm:~6.6.1" + socket.io-parser: "npm:~4.2.4" + checksum: 10/98e05a6e3b19e6bae39bedbb6fd07e970e90c962b6ab9b68c4968a789be84efe40129b7f8abc73bafa31a29d444c3a0bde992131f93e7c3ddb27ef5192131e08 + languageName: node + linkType: hard + +"socket.io-parser@npm:~4.2.4": + version: 4.2.4 + resolution: "socket.io-parser@npm:4.2.4" + dependencies: + "@socket.io/component-emitter": "npm:~3.1.0" + debug: "npm:~4.3.1" + checksum: 10/4be500a9ff7e79c50ec25af11048a3ed34b4c003a9500d656786a1e5bceae68421a8394cf3eb0aa9041f85f36c1a9a737617f4aee91a42ab4ce16ffb2aa0c89c + languageName: node + linkType: hard + "socks-proxy-agent@npm:^7.0.0": version: 7.0.0 resolution: "socks-proxy-agent@npm:7.0.0" @@ -7029,6 +11456,15 @@ __metadata: languageName: node linkType: hard +"sonic-boom@npm:^2.2.1": + version: 2.8.0 + resolution: "sonic-boom@npm:2.8.0" + dependencies: + atomic-sleep: "npm:^1.0.0" + checksum: 10/05351d9f44bac59b2a4ab42ee22bf81b8c3bbd22db20183d78d5f2067557eb623e0eaf93b2bc0f8417bee92ca372bc26e0d83e3bdb0ffebcc33738ac1c191876 + languageName: node + linkType: hard + "sort-object-keys@npm:^1.1.3": version: 1.1.3 resolution: "sort-object-keys@npm:1.1.3" @@ -7078,6 +11514,13 @@ __metadata: languageName: node linkType: hard +"source-map@npm:^0.7.4": + version: 0.7.4 + resolution: "source-map@npm:0.7.4" + checksum: 10/a0f7c9b797eda93139842fd28648e868a9a03ea0ad0d9fa6602a0c1f17b7fb6a7dcca00c144476cccaeaae5042e99a285723b1a201e844ad67221bf5d428f1dc + languageName: node + linkType: hard + "space-separated-tokens@npm:^2.0.0": version: 2.0.2 resolution: "space-separated-tokens@npm:2.0.2" @@ -7129,6 +11572,20 @@ __metadata: languageName: node linkType: hard +"split-on-first@npm:^1.0.0": + version: 1.1.0 + resolution: "split-on-first@npm:1.1.0" + checksum: 10/16ff85b54ddcf17f9147210a4022529b343edbcbea4ce977c8f30e38408b8d6e0f25f92cd35b86a524d4797f455e29ab89eb8db787f3c10708e0b47ebf528d30 + languageName: node + linkType: hard + +"split2@npm:^4.0.0": + version: 4.2.0 + resolution: "split2@npm:4.2.0" + checksum: 10/09bbefc11bcf03f044584c9764cd31a252d8e52cea29130950b26161287c11f519807c5e54bd9e5804c713b79c02cefe6a98f4688630993386be353e03f534ab + languageName: node + linkType: hard + "sprintf-js@npm:^1.1.3": version: 1.1.3 resolution: "sprintf-js@npm:1.1.3" @@ -7168,6 +11625,13 @@ __metadata: languageName: node linkType: hard +"statuses@npm:^2.0.1": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 10/18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb + languageName: node + linkType: hard + "std-env@npm:^3.7.0": version: 3.7.0 resolution: "std-env@npm:3.7.0" @@ -7175,7 +11639,28 @@ __metadata: languageName: node linkType: hard -"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": +"stream-shift@npm:^1.0.2": + version: 1.0.3 + resolution: "stream-shift@npm:1.0.3" + checksum: 10/a24c0a3f66a8f9024bd1d579a533a53be283b4475d4e6b4b3211b964031447bdf6532dd1f3c2b0ad66752554391b7c62bd7ca4559193381f766534e723d50242 + languageName: node + linkType: hard + +"strict-event-emitter@npm:^0.5.1": + version: 0.5.1 + resolution: "strict-event-emitter@npm:0.5.1" + checksum: 10/25c84d88be85940d3547db665b871bfecea4ea0bedfeb22aae8db48126820cfb2b0bc2fba695392592a09b1aa36b686d6eede499e1ecd151593c03fe5a50d512 + languageName: node + linkType: hard + +"strict-uri-encode@npm:^2.0.0": + version: 2.0.0 + resolution: "strict-uri-encode@npm:2.0.0" + checksum: 10/eaac4cf978b6fbd480f1092cab8b233c9b949bcabfc9b598dd79a758f7243c28765ef7639c876fa72940dac687181b35486ea01ff7df3e65ce3848c64822c581 + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -7206,6 +11691,15 @@ __metadata: languageName: node linkType: hard +"string_decoder@npm:~1.1.1": + version: 1.1.1 + resolution: "string_decoder@npm:1.1.1" + dependencies: + safe-buffer: "npm:~5.1.0" + checksum: 10/7c41c17ed4dea105231f6df208002ebddd732e8e9e2d619d133cecd8e0087ddfd9587d2feb3c8caf3213cbd841ada6d057f5142cae68a4e62d3540778d9819b4 + languageName: node + linkType: hard + "stringify-entities@npm:^4.0.0": version: 4.0.4 resolution: "stringify-entities@npm:4.0.4" @@ -7236,8 +11730,24 @@ __metadata: "strip-bom@npm:^3.0.0": version: 3.0.0 - resolution: "strip-bom@npm:3.0.0" - checksum: 10/8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b + resolution: "strip-bom@npm:3.0.0" + checksum: 10/8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b + languageName: node + linkType: hard + +"strip-final-newline@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-final-newline@npm:3.0.0" + checksum: 10/23ee263adfa2070cd0f23d1ac14e2ed2f000c9b44229aec9c799f1367ec001478469560abefd00c5c99ee6f0b31c137d53ec6029c53e9f32a93804e18c201050 + languageName: node + linkType: hard + +"strip-indent@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-indent@npm:3.0.0" + dependencies: + min-indent: "npm:^1.0.0" + checksum: 10/18f045d57d9d0d90cd16f72b2313d6364fd2cb4bf85b9f593523ad431c8720011a4d5f08b6591c9d580f446e78855c5334a30fb91aa1560f5d9f95ed1b4a0530 languageName: node linkType: hard @@ -7248,6 +11758,13 @@ __metadata: languageName: node linkType: hard +"superstruct@npm:^1.0.3": + version: 1.0.4 + resolution: "superstruct@npm:1.0.4" + checksum: 10/9b3fd70a08c5ad3ea78b5c6b7ab90d31dde71af10448208d296c3d29ba2e55dfd817dfef75957163ee032163d04c4b2e0cb2fddff30313516aa60f748c1a48da + languageName: node + linkType: hard + "supports-color@npm:^5.3.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -7283,6 +11800,13 @@ __metadata: languageName: node linkType: hard +"system-architecture@npm:^0.1.0": + version: 0.1.0 + resolution: "system-architecture@npm:0.1.0" + checksum: 10/ca0dd793c45c354ab57dd7fc8ce7dc9923a6e07382bd3b22eb5b08f55ddb0217c390d00767549c5155fd4ce7ef23ffdd8cfb33dd4344cbbd37837d085a50f6f0 + languageName: node + linkType: hard + "tar@npm:^6.1.11, tar@npm:^6.1.2, tar@npm:^6.2.1": version: 6.2.1 resolution: "tar@npm:6.2.1" @@ -7336,6 +11860,15 @@ __metadata: languageName: node linkType: hard +"thread-stream@npm:^0.15.1": + version: 0.15.2 + resolution: "thread-stream@npm:0.15.2" + dependencies: + real-require: "npm:^0.1.0" + checksum: 10/ca0a4f5bf45db88b48b41af0299455eaa8f01dd3ef8279e7ba6909c295b3ab79ddf576b595cbbceb4dbdf4012b17c6449805092926163fcbf30ac1604cb595b1 + languageName: node + linkType: hard + "tinybench@npm:^2.9.0": version: 2.9.0 resolution: "tinybench@npm:2.9.0" @@ -7396,6 +11929,32 @@ __metadata: languageName: node linkType: hard +"totalist@npm:^3.0.0": + version: 3.0.1 + resolution: "totalist@npm:3.0.1" + checksum: 10/5132d562cf88ff93fd710770a92f31dbe67cc19b5c6ccae2efc0da327f0954d211bbfd9456389655d726c624f284b4a23112f56d1da931ca7cfabbe1f45e778a + languageName: node + linkType: hard + +"tough-cookie@npm:^4.1.4": + version: 4.1.4 + resolution: "tough-cookie@npm:4.1.4" + dependencies: + psl: "npm:^1.1.33" + punycode: "npm:^2.1.1" + universalify: "npm:^0.2.0" + url-parse: "npm:^1.5.3" + checksum: 10/75663f4e2cd085f16af0b217e4218772adf0617fb3227171102618a54ce0187a164e505d61f773ed7d65988f8ff8a8f935d381f87da981752c1171b076b4afac + languageName: node + linkType: hard + +"tr46@npm:~0.0.3": + version: 0.0.3 + resolution: "tr46@npm:0.0.3" + checksum: 10/8f1f5aa6cb232f9e1bdc86f485f916b7aa38caee8a778b378ffec0b70d9307873f253f5cbadbe2955ece2ac5c83d0dc14a77513166ccd0a0c7fe197e21396695 + languageName: node + linkType: hard + "trim-lines@npm:^3.0.0": version: 3.0.1 resolution: "trim-lines@npm:3.0.1" @@ -7432,7 +11991,14 @@ __metadata: languageName: unknown linkType: soft -"tslib@npm:2.7.0": +"tslib@npm:1.14.1": + version: 1.14.1 + resolution: "tslib@npm:1.14.1" + checksum: 10/7dbf34e6f55c6492637adb81b555af5e3b4f9cc6b998fb440dac82d3b42bdc91560a35a5fb75e20e24a076c651438234da6743d139e4feabf0783f3cdfe1dddb + languageName: node + linkType: hard + +"tslib@npm:2.7.0, tslib@npm:^2.0.0, tslib@npm:^2.3.1": version: 2.7.0 resolution: "tslib@npm:2.7.0" checksum: 10/9a5b47ddac65874fa011c20ff76db69f97cf90c78cff5934799ab8894a5342db2d17b4e7613a087046bc1d133d21547ddff87ac558abeec31ffa929c88b7fce6 @@ -7551,6 +12117,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^4.26.1": + version: 4.26.1 + resolution: "type-fest@npm:4.26.1" + checksum: 10/b82676194f80af228cb852e320d2ea8381c89d667d2e4d9f2bdfc8f254bccc039c7741a90c53617a4de0c9fdca8265ed18eb0888cd628f391c5c381c33a9f94b + languageName: node + linkType: hard + "typedoc@npm:^0.26.4, typedoc@npm:^0.26.8": version: 0.26.10 resolution: "typedoc@npm:0.26.10" @@ -7591,7 +12164,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.3.3, typescript@npm:^5.6.3": +"typescript@npm:^5.3.3, typescript@npm:^5.5.3, typescript@npm:^5.6.3": version: 5.6.3 resolution: "typescript@npm:5.6.3" bin: @@ -7601,7 +12174,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.3.3#optional!builtin, typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": +"typescript@patch:typescript@npm%3A^5.3.3#optional!builtin, typescript@patch:typescript@npm%3A^5.5.3#optional!builtin, typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": version: 5.6.3 resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40" bin: @@ -7611,6 +12184,15 @@ __metadata: languageName: node linkType: hard +"ua-parser-js@npm:^1.0.37": + version: 1.0.39 + resolution: "ua-parser-js@npm:1.0.39" + bin: + ua-parser-js: script/cli.js + checksum: 10/dd4026b6ece8a34a0d39b6de5542154c4506077d8def8647a300a29e1b3ffa0e23f5c8eeeb8101df6162b7b3eb3597d0b4adb031ae6104cbdb730d6ebc07f3c0 + languageName: node + linkType: hard + "uc.micro@npm:^2.0.0, uc.micro@npm:^2.1.0": version: 2.1.0 resolution: "uc.micro@npm:2.1.0" @@ -7618,6 +12200,38 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.5.4": + version: 1.5.4 + resolution: "ufo@npm:1.5.4" + checksum: 10/a885ed421e656aea6ca64e9727b8118a9488715460b6f1a0f0427118adfe2f2830fe7c1d5bd9c5c754a332e6807516551cd663ea67ce9ed6a4e3edc739916335 + languageName: node + linkType: hard + +"uint8arrays@npm:3.1.0": + version: 3.1.0 + resolution: "uint8arrays@npm:3.1.0" + dependencies: + multiformats: "npm:^9.4.2" + checksum: 10/caf1cd6a1cdbd7c59d6c8698c06a6d603380942b5745b3fddcd1b16f7a84a4f351fb8c6ac41f4cb2c59c226bb6d954733a6e20a42dec6f3fd266a02270a5088d + languageName: node + linkType: hard + +"uint8arrays@npm:^3.0.0": + version: 3.1.1 + resolution: "uint8arrays@npm:3.1.1" + dependencies: + multiformats: "npm:^9.4.2" + checksum: 10/536e70273c040484aa7d522031a9dbca1fe8c06eb58a3ace1064ba68825b4e2764d4a0b604a1c451e7b8be0986dc94f23a419cfe9334bd116716074a2d29b33d + languageName: node + linkType: hard + +"uncrypto@npm:^0.1.3": + version: 0.1.3 + resolution: "uncrypto@npm:0.1.3" + checksum: 10/0020f74b0ce34723196d8982a73bb7f40cff455a41b8f88ae146b86885f4e66e41a1241fe80a887505c3bd2c7f07ed362b6ed041968370073c40a98496e6a737 + languageName: node + linkType: hard + "undici-types@npm:~6.19.2": version: 6.19.8 resolution: "undici-types@npm:6.19.8" @@ -7634,6 +12248,19 @@ __metadata: languageName: node linkType: hard +"unenv@npm:^1.10.0": + version: 1.10.0 + resolution: "unenv@npm:1.10.0" + dependencies: + consola: "npm:^3.2.3" + defu: "npm:^6.1.4" + mime: "npm:^3.0.0" + node-fetch-native: "npm:^1.6.4" + pathe: "npm:^1.1.2" + checksum: 10/23198e150fd3b4db4d7abe444b75ee05a0d36768bd6d94a6aaf5dca830db82e707ccc0f6cca22671327b62c5cd85ada08d4665bf7652afec9de0bdc7a4546249 + languageName: node + linkType: hard + "unicorn-magic@npm:^0.1.0": version: 0.1.0 resolution: "unicorn-magic@npm:0.1.0" @@ -7732,6 +12359,13 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: 10/e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.1 resolution: "universalify@npm:2.0.1" @@ -7739,6 +12373,78 @@ __metadata: languageName: node linkType: hard +"unstorage@npm:^1.9.0": + version: 1.12.0 + resolution: "unstorage@npm:1.12.0" + dependencies: + anymatch: "npm:^3.1.3" + chokidar: "npm:^3.6.0" + destr: "npm:^2.0.3" + h3: "npm:^1.12.0" + listhen: "npm:^1.7.2" + lru-cache: "npm:^10.4.3" + mri: "npm:^1.2.0" + node-fetch-native: "npm:^1.6.4" + ofetch: "npm:^1.3.4" + ufo: "npm:^1.5.4" + peerDependencies: + "@azure/app-configuration": ^1.7.0 + "@azure/cosmos": ^4.1.1 + "@azure/data-tables": ^13.2.2 + "@azure/identity": ^4.4.1 + "@azure/keyvault-secrets": ^4.8.0 + "@azure/storage-blob": ^12.24.0 + "@capacitor/preferences": ^6.0.2 + "@netlify/blobs": ^6.5.0 || ^7.0.0 + "@planetscale/database": ^1.19.0 + "@upstash/redis": ^1.34.0 + "@vercel/kv": ^1.0.1 + idb-keyval: ^6.2.1 + ioredis: ^5.4.1 + peerDependenciesMeta: + "@azure/app-configuration": + optional: true + "@azure/cosmos": + optional: true + "@azure/data-tables": + optional: true + "@azure/identity": + optional: true + "@azure/keyvault-secrets": + optional: true + "@azure/storage-blob": + optional: true + "@capacitor/preferences": + optional: true + "@netlify/blobs": + optional: true + "@planetscale/database": + optional: true + "@upstash/redis": + optional: true + "@vercel/kv": + optional: true + idb-keyval: + optional: true + ioredis: + optional: true + checksum: 10/b648d79e9913a87152228a080355d9ccf780900eb78bd32f8dab9cc55eb66ab45876e9fc1ed49f1c7a4171600e78c33430e2527740d991df9d071872409b9c37 + languageName: node + linkType: hard + +"untun@npm:^0.1.3": + version: 0.1.3 + resolution: "untun@npm:0.1.3" + dependencies: + citty: "npm:^0.1.5" + consola: "npm:^3.2.3" + pathe: "npm:^1.1.1" + bin: + untun: bin/untun.mjs + checksum: 10/6a096002ca13b8442ad1d40840088888cfaa28626eefdd132cd0fd3d3b956af121a9733b7bda32647608e278fb13332d2b72e2c319a27dc55dbc8e709a2f61d4 + languageName: node + linkType: hard + "update-browserslist-db@npm:^1.1.0": version: 1.1.1 resolution: "update-browserslist-db@npm:1.1.1" @@ -7753,6 +12459,13 @@ __metadata: languageName: node linkType: hard +"uqr@npm:^0.1.2": + version: 0.1.2 + resolution: "uqr@npm:0.1.2" + checksum: 10/31f1fe7d7a8121a2670712234524763160985b053e7eb8af7925a131bcde0df11641e15129d988358032da603185456d08dd72b26b507897272eb9640273bfa6 + languageName: node + linkType: hard + "uri-js@npm:^4.2.2": version: 4.4.1 resolution: "uri-js@npm:4.4.1" @@ -7762,13 +12475,104 @@ __metadata: languageName: node linkType: hard -"util-deprecate@npm:^1.0.1": +"url-parse@npm:^1.5.3": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: "npm:^2.1.1" + requires-port: "npm:^1.0.0" + checksum: 10/c9e96bc8c5b34e9f05ddfeffc12f6aadecbb0d971b3cc26015b58d5b44676a99f50d5aeb1e5c9e61fa4d49961ae3ab1ae997369ed44da51b2f5ac010d188e6ad + languageName: node + linkType: hard + +"use-callback-ref@npm:^1.3.0": + version: 1.3.2 + resolution: "use-callback-ref@npm:1.3.2" + dependencies: + tslib: "npm:^2.0.0" + peerDependencies: + "@types/react": ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10/3be76eae71b52ab233b4fde974eddeff72e67e6723100a0c0297df4b0d60daabedfa706ffb314d0a52645f2c1235e50fdbd53d99f374eb5df68c74d412e98a9b + languageName: node + linkType: hard + +"use-sidecar@npm:^1.1.2": + version: 1.1.2 + resolution: "use-sidecar@npm:1.1.2" + dependencies: + detect-node-es: "npm:^1.1.0" + tslib: "npm:^2.0.0" + peerDependencies: + "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: 10/ec99e31aefeb880f6dc4d02cb19a01d123364954f857811470ece32872f70d6c3eadbe4d073770706a9b7db6136f2a9fbf1bb803e07fbb21e936a47479281690 + languageName: node + linkType: hard + +"use-sync-external-store@npm:1.2.0": + version: 1.2.0 + resolution: "use-sync-external-store@npm:1.2.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 10/a676216affc203876bd47981103f201f28c2731361bb186367e12d287a7566763213a8816910c6eb88265eccd4c230426eb783d64c373c4a180905be8820ed8e + languageName: node + linkType: hard + +"utf-8-validate@npm:^5.0.2": + version: 5.0.10 + resolution: "utf-8-validate@npm:5.0.10" + dependencies: + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.3.0" + checksum: 10/b89cbc13b4badad04828349ebb7aa2ab1edcb02b46ab12ce0ba5b2d6886d684ad4e93347819e3c8d36224c8742422d2dca69f5cc16c72ae4d7eeecc0c5cb544b + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 10/474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 languageName: node linkType: hard +"util@npm:^0.12.4": + version: 0.12.5 + resolution: "util@npm:0.12.5" + dependencies: + inherits: "npm:^2.0.3" + is-arguments: "npm:^1.0.4" + is-generator-function: "npm:^1.0.7" + is-typed-array: "npm:^1.1.3" + which-typed-array: "npm:^1.1.2" + checksum: 10/61a10de7753353dd4d744c917f74cdd7d21b8b46379c1e48e1c4fd8e83f8190e6bd9978fc4e5102ab6a10ebda6019d1b36572fa4a325e175ec8b789a121f6147 + languageName: node + linkType: hard + +"uuid@npm:^10.0.0": + version: 10.0.0 + resolution: "uuid@npm:10.0.0" + bin: + uuid: dist/bin/uuid + checksum: 10/35aa60614811a201ff90f8ca5e9ecb7076a75c3821e17f0f5ff72d44e36c2d35fcbc2ceee9c4ac7317f4cc41895da30e74f3885e30313bee48fda6338f250538 + languageName: node + linkType: hard + +"uuid@npm:^8.3.2": + version: 8.3.2 + resolution: "uuid@npm:8.3.2" + bin: + uuid: dist/bin/uuid + checksum: 10/9a5f7aa1d6f56dd1e8d5f2478f855f25c645e64e26e347a98e98d95781d5ed20062d6cca2eecb58ba7c84bc3910be95c0451ef4161906abaab44f9cb68ffbdd1 + languageName: node + linkType: hard + "uuid@npm:^9.0.1": version: 9.0.1 resolution: "uuid@npm:9.0.1" @@ -7795,6 +12599,24 @@ __metadata: languageName: node linkType: hard +"valtio@npm:1.11.2": + version: 1.11.2 + resolution: "valtio@npm:1.11.2" + dependencies: + proxy-compare: "npm:2.5.1" + use-sync-external-store: "npm:1.2.0" + peerDependencies: + "@types/react": ">=16.8" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + react: + optional: true + checksum: 10/a259f5af204b801668e019855813a8f702c9558961395bb5847f583119428b997efb9b0e6feb5d6e48a76a9b541173a10fdfdb1527a7bd14477a0e0c5beba914 + languageName: node + linkType: hard + "vfile-message@npm:^4.0.0": version: 4.0.2 resolution: "vfile-message@npm:4.0.2" @@ -7836,6 +12658,28 @@ __metadata: languageName: node linkType: hard +"viem@npm:^2.1.1, viem@npm:^2.17.4": + version: 2.21.21 + resolution: "viem@npm:2.21.21" + dependencies: + "@adraffy/ens-normalize": "npm:1.11.0" + "@noble/curves": "npm:1.6.0" + "@noble/hashes": "npm:1.5.0" + "@scure/bip32": "npm:1.5.0" + "@scure/bip39": "npm:1.4.0" + abitype: "npm:1.0.6" + isows: "npm:1.0.6" + webauthn-p256: "npm:0.0.10" + ws: "npm:8.18.0" + peerDependencies: + typescript: ">=5.0.4" + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/1fe36236c802a512a359c4710d98e627c04795cdf62bb0341c9ac6ab8afc5626431a1b471062ac29f5e2f23bca6ce933d552858f55ad1968514aaea1fb74324d + languageName: node + linkType: hard + "viem@npm:^2.13.6": version: 2.21.28 resolution: "viem@npm:2.21.28" @@ -8002,6 +12846,25 @@ __metadata: languageName: node linkType: hard +"wagmi@npm:^2.10.10": + version: 2.12.17 + resolution: "wagmi@npm:2.12.17" + dependencies: + "@wagmi/connectors": "npm:5.1.15" + "@wagmi/core": "npm:2.13.8" + use-sync-external-store: "npm:1.2.0" + peerDependencies: + "@tanstack/react-query": ">=5.0.0" + react: ">=18" + typescript: ">=5.0.4" + viem: 2.x + peerDependenciesMeta: + typescript: + optional: true + checksum: 10/31ef3942ba27f9b7a7a33da0dfb9924f6556a3e9fe37031c69c67bcb99316e693333187578cbff8ac3ec98fb77336c0db23e7c135c4bebbc3bef4e59fb42e24b + languageName: node + linkType: hard + "webauthn-p256@npm:0.0.10": version: 0.0.10 resolution: "webauthn-p256@npm:0.0.10" @@ -8012,6 +12875,27 @@ __metadata: languageName: node linkType: hard +"webextension-polyfill@npm:>=0.10.0 <1.0": + version: 0.12.0 + resolution: "webextension-polyfill@npm:0.12.0" + checksum: 10/77e648b958b573ef075e75a0c180e2bbd74dee17b3145e86d21fcbb168c4999e4a311654fe634b8178997bee9b35ea5808d8d3d3e5ff2ad138f197f4f0ea75d9 + languageName: node + linkType: hard + +"webextension-polyfill@npm:^0.10.0": + version: 0.10.0 + resolution: "webextension-polyfill@npm:0.10.0" + checksum: 10/51ff30ebed4b1aa802b7f0347f05021b2fe492078bb1a597223d43995fcee96e2da8f914a2f6e36f988c1877ed5ab36ca7077f2f3ab828955151a59e4c01bf7e + languageName: node + linkType: hard + +"webidl-conversions@npm:^3.0.0": + version: 3.0.1 + resolution: "webidl-conversions@npm:3.0.1" + checksum: 10/b65b9f8d6854572a84a5c69615152b63371395f0c5dcd6729c45789052296df54314db2bc3e977df41705eacb8bc79c247cee139a63fa695192f95816ed528ad + languageName: node + linkType: hard + "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -8026,6 +12910,36 @@ __metadata: languageName: node linkType: hard +"whatwg-url@npm:^5.0.0": + version: 5.0.0 + resolution: "whatwg-url@npm:5.0.0" + dependencies: + tr46: "npm:~0.0.3" + webidl-conversions: "npm:^3.0.0" + checksum: 10/f95adbc1e80820828b45cc671d97da7cd5e4ef9deb426c31bcd5ab00dc7103042291613b3ef3caec0a2335ed09e0d5ed026c940755dbb6d404e2b27f940fdf07 + languageName: node + linkType: hard + +"which-module@npm:^2.0.0": + version: 2.0.1 + resolution: "which-module@npm:2.0.1" + checksum: 10/1967b7ce17a2485544a4fdd9063599f0f773959cca24176dbe8f405e55472d748b7c549cd7920ff6abb8f1ab7db0b0f1b36de1a21c57a8ff741f4f1e792c52be + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.2": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + checksum: 10/c3b6a99beadc971baa53c3ee5b749f2b9bdfa3b3b9a70650dd8511a48b61d877288b498d424712e9991d16019633086bd8b5923369460d93463c5825fa36c448 + languageName: node + linkType: hard + "which@npm:^1.2.9": version: 1.3.1 resolution: "which@npm:1.3.1" @@ -8177,7 +13091,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.17.1": +"ws@npm:8.17.1, ws@npm:~8.17.1": version: 8.17.1 resolution: "ws@npm:8.17.1" peerDependencies: @@ -8192,7 +13106,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.18.0": +"ws@npm:8.18.0, ws@npm:^8.18.0": version: 8.18.0 resolution: "ws@npm:8.18.0" peerDependencies: @@ -8207,6 +13121,28 @@ __metadata: languageName: node linkType: hard +"ws@npm:^7.5.1": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10/9c796b84ba80ffc2c2adcdfc9c8e9a219ba99caa435c9a8d45f9ac593bba325563b3f83edc5eb067cc6d21b9a6bf2c930adf76dd40af5f58a5ca6859e81858f0 + languageName: node + linkType: hard + +"xmlhttprequest-ssl@npm:~2.1.1": + version: 2.1.1 + resolution: "xmlhttprequest-ssl@npm:2.1.1" + checksum: 10/40affa3100d566709965910bb3877f5434d61a5588fef46dc896ec39f141261aafe922b5fbbaa79927f019bb8e765877563f0b2ffa69e4c8779b7666bb0c2cc1 + languageName: node + linkType: hard + "xmtp-js@workspace:.": version: 0.0.0-use.local resolution: "xmtp-js@workspace:." @@ -8231,6 +13167,27 @@ __metadata: languageName: unknown linkType: soft +"xtend@npm:^4.0.1": + version: 4.0.2 + resolution: "xtend@npm:4.0.2" + checksum: 10/ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a + languageName: node + linkType: hard + +"y18n@npm:^4.0.0": + version: 4.0.3 + resolution: "y18n@npm:4.0.3" + checksum: 10/392870b2a100bbc643bc035fe3a89cef5591b719c7bdc8721bcdb3d27ab39fa4870acdca67b0ee096e146d769f311d68eda6b8195a6d970f227795061923013f + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10/5f1b5f95e3775de4514edbb142398a2c37849ccfaf04a015be5d75521e9629d3be29bd4432d23c57f37e5b61ade592fb0197022e9993f81a06a5afbdcda9346d + languageName: node + linkType: hard + "yallist@npm:^2.1.2": version: 2.1.2 resolution: "yallist@npm:2.1.2" @@ -8261,6 +13218,57 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^18.1.2": + version: 18.1.3 + resolution: "yargs-parser@npm:18.1.3" + dependencies: + camelcase: "npm:^5.0.0" + decamelize: "npm:^1.2.0" + checksum: 10/235bcbad5b7ca13e5abc54df61d42f230857c6f83223a38e4ed7b824681875b7f8b6ed52139d88a3ad007050f28dc0324b3c805deac7db22ae3b4815dae0e1bf + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10/9dc2c217ea3bf8d858041252d43e074f7166b53f3d010a8c711275e09cd3d62a002969a39858b92bbda2a6a63a585c7127014534a560b9c69ed2d923d113406e + languageName: node + linkType: hard + +"yargs@npm:^15.3.1": + version: 15.4.1 + resolution: "yargs@npm:15.4.1" + dependencies: + cliui: "npm:^6.0.0" + decamelize: "npm:^1.2.0" + find-up: "npm:^4.1.0" + get-caller-file: "npm:^2.0.1" + require-directory: "npm:^2.1.1" + require-main-filename: "npm:^2.0.0" + set-blocking: "npm:^2.0.0" + string-width: "npm:^4.2.0" + which-module: "npm:^2.0.0" + y18n: "npm:^4.0.0" + yargs-parser: "npm:^18.1.2" + checksum: 10/bbcc82222996c0982905b668644ca363eebe6ffd6a572fbb52f0c0e8146661d8ce5af2a7df546968779bb03d1e4186f3ad3d55dfaadd1c4f0d5187c0e3a5ba16 + languageName: node + linkType: hard + +"yargs@npm:^17.5.1, yargs@npm:^17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10/abb3e37678d6e38ea85485ed86ebe0d1e3464c640d7d9069805ea0da12f69d5a32df8e5625e370f9c96dd1c2dc088ab2d0a4dd32af18222ef3c4224a19471576 + languageName: node + linkType: hard + "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" @@ -8275,6 +13283,33 @@ __metadata: languageName: node linkType: hard +"yoctocolors-cjs@npm:^2.1.2": + version: 2.1.2 + resolution: "yoctocolors-cjs@npm:2.1.2" + checksum: 10/d731e3ba776a0ee19021d909787942933a6c2eafb2bbe85541f0c59aa5c7d475ce86fcb860d5803105e32244c3dd5ba875b87c4c6bf2d6f297da416aa54e556f + languageName: node + linkType: hard + +"zustand@npm:4.4.1": + version: 4.4.1 + resolution: "zustand@npm:4.4.1" + dependencies: + use-sync-external-store: "npm:1.2.0" + peerDependencies: + "@types/react": ">=16.8" + immer: ">=9.0" + react: ">=16.8" + peerDependenciesMeta: + "@types/react": + optional: true + immer: + optional: true + react: + optional: true + checksum: 10/e6e21cbb7200bd9eca35c8f385d8b4c06949581f4e19a11c473fe2df5b756997e7d4747eb9f54ee918b9a378c62e3f2f6eadba9d24f9eb4351cc50ad27832c13 + languageName: node + linkType: hard + "zwitch@npm:^2.0.4": version: 2.0.4 resolution: "zwitch@npm:2.0.4" From bdf673387f158b6608677d5dfc0cff6523d1042d Mon Sep 17 00:00:00 2001 From: Ry Racherbaumer Date: Mon, 28 Oct 2024 13:38:40 -0500 Subject: [PATCH 7/8] Fix READMEs --- examples/react-vite-browser-sdk/README.md | 12 ++++-------- examples/react-vite-browser-sdk/package.json | 1 - sdks/browser-sdk/README.md | 2 +- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/examples/react-vite-browser-sdk/README.md b/examples/react-vite-browser-sdk/README.md index 3795dcc31..740c222c3 100644 --- a/examples/react-vite-browser-sdk/README.md +++ b/examples/react-vite-browser-sdk/README.md @@ -2,9 +2,9 @@ Use this React Vite example app as a tool to start building an app with XMTP. This basic messaging app has an intentionally unopinionated UI to help make it easier for you to build with. -The app is built using the [React XMTP client SDK](/packages/react-sdk/README.md), [React](https://react.dev/), [Vite](https://vitejs.dev/), and [RainbowKit](https://www.rainbowkit.com/). +The app is built using the [XMTP client SDK for browsers](/sdks/browser-sdk/README.md), [React](https://react.dev/), and [Vite](https://vitejs.dev/). -To keep up with the latest example app developments, see the [Issues tab](https://github.com/xmtp/xmtp-web/issues) in this repo. +To keep up with the latest example app developments, see the [Issues tab](https://github.com/xmtp/xmtp-js/issues) in this repo. To learn more about XMTP and get answers to frequently asked questions, see the [XMTP documentation](https://xmtp.org/docs). @@ -14,15 +14,11 @@ This example app isn't a complete solution. For example, the list of conversatio ## Developing -1. In `packages/react-sdk`, run `yarn build` to build the React SDK. -2. In `examples/react-vite`, run `yarn dev` to start the development server. +1. In `sdks/browser-sdk`, run `yarn build` to build the browser SDK. +2. In `examples/react-vite-browser-sdk`, run `yarn dev` to start the development server. ## Useful commands -- `yarn build`: Builds the example app - `yarn clean`: Removes `node_modules`, `dist`, and `.turbo` folders - `yarn dev`: Launches the example app and watches for changes, which will trigger a rebuild -- `yarn format`: Runs prettier format and write changes -- `yarn format:check`: Runs prettier format check -- `yarn lint`: Runs ESLint - `yarn typecheck`: Runs `tsc` diff --git a/examples/react-vite-browser-sdk/package.json b/examples/react-vite-browser-sdk/package.json index 102500c6b..99e470cf8 100644 --- a/examples/react-vite-browser-sdk/package.json +++ b/examples/react-vite-browser-sdk/package.json @@ -7,7 +7,6 @@ "clean": "rm -rf .turbo && rm -rf node_modules && yarn clean:dist", "clean:dist": "rm -rf dist", "dev": "vite", - "quickstart": "yarn dev", "typecheck": "tsc" }, "dependencies": { diff --git a/sdks/browser-sdk/README.md b/sdks/browser-sdk/README.md index 9c29c43e2..ae3d960a3 100644 --- a/sdks/browser-sdk/README.md +++ b/sdks/browser-sdk/README.md @@ -103,7 +103,7 @@ The following table provides the deprecation schedule. | -------------------------------------------------------------- | --------- | --------------- | --------- | | There are no deprecations scheduled for this SDK at this time. | | | | -Bug reports, feature requests, and PRs are welcome in accordance with these [contribution guidelines](https://github.com/xmtp/xmtp-web/blob/main/CONTRIBUTING.md). +Bug reports, feature requests, and PRs are welcome in accordance with these [contribution guidelines](https://github.com/xmtp/xmtp-js/blob/main/CONTRIBUTING.md). ## Developing From c3a2a7218af7516ea23398ab8185c2f44a6b5aa2 Mon Sep 17 00:00:00 2001 From: Ry Racherbaumer Date: Mon, 28 Oct 2024 13:44:46 -0500 Subject: [PATCH 8/8] Fix browser SDK workflow --- .github/workflows/browser-sdk.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/browser-sdk.yml b/.github/workflows/browser-sdk.yml index b0e825baf..ce2dc5591 100644 --- a/.github/workflows/browser-sdk.yml +++ b/.github/workflows/browser-sdk.yml @@ -51,6 +51,7 @@ jobs: - name: Install dependencies run: yarn - name: Install playwright browsers + working-directory: ./sdks/browser-sdk run: yarn playwright install - name: Start dev environment run: ./dev/up