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,294 @@
|
|
|
1
|
+
import { describe, expect, test, vi } from "vitest";
|
|
2
|
+
import type { ActorError } from "@/client/mod";
|
|
3
|
+
import type { DriverTestConfig } from "../mod";
|
|
4
|
+
import { setupDriverTest } from "../utils";
|
|
5
|
+
|
|
6
|
+
export function runActorDestroyTests(driverTestConfig: DriverTestConfig) {
|
|
7
|
+
describe("Actor Destroy Tests", () => {
|
|
8
|
+
test("actor destroy clears state (without connect)", async (c) => {
|
|
9
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
10
|
+
|
|
11
|
+
const actorKey = "test-destroy-without-connect";
|
|
12
|
+
|
|
13
|
+
// Get destroy observer
|
|
14
|
+
const observer = client.destroyObserver.getOrCreate(["observer"]);
|
|
15
|
+
await observer.reset();
|
|
16
|
+
|
|
17
|
+
// Create actor
|
|
18
|
+
const destroyActor = client.destroyActor.getOrCreate([actorKey]);
|
|
19
|
+
|
|
20
|
+
// Update state and save immediately
|
|
21
|
+
await destroyActor.setValue(42);
|
|
22
|
+
|
|
23
|
+
// Verify state was saved
|
|
24
|
+
const value = await destroyActor.getValue();
|
|
25
|
+
expect(value).toBe(42);
|
|
26
|
+
|
|
27
|
+
// Get actor ID before destroying
|
|
28
|
+
const actorId = await destroyActor.resolve();
|
|
29
|
+
|
|
30
|
+
// Destroy the actor
|
|
31
|
+
await destroyActor.destroy();
|
|
32
|
+
|
|
33
|
+
// Wait until the observer confirms the actor was destroyed
|
|
34
|
+
await vi.waitFor(async () => {
|
|
35
|
+
const wasDestroyed = await observer.wasDestroyed(actorKey);
|
|
36
|
+
expect(wasDestroyed, "actor onDestroy not called").toBeTruthy();
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
// Wait until the actor is fully cleaned up (getForId returns error)
|
|
40
|
+
await vi.waitFor(async () => {
|
|
41
|
+
let actorRunning = false;
|
|
42
|
+
try {
|
|
43
|
+
await client.destroyActor.getForId(actorId).getValue();
|
|
44
|
+
actorRunning = true;
|
|
45
|
+
} catch (err) {
|
|
46
|
+
expect((err as ActorError).group).toBe("actor");
|
|
47
|
+
expect((err as ActorError).code).toBe("not_found");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
expect(actorRunning, "actor still running").toBeFalsy();
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Verify actor no longer exists via getForId
|
|
54
|
+
let existsById = false;
|
|
55
|
+
try {
|
|
56
|
+
await client.destroyActor.getForId(actorId).getValue();
|
|
57
|
+
existsById = true;
|
|
58
|
+
} catch (err) {
|
|
59
|
+
expect((err as ActorError).group).toBe("actor");
|
|
60
|
+
expect((err as ActorError).code).toBe("not_found");
|
|
61
|
+
}
|
|
62
|
+
expect(
|
|
63
|
+
existsById,
|
|
64
|
+
"actor should not exist after destroy",
|
|
65
|
+
).toBeFalsy();
|
|
66
|
+
|
|
67
|
+
// Verify actor no longer exists via get
|
|
68
|
+
let existsByKey = false;
|
|
69
|
+
try {
|
|
70
|
+
await client.destroyActor
|
|
71
|
+
.get(["test-destroy-without-connect"])
|
|
72
|
+
.resolve();
|
|
73
|
+
existsByKey = true;
|
|
74
|
+
} catch (err) {
|
|
75
|
+
expect((err as ActorError).group).toBe("actor");
|
|
76
|
+
expect((err as ActorError).code).toBe("not_found");
|
|
77
|
+
}
|
|
78
|
+
expect(
|
|
79
|
+
existsByKey,
|
|
80
|
+
"actor should not exist after destroy",
|
|
81
|
+
).toBeFalsy();
|
|
82
|
+
|
|
83
|
+
// Create new actor with same key using getOrCreate
|
|
84
|
+
const newActor = client.destroyActor.getOrCreate([
|
|
85
|
+
"test-destroy-without-connect",
|
|
86
|
+
]);
|
|
87
|
+
|
|
88
|
+
// Verify state is fresh (default value, not the old value)
|
|
89
|
+
const newValue = await newActor.getValue();
|
|
90
|
+
expect(newValue).toBe(0);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
test("actor destroy clears state (with connect)", async (c) => {
|
|
94
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
95
|
+
|
|
96
|
+
const actorKey = "test-destroy-with-connect";
|
|
97
|
+
|
|
98
|
+
// Get destroy observer
|
|
99
|
+
const observer = client.destroyObserver.getOrCreate(["observer"]);
|
|
100
|
+
await observer.reset();
|
|
101
|
+
|
|
102
|
+
// Create actor handle
|
|
103
|
+
const destroyActorHandle = client.destroyActor.getOrCreate([
|
|
104
|
+
actorKey,
|
|
105
|
+
]);
|
|
106
|
+
|
|
107
|
+
// Get actor ID before destroying
|
|
108
|
+
const actorId = await destroyActorHandle.resolve();
|
|
109
|
+
|
|
110
|
+
// Create persistent connection
|
|
111
|
+
const destroyActor = destroyActorHandle.connect();
|
|
112
|
+
|
|
113
|
+
// Update state and save immediately
|
|
114
|
+
await destroyActor.setValue(99);
|
|
115
|
+
|
|
116
|
+
// Verify state was saved
|
|
117
|
+
const value = await destroyActor.getValue();
|
|
118
|
+
expect(value).toBe(99);
|
|
119
|
+
|
|
120
|
+
// Destroy the actor
|
|
121
|
+
await destroyActor.destroy();
|
|
122
|
+
|
|
123
|
+
// Dispose the connection
|
|
124
|
+
await destroyActor.dispose();
|
|
125
|
+
|
|
126
|
+
// Wait until the observer confirms the actor was destroyed
|
|
127
|
+
await vi.waitFor(async () => {
|
|
128
|
+
const wasDestroyed = await observer.wasDestroyed(actorKey);
|
|
129
|
+
expect(wasDestroyed, "actor onDestroy not called").toBeTruthy();
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// Wait until the actor is fully cleaned up (getForId returns error)
|
|
133
|
+
await vi.waitFor(async () => {
|
|
134
|
+
let actorRunning = false;
|
|
135
|
+
try {
|
|
136
|
+
await client.destroyActor.getForId(actorId).getValue();
|
|
137
|
+
actorRunning = true;
|
|
138
|
+
} catch (err) {
|
|
139
|
+
expect((err as ActorError).group).toBe("actor");
|
|
140
|
+
expect((err as ActorError).code).toBe("not_found");
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
expect(actorRunning, "actor still running").toBeFalsy();
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
// Verify actor no longer exists via getForId
|
|
147
|
+
let existsById = false;
|
|
148
|
+
try {
|
|
149
|
+
await client.destroyActor.getForId(actorId).getValue();
|
|
150
|
+
existsById = true;
|
|
151
|
+
} catch (err) {
|
|
152
|
+
expect((err as ActorError).group).toBe("actor");
|
|
153
|
+
expect((err as ActorError).code).toBe("not_found");
|
|
154
|
+
}
|
|
155
|
+
expect(
|
|
156
|
+
existsById,
|
|
157
|
+
"actor should not exist after destroy",
|
|
158
|
+
).toBeFalsy();
|
|
159
|
+
|
|
160
|
+
// Verify actor no longer exists via get
|
|
161
|
+
let existsByKey = false;
|
|
162
|
+
try {
|
|
163
|
+
await client.destroyActor
|
|
164
|
+
.get(["test-destroy-with-connect"])
|
|
165
|
+
.resolve();
|
|
166
|
+
existsByKey = true;
|
|
167
|
+
} catch (err) {
|
|
168
|
+
expect((err as ActorError).group).toBe("actor");
|
|
169
|
+
expect((err as ActorError).code).toBe("not_found");
|
|
170
|
+
}
|
|
171
|
+
expect(
|
|
172
|
+
existsByKey,
|
|
173
|
+
"actor should not exist after destroy",
|
|
174
|
+
).toBeFalsy();
|
|
175
|
+
|
|
176
|
+
// Create new actor with same key using getOrCreate
|
|
177
|
+
const newActor = client.destroyActor.getOrCreate([
|
|
178
|
+
"test-destroy-with-connect",
|
|
179
|
+
]);
|
|
180
|
+
|
|
181
|
+
// Verify state is fresh (default value, not the old value)
|
|
182
|
+
const newValue = await newActor.getValue();
|
|
183
|
+
expect(newValue).toBe(0);
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
test("actor destroy allows recreation via getOrCreate with resolve", async (c) => {
|
|
187
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
188
|
+
|
|
189
|
+
const actorKey = "test-destroy-getorcreate-resolve";
|
|
190
|
+
|
|
191
|
+
// Get destroy observer
|
|
192
|
+
const observer = client.destroyObserver.getOrCreate(["observer"]);
|
|
193
|
+
await observer.reset();
|
|
194
|
+
|
|
195
|
+
// Create actor
|
|
196
|
+
const destroyActor = client.destroyActor.getOrCreate([actorKey]);
|
|
197
|
+
|
|
198
|
+
// Update state and save immediately
|
|
199
|
+
await destroyActor.setValue(123);
|
|
200
|
+
|
|
201
|
+
// Verify state was saved
|
|
202
|
+
const value = await destroyActor.getValue();
|
|
203
|
+
expect(value).toBe(123);
|
|
204
|
+
|
|
205
|
+
// Get actor ID before destroying
|
|
206
|
+
const actorId = await destroyActor.resolve();
|
|
207
|
+
|
|
208
|
+
// Destroy the actor
|
|
209
|
+
await destroyActor.destroy();
|
|
210
|
+
|
|
211
|
+
// Wait until the observer confirms the actor was destroyed
|
|
212
|
+
await vi.waitFor(async () => {
|
|
213
|
+
const wasDestroyed = await observer.wasDestroyed(actorKey);
|
|
214
|
+
expect(wasDestroyed, "actor onDestroy not called").toBeTruthy();
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
// Wait until the actor is fully cleaned up
|
|
218
|
+
await vi.waitFor(async () => {
|
|
219
|
+
let actorRunning = false;
|
|
220
|
+
try {
|
|
221
|
+
await client.destroyActor.getForId(actorId).getValue();
|
|
222
|
+
actorRunning = true;
|
|
223
|
+
} catch (err) {
|
|
224
|
+
expect((err as ActorError).group).toBe("actor");
|
|
225
|
+
expect((err as ActorError).code).toBe("not_found");
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
expect(actorRunning, "actor still running").toBeFalsy();
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
// Recreate using getOrCreate with resolve
|
|
232
|
+
const newHandle = client.destroyActor.getOrCreate([actorKey]);
|
|
233
|
+
const newActorId = await newHandle.resolve();
|
|
234
|
+
|
|
235
|
+
// Verify state is fresh (default value, not the old value)
|
|
236
|
+
const newValue = await newHandle.getValue();
|
|
237
|
+
expect(newValue).toBe(0);
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
test("actor destroy allows recreation via create", async (c) => {
|
|
241
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
242
|
+
|
|
243
|
+
const actorKey = "test-destroy-create";
|
|
244
|
+
|
|
245
|
+
// Get destroy observer
|
|
246
|
+
const observer = client.destroyObserver.getOrCreate(["observer"]);
|
|
247
|
+
await observer.reset();
|
|
248
|
+
|
|
249
|
+
// Create actor using create()
|
|
250
|
+
const initialHandle = await client.destroyActor.create([actorKey]);
|
|
251
|
+
|
|
252
|
+
// Update state and save immediately
|
|
253
|
+
await initialHandle.setValue(456);
|
|
254
|
+
|
|
255
|
+
// Verify state was saved
|
|
256
|
+
const value = await initialHandle.getValue();
|
|
257
|
+
expect(value).toBe(456);
|
|
258
|
+
|
|
259
|
+
// Get actor ID before destroying
|
|
260
|
+
const actorId = await initialHandle.resolve();
|
|
261
|
+
|
|
262
|
+
// Destroy the actor
|
|
263
|
+
await initialHandle.destroy();
|
|
264
|
+
|
|
265
|
+
// Wait until the observer confirms the actor was destroyed
|
|
266
|
+
await vi.waitFor(async () => {
|
|
267
|
+
const wasDestroyed = await observer.wasDestroyed(actorKey);
|
|
268
|
+
expect(wasDestroyed, "actor onDestroy not called").toBeTruthy();
|
|
269
|
+
});
|
|
270
|
+
|
|
271
|
+
// Wait until the actor is fully cleaned up
|
|
272
|
+
await vi.waitFor(async () => {
|
|
273
|
+
let actorRunning = false;
|
|
274
|
+
try {
|
|
275
|
+
await client.destroyActor.getForId(actorId).getValue();
|
|
276
|
+
actorRunning = true;
|
|
277
|
+
} catch (err) {
|
|
278
|
+
expect((err as ActorError).group).toBe("actor");
|
|
279
|
+
expect((err as ActorError).code).toBe("not_found");
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
expect(actorRunning, "actor still running").toBeFalsy();
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
// Recreate using create()
|
|
286
|
+
const newHandle = await client.destroyActor.create([actorKey]);
|
|
287
|
+
const newActorId = await newHandle.resolve();
|
|
288
|
+
|
|
289
|
+
// Verify state is fresh (default value, not the old value)
|
|
290
|
+
const newValue = await newHandle.getValue();
|
|
291
|
+
expect(newValue).toBe(0);
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { describe } from "vitest";
|
|
2
|
+
import type { DriverTestConfig } from "../mod";
|
|
3
|
+
import { runActorScheduleTests } from "./actor-schedule";
|
|
4
|
+
import { runActorSleepTests } from "./actor-sleep";
|
|
5
|
+
import { runActorStateTests } from "./actor-state";
|
|
6
|
+
|
|
7
|
+
export function runActorDriverTests(driverTestConfig: DriverTestConfig) {
|
|
8
|
+
describe("Actor Driver Tests", () => {
|
|
9
|
+
// Run state persistence tests
|
|
10
|
+
runActorStateTests(driverTestConfig);
|
|
11
|
+
|
|
12
|
+
// Run scheduled alarms tests
|
|
13
|
+
runActorScheduleTests(driverTestConfig);
|
|
14
|
+
|
|
15
|
+
// Run actor sleep tests
|
|
16
|
+
runActorSleepTests(driverTestConfig);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import {
|
|
3
|
+
INTERNAL_ERROR_CODE,
|
|
4
|
+
INTERNAL_ERROR_DESCRIPTION,
|
|
5
|
+
} from "@/actor/errors";
|
|
6
|
+
import { assertUnreachable } from "@/actor/utils";
|
|
7
|
+
import type { DriverTestConfig } from "../mod";
|
|
8
|
+
import { setupDriverTest } from "../utils";
|
|
9
|
+
|
|
10
|
+
export function runActorErrorHandlingTests(driverTestConfig: DriverTestConfig) {
|
|
11
|
+
describe("Actor Error Handling Tests", () => {
|
|
12
|
+
describe("UserError Handling", () => {
|
|
13
|
+
test("should handle simple UserError with message", async (c) => {
|
|
14
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
15
|
+
|
|
16
|
+
// Try to call an action that throws a simple UserError
|
|
17
|
+
const handle = client.errorHandlingActor.getOrCreate();
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
await handle.throwSimpleError();
|
|
21
|
+
// If we get here, the test should fail
|
|
22
|
+
expect(true).toBe(false); // This should not be reached
|
|
23
|
+
} catch (error: any) {
|
|
24
|
+
// Verify the error properties
|
|
25
|
+
expect(error.message).toBe("Simple error message");
|
|
26
|
+
// Default code is "user_error" when not specified
|
|
27
|
+
expect(error.code).toBe("user_error");
|
|
28
|
+
// No metadata by default
|
|
29
|
+
expect(error.metadata).toBeUndefined();
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test("should handle detailed UserError with code and metadata", async (c) => {
|
|
34
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
35
|
+
|
|
36
|
+
// Try to call an action that throws a detailed UserError
|
|
37
|
+
const handle = client.errorHandlingActor.getOrCreate();
|
|
38
|
+
|
|
39
|
+
try {
|
|
40
|
+
await handle.throwDetailedError();
|
|
41
|
+
// If we get here, the test should fail
|
|
42
|
+
expect(true).toBe(false); // This should not be reached
|
|
43
|
+
} catch (error: any) {
|
|
44
|
+
// Verify the error properties
|
|
45
|
+
expect(error.message).toBe("Detailed error message");
|
|
46
|
+
expect(error.code).toBe("detailed_error");
|
|
47
|
+
expect(error.metadata).toBeDefined();
|
|
48
|
+
expect(error.metadata.reason).toBe("test");
|
|
49
|
+
expect(error.metadata.timestamp).toBeDefined();
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
describe("Internal Error Handling", () => {
|
|
55
|
+
test("should convert internal errors to safe format", async (c) => {
|
|
56
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
57
|
+
|
|
58
|
+
// Try to call an action that throws an internal error
|
|
59
|
+
const handle = client.errorHandlingActor.getOrCreate();
|
|
60
|
+
|
|
61
|
+
try {
|
|
62
|
+
await handle.throwInternalError();
|
|
63
|
+
// If we get here, the test should fail
|
|
64
|
+
expect(true).toBe(false); // This should not be reached
|
|
65
|
+
} catch (error: any) {
|
|
66
|
+
// Verify the error is converted to a safe format
|
|
67
|
+
expect(error.code).toBe(INTERNAL_ERROR_CODE);
|
|
68
|
+
// Original error details should not be exposed
|
|
69
|
+
expect(error.message).toBe(INTERNAL_ERROR_DESCRIPTION);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// TODO: Does not work with fake timers
|
|
75
|
+
describe.skip("Action Timeout", () => {
|
|
76
|
+
test("should handle action timeouts with custom duration", async (c) => {
|
|
77
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
78
|
+
|
|
79
|
+
// Call an action that should time out
|
|
80
|
+
const handle = client.errorHandlingActor.getOrCreate();
|
|
81
|
+
|
|
82
|
+
// This should throw a timeout error because errorHandlingActor has
|
|
83
|
+
// a 500ms timeout and this action tries to run for much longer
|
|
84
|
+
const timeoutPromise = handle.timeoutAction();
|
|
85
|
+
|
|
86
|
+
try {
|
|
87
|
+
await timeoutPromise;
|
|
88
|
+
// If we get here, the test failed - timeout didn't occur
|
|
89
|
+
expect(true).toBe(false); // This should not be reached
|
|
90
|
+
} catch (error: any) {
|
|
91
|
+
// Verify it's a timeout error
|
|
92
|
+
expect(error.message).toMatch(/timed out/i);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
test("should successfully run actions within timeout", async (c) => {
|
|
97
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
98
|
+
|
|
99
|
+
// Call an action with a delay shorter than the timeout
|
|
100
|
+
const handle = client.errorHandlingActor.getOrCreate();
|
|
101
|
+
|
|
102
|
+
// This should succeed because 200ms < 500ms timeout
|
|
103
|
+
const result = await handle.delayedAction(200);
|
|
104
|
+
expect(result).toBe("Completed after 200ms");
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
test("should respect different timeouts for different actors", async (c) => {
|
|
108
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
109
|
+
|
|
110
|
+
// The following actors have different timeout settings:
|
|
111
|
+
// customTimeoutActor: 200ms timeout
|
|
112
|
+
// standardTimeoutActor: default timeout (much longer)
|
|
113
|
+
|
|
114
|
+
// This should fail - 300ms delay with 200ms timeout
|
|
115
|
+
try {
|
|
116
|
+
await client.customTimeoutActor.getOrCreate().slowAction();
|
|
117
|
+
// Should not reach here
|
|
118
|
+
expect(true).toBe(false);
|
|
119
|
+
} catch (error: any) {
|
|
120
|
+
expect(error.message).toMatch(/timed out/i);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// This should succeed - 50ms delay with 200ms timeout
|
|
124
|
+
const quickResult = await client.customTimeoutActor
|
|
125
|
+
.getOrCreate()
|
|
126
|
+
.quickAction();
|
|
127
|
+
expect(quickResult).toBe("Quick action completed");
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
describe("Error Recovery", () => {
|
|
132
|
+
test("should continue working after errors", async (c) => {
|
|
133
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
134
|
+
|
|
135
|
+
const handle = client.errorHandlingActor.getOrCreate();
|
|
136
|
+
|
|
137
|
+
// Trigger an error
|
|
138
|
+
try {
|
|
139
|
+
await handle.throwSimpleError();
|
|
140
|
+
} catch (error) {
|
|
141
|
+
// Ignore error
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Actor should still work after error
|
|
145
|
+
const result = await handle.successfulAction();
|
|
146
|
+
expect(result).toBe("success");
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
}
|