rivetkit 2.1.5 → 2.1.6-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 +593 -588
- package/dist/browser/client.js +215 -35
- package/dist/browser/client.js.map +1 -1
- package/dist/browser/inspector/client.js +109 -10
- package/dist/browser/inspector/client.js.map +1 -1
- package/dist/inspector.tar.gz +0 -0
- package/dist/tsup/actor/errors.cjs +2 -2
- package/dist/tsup/actor/errors.js +1 -1
- package/dist/tsup/{actor-router-consts-D29T1Z-K.d.cts → actor-router-consts-DU-1IdQj.d.cts} +1 -1
- package/dist/tsup/{actor-router-consts-D29T1Z-K.d.ts → actor-router-consts-DU-1IdQj.d.ts} +1 -1
- package/dist/tsup/chunk-2ELYUO6C.cjs +112 -0
- package/dist/tsup/chunk-2ELYUO6C.cjs.map +1 -0
- package/dist/tsup/chunk-2LY7RW3Y.cjs +2316 -0
- package/dist/tsup/chunk-2LY7RW3Y.cjs.map +1 -0
- package/dist/tsup/{chunk-L47L3ZWJ.cjs → chunk-6G7ZNM27.cjs} +11 -6
- package/dist/tsup/chunk-6G7ZNM27.cjs.map +1 -0
- package/dist/tsup/{chunk-PB5AEMKQ.cjs → chunk-A4KEUCB6.cjs} +84 -34
- package/dist/tsup/chunk-A4KEUCB6.cjs.map +1 -0
- package/dist/tsup/{chunk-7HTNH26M.js → chunk-AKUJ5OTO.js} +11 -6
- package/dist/tsup/chunk-AKUJ5OTO.js.map +1 -0
- package/dist/tsup/{chunk-TADUYCHF.js → chunk-C22JYHVT.js} +77 -27
- package/dist/tsup/chunk-C22JYHVT.js.map +1 -0
- package/dist/tsup/chunk-C4EB42ET.js +1459 -0
- package/dist/tsup/chunk-C4EB42ET.js.map +1 -0
- package/dist/tsup/chunk-CGGGBIDP.cjs +1459 -0
- package/dist/tsup/chunk-CGGGBIDP.cjs.map +1 -0
- package/dist/tsup/chunk-CMQPDBBR.cjs +1486 -0
- package/dist/tsup/chunk-CMQPDBBR.cjs.map +1 -0
- package/dist/tsup/{chunk-GQGRQDRL.cjs → chunk-DH6UINWA.cjs} +4 -4
- package/dist/tsup/{chunk-GQGRQDRL.cjs.map → chunk-DH6UINWA.cjs.map} +1 -1
- package/dist/tsup/chunk-DK46YYCJ.js +1486 -0
- package/dist/tsup/chunk-DK46YYCJ.js.map +1 -0
- package/dist/tsup/chunk-EGWXXBZV.js +2316 -0
- package/dist/tsup/chunk-EGWXXBZV.js.map +1 -0
- package/dist/tsup/{chunk-S662Y6ZU.js → chunk-EONWXYMN.js} +2 -2
- package/dist/tsup/{chunk-N4KRDJ56.js → chunk-GFGRBYO2.js} +35 -6
- package/dist/tsup/chunk-GFGRBYO2.js.map +1 -0
- package/dist/tsup/{chunk-IIJNPVPQ.cjs → chunk-GUHXWPGB.cjs} +1515 -1479
- package/dist/tsup/chunk-GUHXWPGB.cjs.map +1 -0
- package/dist/tsup/{chunk-TI5PXQGG.cjs → chunk-HNE2AK6C.cjs} +2375 -3713
- package/dist/tsup/chunk-HNE2AK6C.cjs.map +1 -0
- package/dist/tsup/{chunk-2OK7S6QF.js → chunk-I5I6OALK.js} +2 -2
- package/dist/tsup/chunk-IHQAF2HV.cjs +23 -0
- package/dist/tsup/chunk-IHQAF2HV.cjs.map +1 -0
- package/dist/tsup/{chunk-U5SMSA27.cjs → chunk-JJNZQDUN.cjs} +667 -2517
- package/dist/tsup/chunk-JJNZQDUN.cjs.map +1 -0
- package/dist/tsup/{chunk-ZPWOYQHN.js → chunk-JJSPHLJN.js} +219 -287
- package/dist/tsup/chunk-JJSPHLJN.js.map +1 -0
- package/dist/tsup/chunk-JRKPV5NJ.js +481 -0
- package/dist/tsup/chunk-JRKPV5NJ.js.map +1 -0
- package/dist/tsup/{chunk-VKVNIQRQ.js → chunk-K7MVU5SI.js} +36 -41
- package/dist/tsup/chunk-K7MVU5SI.js.map +1 -0
- package/dist/tsup/{chunk-KJSYAUOM.js → chunk-MLK3GY6P.js} +43 -27
- package/dist/tsup/chunk-MLK3GY6P.js.map +1 -0
- package/dist/tsup/{chunk-HYPIHCDT.cjs → chunk-MPLMTJY5.cjs} +123 -23
- package/dist/tsup/chunk-MPLMTJY5.cjs.map +1 -0
- package/dist/tsup/{chunk-MIX2KB6U.js → chunk-PQWI44WD.js} +1755 -3093
- package/dist/tsup/chunk-PQWI44WD.js.map +1 -0
- package/dist/tsup/{chunk-SR3KQE7Q.cjs → chunk-SQFCIDCG.cjs} +35 -6
- package/dist/tsup/chunk-SQFCIDCG.cjs.map +1 -0
- package/dist/tsup/{chunk-WY2SHWXQ.js → chunk-SVHJSM2E.js} +110 -24
- package/dist/tsup/chunk-SVHJSM2E.js.map +1 -0
- package/dist/tsup/chunk-T5KYKM6R.js +49 -0
- package/dist/tsup/chunk-T5KYKM6R.js.map +1 -0
- package/dist/tsup/{chunk-7WF2QSIC.cjs → chunk-TJ7DKW6F.cjs} +123 -37
- package/dist/tsup/chunk-TJ7DKW6F.cjs.map +1 -0
- package/dist/tsup/chunk-UQZRMTM3.js +23 -0
- package/dist/tsup/chunk-UQZRMTM3.js.map +1 -0
- package/dist/tsup/{chunk-JC6BEPE7.cjs → chunk-V3JSZR5P.cjs} +3 -3
- package/dist/tsup/{chunk-JC6BEPE7.cjs.map → chunk-V3JSZR5P.cjs.map} +1 -1
- package/dist/tsup/{chunk-OAXJWGMU.cjs → chunk-VBR35EQF.cjs} +271 -339
- package/dist/tsup/chunk-VBR35EQF.cjs.map +1 -0
- package/dist/tsup/{chunk-EIATSBYZ.js → chunk-VWYO36X4.js} +117 -17
- package/dist/tsup/chunk-VWYO36X4.js.map +1 -0
- package/dist/tsup/{chunk-JPXO2H55.js → chunk-WW27B6DM.js} +1452 -1416
- package/dist/tsup/chunk-WW27B6DM.js.map +1 -0
- package/dist/tsup/chunk-YAE3MEJM.cjs +49 -0
- package/dist/tsup/chunk-YAE3MEJM.cjs.map +1 -0
- package/dist/tsup/{chunk-SRIM3GHD.js → chunk-YGYGANCA.js} +473 -2323
- package/dist/tsup/chunk-YGYGANCA.js.map +1 -0
- package/dist/tsup/chunk-YZJWZBY5.cjs +481 -0
- package/dist/tsup/chunk-YZJWZBY5.cjs.map +1 -0
- package/dist/tsup/{chunk-ZFY5J2EP.cjs → chunk-ZZLJ5TSM.cjs} +39 -44
- package/dist/tsup/chunk-ZZLJ5TSM.cjs.map +1 -0
- package/dist/tsup/client/mod.cjs +10 -7
- package/dist/tsup/client/mod.cjs.map +1 -1
- package/dist/tsup/client/mod.d.cts +6 -6
- package/dist/tsup/client/mod.d.ts +6 -6
- package/dist/tsup/client/mod.js +11 -8
- package/dist/tsup/common/log.cjs +3 -3
- package/dist/tsup/common/log.js +2 -2
- package/dist/tsup/common/websocket.cjs +4 -4
- package/dist/tsup/common/websocket.js +3 -3
- package/dist/tsup/{config-Qj-zLJPc.d.ts → config-C2Wwnc69.d.ts} +142 -208
- package/dist/tsup/{config-BiNoIHRs.d.ts → config-DROwzBLT.d.cts} +82 -6
- package/dist/tsup/{config-BiNoIHRs.d.cts → config-DROwzBLT.d.ts} +82 -6
- package/dist/tsup/{config-iPj5l1bL.d.cts → config-ehT-_3BB.d.cts} +142 -208
- package/dist/tsup/{context-DzvH1PBK.d.cts → context-DGMJuAyc.d.ts} +16 -3
- package/dist/tsup/{context-CQCMuHND.d.ts → context-Dpp2RJbW.d.cts} +16 -3
- package/dist/tsup/db/drizzle/mod.cjs +3 -3
- package/dist/tsup/db/drizzle/mod.d.cts +1 -1
- package/dist/tsup/db/drizzle/mod.d.ts +1 -1
- package/dist/tsup/db/drizzle/mod.js +2 -2
- package/dist/tsup/db/mod.cjs +3 -3
- package/dist/tsup/db/mod.d.cts +1 -1
- package/dist/tsup/db/mod.d.ts +1 -1
- package/dist/tsup/db/mod.js +2 -2
- package/dist/tsup/{driver-Jo8v-kbU.d.ts → driver-CYZP9QYo.d.ts} +1 -1
- package/dist/tsup/{driver-iV8J-WMv.d.cts → driver-CoTFpipv.d.cts} +1 -1
- package/dist/tsup/driver-helpers/mod.cjs +7 -5
- package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
- package/dist/tsup/driver-helpers/mod.d.cts +17 -18
- package/dist/tsup/driver-helpers/mod.d.ts +17 -18
- package/dist/tsup/driver-helpers/mod.js +11 -9
- package/dist/tsup/driver-test-suite/mod.cjs +1275 -228
- package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/driver-test-suite/mod.d.cts +6 -5
- package/dist/tsup/driver-test-suite/mod.d.ts +6 -5
- package/dist/tsup/driver-test-suite/mod.js +1581 -534
- package/dist/tsup/driver-test-suite/mod.js.map +1 -1
- package/dist/tsup/inspector/mod.cjs +4 -4
- package/dist/tsup/inspector/mod.js +3 -3
- package/dist/tsup/mod.cjs +15 -9
- package/dist/tsup/mod.cjs.map +1 -1
- package/dist/tsup/mod.d.cts +9 -9
- package/dist/tsup/mod.d.ts +9 -9
- package/dist/tsup/mod.js +19 -13
- package/dist/tsup/sandbox/client.cjs +28 -0
- package/dist/tsup/sandbox/client.cjs.map +1 -0
- package/dist/tsup/sandbox/client.d.cts +88 -0
- package/dist/tsup/sandbox/client.d.ts +88 -0
- package/dist/tsup/sandbox/client.js +28 -0
- package/dist/tsup/sandbox/client.js.map +1 -0
- package/dist/tsup/sandbox/index.cjs +761 -0
- package/dist/tsup/sandbox/index.cjs.map +1 -0
- package/dist/tsup/sandbox/index.d.cts +120 -0
- package/dist/tsup/sandbox/index.d.ts +120 -0
- package/dist/tsup/sandbox/index.js +761 -0
- package/dist/tsup/sandbox/index.js.map +1 -0
- package/dist/tsup/sandbox/providers/computesdk.cjs +3 -0
- package/dist/tsup/sandbox/providers/computesdk.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/computesdk.d.cts +7 -0
- package/dist/tsup/sandbox/providers/computesdk.d.ts +7 -0
- package/dist/tsup/sandbox/providers/computesdk.js +3 -0
- package/dist/tsup/sandbox/providers/computesdk.js.map +1 -0
- package/dist/tsup/sandbox/providers/daytona.cjs +3 -0
- package/dist/tsup/sandbox/providers/daytona.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/daytona.d.cts +1 -0
- package/dist/tsup/sandbox/providers/daytona.d.ts +1 -0
- package/dist/tsup/sandbox/providers/daytona.js +3 -0
- package/dist/tsup/sandbox/providers/daytona.js.map +1 -0
- package/dist/tsup/sandbox/providers/docker.cjs +3 -0
- package/dist/tsup/sandbox/providers/docker.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/docker.d.cts +1 -0
- package/dist/tsup/sandbox/providers/docker.d.ts +1 -0
- package/dist/tsup/sandbox/providers/docker.js +3 -0
- package/dist/tsup/sandbox/providers/docker.js.map +1 -0
- package/dist/tsup/sandbox/providers/e2b.cjs +3 -0
- package/dist/tsup/sandbox/providers/e2b.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/e2b.d.cts +1 -0
- package/dist/tsup/sandbox/providers/e2b.d.ts +1 -0
- package/dist/tsup/sandbox/providers/e2b.js +3 -0
- package/dist/tsup/sandbox/providers/e2b.js.map +1 -0
- package/dist/tsup/sandbox/providers/local.cjs +3 -0
- package/dist/tsup/sandbox/providers/local.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/local.d.cts +1 -0
- package/dist/tsup/sandbox/providers/local.d.ts +1 -0
- package/dist/tsup/sandbox/providers/local.js +3 -0
- package/dist/tsup/sandbox/providers/local.js.map +1 -0
- package/dist/tsup/sandbox/providers/modal.cjs +3 -0
- package/dist/tsup/sandbox/providers/modal.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/modal.d.cts +1 -0
- package/dist/tsup/sandbox/providers/modal.d.ts +1 -0
- package/dist/tsup/sandbox/providers/modal.js +3 -0
- package/dist/tsup/sandbox/providers/modal.js.map +1 -0
- package/dist/tsup/sandbox/providers/vercel.cjs +3 -0
- package/dist/tsup/sandbox/providers/vercel.cjs.map +1 -0
- package/dist/tsup/sandbox/providers/vercel.d.cts +1 -0
- package/dist/tsup/sandbox/providers/vercel.d.ts +1 -0
- package/dist/tsup/sandbox/providers/vercel.js +3 -0
- package/dist/tsup/sandbox/providers/vercel.js.map +1 -0
- package/dist/tsup/serve-test-suite/mod.cjs +451 -327
- package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
- package/dist/tsup/serve-test-suite/mod.js +362 -238
- package/dist/tsup/serve-test-suite/mod.js.map +1 -1
- package/dist/tsup/test/mod.cjs +17 -14
- package/dist/tsup/test/mod.cjs.map +1 -1
- package/dist/tsup/test/mod.d.cts +4 -4
- package/dist/tsup/test/mod.d.ts +4 -4
- package/dist/tsup/test/mod.js +14 -11
- package/dist/tsup/test/mod.js.map +1 -1
- package/dist/tsup/utils.cjs +3 -3
- package/dist/tsup/utils.js +2 -2
- package/dist/tsup/workflow/mod.cjs +6 -6
- package/dist/tsup/workflow/mod.d.cts +13 -9
- package/dist/tsup/workflow/mod.d.ts +13 -9
- package/dist/tsup/workflow/mod.js +5 -5
- package/package.json +114 -15
- package/src/actor/config.ts +94 -88
- package/src/actor/conn/drivers/websocket.ts +2 -1
- package/src/actor/contexts/base/actor.ts +27 -4
- package/src/actor/database.ts +6 -1
- package/src/actor/driver.ts +27 -8
- package/src/actor/errors.ts +10 -5
- package/src/actor/instance/connection-manager.ts +4 -3
- package/src/actor/instance/kv.ts +52 -9
- package/src/actor/instance/mod.ts +135 -84
- package/src/actor/instance/queue-manager.ts +2 -5
- package/src/actor/instance/queue.ts +31 -29
- package/src/actor/instance/state-manager.ts +7 -1
- package/src/actor/instance/traces-driver.ts +34 -36
- package/src/actor/metrics.ts +137 -0
- package/src/actor/protocol/old.ts +9 -12
- package/src/actor/router-websocket-endpoints.ts +12 -6
- package/src/actor/router.ts +46 -9
- package/src/actor/schema.ts +14 -22
- package/src/client/actor-common.ts +65 -0
- package/src/client/actor-conn.ts +71 -9
- package/src/client/actor-handle.ts +22 -5
- package/src/client/client.ts +32 -6
- package/src/client/config.ts +18 -21
- package/src/client/mod.ts +1 -0
- package/src/client/queue.ts +8 -6
- package/src/common/inline-websocket-adapter.ts +8 -2
- package/src/common/router.ts +1 -4
- package/src/common/utils.ts +2 -5
- package/src/db/config.ts +10 -5
- package/src/db/drizzle/mod.ts +51 -41
- package/src/db/mod.ts +54 -29
- package/src/db/shared.ts +42 -8
- package/src/driver-helpers/mod.ts +2 -1
- package/src/driver-helpers/sqlite-pool.ts +42 -0
- package/src/driver-helpers/utils.ts +0 -20
- package/src/driver-test-suite/mod.ts +11 -1
- package/src/driver-test-suite/tests/access-control.ts +19 -12
- package/src/driver-test-suite/tests/action-features.ts +20 -8
- package/src/driver-test-suite/tests/actor-conn.ts +94 -8
- package/src/driver-test-suite/tests/actor-db-kv-stats.ts +282 -0
- package/src/driver-test-suite/tests/actor-db-raw.ts +6 -2
- package/src/driver-test-suite/tests/actor-db.ts +101 -31
- package/src/driver-test-suite/tests/actor-inspector.ts +174 -32
- package/src/driver-test-suite/tests/actor-kv.ts +79 -33
- package/src/driver-test-suite/tests/actor-lifecycle.ts +4 -12
- package/src/driver-test-suite/tests/actor-queue.ts +125 -17
- package/src/driver-test-suite/tests/actor-run.ts +59 -55
- package/src/driver-test-suite/tests/actor-sandbox.ts +78 -0
- package/src/driver-test-suite/tests/actor-schedule.ts +1 -4
- package/src/driver-test-suite/tests/actor-sleep.ts +111 -0
- package/src/driver-test-suite/tests/actor-workflow.ts +387 -3
- package/src/driver-test-suite/tests/conn-error-serialization.ts +3 -1
- package/src/driver-test-suite/tests/raw-websocket.ts +5 -1
- package/src/drivers/default.ts +1 -3
- package/src/drivers/engine/actor-driver.ts +94 -21
- package/src/drivers/engine/config.ts +4 -12
- package/src/drivers/engine/mod.ts +1 -5
- package/src/drivers/file-system/actor.ts +43 -8
- package/src/drivers/file-system/global-state.ts +180 -64
- package/src/drivers/file-system/kv-limits.ts +1 -1
- package/src/drivers/file-system/sqlite-runtime.ts +13 -4
- package/src/engine-process/mod.ts +5 -1
- package/src/inspector/actor-inspector.ts +47 -21
- package/src/inspector/config.ts +1 -4
- package/src/inspector/mod.browser.ts +2 -2
- package/src/inspector/mod.ts +4 -1
- package/src/inspector/serve-ui.ts +0 -1
- package/src/inspector/workflow-history-json.ts +309 -0
- package/src/manager/gateway.ts +6 -2
- package/src/manager/router.ts +3 -3
- package/src/registry/config/index.ts +65 -12
- package/src/registry/config/runner.ts +19 -4
- package/src/registry/index.ts +42 -89
- package/src/sandbox/actor/db.ts +36 -0
- package/src/sandbox/actor/index.ts +476 -0
- package/src/sandbox/actor/session.ts +350 -0
- package/src/sandbox/actor.test.ts +36 -0
- package/src/sandbox/client.test.ts +484 -0
- package/src/sandbox/client.ts +707 -0
- package/src/sandbox/config.ts +151 -0
- package/src/sandbox/index.ts +41 -0
- package/src/sandbox/providers/computesdk.ts +1 -0
- package/src/sandbox/providers/daytona.ts +1 -0
- package/src/sandbox/providers/docker.ts +1 -0
- package/src/sandbox/providers/e2b.ts +1 -0
- package/src/sandbox/providers/local.ts +1 -0
- package/src/sandbox/providers/modal.ts +1 -0
- package/src/sandbox/providers/vercel.ts +1 -0
- package/src/sandbox/session-persist-driver.ts +180 -0
- package/src/sandbox/types.ts +138 -0
- package/src/serverless/configure.ts +5 -3
- package/src/serverless/router.test.ts +17 -9
- package/src/serverless/router.ts +20 -13
- package/src/test/mod.ts +3 -4
- package/src/utils/endpoint-parser.test.ts +6 -2
- package/src/utils/endpoint-parser.ts +6 -2
- package/src/utils/env-vars.ts +0 -2
- package/src/utils/node.ts +1 -1
- package/src/utils/serve.ts +10 -5
- package/src/utils.ts +6 -1
- package/src/workflow/constants.ts +1 -2
- package/src/workflow/context.ts +42 -9
- package/src/workflow/driver.ts +57 -23
- package/src/workflow/inspector.ts +7 -13
- package/src/workflow/mod.ts +91 -4
- package/dist/tsup/chunk-6LJAZ5R4.cjs +0 -96
- package/dist/tsup/chunk-6LJAZ5R4.cjs.map +0 -1
- package/dist/tsup/chunk-7HTNH26M.js.map +0 -1
- package/dist/tsup/chunk-7WF2QSIC.cjs.map +0 -1
- package/dist/tsup/chunk-D2SPAJVT.cjs +0 -645
- package/dist/tsup/chunk-D2SPAJVT.cjs.map +0 -1
- package/dist/tsup/chunk-EIATSBYZ.js.map +0 -1
- package/dist/tsup/chunk-HYPIHCDT.cjs.map +0 -1
- package/dist/tsup/chunk-IIJNPVPQ.cjs.map +0 -1
- package/dist/tsup/chunk-JPXO2H55.js.map +0 -1
- package/dist/tsup/chunk-KJSYAUOM.js.map +0 -1
- package/dist/tsup/chunk-L47L3ZWJ.cjs.map +0 -1
- package/dist/tsup/chunk-MIX2KB6U.js.map +0 -1
- package/dist/tsup/chunk-N4KRDJ56.js.map +0 -1
- package/dist/tsup/chunk-OAXJWGMU.cjs.map +0 -1
- package/dist/tsup/chunk-PB5AEMKQ.cjs.map +0 -1
- package/dist/tsup/chunk-R5OQUSLN.js +0 -645
- package/dist/tsup/chunk-R5OQUSLN.js.map +0 -1
- package/dist/tsup/chunk-SR3KQE7Q.cjs.map +0 -1
- package/dist/tsup/chunk-SRIM3GHD.js.map +0 -1
- package/dist/tsup/chunk-TADUYCHF.js.map +0 -1
- package/dist/tsup/chunk-TI5PXQGG.cjs.map +0 -1
- package/dist/tsup/chunk-U5SMSA27.cjs.map +0 -1
- package/dist/tsup/chunk-VKVNIQRQ.js.map +0 -1
- package/dist/tsup/chunk-WY2SHWXQ.js.map +0 -1
- package/dist/tsup/chunk-ZFY5J2EP.cjs.map +0 -1
- package/dist/tsup/chunk-ZPWOYQHN.js.map +0 -1
- package/src/db/sqlite-vfs.ts +0 -12
- /package/dist/tsup/{chunk-S662Y6ZU.js.map → chunk-EONWXYMN.js.map} +0 -0
- /package/dist/tsup/{chunk-2OK7S6QF.js.map → chunk-I5I6OALK.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _class; var _class2;
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } var _class; var _class2; var _class3;
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkDH6UINWAcjs = require('./chunk-DH6UINWA.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
|
|
@@ -39,6 +39,7 @@ var _chunkIIJNPVPQcjs = require('./chunk-IIJNPVPQ.cjs');
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
|
|
42
|
+
var _chunkHNE2AK6Ccjs = require('./chunk-HNE2AK6C.cjs');
|
|
42
43
|
|
|
43
44
|
|
|
44
45
|
|
|
@@ -48,7 +49,6 @@ var _chunkIIJNPVPQcjs = require('./chunk-IIJNPVPQ.cjs');
|
|
|
48
49
|
|
|
49
50
|
|
|
50
51
|
|
|
51
|
-
var _chunkTI5PXQGGcjs = require('./chunk-TI5PXQGG.cjs');
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
|
|
@@ -60,6 +60,7 @@ var _chunkTI5PXQGGcjs = require('./chunk-TI5PXQGG.cjs');
|
|
|
60
60
|
|
|
61
61
|
|
|
62
62
|
|
|
63
|
+
var _chunkA4KEUCB6cjs = require('./chunk-A4KEUCB6.cjs');
|
|
63
64
|
|
|
64
65
|
|
|
65
66
|
|
|
@@ -69,12 +70,12 @@ var _chunkTI5PXQGGcjs = require('./chunk-TI5PXQGG.cjs');
|
|
|
69
70
|
|
|
70
71
|
|
|
71
72
|
|
|
72
|
-
var _chunkPB5AEMKQcjs = require('./chunk-PB5AEMKQ.cjs');
|
|
73
73
|
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
|
|
77
77
|
|
|
78
|
+
var _chunkMPLMTJY5cjs = require('./chunk-MPLMTJY5.cjs');
|
|
78
79
|
|
|
79
80
|
|
|
80
81
|
|
|
@@ -86,15 +87,6 @@ var _chunkPB5AEMKQcjs = require('./chunk-PB5AEMKQ.cjs');
|
|
|
86
87
|
|
|
87
88
|
|
|
88
89
|
|
|
89
|
-
var _chunkHYPIHCDTcjs = require('./chunk-HYPIHCDT.cjs');
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
90
|
|
|
99
91
|
|
|
100
92
|
|
|
@@ -102,29 +94,261 @@ var _chunkHYPIHCDTcjs = require('./chunk-HYPIHCDT.cjs');
|
|
|
102
94
|
|
|
103
95
|
|
|
104
96
|
|
|
97
|
+
var _chunk6G7ZNM27cjs = require('./chunk-6G7ZNM27.cjs');
|
|
105
98
|
|
|
99
|
+
// src/actor/instance/mod.ts
|
|
106
100
|
|
|
107
101
|
|
|
108
102
|
|
|
103
|
+
var _traces = require('@rivetkit/traces');
|
|
109
104
|
|
|
110
|
-
|
|
105
|
+
// src/actor/metrics.ts
|
|
106
|
+
var ActorMetrics = (_class = class {constructor() { _class.prototype.__init.call(this);_class.prototype.__init2.call(this);_class.prototype.__init3.call(this);_class.prototype.__init4.call(this);_class.prototype.__init5.call(this);_class.prototype.__init6.call(this);_class.prototype.__init7.call(this);_class.prototype.__init8.call(this);_class.prototype.__init9.call(this);_class.prototype.__init10.call(this);_class.prototype.__init11.call(this);_class.prototype.__init12.call(this);_class.prototype.__init13.call(this);_class.prototype.__init14.call(this);_class.prototype.__init15.call(this);_class.prototype.__init16.call(this); }
|
|
107
|
+
// KV operations
|
|
108
|
+
__init() {this.kvGet = { calls: 0, keys: 0, totalMs: 0 }}
|
|
109
|
+
__init2() {this.kvGetBatch = { calls: 0, keys: 0, totalMs: 0 }}
|
|
110
|
+
__init3() {this.kvPut = { calls: 0, keys: 0, totalMs: 0 }}
|
|
111
|
+
__init4() {this.kvPutBatch = { calls: 0, keys: 0, totalMs: 0 }}
|
|
112
|
+
__init5() {this.kvDeleteBatch = { calls: 0, keys: 0, totalMs: 0 }}
|
|
113
|
+
// SQL statements
|
|
114
|
+
__init6() {this.sqlSelects = 0}
|
|
115
|
+
__init7() {this.sqlInserts = 0}
|
|
116
|
+
__init8() {this.sqlUpdates = 0}
|
|
117
|
+
__init9() {this.sqlDeletes = 0}
|
|
118
|
+
__init10() {this.sqlOther = 0}
|
|
119
|
+
__init11() {this.sqlTotalMs = 0}
|
|
120
|
+
// Actions
|
|
121
|
+
__init12() {this.actionCalls = 0}
|
|
122
|
+
__init13() {this.actionErrors = 0}
|
|
123
|
+
__init14() {this.actionTotalMs = 0}
|
|
124
|
+
// Connections
|
|
125
|
+
__init15() {this.connectionsOpened = 0}
|
|
126
|
+
__init16() {this.connectionsClosed = 0}
|
|
127
|
+
trackSql(query, durationMs) {
|
|
128
|
+
const token = query.trimStart().slice(0, 8).toUpperCase();
|
|
129
|
+
if (token.startsWith("SELECT") || token.startsWith("PRAGMA") || token.startsWith("WITH")) {
|
|
130
|
+
this.sqlSelects++;
|
|
131
|
+
} else if (token.startsWith("INSERT")) {
|
|
132
|
+
this.sqlInserts++;
|
|
133
|
+
} else if (token.startsWith("UPDATE")) {
|
|
134
|
+
this.sqlUpdates++;
|
|
135
|
+
} else if (token.startsWith("DELETE")) {
|
|
136
|
+
this.sqlDeletes++;
|
|
137
|
+
} else {
|
|
138
|
+
this.sqlOther++;
|
|
139
|
+
}
|
|
140
|
+
this.sqlTotalMs += durationMs;
|
|
141
|
+
}
|
|
142
|
+
snapshot() {
|
|
143
|
+
return {
|
|
144
|
+
kv_operations: {
|
|
145
|
+
type: "labeled_timing",
|
|
146
|
+
help: "KV round trips by operation type",
|
|
147
|
+
values: {
|
|
148
|
+
get: { ...this.kvGet },
|
|
149
|
+
getBatch: { ...this.kvGetBatch },
|
|
150
|
+
put: { ...this.kvPut },
|
|
151
|
+
putBatch: { ...this.kvPutBatch },
|
|
152
|
+
deleteBatch: { ...this.kvDeleteBatch }
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
sql_statements: {
|
|
156
|
+
type: "labeled_counter",
|
|
157
|
+
help: "SQL statements executed by type",
|
|
158
|
+
values: {
|
|
159
|
+
select: this.sqlSelects,
|
|
160
|
+
insert: this.sqlInserts,
|
|
161
|
+
update: this.sqlUpdates,
|
|
162
|
+
delete: this.sqlDeletes,
|
|
163
|
+
other: this.sqlOther
|
|
164
|
+
}
|
|
165
|
+
},
|
|
166
|
+
sql_duration_ms: {
|
|
167
|
+
type: "counter",
|
|
168
|
+
help: "Total SQL execution time in milliseconds",
|
|
169
|
+
value: this.sqlTotalMs
|
|
170
|
+
},
|
|
171
|
+
action_calls: {
|
|
172
|
+
type: "counter",
|
|
173
|
+
help: "Total action invocations",
|
|
174
|
+
value: this.actionCalls
|
|
175
|
+
},
|
|
176
|
+
action_errors: {
|
|
177
|
+
type: "counter",
|
|
178
|
+
help: "Total action errors",
|
|
179
|
+
value: this.actionErrors
|
|
180
|
+
},
|
|
181
|
+
action_duration_ms: {
|
|
182
|
+
type: "counter",
|
|
183
|
+
help: "Total action execution time in milliseconds",
|
|
184
|
+
value: this.actionTotalMs
|
|
185
|
+
},
|
|
186
|
+
connections_opened: {
|
|
187
|
+
type: "counter",
|
|
188
|
+
help: "Total WebSocket connections opened",
|
|
189
|
+
value: this.connectionsOpened
|
|
190
|
+
},
|
|
191
|
+
connections_closed: {
|
|
192
|
+
type: "counter",
|
|
193
|
+
help: "Total WebSocket connections closed",
|
|
194
|
+
value: this.connectionsClosed
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
}, _class);
|
|
111
199
|
|
|
112
200
|
// src/actor/instance/mod.ts
|
|
201
|
+
var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(_invariant);
|
|
113
202
|
|
|
203
|
+
// src/inspector/actor-inspector.ts
|
|
204
|
+
var _cborx = require('cbor-x'); var cbor2 = _interopRequireWildcard(_cborx); var cbor = _interopRequireWildcard(_cborx); var cbor3 = _interopRequireWildcard(_cborx); var cbor4 = _interopRequireWildcard(_cborx); var cbor5 = _interopRequireWildcard(_cborx); var cbor6 = _interopRequireWildcard(_cborx); var cbor7 = _interopRequireWildcard(_cborx);
|
|
205
|
+
var _nanoevents = require('nanoevents');
|
|
114
206
|
|
|
207
|
+
// src/inspector/workflow-history-json.ts
|
|
115
208
|
|
|
116
|
-
|
|
117
|
-
|
|
209
|
+
function decodeWorkflowCbor(data) {
|
|
210
|
+
if (data === null) {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
return cbor.decode(new Uint8Array(data));
|
|
215
|
+
} catch (e2) {
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function serializeWorkflowLocation(location) {
|
|
220
|
+
return location.map((segment) => {
|
|
221
|
+
if (segment.tag === "WorkflowNameIndex") {
|
|
222
|
+
return {
|
|
223
|
+
tag: segment.tag,
|
|
224
|
+
val: segment.val
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
tag: segment.tag,
|
|
229
|
+
val: {
|
|
230
|
+
loop: segment.val.loop,
|
|
231
|
+
iteration: segment.val.iteration
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
function serializeWorkflowBranches(branches) {
|
|
237
|
+
return Object.fromEntries(
|
|
238
|
+
Array.from(branches.entries()).map(([name, branch]) => [
|
|
239
|
+
name,
|
|
240
|
+
{
|
|
241
|
+
status: branch.status,
|
|
242
|
+
output: decodeWorkflowCbor(branch.output),
|
|
243
|
+
error: branch.error
|
|
244
|
+
}
|
|
245
|
+
])
|
|
246
|
+
);
|
|
247
|
+
}
|
|
248
|
+
function serializeWorkflowEntryKind(kind) {
|
|
249
|
+
switch (kind.tag) {
|
|
250
|
+
case "WorkflowStepEntry":
|
|
251
|
+
return {
|
|
252
|
+
tag: kind.tag,
|
|
253
|
+
val: {
|
|
254
|
+
output: decodeWorkflowCbor(kind.val.output),
|
|
255
|
+
error: kind.val.error
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
case "WorkflowLoopEntry":
|
|
259
|
+
return {
|
|
260
|
+
tag: kind.tag,
|
|
261
|
+
val: {
|
|
262
|
+
state: decodeWorkflowCbor(kind.val.state),
|
|
263
|
+
iteration: kind.val.iteration,
|
|
264
|
+
output: decodeWorkflowCbor(kind.val.output)
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
case "WorkflowSleepEntry":
|
|
268
|
+
return {
|
|
269
|
+
tag: kind.tag,
|
|
270
|
+
val: {
|
|
271
|
+
deadline: Number(kind.val.deadline),
|
|
272
|
+
state: kind.val.state
|
|
273
|
+
}
|
|
274
|
+
};
|
|
275
|
+
case "WorkflowMessageEntry":
|
|
276
|
+
return {
|
|
277
|
+
tag: kind.tag,
|
|
278
|
+
val: {
|
|
279
|
+
name: kind.val.name,
|
|
280
|
+
messageData: decodeWorkflowCbor(kind.val.messageData)
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
case "WorkflowRollbackCheckpointEntry":
|
|
284
|
+
return {
|
|
285
|
+
tag: kind.tag,
|
|
286
|
+
val: {
|
|
287
|
+
name: kind.val.name
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
case "WorkflowJoinEntry":
|
|
291
|
+
return {
|
|
292
|
+
tag: kind.tag,
|
|
293
|
+
val: {
|
|
294
|
+
branches: serializeWorkflowBranches(kind.val.branches)
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
case "WorkflowRaceEntry":
|
|
298
|
+
return {
|
|
299
|
+
tag: kind.tag,
|
|
300
|
+
val: {
|
|
301
|
+
winner: kind.val.winner,
|
|
302
|
+
branches: serializeWorkflowBranches(kind.val.branches)
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
case "WorkflowRemovedEntry":
|
|
306
|
+
return {
|
|
307
|
+
tag: kind.tag,
|
|
308
|
+
val: {
|
|
309
|
+
originalType: kind.val.originalType,
|
|
310
|
+
originalName: kind.val.originalName
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
function serializeWorkflowHistoryForJson(data) {
|
|
316
|
+
if (data === null) {
|
|
317
|
+
return null;
|
|
318
|
+
}
|
|
319
|
+
const history = _chunkDH6UINWAcjs.decodeWorkflowHistoryTransport.call(void 0, data);
|
|
320
|
+
return {
|
|
321
|
+
nameRegistry: [...history.nameRegistry],
|
|
322
|
+
entries: history.entries.map((entry) => ({
|
|
323
|
+
id: entry.id,
|
|
324
|
+
location: serializeWorkflowLocation(entry.location),
|
|
325
|
+
kind: serializeWorkflowEntryKind(entry.kind)
|
|
326
|
+
})),
|
|
327
|
+
entryMetadata: Object.fromEntries(
|
|
328
|
+
Array.from(history.entryMetadata.entries()).map(([entryId, meta]) => [
|
|
329
|
+
entryId,
|
|
330
|
+
{
|
|
331
|
+
status: meta.status,
|
|
332
|
+
error: meta.error,
|
|
333
|
+
attempts: meta.attempts,
|
|
334
|
+
lastAttemptAt: Number(meta.lastAttemptAt),
|
|
335
|
+
createdAt: Number(meta.createdAt),
|
|
336
|
+
completedAt: meta.completedAt === null ? null : Number(meta.completedAt),
|
|
337
|
+
rollbackCompletedAt: meta.rollbackCompletedAt === null ? null : Number(meta.rollbackCompletedAt),
|
|
338
|
+
rollbackError: meta.rollbackError
|
|
339
|
+
}
|
|
340
|
+
])
|
|
341
|
+
)
|
|
342
|
+
};
|
|
343
|
+
}
|
|
118
344
|
|
|
119
345
|
// src/inspector/actor-inspector.ts
|
|
120
|
-
var
|
|
121
|
-
|
|
122
|
-
var ActorInspector = (_class = class {
|
|
123
|
-
constructor(actor) {;_class.prototype.__init.call(this);
|
|
346
|
+
var ActorInspector = (_class2 = class {
|
|
347
|
+
constructor(actor) {;_class2.prototype.__init17.call(this);
|
|
124
348
|
this.actor = actor;
|
|
125
349
|
var _a, _b;
|
|
126
350
|
this.#lastQueueSize = _nullishCoalesce(((_a = actor.queueManager) == null ? void 0 : _a.size), () => ( 0));
|
|
127
|
-
const runInspector =
|
|
351
|
+
const runInspector = _chunkA4KEUCB6cjs.getRunInspectorConfig.call(void 0, actor.config.run);
|
|
128
352
|
this.#workflowInspector = runInspector == null ? void 0 : runInspector.workflow;
|
|
129
353
|
if ((_b = this.#workflowInspector) == null ? void 0 : _b.onHistoryUpdated) {
|
|
130
354
|
this.#workflowInspector.onHistoryUpdated((history) => {
|
|
@@ -135,7 +359,7 @@ var ActorInspector = (_class = class {
|
|
|
135
359
|
});
|
|
136
360
|
}
|
|
137
361
|
}
|
|
138
|
-
|
|
362
|
+
__init17() {this.emitter = _nanoevents.createNanoEvents.call(void 0, )}
|
|
139
363
|
#lastQueueSize = 0;
|
|
140
364
|
#workflowInspector;
|
|
141
365
|
getQueueSize() {
|
|
@@ -145,9 +369,7 @@ var ActorInspector = (_class = class {
|
|
|
145
369
|
const maxSize = this.actor.config.options.maxQueueSize;
|
|
146
370
|
const safeLimit = Math.max(0, Math.floor(limit));
|
|
147
371
|
const messages = await this.actor.queueManager.getMessages();
|
|
148
|
-
const sorted = messages.sort(
|
|
149
|
-
(a, b) => a.createdAt - b.createdAt
|
|
150
|
-
);
|
|
372
|
+
const sorted = messages.sort((a, b) => a.createdAt - b.createdAt);
|
|
151
373
|
const limited = safeLimit > 0 ? sorted.slice(0, safeLimit) : [];
|
|
152
374
|
return {
|
|
153
375
|
size: BigInt(this.#lastQueueSize),
|
|
@@ -181,14 +403,14 @@ var ActorInspector = (_class = class {
|
|
|
181
403
|
isDatabaseEnabled() {
|
|
182
404
|
try {
|
|
183
405
|
return this.actor.db !== void 0;
|
|
184
|
-
} catch (
|
|
406
|
+
} catch (e3) {
|
|
185
407
|
return false;
|
|
186
408
|
}
|
|
187
409
|
}
|
|
188
410
|
async getDatabaseSchema() {
|
|
189
411
|
var _a;
|
|
190
412
|
if (!this.isDatabaseEnabled()) {
|
|
191
|
-
throw new (0,
|
|
413
|
+
throw new (0, _chunk6G7ZNM27cjs.DatabaseNotEnabled)();
|
|
192
414
|
}
|
|
193
415
|
const db = this.actor.db;
|
|
194
416
|
const tables = await db.execute(
|
|
@@ -218,11 +440,11 @@ var ActorInspector = (_class = class {
|
|
|
218
440
|
records: _nullishCoalesce(((_a = countResult == null ? void 0 : countResult[0]) == null ? void 0 : _a.count), () => ( 0))
|
|
219
441
|
});
|
|
220
442
|
}
|
|
221
|
-
return
|
|
443
|
+
return _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0, cbor2.encode({ tables: tableInfos }));
|
|
222
444
|
}
|
|
223
445
|
async getDatabaseTableRows(table, limit, offset) {
|
|
224
446
|
if (!this.isDatabaseEnabled()) {
|
|
225
|
-
throw new (0,
|
|
447
|
+
throw new (0, _chunk6G7ZNM27cjs.DatabaseNotEnabled)();
|
|
226
448
|
}
|
|
227
449
|
const db = this.actor.db;
|
|
228
450
|
const safeLimit = Math.max(0, Math.min(Math.floor(limit), 500));
|
|
@@ -233,17 +455,17 @@ var ActorInspector = (_class = class {
|
|
|
233
455
|
safeLimit,
|
|
234
456
|
safeOffset
|
|
235
457
|
);
|
|
236
|
-
return
|
|
458
|
+
return _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0, cbor2.encode(result));
|
|
237
459
|
}
|
|
238
460
|
isStateEnabled() {
|
|
239
461
|
return this.actor.stateEnabled;
|
|
240
462
|
}
|
|
241
463
|
getState() {
|
|
242
464
|
if (!this.actor.stateEnabled) {
|
|
243
|
-
throw new (0,
|
|
465
|
+
throw new (0, _chunk6G7ZNM27cjs.StateNotEnabled)();
|
|
244
466
|
}
|
|
245
|
-
return
|
|
246
|
-
|
|
467
|
+
return _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0,
|
|
468
|
+
cbor2.encode(this.actor.stateManager.persistRaw.state)
|
|
247
469
|
);
|
|
248
470
|
}
|
|
249
471
|
getRpcs() {
|
|
@@ -254,13 +476,13 @@ var ActorInspector = (_class = class {
|
|
|
254
476
|
this.actor.connectionManager.connections.entries()
|
|
255
477
|
).map(([id, conn]) => {
|
|
256
478
|
var _a, _b;
|
|
257
|
-
const connStateManager = conn[
|
|
479
|
+
const connStateManager = conn[_chunkHNE2AK6Ccjs.CONN_STATE_MANAGER_SYMBOL];
|
|
258
480
|
return {
|
|
259
|
-
type: (_a = conn[
|
|
481
|
+
type: (_a = conn[_chunkHNE2AK6Ccjs.CONN_DRIVER_SYMBOL]) == null ? void 0 : _a.type,
|
|
260
482
|
id,
|
|
261
|
-
details:
|
|
262
|
-
|
|
263
|
-
type: (_b = conn[
|
|
483
|
+
details: _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0,
|
|
484
|
+
cbor2.encode({
|
|
485
|
+
type: (_b = conn[_chunkHNE2AK6Ccjs.CONN_DRIVER_SYMBOL]) == null ? void 0 : _b.type,
|
|
264
486
|
params: conn.params,
|
|
265
487
|
stateEnabled: connStateManager.stateEnabled,
|
|
266
488
|
state: connStateManager.stateEnabled ? connStateManager.state : void 0,
|
|
@@ -275,14 +497,14 @@ var ActorInspector = (_class = class {
|
|
|
275
497
|
}
|
|
276
498
|
async setState(state) {
|
|
277
499
|
if (!this.actor.stateEnabled) {
|
|
278
|
-
throw new (0,
|
|
500
|
+
throw new (0, _chunk6G7ZNM27cjs.StateNotEnabled)();
|
|
279
501
|
}
|
|
280
|
-
this.actor.stateManager.state =
|
|
502
|
+
this.actor.stateManager.state = cbor2.decode(Buffer.from(state));
|
|
281
503
|
await this.actor.stateManager.saveState({ immediate: true });
|
|
282
504
|
}
|
|
283
505
|
async executeAction(name, params) {
|
|
284
506
|
const conn = await this.actor.connectionManager.prepareAndConnectConn(
|
|
285
|
-
|
|
507
|
+
_chunkHNE2AK6Ccjs.createHttpDriver.call(void 0, ),
|
|
286
508
|
// TODO: This may cause issues
|
|
287
509
|
void 0,
|
|
288
510
|
void 0,
|
|
@@ -290,12 +512,12 @@ var ActorInspector = (_class = class {
|
|
|
290
512
|
void 0
|
|
291
513
|
);
|
|
292
514
|
try {
|
|
293
|
-
return
|
|
294
|
-
|
|
515
|
+
return _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0,
|
|
516
|
+
cbor2.encode(
|
|
295
517
|
await this.actor.executeAction(
|
|
296
|
-
new (0,
|
|
518
|
+
new (0, _chunkHNE2AK6Ccjs.ActionContext)(this.actor, conn),
|
|
297
519
|
name,
|
|
298
|
-
|
|
520
|
+
cbor2.decode(Buffer.from(params))
|
|
299
521
|
)
|
|
300
522
|
)
|
|
301
523
|
);
|
|
@@ -307,28 +529,42 @@ var ActorInspector = (_class = class {
|
|
|
307
529
|
// objects suitable for JSON serialization instead of CBOR-encoded buffers.
|
|
308
530
|
getStateJson() {
|
|
309
531
|
if (!this.actor.stateEnabled) {
|
|
310
|
-
throw new (0,
|
|
532
|
+
throw new (0, _chunk6G7ZNM27cjs.StateNotEnabled)();
|
|
311
533
|
}
|
|
312
534
|
return this.actor.stateManager.persistRaw.state;
|
|
313
535
|
}
|
|
314
536
|
async setStateJson(state) {
|
|
315
537
|
if (!this.actor.stateEnabled) {
|
|
316
|
-
throw new (0,
|
|
538
|
+
throw new (0, _chunk6G7ZNM27cjs.StateNotEnabled)();
|
|
317
539
|
}
|
|
318
540
|
this.actor.stateManager.state = state;
|
|
319
541
|
await this.actor.stateManager.saveState({ immediate: true });
|
|
320
542
|
}
|
|
543
|
+
async getDatabaseSchemaJson() {
|
|
544
|
+
return toHttpJsonCompatible(
|
|
545
|
+
cbor2.decode(Buffer.from(await this.getDatabaseSchema()))
|
|
546
|
+
);
|
|
547
|
+
}
|
|
548
|
+
async getDatabaseTableRowsJson(table, limit, offset) {
|
|
549
|
+
return toHttpJsonCompatible(
|
|
550
|
+
cbor2.decode(
|
|
551
|
+
Buffer.from(
|
|
552
|
+
await this.getDatabaseTableRows(table, limit, offset)
|
|
553
|
+
)
|
|
554
|
+
)
|
|
555
|
+
);
|
|
556
|
+
}
|
|
321
557
|
getConnectionsJson() {
|
|
322
558
|
return Array.from(
|
|
323
559
|
this.actor.connectionManager.connections.entries()
|
|
324
560
|
).map(([id, conn]) => {
|
|
325
561
|
var _a, _b;
|
|
326
|
-
const connStateManager = conn[
|
|
562
|
+
const connStateManager = conn[_chunkHNE2AK6Ccjs.CONN_STATE_MANAGER_SYMBOL];
|
|
327
563
|
return {
|
|
328
|
-
type: (_a = conn[
|
|
564
|
+
type: (_a = conn[_chunkHNE2AK6Ccjs.CONN_DRIVER_SYMBOL]) == null ? void 0 : _a.type,
|
|
329
565
|
id,
|
|
330
566
|
details: {
|
|
331
|
-
type: (_b = conn[
|
|
567
|
+
type: (_b = conn[_chunkHNE2AK6Ccjs.CONN_DRIVER_SYMBOL]) == null ? void 0 : _b.type,
|
|
332
568
|
params: conn.params,
|
|
333
569
|
stateEnabled: connStateManager.stateEnabled,
|
|
334
570
|
state: connStateManager.stateEnabled ? connStateManager.state : void 0,
|
|
@@ -340,7 +576,7 @@ var ActorInspector = (_class = class {
|
|
|
340
576
|
}
|
|
341
577
|
async executeActionJson(name, args) {
|
|
342
578
|
const conn = await this.actor.connectionManager.prepareAndConnectConn(
|
|
343
|
-
|
|
579
|
+
_chunkHNE2AK6Ccjs.createHttpDriver.call(void 0, ),
|
|
344
580
|
void 0,
|
|
345
581
|
void 0,
|
|
346
582
|
void 0,
|
|
@@ -348,7 +584,7 @@ var ActorInspector = (_class = class {
|
|
|
348
584
|
);
|
|
349
585
|
try {
|
|
350
586
|
return await this.actor.executeAction(
|
|
351
|
-
new (0,
|
|
587
|
+
new (0, _chunkHNE2AK6Ccjs.ActionContext)(this.actor, conn),
|
|
352
588
|
name,
|
|
353
589
|
args
|
|
354
590
|
);
|
|
@@ -361,11 +597,10 @@ var ActorInspector = (_class = class {
|
|
|
361
597
|
return result;
|
|
362
598
|
}
|
|
363
599
|
getWorkflowHistoryJson() {
|
|
364
|
-
const bigIntReplacer = (_key, value) => typeof value === "bigint" ? Number(value) : value;
|
|
365
|
-
const history = this.getWorkflowHistory();
|
|
366
|
-
const safeHistory = history ? JSON.parse(JSON.stringify(history, bigIntReplacer)) : null;
|
|
367
600
|
return {
|
|
368
|
-
history:
|
|
601
|
+
history: serializeWorkflowHistoryForJson(
|
|
602
|
+
this.getWorkflowHistory()
|
|
603
|
+
),
|
|
369
604
|
isWorkflowEnabled: this.isWorkflowEnabled()
|
|
370
605
|
};
|
|
371
606
|
}
|
|
@@ -381,18 +616,26 @@ var ActorInspector = (_class = class {
|
|
|
381
616
|
}))
|
|
382
617
|
}));
|
|
383
618
|
}
|
|
384
|
-
},
|
|
619
|
+
}, _class2);
|
|
385
620
|
function escapeDoubleQuotes(value) {
|
|
386
621
|
return value.replace(/"/g, '""');
|
|
387
622
|
}
|
|
623
|
+
function toHttpJsonCompatible(value) {
|
|
624
|
+
return JSON.parse(
|
|
625
|
+
JSON.stringify(
|
|
626
|
+
value,
|
|
627
|
+
(_key, nestedValue) => typeof nestedValue === "bigint" ? Number(nestedValue) : nestedValue instanceof Uint8Array ? Array.from(nestedValue) : nestedValue
|
|
628
|
+
)
|
|
629
|
+
);
|
|
630
|
+
}
|
|
388
631
|
|
|
389
632
|
// src/actor/conn/persisted.ts
|
|
390
633
|
|
|
391
634
|
function convertConnToBarePersistedConn(persist) {
|
|
392
635
|
return {
|
|
393
636
|
id: persist.id,
|
|
394
|
-
parameters:
|
|
395
|
-
state:
|
|
637
|
+
parameters: _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0, cbor3.encode(persist.parameters)),
|
|
638
|
+
state: _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0, cbor3.encode(persist.state)),
|
|
396
639
|
subscriptions: persist.subscriptions.map((sub) => ({
|
|
397
640
|
eventName: sub.eventName
|
|
398
641
|
})),
|
|
@@ -407,8 +650,8 @@ function convertConnToBarePersistedConn(persist) {
|
|
|
407
650
|
function convertConnFromBarePersistedConn(bareData) {
|
|
408
651
|
return {
|
|
409
652
|
id: bareData.id,
|
|
410
|
-
parameters:
|
|
411
|
-
state:
|
|
653
|
+
parameters: cbor3.decode(new Uint8Array(bareData.parameters)),
|
|
654
|
+
state: cbor3.decode(new Uint8Array(bareData.state)),
|
|
412
655
|
subscriptions: bareData.subscriptions.map((sub) => ({
|
|
413
656
|
eventName: sub.eventName
|
|
414
657
|
})),
|
|
@@ -484,7 +727,7 @@ var ConnectionManager = class {
|
|
|
484
727
|
return this.#reconnectHibernatableConn(driver);
|
|
485
728
|
}
|
|
486
729
|
if (this.#actor.config.onBeforeConnect) {
|
|
487
|
-
const ctx = new (0,
|
|
730
|
+
const ctx = new (0, _chunkHNE2AK6Ccjs.BeforeConnectContext)(this.#actor, request);
|
|
488
731
|
await this.#actor.runInTraceSpan(
|
|
489
732
|
"actor.onBeforeConnect",
|
|
490
733
|
{
|
|
@@ -530,8 +773,8 @@ var ConnectionManager = class {
|
|
|
530
773
|
}
|
|
531
774
|
};
|
|
532
775
|
}
|
|
533
|
-
const conn = new (0,
|
|
534
|
-
conn[
|
|
776
|
+
const conn = new (0, _chunkHNE2AK6Ccjs.Conn)(this.#actor, connData);
|
|
777
|
+
conn[_chunkHNE2AK6Ccjs.CONN_DRIVER_SYMBOL] = driver;
|
|
535
778
|
return conn;
|
|
536
779
|
}
|
|
537
780
|
/**
|
|
@@ -554,15 +797,15 @@ var ConnectionManager = class {
|
|
|
554
797
|
this.#callOnConnect(conn);
|
|
555
798
|
this.#actor.inspector.emitter.emit("connectionsUpdated");
|
|
556
799
|
this.#actor.resetSleepTimer();
|
|
557
|
-
conn[
|
|
558
|
-
if (conn[
|
|
800
|
+
conn[_chunkHNE2AK6Ccjs.CONN_CONNECTED_SYMBOL] = true;
|
|
801
|
+
if (conn[_chunkHNE2AK6Ccjs.CONN_SPEAKS_RIVETKIT_SYMBOL]) {
|
|
559
802
|
const initData = { actorId: this.#actor.id, connectionId: conn.id };
|
|
560
|
-
conn[
|
|
561
|
-
new (0,
|
|
803
|
+
conn[_chunkHNE2AK6Ccjs.CONN_SEND_MESSAGE_SYMBOL](
|
|
804
|
+
new (0, _chunkHNE2AK6Ccjs.CachedSerializer)(
|
|
562
805
|
initData,
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
806
|
+
_chunkHNE2AK6Ccjs.TO_CLIENT_VERSIONED,
|
|
807
|
+
_chunkHNE2AK6Ccjs.CURRENT_VERSION,
|
|
808
|
+
_chunkHNE2AK6Ccjs.ToClientSchema,
|
|
566
809
|
// JSON: identity conversion (no nested data to encode)
|
|
567
810
|
(value) => ({
|
|
568
811
|
body: {
|
|
@@ -595,17 +838,17 @@ var ConnectionManager = class {
|
|
|
595
838
|
msg: "reconnecting hibernatable websocket connection",
|
|
596
839
|
connectionId: existingConn.id
|
|
597
840
|
});
|
|
598
|
-
if (existingConn[
|
|
841
|
+
if (existingConn[_chunkHNE2AK6Ccjs.CONN_DRIVER_SYMBOL]) {
|
|
599
842
|
this.#disconnectExistingDriver(existingConn);
|
|
600
843
|
}
|
|
601
|
-
existingConn[
|
|
844
|
+
existingConn[_chunkHNE2AK6Ccjs.CONN_DRIVER_SYMBOL] = driver;
|
|
602
845
|
this.#actor.resetSleepTimer();
|
|
603
|
-
existingConn[
|
|
846
|
+
existingConn[_chunkHNE2AK6Ccjs.CONN_CONNECTED_SYMBOL] = true;
|
|
604
847
|
this.#actor.inspector.emitter.emit("connectionsUpdated");
|
|
605
848
|
return existingConn;
|
|
606
849
|
}
|
|
607
850
|
#disconnectExistingDriver(conn) {
|
|
608
|
-
const driver = conn[
|
|
851
|
+
const driver = conn[_chunkHNE2AK6Ccjs.CONN_DRIVER_SYMBOL];
|
|
609
852
|
if (driver == null ? void 0 : driver.disconnect) {
|
|
610
853
|
driver.disconnect(
|
|
611
854
|
this.#actor,
|
|
@@ -633,7 +876,7 @@ var ConnectionManager = class {
|
|
|
633
876
|
this.#pendingDisconnectCount += 1;
|
|
634
877
|
const attributes = {
|
|
635
878
|
"rivet.conn.id": conn.id,
|
|
636
|
-
"rivet.conn.type": (_a = conn[
|
|
879
|
+
"rivet.conn.type": (_a = conn[_chunkHNE2AK6Ccjs.CONN_DRIVER_SYMBOL]) == null ? void 0 : _a.type,
|
|
637
880
|
"rivet.conn.hibernatable": conn.isHibernatable
|
|
638
881
|
};
|
|
639
882
|
const span = this.#actor.startTraceSpan(
|
|
@@ -669,18 +912,20 @@ var ConnectionManager = class {
|
|
|
669
912
|
} catch (error) {
|
|
670
913
|
this.#actor.endTraceSpan(span, {
|
|
671
914
|
code: "ERROR",
|
|
672
|
-
message:
|
|
915
|
+
message: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
673
916
|
});
|
|
674
917
|
this.#actor.rLog.error({
|
|
675
918
|
msg: "error in `onDisconnect`",
|
|
676
|
-
error:
|
|
919
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
677
920
|
});
|
|
678
921
|
} finally {
|
|
679
922
|
this.#connsWithPersistChanged.delete(conn.id);
|
|
680
923
|
if (conn.isHibernatable) {
|
|
681
|
-
const key =
|
|
924
|
+
const key = _chunkA4KEUCB6cjs.makeConnKey.call(void 0, conn.id);
|
|
682
925
|
try {
|
|
683
|
-
await this.#actor.driver.kvBatchDelete(this.#actor.id, [
|
|
926
|
+
await this.#actor.driver.kvBatchDelete(this.#actor.id, [
|
|
927
|
+
key
|
|
928
|
+
]);
|
|
684
929
|
this.#actor.rLog.debug({
|
|
685
930
|
msg: "removed connection from KV",
|
|
686
931
|
connId: conn.id
|
|
@@ -688,7 +933,7 @@ var ConnectionManager = class {
|
|
|
688
933
|
} catch (err) {
|
|
689
934
|
this.#actor.rLog.error({
|
|
690
935
|
msg: "kvBatchDelete failed for conn",
|
|
691
|
-
err:
|
|
936
|
+
err: _chunkMPLMTJY5cjs.stringifyError.call(void 0, err)
|
|
692
937
|
});
|
|
693
938
|
}
|
|
694
939
|
}
|
|
@@ -701,7 +946,7 @@ var ConnectionManager = class {
|
|
|
701
946
|
}
|
|
702
947
|
async cleanupPersistedHibernatableConnections(reason) {
|
|
703
948
|
const staleConnections = Array.from(this.#connections.values()).filter(
|
|
704
|
-
(conn) => conn.isHibernatable && conn[
|
|
949
|
+
(conn) => conn.isHibernatable && conn[_chunkHNE2AK6Ccjs.CONN_DRIVER_SYMBOL] === void 0
|
|
705
950
|
);
|
|
706
951
|
if (staleConnections.length === 0) {
|
|
707
952
|
return 0;
|
|
@@ -738,7 +983,7 @@ var ConnectionManager = class {
|
|
|
738
983
|
*/
|
|
739
984
|
restoreConnections(connections) {
|
|
740
985
|
for (const connPersist of connections) {
|
|
741
|
-
const conn = new (0,
|
|
986
|
+
const conn = new (0, _chunkHNE2AK6Ccjs.Conn)(this.#actor, {
|
|
742
987
|
hibernatable: connPersist
|
|
743
988
|
});
|
|
744
989
|
this.#connections.set(conn.id, conn);
|
|
@@ -757,22 +1002,22 @@ var ConnectionManager = class {
|
|
|
757
1002
|
// MARK: - Private Helpers
|
|
758
1003
|
findHibernatableConn(gatewayIdBuf, requestIdBuf) {
|
|
759
1004
|
return Array.from(this.#connections.values()).find((conn) => {
|
|
760
|
-
const connStateManager = conn[
|
|
1005
|
+
const connStateManager = conn[_chunkHNE2AK6Ccjs.CONN_STATE_MANAGER_SYMBOL];
|
|
761
1006
|
const h = connStateManager.hibernatableDataRaw;
|
|
762
|
-
return h &&
|
|
1007
|
+
return h && _chunkMPLMTJY5cjs.arrayBuffersEqual.call(void 0, h.gatewayId, gatewayIdBuf) && _chunkMPLMTJY5cjs.arrayBuffersEqual.call(void 0, h.requestId, requestIdBuf);
|
|
763
1008
|
});
|
|
764
1009
|
}
|
|
765
1010
|
async #createConnState(params, request) {
|
|
766
1011
|
if ("createConnState" in this.#actor.config) {
|
|
767
1012
|
const createConnState = this.#actor.config.createConnState;
|
|
768
|
-
const ctx = new (0,
|
|
1013
|
+
const ctx = new (0, _chunkHNE2AK6Ccjs.CreateConnStateContext)(this.#actor, request);
|
|
769
1014
|
return await this.#actor.runInTraceSpan(
|
|
770
1015
|
"actor.createConnState",
|
|
771
1016
|
void 0,
|
|
772
1017
|
() => {
|
|
773
1018
|
const dataOrPromise = createConnState(ctx, params);
|
|
774
1019
|
if (dataOrPromise instanceof Promise) {
|
|
775
|
-
return
|
|
1020
|
+
return _chunkA4KEUCB6cjs.deadline.call(void 0,
|
|
776
1021
|
dataOrPromise,
|
|
777
1022
|
this.#actor.config.options.createConnStateTimeout
|
|
778
1023
|
);
|
|
@@ -791,13 +1036,13 @@ var ConnectionManager = class {
|
|
|
791
1036
|
var _a;
|
|
792
1037
|
const attributes = {
|
|
793
1038
|
"rivet.conn.id": conn.id,
|
|
794
|
-
"rivet.conn.type": (_a = conn[
|
|
1039
|
+
"rivet.conn.type": (_a = conn[_chunkHNE2AK6Ccjs.CONN_DRIVER_SYMBOL]) == null ? void 0 : _a.type,
|
|
795
1040
|
"rivet.conn.hibernatable": conn.isHibernatable
|
|
796
1041
|
};
|
|
797
1042
|
const span = this.#actor.startTraceSpan("actor.onConnect", attributes);
|
|
798
1043
|
try {
|
|
799
1044
|
if (this.#actor.config.onConnect) {
|
|
800
|
-
const ctx = new (0,
|
|
1045
|
+
const ctx = new (0, _chunkHNE2AK6Ccjs.ConnectContext)(this.#actor, conn);
|
|
801
1046
|
const result = this.#actor.traces.withSpan(
|
|
802
1047
|
span,
|
|
803
1048
|
() => this.#actor.config.onConnect(ctx, conn)
|
|
@@ -808,7 +1053,7 @@ var ConnectionManager = class {
|
|
|
808
1053
|
span
|
|
809
1054
|
);
|
|
810
1055
|
if (result instanceof Promise) {
|
|
811
|
-
|
|
1056
|
+
_chunkA4KEUCB6cjs.deadline.call(void 0,
|
|
812
1057
|
result,
|
|
813
1058
|
this.#actor.config.options.onConnectTimeout
|
|
814
1059
|
).then(() => {
|
|
@@ -816,7 +1061,7 @@ var ConnectionManager = class {
|
|
|
816
1061
|
}).catch((error) => {
|
|
817
1062
|
this.#actor.endTraceSpan(span, {
|
|
818
1063
|
code: "ERROR",
|
|
819
|
-
message:
|
|
1064
|
+
message: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
820
1065
|
});
|
|
821
1066
|
this.#actor.rLog.error({
|
|
822
1067
|
msg: "error in `onConnect`, closing socket",
|
|
@@ -832,11 +1077,11 @@ var ConnectionManager = class {
|
|
|
832
1077
|
} catch (error) {
|
|
833
1078
|
this.#actor.endTraceSpan(span, {
|
|
834
1079
|
code: "ERROR",
|
|
835
|
-
message:
|
|
1080
|
+
message: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
836
1081
|
});
|
|
837
1082
|
this.#actor.rLog.error({
|
|
838
1083
|
msg: "error in `onConnect`",
|
|
839
|
-
error:
|
|
1084
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
840
1085
|
});
|
|
841
1086
|
conn == null ? void 0 : conn.disconnect("`onConnect` failed");
|
|
842
1087
|
}
|
|
@@ -876,7 +1121,7 @@ var EventManager = class {
|
|
|
876
1121
|
}
|
|
877
1122
|
subscribers.add(connection);
|
|
878
1123
|
if (!fromPersist) {
|
|
879
|
-
connection[
|
|
1124
|
+
connection[_chunkHNE2AK6Ccjs.CONN_STATE_MANAGER_SYMBOL].addSubscription({
|
|
880
1125
|
eventName
|
|
881
1126
|
});
|
|
882
1127
|
this.#actor.stateManager.saveState({ immediate: true });
|
|
@@ -913,7 +1158,7 @@ var EventManager = class {
|
|
|
913
1158
|
}
|
|
914
1159
|
}
|
|
915
1160
|
if (!fromRemoveConn) {
|
|
916
|
-
const removed = connection[
|
|
1161
|
+
const removed = connection[_chunkHNE2AK6Ccjs.CONN_STATE_MANAGER_SYMBOL].removeSubscription({ eventName });
|
|
917
1162
|
if (!removed) {
|
|
918
1163
|
this.#actor.rLog.warn({
|
|
919
1164
|
msg: "subscription does not exist in persist",
|
|
@@ -951,11 +1196,11 @@ var EventManager = class {
|
|
|
951
1196
|
"rivet.broadcast.subscribers": subscribers.size
|
|
952
1197
|
});
|
|
953
1198
|
const eventData = { name, args };
|
|
954
|
-
const toClientSerializer = new (0,
|
|
1199
|
+
const toClientSerializer = new (0, _chunkHNE2AK6Ccjs.CachedSerializer)(
|
|
955
1200
|
eventData,
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
1201
|
+
_chunkHNE2AK6Ccjs.TO_CLIENT_VERSIONED,
|
|
1202
|
+
_chunkHNE2AK6Ccjs.CURRENT_VERSION,
|
|
1203
|
+
_chunkHNE2AK6Ccjs.ToClientSchema,
|
|
959
1204
|
// JSON: args is the raw value (array of arguments)
|
|
960
1205
|
(value) => ({
|
|
961
1206
|
body: {
|
|
@@ -972,19 +1217,19 @@ var EventManager = class {
|
|
|
972
1217
|
tag: "Event",
|
|
973
1218
|
val: {
|
|
974
1219
|
name: value.name,
|
|
975
|
-
args:
|
|
1220
|
+
args: _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0, cbor4.encode(value.args))
|
|
976
1221
|
}
|
|
977
1222
|
}
|
|
978
1223
|
})
|
|
979
1224
|
);
|
|
980
1225
|
let sentCount = 0;
|
|
981
1226
|
for (const connection of subscribers) {
|
|
982
|
-
if (connection[
|
|
1227
|
+
if (connection[_chunkHNE2AK6Ccjs.CONN_SPEAKS_RIVETKIT_SYMBOL]) {
|
|
983
1228
|
try {
|
|
984
|
-
connection[
|
|
1229
|
+
connection[_chunkHNE2AK6Ccjs.CONN_SEND_MESSAGE_SYMBOL](toClientSerializer);
|
|
985
1230
|
sentCount++;
|
|
986
1231
|
} catch (error) {
|
|
987
|
-
if (error instanceof
|
|
1232
|
+
if (error instanceof _chunk6G7ZNM27cjs.OutgoingMessageTooLong) {
|
|
988
1233
|
throw error;
|
|
989
1234
|
}
|
|
990
1235
|
this.#actor.rLog.error({
|
|
@@ -1067,9 +1312,9 @@ var EventManager = class {
|
|
|
1067
1312
|
|
|
1068
1313
|
function convertActorToBarePersisted(persist) {
|
|
1069
1314
|
return {
|
|
1070
|
-
input: persist.input !== void 0 ?
|
|
1315
|
+
input: persist.input !== void 0 ? _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0, cbor5.encode(persist.input)) : null,
|
|
1071
1316
|
hasInitialized: persist.hasInitialized,
|
|
1072
|
-
state:
|
|
1317
|
+
state: _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0, cbor5.encode(persist.state)),
|
|
1073
1318
|
scheduledEvents: persist.scheduledEvents.map((event) => ({
|
|
1074
1319
|
eventId: event.eventId,
|
|
1075
1320
|
timestamp: BigInt(event.timestamp),
|
|
@@ -1080,9 +1325,9 @@ function convertActorToBarePersisted(persist) {
|
|
|
1080
1325
|
}
|
|
1081
1326
|
function convertActorFromBarePersisted(bareData) {
|
|
1082
1327
|
return {
|
|
1083
|
-
input: bareData.input ?
|
|
1328
|
+
input: bareData.input ? cbor5.decode(new Uint8Array(bareData.input)) : void 0,
|
|
1084
1329
|
hasInitialized: bareData.hasInitialized,
|
|
1085
|
-
state:
|
|
1330
|
+
state: cbor5.decode(new Uint8Array(bareData.state)),
|
|
1086
1331
|
scheduledEvents: bareData.scheduledEvents.map((event) => ({
|
|
1087
1332
|
eventId: event.eventId,
|
|
1088
1333
|
timestamp: Number(event.timestamp),
|
|
@@ -1098,8 +1343,8 @@ var DEFAULT_METADATA = {
|
|
|
1098
1343
|
nextId: 1n,
|
|
1099
1344
|
size: 0
|
|
1100
1345
|
};
|
|
1101
|
-
var QUEUE_METADATA_KEY =
|
|
1102
|
-
var QUEUE_MESSAGES_PREFIX =
|
|
1346
|
+
var QUEUE_METADATA_KEY = _chunkA4KEUCB6cjs.queueMetadataKey.call(void 0, );
|
|
1347
|
+
var QUEUE_MESSAGES_PREFIX = _chunkA4KEUCB6cjs.queueMessagesPrefix.call(void 0, );
|
|
1103
1348
|
var QueueManager = class {
|
|
1104
1349
|
#actor;
|
|
1105
1350
|
#driver;
|
|
@@ -1128,7 +1373,7 @@ var QueueManager = class {
|
|
|
1128
1373
|
return;
|
|
1129
1374
|
}
|
|
1130
1375
|
try {
|
|
1131
|
-
const decoded =
|
|
1376
|
+
const decoded = _chunkHNE2AK6Ccjs.QUEUE_METADATA_VERSIONED.deserializeWithEmbeddedVersion(
|
|
1132
1377
|
metadataBuffer
|
|
1133
1378
|
);
|
|
1134
1379
|
this.#metadata.nextId = decoded.nextId;
|
|
@@ -1147,17 +1392,17 @@ var QueueManager = class {
|
|
|
1147
1392
|
this.#actor.assertReady();
|
|
1148
1393
|
const sizeLimit = this.#actor.config.options.maxQueueSize;
|
|
1149
1394
|
if (this.#metadata.size >= sizeLimit) {
|
|
1150
|
-
throw new (0,
|
|
1395
|
+
throw new (0, _chunk6G7ZNM27cjs.QueueFull)(sizeLimit);
|
|
1151
1396
|
}
|
|
1152
1397
|
let invalidPath = "";
|
|
1153
|
-
if (!
|
|
1398
|
+
if (!_chunkMPLMTJY5cjs.isCborSerializable.call(void 0, body, (path) => {
|
|
1154
1399
|
invalidPath = path;
|
|
1155
1400
|
})) {
|
|
1156
|
-
throw new (0,
|
|
1401
|
+
throw new (0, _chunk6G7ZNM27cjs.QueueMessageInvalid)(invalidPath);
|
|
1157
1402
|
}
|
|
1158
1403
|
const createdAt = Date.now();
|
|
1159
|
-
const bodyCborBuffer =
|
|
1160
|
-
const encodedMessage =
|
|
1404
|
+
const bodyCborBuffer = cbor6.encode(body);
|
|
1405
|
+
const encodedMessage = _chunkHNE2AK6Ccjs.QUEUE_MESSAGE_VERSIONED.serializeWithEmbeddedVersion(
|
|
1161
1406
|
{
|
|
1162
1407
|
name,
|
|
1163
1408
|
body: new Uint8Array(bodyCborBuffer).buffer,
|
|
@@ -1167,17 +1412,17 @@ var QueueManager = class {
|
|
|
1167
1412
|
inFlight: null,
|
|
1168
1413
|
inFlightAt: null
|
|
1169
1414
|
},
|
|
1170
|
-
|
|
1415
|
+
_chunkHNE2AK6Ccjs.CURRENT_VERSION2
|
|
1171
1416
|
);
|
|
1172
1417
|
const encodedSize = encodedMessage.byteLength;
|
|
1173
1418
|
if (encodedSize > this.#actor.config.options.maxQueueMessageSize) {
|
|
1174
|
-
throw new (0,
|
|
1419
|
+
throw new (0, _chunk6G7ZNM27cjs.QueueMessageTooLarge)(
|
|
1175
1420
|
encodedSize,
|
|
1176
1421
|
this.#actor.config.options.maxQueueMessageSize
|
|
1177
1422
|
);
|
|
1178
1423
|
}
|
|
1179
1424
|
const id = this.#metadata.nextId;
|
|
1180
|
-
const messageKey =
|
|
1425
|
+
const messageKey = _chunkA4KEUCB6cjs.makeQueueMessageKey.call(void 0, id);
|
|
1181
1426
|
this.#metadata.nextId = id + 1n;
|
|
1182
1427
|
this.#metadata.size += 1;
|
|
1183
1428
|
const encodedMetadata = this.#serializeMetadata();
|
|
@@ -1206,7 +1451,7 @@ var QueueManager = class {
|
|
|
1206
1451
|
}
|
|
1207
1452
|
const message = await this.enqueue(name, body);
|
|
1208
1453
|
const messageId = message.id.toString();
|
|
1209
|
-
const { promise, resolve } =
|
|
1454
|
+
const { promise, resolve } = _chunkMPLMTJY5cjs.promiseWithResolvers.call(void 0, () => {
|
|
1210
1455
|
});
|
|
1211
1456
|
const pending = { resolve };
|
|
1212
1457
|
if (timeout !== void 0) {
|
|
@@ -1249,7 +1494,7 @@ var QueueManager = class {
|
|
|
1249
1494
|
if (timeout === 0) {
|
|
1250
1495
|
return [];
|
|
1251
1496
|
}
|
|
1252
|
-
const { promise, resolve, reject } =
|
|
1497
|
+
const { promise, resolve, reject } = _chunkMPLMTJY5cjs.promiseWithResolvers.call(void 0, () => {
|
|
1253
1498
|
});
|
|
1254
1499
|
const waiterId = crypto.randomUUID();
|
|
1255
1500
|
let timeoutHandle;
|
|
@@ -1293,10 +1538,10 @@ var QueueManager = class {
|
|
|
1293
1538
|
}, timeout);
|
|
1294
1539
|
}
|
|
1295
1540
|
const onAbort = () => {
|
|
1296
|
-
rejectWaiter(new (0,
|
|
1541
|
+
rejectWaiter(new (0, _chunk6G7ZNM27cjs.ActorAborted)());
|
|
1297
1542
|
};
|
|
1298
1543
|
const onStop = () => {
|
|
1299
|
-
rejectWaiter(new (0,
|
|
1544
|
+
rejectWaiter(new (0, _chunk6G7ZNM27cjs.ActorAborted)());
|
|
1300
1545
|
};
|
|
1301
1546
|
const actorAbortSignal = this.#actor.abortSignal;
|
|
1302
1547
|
if (actorAbortSignal.aborted) {
|
|
@@ -1342,7 +1587,7 @@ var QueueManager = class {
|
|
|
1342
1587
|
}
|
|
1343
1588
|
};
|
|
1344
1589
|
const actorAbortSignal = this.#actor.abortSignal;
|
|
1345
|
-
const onActorAbort = () => listener.reject(new (0,
|
|
1590
|
+
const onActorAbort = () => listener.reject(new (0, _chunk6G7ZNM27cjs.ActorAborted)());
|
|
1346
1591
|
if (actorAbortSignal.aborted) {
|
|
1347
1592
|
onActorAbort();
|
|
1348
1593
|
return;
|
|
@@ -1352,7 +1597,7 @@ var QueueManager = class {
|
|
|
1352
1597
|
});
|
|
1353
1598
|
listener.actorAbortCleanup = () => actorAbortSignal.removeEventListener("abort", onActorAbort);
|
|
1354
1599
|
if (abortSignal) {
|
|
1355
|
-
const onAbort = () => listener.reject(new (0,
|
|
1600
|
+
const onAbort = () => listener.reject(new (0, _chunk6G7ZNM27cjs.ActorAborted)());
|
|
1356
1601
|
if (abortSignal.aborted) {
|
|
1357
1602
|
onAbort();
|
|
1358
1603
|
return;
|
|
@@ -1415,11 +1660,11 @@ var QueueManager = class {
|
|
|
1415
1660
|
const decoded = [];
|
|
1416
1661
|
for (const [key, value] of entries) {
|
|
1417
1662
|
try {
|
|
1418
|
-
const messageId =
|
|
1419
|
-
const decodedPayload =
|
|
1663
|
+
const messageId = _chunkA4KEUCB6cjs.decodeQueueMessageKey.call(void 0, key);
|
|
1664
|
+
const decodedPayload = _chunkHNE2AK6Ccjs.QUEUE_MESSAGE_VERSIONED.deserializeWithEmbeddedVersion(
|
|
1420
1665
|
value
|
|
1421
1666
|
);
|
|
1422
|
-
const body =
|
|
1667
|
+
const body = cbor6.decode(new Uint8Array(decodedPayload.body));
|
|
1423
1668
|
decoded.push({
|
|
1424
1669
|
id: messageId,
|
|
1425
1670
|
name: decodedPayload.name,
|
|
@@ -1463,7 +1708,7 @@ var QueueManager = class {
|
|
|
1463
1708
|
if (messages.length === 0) {
|
|
1464
1709
|
return;
|
|
1465
1710
|
}
|
|
1466
|
-
const keys = messages.map((message) =>
|
|
1711
|
+
const keys = messages.map((message) => _chunkA4KEUCB6cjs.makeQueueMessageKey.call(void 0, message.id));
|
|
1467
1712
|
this.#metadata.size = Math.max(
|
|
1468
1713
|
0,
|
|
1469
1714
|
this.#metadata.size - messages.length
|
|
@@ -1501,11 +1746,11 @@ var QueueManager = class {
|
|
|
1501
1746
|
let maxId = 0n;
|
|
1502
1747
|
for (const [key] of entries) {
|
|
1503
1748
|
try {
|
|
1504
|
-
const messageId =
|
|
1749
|
+
const messageId = _chunkA4KEUCB6cjs.decodeQueueMessageKey.call(void 0, key);
|
|
1505
1750
|
if (messageId > maxId) {
|
|
1506
1751
|
maxId = messageId;
|
|
1507
1752
|
}
|
|
1508
|
-
} catch (
|
|
1753
|
+
} catch (e4) {
|
|
1509
1754
|
}
|
|
1510
1755
|
}
|
|
1511
1756
|
this.#metadata.nextId = maxId + 1n;
|
|
@@ -1516,12 +1761,12 @@ var QueueManager = class {
|
|
|
1516
1761
|
this.#actor.inspector.updateQueueSize(this.#metadata.size);
|
|
1517
1762
|
}
|
|
1518
1763
|
#serializeMetadata() {
|
|
1519
|
-
return
|
|
1764
|
+
return _chunkHNE2AK6Ccjs.QUEUE_METADATA_VERSIONED.serializeWithEmbeddedVersion(
|
|
1520
1765
|
{
|
|
1521
1766
|
nextId: this.#metadata.nextId,
|
|
1522
1767
|
size: this.#metadata.size
|
|
1523
1768
|
},
|
|
1524
|
-
|
|
1769
|
+
_chunkHNE2AK6Ccjs.CURRENT_VERSION2
|
|
1525
1770
|
);
|
|
1526
1771
|
}
|
|
1527
1772
|
};
|
|
@@ -1531,15 +1776,15 @@ var QueueManager = class {
|
|
|
1531
1776
|
var ScheduleManager = class {
|
|
1532
1777
|
#actor;
|
|
1533
1778
|
#actorDriver;
|
|
1534
|
-
#alarmWriteQueue = new (0,
|
|
1779
|
+
#alarmWriteQueue = new (0, _chunkMPLMTJY5cjs.SinglePromiseQueue)();
|
|
1535
1780
|
#config;
|
|
1536
1781
|
// ActorConfig type
|
|
1537
1782
|
#persist;
|
|
1538
1783
|
// Reference to PersistedActor
|
|
1539
|
-
constructor(actor, actorDriver,
|
|
1784
|
+
constructor(actor, actorDriver, config) {
|
|
1540
1785
|
this.#actor = actor;
|
|
1541
1786
|
this.#actorDriver = actorDriver;
|
|
1542
|
-
this.#config =
|
|
1787
|
+
this.#config = config;
|
|
1543
1788
|
}
|
|
1544
1789
|
// MARK: - Public API
|
|
1545
1790
|
/**
|
|
@@ -1561,7 +1806,7 @@ var ScheduleManager = class {
|
|
|
1561
1806
|
eventId: crypto.randomUUID(),
|
|
1562
1807
|
timestamp,
|
|
1563
1808
|
action,
|
|
1564
|
-
args:
|
|
1809
|
+
args: _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0, cbor7.encode(args))
|
|
1565
1810
|
};
|
|
1566
1811
|
this.#actor.emitTraceEvent("schedule.created", {
|
|
1567
1812
|
"rivet.schedule.event_id": newEvent.eventId,
|
|
@@ -1760,7 +2005,7 @@ var ScheduleManager = class {
|
|
|
1760
2005
|
`Scheduled event action ${event.action} is not a function (got ${typeof fn})`
|
|
1761
2006
|
);
|
|
1762
2007
|
}
|
|
1763
|
-
const args = event.args ?
|
|
2008
|
+
const args = event.args ? cbor7.decode(new Uint8Array(event.args)) : [];
|
|
1764
2009
|
const result = this.#actor.traces.withSpan(
|
|
1765
2010
|
span,
|
|
1766
2011
|
() => fn.call(void 0, this.#actor.actorContext, ...args)
|
|
@@ -1776,16 +2021,16 @@ var ScheduleManager = class {
|
|
|
1776
2021
|
});
|
|
1777
2022
|
} catch (error) {
|
|
1778
2023
|
this.#actor.traces.setAttributes(span, {
|
|
1779
|
-
"error.message":
|
|
2024
|
+
"error.message": _chunkMPLMTJY5cjs.stringifyError.call(void 0, error),
|
|
1780
2025
|
"error.type": error instanceof Error ? error.name : typeof error
|
|
1781
2026
|
});
|
|
1782
2027
|
this.#actor.endTraceSpan(span, {
|
|
1783
2028
|
code: "ERROR",
|
|
1784
|
-
message:
|
|
2029
|
+
message: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
1785
2030
|
});
|
|
1786
2031
|
this.#actor.log.error({
|
|
1787
2032
|
msg: "error executing scheduled event",
|
|
1788
|
-
error:
|
|
2033
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error),
|
|
1789
2034
|
eventId: event.eventId,
|
|
1790
2035
|
timestamp: event.timestamp,
|
|
1791
2036
|
action: event.action
|
|
@@ -1840,7 +2085,7 @@ var StateManager = class {
|
|
|
1840
2085
|
#persistChanged = false;
|
|
1841
2086
|
#isInOnStateChange = false;
|
|
1842
2087
|
// Save management
|
|
1843
|
-
#persistWriteQueue = new (0,
|
|
2088
|
+
#persistWriteQueue = new (0, _chunkMPLMTJY5cjs.SinglePromiseQueue)();
|
|
1844
2089
|
#lastSaveTime = 0;
|
|
1845
2090
|
#pendingSaveTimeout;
|
|
1846
2091
|
#pendingSaveScheduledTimestamp;
|
|
@@ -1849,11 +2094,11 @@ var StateManager = class {
|
|
|
1849
2094
|
#config;
|
|
1850
2095
|
// ActorConfig type
|
|
1851
2096
|
#stateSaveInterval;
|
|
1852
|
-
constructor(actor, actorDriver,
|
|
2097
|
+
constructor(actor, actorDriver, config) {
|
|
1853
2098
|
this.#actor = actor;
|
|
1854
2099
|
this.#actorDriver = actorDriver;
|
|
1855
|
-
this.#config =
|
|
1856
|
-
this.#stateSaveInterval =
|
|
2100
|
+
this.#config = config;
|
|
2101
|
+
this.#stateSaveInterval = config.options.stateSaveInterval || 100;
|
|
1857
2102
|
}
|
|
1858
2103
|
// MARK: - Public API
|
|
1859
2104
|
get persist() {
|
|
@@ -1909,10 +2154,10 @@ var StateManager = class {
|
|
|
1909
2154
|
const bareData = convertActorToBarePersisted(persistData);
|
|
1910
2155
|
await this.#actorDriver.kvBatchPut(this.#actor.id, [
|
|
1911
2156
|
[
|
|
1912
|
-
|
|
1913
|
-
|
|
2157
|
+
_chunkA4KEUCB6cjs.KEYS.PERSIST_DATA,
|
|
2158
|
+
_chunkHNE2AK6Ccjs.ACTOR_VERSIONED.serializeWithEmbeddedVersion(
|
|
1914
2159
|
bareData,
|
|
1915
|
-
|
|
2160
|
+
_chunkHNE2AK6Ccjs.CURRENT_VERSION2
|
|
1916
2161
|
)
|
|
1917
2162
|
]
|
|
1918
2163
|
]);
|
|
@@ -1926,14 +2171,14 @@ var StateManager = class {
|
|
|
1926
2171
|
this.#persistRaw = target;
|
|
1927
2172
|
if (target === null || typeof target !== "object") {
|
|
1928
2173
|
let invalidPath = "";
|
|
1929
|
-
if (!
|
|
2174
|
+
if (!_chunkMPLMTJY5cjs.isCborSerializable.call(void 0,
|
|
1930
2175
|
target,
|
|
1931
2176
|
(path) => {
|
|
1932
2177
|
invalidPath = path;
|
|
1933
2178
|
},
|
|
1934
2179
|
""
|
|
1935
2180
|
)) {
|
|
1936
|
-
throw new (0,
|
|
2181
|
+
throw new (0, _chunk6G7ZNM27cjs.InvalidStateType)({ path: invalidPath });
|
|
1937
2182
|
}
|
|
1938
2183
|
return target;
|
|
1939
2184
|
}
|
|
@@ -1960,7 +2205,12 @@ var StateManager = class {
|
|
|
1960
2205
|
await this.#savePersistInner();
|
|
1961
2206
|
} else {
|
|
1962
2207
|
if (!this.#onPersistSavedPromise) {
|
|
1963
|
-
this.#onPersistSavedPromise =
|
|
2208
|
+
this.#onPersistSavedPromise = _chunkMPLMTJY5cjs.promiseWithResolvers.call(void 0,
|
|
2209
|
+
(reason) => _chunkA4KEUCB6cjs.loggerWithoutContext.call(void 0, ).warn({
|
|
2210
|
+
msg: "unhandled persist saved promise rejection",
|
|
2211
|
+
reason
|
|
2212
|
+
})
|
|
2213
|
+
);
|
|
1964
2214
|
}
|
|
1965
2215
|
this.savePersistThrottled(opts.maxWait);
|
|
1966
2216
|
await ((_a = this.#onPersistSavedPromise) == null ? void 0 : _a.promise);
|
|
@@ -2001,7 +2251,7 @@ var StateManager = class {
|
|
|
2001
2251
|
this.#savePersistInner().catch((error) => {
|
|
2002
2252
|
this.#actor.rLog.error({
|
|
2003
2253
|
msg: "error saving persist data in scheduled save",
|
|
2004
|
-
error:
|
|
2254
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2005
2255
|
});
|
|
2006
2256
|
});
|
|
2007
2257
|
}, saveDelay);
|
|
@@ -2009,7 +2259,7 @@ var StateManager = class {
|
|
|
2009
2259
|
this.#savePersistInner().catch((error) => {
|
|
2010
2260
|
this.#actor.rLog.error({
|
|
2011
2261
|
msg: "error saving persist data immediately",
|
|
2012
|
-
error:
|
|
2262
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2013
2263
|
});
|
|
2014
2264
|
});
|
|
2015
2265
|
}
|
|
@@ -2035,22 +2285,22 @@ var StateManager = class {
|
|
|
2035
2285
|
// MARK: - Private Helpers
|
|
2036
2286
|
#validateStateEnabled() {
|
|
2037
2287
|
if (!this.stateEnabled) {
|
|
2038
|
-
throw new (0,
|
|
2288
|
+
throw new (0, _chunk6G7ZNM27cjs.StateNotEnabled)();
|
|
2039
2289
|
}
|
|
2040
2290
|
}
|
|
2041
2291
|
#handleStateChange(path, value) {
|
|
2042
|
-
const actorStatePath =
|
|
2043
|
-
const connStatePath =
|
|
2292
|
+
const actorStatePath = _chunkA4KEUCB6cjs.isStatePath.call(void 0, path);
|
|
2293
|
+
const connStatePath = _chunkA4KEUCB6cjs.isConnStatePath.call(void 0, path);
|
|
2044
2294
|
if (actorStatePath || connStatePath) {
|
|
2045
2295
|
let invalidPath = "";
|
|
2046
|
-
if (!
|
|
2296
|
+
if (!_chunkMPLMTJY5cjs.isCborSerializable.call(void 0,
|
|
2047
2297
|
value,
|
|
2048
2298
|
(invalidPathPart) => {
|
|
2049
2299
|
invalidPath = invalidPathPart;
|
|
2050
2300
|
},
|
|
2051
2301
|
""
|
|
2052
2302
|
)) {
|
|
2053
|
-
throw new (0,
|
|
2303
|
+
throw new (0, _chunk6G7ZNM27cjs.InvalidStateType)({
|
|
2054
2304
|
path: path + (invalidPath ? `.${invalidPath}` : "")
|
|
2055
2305
|
});
|
|
2056
2306
|
}
|
|
@@ -2083,11 +2333,11 @@ var StateManager = class {
|
|
|
2083
2333
|
} catch (error) {
|
|
2084
2334
|
this.#actor.endTraceSpan(span, {
|
|
2085
2335
|
code: "ERROR",
|
|
2086
|
-
message:
|
|
2336
|
+
message: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2087
2337
|
});
|
|
2088
2338
|
this.#actor.rLog.error({
|
|
2089
2339
|
msg: "error in `_onStateChange`",
|
|
2090
|
-
error:
|
|
2340
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2091
2341
|
});
|
|
2092
2342
|
} finally {
|
|
2093
2343
|
this.#isInOnStateChange = false;
|
|
@@ -2121,10 +2371,10 @@ var StateManager = class {
|
|
|
2121
2371
|
this.#persistRaw
|
|
2122
2372
|
);
|
|
2123
2373
|
entries.push([
|
|
2124
|
-
|
|
2125
|
-
|
|
2374
|
+
_chunkA4KEUCB6cjs.KEYS.PERSIST_DATA,
|
|
2375
|
+
_chunkHNE2AK6Ccjs.ACTOR_VERSIONED.serializeWithEmbeddedVersion(
|
|
2126
2376
|
bareData,
|
|
2127
|
-
|
|
2377
|
+
_chunkHNE2AK6Ccjs.CURRENT_VERSION2
|
|
2128
2378
|
)
|
|
2129
2379
|
]);
|
|
2130
2380
|
}
|
|
@@ -2138,7 +2388,7 @@ var StateManager = class {
|
|
|
2138
2388
|
});
|
|
2139
2389
|
continue;
|
|
2140
2390
|
}
|
|
2141
|
-
const connStateManager = conn[
|
|
2391
|
+
const connStateManager = conn[_chunkHNE2AK6Ccjs.CONN_STATE_MANAGER_SYMBOL];
|
|
2142
2392
|
const hibernatableDataRaw = connStateManager.hibernatableDataRaw;
|
|
2143
2393
|
if (!hibernatableDataRaw) {
|
|
2144
2394
|
this.#actor.log.warn({
|
|
@@ -2159,11 +2409,11 @@ var StateManager = class {
|
|
|
2159
2409
|
const bareData = convertConnToBarePersistedConn(
|
|
2160
2410
|
hibernatableDataRaw
|
|
2161
2411
|
);
|
|
2162
|
-
const connData =
|
|
2412
|
+
const connData = _chunkHNE2AK6Ccjs.CONN_VERSIONED.serializeWithEmbeddedVersion(
|
|
2163
2413
|
bareData,
|
|
2164
|
-
|
|
2414
|
+
_chunkHNE2AK6Ccjs.CURRENT_VERSION2
|
|
2165
2415
|
);
|
|
2166
|
-
entries.push([
|
|
2416
|
+
entries.push([_chunkA4KEUCB6cjs.makeConnKey.call(void 0, connId), connData]);
|
|
2167
2417
|
connections.push(conn);
|
|
2168
2418
|
}
|
|
2169
2419
|
this.#actor.rLog.info({
|
|
@@ -2203,7 +2453,7 @@ var StateManager = class {
|
|
|
2203
2453
|
} catch (error) {
|
|
2204
2454
|
this.#actor.rLog.error({
|
|
2205
2455
|
msg: "error saving persist",
|
|
2206
|
-
error:
|
|
2456
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2207
2457
|
});
|
|
2208
2458
|
(_b = this.#onPersistSavedPromise) == null ? void 0 : _b.reject(error);
|
|
2209
2459
|
throw error;
|
|
@@ -2221,14 +2471,15 @@ function concatPrefix(prefix, key) {
|
|
|
2221
2471
|
function stripPrefix(prefix, key) {
|
|
2222
2472
|
return key.slice(prefix.length);
|
|
2223
2473
|
}
|
|
2224
|
-
function
|
|
2225
|
-
const
|
|
2226
|
-
for (let i =
|
|
2227
|
-
if (
|
|
2228
|
-
|
|
2474
|
+
function computeUpperBound(prefix) {
|
|
2475
|
+
const upperBound = prefix.slice();
|
|
2476
|
+
for (let i = upperBound.length - 1; i >= 0; i--) {
|
|
2477
|
+
if (upperBound[i] !== 255) {
|
|
2478
|
+
upperBound[i]++;
|
|
2479
|
+
return upperBound.slice(0, i + 1);
|
|
2229
2480
|
}
|
|
2230
2481
|
}
|
|
2231
|
-
return
|
|
2482
|
+
return null;
|
|
2232
2483
|
}
|
|
2233
2484
|
var ActorTracesDriver = class {
|
|
2234
2485
|
#driver;
|
|
@@ -2237,7 +2488,7 @@ var ActorTracesDriver = class {
|
|
|
2237
2488
|
constructor(driver, actorId) {
|
|
2238
2489
|
this.#driver = driver;
|
|
2239
2490
|
this.#actorId = actorId;
|
|
2240
|
-
this.#prefix =
|
|
2491
|
+
this.#prefix = _chunkA4KEUCB6cjs.tracesStoragePrefix.call(void 0, );
|
|
2241
2492
|
}
|
|
2242
2493
|
async get(key) {
|
|
2243
2494
|
const [value] = await this.#driver.kvBatchGet(this.#actorId, [
|
|
@@ -2257,17 +2508,26 @@ var ActorTracesDriver = class {
|
|
|
2257
2508
|
}
|
|
2258
2509
|
async deletePrefix(prefix) {
|
|
2259
2510
|
const fullPrefix = concatPrefix(this.#prefix, prefix);
|
|
2260
|
-
const
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2511
|
+
const fullEnd = computeUpperBound(fullPrefix);
|
|
2512
|
+
if (fullEnd) {
|
|
2513
|
+
await this.#driver.kvDeleteRange(
|
|
2514
|
+
this.#actorId,
|
|
2515
|
+
fullPrefix,
|
|
2516
|
+
fullEnd
|
|
2517
|
+
);
|
|
2518
|
+
} else {
|
|
2519
|
+
const entries = await this.#driver.kvListPrefix(
|
|
2520
|
+
this.#actorId,
|
|
2521
|
+
fullPrefix
|
|
2522
|
+
);
|
|
2523
|
+
if (entries.length === 0) {
|
|
2524
|
+
return;
|
|
2525
|
+
}
|
|
2526
|
+
await this.#driver.kvBatchDelete(
|
|
2527
|
+
this.#actorId,
|
|
2528
|
+
entries.map(([key]) => key)
|
|
2529
|
+
);
|
|
2266
2530
|
}
|
|
2267
|
-
await this.#driver.kvBatchDelete(
|
|
2268
|
-
this.#actorId,
|
|
2269
|
-
entries.map(([key]) => key)
|
|
2270
|
-
);
|
|
2271
2531
|
}
|
|
2272
2532
|
async list(prefix) {
|
|
2273
2533
|
const fullPrefix = concatPrefix(this.#prefix, prefix);
|
|
@@ -2281,20 +2541,13 @@ var ActorTracesDriver = class {
|
|
|
2281
2541
|
}));
|
|
2282
2542
|
}
|
|
2283
2543
|
async listRange(start, end, options) {
|
|
2284
|
-
const
|
|
2285
|
-
const fullEnd = concatPrefix(this.#prefix, end);
|
|
2286
|
-
const entries = await this.#driver.kvListPrefix(
|
|
2544
|
+
const entries = await this.#driver.kvListRange(
|
|
2287
2545
|
this.#actorId,
|
|
2288
|
-
this.#prefix
|
|
2546
|
+
concatPrefix(this.#prefix, start),
|
|
2547
|
+
concatPrefix(this.#prefix, end),
|
|
2548
|
+
options
|
|
2289
2549
|
);
|
|
2290
|
-
|
|
2291
|
-
return compareBytes(key, fullStart) >= 0 && compareBytes(key, fullEnd) < 0;
|
|
2292
|
-
}).sort(([keyA], [keyB]) => compareBytes(keyA, keyB));
|
|
2293
|
-
if (options == null ? void 0 : options.reverse) {
|
|
2294
|
-
filtered.reverse();
|
|
2295
|
-
}
|
|
2296
|
-
const limited = (options == null ? void 0 : options.limit) ? filtered.slice(0, options.limit) : filtered;
|
|
2297
|
-
return limited.map(([key, value]) => ({
|
|
2550
|
+
return entries.map(([key, value]) => ({
|
|
2298
2551
|
key: stripPrefix(this.#prefix, key),
|
|
2299
2552
|
value
|
|
2300
2553
|
}));
|
|
@@ -2318,14 +2571,15 @@ var CanSleep = /* @__PURE__ */ ((CanSleep2) => {
|
|
|
2318
2571
|
CanSleep2[CanSleep2["Yes"] = 0] = "Yes";
|
|
2319
2572
|
CanSleep2[CanSleep2["NotReady"] = 1] = "NotReady";
|
|
2320
2573
|
CanSleep2[CanSleep2["NotStarted"] = 2] = "NotStarted";
|
|
2321
|
-
CanSleep2[CanSleep2["
|
|
2322
|
-
CanSleep2[CanSleep2["
|
|
2323
|
-
CanSleep2[CanSleep2["
|
|
2324
|
-
CanSleep2[CanSleep2["
|
|
2325
|
-
CanSleep2[CanSleep2["
|
|
2574
|
+
CanSleep2[CanSleep2["PreventSleep"] = 3] = "PreventSleep";
|
|
2575
|
+
CanSleep2[CanSleep2["ActiveConns"] = 4] = "ActiveConns";
|
|
2576
|
+
CanSleep2[CanSleep2["ActiveDisconnectCallbacks"] = 5] = "ActiveDisconnectCallbacks";
|
|
2577
|
+
CanSleep2[CanSleep2["ActiveHonoHttpRequests"] = 6] = "ActiveHonoHttpRequests";
|
|
2578
|
+
CanSleep2[CanSleep2["ActiveKeepAwake"] = 7] = "ActiveKeepAwake";
|
|
2579
|
+
CanSleep2[CanSleep2["ActiveRun"] = 8] = "ActiveRun";
|
|
2326
2580
|
return CanSleep2;
|
|
2327
2581
|
})(CanSleep || {});
|
|
2328
|
-
var ActorInstance = (
|
|
2582
|
+
var ActorInstance = (_class3 = class {
|
|
2329
2583
|
// MARK: - Core Properties
|
|
2330
2584
|
|
|
2331
2585
|
#config;
|
|
@@ -2367,6 +2621,7 @@ var ActorInstance = (_class2 = class {
|
|
|
2367
2621
|
#vars;
|
|
2368
2622
|
#db;
|
|
2369
2623
|
#sqliteVfs;
|
|
2624
|
+
#metrics = new ActorMetrics();
|
|
2370
2625
|
// MARK: - Background Tasks
|
|
2371
2626
|
#backgroundPromises = [];
|
|
2372
2627
|
#runPromise;
|
|
@@ -2375,6 +2630,7 @@ var ActorInstance = (_class2 = class {
|
|
|
2375
2630
|
// MARK: - HTTP/WebSocket Tracking
|
|
2376
2631
|
#activeHonoHttpRequests = 0;
|
|
2377
2632
|
#activeKeepAwakeCount = 0;
|
|
2633
|
+
#preventSleep = false;
|
|
2378
2634
|
// MARK: - Deprecated (kept for compatibility)
|
|
2379
2635
|
#schedule;
|
|
2380
2636
|
// MARK: - Inspector
|
|
@@ -2388,11 +2644,11 @@ var ActorInstance = (_class2 = class {
|
|
|
2388
2644
|
* When set, the effective option value is the minimum of the base config
|
|
2389
2645
|
* value and the override value.
|
|
2390
2646
|
*/
|
|
2391
|
-
|
|
2647
|
+
__init18() {this.overrides = {}}
|
|
2392
2648
|
// MARK: - Constructor
|
|
2393
|
-
constructor(
|
|
2394
|
-
this.#config =
|
|
2395
|
-
this.actorContext = new (0,
|
|
2649
|
+
constructor(config) {;_class3.prototype.__init18.call(this);
|
|
2650
|
+
this.#config = config;
|
|
2651
|
+
this.actorContext = new (0, _chunkA4KEUCB6cjs.ActorContext)(this);
|
|
2396
2652
|
this.#inspector = new ActorInspector(this);
|
|
2397
2653
|
}
|
|
2398
2654
|
// MARK: - Public Getters
|
|
@@ -2431,6 +2687,9 @@ var ActorInstance = (_class2 = class {
|
|
|
2431
2687
|
get inspectorToken() {
|
|
2432
2688
|
return this.#inspectorToken;
|
|
2433
2689
|
}
|
|
2690
|
+
get metrics() {
|
|
2691
|
+
return this.#metrics;
|
|
2692
|
+
}
|
|
2434
2693
|
// MARK: - Tracing
|
|
2435
2694
|
getCurrentTraceSpan() {
|
|
2436
2695
|
return this.#traces.getCurrentSpan();
|
|
@@ -2457,7 +2716,7 @@ var ActorInstance = (_class2 = class {
|
|
|
2457
2716
|
this.#traces.endSpan(span, {
|
|
2458
2717
|
status: {
|
|
2459
2718
|
code: "ERROR",
|
|
2460
|
-
message:
|
|
2719
|
+
message: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2461
2720
|
}
|
|
2462
2721
|
});
|
|
2463
2722
|
throw error;
|
|
@@ -2482,6 +2741,9 @@ var ActorInstance = (_class2 = class {
|
|
|
2482
2741
|
get abortSignal() {
|
|
2483
2742
|
return this.#abortController.signal;
|
|
2484
2743
|
}
|
|
2744
|
+
get preventSleep() {
|
|
2745
|
+
return this.#preventSleep;
|
|
2746
|
+
}
|
|
2485
2747
|
get actions() {
|
|
2486
2748
|
return Object.keys(_nullishCoalesce(this.#config.actions, () => ( {})));
|
|
2487
2749
|
}
|
|
@@ -2512,7 +2774,7 @@ var ActorInstance = (_class2 = class {
|
|
|
2512
2774
|
}
|
|
2513
2775
|
get db() {
|
|
2514
2776
|
if (!this.#db) {
|
|
2515
|
-
throw new (0,
|
|
2777
|
+
throw new (0, _chunk6G7ZNM27cjs.DatabaseNotEnabled)();
|
|
2516
2778
|
}
|
|
2517
2779
|
return this.#db;
|
|
2518
2780
|
}
|
|
@@ -2524,7 +2786,7 @@ var ActorInstance = (_class2 = class {
|
|
|
2524
2786
|
this.#actorId = actorId;
|
|
2525
2787
|
this.#name = name;
|
|
2526
2788
|
this.#key = key;
|
|
2527
|
-
this.#actorKeyString =
|
|
2789
|
+
this.#actorKeyString = _chunkHNE2AK6Ccjs.serializeActorKey.call(void 0, this.#key);
|
|
2528
2790
|
this.#region = region;
|
|
2529
2791
|
this.#initializeTraces();
|
|
2530
2792
|
this.#initializeLogging();
|
|
@@ -2560,9 +2822,9 @@ var ActorInstance = (_class2 = class {
|
|
|
2560
2822
|
return this.#ready;
|
|
2561
2823
|
}
|
|
2562
2824
|
assertReady(allowStoppingState = false) {
|
|
2563
|
-
if (!this.#ready) throw new (0,
|
|
2825
|
+
if (!this.#ready) throw new (0, _chunk6G7ZNM27cjs.InternalError)("Actor not ready");
|
|
2564
2826
|
if (!allowStoppingState && this.#stopCalled)
|
|
2565
|
-
throw new (0,
|
|
2827
|
+
throw new (0, _chunk6G7ZNM27cjs.InternalError)("Actor is stopping");
|
|
2566
2828
|
}
|
|
2567
2829
|
async cleanupPersistedConnections(reason) {
|
|
2568
2830
|
this.assertReady(true);
|
|
@@ -2588,20 +2850,28 @@ var ActorInstance = (_class2 = class {
|
|
|
2588
2850
|
}
|
|
2589
2851
|
try {
|
|
2590
2852
|
this.#abortController.abort();
|
|
2591
|
-
} catch (
|
|
2853
|
+
} catch (e5) {
|
|
2592
2854
|
}
|
|
2593
|
-
await this.#waitForRunHandler(
|
|
2855
|
+
await this.#waitForRunHandler(
|
|
2856
|
+
this.overrides.runStopTimeout !== void 0 ? Math.min(
|
|
2857
|
+
this.#config.options.runStopTimeout,
|
|
2858
|
+
this.overrides.runStopTimeout
|
|
2859
|
+
) : this.#config.options.runStopTimeout
|
|
2860
|
+
);
|
|
2594
2861
|
if (mode === "sleep") {
|
|
2595
2862
|
await this.#callOnSleep();
|
|
2596
2863
|
} else if (mode === "destroy") {
|
|
2597
2864
|
await this.#callOnDestroy();
|
|
2598
2865
|
} else {
|
|
2599
|
-
|
|
2866
|
+
_chunkA4KEUCB6cjs.assertUnreachable.call(void 0, mode);
|
|
2600
2867
|
}
|
|
2601
|
-
await this.#disconnectConnections();
|
|
2602
2868
|
await this.#waitBackgroundPromises(
|
|
2603
|
-
this.overrides.waitUntilTimeout !== void 0 ? Math.min(
|
|
2869
|
+
this.overrides.waitUntilTimeout !== void 0 ? Math.min(
|
|
2870
|
+
this.#config.options.waitUntilTimeout,
|
|
2871
|
+
this.overrides.waitUntilTimeout
|
|
2872
|
+
) : this.#config.options.waitUntilTimeout
|
|
2604
2873
|
);
|
|
2874
|
+
await this.#disconnectConnections();
|
|
2605
2875
|
this.#rLog.info({ msg: "clearing pending save timeouts" });
|
|
2606
2876
|
this.stateManager.clearPendingSaveTimeout();
|
|
2607
2877
|
this.#rLog.info({ msg: "saving state immediately" });
|
|
@@ -2656,7 +2926,7 @@ var ActorInstance = (_class2 = class {
|
|
|
2656
2926
|
this.#destroyCalled = true;
|
|
2657
2927
|
try {
|
|
2658
2928
|
this.#abortController.abort();
|
|
2659
|
-
} catch (
|
|
2929
|
+
} catch (e6) {
|
|
2660
2930
|
}
|
|
2661
2931
|
const destroy = this.driver.startDestroy.bind(
|
|
2662
2932
|
this.driver,
|
|
@@ -2678,14 +2948,14 @@ var ActorInstance = (_class2 = class {
|
|
|
2678
2948
|
this.#activeHonoHttpRequests = 0;
|
|
2679
2949
|
this.#rLog.warn({
|
|
2680
2950
|
msg: "active hono requests went below 0, this is a RivetKit bug",
|
|
2681
|
-
...
|
|
2951
|
+
..._chunkMPLMTJY5cjs.EXTRA_ERROR_LOG
|
|
2682
2952
|
});
|
|
2683
2953
|
}
|
|
2684
2954
|
this.resetSleepTimer();
|
|
2685
2955
|
}
|
|
2686
2956
|
// MARK: - Message Processing
|
|
2687
2957
|
async processMessage(message, conn) {
|
|
2688
|
-
await
|
|
2958
|
+
await _chunkHNE2AK6Ccjs.processMessage.call(void 0, message, this, conn, {
|
|
2689
2959
|
onExecuteAction: async (ctx, name, args) => {
|
|
2690
2960
|
return await this.executeAction(ctx, name, args);
|
|
2691
2961
|
},
|
|
@@ -2698,29 +2968,32 @@ var ActorInstance = (_class2 = class {
|
|
|
2698
2968
|
});
|
|
2699
2969
|
}
|
|
2700
2970
|
async assertCanSubscribe(ctx, eventName) {
|
|
2701
|
-
const canSubscribe =
|
|
2971
|
+
const canSubscribe = _chunkA4KEUCB6cjs.getEventCanSubscribe.call(void 0,
|
|
2972
|
+
this.#config.events,
|
|
2973
|
+
eventName
|
|
2974
|
+
);
|
|
2702
2975
|
if (!canSubscribe) {
|
|
2703
2976
|
return;
|
|
2704
2977
|
}
|
|
2705
2978
|
const result = await canSubscribe(ctx);
|
|
2706
2979
|
if (typeof result !== "boolean") {
|
|
2707
|
-
throw new (0,
|
|
2980
|
+
throw new (0, _chunk6G7ZNM27cjs.InvalidCanSubscribeResponse)();
|
|
2708
2981
|
}
|
|
2709
2982
|
if (!result) {
|
|
2710
|
-
throw new (0,
|
|
2983
|
+
throw new (0, _chunk6G7ZNM27cjs.Forbidden)();
|
|
2711
2984
|
}
|
|
2712
2985
|
}
|
|
2713
2986
|
async assertCanPublish(ctx, queueName) {
|
|
2714
|
-
const canPublish =
|
|
2987
|
+
const canPublish = _chunkA4KEUCB6cjs.getQueueCanPublish.call(void 0, this.#config.queues, queueName);
|
|
2715
2988
|
if (!canPublish) {
|
|
2716
2989
|
return;
|
|
2717
2990
|
}
|
|
2718
2991
|
const result = await canPublish(ctx);
|
|
2719
2992
|
if (typeof result !== "boolean") {
|
|
2720
|
-
throw new (0,
|
|
2993
|
+
throw new (0, _chunk6G7ZNM27cjs.InvalidCanPublishResponse)();
|
|
2721
2994
|
}
|
|
2722
2995
|
if (!result) {
|
|
2723
|
-
throw new (0,
|
|
2996
|
+
throw new (0, _chunk6G7ZNM27cjs.Forbidden)();
|
|
2724
2997
|
}
|
|
2725
2998
|
}
|
|
2726
2999
|
// MARK: - Action Execution
|
|
@@ -2729,7 +3002,7 @@ var ActorInstance = (_class2 = class {
|
|
|
2729
3002
|
const actions = _nullishCoalesce(this.#config.actions, () => ( {}));
|
|
2730
3003
|
if (!(actionName in actions)) {
|
|
2731
3004
|
this.#rLog.warn({ msg: "action does not exist", actionName });
|
|
2732
|
-
throw new (0,
|
|
3005
|
+
throw new (0, _chunk6G7ZNM27cjs.ActionNotFound)(actionName);
|
|
2733
3006
|
}
|
|
2734
3007
|
const actionFunction = actions[actionName];
|
|
2735
3008
|
if (typeof actionFunction !== "function") {
|
|
@@ -2738,10 +3011,12 @@ var ActorInstance = (_class2 = class {
|
|
|
2738
3011
|
actionName,
|
|
2739
3012
|
type: typeof actionFunction
|
|
2740
3013
|
});
|
|
2741
|
-
throw new (0,
|
|
3014
|
+
throw new (0, _chunk6G7ZNM27cjs.ActionNotFound)(actionName);
|
|
2742
3015
|
}
|
|
2743
3016
|
this.#activeKeepAwakeCount++;
|
|
3017
|
+
this.#metrics.actionCalls++;
|
|
2744
3018
|
this.resetSleepTimer();
|
|
3019
|
+
const actionStart = performance.now();
|
|
2745
3020
|
const actionSpan = this.startTraceSpan(`actor.action.${actionName}`, {
|
|
2746
3021
|
"rivet.action.name": actionName
|
|
2747
3022
|
});
|
|
@@ -2761,7 +3036,7 @@ var ActorInstance = (_class2 = class {
|
|
|
2761
3036
|
let output;
|
|
2762
3037
|
const maybeThenable = outputOrPromise;
|
|
2763
3038
|
if (maybeThenable && typeof maybeThenable.then === "function") {
|
|
2764
|
-
output = await
|
|
3039
|
+
output = await _chunkA4KEUCB6cjs.deadline.call(void 0,
|
|
2765
3040
|
Promise.resolve(outputOrPromise),
|
|
2766
3041
|
this.#config.options.actionTimeout
|
|
2767
3042
|
);
|
|
@@ -2783,15 +3058,16 @@ var ActorInstance = (_class2 = class {
|
|
|
2783
3058
|
} catch (error) {
|
|
2784
3059
|
this.#rLog.error({
|
|
2785
3060
|
msg: "error in `onBeforeActionResponse`",
|
|
2786
|
-
error:
|
|
3061
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2787
3062
|
});
|
|
2788
3063
|
}
|
|
2789
3064
|
}
|
|
2790
3065
|
return output;
|
|
2791
3066
|
});
|
|
2792
3067
|
} catch (error) {
|
|
2793
|
-
|
|
2794
|
-
const
|
|
3068
|
+
this.#metrics.actionErrors++;
|
|
3069
|
+
const isTimeout = error instanceof _chunkA4KEUCB6cjs.DeadlineError;
|
|
3070
|
+
const message = isTimeout ? "ActionTimedOut" : _chunkMPLMTJY5cjs.stringifyError.call(void 0, error);
|
|
2795
3071
|
this.#traces.setAttributes(actionSpan, {
|
|
2796
3072
|
"error.message": message,
|
|
2797
3073
|
"error.type": error instanceof Error ? error.name : typeof error
|
|
@@ -2801,15 +3077,16 @@ var ActorInstance = (_class2 = class {
|
|
|
2801
3077
|
});
|
|
2802
3078
|
spanEnded = true;
|
|
2803
3079
|
if (isTimeout) {
|
|
2804
|
-
throw new (0,
|
|
3080
|
+
throw new (0, _chunk6G7ZNM27cjs.ActionTimedOut)();
|
|
2805
3081
|
}
|
|
2806
3082
|
this.#rLog.error({
|
|
2807
3083
|
msg: "action error",
|
|
2808
3084
|
actionName,
|
|
2809
|
-
error:
|
|
3085
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2810
3086
|
});
|
|
2811
3087
|
throw error;
|
|
2812
3088
|
} finally {
|
|
3089
|
+
this.#metrics.actionTotalMs += performance.now() - actionStart;
|
|
2813
3090
|
if (!spanEnded && actionSpan.isActive()) {
|
|
2814
3091
|
this.#traces.endSpan(actionSpan, {
|
|
2815
3092
|
status: { code: "OK" }
|
|
@@ -2820,7 +3097,7 @@ var ActorInstance = (_class2 = class {
|
|
|
2820
3097
|
this.#activeKeepAwakeCount = 0;
|
|
2821
3098
|
this.#rLog.warn({
|
|
2822
3099
|
msg: "active keep awake count went below 0, this is a RivetKit bug",
|
|
2823
|
-
...
|
|
3100
|
+
..._chunkMPLMTJY5cjs.EXTRA_ERROR_LOG
|
|
2824
3101
|
});
|
|
2825
3102
|
}
|
|
2826
3103
|
this.resetSleepTimer();
|
|
@@ -2831,7 +3108,7 @@ var ActorInstance = (_class2 = class {
|
|
|
2831
3108
|
async handleRawRequest(conn, request) {
|
|
2832
3109
|
this.assertReady();
|
|
2833
3110
|
if (!this.#config.onRequest) {
|
|
2834
|
-
throw new (0,
|
|
3111
|
+
throw new (0, _chunk6G7ZNM27cjs.RequestHandlerNotDefined)();
|
|
2835
3112
|
}
|
|
2836
3113
|
const onRequest = this.#config.onRequest;
|
|
2837
3114
|
return await this.runInTraceSpan(
|
|
@@ -2842,17 +3119,17 @@ var ActorInstance = (_class2 = class {
|
|
|
2842
3119
|
"rivet.conn.id": conn.id
|
|
2843
3120
|
},
|
|
2844
3121
|
async () => {
|
|
2845
|
-
const ctx = new (0,
|
|
3122
|
+
const ctx = new (0, _chunkHNE2AK6Ccjs.RequestContext)(this, conn, request);
|
|
2846
3123
|
try {
|
|
2847
3124
|
const response = await onRequest(ctx, request);
|
|
2848
3125
|
if (!response) {
|
|
2849
|
-
throw new (0,
|
|
3126
|
+
throw new (0, _chunk6G7ZNM27cjs.InvalidRequestHandlerResponse)();
|
|
2850
3127
|
}
|
|
2851
3128
|
return response;
|
|
2852
3129
|
} catch (error) {
|
|
2853
3130
|
this.#rLog.error({
|
|
2854
3131
|
msg: "onRequest error",
|
|
2855
|
-
error:
|
|
3132
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2856
3133
|
});
|
|
2857
3134
|
throw error;
|
|
2858
3135
|
} finally {
|
|
@@ -2864,7 +3141,7 @@ var ActorInstance = (_class2 = class {
|
|
|
2864
3141
|
handleRawWebSocket(conn, websocket, request) {
|
|
2865
3142
|
this.assertReady();
|
|
2866
3143
|
if (!this.#config.onWebSocket) {
|
|
2867
|
-
throw new (0,
|
|
3144
|
+
throw new (0, _chunk6G7ZNM27cjs.InternalError)("onWebSocket handler not defined");
|
|
2868
3145
|
}
|
|
2869
3146
|
const span = this.startTraceSpan("actor.onWebSocket", {
|
|
2870
3147
|
"http.url": request == null ? void 0 : request.url,
|
|
@@ -2873,7 +3150,7 @@ var ActorInstance = (_class2 = class {
|
|
|
2873
3150
|
let spanEnded = false;
|
|
2874
3151
|
try {
|
|
2875
3152
|
this.resetSleepTimer();
|
|
2876
|
-
const ctx = new (0,
|
|
3153
|
+
const ctx = new (0, _chunkHNE2AK6Ccjs.WebSocketContext)(this, conn, request);
|
|
2877
3154
|
const voidOrPromise = this.#traces.withSpan(
|
|
2878
3155
|
span,
|
|
2879
3156
|
() => this.#config.onWebSocket(ctx, websocket)
|
|
@@ -2888,13 +3165,13 @@ var ActorInstance = (_class2 = class {
|
|
|
2888
3165
|
if (!spanEnded) {
|
|
2889
3166
|
this.endTraceSpan(span, {
|
|
2890
3167
|
code: "ERROR",
|
|
2891
|
-
message:
|
|
3168
|
+
message: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2892
3169
|
});
|
|
2893
3170
|
spanEnded = true;
|
|
2894
3171
|
}
|
|
2895
3172
|
this.#rLog.error({
|
|
2896
3173
|
msg: "onWebSocket error",
|
|
2897
|
-
error:
|
|
3174
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2898
3175
|
});
|
|
2899
3176
|
}).finally(() => {
|
|
2900
3177
|
this.stateManager.savePersistThrottled();
|
|
@@ -2910,13 +3187,13 @@ var ActorInstance = (_class2 = class {
|
|
|
2910
3187
|
if (!spanEnded) {
|
|
2911
3188
|
this.endTraceSpan(span, {
|
|
2912
3189
|
code: "ERROR",
|
|
2913
|
-
message:
|
|
3190
|
+
message: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2914
3191
|
});
|
|
2915
3192
|
spanEnded = true;
|
|
2916
3193
|
}
|
|
2917
3194
|
this.#rLog.error({
|
|
2918
3195
|
msg: "onWebSocket error",
|
|
2919
|
-
error:
|
|
3196
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2920
3197
|
});
|
|
2921
3198
|
throw error;
|
|
2922
3199
|
}
|
|
@@ -2937,7 +3214,7 @@ var ActorInstance = (_class2 = class {
|
|
|
2937
3214
|
}).catch((error) => {
|
|
2938
3215
|
this.#rLog.error({
|
|
2939
3216
|
msg: "wait until promise failed",
|
|
2940
|
-
error:
|
|
3217
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2941
3218
|
});
|
|
2942
3219
|
});
|
|
2943
3220
|
this.#backgroundPromises.push(nonfailablePromise);
|
|
@@ -2963,12 +3240,21 @@ var ActorInstance = (_class2 = class {
|
|
|
2963
3240
|
this.#activeKeepAwakeCount = 0;
|
|
2964
3241
|
this.#rLog.warn({
|
|
2965
3242
|
msg: "active keep awake count went below 0, this is a RivetKit bug",
|
|
2966
|
-
...
|
|
3243
|
+
..._chunkMPLMTJY5cjs.EXTRA_ERROR_LOG
|
|
2967
3244
|
});
|
|
2968
3245
|
}
|
|
2969
3246
|
this.resetSleepTimer();
|
|
2970
3247
|
}
|
|
2971
3248
|
}
|
|
3249
|
+
setPreventSleep(prevent) {
|
|
3250
|
+
if (this.#preventSleep === prevent) return;
|
|
3251
|
+
this.#preventSleep = prevent;
|
|
3252
|
+
this.#rLog.debug({
|
|
3253
|
+
msg: "updated prevent sleep state",
|
|
3254
|
+
prevent
|
|
3255
|
+
});
|
|
3256
|
+
this.resetSleepTimer();
|
|
3257
|
+
}
|
|
2972
3258
|
beginQueueWait() {
|
|
2973
3259
|
this.assertReady(true);
|
|
2974
3260
|
this.#activeQueueWaitCount++;
|
|
@@ -2980,14 +3266,14 @@ var ActorInstance = (_class2 = class {
|
|
|
2980
3266
|
this.#activeQueueWaitCount = 0;
|
|
2981
3267
|
this.#rLog.warn({
|
|
2982
3268
|
msg: "active queue wait count went below 0, this is a RivetKit bug",
|
|
2983
|
-
...
|
|
3269
|
+
..._chunkMPLMTJY5cjs.EXTRA_ERROR_LOG
|
|
2984
3270
|
});
|
|
2985
3271
|
}
|
|
2986
3272
|
this.resetSleepTimer();
|
|
2987
3273
|
}
|
|
2988
3274
|
// MARK: - Private Helper Methods
|
|
2989
3275
|
#initializeTraces() {
|
|
2990
|
-
if (
|
|
3276
|
+
if (_chunkMPLMTJY5cjs.getRivetExperimentalOtel.call(void 0, )) {
|
|
2991
3277
|
this.#traces = _traces.createTraces.call(void 0, {
|
|
2992
3278
|
driver: new ActorTracesDriver(this.driver, this.#actorId)
|
|
2993
3279
|
});
|
|
@@ -3004,11 +3290,11 @@ var ActorInstance = (_class2 = class {
|
|
|
3004
3290
|
..._nullishCoalesce(attributes, () => ( {}))
|
|
3005
3291
|
};
|
|
3006
3292
|
}
|
|
3007
|
-
#patchLoggerForTraces(
|
|
3293
|
+
#patchLoggerForTraces(logger) {
|
|
3008
3294
|
const levels = ["trace", "debug", "info", "warn", "error", "fatal"];
|
|
3009
3295
|
for (const level of levels) {
|
|
3010
|
-
const original =
|
|
3011
|
-
|
|
3296
|
+
const original = logger[level].bind(logger);
|
|
3297
|
+
logger[level] = ((...args) => {
|
|
3012
3298
|
this.#emitLogEvent(level, args);
|
|
3013
3299
|
return original(...args);
|
|
3014
3300
|
});
|
|
@@ -3052,15 +3338,15 @@ var ActorInstance = (_class2 = class {
|
|
|
3052
3338
|
};
|
|
3053
3339
|
const extraLogParams = (_b = (_a = this.driver).getExtraActorLogParams) == null ? void 0 : _b.call(_a);
|
|
3054
3340
|
if (extraLogParams) Object.assign(logParams, extraLogParams);
|
|
3055
|
-
this.#log =
|
|
3341
|
+
this.#log = _chunkMPLMTJY5cjs.getBaseLogger.call(void 0, ).child(
|
|
3056
3342
|
Object.assign(
|
|
3057
|
-
|
|
3343
|
+
_chunkMPLMTJY5cjs.getIncludeTarget.call(void 0, ) ? { target: "actor" } : {},
|
|
3058
3344
|
logParams
|
|
3059
3345
|
)
|
|
3060
3346
|
);
|
|
3061
|
-
this.#rLog =
|
|
3347
|
+
this.#rLog = _chunkMPLMTJY5cjs.getBaseLogger.call(void 0, ).child(
|
|
3062
3348
|
Object.assign(
|
|
3063
|
-
|
|
3349
|
+
_chunkMPLMTJY5cjs.getIncludeTarget.call(void 0, ) ? { target: "actor-runtime" } : {},
|
|
3064
3350
|
logParams
|
|
3065
3351
|
)
|
|
3066
3352
|
);
|
|
@@ -3070,13 +3356,13 @@ var ActorInstance = (_class2 = class {
|
|
|
3070
3356
|
async #loadState() {
|
|
3071
3357
|
const [persistDataBuffer] = await this.driver.kvBatchGet(
|
|
3072
3358
|
this.#actorId,
|
|
3073
|
-
[
|
|
3359
|
+
[_chunkA4KEUCB6cjs.KEYS.PERSIST_DATA]
|
|
3074
3360
|
);
|
|
3075
3361
|
_invariant2.default.call(void 0,
|
|
3076
3362
|
persistDataBuffer !== null,
|
|
3077
3363
|
"persist data has not been set, it should be set when initialized"
|
|
3078
3364
|
);
|
|
3079
|
-
const bareData =
|
|
3365
|
+
const bareData = _chunkHNE2AK6Ccjs.ACTOR_VERSIONED.deserializeWithEmbeddedVersion(persistDataBuffer);
|
|
3080
3366
|
const persistData = convertActorFromBarePersisted(bareData);
|
|
3081
3367
|
if (persistData.hasInitialized) {
|
|
3082
3368
|
await this.#restoreExistingActor(persistData);
|
|
@@ -3100,12 +3386,12 @@ var ActorInstance = (_class2 = class {
|
|
|
3100
3386
|
async #restoreExistingActor(persistData) {
|
|
3101
3387
|
const connEntries = await this.driver.kvListPrefix(
|
|
3102
3388
|
this.#actorId,
|
|
3103
|
-
|
|
3389
|
+
_chunkA4KEUCB6cjs.KEYS.CONN_PREFIX
|
|
3104
3390
|
);
|
|
3105
3391
|
const connections = [];
|
|
3106
3392
|
for (const [_key, value] of connEntries) {
|
|
3107
3393
|
try {
|
|
3108
|
-
const bareData =
|
|
3394
|
+
const bareData = _chunkHNE2AK6Ccjs.CONN_VERSIONED.deserializeWithEmbeddedVersion(
|
|
3109
3395
|
new Uint8Array(value)
|
|
3110
3396
|
);
|
|
3111
3397
|
const conn = convertConnFromBarePersistedConn(bareData);
|
|
@@ -3113,7 +3399,7 @@ var ActorInstance = (_class2 = class {
|
|
|
3113
3399
|
} catch (error) {
|
|
3114
3400
|
this.#rLog.error({
|
|
3115
3401
|
msg: "failed to decode connection",
|
|
3116
|
-
error:
|
|
3402
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
3117
3403
|
});
|
|
3118
3404
|
}
|
|
3119
3405
|
}
|
|
@@ -3126,17 +3412,17 @@ var ActorInstance = (_class2 = class {
|
|
|
3126
3412
|
}
|
|
3127
3413
|
async #initializeInspectorToken() {
|
|
3128
3414
|
const [tokenBuffer] = await this.driver.kvBatchGet(this.#actorId, [
|
|
3129
|
-
|
|
3415
|
+
_chunkA4KEUCB6cjs.KEYS.INSPECTOR_TOKEN
|
|
3130
3416
|
]);
|
|
3131
3417
|
if (tokenBuffer !== null) {
|
|
3132
3418
|
const decoder = new TextDecoder();
|
|
3133
3419
|
this.#inspectorToken = decoder.decode(tokenBuffer);
|
|
3134
3420
|
this.#rLog.debug({ msg: "loaded existing inspector token" });
|
|
3135
3421
|
} else {
|
|
3136
|
-
this.#inspectorToken =
|
|
3422
|
+
this.#inspectorToken = _chunkA4KEUCB6cjs.generateSecureToken.call(void 0, );
|
|
3137
3423
|
const tokenBytes = new TextEncoder().encode(this.#inspectorToken);
|
|
3138
3424
|
await this.driver.kvBatchPut(this.#actorId, [
|
|
3139
|
-
[
|
|
3425
|
+
[_chunkA4KEUCB6cjs.KEYS.INSPECTOR_TOKEN, tokenBytes]
|
|
3140
3426
|
]);
|
|
3141
3427
|
this.#rLog.debug({ msg: "generated new inspector token" });
|
|
3142
3428
|
}
|
|
@@ -3154,7 +3440,7 @@ var ActorInstance = (_class2 = class {
|
|
|
3154
3440
|
this.driver.getContext(this.#actorId)
|
|
3155
3441
|
);
|
|
3156
3442
|
if (dataOrPromise instanceof Promise) {
|
|
3157
|
-
return
|
|
3443
|
+
return _chunkA4KEUCB6cjs.deadline.call(void 0,
|
|
3158
3444
|
dataOrPromise,
|
|
3159
3445
|
this.#config.options.createVarsTimeout
|
|
3160
3446
|
);
|
|
@@ -3193,21 +3479,24 @@ var ActorInstance = (_class2 = class {
|
|
|
3193
3479
|
async () => {
|
|
3194
3480
|
const result = onSleep(this.actorContext);
|
|
3195
3481
|
if (result instanceof Promise) {
|
|
3196
|
-
await
|
|
3482
|
+
await _chunkA4KEUCB6cjs.deadline.call(void 0,
|
|
3197
3483
|
result,
|
|
3198
|
-
this.overrides.onSleepTimeout !== void 0 ? Math.min(
|
|
3484
|
+
this.overrides.onSleepTimeout !== void 0 ? Math.min(
|
|
3485
|
+
this.#config.options.onSleepTimeout,
|
|
3486
|
+
this.overrides.onSleepTimeout
|
|
3487
|
+
) : this.#config.options.onSleepTimeout
|
|
3199
3488
|
);
|
|
3200
3489
|
}
|
|
3201
3490
|
}
|
|
3202
3491
|
);
|
|
3203
3492
|
this.#rLog.debug({ msg: "onSleep completed" });
|
|
3204
3493
|
} catch (error) {
|
|
3205
|
-
if (error instanceof
|
|
3494
|
+
if (error instanceof _chunkA4KEUCB6cjs.DeadlineError) {
|
|
3206
3495
|
this.#rLog.error({ msg: "onSleep timed out" });
|
|
3207
3496
|
} else {
|
|
3208
3497
|
this.#rLog.error({
|
|
3209
3498
|
msg: "error in onSleep",
|
|
3210
|
-
error:
|
|
3499
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
3211
3500
|
});
|
|
3212
3501
|
}
|
|
3213
3502
|
}
|
|
@@ -3224,28 +3513,31 @@ var ActorInstance = (_class2 = class {
|
|
|
3224
3513
|
async () => {
|
|
3225
3514
|
const result = onDestroy(this.actorContext);
|
|
3226
3515
|
if (result instanceof Promise) {
|
|
3227
|
-
await
|
|
3516
|
+
await _chunkA4KEUCB6cjs.deadline.call(void 0,
|
|
3228
3517
|
result,
|
|
3229
|
-
this.overrides.onDestroyTimeout !== void 0 ? Math.min(
|
|
3518
|
+
this.overrides.onDestroyTimeout !== void 0 ? Math.min(
|
|
3519
|
+
this.#config.options.onDestroyTimeout,
|
|
3520
|
+
this.overrides.onDestroyTimeout
|
|
3521
|
+
) : this.#config.options.onDestroyTimeout
|
|
3230
3522
|
);
|
|
3231
3523
|
}
|
|
3232
3524
|
}
|
|
3233
3525
|
);
|
|
3234
3526
|
this.#rLog.debug({ msg: "onDestroy completed" });
|
|
3235
3527
|
} catch (error) {
|
|
3236
|
-
if (error instanceof
|
|
3528
|
+
if (error instanceof _chunkA4KEUCB6cjs.DeadlineError) {
|
|
3237
3529
|
this.#rLog.error({ msg: "onDestroy timed out" });
|
|
3238
3530
|
} else {
|
|
3239
3531
|
this.#rLog.error({
|
|
3240
3532
|
msg: "error in onDestroy",
|
|
3241
|
-
error:
|
|
3533
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
3242
3534
|
});
|
|
3243
3535
|
}
|
|
3244
3536
|
}
|
|
3245
3537
|
}
|
|
3246
3538
|
}
|
|
3247
3539
|
#startRunHandler() {
|
|
3248
|
-
const runFn =
|
|
3540
|
+
const runFn = _chunkA4KEUCB6cjs.getRunFunction.call(void 0, this.#config.run);
|
|
3249
3541
|
if (!runFn) return;
|
|
3250
3542
|
this.#rLog.debug({ msg: "starting run handler" });
|
|
3251
3543
|
this.#runHandlerActive = true;
|
|
@@ -3266,19 +3558,12 @@ var ActorInstance = (_class2 = class {
|
|
|
3266
3558
|
});
|
|
3267
3559
|
return;
|
|
3268
3560
|
}
|
|
3269
|
-
|
|
3270
|
-
|
|
3271
|
-
|
|
3272
|
-
|
|
3273
|
-
|
|
3274
|
-
this.endTraceSpan(runSpan, {
|
|
3275
|
-
code: "ERROR",
|
|
3276
|
-
message: "run exited unexpectedly"
|
|
3277
|
-
});
|
|
3278
|
-
this.#rLog.warn({
|
|
3279
|
-
msg: "run handler exited unexpectedly, crashing actor to reschedule"
|
|
3561
|
+
if (runSpan.isActive()) {
|
|
3562
|
+
this.endTraceSpan(runSpan, { code: "OK" });
|
|
3563
|
+
}
|
|
3564
|
+
this.#rLog.info({
|
|
3565
|
+
msg: "run handler exited"
|
|
3280
3566
|
});
|
|
3281
|
-
this.startDestroy();
|
|
3282
3567
|
}).catch((error) => {
|
|
3283
3568
|
if (this.#stopCalled) {
|
|
3284
3569
|
if (runSpan.isActive()) {
|
|
@@ -3286,33 +3571,27 @@ var ActorInstance = (_class2 = class {
|
|
|
3286
3571
|
}
|
|
3287
3572
|
this.#rLog.debug({
|
|
3288
3573
|
msg: "run handler threw during actor stop",
|
|
3289
|
-
error:
|
|
3574
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
3290
3575
|
});
|
|
3291
3576
|
return;
|
|
3292
3577
|
}
|
|
3293
|
-
this.emitTraceEvent(
|
|
3294
|
-
"actor.crash",
|
|
3295
|
-
{
|
|
3296
|
-
"rivet.actor.reason": "run_error",
|
|
3297
|
-
"error.message": _chunkHYPIHCDTcjs.stringifyError.call(void 0, error)
|
|
3298
|
-
},
|
|
3299
|
-
runSpan
|
|
3300
|
-
);
|
|
3301
3578
|
this.endTraceSpan(runSpan, {
|
|
3302
3579
|
code: "ERROR",
|
|
3303
|
-
message:
|
|
3580
|
+
message: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
3304
3581
|
});
|
|
3305
3582
|
this.#rLog.error({
|
|
3306
|
-
msg: "run handler threw error
|
|
3307
|
-
error:
|
|
3583
|
+
msg: "run handler threw error",
|
|
3584
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
3308
3585
|
});
|
|
3309
|
-
this.startDestroy();
|
|
3310
3586
|
}).finally(() => {
|
|
3311
3587
|
this.#runHandlerActive = false;
|
|
3312
3588
|
this.resetSleepTimer();
|
|
3313
3589
|
});
|
|
3314
3590
|
} else if (runSpan.isActive()) {
|
|
3315
3591
|
this.endTraceSpan(runSpan, { code: "OK" });
|
|
3592
|
+
this.#rLog.info({
|
|
3593
|
+
msg: "run handler exited"
|
|
3594
|
+
});
|
|
3316
3595
|
this.#runHandlerActive = false;
|
|
3317
3596
|
this.resetSleepTimer();
|
|
3318
3597
|
}
|
|
@@ -3345,18 +3624,23 @@ var ActorInstance = (_class2 = class {
|
|
|
3345
3624
|
let client;
|
|
3346
3625
|
try {
|
|
3347
3626
|
if (!this.#sqliteVfs && this.driver.createSqliteVfs) {
|
|
3348
|
-
this.#sqliteVfs = await this.driver.createSqliteVfs();
|
|
3627
|
+
this.#sqliteVfs = await this.driver.createSqliteVfs(this.#actorId);
|
|
3349
3628
|
}
|
|
3350
3629
|
client = await this.#config.db.createClient({
|
|
3351
3630
|
actorId: this.#actorId,
|
|
3352
|
-
overrideRawDatabaseClient: this.driver.overrideRawDatabaseClient ? () => this.driver.overrideRawDatabaseClient(
|
|
3353
|
-
|
|
3631
|
+
overrideRawDatabaseClient: this.driver.overrideRawDatabaseClient ? () => this.driver.overrideRawDatabaseClient(
|
|
3632
|
+
this.#actorId
|
|
3633
|
+
) : void 0,
|
|
3634
|
+
overrideDrizzleDatabaseClient: this.driver.overrideDrizzleDatabaseClient ? () => this.driver.overrideDrizzleDatabaseClient(
|
|
3635
|
+
this.#actorId
|
|
3636
|
+
) : void 0,
|
|
3354
3637
|
kv: {
|
|
3355
3638
|
batchPut: (entries) => this.driver.kvBatchPut(this.#actorId, entries),
|
|
3356
3639
|
batchGet: (keys) => this.driver.kvBatchGet(this.#actorId, keys),
|
|
3357
3640
|
batchDelete: (keys) => this.driver.kvBatchDelete(this.#actorId, keys)
|
|
3358
3641
|
},
|
|
3359
|
-
sqliteVfs: this.#sqliteVfs
|
|
3642
|
+
sqliteVfs: this.#sqliteVfs,
|
|
3643
|
+
metrics: this.#metrics
|
|
3360
3644
|
});
|
|
3361
3645
|
this.#rLog.info({ msg: "database migration starting" });
|
|
3362
3646
|
await ((_b = (_a = this.#config.db).onMigrate) == null ? void 0 : _b.call(_a, client));
|
|
@@ -3369,7 +3653,7 @@ var ActorInstance = (_class2 = class {
|
|
|
3369
3653
|
} catch (cleanupError) {
|
|
3370
3654
|
this.#rLog.error({
|
|
3371
3655
|
msg: "database setup cleanup failed",
|
|
3372
|
-
error:
|
|
3656
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, cleanupError)
|
|
3373
3657
|
});
|
|
3374
3658
|
}
|
|
3375
3659
|
}
|
|
@@ -3379,7 +3663,7 @@ var ActorInstance = (_class2 = class {
|
|
|
3379
3663
|
} catch (cleanupError) {
|
|
3380
3664
|
this.#rLog.error({
|
|
3381
3665
|
msg: "sqlite vfs teardown after setup failure failed",
|
|
3382
|
-
error:
|
|
3666
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, cleanupError)
|
|
3383
3667
|
});
|
|
3384
3668
|
}
|
|
3385
3669
|
}
|
|
@@ -3387,11 +3671,13 @@ var ActorInstance = (_class2 = class {
|
|
|
3387
3671
|
if (error instanceof Error) {
|
|
3388
3672
|
this.#rLog.error({
|
|
3389
3673
|
msg: "database setup failed",
|
|
3390
|
-
error:
|
|
3674
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
3391
3675
|
});
|
|
3392
3676
|
throw error;
|
|
3393
3677
|
}
|
|
3394
|
-
const wrappedError = new Error(
|
|
3678
|
+
const wrappedError = new Error(
|
|
3679
|
+
`Database setup failed: ${String(error)}`
|
|
3680
|
+
);
|
|
3395
3681
|
this.#rLog.error({
|
|
3396
3682
|
msg: "database setup failed with non-Error object",
|
|
3397
3683
|
error: String(error),
|
|
@@ -3413,7 +3699,7 @@ var ActorInstance = (_class2 = class {
|
|
|
3413
3699
|
} catch (error) {
|
|
3414
3700
|
this.#rLog.error({
|
|
3415
3701
|
msg: "database cleanup failed",
|
|
3416
|
-
error:
|
|
3702
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
3417
3703
|
});
|
|
3418
3704
|
}
|
|
3419
3705
|
}
|
|
@@ -3423,7 +3709,7 @@ var ActorInstance = (_class2 = class {
|
|
|
3423
3709
|
} catch (error) {
|
|
3424
3710
|
this.#rLog.error({
|
|
3425
3711
|
msg: "sqlite vfs cleanup failed",
|
|
3426
|
-
error:
|
|
3712
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
3427
3713
|
});
|
|
3428
3714
|
}
|
|
3429
3715
|
}
|
|
@@ -3511,17 +3797,18 @@ var ActorInstance = (_class2 = class {
|
|
|
3511
3797
|
#canSleep() {
|
|
3512
3798
|
if (!this.#ready) return 1 /* NotReady */;
|
|
3513
3799
|
if (!this.#started) return 1 /* NotReady */;
|
|
3800
|
+
if (this.#preventSleep) return 3 /* PreventSleep */;
|
|
3514
3801
|
if (this.#activeHonoHttpRequests > 0)
|
|
3515
|
-
return
|
|
3516
|
-
if (this.#activeKeepAwakeCount > 0) return
|
|
3802
|
+
return 6 /* ActiveHonoHttpRequests */;
|
|
3803
|
+
if (this.#activeKeepAwakeCount > 0) return 7 /* ActiveKeepAwake */;
|
|
3517
3804
|
if (this.#runHandlerActive && this.#activeQueueWaitCount === 0) {
|
|
3518
|
-
return
|
|
3805
|
+
return 8 /* ActiveRun */;
|
|
3519
3806
|
}
|
|
3520
3807
|
for (const _conn of this.connectionManager.connections.values()) {
|
|
3521
|
-
return
|
|
3808
|
+
return 4 /* ActiveConns */;
|
|
3522
3809
|
}
|
|
3523
3810
|
if (this.connectionManager.pendingDisconnectCount > 0) {
|
|
3524
|
-
return
|
|
3811
|
+
return 5 /* ActiveDisconnectCallbacks */;
|
|
3525
3812
|
}
|
|
3526
3813
|
return 0 /* Yes */;
|
|
3527
3814
|
}
|
|
@@ -3533,16 +3820,16 @@ var ActorInstance = (_class2 = class {
|
|
|
3533
3820
|
}
|
|
3534
3821
|
#validateVarsEnabled() {
|
|
3535
3822
|
if (!this.#varsEnabled) {
|
|
3536
|
-
throw new (0,
|
|
3823
|
+
throw new (0, _chunk6G7ZNM27cjs.VarsNotEnabled)();
|
|
3537
3824
|
}
|
|
3538
3825
|
}
|
|
3539
|
-
},
|
|
3826
|
+
}, _class3);
|
|
3540
3827
|
|
|
3541
3828
|
// src/actor/definition.ts
|
|
3542
3829
|
var ActorDefinition = class {
|
|
3543
3830
|
#config;
|
|
3544
|
-
constructor(
|
|
3545
|
-
this.#config =
|
|
3831
|
+
constructor(config) {
|
|
3832
|
+
this.#config = config;
|
|
3546
3833
|
}
|
|
3547
3834
|
get config() {
|
|
3548
3835
|
return this.#config;
|
|
@@ -3551,19 +3838,19 @@ var ActorDefinition = class {
|
|
|
3551
3838
|
return new ActorInstance(this.#config);
|
|
3552
3839
|
}
|
|
3553
3840
|
};
|
|
3554
|
-
function lookupInRegistry(
|
|
3555
|
-
const definition =
|
|
3841
|
+
function lookupInRegistry(config, name) {
|
|
3842
|
+
const definition = config.use[name];
|
|
3556
3843
|
if (!definition) throw new Error(`no actor in registry for name ${name}`);
|
|
3557
3844
|
return definition;
|
|
3558
3845
|
}
|
|
3559
3846
|
|
|
3560
3847
|
// src/actor/router.ts
|
|
3561
3848
|
var _hono = require('hono');
|
|
3562
|
-
function createActorRouter(
|
|
3849
|
+
function createActorRouter(config, actorDriver, getUpgradeWebSocket, isTest) {
|
|
3563
3850
|
const router = new (0, _hono.Hono)({
|
|
3564
3851
|
strict: false
|
|
3565
3852
|
});
|
|
3566
|
-
router.use("*",
|
|
3853
|
+
router.use("*", _chunkHNE2AK6Ccjs.loggerMiddleware.call(void 0, _chunkA4KEUCB6cjs.loggerWithoutContext.call(void 0, )));
|
|
3567
3854
|
router.use("*", async (c, next) => {
|
|
3568
3855
|
const actor = await actorDriver.loadActor(c.env.actorId);
|
|
3569
3856
|
actor.beginHonoHttpRequest();
|
|
@@ -3584,7 +3871,8 @@ function createActorRouter(config4, actorDriver, getUpgradeWebSocket, isTest) {
|
|
|
3584
3871
|
router.get("/metadata", async (c) => {
|
|
3585
3872
|
return c.json({
|
|
3586
3873
|
runtime: "rivetkit",
|
|
3587
|
-
version:
|
|
3874
|
+
version: _chunkMPLMTJY5cjs.VERSION,
|
|
3875
|
+
type: _chunkMPLMTJY5cjs.isDev.call(void 0, ) ? "local" : "deployed"
|
|
3588
3876
|
});
|
|
3589
3877
|
});
|
|
3590
3878
|
if (isTest) {
|
|
@@ -3599,8 +3887,8 @@ function createActorRouter(config4, actorDriver, getUpgradeWebSocket, isTest) {
|
|
|
3599
3887
|
if (!conn) {
|
|
3600
3888
|
return c.text(`Connection not found: ${connId}`, 404);
|
|
3601
3889
|
}
|
|
3602
|
-
if ((_a = conn[
|
|
3603
|
-
conn[
|
|
3890
|
+
if ((_a = conn[_chunkHNE2AK6Ccjs.CONN_DRIVER_SYMBOL]) == null ? void 0 : _a.terminate) {
|
|
3891
|
+
conn[_chunkHNE2AK6Ccjs.CONN_DRIVER_SYMBOL].terminate(actor, conn);
|
|
3604
3892
|
}
|
|
3605
3893
|
return c.json({ success: true });
|
|
3606
3894
|
});
|
|
@@ -3608,7 +3896,7 @@ function createActorRouter(config4, actorDriver, getUpgradeWebSocket, isTest) {
|
|
|
3608
3896
|
if (getUpgradeWebSocket) {
|
|
3609
3897
|
router.on(
|
|
3610
3898
|
"GET",
|
|
3611
|
-
[
|
|
3899
|
+
[_chunkHNE2AK6Ccjs.PATH_CONNECT, `${_chunkHNE2AK6Ccjs.PATH_WEBSOCKET_PREFIX}*`, _chunkHNE2AK6Ccjs.PATH_INSPECTOR_CONNECT],
|
|
3612
3900
|
async (c) => {
|
|
3613
3901
|
const upgradeWebSocket = getUpgradeWebSocket();
|
|
3614
3902
|
if (upgradeWebSocket) {
|
|
@@ -3616,12 +3904,12 @@ function createActorRouter(config4, actorDriver, getUpgradeWebSocket, isTest) {
|
|
|
3616
3904
|
const protocols = c2.req.header(
|
|
3617
3905
|
"sec-websocket-protocol"
|
|
3618
3906
|
);
|
|
3619
|
-
const { encoding, connParams } =
|
|
3620
|
-
return await
|
|
3907
|
+
const { encoding, connParams } = _chunkHNE2AK6Ccjs.parseWebSocketProtocols.call(void 0, protocols);
|
|
3908
|
+
return await _chunkHNE2AK6Ccjs.routeWebSocket.call(void 0,
|
|
3621
3909
|
c2.req.raw,
|
|
3622
3910
|
c2.req.path,
|
|
3623
3911
|
c2.req.header(),
|
|
3624
|
-
|
|
3912
|
+
config,
|
|
3625
3913
|
actorDriver,
|
|
3626
3914
|
c2.env.actorId,
|
|
3627
3915
|
encoding,
|
|
@@ -3631,7 +3919,7 @@ function createActorRouter(config4, actorDriver, getUpgradeWebSocket, isTest) {
|
|
|
3631
3919
|
false,
|
|
3632
3920
|
false
|
|
3633
3921
|
);
|
|
3634
|
-
})(c,
|
|
3922
|
+
})(c, _chunkMPLMTJY5cjs.noopNext.call(void 0, ));
|
|
3635
3923
|
} else {
|
|
3636
3924
|
return c.text(
|
|
3637
3925
|
"WebSockets are not enabled for this driver.",
|
|
@@ -3641,11 +3929,11 @@ function createActorRouter(config4, actorDriver, getUpgradeWebSocket, isTest) {
|
|
|
3641
3929
|
}
|
|
3642
3930
|
);
|
|
3643
3931
|
}
|
|
3644
|
-
if (
|
|
3932
|
+
if (config.inspector.enabled) {
|
|
3645
3933
|
const inspectorAuth = async (c) => {
|
|
3646
3934
|
var _a;
|
|
3647
|
-
if (
|
|
3648
|
-
|
|
3935
|
+
if (_chunkMPLMTJY5cjs.isDev.call(void 0, ) && !config.inspector.token()) {
|
|
3936
|
+
_chunkHNE2AK6Ccjs.inspectorLogger.call(void 0, ).warn({
|
|
3649
3937
|
msg: "RIVET_INSPECTOR_TOKEN is not set, skipping inspector auth in development mode"
|
|
3650
3938
|
});
|
|
3651
3939
|
return void 0;
|
|
@@ -3654,11 +3942,11 @@ function createActorRouter(config4, actorDriver, getUpgradeWebSocket, isTest) {
|
|
|
3654
3942
|
if (!userToken) {
|
|
3655
3943
|
return c.text("Unauthorized", 401);
|
|
3656
3944
|
}
|
|
3657
|
-
const inspectorToken =
|
|
3945
|
+
const inspectorToken = config.inspector.token();
|
|
3658
3946
|
if (!inspectorToken) {
|
|
3659
3947
|
return c.text("Unauthorized", 401);
|
|
3660
3948
|
}
|
|
3661
|
-
if (!
|
|
3949
|
+
if (!_chunkHNE2AK6Ccjs.timingSafeEqual.call(void 0, userToken, inspectorToken)) {
|
|
3662
3950
|
return c.text("Unauthorized", 401);
|
|
3663
3951
|
}
|
|
3664
3952
|
return void 0;
|
|
@@ -3738,6 +4026,33 @@ function createActorRouter(config4, actorDriver, getUpgradeWebSocket, isTest) {
|
|
|
3738
4026
|
const result = actor.inspector.getWorkflowHistoryJson();
|
|
3739
4027
|
return c.json(result);
|
|
3740
4028
|
});
|
|
4029
|
+
router.get("/inspector/database/schema", async (c) => {
|
|
4030
|
+
const authResponse = await inspectorAuth(c);
|
|
4031
|
+
if (authResponse) return authResponse;
|
|
4032
|
+
const actor = await actorDriver.loadActor(c.env.actorId);
|
|
4033
|
+
const schema = await actor.inspector.getDatabaseSchemaJson();
|
|
4034
|
+
return c.json({ schema });
|
|
4035
|
+
});
|
|
4036
|
+
router.get("/inspector/database/rows", async (c) => {
|
|
4037
|
+
const authResponse = await inspectorAuth(c);
|
|
4038
|
+
if (authResponse) return authResponse;
|
|
4039
|
+
const actor = await actorDriver.loadActor(c.env.actorId);
|
|
4040
|
+
const table = c.req.query("table");
|
|
4041
|
+
if (!table) {
|
|
4042
|
+
return c.json(
|
|
4043
|
+
{ error: "Missing required table query parameter" },
|
|
4044
|
+
400
|
|
4045
|
+
);
|
|
4046
|
+
}
|
|
4047
|
+
const limit = parseInt(_nullishCoalesce(c.req.query("limit"), () => ( "100")), 10);
|
|
4048
|
+
const offset = parseInt(_nullishCoalesce(c.req.query("offset"), () => ( "0")), 10);
|
|
4049
|
+
const rows = await actor.inspector.getDatabaseTableRowsJson(
|
|
4050
|
+
table,
|
|
4051
|
+
limit,
|
|
4052
|
+
offset
|
|
4053
|
+
);
|
|
4054
|
+
return c.json({ rows });
|
|
4055
|
+
});
|
|
3741
4056
|
router.get("/inspector/summary", async (c) => {
|
|
3742
4057
|
const authResponse = await inspectorAuth(c);
|
|
3743
4058
|
if (authResponse) return authResponse;
|
|
@@ -3745,13 +4060,11 @@ function createActorRouter(config4, actorDriver, getUpgradeWebSocket, isTest) {
|
|
|
3745
4060
|
const isStateEnabled = actor.inspector.isStateEnabled();
|
|
3746
4061
|
const isDatabaseEnabled = actor.inspector.isDatabaseEnabled();
|
|
3747
4062
|
const isWorkflowEnabled = actor.inspector.isWorkflowEnabled();
|
|
4063
|
+
const workflowHistory = actor.inspector.getWorkflowHistoryJson().history;
|
|
3748
4064
|
const state = isStateEnabled ? actor.inspector.getStateJson() : void 0;
|
|
3749
4065
|
const connections = actor.inspector.getConnectionsJson();
|
|
3750
4066
|
const rpcs = actor.inspector.getRpcs();
|
|
3751
4067
|
const queueSize = actor.inspector.getQueueSize();
|
|
3752
|
-
const workflowHistory = actor.inspector.getWorkflowHistory();
|
|
3753
|
-
const bigIntReplacer = (_key, value) => typeof value === "bigint" ? Number(value) : value;
|
|
3754
|
-
const safeWorkflowHistory = workflowHistory ? JSON.parse(JSON.stringify(workflowHistory, bigIntReplacer)) : null;
|
|
3755
4068
|
return c.json({
|
|
3756
4069
|
state,
|
|
3757
4070
|
connections,
|
|
@@ -3760,21 +4073,27 @@ function createActorRouter(config4, actorDriver, getUpgradeWebSocket, isTest) {
|
|
|
3760
4073
|
isStateEnabled,
|
|
3761
4074
|
isDatabaseEnabled,
|
|
3762
4075
|
isWorkflowEnabled,
|
|
3763
|
-
workflowHistory
|
|
4076
|
+
workflowHistory
|
|
3764
4077
|
});
|
|
3765
4078
|
});
|
|
4079
|
+
router.get("/inspector/metrics", async (c) => {
|
|
4080
|
+
const authResponse = await inspectorAuth(c);
|
|
4081
|
+
if (authResponse) return authResponse;
|
|
4082
|
+
const actor = await actorDriver.loadActor(c.env.actorId);
|
|
4083
|
+
return c.json(actor.metrics.snapshot());
|
|
4084
|
+
});
|
|
3766
4085
|
}
|
|
3767
4086
|
router.post("/action/:action", async (c) => {
|
|
3768
4087
|
const actionName = c.req.param("action");
|
|
3769
|
-
return
|
|
4088
|
+
return _chunkHNE2AK6Ccjs.handleAction.call(void 0, c, config, actorDriver, actionName, c.env.actorId);
|
|
3770
4089
|
});
|
|
3771
4090
|
router.post("/queue", async (c) => {
|
|
3772
|
-
return
|
|
4091
|
+
return _chunkHNE2AK6Ccjs.handleQueueSend.call(void 0, c, config, actorDriver, c.env.actorId);
|
|
3773
4092
|
});
|
|
3774
4093
|
router.post("/queue/:name", async (c) => {
|
|
3775
|
-
return
|
|
4094
|
+
return _chunkHNE2AK6Ccjs.handleQueueSend.call(void 0,
|
|
3776
4095
|
c,
|
|
3777
|
-
|
|
4096
|
+
config,
|
|
3778
4097
|
actorDriver,
|
|
3779
4098
|
c.env.actorId,
|
|
3780
4099
|
c.req.param("name")
|
|
@@ -3790,2195 +4109,26 @@ function createActorRouter(config4, actorDriver, getUpgradeWebSocket, isTest) {
|
|
|
3790
4109
|
body: c.req.raw.body,
|
|
3791
4110
|
duplex: "half"
|
|
3792
4111
|
});
|
|
3793
|
-
|
|
4112
|
+
_chunkA4KEUCB6cjs.loggerWithoutContext.call(void 0, ).debug({
|
|
3794
4113
|
msg: "rewriting http url",
|
|
3795
4114
|
from: c.req.url,
|
|
3796
4115
|
to: correctedRequest.url
|
|
3797
4116
|
});
|
|
3798
|
-
return await
|
|
4117
|
+
return await _chunkHNE2AK6Ccjs.handleRawRequest.call(void 0,
|
|
3799
4118
|
c,
|
|
3800
4119
|
correctedRequest,
|
|
3801
4120
|
actorDriver,
|
|
3802
4121
|
c.env.actorId
|
|
3803
4122
|
);
|
|
3804
4123
|
});
|
|
3805
|
-
router.notFound(
|
|
3806
|
-
router.onError(
|
|
4124
|
+
router.notFound(_chunkHNE2AK6Ccjs.handleRouteNotFound);
|
|
4125
|
+
router.onError(_chunkHNE2AK6Ccjs.handleRouteError);
|
|
3807
4126
|
return router;
|
|
3808
4127
|
}
|
|
3809
4128
|
|
|
3810
|
-
// src/common/inline-websocket-adapter.ts
|
|
3811
|
-
var _ws = require('hono/ws');
|
|
3812
|
-
var _virtualwebsocket = require('@rivetkit/virtual-websocket');
|
|
3813
|
-
function logger() {
|
|
3814
|
-
return _chunkHYPIHCDTcjs.getLogger.call(void 0, "inline-websocket-adapter");
|
|
3815
|
-
}
|
|
3816
|
-
var InlineWebSocketAdapter = class {
|
|
3817
|
-
#handler;
|
|
3818
|
-
#wsContext;
|
|
3819
|
-
#readyState = 0;
|
|
3820
|
-
#clientWs;
|
|
3821
|
-
#actorWs;
|
|
3822
|
-
constructor(handler) {
|
|
3823
|
-
this.#handler = handler;
|
|
3824
|
-
this.#clientWs = new (0, _virtualwebsocket.VirtualWebSocket)({
|
|
3825
|
-
getReadyState: () => this.#readyState,
|
|
3826
|
-
onSend: (data) => {
|
|
3827
|
-
try {
|
|
3828
|
-
this.#handler.onMessage({ data }, this.#wsContext);
|
|
3829
|
-
this.#actorWs.triggerMessage(data);
|
|
3830
|
-
} catch (err) {
|
|
3831
|
-
this.#handleError(err);
|
|
3832
|
-
this.#close(1011, "Internal error processing message");
|
|
3833
|
-
}
|
|
3834
|
-
},
|
|
3835
|
-
onClose: (code, reason) => this.#close(code, reason)
|
|
3836
|
-
});
|
|
3837
|
-
this.#actorWs = new (0, _virtualwebsocket.VirtualWebSocket)({
|
|
3838
|
-
getReadyState: () => this.#readyState,
|
|
3839
|
-
onSend: (data) => this.#clientWs.triggerMessage(data),
|
|
3840
|
-
onClose: (code, reason) => this.#close(code, reason)
|
|
3841
|
-
});
|
|
3842
|
-
this.#wsContext = new (0, _ws.WSContext)({
|
|
3843
|
-
raw: this.#actorWs,
|
|
3844
|
-
send: (data) => {
|
|
3845
|
-
logger().debug({ msg: "WSContext.send called" });
|
|
3846
|
-
this.#clientWs.triggerMessage(data);
|
|
3847
|
-
},
|
|
3848
|
-
close: (code, reason) => {
|
|
3849
|
-
logger().debug({ msg: "WSContext.close called", code, reason });
|
|
3850
|
-
this.#close(code || 1e3, reason || "");
|
|
3851
|
-
},
|
|
3852
|
-
readyState: 1
|
|
3853
|
-
});
|
|
3854
|
-
setTimeout(() => {
|
|
3855
|
-
this.#initialize();
|
|
3856
|
-
}, 0);
|
|
3857
|
-
}
|
|
3858
|
-
/** Get the client-side WebSocket (for proxy/client code) */
|
|
3859
|
-
get clientWebSocket() {
|
|
3860
|
-
return this.#clientWs;
|
|
3861
|
-
}
|
|
3862
|
-
/** Get the actor-side WebSocket (passed to actor via wsContext.raw) */
|
|
3863
|
-
get actorWebSocket() {
|
|
3864
|
-
return this.#actorWs;
|
|
3865
|
-
}
|
|
3866
|
-
async #initialize() {
|
|
3867
|
-
try {
|
|
3868
|
-
logger().debug({ msg: "websocket initializing" });
|
|
3869
|
-
this.#readyState = 1;
|
|
3870
|
-
logger().debug({ msg: "calling handler.onOpen with WSContext" });
|
|
3871
|
-
this.#handler.onOpen(void 0, this.#wsContext);
|
|
3872
|
-
this.#clientWs.triggerOpen();
|
|
3873
|
-
this.#actorWs.triggerOpen();
|
|
3874
|
-
} catch (err) {
|
|
3875
|
-
this.#handleError(err);
|
|
3876
|
-
this.#close(1011, "Internal error during initialization");
|
|
3877
|
-
}
|
|
3878
|
-
}
|
|
3879
|
-
#handleError(err) {
|
|
3880
|
-
logger().error({
|
|
3881
|
-
msg: "error in websocket",
|
|
3882
|
-
error: err,
|
|
3883
|
-
errorMessage: err instanceof Error ? err.message : String(err),
|
|
3884
|
-
stack: err instanceof Error ? err.stack : void 0
|
|
3885
|
-
});
|
|
3886
|
-
try {
|
|
3887
|
-
this.#handler.onError(err, this.#wsContext);
|
|
3888
|
-
} catch (handlerErr) {
|
|
3889
|
-
logger().error({ msg: "error in onError handler", error: handlerErr });
|
|
3890
|
-
}
|
|
3891
|
-
this.#clientWs.triggerError(err);
|
|
3892
|
-
this.#actorWs.triggerError(err);
|
|
3893
|
-
}
|
|
3894
|
-
#close(code, reason) {
|
|
3895
|
-
if (this.#readyState === 3 || this.#readyState === 2) {
|
|
3896
|
-
return;
|
|
3897
|
-
}
|
|
3898
|
-
logger().debug({ msg: "closing websocket", code, reason });
|
|
3899
|
-
this.#readyState = 2;
|
|
3900
|
-
try {
|
|
3901
|
-
this.#handler.onClose({ code, reason, wasClean: true }, this.#wsContext);
|
|
3902
|
-
} catch (err) {
|
|
3903
|
-
logger().error({ msg: "error closing websocket", error: err });
|
|
3904
|
-
} finally {
|
|
3905
|
-
this.#readyState = 3;
|
|
3906
|
-
this.#clientWs.triggerClose(code, reason);
|
|
3907
|
-
this.#actorWs.triggerClose(code, reason);
|
|
3908
|
-
}
|
|
3909
|
-
}
|
|
3910
|
-
};
|
|
3911
|
-
function createInlineWebSocket(handler) {
|
|
3912
|
-
const adapter = new InlineWebSocketAdapter(handler);
|
|
3913
|
-
return adapter.clientWebSocket;
|
|
3914
|
-
}
|
|
3915
|
-
|
|
3916
|
-
// src/drivers/file-system/mod.ts
|
|
3917
|
-
var _zod = require('zod');
|
|
3918
|
-
|
|
3919
|
-
// src/drivers/file-system/actor.ts
|
|
3920
|
-
var FileSystemActorDriver = class {
|
|
3921
|
-
#config;
|
|
3922
|
-
#managerDriver;
|
|
3923
|
-
#inlineClient;
|
|
3924
|
-
#state;
|
|
3925
|
-
constructor(config4, managerDriver, inlineClient, state) {
|
|
3926
|
-
this.#config = config4;
|
|
3927
|
-
this.#managerDriver = managerDriver;
|
|
3928
|
-
this.#inlineClient = inlineClient;
|
|
3929
|
-
this.#state = state;
|
|
3930
|
-
}
|
|
3931
|
-
async loadActor(actorId) {
|
|
3932
|
-
return this.#state.startActor(
|
|
3933
|
-
this.#config,
|
|
3934
|
-
this.#inlineClient,
|
|
3935
|
-
this,
|
|
3936
|
-
actorId
|
|
3937
|
-
);
|
|
3938
|
-
}
|
|
3939
|
-
/**
|
|
3940
|
-
* Get the current storage directory path
|
|
3941
|
-
*/
|
|
3942
|
-
get storagePath() {
|
|
3943
|
-
return this.#state.storagePath;
|
|
3944
|
-
}
|
|
3945
|
-
getContext(_actorId) {
|
|
3946
|
-
return {};
|
|
3947
|
-
}
|
|
3948
|
-
async kvBatchPut(actorId, entries) {
|
|
3949
|
-
await this.#state.kvBatchPut(actorId, entries);
|
|
3950
|
-
}
|
|
3951
|
-
async kvBatchGet(actorId, keys) {
|
|
3952
|
-
return await this.#state.kvBatchGet(actorId, keys);
|
|
3953
|
-
}
|
|
3954
|
-
async kvBatchDelete(actorId, keys) {
|
|
3955
|
-
await this.#state.kvBatchDelete(actorId, keys);
|
|
3956
|
-
}
|
|
3957
|
-
async kvListPrefix(actorId, prefix) {
|
|
3958
|
-
return await this.#state.kvListPrefix(actorId, prefix);
|
|
3959
|
-
}
|
|
3960
|
-
async setAlarm(actor, timestamp) {
|
|
3961
|
-
await this.#state.setActorAlarm(actor.id, timestamp);
|
|
3962
|
-
}
|
|
3963
|
-
/** Creates a SQLite VFS instance for creating KV-backed databases */
|
|
3964
|
-
async createSqliteVfs() {
|
|
3965
|
-
return await _chunkTI5PXQGGcjs.importSqliteVfs.call(void 0, );
|
|
3966
|
-
}
|
|
3967
|
-
startSleep(actorId) {
|
|
3968
|
-
this.#state.sleepActor(actorId);
|
|
3969
|
-
}
|
|
3970
|
-
async startDestroy(actorId) {
|
|
3971
|
-
await this.#state.destroyActor(actorId);
|
|
3972
|
-
}
|
|
3973
|
-
async onBeforeActorStart(actor) {
|
|
3974
|
-
await actor.cleanupPersistedConnections("file-system-driver.start");
|
|
3975
|
-
}
|
|
3976
|
-
};
|
|
3977
|
-
|
|
3978
|
-
// src/drivers/file-system/global-state.ts
|
|
3979
|
-
|
|
3980
|
-
|
|
3981
|
-
// src/schemas/file-system-driver/versioned.ts
|
|
3982
|
-
var _vbare = require('vbare');
|
|
3983
|
-
|
|
3984
|
-
// dist/schemas/file-system-driver/v1.ts
|
|
3985
|
-
var _barets = require('@rivetkit/bare-ts'); var bare = _interopRequireWildcard(_barets); var bare2 = _interopRequireWildcard(_barets); var bare3 = _interopRequireWildcard(_barets);
|
|
3986
|
-
var config = /* @__PURE__ */ bare.Config({});
|
|
3987
|
-
function read0(bc) {
|
|
3988
|
-
const len = bare.readUintSafe(bc);
|
|
3989
|
-
if (len === 0) {
|
|
3990
|
-
return [];
|
|
3991
|
-
}
|
|
3992
|
-
const result = [bare.readString(bc)];
|
|
3993
|
-
for (let i = 1; i < len; i++) {
|
|
3994
|
-
result[i] = bare.readString(bc);
|
|
3995
|
-
}
|
|
3996
|
-
return result;
|
|
3997
|
-
}
|
|
3998
|
-
function write0(bc, x) {
|
|
3999
|
-
bare.writeUintSafe(bc, x.length);
|
|
4000
|
-
for (let i = 0; i < x.length; i++) {
|
|
4001
|
-
bare.writeString(bc, x[i]);
|
|
4002
|
-
}
|
|
4003
|
-
}
|
|
4004
|
-
function readActorState(bc) {
|
|
4005
|
-
return {
|
|
4006
|
-
actorId: bare.readString(bc),
|
|
4007
|
-
name: bare.readString(bc),
|
|
4008
|
-
key: read0(bc),
|
|
4009
|
-
persistedData: bare.readData(bc),
|
|
4010
|
-
createdAt: bare.readU64(bc)
|
|
4011
|
-
};
|
|
4012
|
-
}
|
|
4013
|
-
function writeActorState(bc, x) {
|
|
4014
|
-
bare.writeString(bc, x.actorId);
|
|
4015
|
-
bare.writeString(bc, x.name);
|
|
4016
|
-
write0(bc, x.key);
|
|
4017
|
-
bare.writeData(bc, x.persistedData);
|
|
4018
|
-
bare.writeU64(bc, x.createdAt);
|
|
4019
|
-
}
|
|
4020
|
-
function encodeActorState(x) {
|
|
4021
|
-
const bc = new bare.ByteCursor(
|
|
4022
|
-
new Uint8Array(config.initialBufferLength),
|
|
4023
|
-
config
|
|
4024
|
-
);
|
|
4025
|
-
writeActorState(bc, x);
|
|
4026
|
-
return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
|
|
4027
|
-
}
|
|
4028
|
-
function decodeActorState(bytes) {
|
|
4029
|
-
const bc = new bare.ByteCursor(bytes, config);
|
|
4030
|
-
const result = readActorState(bc);
|
|
4031
|
-
if (bc.offset < bc.view.byteLength) {
|
|
4032
|
-
throw new bare.BareError(bc.offset, "remaining bytes");
|
|
4033
|
-
}
|
|
4034
|
-
return result;
|
|
4035
|
-
}
|
|
4036
|
-
function readActorAlarm(bc) {
|
|
4037
|
-
return {
|
|
4038
|
-
actorId: bare.readString(bc),
|
|
4039
|
-
timestamp: bare.readUint(bc)
|
|
4040
|
-
};
|
|
4041
|
-
}
|
|
4042
|
-
function writeActorAlarm(bc, x) {
|
|
4043
|
-
bare.writeString(bc, x.actorId);
|
|
4044
|
-
bare.writeUint(bc, x.timestamp);
|
|
4045
|
-
}
|
|
4046
|
-
function encodeActorAlarm(x) {
|
|
4047
|
-
const bc = new bare.ByteCursor(
|
|
4048
|
-
new Uint8Array(config.initialBufferLength),
|
|
4049
|
-
config
|
|
4050
|
-
);
|
|
4051
|
-
writeActorAlarm(bc, x);
|
|
4052
|
-
return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
|
|
4053
|
-
}
|
|
4054
|
-
function decodeActorAlarm(bytes) {
|
|
4055
|
-
const bc = new bare.ByteCursor(bytes, config);
|
|
4056
|
-
const result = readActorAlarm(bc);
|
|
4057
|
-
if (bc.offset < bc.view.byteLength) {
|
|
4058
|
-
throw new bare.BareError(bc.offset, "remaining bytes");
|
|
4059
|
-
}
|
|
4060
|
-
return result;
|
|
4061
|
-
}
|
|
4062
|
-
|
|
4063
|
-
// dist/schemas/file-system-driver/v2.ts
|
|
4064
|
-
|
|
4065
|
-
var config2 = /* @__PURE__ */ bare2.Config({});
|
|
4066
|
-
function readActorKvEntry(bc) {
|
|
4067
|
-
return {
|
|
4068
|
-
key: bare2.readData(bc),
|
|
4069
|
-
value: bare2.readData(bc)
|
|
4070
|
-
};
|
|
4071
|
-
}
|
|
4072
|
-
function writeActorKvEntry(bc, x) {
|
|
4073
|
-
bare2.writeData(bc, x.key);
|
|
4074
|
-
bare2.writeData(bc, x.value);
|
|
4075
|
-
}
|
|
4076
|
-
function read02(bc) {
|
|
4077
|
-
const len = bare2.readUintSafe(bc);
|
|
4078
|
-
if (len === 0) {
|
|
4079
|
-
return [];
|
|
4080
|
-
}
|
|
4081
|
-
const result = [bare2.readString(bc)];
|
|
4082
|
-
for (let i = 1; i < len; i++) {
|
|
4083
|
-
result[i] = bare2.readString(bc);
|
|
4084
|
-
}
|
|
4085
|
-
return result;
|
|
4086
|
-
}
|
|
4087
|
-
function write02(bc, x) {
|
|
4088
|
-
bare2.writeUintSafe(bc, x.length);
|
|
4089
|
-
for (let i = 0; i < x.length; i++) {
|
|
4090
|
-
bare2.writeString(bc, x[i]);
|
|
4091
|
-
}
|
|
4092
|
-
}
|
|
4093
|
-
function read1(bc) {
|
|
4094
|
-
const len = bare2.readUintSafe(bc);
|
|
4095
|
-
if (len === 0) {
|
|
4096
|
-
return [];
|
|
4097
|
-
}
|
|
4098
|
-
const result = [readActorKvEntry(bc)];
|
|
4099
|
-
for (let i = 1; i < len; i++) {
|
|
4100
|
-
result[i] = readActorKvEntry(bc);
|
|
4101
|
-
}
|
|
4102
|
-
return result;
|
|
4103
|
-
}
|
|
4104
|
-
function write1(bc, x) {
|
|
4105
|
-
bare2.writeUintSafe(bc, x.length);
|
|
4106
|
-
for (let i = 0; i < x.length; i++) {
|
|
4107
|
-
writeActorKvEntry(bc, x[i]);
|
|
4108
|
-
}
|
|
4109
|
-
}
|
|
4110
|
-
function readActorState2(bc) {
|
|
4111
|
-
return {
|
|
4112
|
-
actorId: bare2.readString(bc),
|
|
4113
|
-
name: bare2.readString(bc),
|
|
4114
|
-
key: read02(bc),
|
|
4115
|
-
kvStorage: read1(bc),
|
|
4116
|
-
createdAt: bare2.readU64(bc)
|
|
4117
|
-
};
|
|
4118
|
-
}
|
|
4119
|
-
function writeActorState2(bc, x) {
|
|
4120
|
-
bare2.writeString(bc, x.actorId);
|
|
4121
|
-
bare2.writeString(bc, x.name);
|
|
4122
|
-
write02(bc, x.key);
|
|
4123
|
-
write1(bc, x.kvStorage);
|
|
4124
|
-
bare2.writeU64(bc, x.createdAt);
|
|
4125
|
-
}
|
|
4126
|
-
function encodeActorState2(x) {
|
|
4127
|
-
const bc = new bare2.ByteCursor(
|
|
4128
|
-
new Uint8Array(config2.initialBufferLength),
|
|
4129
|
-
config2
|
|
4130
|
-
);
|
|
4131
|
-
writeActorState2(bc, x);
|
|
4132
|
-
return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
|
|
4133
|
-
}
|
|
4134
|
-
function decodeActorState2(bytes) {
|
|
4135
|
-
const bc = new bare2.ByteCursor(bytes, config2);
|
|
4136
|
-
const result = readActorState2(bc);
|
|
4137
|
-
if (bc.offset < bc.view.byteLength) {
|
|
4138
|
-
throw new bare2.BareError(bc.offset, "remaining bytes");
|
|
4139
|
-
}
|
|
4140
|
-
return result;
|
|
4141
|
-
}
|
|
4142
|
-
function readActorAlarm2(bc) {
|
|
4143
|
-
return {
|
|
4144
|
-
actorId: bare2.readString(bc),
|
|
4145
|
-
timestamp: bare2.readUint(bc)
|
|
4146
|
-
};
|
|
4147
|
-
}
|
|
4148
|
-
function writeActorAlarm2(bc, x) {
|
|
4149
|
-
bare2.writeString(bc, x.actorId);
|
|
4150
|
-
bare2.writeUint(bc, x.timestamp);
|
|
4151
|
-
}
|
|
4152
|
-
function encodeActorAlarm2(x) {
|
|
4153
|
-
const bc = new bare2.ByteCursor(
|
|
4154
|
-
new Uint8Array(config2.initialBufferLength),
|
|
4155
|
-
config2
|
|
4156
|
-
);
|
|
4157
|
-
writeActorAlarm2(bc, x);
|
|
4158
|
-
return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
|
|
4159
|
-
}
|
|
4160
|
-
function decodeActorAlarm2(bytes) {
|
|
4161
|
-
const bc = new bare2.ByteCursor(bytes, config2);
|
|
4162
|
-
const result = readActorAlarm2(bc);
|
|
4163
|
-
if (bc.offset < bc.view.byteLength) {
|
|
4164
|
-
throw new bare2.BareError(bc.offset, "remaining bytes");
|
|
4165
|
-
}
|
|
4166
|
-
return result;
|
|
4167
|
-
}
|
|
4168
|
-
|
|
4169
|
-
// dist/schemas/file-system-driver/v3.ts
|
|
4170
|
-
|
|
4171
|
-
var config3 = /* @__PURE__ */ bare3.Config({});
|
|
4172
|
-
function readActorKvEntry2(bc) {
|
|
4173
|
-
return {
|
|
4174
|
-
key: bare3.readData(bc),
|
|
4175
|
-
value: bare3.readData(bc)
|
|
4176
|
-
};
|
|
4177
|
-
}
|
|
4178
|
-
function writeActorKvEntry2(bc, x) {
|
|
4179
|
-
bare3.writeData(bc, x.key);
|
|
4180
|
-
bare3.writeData(bc, x.value);
|
|
4181
|
-
}
|
|
4182
|
-
function read03(bc) {
|
|
4183
|
-
const len = bare3.readUintSafe(bc);
|
|
4184
|
-
if (len === 0) {
|
|
4185
|
-
return [];
|
|
4186
|
-
}
|
|
4187
|
-
const result = [bare3.readString(bc)];
|
|
4188
|
-
for (let i = 1; i < len; i++) {
|
|
4189
|
-
result[i] = bare3.readString(bc);
|
|
4190
|
-
}
|
|
4191
|
-
return result;
|
|
4192
|
-
}
|
|
4193
|
-
function write03(bc, x) {
|
|
4194
|
-
bare3.writeUintSafe(bc, x.length);
|
|
4195
|
-
for (let i = 0; i < x.length; i++) {
|
|
4196
|
-
bare3.writeString(bc, x[i]);
|
|
4197
|
-
}
|
|
4198
|
-
}
|
|
4199
|
-
function read12(bc) {
|
|
4200
|
-
const len = bare3.readUintSafe(bc);
|
|
4201
|
-
if (len === 0) {
|
|
4202
|
-
return [];
|
|
4203
|
-
}
|
|
4204
|
-
const result = [readActorKvEntry2(bc)];
|
|
4205
|
-
for (let i = 1; i < len; i++) {
|
|
4206
|
-
result[i] = readActorKvEntry2(bc);
|
|
4207
|
-
}
|
|
4208
|
-
return result;
|
|
4209
|
-
}
|
|
4210
|
-
function write12(bc, x) {
|
|
4211
|
-
bare3.writeUintSafe(bc, x.length);
|
|
4212
|
-
for (let i = 0; i < x.length; i++) {
|
|
4213
|
-
writeActorKvEntry2(bc, x[i]);
|
|
4214
|
-
}
|
|
4215
|
-
}
|
|
4216
|
-
function read2(bc) {
|
|
4217
|
-
return bare3.readBool(bc) ? bare3.readU64(bc) : null;
|
|
4218
|
-
}
|
|
4219
|
-
function write2(bc, x) {
|
|
4220
|
-
bare3.writeBool(bc, x !== null);
|
|
4221
|
-
if (x !== null) {
|
|
4222
|
-
bare3.writeU64(bc, x);
|
|
4223
|
-
}
|
|
4224
|
-
}
|
|
4225
|
-
function readActorState3(bc) {
|
|
4226
|
-
return {
|
|
4227
|
-
actorId: bare3.readString(bc),
|
|
4228
|
-
name: bare3.readString(bc),
|
|
4229
|
-
key: read03(bc),
|
|
4230
|
-
kvStorage: read12(bc),
|
|
4231
|
-
createdAt: bare3.readU64(bc),
|
|
4232
|
-
startTs: read2(bc),
|
|
4233
|
-
connectableTs: read2(bc),
|
|
4234
|
-
sleepTs: read2(bc),
|
|
4235
|
-
destroyTs: read2(bc)
|
|
4236
|
-
};
|
|
4237
|
-
}
|
|
4238
|
-
function writeActorState3(bc, x) {
|
|
4239
|
-
bare3.writeString(bc, x.actorId);
|
|
4240
|
-
bare3.writeString(bc, x.name);
|
|
4241
|
-
write03(bc, x.key);
|
|
4242
|
-
write12(bc, x.kvStorage);
|
|
4243
|
-
bare3.writeU64(bc, x.createdAt);
|
|
4244
|
-
write2(bc, x.startTs);
|
|
4245
|
-
write2(bc, x.connectableTs);
|
|
4246
|
-
write2(bc, x.sleepTs);
|
|
4247
|
-
write2(bc, x.destroyTs);
|
|
4248
|
-
}
|
|
4249
|
-
function encodeActorState3(x) {
|
|
4250
|
-
const bc = new bare3.ByteCursor(
|
|
4251
|
-
new Uint8Array(config3.initialBufferLength),
|
|
4252
|
-
config3
|
|
4253
|
-
);
|
|
4254
|
-
writeActorState3(bc, x);
|
|
4255
|
-
return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
|
|
4256
|
-
}
|
|
4257
|
-
function decodeActorState3(bytes) {
|
|
4258
|
-
const bc = new bare3.ByteCursor(bytes, config3);
|
|
4259
|
-
const result = readActorState3(bc);
|
|
4260
|
-
if (bc.offset < bc.view.byteLength) {
|
|
4261
|
-
throw new bare3.BareError(bc.offset, "remaining bytes");
|
|
4262
|
-
}
|
|
4263
|
-
return result;
|
|
4264
|
-
}
|
|
4265
|
-
function readActorAlarm3(bc) {
|
|
4266
|
-
return {
|
|
4267
|
-
actorId: bare3.readString(bc),
|
|
4268
|
-
timestamp: bare3.readUint(bc)
|
|
4269
|
-
};
|
|
4270
|
-
}
|
|
4271
|
-
function writeActorAlarm3(bc, x) {
|
|
4272
|
-
bare3.writeString(bc, x.actorId);
|
|
4273
|
-
bare3.writeUint(bc, x.timestamp);
|
|
4274
|
-
}
|
|
4275
|
-
function encodeActorAlarm3(x) {
|
|
4276
|
-
const bc = new bare3.ByteCursor(
|
|
4277
|
-
new Uint8Array(config3.initialBufferLength),
|
|
4278
|
-
config3
|
|
4279
|
-
);
|
|
4280
|
-
writeActorAlarm3(bc, x);
|
|
4281
|
-
return new Uint8Array(bc.view.buffer, bc.view.byteOffset, bc.offset);
|
|
4282
|
-
}
|
|
4283
|
-
function decodeActorAlarm3(bytes) {
|
|
4284
|
-
const bc = new bare3.ByteCursor(bytes, config3);
|
|
4285
|
-
const result = readActorAlarm3(bc);
|
|
4286
|
-
if (bc.offset < bc.view.byteLength) {
|
|
4287
|
-
throw new bare3.BareError(bc.offset, "remaining bytes");
|
|
4288
|
-
}
|
|
4289
|
-
return result;
|
|
4290
|
-
}
|
|
4291
|
-
|
|
4292
|
-
// src/schemas/file-system-driver/versioned.ts
|
|
4293
|
-
var CURRENT_VERSION3 = 3;
|
|
4294
|
-
var v1ToV2 = (v1State) => {
|
|
4295
|
-
const kvStorage = [];
|
|
4296
|
-
if (v1State.persistedData) {
|
|
4297
|
-
const key = new Uint8Array([1]);
|
|
4298
|
-
kvStorage.push({
|
|
4299
|
-
key: _chunkHYPIHCDTcjs.bufferToArrayBuffer.call(void 0, key),
|
|
4300
|
-
value: v1State.persistedData
|
|
4301
|
-
});
|
|
4302
|
-
}
|
|
4303
|
-
return {
|
|
4304
|
-
actorId: v1State.actorId,
|
|
4305
|
-
name: v1State.name,
|
|
4306
|
-
key: v1State.key,
|
|
4307
|
-
kvStorage,
|
|
4308
|
-
createdAt: v1State.createdAt
|
|
4309
|
-
};
|
|
4310
|
-
};
|
|
4311
|
-
var v2ToV3 = (v2State) => {
|
|
4312
|
-
return {
|
|
4313
|
-
actorId: v2State.actorId,
|
|
4314
|
-
name: v2State.name,
|
|
4315
|
-
key: v2State.key,
|
|
4316
|
-
kvStorage: v2State.kvStorage,
|
|
4317
|
-
createdAt: v2State.createdAt,
|
|
4318
|
-
startTs: null,
|
|
4319
|
-
connectableTs: null,
|
|
4320
|
-
sleepTs: null,
|
|
4321
|
-
destroyTs: null
|
|
4322
|
-
};
|
|
4323
|
-
};
|
|
4324
|
-
var v3ToV2 = (v3State) => {
|
|
4325
|
-
return {
|
|
4326
|
-
actorId: v3State.actorId,
|
|
4327
|
-
name: v3State.name,
|
|
4328
|
-
key: v3State.key,
|
|
4329
|
-
kvStorage: v3State.kvStorage,
|
|
4330
|
-
createdAt: v3State.createdAt
|
|
4331
|
-
};
|
|
4332
|
-
};
|
|
4333
|
-
var v2ToV1 = (v2State) => {
|
|
4334
|
-
const persistDataEntry = v2State.kvStorage.find((entry) => {
|
|
4335
|
-
const key = new Uint8Array(entry.key);
|
|
4336
|
-
return key.length === 1 && key[0] === 1;
|
|
4337
|
-
});
|
|
4338
|
-
return {
|
|
4339
|
-
actorId: v2State.actorId,
|
|
4340
|
-
name: v2State.name,
|
|
4341
|
-
key: v2State.key,
|
|
4342
|
-
persistedData: (persistDataEntry == null ? void 0 : persistDataEntry.value) || new ArrayBuffer(0),
|
|
4343
|
-
createdAt: v2State.createdAt
|
|
4344
|
-
};
|
|
4345
|
-
};
|
|
4346
|
-
var ACTOR_STATE_VERSIONED = _vbare.createVersionedDataHandler.call(void 0, {
|
|
4347
|
-
deserializeVersion: (bytes, version) => {
|
|
4348
|
-
switch (version) {
|
|
4349
|
-
case 1:
|
|
4350
|
-
return decodeActorState(bytes);
|
|
4351
|
-
case 2:
|
|
4352
|
-
return decodeActorState2(bytes);
|
|
4353
|
-
case 3:
|
|
4354
|
-
return decodeActorState3(bytes);
|
|
4355
|
-
default:
|
|
4356
|
-
throw new Error(`Unknown version ${version}`);
|
|
4357
|
-
}
|
|
4358
|
-
},
|
|
4359
|
-
serializeVersion: (data, version) => {
|
|
4360
|
-
switch (version) {
|
|
4361
|
-
case 1:
|
|
4362
|
-
return encodeActorState(data);
|
|
4363
|
-
case 2:
|
|
4364
|
-
return encodeActorState2(data);
|
|
4365
|
-
case 3:
|
|
4366
|
-
return encodeActorState3(data);
|
|
4367
|
-
default:
|
|
4368
|
-
throw new Error(`Unknown version ${version}`);
|
|
4369
|
-
}
|
|
4370
|
-
},
|
|
4371
|
-
deserializeConverters: () => [v1ToV2, v2ToV3],
|
|
4372
|
-
serializeConverters: () => [v3ToV2, v2ToV1]
|
|
4373
|
-
});
|
|
4374
|
-
var ACTOR_ALARM_VERSIONED = _vbare.createVersionedDataHandler.call(void 0, {
|
|
4375
|
-
deserializeVersion: (bytes, version) => {
|
|
4376
|
-
switch (version) {
|
|
4377
|
-
case 1:
|
|
4378
|
-
return decodeActorAlarm(bytes);
|
|
4379
|
-
case 2:
|
|
4380
|
-
return decodeActorAlarm2(bytes);
|
|
4381
|
-
case 3:
|
|
4382
|
-
return decodeActorAlarm3(bytes);
|
|
4383
|
-
default:
|
|
4384
|
-
throw new Error(`Unknown version ${version}`);
|
|
4385
|
-
}
|
|
4386
|
-
},
|
|
4387
|
-
serializeVersion: (data, version) => {
|
|
4388
|
-
switch (version) {
|
|
4389
|
-
case 1:
|
|
4390
|
-
return encodeActorAlarm(data);
|
|
4391
|
-
case 2:
|
|
4392
|
-
return encodeActorAlarm2(data);
|
|
4393
|
-
case 3:
|
|
4394
|
-
return encodeActorAlarm3(data);
|
|
4395
|
-
default:
|
|
4396
|
-
throw new Error(`Unknown version ${version}`);
|
|
4397
|
-
}
|
|
4398
|
-
},
|
|
4399
|
-
deserializeConverters: () => [],
|
|
4400
|
-
serializeConverters: () => []
|
|
4401
|
-
});
|
|
4402
|
-
|
|
4403
|
-
// src/drivers/file-system/log.ts
|
|
4404
|
-
function logger2() {
|
|
4405
|
-
return _chunkHYPIHCDTcjs.getLogger.call(void 0, "driver-fs");
|
|
4406
|
-
}
|
|
4407
|
-
|
|
4408
|
-
// src/drivers/file-system/utils.ts
|
|
4409
|
-
function generateActorId(name, key) {
|
|
4410
|
-
const jsonString = JSON.stringify([name, key]);
|
|
4411
|
-
const crypto2 = _chunkTI5PXQGGcjs.getNodeCrypto.call(void 0, );
|
|
4412
|
-
const hash = crypto2.createHash("sha256").update(jsonString).digest("hex").substring(0, 16);
|
|
4413
|
-
return hash;
|
|
4414
|
-
}
|
|
4415
|
-
function createHashForPath(dirPath) {
|
|
4416
|
-
const path = _chunkTI5PXQGGcjs.getNodePath.call(void 0, );
|
|
4417
|
-
const normalizedPath = path.normalize(dirPath);
|
|
4418
|
-
const lastComponent = path.basename(normalizedPath);
|
|
4419
|
-
const crypto2 = _chunkTI5PXQGGcjs.getNodeCrypto.call(void 0, );
|
|
4420
|
-
const hash = crypto2.createHash("sha256").update(normalizedPath).digest("hex").substring(0, 8);
|
|
4421
|
-
return `${lastComponent}-${hash}`;
|
|
4422
|
-
}
|
|
4423
|
-
function getStoragePath() {
|
|
4424
|
-
const dataPath = getDataPath("rivetkit");
|
|
4425
|
-
const dirHash = createHashForPath(process.cwd());
|
|
4426
|
-
const path = _chunkTI5PXQGGcjs.getNodePath.call(void 0, );
|
|
4427
|
-
return path.join(dataPath, dirHash);
|
|
4428
|
-
}
|
|
4429
|
-
async function pathExists(path) {
|
|
4430
|
-
try {
|
|
4431
|
-
const fs = _chunkTI5PXQGGcjs.getNodeFs.call(void 0, );
|
|
4432
|
-
await fs.access(path);
|
|
4433
|
-
return true;
|
|
4434
|
-
} catch (e6) {
|
|
4435
|
-
return false;
|
|
4436
|
-
}
|
|
4437
|
-
}
|
|
4438
|
-
async function ensureDirectoryExists(directoryPath) {
|
|
4439
|
-
if (!await pathExists(directoryPath)) {
|
|
4440
|
-
const fs = _chunkTI5PXQGGcjs.getNodeFs.call(void 0, );
|
|
4441
|
-
await fs.mkdir(directoryPath, { recursive: true });
|
|
4442
|
-
}
|
|
4443
|
-
}
|
|
4444
|
-
function ensureDirectoryExistsSync(directoryPath) {
|
|
4445
|
-
const fsSync = _chunkTI5PXQGGcjs.getNodeFsSync.call(void 0, );
|
|
4446
|
-
if (!fsSync.existsSync(directoryPath)) {
|
|
4447
|
-
fsSync.mkdirSync(directoryPath, { recursive: true });
|
|
4448
|
-
}
|
|
4449
|
-
}
|
|
4450
|
-
function getDataPath(appName) {
|
|
4451
|
-
const platform = process.platform;
|
|
4452
|
-
const os = _chunkTI5PXQGGcjs.getNodeOs.call(void 0, );
|
|
4453
|
-
const homeDir = os.homedir();
|
|
4454
|
-
const path = _chunkTI5PXQGGcjs.getNodePath.call(void 0, );
|
|
4455
|
-
switch (platform) {
|
|
4456
|
-
case "win32":
|
|
4457
|
-
return path.join(
|
|
4458
|
-
process.env.APPDATA || path.join(homeDir, "AppData", "Roaming"),
|
|
4459
|
-
appName
|
|
4460
|
-
);
|
|
4461
|
-
case "darwin":
|
|
4462
|
-
return path.join(
|
|
4463
|
-
homeDir,
|
|
4464
|
-
"Library",
|
|
4465
|
-
"Application Support",
|
|
4466
|
-
appName
|
|
4467
|
-
);
|
|
4468
|
-
default:
|
|
4469
|
-
return path.join(
|
|
4470
|
-
process.env.XDG_DATA_HOME || path.join(homeDir, ".local", "share"),
|
|
4471
|
-
appName
|
|
4472
|
-
);
|
|
4473
|
-
}
|
|
4474
|
-
}
|
|
4475
|
-
|
|
4476
|
-
// src/drivers/file-system/sqlite-runtime.ts
|
|
4477
|
-
function normalizeParams(params) {
|
|
4478
|
-
if (!params || params.length === 0) {
|
|
4479
|
-
return [];
|
|
4480
|
-
}
|
|
4481
|
-
return params.map((value) => {
|
|
4482
|
-
if (value instanceof Uint8Array) {
|
|
4483
|
-
return Buffer.from(value);
|
|
4484
|
-
}
|
|
4485
|
-
return value;
|
|
4486
|
-
});
|
|
4487
|
-
}
|
|
4488
|
-
function createPreparedDatabaseAdapter(rawDb, prepare) {
|
|
4489
|
-
return {
|
|
4490
|
-
exec: (sql) => {
|
|
4491
|
-
rawDb.exec(sql);
|
|
4492
|
-
},
|
|
4493
|
-
run: (sql, params) => {
|
|
4494
|
-
const stmt = prepare(sql);
|
|
4495
|
-
stmt.run(...normalizeParams(params));
|
|
4496
|
-
},
|
|
4497
|
-
get: (sql, params) => {
|
|
4498
|
-
const stmt = prepare(sql);
|
|
4499
|
-
return stmt.get(...normalizeParams(params));
|
|
4500
|
-
},
|
|
4501
|
-
all: (sql, params) => {
|
|
4502
|
-
const stmt = prepare(sql);
|
|
4503
|
-
return stmt.all(...normalizeParams(params));
|
|
4504
|
-
},
|
|
4505
|
-
close: () => {
|
|
4506
|
-
rawDb.close();
|
|
4507
|
-
}
|
|
4508
|
-
};
|
|
4509
|
-
}
|
|
4510
|
-
function configureSqliteRuntimeDatabase(rawDb, path) {
|
|
4511
|
-
rawDb.exec("PRAGMA busy_timeout = 5000");
|
|
4512
|
-
if (path !== ":memory:") {
|
|
4513
|
-
rawDb.exec("PRAGMA journal_mode = WAL");
|
|
4514
|
-
}
|
|
4515
|
-
}
|
|
4516
|
-
function loadSqliteRuntime() {
|
|
4517
|
-
const requireFn = _chunkTI5PXQGGcjs.getRequireFn.call(void 0, );
|
|
4518
|
-
const loadErrors = [];
|
|
4519
|
-
try {
|
|
4520
|
-
const bunSqlite = requireFn(
|
|
4521
|
-
/* webpackIgnore: true */
|
|
4522
|
-
"bun:sqlite"
|
|
4523
|
-
);
|
|
4524
|
-
const BunDatabase = bunSqlite.Database;
|
|
4525
|
-
if (BunDatabase) {
|
|
4526
|
-
return {
|
|
4527
|
-
kind: "bun",
|
|
4528
|
-
open: (path) => {
|
|
4529
|
-
var _a;
|
|
4530
|
-
const rawDb = new BunDatabase(path);
|
|
4531
|
-
configureSqliteRuntimeDatabase(rawDb, path);
|
|
4532
|
-
const query = (_a = rawDb.query) == null ? void 0 : _a.bind(rawDb);
|
|
4533
|
-
if (!query) throw new Error("bun:sqlite database missing query method");
|
|
4534
|
-
return createPreparedDatabaseAdapter(rawDb, query);
|
|
4535
|
-
}
|
|
4536
|
-
};
|
|
4537
|
-
}
|
|
4538
|
-
} catch (error) {
|
|
4539
|
-
loadErrors.push(`bun:sqlite unavailable: ${String(error)}`);
|
|
4540
|
-
}
|
|
4541
|
-
try {
|
|
4542
|
-
const nodeSqlite = requireFn(
|
|
4543
|
-
/* webpackIgnore: true */
|
|
4544
|
-
"node:sqlite"
|
|
4545
|
-
);
|
|
4546
|
-
const NodeDatabaseSync = nodeSqlite.DatabaseSync;
|
|
4547
|
-
if (NodeDatabaseSync) {
|
|
4548
|
-
return {
|
|
4549
|
-
kind: "node",
|
|
4550
|
-
open: (path) => {
|
|
4551
|
-
var _a;
|
|
4552
|
-
const rawDb = new NodeDatabaseSync(path);
|
|
4553
|
-
configureSqliteRuntimeDatabase(rawDb, path);
|
|
4554
|
-
const prepare = (_a = rawDb.prepare) == null ? void 0 : _a.bind(rawDb);
|
|
4555
|
-
if (!prepare) {
|
|
4556
|
-
throw new Error("node:sqlite DatabaseSync missing prepare method");
|
|
4557
|
-
}
|
|
4558
|
-
return createPreparedDatabaseAdapter(rawDb, prepare);
|
|
4559
|
-
}
|
|
4560
|
-
};
|
|
4561
|
-
}
|
|
4562
|
-
} catch (error) {
|
|
4563
|
-
loadErrors.push(`node:sqlite unavailable: ${String(error)}`);
|
|
4564
|
-
}
|
|
4565
|
-
try {
|
|
4566
|
-
const betterSqlite3Module = requireFn(
|
|
4567
|
-
/* webpackIgnore: true */
|
|
4568
|
-
"better-sqlite3"
|
|
4569
|
-
);
|
|
4570
|
-
const BetterSqlite3 = typeof betterSqlite3Module === "function" ? betterSqlite3Module : betterSqlite3Module.default;
|
|
4571
|
-
if (BetterSqlite3) {
|
|
4572
|
-
return {
|
|
4573
|
-
kind: "better-sqlite3",
|
|
4574
|
-
open: (path) => {
|
|
4575
|
-
var _a;
|
|
4576
|
-
const rawDb = new BetterSqlite3(path);
|
|
4577
|
-
configureSqliteRuntimeDatabase(rawDb, path);
|
|
4578
|
-
const prepare = (_a = rawDb.prepare) == null ? void 0 : _a.bind(rawDb);
|
|
4579
|
-
if (!prepare) {
|
|
4580
|
-
throw new Error("better-sqlite3 database missing prepare method");
|
|
4581
|
-
}
|
|
4582
|
-
return createPreparedDatabaseAdapter(rawDb, prepare);
|
|
4583
|
-
}
|
|
4584
|
-
};
|
|
4585
|
-
}
|
|
4586
|
-
} catch (error) {
|
|
4587
|
-
loadErrors.push(`better-sqlite3 unavailable: ${String(error)}`);
|
|
4588
|
-
throw new Error(
|
|
4589
|
-
`No SQLite runtime available. Tried bun:sqlite, node:sqlite, and better-sqlite3. Install better-sqlite3 (e.g. "pnpm add better-sqlite3") if native runtimes are unavailable.
|
|
4590
|
-
${loadErrors.join("\n")}`
|
|
4591
|
-
);
|
|
4592
|
-
}
|
|
4593
|
-
throw new Error(
|
|
4594
|
-
`No SQLite runtime available. Tried bun:sqlite, node:sqlite, and better-sqlite3.
|
|
4595
|
-
${loadErrors.join("\n")}`
|
|
4596
|
-
);
|
|
4597
|
-
}
|
|
4598
|
-
function computePrefixUpperBound(prefix) {
|
|
4599
|
-
if (prefix.length === 0) {
|
|
4600
|
-
return void 0;
|
|
4601
|
-
}
|
|
4602
|
-
const upperBound = new Uint8Array(prefix);
|
|
4603
|
-
for (let i = upperBound.length - 1; i >= 0; i--) {
|
|
4604
|
-
if (upperBound[i] !== 255) {
|
|
4605
|
-
upperBound[i] += 1;
|
|
4606
|
-
return upperBound.slice(0, i + 1);
|
|
4607
|
-
}
|
|
4608
|
-
}
|
|
4609
|
-
return void 0;
|
|
4610
|
-
}
|
|
4611
|
-
function ensureUint8Array(value, fieldName) {
|
|
4612
|
-
if (value instanceof Uint8Array) {
|
|
4613
|
-
return value;
|
|
4614
|
-
}
|
|
4615
|
-
if (value instanceof ArrayBuffer) {
|
|
4616
|
-
return new Uint8Array(value);
|
|
4617
|
-
}
|
|
4618
|
-
if (ArrayBuffer.isView(value)) {
|
|
4619
|
-
return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
|
|
4620
|
-
}
|
|
4621
|
-
throw new Error(`SQLite row field "${fieldName}" is not binary data`);
|
|
4622
|
-
}
|
|
4623
|
-
|
|
4624
|
-
// src/drivers/file-system/kv-limits.ts
|
|
4625
|
-
var KV_MAX_KEY_SIZE = 2 * 1024;
|
|
4626
|
-
var KV_MAX_VALUE_SIZE = 128 * 1024;
|
|
4627
|
-
var KV_MAX_KEYS = 128;
|
|
4628
|
-
var KV_MAX_PUT_PAYLOAD_SIZE = 976 * 1024;
|
|
4629
|
-
var KV_MAX_STORAGE_SIZE = 10 * 1024 * 1024 * 1024;
|
|
4630
|
-
var KV_KEY_WRAPPER_OVERHEAD_SIZE = 2;
|
|
4631
|
-
function estimateKvSize(db) {
|
|
4632
|
-
const row = db.get(
|
|
4633
|
-
"SELECT COALESCE(SUM(LENGTH(key) + LENGTH(value)), 0) AS total FROM kv"
|
|
4634
|
-
);
|
|
4635
|
-
return row ? Number(_nullishCoalesce(row.total, () => ( 0))) : 0;
|
|
4636
|
-
}
|
|
4637
|
-
function validateKvKey(key, keyLabel = "key") {
|
|
4638
|
-
if (key.byteLength + KV_KEY_WRAPPER_OVERHEAD_SIZE > KV_MAX_KEY_SIZE) {
|
|
4639
|
-
throw new Error(`${keyLabel} is too long (max 2048 bytes)`);
|
|
4640
|
-
}
|
|
4641
|
-
}
|
|
4642
|
-
function validateKvKeys(keys) {
|
|
4643
|
-
if (keys.length > KV_MAX_KEYS) {
|
|
4644
|
-
throw new Error("a maximum of 128 keys is allowed");
|
|
4645
|
-
}
|
|
4646
|
-
for (const key of keys) {
|
|
4647
|
-
validateKvKey(key);
|
|
4648
|
-
}
|
|
4649
|
-
}
|
|
4650
|
-
function validateKvEntries(entries, totalSize) {
|
|
4651
|
-
if (entries.length > KV_MAX_KEYS) {
|
|
4652
|
-
throw new Error("A maximum of 128 key-value entries is allowed");
|
|
4653
|
-
}
|
|
4654
|
-
let payloadSize = 0;
|
|
4655
|
-
for (const [key, value] of entries) {
|
|
4656
|
-
payloadSize += key.byteLength + KV_KEY_WRAPPER_OVERHEAD_SIZE + value.byteLength;
|
|
4657
|
-
}
|
|
4658
|
-
if (payloadSize > KV_MAX_PUT_PAYLOAD_SIZE) {
|
|
4659
|
-
throw new Error("total payload is too large (max 976 KiB)");
|
|
4660
|
-
}
|
|
4661
|
-
const storageRemaining = Math.max(0, KV_MAX_STORAGE_SIZE - totalSize);
|
|
4662
|
-
if (payloadSize > storageRemaining) {
|
|
4663
|
-
throw new Error(
|
|
4664
|
-
`not enough space left in storage (${storageRemaining} bytes remaining, current payload is ${payloadSize} bytes)`
|
|
4665
|
-
);
|
|
4666
|
-
}
|
|
4667
|
-
for (const [key, value] of entries) {
|
|
4668
|
-
validateKvKey(key);
|
|
4669
|
-
if (value.byteLength > KV_MAX_VALUE_SIZE) {
|
|
4670
|
-
throw new Error(
|
|
4671
|
-
`value is too large (max ${KV_MAX_VALUE_SIZE / 1024} KiB)`
|
|
4672
|
-
);
|
|
4673
|
-
}
|
|
4674
|
-
}
|
|
4675
|
-
}
|
|
4676
|
-
|
|
4677
|
-
// src/drivers/file-system/global-state.ts
|
|
4678
|
-
var FileSystemGlobalState = class {
|
|
4679
|
-
#storagePath;
|
|
4680
|
-
#stateDir;
|
|
4681
|
-
#dbsDir;
|
|
4682
|
-
#alarmsDir;
|
|
4683
|
-
#persist;
|
|
4684
|
-
#sqliteRuntime;
|
|
4685
|
-
#actorKvDatabases = /* @__PURE__ */ new Map();
|
|
4686
|
-
// IMPORTANT: Never delete from this map. Doing so will result in race
|
|
4687
|
-
// conditions since the actor generation will cease to be tracked
|
|
4688
|
-
// correctly. Always increment generation if a new actor is created.
|
|
4689
|
-
#actors = /* @__PURE__ */ new Map();
|
|
4690
|
-
#actorCountOnStartup = 0;
|
|
4691
|
-
#runnerParams;
|
|
4692
|
-
get persist() {
|
|
4693
|
-
return this.#persist;
|
|
4694
|
-
}
|
|
4695
|
-
get storagePath() {
|
|
4696
|
-
return this.#storagePath;
|
|
4697
|
-
}
|
|
4698
|
-
get actorCountOnStartup() {
|
|
4699
|
-
return this.#actorCountOnStartup;
|
|
4700
|
-
}
|
|
4701
|
-
constructor(options = {}) {
|
|
4702
|
-
const { persist = true, customPath, useNativeSqlite = true } = options;
|
|
4703
|
-
if (!useNativeSqlite) {
|
|
4704
|
-
throw new Error(
|
|
4705
|
-
"File-system driver no longer supports non-SQLite KV storage."
|
|
4706
|
-
);
|
|
4707
|
-
}
|
|
4708
|
-
this.#persist = persist;
|
|
4709
|
-
this.#sqliteRuntime = loadSqliteRuntime();
|
|
4710
|
-
this.#storagePath = persist ? _nullishCoalesce(customPath, () => ( getStoragePath())) : "/tmp";
|
|
4711
|
-
const path = _chunkTI5PXQGGcjs.getNodePath.call(void 0, );
|
|
4712
|
-
this.#stateDir = path.join(this.#storagePath, "state");
|
|
4713
|
-
this.#dbsDir = path.join(this.#storagePath, "databases");
|
|
4714
|
-
this.#alarmsDir = path.join(this.#storagePath, "alarms");
|
|
4715
|
-
if (this.#persist) {
|
|
4716
|
-
ensureDirectoryExistsSync(this.#stateDir);
|
|
4717
|
-
ensureDirectoryExistsSync(this.#dbsDir);
|
|
4718
|
-
ensureDirectoryExistsSync(this.#alarmsDir);
|
|
4719
|
-
try {
|
|
4720
|
-
const fsSync = _chunkTI5PXQGGcjs.getNodeFsSync.call(void 0, );
|
|
4721
|
-
const actorIds = fsSync.readdirSync(this.#stateDir);
|
|
4722
|
-
this.#actorCountOnStartup = actorIds.length;
|
|
4723
|
-
} catch (error) {
|
|
4724
|
-
logger2().error({ msg: "failed to count actors", error });
|
|
4725
|
-
}
|
|
4726
|
-
logger2().debug({
|
|
4727
|
-
msg: "file system driver ready",
|
|
4728
|
-
dir: this.#storagePath,
|
|
4729
|
-
actorCount: this.#actorCountOnStartup,
|
|
4730
|
-
sqliteRuntime: this.#sqliteRuntime.kind
|
|
4731
|
-
});
|
|
4732
|
-
try {
|
|
4733
|
-
this.#cleanupTempFilesSync();
|
|
4734
|
-
} catch (err) {
|
|
4735
|
-
logger2().error({
|
|
4736
|
-
msg: "failed to cleanup temp files",
|
|
4737
|
-
error: err
|
|
4738
|
-
});
|
|
4739
|
-
}
|
|
4740
|
-
try {
|
|
4741
|
-
this.#migrateLegacyKvToSqliteOnStartupSync();
|
|
4742
|
-
} catch (error) {
|
|
4743
|
-
logger2().error({
|
|
4744
|
-
msg: "failed legacy kv startup migration",
|
|
4745
|
-
error
|
|
4746
|
-
});
|
|
4747
|
-
throw error;
|
|
4748
|
-
}
|
|
4749
|
-
} else {
|
|
4750
|
-
logger2().debug({
|
|
4751
|
-
msg: "memory driver ready",
|
|
4752
|
-
sqliteRuntime: this.#sqliteRuntime.kind
|
|
4753
|
-
});
|
|
4754
|
-
}
|
|
4755
|
-
}
|
|
4756
|
-
getActorStatePath(actorId) {
|
|
4757
|
-
return _chunkTI5PXQGGcjs.getNodePath.call(void 0, ).join(this.#stateDir, actorId);
|
|
4758
|
-
}
|
|
4759
|
-
getActorDbPath(actorId) {
|
|
4760
|
-
return _chunkTI5PXQGGcjs.getNodePath.call(void 0, ).join(this.#dbsDir, `${actorId}.db`);
|
|
4761
|
-
}
|
|
4762
|
-
getActorAlarmPath(actorId) {
|
|
4763
|
-
return _chunkTI5PXQGGcjs.getNodePath.call(void 0, ).join(this.#alarmsDir, actorId);
|
|
4764
|
-
}
|
|
4765
|
-
#getActorKvDatabasePath(actorId) {
|
|
4766
|
-
if (this.#persist) {
|
|
4767
|
-
return this.getActorDbPath(actorId);
|
|
4768
|
-
}
|
|
4769
|
-
return ":memory:";
|
|
4770
|
-
}
|
|
4771
|
-
#ensureActorKvTables(db) {
|
|
4772
|
-
db.exec(`
|
|
4773
|
-
CREATE TABLE IF NOT EXISTS kv (
|
|
4774
|
-
key BLOB PRIMARY KEY NOT NULL,
|
|
4775
|
-
value BLOB NOT NULL
|
|
4776
|
-
)
|
|
4777
|
-
`);
|
|
4778
|
-
}
|
|
4779
|
-
#getOrCreateActorKvDatabase(actorId) {
|
|
4780
|
-
const existing = this.#actorKvDatabases.get(actorId);
|
|
4781
|
-
if (existing) {
|
|
4782
|
-
return existing;
|
|
4783
|
-
}
|
|
4784
|
-
const dbPath = this.#getActorKvDatabasePath(actorId);
|
|
4785
|
-
if (this.#persist) {
|
|
4786
|
-
const path = _chunkTI5PXQGGcjs.getNodePath.call(void 0, );
|
|
4787
|
-
ensureDirectoryExistsSync(path.dirname(dbPath));
|
|
4788
|
-
}
|
|
4789
|
-
let db;
|
|
4790
|
-
try {
|
|
4791
|
-
db = this.#sqliteRuntime.open(dbPath);
|
|
4792
|
-
} catch (error) {
|
|
4793
|
-
throw new Error(
|
|
4794
|
-
`failed to open actor kv database for actor ${actorId} at ${dbPath}: ${error}`
|
|
4795
|
-
);
|
|
4796
|
-
}
|
|
4797
|
-
this.#ensureActorKvTables(db);
|
|
4798
|
-
this.#actorKvDatabases.set(actorId, db);
|
|
4799
|
-
return db;
|
|
4800
|
-
}
|
|
4801
|
-
#closeActorKvDatabase(actorId) {
|
|
4802
|
-
const db = this.#actorKvDatabases.get(actorId);
|
|
4803
|
-
if (!db) {
|
|
4804
|
-
return;
|
|
4805
|
-
}
|
|
4806
|
-
try {
|
|
4807
|
-
db.close();
|
|
4808
|
-
} finally {
|
|
4809
|
-
this.#actorKvDatabases.delete(actorId);
|
|
4810
|
-
}
|
|
4811
|
-
}
|
|
4812
|
-
#putKvEntriesInDb(db, entries) {
|
|
4813
|
-
if (entries.length === 0) {
|
|
4814
|
-
return;
|
|
4815
|
-
}
|
|
4816
|
-
db.exec("BEGIN");
|
|
4817
|
-
try {
|
|
4818
|
-
for (const [key, value] of entries) {
|
|
4819
|
-
db.run("INSERT OR REPLACE INTO kv (key, value) VALUES (?, ?)", [
|
|
4820
|
-
key,
|
|
4821
|
-
value
|
|
4822
|
-
]);
|
|
4823
|
-
}
|
|
4824
|
-
db.exec("COMMIT");
|
|
4825
|
-
} catch (error) {
|
|
4826
|
-
try {
|
|
4827
|
-
db.exec("ROLLBACK");
|
|
4828
|
-
} catch (e7) {
|
|
4829
|
-
}
|
|
4830
|
-
throw error;
|
|
4831
|
-
}
|
|
4832
|
-
}
|
|
4833
|
-
#isKvDbPopulated(db) {
|
|
4834
|
-
const row = db.get(
|
|
4835
|
-
"SELECT COUNT(*) AS count FROM kv"
|
|
4836
|
-
);
|
|
4837
|
-
const count = row ? Number(row.count) : 0;
|
|
4838
|
-
return count > 0;
|
|
4839
|
-
}
|
|
4840
|
-
#migrateLegacyKvToSqliteOnStartupSync() {
|
|
4841
|
-
const fsSync = _chunkTI5PXQGGcjs.getNodeFsSync.call(void 0, );
|
|
4842
|
-
if (!fsSync.existsSync(this.#stateDir)) {
|
|
4843
|
-
return;
|
|
4844
|
-
}
|
|
4845
|
-
const actorIds = fsSync.readdirSync(this.#stateDir).filter((id) => !id.includes(".tmp."));
|
|
4846
|
-
for (const actorId of actorIds) {
|
|
4847
|
-
const statePath = this.getActorStatePath(actorId);
|
|
4848
|
-
let state;
|
|
4849
|
-
try {
|
|
4850
|
-
const stateBytes = fsSync.readFileSync(statePath);
|
|
4851
|
-
state = ACTOR_STATE_VERSIONED.deserializeWithEmbeddedVersion(
|
|
4852
|
-
new Uint8Array(stateBytes)
|
|
4853
|
-
);
|
|
4854
|
-
} catch (error) {
|
|
4855
|
-
logger2().warn({
|
|
4856
|
-
msg: "failed to parse actor state during startup migration",
|
|
4857
|
-
actorId,
|
|
4858
|
-
error
|
|
4859
|
-
});
|
|
4860
|
-
continue;
|
|
4861
|
-
}
|
|
4862
|
-
if (!state.kvStorage || state.kvStorage.length === 0) {
|
|
4863
|
-
continue;
|
|
4864
|
-
}
|
|
4865
|
-
const dbPath = this.getActorDbPath(actorId);
|
|
4866
|
-
const path = _chunkTI5PXQGGcjs.getNodePath.call(void 0, );
|
|
4867
|
-
ensureDirectoryExistsSync(path.dirname(dbPath));
|
|
4868
|
-
const db = this.#sqliteRuntime.open(dbPath);
|
|
4869
|
-
try {
|
|
4870
|
-
this.#ensureActorKvTables(db);
|
|
4871
|
-
if (this.#isKvDbPopulated(db)) {
|
|
4872
|
-
continue;
|
|
4873
|
-
}
|
|
4874
|
-
const legacyEntries = state.kvStorage.map((entry) => [
|
|
4875
|
-
new Uint8Array(entry.key),
|
|
4876
|
-
new Uint8Array(entry.value)
|
|
4877
|
-
]);
|
|
4878
|
-
this.#putKvEntriesInDb(db, legacyEntries);
|
|
4879
|
-
logger2().info({
|
|
4880
|
-
msg: "migrated legacy actor kv storage to sqlite",
|
|
4881
|
-
actorId,
|
|
4882
|
-
entryCount: legacyEntries.length
|
|
4883
|
-
});
|
|
4884
|
-
} finally {
|
|
4885
|
-
db.close();
|
|
4886
|
-
}
|
|
4887
|
-
}
|
|
4888
|
-
}
|
|
4889
|
-
async *getActorsIterator(params) {
|
|
4890
|
-
let actorIds = Array.from(this.#actors.keys()).sort();
|
|
4891
|
-
const fsSync = _chunkTI5PXQGGcjs.getNodeFsSync.call(void 0, );
|
|
4892
|
-
if (fsSync.existsSync(this.#stateDir)) {
|
|
4893
|
-
actorIds = fsSync.readdirSync(this.#stateDir).filter((id) => !id.includes(".tmp")).sort();
|
|
4894
|
-
}
|
|
4895
|
-
const startIndex = params.cursor ? actorIds.indexOf(params.cursor) + 1 : 0;
|
|
4896
|
-
for (let i = startIndex; i < actorIds.length; i++) {
|
|
4897
|
-
const actorId = actorIds[i];
|
|
4898
|
-
if (!actorId) {
|
|
4899
|
-
continue;
|
|
4900
|
-
}
|
|
4901
|
-
try {
|
|
4902
|
-
const state = await this.loadActorStateOrError(actorId);
|
|
4903
|
-
yield state;
|
|
4904
|
-
} catch (error) {
|
|
4905
|
-
logger2().error({
|
|
4906
|
-
msg: "failed to load actor state",
|
|
4907
|
-
actorId,
|
|
4908
|
-
error
|
|
4909
|
-
});
|
|
4910
|
-
}
|
|
4911
|
-
}
|
|
4912
|
-
}
|
|
4913
|
-
/**
|
|
4914
|
-
* Ensures an entry exists for this actor.
|
|
4915
|
-
*
|
|
4916
|
-
* Used for #createActor and #loadActor.
|
|
4917
|
-
*/
|
|
4918
|
-
#upsertEntry(actorId) {
|
|
4919
|
-
let entry = this.#actors.get(actorId);
|
|
4920
|
-
if (entry) {
|
|
4921
|
-
return entry;
|
|
4922
|
-
}
|
|
4923
|
-
entry = {
|
|
4924
|
-
id: actorId,
|
|
4925
|
-
lifecycleState: 0 /* NONEXISTENT */,
|
|
4926
|
-
generation: crypto.randomUUID()
|
|
4927
|
-
};
|
|
4928
|
-
this.#actors.set(actorId, entry);
|
|
4929
|
-
return entry;
|
|
4930
|
-
}
|
|
4931
|
-
/**
|
|
4932
|
-
* Creates a new actor and writes to file system.
|
|
4933
|
-
*/
|
|
4934
|
-
async createActor(actorId, name, key, input) {
|
|
4935
|
-
await this.#waitForActorStop(actorId);
|
|
4936
|
-
let entry = this.#upsertEntry(actorId);
|
|
4937
|
-
if (entry.state) {
|
|
4938
|
-
throw new (0, _chunkL47L3ZWJcjs.ActorDuplicateKey)(name, key);
|
|
4939
|
-
}
|
|
4940
|
-
if (this.isActorStopping(actorId)) {
|
|
4941
|
-
await this.#waitForActorStop(actorId);
|
|
4942
|
-
entry = this.#upsertEntry(actorId);
|
|
4943
|
-
}
|
|
4944
|
-
if (entry.lifecycleState === 4 /* DESTROYED */) {
|
|
4945
|
-
entry.lifecycleState = 0 /* NONEXISTENT */;
|
|
4946
|
-
entry.generation = crypto.randomUUID();
|
|
4947
|
-
}
|
|
4948
|
-
const initialKvState = _chunkTI5PXQGGcjs.getInitialActorKvState.call(void 0, input);
|
|
4949
|
-
await this.#withActorWrite(actorId, async (lockedEntry) => {
|
|
4950
|
-
lockedEntry.state = {
|
|
4951
|
-
actorId,
|
|
4952
|
-
name,
|
|
4953
|
-
key,
|
|
4954
|
-
createdAt: BigInt(Date.now()),
|
|
4955
|
-
kvStorage: [],
|
|
4956
|
-
startTs: null,
|
|
4957
|
-
connectableTs: null,
|
|
4958
|
-
sleepTs: null,
|
|
4959
|
-
destroyTs: null
|
|
4960
|
-
};
|
|
4961
|
-
lockedEntry.lifecycleState = 1 /* AWAKE */;
|
|
4962
|
-
if (this.#persist) {
|
|
4963
|
-
await this.#performWrite(
|
|
4964
|
-
actorId,
|
|
4965
|
-
lockedEntry.generation,
|
|
4966
|
-
lockedEntry.state
|
|
4967
|
-
);
|
|
4968
|
-
}
|
|
4969
|
-
if (initialKvState.length > 0) {
|
|
4970
|
-
const db = this.#getOrCreateActorKvDatabase(actorId);
|
|
4971
|
-
this.#putKvEntriesInDb(db, initialKvState);
|
|
4972
|
-
}
|
|
4973
|
-
});
|
|
4974
|
-
return entry;
|
|
4975
|
-
}
|
|
4976
|
-
/**
|
|
4977
|
-
* Loads the actor from disk or returns the existing actor entry. This will return an entry even if the actor does not actually exist.
|
|
4978
|
-
*/
|
|
4979
|
-
async loadActor(actorId) {
|
|
4980
|
-
const entry = this.#upsertEntry(actorId);
|
|
4981
|
-
if (entry.lifecycleState === 4 /* DESTROYED */) {
|
|
4982
|
-
return entry;
|
|
4983
|
-
}
|
|
4984
|
-
if (entry.state) {
|
|
4985
|
-
return entry;
|
|
4986
|
-
}
|
|
4987
|
-
if (!this.#persist) {
|
|
4988
|
-
return entry;
|
|
4989
|
-
}
|
|
4990
|
-
if (entry.loadPromise) {
|
|
4991
|
-
await entry.loadPromise;
|
|
4992
|
-
return entry;
|
|
4993
|
-
}
|
|
4994
|
-
entry.loadPromise = this.loadActorState(entry);
|
|
4995
|
-
return entry.loadPromise;
|
|
4996
|
-
}
|
|
4997
|
-
async loadActorState(entry) {
|
|
4998
|
-
const stateFilePath = this.getActorStatePath(entry.id);
|
|
4999
|
-
try {
|
|
5000
|
-
const fs = _chunkTI5PXQGGcjs.getNodeFs.call(void 0, );
|
|
5001
|
-
const stateData = await fs.readFile(stateFilePath);
|
|
5002
|
-
const loadedState = ACTOR_STATE_VERSIONED.deserializeWithEmbeddedVersion(
|
|
5003
|
-
new Uint8Array(stateData)
|
|
5004
|
-
);
|
|
5005
|
-
entry.state = {
|
|
5006
|
-
...loadedState,
|
|
5007
|
-
kvStorage: []
|
|
5008
|
-
};
|
|
5009
|
-
return entry;
|
|
5010
|
-
} catch (innerError) {
|
|
5011
|
-
if (innerError.code === "ENOENT") {
|
|
5012
|
-
entry.loadPromise = void 0;
|
|
5013
|
-
return entry;
|
|
5014
|
-
}
|
|
5015
|
-
const error = new Error(
|
|
5016
|
-
`Failed to load actor state: ${innerError}`
|
|
5017
|
-
);
|
|
5018
|
-
throw error;
|
|
5019
|
-
}
|
|
5020
|
-
}
|
|
5021
|
-
async loadOrCreateActor(actorId, name, key, input) {
|
|
5022
|
-
await this.#waitForActorStop(actorId);
|
|
5023
|
-
const entry = await this.loadActor(actorId);
|
|
5024
|
-
if (!entry.state) {
|
|
5025
|
-
if (this.isActorStopping(actorId)) {
|
|
5026
|
-
await this.#waitForActorStop(actorId);
|
|
5027
|
-
return await this.loadOrCreateActor(actorId, name, key, input);
|
|
5028
|
-
}
|
|
5029
|
-
if (entry.lifecycleState === 4 /* DESTROYED */) {
|
|
5030
|
-
entry.lifecycleState = 0 /* NONEXISTENT */;
|
|
5031
|
-
entry.generation = crypto.randomUUID();
|
|
5032
|
-
}
|
|
5033
|
-
const initialKvState = _chunkTI5PXQGGcjs.getInitialActorKvState.call(void 0, input);
|
|
5034
|
-
await this.#withActorWrite(actorId, async (lockedEntry) => {
|
|
5035
|
-
lockedEntry.state = {
|
|
5036
|
-
actorId,
|
|
5037
|
-
name,
|
|
5038
|
-
key,
|
|
5039
|
-
createdAt: BigInt(Date.now()),
|
|
5040
|
-
kvStorage: [],
|
|
5041
|
-
startTs: null,
|
|
5042
|
-
connectableTs: null,
|
|
5043
|
-
sleepTs: null,
|
|
5044
|
-
destroyTs: null
|
|
5045
|
-
};
|
|
5046
|
-
if (this.#persist) {
|
|
5047
|
-
await this.#performWrite(
|
|
5048
|
-
actorId,
|
|
5049
|
-
lockedEntry.generation,
|
|
5050
|
-
lockedEntry.state
|
|
5051
|
-
);
|
|
5052
|
-
}
|
|
5053
|
-
if (initialKvState.length > 0) {
|
|
5054
|
-
const db = this.#getOrCreateActorKvDatabase(actorId);
|
|
5055
|
-
this.#putKvEntriesInDb(db, initialKvState);
|
|
5056
|
-
}
|
|
5057
|
-
});
|
|
5058
|
-
}
|
|
5059
|
-
return entry;
|
|
5060
|
-
}
|
|
5061
|
-
async sleepActor(actorId) {
|
|
5062
|
-
var _a, _b;
|
|
5063
|
-
_invariant2.default.call(void 0,
|
|
5064
|
-
this.#persist,
|
|
5065
|
-
"cannot sleep actor with memory driver, must use file system driver"
|
|
5066
|
-
);
|
|
5067
|
-
const actor = this.#upsertEntry(actorId);
|
|
5068
|
-
_invariant2.default.call(void 0, actor, `tried to sleep ${actorId}, does not exist`);
|
|
5069
|
-
if (this.isActorStopping(actorId)) {
|
|
5070
|
-
return;
|
|
5071
|
-
}
|
|
5072
|
-
actor.lifecycleState = 2 /* STARTING_SLEEP */;
|
|
5073
|
-
actor.stopPromise = _chunkHYPIHCDTcjs.promiseWithResolvers.call(void 0, (reason) => logger2().warn({ msg: "unhandled actor sleep stop promise rejection", reason }));
|
|
5074
|
-
if (actor.loadPromise) await actor.loadPromise.catch();
|
|
5075
|
-
if ((_a = actor.startPromise) == null ? void 0 : _a.promise)
|
|
5076
|
-
await actor.startPromise.promise.catch();
|
|
5077
|
-
try {
|
|
5078
|
-
if (actor.state) {
|
|
5079
|
-
await this.#withActorWrite(actorId, async (lockedEntry) => {
|
|
5080
|
-
if (!lockedEntry.state) {
|
|
5081
|
-
return;
|
|
5082
|
-
}
|
|
5083
|
-
lockedEntry.state = {
|
|
5084
|
-
...lockedEntry.state,
|
|
5085
|
-
sleepTs: BigInt(Date.now())
|
|
5086
|
-
};
|
|
5087
|
-
if (this.#persist) {
|
|
5088
|
-
await this.#performWrite(
|
|
5089
|
-
actorId,
|
|
5090
|
-
lockedEntry.generation,
|
|
5091
|
-
lockedEntry.state
|
|
5092
|
-
);
|
|
5093
|
-
}
|
|
5094
|
-
});
|
|
5095
|
-
}
|
|
5096
|
-
_invariant2.default.call(void 0, actor.actor, "actor should be loaded");
|
|
5097
|
-
await actor.actor.onStop("sleep");
|
|
5098
|
-
} finally {
|
|
5099
|
-
await this.#withActorWrite(actorId, async () => {
|
|
5100
|
-
});
|
|
5101
|
-
this.#closeActorKvDatabase(actorId);
|
|
5102
|
-
(_b = actor.stopPromise) == null ? void 0 : _b.resolve();
|
|
5103
|
-
actor.stopPromise = void 0;
|
|
5104
|
-
this.#actors.delete(actorId);
|
|
5105
|
-
}
|
|
5106
|
-
}
|
|
5107
|
-
async destroyActor(actorId) {
|
|
5108
|
-
var _a, _b;
|
|
5109
|
-
const actor = this.#upsertEntry(actorId);
|
|
5110
|
-
if (this.isActorStopping(actorId)) {
|
|
5111
|
-
return;
|
|
5112
|
-
}
|
|
5113
|
-
actor.lifecycleState = 3 /* STARTING_DESTROY */;
|
|
5114
|
-
actor.stopPromise = _chunkHYPIHCDTcjs.promiseWithResolvers.call(void 0, (reason) => logger2().warn({ msg: "unhandled actor destroy stop promise rejection", reason }));
|
|
5115
|
-
if (actor.loadPromise) await actor.loadPromise.catch();
|
|
5116
|
-
if ((_a = actor.startPromise) == null ? void 0 : _a.promise)
|
|
5117
|
-
await actor.startPromise.promise.catch();
|
|
5118
|
-
try {
|
|
5119
|
-
if (actor.state) {
|
|
5120
|
-
await this.#withActorWrite(actorId, async (lockedEntry) => {
|
|
5121
|
-
if (!lockedEntry.state) {
|
|
5122
|
-
return;
|
|
5123
|
-
}
|
|
5124
|
-
lockedEntry.state = {
|
|
5125
|
-
...lockedEntry.state,
|
|
5126
|
-
destroyTs: BigInt(Date.now())
|
|
5127
|
-
};
|
|
5128
|
-
if (this.#persist) {
|
|
5129
|
-
await this.#performWrite(
|
|
5130
|
-
actorId,
|
|
5131
|
-
lockedEntry.generation,
|
|
5132
|
-
lockedEntry.state
|
|
5133
|
-
);
|
|
5134
|
-
}
|
|
5135
|
-
});
|
|
5136
|
-
}
|
|
5137
|
-
if (actor.actor) {
|
|
5138
|
-
await actor.actor.onStop("destroy");
|
|
5139
|
-
}
|
|
5140
|
-
await this.#withActorWrite(actorId, async () => {
|
|
5141
|
-
});
|
|
5142
|
-
this.#closeActorKvDatabase(actorId);
|
|
5143
|
-
if (actor.alarmTimeout) {
|
|
5144
|
-
actor.alarmTimeout.abort();
|
|
5145
|
-
}
|
|
5146
|
-
if (this.#persist) {
|
|
5147
|
-
const fs = _chunkTI5PXQGGcjs.getNodeFs.call(void 0, );
|
|
5148
|
-
await Promise.all([
|
|
5149
|
-
// Delete actor state file
|
|
5150
|
-
(async () => {
|
|
5151
|
-
try {
|
|
5152
|
-
await fs.unlink(this.getActorStatePath(actorId));
|
|
5153
|
-
} catch (err) {
|
|
5154
|
-
if ((err == null ? void 0 : err.code) !== "ENOENT") {
|
|
5155
|
-
logger2().error({
|
|
5156
|
-
msg: "failed to delete actor state file",
|
|
5157
|
-
actorId,
|
|
5158
|
-
error: _chunkHYPIHCDTcjs.stringifyError.call(void 0, err)
|
|
5159
|
-
});
|
|
5160
|
-
}
|
|
5161
|
-
}
|
|
5162
|
-
})(),
|
|
5163
|
-
// Delete actor database file
|
|
5164
|
-
(async () => {
|
|
5165
|
-
try {
|
|
5166
|
-
await fs.unlink(this.getActorDbPath(actorId));
|
|
5167
|
-
} catch (err) {
|
|
5168
|
-
if ((err == null ? void 0 : err.code) !== "ENOENT") {
|
|
5169
|
-
logger2().error({
|
|
5170
|
-
msg: "failed to delete actor database file",
|
|
5171
|
-
actorId,
|
|
5172
|
-
error: _chunkHYPIHCDTcjs.stringifyError.call(void 0, err)
|
|
5173
|
-
});
|
|
5174
|
-
}
|
|
5175
|
-
}
|
|
5176
|
-
})(),
|
|
5177
|
-
// Delete actor alarm file
|
|
5178
|
-
(async () => {
|
|
5179
|
-
try {
|
|
5180
|
-
await fs.unlink(this.getActorAlarmPath(actorId));
|
|
5181
|
-
} catch (err) {
|
|
5182
|
-
if ((err == null ? void 0 : err.code) !== "ENOENT") {
|
|
5183
|
-
logger2().error({
|
|
5184
|
-
msg: "failed to delete actor alarm file",
|
|
5185
|
-
actorId,
|
|
5186
|
-
error: _chunkHYPIHCDTcjs.stringifyError.call(void 0, err)
|
|
5187
|
-
});
|
|
5188
|
-
}
|
|
5189
|
-
}
|
|
5190
|
-
})()
|
|
5191
|
-
]);
|
|
5192
|
-
}
|
|
5193
|
-
} finally {
|
|
5194
|
-
await this.#withActorWrite(actorId, async () => {
|
|
5195
|
-
});
|
|
5196
|
-
(_b = actor.stopPromise) == null ? void 0 : _b.resolve();
|
|
5197
|
-
actor.stopPromise = void 0;
|
|
5198
|
-
actor.state = void 0;
|
|
5199
|
-
actor.loadPromise = void 0;
|
|
5200
|
-
actor.actor = void 0;
|
|
5201
|
-
actor.startPromise = void 0;
|
|
5202
|
-
actor.alarmTimeout = void 0;
|
|
5203
|
-
actor.alarmTimeout = void 0;
|
|
5204
|
-
actor.pendingWriteResolver = void 0;
|
|
5205
|
-
actor.lifecycleState = 4 /* DESTROYED */;
|
|
5206
|
-
}
|
|
5207
|
-
}
|
|
5208
|
-
/**
|
|
5209
|
-
* Save actor state to disk.
|
|
5210
|
-
*/
|
|
5211
|
-
async writeActor(actorId, generation, state) {
|
|
5212
|
-
if (!this.#persist) {
|
|
5213
|
-
return;
|
|
5214
|
-
}
|
|
5215
|
-
await this.#withActorWrite(actorId, async () => {
|
|
5216
|
-
await this.#performWrite(actorId, generation, state);
|
|
5217
|
-
});
|
|
5218
|
-
}
|
|
5219
|
-
isGenerationCurrentAndNotDestroyed(actorId, generation) {
|
|
5220
|
-
const entry = this.#upsertEntry(actorId);
|
|
5221
|
-
if (!entry) return false;
|
|
5222
|
-
return entry.generation === generation && entry.lifecycleState !== 3 /* STARTING_DESTROY */;
|
|
5223
|
-
}
|
|
5224
|
-
isActorStopping(actorId) {
|
|
5225
|
-
const entry = this.#upsertEntry(actorId);
|
|
5226
|
-
if (!entry) return false;
|
|
5227
|
-
return entry.lifecycleState === 2 /* STARTING_SLEEP */ || entry.lifecycleState === 3 /* STARTING_DESTROY */;
|
|
5228
|
-
}
|
|
5229
|
-
async #waitForActorStop(actorId) {
|
|
5230
|
-
while (true) {
|
|
5231
|
-
const entry = this.#actors.get(actorId);
|
|
5232
|
-
if (!(entry == null ? void 0 : entry.stopPromise)) {
|
|
5233
|
-
return;
|
|
5234
|
-
}
|
|
5235
|
-
try {
|
|
5236
|
-
await entry.stopPromise.promise;
|
|
5237
|
-
} catch (e8) {
|
|
5238
|
-
return;
|
|
5239
|
-
}
|
|
5240
|
-
}
|
|
5241
|
-
}
|
|
5242
|
-
async #withActorWrite(actorId, fn) {
|
|
5243
|
-
const entry = this.#actors.get(actorId);
|
|
5244
|
-
_invariant2.default.call(void 0, entry, "actor entry does not exist");
|
|
5245
|
-
const previousWrite = entry.pendingWriteResolver;
|
|
5246
|
-
const currentWrite = _chunkHYPIHCDTcjs.promiseWithResolvers.call(void 0, (reason) => logger2().warn({ msg: "unhandled kv write promise rejection", reason }));
|
|
5247
|
-
entry.pendingWriteResolver = currentWrite;
|
|
5248
|
-
if (previousWrite) {
|
|
5249
|
-
try {
|
|
5250
|
-
await previousWrite.promise;
|
|
5251
|
-
} catch (e9) {
|
|
5252
|
-
}
|
|
5253
|
-
}
|
|
5254
|
-
try {
|
|
5255
|
-
return await fn(entry);
|
|
5256
|
-
} finally {
|
|
5257
|
-
currentWrite.resolve();
|
|
5258
|
-
if (entry.pendingWriteResolver === currentWrite) {
|
|
5259
|
-
entry.pendingWriteResolver = void 0;
|
|
5260
|
-
}
|
|
5261
|
-
}
|
|
5262
|
-
}
|
|
5263
|
-
async #waitForPendingWrite(actorId) {
|
|
5264
|
-
const entry = this.#actors.get(actorId);
|
|
5265
|
-
if (!(entry == null ? void 0 : entry.pendingWriteResolver)) {
|
|
5266
|
-
return;
|
|
5267
|
-
}
|
|
5268
|
-
while (entry.pendingWriteResolver) {
|
|
5269
|
-
const pending = entry.pendingWriteResolver;
|
|
5270
|
-
try {
|
|
5271
|
-
await pending.promise;
|
|
5272
|
-
} catch (e10) {
|
|
5273
|
-
}
|
|
5274
|
-
}
|
|
5275
|
-
}
|
|
5276
|
-
async setActorAlarm(actorId, timestamp) {
|
|
5277
|
-
const entry = this.#actors.get(actorId);
|
|
5278
|
-
_invariant2.default.call(void 0, entry, "actor entry does not exist");
|
|
5279
|
-
const writeGeneration = entry.generation;
|
|
5280
|
-
if (this.isActorStopping(actorId)) {
|
|
5281
|
-
logger2().info("skipping set alarm since actor stopping");
|
|
5282
|
-
return;
|
|
5283
|
-
}
|
|
5284
|
-
if (this.#persist) {
|
|
5285
|
-
const alarmPath = this.getActorAlarmPath(actorId);
|
|
5286
|
-
const crypto2 = _chunkTI5PXQGGcjs.getNodeCrypto.call(void 0, );
|
|
5287
|
-
const tempPath = `${alarmPath}.tmp.${crypto2.randomUUID()}`;
|
|
5288
|
-
try {
|
|
5289
|
-
const path = _chunkTI5PXQGGcjs.getNodePath.call(void 0, );
|
|
5290
|
-
await ensureDirectoryExists(path.dirname(alarmPath));
|
|
5291
|
-
const alarmData = {
|
|
5292
|
-
actorId,
|
|
5293
|
-
timestamp: BigInt(timestamp)
|
|
5294
|
-
};
|
|
5295
|
-
const data = ACTOR_ALARM_VERSIONED.serializeWithEmbeddedVersion(
|
|
5296
|
-
alarmData,
|
|
5297
|
-
CURRENT_VERSION3
|
|
5298
|
-
);
|
|
5299
|
-
const fs = _chunkTI5PXQGGcjs.getNodeFs.call(void 0, );
|
|
5300
|
-
await fs.writeFile(tempPath, data);
|
|
5301
|
-
if (!this.isGenerationCurrentAndNotDestroyed(
|
|
5302
|
-
actorId,
|
|
5303
|
-
writeGeneration
|
|
5304
|
-
)) {
|
|
5305
|
-
logger2().debug(
|
|
5306
|
-
"skipping writing alarm since actor destroying or new generation"
|
|
5307
|
-
);
|
|
5308
|
-
return;
|
|
5309
|
-
}
|
|
5310
|
-
await fs.rename(tempPath, alarmPath);
|
|
5311
|
-
} catch (error) {
|
|
5312
|
-
try {
|
|
5313
|
-
const fs = _chunkTI5PXQGGcjs.getNodeFs.call(void 0, );
|
|
5314
|
-
await fs.unlink(tempPath);
|
|
5315
|
-
} catch (e11) {
|
|
5316
|
-
}
|
|
5317
|
-
logger2().error({
|
|
5318
|
-
msg: "failed to write alarm",
|
|
5319
|
-
actorId,
|
|
5320
|
-
error
|
|
5321
|
-
});
|
|
5322
|
-
throw new Error(`Failed to write alarm: ${error}`);
|
|
5323
|
-
}
|
|
5324
|
-
}
|
|
5325
|
-
this.#scheduleAlarmTimeout(actorId, timestamp);
|
|
5326
|
-
}
|
|
5327
|
-
/**
|
|
5328
|
-
* Perform the actual write operation with atomic writes
|
|
5329
|
-
*/
|
|
5330
|
-
async #performWrite(actorId, generation, state) {
|
|
5331
|
-
const dataPath = this.getActorStatePath(actorId);
|
|
5332
|
-
const crypto2 = _chunkTI5PXQGGcjs.getNodeCrypto.call(void 0, );
|
|
5333
|
-
const tempPath = `${dataPath}.tmp.${crypto2.randomUUID()}`;
|
|
5334
|
-
try {
|
|
5335
|
-
const path = _chunkTI5PXQGGcjs.getNodePath.call(void 0, );
|
|
5336
|
-
await ensureDirectoryExists(path.dirname(dataPath));
|
|
5337
|
-
const bareState = {
|
|
5338
|
-
actorId: state.actorId,
|
|
5339
|
-
name: state.name,
|
|
5340
|
-
key: state.key,
|
|
5341
|
-
createdAt: state.createdAt,
|
|
5342
|
-
kvStorage: state.kvStorage,
|
|
5343
|
-
startTs: state.startTs,
|
|
5344
|
-
connectableTs: state.connectableTs,
|
|
5345
|
-
sleepTs: state.sleepTs,
|
|
5346
|
-
destroyTs: state.destroyTs
|
|
5347
|
-
};
|
|
5348
|
-
const serializedState = ACTOR_STATE_VERSIONED.serializeWithEmbeddedVersion(
|
|
5349
|
-
bareState,
|
|
5350
|
-
CURRENT_VERSION3
|
|
5351
|
-
);
|
|
5352
|
-
const fs = _chunkTI5PXQGGcjs.getNodeFs.call(void 0, );
|
|
5353
|
-
await fs.writeFile(tempPath, serializedState);
|
|
5354
|
-
if (!this.isGenerationCurrentAndNotDestroyed(actorId, generation)) {
|
|
5355
|
-
logger2().debug(
|
|
5356
|
-
"skipping writing alarm since actor destroying or new generation"
|
|
5357
|
-
);
|
|
5358
|
-
return;
|
|
5359
|
-
}
|
|
5360
|
-
await fs.rename(tempPath, dataPath);
|
|
5361
|
-
} catch (error) {
|
|
5362
|
-
try {
|
|
5363
|
-
const fs = _chunkTI5PXQGGcjs.getNodeFs.call(void 0, );
|
|
5364
|
-
await fs.unlink(tempPath);
|
|
5365
|
-
} catch (e12) {
|
|
5366
|
-
}
|
|
5367
|
-
logger2().error({
|
|
5368
|
-
msg: "failed to save actor state",
|
|
5369
|
-
actorId,
|
|
5370
|
-
error
|
|
5371
|
-
});
|
|
5372
|
-
throw new Error(`Failed to save actor state: ${error}`);
|
|
5373
|
-
}
|
|
5374
|
-
}
|
|
5375
|
-
/**
|
|
5376
|
-
* Call this method after the actor driver has been initiated.
|
|
5377
|
-
*
|
|
5378
|
-
* This will trigger all initial alarms from the file system.
|
|
5379
|
-
*
|
|
5380
|
-
* This needs to be sync since DriverConfig.actor is sync
|
|
5381
|
-
*/
|
|
5382
|
-
onRunnerStart(config4, inlineClient, actorDriver) {
|
|
5383
|
-
if (this.#runnerParams) {
|
|
5384
|
-
return;
|
|
5385
|
-
}
|
|
5386
|
-
this.#runnerParams = {
|
|
5387
|
-
config: config4,
|
|
5388
|
-
inlineClient,
|
|
5389
|
-
actorDriver
|
|
5390
|
-
};
|
|
5391
|
-
try {
|
|
5392
|
-
this.#loadAlarmsSync();
|
|
5393
|
-
} catch (err) {
|
|
5394
|
-
logger2().error({
|
|
5395
|
-
msg: "failed to load alarms on startup",
|
|
5396
|
-
error: err
|
|
5397
|
-
});
|
|
5398
|
-
}
|
|
5399
|
-
}
|
|
5400
|
-
async startActor(config4, inlineClient, actorDriver, actorId) {
|
|
5401
|
-
var _a;
|
|
5402
|
-
await this.#waitForActorStop(actorId);
|
|
5403
|
-
let entry = await this.loadActor(actorId);
|
|
5404
|
-
if (!entry.state) {
|
|
5405
|
-
throw new Error(
|
|
5406
|
-
`Actor does not exist and cannot be started: "${actorId}"`
|
|
5407
|
-
);
|
|
5408
|
-
}
|
|
5409
|
-
if (entry.startPromise) {
|
|
5410
|
-
await entry.startPromise.promise;
|
|
5411
|
-
_invariant2.default.call(void 0, entry.actor, "actor should have loaded");
|
|
5412
|
-
return entry.actor;
|
|
5413
|
-
}
|
|
5414
|
-
if (entry.actor) {
|
|
5415
|
-
if (entry.actor.isStopping || this.isActorStopping(actorId)) {
|
|
5416
|
-
await this.#waitForActorStop(actorId);
|
|
5417
|
-
entry = await this.loadActor(actorId);
|
|
5418
|
-
if (!entry.state) {
|
|
5419
|
-
throw new Error(
|
|
5420
|
-
`Actor does not exist and cannot be started: "${actorId}"`
|
|
5421
|
-
);
|
|
5422
|
-
}
|
|
5423
|
-
} else {
|
|
5424
|
-
return entry.actor;
|
|
5425
|
-
}
|
|
5426
|
-
}
|
|
5427
|
-
entry.startPromise = _chunkHYPIHCDTcjs.promiseWithResolvers.call(void 0, (reason) => logger2().warn({ msg: "unhandled actor start promise rejection", reason }));
|
|
5428
|
-
try {
|
|
5429
|
-
const definition = lookupInRegistry(config4, entry.state.name);
|
|
5430
|
-
entry.actor = await definition.instantiate();
|
|
5431
|
-
entry.lifecycleState = 1 /* AWAKE */;
|
|
5432
|
-
await entry.actor.start(
|
|
5433
|
-
actorDriver,
|
|
5434
|
-
inlineClient,
|
|
5435
|
-
actorId,
|
|
5436
|
-
entry.state.name,
|
|
5437
|
-
entry.state.key,
|
|
5438
|
-
"unknown"
|
|
5439
|
-
);
|
|
5440
|
-
const now = BigInt(Date.now());
|
|
5441
|
-
await this.#withActorWrite(actorId, async (lockedEntry) => {
|
|
5442
|
-
if (!lockedEntry.state) {
|
|
5443
|
-
throw new Error(
|
|
5444
|
-
`Actor does not exist and cannot be started: "${actorId}"`
|
|
5445
|
-
);
|
|
5446
|
-
}
|
|
5447
|
-
lockedEntry.state = {
|
|
5448
|
-
...lockedEntry.state,
|
|
5449
|
-
startTs: now,
|
|
5450
|
-
connectableTs: now,
|
|
5451
|
-
sleepTs: null
|
|
5452
|
-
// Clear sleep timestamp when actor wakes up
|
|
5453
|
-
};
|
|
5454
|
-
if (this.#persist) {
|
|
5455
|
-
await this.#performWrite(
|
|
5456
|
-
actorId,
|
|
5457
|
-
lockedEntry.generation,
|
|
5458
|
-
lockedEntry.state
|
|
5459
|
-
);
|
|
5460
|
-
}
|
|
5461
|
-
});
|
|
5462
|
-
entry.startPromise.resolve();
|
|
5463
|
-
entry.startPromise = void 0;
|
|
5464
|
-
return entry.actor;
|
|
5465
|
-
} catch (innerError) {
|
|
5466
|
-
const error = new Error(
|
|
5467
|
-
`Failed to start actor ${actorId}: ${innerError}`,
|
|
5468
|
-
{ cause: innerError }
|
|
5469
|
-
);
|
|
5470
|
-
(_a = entry.startPromise) == null ? void 0 : _a.reject(error);
|
|
5471
|
-
entry.startPromise = void 0;
|
|
5472
|
-
throw error;
|
|
5473
|
-
}
|
|
5474
|
-
}
|
|
5475
|
-
async loadActorStateOrError(actorId) {
|
|
5476
|
-
const state = (await this.loadActor(actorId)).state;
|
|
5477
|
-
if (!state) throw new Error(`Actor does not exist: ${actorId}`);
|
|
5478
|
-
return state;
|
|
5479
|
-
}
|
|
5480
|
-
getActorOrError(actorId) {
|
|
5481
|
-
const entry = this.#actors.get(actorId);
|
|
5482
|
-
if (!entry) throw new Error(`No entry for actor: ${actorId}`);
|
|
5483
|
-
return entry;
|
|
5484
|
-
}
|
|
5485
|
-
async createDatabase(actorId) {
|
|
5486
|
-
return this.getActorDbPath(actorId);
|
|
5487
|
-
}
|
|
5488
|
-
/**
|
|
5489
|
-
* Load all persisted alarms from disk and schedule their timers.
|
|
5490
|
-
*/
|
|
5491
|
-
#loadAlarmsSync() {
|
|
5492
|
-
try {
|
|
5493
|
-
const fsSync = _chunkTI5PXQGGcjs.getNodeFsSync.call(void 0, );
|
|
5494
|
-
const files = fsSync.existsSync(this.#alarmsDir) ? fsSync.readdirSync(this.#alarmsDir) : [];
|
|
5495
|
-
for (const file of files) {
|
|
5496
|
-
if (file.includes(".tmp.")) continue;
|
|
5497
|
-
const path = _chunkTI5PXQGGcjs.getNodePath.call(void 0, );
|
|
5498
|
-
const fullPath = path.join(this.#alarmsDir, file);
|
|
5499
|
-
try {
|
|
5500
|
-
const buf = fsSync.readFileSync(fullPath);
|
|
5501
|
-
const alarmData = ACTOR_ALARM_VERSIONED.deserializeWithEmbeddedVersion(
|
|
5502
|
-
new Uint8Array(buf)
|
|
5503
|
-
);
|
|
5504
|
-
const timestamp = Number(alarmData.timestamp);
|
|
5505
|
-
if (Number.isFinite(timestamp)) {
|
|
5506
|
-
this.#scheduleAlarmTimeout(
|
|
5507
|
-
alarmData.actorId,
|
|
5508
|
-
timestamp
|
|
5509
|
-
);
|
|
5510
|
-
} else {
|
|
5511
|
-
logger2().debug({
|
|
5512
|
-
msg: "invalid alarm file contents",
|
|
5513
|
-
file
|
|
5514
|
-
});
|
|
5515
|
-
}
|
|
5516
|
-
} catch (err) {
|
|
5517
|
-
logger2().error({
|
|
5518
|
-
msg: "failed to read alarm file",
|
|
5519
|
-
file,
|
|
5520
|
-
error: _chunkHYPIHCDTcjs.stringifyError.call(void 0, err)
|
|
5521
|
-
});
|
|
5522
|
-
}
|
|
5523
|
-
}
|
|
5524
|
-
} catch (err) {
|
|
5525
|
-
logger2().error({
|
|
5526
|
-
msg: "failed to list alarms directory",
|
|
5527
|
-
error: err
|
|
5528
|
-
});
|
|
5529
|
-
}
|
|
5530
|
-
}
|
|
5531
|
-
/**
|
|
5532
|
-
* Schedule an alarm timer for an actor without writing to disk.
|
|
5533
|
-
*/
|
|
5534
|
-
#scheduleAlarmTimeout(actorId, timestamp) {
|
|
5535
|
-
var _a;
|
|
5536
|
-
const entry = this.#upsertEntry(actorId);
|
|
5537
|
-
if (entry.alarmTimestamp !== void 0 && timestamp >= entry.alarmTimestamp) {
|
|
5538
|
-
logger2().debug({
|
|
5539
|
-
msg: "skipping alarm schedule (later than existing)",
|
|
5540
|
-
actorId,
|
|
5541
|
-
timestamp,
|
|
5542
|
-
current: entry.alarmTimestamp
|
|
5543
|
-
});
|
|
5544
|
-
return;
|
|
5545
|
-
}
|
|
5546
|
-
logger2().debug({ msg: "scheduling alarm", actorId, timestamp });
|
|
5547
|
-
(_a = entry.alarmTimeout) == null ? void 0 : _a.abort();
|
|
5548
|
-
entry.alarmTimestamp = timestamp;
|
|
5549
|
-
const delay = Math.max(0, timestamp - Date.now());
|
|
5550
|
-
entry.alarmTimeout = _chunkHYPIHCDTcjs.setLongTimeout.call(void 0, async () => {
|
|
5551
|
-
entry.alarmTimestamp = void 0;
|
|
5552
|
-
if (this.#persist) {
|
|
5553
|
-
try {
|
|
5554
|
-
const fs = _chunkTI5PXQGGcjs.getNodeFs.call(void 0, );
|
|
5555
|
-
await fs.unlink(this.getActorAlarmPath(actorId));
|
|
5556
|
-
} catch (err) {
|
|
5557
|
-
if ((err == null ? void 0 : err.code) !== "ENOENT") {
|
|
5558
|
-
logger2().debug({
|
|
5559
|
-
msg: "failed to remove alarm file",
|
|
5560
|
-
actorId,
|
|
5561
|
-
error: _chunkHYPIHCDTcjs.stringifyError.call(void 0, err)
|
|
5562
|
-
});
|
|
5563
|
-
}
|
|
5564
|
-
}
|
|
5565
|
-
}
|
|
5566
|
-
try {
|
|
5567
|
-
logger2().debug({ msg: "triggering alarm", actorId, timestamp });
|
|
5568
|
-
const loaded = await this.loadActor(actorId);
|
|
5569
|
-
if (!loaded.state)
|
|
5570
|
-
throw new Error(`Actor does not exist: ${actorId}`);
|
|
5571
|
-
const runnerParams = this.#runnerParams;
|
|
5572
|
-
_invariant2.default.call(void 0, runnerParams, "missing runner params");
|
|
5573
|
-
if (!loaded.actor) {
|
|
5574
|
-
await this.startActor(
|
|
5575
|
-
runnerParams.config,
|
|
5576
|
-
runnerParams.inlineClient,
|
|
5577
|
-
runnerParams.actorDriver,
|
|
5578
|
-
actorId
|
|
5579
|
-
);
|
|
5580
|
-
}
|
|
5581
|
-
_invariant2.default.call(void 0, loaded.actor, "actor should be loaded after wake");
|
|
5582
|
-
await loaded.actor.onAlarm();
|
|
5583
|
-
} catch (err) {
|
|
5584
|
-
logger2().error({
|
|
5585
|
-
msg: "failed to handle alarm",
|
|
5586
|
-
actorId,
|
|
5587
|
-
error: _chunkHYPIHCDTcjs.stringifyError.call(void 0, err)
|
|
5588
|
-
});
|
|
5589
|
-
}
|
|
5590
|
-
}, delay);
|
|
5591
|
-
}
|
|
5592
|
-
/**
|
|
5593
|
-
* Cleanup stale temp files on startup (synchronous)
|
|
5594
|
-
*/
|
|
5595
|
-
#cleanupTempFilesSync() {
|
|
5596
|
-
try {
|
|
5597
|
-
const fsSync = _chunkTI5PXQGGcjs.getNodeFsSync.call(void 0, );
|
|
5598
|
-
const files = fsSync.readdirSync(this.#stateDir);
|
|
5599
|
-
const tempFiles = files.filter((f) => f.includes(".tmp."));
|
|
5600
|
-
const oneHourAgo = Date.now() - 36e5;
|
|
5601
|
-
for (const tempFile of tempFiles) {
|
|
5602
|
-
try {
|
|
5603
|
-
const path = _chunkTI5PXQGGcjs.getNodePath.call(void 0, );
|
|
5604
|
-
const fullPath = path.join(this.#stateDir, tempFile);
|
|
5605
|
-
const stat = fsSync.statSync(fullPath);
|
|
5606
|
-
if (stat.mtimeMs < oneHourAgo) {
|
|
5607
|
-
fsSync.unlinkSync(fullPath);
|
|
5608
|
-
logger2().info({
|
|
5609
|
-
msg: "cleaned up stale temp file",
|
|
5610
|
-
file: tempFile
|
|
5611
|
-
});
|
|
5612
|
-
}
|
|
5613
|
-
} catch (err) {
|
|
5614
|
-
logger2().debug({
|
|
5615
|
-
msg: "failed to cleanup temp file",
|
|
5616
|
-
file: tempFile,
|
|
5617
|
-
error: err
|
|
5618
|
-
});
|
|
5619
|
-
}
|
|
5620
|
-
}
|
|
5621
|
-
} catch (err) {
|
|
5622
|
-
logger2().error({
|
|
5623
|
-
msg: "failed to read actors directory for cleanup",
|
|
5624
|
-
error: err
|
|
5625
|
-
});
|
|
5626
|
-
}
|
|
5627
|
-
}
|
|
5628
|
-
/**
|
|
5629
|
-
* Batch put KV entries for an actor.
|
|
5630
|
-
*/
|
|
5631
|
-
async kvBatchPut(actorId, entries) {
|
|
5632
|
-
await this.loadActor(actorId);
|
|
5633
|
-
await this.#withActorWrite(actorId, async (entry) => {
|
|
5634
|
-
if (!entry.state) {
|
|
5635
|
-
if (this.isActorStopping(actorId)) {
|
|
5636
|
-
return;
|
|
5637
|
-
}
|
|
5638
|
-
throw new Error(`Actor ${actorId} state not loaded`);
|
|
5639
|
-
}
|
|
5640
|
-
const db = this.#getOrCreateActorKvDatabase(actorId);
|
|
5641
|
-
const totalSize = estimateKvSize(db);
|
|
5642
|
-
validateKvEntries(entries, totalSize);
|
|
5643
|
-
this.#putKvEntriesInDb(db, entries);
|
|
5644
|
-
});
|
|
5645
|
-
}
|
|
5646
|
-
/**
|
|
5647
|
-
* Batch get KV entries for an actor.
|
|
5648
|
-
*/
|
|
5649
|
-
async kvBatchGet(actorId, keys) {
|
|
5650
|
-
const entry = await this.loadActor(actorId);
|
|
5651
|
-
await this.#waitForPendingWrite(actorId);
|
|
5652
|
-
if (!entry.state) {
|
|
5653
|
-
if (this.isActorStopping(actorId)) {
|
|
5654
|
-
throw new Error(`Actor ${actorId} is stopping`);
|
|
5655
|
-
} else {
|
|
5656
|
-
throw new Error(`Actor ${actorId} state not loaded`);
|
|
5657
|
-
}
|
|
5658
|
-
}
|
|
5659
|
-
validateKvKeys(keys);
|
|
5660
|
-
const db = this.#getOrCreateActorKvDatabase(actorId);
|
|
5661
|
-
const results = [];
|
|
5662
|
-
for (const key of keys) {
|
|
5663
|
-
const row = db.get(
|
|
5664
|
-
"SELECT value FROM kv WHERE key = ?",
|
|
5665
|
-
[key]
|
|
5666
|
-
);
|
|
5667
|
-
if (!row) {
|
|
5668
|
-
results.push(null);
|
|
5669
|
-
continue;
|
|
5670
|
-
}
|
|
5671
|
-
results.push(ensureUint8Array(row.value, "value"));
|
|
5672
|
-
}
|
|
5673
|
-
return results;
|
|
5674
|
-
}
|
|
5675
|
-
/**
|
|
5676
|
-
* Batch delete KV entries for an actor.
|
|
5677
|
-
*/
|
|
5678
|
-
async kvBatchDelete(actorId, keys) {
|
|
5679
|
-
await this.loadActor(actorId);
|
|
5680
|
-
await this.#withActorWrite(actorId, async (entry) => {
|
|
5681
|
-
if (!entry.state) {
|
|
5682
|
-
if (this.isActorStopping(actorId)) {
|
|
5683
|
-
return;
|
|
5684
|
-
}
|
|
5685
|
-
throw new Error(`Actor ${actorId} state not loaded`);
|
|
5686
|
-
}
|
|
5687
|
-
if (keys.length === 0) {
|
|
5688
|
-
return;
|
|
5689
|
-
}
|
|
5690
|
-
validateKvKeys(keys);
|
|
5691
|
-
const db = this.#getOrCreateActorKvDatabase(actorId);
|
|
5692
|
-
db.exec("BEGIN");
|
|
5693
|
-
try {
|
|
5694
|
-
for (const key of keys) {
|
|
5695
|
-
db.run("DELETE FROM kv WHERE key = ?", [key]);
|
|
5696
|
-
}
|
|
5697
|
-
db.exec("COMMIT");
|
|
5698
|
-
} catch (error) {
|
|
5699
|
-
try {
|
|
5700
|
-
db.exec("ROLLBACK");
|
|
5701
|
-
} catch (e13) {
|
|
5702
|
-
}
|
|
5703
|
-
throw error;
|
|
5704
|
-
}
|
|
5705
|
-
});
|
|
5706
|
-
}
|
|
5707
|
-
/**
|
|
5708
|
-
* List KV entries with a given prefix for an actor.
|
|
5709
|
-
*/
|
|
5710
|
-
async kvListPrefix(actorId, prefix) {
|
|
5711
|
-
const entry = await this.loadActor(actorId);
|
|
5712
|
-
await this.#waitForPendingWrite(actorId);
|
|
5713
|
-
if (!entry.state) {
|
|
5714
|
-
if (this.isActorStopping(actorId)) {
|
|
5715
|
-
throw new Error(`Actor ${actorId} is destroying`);
|
|
5716
|
-
} else {
|
|
5717
|
-
throw new Error(`Actor ${actorId} state not loaded`);
|
|
5718
|
-
}
|
|
5719
|
-
}
|
|
5720
|
-
validateKvKey(prefix, "prefix key");
|
|
5721
|
-
const db = this.#getOrCreateActorKvDatabase(actorId);
|
|
5722
|
-
const upperBound = computePrefixUpperBound(prefix);
|
|
5723
|
-
const rows = upperBound ? db.all(
|
|
5724
|
-
"SELECT key, value FROM kv WHERE key >= ? AND key < ? ORDER BY key ASC",
|
|
5725
|
-
[prefix, upperBound]
|
|
5726
|
-
) : db.all(
|
|
5727
|
-
"SELECT key, value FROM kv WHERE key >= ? ORDER BY key ASC",
|
|
5728
|
-
[prefix]
|
|
5729
|
-
);
|
|
5730
|
-
return rows.map((row) => [
|
|
5731
|
-
ensureUint8Array(row.key, "key"),
|
|
5732
|
-
ensureUint8Array(row.value, "value")
|
|
5733
|
-
]);
|
|
5734
|
-
}
|
|
5735
|
-
};
|
|
5736
|
-
|
|
5737
|
-
// src/drivers/file-system/manager.ts
|
|
5738
|
-
|
|
5739
|
-
var FileSystemManagerDriver = class {
|
|
5740
|
-
#config;
|
|
5741
|
-
#state;
|
|
5742
|
-
#driverConfig;
|
|
5743
|
-
#getUpgradeWebSocket;
|
|
5744
|
-
#actorDriver;
|
|
5745
|
-
#actorRouter;
|
|
5746
|
-
constructor(config4, state, driverConfig) {
|
|
5747
|
-
this.#config = config4;
|
|
5748
|
-
this.#state = state;
|
|
5749
|
-
this.#driverConfig = driverConfig;
|
|
5750
|
-
const inlineClient = _chunkIIJNPVPQcjs.createClientWithDriver.call(void 0, this);
|
|
5751
|
-
this.#actorDriver = this.#driverConfig.actor(
|
|
5752
|
-
config4,
|
|
5753
|
-
this,
|
|
5754
|
-
inlineClient
|
|
5755
|
-
);
|
|
5756
|
-
this.#actorRouter = createActorRouter(
|
|
5757
|
-
this.#config,
|
|
5758
|
-
this.#actorDriver,
|
|
5759
|
-
void 0,
|
|
5760
|
-
config4.test.enabled
|
|
5761
|
-
);
|
|
5762
|
-
}
|
|
5763
|
-
async sendRequest(actorId, actorRequest) {
|
|
5764
|
-
return await this.#actorRouter.fetch(actorRequest, {
|
|
5765
|
-
actorId
|
|
5766
|
-
});
|
|
5767
|
-
}
|
|
5768
|
-
async openWebSocket(path, actorId, encoding, params) {
|
|
5769
|
-
const normalizedPath = path.startsWith("/") ? path : `/${path}`;
|
|
5770
|
-
const fakeUrl = `http://inline-actor${normalizedPath}`;
|
|
5771
|
-
const fakeRequest = new Request(fakeUrl, {
|
|
5772
|
-
method: "GET"
|
|
5773
|
-
});
|
|
5774
|
-
const pathOnly = normalizedPath.split("?")[0];
|
|
5775
|
-
const { gatewayId, requestId } = createHibernatableRequestMetadata();
|
|
5776
|
-
const wsHandler = await _chunkTI5PXQGGcjs.routeWebSocket.call(void 0,
|
|
5777
|
-
fakeRequest,
|
|
5778
|
-
pathOnly,
|
|
5779
|
-
{},
|
|
5780
|
-
this.#config,
|
|
5781
|
-
this.#actorDriver,
|
|
5782
|
-
actorId,
|
|
5783
|
-
encoding,
|
|
5784
|
-
params,
|
|
5785
|
-
gatewayId,
|
|
5786
|
-
requestId,
|
|
5787
|
-
true,
|
|
5788
|
-
false
|
|
5789
|
-
);
|
|
5790
|
-
return createInlineWebSocket(wsHandler);
|
|
5791
|
-
}
|
|
5792
|
-
async proxyRequest(c, actorRequest, actorId) {
|
|
5793
|
-
return await this.#actorRouter.fetch(actorRequest, {
|
|
5794
|
-
actorId
|
|
5795
|
-
});
|
|
5796
|
-
}
|
|
5797
|
-
async proxyWebSocket(c, path, actorId, encoding, params) {
|
|
5798
|
-
var _a;
|
|
5799
|
-
const upgradeWebSocket = (_a = this.#getUpgradeWebSocket) == null ? void 0 : _a.call(this);
|
|
5800
|
-
_invariant2.default.call(void 0, upgradeWebSocket, "missing getUpgradeWebSocket");
|
|
5801
|
-
const pathOnly = path.split("?")[0];
|
|
5802
|
-
const normalizedPath = pathOnly.startsWith("/") ? pathOnly : `/${pathOnly}`;
|
|
5803
|
-
const { gatewayId, requestId } = createHibernatableRequestMetadata();
|
|
5804
|
-
const wsHandler = await _chunkTI5PXQGGcjs.routeWebSocket.call(void 0,
|
|
5805
|
-
// TODO: Create new request with new path
|
|
5806
|
-
c.req.raw,
|
|
5807
|
-
normalizedPath,
|
|
5808
|
-
c.req.header(),
|
|
5809
|
-
this.#config,
|
|
5810
|
-
this.#actorDriver,
|
|
5811
|
-
actorId,
|
|
5812
|
-
encoding,
|
|
5813
|
-
params,
|
|
5814
|
-
gatewayId,
|
|
5815
|
-
requestId,
|
|
5816
|
-
true,
|
|
5817
|
-
false
|
|
5818
|
-
);
|
|
5819
|
-
return upgradeWebSocket(() => wsHandler)(c, _chunkHYPIHCDTcjs.noopNext.call(void 0, ));
|
|
5820
|
-
}
|
|
5821
|
-
async buildGatewayUrl(actorId) {
|
|
5822
|
-
const port = _nullishCoalesce(this.#config.managerPort, () => ( 6420));
|
|
5823
|
-
return `http://127.0.0.1:${port}/gateway/${encodeURIComponent(actorId)}`;
|
|
5824
|
-
}
|
|
5825
|
-
async getForId({
|
|
5826
|
-
actorId
|
|
5827
|
-
}) {
|
|
5828
|
-
const actor = await this.#state.loadActor(actorId);
|
|
5829
|
-
if (!actor.state) {
|
|
5830
|
-
return void 0;
|
|
5831
|
-
}
|
|
5832
|
-
if (this.#state.isActorStopping(actorId)) {
|
|
5833
|
-
throw new (0, _chunkL47L3ZWJcjs.ActorStopping)(actorId);
|
|
5834
|
-
}
|
|
5835
|
-
return actorStateToOutput(actor.state);
|
|
5836
|
-
}
|
|
5837
|
-
async getWithKey({
|
|
5838
|
-
name,
|
|
5839
|
-
key
|
|
5840
|
-
}) {
|
|
5841
|
-
const actorId = generateActorId(name, key);
|
|
5842
|
-
const actor = await this.#state.loadActor(actorId);
|
|
5843
|
-
if (actor.state) {
|
|
5844
|
-
return actorStateToOutput(actor.state);
|
|
5845
|
-
}
|
|
5846
|
-
return void 0;
|
|
5847
|
-
}
|
|
5848
|
-
async getOrCreateWithKey(input) {
|
|
5849
|
-
const actorId = generateActorId(input.name, input.key);
|
|
5850
|
-
await this.#state.loadOrCreateActor(
|
|
5851
|
-
actorId,
|
|
5852
|
-
input.name,
|
|
5853
|
-
input.key,
|
|
5854
|
-
input.input
|
|
5855
|
-
);
|
|
5856
|
-
await this.#actorDriver.loadActor(actorId);
|
|
5857
|
-
const state = await this.#state.loadActorStateOrError(actorId);
|
|
5858
|
-
return actorStateToOutput(state);
|
|
5859
|
-
}
|
|
5860
|
-
async createActor({ name, key, input }) {
|
|
5861
|
-
const actorId = generateActorId(name, key);
|
|
5862
|
-
await this.#state.createActor(actorId, name, key, input);
|
|
5863
|
-
await this.#actorDriver.loadActor(actorId);
|
|
5864
|
-
const state = await this.#state.loadActorStateOrError(actorId);
|
|
5865
|
-
return actorStateToOutput(state);
|
|
5866
|
-
}
|
|
5867
|
-
async listActors({ name }) {
|
|
5868
|
-
const actors = [];
|
|
5869
|
-
const itr = this.#state.getActorsIterator({});
|
|
5870
|
-
for await (const actor of itr) {
|
|
5871
|
-
if (actor.name === name) {
|
|
5872
|
-
actors.push(actorStateToOutput(actor));
|
|
5873
|
-
}
|
|
5874
|
-
}
|
|
5875
|
-
actors.sort((a, b) => {
|
|
5876
|
-
const aTs = _nullishCoalesce(a.createTs, () => ( 0));
|
|
5877
|
-
const bTs = _nullishCoalesce(b.createTs, () => ( 0));
|
|
5878
|
-
return bTs - aTs;
|
|
5879
|
-
});
|
|
5880
|
-
return actors;
|
|
5881
|
-
}
|
|
5882
|
-
async kvGet(actorId, key) {
|
|
5883
|
-
const response = await this.#state.kvBatchGet(actorId, [key]);
|
|
5884
|
-
return response[0] !== null ? new TextDecoder().decode(response[0]) : null;
|
|
5885
|
-
}
|
|
5886
|
-
displayInformation() {
|
|
5887
|
-
return {
|
|
5888
|
-
properties: {
|
|
5889
|
-
...this.#state.persist ? { Data: this.#state.storagePath } : {},
|
|
5890
|
-
Instances: this.#state.actorCountOnStartup.toString()
|
|
5891
|
-
}
|
|
5892
|
-
};
|
|
5893
|
-
}
|
|
5894
|
-
extraStartupLog() {
|
|
5895
|
-
return {
|
|
5896
|
-
instances: this.#state.actorCountOnStartup,
|
|
5897
|
-
data: this.#state.storagePath
|
|
5898
|
-
};
|
|
5899
|
-
}
|
|
5900
|
-
setGetUpgradeWebSocket(getUpgradeWebSocket) {
|
|
5901
|
-
this.#getUpgradeWebSocket = getUpgradeWebSocket;
|
|
5902
|
-
}
|
|
5903
|
-
};
|
|
5904
|
-
function actorStateToOutput(state) {
|
|
5905
|
-
return {
|
|
5906
|
-
actorId: state.actorId,
|
|
5907
|
-
name: state.name,
|
|
5908
|
-
key: state.key,
|
|
5909
|
-
createTs: Number(state.createdAt),
|
|
5910
|
-
startTs: state.startTs !== null ? Number(state.startTs) : null,
|
|
5911
|
-
connectableTs: state.connectableTs !== null ? Number(state.connectableTs) : null,
|
|
5912
|
-
sleepTs: state.sleepTs !== null ? Number(state.sleepTs) : null,
|
|
5913
|
-
destroyTs: state.destroyTs !== null ? Number(state.destroyTs) : null
|
|
5914
|
-
};
|
|
5915
|
-
}
|
|
5916
|
-
function createHibernatableRequestMetadata() {
|
|
5917
|
-
const gatewayId = new Uint8Array(4);
|
|
5918
|
-
const requestId = new Uint8Array(4);
|
|
5919
|
-
crypto.getRandomValues(gatewayId);
|
|
5920
|
-
crypto.getRandomValues(requestId);
|
|
5921
|
-
return {
|
|
5922
|
-
gatewayId: gatewayId.buffer.slice(0),
|
|
5923
|
-
requestId: requestId.buffer.slice(0)
|
|
5924
|
-
};
|
|
5925
|
-
}
|
|
5926
|
-
|
|
5927
|
-
// src/drivers/file-system/mod.ts
|
|
5928
|
-
var CreateFileSystemDriverOptionsSchema = _zod.z.object({
|
|
5929
|
-
/** Custom path for storage. */
|
|
5930
|
-
path: _zod.z.string().optional(),
|
|
5931
|
-
/** Deprecated: file-system driver KV is now always SQLite-backed. */
|
|
5932
|
-
useNativeSqlite: _zod.z.boolean().optional()
|
|
5933
|
-
});
|
|
5934
|
-
function createFileSystemOrMemoryDriver(persist = true, options) {
|
|
5935
|
-
_chunkTI5PXQGGcjs.importNodeDependencies.call(void 0, );
|
|
5936
|
-
if ((options == null ? void 0 : options.useNativeSqlite) === false) {
|
|
5937
|
-
throw new Error(
|
|
5938
|
-
"File-system driver no longer supports non-SQLite KV storage. Remove useNativeSqlite: false."
|
|
5939
|
-
);
|
|
5940
|
-
}
|
|
5941
|
-
const stateOptions = {
|
|
5942
|
-
persist,
|
|
5943
|
-
customPath: options == null ? void 0 : options.path,
|
|
5944
|
-
useNativeSqlite: true
|
|
5945
|
-
};
|
|
5946
|
-
const state = new FileSystemGlobalState(stateOptions);
|
|
5947
|
-
const driverConfig = {
|
|
5948
|
-
name: persist ? "file-system" : "memory",
|
|
5949
|
-
displayName: persist ? "File System" : "Memory",
|
|
5950
|
-
manager: (config4) => new FileSystemManagerDriver(config4, state, driverConfig),
|
|
5951
|
-
actor: (config4, managerDriver, inlineClient) => {
|
|
5952
|
-
const actorDriver = new FileSystemActorDriver(
|
|
5953
|
-
config4,
|
|
5954
|
-
managerDriver,
|
|
5955
|
-
inlineClient,
|
|
5956
|
-
state
|
|
5957
|
-
);
|
|
5958
|
-
state.onRunnerStart(config4, inlineClient, actorDriver);
|
|
5959
|
-
return actorDriver;
|
|
5960
|
-
},
|
|
5961
|
-
autoStartActorDriver: true
|
|
5962
|
-
};
|
|
5963
|
-
return driverConfig;
|
|
5964
|
-
}
|
|
5965
|
-
function createFileSystemDriver(opts) {
|
|
5966
|
-
const validatedOpts = opts ? CreateFileSystemDriverOptionsSchema.parse(opts) : void 0;
|
|
5967
|
-
return createFileSystemOrMemoryDriver(true, validatedOpts);
|
|
5968
|
-
}
|
|
5969
|
-
function createMemoryDriver() {
|
|
5970
|
-
return createFileSystemOrMemoryDriver(false);
|
|
5971
|
-
}
|
|
5972
|
-
|
|
5973
|
-
|
|
5974
|
-
|
|
5975
|
-
|
|
5976
|
-
|
|
5977
|
-
|
|
5978
|
-
|
|
5979
4129
|
|
|
5980
4130
|
|
|
5981
4131
|
|
|
5982
4132
|
|
|
5983
|
-
exports.ActorDefinition = ActorDefinition; exports.lookupInRegistry = lookupInRegistry; exports.createActorRouter = createActorRouter;
|
|
5984
|
-
//# sourceMappingURL=chunk-
|
|
4133
|
+
exports.ActorDefinition = ActorDefinition; exports.lookupInRegistry = lookupInRegistry; exports.createActorRouter = createActorRouter;
|
|
4134
|
+
//# sourceMappingURL=chunk-JJNZQDUN.cjs.map
|