From 7441d82a3251b94bee836ac24dab8ce2d5ff75a4 Mon Sep 17 00:00:00 2001 From: intrdx <109056225+intrdx@users.noreply.github.com> Date: Tue, 28 Jul 2026 11:51:50 +0530 Subject: [PATCH 1/4] fix(server-sdk): require Web Crypto in getRandomBytes --- packages/livekit-server-sdk/src/crypto/uuid.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/livekit-server-sdk/src/crypto/uuid.ts b/packages/livekit-server-sdk/src/crypto/uuid.ts index 9ff8abd4..2b31a4cb 100644 --- a/packages/livekit-server-sdk/src/crypto/uuid.ts +++ b/packages/livekit-server-sdk/src/crypto/uuid.ts @@ -2,12 +2,10 @@ // // SPDX-License-Identifier: Apache-2.0 -// Use the Web Crypto API if available, otherwise fallback to Node.js crypto +// Web Crypto only — no import('node:crypto') so isolate/edge bundlers can resolve this module export async function getRandomBytes(size: number = 16): Promise { - if (globalThis.crypto) { - return crypto.getRandomValues(new Uint8Array(size)); - } else { - const nodeCrypto = await import('node:crypto'); - return nodeCrypto.getRandomValues(new Uint8Array(size)); + if (!globalThis.crypto?.getRandomValues) { + throw new Error('Web Crypto API is required (globalThis.crypto.getRandomValues)'); } + return crypto.getRandomValues(new Uint8Array(size)); } From a6abaf97a14528e4322ce9268513cf71334450a6 Mon Sep 17 00:00:00 2001 From: intrdx <109056225+intrdx@users.noreply.github.com> Date: Tue, 28 Jul 2026 11:53:54 +0530 Subject: [PATCH 2/4] fix(server-sdk): require Web Crypto in digest --- packages/livekit-server-sdk/src/crypto/digest.ts | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/livekit-server-sdk/src/crypto/digest.ts b/packages/livekit-server-sdk/src/crypto/digest.ts index f4cc9547..1bf069bf 100644 --- a/packages/livekit-server-sdk/src/crypto/digest.ts +++ b/packages/livekit-server-sdk/src/crypto/digest.ts @@ -2,13 +2,11 @@ // // SPDX-License-Identifier: Apache-2.0 -// Use the Web Crypto API if available, otherwise fallback to Node.js crypto +// Web Crypto only — no import('node:crypto') so isolate/edge bundlers can resolve this module export async function digest(data: string): Promise { - if (globalThis.crypto?.subtle) { - const encoder = new TextEncoder(); - return crypto.subtle.digest('SHA-256', encoder.encode(data)); - } else { - const nodeCrypto = await import('node:crypto'); - return nodeCrypto.createHash('sha256').update(data).digest(); + if (!globalThis.crypto?.subtle) { + throw new Error('Web Crypto API is required (globalThis.crypto.subtle)'); } + const encoder = new TextEncoder(); + return crypto.subtle.digest('SHA-256', encoder.encode(data)); } From 095c6ab45a9e0102bddc53f0d141b7e5ebf6976f Mon Sep 17 00:00:00 2001 From: intrdx <109056225+intrdx@users.noreply.github.com> Date: Tue, 28 Jul 2026 11:55:42 +0530 Subject: [PATCH 3/4] chore: add changeset for web-crypto-only crypto helpers --- .changeset/web-crypto-isolate-bundlers.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/web-crypto-isolate-bundlers.md diff --git a/.changeset/web-crypto-isolate-bundlers.md b/.changeset/web-crypto-isolate-bundlers.md new file mode 100644 index 00000000..f66766cc --- /dev/null +++ b/.changeset/web-crypto-isolate-bundlers.md @@ -0,0 +1,5 @@ +--- +'livekit-server-sdk': patch +--- + +Remove `node:crypto` fallbacks from Web Crypto helpers so isolate/edge bundlers can import the SDK. From 9f99aa77f4b3924d562f36bcb6631b0dad189a1a Mon Sep 17 00:00:00 2001 From: intrdx <109056225+intrdx@users.noreply.github.com> Date: Tue, 28 Jul 2026 11:59:55 +0530 Subject: [PATCH 4/4] chore(server-sdk): bump engines to node >=19 for Web Crypto --- packages/livekit-server-sdk/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/livekit-server-sdk/package.json b/packages/livekit-server-sdk/package.json index 48c3b0fe..c51ab714 100644 --- a/packages/livekit-server-sdk/package.json +++ b/packages/livekit-server-sdk/package.json @@ -62,6 +62,6 @@ "vitest": "^4.0.0" }, "engines": { - "node": ">=18" + "node": ">=19" } }