From 11276c7bf2b8febd22420de837d0e5f7e1c494ca Mon Sep 17 00:00:00 2001 From: Ron Cohen Date: Fri, 28 Mar 2025 14:32:05 +0100 Subject: [PATCH 1/4] fix: use js-sha256 which can fall back to pure js --- packages/flag-evaluation/package.json | 3 +++ packages/flag-evaluation/src/index.ts | 19 ++++++------------- yarn.lock | 8 ++++++++ 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/packages/flag-evaluation/package.json b/packages/flag-evaluation/package.json index 1ab54c98..6c1a736d 100644 --- a/packages/flag-evaluation/package.json +++ b/packages/flag-evaluation/package.json @@ -33,5 +33,8 @@ "ts-node": "^10.9.2", "typescript": "^5.7.3", "vitest": "^2.0.5" + }, + "dependencies": { + "js-sha256": "^0.11.0" } } diff --git a/packages/flag-evaluation/src/index.ts b/packages/flag-evaluation/src/index.ts index 85e32aa0..d3bbd5ff 100644 --- a/packages/flag-evaluation/src/index.ts +++ b/packages/flag-evaluation/src/index.ts @@ -1,10 +1,4 @@ -try { - // crypto not available on globalThis in Node.js v18 - // eslint-disable-next-line @typescript-eslint/no-require-imports - globalThis.crypto ??= require("node:crypto").webcrypto; -} catch { - // ignore -} +import { sha256 } from "js-sha256"; /** * Represents a filter class with a specific type property. @@ -271,13 +265,12 @@ export async function hashInt(hashInput: string): Promise { // 3. multiply by 100000 to get a number between 0 and 100000 and compare it to the threshold // // we only need 20 bits to get to 100000 because 2^20 is 1048576 - const msgUint8 = new TextEncoder().encode(hashInput); - - // Hash the message - const hashBuffer = await crypto.subtle.digest("SHA-256", msgUint8); + const value = + new DataView(sha256.create().update(hashInput).arrayBuffer()).getUint32( + 0, + true, + ) & 0xfffff; - const view = new DataView(hashBuffer); - const value = view.getUint32(0, true) & 0xfffff; return Math.floor((value / 0xfffff) * 100000); } diff --git a/yarn.lock b/yarn.lock index 3101669f..6a6423b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -560,6 +560,7 @@ __metadata: "@bucketco/tsconfig": "workspace:^" "@types/node": "npm:^22.12.0" eslint: "npm:^9.21.0" + js-sha256: "npm:^0.11.0" prettier: "npm:^3.5.2" ts-node: "npm:^10.9.2" typescript: "npm:^5.7.3" @@ -11901,6 +11902,13 @@ __metadata: languageName: node linkType: hard +"js-sha256@npm:^0.11.0": + version: 0.11.0 + resolution: "js-sha256@npm:0.11.0" + checksum: 10c0/90980fe01ca01fbd166751fb16c4caa09c1ab997e8bf77c0764cc05c772c6044946f4c1b3bad266ce78357280d2131d3dc0cf2dd7646e78272996bd4d590aa4f + languageName: node + linkType: hard + "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" From c31b4f7ff803c584005a9b707acdfded24fd4ba9 Mon Sep 17 00:00:00 2001 From: Ron Cohen Date: Fri, 28 Mar 2025 14:49:41 +0100 Subject: [PATCH 2/4] pin version --- packages/flag-evaluation/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/flag-evaluation/package.json b/packages/flag-evaluation/package.json index 6c1a736d..cafcaa4f 100644 --- a/packages/flag-evaluation/package.json +++ b/packages/flag-evaluation/package.json @@ -35,6 +35,6 @@ "vitest": "^2.0.5" }, "dependencies": { - "js-sha256": "^0.11.0" + "js-sha256": "0.11.0" } } From 2ec34ab97a1ccc2eb713bf898ca18f45900294f6 Mon Sep 17 00:00:00 2001 From: Ron Cohen Date: Fri, 28 Mar 2025 14:54:23 +0100 Subject: [PATCH 3/4] bump version --- packages/flag-evaluation/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/flag-evaluation/package.json b/packages/flag-evaluation/package.json index cafcaa4f..8df1442b 100644 --- a/packages/flag-evaluation/package.json +++ b/packages/flag-evaluation/package.json @@ -1,6 +1,6 @@ { "name": "@bucketco/flag-evaluation", - "version": "0.2.0", + "version": "0.1.1", "license": "MIT", "repository": { "type": "git", From 67dfea75edbd68d3c43839051519f10c1a0cc1cf Mon Sep 17 00:00:00 2001 From: Ron Cohen Date: Fri, 28 Mar 2025 14:56:49 +0100 Subject: [PATCH 4/4] missed yarn.lock --- yarn.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6a6423b3..3fca25b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -560,7 +560,7 @@ __metadata: "@bucketco/tsconfig": "workspace:^" "@types/node": "npm:^22.12.0" eslint: "npm:^9.21.0" - js-sha256: "npm:^0.11.0" + js-sha256: "npm:0.11.0" prettier: "npm:^3.5.2" ts-node: "npm:^10.9.2" typescript: "npm:^5.7.3" @@ -11902,7 +11902,7 @@ __metadata: languageName: node linkType: hard -"js-sha256@npm:^0.11.0": +"js-sha256@npm:0.11.0": version: 0.11.0 resolution: "js-sha256@npm:0.11.0" checksum: 10c0/90980fe01ca01fbd166751fb16c4caa09c1ab997e8bf77c0764cc05c772c6044946f4c1b3bad266ce78357280d2131d3dc0cf2dd7646e78272996bd4d590aa4f