rivetkit 2.0.22 → 2.0.24-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/schemas/actor-persist/v2.ts +29 -26
- package/dist/tsup/{chunk-3BJJSSTM.js → chunk-227FEWMB.js} +373 -299
- package/dist/tsup/chunk-227FEWMB.js.map +1 -0
- package/dist/tsup/{chunk-CYA35VI3.cjs → chunk-2JYPS5YM.cjs} +6 -6
- package/dist/tsup/{chunk-CYA35VI3.cjs.map → chunk-2JYPS5YM.cjs.map} +1 -1
- package/dist/tsup/{chunk-2GJILCGQ.cjs → chunk-36JJ4IQB.cjs} +3 -3
- package/dist/tsup/{chunk-2GJILCGQ.cjs.map → chunk-36JJ4IQB.cjs.map} +1 -1
- package/dist/tsup/{chunk-V6C34TVH.cjs → chunk-7L65NNWP.cjs} +280 -10
- package/dist/tsup/chunk-7L65NNWP.cjs.map +1 -0
- package/dist/tsup/{chunk-PBFLG45S.js → chunk-BLK27ES3.js} +19 -5
- package/dist/tsup/chunk-BLK27ES3.js.map +1 -0
- package/dist/tsup/{chunk-2WVCZCJL.js → chunk-BOMZS2TJ.js} +6 -6
- package/dist/tsup/{chunk-UB4OHFDW.js → chunk-BYMKMOBS.js} +99 -50
- package/dist/tsup/chunk-BYMKMOBS.js.map +1 -0
- package/dist/tsup/{chunk-D7AA2DK5.js → chunk-CD33GT6Z.js} +2 -2
- package/dist/tsup/{chunk-6YQKMAMV.js → chunk-FX7TWFQR.js} +2 -2
- package/dist/tsup/{chunk-B4QZKOMH.cjs → chunk-HHFKKVLR.cjs} +24 -10
- package/dist/tsup/chunk-HHFKKVLR.cjs.map +1 -0
- package/dist/tsup/{chunk-LMZSOCYD.cjs → chunk-INNFK746.cjs} +12 -12
- package/dist/tsup/{chunk-LMZSOCYD.cjs.map → chunk-INNFK746.cjs.map} +1 -1
- package/dist/tsup/{chunk-HSO2H2SB.cjs → chunk-O44LFKSB.cjs} +561 -487
- package/dist/tsup/chunk-O44LFKSB.cjs.map +1 -0
- package/dist/tsup/{chunk-WWAZJHTS.js → chunk-PLUN2NQT.js} +279 -9
- package/dist/tsup/chunk-PLUN2NQT.js.map +1 -0
- package/dist/tsup/{chunk-EBSGEDD3.js → chunk-S4UJG7ZE.js} +27 -23
- package/dist/tsup/{chunk-EBSGEDD3.js.map → chunk-S4UJG7ZE.js.map} +1 -1
- package/dist/tsup/{chunk-3LFMVAJV.cjs → chunk-SHVX2QUR.cjs} +14 -14
- package/dist/tsup/{chunk-3LFMVAJV.cjs.map → chunk-SHVX2QUR.cjs.map} +1 -1
- package/dist/tsup/{chunk-TI72NLP3.cjs → chunk-VFB23BYZ.cjs} +48 -44
- package/dist/tsup/chunk-VFB23BYZ.cjs.map +1 -0
- package/dist/tsup/{chunk-WVUAO2F7.cjs → chunk-VHGY7PU5.cjs} +283 -234
- package/dist/tsup/chunk-VHGY7PU5.cjs.map +1 -0
- package/dist/tsup/{chunk-TQ4OAC2G.js → chunk-YBG6R7LX.js} +2 -2
- package/dist/tsup/{chunk-2K2LR56Q.js → chunk-YBHYXIP6.js} +3 -3
- package/dist/tsup/{chunk-AR4S2QJ7.cjs → chunk-ZTH3KYFH.cjs} +3 -3
- package/dist/tsup/{chunk-AR4S2QJ7.cjs.map → chunk-ZTH3KYFH.cjs.map} +1 -1
- package/dist/tsup/client/mod.cjs +8 -9
- package/dist/tsup/client/mod.cjs.map +1 -1
- package/dist/tsup/client/mod.d.cts +2 -2
- package/dist/tsup/client/mod.d.ts +2 -2
- package/dist/tsup/client/mod.js +7 -8
- package/dist/tsup/common/log.cjs +2 -3
- package/dist/tsup/common/log.cjs.map +1 -1
- package/dist/tsup/common/log.js +1 -2
- package/dist/tsup/common/websocket.cjs +3 -4
- package/dist/tsup/common/websocket.cjs.map +1 -1
- package/dist/tsup/common/websocket.js +2 -3
- package/dist/tsup/{conn-BYXlxnh0.d.ts → conn-B3Vhbgnd.d.ts} +5 -1
- package/dist/tsup/{conn-BiazosE_.d.cts → conn-DJWL3nGx.d.cts} +5 -1
- package/dist/tsup/driver-helpers/mod.cjs +4 -5
- package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
- package/dist/tsup/driver-helpers/mod.d.cts +1 -1
- package/dist/tsup/driver-helpers/mod.d.ts +1 -1
- package/dist/tsup/driver-helpers/mod.js +3 -4
- package/dist/tsup/driver-test-suite/mod.cjs +70 -72
- package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/driver-test-suite/mod.d.cts +1 -1
- package/dist/tsup/driver-test-suite/mod.d.ts +1 -1
- package/dist/tsup/driver-test-suite/mod.js +11 -13
- package/dist/tsup/driver-test-suite/mod.js.map +1 -1
- package/dist/tsup/inspector/mod.cjs +5 -6
- package/dist/tsup/inspector/mod.cjs.map +1 -1
- package/dist/tsup/inspector/mod.d.cts +2 -2
- package/dist/tsup/inspector/mod.d.ts +2 -2
- package/dist/tsup/inspector/mod.js +4 -5
- package/dist/tsup/mod.cjs +9 -10
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +4 -4
- package/dist/tsup/mod.d.ts +4 -4
- package/dist/tsup/mod.js +8 -9
- package/dist/tsup/test/mod.cjs +10 -11
- package/dist/tsup/test/mod.cjs.map +1 -1
- package/dist/tsup/test/mod.d.cts +1 -1
- package/dist/tsup/test/mod.d.ts +1 -1
- package/dist/tsup/test/mod.js +9 -10
- package/dist/tsup/utils.cjs +2 -2
- package/dist/tsup/utils.js +1 -1
- package/package.json +2 -2
- package/src/actor/conn-drivers.ts +0 -32
- package/src/actor/conn-socket.ts +2 -0
- package/src/actor/conn.ts +13 -12
- package/src/actor/instance.ts +164 -36
- package/src/actor/persisted.ts +4 -1
- package/src/actor/router-endpoints.ts +14 -0
- package/src/actor/router.ts +2 -0
- package/src/actor/utils.test.ts +48 -0
- package/src/actor/utils.ts +23 -0
- package/src/drivers/engine/actor-driver.ts +97 -35
- package/src/drivers/file-system/manager.ts +4 -0
- package/src/schemas/actor-persist/versioned.ts +4 -0
- package/src/utils.ts +15 -6
- package/dist/tsup/chunk-3BJJSSTM.js.map +0 -1
- package/dist/tsup/chunk-B4QZKOMH.cjs.map +0 -1
- package/dist/tsup/chunk-HSO2H2SB.cjs.map +0 -1
- package/dist/tsup/chunk-HZ4ZM3FL.cjs +0 -269
- package/dist/tsup/chunk-HZ4ZM3FL.cjs.map +0 -1
- package/dist/tsup/chunk-PBFLG45S.js.map +0 -1
- package/dist/tsup/chunk-ST6FGRCH.js +0 -269
- package/dist/tsup/chunk-ST6FGRCH.js.map +0 -1
- package/dist/tsup/chunk-TI72NLP3.cjs.map +0 -1
- package/dist/tsup/chunk-UB4OHFDW.js.map +0 -1
- package/dist/tsup/chunk-V6C34TVH.cjs.map +0 -1
- package/dist/tsup/chunk-WVUAO2F7.cjs.map +0 -1
- package/dist/tsup/chunk-WWAZJHTS.js.map +0 -1
- /package/dist/tsup/{chunk-2WVCZCJL.js.map → chunk-BOMZS2TJ.js.map} +0 -0
- /package/dist/tsup/{chunk-D7AA2DK5.js.map → chunk-CD33GT6Z.js.map} +0 -0
- /package/dist/tsup/{chunk-6YQKMAMV.js.map → chunk-FX7TWFQR.js.map} +0 -0
- /package/dist/tsup/{chunk-TQ4OAC2G.js.map → chunk-YBG6R7LX.js.map} +0 -0
- /package/dist/tsup/{chunk-2K2LR56Q.js.map → chunk-YBHYXIP6.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/actor/log.ts","../../src/actor/utils.ts","../../src/common/actor-router-consts.ts","../../src/serde.ts","../../src/actor/protocol/serde.ts"],"sourcesContent":["import { getLogger } from \"@/common/log\";\n\n/** Prever to use ActorInstance.rlog child logger. This does not provide context in the log, should only be used as a last resort if you cannot pass the actor's child logger. */\nexport function loggerWithoutContext() {\n\treturn getLogger(\"actor-runtime\");\n}\n","import * as errors from \"./errors\";\nimport { loggerWithoutContext } from \"./log\";\n\nexport function assertUnreachable(x: never): never {\n\tloggerWithoutContext().error({\n\t\tmsg: \"unreachable\",\n\t\tvalue: `${x}`,\n\t\tstack: new Error().stack,\n\t});\n\tthrow new errors.Unreachable(x);\n}\n\nexport const throttle = <\n\t// biome-ignore lint/suspicious/noExplicitAny: we want to allow any function\n\tFn extends (...args: any) => any,\n>(\n\tfn: Fn,\n\tdelay: number,\n) => {\n\tlet lastRan = false;\n\tlet lastArgs: Parameters<Fn> | null = null;\n\n\treturn (...args: Parameters<Fn>) => {\n\t\tif (!lastRan) {\n\t\t\tfn.apply(this, args);\n\t\t\tlastRan = true;\n\t\t\tconst timer = () =>\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tlastRan = false;\n\t\t\t\t\tif (lastArgs) {\n\t\t\t\t\t\tfn.apply(this, lastArgs);\n\t\t\t\t\t\tlastRan = true;\n\t\t\t\t\t\tlastArgs = null;\n\t\t\t\t\t\ttimer();\n\t\t\t\t\t}\n\t\t\t\t}, delay);\n\t\t\ttimer();\n\t\t} else lastArgs = args;\n\t};\n};\n\nexport class DeadlineError extends Error {\n\tconstructor() {\n\t\tsuper(\"Promise did not complete before deadline.\");\n\t}\n}\n\nexport function deadline<T>(promise: Promise<T>, timeout: number): Promise<T> {\n\tconst controller = new AbortController();\n\tconst signal = controller.signal;\n\n\t// Set a timeout to abort the operation\n\tconst timeoutId = setTimeout(() => controller.abort(), timeout);\n\n\treturn Promise.race<T>([\n\t\tpromise,\n\t\tnew Promise<T>((_, reject) => {\n\t\t\tsignal.addEventListener(\"abort\", () => reject(new DeadlineError()));\n\t\t}),\n\t]).finally(() => {\n\t\tclearTimeout(timeoutId);\n\t});\n}\n\nexport class Lock<T> {\n\tprivate _locked = false;\n\tprivate _waiting: Array<() => void> = [];\n\n\tconstructor(private _value: T) {}\n\n\tasync lock(fn: (value: T) => Promise<void>): Promise<void> {\n\t\tif (this._locked) {\n\t\t\tawait new Promise<void>((resolve) => this._waiting.push(resolve));\n\t\t}\n\t\tthis._locked = true;\n\n\t\ttry {\n\t\t\tawait fn(this._value);\n\t\t} finally {\n\t\t\tthis._locked = false;\n\t\t\tconst next = this._waiting.shift();\n\t\t\tif (next) next();\n\t\t}\n\t}\n}\n\nexport function generateSecureToken(length = 32) {\n\tconst array = new Uint8Array(length);\n\tcrypto.getRandomValues(array);\n\t// Replace base64 chars that are not URL safe with URL-safe chars and strip padding\n\treturn btoa(String.fromCharCode(...array))\n\t\t.replace(/\\+/g, \"-\")\n\t\t.replace(/\\//g, \"_\")\n\t\t.replace(/=/g, \"\");\n}\n\nexport function generateRandomString(length = 32) {\n\tconst characters =\n\t\t\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n\tlet result = \"\";\n\tfor (let i = 0; i < length; i++) {\n\t\tconst randomIndex = Math.floor(Math.random() * characters.length);\n\t\tresult += characters[randomIndex];\n\t}\n\treturn result;\n}\n\n/**\n * Checks if a path is an actor state path within the persisted actor data.\n */\nexport function isStatePath(path: string): boolean {\n\treturn path === \"state\" || path.startsWith(\"state.\");\n}\n\n/**\n * Checks if a path is a connection state path within the persisted actor data.\n */\nexport function isConnStatePath(path: string): boolean {\n\tif (!path.startsWith(\"connections.\")) {\n\t\treturn false;\n\t}\n\tconst stateIndex = path.indexOf(\".state\", 12); // Start after \"connections.\"\n\tif (stateIndex === -1) {\n\t\treturn false;\n\t}\n\tconst afterState = stateIndex + 6; // \".state\".length = 6\n\t// Check if \".state\" is followed by end of string or \".\"\n\treturn path.length === afterState || path[afterState] === \".\";\n}\n","// NOTE: This is in a separate file from the router since it needs to be shared between the client & the server. If this was in the router file, the client would end up importing the *entire* actor router and tree shaking would not work.\n\n// MARK: Paths\nexport const PATH_CONNECT_WEBSOCKET = \"/connect/websocket\";\nexport const PATH_RAW_WEBSOCKET_PREFIX = \"/raw/websocket/\";\n\n// MARK: Headers\nexport const HEADER_ACTOR_QUERY = \"x-rivet-query\";\n\nexport const HEADER_ENCODING = \"x-rivet-encoding\";\n\n// IMPORTANT: Params must be in headers or in an E2EE part of the request (i.e. NOT the URL or query string) in order to ensure that tokens can be securely passed in params.\nexport const HEADER_CONN_PARAMS = \"x-rivet-conn-params\";\n\nexport const HEADER_ACTOR_ID = \"x-rivet-actor\";\n\nexport const HEADER_CONN_ID = \"x-rivet-conn\";\n\nexport const HEADER_CONN_TOKEN = \"x-rivet-conn-token\";\n\nexport const HEADER_RIVET_TOKEN = \"x-rivet-token\";\n\n// MARK: Manager Gateway Headers\nexport const HEADER_RIVET_TARGET = \"x-rivet-target\";\nexport const HEADER_RIVET_ACTOR = \"x-rivet-actor\";\nexport const HEADER_RIVET_NAMESPACE = \"x-rivet-namespace\";\n\n// MARK: WebSocket Protocol Prefixes\n/** Some servers (such as node-ws & Cloudflare) require explicitly match a certain WebSocket protocol. This gives us a static protocol to match against. */\nexport const WS_PROTOCOL_STANDARD = \"rivet\";\nexport const WS_PROTOCOL_TARGET = \"rivet_target.\";\nexport const WS_PROTOCOL_ACTOR = \"rivet_actor.\";\nexport const WS_PROTOCOL_ENCODING = \"rivet_encoding.\";\nexport const WS_PROTOCOL_CONN_PARAMS = \"rivet_conn_params.\";\nexport const WS_PROTOCOL_CONN_ID = \"rivet_conn.\";\nexport const WS_PROTOCOL_CONN_TOKEN = \"rivet_conn_token.\";\nexport const WS_PROTOCOL_TOKEN = \"rivet_token.\";\n\n// MARK: WebSocket Inline Test Protocol Prefixes\nexport const WS_PROTOCOL_TRANSPORT = \"test_transport.\";\nexport const WS_PROTOCOL_PATH = \"test_path.\";\n\n/**\n * Headers that publics can send from public clients.\n *\n * Used for CORS.\n **/\nexport const ALLOWED_PUBLIC_HEADERS = [\n\t\"Content-Type\",\n\t\"User-Agent\",\n\tHEADER_ACTOR_QUERY,\n\tHEADER_ENCODING,\n\tHEADER_CONN_PARAMS,\n\tHEADER_ACTOR_ID,\n\tHEADER_CONN_ID,\n\tHEADER_CONN_TOKEN,\n\tHEADER_RIVET_TARGET,\n\tHEADER_RIVET_ACTOR,\n\tHEADER_RIVET_NAMESPACE,\n\tHEADER_RIVET_TOKEN,\n];\n","import * as cbor from \"cbor-x\";\nimport invariant from \"invariant\";\nimport { assertUnreachable } from \"@/common/utils\";\nimport type { VersionedDataHandler } from \"@/common/versioned-data\";\nimport type { Encoding } from \"@/mod\";\nimport { jsonParseCompat, jsonStringifyCompat } from \"./actor/protocol/serde\";\n\nexport function uint8ArrayToBase64(uint8Array: Uint8Array): string {\n\t// Check if Buffer is available (Node.js)\n\tif (typeof Buffer !== \"undefined\") {\n\t\treturn Buffer.from(uint8Array).toString(\"base64\");\n\t}\n\n\t// Browser environment - use btoa\n\tlet binary = \"\";\n\tconst len = uint8Array.byteLength;\n\tfor (let i = 0; i < len; i++) {\n\t\tbinary += String.fromCharCode(uint8Array[i]);\n\t}\n\treturn btoa(binary);\n}\n\nexport function encodingIsBinary(encoding: Encoding): boolean {\n\tif (encoding === \"json\") {\n\t\treturn false;\n\t} else if (encoding === \"cbor\" || encoding === \"bare\") {\n\t\treturn true;\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n\nexport function contentTypeForEncoding(encoding: Encoding): string {\n\tif (encoding === \"json\") {\n\t\treturn \"application/json\";\n\t} else if (encoding === \"cbor\" || encoding === \"bare\") {\n\t\treturn \"application/octet-stream\";\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n\nexport function wsBinaryTypeForEncoding(\n\tencoding: Encoding,\n): \"arraybuffer\" | \"blob\" {\n\tif (encoding === \"json\") {\n\t\treturn \"blob\";\n\t} else if (encoding === \"cbor\" || encoding === \"bare\") {\n\t\treturn \"arraybuffer\";\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n\nexport function serializeWithEncoding<T>(\n\tencoding: Encoding,\n\tvalue: T,\n\tversionedDataHandler: VersionedDataHandler<T> | undefined,\n): Uint8Array | string {\n\tif (encoding === \"json\") {\n\t\treturn jsonStringifyCompat(value);\n\t} else if (encoding === \"cbor\") {\n\t\treturn cbor.encode(value);\n\t} else if (encoding === \"bare\") {\n\t\tif (!versionedDataHandler) {\n\t\t\tthrow new Error(\n\t\t\t\t\"VersionedDataHandler is required for 'bare' encoding\",\n\t\t\t);\n\t\t}\n\t\treturn versionedDataHandler.serializeWithEmbeddedVersion(value);\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n\nexport function deserializeWithEncoding<T>(\n\tencoding: Encoding,\n\tbuffer: Uint8Array | string,\n\tversionedDataHandler: VersionedDataHandler<T> | undefined,\n): T {\n\tif (encoding === \"json\") {\n\t\tif (typeof buffer === \"string\") {\n\t\t\treturn jsonParseCompat(buffer);\n\t\t} else {\n\t\t\tconst decoder = new TextDecoder(\"utf-8\");\n\t\t\tconst jsonString = decoder.decode(buffer);\n\t\t\treturn jsonParseCompat(jsonString);\n\t\t}\n\t} else if (encoding === \"cbor\") {\n\t\tinvariant(\n\t\t\ttypeof buffer !== \"string\",\n\t\t\t\"buffer cannot be string for cbor encoding\",\n\t\t);\n\t\treturn cbor.decode(buffer);\n\t} else if (encoding === \"bare\") {\n\t\tinvariant(\n\t\t\ttypeof buffer !== \"string\",\n\t\t\t\"buffer cannot be string for bare encoding\",\n\t\t);\n\t\tif (!versionedDataHandler) {\n\t\t\tthrow new Error(\n\t\t\t\t\"VersionedDataHandler is required for 'bare' encoding\",\n\t\t\t);\n\t\t}\n\t\treturn versionedDataHandler.deserializeWithEmbeddedVersion(buffer);\n\t} else {\n\t\tassertUnreachable(encoding);\n\t}\n}\n","import * as cbor from \"cbor-x\";\nimport { z } from \"zod\";\nimport * as errors from \"@/actor/errors\";\nimport type { VersionedDataHandler } from \"@/common/versioned-data\";\nimport { serializeWithEncoding } from \"@/serde\";\nimport { loggerWithoutContext } from \"../log\";\nimport { assertUnreachable } from \"../utils\";\n\n/** Data that can be deserialized. */\nexport type InputData = string | Buffer | Blob | ArrayBufferLike | Uint8Array;\n\n/** Data that's been serialized. */\nexport type OutputData = string | Uint8Array;\n\nexport const EncodingSchema = z.enum([\"json\", \"cbor\", \"bare\"]);\n\n/**\n * Encoding used to communicate between the client & actor.\n */\nexport type Encoding = z.infer<typeof EncodingSchema>;\n\n/**\n * Helper class that helps serialize data without re-serializing for the same encoding.\n */\nexport class CachedSerializer<T> {\n\t#data: T;\n\t#cache = new Map<Encoding, OutputData>();\n\t#versionedDataHandler: VersionedDataHandler<T>;\n\n\tconstructor(data: T, versionedDataHandler: VersionedDataHandler<T>) {\n\t\tthis.#data = data;\n\t\tthis.#versionedDataHandler = versionedDataHandler;\n\t}\n\n\tpublic get rawData(): T {\n\t\treturn this.#data;\n\t}\n\n\tpublic serialize(encoding: Encoding): OutputData {\n\t\tconst cached = this.#cache.get(encoding);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t} else {\n\t\t\tconst serialized = serializeWithEncoding(\n\t\t\t\tencoding,\n\t\t\t\tthis.#data,\n\t\t\t\tthis.#versionedDataHandler,\n\t\t\t);\n\t\t\tthis.#cache.set(encoding, serialized);\n\t\t\treturn serialized;\n\t\t}\n\t}\n}\n\n///**\n// * Use `CachedSerializer` if serializing the same data repeatedly.\n// */\n//export function serialize<T>(value: T, encoding: Encoding): OutputData {\n//\tif (encoding === \"json\") {\n//\t\treturn JSON.stringify(value);\n//\t} else if (encoding === \"cbor\") {\n//\t\t// TODO: Remove this hack, but cbor-x can't handle anything extra in data structures\n//\t\tconst cleanValue = JSON.parse(JSON.stringify(value));\n//\t\treturn cbor.encode(cleanValue);\n//\t} else {\n//\t\tassertUnreachable(encoding);\n//\t}\n//}\n//\n//export async function deserialize(data: InputData, encoding: Encoding) {\n//\tif (encoding === \"json\") {\n//\t\tif (typeof data !== \"string\") {\n//\t\t\tlogger().warn(\"received non-string for json parse\");\n//\t\t\tthrow new errors.MalformedMessage();\n//\t\t} else {\n//\t\t\treturn JSON.parse(data);\n//\t\t}\n//\t} else if (encoding === \"cbor\") {\n//\t\tif (data instanceof Blob) {\n//\t\t\tconst arrayBuffer = await data.arrayBuffer();\n//\t\t\treturn cbor.decode(new Uint8Array(arrayBuffer));\n//\t\t} else if (data instanceof Uint8Array) {\n//\t\t\treturn cbor.decode(data);\n//\t\t} else if (\n//\t\t\tdata instanceof ArrayBuffer ||\n//\t\t\tdata instanceof SharedArrayBuffer\n//\t\t) {\n//\t\t\treturn cbor.decode(new Uint8Array(data));\n//\t\t} else {\n//\t\t\tlogger().warn(\"received non-binary type for cbor parse\");\n//\t\t\tthrow new errors.MalformedMessage();\n//\t\t}\n//\t} else {\n//\t\tassertUnreachable(encoding);\n//\t}\n//}\n\n// TODO: Encode base 128\nfunction base64EncodeUint8Array(uint8Array: Uint8Array): string {\n\tlet binary = \"\";\n\tconst len = uint8Array.byteLength;\n\tfor (let i = 0; i < len; i++) {\n\t\tbinary += String.fromCharCode(uint8Array[i]);\n\t}\n\treturn btoa(binary);\n}\n\nfunction base64EncodeArrayBuffer(arrayBuffer: ArrayBuffer): string {\n\tconst uint8Array = new Uint8Array(arrayBuffer);\n\treturn base64EncodeUint8Array(uint8Array);\n}\n\n/** Converts data that was encoded to a string. Some formats (like SSE) don't support raw binary data. */\nexport function encodeDataToString(message: OutputData): string {\n\tif (typeof message === \"string\") {\n\t\treturn message;\n\t} else if (message instanceof ArrayBuffer) {\n\t\treturn base64EncodeArrayBuffer(message);\n\t} else if (message instanceof Uint8Array) {\n\t\treturn base64EncodeUint8Array(message);\n\t} else {\n\t\tassertUnreachable(message);\n\t}\n}\n\nfunction base64DecodeToUint8Array(base64: string): Uint8Array {\n\t// Check if Buffer is available (Node.js)\n\tif (typeof Buffer !== \"undefined\") {\n\t\treturn new Uint8Array(Buffer.from(base64, \"base64\"));\n\t}\n\n\t// Browser environment - use atob\n\tconst binary = atob(base64);\n\tconst len = binary.length;\n\tconst bytes = new Uint8Array(len);\n\tfor (let i = 0; i < len; i++) {\n\t\tbytes[i] = binary.charCodeAt(i);\n\t}\n\treturn bytes;\n}\n\nfunction base64DecodeToArrayBuffer(base64: string): ArrayBuffer {\n\treturn base64DecodeToUint8Array(base64).buffer as ArrayBuffer;\n}\n\n/** Stringifies with compat for values that BARE & CBOR supports. */\nexport function jsonStringifyCompat(input: any): string {\n\treturn JSON.stringify(input, (_key, value) => {\n\t\tif (typeof value === \"bigint\") {\n\t\t\treturn [\"$BigInt\", value.toString()];\n\t\t} else if (value instanceof ArrayBuffer) {\n\t\t\treturn [\"$ArrayBuffer\", base64EncodeArrayBuffer(value)];\n\t\t} else if (value instanceof Uint8Array) {\n\t\t\treturn [\"$Uint8Array\", base64EncodeUint8Array(value)];\n\t\t}\n\n\t\t// Escape user arrays that start with $ by prepending another $\n\t\tif (\n\t\t\tArray.isArray(value) &&\n\t\t\tvalue.length === 2 &&\n\t\t\ttypeof value[0] === \"string\" &&\n\t\t\tvalue[0].startsWith(\"$\")\n\t\t) {\n\t\t\treturn [\"$\" + value[0], value[1]];\n\t\t}\n\n\t\treturn value;\n\t});\n}\n\n/** Parses JSON with compat for values that BARE & CBOR supports. */\nexport function jsonParseCompat(input: string): any {\n\treturn JSON.parse(input, (_key, value) => {\n\t\t// Handle arrays with $ prefix\n\t\tif (\n\t\t\tArray.isArray(value) &&\n\t\t\tvalue.length === 2 &&\n\t\t\ttypeof value[0] === \"string\" &&\n\t\t\tvalue[0].startsWith(\"$\")\n\t\t) {\n\t\t\t// Known special types\n\t\t\tif (value[0] === \"$BigInt\") {\n\t\t\t\treturn BigInt(value[1]);\n\t\t\t} else if (value[0] === \"$ArrayBuffer\") {\n\t\t\t\treturn base64DecodeToArrayBuffer(value[1]);\n\t\t\t} else if (value[0] === \"$Uint8Array\") {\n\t\t\t\treturn base64DecodeToUint8Array(value[1]);\n\t\t\t}\n\n\t\t\t// Unescape user arrays that started with $ ($$foo -> $foo)\n\t\t\tif (value[0].startsWith(\"$$\")) {\n\t\t\t\treturn [value[0].substring(1), value[1]];\n\t\t\t}\n\n\t\t\t// Unknown type starting with $ - this is an error\n\t\t\tthrow new Error(\n\t\t\t\t`Unknown JSON encoding type: ${value[0]}. This may indicate corrupted data or a version mismatch.`,\n\t\t\t);\n\t\t}\n\n\t\treturn value;\n\t});\n}\n"],"mappings":"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","names":["assertUnreachable","assertUnreachable"]}
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createFileSystemOrMemoryDriver,
|
|
3
3
|
createManagerRouter
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-BYMKMOBS.js";
|
|
5
5
|
import {
|
|
6
6
|
configureInspectorAccessToken
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-FX7TWFQR.js";
|
|
8
8
|
import {
|
|
9
9
|
createClientWithDriver
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-227FEWMB.js";
|
|
11
11
|
import {
|
|
12
12
|
ClientConfigSchema,
|
|
13
13
|
RunnerConfigSchema
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-S4UJG7ZE.js";
|
|
15
15
|
import {
|
|
16
16
|
getLogger
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-PLUN2NQT.js";
|
|
18
18
|
|
|
19
19
|
// src/test/mod.ts
|
|
20
20
|
import { createServer } from "net";
|
|
@@ -127,4 +127,4 @@ export {
|
|
|
127
127
|
setupTest,
|
|
128
128
|
getPort
|
|
129
129
|
};
|
|
130
|
-
//# sourceMappingURL=chunk-
|
|
130
|
+
//# sourceMappingURL=chunk-BOMZS2TJ.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
inspectorLogger,
|
|
5
5
|
isInspectorEnabled,
|
|
6
6
|
secureInspector
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-FX7TWFQR.js";
|
|
8
8
|
import {
|
|
9
9
|
ActorDefinition,
|
|
10
10
|
PERSIST_SYMBOL,
|
|
@@ -18,10 +18,10 @@ import {
|
|
|
18
18
|
lookupInRegistry,
|
|
19
19
|
serializeActorKey,
|
|
20
20
|
updateRunnerConfig
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-227FEWMB.js";
|
|
22
22
|
import {
|
|
23
23
|
CreateActorSchema
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-YBG6R7LX.js";
|
|
25
25
|
import {
|
|
26
26
|
ActionContext,
|
|
27
27
|
ClientConfigSchema,
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
createVersionedDataHandler,
|
|
34
34
|
parseMessage,
|
|
35
35
|
serializeEmptyPersistData
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-S4UJG7ZE.js";
|
|
37
37
|
import {
|
|
38
38
|
EncodingSchema,
|
|
39
39
|
HEADER_ACTOR_ID,
|
|
@@ -59,27 +59,25 @@ import {
|
|
|
59
59
|
generateRandomString,
|
|
60
60
|
loggerWithoutContext,
|
|
61
61
|
serializeWithEncoding
|
|
62
|
-
} from "./chunk-
|
|
63
|
-
import {
|
|
64
|
-
configureBaseLogger,
|
|
65
|
-
configureDefaultLogger,
|
|
66
|
-
getLogger
|
|
67
|
-
} from "./chunk-ST6FGRCH.js";
|
|
62
|
+
} from "./chunk-BLK27ES3.js";
|
|
68
63
|
import {
|
|
69
64
|
EXTRA_ERROR_LOG,
|
|
70
65
|
VERSION,
|
|
71
66
|
arrayBuffersEqual,
|
|
72
67
|
assertUnreachable,
|
|
73
68
|
bufferToArrayBuffer,
|
|
69
|
+
configureBaseLogger,
|
|
70
|
+
configureDefaultLogger,
|
|
74
71
|
deconstructError,
|
|
75
72
|
getEnvUniversal,
|
|
73
|
+
getLogger,
|
|
76
74
|
idToStr,
|
|
77
75
|
noopNext,
|
|
78
76
|
package_default,
|
|
79
77
|
promiseWithResolvers,
|
|
80
78
|
setLongTimeout,
|
|
81
79
|
stringifyError
|
|
82
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-PLUN2NQT.js";
|
|
83
81
|
import {
|
|
84
82
|
ActorAlreadyExists,
|
|
85
83
|
ConnNotFound,
|
|
@@ -489,7 +487,7 @@ var HonoWebSocketAdapter = class {
|
|
|
489
487
|
|
|
490
488
|
// src/actor/router-endpoints.ts
|
|
491
489
|
var SSE_PING_INTERVAL = 1e3;
|
|
492
|
-
async function handleWebSocketConnect(req, runConfig, actorDriver, actorId, encoding, parameters, requestId, connId, connToken) {
|
|
490
|
+
async function handleWebSocketConnect(req, runConfig, actorDriver, actorId, encoding, parameters, requestId, requestIdBuf, connId, connToken) {
|
|
493
491
|
const exposeInternalError = req ? getRequestExposeInternalError(req) : false;
|
|
494
492
|
const {
|
|
495
493
|
promise: handlersPromise,
|
|
@@ -534,9 +532,14 @@ async function handleWebSocketConnect(req, runConfig, actorDriver, actorId, enco
|
|
|
534
532
|
connId,
|
|
535
533
|
actorId
|
|
536
534
|
});
|
|
535
|
+
const isHibernatable = !!requestIdBuf && actor2[PERSIST_SYMBOL].hibernatableWebSocket.findIndex(
|
|
536
|
+
(ws2) => arrayBuffersEqual(ws2.requestId, requestIdBuf)
|
|
537
|
+
) !== -1;
|
|
537
538
|
conn = await actor2.createConn(
|
|
538
539
|
{
|
|
539
540
|
requestId,
|
|
541
|
+
requestIdBuf,
|
|
542
|
+
hibernatable: isHibernatable,
|
|
540
543
|
driverState: {
|
|
541
544
|
[0 /* WEBSOCKET */]: {
|
|
542
545
|
encoding,
|
|
@@ -667,6 +670,7 @@ async function handleSseConnect(c, _runConfig, actorDriver, actorId) {
|
|
|
667
670
|
conn = await actor2.createConn(
|
|
668
671
|
{
|
|
669
672
|
requestId,
|
|
673
|
+
hibernatable: false,
|
|
670
674
|
driverState: {
|
|
671
675
|
[1 /* SSE */]: {
|
|
672
676
|
encoding,
|
|
@@ -740,6 +744,7 @@ async function handleAction(c, _runConfig, actorDriver, actionName, actorId) {
|
|
|
740
744
|
conn = await actor2.createConn(
|
|
741
745
|
{
|
|
742
746
|
requestId,
|
|
747
|
+
hibernatable: false,
|
|
743
748
|
driverState: { [2 /* HTTP */]: {} }
|
|
744
749
|
},
|
|
745
750
|
parameters,
|
|
@@ -801,7 +806,7 @@ async function handleConnectionClose(c, _runConfig, actorDriver, connId, connTok
|
|
|
801
806
|
await conn.disconnect("Connection closed by client request");
|
|
802
807
|
return c.json({});
|
|
803
808
|
}
|
|
804
|
-
async function handleRawWebSocketHandler(req, path4, actorDriver, actorId) {
|
|
809
|
+
async function handleRawWebSocketHandler(req, path4, actorDriver, actorId, requestIdBuf) {
|
|
805
810
|
const actor2 = await actorDriver.loadActor(actorId);
|
|
806
811
|
return {
|
|
807
812
|
onOpen: (evt, ws) => {
|
|
@@ -1081,6 +1086,7 @@ function createActorRouter(runConfig, actorDriver, isTest) {
|
|
|
1081
1086
|
encoding,
|
|
1082
1087
|
connParams,
|
|
1083
1088
|
generateConnRequestId(),
|
|
1089
|
+
void 0,
|
|
1084
1090
|
connIdRaw,
|
|
1085
1091
|
connTokenRaw
|
|
1086
1092
|
);
|
|
@@ -1175,7 +1181,8 @@ function createActorRouter(runConfig, actorDriver, isTest) {
|
|
|
1175
1181
|
c2.req.raw,
|
|
1176
1182
|
pathWithQuery,
|
|
1177
1183
|
actorDriver,
|
|
1178
|
-
c2.env.actorId
|
|
1184
|
+
c2.env.actorId,
|
|
1185
|
+
void 0
|
|
1179
1186
|
);
|
|
1180
1187
|
})(c, noopNext());
|
|
1181
1188
|
} else {
|
|
@@ -1612,7 +1619,6 @@ var EngineActorDriver = class {
|
|
|
1612
1619
|
this,
|
|
1613
1620
|
registryConfig.test.enabled
|
|
1614
1621
|
);
|
|
1615
|
-
let hasDisconnected = false;
|
|
1616
1622
|
const engineRunnerConfig = {
|
|
1617
1623
|
version: this.#version,
|
|
1618
1624
|
endpoint: getEndpoint(runConfig),
|
|
@@ -1626,30 +1632,9 @@ var EngineActorDriver = class {
|
|
|
1626
1632
|
},
|
|
1627
1633
|
prepopulateActorNames: buildActorNames(registryConfig),
|
|
1628
1634
|
onConnected: () => {
|
|
1629
|
-
if (hasDisconnected) {
|
|
1630
|
-
logger4().info({
|
|
1631
|
-
msg: "runner reconnected",
|
|
1632
|
-
namespace: this.#runConfig.namespace,
|
|
1633
|
-
runnerName: this.#runConfig.runnerName
|
|
1634
|
-
});
|
|
1635
|
-
} else {
|
|
1636
|
-
logger4().debug({
|
|
1637
|
-
msg: "runner connected",
|
|
1638
|
-
namespace: this.#runConfig.namespace,
|
|
1639
|
-
runnerName: this.#runConfig.runnerName
|
|
1640
|
-
});
|
|
1641
|
-
}
|
|
1642
1635
|
this.#runnerStarted.resolve(void 0);
|
|
1643
1636
|
},
|
|
1644
|
-
onDisconnected: (
|
|
1645
|
-
logger4().warn({
|
|
1646
|
-
msg: "runner disconnected",
|
|
1647
|
-
namespace: this.#runConfig.namespace,
|
|
1648
|
-
runnerName: this.#runConfig.runnerName,
|
|
1649
|
-
code,
|
|
1650
|
-
reason
|
|
1651
|
-
});
|
|
1652
|
-
hasDisconnected = true;
|
|
1637
|
+
onDisconnected: (_code, _reason) => {
|
|
1653
1638
|
},
|
|
1654
1639
|
onShutdown: () => {
|
|
1655
1640
|
this.#runnerStopped.resolve(void 0);
|
|
@@ -1687,16 +1672,31 @@ var EngineActorDriver = class {
|
|
|
1687
1672
|
});
|
|
1688
1673
|
return { enabled: false, lastMsgIndex: void 0 };
|
|
1689
1674
|
}
|
|
1690
|
-
const
|
|
1675
|
+
const hibernatableArray = handler.actor[PERSIST_SYMBOL].hibernatableWebSocket;
|
|
1676
|
+
logger4().debug({
|
|
1677
|
+
msg: "checking hibernatable websockets",
|
|
1678
|
+
requestId: idToStr(requestId),
|
|
1679
|
+
existingHibernatableWebSockets: hibernatableArray.length
|
|
1680
|
+
});
|
|
1681
|
+
const existingWs = hibernatableArray.find(
|
|
1691
1682
|
(ws) => arrayBuffersEqual(ws.requestId, requestId)
|
|
1692
1683
|
);
|
|
1693
1684
|
let hibernationConfig;
|
|
1694
1685
|
if (existingWs) {
|
|
1686
|
+
logger4().debug({
|
|
1687
|
+
msg: "found existing hibernatable websocket",
|
|
1688
|
+
requestId: idToStr(requestId),
|
|
1689
|
+
lastMsgIndex: existingWs.msgIndex
|
|
1690
|
+
});
|
|
1695
1691
|
hibernationConfig = {
|
|
1696
1692
|
enabled: true,
|
|
1697
1693
|
lastMsgIndex: Number(existingWs.msgIndex)
|
|
1698
1694
|
};
|
|
1699
1695
|
} else {
|
|
1696
|
+
logger4().debug({
|
|
1697
|
+
msg: "no existing hibernatable websocket found",
|
|
1698
|
+
requestId: idToStr(requestId)
|
|
1699
|
+
});
|
|
1700
1700
|
if (path4 === PATH_CONNECT_WEBSOCKET) {
|
|
1701
1701
|
hibernationConfig = {
|
|
1702
1702
|
enabled: true,
|
|
@@ -1754,11 +1754,23 @@ var EngineActorDriver = class {
|
|
|
1754
1754
|
};
|
|
1755
1755
|
}
|
|
1756
1756
|
}
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1757
|
+
if (existingWs) {
|
|
1758
|
+
logger4().debug({
|
|
1759
|
+
msg: "updated existing hibernatable websocket timestamp",
|
|
1760
|
+
requestId: idToStr(requestId)
|
|
1761
|
+
});
|
|
1762
|
+
existingWs.lastSeenTimestamp = BigInt(Date.now());
|
|
1763
|
+
} else {
|
|
1764
|
+
logger4().debug({
|
|
1765
|
+
msg: "created new hibernatable websocket entry",
|
|
1766
|
+
requestId: idToStr(requestId)
|
|
1767
|
+
});
|
|
1768
|
+
handler.actor[PERSIST_SYMBOL].hibernatableWebSocket.push({
|
|
1769
|
+
requestId,
|
|
1770
|
+
lastSeenTimestamp: BigInt(Date.now()),
|
|
1771
|
+
msgIndex: -1n
|
|
1772
|
+
});
|
|
1773
|
+
}
|
|
1762
1774
|
return hibernationConfig;
|
|
1763
1775
|
}
|
|
1764
1776
|
};
|
|
@@ -1807,6 +1819,11 @@ var EngineActorDriver = class {
|
|
|
1807
1819
|
const handler = this.#actors.get(actorId);
|
|
1808
1820
|
if (!handler) throw new Error(`Actor ${actorId} not loaded`);
|
|
1809
1821
|
handler.persistedData = data;
|
|
1822
|
+
logger4().debug({
|
|
1823
|
+
msg: "writing persisted data for actor",
|
|
1824
|
+
actorId,
|
|
1825
|
+
dataSize: data.byteLength
|
|
1826
|
+
});
|
|
1810
1827
|
await this.#runner.kvPut(actorId, [[KEYS.PERSIST_DATA, data]]);
|
|
1811
1828
|
}
|
|
1812
1829
|
async setAlarm(actor2, timestamp) {
|
|
@@ -1826,7 +1843,7 @@ var EngineActorDriver = class {
|
|
|
1826
1843
|
}
|
|
1827
1844
|
// Runner lifecycle callbacks
|
|
1828
1845
|
async #runnerOnActorStart(actorId, generation, actorConfig) {
|
|
1829
|
-
var _a;
|
|
1846
|
+
var _a, _b;
|
|
1830
1847
|
logger4().debug({
|
|
1831
1848
|
msg: "runner actor starting",
|
|
1832
1849
|
actorId,
|
|
@@ -1849,6 +1866,12 @@ var EngineActorDriver = class {
|
|
|
1849
1866
|
KEYS.PERSIST_DATA
|
|
1850
1867
|
]);
|
|
1851
1868
|
handler.persistedData = persistedValue !== null ? persistedValue : serializeEmptyPersistData(input);
|
|
1869
|
+
logger4().debug({
|
|
1870
|
+
msg: "loaded persisted data for actor",
|
|
1871
|
+
actorId,
|
|
1872
|
+
dataSize: (_a = handler.persistedData) == null ? void 0 : _a.byteLength,
|
|
1873
|
+
wasInStorage: persistedValue !== null
|
|
1874
|
+
});
|
|
1852
1875
|
}
|
|
1853
1876
|
const name = actorConfig.name;
|
|
1854
1877
|
invariant3(actorConfig.key, "actor should have a key");
|
|
@@ -1867,7 +1890,7 @@ var EngineActorDriver = class {
|
|
|
1867
1890
|
"unknown"
|
|
1868
1891
|
// TODO: Add regions
|
|
1869
1892
|
);
|
|
1870
|
-
(
|
|
1893
|
+
(_b = handler.actorStartPromise) == null ? void 0 : _b.resolve();
|
|
1871
1894
|
handler.actorStartPromise = void 0;
|
|
1872
1895
|
logger4().debug({ msg: "runner actor started", actorId, name, key });
|
|
1873
1896
|
}
|
|
@@ -1930,6 +1953,7 @@ var EngineActorDriver = class {
|
|
|
1930
1953
|
encoding,
|
|
1931
1954
|
connParams,
|
|
1932
1955
|
requestId,
|
|
1956
|
+
requestIdBuf,
|
|
1933
1957
|
// Extract connId and connToken from protocols if needed
|
|
1934
1958
|
void 0,
|
|
1935
1959
|
void 0
|
|
@@ -1939,7 +1963,8 @@ var EngineActorDriver = class {
|
|
|
1939
1963
|
request,
|
|
1940
1964
|
url.pathname + url.search,
|
|
1941
1965
|
this,
|
|
1942
|
-
actorId
|
|
1966
|
+
actorId,
|
|
1967
|
+
requestIdBuf
|
|
1943
1968
|
);
|
|
1944
1969
|
} else {
|
|
1945
1970
|
throw new Error(`Unreachable path: ${url.pathname}`);
|
|
@@ -2008,7 +2033,27 @@ var EngineActorDriver = class {
|
|
|
2008
2033
|
this.#runner.sleepActor(actorId);
|
|
2009
2034
|
}
|
|
2010
2035
|
async shutdownRunner(immediate) {
|
|
2011
|
-
logger4().info({ msg: "stopping engine actor driver" });
|
|
2036
|
+
logger4().info({ msg: "stopping engine actor driver", immediate });
|
|
2037
|
+
logger4().debug({
|
|
2038
|
+
msg: "stopping all actors before shutdown",
|
|
2039
|
+
actorCount: this.#actors.size
|
|
2040
|
+
});
|
|
2041
|
+
const stopPromises = [];
|
|
2042
|
+
for (const [_actorId, handler] of this.#actors.entries()) {
|
|
2043
|
+
if (handler.actor) {
|
|
2044
|
+
stopPromises.push(
|
|
2045
|
+
handler.actor._onStop().catch((err) => {
|
|
2046
|
+
var _a;
|
|
2047
|
+
(_a = handler.actor) == null ? void 0 : _a.rLog.error({
|
|
2048
|
+
msg: "_onStop errored",
|
|
2049
|
+
error: stringifyError(err)
|
|
2050
|
+
});
|
|
2051
|
+
})
|
|
2052
|
+
);
|
|
2053
|
+
}
|
|
2054
|
+
}
|
|
2055
|
+
await Promise.all(stopPromises);
|
|
2056
|
+
logger4().debug({ msg: "all actors stopped" });
|
|
2012
2057
|
if (this.#wsAckFlushInterval) {
|
|
2013
2058
|
clearInterval(this.#wsAckFlushInterval);
|
|
2014
2059
|
this.#wsAckFlushInterval = void 0;
|
|
@@ -2961,6 +3006,7 @@ var FileSystemManagerDriver = class {
|
|
|
2961
3006
|
encoding,
|
|
2962
3007
|
params,
|
|
2963
3008
|
generateConnRequestId(),
|
|
3009
|
+
void 0,
|
|
2964
3010
|
connId,
|
|
2965
3011
|
connToken
|
|
2966
3012
|
);
|
|
@@ -2970,7 +3016,8 @@ var FileSystemManagerDriver = class {
|
|
|
2970
3016
|
void 0,
|
|
2971
3017
|
path4,
|
|
2972
3018
|
this.#actorDriver,
|
|
2973
|
-
actorId
|
|
3019
|
+
actorId,
|
|
3020
|
+
void 0
|
|
2974
3021
|
);
|
|
2975
3022
|
return new InlineWebSocketAdapter2(wsHandler);
|
|
2976
3023
|
} else {
|
|
@@ -2997,6 +3044,7 @@ var FileSystemManagerDriver = class {
|
|
|
2997
3044
|
encoding,
|
|
2998
3045
|
connParams,
|
|
2999
3046
|
generateConnRequestId(),
|
|
3047
|
+
void 0,
|
|
3000
3048
|
connId,
|
|
3001
3049
|
connToken
|
|
3002
3050
|
);
|
|
@@ -3006,7 +3054,8 @@ var FileSystemManagerDriver = class {
|
|
|
3006
3054
|
c.req.raw,
|
|
3007
3055
|
path4,
|
|
3008
3056
|
this.#actorDriver,
|
|
3009
|
-
actorId
|
|
3057
|
+
actorId,
|
|
3058
|
+
void 0
|
|
3010
3059
|
);
|
|
3011
3060
|
return upgradeWebSocket(() => wsHandler)(c, noopNext());
|
|
3012
3061
|
} else {
|
|
@@ -4825,4 +4874,4 @@ export {
|
|
|
4825
4874
|
setup
|
|
4826
4875
|
};
|
|
4827
4876
|
//! These configs configs hold anything that's not platform-specific about running actors.
|
|
4828
|
-
//# sourceMappingURL=chunk-
|
|
4877
|
+
//# sourceMappingURL=chunk-BYMKMOBS.js.map
|