diff --git a/.changeset/late-tips-pump.md b/.changeset/late-tips-pump.md new file mode 100644 index 00000000..03d1bea9 --- /dev/null +++ b/.changeset/late-tips-pump.md @@ -0,0 +1,6 @@ +--- +"@xmtp/browser-sdk": patch +"@xmtp/node-sdk": patch +--- + +SDK optimizations diff --git a/sdks/browser-sdk/src/utils/conversions.ts b/sdks/browser-sdk/src/utils/conversions.ts index f3f69ea0..4234ae04 100644 --- a/sdks/browser-sdk/src/utils/conversions.ts +++ b/sdks/browser-sdk/src/utils/conversions.ts @@ -312,38 +312,51 @@ export type SafeConversation = { export const toSafeConversation = async ( conversation: WorkerConversation, -): Promise => ({ - 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.addAdminPolicy, - addMemberPolicy: conversation.permissions.policySet.addMemberPolicy, - removeAdminPolicy: conversation.permissions.policySet.removeAdminPolicy, - removeMemberPolicy: conversation.permissions.policySet.removeMemberPolicy, - updateGroupDescriptionPolicy: - conversation.permissions.policySet.updateGroupDescriptionPolicy, - updateGroupImageUrlSquarePolicy: - conversation.permissions.policySet.updateGroupImageUrlSquarePolicy, - updateGroupNamePolicy: - conversation.permissions.policySet.updateGroupNamePolicy, - updateGroupPinnedFrameUrlPolicy: - conversation.permissions.policySet.updateGroupPinnedFrameUrlPolicy, - updateMessageExpirationPolicy: - conversation.permissions.policySet.updateMessageExpirationPolicy, +): Promise => { + const id = conversation.id; + const name = conversation.name; + const imageUrl = conversation.imageUrl; + const description = conversation.description; + const pinnedFrameUrl = conversation.pinnedFrameUrl; + const permissions = conversation.permissions; + const isActive = conversation.isActive; + const addedByInboxId = conversation.addedByInboxId; + const metadata = await conversation.metadata(); + const admins = conversation.admins; + const superAdmins = conversation.superAdmins; + const createdAtNs = conversation.createdAtNs; + const policyType = permissions.policyType; + const policySet = permissions.policySet; + return { + id, + name, + imageUrl, + description, + pinnedFrameUrl, + permissions: { + policyType, + policySet: { + addAdminPolicy: policySet.addAdminPolicy, + addMemberPolicy: policySet.addMemberPolicy, + removeAdminPolicy: policySet.removeAdminPolicy, + removeMemberPolicy: policySet.removeMemberPolicy, + updateGroupDescriptionPolicy: policySet.updateGroupDescriptionPolicy, + updateGroupImageUrlSquarePolicy: + policySet.updateGroupImageUrlSquarePolicy, + updateGroupNamePolicy: policySet.updateGroupNamePolicy, + updateGroupPinnedFrameUrlPolicy: + policySet.updateGroupPinnedFrameUrlPolicy, + updateMessageExpirationPolicy: policySet.updateMessageExpirationPolicy, + }, }, - }, - isActive: conversation.isActive, - addedByInboxId: conversation.addedByInboxId, - metadata: await conversation.metadata(), - admins: conversation.admins, - superAdmins: conversation.superAdmins, - createdAtNs: conversation.createdAtNs, -}); + isActive, + addedByInboxId, + metadata, + admins, + superAdmins, + createdAtNs, + }; +}; export type SafeInstallation = { bytes: Uint8Array; diff --git a/sdks/browser-sdk/src/utils/createClient.ts b/sdks/browser-sdk/src/utils/createClient.ts index 9ad304b7..f06abde3 100644 --- a/sdks/browser-sdk/src/utils/createClient.ts +++ b/sdks/browser-sdk/src/utils/createClient.ts @@ -15,9 +15,9 @@ export const createClient = async ( // initialize WASM module await init(); - const host = options?.apiUrl ?? ApiUrls[options?.env ?? "dev"]; + const host = options?.apiUrl || ApiUrls[options?.env || "dev"]; const dbPath = - options?.dbPath ?? `xmtp-${options?.env ?? "dev"}-${accountAddress}.db3`; + options?.dbPath || `xmtp-${options?.env || "dev"}-${accountAddress}.db3`; const inboxId = (await getInboxIdForAddress(host, accountAddress)) || @@ -30,7 +30,7 @@ export const createClient = async ( options.performanceLogging); const historySyncUrl = - options?.historySyncUrl ?? HistorySyncUrls[options?.env ?? "dev"]; + options?.historySyncUrl || HistorySyncUrls[options?.env || "dev"]; return createWasmClient( host, diff --git a/sdks/node-sdk/.gitignore b/sdks/node-sdk/.gitignore new file mode 100644 index 00000000..73d74c7b --- /dev/null +++ b/sdks/node-sdk/.gitignore @@ -0,0 +1 @@ +scripts/accounts.json diff --git a/sdks/node-sdk/package.json b/sdks/node-sdk/package.json index 6aafad1c..388089c3 100644 --- a/sdks/node-sdk/package.json +++ b/sdks/node-sdk/package.json @@ -43,6 +43,8 @@ "clean:dist": "rimraf dist", "clean:tests": "rimraf test/*.db3* ||:", "dev": "yarn build --watch", + "generate:accounts": "tsx scripts/accounts.ts", + "generate:groups": "tsx scripts/groups.ts", "test": "vitest run", "test:cov": "vitest run --coverage", "typecheck": "tsc" @@ -66,6 +68,7 @@ "rollup-plugin-dts": "^6.1.1", "rollup-plugin-filesize": "^10.0.0", "rollup-plugin-tsconfig-paths": "^1.5.2", + "tsx": "^4.19.2", "typescript": "^5.7.3", "uint8array-extras": "^1.4.0", "uuid": "^11.0.3", diff --git a/sdks/node-sdk/scripts/accounts.ts b/sdks/node-sdk/scripts/accounts.ts new file mode 100644 index 00000000..46a1d782 --- /dev/null +++ b/sdks/node-sdk/scripts/accounts.ts @@ -0,0 +1,29 @@ +import { writeFile } from "node:fs/promises"; +import path from "node:path"; +import { generatePrivateKey, privateKeyToAccount } from "viem/accounts"; + +type Account = [key: string, address: string]; +type AccountsMap = Record; + +const createRandomAccount = (): Account => { + const privateKey = generatePrivateKey(); + const account = privateKeyToAccount(privateKey); + return [privateKey, account.address]; +}; + +const writeAccountsJson = async (accounts: AccountsMap) => { + console.log("Writing accounts to file..."); + const accountsJsonPath = path.join(import.meta.dirname, "accounts.json"); + await writeFile(accountsJsonPath, JSON.stringify(accounts, null, 2)); + console.log(`Accounts data written to '${accountsJsonPath}'`); +}; + +const main = async () => { + console.log("Creating 1000 accounts..."); + const accounts = Object.fromEntries( + Array.from({ length: 1000 }, () => createRandomAccount()), + ); + await writeAccountsJson(accounts); +}; + +await main(); diff --git a/sdks/node-sdk/scripts/groups.ts b/sdks/node-sdk/scripts/groups.ts new file mode 100644 index 00000000..f7ee5297 --- /dev/null +++ b/sdks/node-sdk/scripts/groups.ts @@ -0,0 +1,116 @@ +import { randomBytes } from "node:crypto"; +import { readFile } from "node:fs/promises"; +import path from "node:path"; +import { createWalletClient, http, toBytes } from "viem"; +import { privateKeyToAccount } from "viem/accounts"; +import { sepolia } from "viem/chains"; +import { Client } from "@/Client"; + +export const createUser = (key: string) => { + const account = privateKeyToAccount(key as `0x${string}`); + return { + key, + account, + wallet: createWalletClient({ + account, + chain: sepolia, + transport: http(), + }), + }; +}; + +type User = ReturnType; + +export const createSigner = (user: User) => { + return { + getAddress: () => user.account.address, + signMessage: async (message: string) => { + const signature = await user.wallet.signMessage({ + message, + }); + return toBytes(signature); + }, + }; +}; + +export const createRegisteredClient = async (user: User, dbPath?: string) => { + return Client.create(createSigner(user), randomBytes(32), { + env: "local", + dbPath, + }); +}; + +const accountsJsonPath = path.join(import.meta.dirname, "accounts.json"); +const parsedAccounts = JSON.parse( + await readFile(accountsJsonPath, "utf-8"), +) as Record; + +type Account = { key: string; address: string }; +const accounts: Account[] = Object.entries(parsedAccounts).map( + ([key, address]) => ({ key, address }), +); + +const primaryAccount = accounts.shift() as Account; + +const primaryAccountClient = await createRegisteredClient( + createUser(primaryAccount.key), + "./test.db3", +); + +console.log("Registering accounts..."); + +for (const a of accounts) { + await createRegisteredClient(createUser(a.key)); +} + +const groups = []; + +console.log("Creating groups..."); + +// create a bunch of groups +while (accounts.length > 200) { + const groupsAccounts = accounts.splice(0, 4); + const group = await primaryAccountClient.conversations.newGroup( + groupsAccounts.map((a) => a.address), + ); + groups.push(group); +} + +console.log(`Created ${groups.length} groups`); + +console.log(`Sending "gm" message into each group...`); + +for (const group of groups) { + await group.send("gm"); +} + +console.log("Creating DM groups..."); + +const dmGroups = []; + +while (accounts.length > 0) { + const dmGroup = await primaryAccountClient.conversations.newDm( + (accounts.pop() as Account).address, + ); + dmGroups.push(dmGroup); +} + +console.log(`Created ${dmGroups.length} DM groups`); + +console.log("Sending 'gm' message into each DM group..."); + +for (const dmGroup of dmGroups) { + await dmGroup.send("gm"); +} + +console.log("Syncing all conversations..."); + +await primaryAccountClient.conversations.syncAll(); + +console.log("Querying DM groups..."); + +const groupConvos = primaryAccountClient.conversations.listGroups(); +const dmConvos = primaryAccountClient.conversations.listDms(); + +console.log(`Found ${dmConvos.length} DM conversations`); +console.log(`Found ${groupConvos.length} group conversations`); diff --git a/sdks/node-sdk/src/Client.ts b/sdks/node-sdk/src/Client.ts index 5e061151..be253218 100644 --- a/sdks/node-sdk/src/Client.ts +++ b/sdks/node-sdk/src/Client.ts @@ -121,13 +121,13 @@ export class Client { options?: ClientOptions, ) { const accountAddress = await signer.getAddress(); - const host = options?.apiUrl ?? ApiUrls[options?.env ?? "dev"]; + const host = options?.apiUrl || ApiUrls[options?.env || "dev"]; const isSecure = host.startsWith("https"); const dbPath = - options?.dbPath ?? + options?.dbPath || join( process.cwd(), - `xmtp-${options?.env ?? "dev"}-${accountAddress}.db3`, + `xmtp-${options?.env || "dev"}-${accountAddress}.db3`, ); const inboxId = @@ -140,7 +140,7 @@ export class Client { }; const historySyncUrl = - options?.historySyncUrl ?? HistorySyncUrls[options?.env ?? "dev"]; + options?.historySyncUrl || HistorySyncUrls[options?.env || "dev"]; const client = new Client( await createClient( @@ -353,7 +353,7 @@ export class Client { static async canMessage(accountAddresses: string[], env?: XmtpEnv) { const accountAddress = "0x0000000000000000000000000000000000000000"; - const host = ApiUrls[env ?? "dev"]; + const host = ApiUrls[env || "dev"]; const isSecure = host.startsWith("https"); const inboxId = (await getInboxIdForAddress(host, isSecure, accountAddress)) || diff --git a/sdks/node-sdk/tsconfig.json b/sdks/node-sdk/tsconfig.json index dbf6b7f8..84bdc78b 100644 --- a/sdks/node-sdk/tsconfig.json +++ b/sdks/node-sdk/tsconfig.json @@ -16,9 +16,10 @@ "types": ["vitest/globals"] }, "include": [ + "rollup.config.js", + "scripts/**/*", "src/**/*", "test/**/*", - "rollup.config.js", "vitest.config.ts", "vitest.setup.ts" ] diff --git a/yarn.lock b/yarn.lock index 5d2e23ac..cef52ae9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -691,6 +691,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/aix-ppc64@npm:0.23.1" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/aix-ppc64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/aix-ppc64@npm:0.24.2" @@ -705,6 +712,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/android-arm64@npm:0.23.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/android-arm64@npm:0.24.2" @@ -719,6 +733,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/android-arm@npm:0.23.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/android-arm@npm:0.24.2" @@ -733,6 +754,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/android-x64@npm:0.23.1" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/android-x64@npm:0.24.2" @@ -747,6 +775,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/darwin-arm64@npm:0.23.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/darwin-arm64@npm:0.24.2" @@ -761,6 +796,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/darwin-x64@npm:0.23.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/darwin-x64@npm:0.24.2" @@ -775,6 +817,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/freebsd-arm64@npm:0.23.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/freebsd-arm64@npm:0.24.2" @@ -789,6 +838,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/freebsd-x64@npm:0.23.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/freebsd-x64@npm:0.24.2" @@ -803,6 +859,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-arm64@npm:0.23.1" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-arm64@npm:0.24.2" @@ -817,6 +880,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-arm@npm:0.23.1" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-arm@npm:0.24.2" @@ -831,6 +901,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-ia32@npm:0.23.1" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-ia32@npm:0.24.2" @@ -845,6 +922,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-loong64@npm:0.23.1" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-loong64@npm:0.24.2" @@ -859,6 +943,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-mips64el@npm:0.23.1" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-mips64el@npm:0.24.2" @@ -873,6 +964,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-ppc64@npm:0.23.1" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-ppc64@npm:0.24.2" @@ -887,6 +985,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-riscv64@npm:0.23.1" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-riscv64@npm:0.24.2" @@ -901,6 +1006,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-s390x@npm:0.23.1" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-s390x@npm:0.24.2" @@ -915,6 +1027,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/linux-x64@npm:0.23.1" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/linux-x64@npm:0.24.2" @@ -936,6 +1055,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/netbsd-x64@npm:0.23.1" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/netbsd-x64@npm:0.24.2" @@ -943,6 +1069,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/openbsd-arm64@npm:0.23.1" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/openbsd-arm64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/openbsd-arm64@npm:0.24.2" @@ -957,6 +1090,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/openbsd-x64@npm:0.23.1" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/openbsd-x64@npm:0.24.2" @@ -971,6 +1111,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/sunos-x64@npm:0.23.1" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/sunos-x64@npm:0.24.2" @@ -985,6 +1132,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/win32-arm64@npm:0.23.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/win32-arm64@npm:0.24.2" @@ -999,6 +1153,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/win32-ia32@npm:0.23.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/win32-ia32@npm:0.24.2" @@ -1013,6 +1174,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.23.1": + version: 0.23.1 + resolution: "@esbuild/win32-x64@npm:0.23.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.24.2": version: 0.24.2 resolution: "@esbuild/win32-x64@npm:0.24.2" @@ -5041,6 +5209,7 @@ __metadata: rollup-plugin-dts: "npm:^6.1.1" rollup-plugin-filesize: "npm:^10.0.0" rollup-plugin-tsconfig-paths: "npm:^1.5.2" + tsx: "npm:^4.19.2" typescript: "npm:^5.7.3" uint8array-extras: "npm:^1.4.0" uuid: "npm:^11.0.3" @@ -6872,6 +7041,89 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:~0.23.0": + version: 0.23.1 + resolution: "esbuild@npm:0.23.1" + dependencies: + "@esbuild/aix-ppc64": "npm:0.23.1" + "@esbuild/android-arm": "npm:0.23.1" + "@esbuild/android-arm64": "npm:0.23.1" + "@esbuild/android-x64": "npm:0.23.1" + "@esbuild/darwin-arm64": "npm:0.23.1" + "@esbuild/darwin-x64": "npm:0.23.1" + "@esbuild/freebsd-arm64": "npm:0.23.1" + "@esbuild/freebsd-x64": "npm:0.23.1" + "@esbuild/linux-arm": "npm:0.23.1" + "@esbuild/linux-arm64": "npm:0.23.1" + "@esbuild/linux-ia32": "npm:0.23.1" + "@esbuild/linux-loong64": "npm:0.23.1" + "@esbuild/linux-mips64el": "npm:0.23.1" + "@esbuild/linux-ppc64": "npm:0.23.1" + "@esbuild/linux-riscv64": "npm:0.23.1" + "@esbuild/linux-s390x": "npm:0.23.1" + "@esbuild/linux-x64": "npm:0.23.1" + "@esbuild/netbsd-x64": "npm:0.23.1" + "@esbuild/openbsd-arm64": "npm:0.23.1" + "@esbuild/openbsd-x64": "npm:0.23.1" + "@esbuild/sunos-x64": "npm:0.23.1" + "@esbuild/win32-arm64": "npm:0.23.1" + "@esbuild/win32-ia32": "npm:0.23.1" + "@esbuild/win32-x64": "npm:0.23.1" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10/f55fbd0bfb0f86ce67a6d2c6f6780729d536c330999ecb9f5a38d578fb9fda820acbbc67d6d1d377eed8fed50fc38f14ff9cb014f86dafab94269a7fb2177018 + languageName: node + linkType: hard + "escalade@npm:^3.1.1, escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" @@ -7647,6 +7899,15 @@ __metadata: languageName: node linkType: hard +"get-tsconfig@npm:^4.7.5": + version: 4.10.0 + resolution: "get-tsconfig@npm:4.10.0" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10/5259b5c99a1957114337d9d0603b4a305ec9e29fa6cac7d2fbf634ba6754a0cc88bfd281a02416ce64e604b637d3cb239185381a79a5842b17fb55c097b38c4b + languageName: node + linkType: hard + "git-hooks-list@npm:^3.0.0": version: 3.1.0 resolution: "git-hooks-list@npm:3.1.0" @@ -10886,6 +11147,13 @@ __metadata: languageName: node linkType: hard +"resolve-pkg-maps@npm:^1.0.0": + version: 1.0.0 + resolution: "resolve-pkg-maps@npm:1.0.0" + checksum: 10/0763150adf303040c304009231314d1e84c6e5ebfa2d82b7d94e96a6e82bacd1dcc0b58ae257315f3c8adb89a91d8d0f12928241cba2df1680fbe6f60bf99b0e + languageName: node + linkType: hard + "resolve@npm:^1.22.1": version: 1.22.8 resolution: "resolve@npm:1.22.8" @@ -12073,6 +12341,22 @@ __metadata: languageName: node linkType: hard +"tsx@npm:^4.19.2": + version: 4.19.2 + resolution: "tsx@npm:4.19.2" + dependencies: + esbuild: "npm:~0.23.0" + fsevents: "npm:~2.3.3" + get-tsconfig: "npm:^4.7.5" + dependenciesMeta: + fsevents: + optional: true + bin: + tsx: dist/cli.mjs + checksum: 10/4c5610ed1fb2f80d766681f8ac7827e1e8118dfe354c18f74800691f3ef1e9ed676a29842ab818806bcf8613cdc97c6af84b5645e768ddb7f4b0527b9100deda + languageName: node + linkType: hard + "tuf-js@npm:^1.1.7": version: 1.1.7 resolution: "tuf-js@npm:1.1.7"