diff --git a/CHANGELOG.md b/CHANGELOG.md index c0c6bd9..67ddbc2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,7 @@ - Add `GtfsSqlJs.fromZipData(zipData, options?)` static method for loading from pre-loaded ZIP data (`ArrayBuffer` or `Uint8Array`) - Keep `GtfsSqlJs.fromZip(zipPath, options?)` strictly typed as `string` for paths/URLs -- Remove `as unknown as Crypto` double cast in checksum module; call `webcrypto.subtle.digest()` directly -- Remove `as BufferSource` cast in checksum module; pass `ArrayBuffer` directly to `sha256Digest()` +- Simplify checksum module to use global `crypto.subtle` directly (available in both browsers and Node.js 18+, which is the minimum engine version); remove multi-branch environment detection, dynamic `import('crypto')` fallback, and empty `catch` block - Extract shared `isNodeEnvironment()` helper into `utils/env.ts`, replacing inline `typeof process` checks in zip-loader and gtfs-rt-loader - Narrow `loadGTFSZip()` parameter from `string | ArrayBuffer | Uint8Array` to `ArrayBuffer | Uint8Array` (string path was dead code) - Replace `unknown[]` with proper `ProtobufTimeRange[]` and `ProtobufEntitySelector[]` types in gtfs-rt-loader diff --git a/src/cache/checksum.ts b/src/cache/checksum.ts index 03d27a6..5f8c845 100644 --- a/src/cache/checksum.ts +++ b/src/cache/checksum.ts @@ -1,31 +1,6 @@ /** - * Compute a SHA-256 digest using the Web Crypto API (browser or Node.js 18+). - * Returns the raw hash as an ArrayBuffer. - */ -async function sha256Digest(data: ArrayBuffer): Promise { - // Browser environment - if (typeof crypto !== 'undefined' && crypto.subtle) { - return crypto.subtle.digest('SHA-256', data); - } - - // Node.js environment - if (typeof globalThis !== 'undefined') { - try { - const { webcrypto } = await import('crypto'); - if (webcrypto?.subtle) { - return webcrypto.subtle.digest('SHA-256', data); - } - } catch { - // Fallback for older Node.js versions - } - } - - throw new Error('Web Crypto API not available in this environment'); -} - -/** - * Compute SHA-256 checksum of data - * Uses Web Crypto API (available in both browser and Node.js 18+) + * Compute SHA-256 checksum of data. + * Uses the global Web Crypto API (available in browsers and Node.js 18+). */ export async function computeChecksum(data: ArrayBuffer | Uint8Array): Promise { let buffer: ArrayBuffer; @@ -37,7 +12,7 @@ export async function computeChecksum(data: ArrayBuffer | Uint8Array): Promise b.toString(16).padStart(2, '0')).join(''); return hashHex;