diff --git a/rivetkit-typescript/packages/rivetkit/runtime/index.ts b/rivetkit-typescript/packages/rivetkit/runtime/index.ts index 2e8f0130ad..88328d91f9 100644 --- a/rivetkit-typescript/packages/rivetkit/runtime/index.ts +++ b/rivetkit-typescript/packages/rivetkit/runtime/index.ts @@ -9,7 +9,7 @@ import { RemoteEngineControlClient } from "@/engine-client/mod"; import { ENGINE_ENDPOINT } from "@/common/engine"; import type { Registry } from "@/registry"; import type { RegistryActors, RegistryConfig } from "@/registry/config"; -import { getNodeFsSync } from "@/utils/node"; +import { getNodeFsSync, importNodeDependencies } from "@/utils/node"; import pkg from "../package.json" with { type: "json" }; import { logger } from "../src/registry/log"; @@ -149,6 +149,7 @@ export class Runtime { if (this.#config.staticDir) { try { + importNodeDependencies(); const fsSync = getNodeFsSync(); if (fsSync.existsSync(this.#config.staticDir)) { logLine("Static", `./${this.#config.staticDir}`); diff --git a/rivetkit-typescript/packages/rivetkit/src/db/drizzle.ts b/rivetkit-typescript/packages/rivetkit/src/db/drizzle.ts index afeb37cf4a..bf081f6c8b 100644 --- a/rivetkit-typescript/packages/rivetkit/src/db/drizzle.ts +++ b/rivetkit-typescript/packages/rivetkit/src/db/drizzle.ts @@ -10,7 +10,7 @@ import type { SqliteDatabase, } from "@/common/database/config"; import { toSqliteBindings } from "@/common/database/shared"; -import { getNodeCrypto } from "@/utils/node"; +import { sha256Hex } from "@/utils/crypto"; export type { SQLiteTable } from "drizzle-orm/sqlite-core"; export { @@ -243,10 +243,7 @@ async function runMigrations( await db.execute( "INSERT INTO __drizzle_migrations (hash, created_at) VALUES (?, ?)", - getNodeCrypto() - .createHash("sha256") - .update(migration) - .digest("hex"), + await sha256Hex(migration), entry.when, ); } diff --git a/rivetkit-typescript/packages/rivetkit/src/utils/crypto.ts b/rivetkit-typescript/packages/rivetkit/src/utils/crypto.ts index 4d37f73554..453ff79d36 100644 --- a/rivetkit-typescript/packages/rivetkit/src/utils/crypto.ts +++ b/rivetkit-typescript/packages/rivetkit/src/utils/crypto.ts @@ -22,3 +22,17 @@ export function timingSafeEqual( return result === 0; } + +export async function sha256Hex(value: string): Promise { + if (!globalThis.crypto?.subtle) { + throw new Error("Web Crypto API is required to compute SHA-256 hashes"); + } + + const digest = await globalThis.crypto.subtle.digest( + "SHA-256", + new TextEncoder().encode(value), + ); + return Array.from(new Uint8Array(digest), (byte) => + byte.toString(16).padStart(2, "0"), + ).join(""); +}