rivetkit 2.0.2 → 2.0.4-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/README.md +3 -5
- package/dist/browser/client.d.ts +2485 -0
- package/dist/browser/client.js +5182 -0
- package/dist/browser/client.js.map +1 -0
- package/dist/browser/inspector/client.d.ts +130 -0
- package/dist/browser/inspector/client.js +2854 -0
- package/dist/browser/inspector/client.js.map +1 -0
- package/dist/browser/v3-DnYObHH3.d.ts +279 -0
- package/dist/inspector.tar.gz +0 -0
- package/dist/schemas/actor-inspector/v1.ts +784 -0
- package/dist/schemas/actor-inspector/v2.ts +796 -0
- package/dist/schemas/actor-inspector/v3.ts +899 -0
- package/dist/schemas/actor-persist/v1.ts +225 -0
- package/dist/schemas/actor-persist/v2.ts +268 -0
- package/dist/schemas/actor-persist/v3.ts +280 -0
- package/dist/schemas/actor-persist/v4.ts +406 -0
- package/dist/schemas/client-protocol/v1.ts +441 -0
- package/dist/schemas/client-protocol/v2.ts +438 -0
- package/dist/schemas/client-protocol/v3.ts +554 -0
- package/dist/schemas/file-system-driver/v1.ts +108 -0
- package/dist/schemas/file-system-driver/v2.ts +142 -0
- package/dist/schemas/file-system-driver/v3.ts +167 -0
- package/dist/schemas/persist/v1.ts +781 -0
- package/dist/schemas/transport/v1.ts +697 -0
- package/dist/tsup/actor/errors.cjs +106 -0
- package/dist/tsup/actor/errors.cjs.map +1 -0
- package/dist/tsup/actor/errors.d.cts +188 -0
- package/dist/tsup/actor/errors.d.ts +188 -0
- package/dist/tsup/actor/errors.js +106 -0
- package/dist/tsup/actor/errors.js.map +1 -0
- package/dist/tsup/actor-router-consts-D29T1Z-K.d.cts +24 -0
- package/dist/tsup/actor-router-consts-D29T1Z-K.d.ts +24 -0
- package/dist/tsup/chunk-325TLXJT.js +1060 -0
- package/dist/tsup/chunk-325TLXJT.js.map +1 -0
- package/dist/tsup/chunk-424PT5DM.js +23 -0
- package/dist/tsup/chunk-424PT5DM.js.map +1 -0
- package/dist/tsup/chunk-4JVIG3SS.cjs +6289 -0
- package/dist/tsup/chunk-4JVIG3SS.cjs.map +1 -0
- package/dist/tsup/chunk-6LJAZ5R4.cjs +96 -0
- package/dist/tsup/chunk-6LJAZ5R4.cjs.map +1 -0
- package/dist/tsup/chunk-6XU3FMCB.cjs +534 -0
- package/dist/tsup/chunk-6XU3FMCB.cjs.map +1 -0
- package/dist/tsup/chunk-7HTNH26M.js +509 -0
- package/dist/tsup/chunk-7HTNH26M.js.map +1 -0
- package/dist/tsup/chunk-AUVH72RE.cjs +5977 -0
- package/dist/tsup/chunk-AUVH72RE.cjs.map +1 -0
- package/dist/tsup/chunk-D4BYUPNQ.js +645 -0
- package/dist/tsup/chunk-D4BYUPNQ.js.map +1 -0
- package/dist/tsup/chunk-HDQ2JUQT.cjs +23 -0
- package/dist/tsup/chunk-HDQ2JUQT.cjs.map +1 -0
- package/dist/tsup/chunk-HHXX2VRM.js +6289 -0
- package/dist/tsup/chunk-HHXX2VRM.js.map +1 -0
- package/dist/tsup/chunk-JEAEA2PB.js +49 -0
- package/dist/tsup/chunk-JEAEA2PB.js.map +1 -0
- package/dist/tsup/chunk-JYSEG3VF.cjs +642 -0
- package/dist/tsup/chunk-JYSEG3VF.cjs.map +1 -0
- package/dist/tsup/chunk-K6DGYILQ.js +2657 -0
- package/dist/tsup/chunk-K6DGYILQ.js.map +1 -0
- package/dist/tsup/chunk-KJSYAUOM.js +96 -0
- package/dist/tsup/chunk-KJSYAUOM.js.map +1 -0
- package/dist/tsup/chunk-L47L3ZWJ.cjs +509 -0
- package/dist/tsup/chunk-L47L3ZWJ.cjs.map +1 -0
- package/dist/tsup/chunk-LXUQ667X.js +2006 -0
- package/dist/tsup/chunk-LXUQ667X.js.map +1 -0
- package/dist/tsup/chunk-MXNPAB5W.js +5977 -0
- package/dist/tsup/chunk-MXNPAB5W.js.map +1 -0
- package/dist/tsup/chunk-N4KRDJ56.js +72 -0
- package/dist/tsup/chunk-N4KRDJ56.js.map +1 -0
- package/dist/tsup/chunk-NIYZDWMW.cjs +2006 -0
- package/dist/tsup/chunk-NIYZDWMW.cjs.map +1 -0
- package/dist/tsup/chunk-PQZHDKRW.cjs +1060 -0
- package/dist/tsup/chunk-PQZHDKRW.cjs.map +1 -0
- package/dist/tsup/chunk-PVOE6BU7.cjs +1050 -0
- package/dist/tsup/chunk-PVOE6BU7.cjs.map +1 -0
- package/dist/tsup/chunk-Q4UD2GA4.cjs +1810 -0
- package/dist/tsup/chunk-Q4UD2GA4.cjs.map +1 -0
- package/dist/tsup/chunk-QUD664YZ.js +1810 -0
- package/dist/tsup/chunk-QUD664YZ.js.map +1 -0
- package/dist/tsup/chunk-RTOCTWME.js +1050 -0
- package/dist/tsup/chunk-RTOCTWME.js.map +1 -0
- package/dist/tsup/chunk-SAZZ4SB2.cjs +2657 -0
- package/dist/tsup/chunk-SAZZ4SB2.cjs.map +1 -0
- package/dist/tsup/chunk-SR3KQE7Q.cjs +72 -0
- package/dist/tsup/chunk-SR3KQE7Q.cjs.map +1 -0
- package/dist/tsup/chunk-V2GHLYC6.cjs +49 -0
- package/dist/tsup/chunk-V2GHLYC6.cjs.map +1 -0
- package/dist/tsup/chunk-V3WG7XTW.cjs +645 -0
- package/dist/tsup/chunk-V3WG7XTW.cjs.map +1 -0
- package/dist/tsup/chunk-VKVNIQRQ.js +257 -0
- package/dist/tsup/chunk-VKVNIQRQ.js.map +1 -0
- package/dist/tsup/chunk-WMPW7JYC.js +642 -0
- package/dist/tsup/chunk-WMPW7JYC.js.map +1 -0
- package/dist/tsup/chunk-Z7HNQ2WF.js +534 -0
- package/dist/tsup/chunk-Z7HNQ2WF.js.map +1 -0
- package/dist/tsup/chunk-ZFY5J2EP.cjs +257 -0
- package/dist/tsup/chunk-ZFY5J2EP.cjs.map +1 -0
- package/dist/tsup/client/mod.cjs +33 -0
- package/dist/tsup/client/mod.cjs.map +1 -0
- package/dist/tsup/client/mod.d.cts +64 -0
- package/dist/tsup/client/mod.d.ts +64 -0
- package/dist/tsup/client/mod.js +33 -0
- package/dist/tsup/client/mod.js.map +1 -0
- package/dist/tsup/common/log.cjs +21 -0
- package/dist/tsup/common/log.cjs.map +1 -0
- package/dist/tsup/common/log.d.cts +34 -0
- package/dist/tsup/common/log.d.ts +34 -0
- package/dist/tsup/common/log.js +21 -0
- package/dist/tsup/common/log.js.map +1 -0
- package/dist/tsup/common/websocket.cjs +10 -0
- package/dist/tsup/common/websocket.cjs.map +1 -0
- package/dist/tsup/common/websocket.d.cts +3 -0
- package/dist/tsup/common/websocket.d.ts +3 -0
- package/dist/tsup/common/websocket.js +10 -0
- package/dist/tsup/common/websocket.js.map +1 -0
- package/dist/tsup/config-BiNoIHRs.d.cts +80 -0
- package/dist/tsup/config-BiNoIHRs.d.ts +80 -0
- package/dist/tsup/config-P3XujgRr.d.ts +2594 -0
- package/dist/tsup/config-_gfywqqI.d.cts +2594 -0
- package/dist/tsup/context-Bxd8Cx4H.d.cts +75 -0
- package/dist/tsup/context-uNA4TRn3.d.ts +75 -0
- package/dist/tsup/db/drizzle/mod.cjs +49 -0
- package/dist/tsup/db/drizzle/mod.cjs.map +1 -0
- package/dist/tsup/db/drizzle/mod.d.cts +17 -0
- package/dist/tsup/db/drizzle/mod.d.ts +17 -0
- package/dist/tsup/db/drizzle/mod.js +49 -0
- package/dist/tsup/db/drizzle/mod.js.map +1 -0
- package/dist/tsup/db/mod.cjs +9 -0
- package/dist/tsup/db/mod.cjs.map +1 -0
- package/dist/tsup/db/mod.d.cts +9 -0
- package/dist/tsup/db/mod.d.ts +9 -0
- package/dist/tsup/db/mod.js +9 -0
- package/dist/tsup/db/mod.js.map +1 -0
- package/dist/tsup/driver-BcLvZcKl.d.cts +13 -0
- package/dist/tsup/driver-CPGHKXyh.d.ts +13 -0
- package/dist/tsup/driver-helpers/mod.cjs +53 -0
- package/dist/tsup/driver-helpers/mod.cjs.map +1 -0
- package/dist/tsup/driver-helpers/mod.d.cts +47 -0
- package/dist/tsup/driver-helpers/mod.d.ts +47 -0
- package/dist/tsup/driver-helpers/mod.js +53 -0
- package/dist/tsup/driver-helpers/mod.js.map +1 -0
- package/dist/tsup/driver-test-suite/mod.cjs +4974 -0
- package/dist/tsup/driver-test-suite/mod.cjs.map +1 -0
- package/dist/tsup/driver-test-suite/mod.d.cts +73 -0
- package/dist/tsup/driver-test-suite/mod.d.ts +73 -0
- package/dist/tsup/driver-test-suite/mod.js +4974 -0
- package/dist/tsup/driver-test-suite/mod.js.map +1 -0
- package/dist/tsup/inspector/mod.cjs +164 -0
- package/dist/tsup/inspector/mod.cjs.map +1 -0
- package/dist/tsup/inspector/mod.d.cts +130 -0
- package/dist/tsup/inspector/mod.d.ts +130 -0
- package/dist/tsup/inspector/mod.js +164 -0
- package/dist/tsup/inspector/mod.js.map +1 -0
- package/dist/tsup/keys-CydblqMh.d.cts +13 -0
- package/dist/tsup/keys-CydblqMh.d.ts +13 -0
- package/dist/tsup/mod.cjs +82 -0
- package/dist/tsup/mod.cjs.map +1 -0
- package/dist/tsup/mod.d.cts +126 -0
- package/dist/tsup/mod.d.ts +126 -0
- package/dist/tsup/mod.js +82 -0
- package/dist/tsup/mod.js.map +1 -0
- package/dist/tsup/serve-test-suite/mod.cjs +2601 -0
- package/dist/tsup/serve-test-suite/mod.cjs.map +1 -0
- package/dist/tsup/serve-test-suite/mod.d.cts +9 -0
- package/dist/tsup/serve-test-suite/mod.d.ts +9 -0
- package/dist/tsup/serve-test-suite/mod.js +2601 -0
- package/dist/tsup/serve-test-suite/mod.js.map +1 -0
- package/dist/tsup/test/mod.cjs +90 -0
- package/dist/tsup/test/mod.cjs.map +1 -0
- package/dist/tsup/test/mod.d.cts +26 -0
- package/dist/tsup/test/mod.d.ts +26 -0
- package/dist/tsup/test/mod.js +90 -0
- package/dist/tsup/test/mod.js.map +1 -0
- package/dist/tsup/utils-fwx3o3K9.d.cts +18 -0
- package/dist/tsup/utils-fwx3o3K9.d.ts +18 -0
- package/dist/tsup/utils.cjs +43 -0
- package/dist/tsup/utils.cjs.map +1 -0
- package/dist/tsup/utils.d.cts +148 -0
- package/dist/tsup/utils.d.ts +148 -0
- package/dist/tsup/utils.js +43 -0
- package/dist/tsup/utils.js.map +1 -0
- package/dist/tsup/v3-DnYObHH3.d.cts +279 -0
- package/dist/tsup/v3-DnYObHH3.d.ts +279 -0
- package/dist/tsup/workflow/mod.cjs +16 -0
- package/dist/tsup/workflow/mod.cjs.map +1 -0
- package/dist/tsup/workflow/mod.d.cts +25 -0
- package/dist/tsup/workflow/mod.d.ts +25 -0
- package/dist/tsup/workflow/mod.js +16 -0
- package/dist/tsup/workflow/mod.js.map +1 -0
- package/package.json +293 -5
- package/src/actor/config.ts +1221 -0
- package/src/actor/conn/driver.ts +61 -0
- package/src/actor/conn/drivers/http.ts +17 -0
- package/src/actor/conn/drivers/raw-request.ts +24 -0
- package/src/actor/conn/drivers/raw-websocket.ts +65 -0
- package/src/actor/conn/drivers/websocket.ts +144 -0
- package/src/actor/conn/mod.ts +288 -0
- package/src/actor/conn/persisted.ts +81 -0
- package/src/actor/conn/state-manager.ts +196 -0
- package/src/actor/contexts/action.ts +47 -0
- package/src/actor/contexts/base/actor.ts +347 -0
- package/src/actor/contexts/base/conn-init.ts +68 -0
- package/src/actor/contexts/base/conn.ts +73 -0
- package/src/actor/contexts/before-action-response.ts +42 -0
- package/src/actor/contexts/before-connect.ts +31 -0
- package/src/actor/contexts/connect.ts +42 -0
- package/src/actor/contexts/create-conn-state.ts +32 -0
- package/src/actor/contexts/create-vars.ts +39 -0
- package/src/actor/contexts/create.ts +39 -0
- package/src/actor/contexts/destroy.ts +42 -0
- package/src/actor/contexts/disconnect.ts +43 -0
- package/src/actor/contexts/index.ts +33 -0
- package/src/actor/contexts/request.ts +80 -0
- package/src/actor/contexts/run.ts +47 -0
- package/src/actor/contexts/sleep.ts +42 -0
- package/src/actor/contexts/state-change.ts +42 -0
- package/src/actor/contexts/wake.ts +42 -0
- package/src/actor/contexts/websocket.ts +80 -0
- package/src/actor/database.ts +13 -0
- package/src/actor/definition.ts +64 -0
- package/src/actor/driver.ts +114 -0
- package/src/actor/errors.ts +556 -0
- package/src/actor/instance/connection-manager.ts +574 -0
- package/src/actor/instance/event-manager.ts +314 -0
- package/src/actor/instance/keys.ts +146 -0
- package/src/actor/instance/kv.ts +241 -0
- package/src/actor/instance/mod.ts +1658 -0
- package/src/actor/instance/persisted.ts +67 -0
- package/src/actor/instance/queue-manager.ts +603 -0
- package/src/actor/instance/queue.ts +345 -0
- package/src/actor/instance/schedule-manager.ts +392 -0
- package/src/actor/instance/state-manager.ts +542 -0
- package/src/actor/instance/traces-driver.ts +128 -0
- package/src/actor/keys.test.ts +275 -0
- package/src/actor/keys.ts +89 -0
- package/src/actor/log.ts +6 -0
- package/src/actor/mod.ts +110 -0
- package/src/actor/protocol/old.ts +416 -0
- package/src/actor/protocol/serde.ts +222 -0
- package/src/actor/router-endpoints.ts +400 -0
- package/src/actor/router-websocket-endpoints.test.ts +54 -0
- package/src/actor/router-websocket-endpoints.ts +405 -0
- package/src/actor/router.ts +380 -0
- package/src/actor/schedule.ts +17 -0
- package/src/actor/schema.ts +291 -0
- package/src/actor/utils.test.ts +48 -0
- package/src/actor/utils.ts +158 -0
- package/src/client/actor-common.ts +32 -0
- package/src/client/actor-conn.ts +1262 -0
- package/src/client/actor-handle.ts +344 -0
- package/src/client/actor-query.ts +112 -0
- package/src/client/client.ts +558 -0
- package/src/client/config.ts +151 -0
- package/src/client/errors.ts +76 -0
- package/src/client/log.ts +5 -0
- package/src/client/mod.browser.ts +2 -0
- package/src/client/mod.ts +70 -0
- package/src/client/queue.ts +146 -0
- package/src/client/raw-utils.ts +149 -0
- package/src/client/test.ts +44 -0
- package/src/client/utils.ts +252 -0
- package/src/common/actor-router-consts.ts +59 -0
- package/src/common/cors.ts +57 -0
- package/src/common/eventsource-interface.ts +47 -0
- package/src/common/eventsource.ts +44 -0
- package/src/common/inline-websocket-adapter.ts +154 -0
- package/src/common/log-levels.ts +27 -0
- package/src/common/log.ts +229 -0
- package/src/common/logfmt.ts +221 -0
- package/src/common/network.ts +2 -0
- package/src/common/router.ts +174 -0
- package/src/common/utils.ts +339 -0
- package/src/common/websocket-interface.ts +7 -0
- package/src/common/websocket.ts +43 -0
- package/src/db/config.ts +100 -0
- package/src/db/drizzle/mod.ts +226 -0
- package/src/db/drizzle/sqlite-core.ts +22 -0
- package/src/db/mod.ts +125 -0
- package/src/db/shared.ts +92 -0
- package/src/db/sqlite-vfs.ts +12 -0
- package/src/devtools-loader/index.ts +33 -0
- package/src/devtools-loader/log.ts +5 -0
- package/src/driver-helpers/mod.ts +33 -0
- package/src/driver-helpers/utils.ts +54 -0
- package/src/driver-test-suite/log.ts +5 -0
- package/src/driver-test-suite/mod.ts +293 -0
- package/src/driver-test-suite/test-inline-client-driver.ts +307 -0
- package/src/driver-test-suite/tests/access-control.ts +218 -0
- package/src/driver-test-suite/tests/action-features.ts +203 -0
- package/src/driver-test-suite/tests/actor-conn-hibernation.ts +152 -0
- package/src/driver-test-suite/tests/actor-conn-state.ts +300 -0
- package/src/driver-test-suite/tests/actor-conn.ts +596 -0
- package/src/driver-test-suite/tests/actor-db-raw.ts +73 -0
- package/src/driver-test-suite/tests/actor-db.ts +477 -0
- package/src/driver-test-suite/tests/actor-destroy.ts +294 -0
- package/src/driver-test-suite/tests/actor-driver.ts +18 -0
- package/src/driver-test-suite/tests/actor-error-handling.ts +150 -0
- package/src/driver-test-suite/tests/actor-handle.ts +312 -0
- package/src/driver-test-suite/tests/actor-inline-client.ts +163 -0
- package/src/driver-test-suite/tests/actor-inspector.ts +264 -0
- package/src/driver-test-suite/tests/actor-kv.ts +65 -0
- package/src/driver-test-suite/tests/actor-metadata.ts +116 -0
- package/src/driver-test-suite/tests/actor-onstatechange.ts +95 -0
- package/src/driver-test-suite/tests/actor-queue.ts +325 -0
- package/src/driver-test-suite/tests/actor-run.ts +181 -0
- package/src/driver-test-suite/tests/actor-schedule.ts +97 -0
- package/src/driver-test-suite/tests/actor-sleep.ts +415 -0
- package/src/driver-test-suite/tests/actor-state.ts +54 -0
- package/src/driver-test-suite/tests/actor-stateless.ts +70 -0
- package/src/driver-test-suite/tests/actor-vars.ts +97 -0
- package/src/driver-test-suite/tests/actor-workflow.ts +118 -0
- package/src/driver-test-suite/tests/manager-driver.ts +388 -0
- package/src/driver-test-suite/tests/raw-http-direct-registry.ts +227 -0
- package/src/driver-test-suite/tests/raw-http-request-properties.ts +454 -0
- package/src/driver-test-suite/tests/raw-http.ts +359 -0
- package/src/driver-test-suite/tests/raw-websocket-direct-registry.ts +393 -0
- package/src/driver-test-suite/tests/raw-websocket.ts +513 -0
- package/src/driver-test-suite/tests/request-access.ts +240 -0
- package/src/driver-test-suite/utils.ts +80 -0
- package/src/drivers/default.ts +38 -0
- package/src/drivers/engine/actor-driver.ts +1027 -0
- package/src/drivers/engine/config.ts +43 -0
- package/src/drivers/engine/log.ts +5 -0
- package/src/drivers/engine/mod.ts +36 -0
- package/src/drivers/file-system/actor.ts +102 -0
- package/src/drivers/file-system/global-state.ts +1445 -0
- package/src/drivers/file-system/kv-limits.ts +70 -0
- package/src/drivers/file-system/log.ts +5 -0
- package/src/drivers/file-system/manager.ts +300 -0
- package/src/drivers/file-system/mod.ts +78 -0
- package/src/drivers/file-system/sqlite-runtime.ts +210 -0
- package/src/drivers/file-system/utils.ts +125 -0
- package/src/engine-process/constants.ts +2 -0
- package/src/engine-process/log.ts +5 -0
- package/src/engine-process/mod.ts +464 -0
- package/src/globals.d.ts +35 -0
- package/src/inspector/actor-inspector.ts +352 -0
- package/src/inspector/config.ts +49 -0
- package/src/inspector/handler.ts +273 -0
- package/src/inspector/log.ts +5 -0
- package/src/inspector/mod.browser.ts +8 -0
- package/src/inspector/mod.ts +4 -0
- package/src/inspector/serve-ui.ts +40 -0
- package/src/inspector/transport.ts +18 -0
- package/src/inspector/utils.ts +32 -0
- package/src/manager/driver.ts +106 -0
- package/src/manager/gateway.ts +668 -0
- package/src/manager/log.ts +5 -0
- package/src/manager/mod.ts +2 -0
- package/src/manager/protocol/mod.ts +22 -0
- package/src/manager/protocol/query.ts +85 -0
- package/src/manager/router-schema.ts +22 -0
- package/src/manager/router.ts +660 -0
- package/src/manager-api/actors.ts +83 -0
- package/src/manager-api/common.ts +4 -0
- package/src/mod.ts +24 -0
- package/src/registry/config/driver.ts +21 -0
- package/src/registry/config/index.ts +510 -0
- package/src/registry/config/legacy-runner.ts +157 -0
- package/src/registry/config/runner.ts +21 -0
- package/src/registry/config/serverless.ts +94 -0
- package/src/registry/index.ts +194 -0
- package/src/registry/log.ts +5 -0
- package/src/remote-manager-driver/actor-http-client.ts +84 -0
- package/src/remote-manager-driver/actor-websocket-client.ts +81 -0
- package/src/remote-manager-driver/api-endpoints.ts +159 -0
- package/src/remote-manager-driver/api-utils.ts +69 -0
- package/src/remote-manager-driver/log.ts +5 -0
- package/src/remote-manager-driver/metadata.ts +64 -0
- package/src/remote-manager-driver/mod.ts +414 -0
- package/src/remote-manager-driver/ws-proxy.ts +189 -0
- package/src/schemas/actor-inspector/mod.ts +1 -0
- package/src/schemas/actor-inspector/versioned.ts +233 -0
- package/src/schemas/actor-persist/mod.ts +1 -0
- package/src/schemas/actor-persist/versioned.ts +217 -0
- package/src/schemas/client-protocol/mod.ts +1 -0
- package/src/schemas/client-protocol/versioned.ts +330 -0
- package/src/schemas/client-protocol-zod/mod.ts +118 -0
- package/src/schemas/file-system-driver/mod.ts +1 -0
- package/src/schemas/file-system-driver/versioned.ts +135 -0
- package/src/schemas/persist/mod.ts +1 -0
- package/src/schemas/transport/mod.ts +1 -0
- package/src/serde.ts +138 -0
- package/src/serve-test-suite/mod.ts +148 -0
- package/src/serverless/configure.ts +82 -0
- package/src/serverless/log.ts +5 -0
- package/src/serverless/router.test.ts +299 -0
- package/src/serverless/router.ts +215 -0
- package/src/test/log.ts +5 -0
- package/src/test/mod.ts +99 -0
- package/src/utils/crypto.ts +24 -0
- package/src/utils/endpoint-parser.test.ts +202 -0
- package/src/utils/endpoint-parser.ts +124 -0
- package/src/utils/env-vars.ts +78 -0
- package/src/utils/node.ts +178 -0
- package/src/utils/router.ts +83 -0
- package/src/utils/serve.ts +212 -0
- package/src/utils.test.ts +34 -0
- package/src/utils.ts +437 -0
- package/src/workflow/constants.ts +2 -0
- package/src/workflow/context.ts +597 -0
- package/src/workflow/driver.ts +194 -0
- package/src/workflow/inspector.ts +268 -0
- package/src/workflow/mod.ts +128 -0
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import type { Context as HonoContext } from "hono";
|
|
2
|
+
import type { WSContext } from "hono/ws";
|
|
3
|
+
import type { UpgradeWebSocketArgs } from "@/actor/router-websocket-endpoints";
|
|
4
|
+
import { stringifyError } from "@/common/utils";
|
|
5
|
+
import { importWebSocket } from "@/common/websocket";
|
|
6
|
+
import { logger } from "./log";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Returns Hono `upgradeWebSocket` args that will proxy requests from the client to a destination address.
|
|
10
|
+
*/
|
|
11
|
+
export async function createWebSocketProxy(
|
|
12
|
+
c: HonoContext,
|
|
13
|
+
targetUrl: string,
|
|
14
|
+
protocols: string[],
|
|
15
|
+
): Promise<UpgradeWebSocketArgs> {
|
|
16
|
+
const WebSocket = await importWebSocket();
|
|
17
|
+
|
|
18
|
+
// WebSocket state
|
|
19
|
+
interface WsState {
|
|
20
|
+
targetWs?: WebSocket;
|
|
21
|
+
connectPromise?: Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
const state: WsState = {};
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
onOpen: async (event: any, clientWs: WSContext) => {
|
|
27
|
+
logger().debug({ msg: "client websocket connected", targetUrl });
|
|
28
|
+
|
|
29
|
+
if (clientWs.readyState !== 1) {
|
|
30
|
+
logger().warn({
|
|
31
|
+
msg: "client websocket not open on connection",
|
|
32
|
+
targetUrl,
|
|
33
|
+
readyState: clientWs.readyState,
|
|
34
|
+
});
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Create WebSocket
|
|
39
|
+
const targetWs = new WebSocket(targetUrl, protocols);
|
|
40
|
+
state.targetWs = targetWs;
|
|
41
|
+
|
|
42
|
+
// Setup connection promise
|
|
43
|
+
state.connectPromise = new Promise<void>((resolve, reject) => {
|
|
44
|
+
targetWs.addEventListener("open", () => {
|
|
45
|
+
logger().debug({
|
|
46
|
+
msg: "target websocket connected",
|
|
47
|
+
targetUrl,
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
if (clientWs.readyState !== 1) {
|
|
51
|
+
logger().warn({
|
|
52
|
+
msg: "client websocket closed before target connected",
|
|
53
|
+
targetUrl,
|
|
54
|
+
clientReadyState: clientWs.readyState,
|
|
55
|
+
});
|
|
56
|
+
targetWs.close(1001, "Client disconnected");
|
|
57
|
+
reject(new Error("Client disconnected"));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
resolve();
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
targetWs.addEventListener("error", (error) => {
|
|
64
|
+
logger().warn({
|
|
65
|
+
msg: "target websocket error during connection",
|
|
66
|
+
targetUrl,
|
|
67
|
+
});
|
|
68
|
+
reject(error);
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// Setup bidirectional forwarding
|
|
73
|
+
state.targetWs.addEventListener("message", (event) => {
|
|
74
|
+
if (
|
|
75
|
+
typeof event.data === "string" ||
|
|
76
|
+
event.data instanceof ArrayBuffer
|
|
77
|
+
) {
|
|
78
|
+
clientWs.send(event.data);
|
|
79
|
+
} else if (event.data instanceof Blob) {
|
|
80
|
+
event.data.arrayBuffer().then((buffer) => {
|
|
81
|
+
clientWs.send(buffer);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
state.targetWs.addEventListener("close", (event) => {
|
|
87
|
+
logger().debug({
|
|
88
|
+
msg: "target websocket closed",
|
|
89
|
+
targetUrl,
|
|
90
|
+
code: event.code,
|
|
91
|
+
reason: event.reason,
|
|
92
|
+
});
|
|
93
|
+
closeWebSocketIfOpen(clientWs, event.code, event.reason);
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
state.targetWs.addEventListener("error", (error) => {
|
|
97
|
+
logger().error({
|
|
98
|
+
msg: "target websocket error",
|
|
99
|
+
targetUrl,
|
|
100
|
+
error: stringifyError(error),
|
|
101
|
+
});
|
|
102
|
+
closeWebSocketIfOpen(clientWs, 1011, "Target WebSocket error");
|
|
103
|
+
});
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
onMessage: async (event: any, clientWs: WSContext) => {
|
|
107
|
+
if (!state.targetWs || !state.connectPromise) {
|
|
108
|
+
logger().error({
|
|
109
|
+
msg: "websocket state not initialized",
|
|
110
|
+
targetUrl,
|
|
111
|
+
});
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
try {
|
|
116
|
+
await state.connectPromise;
|
|
117
|
+
if (state.targetWs.readyState === WebSocket.OPEN) {
|
|
118
|
+
state.targetWs.send(event.data);
|
|
119
|
+
} else {
|
|
120
|
+
logger().warn({
|
|
121
|
+
msg: "target websocket not open",
|
|
122
|
+
targetUrl,
|
|
123
|
+
readyState: state.targetWs.readyState,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
} catch (error) {
|
|
127
|
+
logger().error({
|
|
128
|
+
msg: "failed to connect to target websocket",
|
|
129
|
+
targetUrl,
|
|
130
|
+
error,
|
|
131
|
+
});
|
|
132
|
+
closeWebSocketIfOpen(
|
|
133
|
+
clientWs,
|
|
134
|
+
1011,
|
|
135
|
+
"Failed to connect to target",
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
|
|
140
|
+
onClose: (event: any, clientWs: WSContext) => {
|
|
141
|
+
logger().debug({
|
|
142
|
+
msg: "client websocket closed",
|
|
143
|
+
targetUrl,
|
|
144
|
+
code: event.code,
|
|
145
|
+
reason: event.reason,
|
|
146
|
+
wasClean: event.wasClean,
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
if (state.targetWs) {
|
|
150
|
+
if (
|
|
151
|
+
state.targetWs.readyState === WebSocket.OPEN ||
|
|
152
|
+
state.targetWs.readyState === WebSocket.CONNECTING
|
|
153
|
+
) {
|
|
154
|
+
state.targetWs.close(
|
|
155
|
+
1000,
|
|
156
|
+
event.reason || "Client disconnected",
|
|
157
|
+
);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
},
|
|
161
|
+
|
|
162
|
+
onError: (event: any, clientWs: WSContext) => {
|
|
163
|
+
logger().error({ msg: "client websocket error", targetUrl, event });
|
|
164
|
+
|
|
165
|
+
if (state.targetWs) {
|
|
166
|
+
if (state.targetWs.readyState === WebSocket.OPEN) {
|
|
167
|
+
state.targetWs.close(1011, "Client WebSocket error");
|
|
168
|
+
} else if (state.targetWs.readyState === WebSocket.CONNECTING) {
|
|
169
|
+
state.targetWs.close();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
function closeWebSocketIfOpen(
|
|
177
|
+
ws: WebSocket | WSContext,
|
|
178
|
+
code: number,
|
|
179
|
+
reason: string,
|
|
180
|
+
): void {
|
|
181
|
+
if (ws.readyState === 1) {
|
|
182
|
+
ws.close(code, reason);
|
|
183
|
+
} else if (
|
|
184
|
+
"close" in ws &&
|
|
185
|
+
(ws as WebSocket).readyState === WebSocket.OPEN
|
|
186
|
+
) {
|
|
187
|
+
ws.close(code, reason);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "../../../dist/schemas/actor-inspector/v3";
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
import { createVersionedDataHandler } from "vbare";
|
|
2
|
+
|
|
3
|
+
import * as v1 from "../../../dist/schemas/actor-inspector/v1";
|
|
4
|
+
import * as v2 from "../../../dist/schemas/actor-inspector/v2";
|
|
5
|
+
import * as v3 from "../../../dist/schemas/actor-inspector/v3";
|
|
6
|
+
|
|
7
|
+
export const CURRENT_VERSION = 3;
|
|
8
|
+
|
|
9
|
+
const EVENTS_DROPPED_ERROR = "inspector.events_dropped";
|
|
10
|
+
const WORKFLOW_HISTORY_DROPPED_ERROR = "inspector.workflow_history_dropped";
|
|
11
|
+
const QUEUE_DROPPED_ERROR = "inspector.queue_dropped";
|
|
12
|
+
const TRACE_DROPPED_ERROR = "inspector.trace_dropped";
|
|
13
|
+
const DATABASE_DROPPED_ERROR = "inspector.database_dropped";
|
|
14
|
+
|
|
15
|
+
// Converter from v1 to v2: Drop events in Init and add new fields
|
|
16
|
+
const v1ToClientToV2 = (v1Data: v1.ToClient): v2.ToClient => {
|
|
17
|
+
if (v1Data.body.tag === "Init") {
|
|
18
|
+
const init = v1Data.body.val as v1.Init;
|
|
19
|
+
return {
|
|
20
|
+
body: {
|
|
21
|
+
tag: "Init",
|
|
22
|
+
val: {
|
|
23
|
+
connections: init.connections,
|
|
24
|
+
state: init.state,
|
|
25
|
+
isStateEnabled: init.isStateEnabled,
|
|
26
|
+
rpcs: init.rpcs,
|
|
27
|
+
isDatabaseEnabled: init.isDatabaseEnabled,
|
|
28
|
+
queueSize: 0n,
|
|
29
|
+
workflowHistory: null,
|
|
30
|
+
isWorkflowEnabled: false,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (
|
|
36
|
+
v1Data.body.tag === "EventsUpdated" ||
|
|
37
|
+
v1Data.body.tag === "EventsResponse"
|
|
38
|
+
) {
|
|
39
|
+
return {
|
|
40
|
+
body: {
|
|
41
|
+
tag: "Error",
|
|
42
|
+
val: {
|
|
43
|
+
message: EVENTS_DROPPED_ERROR,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return v1Data as unknown as v2.ToClient;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// Converter from v2 to v1: Add empty events to Init, drop newer updates
|
|
52
|
+
const v2ToClientToV1 = (v2Data: v2.ToClient): v1.ToClient => {
|
|
53
|
+
if (v2Data.body.tag === "Init") {
|
|
54
|
+
const init = v2Data.body.val;
|
|
55
|
+
return {
|
|
56
|
+
body: {
|
|
57
|
+
tag: "Init",
|
|
58
|
+
val: {
|
|
59
|
+
connections: init.connections,
|
|
60
|
+
events: [],
|
|
61
|
+
state: init.state,
|
|
62
|
+
isStateEnabled: init.isStateEnabled,
|
|
63
|
+
rpcs: init.rpcs,
|
|
64
|
+
isDatabaseEnabled: init.isDatabaseEnabled,
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (
|
|
70
|
+
v2Data.body.tag === "WorkflowHistoryUpdated" ||
|
|
71
|
+
v2Data.body.tag === "WorkflowHistoryResponse"
|
|
72
|
+
) {
|
|
73
|
+
return {
|
|
74
|
+
body: {
|
|
75
|
+
tag: "Error",
|
|
76
|
+
val: {
|
|
77
|
+
message: WORKFLOW_HISTORY_DROPPED_ERROR,
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
if (v2Data.body.tag === "QueueUpdated") {
|
|
83
|
+
return {
|
|
84
|
+
body: {
|
|
85
|
+
tag: "Error",
|
|
86
|
+
val: {
|
|
87
|
+
message: QUEUE_DROPPED_ERROR,
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
if (v2Data.body.tag === "QueueResponse") {
|
|
93
|
+
return {
|
|
94
|
+
body: {
|
|
95
|
+
tag: "Error",
|
|
96
|
+
val: {
|
|
97
|
+
message: QUEUE_DROPPED_ERROR,
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (v2Data.body.tag === "TraceQueryResponse") {
|
|
103
|
+
return {
|
|
104
|
+
body: {
|
|
105
|
+
tag: "Error",
|
|
106
|
+
val: {
|
|
107
|
+
message: TRACE_DROPPED_ERROR,
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return v2Data as unknown as v1.ToClient;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
// Converter from v2 to v3: v2 messages are a subset of v3
|
|
116
|
+
const v2ToClientToV3 = (v2Data: v2.ToClient): v3.ToClient => {
|
|
117
|
+
return v2Data as unknown as v3.ToClient;
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
// Converter from v3 to v2: Drop database responses
|
|
121
|
+
const v3ToClientToV2 = (v3Data: v3.ToClient): v2.ToClient => {
|
|
122
|
+
if (
|
|
123
|
+
v3Data.body.tag === "DatabaseSchemaResponse" ||
|
|
124
|
+
v3Data.body.tag === "DatabaseTableRowsResponse"
|
|
125
|
+
) {
|
|
126
|
+
return {
|
|
127
|
+
body: {
|
|
128
|
+
tag: "Error",
|
|
129
|
+
val: {
|
|
130
|
+
message: DATABASE_DROPPED_ERROR,
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return v3Data as unknown as v2.ToClient;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
// Converter from v1 to v2: Drop events requests
|
|
139
|
+
const v1ToServerToV2 = (v1Data: v1.ToServer): v2.ToServer => {
|
|
140
|
+
if (
|
|
141
|
+
v1Data.body.tag === "EventsRequest" ||
|
|
142
|
+
v1Data.body.tag === "ClearEventsRequest"
|
|
143
|
+
) {
|
|
144
|
+
throw new Error("Cannot convert events requests to v2");
|
|
145
|
+
}
|
|
146
|
+
return v1Data as unknown as v2.ToServer;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
// Converter from v2 to v1: Drop newer requests
|
|
150
|
+
const v2ToServerToV1 = (v2Data: v2.ToServer): v1.ToServer => {
|
|
151
|
+
if (
|
|
152
|
+
v2Data.body.tag === "TraceQueryRequest" ||
|
|
153
|
+
v2Data.body.tag === "QueueRequest" ||
|
|
154
|
+
v2Data.body.tag === "WorkflowHistoryRequest"
|
|
155
|
+
) {
|
|
156
|
+
throw new Error("Cannot convert v2-only requests to v1");
|
|
157
|
+
}
|
|
158
|
+
return v2Data as unknown as v1.ToServer;
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
// Converter from v2 to v3: v2 messages are a subset of v3
|
|
162
|
+
const v2ToServerToV3 = (v2Data: v2.ToServer): v3.ToServer => {
|
|
163
|
+
return v2Data as unknown as v3.ToServer;
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
// Converter from v3 to v2: Drop database requests
|
|
167
|
+
const v3ToServerToV2 = (v3Data: v3.ToServer): v2.ToServer => {
|
|
168
|
+
if (
|
|
169
|
+
v3Data.body.tag === "DatabaseSchemaRequest" ||
|
|
170
|
+
v3Data.body.tag === "DatabaseTableRowsRequest"
|
|
171
|
+
) {
|
|
172
|
+
throw new Error("Cannot convert v3-only database requests to v2");
|
|
173
|
+
}
|
|
174
|
+
return v3Data as unknown as v2.ToServer;
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
export const TO_SERVER_VERSIONED = createVersionedDataHandler<v3.ToServer>({
|
|
178
|
+
serializeVersion: (data, version) => {
|
|
179
|
+
switch (version) {
|
|
180
|
+
case 1:
|
|
181
|
+
return v1.encodeToServer(data as v1.ToServer);
|
|
182
|
+
case 2:
|
|
183
|
+
return v2.encodeToServer(data as v2.ToServer);
|
|
184
|
+
case 3:
|
|
185
|
+
return v3.encodeToServer(data as v3.ToServer);
|
|
186
|
+
default:
|
|
187
|
+
throw new Error(`Unknown version ${version}`);
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
deserializeVersion: (bytes, version) => {
|
|
191
|
+
switch (version) {
|
|
192
|
+
case 1:
|
|
193
|
+
return v1.decodeToServer(bytes);
|
|
194
|
+
case 2:
|
|
195
|
+
return v2.decodeToServer(bytes);
|
|
196
|
+
case 3:
|
|
197
|
+
return v3.decodeToServer(bytes);
|
|
198
|
+
default:
|
|
199
|
+
throw new Error(`Unknown version ${version}`);
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
deserializeConverters: () => [v1ToServerToV2, v2ToServerToV3],
|
|
203
|
+
serializeConverters: () => [v3ToServerToV2, v2ToServerToV1],
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
export const TO_CLIENT_VERSIONED = createVersionedDataHandler<v3.ToClient>({
|
|
207
|
+
serializeVersion: (data, version) => {
|
|
208
|
+
switch (version) {
|
|
209
|
+
case 1:
|
|
210
|
+
return v1.encodeToClient(data as v1.ToClient);
|
|
211
|
+
case 2:
|
|
212
|
+
return v2.encodeToClient(data as v2.ToClient);
|
|
213
|
+
case 3:
|
|
214
|
+
return v3.encodeToClient(data as v3.ToClient);
|
|
215
|
+
default:
|
|
216
|
+
throw new Error(`Unknown version ${version}`);
|
|
217
|
+
}
|
|
218
|
+
},
|
|
219
|
+
deserializeVersion: (bytes, version) => {
|
|
220
|
+
switch (version) {
|
|
221
|
+
case 1:
|
|
222
|
+
return v1.decodeToClient(bytes);
|
|
223
|
+
case 2:
|
|
224
|
+
return v2.decodeToClient(bytes);
|
|
225
|
+
case 3:
|
|
226
|
+
return v3.decodeToClient(bytes);
|
|
227
|
+
default:
|
|
228
|
+
throw new Error(`Unknown version ${version}`);
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
deserializeConverters: () => [v1ToClientToV2, v2ToClientToV3],
|
|
232
|
+
serializeConverters: () => [v3ToClientToV2, v2ToClientToV1],
|
|
233
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "../../../dist/schemas/actor-persist/v3";
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { createVersionedDataHandler } from "vbare";
|
|
2
|
+
import * as v1 from "../../../dist/schemas/actor-persist/v1";
|
|
3
|
+
import * as v2 from "../../../dist/schemas/actor-persist/v2";
|
|
4
|
+
import * as v3 from "../../../dist/schemas/actor-persist/v3";
|
|
5
|
+
import * as v4 from "../../../dist/schemas/actor-persist/v4";
|
|
6
|
+
|
|
7
|
+
export const CURRENT_VERSION = 4;
|
|
8
|
+
|
|
9
|
+
// Converter from v1 to v2
|
|
10
|
+
const v1ToV2 = (v1Data: v1.PersistedActor): v2.PersistedActor => ({
|
|
11
|
+
...v1Data,
|
|
12
|
+
connections: v1Data.connections.map((conn) => ({
|
|
13
|
+
...conn,
|
|
14
|
+
hibernatableRequestId: null,
|
|
15
|
+
})),
|
|
16
|
+
hibernatableWebSockets: [],
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
// Converter from v2 to v3
|
|
20
|
+
const v2ToV3 = (v2Data: v2.PersistedActor): v3.Actor => {
|
|
21
|
+
// Transform scheduled events from nested structure to flat structure
|
|
22
|
+
const scheduledEvents: v3.ScheduleEvent[] = v2Data.scheduledEvents.map(
|
|
23
|
+
(event) => {
|
|
24
|
+
// Extract action and args from the kind wrapper
|
|
25
|
+
if (event.kind.tag === "GenericPersistedScheduleEvent") {
|
|
26
|
+
return {
|
|
27
|
+
eventId: event.eventId,
|
|
28
|
+
timestamp: event.timestamp,
|
|
29
|
+
action: event.kind.val.action,
|
|
30
|
+
args: event.kind.val.args,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// Fallback for unknown kinds
|
|
34
|
+
throw new Error(`Unknown schedule event kind: ${event.kind.tag}`);
|
|
35
|
+
},
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
return {
|
|
39
|
+
input: v2Data.input,
|
|
40
|
+
hasInitialized: v2Data.hasInitialized,
|
|
41
|
+
state: v2Data.state,
|
|
42
|
+
scheduledEvents,
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
// Converter from v3 to v4: No changes to Actor structure
|
|
47
|
+
const v3ToV4 = (v3Data: v3.Actor): v4.Actor => {
|
|
48
|
+
return v3Data as unknown as v4.Actor;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// Converter from v4 to v3: No changes to Actor structure
|
|
52
|
+
const v4ToV3 = (v4Data: v4.Actor): v3.Actor => {
|
|
53
|
+
return v4Data as unknown as v3.Actor;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
// Converter from v3 to v2
|
|
57
|
+
const v3ToV2 = (v3Data: v3.Actor): v2.PersistedActor => {
|
|
58
|
+
// Transform scheduled events from flat structure back to nested structure
|
|
59
|
+
const scheduledEvents: v2.PersistedScheduleEvent[] =
|
|
60
|
+
v3Data.scheduledEvents.map((event) => ({
|
|
61
|
+
eventId: event.eventId,
|
|
62
|
+
timestamp: event.timestamp,
|
|
63
|
+
kind: {
|
|
64
|
+
tag: "GenericPersistedScheduleEvent" as const,
|
|
65
|
+
val: {
|
|
66
|
+
action: event.action,
|
|
67
|
+
args: event.args,
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
}));
|
|
71
|
+
|
|
72
|
+
return {
|
|
73
|
+
input: v3Data.input,
|
|
74
|
+
hasInitialized: v3Data.hasInitialized,
|
|
75
|
+
state: v3Data.state,
|
|
76
|
+
scheduledEvents,
|
|
77
|
+
connections: [],
|
|
78
|
+
hibernatableWebSockets: [],
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
// Converter from v2 to v1
|
|
83
|
+
const v2ToV1 = (v2Data: v2.PersistedActor): v1.PersistedActor => {
|
|
84
|
+
return {
|
|
85
|
+
input: v2Data.input,
|
|
86
|
+
hasInitialized: v2Data.hasInitialized,
|
|
87
|
+
state: v2Data.state,
|
|
88
|
+
scheduledEvents: v2Data.scheduledEvents,
|
|
89
|
+
connections: v2Data.connections.map((conn) => {
|
|
90
|
+
const { hibernatableRequestId, ...rest } = conn;
|
|
91
|
+
return rest;
|
|
92
|
+
}),
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
export const ACTOR_VERSIONED = createVersionedDataHandler<v4.Actor>({
|
|
97
|
+
deserializeVersion: (bytes, version) => {
|
|
98
|
+
switch (version) {
|
|
99
|
+
case 1:
|
|
100
|
+
return v1.decodePersistedActor(bytes);
|
|
101
|
+
case 2:
|
|
102
|
+
return v2.decodePersistedActor(bytes);
|
|
103
|
+
case 3:
|
|
104
|
+
return v3.decodeActor(bytes);
|
|
105
|
+
case 4:
|
|
106
|
+
return v4.decodeActor(bytes);
|
|
107
|
+
default:
|
|
108
|
+
throw new Error(`Unknown version ${version}`);
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
serializeVersion: (data, version) => {
|
|
112
|
+
switch (version) {
|
|
113
|
+
case 1:
|
|
114
|
+
return v1.encodePersistedActor(data as v1.PersistedActor);
|
|
115
|
+
case 2:
|
|
116
|
+
return v2.encodePersistedActor(data as v2.PersistedActor);
|
|
117
|
+
case 3:
|
|
118
|
+
return v3.encodeActor(data as v3.Actor);
|
|
119
|
+
case 4:
|
|
120
|
+
return v4.encodeActor(data as v4.Actor);
|
|
121
|
+
default:
|
|
122
|
+
throw new Error(`Unknown version ${version}`);
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
deserializeConverters: () => [v1ToV2, v2ToV3, v3ToV4],
|
|
126
|
+
serializeConverters: () => [v4ToV3, v3ToV2, v2ToV1],
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// Conn identity converters (Conn is identical between v3 and v4)
|
|
130
|
+
const v3ConnToV4 = (v3Data: v3.Conn): v4.Conn => {
|
|
131
|
+
return v3Data as unknown as v4.Conn;
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
const v4ConnToV3 = (v4Data: v4.Conn): v3.Conn => {
|
|
135
|
+
return v4Data as unknown as v3.Conn;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export const CONN_VERSIONED = createVersionedDataHandler<v4.Conn>({
|
|
139
|
+
deserializeVersion: (bytes, version) => {
|
|
140
|
+
switch (version) {
|
|
141
|
+
case 3:
|
|
142
|
+
return v3.decodeConn(bytes);
|
|
143
|
+
case 4:
|
|
144
|
+
return v4.decodeConn(bytes);
|
|
145
|
+
default:
|
|
146
|
+
throw new Error(
|
|
147
|
+
`Conn type only exists in version 3+, got version ${version}`,
|
|
148
|
+
);
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
serializeVersion: (data, version) => {
|
|
152
|
+
switch (version) {
|
|
153
|
+
case 3:
|
|
154
|
+
return v3.encodeConn(data as v3.Conn);
|
|
155
|
+
case 4:
|
|
156
|
+
return v4.encodeConn(data as v4.Conn);
|
|
157
|
+
default:
|
|
158
|
+
throw new Error(
|
|
159
|
+
`Conn type only exists in version 3+, got version ${version}`,
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
deserializeConverters: () => [v3ConnToV4],
|
|
164
|
+
serializeConverters: () => [v4ConnToV3],
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
export const QUEUE_METADATA_VERSIONED =
|
|
168
|
+
createVersionedDataHandler<v4.QueueMetadata>({
|
|
169
|
+
deserializeVersion: (bytes, version) => {
|
|
170
|
+
switch (version) {
|
|
171
|
+
case 4:
|
|
172
|
+
return v4.decodeQueueMetadata(bytes);
|
|
173
|
+
default:
|
|
174
|
+
throw new Error(
|
|
175
|
+
`QueueMetadata type only exists in version 4+, got version ${version}`,
|
|
176
|
+
);
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
serializeVersion: (data, version) => {
|
|
180
|
+
switch (version) {
|
|
181
|
+
case 4:
|
|
182
|
+
return v4.encodeQueueMetadata(data as v4.QueueMetadata);
|
|
183
|
+
default:
|
|
184
|
+
throw new Error(
|
|
185
|
+
`QueueMetadata type only exists in version 4+, got version ${version}`,
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
deserializeConverters: () => [],
|
|
190
|
+
serializeConverters: () => [],
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
export const QUEUE_MESSAGE_VERSIONED =
|
|
194
|
+
createVersionedDataHandler<v4.QueueMessage>({
|
|
195
|
+
deserializeVersion: (bytes, version) => {
|
|
196
|
+
switch (version) {
|
|
197
|
+
case 4:
|
|
198
|
+
return v4.decodeQueueMessage(bytes);
|
|
199
|
+
default:
|
|
200
|
+
throw new Error(
|
|
201
|
+
`QueueMessage type only exists in version 4+, got version ${version}`,
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
serializeVersion: (data, version) => {
|
|
206
|
+
switch (version) {
|
|
207
|
+
case 4:
|
|
208
|
+
return v4.encodeQueueMessage(data as v4.QueueMessage);
|
|
209
|
+
default:
|
|
210
|
+
throw new Error(
|
|
211
|
+
`QueueMessage type only exists in version 4+, got version ${version}`,
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
deserializeConverters: () => [],
|
|
216
|
+
serializeConverters: () => [],
|
|
217
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "../../../dist/schemas/client-protocol/v3";
|