diff --git a/.changeset/flat-planets-sing.md b/.changeset/flat-planets-sing.md new file mode 100644 index 00000000..4908a0dc --- /dev/null +++ b/.changeset/flat-planets-sing.md @@ -0,0 +1,5 @@ +--- +"@xmtp/frames-client": patch +--- + +Updated crypto imports, build, and exports diff --git a/packages/frames-client/package.json b/packages/frames-client/package.json index e2da5859..1ca41d34 100644 --- a/packages/frames-client/package.json +++ b/packages/frames-client/package.json @@ -5,12 +5,13 @@ "author": "XMTP Labs ", "license": "MIT", "type": "module", - "browser": "lib/index.js", + "browser": "lib/browser/index.js", "module": "lib/index.js", "types": "lib/index.d.ts", "exports": { ".": { "types": "./lib/index.d.ts", + "browser": "./lib/browser/index.js", "default": "./lib/index.js" } }, @@ -59,6 +60,7 @@ "devDependencies": { "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^11.1.6", + "@xmtp/rollup-plugin-resolve-extensions": "^1.0.1", "@xmtp/tsconfig": "workspace:*", "@xmtp/xmtp-js": "^11.3.7", "eslint": "^8.56.0", diff --git a/packages/frames-client/rollup.config.js b/packages/frames-client/rollup.config.js index 28ff8e43..5207340e 100644 --- a/packages/frames-client/rollup.config.js +++ b/packages/frames-client/rollup.config.js @@ -4,6 +4,20 @@ import { dts } from "rollup-plugin-dts"; import tsConfigPaths from "rollup-plugin-tsconfig-paths"; import terser from "@rollup/plugin-terser"; import filesize from "rollup-plugin-filesize"; +import { resolveExtensions } from "@xmtp/rollup-plugin-resolve-extensions"; + +const plugins = [ + tsConfigPaths(), + typescript({ + declaration: false, + declarationMap: false, + }), + filesize({ + showMinifiedSize: false, + }), +]; + +const external = ["@xmtp/proto", "node:crypto"]; export default defineConfig([ { @@ -13,18 +27,22 @@ export default defineConfig([ format: "es", sourcemap: true, }, + external, + plugins, + }, + { + input: "src/index.ts", + output: { + file: "lib/browser/index.js", + format: "es", + sourcemap: true, + }, + external, plugins: [ - tsConfigPaths(), - typescript({ - declaration: false, - declarationMap: false, - }), + resolveExtensions({ extensions: [".browser"] }), terser(), - filesize({ - showMinifiedSize: false, - }), + ...plugins, ], - external: [], }, { input: "src/index.ts", diff --git a/packages/frames-client/src/crypto.browser.ts b/packages/frames-client/src/crypto.browser.ts new file mode 100644 index 00000000..8b9b3665 --- /dev/null +++ b/packages/frames-client/src/crypto.browser.ts @@ -0,0 +1 @@ +export const { crypto } = window; diff --git a/packages/frames-client/src/crypto.ts b/packages/frames-client/src/crypto.ts index 8f13df5d..be214cd7 100644 --- a/packages/frames-client/src/crypto.ts +++ b/packages/frames-client/src/crypto.ts @@ -1,24 +1 @@ -let cachedCrypto: Crypto | undefined; - -async function getCrypto(): Promise { - if (typeof crypto !== "undefined") { - return crypto; - } - - if (typeof cachedCrypto !== "undefined") { - return cachedCrypto; - } - - if (typeof window !== "undefined" && window.crypto) { - return window.crypto; - } - - cachedCrypto = (await import("crypto")).webcrypto as Crypto; - - return cachedCrypto; -} - -export async function sha256(data: Uint8Array): Promise { - const digest = await (await getCrypto()).subtle.digest("SHA-256", data); - return new Uint8Array(digest); -} +export { webcrypto as crypto } from "node:crypto"; diff --git a/packages/frames-client/src/index.test.ts b/packages/frames-client/src/index.test.ts index 9f0b9fa2..66835d9c 100644 --- a/packages/frames-client/src/index.test.ts +++ b/packages/frames-client/src/index.test.ts @@ -3,7 +3,7 @@ import { Wallet } from "ethers"; import { frames, fetcher } from "@xmtp/proto"; import { it, expect, describe, beforeEach } from "vitest"; import { FramesClient } from "."; -import { sha256 } from "./crypto"; +import { sha256 } from "./utils"; const { b64Decode } = fetcher; diff --git a/packages/frames-client/src/index.ts b/packages/frames-client/src/index.ts index d47c9810..87afb5f3 100644 --- a/packages/frames-client/src/index.ts +++ b/packages/frames-client/src/index.ts @@ -2,7 +2,7 @@ import type { Client } from "@xmtp/xmtp-js"; import { frames, fetcher } from "@xmtp/proto"; import { OG_PROXY_URL } from "./constants"; import type { FramePostPayload, FramesApiResponse } from "./types"; -import { sha256 } from "./crypto"; +import { sha256 } from "./utils"; import { v1ToV2Bundle } from "./converters"; const { b64Encode } = fetcher; diff --git a/packages/frames-client/src/utils.ts b/packages/frames-client/src/utils.ts new file mode 100644 index 00000000..a4c81d25 --- /dev/null +++ b/packages/frames-client/src/utils.ts @@ -0,0 +1,6 @@ +import { crypto } from "./crypto"; + +export async function sha256(data: Uint8Array): Promise { + const digest = await crypto.subtle.digest("SHA-256", data); + return new Uint8Array(digest); +} diff --git a/packages/frames-client/vitest.config.ts b/packages/frames-client/vitest.config.ts index b4435352..21252a9d 100644 --- a/packages/frames-client/vitest.config.ts +++ b/packages/frames-client/vitest.config.ts @@ -11,7 +11,6 @@ const vitestConfig = defineVitestConfig({ test: { globals: true, environment: "happy-dom", - setupFiles: "./vitest.setup.ts", }, }); diff --git a/packages/frames-client/vitest.setup.ts b/packages/frames-client/vitest.setup.ts deleted file mode 100644 index c0ab9982..00000000 --- a/packages/frames-client/vitest.setup.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { webcrypto } from "crypto"; - -// eslint-disable-next-line -// @ts-ignore -global.crypto = webcrypto; diff --git a/yarn.lock b/yarn.lock index aafc306d..ea79e1ee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4312,6 +4312,7 @@ __metadata: "@rollup/plugin-terser": "npm:^0.4.4" "@rollup/plugin-typescript": "npm:^11.1.6" "@xmtp/proto": "npm:3.41.0-beta.2" + "@xmtp/rollup-plugin-resolve-extensions": "npm:^1.0.1" "@xmtp/tsconfig": "workspace:*" "@xmtp/xmtp-js": "npm:^11.3.7" eslint: "npm:^8.56.0" @@ -4462,6 +4463,19 @@ __metadata: languageName: unknown linkType: soft +"@xmtp/rollup-plugin-resolve-extensions@npm:^1.0.1": + version: 1.0.1 + resolution: "@xmtp/rollup-plugin-resolve-extensions@npm:1.0.1" + dependencies: + find-up: "npm:^7.0.0" + typescript: "npm:^5.3.3" + peerDependencies: + rollup: ^2.14.0||^3.0.0||^4.0.0 + typescript: ">=5" + checksum: dd65d94fb87a8bf7fcea5a6d386e898c1e27fc85d9a8a4990170490d7bf6c56c46d5c4f105e37d5e7ae5f9a4d6ffd077e491c26405d287b89ee065f9e87cb41d + languageName: node + linkType: hard + "@xmtp/tsconfig@workspace:*, @xmtp/tsconfig@workspace:shared/tsconfig": version: 0.0.0-use.local resolution: "@xmtp/tsconfig@workspace:shared/tsconfig" @@ -7439,6 +7453,17 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^7.0.0": + version: 7.0.0 + resolution: "find-up@npm:7.0.0" + dependencies: + locate-path: "npm:^7.2.0" + path-exists: "npm:^5.0.0" + unicorn-magic: "npm:^0.1.0" + checksum: 7e6b08fbc05a10677e25e74bb0a020054a86b31d1806c5e6a9e32e75472bbf177210bc16e5f97453be8bda7ae2e3d97669dbb2901f8c30b39ce53929cbea6746 + languageName: node + linkType: hard + "find-yarn-workspace-root2@npm:1.2.16": version: 1.2.16 resolution: "find-yarn-workspace-root2@npm:1.2.16" @@ -9204,6 +9229,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^7.2.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: "npm:^6.0.0" + checksum: 1c6d269d4efec555937081be964e8a9b4a136319c79ca1d45ac6382212a8466113c75bd89e44521ca8ecd1c47fb08523b56eee5c0712bc7d14fec5f729deeb42 + languageName: node + linkType: hard + "lodash.defaults@npm:^4.2.0": version: 4.2.0 resolution: "lodash.defaults@npm:4.2.0" @@ -10375,6 +10409,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: 01d9d70695187788f984226e16c903475ec6a947ee7b21948d6f597bed788e3112cc7ec2e171c1d37125057a5f45f3da21d8653e04a3a793589e12e9e80e756b + languageName: node + linkType: hard + "p-limit@npm:^5.0.0": version: 5.0.0 resolution: "p-limit@npm:5.0.0" @@ -10402,6 +10445,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: "npm:^4.0.0" + checksum: 2bfe5234efa5e7a4e74b30a5479a193fdd9236f8f6b4d2f3f69e3d286d9a7d7ab0c118a2a50142efcf4e41625def635bd9332d6cbf9cc65d85eb0718c579ab38 + languageName: node + linkType: hard + "p-map@npm:^2.0.0": version: 2.1.0 resolution: "p-map@npm:2.1.0" @@ -10481,6 +10533,13 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 8ca842868cab09423994596eb2c5ec2a971c17d1a3cb36dbf060592c730c725cd524b9067d7d2a1e031fef9ba7bd2ac6dc5ec9fb92aa693265f7be3987045254 + languageName: node + linkType: hard + "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" @@ -13200,6 +13259,13 @@ __metadata: languageName: node linkType: hard +"unicorn-magic@npm:^0.1.0": + version: 0.1.0 + resolution: "unicorn-magic@npm:0.1.0" + checksum: 9b4d0e9809807823dc91d0920a4a4c0cff2de3ebc54ee87ac1ee9bc75eafd609b09d1f14495e0173aef26e01118706196b6ab06a75fe0841028b3983a8af313f + languageName: node + linkType: hard + "unique-filename@npm:^2.0.0": version: 2.0.1 resolution: "unique-filename@npm:2.0.1"