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,264 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import type { DriverTestConfig } from "../mod";
|
|
3
|
+
import { setupDriverTest } from "../utils";
|
|
4
|
+
|
|
5
|
+
export function runActorInspectorTests(driverTestConfig: DriverTestConfig) {
|
|
6
|
+
describe("Actor Inspector HTTP API", () => {
|
|
7
|
+
test("GET /inspector/state returns actor state", async (c) => {
|
|
8
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
9
|
+
const handle = client.counter.getOrCreate(["inspector-state"]);
|
|
10
|
+
|
|
11
|
+
// Set some state first
|
|
12
|
+
await handle.increment(5);
|
|
13
|
+
|
|
14
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
15
|
+
const response = await fetch(`${gatewayUrl}/inspector/state`, {
|
|
16
|
+
headers: { Authorization: "Bearer token" },
|
|
17
|
+
});
|
|
18
|
+
expect(response.status).toBe(200);
|
|
19
|
+
const data = await response.json();
|
|
20
|
+
expect(data).toEqual({ state: { count: 5 } });
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
test("PATCH /inspector/state updates actor state", async (c) => {
|
|
24
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
25
|
+
const handle = client.counter.getOrCreate([
|
|
26
|
+
"inspector-set-state",
|
|
27
|
+
]);
|
|
28
|
+
|
|
29
|
+
await handle.increment(5);
|
|
30
|
+
|
|
31
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
32
|
+
|
|
33
|
+
// Replace state
|
|
34
|
+
const patchResponse = await fetch(
|
|
35
|
+
`${gatewayUrl}/inspector/state`,
|
|
36
|
+
{
|
|
37
|
+
method: "PATCH",
|
|
38
|
+
headers: {
|
|
39
|
+
"Content-Type": "application/json",
|
|
40
|
+
Authorization: "Bearer token",
|
|
41
|
+
},
|
|
42
|
+
body: JSON.stringify({ state: { count: 42 } }),
|
|
43
|
+
},
|
|
44
|
+
);
|
|
45
|
+
expect(patchResponse.status).toBe(200);
|
|
46
|
+
const patchData = await patchResponse.json();
|
|
47
|
+
expect(patchData).toEqual({ ok: true });
|
|
48
|
+
|
|
49
|
+
// Verify via action
|
|
50
|
+
const count = await handle.getCount();
|
|
51
|
+
expect(count).toBe(42);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test("GET /inspector/connections returns connections list", async (c) => {
|
|
55
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
56
|
+
const handle = client.counter.getOrCreate([
|
|
57
|
+
"inspector-connections",
|
|
58
|
+
]);
|
|
59
|
+
|
|
60
|
+
// Ensure actor exists
|
|
61
|
+
await handle.increment(0);
|
|
62
|
+
|
|
63
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
64
|
+
const response = await fetch(
|
|
65
|
+
`${gatewayUrl}/inspector/connections`,
|
|
66
|
+
{
|
|
67
|
+
headers: { Authorization: "Bearer token" },
|
|
68
|
+
},
|
|
69
|
+
);
|
|
70
|
+
expect(response.status).toBe(200);
|
|
71
|
+
const data = (await response.json()) as {
|
|
72
|
+
connections: unknown[];
|
|
73
|
+
};
|
|
74
|
+
expect(data).toHaveProperty("connections");
|
|
75
|
+
expect(Array.isArray(data.connections)).toBe(true);
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
test("GET /inspector/rpcs returns available actions", async (c) => {
|
|
79
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
80
|
+
const handle = client.counter.getOrCreate(["inspector-rpcs"]);
|
|
81
|
+
|
|
82
|
+
// Ensure actor exists
|
|
83
|
+
await handle.increment(0);
|
|
84
|
+
|
|
85
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
86
|
+
const response = await fetch(`${gatewayUrl}/inspector/rpcs`, {
|
|
87
|
+
headers: { Authorization: "Bearer token" },
|
|
88
|
+
});
|
|
89
|
+
expect(response.status).toBe(200);
|
|
90
|
+
const data = (await response.json()) as { rpcs: string[] };
|
|
91
|
+
expect(data).toHaveProperty("rpcs");
|
|
92
|
+
expect(data.rpcs).toContain("increment");
|
|
93
|
+
expect(data.rpcs).toContain("getCount");
|
|
94
|
+
expect(data.rpcs).toContain("setCount");
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
test("POST /inspector/action/:name executes an action", async (c) => {
|
|
98
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
99
|
+
const handle = client.counter.getOrCreate([
|
|
100
|
+
"inspector-action",
|
|
101
|
+
]);
|
|
102
|
+
|
|
103
|
+
await handle.increment(10);
|
|
104
|
+
|
|
105
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
106
|
+
const response = await fetch(
|
|
107
|
+
`${gatewayUrl}/inspector/action/increment`,
|
|
108
|
+
{
|
|
109
|
+
method: "POST",
|
|
110
|
+
headers: {
|
|
111
|
+
"Content-Type": "application/json",
|
|
112
|
+
Authorization: "Bearer token",
|
|
113
|
+
},
|
|
114
|
+
body: JSON.stringify({ args: [5] }),
|
|
115
|
+
},
|
|
116
|
+
);
|
|
117
|
+
expect(response.status).toBe(200);
|
|
118
|
+
const data = (await response.json()) as { output: number };
|
|
119
|
+
expect(data.output).toBe(15);
|
|
120
|
+
|
|
121
|
+
// Verify via normal action
|
|
122
|
+
const count = await handle.getCount();
|
|
123
|
+
expect(count).toBe(15);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
test("GET /inspector/queue returns queue status", async (c) => {
|
|
127
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
128
|
+
const handle = client.counter.getOrCreate(["inspector-queue"]);
|
|
129
|
+
|
|
130
|
+
// Ensure actor exists
|
|
131
|
+
await handle.increment(0);
|
|
132
|
+
|
|
133
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
134
|
+
const response = await fetch(
|
|
135
|
+
`${gatewayUrl}/inspector/queue?limit=10`,
|
|
136
|
+
{
|
|
137
|
+
headers: { Authorization: "Bearer token" },
|
|
138
|
+
},
|
|
139
|
+
);
|
|
140
|
+
expect(response.status).toBe(200);
|
|
141
|
+
const data = (await response.json()) as {
|
|
142
|
+
size: number;
|
|
143
|
+
maxSize: number;
|
|
144
|
+
truncated: boolean;
|
|
145
|
+
messages: unknown[];
|
|
146
|
+
};
|
|
147
|
+
expect(data).toHaveProperty("size");
|
|
148
|
+
expect(data).toHaveProperty("maxSize");
|
|
149
|
+
expect(data).toHaveProperty("truncated");
|
|
150
|
+
expect(data).toHaveProperty("messages");
|
|
151
|
+
expect(typeof data.size).toBe("number");
|
|
152
|
+
expect(typeof data.maxSize).toBe("number");
|
|
153
|
+
expect(typeof data.truncated).toBe("boolean");
|
|
154
|
+
expect(Array.isArray(data.messages)).toBe(true);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
test("GET /inspector/traces returns trace data", async (c) => {
|
|
158
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
159
|
+
const handle = client.counter.getOrCreate([
|
|
160
|
+
"inspector-traces",
|
|
161
|
+
]);
|
|
162
|
+
|
|
163
|
+
// Perform an action to generate traces
|
|
164
|
+
await handle.increment(1);
|
|
165
|
+
|
|
166
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
167
|
+
const response = await fetch(
|
|
168
|
+
`${gatewayUrl}/inspector/traces?startMs=0&endMs=${Date.now() + 60000}&limit=100`,
|
|
169
|
+
{
|
|
170
|
+
headers: { Authorization: "Bearer token" },
|
|
171
|
+
},
|
|
172
|
+
);
|
|
173
|
+
expect(response.status).toBe(200);
|
|
174
|
+
const data = (await response.json()) as {
|
|
175
|
+
otlp: unknown;
|
|
176
|
+
clamped: boolean;
|
|
177
|
+
};
|
|
178
|
+
expect(data).toHaveProperty("otlp");
|
|
179
|
+
expect(data).toHaveProperty("clamped");
|
|
180
|
+
expect(typeof data.clamped).toBe("boolean");
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
test("GET /inspector/workflow-history returns workflow status", async (c) => {
|
|
184
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
185
|
+
const handle = client.counter.getOrCreate([
|
|
186
|
+
"inspector-workflow",
|
|
187
|
+
]);
|
|
188
|
+
|
|
189
|
+
// Ensure actor exists
|
|
190
|
+
await handle.increment(0);
|
|
191
|
+
|
|
192
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
193
|
+
const response = await fetch(
|
|
194
|
+
`${gatewayUrl}/inspector/workflow-history`,
|
|
195
|
+
{
|
|
196
|
+
headers: { Authorization: "Bearer token" },
|
|
197
|
+
},
|
|
198
|
+
);
|
|
199
|
+
expect(response.status).toBe(200);
|
|
200
|
+
const data = (await response.json()) as {
|
|
201
|
+
history: unknown;
|
|
202
|
+
isWorkflowEnabled: boolean;
|
|
203
|
+
};
|
|
204
|
+
expect(data).toHaveProperty("history");
|
|
205
|
+
expect(data).toHaveProperty("isWorkflowEnabled");
|
|
206
|
+
// Counter actor has no workflow, so it should be disabled
|
|
207
|
+
expect(data.isWorkflowEnabled).toBe(false);
|
|
208
|
+
expect(data.history).toBeNull();
|
|
209
|
+
});
|
|
210
|
+
|
|
211
|
+
test("GET /inspector/summary returns full actor snapshot", async (c) => {
|
|
212
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
213
|
+
const handle = client.counter.getOrCreate([
|
|
214
|
+
"inspector-summary",
|
|
215
|
+
]);
|
|
216
|
+
|
|
217
|
+
await handle.increment(7);
|
|
218
|
+
|
|
219
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
220
|
+
const response = await fetch(
|
|
221
|
+
`${gatewayUrl}/inspector/summary`,
|
|
222
|
+
{
|
|
223
|
+
headers: { Authorization: "Bearer token" },
|
|
224
|
+
},
|
|
225
|
+
);
|
|
226
|
+
expect(response.status).toBe(200);
|
|
227
|
+
const data = (await response.json()) as {
|
|
228
|
+
state: { count: number };
|
|
229
|
+
connections: unknown[];
|
|
230
|
+
rpcs: string[];
|
|
231
|
+
queueSize: number;
|
|
232
|
+
isStateEnabled: boolean;
|
|
233
|
+
isDatabaseEnabled: boolean;
|
|
234
|
+
isWorkflowEnabled: boolean;
|
|
235
|
+
workflowHistory: unknown;
|
|
236
|
+
};
|
|
237
|
+
expect(data.state).toEqual({ count: 7 });
|
|
238
|
+
expect(Array.isArray(data.connections)).toBe(true);
|
|
239
|
+
expect(data.rpcs).toContain("increment");
|
|
240
|
+
expect(typeof data.queueSize).toBe("number");
|
|
241
|
+
expect(data.isStateEnabled).toBe(true);
|
|
242
|
+
expect(typeof data.isDatabaseEnabled).toBe("boolean");
|
|
243
|
+
expect(data.isWorkflowEnabled).toBe(false);
|
|
244
|
+
expect(data.workflowHistory).toBeNull();
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
test("inspector endpoints require auth in non-dev mode", async (c) => {
|
|
248
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
249
|
+
const handle = client.counter.getOrCreate([
|
|
250
|
+
"inspector-auth",
|
|
251
|
+
]);
|
|
252
|
+
|
|
253
|
+
await handle.increment(0);
|
|
254
|
+
|
|
255
|
+
const gatewayUrl = await handle.getGatewayUrl();
|
|
256
|
+
|
|
257
|
+
// Request with wrong token should fail
|
|
258
|
+
const response = await fetch(`${gatewayUrl}/inspector/state`, {
|
|
259
|
+
headers: { Authorization: "Bearer wrong-token" },
|
|
260
|
+
});
|
|
261
|
+
expect(response.status).toBe(401);
|
|
262
|
+
});
|
|
263
|
+
});
|
|
264
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { DriverTestConfig } from "../mod";
|
|
2
|
+
import { setupDriverTest } from "../utils";
|
|
3
|
+
import { describe, expect, test, type TestContext } from "vitest";
|
|
4
|
+
|
|
5
|
+
export function runActorKvTests(driverTestConfig: DriverTestConfig) {
|
|
6
|
+
type KvTextHandle = {
|
|
7
|
+
putText: (key: string, value: string) => Promise<unknown>;
|
|
8
|
+
getText: (key: string) => Promise<string | null>;
|
|
9
|
+
listText: (prefix: string) => Promise<Array<{ key: string; value: string }>>;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
type KvArrayBufferHandle = {
|
|
13
|
+
roundtripArrayBuffer: (key: string, bytes: number[]) => Promise<number[]>;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
describe("Actor KV Tests", () => {
|
|
17
|
+
test("supports text encoding and decoding", async (c: TestContext) => {
|
|
18
|
+
const { client: rawClient } = await setupDriverTest(
|
|
19
|
+
c,
|
|
20
|
+
driverTestConfig,
|
|
21
|
+
);
|
|
22
|
+
const client = rawClient as any;
|
|
23
|
+
const kvHandle =
|
|
24
|
+
client.kvActor.getOrCreate(["kv-text"]) as unknown as KvTextHandle;
|
|
25
|
+
|
|
26
|
+
await kvHandle.putText("greeting", "hello");
|
|
27
|
+
const value = await kvHandle.getText("greeting");
|
|
28
|
+
expect(value).toBe("hello");
|
|
29
|
+
|
|
30
|
+
await kvHandle.putText("prefix-a", "alpha");
|
|
31
|
+
await kvHandle.putText("prefix-b", "beta");
|
|
32
|
+
|
|
33
|
+
const results = await kvHandle.listText("prefix-");
|
|
34
|
+
const sorted = results.sort((a, b) => a.key.localeCompare(b.key));
|
|
35
|
+
expect(sorted).toEqual([
|
|
36
|
+
{ key: "prefix-a", value: "alpha" },
|
|
37
|
+
{ key: "prefix-b", value: "beta" },
|
|
38
|
+
]);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test(
|
|
42
|
+
"supports arrayBuffer encoding and decoding",
|
|
43
|
+
async (c: TestContext) => {
|
|
44
|
+
const { client: rawClient } = await setupDriverTest(
|
|
45
|
+
c,
|
|
46
|
+
driverTestConfig,
|
|
47
|
+
);
|
|
48
|
+
const client = rawClient as any;
|
|
49
|
+
const kvHandle = client.kvActor.getOrCreate([
|
|
50
|
+
"kv-array-buffer",
|
|
51
|
+
]) as unknown as KvArrayBufferHandle;
|
|
52
|
+
|
|
53
|
+
const values = await kvHandle.roundtripArrayBuffer("bytes", [
|
|
54
|
+
4,
|
|
55
|
+
8,
|
|
56
|
+
15,
|
|
57
|
+
16,
|
|
58
|
+
23,
|
|
59
|
+
42,
|
|
60
|
+
]);
|
|
61
|
+
expect(values).toEqual([4, 8, 15, 16, 23, 42]);
|
|
62
|
+
},
|
|
63
|
+
);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import type { DriverTestConfig } from "../mod";
|
|
3
|
+
import { setupDriverTest } from "../utils";
|
|
4
|
+
|
|
5
|
+
export function runActorMetadataTests(driverTestConfig: DriverTestConfig) {
|
|
6
|
+
describe("Actor Metadata Tests", () => {
|
|
7
|
+
describe("Actor Name", () => {
|
|
8
|
+
test("should provide access to actor name", async (c) => {
|
|
9
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
10
|
+
|
|
11
|
+
// Get the actor name
|
|
12
|
+
const handle = client.metadataActor.getOrCreate();
|
|
13
|
+
const actorName = await handle.getActorName();
|
|
14
|
+
|
|
15
|
+
// Verify it matches the expected name
|
|
16
|
+
expect(actorName).toBe("metadataActor");
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
test("should preserve actor name in state during onWake", async (c) => {
|
|
20
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
21
|
+
|
|
22
|
+
// Get the stored actor name
|
|
23
|
+
const handle = client.metadataActor.getOrCreate();
|
|
24
|
+
const storedName = await handle.getStoredActorName();
|
|
25
|
+
|
|
26
|
+
// Verify it was stored correctly
|
|
27
|
+
expect(storedName).toBe("metadataActor");
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
describe("Actor Tags", () => {
|
|
32
|
+
test("should provide access to tags", async (c) => {
|
|
33
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
34
|
+
|
|
35
|
+
// Create actor and set up test tags
|
|
36
|
+
const handle = client.metadataActor.getOrCreate();
|
|
37
|
+
await handle.setupTestTags({
|
|
38
|
+
env: "test",
|
|
39
|
+
purpose: "metadata-test",
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
// Get the tags
|
|
43
|
+
const tags = await handle.getTags();
|
|
44
|
+
|
|
45
|
+
// Verify the tags are accessible
|
|
46
|
+
expect(tags).toHaveProperty("env");
|
|
47
|
+
expect(tags.env).toBe("test");
|
|
48
|
+
expect(tags).toHaveProperty("purpose");
|
|
49
|
+
expect(tags.purpose).toBe("metadata-test");
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
test("should allow accessing individual tags", async (c) => {
|
|
53
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
54
|
+
|
|
55
|
+
// Create actor and set up test tags
|
|
56
|
+
const handle = client.metadataActor.getOrCreate();
|
|
57
|
+
await handle.setupTestTags({
|
|
58
|
+
category: "test-actor",
|
|
59
|
+
version: "1.0",
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// Get individual tags
|
|
63
|
+
const category = await handle.getTag("category");
|
|
64
|
+
const version = await handle.getTag("version");
|
|
65
|
+
const nonexistent = await handle.getTag("nonexistent");
|
|
66
|
+
|
|
67
|
+
// Verify the tag values
|
|
68
|
+
expect(category).toBe("test-actor");
|
|
69
|
+
expect(version).toBe("1.0");
|
|
70
|
+
expect(nonexistent).toBeNull();
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
describe("Metadata Structure", () => {
|
|
75
|
+
test("should provide complete metadata object", async (c) => {
|
|
76
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
77
|
+
|
|
78
|
+
// Create actor and set up test metadata
|
|
79
|
+
const handle = client.metadataActor.getOrCreate();
|
|
80
|
+
await handle.setupTestTags({ type: "metadata-test" });
|
|
81
|
+
await handle.setupTestRegion("us-west-1");
|
|
82
|
+
|
|
83
|
+
// Get all metadata
|
|
84
|
+
const metadata = await handle.getMetadata();
|
|
85
|
+
|
|
86
|
+
// Verify structure of metadata
|
|
87
|
+
expect(metadata).toHaveProperty("name");
|
|
88
|
+
expect(metadata.name).toBe("metadataActor");
|
|
89
|
+
|
|
90
|
+
expect(metadata).toHaveProperty("tags");
|
|
91
|
+
expect(metadata.tags).toHaveProperty("type");
|
|
92
|
+
expect(metadata.tags.type).toBe("metadata-test");
|
|
93
|
+
|
|
94
|
+
// Region should be set to our test value
|
|
95
|
+
expect(metadata).toHaveProperty("region");
|
|
96
|
+
expect(metadata.region).toBe("us-west-1");
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
describe("Region Information", () => {
|
|
101
|
+
test("should retrieve region information", async (c) => {
|
|
102
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
103
|
+
|
|
104
|
+
// Create actor and set up test region
|
|
105
|
+
const handle = client.metadataActor.getOrCreate();
|
|
106
|
+
await handle.setupTestRegion("eu-central-1");
|
|
107
|
+
|
|
108
|
+
// Get the region
|
|
109
|
+
const region = await handle.getRegion();
|
|
110
|
+
|
|
111
|
+
// Verify the region is set correctly
|
|
112
|
+
expect(region).toBe("eu-central-1");
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { describe, expect, test } from "vitest";
|
|
2
|
+
import type { DriverTestConfig } from "@/driver-test-suite/mod";
|
|
3
|
+
import { setupDriverTest } from "@/driver-test-suite/utils";
|
|
4
|
+
|
|
5
|
+
export function runActorOnStateChangeTests(driverTestConfig: DriverTestConfig) {
|
|
6
|
+
describe("Actor onStateChange Tests", () => {
|
|
7
|
+
test("triggers onStateChange when state is modified", async (c) => {
|
|
8
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
9
|
+
|
|
10
|
+
const actor = client.onStateChangeActor.getOrCreate();
|
|
11
|
+
|
|
12
|
+
// Modify state - should trigger onChange
|
|
13
|
+
await actor.setValue(10);
|
|
14
|
+
|
|
15
|
+
// Check that onChange was called
|
|
16
|
+
const changeCount = await actor.getChangeCount();
|
|
17
|
+
expect(changeCount).toBe(1);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
test("triggers onChange multiple times for multiple state changes", async (c) => {
|
|
21
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
22
|
+
|
|
23
|
+
const actor = client.onStateChangeActor.getOrCreate();
|
|
24
|
+
|
|
25
|
+
// Modify state multiple times
|
|
26
|
+
await actor.incrementMultiple(3);
|
|
27
|
+
|
|
28
|
+
// Check that onChange was called for each modification
|
|
29
|
+
const changeCount = await actor.getChangeCount();
|
|
30
|
+
expect(changeCount).toBe(3);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
test("does NOT trigger onChange for read-only actions", async (c) => {
|
|
34
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
35
|
+
|
|
36
|
+
const actor = client.onStateChangeActor.getOrCreate();
|
|
37
|
+
|
|
38
|
+
// Set initial value
|
|
39
|
+
await actor.setValue(5);
|
|
40
|
+
|
|
41
|
+
// Read value without modifying - should NOT trigger onChange
|
|
42
|
+
const value = await actor.getValue();
|
|
43
|
+
expect(value).toBe(5);
|
|
44
|
+
|
|
45
|
+
// Check that onChange was NOT called
|
|
46
|
+
const changeCount = await actor.getChangeCount();
|
|
47
|
+
expect(changeCount).toBe(1);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
test("does NOT trigger onChange for computed values", async (c) => {
|
|
51
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
52
|
+
|
|
53
|
+
const actor = client.onStateChangeActor.getOrCreate();
|
|
54
|
+
|
|
55
|
+
// Set initial value
|
|
56
|
+
await actor.setValue(3);
|
|
57
|
+
|
|
58
|
+
// Check that onChange was called
|
|
59
|
+
{
|
|
60
|
+
const changeCount = await actor.getChangeCount();
|
|
61
|
+
expect(changeCount).toBe(1);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Compute value without modifying state - should NOT trigger onChange
|
|
65
|
+
const doubled = await actor.getDoubled();
|
|
66
|
+
expect(doubled).toBe(6);
|
|
67
|
+
|
|
68
|
+
// Check that onChange was NOT called
|
|
69
|
+
{
|
|
70
|
+
const changeCount = await actor.getChangeCount();
|
|
71
|
+
expect(changeCount).toBe(1);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
test("simple: connect, call action, dispose does NOT trigger onChange", async (c) => {
|
|
76
|
+
const { client } = await setupDriverTest(c, driverTestConfig);
|
|
77
|
+
|
|
78
|
+
const actor = client.onStateChangeActor.getOrCreate();
|
|
79
|
+
|
|
80
|
+
// Connect to the actor
|
|
81
|
+
const connection = await actor.connect();
|
|
82
|
+
|
|
83
|
+
// Call an action that doesn't modify state
|
|
84
|
+
const value = await connection.getValue();
|
|
85
|
+
expect(value).toBe(0);
|
|
86
|
+
|
|
87
|
+
// Dispose the connection
|
|
88
|
+
await connection.dispose();
|
|
89
|
+
|
|
90
|
+
// Verify that onChange was NOT triggered
|
|
91
|
+
const changeCount = await actor.getChangeCount();
|
|
92
|
+
expect(changeCount).toBe(0);
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|