UNPKG

@rivetkit/core

Version:

1 lines 22.4 kB
{"version":3,"sources":["/home/nathan/rivetkit/packages/core/dist/chunk-HIB3AS73.cjs","../src/common/utils.ts","../package.json","../src/utils.ts"],"names":[],"mappings":"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E,QAAA;AACb,MAAA;AACF,IAAA;AACS,IAAA;AACG,MAAA;AACC,QAAA;AACE,QAAA;AACb,MAAA;AACW,MAAA;AACA,QAAA;AACE,QAAA;AACb,MAAA;AACF,IAAA;AACY,IAAA;AACA,MAAA;AACC,QAAA;AACE,QAAA;AACb,MAAA;AACW,MAAA;AACA,QAAA;AACE,QAAA;AACb,MAAA;AACF,IAAA;AACW,IAAA;AACC,MAAA;AACC,QAAA;AACE,QAAA;AACb,MAAA;AACW,MAAA;AACA,QAAA;AACE,QAAA;AACb,MAAA;AACF,IAAA;AACoB,IAAA;AACR,MAAA;AACC,QAAA;AACE,QAAA;AACb,MAAA;AACW,MAAA;AACA,QAAA;AACE,QAAA;AACb,MAAA;AACF,IAAA;AAC8B,IAAA;AAClB,MAAA;AACC,QAAA;AACE,QAAA;AACb,MAAA;AACW,MAAA;AACA,QAAA;AACE,QAAA;AACb,MAAA;AACF,IAAA;AACuB,IAAA;AACX,MAAA;AACC,QAAA;AACE,QAAA;AACb,MAAA;AACW,MAAA;AACA,QAAA;AACE,QAAA;AACb,MAAA;AACF,IAAA;AAC2B,IAAA;AACf,MAAA;AACC,QAAA;AACE,QAAA;AACb,MAAA;AACW,MAAA;AACA,QAAA;AACE,QAAA;AACb,MAAA;AACF,IAAA;AAC0B,IAAA;AACd,MAAA;AACC,QAAA;AACE,QAAA;AACb,MAAA;AACW,MAAA;AACA,QAAA;AACE,QAAA;AACb,MAAA;AACF,IAAA;AACU,IAAA;AACE,MAAA;AACC,QAAA;AACE,QAAA;AACb,MAAA;AACW,MAAA;AACA,QAAA;AACE,QAAA;AACb,MAAA;AACF,IAAA;AACe,IAAA;AACH,MAAA;AACC,QAAA;AACE,QAAA;AACb,MAAA;AACW,MAAA;AACA,QAAA;AACE,QAAA;AACb,MAAA;AACF,IAAA;AACF,EAAA;AACW,EAAA;AACD,IAAA;AACV,EAAA;AACe,EAAA;AACJ,EAAA;AACF,IAAA;AACE,IAAA;AACM,IAAA;AACP,IAAA;AACA,IAAA;AACM,IAAA;AACE,IAAA;AAClB,EAAA;AACgB,EAAA;AACc,IAAA;AAClB,IAAA;AACmB,IAAA;AAChB,IAAA;AACC,IAAA;AACD,IAAA;AACF,IAAA;AACJ,IAAA;AACc,IAAA;AACb,IAAA;AACV,EAAA;AACmB,EAAA;AACI,IAAA;AACJ,IAAA;AACO,IAAA;AACJ,IAAA;AACL,IAAA;AACF,IAAA;AACC,IAAA;AACI,IAAA;AACH,IAAA;AACP,IAAA;AACD,IAAA;AACO,IAAA;AACJ,IAAA;AACJ,IAAA;AACR,EAAA;AACoB,EAAA;AACG,IAAA;AACJ,IAAA;AACF,IAAA;AACT,IAAA;AACR,EAAA;AACwB,EAAA;AACD,IAAA;AACP,MAAA;AACd,IAAA;AACiB,IAAA;AACH,MAAA;AACd,IAAA;AACe,IAAA;AACD,MAAA;AACd,IAAA;AACM,IAAA;AACQ,MAAA;AACd,IAAA;AACF,EAAA;AACiB,EAAA;AACnB;AFoMyC;AACA;AG7YV;AAE3B;AAEoC;AAET,EAAA;AACtB,IAAA;AACR,EAAA;AAGmC,EAAA;AAGP,EAAA;AACxB,EAAA;AAES,EAAA;AAEN,EAAA;AACR;AAMiE;AAC/B,EAAA;AACT,IAAA;AACM,EAAA;AAEP,IAAA;AACvB,EAAA;AACD;AAEgC;AACjB,EAAA;AAAqB;AAC5B,EAAA;AACR;AAS8E;AAC7C,EAAA;AACxB,IAAA;AACmB,EAAA;AACA,IAAA;AACU,EAAA;AAEzB,IAAA;AACyB,MAAA;AACpC,IAAA;AACM,EAAA;AACc,IAAA;AACrB,EAAA;AACD;AHuXyC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/nathan/rivetkit/packages/core/dist/chunk-HIB3AS73.cjs","sourcesContent":[null,"import type { Next } from \"hono\";\nimport type { ContentfulStatusCode } from \"hono/utils/http-status\";\nimport * as errors from \"@/actor/errors\";\nimport { getEnvUniversal } from \"@/utils\";\nimport type { Logger } from \"./log\";\n\nexport function assertUnreachable(x: never): never {\n\tthrow new Error(`Unreachable case: ${x}`);\n}\n\n/**\n * Safely stringifies an object, ensuring that the stringified object is under a certain size.\n * @param obj any object to stringify\n * @param maxSize maximum size of the stringified object in bytes\n * @returns stringified object\n */\nexport function safeStringify(obj: unknown, maxSize: number) {\n\tlet size = 0;\n\n\tfunction replacer(key: string, value: unknown) {\n\t\tif (value === null || value === undefined) return value;\n\t\tconst valueSize =\n\t\t\ttypeof value === \"string\" ? value.length : JSON.stringify(value).length;\n\t\tsize += key.length + valueSize;\n\n\t\tif (size > maxSize) {\n\t\t\tthrow new Error(`JSON object exceeds size limit of ${maxSize} bytes.`);\n\t\t}\n\n\t\treturn value;\n\t}\n\n\treturn JSON.stringify(obj, replacer);\n}\n\n// TODO: Instead of doing this, use a temp var for state and attempt to write\n// it. Roll back state if fails to serialize.\n\n/**\n * Check if a value is CBOR serializable.\n * Optionally pass an onInvalid callback to receive the path to invalid values.\n *\n * For a complete list of supported CBOR tags, see:\n * https://github.com/kriszyp/cbor-x/blob/cc1cf9df8ba72288c7842af1dd374d73e34cdbc1/README.md#list-of-supported-tags-for-decoding\n */\nexport function isCborSerializable(\n\tvalue: unknown,\n\tonInvalid?: (path: string) => void,\n\tcurrentPath = \"\",\n): boolean {\n\t// Handle primitive types directly\n\tif (value === null || value === undefined) {\n\t\treturn true;\n\t}\n\n\tif (typeof value === \"number\") {\n\t\tif (!Number.isFinite(value)) {\n\t\t\tonInvalid?.(currentPath);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (typeof value === \"boolean\" || typeof value === \"string\") {\n\t\treturn true;\n\t}\n\n\t// Handle BigInt (CBOR tags 2 and 3)\n\tif (typeof value === \"bigint\") {\n\t\treturn true;\n\t}\n\n\t// Handle Date objects (CBOR tags 0 and 1)\n\tif (value instanceof Date) {\n\t\treturn true;\n\t}\n\n\t// Handle typed arrays (CBOR tags 64-82)\n\tif (\n\t\tvalue instanceof Uint8Array ||\n\t\tvalue instanceof Uint8ClampedArray ||\n\t\tvalue instanceof Uint16Array ||\n\t\tvalue instanceof Uint32Array ||\n\t\tvalue instanceof BigUint64Array ||\n\t\tvalue instanceof Int8Array ||\n\t\tvalue instanceof Int16Array ||\n\t\tvalue instanceof Int32Array ||\n\t\tvalue instanceof BigInt64Array ||\n\t\tvalue instanceof Float32Array ||\n\t\tvalue instanceof Float64Array\n\t) {\n\t\treturn true;\n\t}\n\n\t// Handle Map (CBOR tag 259)\n\tif (value instanceof Map) {\n\t\tfor (const [key, val] of value.entries()) {\n\t\t\tconst keyPath = currentPath\n\t\t\t\t? `${currentPath}.key(${String(key)})`\n\t\t\t\t: `key(${String(key)})`;\n\t\t\tconst valPath = currentPath\n\t\t\t\t? `${currentPath}.value(${String(key)})`\n\t\t\t\t: `value(${String(key)})`;\n\t\t\tif (\n\t\t\t\t!isCborSerializable(key, onInvalid, keyPath) ||\n\t\t\t\t!isCborSerializable(val, onInvalid, valPath)\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t// Handle Set (CBOR tag 258)\n\tif (value instanceof Set) {\n\t\tlet index = 0;\n\t\tfor (const item of value.values()) {\n\t\t\tconst itemPath = currentPath\n\t\t\t\t? `${currentPath}.set[${index}]`\n\t\t\t\t: `set[${index}]`;\n\t\t\tif (!isCborSerializable(item, onInvalid, itemPath)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tindex++;\n\t\t}\n\t\treturn true;\n\t}\n\n\t// Handle RegExp (CBOR tag 27)\n\tif (value instanceof RegExp) {\n\t\treturn true;\n\t}\n\n\t// Handle Error objects (CBOR tag 27)\n\tif (value instanceof Error) {\n\t\treturn true;\n\t}\n\n\t// Handle arrays\n\tif (Array.isArray(value)) {\n\t\tfor (let i = 0; i < value.length; i++) {\n\t\t\tconst itemPath = currentPath ? `${currentPath}[${i}]` : `[${i}]`;\n\t\t\tif (!isCborSerializable(value[i], onInvalid, itemPath)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t// Handle plain objects and records (CBOR tags 105, 51, 57344-57599)\n\tif (typeof value === \"object\") {\n\t\t// Allow plain objects and objects with prototypes (for records and named objects)\n\t\tconst proto = Object.getPrototypeOf(value);\n\t\tif (proto !== null && proto !== Object.prototype) {\n\t\t\t// Check if it's a known serializable object type\n\t\t\tconst protoConstructor = value.constructor;\n\t\t\tif (protoConstructor && typeof protoConstructor.name === \"string\") {\n\t\t\t\t// Allow objects with named constructors (records, named objects)\n\t\t\t\t// This includes user-defined classes and built-in objects\n\t\t\t\t// that CBOR can serialize with tag 27 or record tags\n\t\t\t}\n\t\t}\n\n\t\t// Check all properties recursively\n\t\tfor (const key in value) {\n\t\t\tconst propPath = currentPath ? `${currentPath}.${key}` : key;\n\t\t\tif (\n\t\t\t\t!isCborSerializable(\n\t\t\t\t\tvalue[key as keyof typeof value],\n\t\t\t\t\tonInvalid,\n\t\t\t\t\tpropPath,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t// Not serializable\n\tonInvalid?.(currentPath);\n\treturn false;\n}\n\nexport interface DeconstructedError {\n\t__type: \"ActorError\";\n\tstatusCode: ContentfulStatusCode;\n\tpublic: boolean;\n\tcode: string;\n\tmessage: string;\n\tmetadata?: unknown;\n}\n\n/** Deconstructs error in to components that are used to build responses. */\nexport function deconstructError(\n\terror: unknown,\n\tlogger: Logger,\n\textraLog: Record<string, unknown>,\n\texposeInternalError = false,\n): DeconstructedError {\n\t// Build response error information. Only return errors if flagged as public in order to prevent leaking internal behavior.\n\t//\n\t// We log the error here instead of after generating the code & message because we need to log the original error, not the masked internal error.\n\tlet statusCode: ContentfulStatusCode;\n\tlet public_: boolean;\n\tlet code: string;\n\tlet message: string;\n\tlet metadata: unknown;\n\tif (errors.ActorError.isActorError(error) && error.public) {\n\t\t// Check if error has statusCode (could be ActorError instance or DeconstructedError)\n\t\tstatusCode = (\n\t\t\t\"statusCode\" in error && error.statusCode ? error.statusCode : 400\n\t\t) as ContentfulStatusCode;\n\t\tpublic_ = true;\n\t\tcode = error.code;\n\t\tmessage = getErrorMessage(error);\n\t\tmetadata = error.metadata;\n\n\t\tlogger.info(\"public error\", {\n\t\t\tcode,\n\t\t\tmessage,\n\t\t\tissues: \"https://github.com/rivet-gg/rivetkit/issues\",\n\t\t\tsupport: \"https://rivet.gg/discord\",\n\t\t\t...extraLog,\n\t\t});\n\t} else if (exposeInternalError) {\n\t\tif (errors.ActorError.isActorError(error)) {\n\t\t\tstatusCode = 500;\n\t\t\tpublic_ = false;\n\t\t\tcode = error.code;\n\t\t\tmessage = getErrorMessage(error);\n\t\t\tmetadata = error.metadata;\n\n\t\t\tlogger.info(\"internal error\", {\n\t\t\t\tcode,\n\t\t\t\tmessage,\n\t\t\t\tissues: \"https://github.com/rivet-gg/rivetkit/issues\",\n\t\t\t\tsupport: \"https://rivet.gg/discord\",\n\t\t\t\t...extraLog,\n\t\t\t});\n\t\t} else {\n\t\t\tstatusCode = 500;\n\t\t\tpublic_ = false;\n\t\t\tcode = errors.INTERNAL_ERROR_CODE;\n\t\t\tmessage = getErrorMessage(error);\n\n\t\t\tlogger.info(\"internal error\", {\n\t\t\t\tcode,\n\t\t\t\tmessage,\n\t\t\t\tissues: \"https://github.com/rivet-gg/rivetkit/issues\",\n\t\t\t\tsupport: \"https://rivet.gg/discord\",\n\t\t\t\t...extraLog,\n\t\t\t});\n\t\t}\n\t} else {\n\t\tstatusCode = 500;\n\t\tpublic_ = false;\n\t\tcode = errors.INTERNAL_ERROR_CODE;\n\t\tmessage = errors.INTERNAL_ERROR_DESCRIPTION;\n\t\tmetadata = {\n\t\t\t//url: `https://hub.rivet.gg/projects/${actorMetadata.project.slug}/environments/${actorMetadata.environment.slug}/actors?actorId=${actorMetadata.actor.id}`,\n\t\t} satisfies errors.InternalErrorMetadata;\n\n\t\tlogger.warn(\"internal error\", {\n\t\t\terror: getErrorMessage(error),\n\t\t\tstack: (error as Error)?.stack,\n\t\t\tissues: \"https://github.com/rivet-gg/rivetkit/issues\",\n\t\t\tsupport: \"https://rivet.gg/discord\",\n\t\t\t...extraLog,\n\t\t});\n\t}\n\n\treturn {\n\t\t__type: \"ActorError\",\n\t\tstatusCode,\n\t\tpublic: public_,\n\t\tcode,\n\t\tmessage,\n\t\tmetadata,\n\t};\n}\n\nexport function stringifyError(error: unknown): string {\n\tif (error instanceof Error) {\n\t\tif (\n\t\t\ttypeof process !== \"undefined\" &&\n\t\t\tgetEnvUniversal(\"_RIVETKIT_ERROR_STACK\") === \"1\"\n\t\t) {\n\t\t\treturn `${error.name}: ${error.message}${error.stack ? `\\n${error.stack}` : \"\"}`;\n\t\t} else {\n\t\t\treturn `${error.name}: ${error.message}`;\n\t\t}\n\t} else if (typeof error === \"string\") {\n\t\treturn error;\n\t} else if (typeof error === \"object\" && error !== null) {\n\t\ttry {\n\t\t\treturn `${JSON.stringify(error)}`;\n\t\t} catch {\n\t\t\treturn \"[cannot stringify error]\";\n\t\t}\n\t} else {\n\t\treturn `Unknown error: ${getErrorMessage(error)}`;\n\t}\n}\n\nfunction getErrorMessage(err: unknown): string {\n\tif (\n\t\terr &&\n\t\ttypeof err === \"object\" &&\n\t\t\"message\" in err &&\n\t\ttypeof err.message === \"string\"\n\t) {\n\t\treturn err.message;\n\t} else {\n\t\treturn String(err);\n\t}\n}\n\n/** Generates a `Next` handler to pass to middleware in order to be able to call arbitrary middleware. */\nexport function noopNext(): Next {\n\treturn async () => {};\n}\n","{\n \"name\": \"@rivetkit/core\",\n \"version\": \"0.9.9\",\n \"license\": \"Apache-2.0\",\n \"keywords\": [\n \"rivetkit\",\n \"stateful\",\n \"serverless\",\n \"actors\",\n \"agents\",\n \"realtime\",\n \"websocket\",\n \"actors\",\n \"framework\"\n ],\n \"files\": [\n \"dist\",\n \"src\",\n \"deno.json\",\n \"bun.json\",\n \"package.json\"\n ],\n \"type\": \"module\",\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/mod.d.ts\",\n \"default\": \"./dist/mod.js\"\n },\n \"require\": {\n \"types\": \"./dist/mod.d.cts\",\n \"default\": \"./dist/mod.cjs\"\n }\n },\n \"./client\": {\n \"import\": {\n \"types\": \"./dist/client/mod.d.ts\",\n \"default\": \"./dist/client/mod.js\"\n },\n \"require\": {\n \"types\": \"./dist/client/mod.d.cts\",\n \"default\": \"./dist/client/mod.cjs\"\n }\n },\n \"./log\": {\n \"import\": {\n \"types\": \"./dist/common/log.d.ts\",\n \"default\": \"./dist/common/log.js\"\n },\n \"require\": {\n \"types\": \"./dist/common/log.d.cts\",\n \"default\": \"./dist/common/log.cjs\"\n }\n },\n \"./errors\": {\n \"import\": {\n \"types\": \"./dist/actor/errors.d.ts\",\n \"default\": \"./dist/actor/errors.js\"\n },\n \"require\": {\n \"types\": \"./dist/actor/errors.d.cts\",\n \"default\": \"./dist/actor/errors.cjs\"\n }\n },\n \"./utils\": {\n \"import\": {\n \"types\": \"./dist/utils.d.ts\",\n \"default\": \"./dist/utils.js\"\n },\n \"require\": {\n \"types\": \"./dist/utils.d.cts\",\n \"default\": \"./dist/utils.cjs\"\n }\n },\n \"./driver-helpers\": {\n \"import\": {\n \"types\": \"./dist/driver-helpers/mod.d.ts\",\n \"default\": \"./dist/driver-helpers/mod.js\"\n },\n \"require\": {\n \"types\": \"./dist/driver-helpers/mod.d.cts\",\n \"default\": \"./dist/driver-helpers/mod.cjs\"\n }\n },\n \"./driver-helpers/websocket\": {\n \"import\": {\n \"types\": \"./dist/common/websocket.d.ts\",\n \"default\": \"./dist/common/websocket.js\"\n },\n \"require\": {\n \"types\": \"./dist/common/websocket.d.cts\",\n \"default\": \"./dist/common/websocket.cjs\"\n }\n },\n \"./driver-test-suite\": {\n \"import\": {\n \"types\": \"./dist/driver-test-suite/mod.d.ts\",\n \"default\": \"./dist/driver-test-suite/mod.js\"\n },\n \"require\": {\n \"types\": \"./dist/driver-test-suite/mod.d.cts\",\n \"default\": \"./dist/driver-test-suite/mod.cjs\"\n }\n },\n \"./topologies/coordinate\": {\n \"import\": {\n \"types\": \"./dist/topologies/coordinate/mod.d.ts\",\n \"default\": \"./dist/topologies/coordinate/mod.js\"\n },\n \"require\": {\n \"types\": \"./dist/topologies/coordinate/mod.d.cts\",\n \"default\": \"./dist/topologies/coordinate/mod.cjs\"\n }\n },\n \"./topologies/partition\": {\n \"import\": {\n \"types\": \"./dist/topologies/partition/mod.d.ts\",\n \"default\": \"./dist/topologies/partition/mod.js\"\n },\n \"require\": {\n \"types\": \"./dist/topologies/partition/mod.d.cts\",\n \"default\": \"./dist/topologies/partition/mod.cjs\"\n }\n },\n \"./test\": {\n \"import\": {\n \"types\": \"./dist/test/mod.d.ts\",\n \"default\": \"./dist/test/mod.js\"\n },\n \"require\": {\n \"types\": \"./dist/test/mod.d.cts\",\n \"default\": \"./dist/test/mod.cjs\"\n }\n },\n \"./inspector\": {\n \"import\": {\n \"types\": \"./dist/inspector/mod.d.ts\",\n \"default\": \"./dist/inspector/mod.js\"\n },\n \"require\": {\n \"types\": \"./dist/inspector/mod.d.cts\",\n \"default\": \"./dist/inspector/mod.cjs\"\n }\n }\n },\n \"engines\": {\n \"node\": \">=22.0.0\"\n },\n \"sideEffects\": false,\n \"scripts\": {\n \"dev\": \"pnpm build --watch\",\n \"build\": \"tsup src/mod.ts src/client/mod.ts src/common/log.ts src/common/websocket.ts src/actor/errors.ts src/topologies/coordinate/mod.ts src/topologies/partition/mod.ts src/utils.ts src/driver-helpers/mod.ts src/driver-test-suite/mod.ts src/test/mod.ts src/inspector/mod.ts\",\n \"check-types\": \"tsc --noEmit\",\n \"boop\": \"tsc --outDir dist/test -d\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"dump-openapi\": \"tsx scripts/dump-openapi.ts\"\n },\n \"dependencies\": {\n \"@hono/standard-validator\": \"^0.1.3\",\n \"cbor-x\": \"^1.6.0\",\n \"@rivetkit/fast-json-patch\": \"^3.1.2\",\n \"invariant\": \"^2.2.4\",\n \"nanoevents\": \"^9.1.0\",\n \"on-change\": \"^5.0.1\",\n \"p-retry\": \"^6.2.1\",\n \"zod\": \"^3.25.76\",\n \"@hono/zod-openapi\": \"^0.19.10\",\n \"hono\": \"^4.7.0\"\n },\n \"devDependencies\": {\n \"@hono/node-server\": \"^1.14.0\",\n \"@hono/node-ws\": \"^1.1.1\",\n \"@rivet-gg/actor-core\": \"^25.1.0\",\n \"@types/invariant\": \"^2\",\n \"@types/node\": \"^22.13.1\",\n \"@types/ws\": \"^8\",\n \"@vitest/ui\": \"3.1.1\",\n \"bundle-require\": \"^5.1.0\",\n \"eventsource\": \"^3.0.5\",\n \"tsup\": \"^8.4.0\",\n \"tsx\": \"^4.19.4\",\n \"typescript\": \"^5.7.3\",\n \"vitest\": \"^3.1.1\",\n \"ws\": \"^8.18.1\"\n },\n \"peerDependencies\": {\n \"@hono/node-server\": \"^1.14.0\",\n \"@hono/node-ws\": \"^1.1.1\",\n \"eventsource\": \"^3.0.5\",\n \"ws\": \"^8.0.0\"\n },\n \"peerDependenciesMeta\": {\n \"@hono/node-server\": {\n \"optional\": true\n },\n \"@hono/node-ws\": {\n \"optional\": true\n },\n \"eventsource\": {\n \"optional\": true\n },\n \"ws\": {\n \"optional\": true\n }\n },\n \"stableVersion\": \"0.8.0\"\n}\n","export { stringifyError } from \"@/common/utils\";\nexport { assertUnreachable } from \"./common/utils\";\n\nimport type { Context as HonoContext, Handler as HonoHandler } from \"hono\";\n\nimport pkgJson from \"../package.json\" with { type: \"json\" };\n\nexport const VERSION = pkgJson.version;\n\nlet _userAgent: string | undefined;\n\nexport function httpUserAgent(): string {\n\t// Return cached value if already initialized\n\tif (_userAgent !== undefined) {\n\t\treturn _userAgent;\n\t}\n\n\t// Library\n\tlet userAgent = `RivetKit/${VERSION}`;\n\n\t// Navigator\n\tconst navigatorObj = typeof navigator !== \"undefined\" ? navigator : undefined;\n\tif (navigatorObj?.userAgent) userAgent += ` ${navigatorObj.userAgent}`;\n\n\t_userAgent = userAgent;\n\n\treturn userAgent;\n}\n\nexport type UpgradeWebSocket = (\n\tcreateEvents: (c: HonoContext) => any,\n) => HonoHandler;\n\nexport function getEnvUniversal(key: string): string | undefined {\n\tif (typeof Deno !== \"undefined\") {\n\t\treturn Deno.env.get(key);\n\t} else if (typeof process !== \"undefined\") {\n\t\t// Do this after Deno since `process` is sometimes polyfilled\n\t\treturn process.env[key];\n\t}\n}\n\nexport function dbg<T>(x: T): T {\n\tconsole.trace(`=== DEBUG ===\\n${x}`);\n\treturn x;\n}\n\n/**\n * Converts various ArrayBuffer-like types to Uint8Array.\n * Handles ArrayBuffer, ArrayBufferView (including typed arrays), and passes through existing Uint8Array.\n *\n * @param data - The ArrayBuffer or ArrayBufferView to convert\n * @returns A Uint8Array view of the data\n */\nexport function toUint8Array(data: ArrayBuffer | ArrayBufferView): Uint8Array {\n\tif (data instanceof Uint8Array) {\n\t\treturn data;\n\t} else if (data instanceof ArrayBuffer) {\n\t\treturn new Uint8Array(data);\n\t} else if (ArrayBuffer.isView(data)) {\n\t\t// Handle other ArrayBufferView types (Int8Array, Uint16Array, DataView, etc.)\n\t\treturn new Uint8Array(\n\t\t\tdata.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength),\n\t\t);\n\t} else {\n\t\tthrow new TypeError(\"Input must be ArrayBuffer or ArrayBufferView\");\n\t}\n}\n"]}