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,7 +1,7 @@
|
|
|
1
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;
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkV3JSZR5Pcjs = require('./chunk-V3JSZR5P.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
@@ -36,10 +36,10 @@ var _chunkJC6BEPE7cjs = require('./chunk-JC6BEPE7.cjs');
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
|
|
39
|
-
var
|
|
39
|
+
var _chunkHNE2AK6Ccjs = require('./chunk-HNE2AK6C.cjs');
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
var
|
|
42
|
+
var _chunkA4KEUCB6cjs = require('./chunk-A4KEUCB6.cjs');
|
|
43
43
|
|
|
44
44
|
|
|
45
45
|
|
|
@@ -57,47 +57,11 @@ var _chunkPB5AEMKQcjs = require('./chunk-PB5AEMKQ.cjs');
|
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
|
|
60
|
+
var _chunkMPLMTJY5cjs = require('./chunk-MPLMTJY5.cjs');
|
|
60
61
|
|
|
61
|
-
var _chunkHYPIHCDTcjs = require('./chunk-HYPIHCDT.cjs');
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
var _chunkL47L3ZWJcjs = require('./chunk-L47L3ZWJ.cjs');
|
|
66
|
-
|
|
67
|
-
// src/devtools-loader/log.ts
|
|
68
|
-
function logger2() {
|
|
69
|
-
return _chunkHYPIHCDTcjs.getLogger.call(void 0, "devtools");
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// src/devtools-loader/index.ts
|
|
73
|
-
var DEFAULT_DEVTOOLS_URL = (version = _chunkHYPIHCDTcjs.VERSION) => `https://releases.rivet.dev/rivet/latest/devtools/mod.js?v=${version}`;
|
|
74
|
-
var scriptId = "rivetkit-devtools-script";
|
|
75
|
-
function injectDevtools(config) {
|
|
76
|
-
if (!window) {
|
|
77
|
-
logger2().warn("devtools not available outside browser environment");
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
if (!document.getElementById(scriptId)) {
|
|
81
|
-
const script = document.createElement("script");
|
|
82
|
-
script.id = scriptId;
|
|
83
|
-
script.src = DEFAULT_DEVTOOLS_URL();
|
|
84
|
-
script.async = true;
|
|
85
|
-
document.head.appendChild(script);
|
|
86
|
-
}
|
|
87
|
-
window.__rivetkit = window.__rivetkit || [];
|
|
88
|
-
window.__rivetkit.push(config);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// src/remote-manager-driver/mod.ts
|
|
92
|
-
var _cborx = require('cbor-x'); var cbor2 = _interopRequireWildcard(_cborx); var cbor = _interopRequireWildcard(_cborx); var cbor4 = _interopRequireWildcard(_cborx); var cbor3 = _interopRequireWildcard(_cborx); var cbor5 = _interopRequireWildcard(_cborx);
|
|
93
|
-
var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(_invariant);
|
|
94
|
-
|
|
95
|
-
// src/remote-manager-driver/api-utils.ts
|
|
96
|
-
var _v4 = require('zod/v4'); var _v42 = _interopRequireDefault(_v4);
|
|
97
|
-
|
|
98
|
-
// src/client/utils.ts
|
|
99
62
|
|
|
100
63
|
|
|
64
|
+
var _chunk6G7ZNM27cjs = require('./chunk-6G7ZNM27.cjs');
|
|
101
65
|
|
|
102
66
|
// src/client/errors.ts
|
|
103
67
|
var ActorClientError = class extends Error {
|
|
@@ -152,12 +116,107 @@ var ActorSchedulingError = class extends ActorError {
|
|
|
152
116
|
}
|
|
153
117
|
};
|
|
154
118
|
|
|
119
|
+
// src/client/actor-conn.ts
|
|
120
|
+
var _cborx = require('cbor-x'); var cbor4 = _interopRequireWildcard(_cborx); var cbor3 = _interopRequireWildcard(_cborx); var cbor2 = _interopRequireWildcard(_cborx); var cbor = _interopRequireWildcard(_cborx); var cbor5 = _interopRequireWildcard(_cborx);
|
|
121
|
+
var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(_invariant);
|
|
122
|
+
var _pretry = require('p-retry'); var _pretry2 = _interopRequireDefault(_pretry);
|
|
123
|
+
|
|
124
|
+
// src/client/actor-query.ts
|
|
125
|
+
async function queryActor(c, query, managerDriver) {
|
|
126
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({ msg: "querying actor", query: JSON.stringify(query) });
|
|
127
|
+
let actorOutput;
|
|
128
|
+
if ("getForId" in query) {
|
|
129
|
+
const output = await managerDriver.getForId({
|
|
130
|
+
c,
|
|
131
|
+
name: query.getForId.name,
|
|
132
|
+
actorId: query.getForId.actorId
|
|
133
|
+
});
|
|
134
|
+
if (!output) throw new (0, _chunk6G7ZNM27cjs.ActorNotFound)(query.getForId.actorId);
|
|
135
|
+
actorOutput = output;
|
|
136
|
+
} else if ("getForKey" in query) {
|
|
137
|
+
const existingActor = await managerDriver.getWithKey({
|
|
138
|
+
c,
|
|
139
|
+
name: query.getForKey.name,
|
|
140
|
+
key: query.getForKey.key
|
|
141
|
+
});
|
|
142
|
+
if (!existingActor) {
|
|
143
|
+
throw new (0, _chunk6G7ZNM27cjs.ActorNotFound)(
|
|
144
|
+
`${query.getForKey.name}:${JSON.stringify(query.getForKey.key)}`
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
actorOutput = existingActor;
|
|
148
|
+
} else if ("getOrCreateForKey" in query) {
|
|
149
|
+
const getOrCreateOutput = await managerDriver.getOrCreateWithKey({
|
|
150
|
+
c,
|
|
151
|
+
name: query.getOrCreateForKey.name,
|
|
152
|
+
key: query.getOrCreateForKey.key,
|
|
153
|
+
input: query.getOrCreateForKey.input,
|
|
154
|
+
region: query.getOrCreateForKey.region
|
|
155
|
+
});
|
|
156
|
+
actorOutput = {
|
|
157
|
+
actorId: getOrCreateOutput.actorId
|
|
158
|
+
};
|
|
159
|
+
} else if ("create" in query) {
|
|
160
|
+
const createOutput = await managerDriver.createActor({
|
|
161
|
+
c,
|
|
162
|
+
name: query.create.name,
|
|
163
|
+
key: query.create.key,
|
|
164
|
+
input: query.create.input,
|
|
165
|
+
region: query.create.region
|
|
166
|
+
});
|
|
167
|
+
actorOutput = {
|
|
168
|
+
actorId: createOutput.actorId
|
|
169
|
+
};
|
|
170
|
+
} else {
|
|
171
|
+
throw new (0, _chunk6G7ZNM27cjs.InvalidRequest)("Invalid query format");
|
|
172
|
+
}
|
|
173
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({ msg: "actor query result", actorId: actorOutput.actorId });
|
|
174
|
+
return { actorId: actorOutput.actorId };
|
|
175
|
+
}
|
|
176
|
+
function getActorNameFromQuery(query) {
|
|
177
|
+
if ("getForId" in query) return query.getForId.name;
|
|
178
|
+
if ("getForKey" in query) return query.getForKey.name;
|
|
179
|
+
if ("getOrCreateForKey" in query) return query.getOrCreateForKey.name;
|
|
180
|
+
if ("create" in query) return query.create.name;
|
|
181
|
+
throw new (0, _chunk6G7ZNM27cjs.InvalidRequest)("Invalid query format");
|
|
182
|
+
}
|
|
183
|
+
async function checkForSchedulingError(group, code, actorId, query, driver) {
|
|
184
|
+
const name = getActorNameFromQuery(query);
|
|
185
|
+
try {
|
|
186
|
+
const actor = await driver.getForId({ name, actorId });
|
|
187
|
+
if (actor == null ? void 0 : actor.error) {
|
|
188
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).info({
|
|
189
|
+
msg: "found actor scheduling error",
|
|
190
|
+
actorId,
|
|
191
|
+
error: actor.error
|
|
192
|
+
});
|
|
193
|
+
return new ActorSchedulingError(group, code, actorId, actor.error);
|
|
194
|
+
}
|
|
195
|
+
} catch (err) {
|
|
196
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).warn({
|
|
197
|
+
msg: "failed to fetch actor details for scheduling error check",
|
|
198
|
+
actorId,
|
|
199
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, err)
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
return null;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
// src/client/actor-handle.ts
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
// src/client/queue.ts
|
|
210
|
+
|
|
211
|
+
|
|
155
212
|
// src/client/utils.ts
|
|
213
|
+
|
|
214
|
+
|
|
156
215
|
function parseWebSocketCloseReason(reason) {
|
|
157
216
|
const [mainPart, rayId] = reason.split("#");
|
|
158
217
|
const [group, code] = mainPart.split(".");
|
|
159
218
|
if (!group || !code) {
|
|
160
|
-
|
|
219
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).warn({ msg: "failed to parse close reason", reason });
|
|
161
220
|
return void 0;
|
|
162
221
|
}
|
|
163
222
|
return {
|
|
@@ -179,10 +238,10 @@ function messageLength(message) {
|
|
|
179
238
|
if (typeof message === "string") {
|
|
180
239
|
return message.length;
|
|
181
240
|
}
|
|
182
|
-
|
|
241
|
+
_chunkMPLMTJY5cjs.assertUnreachable.call(void 0, message);
|
|
183
242
|
}
|
|
184
243
|
async function sendHttpRequest(opts) {
|
|
185
|
-
|
|
244
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
186
245
|
msg: "sending http request",
|
|
187
246
|
url: opts.url,
|
|
188
247
|
encoding: opts.encoding
|
|
@@ -191,8 +250,8 @@ async function sendHttpRequest(opts) {
|
|
|
191
250
|
let bodyData;
|
|
192
251
|
if (opts.method === "POST" || opts.method === "PUT") {
|
|
193
252
|
_invariant2.default.call(void 0, opts.body !== void 0, "missing body");
|
|
194
|
-
contentType =
|
|
195
|
-
bodyData =
|
|
253
|
+
contentType = _chunkHNE2AK6Ccjs.contentTypeForEncoding.call(void 0, opts.encoding);
|
|
254
|
+
bodyData = _chunkHNE2AK6Ccjs.serializeWithEncoding.call(void 0,
|
|
196
255
|
opts.encoding,
|
|
197
256
|
opts.body,
|
|
198
257
|
opts.requestVersionedDataHandler,
|
|
@@ -212,7 +271,7 @@ async function sendHttpRequest(opts) {
|
|
|
212
271
|
...contentType ? {
|
|
213
272
|
"Content-Type": contentType
|
|
214
273
|
} : {},
|
|
215
|
-
"User-Agent":
|
|
274
|
+
"User-Agent": _chunkMPLMTJY5cjs.httpUserAgent.call(void 0, )
|
|
216
275
|
},
|
|
217
276
|
body: bodyData,
|
|
218
277
|
credentials: "include",
|
|
@@ -230,11 +289,11 @@ async function sendHttpRequest(opts) {
|
|
|
230
289
|
const rayId = response.headers.get("x-rivet-ray-id");
|
|
231
290
|
const encoding = (contentType2 == null ? void 0 : contentType2.includes("application/json")) ? "json" : opts.encoding;
|
|
232
291
|
try {
|
|
233
|
-
const responseData =
|
|
292
|
+
const responseData = _chunkHNE2AK6Ccjs.deserializeWithEncoding.call(void 0,
|
|
234
293
|
encoding,
|
|
235
294
|
new Uint8Array(bufferResponse),
|
|
236
|
-
|
|
237
|
-
|
|
295
|
+
_chunkHNE2AK6Ccjs.HTTP_RESPONSE_ERROR_VERSIONED,
|
|
296
|
+
_chunkHNE2AK6Ccjs.HttpResponseErrorSchema,
|
|
238
297
|
// JSON: metadata is already unknown
|
|
239
298
|
(json) => json,
|
|
240
299
|
// BARE: decode ArrayBuffer metadata to unknown
|
|
@@ -276,7 +335,7 @@ ${textResponse}`
|
|
|
276
335
|
}
|
|
277
336
|
try {
|
|
278
337
|
const buffer = new Uint8Array(await response.arrayBuffer());
|
|
279
|
-
return
|
|
338
|
+
return _chunkHNE2AK6Ccjs.deserializeWithEncoding.call(void 0,
|
|
280
339
|
opts.encoding,
|
|
281
340
|
buffer,
|
|
282
341
|
opts.responseVersionedDataHandler,
|
|
@@ -291,804 +350,664 @@ ${textResponse}`
|
|
|
291
350
|
}
|
|
292
351
|
}
|
|
293
352
|
|
|
294
|
-
// src/
|
|
295
|
-
function
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
353
|
+
// src/client/queue.ts
|
|
354
|
+
function createQueueSender(senderOptions) {
|
|
355
|
+
async function send(name, body, options) {
|
|
356
|
+
const wait = _nullishCoalesce((options == null ? void 0 : options.wait), () => ( false));
|
|
357
|
+
const timeout = options == null ? void 0 : options.timeout;
|
|
358
|
+
const result = await sendHttpRequest({
|
|
359
|
+
url: `http://actor/queue/${encodeURIComponent(name)}`,
|
|
360
|
+
method: "POST",
|
|
361
|
+
headers: {
|
|
362
|
+
[_chunkHNE2AK6Ccjs.HEADER_ENCODING]: senderOptions.encoding,
|
|
363
|
+
...senderOptions.params !== void 0 ? {
|
|
364
|
+
[_chunkHNE2AK6Ccjs.HEADER_CONN_PARAMS]: JSON.stringify(
|
|
365
|
+
senderOptions.params
|
|
366
|
+
)
|
|
367
|
+
} : {}
|
|
368
|
+
},
|
|
369
|
+
body: { body, wait, timeout },
|
|
370
|
+
encoding: senderOptions.encoding,
|
|
371
|
+
customFetch: senderOptions.customFetch,
|
|
372
|
+
signal: options == null ? void 0 : options.signal,
|
|
373
|
+
requestVersion: _chunkHNE2AK6Ccjs.CURRENT_VERSION,
|
|
374
|
+
requestVersionedDataHandler: _chunkHNE2AK6Ccjs.HTTP_QUEUE_SEND_REQUEST_VERSIONED,
|
|
375
|
+
responseVersion: _chunkHNE2AK6Ccjs.CURRENT_VERSION,
|
|
376
|
+
responseVersionedDataHandler: _chunkHNE2AK6Ccjs.HTTP_QUEUE_SEND_RESPONSE_VERSIONED,
|
|
377
|
+
requestZodSchema: _chunkHNE2AK6Ccjs.HttpQueueSendRequestSchema,
|
|
378
|
+
responseZodSchema: _chunkHNE2AK6Ccjs.HttpQueueSendResponseSchema,
|
|
379
|
+
requestToJson: (value) => ({
|
|
380
|
+
...value,
|
|
381
|
+
name
|
|
382
|
+
}),
|
|
383
|
+
requestToBare: (value) => ({
|
|
384
|
+
name: _nullishCoalesce(value.name, () => ( name)),
|
|
385
|
+
body: _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0, cbor2.encode(value.body)),
|
|
386
|
+
wait: _nullishCoalesce(value.wait, () => ( false)),
|
|
387
|
+
timeout: value.timeout !== void 0 ? BigInt(value.timeout) : null
|
|
388
|
+
}),
|
|
389
|
+
responseFromJson: (json) => {
|
|
390
|
+
if (json.response === void 0) {
|
|
391
|
+
return { status: json.status };
|
|
392
|
+
}
|
|
393
|
+
return {
|
|
394
|
+
status: json.status,
|
|
395
|
+
response: json.response
|
|
396
|
+
};
|
|
397
|
+
},
|
|
398
|
+
responseFromBare: (bare) => {
|
|
399
|
+
if (bare.response === null || bare.response === void 0) {
|
|
400
|
+
return { status: bare.status };
|
|
401
|
+
}
|
|
402
|
+
return {
|
|
403
|
+
status: bare.status,
|
|
404
|
+
response: cbor2.decode(new Uint8Array(bare.response))
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
});
|
|
408
|
+
if (wait) {
|
|
409
|
+
return result;
|
|
410
|
+
}
|
|
411
|
+
return;
|
|
306
412
|
}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
return _nullishCoalesce(config.endpoint, () => ( "http://127.0.0.1:6420"));
|
|
310
|
-
}
|
|
311
|
-
async function apiCall(config, method, path, body) {
|
|
312
|
-
const endpoint = getEndpoint(config);
|
|
313
|
-
const url = _chunkHYPIHCDTcjs.combineUrlPath.call(void 0, endpoint, path, {
|
|
314
|
-
namespace: config.namespace
|
|
315
|
-
});
|
|
316
|
-
logger3().debug({ msg: "making api call", method, url });
|
|
317
|
-
const headers = {
|
|
318
|
-
...config.headers
|
|
413
|
+
return {
|
|
414
|
+
send
|
|
319
415
|
};
|
|
320
|
-
if (config.token) {
|
|
321
|
-
headers.Authorization = `Bearer ${config.token}`;
|
|
322
|
-
}
|
|
323
|
-
return await sendHttpRequest({
|
|
324
|
-
method,
|
|
325
|
-
url,
|
|
326
|
-
headers,
|
|
327
|
-
body,
|
|
328
|
-
encoding: "json",
|
|
329
|
-
skipParseResponse: false,
|
|
330
|
-
requestVersionedDataHandler: void 0,
|
|
331
|
-
requestVersion: void 0,
|
|
332
|
-
responseVersionedDataHandler: void 0,
|
|
333
|
-
responseVersion: void 0,
|
|
334
|
-
requestZodSchema: _v4.z.any(),
|
|
335
|
-
responseZodSchema: _v4.z.any(),
|
|
336
|
-
// Identity conversions (passthrough for generic API calls)
|
|
337
|
-
requestToJson: (value) => value,
|
|
338
|
-
requestToBare: (value) => value,
|
|
339
|
-
responseFromJson: (value) => value,
|
|
340
|
-
responseFromBare: (value) => value
|
|
341
|
-
});
|
|
342
416
|
}
|
|
343
417
|
|
|
344
|
-
// src/
|
|
345
|
-
function buildActorGatewayUrl(endpoint, actorId, token, path = "") {
|
|
346
|
-
const tokenSegment = token !== void 0 ? `@${encodeURIComponent(token)}` : "";
|
|
347
|
-
const gatewayPath = `/gateway/${encodeURIComponent(actorId)}${tokenSegment}${path}`;
|
|
348
|
-
return _chunkHYPIHCDTcjs.combineUrlPath.call(void 0, endpoint, gatewayPath);
|
|
349
|
-
}
|
|
350
|
-
async function openWebSocketToActor(runConfig, path, actorId, encoding, params) {
|
|
351
|
-
const WebSocket2 = await _chunkJC6BEPE7cjs.importWebSocket.call(void 0, );
|
|
352
|
-
const endpoint = getEndpoint(runConfig);
|
|
353
|
-
const guardUrl = buildActorGatewayUrl(
|
|
354
|
-
endpoint,
|
|
355
|
-
actorId,
|
|
356
|
-
runConfig.token,
|
|
357
|
-
path
|
|
358
|
-
);
|
|
359
|
-
logger3().debug({
|
|
360
|
-
msg: "opening websocket to actor via guard",
|
|
361
|
-
actorId,
|
|
362
|
-
path,
|
|
363
|
-
guardUrl
|
|
364
|
-
});
|
|
365
|
-
const ws = new WebSocket2(
|
|
366
|
-
guardUrl,
|
|
367
|
-
buildWebSocketProtocols(runConfig, encoding, params)
|
|
368
|
-
);
|
|
369
|
-
ws.binaryType = "arraybuffer";
|
|
370
|
-
logger3().debug({ msg: "websocket connection opened", actorId });
|
|
371
|
-
return ws;
|
|
372
|
-
}
|
|
373
|
-
function buildWebSocketProtocols(runConfig, encoding, params) {
|
|
374
|
-
const protocols = [];
|
|
375
|
-
protocols.push(_chunkTI5PXQGGcjs.WS_PROTOCOL_STANDARD);
|
|
376
|
-
protocols.push(`${_chunkTI5PXQGGcjs.WS_PROTOCOL_ENCODING}${encoding}`);
|
|
377
|
-
if (params) {
|
|
378
|
-
protocols.push(
|
|
379
|
-
`${_chunkTI5PXQGGcjs.WS_PROTOCOL_CONN_PARAMS}${encodeURIComponent(JSON.stringify(params))}`
|
|
380
|
-
);
|
|
381
|
-
}
|
|
382
|
-
return protocols;
|
|
383
|
-
}
|
|
418
|
+
// src/client/raw-utils.ts
|
|
384
419
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
420
|
+
async function rawHttpFetch(driver, actorQuery, params, input, init) {
|
|
421
|
+
let path;
|
|
422
|
+
let mergedInit = init || {};
|
|
423
|
+
if (typeof input === "string") {
|
|
424
|
+
path = input;
|
|
425
|
+
} else if (input instanceof URL) {
|
|
426
|
+
path = input.pathname + input.search;
|
|
427
|
+
} else if (input instanceof Request) {
|
|
428
|
+
const url = new URL(input.url);
|
|
429
|
+
path = url.pathname + url.search;
|
|
430
|
+
const requestHeaders = new Headers(input.headers);
|
|
431
|
+
const initHeaders = new Headers((init == null ? void 0 : init.headers) || {});
|
|
432
|
+
const mergedHeaders = new Headers(requestHeaders);
|
|
433
|
+
initHeaders.forEach((value, key) => {
|
|
434
|
+
mergedHeaders.set(key, value);
|
|
435
|
+
});
|
|
436
|
+
mergedInit = {
|
|
437
|
+
method: input.method,
|
|
438
|
+
body: input.body,
|
|
439
|
+
mode: input.mode,
|
|
440
|
+
credentials: input.credentials,
|
|
441
|
+
redirect: input.redirect,
|
|
442
|
+
referrer: input.referrer,
|
|
443
|
+
referrerPolicy: input.referrerPolicy,
|
|
444
|
+
integrity: input.integrity,
|
|
445
|
+
keepalive: input.keepalive,
|
|
446
|
+
signal: input.signal,
|
|
447
|
+
...mergedInit,
|
|
448
|
+
// init overrides Request properties
|
|
449
|
+
headers: mergedHeaders
|
|
450
|
+
// headers must be set after spread to ensure proper merge
|
|
451
|
+
};
|
|
452
|
+
if (mergedInit.body) {
|
|
453
|
+
mergedInit.duplex = "half";
|
|
410
454
|
}
|
|
455
|
+
} else {
|
|
456
|
+
throw new TypeError("Invalid input type for fetch");
|
|
411
457
|
}
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
})
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
458
|
+
try {
|
|
459
|
+
const { actorId } = await queryActor(void 0, actorQuery, driver);
|
|
460
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({ msg: "found actor for raw http", actorId });
|
|
461
|
+
_invariant2.default.call(void 0, actorId, "Missing actor ID");
|
|
462
|
+
const normalizedPath = path.startsWith("/") ? path.slice(1) : path;
|
|
463
|
+
const url = new URL(`http://actor/request/${normalizedPath}`);
|
|
464
|
+
const proxyRequestHeaders = new Headers(mergedInit.headers);
|
|
465
|
+
if (params) {
|
|
466
|
+
proxyRequestHeaders.set(_chunkHNE2AK6Ccjs.HEADER_CONN_PARAMS, JSON.stringify(params));
|
|
467
|
+
}
|
|
468
|
+
const proxyRequest = new Request(url, {
|
|
469
|
+
...mergedInit,
|
|
470
|
+
headers: proxyRequestHeaders
|
|
471
|
+
});
|
|
472
|
+
return driver.sendRequest(actorId, proxyRequest);
|
|
473
|
+
} catch (err) {
|
|
474
|
+
const { group, code, message, metadata } = _chunkMPLMTJY5cjs.deconstructError.call(void 0,
|
|
475
|
+
err,
|
|
476
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ),
|
|
477
|
+
{},
|
|
478
|
+
true
|
|
479
|
+
);
|
|
480
|
+
throw new ActorError(group, code, message, metadata);
|
|
433
481
|
}
|
|
434
|
-
return headers;
|
|
435
|
-
}
|
|
436
|
-
|
|
437
|
-
// src/remote-manager-driver/api-endpoints.ts
|
|
438
|
-
async function getActor(config, _, actorId) {
|
|
439
|
-
return apiCall(
|
|
440
|
-
config,
|
|
441
|
-
"GET",
|
|
442
|
-
`/actors?actor_ids=${encodeURIComponent(actorId)}`
|
|
443
|
-
);
|
|
444
|
-
}
|
|
445
|
-
async function getActorByKey(config, name, key) {
|
|
446
|
-
const serializedKey = _chunkTI5PXQGGcjs.serializeActorKey.call(void 0, key);
|
|
447
|
-
return apiCall(
|
|
448
|
-
config,
|
|
449
|
-
"GET",
|
|
450
|
-
`/actors?name=${encodeURIComponent(name)}&key=${encodeURIComponent(serializedKey)}`
|
|
451
|
-
);
|
|
452
|
-
}
|
|
453
|
-
async function listActorsByName(config, name) {
|
|
454
|
-
return apiCall(
|
|
455
|
-
config,
|
|
456
|
-
"GET",
|
|
457
|
-
`/actors?name=${encodeURIComponent(name)}`
|
|
458
|
-
);
|
|
459
|
-
}
|
|
460
|
-
async function getOrCreateActor(config, request) {
|
|
461
|
-
return apiCall(
|
|
462
|
-
config,
|
|
463
|
-
"PUT",
|
|
464
|
-
`/actors`,
|
|
465
|
-
request
|
|
466
|
-
);
|
|
467
|
-
}
|
|
468
|
-
async function createActor(config, request) {
|
|
469
|
-
return apiCall(
|
|
470
|
-
config,
|
|
471
|
-
"POST",
|
|
472
|
-
`/actors`,
|
|
473
|
-
request
|
|
474
|
-
);
|
|
475
|
-
}
|
|
476
|
-
async function destroyActor(config, actorId) {
|
|
477
|
-
return apiCall(
|
|
478
|
-
config,
|
|
479
|
-
"DELETE",
|
|
480
|
-
`/actors/${encodeURIComponent(actorId)}`
|
|
481
|
-
);
|
|
482
|
-
}
|
|
483
|
-
async function getMetadata(config) {
|
|
484
|
-
return apiCall(config, "GET", `/metadata`);
|
|
485
|
-
}
|
|
486
|
-
async function getDatacenters(config) {
|
|
487
|
-
return apiCall(config, "GET", `/datacenters`);
|
|
488
482
|
}
|
|
489
|
-
async function
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
}
|
|
504
|
-
|
|
505
|
-
// src/remote-manager-driver/metadata.ts
|
|
506
|
-
var _pretry = require('p-retry'); var _pretry2 = _interopRequireDefault(_pretry);
|
|
507
|
-
var metadataLookupCache = /* @__PURE__ */ new Map();
|
|
508
|
-
async function lookupMetadataCached(config) {
|
|
509
|
-
const endpoint = getEndpoint(config);
|
|
510
|
-
const existingPromise = metadataLookupCache.get(endpoint);
|
|
511
|
-
if (existingPromise) {
|
|
512
|
-
return existingPromise;
|
|
513
|
-
}
|
|
514
|
-
const metadataLookupPromise = _pretry2.default.call(void 0,
|
|
515
|
-
async () => {
|
|
516
|
-
logger3().debug({
|
|
517
|
-
msg: "fetching metadata",
|
|
518
|
-
endpoint
|
|
519
|
-
});
|
|
520
|
-
const metadataData = await getMetadata(config);
|
|
521
|
-
logger3().debug({
|
|
522
|
-
msg: "received metadata",
|
|
523
|
-
endpoint,
|
|
524
|
-
clientEndpoint: metadataData.clientEndpoint
|
|
525
|
-
});
|
|
526
|
-
return metadataData;
|
|
527
|
-
},
|
|
528
|
-
{
|
|
529
|
-
forever: true,
|
|
530
|
-
minTimeout: 500,
|
|
531
|
-
maxTimeout: 15e3,
|
|
532
|
-
onFailedAttempt: (error) => {
|
|
533
|
-
if (error.attemptNumber > 1) {
|
|
534
|
-
logger3().warn({
|
|
535
|
-
msg: "failed to fetch metadata, retrying",
|
|
536
|
-
endpoint,
|
|
537
|
-
attempt: error.attemptNumber,
|
|
538
|
-
error: _chunkHYPIHCDTcjs.stringifyError.call(void 0, error)
|
|
539
|
-
});
|
|
540
|
-
}
|
|
541
|
-
}
|
|
483
|
+
async function rawWebSocket(driver, actorQuery, params, path, protocols) {
|
|
484
|
+
const encoding = "bare";
|
|
485
|
+
const { actorId } = await queryActor(void 0, actorQuery, driver);
|
|
486
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({ msg: "found actor for action", actorId });
|
|
487
|
+
_invariant2.default.call(void 0, actorId, "Missing actor ID");
|
|
488
|
+
let pathPortion = "";
|
|
489
|
+
let queryPortion = "";
|
|
490
|
+
if (path) {
|
|
491
|
+
const queryIndex = path.indexOf("?");
|
|
492
|
+
if (queryIndex !== -1) {
|
|
493
|
+
pathPortion = path.substring(0, queryIndex);
|
|
494
|
+
queryPortion = path.substring(queryIndex);
|
|
495
|
+
} else {
|
|
496
|
+
pathPortion = path;
|
|
542
497
|
}
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
498
|
+
if (pathPortion.startsWith("/")) {
|
|
499
|
+
pathPortion = pathPortion.slice(1);
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
const fullPath = `${_chunkHNE2AK6Ccjs.PATH_WEBSOCKET_PREFIX}${pathPortion}${queryPortion}`;
|
|
503
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
504
|
+
msg: "opening websocket",
|
|
505
|
+
actorId,
|
|
506
|
+
encoding,
|
|
507
|
+
path: fullPath
|
|
508
|
+
});
|
|
509
|
+
const ws = await driver.openWebSocket(fullPath, actorId, encoding, params);
|
|
510
|
+
return ws;
|
|
546
511
|
}
|
|
547
512
|
|
|
548
|
-
// src/
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
return;
|
|
580
|
-
}
|
|
581
|
-
resolve();
|
|
582
|
-
});
|
|
583
|
-
targetWs.addEventListener("error", (error) => {
|
|
584
|
-
logger3().warn({
|
|
585
|
-
msg: "target websocket error during connection",
|
|
586
|
-
targetUrl
|
|
587
|
-
});
|
|
588
|
-
reject(error);
|
|
589
|
-
});
|
|
590
|
-
});
|
|
591
|
-
state.targetWs.addEventListener("message", (event2) => {
|
|
592
|
-
if (typeof event2.data === "string" || event2.data instanceof ArrayBuffer) {
|
|
593
|
-
clientWs.send(event2.data);
|
|
594
|
-
} else if (event2.data instanceof Blob) {
|
|
595
|
-
event2.data.arrayBuffer().then((buffer) => {
|
|
596
|
-
clientWs.send(buffer);
|
|
597
|
-
});
|
|
598
|
-
}
|
|
599
|
-
});
|
|
600
|
-
state.targetWs.addEventListener("close", (event2) => {
|
|
601
|
-
logger3().debug({
|
|
602
|
-
msg: "target websocket closed",
|
|
603
|
-
targetUrl,
|
|
604
|
-
code: event2.code,
|
|
605
|
-
reason: event2.reason
|
|
606
|
-
});
|
|
607
|
-
closeWebSocketIfOpen(clientWs, event2.code, event2.reason);
|
|
608
|
-
});
|
|
609
|
-
state.targetWs.addEventListener("error", (error) => {
|
|
610
|
-
logger3().error({
|
|
611
|
-
msg: "target websocket error",
|
|
612
|
-
targetUrl,
|
|
613
|
-
error: _chunkHYPIHCDTcjs.stringifyError.call(void 0, error)
|
|
614
|
-
});
|
|
615
|
-
closeWebSocketIfOpen(clientWs, 1011, "Target WebSocket error");
|
|
616
|
-
});
|
|
617
|
-
},
|
|
618
|
-
onMessage: async (event, clientWs) => {
|
|
619
|
-
if (!state.targetWs || !state.connectPromise) {
|
|
620
|
-
logger3().error({
|
|
621
|
-
msg: "websocket state not initialized",
|
|
622
|
-
targetUrl
|
|
623
|
-
});
|
|
624
|
-
return;
|
|
625
|
-
}
|
|
626
|
-
try {
|
|
627
|
-
await state.connectPromise;
|
|
628
|
-
if (state.targetWs.readyState === WebSocket2.OPEN) {
|
|
629
|
-
state.targetWs.send(event.data);
|
|
630
|
-
} else {
|
|
631
|
-
logger3().warn({
|
|
632
|
-
msg: "target websocket not open",
|
|
633
|
-
targetUrl,
|
|
634
|
-
readyState: state.targetWs.readyState
|
|
635
|
-
});
|
|
636
|
-
}
|
|
637
|
-
} catch (error) {
|
|
638
|
-
logger3().error({
|
|
639
|
-
msg: "failed to connect to target websocket",
|
|
640
|
-
targetUrl,
|
|
641
|
-
error
|
|
642
|
-
});
|
|
643
|
-
closeWebSocketIfOpen(
|
|
644
|
-
clientWs,
|
|
645
|
-
1011,
|
|
646
|
-
"Failed to connect to target"
|
|
513
|
+
// src/client/actor-handle.ts
|
|
514
|
+
var ActorHandleRaw = class {
|
|
515
|
+
#client;
|
|
516
|
+
#driver;
|
|
517
|
+
#encoding;
|
|
518
|
+
#actorQuery;
|
|
519
|
+
#params;
|
|
520
|
+
#getParams;
|
|
521
|
+
#queueSender;
|
|
522
|
+
/**
|
|
523
|
+
* Do not call this directly.
|
|
524
|
+
*
|
|
525
|
+
* Creates an instance of ActorHandleRaw.
|
|
526
|
+
*
|
|
527
|
+
* @protected
|
|
528
|
+
*/
|
|
529
|
+
constructor(client, driver, params, getParams, encoding, actorQuery) {
|
|
530
|
+
this.#client = client;
|
|
531
|
+
this.#driver = driver;
|
|
532
|
+
this.#encoding = encoding;
|
|
533
|
+
this.#actorQuery = actorQuery;
|
|
534
|
+
this.#params = params;
|
|
535
|
+
this.#getParams = getParams;
|
|
536
|
+
this.#queueSender = createQueueSender({
|
|
537
|
+
encoding: this.#encoding,
|
|
538
|
+
params: this.#params,
|
|
539
|
+
customFetch: async (request) => {
|
|
540
|
+
const { actorId } = await queryActor(
|
|
541
|
+
void 0,
|
|
542
|
+
this.#actorQuery,
|
|
543
|
+
this.#driver
|
|
647
544
|
);
|
|
545
|
+
return this.#driver.sendRequest(actorId, request);
|
|
648
546
|
}
|
|
649
|
-
}
|
|
650
|
-
onClose: (event, clientWs) => {
|
|
651
|
-
logger3().debug({
|
|
652
|
-
msg: "client websocket closed",
|
|
653
|
-
targetUrl,
|
|
654
|
-
code: event.code,
|
|
655
|
-
reason: event.reason,
|
|
656
|
-
wasClean: event.wasClean
|
|
657
|
-
});
|
|
658
|
-
if (state.targetWs) {
|
|
659
|
-
if (state.targetWs.readyState === WebSocket2.OPEN || state.targetWs.readyState === WebSocket2.CONNECTING) {
|
|
660
|
-
state.targetWs.close(
|
|
661
|
-
1e3,
|
|
662
|
-
event.reason || "Client disconnected"
|
|
663
|
-
);
|
|
664
|
-
}
|
|
665
|
-
}
|
|
666
|
-
},
|
|
667
|
-
onError: (event, clientWs) => {
|
|
668
|
-
logger3().error({ msg: "client websocket error", targetUrl, event });
|
|
669
|
-
if (state.targetWs) {
|
|
670
|
-
if (state.targetWs.readyState === WebSocket2.OPEN) {
|
|
671
|
-
state.targetWs.close(1011, "Client WebSocket error");
|
|
672
|
-
} else if (state.targetWs.readyState === WebSocket2.CONNECTING) {
|
|
673
|
-
state.targetWs.close();
|
|
674
|
-
}
|
|
675
|
-
}
|
|
676
|
-
}
|
|
677
|
-
};
|
|
678
|
-
}
|
|
679
|
-
function closeWebSocketIfOpen(ws, code, reason) {
|
|
680
|
-
if (ws.readyState === 1) {
|
|
681
|
-
ws.close(code, reason);
|
|
682
|
-
} else if ("close" in ws && ws.readyState === WebSocket.OPEN) {
|
|
683
|
-
ws.close(code, reason);
|
|
547
|
+
});
|
|
684
548
|
}
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
var RemoteManagerDriver = class {
|
|
689
|
-
#config;
|
|
690
|
-
#metadataPromise;
|
|
691
|
-
constructor(runConfig) {
|
|
692
|
-
if (_chunkHYPIHCDTcjs.getNextPhase.call(void 0, ) === "phase-production-build") {
|
|
693
|
-
logger3().info(
|
|
694
|
-
"detected next.js build phase, disabling health check"
|
|
695
|
-
);
|
|
696
|
-
runConfig.disableMetadataLookup = true;
|
|
697
|
-
}
|
|
698
|
-
this.#config = { ...runConfig };
|
|
699
|
-
if (!runConfig.disableMetadataLookup) {
|
|
700
|
-
this.#metadataPromise = lookupMetadataCached(this.#config).then(
|
|
701
|
-
(metadataData) => {
|
|
702
|
-
if (metadataData.clientEndpoint) {
|
|
703
|
-
this.#config.endpoint = metadataData.clientEndpoint;
|
|
704
|
-
if (metadataData.clientNamespace) {
|
|
705
|
-
this.#config.namespace = metadataData.clientNamespace;
|
|
706
|
-
}
|
|
707
|
-
if (metadataData.clientToken) {
|
|
708
|
-
this.#config.token = metadataData.clientToken;
|
|
709
|
-
}
|
|
710
|
-
logger3().info({
|
|
711
|
-
msg: "overriding client endpoint",
|
|
712
|
-
endpoint: metadataData.clientEndpoint,
|
|
713
|
-
namespace: metadataData.clientNamespace,
|
|
714
|
-
token: metadataData.clientToken
|
|
715
|
-
});
|
|
716
|
-
}
|
|
717
|
-
logger3().info({
|
|
718
|
-
msg: "connected to rivetkit manager",
|
|
719
|
-
runtime: metadataData.runtime,
|
|
720
|
-
version: metadataData.version,
|
|
721
|
-
runner: metadataData.runner
|
|
722
|
-
});
|
|
723
|
-
}
|
|
724
|
-
);
|
|
549
|
+
async #resolveConnectionParams() {
|
|
550
|
+
if (this.#getParams) {
|
|
551
|
+
return await this.#getParams();
|
|
725
552
|
}
|
|
553
|
+
return this.#params;
|
|
726
554
|
}
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
name,
|
|
730
|
-
actorId
|
|
731
|
-
}) {
|
|
732
|
-
if (this.#metadataPromise) {
|
|
733
|
-
await this.#metadataPromise;
|
|
734
|
-
}
|
|
735
|
-
const response = await getActor(this.#config, name, actorId);
|
|
736
|
-
const actor = response.actors[0];
|
|
737
|
-
if (!actor) return void 0;
|
|
738
|
-
if (actor.name !== name) {
|
|
739
|
-
logger3().debug({
|
|
740
|
-
msg: "actor name mismatch from api",
|
|
741
|
-
actorId,
|
|
742
|
-
apiName: actor.name,
|
|
743
|
-
requestedName: name
|
|
744
|
-
});
|
|
745
|
-
return void 0;
|
|
746
|
-
}
|
|
747
|
-
return apiActorToOutput(actor);
|
|
555
|
+
send(name, body, options) {
|
|
556
|
+
return this.#queueSender.send(name, body, options);
|
|
748
557
|
}
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
558
|
+
/**
|
|
559
|
+
* Call a raw action. This method sends an HTTP request to invoke the named action.
|
|
560
|
+
*
|
|
561
|
+
* @see {@link ActorHandle}
|
|
562
|
+
* @template Args - The type of arguments to pass to the action function.
|
|
563
|
+
* @template Response - The type of the response returned by the action function.
|
|
564
|
+
*/
|
|
565
|
+
async action(opts) {
|
|
566
|
+
let actorId;
|
|
758
567
|
try {
|
|
759
|
-
const
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
568
|
+
const result = await queryActor(
|
|
569
|
+
void 0,
|
|
570
|
+
this.#actorQuery,
|
|
571
|
+
this.#driver
|
|
572
|
+
);
|
|
573
|
+
actorId = result.actorId;
|
|
574
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({ msg: "found actor for action", actorId });
|
|
575
|
+
_invariant2.default.call(void 0, actorId, "Missing actor ID");
|
|
576
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
577
|
+
msg: "handling action",
|
|
578
|
+
name: opts.name,
|
|
579
|
+
encoding: this.#encoding
|
|
580
|
+
});
|
|
581
|
+
const responseData = await sendHttpRequest({
|
|
582
|
+
url: `http://actor/action/${encodeURIComponent(opts.name)}`,
|
|
583
|
+
method: "POST",
|
|
584
|
+
headers: {
|
|
585
|
+
[_chunkHNE2AK6Ccjs.HEADER_ENCODING]: this.#encoding,
|
|
586
|
+
...this.#params !== void 0 ? { [_chunkHNE2AK6Ccjs.HEADER_CONN_PARAMS]: JSON.stringify(this.#params) } : {}
|
|
587
|
+
},
|
|
588
|
+
body: opts.args,
|
|
589
|
+
encoding: this.#encoding,
|
|
590
|
+
customFetch: this.#driver.sendRequest.bind(
|
|
591
|
+
this.#driver,
|
|
592
|
+
actorId
|
|
593
|
+
),
|
|
594
|
+
signal: opts == null ? void 0 : opts.signal,
|
|
595
|
+
requestVersion: _chunkHNE2AK6Ccjs.CURRENT_VERSION,
|
|
596
|
+
requestVersionedDataHandler: _chunkHNE2AK6Ccjs.HTTP_ACTION_REQUEST_VERSIONED,
|
|
597
|
+
responseVersion: _chunkHNE2AK6Ccjs.CURRENT_VERSION,
|
|
598
|
+
responseVersionedDataHandler: _chunkHNE2AK6Ccjs.HTTP_ACTION_RESPONSE_VERSIONED,
|
|
599
|
+
requestZodSchema: _chunkHNE2AK6Ccjs.HttpActionRequestSchema,
|
|
600
|
+
responseZodSchema: _chunkHNE2AK6Ccjs.HttpActionResponseSchema,
|
|
601
|
+
// JSON Request: args is the raw value
|
|
602
|
+
requestToJson: (args) => ({
|
|
603
|
+
args
|
|
604
|
+
}),
|
|
605
|
+
// BARE Request: args needs to be CBOR-encoded
|
|
606
|
+
requestToBare: (args) => ({
|
|
607
|
+
args: _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0, cbor3.encode(args))
|
|
608
|
+
}),
|
|
609
|
+
// JSON Response: output is the raw value
|
|
610
|
+
responseFromJson: (json) => json.output,
|
|
611
|
+
// BARE Response: output is ArrayBuffer that needs CBOR-decoding
|
|
612
|
+
responseFromBare: (bare) => cbor3.decode(new Uint8Array(bare.output))
|
|
767
613
|
});
|
|
768
|
-
return
|
|
769
|
-
} catch (
|
|
770
|
-
|
|
771
|
-
|
|
614
|
+
return responseData;
|
|
615
|
+
} catch (err) {
|
|
616
|
+
const { group, code, message, metadata } = _chunkMPLMTJY5cjs.deconstructError.call(void 0,
|
|
617
|
+
err,
|
|
618
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ),
|
|
619
|
+
{},
|
|
620
|
+
true
|
|
621
|
+
);
|
|
622
|
+
if (actorId && isSchedulingError(group, code)) {
|
|
623
|
+
const schedulingError = await checkForSchedulingError(
|
|
624
|
+
group,
|
|
625
|
+
code,
|
|
626
|
+
actorId,
|
|
627
|
+
this.#actorQuery,
|
|
628
|
+
this.#driver
|
|
629
|
+
);
|
|
630
|
+
if (schedulingError) {
|
|
631
|
+
throw schedulingError;
|
|
632
|
+
}
|
|
772
633
|
}
|
|
773
|
-
throw
|
|
634
|
+
throw new ActorError(group, code, message, metadata);
|
|
774
635
|
}
|
|
775
636
|
}
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
const { actor, created } = await getOrCreateActor(this.#config, {
|
|
787
|
-
datacenter: region,
|
|
788
|
-
name,
|
|
789
|
-
key: _chunkTI5PXQGGcjs.serializeActorKey.call(void 0, key),
|
|
790
|
-
runner_name_selector: this.#config.runnerName,
|
|
791
|
-
input: actorInput ? _chunkTI5PXQGGcjs.uint8ArrayToBase64.call(void 0, cbor2.encode(actorInput)) : void 0,
|
|
792
|
-
crash_policy: "sleep"
|
|
793
|
-
});
|
|
794
|
-
logger3().info({
|
|
795
|
-
msg: "getOrCreateWithKey: actor ready",
|
|
796
|
-
actorId: actor.actor_id,
|
|
797
|
-
name,
|
|
798
|
-
key,
|
|
799
|
-
created
|
|
637
|
+
/**
|
|
638
|
+
* Establishes a persistent connection to the actor.
|
|
639
|
+
*
|
|
640
|
+
* @template AD The actor class that this connection is for.
|
|
641
|
+
* @returns {ActorConn<AD>} A connection to the actor.
|
|
642
|
+
*/
|
|
643
|
+
connect() {
|
|
644
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
645
|
+
msg: "establishing connection from handle",
|
|
646
|
+
query: this.#actorQuery
|
|
800
647
|
});
|
|
801
|
-
|
|
648
|
+
const conn = new ActorConnRaw(
|
|
649
|
+
this.#client,
|
|
650
|
+
this.#driver,
|
|
651
|
+
this.#params,
|
|
652
|
+
this.#getParams,
|
|
653
|
+
this.#encoding,
|
|
654
|
+
this.#actorQuery
|
|
655
|
+
);
|
|
656
|
+
return this.#client[CREATE_ACTOR_CONN_PROXY](
|
|
657
|
+
conn
|
|
658
|
+
);
|
|
802
659
|
}
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
datacenter: region,
|
|
816
|
-
name,
|
|
817
|
-
runner_name_selector: this.#config.runnerName,
|
|
818
|
-
key: _chunkTI5PXQGGcjs.serializeActorKey.call(void 0, key),
|
|
819
|
-
input: input ? _chunkTI5PXQGGcjs.uint8ArrayToBase64.call(void 0, cbor2.encode(input)) : void 0,
|
|
820
|
-
crash_policy: "sleep"
|
|
821
|
-
});
|
|
822
|
-
logger3().info({
|
|
823
|
-
msg: "actor created",
|
|
824
|
-
actorId: result.actor.actor_id,
|
|
825
|
-
name,
|
|
826
|
-
key
|
|
827
|
-
});
|
|
828
|
-
return apiActorToOutput(result.actor);
|
|
660
|
+
/**
|
|
661
|
+
* Fetches a resource from this actor via the /request endpoint. This is a
|
|
662
|
+
* convenience wrapper around the raw HTTP API.
|
|
663
|
+
*/
|
|
664
|
+
fetch(input, init) {
|
|
665
|
+
return rawHttpFetch(
|
|
666
|
+
this.#driver,
|
|
667
|
+
this.#actorQuery,
|
|
668
|
+
this.#params,
|
|
669
|
+
input,
|
|
670
|
+
init
|
|
671
|
+
);
|
|
829
672
|
}
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
673
|
+
/**
|
|
674
|
+
* Opens a raw WebSocket connection to this actor.
|
|
675
|
+
*/
|
|
676
|
+
async webSocket(path, protocols) {
|
|
677
|
+
const params = await this.#resolveConnectionParams();
|
|
678
|
+
return rawWebSocket(
|
|
679
|
+
this.#driver,
|
|
680
|
+
this.#actorQuery,
|
|
681
|
+
params,
|
|
682
|
+
path,
|
|
683
|
+
protocols
|
|
684
|
+
);
|
|
837
685
|
}
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
686
|
+
/**
|
|
687
|
+
* Resolves the actor to get its unique actor ID.
|
|
688
|
+
*/
|
|
689
|
+
async resolve() {
|
|
690
|
+
if ("getForKey" in this.#actorQuery) {
|
|
691
|
+
const name = this.#actorQuery.getForKey.name;
|
|
692
|
+
const { actorId } = await queryActor(
|
|
693
|
+
void 0,
|
|
694
|
+
this.#actorQuery,
|
|
695
|
+
this.#driver
|
|
696
|
+
);
|
|
697
|
+
this.#actorQuery = { getForId: { actorId, name } };
|
|
698
|
+
return actorId;
|
|
699
|
+
} else if ("getOrCreateForKey" in this.#actorQuery) {
|
|
700
|
+
const name = this.#actorQuery.getOrCreateForKey.name;
|
|
701
|
+
const { actorId } = await queryActor(
|
|
702
|
+
void 0,
|
|
703
|
+
this.#actorQuery,
|
|
704
|
+
this.#driver
|
|
705
|
+
);
|
|
706
|
+
this.#actorQuery = { getForId: { actorId, name } };
|
|
707
|
+
return actorId;
|
|
708
|
+
} else if ("getForId" in this.#actorQuery) {
|
|
709
|
+
return this.#actorQuery.getForId.actorId;
|
|
710
|
+
} else if ("create" in this.#actorQuery) {
|
|
711
|
+
_invariant2.default.call(void 0, false, "actorQuery cannot be create");
|
|
712
|
+
} else {
|
|
713
|
+
_chunkA4KEUCB6cjs.assertUnreachable.call(void 0, this.#actorQuery);
|
|
841
714
|
}
|
|
842
|
-
logger3().info({ msg: "destroying actor via engine api", actorId });
|
|
843
|
-
await destroyActor(this.#config, actorId);
|
|
844
|
-
logger3().info({ msg: "actor destroyed", actorId });
|
|
845
715
|
}
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
716
|
+
/**
|
|
717
|
+
* Returns the raw URL for routing traffic to the actor.
|
|
718
|
+
*/
|
|
719
|
+
async getGatewayUrl() {
|
|
720
|
+
const { actorId } = await queryActor(
|
|
721
|
+
void 0,
|
|
722
|
+
this.#actorQuery,
|
|
723
|
+
this.#driver
|
|
854
724
|
);
|
|
725
|
+
return await this.#driver.buildGatewayUrl(actorId);
|
|
855
726
|
}
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
727
|
+
};
|
|
728
|
+
|
|
729
|
+
// src/client/client.ts
|
|
730
|
+
var ACTOR_CONNS_SYMBOL = /* @__PURE__ */ Symbol("actorConns");
|
|
731
|
+
var CREATE_ACTOR_CONN_PROXY = /* @__PURE__ */ Symbol("createActorConnProxy");
|
|
732
|
+
var ClientRaw = (_class2 = class {
|
|
733
|
+
#disposed = false;
|
|
734
|
+
__init2() {this[ACTOR_CONNS_SYMBOL] = /* @__PURE__ */ new Set()}
|
|
735
|
+
#driver;
|
|
736
|
+
#encodingKind;
|
|
737
|
+
/**
|
|
738
|
+
* Creates an instance of Client.
|
|
739
|
+
*/
|
|
740
|
+
constructor(driver, encoding) {;_class2.prototype.__init2.call(this);
|
|
741
|
+
this.#driver = driver;
|
|
742
|
+
this.#encodingKind = _nullishCoalesce(encoding, () => ( "bare"));
|
|
743
|
+
}
|
|
744
|
+
/**
|
|
745
|
+
* Gets a stateless handle to a actor by its ID.
|
|
746
|
+
*
|
|
747
|
+
* @template AD The actor class that this handle is for.
|
|
748
|
+
* @param {string} name - The name of the actor.
|
|
749
|
+
* @param {string} actorId - The ID of the actor.
|
|
750
|
+
* @param {GetWithIdOptions} [opts] - Options for getting the actor.
|
|
751
|
+
* @returns {ActorHandle<AD>} - A handle to the actor.
|
|
752
|
+
*/
|
|
753
|
+
getForId(name, actorId, opts) {
|
|
754
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
755
|
+
msg: "get handle to actor with id",
|
|
756
|
+
name,
|
|
863
757
|
actorId,
|
|
864
|
-
|
|
865
|
-
|
|
758
|
+
params: opts == null ? void 0 : opts.params
|
|
759
|
+
});
|
|
760
|
+
const actorQuery = {
|
|
761
|
+
getForId: {
|
|
762
|
+
name,
|
|
763
|
+
actorId
|
|
764
|
+
}
|
|
765
|
+
};
|
|
766
|
+
const handle = this.#createHandle(
|
|
767
|
+
opts == null ? void 0 : opts.params,
|
|
768
|
+
opts == null ? void 0 : opts.getParams,
|
|
769
|
+
actorQuery
|
|
866
770
|
);
|
|
771
|
+
return createActorProxy(handle);
|
|
867
772
|
}
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
773
|
+
/**
|
|
774
|
+
* Gets a stateless handle to a actor by its key, but does not create the actor if it doesn't exist.
|
|
775
|
+
*
|
|
776
|
+
* @template AD The actor class that this handle is for.
|
|
777
|
+
* @param {string} name - The name of the actor.
|
|
778
|
+
* @param {string | string[]} [key=[]] - The key to identify the actor. Can be a single string or an array of strings.
|
|
779
|
+
* @param {GetWithIdOptions} [opts] - Options for getting the actor.
|
|
780
|
+
* @returns {ActorHandle<AD>} - A handle to the actor.
|
|
781
|
+
*/
|
|
782
|
+
get(name, key, opts) {
|
|
783
|
+
const keyArray = typeof key === "string" ? [key] : key || [];
|
|
784
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
785
|
+
msg: "get handle to actor",
|
|
786
|
+
name,
|
|
787
|
+
key: keyArray,
|
|
788
|
+
parameters: opts == null ? void 0 : opts.params
|
|
789
|
+
});
|
|
790
|
+
const actorQuery = {
|
|
791
|
+
getForKey: {
|
|
792
|
+
name,
|
|
793
|
+
key: keyArray
|
|
794
|
+
}
|
|
795
|
+
};
|
|
796
|
+
const handle = this.#createHandle(
|
|
797
|
+
opts == null ? void 0 : opts.params,
|
|
798
|
+
opts == null ? void 0 : opts.getParams,
|
|
799
|
+
actorQuery
|
|
883
800
|
);
|
|
801
|
+
return createActorProxy(handle);
|
|
884
802
|
}
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
803
|
+
/**
|
|
804
|
+
* Gets a stateless handle to a actor by its key, creating it if necessary.
|
|
805
|
+
*
|
|
806
|
+
* @template AD The actor class that this handle is for.
|
|
807
|
+
* @param {string} name - The name of the actor.
|
|
808
|
+
* @param {string | string[]} [key=[]] - The key to identify the actor. Can be a single string or an array of strings.
|
|
809
|
+
* @param {GetOptions} [opts] - Options for getting the actor.
|
|
810
|
+
* @returns {ActorHandle<AD>} - A handle to the actor.
|
|
811
|
+
*/
|
|
812
|
+
getOrCreate(name, key, opts) {
|
|
813
|
+
const keyArray = typeof key === "string" ? [key] : key || [];
|
|
814
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
815
|
+
msg: "get or create handle to actor",
|
|
816
|
+
name,
|
|
817
|
+
key: keyArray,
|
|
818
|
+
parameters: opts == null ? void 0 : opts.params,
|
|
819
|
+
createInRegion: opts == null ? void 0 : opts.createInRegion
|
|
900
820
|
});
|
|
901
|
-
const
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
821
|
+
const actorQuery = {
|
|
822
|
+
getOrCreateForKey: {
|
|
823
|
+
name,
|
|
824
|
+
key: keyArray,
|
|
825
|
+
input: opts == null ? void 0 : opts.createWithInput,
|
|
826
|
+
region: opts == null ? void 0 : opts.createInRegion
|
|
827
|
+
}
|
|
828
|
+
};
|
|
829
|
+
const handle = this.#createHandle(
|
|
830
|
+
opts == null ? void 0 : opts.params,
|
|
831
|
+
opts == null ? void 0 : opts.getParams,
|
|
832
|
+
actorQuery
|
|
905
833
|
);
|
|
906
|
-
|
|
907
|
-
return await upgradeWebSocket(() => args)(c, _chunkHYPIHCDTcjs.noopNext.call(void 0, ));
|
|
834
|
+
return createActorProxy(handle);
|
|
908
835
|
}
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
836
|
+
/**
|
|
837
|
+
* Creates a new actor with the provided key and returns a stateless handle to it.
|
|
838
|
+
* Resolves the actor ID and returns a handle with getForId query.
|
|
839
|
+
*
|
|
840
|
+
* @template AD The actor class that this handle is for.
|
|
841
|
+
* @param {string} name - The name of the actor.
|
|
842
|
+
* @param {string | string[]} key - The key to identify the actor. Can be a single string or an array of strings.
|
|
843
|
+
* @param {CreateOptions} [opts] - Options for creating the actor (excluding name and key).
|
|
844
|
+
* @returns {Promise<ActorHandle<AD>>} - A promise that resolves to a handle to the actor.
|
|
845
|
+
*/
|
|
846
|
+
async create(name, key, opts) {
|
|
847
|
+
const keyArray = typeof key === "string" ? [key] : key || [];
|
|
848
|
+
const createQuery = {
|
|
849
|
+
create: {
|
|
850
|
+
...opts,
|
|
851
|
+
// Do these last to override `opts`
|
|
852
|
+
name,
|
|
853
|
+
key: keyArray
|
|
854
|
+
}
|
|
855
|
+
};
|
|
856
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
857
|
+
msg: "create actor handle",
|
|
858
|
+
name,
|
|
859
|
+
key: keyArray,
|
|
860
|
+
parameters: opts == null ? void 0 : opts.params,
|
|
861
|
+
create: createQuery.create
|
|
862
|
+
});
|
|
863
|
+
const { actorId } = await queryActor(
|
|
864
|
+
void 0,
|
|
865
|
+
createQuery,
|
|
866
|
+
this.#driver
|
|
918
867
|
);
|
|
919
|
-
|
|
868
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
869
|
+
msg: "created actor with ID",
|
|
870
|
+
name,
|
|
871
|
+
key: keyArray,
|
|
872
|
+
actorId
|
|
873
|
+
});
|
|
874
|
+
const getForIdQuery = {
|
|
875
|
+
getForId: {
|
|
876
|
+
name,
|
|
877
|
+
actorId
|
|
878
|
+
}
|
|
879
|
+
};
|
|
880
|
+
const handle = this.#createHandle(
|
|
881
|
+
opts == null ? void 0 : opts.params,
|
|
882
|
+
opts == null ? void 0 : opts.getParams,
|
|
883
|
+
getForIdQuery
|
|
884
|
+
);
|
|
885
|
+
const proxy = createActorProxy(handle);
|
|
886
|
+
return proxy;
|
|
920
887
|
}
|
|
921
|
-
|
|
922
|
-
return
|
|
888
|
+
#createHandle(params, getParams, actorQuery) {
|
|
889
|
+
return new ActorHandleRaw(
|
|
890
|
+
this,
|
|
891
|
+
this.#driver,
|
|
892
|
+
params,
|
|
893
|
+
getParams,
|
|
894
|
+
this.#encodingKind,
|
|
895
|
+
actorQuery
|
|
896
|
+
);
|
|
923
897
|
}
|
|
924
|
-
|
|
925
|
-
this
|
|
898
|
+
[CREATE_ACTOR_CONN_PROXY](conn) {
|
|
899
|
+
this[ACTOR_CONNS_SYMBOL].add(conn);
|
|
900
|
+
conn[CONNECT_SYMBOL]();
|
|
901
|
+
return createActorProxy(conn);
|
|
926
902
|
}
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
sleepTs: _nullishCoalesce(actor.sleep_ts, () => ( null)),
|
|
937
|
-
destroyTs: _nullishCoalesce(actor.destroy_ts, () => ( null)),
|
|
938
|
-
error: _nullishCoalesce(actor.error, () => ( void 0))
|
|
939
|
-
};
|
|
940
|
-
}
|
|
941
|
-
|
|
942
|
-
// src/client/actor-conn.ts
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
// src/client/actor-query.ts
|
|
948
|
-
async function queryActor(c, query, managerDriver) {
|
|
949
|
-
_chunkJC6BEPE7cjs.logger.call(void 0, ).debug({ msg: "querying actor", query: JSON.stringify(query) });
|
|
950
|
-
let actorOutput;
|
|
951
|
-
if ("getForId" in query) {
|
|
952
|
-
const output = await managerDriver.getForId({
|
|
953
|
-
c,
|
|
954
|
-
name: query.getForId.name,
|
|
955
|
-
actorId: query.getForId.actorId
|
|
956
|
-
});
|
|
957
|
-
if (!output) throw new (0, _chunkL47L3ZWJcjs.ActorNotFound)(query.getForId.actorId);
|
|
958
|
-
actorOutput = output;
|
|
959
|
-
} else if ("getForKey" in query) {
|
|
960
|
-
const existingActor = await managerDriver.getWithKey({
|
|
961
|
-
c,
|
|
962
|
-
name: query.getForKey.name,
|
|
963
|
-
key: query.getForKey.key
|
|
964
|
-
});
|
|
965
|
-
if (!existingActor) {
|
|
966
|
-
throw new (0, _chunkL47L3ZWJcjs.ActorNotFound)(
|
|
967
|
-
`${query.getForKey.name}:${JSON.stringify(query.getForKey.key)}`
|
|
968
|
-
);
|
|
903
|
+
/**
|
|
904
|
+
* Disconnects from all actors.
|
|
905
|
+
*
|
|
906
|
+
* @returns {Promise<void>} A promise that resolves when all connections are closed.
|
|
907
|
+
*/
|
|
908
|
+
async dispose() {
|
|
909
|
+
if (this.#disposed) {
|
|
910
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).warn({ msg: "client already disconnected" });
|
|
911
|
+
return;
|
|
969
912
|
}
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
const
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
key: query.getOrCreateForKey.key,
|
|
976
|
-
input: query.getOrCreateForKey.input,
|
|
977
|
-
region: query.getOrCreateForKey.region
|
|
978
|
-
});
|
|
979
|
-
actorOutput = {
|
|
980
|
-
actorId: getOrCreateOutput.actorId
|
|
981
|
-
};
|
|
982
|
-
} else if ("create" in query) {
|
|
983
|
-
const createOutput = await managerDriver.createActor({
|
|
984
|
-
c,
|
|
985
|
-
name: query.create.name,
|
|
986
|
-
key: query.create.key,
|
|
987
|
-
input: query.create.input,
|
|
988
|
-
region: query.create.region
|
|
989
|
-
});
|
|
990
|
-
actorOutput = {
|
|
991
|
-
actorId: createOutput.actorId
|
|
992
|
-
};
|
|
993
|
-
} else {
|
|
994
|
-
throw new (0, _chunkL47L3ZWJcjs.InvalidRequest)("Invalid query format");
|
|
995
|
-
}
|
|
996
|
-
_chunkJC6BEPE7cjs.logger.call(void 0, ).debug({ msg: "actor query result", actorId: actorOutput.actorId });
|
|
997
|
-
return { actorId: actorOutput.actorId };
|
|
998
|
-
}
|
|
999
|
-
function getActorNameFromQuery(query) {
|
|
1000
|
-
if ("getForId" in query) return query.getForId.name;
|
|
1001
|
-
if ("getForKey" in query) return query.getForKey.name;
|
|
1002
|
-
if ("getOrCreateForKey" in query) return query.getOrCreateForKey.name;
|
|
1003
|
-
if ("create" in query) return query.create.name;
|
|
1004
|
-
throw new (0, _chunkL47L3ZWJcjs.InvalidRequest)("Invalid query format");
|
|
1005
|
-
}
|
|
1006
|
-
async function checkForSchedulingError(group, code, actorId, query, driver) {
|
|
1007
|
-
const name = getActorNameFromQuery(query);
|
|
1008
|
-
try {
|
|
1009
|
-
const actor = await driver.getForId({ name, actorId });
|
|
1010
|
-
if (actor == null ? void 0 : actor.error) {
|
|
1011
|
-
_chunkJC6BEPE7cjs.logger.call(void 0, ).info({
|
|
1012
|
-
msg: "found actor scheduling error",
|
|
1013
|
-
actorId,
|
|
1014
|
-
error: actor.error
|
|
1015
|
-
});
|
|
1016
|
-
return new ActorSchedulingError(group, code, actorId, actor.error);
|
|
913
|
+
this.#disposed = true;
|
|
914
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({ msg: "disposing client" });
|
|
915
|
+
const disposePromises = [];
|
|
916
|
+
for (const conn of this[ACTOR_CONNS_SYMBOL].values()) {
|
|
917
|
+
disposePromises.push(conn.dispose());
|
|
1017
918
|
}
|
|
1018
|
-
|
|
1019
|
-
_chunkJC6BEPE7cjs.logger.call(void 0, ).warn({
|
|
1020
|
-
msg: "failed to fetch actor details for scheduling error check",
|
|
1021
|
-
actorId,
|
|
1022
|
-
error: _chunkHYPIHCDTcjs.stringifyError.call(void 0, err)
|
|
1023
|
-
});
|
|
919
|
+
await Promise.all(disposePromises);
|
|
1024
920
|
}
|
|
1025
|
-
|
|
1026
|
-
}
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
const result = await sendHttpRequest({
|
|
1035
|
-
url: `http://actor/queue/${encodeURIComponent(name)}`,
|
|
1036
|
-
method: "POST",
|
|
1037
|
-
headers: {
|
|
1038
|
-
[_chunkTI5PXQGGcjs.HEADER_ENCODING]: senderOptions.encoding,
|
|
1039
|
-
...senderOptions.params !== void 0 ? {
|
|
1040
|
-
[_chunkTI5PXQGGcjs.HEADER_CONN_PARAMS]: JSON.stringify(
|
|
1041
|
-
senderOptions.params
|
|
1042
|
-
)
|
|
1043
|
-
} : {}
|
|
1044
|
-
},
|
|
1045
|
-
body: { body, wait, timeout },
|
|
1046
|
-
encoding: senderOptions.encoding,
|
|
1047
|
-
customFetch: senderOptions.customFetch,
|
|
1048
|
-
signal: options == null ? void 0 : options.signal,
|
|
1049
|
-
requestVersion: _chunkTI5PXQGGcjs.CURRENT_VERSION,
|
|
1050
|
-
requestVersionedDataHandler: _chunkTI5PXQGGcjs.HTTP_QUEUE_SEND_REQUEST_VERSIONED,
|
|
1051
|
-
responseVersion: _chunkTI5PXQGGcjs.CURRENT_VERSION,
|
|
1052
|
-
responseVersionedDataHandler: _chunkTI5PXQGGcjs.HTTP_QUEUE_SEND_RESPONSE_VERSIONED,
|
|
1053
|
-
requestZodSchema: _chunkTI5PXQGGcjs.HttpQueueSendRequestSchema,
|
|
1054
|
-
responseZodSchema: _chunkTI5PXQGGcjs.HttpQueueSendResponseSchema,
|
|
1055
|
-
requestToJson: (value) => ({
|
|
1056
|
-
...value,
|
|
1057
|
-
name
|
|
1058
|
-
}),
|
|
1059
|
-
requestToBare: (value) => ({
|
|
1060
|
-
name: _nullishCoalesce(value.name, () => ( name)),
|
|
1061
|
-
body: _chunkHYPIHCDTcjs.bufferToArrayBuffer.call(void 0, cbor3.encode(value.body)),
|
|
1062
|
-
wait: _nullishCoalesce(value.wait, () => ( false)),
|
|
1063
|
-
timeout: value.timeout !== void 0 ? BigInt(value.timeout) : null
|
|
1064
|
-
}),
|
|
1065
|
-
responseFromJson: (json) => {
|
|
1066
|
-
if (json.response === void 0) {
|
|
1067
|
-
return { status: json.status };
|
|
921
|
+
}, _class2);
|
|
922
|
+
function createClientWithDriver(driver, config = {}) {
|
|
923
|
+
const client = new ClientRaw(driver, config.encoding);
|
|
924
|
+
return new Proxy(client, {
|
|
925
|
+
get: (target, prop, receiver) => {
|
|
926
|
+
if (typeof prop === "symbol" || prop in target) {
|
|
927
|
+
const value = Reflect.get(target, prop, receiver);
|
|
928
|
+
if (typeof value === "function") {
|
|
929
|
+
return value.bind(target);
|
|
1068
930
|
}
|
|
931
|
+
return value;
|
|
932
|
+
}
|
|
933
|
+
if (typeof prop === "string") {
|
|
1069
934
|
return {
|
|
1070
|
-
|
|
1071
|
-
|
|
935
|
+
// Handle methods (stateless action)
|
|
936
|
+
get: (key, opts) => {
|
|
937
|
+
return target.get(prop, key, opts);
|
|
938
|
+
},
|
|
939
|
+
getOrCreate: (key, opts) => {
|
|
940
|
+
return target.getOrCreate(prop, key, opts);
|
|
941
|
+
},
|
|
942
|
+
getForId: (actorId, opts) => {
|
|
943
|
+
return target.getForId(prop, actorId, opts);
|
|
944
|
+
},
|
|
945
|
+
create: async (key, opts = {}) => {
|
|
946
|
+
return await target.create(prop, key, opts);
|
|
947
|
+
}
|
|
1072
948
|
};
|
|
1073
|
-
}
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
949
|
+
}
|
|
950
|
+
return void 0;
|
|
951
|
+
}
|
|
952
|
+
});
|
|
953
|
+
}
|
|
954
|
+
function createActorProxy(handle) {
|
|
955
|
+
const methodCache = /* @__PURE__ */ new Map();
|
|
956
|
+
return new Proxy(handle, {
|
|
957
|
+
get(target, prop, receiver) {
|
|
958
|
+
if (typeof prop === "symbol") {
|
|
959
|
+
return Reflect.get(target, prop, receiver);
|
|
960
|
+
}
|
|
961
|
+
if (prop === "constructor" || prop in target) {
|
|
962
|
+
const value = Reflect.get(target, prop, target);
|
|
963
|
+
if (typeof value === "function") {
|
|
964
|
+
return value.bind(target);
|
|
965
|
+
}
|
|
966
|
+
return value;
|
|
967
|
+
}
|
|
968
|
+
if (typeof prop === "string") {
|
|
969
|
+
if (prop === "then") return void 0;
|
|
970
|
+
let method = methodCache.get(prop);
|
|
971
|
+
if (!method) {
|
|
972
|
+
method = (...args) => target.action({ name: prop, args });
|
|
973
|
+
methodCache.set(prop, method);
|
|
1077
974
|
}
|
|
975
|
+
return method;
|
|
976
|
+
}
|
|
977
|
+
},
|
|
978
|
+
// Support for 'in' operator
|
|
979
|
+
has(target, prop) {
|
|
980
|
+
if (typeof prop === "string") return true;
|
|
981
|
+
return Reflect.has(target, prop);
|
|
982
|
+
},
|
|
983
|
+
// Support instanceof checks
|
|
984
|
+
getPrototypeOf(target) {
|
|
985
|
+
return Reflect.getPrototypeOf(target);
|
|
986
|
+
},
|
|
987
|
+
// Prevent property enumeration of non-existent action methods
|
|
988
|
+
ownKeys(target) {
|
|
989
|
+
return Reflect.ownKeys(target);
|
|
990
|
+
},
|
|
991
|
+
// Support proper property descriptors
|
|
992
|
+
getOwnPropertyDescriptor(target, prop) {
|
|
993
|
+
const targetDescriptor = Reflect.getOwnPropertyDescriptor(
|
|
994
|
+
target,
|
|
995
|
+
prop
|
|
996
|
+
);
|
|
997
|
+
if (targetDescriptor) {
|
|
998
|
+
return targetDescriptor;
|
|
999
|
+
}
|
|
1000
|
+
if (typeof prop === "string") {
|
|
1078
1001
|
return {
|
|
1079
|
-
|
|
1080
|
-
|
|
1002
|
+
configurable: true,
|
|
1003
|
+
enumerable: false,
|
|
1004
|
+
writable: false,
|
|
1005
|
+
value: (...args) => target.action({ name: prop, args })
|
|
1081
1006
|
};
|
|
1082
1007
|
}
|
|
1083
|
-
|
|
1084
|
-
if (wait) {
|
|
1085
|
-
return result;
|
|
1008
|
+
return void 0;
|
|
1086
1009
|
}
|
|
1087
|
-
|
|
1088
|
-
}
|
|
1089
|
-
return {
|
|
1090
|
-
send
|
|
1091
|
-
};
|
|
1010
|
+
});
|
|
1092
1011
|
}
|
|
1093
1012
|
|
|
1094
1013
|
// src/client/actor-conn.ts
|
|
@@ -1123,6 +1042,7 @@ var ActorConnRaw = class {
|
|
|
1123
1042
|
#client;
|
|
1124
1043
|
#driver;
|
|
1125
1044
|
#params;
|
|
1045
|
+
#getParams;
|
|
1126
1046
|
#encoding;
|
|
1127
1047
|
#actorQuery;
|
|
1128
1048
|
// TODO: ws message queue
|
|
@@ -1133,10 +1053,11 @@ var ActorConnRaw = class {
|
|
|
1133
1053
|
*
|
|
1134
1054
|
* @protected
|
|
1135
1055
|
*/
|
|
1136
|
-
constructor(client, driver, params, encoding, actorQuery) {
|
|
1056
|
+
constructor(client, driver, params, getParams, encoding, actorQuery) {
|
|
1137
1057
|
this.#client = client;
|
|
1138
1058
|
this.#driver = driver;
|
|
1139
1059
|
this.#params = params;
|
|
1060
|
+
this.#getParams = getParams;
|
|
1140
1061
|
this.#encoding = encoding;
|
|
1141
1062
|
this.#actorQuery = actorQuery;
|
|
1142
1063
|
this.#queueSender = createQueueSender({
|
|
@@ -1170,16 +1091,21 @@ var ActorConnRaw = class {
|
|
|
1170
1091
|
* @returns {Promise<Response>} - A promise that resolves to the response of the action function.
|
|
1171
1092
|
*/
|
|
1172
1093
|
async action(opts) {
|
|
1173
|
-
|
|
1094
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({ msg: "action", name: opts.name, args: opts.args });
|
|
1174
1095
|
const actionId = this.#actionIdCounter;
|
|
1175
1096
|
this.#actionIdCounter += 1;
|
|
1176
|
-
const { promise, resolve, reject } =
|
|
1097
|
+
const { promise, resolve, reject } = _chunkMPLMTJY5cjs.promiseWithResolvers.call(void 0,
|
|
1098
|
+
(reason) => _chunkV3JSZR5Pcjs.logger.call(void 0, ).warn({
|
|
1099
|
+
msg: "unhandled action promise rejection",
|
|
1100
|
+
reason
|
|
1101
|
+
})
|
|
1102
|
+
);
|
|
1177
1103
|
this.#actionsInFlight.set(actionId, {
|
|
1178
1104
|
name: opts.name,
|
|
1179
1105
|
resolve,
|
|
1180
1106
|
reject
|
|
1181
1107
|
});
|
|
1182
|
-
|
|
1108
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1183
1109
|
msg: "added action to in-flight map",
|
|
1184
1110
|
actionId,
|
|
1185
1111
|
actionName: opts.name,
|
|
@@ -1219,9 +1145,9 @@ var ActorConnRaw = class {
|
|
|
1219
1145
|
try {
|
|
1220
1146
|
handler(status);
|
|
1221
1147
|
} catch (err) {
|
|
1222
|
-
|
|
1148
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).error({
|
|
1223
1149
|
msg: "error in status change handler",
|
|
1224
|
-
error:
|
|
1150
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, err)
|
|
1225
1151
|
});
|
|
1226
1152
|
}
|
|
1227
1153
|
}
|
|
@@ -1230,9 +1156,9 @@ var ActorConnRaw = class {
|
|
|
1230
1156
|
try {
|
|
1231
1157
|
handler();
|
|
1232
1158
|
} catch (err) {
|
|
1233
|
-
|
|
1159
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).error({
|
|
1234
1160
|
msg: "error in open handler",
|
|
1235
|
-
error:
|
|
1161
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, err)
|
|
1236
1162
|
});
|
|
1237
1163
|
}
|
|
1238
1164
|
}
|
|
@@ -1242,9 +1168,9 @@ var ActorConnRaw = class {
|
|
|
1242
1168
|
try {
|
|
1243
1169
|
handler();
|
|
1244
1170
|
} catch (err) {
|
|
1245
|
-
|
|
1171
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).error({
|
|
1246
1172
|
msg: "error in close handler",
|
|
1247
|
-
error:
|
|
1173
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, err)
|
|
1248
1174
|
});
|
|
1249
1175
|
}
|
|
1250
1176
|
}
|
|
@@ -1257,21 +1183,21 @@ var ActorConnRaw = class {
|
|
|
1257
1183
|
minTimeout: 250,
|
|
1258
1184
|
maxTimeout: 3e4,
|
|
1259
1185
|
onFailedAttempt: (error) => {
|
|
1260
|
-
|
|
1186
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).warn({
|
|
1261
1187
|
msg: "failed to reconnect",
|
|
1262
1188
|
attempt: error.attemptNumber,
|
|
1263
|
-
error:
|
|
1189
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
1264
1190
|
});
|
|
1265
1191
|
},
|
|
1266
1192
|
// Cancel retry if aborted
|
|
1267
1193
|
signal: this.#abortController.signal
|
|
1268
1194
|
}).catch((err) => {
|
|
1269
1195
|
if (err.name === "AbortError") {
|
|
1270
|
-
|
|
1196
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).info({ msg: "connection retry aborted" });
|
|
1271
1197
|
} else {
|
|
1272
|
-
|
|
1198
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).error({
|
|
1273
1199
|
msg: "unexpected error in connection retry",
|
|
1274
|
-
error:
|
|
1200
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, err)
|
|
1275
1201
|
});
|
|
1276
1202
|
}
|
|
1277
1203
|
});
|
|
@@ -1280,13 +1206,46 @@ var ActorConnRaw = class {
|
|
|
1280
1206
|
try {
|
|
1281
1207
|
if (this.#onOpenPromise)
|
|
1282
1208
|
throw new Error("#onOpenPromise already defined");
|
|
1283
|
-
this.#onOpenPromise =
|
|
1209
|
+
this.#onOpenPromise = _chunkMPLMTJY5cjs.promiseWithResolvers.call(void 0,
|
|
1210
|
+
(reason) => _chunkV3JSZR5Pcjs.logger.call(void 0, ).warn({
|
|
1211
|
+
msg: "unhandled open promise rejection",
|
|
1212
|
+
reason
|
|
1213
|
+
})
|
|
1214
|
+
);
|
|
1284
1215
|
await this.#connectWebSocket();
|
|
1285
1216
|
await this.#onOpenPromise.promise;
|
|
1286
1217
|
} finally {
|
|
1287
1218
|
this.#onOpenPromise = void 0;
|
|
1288
1219
|
}
|
|
1289
1220
|
}
|
|
1221
|
+
#clearQueuedMessages() {
|
|
1222
|
+
if (this.#messageQueue.length === 0) return;
|
|
1223
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1224
|
+
msg: "clearing queued connection messages",
|
|
1225
|
+
queueLength: this.#messageQueue.length
|
|
1226
|
+
});
|
|
1227
|
+
this.#messageQueue = [];
|
|
1228
|
+
}
|
|
1229
|
+
async #resolveConnectionParams() {
|
|
1230
|
+
if (!this.#getParams) {
|
|
1231
|
+
return this.#params;
|
|
1232
|
+
}
|
|
1233
|
+
try {
|
|
1234
|
+
return await this.#getParams();
|
|
1235
|
+
} catch (err) {
|
|
1236
|
+
const errorMessage = _chunkMPLMTJY5cjs.stringifyError.call(void 0, err);
|
|
1237
|
+
const error = new ActorError(
|
|
1238
|
+
"client",
|
|
1239
|
+
"get_params_failed",
|
|
1240
|
+
`Failed to resolve connection params: ${errorMessage}`,
|
|
1241
|
+
{ error: errorMessage }
|
|
1242
|
+
);
|
|
1243
|
+
this.#clearQueuedMessages();
|
|
1244
|
+
this.#rejectPendingPromises(error, false);
|
|
1245
|
+
this.#dispatchActorError(error);
|
|
1246
|
+
throw error;
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1290
1249
|
async #connectWebSocket() {
|
|
1291
1250
|
const { actorId } = await queryActor(
|
|
1292
1251
|
void 0,
|
|
@@ -1294,13 +1253,14 @@ var ActorConnRaw = class {
|
|
|
1294
1253
|
this.#driver
|
|
1295
1254
|
);
|
|
1296
1255
|
this.#actorId = actorId;
|
|
1256
|
+
const params = await this.#resolveConnectionParams();
|
|
1297
1257
|
const ws = await this.#driver.openWebSocket(
|
|
1298
|
-
|
|
1258
|
+
_chunkHNE2AK6Ccjs.PATH_CONNECT,
|
|
1299
1259
|
actorId,
|
|
1300
1260
|
this.#encoding,
|
|
1301
|
-
|
|
1261
|
+
params
|
|
1302
1262
|
);
|
|
1303
|
-
|
|
1263
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1304
1264
|
msg: "opened websocket",
|
|
1305
1265
|
connId: this.#connId,
|
|
1306
1266
|
readyState: ws.readyState,
|
|
@@ -1308,7 +1268,7 @@ var ActorConnRaw = class {
|
|
|
1308
1268
|
});
|
|
1309
1269
|
this.#websocket = ws;
|
|
1310
1270
|
ws.addEventListener("open", () => {
|
|
1311
|
-
|
|
1271
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1312
1272
|
msg: "client websocket open",
|
|
1313
1273
|
connId: this.#connId
|
|
1314
1274
|
});
|
|
@@ -1317,9 +1277,9 @@ var ActorConnRaw = class {
|
|
|
1317
1277
|
try {
|
|
1318
1278
|
await this.#handleOnMessage(ev.data);
|
|
1319
1279
|
} catch (err) {
|
|
1320
|
-
|
|
1280
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).error({
|
|
1321
1281
|
msg: "error in websocket message handler",
|
|
1322
|
-
error:
|
|
1282
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, err)
|
|
1323
1283
|
});
|
|
1324
1284
|
}
|
|
1325
1285
|
});
|
|
@@ -1327,19 +1287,19 @@ var ActorConnRaw = class {
|
|
|
1327
1287
|
try {
|
|
1328
1288
|
await this.#handleOnClose(ev);
|
|
1329
1289
|
} catch (err) {
|
|
1330
|
-
|
|
1290
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).error({
|
|
1331
1291
|
msg: "error in websocket close handler",
|
|
1332
|
-
error:
|
|
1292
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, err)
|
|
1333
1293
|
});
|
|
1334
1294
|
}
|
|
1335
1295
|
});
|
|
1336
|
-
ws.addEventListener("error", (
|
|
1296
|
+
ws.addEventListener("error", () => {
|
|
1337
1297
|
try {
|
|
1338
1298
|
this.#handleOnError();
|
|
1339
1299
|
} catch (err) {
|
|
1340
|
-
|
|
1300
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).error({
|
|
1341
1301
|
msg: "error in websocket error handler",
|
|
1342
|
-
error:
|
|
1302
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, err)
|
|
1343
1303
|
});
|
|
1344
1304
|
}
|
|
1345
1305
|
});
|
|
@@ -1347,7 +1307,7 @@ var ActorConnRaw = class {
|
|
|
1347
1307
|
/** Called by the onopen event from drivers. */
|
|
1348
1308
|
#handleOnOpen() {
|
|
1349
1309
|
if (this.#disposed) {
|
|
1350
|
-
|
|
1310
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1351
1311
|
msg: "handleOnOpen called after dispose, closing websocket"
|
|
1352
1312
|
});
|
|
1353
1313
|
if (this.#websocket) {
|
|
@@ -1363,7 +1323,7 @@ var ActorConnRaw = class {
|
|
|
1363
1323
|
queueMicrotask(() => {
|
|
1364
1324
|
this.#openScheduled = false;
|
|
1365
1325
|
if (this.#disposed) {
|
|
1366
|
-
|
|
1326
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1367
1327
|
msg: "handleOnOpen scheduled after dispose, closing websocket"
|
|
1368
1328
|
});
|
|
1369
1329
|
if (this.#websocket) {
|
|
@@ -1372,7 +1332,7 @@ var ActorConnRaw = class {
|
|
|
1372
1332
|
}
|
|
1373
1333
|
return;
|
|
1374
1334
|
}
|
|
1375
|
-
|
|
1335
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1376
1336
|
msg: "socket open",
|
|
1377
1337
|
messageQueueLength: this.#messageQueue.length,
|
|
1378
1338
|
connId: this.#connId
|
|
@@ -1381,14 +1341,14 @@ var ActorConnRaw = class {
|
|
|
1381
1341
|
if (this.#onOpenPromise) {
|
|
1382
1342
|
this.#onOpenPromise.resolve(void 0);
|
|
1383
1343
|
} else {
|
|
1384
|
-
|
|
1344
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).warn({ msg: "#onOpenPromise is undefined" });
|
|
1385
1345
|
}
|
|
1386
1346
|
for (const eventName of this.#eventSubscriptions.keys()) {
|
|
1387
1347
|
this.#sendSubscription(eventName, true);
|
|
1388
1348
|
}
|
|
1389
1349
|
const queue = this.#messageQueue;
|
|
1390
1350
|
this.#messageQueue = [];
|
|
1391
|
-
|
|
1351
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1392
1352
|
msg: "flushing message queue",
|
|
1393
1353
|
queueLength: queue.length
|
|
1394
1354
|
});
|
|
@@ -1399,23 +1359,23 @@ var ActorConnRaw = class {
|
|
|
1399
1359
|
}
|
|
1400
1360
|
/** Called by the onmessage event from drivers. */
|
|
1401
1361
|
async #handleOnMessage(data) {
|
|
1402
|
-
|
|
1362
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).trace({
|
|
1403
1363
|
msg: "received message",
|
|
1404
1364
|
dataType: typeof data,
|
|
1405
1365
|
isBlob: data instanceof Blob,
|
|
1406
1366
|
isArrayBuffer: data instanceof ArrayBuffer
|
|
1407
1367
|
});
|
|
1408
1368
|
const response = await this.#parseMessage(data);
|
|
1409
|
-
|
|
1410
|
-
|
|
1369
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).trace(
|
|
1370
|
+
_chunkMPLMTJY5cjs.getLogMessage.call(void 0, ) ? {
|
|
1411
1371
|
msg: "parsed message",
|
|
1412
|
-
message:
|
|
1372
|
+
message: _chunkHNE2AK6Ccjs.jsonStringifyCompat.call(void 0, response).substring(0, 100) + "..."
|
|
1413
1373
|
} : { msg: "parsed message" }
|
|
1414
1374
|
);
|
|
1415
1375
|
if (response.body.tag === "Init") {
|
|
1416
1376
|
this.#actorId = response.body.val.actorId;
|
|
1417
1377
|
this.#connId = response.body.val.connectionId;
|
|
1418
|
-
|
|
1378
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).trace({
|
|
1419
1379
|
msg: "received init message",
|
|
1420
1380
|
actorId: this.#actorId,
|
|
1421
1381
|
connId: this.#connId
|
|
@@ -1425,7 +1385,7 @@ var ActorConnRaw = class {
|
|
|
1425
1385
|
const { group, code, message, metadata, actionId } = response.body.val;
|
|
1426
1386
|
if (actionId) {
|
|
1427
1387
|
const inFlight = this.#takeActionInFlight(Number(actionId));
|
|
1428
|
-
|
|
1388
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).warn({
|
|
1429
1389
|
msg: "action error",
|
|
1430
1390
|
actionId,
|
|
1431
1391
|
actionName: inFlight == null ? void 0 : inFlight.name,
|
|
@@ -1438,7 +1398,7 @@ var ActorConnRaw = class {
|
|
|
1438
1398
|
new ActorError(group, code, message, metadata)
|
|
1439
1399
|
);
|
|
1440
1400
|
} else {
|
|
1441
|
-
|
|
1401
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).warn({
|
|
1442
1402
|
msg: "connection error",
|
|
1443
1403
|
group,
|
|
1444
1404
|
code,
|
|
@@ -1474,27 +1434,27 @@ var ActorConnRaw = class {
|
|
|
1474
1434
|
}
|
|
1475
1435
|
} else if (response.body.tag === "ActionResponse") {
|
|
1476
1436
|
const { id: actionId } = response.body.val;
|
|
1477
|
-
|
|
1437
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1478
1438
|
msg: "received action response",
|
|
1479
1439
|
actionId: Number(actionId),
|
|
1480
1440
|
inFlightCount: this.#actionsInFlight.size,
|
|
1481
1441
|
inFlightIds: Array.from(this.#actionsInFlight.keys())
|
|
1482
1442
|
});
|
|
1483
1443
|
const inFlight = this.#takeActionInFlight(Number(actionId));
|
|
1484
|
-
|
|
1444
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).trace({
|
|
1485
1445
|
msg: "resolving action promise",
|
|
1486
1446
|
actionId,
|
|
1487
1447
|
actionName: inFlight == null ? void 0 : inFlight.name
|
|
1488
1448
|
});
|
|
1489
1449
|
inFlight.resolve(response.body.val);
|
|
1490
1450
|
} else if (response.body.tag === "Event") {
|
|
1491
|
-
|
|
1451
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).trace({
|
|
1492
1452
|
msg: "received event",
|
|
1493
1453
|
name: response.body.val.name
|
|
1494
1454
|
});
|
|
1495
1455
|
this.#dispatchEvent(response.body.val);
|
|
1496
1456
|
} else {
|
|
1497
|
-
|
|
1457
|
+
_chunkMPLMTJY5cjs.assertUnreachable.call(void 0, response.body);
|
|
1498
1458
|
}
|
|
1499
1459
|
}
|
|
1500
1460
|
/** Called by the onclose event from drivers. */
|
|
@@ -1502,7 +1462,7 @@ var ActorConnRaw = class {
|
|
|
1502
1462
|
const closeEvent = event;
|
|
1503
1463
|
const wasClean = closeEvent.wasClean;
|
|
1504
1464
|
const wasConnected = this.#connStatus === "connected";
|
|
1505
|
-
|
|
1465
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).info({
|
|
1506
1466
|
msg: "socket closed",
|
|
1507
1467
|
code: closeEvent.code,
|
|
1508
1468
|
reason: closeEvent.reason,
|
|
@@ -1556,7 +1516,7 @@ var ActorConnRaw = class {
|
|
|
1556
1516
|
this.#dispatchActorError(error);
|
|
1557
1517
|
}
|
|
1558
1518
|
if (wasConnected) {
|
|
1559
|
-
|
|
1519
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1560
1520
|
msg: "triggering reconnect",
|
|
1561
1521
|
connId: this.#connId
|
|
1562
1522
|
});
|
|
@@ -1580,12 +1540,12 @@ var ActorConnRaw = class {
|
|
|
1580
1540
|
/** Called by the onerror event from drivers. */
|
|
1581
1541
|
#handleOnError() {
|
|
1582
1542
|
if (this.#disposed) return;
|
|
1583
|
-
|
|
1543
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).warn("socket error");
|
|
1584
1544
|
}
|
|
1585
1545
|
#takeActionInFlight(id) {
|
|
1586
1546
|
const inFlight = this.#actionsInFlight.get(id);
|
|
1587
1547
|
if (!inFlight) {
|
|
1588
|
-
|
|
1548
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).error({
|
|
1589
1549
|
msg: "action not found in in-flight map",
|
|
1590
1550
|
lookupId: id,
|
|
1591
1551
|
inFlightCount: this.#actionsInFlight.size,
|
|
@@ -1600,7 +1560,7 @@ var ActorConnRaw = class {
|
|
|
1600
1560
|
throw new InternalError(`No in flight response for ${id}`);
|
|
1601
1561
|
}
|
|
1602
1562
|
this.#actionsInFlight.delete(id);
|
|
1603
|
-
|
|
1563
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1604
1564
|
msg: "removed action from in-flight map",
|
|
1605
1565
|
actionId: id,
|
|
1606
1566
|
actionName: inFlight.name,
|
|
@@ -1627,9 +1587,9 @@ var ActorConnRaw = class {
|
|
|
1627
1587
|
try {
|
|
1628
1588
|
handler(error);
|
|
1629
1589
|
} catch (err) {
|
|
1630
|
-
|
|
1590
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).error({
|
|
1631
1591
|
msg: "error in connection error handler",
|
|
1632
|
-
error:
|
|
1592
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, err)
|
|
1633
1593
|
});
|
|
1634
1594
|
}
|
|
1635
1595
|
}
|
|
@@ -1765,7 +1725,7 @@ var ActorConnRaw = class {
|
|
|
1765
1725
|
let queueMessage = false;
|
|
1766
1726
|
if (this.#websocket) {
|
|
1767
1727
|
const readyState = this.#websocket.readyState;
|
|
1768
|
-
|
|
1728
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1769
1729
|
msg: "websocket send attempt",
|
|
1770
1730
|
readyState,
|
|
1771
1731
|
readyStateString: readyState === 0 ? "CONNECTING" : readyState === 1 ? "OPEN" : readyState === 2 ? "CLOSING" : "CLOSED",
|
|
@@ -1774,7 +1734,7 @@ var ActorConnRaw = class {
|
|
|
1774
1734
|
actionName: (_a = message.body.val) == null ? void 0 : _a.name
|
|
1775
1735
|
});
|
|
1776
1736
|
if (this.#connStatus !== "connected") {
|
|
1777
|
-
|
|
1737
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1778
1738
|
msg: "websocket init pending, queueing message",
|
|
1779
1739
|
connStatus: this.#connStatus,
|
|
1780
1740
|
messageType: message.body.tag
|
|
@@ -1782,12 +1742,12 @@ var ActorConnRaw = class {
|
|
|
1782
1742
|
queueMessage = true;
|
|
1783
1743
|
} else if (readyState === 1) {
|
|
1784
1744
|
try {
|
|
1785
|
-
const messageSerialized =
|
|
1745
|
+
const messageSerialized = _chunkHNE2AK6Ccjs.serializeWithEncoding.call(void 0,
|
|
1786
1746
|
this.#encoding,
|
|
1787
1747
|
message,
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1748
|
+
_chunkHNE2AK6Ccjs.TO_SERVER_VERSIONED,
|
|
1749
|
+
_chunkHNE2AK6Ccjs.CURRENT_VERSION,
|
|
1750
|
+
_chunkHNE2AK6Ccjs.ToServerSchema,
|
|
1791
1751
|
// JSON: args is the raw value
|
|
1792
1752
|
(msg) => msg,
|
|
1793
1753
|
// BARE: args needs to be CBOR-encoded to ArrayBuffer
|
|
@@ -1799,7 +1759,7 @@ var ActorConnRaw = class {
|
|
|
1799
1759
|
val: {
|
|
1800
1760
|
id: msg.body.val.id,
|
|
1801
1761
|
name: msg.body.val.name,
|
|
1802
|
-
args:
|
|
1762
|
+
args: _chunkMPLMTJY5cjs.bufferToArrayBuffer.call(void 0,
|
|
1803
1763
|
cbor4.encode(msg.body.val.args)
|
|
1804
1764
|
)
|
|
1805
1765
|
}
|
|
@@ -1811,12 +1771,12 @@ var ActorConnRaw = class {
|
|
|
1811
1771
|
}
|
|
1812
1772
|
);
|
|
1813
1773
|
this.#websocket.send(messageSerialized);
|
|
1814
|
-
|
|
1774
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).trace({
|
|
1815
1775
|
msg: "sent websocket message",
|
|
1816
1776
|
len: messageLength(messageSerialized)
|
|
1817
1777
|
});
|
|
1818
1778
|
} catch (error) {
|
|
1819
|
-
|
|
1779
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).warn({
|
|
1820
1780
|
msg: "failed to send message, added to queue",
|
|
1821
1781
|
error,
|
|
1822
1782
|
connId: this.#connId
|
|
@@ -1824,19 +1784,19 @@ var ActorConnRaw = class {
|
|
|
1824
1784
|
queueMessage = true;
|
|
1825
1785
|
}
|
|
1826
1786
|
} else {
|
|
1827
|
-
|
|
1787
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1828
1788
|
msg: "websocket not open, queueing message",
|
|
1829
1789
|
readyState
|
|
1830
1790
|
});
|
|
1831
1791
|
queueMessage = true;
|
|
1832
1792
|
}
|
|
1833
1793
|
} else {
|
|
1834
|
-
|
|
1794
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({ msg: "no websocket, queueing message" });
|
|
1835
1795
|
queueMessage = true;
|
|
1836
1796
|
}
|
|
1837
1797
|
if (!(opts == null ? void 0 : opts.ephemeral) && queueMessage) {
|
|
1838
1798
|
this.#messageQueue.push(message);
|
|
1839
|
-
|
|
1799
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({
|
|
1840
1800
|
msg: "queued connection message",
|
|
1841
1801
|
queueLength: this.#messageQueue.length,
|
|
1842
1802
|
connId: this.#connId,
|
|
@@ -1847,12 +1807,12 @@ var ActorConnRaw = class {
|
|
|
1847
1807
|
}
|
|
1848
1808
|
async #parseMessage(data) {
|
|
1849
1809
|
_invariant2.default.call(void 0, this.#websocket, "websocket must be defined");
|
|
1850
|
-
const buffer = await
|
|
1851
|
-
return
|
|
1810
|
+
const buffer = await _chunkHNE2AK6Ccjs.inputDataToBuffer.call(void 0, data);
|
|
1811
|
+
return _chunkHNE2AK6Ccjs.deserializeWithEncoding.call(void 0,
|
|
1852
1812
|
this.#encoding,
|
|
1853
1813
|
buffer,
|
|
1854
|
-
|
|
1855
|
-
|
|
1814
|
+
_chunkHNE2AK6Ccjs.TO_CLIENT_VERSIONED,
|
|
1815
|
+
_chunkHNE2AK6Ccjs.ToClientSchema,
|
|
1856
1816
|
// JSON: values are already the correct type
|
|
1857
1817
|
(msg) => msg,
|
|
1858
1818
|
// BARE: need to decode ArrayBuffer fields back to unknown
|
|
@@ -1933,11 +1893,11 @@ var ActorConnRaw = class {
|
|
|
1933
1893
|
*/
|
|
1934
1894
|
async dispose() {
|
|
1935
1895
|
if (this.#disposed) {
|
|
1936
|
-
|
|
1896
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).warn({ msg: "connection already disconnected" });
|
|
1937
1897
|
return;
|
|
1938
1898
|
}
|
|
1939
1899
|
this.#disposed = true;
|
|
1940
|
-
|
|
1900
|
+
_chunkV3JSZR5Pcjs.logger.call(void 0, ).debug({ msg: "disposing actor conn" });
|
|
1941
1901
|
this.#setConnStatus("idle");
|
|
1942
1902
|
clearInterval(this.#keepNodeAliveInterval);
|
|
1943
1903
|
this.#abortController.abort();
|
|
@@ -1945,7 +1905,12 @@ var ActorConnRaw = class {
|
|
|
1945
1905
|
if (this.#websocket) {
|
|
1946
1906
|
const ws = this.#websocket;
|
|
1947
1907
|
if (ws.readyState !== 2 && ws.readyState !== 3) {
|
|
1948
|
-
const { promise, resolve } =
|
|
1908
|
+
const { promise, resolve } = _chunkMPLMTJY5cjs.promiseWithResolvers.call(void 0,
|
|
1909
|
+
(reason) => _chunkV3JSZR5Pcjs.logger.call(void 0, ).warn({
|
|
1910
|
+
msg: "unhandled websocket close promise rejection",
|
|
1911
|
+
reason
|
|
1912
|
+
})
|
|
1913
|
+
);
|
|
1949
1914
|
ws.addEventListener("close", () => resolve(void 0));
|
|
1950
1915
|
ws.close(1e3, "Disposed");
|
|
1951
1916
|
await promise;
|
|
@@ -1971,672 +1936,743 @@ var ActorConnRaw = class {
|
|
|
1971
1936
|
}
|
|
1972
1937
|
};
|
|
1973
1938
|
|
|
1974
|
-
// src/client/
|
|
1939
|
+
// src/client/config.ts
|
|
1940
|
+
var _v4 = require('zod/v4'); var _v42 = _interopRequireDefault(_v4);
|
|
1941
|
+
var DEFAULT_ENDPOINT = "http://localhost:6420";
|
|
1942
|
+
var hasWarnedMissingEndpoint = false;
|
|
1943
|
+
var ClientConfigSchemaBase = _v42.default.object({
|
|
1944
|
+
/**
|
|
1945
|
+
* Endpoint to connect to for Rivet Engine or RivetKit manager API.
|
|
1946
|
+
*
|
|
1947
|
+
* Supports URL auth syntax for namespace and token:
|
|
1948
|
+
* - `https://namespace:token@api.rivet.dev`
|
|
1949
|
+
* - `https://namespace@api.rivet.dev`
|
|
1950
|
+
*
|
|
1951
|
+
* Can also be set via RIVET_ENDPOINT environment variables.
|
|
1952
|
+
*
|
|
1953
|
+
* Defaults to http://localhost:6420.
|
|
1954
|
+
*/
|
|
1955
|
+
endpoint: _v42.default.string().optional().transform((val) => {
|
|
1956
|
+
const resolved = _nullishCoalesce(_nullishCoalesce(val, () => ( _chunkMPLMTJY5cjs.getRivetEngine.call(void 0, ))), () => ( _chunkMPLMTJY5cjs.getRivetEndpoint.call(void 0, )));
|
|
1957
|
+
if (!resolved && !hasWarnedMissingEndpoint) {
|
|
1958
|
+
hasWarnedMissingEndpoint = true;
|
|
1959
|
+
console.warn(
|
|
1960
|
+
`[rivetkit] No endpoint provided to client. Defaulting to ${DEFAULT_ENDPOINT}. Starting in 2.2.0, an explicit endpoint will be required. Pass an endpoint to createClient() or createRivetKit(), or set the RIVET_ENDPOINT environment variable.`
|
|
1961
|
+
);
|
|
1962
|
+
}
|
|
1963
|
+
return _nullishCoalesce(resolved, () => ( DEFAULT_ENDPOINT));
|
|
1964
|
+
}),
|
|
1965
|
+
/** Token to use to authenticate with the API. */
|
|
1966
|
+
token: _v42.default.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunkMPLMTJY5cjs.getRivetToken.call(void 0, )))),
|
|
1967
|
+
/** Namespace to connect to. */
|
|
1968
|
+
namespace: _v42.default.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunkMPLMTJY5cjs.getRivetNamespace.call(void 0, )))),
|
|
1969
|
+
/** Name of the runner. This is used to group together runners in to different pools. */
|
|
1970
|
+
runnerName: _v42.default.string().default(() => _nullishCoalesce(_chunkMPLMTJY5cjs.getRivetRunner.call(void 0, ), () => ( "default"))),
|
|
1971
|
+
encoding: _chunkHNE2AK6Ccjs.EncodingSchema.default("bare"),
|
|
1972
|
+
headers: _v42.default.record(_v42.default.string(), _v42.default.string()).optional().default(() => ({})),
|
|
1973
|
+
// See RunConfig.getUpgradeWebSocket
|
|
1974
|
+
//
|
|
1975
|
+
// This is required in the client config in order to support
|
|
1976
|
+
// `proxyWebSocket`
|
|
1977
|
+
getUpgradeWebSocket: _v42.default.custom().optional(),
|
|
1978
|
+
/** Whether to automatically perform health checks when the client is created. */
|
|
1979
|
+
disableMetadataLookup: _v42.default.boolean().optional().default(false),
|
|
1980
|
+
/** Whether to enable RivetKit Devtools integration. */
|
|
1981
|
+
devtools: _v42.default.boolean().default(
|
|
1982
|
+
() => {
|
|
1983
|
+
var _a, _b;
|
|
1984
|
+
return typeof window !== "undefined" && (((_a = window == null ? void 0 : window.location) == null ? void 0 : _a.hostname) === "127.0.0.1" || ((_b = window.location) == null ? void 0 : _b.hostname) === "localhost");
|
|
1985
|
+
}
|
|
1986
|
+
)
|
|
1987
|
+
});
|
|
1988
|
+
var ClientConfigSchema = ClientConfigSchemaBase.transform(
|
|
1989
|
+
(config, ctx) => transformClientConfig(config, ctx)
|
|
1990
|
+
);
|
|
1991
|
+
function transformClientConfig(config, ctx) {
|
|
1992
|
+
const parsedEndpoint = _chunkHNE2AK6Ccjs.tryParseEndpoint.call(void 0, ctx, {
|
|
1993
|
+
endpoint: config.endpoint,
|
|
1994
|
+
path: ["endpoint"],
|
|
1995
|
+
namespace: config.namespace,
|
|
1996
|
+
token: config.token
|
|
1997
|
+
});
|
|
1998
|
+
return {
|
|
1999
|
+
...config,
|
|
2000
|
+
endpoint: parsedEndpoint == null ? void 0 : parsedEndpoint.endpoint,
|
|
2001
|
+
namespace: _nullishCoalesce(_nullishCoalesce((parsedEndpoint == null ? void 0 : parsedEndpoint.namespace), () => ( config.namespace)), () => ( "default")),
|
|
2002
|
+
token: _nullishCoalesce((parsedEndpoint == null ? void 0 : parsedEndpoint.token), () => ( config.token))
|
|
2003
|
+
};
|
|
2004
|
+
}
|
|
2005
|
+
function convertRegistryConfigToClientConfig(config) {
|
|
2006
|
+
var _a, _b;
|
|
2007
|
+
return {
|
|
2008
|
+
endpoint: config.endpoint,
|
|
2009
|
+
token: config.token,
|
|
2010
|
+
namespace: config.namespace,
|
|
2011
|
+
runnerName: config.runner.runnerName,
|
|
2012
|
+
headers: config.headers,
|
|
2013
|
+
encoding: "bare",
|
|
2014
|
+
getUpgradeWebSocket: void 0,
|
|
2015
|
+
// We don't need health checks for internal clients
|
|
2016
|
+
disableMetadataLookup: true,
|
|
2017
|
+
devtools: typeof window !== "undefined" && (((_a = window == null ? void 0 : window.location) == null ? void 0 : _a.hostname) === "127.0.0.1" || ((_b = window == null ? void 0 : window.location) == null ? void 0 : _b.hostname) === "localhost")
|
|
2018
|
+
};
|
|
2019
|
+
}
|
|
1975
2020
|
|
|
2021
|
+
// src/remote-manager-driver/mod.ts
|
|
1976
2022
|
|
|
1977
2023
|
|
|
1978
|
-
// src/client/raw-utils.ts
|
|
1979
2024
|
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
});
|
|
1996
|
-
mergedInit = {
|
|
1997
|
-
method: input.method,
|
|
1998
|
-
body: input.body,
|
|
1999
|
-
mode: input.mode,
|
|
2000
|
-
credentials: input.credentials,
|
|
2001
|
-
redirect: input.redirect,
|
|
2002
|
-
referrer: input.referrer,
|
|
2003
|
-
referrerPolicy: input.referrerPolicy,
|
|
2004
|
-
integrity: input.integrity,
|
|
2005
|
-
keepalive: input.keepalive,
|
|
2006
|
-
signal: input.signal,
|
|
2007
|
-
...mergedInit,
|
|
2008
|
-
// init overrides Request properties
|
|
2009
|
-
headers: mergedHeaders
|
|
2010
|
-
// headers must be set after spread to ensure proper merge
|
|
2011
|
-
};
|
|
2012
|
-
if (mergedInit.body) {
|
|
2013
|
-
mergedInit.duplex = "half";
|
|
2014
|
-
}
|
|
2015
|
-
} else {
|
|
2016
|
-
throw new TypeError("Invalid input type for fetch");
|
|
2025
|
+
// src/remote-manager-driver/api-utils.ts
|
|
2026
|
+
|
|
2027
|
+
|
|
2028
|
+
// src/remote-manager-driver/log.ts
|
|
2029
|
+
function logger2() {
|
|
2030
|
+
return _chunkMPLMTJY5cjs.getLogger.call(void 0, "remote-manager-driver");
|
|
2031
|
+
}
|
|
2032
|
+
|
|
2033
|
+
// src/remote-manager-driver/api-utils.ts
|
|
2034
|
+
var EngineApiError = class extends Error {
|
|
2035
|
+
constructor(group, code, message) {
|
|
2036
|
+
super(message || `Engine API error: ${group}/${code}`);
|
|
2037
|
+
this.group = group;
|
|
2038
|
+
this.code = code;
|
|
2039
|
+
this.name = "EngineApiError";
|
|
2017
2040
|
}
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
}
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
2037
|
-
|
|
2038
|
-
|
|
2041
|
+
};
|
|
2042
|
+
function getEndpoint(config) {
|
|
2043
|
+
return _nullishCoalesce(config.endpoint, () => ( "http://127.0.0.1:6420"));
|
|
2044
|
+
}
|
|
2045
|
+
async function apiCall(config, method, path, body) {
|
|
2046
|
+
const endpoint = getEndpoint(config);
|
|
2047
|
+
const url = _chunkMPLMTJY5cjs.combineUrlPath.call(void 0, endpoint, path, {
|
|
2048
|
+
namespace: config.namespace
|
|
2049
|
+
});
|
|
2050
|
+
logger2().debug({ msg: "making api call", method, url });
|
|
2051
|
+
const headers = {
|
|
2052
|
+
...config.headers
|
|
2053
|
+
};
|
|
2054
|
+
if (config.token) {
|
|
2055
|
+
headers.Authorization = `Bearer ${config.token}`;
|
|
2056
|
+
}
|
|
2057
|
+
return await sendHttpRequest({
|
|
2058
|
+
method,
|
|
2059
|
+
url,
|
|
2060
|
+
headers,
|
|
2061
|
+
body,
|
|
2062
|
+
encoding: "json",
|
|
2063
|
+
skipParseResponse: false,
|
|
2064
|
+
requestVersionedDataHandler: void 0,
|
|
2065
|
+
requestVersion: void 0,
|
|
2066
|
+
responseVersionedDataHandler: void 0,
|
|
2067
|
+
responseVersion: void 0,
|
|
2068
|
+
requestZodSchema: _v4.z.any(),
|
|
2069
|
+
responseZodSchema: _v4.z.any(),
|
|
2070
|
+
// Identity conversions (passthrough for generic API calls)
|
|
2071
|
+
requestToJson: (value) => value,
|
|
2072
|
+
requestToBare: (value) => value,
|
|
2073
|
+
responseFromJson: (value) => value,
|
|
2074
|
+
responseFromBare: (value) => value
|
|
2075
|
+
});
|
|
2076
|
+
}
|
|
2077
|
+
|
|
2078
|
+
// src/remote-manager-driver/actor-websocket-client.ts
|
|
2079
|
+
function buildActorGatewayUrl(endpoint, actorId, token, path = "") {
|
|
2080
|
+
const tokenSegment = token !== void 0 ? `@${encodeURIComponent(token)}` : "";
|
|
2081
|
+
const gatewayPath = `/gateway/${encodeURIComponent(actorId)}${tokenSegment}${path}`;
|
|
2082
|
+
return _chunkMPLMTJY5cjs.combineUrlPath.call(void 0, endpoint, gatewayPath);
|
|
2083
|
+
}
|
|
2084
|
+
async function openWebSocketToActor(runConfig, path, actorId, encoding, params) {
|
|
2085
|
+
const WebSocket2 = await _chunkV3JSZR5Pcjs.importWebSocket.call(void 0, );
|
|
2086
|
+
const endpoint = getEndpoint(runConfig);
|
|
2087
|
+
const guardUrl = buildActorGatewayUrl(
|
|
2088
|
+
endpoint,
|
|
2089
|
+
actorId,
|
|
2090
|
+
runConfig.token,
|
|
2091
|
+
path
|
|
2092
|
+
);
|
|
2093
|
+
logger2().debug({
|
|
2094
|
+
msg: "opening websocket to actor via guard",
|
|
2095
|
+
actorId,
|
|
2096
|
+
path,
|
|
2097
|
+
guardUrl
|
|
2098
|
+
});
|
|
2099
|
+
const ws = new WebSocket2(
|
|
2100
|
+
guardUrl,
|
|
2101
|
+
buildWebSocketProtocols(runConfig, encoding, params)
|
|
2102
|
+
);
|
|
2103
|
+
ws.binaryType = "arraybuffer";
|
|
2104
|
+
logger2().debug({ msg: "websocket connection opened", actorId });
|
|
2105
|
+
return ws;
|
|
2106
|
+
}
|
|
2107
|
+
function buildWebSocketProtocols(runConfig, encoding, params) {
|
|
2108
|
+
const protocols = [];
|
|
2109
|
+
protocols.push(_chunkHNE2AK6Ccjs.WS_PROTOCOL_STANDARD);
|
|
2110
|
+
protocols.push(`${_chunkHNE2AK6Ccjs.WS_PROTOCOL_ENCODING}${encoding}`);
|
|
2111
|
+
if (params) {
|
|
2112
|
+
protocols.push(
|
|
2113
|
+
`${_chunkHNE2AK6Ccjs.WS_PROTOCOL_CONN_PARAMS}${encodeURIComponent(JSON.stringify(params))}`
|
|
2039
2114
|
);
|
|
2040
|
-
throw new ActorError(group, code, message, metadata);
|
|
2041
2115
|
}
|
|
2116
|
+
return protocols;
|
|
2042
2117
|
}
|
|
2043
|
-
|
|
2044
|
-
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
|
|
2052
|
-
|
|
2053
|
-
|
|
2054
|
-
|
|
2055
|
-
|
|
2056
|
-
|
|
2118
|
+
|
|
2119
|
+
// src/remote-manager-driver/actor-http-client.ts
|
|
2120
|
+
async function sendHttpRequestToActor(runConfig, actorId, actorRequest) {
|
|
2121
|
+
const url = new URL(actorRequest.url);
|
|
2122
|
+
const endpoint = getEndpoint(runConfig);
|
|
2123
|
+
const guardUrl = buildActorGatewayUrl(
|
|
2124
|
+
endpoint,
|
|
2125
|
+
actorId,
|
|
2126
|
+
runConfig.token,
|
|
2127
|
+
`${url.pathname}${url.search}`
|
|
2128
|
+
);
|
|
2129
|
+
let bodyToSend = null;
|
|
2130
|
+
const guardHeaders = buildGuardHeadersForHttp(
|
|
2131
|
+
runConfig,
|
|
2132
|
+
actorRequest,
|
|
2133
|
+
actorId
|
|
2134
|
+
);
|
|
2135
|
+
if (actorRequest.method !== "GET" && actorRequest.method !== "HEAD") {
|
|
2136
|
+
if (actorRequest.bodyUsed) {
|
|
2137
|
+
throw new Error("Request body has already been consumed");
|
|
2057
2138
|
}
|
|
2058
|
-
|
|
2059
|
-
|
|
2139
|
+
const reqBody = await actorRequest.arrayBuffer();
|
|
2140
|
+
if (reqBody.byteLength !== 0) {
|
|
2141
|
+
bodyToSend = reqBody;
|
|
2142
|
+
guardHeaders.delete("transfer-encoding");
|
|
2143
|
+
guardHeaders.set("content-length", String(bodyToSend.byteLength));
|
|
2060
2144
|
}
|
|
2061
2145
|
}
|
|
2062
|
-
const
|
|
2063
|
-
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
path: fullPath
|
|
2146
|
+
const guardRequest = new Request(guardUrl, {
|
|
2147
|
+
method: actorRequest.method,
|
|
2148
|
+
headers: guardHeaders,
|
|
2149
|
+
body: bodyToSend,
|
|
2150
|
+
signal: actorRequest.signal
|
|
2068
2151
|
});
|
|
2069
|
-
|
|
2070
|
-
|
|
2152
|
+
return mutableResponse(await fetch(guardRequest));
|
|
2153
|
+
}
|
|
2154
|
+
function mutableResponse(fetchRes) {
|
|
2155
|
+
return new Response(fetchRes.body, fetchRes);
|
|
2156
|
+
}
|
|
2157
|
+
function buildGuardHeadersForHttp(runConfig, actorRequest, actorId) {
|
|
2158
|
+
const headers = new Headers();
|
|
2159
|
+
actorRequest.headers.forEach((value, key) => {
|
|
2160
|
+
headers.set(key, value);
|
|
2161
|
+
});
|
|
2162
|
+
for (const [key, value] of Object.entries(runConfig.headers)) {
|
|
2163
|
+
headers.set(key, value);
|
|
2164
|
+
}
|
|
2165
|
+
if (runConfig.token) {
|
|
2166
|
+
headers.set(_chunkHNE2AK6Ccjs.HEADER_RIVET_TOKEN, runConfig.token);
|
|
2167
|
+
}
|
|
2168
|
+
return headers;
|
|
2071
2169
|
}
|
|
2072
2170
|
|
|
2073
|
-
// src/
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2103
|
-
|
|
2171
|
+
// src/remote-manager-driver/api-endpoints.ts
|
|
2172
|
+
async function getActor(config, _, actorId) {
|
|
2173
|
+
return apiCall(
|
|
2174
|
+
config,
|
|
2175
|
+
"GET",
|
|
2176
|
+
`/actors?actor_ids=${encodeURIComponent(actorId)}`
|
|
2177
|
+
);
|
|
2178
|
+
}
|
|
2179
|
+
async function getActorByKey(config, name, key) {
|
|
2180
|
+
const serializedKey = _chunkHNE2AK6Ccjs.serializeActorKey.call(void 0, key);
|
|
2181
|
+
return apiCall(
|
|
2182
|
+
config,
|
|
2183
|
+
"GET",
|
|
2184
|
+
`/actors?name=${encodeURIComponent(name)}&key=${encodeURIComponent(serializedKey)}`
|
|
2185
|
+
);
|
|
2186
|
+
}
|
|
2187
|
+
async function listActorsByName(config, name) {
|
|
2188
|
+
return apiCall(
|
|
2189
|
+
config,
|
|
2190
|
+
"GET",
|
|
2191
|
+
`/actors?name=${encodeURIComponent(name)}`
|
|
2192
|
+
);
|
|
2193
|
+
}
|
|
2194
|
+
async function getOrCreateActor(config, request) {
|
|
2195
|
+
return apiCall(
|
|
2196
|
+
config,
|
|
2197
|
+
"PUT",
|
|
2198
|
+
`/actors`,
|
|
2199
|
+
request
|
|
2200
|
+
);
|
|
2201
|
+
}
|
|
2202
|
+
async function createActor(config, request) {
|
|
2203
|
+
return apiCall(
|
|
2204
|
+
config,
|
|
2205
|
+
"POST",
|
|
2206
|
+
`/actors`,
|
|
2207
|
+
request
|
|
2208
|
+
);
|
|
2209
|
+
}
|
|
2210
|
+
async function destroyActor(config, actorId) {
|
|
2211
|
+
return apiCall(
|
|
2212
|
+
config,
|
|
2213
|
+
"DELETE",
|
|
2214
|
+
`/actors/${encodeURIComponent(actorId)}`
|
|
2215
|
+
);
|
|
2216
|
+
}
|
|
2217
|
+
async function getMetadata(config) {
|
|
2218
|
+
return apiCall(config, "GET", `/metadata`);
|
|
2219
|
+
}
|
|
2220
|
+
async function getDatacenters(config) {
|
|
2221
|
+
return apiCall(config, "GET", `/datacenters`);
|
|
2222
|
+
}
|
|
2223
|
+
async function updateRunnerConfig(config, runnerName, request) {
|
|
2224
|
+
return apiCall(
|
|
2225
|
+
config,
|
|
2226
|
+
"PUT",
|
|
2227
|
+
`/runner-configs/${runnerName}`,
|
|
2228
|
+
request
|
|
2229
|
+
);
|
|
2230
|
+
}
|
|
2231
|
+
async function kvGet(config, actorId, key) {
|
|
2232
|
+
return apiCall(
|
|
2233
|
+
config,
|
|
2234
|
+
"GET",
|
|
2235
|
+
`/actors/${encodeURIComponent(actorId)}/kv/keys/${encodeURIComponent(key)}`
|
|
2236
|
+
);
|
|
2237
|
+
}
|
|
2238
|
+
|
|
2239
|
+
// src/remote-manager-driver/metadata.ts
|
|
2240
|
+
|
|
2241
|
+
var metadataLookupCache = /* @__PURE__ */ new Map();
|
|
2242
|
+
async function lookupMetadataCached(config) {
|
|
2243
|
+
const endpoint = getEndpoint(config);
|
|
2244
|
+
const existingPromise = metadataLookupCache.get(endpoint);
|
|
2245
|
+
if (existingPromise) {
|
|
2246
|
+
return existingPromise;
|
|
2247
|
+
}
|
|
2248
|
+
const metadataLookupPromise = _pretry2.default.call(void 0,
|
|
2249
|
+
async () => {
|
|
2250
|
+
logger2().debug({
|
|
2251
|
+
msg: "fetching metadata",
|
|
2252
|
+
endpoint
|
|
2253
|
+
});
|
|
2254
|
+
const metadataData = await getMetadata(config);
|
|
2255
|
+
logger2().debug({
|
|
2256
|
+
msg: "received metadata",
|
|
2257
|
+
endpoint,
|
|
2258
|
+
clientEndpoint: metadataData.clientEndpoint
|
|
2259
|
+
});
|
|
2260
|
+
return metadataData;
|
|
2261
|
+
},
|
|
2262
|
+
{
|
|
2263
|
+
forever: true,
|
|
2264
|
+
minTimeout: 500,
|
|
2265
|
+
maxTimeout: 15e3,
|
|
2266
|
+
onFailedAttempt: (error) => {
|
|
2267
|
+
if (error.attemptNumber > 1) {
|
|
2268
|
+
logger2().warn({
|
|
2269
|
+
msg: "failed to fetch metadata, retrying",
|
|
2270
|
+
endpoint,
|
|
2271
|
+
attempt: error.attemptNumber,
|
|
2272
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2273
|
+
});
|
|
2274
|
+
}
|
|
2275
|
+
}
|
|
2276
|
+
}
|
|
2277
|
+
);
|
|
2278
|
+
metadataLookupCache.set(endpoint, metadataLookupPromise);
|
|
2279
|
+
return metadataLookupPromise;
|
|
2280
|
+
}
|
|
2281
|
+
|
|
2282
|
+
// src/remote-manager-driver/ws-proxy.ts
|
|
2283
|
+
async function createWebSocketProxy(c, targetUrl, protocols) {
|
|
2284
|
+
const WebSocket2 = await _chunkV3JSZR5Pcjs.importWebSocket.call(void 0, );
|
|
2285
|
+
const state = {};
|
|
2286
|
+
return {
|
|
2287
|
+
onOpen: async (event, clientWs) => {
|
|
2288
|
+
logger2().debug({ msg: "client websocket connected", targetUrl });
|
|
2289
|
+
if (clientWs.readyState !== 1) {
|
|
2290
|
+
logger2().warn({
|
|
2291
|
+
msg: "client websocket not open on connection",
|
|
2292
|
+
targetUrl,
|
|
2293
|
+
readyState: clientWs.readyState
|
|
2294
|
+
});
|
|
2295
|
+
return;
|
|
2104
2296
|
}
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
|
|
2129
|
-
|
|
2130
|
-
|
|
2131
|
-
|
|
2297
|
+
const targetWs = new WebSocket2(targetUrl, protocols);
|
|
2298
|
+
state.targetWs = targetWs;
|
|
2299
|
+
state.connectPromise = new Promise((resolve, reject) => {
|
|
2300
|
+
targetWs.addEventListener("open", () => {
|
|
2301
|
+
logger2().debug({
|
|
2302
|
+
msg: "target websocket connected",
|
|
2303
|
+
targetUrl
|
|
2304
|
+
});
|
|
2305
|
+
if (clientWs.readyState !== 1) {
|
|
2306
|
+
logger2().warn({
|
|
2307
|
+
msg: "client websocket closed before target connected",
|
|
2308
|
+
targetUrl,
|
|
2309
|
+
clientReadyState: clientWs.readyState
|
|
2310
|
+
});
|
|
2311
|
+
targetWs.close(1001, "Client disconnected");
|
|
2312
|
+
reject(new Error("Client disconnected"));
|
|
2313
|
+
return;
|
|
2314
|
+
}
|
|
2315
|
+
resolve();
|
|
2316
|
+
});
|
|
2317
|
+
targetWs.addEventListener("error", (error) => {
|
|
2318
|
+
logger2().warn({
|
|
2319
|
+
msg: "target websocket error during connection",
|
|
2320
|
+
targetUrl
|
|
2321
|
+
});
|
|
2322
|
+
reject(error);
|
|
2323
|
+
});
|
|
2132
2324
|
});
|
|
2133
|
-
|
|
2134
|
-
|
|
2135
|
-
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
encoding: this.#encoding,
|
|
2142
|
-
customFetch: this.#driver.sendRequest.bind(
|
|
2143
|
-
this.#driver,
|
|
2144
|
-
actorId
|
|
2145
|
-
),
|
|
2146
|
-
signal: opts == null ? void 0 : opts.signal,
|
|
2147
|
-
requestVersion: _chunkTI5PXQGGcjs.CURRENT_VERSION,
|
|
2148
|
-
requestVersionedDataHandler: _chunkTI5PXQGGcjs.HTTP_ACTION_REQUEST_VERSIONED,
|
|
2149
|
-
responseVersion: _chunkTI5PXQGGcjs.CURRENT_VERSION,
|
|
2150
|
-
responseVersionedDataHandler: _chunkTI5PXQGGcjs.HTTP_ACTION_RESPONSE_VERSIONED,
|
|
2151
|
-
requestZodSchema: _chunkTI5PXQGGcjs.HttpActionRequestSchema,
|
|
2152
|
-
responseZodSchema: _chunkTI5PXQGGcjs.HttpActionResponseSchema,
|
|
2153
|
-
// JSON Request: args is the raw value
|
|
2154
|
-
requestToJson: (args) => ({
|
|
2155
|
-
args
|
|
2156
|
-
}),
|
|
2157
|
-
// BARE Request: args needs to be CBOR-encoded
|
|
2158
|
-
requestToBare: (args) => ({
|
|
2159
|
-
args: _chunkHYPIHCDTcjs.bufferToArrayBuffer.call(void 0, cbor5.encode(args))
|
|
2160
|
-
}),
|
|
2161
|
-
// JSON Response: output is the raw value
|
|
2162
|
-
responseFromJson: (json) => json.output,
|
|
2163
|
-
// BARE Response: output is ArrayBuffer that needs CBOR-decoding
|
|
2164
|
-
responseFromBare: (bare) => cbor5.decode(new Uint8Array(bare.output))
|
|
2325
|
+
state.targetWs.addEventListener("message", (event2) => {
|
|
2326
|
+
if (typeof event2.data === "string" || event2.data instanceof ArrayBuffer) {
|
|
2327
|
+
clientWs.send(event2.data);
|
|
2328
|
+
} else if (event2.data instanceof Blob) {
|
|
2329
|
+
event2.data.arrayBuffer().then((buffer) => {
|
|
2330
|
+
clientWs.send(buffer);
|
|
2331
|
+
});
|
|
2332
|
+
}
|
|
2165
2333
|
});
|
|
2166
|
-
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2170
|
-
|
|
2171
|
-
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2334
|
+
state.targetWs.addEventListener("close", (event2) => {
|
|
2335
|
+
logger2().debug({
|
|
2336
|
+
msg: "target websocket closed",
|
|
2337
|
+
targetUrl,
|
|
2338
|
+
code: event2.code,
|
|
2339
|
+
reason: event2.reason
|
|
2340
|
+
});
|
|
2341
|
+
closeWebSocketIfOpen(clientWs, event2.code, event2.reason);
|
|
2342
|
+
});
|
|
2343
|
+
state.targetWs.addEventListener("error", (error) => {
|
|
2344
|
+
logger2().error({
|
|
2345
|
+
msg: "target websocket error",
|
|
2346
|
+
targetUrl,
|
|
2347
|
+
error: _chunkMPLMTJY5cjs.stringifyError.call(void 0, error)
|
|
2348
|
+
});
|
|
2349
|
+
closeWebSocketIfOpen(clientWs, 1011, "Target WebSocket error");
|
|
2350
|
+
});
|
|
2351
|
+
},
|
|
2352
|
+
onMessage: async (event, clientWs) => {
|
|
2353
|
+
if (!state.targetWs || !state.connectPromise) {
|
|
2354
|
+
logger2().error({
|
|
2355
|
+
msg: "websocket state not initialized",
|
|
2356
|
+
targetUrl
|
|
2357
|
+
});
|
|
2358
|
+
return;
|
|
2359
|
+
}
|
|
2360
|
+
try {
|
|
2361
|
+
await state.connectPromise;
|
|
2362
|
+
if (state.targetWs.readyState === WebSocket2.OPEN) {
|
|
2363
|
+
state.targetWs.send(event.data);
|
|
2364
|
+
} else {
|
|
2365
|
+
logger2().warn({
|
|
2366
|
+
msg: "target websocket not open",
|
|
2367
|
+
targetUrl,
|
|
2368
|
+
readyState: state.targetWs.readyState
|
|
2369
|
+
});
|
|
2370
|
+
}
|
|
2371
|
+
} catch (error) {
|
|
2372
|
+
logger2().error({
|
|
2373
|
+
msg: "failed to connect to target websocket",
|
|
2374
|
+
targetUrl,
|
|
2375
|
+
error
|
|
2376
|
+
});
|
|
2377
|
+
closeWebSocketIfOpen(
|
|
2378
|
+
clientWs,
|
|
2379
|
+
1011,
|
|
2380
|
+
"Failed to connect to target"
|
|
2181
2381
|
);
|
|
2182
|
-
|
|
2183
|
-
|
|
2382
|
+
}
|
|
2383
|
+
},
|
|
2384
|
+
onClose: (event, clientWs) => {
|
|
2385
|
+
logger2().debug({
|
|
2386
|
+
msg: "client websocket closed",
|
|
2387
|
+
targetUrl,
|
|
2388
|
+
code: event.code,
|
|
2389
|
+
reason: event.reason,
|
|
2390
|
+
wasClean: event.wasClean
|
|
2391
|
+
});
|
|
2392
|
+
if (state.targetWs) {
|
|
2393
|
+
if (state.targetWs.readyState === WebSocket2.OPEN || state.targetWs.readyState === WebSocket2.CONNECTING) {
|
|
2394
|
+
state.targetWs.close(
|
|
2395
|
+
1e3,
|
|
2396
|
+
event.reason || "Client disconnected"
|
|
2397
|
+
);
|
|
2398
|
+
}
|
|
2399
|
+
}
|
|
2400
|
+
},
|
|
2401
|
+
onError: (event, clientWs) => {
|
|
2402
|
+
logger2().error({ msg: "client websocket error", targetUrl, event });
|
|
2403
|
+
if (state.targetWs) {
|
|
2404
|
+
if (state.targetWs.readyState === WebSocket2.OPEN) {
|
|
2405
|
+
state.targetWs.close(1011, "Client WebSocket error");
|
|
2406
|
+
} else if (state.targetWs.readyState === WebSocket2.CONNECTING) {
|
|
2407
|
+
state.targetWs.close();
|
|
2184
2408
|
}
|
|
2185
2409
|
}
|
|
2186
|
-
throw new ActorError(group, code, message, metadata);
|
|
2187
2410
|
}
|
|
2411
|
+
};
|
|
2412
|
+
}
|
|
2413
|
+
function closeWebSocketIfOpen(ws, code, reason) {
|
|
2414
|
+
if (ws.readyState === 1) {
|
|
2415
|
+
ws.close(code, reason);
|
|
2416
|
+
} else if ("close" in ws && ws.readyState === WebSocket.OPEN) {
|
|
2417
|
+
ws.close(code, reason);
|
|
2188
2418
|
}
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
});
|
|
2200
|
-
const conn = new ActorConnRaw(
|
|
2201
|
-
this.#client,
|
|
2202
|
-
this.#driver,
|
|
2203
|
-
this.#params,
|
|
2204
|
-
this.#encoding,
|
|
2205
|
-
this.#actorQuery
|
|
2206
|
-
);
|
|
2207
|
-
return this.#client[CREATE_ACTOR_CONN_PROXY](
|
|
2208
|
-
conn
|
|
2209
|
-
);
|
|
2210
|
-
}
|
|
2211
|
-
/**
|
|
2212
|
-
* Fetches a resource from this actor via the /request endpoint. This is a
|
|
2213
|
-
* convenience wrapper around the raw HTTP API.
|
|
2214
|
-
*/
|
|
2215
|
-
fetch(input, init) {
|
|
2216
|
-
return rawHttpFetch(
|
|
2217
|
-
this.#driver,
|
|
2218
|
-
this.#actorQuery,
|
|
2219
|
-
this.#params,
|
|
2220
|
-
input,
|
|
2221
|
-
init
|
|
2222
|
-
);
|
|
2223
|
-
}
|
|
2224
|
-
/**
|
|
2225
|
-
* Opens a raw WebSocket connection to this actor.
|
|
2226
|
-
*/
|
|
2227
|
-
webSocket(path, protocols) {
|
|
2228
|
-
return rawWebSocket(
|
|
2229
|
-
this.#driver,
|
|
2230
|
-
this.#actorQuery,
|
|
2231
|
-
this.#params,
|
|
2232
|
-
path,
|
|
2233
|
-
protocols
|
|
2234
|
-
);
|
|
2235
|
-
}
|
|
2236
|
-
/**
|
|
2237
|
-
* Resolves the actor to get its unique actor ID.
|
|
2238
|
-
*/
|
|
2239
|
-
async resolve() {
|
|
2240
|
-
if ("getForKey" in this.#actorQuery) {
|
|
2241
|
-
const name = this.#actorQuery.getForKey.name;
|
|
2242
|
-
const { actorId } = await queryActor(
|
|
2243
|
-
void 0,
|
|
2244
|
-
this.#actorQuery,
|
|
2245
|
-
this.#driver
|
|
2419
|
+
}
|
|
2420
|
+
|
|
2421
|
+
// src/remote-manager-driver/mod.ts
|
|
2422
|
+
var RemoteManagerDriver = class {
|
|
2423
|
+
#config;
|
|
2424
|
+
#metadataPromise;
|
|
2425
|
+
constructor(runConfig) {
|
|
2426
|
+
if (_chunkMPLMTJY5cjs.getNextPhase.call(void 0, ) === "phase-production-build") {
|
|
2427
|
+
logger2().info(
|
|
2428
|
+
"detected next.js build phase, disabling health check"
|
|
2246
2429
|
);
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2430
|
+
runConfig.disableMetadataLookup = true;
|
|
2431
|
+
}
|
|
2432
|
+
this.#config = { ...runConfig };
|
|
2433
|
+
if (!runConfig.disableMetadataLookup) {
|
|
2434
|
+
this.#metadataPromise = lookupMetadataCached(this.#config).then(
|
|
2435
|
+
(metadataData) => {
|
|
2436
|
+
if (metadataData.clientEndpoint) {
|
|
2437
|
+
this.#config.endpoint = metadataData.clientEndpoint;
|
|
2438
|
+
if (metadataData.clientNamespace) {
|
|
2439
|
+
this.#config.namespace = metadataData.clientNamespace;
|
|
2440
|
+
}
|
|
2441
|
+
if (metadataData.clientToken) {
|
|
2442
|
+
this.#config.token = metadataData.clientToken;
|
|
2443
|
+
}
|
|
2444
|
+
logger2().info({
|
|
2445
|
+
msg: "overriding client endpoint",
|
|
2446
|
+
endpoint: metadataData.clientEndpoint,
|
|
2447
|
+
namespace: metadataData.clientNamespace,
|
|
2448
|
+
token: metadataData.clientToken
|
|
2449
|
+
});
|
|
2450
|
+
}
|
|
2451
|
+
logger2().info({
|
|
2452
|
+
msg: "connected to rivetkit manager",
|
|
2453
|
+
runtime: metadataData.runtime,
|
|
2454
|
+
version: metadataData.version,
|
|
2455
|
+
runner: metadataData.runner
|
|
2456
|
+
});
|
|
2457
|
+
}
|
|
2255
2458
|
);
|
|
2256
|
-
this.#actorQuery = { getForId: { actorId, name } };
|
|
2257
|
-
return actorId;
|
|
2258
|
-
} else if ("getForId" in this.#actorQuery) {
|
|
2259
|
-
return this.#actorQuery.getForId.actorId;
|
|
2260
|
-
} else if ("create" in this.#actorQuery) {
|
|
2261
|
-
_invariant2.default.call(void 0, false, "actorQuery cannot be create");
|
|
2262
|
-
} else {
|
|
2263
|
-
_chunkPB5AEMKQcjs.assertUnreachable.call(void 0, this.#actorQuery);
|
|
2264
2459
|
}
|
|
2265
2460
|
}
|
|
2266
|
-
|
|
2267
|
-
|
|
2268
|
-
|
|
2269
|
-
|
|
2270
|
-
|
|
2271
|
-
|
|
2272
|
-
this.#
|
|
2273
|
-
|
|
2274
|
-
);
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
|
|
2285
|
-
|
|
2286
|
-
|
|
2287
|
-
/**
|
|
2288
|
-
* Creates an instance of Client.
|
|
2289
|
-
*/
|
|
2290
|
-
constructor(driver, encoding) {;_class2.prototype.__init2.call(this);
|
|
2291
|
-
this.#driver = driver;
|
|
2292
|
-
this.#encodingKind = _nullishCoalesce(encoding, () => ( "bare"));
|
|
2461
|
+
async getForId({
|
|
2462
|
+
c,
|
|
2463
|
+
name,
|
|
2464
|
+
actorId
|
|
2465
|
+
}) {
|
|
2466
|
+
if (this.#metadataPromise) {
|
|
2467
|
+
await this.#metadataPromise;
|
|
2468
|
+
}
|
|
2469
|
+
const response = await getActor(this.#config, name, actorId);
|
|
2470
|
+
const actor = response.actors[0];
|
|
2471
|
+
if (!actor) return void 0;
|
|
2472
|
+
if (actor.name !== name) {
|
|
2473
|
+
logger2().debug({
|
|
2474
|
+
msg: "actor name mismatch from api",
|
|
2475
|
+
actorId,
|
|
2476
|
+
apiName: actor.name,
|
|
2477
|
+
requestedName: name
|
|
2478
|
+
});
|
|
2479
|
+
return void 0;
|
|
2480
|
+
}
|
|
2481
|
+
return apiActorToOutput(actor);
|
|
2293
2482
|
}
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
const actorQuery = {
|
|
2311
|
-
getForId: {
|
|
2483
|
+
async getWithKey({
|
|
2484
|
+
c,
|
|
2485
|
+
name,
|
|
2486
|
+
key
|
|
2487
|
+
}) {
|
|
2488
|
+
if (this.#metadataPromise) {
|
|
2489
|
+
await this.#metadataPromise;
|
|
2490
|
+
}
|
|
2491
|
+
logger2().debug({ msg: "getWithKey: searching for actor", name, key });
|
|
2492
|
+
try {
|
|
2493
|
+
const response = await getActorByKey(this.#config, name, key);
|
|
2494
|
+
const actor = response.actors[0];
|
|
2495
|
+
if (!actor) return void 0;
|
|
2496
|
+
logger2().debug({
|
|
2497
|
+
msg: "getWithKey: found actor via api",
|
|
2498
|
+
actorId: actor.actor_id,
|
|
2312
2499
|
name,
|
|
2313
|
-
|
|
2500
|
+
key
|
|
2501
|
+
});
|
|
2502
|
+
return apiActorToOutput(actor);
|
|
2503
|
+
} catch (error) {
|
|
2504
|
+
if (error instanceof EngineApiError && error.group === "actor" && error.code === "not_found") {
|
|
2505
|
+
return void 0;
|
|
2314
2506
|
}
|
|
2315
|
-
|
|
2316
|
-
|
|
2317
|
-
return createActorProxy(handle);
|
|
2507
|
+
throw error;
|
|
2508
|
+
}
|
|
2318
2509
|
}
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
2325
|
-
|
|
2326
|
-
* @returns {ActorHandle<AD>} - A handle to the actor.
|
|
2327
|
-
*/
|
|
2328
|
-
get(name, key, opts) {
|
|
2329
|
-
const keyArray = typeof key === "string" ? [key] : key || [];
|
|
2330
|
-
_chunkJC6BEPE7cjs.logger.call(void 0, ).debug({
|
|
2331
|
-
msg: "get handle to actor",
|
|
2510
|
+
async getOrCreateWithKey(input) {
|
|
2511
|
+
if (this.#metadataPromise) {
|
|
2512
|
+
await this.#metadataPromise;
|
|
2513
|
+
}
|
|
2514
|
+
const { c, name, key, input: actorInput, region } = input;
|
|
2515
|
+
logger2().info({
|
|
2516
|
+
msg: "getOrCreateWithKey: getting or creating actor via engine api",
|
|
2332
2517
|
name,
|
|
2333
|
-
key
|
|
2334
|
-
parameters: opts == null ? void 0 : opts.params
|
|
2518
|
+
key
|
|
2335
2519
|
});
|
|
2336
|
-
const
|
|
2337
|
-
|
|
2338
|
-
name,
|
|
2339
|
-
key: keyArray
|
|
2340
|
-
}
|
|
2341
|
-
};
|
|
2342
|
-
const handle = this.#createHandle(opts == null ? void 0 : opts.params, actorQuery);
|
|
2343
|
-
return createActorProxy(handle);
|
|
2344
|
-
}
|
|
2345
|
-
/**
|
|
2346
|
-
* Gets a stateless handle to a actor by its key, creating it if necessary.
|
|
2347
|
-
*
|
|
2348
|
-
* @template AD The actor class that this handle is for.
|
|
2349
|
-
* @param {string} name - The name of the actor.
|
|
2350
|
-
* @param {string | string[]} [key=[]] - The key to identify the actor. Can be a single string or an array of strings.
|
|
2351
|
-
* @param {GetOptions} [opts] - Options for getting the actor.
|
|
2352
|
-
* @returns {ActorHandle<AD>} - A handle to the actor.
|
|
2353
|
-
*/
|
|
2354
|
-
getOrCreate(name, key, opts) {
|
|
2355
|
-
const keyArray = typeof key === "string" ? [key] : key || [];
|
|
2356
|
-
_chunkJC6BEPE7cjs.logger.call(void 0, ).debug({
|
|
2357
|
-
msg: "get or create handle to actor",
|
|
2520
|
+
const { actor, created } = await getOrCreateActor(this.#config, {
|
|
2521
|
+
datacenter: region,
|
|
2358
2522
|
name,
|
|
2359
|
-
key:
|
|
2360
|
-
|
|
2361
|
-
|
|
2523
|
+
key: _chunkHNE2AK6Ccjs.serializeActorKey.call(void 0, key),
|
|
2524
|
+
runner_name_selector: this.#config.runnerName,
|
|
2525
|
+
input: actorInput ? _chunkHNE2AK6Ccjs.uint8ArrayToBase64.call(void 0, cbor5.encode(actorInput)) : void 0,
|
|
2526
|
+
crash_policy: "sleep"
|
|
2362
2527
|
});
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
2367
|
-
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
const handle = this.#createHandle(opts == null ? void 0 : opts.params, actorQuery);
|
|
2372
|
-
return createActorProxy(handle);
|
|
2528
|
+
logger2().info({
|
|
2529
|
+
msg: "getOrCreateWithKey: actor ready",
|
|
2530
|
+
actorId: actor.actor_id,
|
|
2531
|
+
name,
|
|
2532
|
+
key,
|
|
2533
|
+
created
|
|
2534
|
+
});
|
|
2535
|
+
return apiActorToOutput(actor);
|
|
2373
2536
|
}
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
const
|
|
2386
|
-
|
|
2387
|
-
create: {
|
|
2388
|
-
...opts,
|
|
2389
|
-
// Do these last to override `opts`
|
|
2390
|
-
name,
|
|
2391
|
-
key: keyArray
|
|
2392
|
-
}
|
|
2393
|
-
};
|
|
2394
|
-
_chunkJC6BEPE7cjs.logger.call(void 0, ).debug({
|
|
2395
|
-
msg: "create actor handle",
|
|
2537
|
+
async createActor({
|
|
2538
|
+
c,
|
|
2539
|
+
name,
|
|
2540
|
+
key,
|
|
2541
|
+
input,
|
|
2542
|
+
region
|
|
2543
|
+
}) {
|
|
2544
|
+
if (this.#metadataPromise) {
|
|
2545
|
+
await this.#metadataPromise;
|
|
2546
|
+
}
|
|
2547
|
+
logger2().info({ msg: "creating actor via engine api", name, key });
|
|
2548
|
+
const result = await createActor(this.#config, {
|
|
2549
|
+
datacenter: region,
|
|
2396
2550
|
name,
|
|
2397
|
-
|
|
2398
|
-
|
|
2399
|
-
|
|
2551
|
+
runner_name_selector: this.#config.runnerName,
|
|
2552
|
+
key: _chunkHNE2AK6Ccjs.serializeActorKey.call(void 0, key),
|
|
2553
|
+
input: input ? _chunkHNE2AK6Ccjs.uint8ArrayToBase64.call(void 0, cbor5.encode(input)) : void 0,
|
|
2554
|
+
crash_policy: "sleep"
|
|
2400
2555
|
});
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
this.#driver
|
|
2405
|
-
);
|
|
2406
|
-
_chunkJC6BEPE7cjs.logger.call(void 0, ).debug({
|
|
2407
|
-
msg: "created actor with ID",
|
|
2556
|
+
logger2().info({
|
|
2557
|
+
msg: "actor created",
|
|
2558
|
+
actorId: result.actor.actor_id,
|
|
2408
2559
|
name,
|
|
2409
|
-
key
|
|
2410
|
-
actorId
|
|
2560
|
+
key
|
|
2411
2561
|
});
|
|
2412
|
-
|
|
2413
|
-
getForId: {
|
|
2414
|
-
name,
|
|
2415
|
-
actorId
|
|
2416
|
-
}
|
|
2417
|
-
};
|
|
2418
|
-
const handle = this.#createHandle(opts == null ? void 0 : opts.params, getForIdQuery);
|
|
2419
|
-
const proxy = createActorProxy(handle);
|
|
2420
|
-
return proxy;
|
|
2562
|
+
return apiActorToOutput(result.actor);
|
|
2421
2563
|
}
|
|
2422
|
-
|
|
2423
|
-
|
|
2424
|
-
this
|
|
2425
|
-
|
|
2426
|
-
|
|
2427
|
-
|
|
2428
|
-
|
|
2429
|
-
|
|
2564
|
+
async listActors({ c, name }) {
|
|
2565
|
+
if (this.#metadataPromise) {
|
|
2566
|
+
await this.#metadataPromise;
|
|
2567
|
+
}
|
|
2568
|
+
logger2().debug({ msg: "listing actors via engine api", name });
|
|
2569
|
+
const response = await listActorsByName(this.#config, name);
|
|
2570
|
+
return response.actors.map(apiActorToOutput);
|
|
2571
|
+
}
|
|
2572
|
+
async destroyActor(actorId) {
|
|
2573
|
+
if (this.#metadataPromise) {
|
|
2574
|
+
await this.#metadataPromise;
|
|
2575
|
+
}
|
|
2576
|
+
logger2().info({ msg: "destroying actor via engine api", actorId });
|
|
2577
|
+
await destroyActor(this.#config, actorId);
|
|
2578
|
+
logger2().info({ msg: "actor destroyed", actorId });
|
|
2430
2579
|
}
|
|
2431
|
-
|
|
2432
|
-
this
|
|
2433
|
-
|
|
2434
|
-
|
|
2580
|
+
async sendRequest(actorId, actorRequest) {
|
|
2581
|
+
if (this.#metadataPromise) {
|
|
2582
|
+
await this.#metadataPromise;
|
|
2583
|
+
}
|
|
2584
|
+
return await sendHttpRequestToActor(
|
|
2585
|
+
this.#config,
|
|
2586
|
+
actorId,
|
|
2587
|
+
actorRequest
|
|
2588
|
+
);
|
|
2435
2589
|
}
|
|
2436
|
-
|
|
2437
|
-
|
|
2438
|
-
|
|
2439
|
-
* @returns {Promise<void>} A promise that resolves when all connections are closed.
|
|
2440
|
-
*/
|
|
2441
|
-
async dispose() {
|
|
2442
|
-
if (this.#disposed) {
|
|
2443
|
-
_chunkJC6BEPE7cjs.logger.call(void 0, ).warn({ msg: "client already disconnected" });
|
|
2444
|
-
return;
|
|
2590
|
+
async openWebSocket(path, actorId, encoding, params) {
|
|
2591
|
+
if (this.#metadataPromise) {
|
|
2592
|
+
await this.#metadataPromise;
|
|
2445
2593
|
}
|
|
2446
|
-
|
|
2447
|
-
|
|
2448
|
-
|
|
2449
|
-
|
|
2450
|
-
|
|
2594
|
+
return await openWebSocketToActor(
|
|
2595
|
+
this.#config,
|
|
2596
|
+
path,
|
|
2597
|
+
actorId,
|
|
2598
|
+
encoding,
|
|
2599
|
+
params
|
|
2600
|
+
);
|
|
2601
|
+
}
|
|
2602
|
+
async buildGatewayUrl(actorId) {
|
|
2603
|
+
if (this.#metadataPromise) {
|
|
2604
|
+
await this.#metadataPromise;
|
|
2451
2605
|
}
|
|
2452
|
-
|
|
2606
|
+
const endpoint = getEndpoint(this.#config);
|
|
2607
|
+
return buildActorGatewayUrl(endpoint, actorId, this.#config.token);
|
|
2453
2608
|
}
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
return new Proxy(client, {
|
|
2458
|
-
get: (target, prop, receiver) => {
|
|
2459
|
-
if (typeof prop === "symbol" || prop in target) {
|
|
2460
|
-
const value = Reflect.get(target, prop, receiver);
|
|
2461
|
-
if (typeof value === "function") {
|
|
2462
|
-
return value.bind(target);
|
|
2463
|
-
}
|
|
2464
|
-
return value;
|
|
2465
|
-
}
|
|
2466
|
-
if (typeof prop === "string") {
|
|
2467
|
-
return {
|
|
2468
|
-
// Handle methods (stateless action)
|
|
2469
|
-
get: (key, opts) => {
|
|
2470
|
-
return target.get(prop, key, opts);
|
|
2471
|
-
},
|
|
2472
|
-
getOrCreate: (key, opts) => {
|
|
2473
|
-
return target.getOrCreate(prop, key, opts);
|
|
2474
|
-
},
|
|
2475
|
-
getForId: (actorId, opts) => {
|
|
2476
|
-
return target.getForId(prop, actorId, opts);
|
|
2477
|
-
},
|
|
2478
|
-
create: async (key, opts = {}) => {
|
|
2479
|
-
return await target.create(prop, key, opts);
|
|
2480
|
-
}
|
|
2481
|
-
};
|
|
2482
|
-
}
|
|
2483
|
-
return void 0;
|
|
2609
|
+
async proxyRequest(_c, actorRequest, actorId) {
|
|
2610
|
+
if (this.#metadataPromise) {
|
|
2611
|
+
await this.#metadataPromise;
|
|
2484
2612
|
}
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2494
|
-
|
|
2495
|
-
const value = Reflect.get(target, prop, target);
|
|
2496
|
-
if (typeof value === "function") {
|
|
2497
|
-
return value.bind(target);
|
|
2498
|
-
}
|
|
2499
|
-
return value;
|
|
2500
|
-
}
|
|
2501
|
-
if (typeof prop === "string") {
|
|
2502
|
-
if (prop === "then") return void 0;
|
|
2503
|
-
let method = methodCache.get(prop);
|
|
2504
|
-
if (!method) {
|
|
2505
|
-
method = (...args) => target.action({ name: prop, args });
|
|
2506
|
-
methodCache.set(prop, method);
|
|
2507
|
-
}
|
|
2508
|
-
return method;
|
|
2509
|
-
}
|
|
2510
|
-
},
|
|
2511
|
-
// Support for 'in' operator
|
|
2512
|
-
has(target, prop) {
|
|
2513
|
-
if (typeof prop === "string") return true;
|
|
2514
|
-
return Reflect.has(target, prop);
|
|
2515
|
-
},
|
|
2516
|
-
// Support instanceof checks
|
|
2517
|
-
getPrototypeOf(target) {
|
|
2518
|
-
return Reflect.getPrototypeOf(target);
|
|
2519
|
-
},
|
|
2520
|
-
// Prevent property enumeration of non-existent action methods
|
|
2521
|
-
ownKeys(target) {
|
|
2522
|
-
return Reflect.ownKeys(target);
|
|
2523
|
-
},
|
|
2524
|
-
// Support proper property descriptors
|
|
2525
|
-
getOwnPropertyDescriptor(target, prop) {
|
|
2526
|
-
const targetDescriptor = Reflect.getOwnPropertyDescriptor(
|
|
2527
|
-
target,
|
|
2528
|
-
prop
|
|
2529
|
-
);
|
|
2530
|
-
if (targetDescriptor) {
|
|
2531
|
-
return targetDescriptor;
|
|
2532
|
-
}
|
|
2533
|
-
if (typeof prop === "string") {
|
|
2534
|
-
return {
|
|
2535
|
-
configurable: true,
|
|
2536
|
-
enumerable: false,
|
|
2537
|
-
writable: false,
|
|
2538
|
-
value: (...args) => target.action({ name: prop, args })
|
|
2539
|
-
};
|
|
2540
|
-
}
|
|
2541
|
-
return void 0;
|
|
2613
|
+
return await sendHttpRequestToActor(
|
|
2614
|
+
this.#config,
|
|
2615
|
+
actorId,
|
|
2616
|
+
actorRequest
|
|
2617
|
+
);
|
|
2618
|
+
}
|
|
2619
|
+
async proxyWebSocket(c, path, actorId, encoding, params) {
|
|
2620
|
+
var _a, _b;
|
|
2621
|
+
if (this.#metadataPromise) {
|
|
2622
|
+
await this.#metadataPromise;
|
|
2542
2623
|
}
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2624
|
+
const upgradeWebSocket = (_b = (_a = this.#config).getUpgradeWebSocket) == null ? void 0 : _b.call(_a);
|
|
2625
|
+
_invariant2.default.call(void 0, upgradeWebSocket, "missing getUpgradeWebSocket");
|
|
2626
|
+
const endpoint = getEndpoint(this.#config);
|
|
2627
|
+
const guardUrl = _chunkMPLMTJY5cjs.combineUrlPath.call(void 0, endpoint, path);
|
|
2628
|
+
const wsGuardUrl = guardUrl.replace("http://", "ws://");
|
|
2629
|
+
logger2().debug({
|
|
2630
|
+
msg: "forwarding websocket to actor via guard",
|
|
2631
|
+
actorId,
|
|
2632
|
+
path,
|
|
2633
|
+
guardUrl
|
|
2634
|
+
});
|
|
2635
|
+
const protocols = buildWebSocketProtocols(
|
|
2636
|
+
this.#config,
|
|
2637
|
+
encoding,
|
|
2638
|
+
params
|
|
2639
|
+
);
|
|
2640
|
+
const args = await createWebSocketProxy(c, wsGuardUrl, protocols);
|
|
2641
|
+
return await upgradeWebSocket(() => args)(c, _chunkMPLMTJY5cjs.noopNext.call(void 0, ));
|
|
2552
2642
|
}
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
/**
|
|
2557
|
-
* Endpoint to connect to for Rivet Engine or RivetKit manager API.
|
|
2558
|
-
*
|
|
2559
|
-
* Supports URL auth syntax for namespace and token:
|
|
2560
|
-
* - `https://namespace:token@api.rivet.dev`
|
|
2561
|
-
* - `https://namespace@api.rivet.dev`
|
|
2562
|
-
*
|
|
2563
|
-
* Can also be set via RIVET_ENDPOINT environment variables.
|
|
2564
|
-
*
|
|
2565
|
-
* Defaults to current origin + /api/rivet in browser, or 127.0.0.1:6420 server-side.
|
|
2566
|
-
*/
|
|
2567
|
-
endpoint: _v42.default.string().optional().transform(
|
|
2568
|
-
(val) => _nullishCoalesce(_nullishCoalesce(_nullishCoalesce(val, () => ( _chunkHYPIHCDTcjs.getRivetEngine.call(void 0, ))), () => ( _chunkHYPIHCDTcjs.getRivetEndpoint.call(void 0, ))), () => ( getDefaultEndpoint()))
|
|
2569
|
-
),
|
|
2570
|
-
/** Token to use to authenticate with the API. */
|
|
2571
|
-
token: _v42.default.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunkHYPIHCDTcjs.getRivetToken.call(void 0, )))),
|
|
2572
|
-
/** Namespace to connect to. */
|
|
2573
|
-
namespace: _v42.default.string().optional().transform((val) => _nullishCoalesce(val, () => ( _chunkHYPIHCDTcjs.getRivetNamespace.call(void 0, )))),
|
|
2574
|
-
/** Name of the runner. This is used to group together runners in to different pools. */
|
|
2575
|
-
runnerName: _v42.default.string().default(() => _nullishCoalesce(_chunkHYPIHCDTcjs.getRivetRunner.call(void 0, ), () => ( "default"))),
|
|
2576
|
-
encoding: _chunkTI5PXQGGcjs.EncodingSchema.default("bare"),
|
|
2577
|
-
headers: _v42.default.record(_v42.default.string(), _v42.default.string()).optional().default(() => ({})),
|
|
2578
|
-
// See RunConfig.getUpgradeWebSocket
|
|
2579
|
-
//
|
|
2580
|
-
// This is required in the client config in order to support
|
|
2581
|
-
// `proxyWebSocket`
|
|
2582
|
-
getUpgradeWebSocket: _v42.default.custom().optional(),
|
|
2583
|
-
/** Whether to automatically perform health checks when the client is created. */
|
|
2584
|
-
disableMetadataLookup: _v42.default.boolean().optional().default(false),
|
|
2585
|
-
/** Whether to enable RivetKit Devtools integration. */
|
|
2586
|
-
devtools: _v42.default.boolean().default(
|
|
2587
|
-
() => {
|
|
2588
|
-
var _a, _b;
|
|
2589
|
-
return typeof window !== "undefined" && (((_a = window == null ? void 0 : window.location) == null ? void 0 : _a.hostname) === "127.0.0.1" || ((_b = window.location) == null ? void 0 : _b.hostname) === "localhost");
|
|
2643
|
+
async kvGet(actorId, key) {
|
|
2644
|
+
if (this.#metadataPromise) {
|
|
2645
|
+
await this.#metadataPromise;
|
|
2590
2646
|
}
|
|
2591
|
-
|
|
2592
|
-
|
|
2593
|
-
|
|
2594
|
-
|
|
2595
|
-
)
|
|
2596
|
-
|
|
2597
|
-
|
|
2598
|
-
|
|
2599
|
-
|
|
2600
|
-
|
|
2601
|
-
|
|
2602
|
-
|
|
2603
|
-
|
|
2604
|
-
|
|
2605
|
-
|
|
2606
|
-
|
|
2607
|
-
token: _nullishCoalesce((parsedEndpoint == null ? void 0 : parsedEndpoint.token), () => ( config.token))
|
|
2608
|
-
};
|
|
2609
|
-
}
|
|
2610
|
-
function convertRegistryConfigToClientConfig(config) {
|
|
2611
|
-
var _a, _b;
|
|
2647
|
+
logger2().debug({ msg: "getting kv value via engine api", key });
|
|
2648
|
+
const response = await kvGet(
|
|
2649
|
+
this.#config,
|
|
2650
|
+
actorId,
|
|
2651
|
+
new TextDecoder("utf8").decode(key)
|
|
2652
|
+
);
|
|
2653
|
+
return response.value;
|
|
2654
|
+
}
|
|
2655
|
+
displayInformation() {
|
|
2656
|
+
return { properties: {} };
|
|
2657
|
+
}
|
|
2658
|
+
setGetUpgradeWebSocket(getUpgradeWebSocket) {
|
|
2659
|
+
this.#config.getUpgradeWebSocket = getUpgradeWebSocket;
|
|
2660
|
+
}
|
|
2661
|
+
};
|
|
2662
|
+
function apiActorToOutput(actor) {
|
|
2612
2663
|
return {
|
|
2613
|
-
|
|
2614
|
-
|
|
2615
|
-
|
|
2616
|
-
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
devtools: typeof window !== "undefined" && (((_a = window == null ? void 0 : window.location) == null ? void 0 : _a.hostname) === "127.0.0.1" || ((_b = window == null ? void 0 : window.location) == null ? void 0 : _b.hostname) === "localhost")
|
|
2664
|
+
actorId: actor.actor_id,
|
|
2665
|
+
name: actor.name,
|
|
2666
|
+
key: _chunkHNE2AK6Ccjs.deserializeActorKey.call(void 0, actor.key),
|
|
2667
|
+
createTs: actor.create_ts,
|
|
2668
|
+
startTs: _nullishCoalesce(actor.start_ts, () => ( null)),
|
|
2669
|
+
connectableTs: _nullishCoalesce(actor.connectable_ts, () => ( null)),
|
|
2670
|
+
sleepTs: _nullishCoalesce(actor.sleep_ts, () => ( null)),
|
|
2671
|
+
destroyTs: _nullishCoalesce(actor.destroy_ts, () => ( null)),
|
|
2672
|
+
error: _nullishCoalesce(actor.error, () => ( void 0))
|
|
2623
2673
|
};
|
|
2624
2674
|
}
|
|
2625
2675
|
|
|
2626
|
-
// src/client/mod.ts
|
|
2627
|
-
function createClient(endpointOrConfig) {
|
|
2628
|
-
const configInput = endpointOrConfig === void 0 ? {} : typeof endpointOrConfig === "string" ? { endpoint: endpointOrConfig } : endpointOrConfig;
|
|
2629
|
-
const config = ClientConfigSchema.parse(configInput);
|
|
2630
|
-
const driver = new RemoteManagerDriver(config);
|
|
2631
|
-
if (config.devtools) {
|
|
2632
|
-
injectDevtools(config);
|
|
2633
|
-
}
|
|
2634
|
-
return createClientWithDriver(driver, config);
|
|
2635
|
-
}
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2639
|
-
|
|
2640
2676
|
|
|
2641
2677
|
|
|
2642
2678
|
|
|
@@ -2653,5 +2689,5 @@ function createClient(endpointOrConfig) {
|
|
|
2653
2689
|
|
|
2654
2690
|
|
|
2655
2691
|
|
|
2656
|
-
exports.ActorClientError = ActorClientError; exports.InternalError = InternalError; exports.ManagerError = ManagerError; exports.MalformedResponseMessage = MalformedResponseMessage; exports.ActorError = ActorError; exports.ActorConnDisposed = ActorConnDisposed; exports.ActorConnRaw = ActorConnRaw; exports.ActorHandleRaw = ActorHandleRaw; exports.createClientWithDriver = createClientWithDriver; exports.
|
|
2657
|
-
//# sourceMappingURL=chunk-
|
|
2692
|
+
exports.ActorClientError = ActorClientError; exports.InternalError = InternalError; exports.ManagerError = ManagerError; exports.MalformedResponseMessage = MalformedResponseMessage; exports.ActorError = ActorError; exports.ActorConnDisposed = ActorConnDisposed; exports.ActorConnRaw = ActorConnRaw; exports.ActorHandleRaw = ActorHandleRaw; exports.createClientWithDriver = createClientWithDriver; exports.ClientConfigSchema = ClientConfigSchema; exports.convertRegistryConfigToClientConfig = convertRegistryConfigToClientConfig; exports.getEndpoint = getEndpoint; exports.getDatacenters = getDatacenters; exports.updateRunnerConfig = updateRunnerConfig; exports.RemoteManagerDriver = RemoteManagerDriver;
|
|
2693
|
+
//# sourceMappingURL=chunk-GUHXWPGB.cjs.map
|