rivetkit 2.3.3 → 2.3.5-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/browser/client.d.ts +157 -9
- package/dist/browser/client.js +518 -542
- package/dist/browser/client.js.map +1 -1
- package/dist/browser/inspector/client.d.ts +101 -2
- package/dist/browser/inspector/client.js +1245 -227
- package/dist/browser/inspector/client.js.map +1 -1
- package/dist/tsup/agent-os/index.cjs +103 -36
- package/dist/tsup/agent-os/index.cjs.map +1 -1
- package/dist/tsup/agent-os/index.d.cts +159 -11
- package/dist/tsup/agent-os/index.d.ts +159 -11
- package/dist/tsup/agent-os/index.js +103 -36
- package/dist/tsup/agent-os/index.js.map +1 -1
- package/dist/tsup/{chunk-34P567PO.cjs → chunk-4XKED5P5.cjs} +145 -176
- package/dist/tsup/chunk-4XKED5P5.cjs.map +1 -0
- package/dist/tsup/{chunk-PYO2U53V.cjs → chunk-6HQCLWAW.cjs} +384 -4
- package/dist/tsup/chunk-6HQCLWAW.cjs.map +1 -0
- package/dist/tsup/{chunk-JZ7TWV65.js → chunk-7AFZMFPQ.js} +15 -1
- package/dist/tsup/chunk-7AFZMFPQ.js.map +1 -0
- package/dist/tsup/{chunk-BLDO2FKO.js → chunk-B4IZU537.js} +382 -2
- package/dist/tsup/chunk-B4IZU537.js.map +1 -0
- package/dist/tsup/{chunk-3MHDOUD7.cjs → chunk-G3CCRCTK.cjs} +14 -9
- package/dist/tsup/chunk-G3CCRCTK.cjs.map +1 -0
- package/dist/tsup/{chunk-CXRPENO3.js → chunk-GAV4PKFT.js} +15 -46
- package/dist/tsup/{chunk-CXRPENO3.js.map → chunk-GAV4PKFT.js.map} +1 -1
- package/dist/tsup/{chunk-HXUEHHJF.js → chunk-JI6GZ2C2.js} +2 -11
- package/dist/tsup/{chunk-HXUEHHJF.js.map → chunk-JI6GZ2C2.js.map} +1 -1
- package/dist/tsup/{chunk-YUEC5SEY.cjs → chunk-M3FCXL3Q.cjs} +3 -3
- package/dist/tsup/{chunk-YUEC5SEY.cjs.map → chunk-M3FCXL3Q.cjs.map} +1 -1
- package/dist/tsup/{chunk-KEKWJECX.js → chunk-MGTSVSUC.js} +2 -2
- package/dist/tsup/{chunk-VE2X4KMG.cjs → chunk-MYWZCDML.cjs} +2 -11
- package/dist/tsup/chunk-MYWZCDML.cjs.map +1 -0
- package/dist/tsup/{chunk-DFA7SYSW.js → chunk-NIC3QLKL.js} +3 -3
- package/dist/tsup/{chunk-BZM4PMFS.js → chunk-P4OGQ4JL.js} +5 -7
- package/dist/tsup/{chunk-BZM4PMFS.js.map → chunk-P4OGQ4JL.js.map} +1 -1
- package/dist/tsup/{chunk-NT2NK3VT.js → chunk-PAG6G46L.js} +2 -2
- package/dist/tsup/{chunk-XIX5DOZN.js → chunk-SHBE77IT.js} +14 -9
- package/dist/tsup/chunk-SHBE77IT.js.map +1 -0
- package/dist/tsup/{chunk-TYLP3U4Y.cjs → chunk-TNIWIUNV.cjs} +9 -11
- package/dist/tsup/chunk-TNIWIUNV.cjs.map +1 -0
- package/dist/tsup/{chunk-S644FL73.cjs → chunk-TR5NLR5V.cjs} +4 -4
- package/dist/tsup/{chunk-S644FL73.cjs.map → chunk-TR5NLR5V.cjs.map} +1 -1
- package/dist/tsup/{chunk-ZA7FLHKH.cjs → chunk-UEULFXUI.cjs} +16 -2
- package/dist/tsup/chunk-UEULFXUI.cjs.map +1 -0
- package/dist/tsup/{chunk-X63ROSOG.cjs → chunk-UJ2FQY63.cjs} +7 -7
- package/dist/tsup/{chunk-X63ROSOG.cjs.map → chunk-UJ2FQY63.cjs.map} +1 -1
- package/dist/tsup/client/mod.cjs +7 -8
- package/dist/tsup/client/mod.cjs.map +1 -1
- package/dist/tsup/client/mod.d.cts +5 -4
- package/dist/tsup/client/mod.d.ts +5 -4
- package/dist/tsup/client/mod.js +6 -7
- package/dist/tsup/common/log.cjs +2 -2
- package/dist/tsup/common/log.js +1 -1
- package/dist/tsup/common/websocket.cjs +3 -3
- package/dist/tsup/common/websocket.js +2 -2
- package/dist/tsup/{config-D49x8NpL.d.cts → config-BxOimoGX.d.cts} +16 -0
- package/dist/tsup/{config-D49x8NpL.d.ts → config-BxOimoGX.d.ts} +16 -0
- package/dist/tsup/{config-ZkIsRFsN.d.ts → config-BzdqbLAP.d.ts} +164 -27
- package/dist/tsup/{config-BfBhjEbk.d.cts → config-CPPEwn_e.d.cts} +164 -27
- package/dist/tsup/{context-sZ9GlaBK.d.cts → context-DSA9gFXB.d.cts} +2 -2
- package/dist/tsup/{context-B7-84u9K.d.ts → context-wWv-K2K_.d.ts} +2 -2
- package/dist/tsup/db/drizzle.cjs +120 -68
- package/dist/tsup/db/drizzle.cjs.map +1 -1
- package/dist/tsup/db/drizzle.d.cts +8 -3
- package/dist/tsup/db/drizzle.d.ts +8 -3
- package/dist/tsup/db/drizzle.js +120 -68
- package/dist/tsup/db/drizzle.js.map +1 -1
- package/dist/tsup/db/mod.cjs +74 -22
- package/dist/tsup/db/mod.cjs.map +1 -1
- package/dist/tsup/db/mod.d.cts +4 -3
- package/dist/tsup/db/mod.d.ts +4 -3
- package/dist/tsup/db/mod.js +74 -22
- package/dist/tsup/db/mod.js.map +1 -1
- package/dist/tsup/dynamic/mod.cjs +2 -2
- package/dist/tsup/dynamic/mod.d.cts +3 -3
- package/dist/tsup/dynamic/mod.d.ts +3 -3
- package/dist/tsup/dynamic/mod.js +1 -1
- package/dist/tsup/inspector/mod.cjs +4 -5
- package/dist/tsup/inspector/mod.cjs.map +1 -1
- package/dist/tsup/inspector/mod.js +3 -4
- package/dist/tsup/inspector/mod.js.map +1 -1
- package/dist/tsup/inspector-tab/mod.cjs +2 -2
- package/dist/tsup/inspector-tab/mod.cjs.map +1 -1
- package/dist/tsup/inspector-tab/mod.d.cts +5 -5
- package/dist/tsup/inspector-tab/mod.d.ts +5 -5
- package/dist/tsup/inspector-tab/mod.js +1 -1
- package/dist/tsup/inspector-tab/mod.js.map +1 -1
- package/dist/tsup/mod.cjs +605 -158
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +5 -5
- package/dist/tsup/mod.d.ts +5 -5
- package/dist/tsup/mod.js +528 -81
- package/dist/tsup/mod.js.map +1 -1
- package/dist/tsup/test/mod.cjs +10 -11
- package/dist/tsup/test/mod.cjs.map +1 -1
- package/dist/tsup/test/mod.d.cts +3 -3
- package/dist/tsup/test/mod.d.ts +3 -3
- package/dist/tsup/test/mod.js +6 -7
- package/dist/tsup/test/mod.js.map +1 -1
- package/dist/tsup/utils-CV0akuDD.d.ts +162 -0
- package/dist/tsup/utils-DQDCphrl.d.cts +162 -0
- package/dist/tsup/utils.cjs +6 -2
- package/dist/tsup/utils.cjs.map +1 -1
- package/dist/tsup/utils.d.cts +3 -146
- package/dist/tsup/utils.d.ts +3 -146
- package/dist/tsup/utils.js +5 -1
- package/dist/tsup/workflow/mod.cjs +198 -151
- package/dist/tsup/workflow/mod.cjs.map +1 -1
- package/dist/tsup/workflow/mod.d.cts +5 -5
- package/dist/tsup/workflow/mod.d.ts +5 -5
- package/dist/tsup/workflow/mod.js +187 -140
- package/dist/tsup/workflow/mod.js.map +1 -1
- package/package.json +8 -8
- package/src/actor/config.test.ts +14 -0
- package/src/actor/config.ts +104 -16
- package/src/actor/definition.ts +18 -7
- package/src/agent-os/actor/index.ts +2 -2
- package/src/common/bare/generated/actor-runtime-socket-protocol/v1.ts +848 -0
- package/src/common/bare/generated/inspector/v6.ts +1367 -0
- package/src/common/database/config.ts +24 -0
- package/src/common/database/mod.test.ts +148 -59
- package/src/common/database/mod.ts +93 -23
- package/src/common/database/native-database.test.ts +9 -0
- package/src/common/database/native-database.ts +151 -0
- package/src/common/database/shared.ts +15 -0
- package/src/common/encoding.ts +28 -21
- package/src/db/drizzle.test.ts +157 -0
- package/src/db/drizzle.ts +170 -79
- package/src/dynamic/isolate-runtime.ts +0 -2
- package/src/engine-client/driver.ts +0 -15
- package/src/engine-client/mod.ts +0 -41
- package/src/inspector/client.browser.ts +69 -8
- package/src/inspector-tab/mod.ts +1 -0
- package/src/registry/config/index.ts +1 -35
- package/src/registry/napi-runtime.ts +204 -16
- package/src/registry/native.ts +200 -30
- package/src/registry/runtime.ts +146 -3
- package/src/registry/wasm-runtime.ts +217 -6
- package/src/utils.ts +3 -0
- package/src/workflow/context.ts +5 -27
- package/src/workflow/driver.test.ts +62 -0
- package/src/workflow/driver.ts +231 -113
- package/src/workflow/mod.ts +3 -3
- package/dist/tsup/chunk-34P567PO.cjs.map +0 -1
- package/dist/tsup/chunk-3MHDOUD7.cjs.map +0 -1
- package/dist/tsup/chunk-APW73HCH.cjs +0 -382
- package/dist/tsup/chunk-APW73HCH.cjs.map +0 -1
- package/dist/tsup/chunk-BLDO2FKO.js.map +0 -1
- package/dist/tsup/chunk-DHXWD4DF.js +0 -382
- package/dist/tsup/chunk-DHXWD4DF.js.map +0 -1
- package/dist/tsup/chunk-JZ7TWV65.js.map +0 -1
- package/dist/tsup/chunk-PYO2U53V.cjs.map +0 -1
- package/dist/tsup/chunk-TYLP3U4Y.cjs.map +0 -1
- package/dist/tsup/chunk-VE2X4KMG.cjs.map +0 -1
- package/dist/tsup/chunk-XIX5DOZN.js.map +0 -1
- package/dist/tsup/chunk-ZA7FLHKH.cjs.map +0 -1
- package/src/actor/driver.ts +0 -141
- package/src/actor/instance/mod.ts +0 -2484
- package/src/drivers/engine/actor-driver.ts +0 -2473
- /package/dist/tsup/{chunk-KEKWJECX.js.map → chunk-MGTSVSUC.js.map} +0 -0
- /package/dist/tsup/{chunk-DFA7SYSW.js.map → chunk-NIC3QLKL.js.map} +0 -0
- /package/dist/tsup/{chunk-NT2NK3VT.js.map → chunk-PAG6G46L.js.map} +0 -0
package/dist/browser/client.js
CHANGED
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
pino,
|
|
4
4
|
stdTimeFunctions
|
|
5
5
|
} from "pino";
|
|
6
|
-
import { z } from "zod/v4";
|
|
6
|
+
import { z as z2 } from "zod/v4";
|
|
7
7
|
|
|
8
8
|
// src/actor/errors.ts
|
|
9
9
|
var INTERNAL_ERROR_CODE = "internal_error";
|
|
@@ -194,7 +194,7 @@ function noopNext() {
|
|
|
194
194
|
// package.json
|
|
195
195
|
var package_default = {
|
|
196
196
|
name: "rivetkit",
|
|
197
|
-
version: "2.3.
|
|
197
|
+
version: "2.3.5-rc.1",
|
|
198
198
|
description: "Lightweight libraries for building stateful actors on edge platforms",
|
|
199
199
|
license: "Apache-2.0",
|
|
200
200
|
keywords: [
|
|
@@ -441,440 +441,150 @@ var package_default = {
|
|
|
441
441
|
stableVersion: "0.8.0"
|
|
442
442
|
};
|
|
443
443
|
|
|
444
|
-
// src/
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
444
|
+
// src/common/encoding.ts
|
|
445
|
+
import { z } from "zod/v4";
|
|
446
|
+
|
|
447
|
+
// src/serde.ts
|
|
448
|
+
import * as cbor from "cbor-x";
|
|
449
|
+
import invariant from "invariant";
|
|
450
|
+
function uint8ArrayToBase64(uint8Array) {
|
|
451
|
+
if (typeof Buffer !== "undefined") {
|
|
452
|
+
return Buffer.from(uint8Array).toString("base64");
|
|
450
453
|
}
|
|
451
|
-
let
|
|
452
|
-
const
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
454
|
+
let binary = "";
|
|
455
|
+
const len = uint8Array.byteLength;
|
|
456
|
+
for (let i = 0; i < len; i++) {
|
|
457
|
+
binary += String.fromCharCode(uint8Array[i]);
|
|
458
|
+
}
|
|
459
|
+
return btoa(binary);
|
|
456
460
|
}
|
|
457
|
-
function
|
|
458
|
-
if (
|
|
459
|
-
return
|
|
460
|
-
} else if (
|
|
461
|
-
return
|
|
461
|
+
function contentTypeForEncoding(encoding) {
|
|
462
|
+
if (encoding === "json") {
|
|
463
|
+
return "application/json";
|
|
464
|
+
} else if (encoding === "cbor" || encoding === "bare") {
|
|
465
|
+
return "application/octet-stream";
|
|
466
|
+
} else {
|
|
467
|
+
assertUnreachable(encoding);
|
|
462
468
|
}
|
|
463
469
|
}
|
|
464
|
-
function
|
|
465
|
-
|
|
466
|
-
let reject;
|
|
467
|
-
const promise = new Promise((res, rej) => {
|
|
468
|
-
resolve = res;
|
|
469
|
-
reject = rej;
|
|
470
|
-
});
|
|
471
|
-
promise.catch(onReject);
|
|
472
|
-
return { promise, resolve, reject };
|
|
470
|
+
function encodeCborCompat(value) {
|
|
471
|
+
return cbor.encode(encodeJsonCompatValue(value));
|
|
473
472
|
}
|
|
474
|
-
function
|
|
475
|
-
return
|
|
476
|
-
buf.byteOffset,
|
|
477
|
-
buf.byteOffset + buf.byteLength
|
|
478
|
-
);
|
|
473
|
+
function decodeCborCompat(buffer) {
|
|
474
|
+
return reviveJsonCompatValue(cbor.decode(buffer));
|
|
479
475
|
}
|
|
480
|
-
function
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
if (
|
|
490
|
-
|
|
476
|
+
function serializeWithEncoding(encoding, value, versionedDataHandler, version, zodSchema, toJson, toBare) {
|
|
477
|
+
if (encoding === "json") {
|
|
478
|
+
const jsonValue = toJson(value);
|
|
479
|
+
const validated = zodSchema.parse(jsonValue);
|
|
480
|
+
return jsonStringifyCompat(validated);
|
|
481
|
+
} else if (encoding === "cbor") {
|
|
482
|
+
const jsonValue = toJson(value);
|
|
483
|
+
const validated = zodSchema.parse(jsonValue);
|
|
484
|
+
return cbor.encode(validated);
|
|
485
|
+
} else if (encoding === "bare") {
|
|
486
|
+
if (!versionedDataHandler) {
|
|
487
|
+
throw new Error(
|
|
488
|
+
"VersionedDataHandler is required for 'bare' encoding"
|
|
489
|
+
);
|
|
490
|
+
}
|
|
491
|
+
if (version === void 0) {
|
|
492
|
+
throw new Error("version is required for 'bare' encoding");
|
|
493
|
+
}
|
|
494
|
+
const bareValue = toBare(value);
|
|
495
|
+
return versionedDataHandler.serializeWithEmbeddedVersion(
|
|
496
|
+
bareValue,
|
|
497
|
+
version
|
|
498
|
+
);
|
|
499
|
+
} else {
|
|
500
|
+
assertUnreachable(encoding);
|
|
491
501
|
}
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
502
|
+
}
|
|
503
|
+
function deserializeWithEncoding(encoding, buffer, versionedDataHandler, zodSchema, fromJson, fromBare) {
|
|
504
|
+
if (encoding === "json") {
|
|
505
|
+
let parsed;
|
|
506
|
+
if (typeof buffer === "string") {
|
|
507
|
+
parsed = jsonParseCompat(buffer);
|
|
508
|
+
} else {
|
|
509
|
+
const decoder = new TextDecoder("utf-8");
|
|
510
|
+
const jsonString = decoder.decode(buffer);
|
|
511
|
+
parsed = jsonParseCompat(jsonString);
|
|
512
|
+
}
|
|
513
|
+
const validated = zodSchema.parse(parsed);
|
|
514
|
+
return fromJson(validated);
|
|
515
|
+
} else if (encoding === "cbor") {
|
|
516
|
+
invariant(
|
|
517
|
+
typeof buffer !== "string",
|
|
518
|
+
"buffer cannot be string for cbor encoding"
|
|
519
|
+
);
|
|
520
|
+
const decoded = decodeCborCompat(buffer);
|
|
521
|
+
const validated = zodSchema.parse(decoded);
|
|
522
|
+
return fromJson(validated);
|
|
523
|
+
} else if (encoding === "bare") {
|
|
524
|
+
invariant(
|
|
525
|
+
typeof buffer !== "string",
|
|
526
|
+
"buffer cannot be string for bare encoding"
|
|
527
|
+
);
|
|
528
|
+
if (!versionedDataHandler) {
|
|
529
|
+
throw new Error(
|
|
530
|
+
"VersionedDataHandler is required for 'bare' encoding"
|
|
531
|
+
);
|
|
499
532
|
}
|
|
533
|
+
const bareValue = versionedDataHandler.deserializeWithEmbeddedVersion(buffer);
|
|
534
|
+
return fromBare(bareValue);
|
|
535
|
+
} else {
|
|
536
|
+
assertUnreachable(encoding);
|
|
500
537
|
}
|
|
501
|
-
const fullQuery = queryParts.length > 0 ? `?${queryParts.join("&")}` : "";
|
|
502
|
-
return `${baseUrl.protocol}//${baseUrl.host}${fullPath}${fullQuery}`;
|
|
503
538
|
}
|
|
504
539
|
|
|
505
|
-
// src/
|
|
506
|
-
var
|
|
507
|
-
var
|
|
508
|
-
var
|
|
509
|
-
var
|
|
510
|
-
var
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
var
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
// src/common/log.ts
|
|
519
|
-
var baseLogger;
|
|
520
|
-
var configuredLogLevel;
|
|
521
|
-
var loggerCache = /* @__PURE__ */ new Map();
|
|
522
|
-
var LogLevelSchema = z.enum([
|
|
523
|
-
"trace",
|
|
524
|
-
"debug",
|
|
525
|
-
"info",
|
|
526
|
-
"warn",
|
|
527
|
-
"error",
|
|
528
|
-
"fatal",
|
|
529
|
-
"silent"
|
|
530
|
-
]);
|
|
531
|
-
function getPinoLevel(logLevel) {
|
|
532
|
-
if (logLevel) {
|
|
533
|
-
return logLevel;
|
|
540
|
+
// src/common/encoding.ts
|
|
541
|
+
var JSON_COMPAT_BIGINT = "$BigInt";
|
|
542
|
+
var JSON_COMPAT_ARRAY_BUFFER = "$ArrayBuffer";
|
|
543
|
+
var JSON_COMPAT_UINT8_ARRAY = "$Uint8Array";
|
|
544
|
+
var JSON_COMPAT_UNDEFINED = "$Undefined";
|
|
545
|
+
var JSON_COMPAT_SET = "$Set";
|
|
546
|
+
function isTypedArray(value) {
|
|
547
|
+
return value instanceof Uint8ClampedArray || value instanceof Uint16Array || value instanceof Uint32Array || value instanceof BigUint64Array || value instanceof Int8Array || value instanceof Int16Array || value instanceof Int32Array || value instanceof BigInt64Array || value instanceof Float32Array || value instanceof Float64Array;
|
|
548
|
+
}
|
|
549
|
+
var EncodingSchema = z.enum(["json", "cbor", "bare"]);
|
|
550
|
+
async function inputDataToBuffer(data) {
|
|
551
|
+
if (typeof data === "string") {
|
|
552
|
+
return data;
|
|
534
553
|
}
|
|
535
|
-
if (
|
|
536
|
-
return
|
|
554
|
+
if (data instanceof Blob) {
|
|
555
|
+
return new Uint8Array(await data.arrayBuffer());
|
|
537
556
|
}
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
if (parsed.success) {
|
|
541
|
-
return parsed.data;
|
|
557
|
+
if (data instanceof Uint8Array) {
|
|
558
|
+
return data;
|
|
542
559
|
}
|
|
543
|
-
|
|
560
|
+
if (data instanceof ArrayBuffer || data instanceof SharedArrayBuffer) {
|
|
561
|
+
return new Uint8Array(data);
|
|
562
|
+
}
|
|
563
|
+
throw new Error("Malformed message");
|
|
544
564
|
}
|
|
545
|
-
function
|
|
546
|
-
|
|
565
|
+
function base64EncodeUint8Array(uint8Array) {
|
|
566
|
+
let binary = "";
|
|
567
|
+
for (const value of uint8Array) {
|
|
568
|
+
binary += String.fromCharCode(value);
|
|
569
|
+
}
|
|
570
|
+
return btoa(binary);
|
|
547
571
|
}
|
|
548
|
-
function
|
|
549
|
-
return
|
|
550
|
-
{
|
|
551
|
-
level: getPinoLevel(logLevel),
|
|
552
|
-
messageKey: "msg",
|
|
553
|
-
// Do not include pid/hostname in output
|
|
554
|
-
base: {},
|
|
555
|
-
errorKey: "error",
|
|
556
|
-
// Keep the numeric level so the logfmt sink can match Pino's levels.
|
|
557
|
-
formatters: {
|
|
558
|
-
level(_label, number) {
|
|
559
|
-
return { level: number };
|
|
560
|
-
}
|
|
561
|
-
},
|
|
562
|
-
timestamp: getLogTimestamp() ? stdTimeFunctions.epochTime : false
|
|
563
|
-
},
|
|
564
|
-
createLogfmtDestination()
|
|
565
|
-
);
|
|
572
|
+
function base64EncodeArrayBuffer(arrayBuffer) {
|
|
573
|
+
return base64EncodeUint8Array(new Uint8Array(arrayBuffer));
|
|
566
574
|
}
|
|
567
|
-
function
|
|
568
|
-
if (
|
|
569
|
-
|
|
575
|
+
function isPlainObject(value) {
|
|
576
|
+
if (value === null || typeof value !== "object") {
|
|
577
|
+
return false;
|
|
570
578
|
}
|
|
571
|
-
|
|
572
|
-
|
|
579
|
+
const proto = Object.getPrototypeOf(value);
|
|
580
|
+
return proto === Object.prototype || proto === null;
|
|
573
581
|
}
|
|
574
|
-
function
|
|
575
|
-
if (
|
|
576
|
-
|
|
582
|
+
function encodeJsonCompatValue(input) {
|
|
583
|
+
if (input === null) {
|
|
584
|
+
return input;
|
|
577
585
|
}
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
function getLogger(name = "default") {
|
|
581
|
-
const cached = loggerCache.get(name);
|
|
582
|
-
if (cached) {
|
|
583
|
-
return cached;
|
|
584
|
-
}
|
|
585
|
-
const base = getBaseLogger();
|
|
586
|
-
const child = getIncludeTarget() ? base.child({ target: name }) : base;
|
|
587
|
-
loggerCache.set(name, child);
|
|
588
|
-
return child;
|
|
589
|
-
}
|
|
590
|
-
var PINO_LEVEL_LABELS = {
|
|
591
|
-
10: "trace",
|
|
592
|
-
20: "debug",
|
|
593
|
-
30: "info",
|
|
594
|
-
40: "warn",
|
|
595
|
-
50: "error",
|
|
596
|
-
60: "fatal"
|
|
597
|
-
};
|
|
598
|
-
function createLogfmtDestination() {
|
|
599
|
-
return {
|
|
600
|
-
write(msg) {
|
|
601
|
-
const line = formatLogfmtLine(msg);
|
|
602
|
-
if (typeof process !== "undefined" && process.stdout?.write) {
|
|
603
|
-
process.stdout.write(`${line}
|
|
604
|
-
`);
|
|
605
|
-
} else {
|
|
606
|
-
console.log(line);
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
};
|
|
610
|
-
}
|
|
611
|
-
function formatLogfmtLine(raw) {
|
|
612
|
-
let data;
|
|
613
|
-
try {
|
|
614
|
-
data = JSON.parse(raw);
|
|
615
|
-
} catch {
|
|
616
|
-
return raw.trimEnd();
|
|
617
|
-
}
|
|
618
|
-
const parts = [];
|
|
619
|
-
appendLogfmtEntry(parts, "level", formatPinoLevel(data.level));
|
|
620
|
-
if (data.time !== void 0) {
|
|
621
|
-
appendLogfmtEntry(parts, "ts", data.time);
|
|
622
|
-
}
|
|
623
|
-
for (const [key, value] of Object.entries(data)) {
|
|
624
|
-
if (key === "level" || key === "time") {
|
|
625
|
-
continue;
|
|
626
|
-
}
|
|
627
|
-
appendLogfmtEntry(parts, key, value);
|
|
628
|
-
}
|
|
629
|
-
return parts.join(" ");
|
|
630
|
-
}
|
|
631
|
-
function formatPinoLevel(level) {
|
|
632
|
-
if (typeof level === "number") {
|
|
633
|
-
return PINO_LEVEL_LABELS[level] ?? level.toString();
|
|
634
|
-
}
|
|
635
|
-
if (typeof level === "string") {
|
|
636
|
-
return level.toLowerCase();
|
|
637
|
-
}
|
|
638
|
-
return "info";
|
|
639
|
-
}
|
|
640
|
-
function appendLogfmtEntry(parts, key, value) {
|
|
641
|
-
const safeKey = key.replace(/[\s="]/g, "");
|
|
642
|
-
if (safeKey.length === 0) {
|
|
643
|
-
return;
|
|
644
|
-
}
|
|
645
|
-
parts.push(`${safeKey}=${formatLogfmtValue(value)}`);
|
|
646
|
-
}
|
|
647
|
-
function formatLogfmtValue(value) {
|
|
648
|
-
if (typeof value === "number" || typeof value === "boolean") {
|
|
649
|
-
return String(value);
|
|
650
|
-
}
|
|
651
|
-
if (value === null || value === void 0) {
|
|
652
|
-
return "null";
|
|
653
|
-
}
|
|
654
|
-
if (typeof value === "string") {
|
|
655
|
-
return quoteLogfmtString(value);
|
|
656
|
-
}
|
|
657
|
-
return quoteLogfmtString(JSON.stringify(value));
|
|
658
|
-
}
|
|
659
|
-
function quoteLogfmtString(value) {
|
|
660
|
-
if (!/[\s="]/.test(value)) {
|
|
661
|
-
return value;
|
|
662
|
-
}
|
|
663
|
-
return `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n")}"`;
|
|
664
|
-
}
|
|
665
|
-
|
|
666
|
-
// src/devtools-loader/log.ts
|
|
667
|
-
function logger() {
|
|
668
|
-
return getLogger("devtools");
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
// src/devtools-loader/index.ts
|
|
672
|
-
var scriptId = "rivetkit-devtools-script";
|
|
673
|
-
function injectDevtools(config) {
|
|
674
|
-
if (!window) {
|
|
675
|
-
logger().warn("devtools not available outside browser environment");
|
|
676
|
-
return;
|
|
677
|
-
}
|
|
678
|
-
if (!document.getElementById(scriptId)) {
|
|
679
|
-
const src = `${config.endpoint?.replace(/\/$/, "")}/devtools/mod.js`;
|
|
680
|
-
const script = document.createElement("script");
|
|
681
|
-
script.id = scriptId;
|
|
682
|
-
script.src = src;
|
|
683
|
-
script.async = true;
|
|
684
|
-
document.head.appendChild(script);
|
|
685
|
-
}
|
|
686
|
-
window.__rivetkit = window.__rivetkit || [];
|
|
687
|
-
window.__rivetkit.push(config);
|
|
688
|
-
}
|
|
689
|
-
|
|
690
|
-
// src/engine-client/mod.ts
|
|
691
|
-
import invariant3 from "invariant";
|
|
692
|
-
|
|
693
|
-
// src/actor/keys.ts
|
|
694
|
-
var EMPTY_KEY = "/";
|
|
695
|
-
var KEY_SEPARATOR = "/";
|
|
696
|
-
var KEYS = {
|
|
697
|
-
PERSIST_DATA: Uint8Array.from([1]),
|
|
698
|
-
CONN_PREFIX: Uint8Array.from([2]),
|
|
699
|
-
INSPECTOR_TOKEN: Uint8Array.from([3]),
|
|
700
|
-
KV: Uint8Array.from([4]),
|
|
701
|
-
QUEUE_PREFIX: Uint8Array.from([5]),
|
|
702
|
-
LAST_PUSHED_ALARM: Uint8Array.from([6]),
|
|
703
|
-
WORKFLOW_PREFIX: Uint8Array.from([6]),
|
|
704
|
-
TRACES_PREFIX: Uint8Array.from([7])
|
|
705
|
-
};
|
|
706
|
-
var STORAGE_VERSION = {
|
|
707
|
-
QUEUE: 1,
|
|
708
|
-
WORKFLOW: 1,
|
|
709
|
-
TRACES: 1
|
|
710
|
-
};
|
|
711
|
-
var STORAGE_VERSION_BYTES = {
|
|
712
|
-
QUEUE: Uint8Array.from([STORAGE_VERSION.QUEUE]),
|
|
713
|
-
WORKFLOW: Uint8Array.from([STORAGE_VERSION.WORKFLOW]),
|
|
714
|
-
TRACES: Uint8Array.from([STORAGE_VERSION.TRACES])
|
|
715
|
-
};
|
|
716
|
-
var QUEUE_NAMESPACE = {
|
|
717
|
-
METADATA: Uint8Array.from([1]),
|
|
718
|
-
MESSAGES: Uint8Array.from([2])
|
|
719
|
-
};
|
|
720
|
-
function concatPrefix(prefix, suffix) {
|
|
721
|
-
const merged = new Uint8Array(prefix.length + suffix.length);
|
|
722
|
-
merged.set(prefix, 0);
|
|
723
|
-
merged.set(suffix, prefix.length);
|
|
724
|
-
return merged;
|
|
725
|
-
}
|
|
726
|
-
var QUEUE_STORAGE_PREFIX = concatPrefix(
|
|
727
|
-
KEYS.QUEUE_PREFIX,
|
|
728
|
-
STORAGE_VERSION_BYTES.QUEUE
|
|
729
|
-
);
|
|
730
|
-
var QUEUE_METADATA_KEY = concatPrefix(
|
|
731
|
-
QUEUE_STORAGE_PREFIX,
|
|
732
|
-
QUEUE_NAMESPACE.METADATA
|
|
733
|
-
);
|
|
734
|
-
var QUEUE_MESSAGES_PREFIX = concatPrefix(
|
|
735
|
-
QUEUE_STORAGE_PREFIX,
|
|
736
|
-
QUEUE_NAMESPACE.MESSAGES
|
|
737
|
-
);
|
|
738
|
-
var WORKFLOW_STORAGE_PREFIX = concatPrefix(
|
|
739
|
-
KEYS.WORKFLOW_PREFIX,
|
|
740
|
-
STORAGE_VERSION_BYTES.WORKFLOW
|
|
741
|
-
);
|
|
742
|
-
var TRACES_STORAGE_PREFIX = concatPrefix(
|
|
743
|
-
KEYS.TRACES_PREFIX,
|
|
744
|
-
STORAGE_VERSION_BYTES.TRACES
|
|
745
|
-
);
|
|
746
|
-
function serializeActorKey(key) {
|
|
747
|
-
if (key.length === 0) {
|
|
748
|
-
return EMPTY_KEY;
|
|
749
|
-
}
|
|
750
|
-
const escapedParts = key.map((part) => {
|
|
751
|
-
if (part === "") {
|
|
752
|
-
return "\\0";
|
|
753
|
-
}
|
|
754
|
-
let escaped = part.replace(/\\/g, "\\\\");
|
|
755
|
-
escaped = escaped.replace(/\//g, `\\${KEY_SEPARATOR}`);
|
|
756
|
-
return escaped;
|
|
757
|
-
});
|
|
758
|
-
return escapedParts.join(KEY_SEPARATOR);
|
|
759
|
-
}
|
|
760
|
-
function deserializeActorKey(keyString) {
|
|
761
|
-
if (keyString === void 0 || keyString === null || keyString === EMPTY_KEY) {
|
|
762
|
-
return [];
|
|
763
|
-
}
|
|
764
|
-
const parts = [];
|
|
765
|
-
let currentPart = "";
|
|
766
|
-
let escaping = false;
|
|
767
|
-
let isEmptyStringMarker = false;
|
|
768
|
-
for (let i = 0; i < keyString.length; i++) {
|
|
769
|
-
const char = keyString[i];
|
|
770
|
-
if (escaping) {
|
|
771
|
-
if (char === "0") {
|
|
772
|
-
isEmptyStringMarker = true;
|
|
773
|
-
} else {
|
|
774
|
-
currentPart += char;
|
|
775
|
-
}
|
|
776
|
-
escaping = false;
|
|
777
|
-
} else if (char === "\\") {
|
|
778
|
-
escaping = true;
|
|
779
|
-
} else if (char === KEY_SEPARATOR) {
|
|
780
|
-
if (isEmptyStringMarker) {
|
|
781
|
-
parts.push("");
|
|
782
|
-
isEmptyStringMarker = false;
|
|
783
|
-
} else {
|
|
784
|
-
parts.push(currentPart);
|
|
785
|
-
}
|
|
786
|
-
currentPart = "";
|
|
787
|
-
} else {
|
|
788
|
-
currentPart += char;
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
if (escaping) {
|
|
792
|
-
parts.push(`${currentPart}\\`);
|
|
793
|
-
} else if (isEmptyStringMarker) {
|
|
794
|
-
parts.push("");
|
|
795
|
-
} else if (currentPart !== "" || parts.length > 0) {
|
|
796
|
-
parts.push(currentPart);
|
|
797
|
-
}
|
|
798
|
-
return parts;
|
|
799
|
-
}
|
|
800
|
-
|
|
801
|
-
// src/common/actor-router-consts.ts
|
|
802
|
-
var PATH_CONNECT = "/connect";
|
|
803
|
-
var PATH_WEBSOCKET_BASE = "/websocket";
|
|
804
|
-
var PATH_WEBSOCKET_PREFIX = "/websocket/";
|
|
805
|
-
var HEADER_ENCODING = "x-rivet-encoding";
|
|
806
|
-
var HEADER_CONN_PARAMS = "x-rivet-conn-params";
|
|
807
|
-
var HEADER_RIVET_TOKEN = "x-rivet-token";
|
|
808
|
-
var HEADER_RIVET_TARGET = "x-rivet-target";
|
|
809
|
-
var HEADER_RIVET_ACTOR = "x-rivet-actor";
|
|
810
|
-
var HEADER_RIVET_SKIP_READY_WAIT = "x-rivet-skip-ready-wait";
|
|
811
|
-
var WS_PROTOCOL_STANDARD = "rivet";
|
|
812
|
-
var WS_PROTOCOL_TARGET = "rivet_target.";
|
|
813
|
-
var WS_PROTOCOL_ACTOR = "rivet_actor.";
|
|
814
|
-
var WS_PROTOCOL_ENCODING = "rivet_encoding.";
|
|
815
|
-
var WS_PROTOCOL_CONN_PARAMS = "rivet_conn_params.";
|
|
816
|
-
var WS_PROTOCOL_TOKEN = "rivet_token.";
|
|
817
|
-
var WS_PROTOCOL_SKIP_READY_WAIT = "rivet_skip_ready_wait";
|
|
818
|
-
var WS_PROTOCOL_TEST_ACK_HOOK = "rivet_test_ack_hook.";
|
|
819
|
-
|
|
820
|
-
// src/engine-client/driver.ts
|
|
821
|
-
function shouldSkipReadyWait(options = {}) {
|
|
822
|
-
return options.skipReadyWait === true;
|
|
823
|
-
}
|
|
824
|
-
|
|
825
|
-
// src/serde.ts
|
|
826
|
-
import * as cbor from "cbor-x";
|
|
827
|
-
import invariant from "invariant";
|
|
828
|
-
|
|
829
|
-
// src/common/encoding.ts
|
|
830
|
-
import { z as z2 } from "zod/v4";
|
|
831
|
-
var JSON_COMPAT_BIGINT = "$BigInt";
|
|
832
|
-
var JSON_COMPAT_ARRAY_BUFFER = "$ArrayBuffer";
|
|
833
|
-
var JSON_COMPAT_UINT8_ARRAY = "$Uint8Array";
|
|
834
|
-
var JSON_COMPAT_UNDEFINED = "$Undefined";
|
|
835
|
-
var JSON_COMPAT_SET = "$Set";
|
|
836
|
-
function isTypedArray(value) {
|
|
837
|
-
return value instanceof Uint8ClampedArray || value instanceof Uint16Array || value instanceof Uint32Array || value instanceof BigUint64Array || value instanceof Int8Array || value instanceof Int16Array || value instanceof Int32Array || value instanceof BigInt64Array || value instanceof Float32Array || value instanceof Float64Array;
|
|
838
|
-
}
|
|
839
|
-
var EncodingSchema = z2.enum(["json", "cbor", "bare"]);
|
|
840
|
-
async function inputDataToBuffer(data) {
|
|
841
|
-
if (typeof data === "string") {
|
|
842
|
-
return data;
|
|
843
|
-
}
|
|
844
|
-
if (data instanceof Blob) {
|
|
845
|
-
return new Uint8Array(await data.arrayBuffer());
|
|
846
|
-
}
|
|
847
|
-
if (data instanceof Uint8Array) {
|
|
848
|
-
return data;
|
|
849
|
-
}
|
|
850
|
-
if (data instanceof ArrayBuffer || data instanceof SharedArrayBuffer) {
|
|
851
|
-
return new Uint8Array(data);
|
|
852
|
-
}
|
|
853
|
-
throw new Error("Malformed message");
|
|
854
|
-
}
|
|
855
|
-
function base64EncodeUint8Array(uint8Array) {
|
|
856
|
-
let binary = "";
|
|
857
|
-
for (const value of uint8Array) {
|
|
858
|
-
binary += String.fromCharCode(value);
|
|
859
|
-
}
|
|
860
|
-
return btoa(binary);
|
|
861
|
-
}
|
|
862
|
-
function base64EncodeArrayBuffer(arrayBuffer) {
|
|
863
|
-
return base64EncodeUint8Array(new Uint8Array(arrayBuffer));
|
|
864
|
-
}
|
|
865
|
-
function isPlainObject(value) {
|
|
866
|
-
if (value === null || typeof value !== "object") {
|
|
867
|
-
return false;
|
|
868
|
-
}
|
|
869
|
-
const proto = Object.getPrototypeOf(value);
|
|
870
|
-
return proto === Object.prototype || proto === null;
|
|
871
|
-
}
|
|
872
|
-
function encodeJsonCompatValue(input) {
|
|
873
|
-
if (input === null) {
|
|
874
|
-
return input;
|
|
875
|
-
}
|
|
876
|
-
if (input === void 0) {
|
|
877
|
-
return [JSON_COMPAT_UNDEFINED, 0];
|
|
586
|
+
if (input === void 0) {
|
|
587
|
+
return [JSON_COMPAT_UNDEFINED, 0];
|
|
878
588
|
}
|
|
879
589
|
if (typeof input === "string" || typeof input === "number" || typeof input === "boolean") {
|
|
880
590
|
return input;
|
|
@@ -1001,116 +711,410 @@ function base64DecodeToUint8Array(base64) {
|
|
|
1001
711
|
function base64DecodeToArrayBuffer(base64) {
|
|
1002
712
|
return base64DecodeToUint8Array(base64).buffer;
|
|
1003
713
|
}
|
|
1004
|
-
function jsonStringifyCompat(input) {
|
|
1005
|
-
return JSON.stringify(
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
714
|
+
function jsonStringifyCompat(input, space) {
|
|
715
|
+
return JSON.stringify(
|
|
716
|
+
input,
|
|
717
|
+
(_key, value) => {
|
|
718
|
+
if (typeof value === "bigint") {
|
|
719
|
+
return [JSON_COMPAT_BIGINT, value.toString()];
|
|
720
|
+
}
|
|
721
|
+
if (value instanceof ArrayBuffer) {
|
|
722
|
+
return [JSON_COMPAT_ARRAY_BUFFER, base64EncodeArrayBuffer(value)];
|
|
723
|
+
}
|
|
724
|
+
if (value instanceof Uint8Array) {
|
|
725
|
+
return [JSON_COMPAT_UINT8_ARRAY, base64EncodeUint8Array(value)];
|
|
726
|
+
}
|
|
727
|
+
if (Array.isArray(value) && value.length === 2 && typeof value[0] === "string" && value[0].startsWith("$")) {
|
|
728
|
+
return [`$${value[0]}`, value[1]];
|
|
729
|
+
}
|
|
730
|
+
return value;
|
|
731
|
+
},
|
|
732
|
+
space
|
|
733
|
+
);
|
|
734
|
+
}
|
|
735
|
+
function jsonParseCompat(input) {
|
|
736
|
+
return reviveJsonCompatValue(JSON.parse(input));
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
// src/utils.ts
|
|
740
|
+
var VERSION = package_default.version;
|
|
741
|
+
var _userAgent;
|
|
742
|
+
function httpUserAgent() {
|
|
743
|
+
if (_userAgent !== void 0) {
|
|
744
|
+
return _userAgent;
|
|
745
|
+
}
|
|
746
|
+
let userAgent = `RivetKit/${VERSION}`;
|
|
747
|
+
const navigatorObj = typeof navigator !== "undefined" ? navigator : void 0;
|
|
748
|
+
if (navigatorObj?.userAgent) userAgent += ` ${navigatorObj.userAgent}`;
|
|
749
|
+
_userAgent = userAgent;
|
|
750
|
+
return userAgent;
|
|
751
|
+
}
|
|
752
|
+
function getEnvUniversal(key) {
|
|
753
|
+
if (typeof Deno !== "undefined") {
|
|
754
|
+
return Deno.env.get(key);
|
|
755
|
+
} else if (typeof process !== "undefined") {
|
|
756
|
+
return process.env[key];
|
|
757
|
+
}
|
|
758
|
+
}
|
|
759
|
+
function promiseWithResolvers(onReject) {
|
|
760
|
+
let resolve;
|
|
761
|
+
let reject;
|
|
762
|
+
const promise = new Promise((res, rej) => {
|
|
763
|
+
resolve = res;
|
|
764
|
+
reject = rej;
|
|
765
|
+
});
|
|
766
|
+
promise.catch(onReject);
|
|
767
|
+
return { promise, resolve, reject };
|
|
768
|
+
}
|
|
769
|
+
function bufferToArrayBuffer(buf) {
|
|
770
|
+
return buf.buffer.slice(
|
|
771
|
+
buf.byteOffset,
|
|
772
|
+
buf.byteOffset + buf.byteLength
|
|
773
|
+
);
|
|
774
|
+
}
|
|
775
|
+
function combineUrlPath(endpoint, path, queryParams) {
|
|
776
|
+
const baseUrl = new URL(endpoint);
|
|
777
|
+
const pathParts = path.split("?");
|
|
778
|
+
const pathOnly = pathParts[0];
|
|
779
|
+
const existingQuery = pathParts[1] || "";
|
|
780
|
+
const basePath = baseUrl.pathname.replace(/\/$/, "");
|
|
781
|
+
const cleanPath = pathOnly.startsWith("/") ? pathOnly : `/${pathOnly}`;
|
|
782
|
+
const fullPath = (basePath + cleanPath).replace(/\/\//g, "/");
|
|
783
|
+
const queryParts = [];
|
|
784
|
+
if (existingQuery) {
|
|
785
|
+
queryParts.push(existingQuery);
|
|
786
|
+
}
|
|
787
|
+
if (queryParams) {
|
|
788
|
+
for (const [key, value] of Object.entries(queryParams)) {
|
|
789
|
+
if (value !== void 0) {
|
|
790
|
+
queryParts.push(
|
|
791
|
+
`${encodeURIComponent(key)}=${encodeURIComponent(value)}`
|
|
792
|
+
);
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
const fullQuery = queryParts.length > 0 ? `?${queryParts.join("&")}` : "";
|
|
797
|
+
return `${baseUrl.protocol}//${baseUrl.host}${fullPath}${fullQuery}`;
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
// src/utils/env-vars.ts
|
|
801
|
+
var getRivetEngine = () => getEnvUniversal("RIVET_ENGINE");
|
|
802
|
+
var getRivetEndpoint = () => getEnvUniversal("RIVET_ENDPOINT");
|
|
803
|
+
var getRivetToken = () => getEnvUniversal("RIVET_TOKEN");
|
|
804
|
+
var getRivetNamespace = () => getEnvUniversal("RIVET_NAMESPACE");
|
|
805
|
+
var getRivetPool = () => getEnvUniversal("RIVET_POOL");
|
|
806
|
+
var getLogLevel = () => getEnvUniversal("RIVET_LOG_LEVEL") ?? getEnvUniversal("LOG_LEVEL");
|
|
807
|
+
var getLogTarget = () => getEnvUniversal("RIVET_LOG_TARGET") === "1";
|
|
808
|
+
var getLogTimestamp = () => getEnvUniversal("RIVET_LOG_TIMESTAMP") === "1";
|
|
809
|
+
var getLogMessage = () => getEnvUniversal("RIVET_LOG_MESSAGE") === "1";
|
|
810
|
+
var getLogErrorStack = () => getEnvUniversal("RIVET_LOG_ERROR_STACK") === "1";
|
|
811
|
+
var getNextPhase = () => getEnvUniversal("NEXT_PHASE");
|
|
812
|
+
|
|
813
|
+
// src/common/log.ts
|
|
814
|
+
var baseLogger;
|
|
815
|
+
var configuredLogLevel;
|
|
816
|
+
var loggerCache = /* @__PURE__ */ new Map();
|
|
817
|
+
var LogLevelSchema = z2.enum([
|
|
818
|
+
"trace",
|
|
819
|
+
"debug",
|
|
820
|
+
"info",
|
|
821
|
+
"warn",
|
|
822
|
+
"error",
|
|
823
|
+
"fatal",
|
|
824
|
+
"silent"
|
|
825
|
+
]);
|
|
826
|
+
function getPinoLevel(logLevel) {
|
|
827
|
+
if (logLevel) {
|
|
828
|
+
return logLevel;
|
|
829
|
+
}
|
|
830
|
+
if (configuredLogLevel) {
|
|
831
|
+
return configuredLogLevel;
|
|
832
|
+
}
|
|
833
|
+
const raw = (getLogLevel() || "warn").toString().toLowerCase();
|
|
834
|
+
const parsed = LogLevelSchema.safeParse(raw);
|
|
835
|
+
if (parsed.success) {
|
|
836
|
+
return parsed.data;
|
|
837
|
+
}
|
|
838
|
+
return "info";
|
|
839
|
+
}
|
|
840
|
+
function getIncludeTarget() {
|
|
841
|
+
return getLogTarget();
|
|
842
|
+
}
|
|
843
|
+
function makeDefaultLogger(logLevel) {
|
|
844
|
+
return pino(
|
|
845
|
+
{
|
|
846
|
+
level: getPinoLevel(logLevel),
|
|
847
|
+
messageKey: "msg",
|
|
848
|
+
// Do not include pid/hostname in output
|
|
849
|
+
base: {},
|
|
850
|
+
errorKey: "error",
|
|
851
|
+
// Keep the numeric level so the logfmt sink can match Pino's levels.
|
|
852
|
+
formatters: {
|
|
853
|
+
level(_label, number) {
|
|
854
|
+
return { level: number };
|
|
855
|
+
}
|
|
856
|
+
},
|
|
857
|
+
timestamp: getLogTimestamp() ? stdTimeFunctions.epochTime : false
|
|
858
|
+
},
|
|
859
|
+
createLogfmtDestination()
|
|
860
|
+
);
|
|
861
|
+
}
|
|
862
|
+
function configureDefaultLogger(logLevel) {
|
|
863
|
+
if (logLevel) {
|
|
864
|
+
configuredLogLevel = logLevel;
|
|
865
|
+
}
|
|
866
|
+
baseLogger = makeDefaultLogger(logLevel);
|
|
867
|
+
loggerCache.clear();
|
|
868
|
+
}
|
|
869
|
+
function getBaseLogger() {
|
|
870
|
+
if (!baseLogger) {
|
|
871
|
+
configureDefaultLogger();
|
|
872
|
+
}
|
|
873
|
+
return baseLogger;
|
|
874
|
+
}
|
|
875
|
+
function getLogger(name = "default") {
|
|
876
|
+
const cached = loggerCache.get(name);
|
|
877
|
+
if (cached) {
|
|
878
|
+
return cached;
|
|
879
|
+
}
|
|
880
|
+
const base = getBaseLogger();
|
|
881
|
+
const child = getIncludeTarget() ? base.child({ target: name }) : base;
|
|
882
|
+
loggerCache.set(name, child);
|
|
883
|
+
return child;
|
|
884
|
+
}
|
|
885
|
+
var PINO_LEVEL_LABELS = {
|
|
886
|
+
10: "trace",
|
|
887
|
+
20: "debug",
|
|
888
|
+
30: "info",
|
|
889
|
+
40: "warn",
|
|
890
|
+
50: "error",
|
|
891
|
+
60: "fatal"
|
|
892
|
+
};
|
|
893
|
+
function createLogfmtDestination() {
|
|
894
|
+
return {
|
|
895
|
+
write(msg) {
|
|
896
|
+
const line = formatLogfmtLine(msg);
|
|
897
|
+
if (typeof process !== "undefined" && process.stdout?.write) {
|
|
898
|
+
process.stdout.write(`${line}
|
|
899
|
+
`);
|
|
900
|
+
} else {
|
|
901
|
+
console.log(line);
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
};
|
|
905
|
+
}
|
|
906
|
+
function formatLogfmtLine(raw) {
|
|
907
|
+
let data;
|
|
908
|
+
try {
|
|
909
|
+
data = JSON.parse(raw);
|
|
910
|
+
} catch {
|
|
911
|
+
return raw.trimEnd();
|
|
912
|
+
}
|
|
913
|
+
const parts = [];
|
|
914
|
+
appendLogfmtEntry(parts, "level", formatPinoLevel(data.level));
|
|
915
|
+
if (data.time !== void 0) {
|
|
916
|
+
appendLogfmtEntry(parts, "ts", data.time);
|
|
917
|
+
}
|
|
918
|
+
for (const [key, value] of Object.entries(data)) {
|
|
919
|
+
if (key === "level" || key === "time") {
|
|
920
|
+
continue;
|
|
921
|
+
}
|
|
922
|
+
appendLogfmtEntry(parts, key, value);
|
|
923
|
+
}
|
|
924
|
+
return parts.join(" ");
|
|
925
|
+
}
|
|
926
|
+
function formatPinoLevel(level) {
|
|
927
|
+
if (typeof level === "number") {
|
|
928
|
+
return PINO_LEVEL_LABELS[level] ?? level.toString();
|
|
929
|
+
}
|
|
930
|
+
if (typeof level === "string") {
|
|
931
|
+
return level.toLowerCase();
|
|
932
|
+
}
|
|
933
|
+
return "info";
|
|
934
|
+
}
|
|
935
|
+
function appendLogfmtEntry(parts, key, value) {
|
|
936
|
+
const safeKey = key.replace(/[\s="]/g, "");
|
|
937
|
+
if (safeKey.length === 0) {
|
|
938
|
+
return;
|
|
939
|
+
}
|
|
940
|
+
parts.push(`${safeKey}=${formatLogfmtValue(value)}`);
|
|
941
|
+
}
|
|
942
|
+
function formatLogfmtValue(value) {
|
|
943
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
944
|
+
return String(value);
|
|
945
|
+
}
|
|
946
|
+
if (value === null || value === void 0) {
|
|
947
|
+
return "null";
|
|
948
|
+
}
|
|
949
|
+
if (typeof value === "string") {
|
|
950
|
+
return quoteLogfmtString(value);
|
|
951
|
+
}
|
|
952
|
+
return quoteLogfmtString(JSON.stringify(value));
|
|
953
|
+
}
|
|
954
|
+
function quoteLogfmtString(value) {
|
|
955
|
+
if (!/[\s="]/.test(value)) {
|
|
1018
956
|
return value;
|
|
1019
|
-
}
|
|
957
|
+
}
|
|
958
|
+
return `"${value.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\n/g, "\\n")}"`;
|
|
1020
959
|
}
|
|
1021
|
-
|
|
1022
|
-
|
|
960
|
+
|
|
961
|
+
// src/devtools-loader/log.ts
|
|
962
|
+
function logger() {
|
|
963
|
+
return getLogger("devtools");
|
|
1023
964
|
}
|
|
1024
965
|
|
|
1025
|
-
// src/
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
const len = uint8Array.byteLength;
|
|
1032
|
-
for (let i = 0; i < len; i++) {
|
|
1033
|
-
binary += String.fromCharCode(uint8Array[i]);
|
|
966
|
+
// src/devtools-loader/index.ts
|
|
967
|
+
var scriptId = "rivetkit-devtools-script";
|
|
968
|
+
function injectDevtools(config) {
|
|
969
|
+
if (!window) {
|
|
970
|
+
logger().warn("devtools not available outside browser environment");
|
|
971
|
+
return;
|
|
1034
972
|
}
|
|
1035
|
-
|
|
1036
|
-
}
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
} else {
|
|
1043
|
-
assertUnreachable(encoding);
|
|
973
|
+
if (!document.getElementById(scriptId)) {
|
|
974
|
+
const src = `${config.endpoint?.replace(/\/$/, "")}/devtools/mod.js`;
|
|
975
|
+
const script = document.createElement("script");
|
|
976
|
+
script.id = scriptId;
|
|
977
|
+
script.src = src;
|
|
978
|
+
script.async = true;
|
|
979
|
+
document.head.appendChild(script);
|
|
1044
980
|
}
|
|
981
|
+
window.__rivetkit = window.__rivetkit || [];
|
|
982
|
+
window.__rivetkit.push(config);
|
|
1045
983
|
}
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
984
|
+
|
|
985
|
+
// src/engine-client/mod.ts
|
|
986
|
+
import invariant3 from "invariant";
|
|
987
|
+
|
|
988
|
+
// src/actor/keys.ts
|
|
989
|
+
var EMPTY_KEY = "/";
|
|
990
|
+
var KEY_SEPARATOR = "/";
|
|
991
|
+
var KEYS = {
|
|
992
|
+
PERSIST_DATA: Uint8Array.from([1]),
|
|
993
|
+
CONN_PREFIX: Uint8Array.from([2]),
|
|
994
|
+
INSPECTOR_TOKEN: Uint8Array.from([3]),
|
|
995
|
+
KV: Uint8Array.from([4]),
|
|
996
|
+
QUEUE_PREFIX: Uint8Array.from([5]),
|
|
997
|
+
LAST_PUSHED_ALARM: Uint8Array.from([6]),
|
|
998
|
+
WORKFLOW_PREFIX: Uint8Array.from([6]),
|
|
999
|
+
TRACES_PREFIX: Uint8Array.from([7])
|
|
1000
|
+
};
|
|
1001
|
+
var STORAGE_VERSION = {
|
|
1002
|
+
QUEUE: 1,
|
|
1003
|
+
WORKFLOW: 1,
|
|
1004
|
+
TRACES: 1
|
|
1005
|
+
};
|
|
1006
|
+
var STORAGE_VERSION_BYTES = {
|
|
1007
|
+
QUEUE: Uint8Array.from([STORAGE_VERSION.QUEUE]),
|
|
1008
|
+
WORKFLOW: Uint8Array.from([STORAGE_VERSION.WORKFLOW]),
|
|
1009
|
+
TRACES: Uint8Array.from([STORAGE_VERSION.TRACES])
|
|
1010
|
+
};
|
|
1011
|
+
var QUEUE_NAMESPACE = {
|
|
1012
|
+
METADATA: Uint8Array.from([1]),
|
|
1013
|
+
MESSAGES: Uint8Array.from([2])
|
|
1014
|
+
};
|
|
1015
|
+
function concatPrefix(prefix, suffix) {
|
|
1016
|
+
const merged = new Uint8Array(prefix.length + suffix.length);
|
|
1017
|
+
merged.set(prefix, 0);
|
|
1018
|
+
merged.set(suffix, prefix.length);
|
|
1019
|
+
return merged;
|
|
1051
1020
|
}
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
} else {
|
|
1076
|
-
assertUnreachable(encoding);
|
|
1021
|
+
var QUEUE_STORAGE_PREFIX = concatPrefix(
|
|
1022
|
+
KEYS.QUEUE_PREFIX,
|
|
1023
|
+
STORAGE_VERSION_BYTES.QUEUE
|
|
1024
|
+
);
|
|
1025
|
+
var QUEUE_METADATA_KEY = concatPrefix(
|
|
1026
|
+
QUEUE_STORAGE_PREFIX,
|
|
1027
|
+
QUEUE_NAMESPACE.METADATA
|
|
1028
|
+
);
|
|
1029
|
+
var QUEUE_MESSAGES_PREFIX = concatPrefix(
|
|
1030
|
+
QUEUE_STORAGE_PREFIX,
|
|
1031
|
+
QUEUE_NAMESPACE.MESSAGES
|
|
1032
|
+
);
|
|
1033
|
+
var WORKFLOW_STORAGE_PREFIX = concatPrefix(
|
|
1034
|
+
KEYS.WORKFLOW_PREFIX,
|
|
1035
|
+
STORAGE_VERSION_BYTES.WORKFLOW
|
|
1036
|
+
);
|
|
1037
|
+
var TRACES_STORAGE_PREFIX = concatPrefix(
|
|
1038
|
+
KEYS.TRACES_PREFIX,
|
|
1039
|
+
STORAGE_VERSION_BYTES.TRACES
|
|
1040
|
+
);
|
|
1041
|
+
function serializeActorKey(key) {
|
|
1042
|
+
if (key.length === 0) {
|
|
1043
|
+
return EMPTY_KEY;
|
|
1077
1044
|
}
|
|
1045
|
+
const escapedParts = key.map((part) => {
|
|
1046
|
+
if (part === "") {
|
|
1047
|
+
return "\\0";
|
|
1048
|
+
}
|
|
1049
|
+
let escaped = part.replace(/\\/g, "\\\\");
|
|
1050
|
+
escaped = escaped.replace(/\//g, `\\${KEY_SEPARATOR}`);
|
|
1051
|
+
return escaped;
|
|
1052
|
+
});
|
|
1053
|
+
return escapedParts.join(KEY_SEPARATOR);
|
|
1078
1054
|
}
|
|
1079
|
-
function
|
|
1080
|
-
if (
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1055
|
+
function deserializeActorKey(keyString) {
|
|
1056
|
+
if (keyString === void 0 || keyString === null || keyString === EMPTY_KEY) {
|
|
1057
|
+
return [];
|
|
1058
|
+
}
|
|
1059
|
+
const parts = [];
|
|
1060
|
+
let currentPart = "";
|
|
1061
|
+
let escaping = false;
|
|
1062
|
+
let isEmptyStringMarker = false;
|
|
1063
|
+
for (let i = 0; i < keyString.length; i++) {
|
|
1064
|
+
const char = keyString[i];
|
|
1065
|
+
if (escaping) {
|
|
1066
|
+
if (char === "0") {
|
|
1067
|
+
isEmptyStringMarker = true;
|
|
1068
|
+
} else {
|
|
1069
|
+
currentPart += char;
|
|
1070
|
+
}
|
|
1071
|
+
escaping = false;
|
|
1072
|
+
} else if (char === "\\") {
|
|
1073
|
+
escaping = true;
|
|
1074
|
+
} else if (char === KEY_SEPARATOR) {
|
|
1075
|
+
if (isEmptyStringMarker) {
|
|
1076
|
+
parts.push("");
|
|
1077
|
+
isEmptyStringMarker = false;
|
|
1078
|
+
} else {
|
|
1079
|
+
parts.push(currentPart);
|
|
1080
|
+
}
|
|
1081
|
+
currentPart = "";
|
|
1084
1082
|
} else {
|
|
1085
|
-
|
|
1086
|
-
const jsonString = decoder.decode(buffer);
|
|
1087
|
-
parsed = jsonParseCompat(jsonString);
|
|
1088
|
-
}
|
|
1089
|
-
const validated = zodSchema.parse(parsed);
|
|
1090
|
-
return fromJson(validated);
|
|
1091
|
-
} else if (encoding === "cbor") {
|
|
1092
|
-
invariant(
|
|
1093
|
-
typeof buffer !== "string",
|
|
1094
|
-
"buffer cannot be string for cbor encoding"
|
|
1095
|
-
);
|
|
1096
|
-
const decoded = decodeCborCompat(buffer);
|
|
1097
|
-
const validated = zodSchema.parse(decoded);
|
|
1098
|
-
return fromJson(validated);
|
|
1099
|
-
} else if (encoding === "bare") {
|
|
1100
|
-
invariant(
|
|
1101
|
-
typeof buffer !== "string",
|
|
1102
|
-
"buffer cannot be string for bare encoding"
|
|
1103
|
-
);
|
|
1104
|
-
if (!versionedDataHandler) {
|
|
1105
|
-
throw new Error(
|
|
1106
|
-
"VersionedDataHandler is required for 'bare' encoding"
|
|
1107
|
-
);
|
|
1083
|
+
currentPart += char;
|
|
1108
1084
|
}
|
|
1109
|
-
const bareValue = versionedDataHandler.deserializeWithEmbeddedVersion(buffer);
|
|
1110
|
-
return fromBare(bareValue);
|
|
1111
|
-
} else {
|
|
1112
|
-
assertUnreachable(encoding);
|
|
1113
1085
|
}
|
|
1086
|
+
if (escaping) {
|
|
1087
|
+
parts.push(`${currentPart}\\`);
|
|
1088
|
+
} else if (isEmptyStringMarker) {
|
|
1089
|
+
parts.push("");
|
|
1090
|
+
} else if (currentPart !== "" || parts.length > 0) {
|
|
1091
|
+
parts.push(currentPart);
|
|
1092
|
+
}
|
|
1093
|
+
return parts;
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
// src/common/actor-router-consts.ts
|
|
1097
|
+
var PATH_CONNECT = "/connect";
|
|
1098
|
+
var PATH_WEBSOCKET_BASE = "/websocket";
|
|
1099
|
+
var PATH_WEBSOCKET_PREFIX = "/websocket/";
|
|
1100
|
+
var HEADER_ENCODING = "x-rivet-encoding";
|
|
1101
|
+
var HEADER_CONN_PARAMS = "x-rivet-conn-params";
|
|
1102
|
+
var HEADER_RIVET_TOKEN = "x-rivet-token";
|
|
1103
|
+
var HEADER_RIVET_TARGET = "x-rivet-target";
|
|
1104
|
+
var HEADER_RIVET_ACTOR = "x-rivet-actor";
|
|
1105
|
+
var HEADER_RIVET_SKIP_READY_WAIT = "x-rivet-skip-ready-wait";
|
|
1106
|
+
var WS_PROTOCOL_STANDARD = "rivet";
|
|
1107
|
+
var WS_PROTOCOL_TARGET = "rivet_target.";
|
|
1108
|
+
var WS_PROTOCOL_ACTOR = "rivet_actor.";
|
|
1109
|
+
var WS_PROTOCOL_ENCODING = "rivet_encoding.";
|
|
1110
|
+
var WS_PROTOCOL_CONN_PARAMS = "rivet_conn_params.";
|
|
1111
|
+
var WS_PROTOCOL_TOKEN = "rivet_token.";
|
|
1112
|
+
var WS_PROTOCOL_SKIP_READY_WAIT = "rivet_skip_ready_wait";
|
|
1113
|
+
var WS_PROTOCOL_TEST_ACK_HOOK = "rivet_test_ack_hook.";
|
|
1114
|
+
|
|
1115
|
+
// src/engine-client/driver.ts
|
|
1116
|
+
function shouldSkipReadyWait(options = {}) {
|
|
1117
|
+
return options.skipReadyWait === true;
|
|
1114
1118
|
}
|
|
1115
1119
|
|
|
1116
1120
|
// src/engine-client/actor-http-client.ts
|
|
@@ -3925,13 +3929,6 @@ async function destroyActor(config, actorId) {
|
|
|
3925
3929
|
async function getMetadata(config) {
|
|
3926
3930
|
return apiCall(config, "GET", `/metadata`);
|
|
3927
3931
|
}
|
|
3928
|
-
async function kvGet(config, actorId, key) {
|
|
3929
|
-
return apiCall(
|
|
3930
|
-
config,
|
|
3931
|
-
"GET",
|
|
3932
|
-
`/actors/${encodeURIComponent(actorId)}/kv/keys/${encodeURIComponent(key)}`
|
|
3933
|
-
);
|
|
3934
|
-
}
|
|
3935
3932
|
|
|
3936
3933
|
// src/engine-client/metadata.ts
|
|
3937
3934
|
import pRetry from "p-retry";
|
|
@@ -4339,28 +4336,6 @@ var RemoteEngineControlClient = class {
|
|
|
4339
4336
|
const args = await createWebSocketProxy(c, wsGuardUrl, protocols);
|
|
4340
4337
|
return await upgradeWebSocket(() => args)(c, noopNext());
|
|
4341
4338
|
}
|
|
4342
|
-
async kvGet(actorId, key) {
|
|
4343
|
-
await this.#metadataPromise;
|
|
4344
|
-
logger3().debug({ msg: "getting kv value via engine api", key });
|
|
4345
|
-
const response = await kvGet(
|
|
4346
|
-
this.#config,
|
|
4347
|
-
actorId,
|
|
4348
|
-
new TextDecoder("utf8").decode(key)
|
|
4349
|
-
);
|
|
4350
|
-
return response.value;
|
|
4351
|
-
}
|
|
4352
|
-
async kvBatchGet(_actorId, _keys) {
|
|
4353
|
-
throw new Error("kvBatchGet not supported on remote engine client");
|
|
4354
|
-
}
|
|
4355
|
-
async kvBatchPut(_actorId, _entries) {
|
|
4356
|
-
throw new Error("kvBatchPut not supported on remote engine client");
|
|
4357
|
-
}
|
|
4358
|
-
async kvBatchDelete(_actorId, _keys) {
|
|
4359
|
-
throw new Error("kvBatchDelete not supported on remote engine client");
|
|
4360
|
-
}
|
|
4361
|
-
async kvDeleteRange(_actorId, _start, _end) {
|
|
4362
|
-
throw new Error("kvDeleteRange not supported on remote engine client");
|
|
4363
|
-
}
|
|
4364
4339
|
displayInformation() {
|
|
4365
4340
|
return { properties: {} };
|
|
4366
4341
|
}
|
|
@@ -5840,6 +5815,7 @@ var ActorConnRaw = class {
|
|
|
5840
5815
|
};
|
|
5841
5816
|
|
|
5842
5817
|
// src/common/database/shared.ts
|
|
5818
|
+
var MIGRATION_TRANSACTION_TIMEOUT_MS = 5 * 6e4;
|
|
5843
5819
|
var AsyncMutex = class {
|
|
5844
5820
|
#locked = false;
|
|
5845
5821
|
#waiting = [];
|