experimental-a2 0.16.1 → 0.17.0
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/CHANGELOG.md +352 -0
- package/dist/{actor-ohPC-81x.d.ts → actor-DBbe5xeE.d.ts} +21 -11
- package/dist/actor-DBbe5xeE.d.ts.map +1 -0
- package/dist/actor-client.d.ts +2 -5
- package/dist/actor-client.d.ts.map +1 -1
- package/dist/actor-client.js +13 -4
- package/dist/actor-client.js.map +1 -1
- package/dist/actor-react.d.ts +5 -3
- package/dist/actor-react.d.ts.map +1 -1
- package/dist/actor-react.js +20 -10
- package/dist/actor-react.js.map +1 -1
- package/dist/{actor-shared-B5tJfzt-.js → actor-shared-t7w8xIKP.js} +12 -7
- package/dist/actor-shared-t7w8xIKP.js.map +1 -0
- package/dist/actor.d.ts +1 -1
- package/dist/actor.js +42 -23
- package/dist/actor.js.map +1 -1
- package/dist/{ai-DgOBltJ_.js → ai-UrWfKeuv.js} +621 -216
- package/dist/ai-UrWfKeuv.js.map +1 -0
- package/dist/ai-client.d.ts +27 -0
- package/dist/ai-client.d.ts.map +1 -0
- package/dist/ai-client.js +29 -0
- package/dist/ai-client.js.map +1 -0
- package/dist/ai-react.d.ts +96 -0
- package/dist/ai-react.d.ts.map +1 -0
- package/dist/ai-react.js +142 -0
- package/dist/ai-react.js.map +1 -0
- package/dist/ai-server.browser.js +2 -2
- package/dist/ai-server.browser.js.map +1 -1
- package/dist/ai-server.d.ts +80 -36
- package/dist/ai-server.d.ts.map +1 -1
- package/dist/ai-server.js +432 -258
- package/dist/ai-server.js.map +1 -1
- package/dist/{ai-CrEf6p_W.d.ts → ai-vpGtcaCB.d.ts} +114 -100
- package/dist/ai-vpGtcaCB.d.ts.map +1 -0
- package/dist/ai.d.ts +2 -2
- package/dist/ai.js +2 -2
- package/dist/{client-BYzHjkwU.js → client-COaiaDub.js} +447 -80
- package/dist/client-COaiaDub.js.map +1 -0
- package/dist/{client-CzyacQpJ.d.ts → client-qRnRUzBS.d.ts} +14 -13
- package/dist/client-qRnRUzBS.d.ts.map +1 -0
- package/dist/client.d.ts +4 -2
- package/dist/client.js +1 -1
- package/dist/{contract-CKRg_E4q.js → contract-BYKASlCV.js} +12 -21
- package/dist/contract-BYKASlCV.js.map +1 -0
- package/dist/{idempotent-replay-DVOlyYbx.js → idempotent-replay-JdgMQRRm.js} +2 -2
- package/dist/{idempotent-replay-DVOlyYbx.js.map → idempotent-replay-JdgMQRRm.js.map} +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/{errors-DvhSXnxk.d.ts → initial-snapshot-BrLso5x_.d.ts} +7 -3
- package/dist/initial-snapshot-BrLso5x_.d.ts.map +1 -0
- package/dist/{internal-Dq2qYxou.js → internal-CbVvEwad.js} +23 -2
- package/dist/internal-CbVvEwad.js.map +1 -0
- package/dist/otel.d.ts +1 -1
- package/dist/react-BbJ-g6Uu.d.ts +86 -0
- package/dist/react-BbJ-g6Uu.d.ts.map +1 -0
- package/dist/react.d.ts +2 -122
- package/dist/react.js +107 -100
- package/dist/react.js.map +1 -1
- package/dist/reducer-BAXc8JyF.js +87 -0
- package/dist/reducer-BAXc8JyF.js.map +1 -0
- package/dist/{reducer-otzHjuJj.d.ts → reducer-BYu6DT7h.d.ts} +45 -29
- package/dist/reducer-BYu6DT7h.d.ts.map +1 -0
- package/dist/reducer-runtime-DQwz_J59.js +28 -0
- package/dist/reducer-runtime-DQwz_J59.js.map +1 -0
- package/dist/scheduler-qstash.d.ts +3 -3
- package/dist/scheduler-qstash.d.ts.map +1 -1
- package/dist/scheduler-qstash.js +33 -10
- package/dist/scheduler-qstash.js.map +1 -1
- package/dist/{scheduler-task-BpzhPnRS.js → scheduler-task-X1SToDjP.js} +18 -3
- package/dist/scheduler-task-X1SToDjP.js.map +1 -0
- package/dist/scheduler-vercel.d.ts +4 -9
- package/dist/scheduler-vercel.d.ts.map +1 -1
- package/dist/scheduler-vercel.js +25 -44
- package/dist/scheduler-vercel.js.map +1 -1
- package/dist/{server-DbD7IJVK.d.ts → server-CGM8WzRG.d.ts} +87 -26
- package/dist/server-CGM8WzRG.d.ts.map +1 -0
- package/dist/{server-BD5ckxZb.js → server-Rj64fNvX.js} +854 -202
- package/dist/server-Rj64fNvX.js.map +1 -0
- package/dist/server.d.ts +4 -4
- package/dist/server.js +2 -2
- package/dist/{errors-DCk6ch5n.js → session-clear-DGI4jTQ5.js} +17 -2
- package/dist/session-clear-DGI4jTQ5.js.map +1 -0
- package/dist/session-clear-Dshpuhff.d.ts +12 -0
- package/dist/session-clear-Dshpuhff.d.ts.map +1 -0
- package/dist/{store-DyZM6fS5.d.ts → store-Gpkq7WBo.d.ts} +44 -3
- package/dist/store-Gpkq7WBo.d.ts.map +1 -0
- package/dist/store-N8PXxDAS.js.map +1 -1
- package/dist/store-memory.d.ts +1 -1
- package/dist/store-memory.d.ts.map +1 -1
- package/dist/store-memory.js +182 -69
- package/dist/store-memory.js.map +1 -1
- package/dist/{store-polling-CmxUbV93.js → store-polling-4_y8lETm.js} +21 -4
- package/dist/store-polling-4_y8lETm.js.map +1 -0
- package/dist/store-postgres.d.ts +1 -1
- package/dist/store-postgres.d.ts.map +1 -1
- package/dist/store-postgres.js +399 -108
- package/dist/store-postgres.js.map +1 -1
- package/dist/{store-presence-polling-C7-XZyW9.js → store-presence-polling-Q1C-k2dd.js} +3 -3
- package/dist/{store-presence-polling-C7-XZyW9.js.map → store-presence-polling-Q1C-k2dd.js.map} +1 -1
- package/dist/store-redis-http.d.ts +1 -1
- package/dist/store-redis-http.d.ts.map +1 -1
- package/dist/store-redis-http.js +293 -11
- package/dist/store-redis-http.js.map +1 -1
- package/dist/store-redis-notify-tqWNnMRu.js +2374 -0
- package/dist/store-redis-notify-tqWNnMRu.js.map +1 -0
- package/dist/store-redis.d.ts +1 -1
- package/dist/store-redis.d.ts.map +1 -1
- package/dist/store-redis.js +11 -11
- package/dist/store-redis.js.map +1 -1
- package/dist/store-sqlite.d.ts +1 -1
- package/dist/store-sqlite.d.ts.map +1 -1
- package/dist/store-sqlite.js +166 -32
- package/dist/store-sqlite.js.map +1 -1
- package/dist/stream-buffer-Cx7AAPGq.js +23 -0
- package/dist/stream-buffer-Cx7AAPGq.js.map +1 -0
- package/dist/{telemetry-B5jzpy6y.d.ts → telemetry-cZH-cibj.d.ts} +2 -2
- package/dist/telemetry-cZH-cibj.d.ts.map +1 -0
- package/dist/{wire-BO5wWCb1.js → wire-DjfHOvdW.js} +132 -10
- package/dist/wire-DjfHOvdW.js.map +1 -0
- package/docs/01-quickstart.mdx +2 -2
- package/docs/actors/01-introduction.mdx +4 -0
- package/docs/actors/04-routes.mdx +14 -1
- package/docs/concepts/01-contracts.mdx +95 -0
- package/docs/concepts/04-state.mdx +3 -3
- package/docs/guides/01-timers.mdx +22 -14
- package/docs/guides/02-cancellation.mdx +1 -1
- package/docs/guides/03-react.mdx +268 -328
- package/docs/guides/04-local-first.mdx +32 -73
- package/docs/guides/05-production.mdx +40 -27
- package/docs/guides/06-ai-agents.mdx +671 -581
- package/docs/guides/09-presence.mdx +3 -7
- package/docs/guides/10-transports.mdx +5 -5
- package/docs/index.mdx +10 -18
- package/docs/reference/01-api.mdx +656 -194
- package/docs/reference/02-errors.mdx +2 -1
- package/examples/playground/DEPLOY.md +52 -6
- package/examples/playground/app/a0/[appId]/loading.tsx +16 -0
- package/examples/playground/app/a0/[appId]/page.tsx +48 -0
- package/examples/playground/app/a0/a0.css +818 -0
- package/examples/playground/app/a0/app-list.tsx +211 -0
- package/examples/playground/app/a0/app-view.tsx +55 -0
- package/examples/playground/app/a0/apps/[appId]/preview/route.ts +27 -0
- package/examples/playground/app/a0/apps/[appId]/route.ts +23 -0
- package/examples/playground/app/a0/apps.test.ts +116 -0
- package/examples/playground/app/a0/apps.ts +87 -0
- package/examples/playground/app/a0/chat.tsx +364 -0
- package/examples/playground/app/a0/columns.tsx +109 -0
- package/examples/playground/app/a0/context-menu.tsx +116 -0
- package/examples/playground/app/a0/cookies.ts +46 -0
- package/examples/playground/app/a0/crash-on-request.ts +72 -0
- package/examples/playground/app/a0/crashes/route.ts +3 -0
- package/examples/playground/app/a0/crashes.test.ts +33 -0
- package/examples/playground/app/a0/crashes.ts +28 -0
- package/examples/playground/app/a0/devtools.tsx +164 -0
- package/examples/playground/app/a0/events/route.ts +6 -0
- package/examples/playground/app/a0/flags.ts +30 -0
- package/examples/playground/app/a0/layout.tsx +38 -0
- package/examples/playground/app/a0/list/route.ts +10 -0
- package/examples/playground/app/a0/model.test.ts +56 -0
- package/examples/playground/app/a0/model.ts +58 -0
- package/examples/playground/app/a0/page.tsx +14 -0
- package/examples/playground/app/a0/preview-pane.tsx +145 -0
- package/examples/playground/app/a0/preview.test.ts +53 -0
- package/examples/playground/app/a0/preview.ts +26 -0
- package/examples/playground/app/a0/sandbox-log.ts +69 -0
- package/examples/playground/app/a0/sandbox.ts +191 -0
- package/examples/playground/app/a0/sandboxes/scheduler/route.ts +6 -0
- package/examples/playground/app/a0/scheduler/route.ts +7 -0
- package/examples/playground/app/a0/server.ts +158 -0
- package/examples/playground/app/a0/session.ts +47 -0
- package/examples/playground/app/a0/shell.tsx +150 -0
- package/examples/playground/app/a0/short/events/route.ts +9 -0
- package/examples/playground/app/a0/splitter.tsx +120 -0
- package/examples/playground/app/agent/[agentId]/agent-client.tsx +144 -174
- package/examples/playground/app/agent/[agentId]/command-receipt.test.tsx +65 -0
- package/examples/playground/app/agent/[agentId]/command-receipt.tsx +27 -0
- package/examples/playground/app/agent/[agentId]/compaction-event.tsx +25 -24
- package/examples/playground/app/agent/[agentId]/compaction-panel.test.tsx +119 -0
- package/examples/playground/app/agent/[agentId]/compaction-panel.tsx +208 -165
- package/examples/playground/app/agent/[agentId]/page.tsx +2 -16
- package/examples/playground/app/agent/events/route.ts +5 -2
- package/examples/playground/app/agent/ingress.test.ts +98 -0
- package/examples/playground/app/agent/model-input.test.tsx +58 -0
- package/examples/playground/app/agent/model-input.tsx +115 -0
- package/examples/playground/app/agent/model.test.ts +73 -0
- package/examples/playground/app/agent/model.ts +58 -26
- package/examples/playground/app/agent/new-agent-session.tsx +37 -19
- package/examples/playground/app/agent/page.tsx +4 -4
- package/examples/playground/app/agent/server.ts +15 -14
- package/examples/playground/app/agent/session.ts +5 -6
- package/examples/playground/app/agent/telemetry.test.ts +168 -0
- package/examples/playground/app/agent/telemetry.ts +30 -0
- package/examples/playground/app/agent/trace.test.ts +23 -0
- package/examples/playground/app/agent/trace.ts +18 -0
- package/examples/playground/app/canvas/[canvasId]/canvas-client.tsx +11 -11
- package/examples/playground/app/canvas/[canvasId]/page.tsx +1 -2
- package/examples/playground/app/canvas/[canvasId]/session.ts +2 -2
- package/examples/playground/app/canvas/model.ts +53 -53
- package/examples/playground/app/chat/[chatId]/agent-state.test.ts +176 -0
- package/examples/playground/app/chat/[chatId]/agent-stream-drawer.tsx +16 -1
- package/examples/playground/app/chat/[chatId]/chat-client.tsx +55 -77
- package/examples/playground/app/chat/[chatId]/chat-view.ts +37 -3
- package/examples/playground/app/chat/[chatId]/page.tsx +7 -15
- package/examples/playground/app/chat/[chatId]/session.ts +2 -19
- package/examples/playground/app/chat/agent/route.ts +9 -0
- package/examples/playground/app/chat/model.test.ts +46 -119
- package/examples/playground/app/chat/model.ts +82 -128
- package/examples/playground/app/chat/scheduler/route.ts +2 -2
- package/examples/playground/app/chat/server.test.ts +108 -0
- package/examples/playground/app/chat/server.ts +69 -73
- package/examples/playground/app/components/activity-feed.tsx +30 -1
- package/examples/playground/app/components/activity-history.test.tsx +35 -0
- package/examples/playground/app/components/demo-icons.tsx +89 -0
- package/examples/playground/app/components/demos.tsx +33 -0
- package/examples/playground/app/components/fast-link.test.tsx +58 -0
- package/examples/playground/app/components/fast-link.tsx +55 -0
- package/examples/playground/app/components/site-header.tsx +96 -0
- package/examples/playground/app/counter/counter-client.tsx +3 -3
- package/examples/playground/app/counter/model.test.ts +3 -3
- package/examples/playground/app/counter/model.ts +11 -21
- package/examples/playground/app/counter/page.tsx +2 -15
- package/examples/playground/app/counter/session.ts +2 -2
- package/examples/playground/app/documents/[documentId]/code-editor.tsx +12 -1
- package/examples/playground/app/documents/[documentId]/document-client.tsx +10 -11
- package/examples/playground/app/documents/[documentId]/page.tsx +1 -2
- package/examples/playground/app/documents/[documentId]/session.ts +2 -2
- package/examples/playground/app/documents/model.ts +27 -27
- package/examples/playground/app/globals.css +420 -207
- package/examples/playground/app/initial-state.test.tsx +54 -0
- package/examples/playground/app/layout.tsx +7 -23
- package/examples/playground/app/orders/[orderId]/page.tsx +1 -2
- package/examples/playground/app/orders/[orderId]/session.ts +2 -2
- package/examples/playground/app/orders/model.ts +49 -49
- package/examples/playground/app/page.tsx +13 -102
- package/examples/playground/app/recovery/[recoveryId]/page.tsx +1 -2
- package/examples/playground/app/recovery/[recoveryId]/session.ts +2 -2
- package/examples/playground/app/recovery/model.ts +30 -30
- package/examples/playground/instrumentation.ts +5 -0
- package/examples/playground/package.json +10 -2
- package/examples/playground/scripts/a0-template.ts +77 -0
- package/examples/playground/vercel.json +18 -0
- package/package.json +3 -1
- package/src/actor-client.ts +16 -4
- package/src/actor-react.ts +25 -11
- package/src/actor-shared.ts +21 -6
- package/src/actor.ts +76 -31
- package/src/ai-agent-actions.ts +219 -0
- package/src/ai-agent.ts +2343 -0
- package/src/ai-app-state.ts +91 -0
- package/src/ai-client-state.ts +6 -3
- package/src/ai-client.ts +62 -0
- package/src/ai-context-schema.ts +25 -5
- package/src/ai-context.ts +90 -40
- package/src/ai-control-server.ts +92 -72
- package/src/ai-coordinator.ts +23 -22
- package/src/ai-message-base.ts +209 -0
- package/src/ai-message-projection.ts +262 -64
- package/src/ai-progress-batches.ts +26 -0
- package/src/ai-projector.ts +95 -14
- package/src/ai-react.ts +146 -0
- package/src/ai-server.browser.ts +2 -2
- package/src/ai-server.ts +20 -1964
- package/src/ai-stored-state.ts +48 -163
- package/src/ai.ts +339 -155
- package/src/bootstrap-stream.ts +72 -0
- package/src/bounded-cache.ts +55 -0
- package/src/client-render-session.ts +49 -0
- package/src/client.ts +688 -151
- package/src/contract.ts +92 -42
- package/src/deterministic-id.ts +37 -0
- package/src/equal-json.ts +32 -0
- package/src/errors.ts +13 -1
- package/src/index.ts +5 -1
- package/src/initial-snapshot.ts +39 -0
- package/src/internal.ts +45 -0
- package/src/postgres-notification-scope.ts +14 -3
- package/src/react.ts +171 -206
- package/src/redis-http-reply.ts +256 -0
- package/src/redis-http-stream.ts +73 -0
- package/src/redis-http-subscriptions.ts +13 -5
- package/src/reducer-runtime.ts +52 -0
- package/src/reducer.ts +92 -10
- package/src/scheduler-qstash.ts +49 -20
- package/src/scheduler-task.ts +34 -2
- package/src/scheduler-vercel.ts +32 -84
- package/src/server-fetch.ts +139 -35
- package/src/server.ts +957 -237
- package/src/session-clear.ts +23 -0
- package/src/session-socket.ts +154 -49
- package/src/sse.ts +71 -4
- package/src/store-memory.ts +220 -78
- package/src/store-polling.ts +18 -4
- package/src/store-postgres.ts +461 -114
- package/src/store-redis-core.ts +1260 -434
- package/src/store-redis-http.ts +18 -2
- package/src/store-redis-notify.ts +260 -85
- package/src/store-redis.ts +19 -9
- package/src/store-sqlite.ts +259 -45
- package/src/store.ts +46 -1
- package/src/stream-buffer.ts +43 -0
- package/src/telemetry.ts +13 -1
- package/src/wire.ts +241 -13
- package/dist/actor-ohPC-81x.d.ts.map +0 -1
- package/dist/actor-shared-B5tJfzt-.js.map +0 -1
- package/dist/ai-CrEf6p_W.d.ts.map +0 -1
- package/dist/ai-DgOBltJ_.js.map +0 -1
- package/dist/client-BYzHjkwU.js.map +0 -1
- package/dist/client-CzyacQpJ.d.ts.map +0 -1
- package/dist/contract-CKRg_E4q.js.map +0 -1
- package/dist/errors-DCk6ch5n.js.map +0 -1
- package/dist/errors-DvhSXnxk.d.ts.map +0 -1
- package/dist/internal-Dq2qYxou.js.map +0 -1
- package/dist/react.d.ts.map +0 -1
- package/dist/reducer-DEMjEY_O.js +0 -29
- package/dist/reducer-DEMjEY_O.js.map +0 -1
- package/dist/reducer-otzHjuJj.d.ts.map +0 -1
- package/dist/scheduler-task-BpzhPnRS.js.map +0 -1
- package/dist/server-BD5ckxZb.js.map +0 -1
- package/dist/server-DbD7IJVK.d.ts.map +0 -1
- package/dist/store-DyZM6fS5.d.ts.map +0 -1
- package/dist/store-polling-CmxUbV93.js.map +0 -1
- package/dist/store-redis-notify-BVLUfI3j.js +0 -1583
- package/dist/store-redis-notify-BVLUfI3j.js.map +0 -1
- package/dist/telemetry-B5jzpy6y.d.ts.map +0 -1
- package/dist/validate-XKT4FSNn.js +0 -30
- package/dist/validate-XKT4FSNn.js.map +0 -1
- package/dist/wire-BO5wWCb1.js.map +0 -1
- package/examples/playground/app/agent/[agentId]/compaction/route.ts +0 -14
- package/examples/playground/app/agent/compaction-settings.test.ts +0 -144
- package/examples/playground/app/agent/compaction-settings.ts +0 -49
- package/examples/playground/app/agent/compaction-timeline.test.ts +0 -377
- package/examples/playground/app/agent/compaction-timeline.ts +0 -208
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as A2Store } from "./store-
|
|
3
|
-
import {
|
|
1
|
+
import { c as ContractEvent, d as PresenceDefs, f as PresenceMap, g as WithPresence, m as PresenceSnapshot, o as AppendInput, p as PresencePatch, r as RegisteredReducer, s as Contract, t as Reducer, u as EventDefs } from "./reducer-BYu6DT7h.js";
|
|
2
|
+
import { t as A2Store } from "./store-Gpkq7WBo.js";
|
|
3
|
+
import { t as SessionCleared } from "./session-clear-Dshpuhff.js";
|
|
4
|
+
import { i as A2Telemetry } from "./telemetry-cZH-cibj.js";
|
|
4
5
|
//#region src/session-socket.d.ts
|
|
5
6
|
/**
|
|
6
7
|
* The structural socket `sessionsSocket` speaks against — satisfied
|
|
@@ -38,6 +39,7 @@ type A2Operation<D extends EventDefs = EventDefs, P extends PresenceDefs = Recor
|
|
|
38
39
|
readonly type: "stream";
|
|
39
40
|
readonly sessionId: string;
|
|
40
41
|
readonly startAfter: number;
|
|
42
|
+
readonly bootstrap?: true;
|
|
41
43
|
readonly transport: "http" | "websocket";
|
|
42
44
|
} | {
|
|
43
45
|
readonly type: "history";
|
|
@@ -87,23 +89,41 @@ type SchedulerAppendTask = {
|
|
|
87
89
|
/** Earliest useful delivery as epoch milliseconds. */
|
|
88
90
|
dueAt: number;
|
|
89
91
|
events: readonly ScheduledEvent[];
|
|
92
|
+
/** The scheduling handler's event; delivery skips once it is cleared. */
|
|
93
|
+
originIndex?: number;
|
|
94
|
+
};
|
|
95
|
+
/** A durable conditional clear. */
|
|
96
|
+
type SchedulerClearTask = {
|
|
97
|
+
version: 1;
|
|
98
|
+
kind: "clear";
|
|
99
|
+
/** Stable identity for provider-level deduplication. */
|
|
100
|
+
id: string;
|
|
101
|
+
contract: string;
|
|
102
|
+
sessionId: string;
|
|
103
|
+
/** Earliest useful delivery as epoch milliseconds. */
|
|
104
|
+
dueAt: number;
|
|
105
|
+
/** Clear only while this is still the head. */
|
|
106
|
+
ifLastIndex: number;
|
|
90
107
|
};
|
|
91
108
|
/** The versioned message protocol shared by scheduler adapters. */
|
|
92
|
-
type SchedulerTask = SchedulerDrainTask | SchedulerAppendTask;
|
|
109
|
+
type SchedulerTask = SchedulerDrainTask | SchedulerAppendTask | SchedulerClearTask;
|
|
93
110
|
//#endregion
|
|
94
111
|
//#region src/server.d.ts
|
|
112
|
+
type PublicState<R> = undefined extends R ? never : R extends {
|
|
113
|
+
initialState: infer S;
|
|
114
|
+
} ? S : never;
|
|
95
115
|
/** What every handler receives. */
|
|
96
|
-
type HandlerContext<D extends EventDefs, K extends keyof D & string = keyof D & string, P extends PresenceDefs = Record<never, never
|
|
116
|
+
type HandlerContext<D extends EventDefs, K extends keyof D & string = keyof D & string, P extends PresenceDefs = Record<never, never>, S = never> = {
|
|
97
117
|
/** The triggering event. */
|
|
98
118
|
event: ContractEvent<D, K>;
|
|
99
119
|
/** Durable, 1-based dispatch ordinal for this event. */
|
|
100
120
|
attempt: number;
|
|
101
121
|
/** This session, with handler-scoped idempotent append. */
|
|
102
|
-
session: Session<D, HandlerAppend<D>, P>;
|
|
122
|
+
session: Session<D, HandlerAppend<D>, P, S>;
|
|
103
123
|
/** Fires on `abortOn` events (cancellation slice); dormant otherwise. */
|
|
104
124
|
signal: AbortSignal;
|
|
105
125
|
};
|
|
106
|
-
type Handler<D extends EventDefs, K extends keyof D & string = keyof D & string, P extends PresenceDefs = Record<never, never
|
|
126
|
+
type Handler<D extends EventDefs, K extends keyof D & string = keyof D & string, P extends PresenceDefs = Record<never, never>, S = never> = (ctx: HandlerContext<D, K, P, S>) => Promise<void | AppendInput<D> | readonly AppendInput<D>[]>;
|
|
107
127
|
type LaneContext<D extends EventDefs, K extends keyof D & string = keyof D & string> = {
|
|
108
128
|
sessionId: string;
|
|
109
129
|
event: Pick<ContractEvent<D, K>, "type" | "payload"> & {
|
|
@@ -125,10 +145,28 @@ type ScheduleTiming = {
|
|
|
125
145
|
at: Date;
|
|
126
146
|
delay?: never;
|
|
127
147
|
};
|
|
128
|
-
type SessionSchedule<D extends EventDefs> =
|
|
148
|
+
type SessionSchedule<D extends EventDefs> = {
|
|
149
|
+
(name: string, timing: ScheduleTiming, ...events: AppendInput<D>[]): Promise<void>;
|
|
150
|
+
/**
|
|
151
|
+
* Publish a durable conditional clear. Delivery clears only while
|
|
152
|
+
* `ifLastIndex` is still the head, and finishes deleting before it
|
|
153
|
+
* acknowledges.
|
|
154
|
+
*/
|
|
155
|
+
clear(name: string, options: ScheduleTiming & {
|
|
156
|
+
ifLastIndex: number;
|
|
157
|
+
}): Promise<void>;
|
|
158
|
+
};
|
|
129
159
|
type StateOptions = {
|
|
130
160
|
through?: number | "latest";
|
|
131
161
|
};
|
|
162
|
+
type SessionClearOptions = {
|
|
163
|
+
/** Clear only while this is the head; a mismatch changes nothing. */
|
|
164
|
+
ifLastIndex?: number;
|
|
165
|
+
};
|
|
166
|
+
type SessionClearResult = {
|
|
167
|
+
cleared: boolean;
|
|
168
|
+
index: number;
|
|
169
|
+
};
|
|
132
170
|
/**
|
|
133
171
|
* The presence members of a session — intersected in via
|
|
134
172
|
* `WithPresence`, so they exist exactly when the contract declares
|
|
@@ -145,7 +183,7 @@ type SessionPresence<D extends EventDefs, P extends PresenceDefs> = {
|
|
|
145
183
|
stream(opts: {
|
|
146
184
|
startAfter?: number;
|
|
147
185
|
presence: true;
|
|
148
|
-
}): AsyncIterable<ContractEvent<D> | PresencePatch<P> | PresenceSnapshot<P>>;
|
|
186
|
+
}): AsyncIterable<ContractEvent<D> | SessionCleared | PresencePatch<P> | PresenceSnapshot<P>>;
|
|
149
187
|
/**
|
|
150
188
|
* Validate against the contract's presence schemas, then broadcast.
|
|
151
189
|
* Never an append: no log row, no dispatch, no scheduler arm. `at`
|
|
@@ -162,25 +200,40 @@ type SessionPresence<D extends EventDefs, P extends PresenceDefs> = {
|
|
|
162
200
|
presence(): Promise<PresenceMap<P>>;
|
|
163
201
|
};
|
|
164
202
|
/** A handle on one instance of the machine. Creating it does no I/O. */
|
|
165
|
-
type Session<D extends EventDefs, Append = SessionAppend<D>, P extends PresenceDefs = Record<never, never
|
|
203
|
+
type Session<D extends EventDefs, Append = SessionAppend<D>, P extends PresenceDefs = Record<never, never>, S = never> = WithPresence<P, SessionPresence<D, P>> & {
|
|
166
204
|
readonly id: string;
|
|
167
205
|
append: Append;
|
|
168
206
|
schedule: SessionSchedule<D>;
|
|
207
|
+
/**
|
|
208
|
+
* End the current lifetime: atomically append a clear marker, then
|
|
209
|
+
* delete the history below it. Indexes never restart.
|
|
210
|
+
*/
|
|
211
|
+
clear(options?: SessionClearOptions): Promise<SessionClearResult>;
|
|
169
212
|
history(options?: {
|
|
170
213
|
gte?: number;
|
|
171
214
|
lte?: number;
|
|
172
215
|
}): Promise<ContractEvent<D>[]>;
|
|
173
|
-
state
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
216
|
+
state: {
|
|
217
|
+
<T>(reducer: Reducer<D, T, Record<never, never>>, options?: StateOptions): Promise<{
|
|
218
|
+
state: T;
|
|
219
|
+
index: number;
|
|
220
|
+
clearIndex?: number;
|
|
221
|
+
}>;
|
|
222
|
+
} & ([S] extends [never] ? unknown : {
|
|
223
|
+
(): Promise<{
|
|
224
|
+
state: S;
|
|
225
|
+
index: number;
|
|
226
|
+
clearIndex?: number;
|
|
227
|
+
}>;
|
|
228
|
+
});
|
|
177
229
|
/**
|
|
178
230
|
* A live feed of this session's events, starting after `startAfter`
|
|
179
231
|
* (exclusive). Server-side only. `server.fetch` exposes it over SSE.
|
|
232
|
+
* A clear arrives as a `SessionCleared` marker.
|
|
180
233
|
*/
|
|
181
234
|
stream(opts?: {
|
|
182
235
|
startAfter?: number;
|
|
183
|
-
}): AsyncIterable<ContractEvent<D
|
|
236
|
+
}): AsyncIterable<ContractEvent<D> | SessionCleared>;
|
|
184
237
|
};
|
|
185
238
|
/**
|
|
186
239
|
* The public server shape scheduler handlers accept. It stays structural so
|
|
@@ -208,14 +261,14 @@ type A2Scheduler = {
|
|
|
208
261
|
schedule(task: SchedulerTask): Promise<void>;
|
|
209
262
|
handler(...servers: DrainableServer[]): (req: Request) => Promise<Response>;
|
|
210
263
|
};
|
|
211
|
-
type A2Server<D extends EventDefs, P extends PresenceDefs = Record<never, never
|
|
264
|
+
type A2Server<D extends EventDefs, P extends PresenceDefs = Record<never, never>, R extends RegisteredReducer<D, P> | undefined = RegisteredReducer<D, P> | undefined> = {
|
|
212
265
|
/** The contract this server implements. */
|
|
213
|
-
readonly contract: Contract<D, P>;
|
|
266
|
+
readonly contract: Contract<D, P, R>;
|
|
214
267
|
readonly fetch: {
|
|
215
268
|
(request: Request): Promise<Response>;
|
|
216
269
|
(request: Request, options: ServerFetchOptions<D, P>): Promise<Response>;
|
|
217
270
|
};
|
|
218
|
-
session(id: string): Session<D, SessionAppend<D>, P
|
|
271
|
+
session(id: string): Session<D, SessionAppend<D>, P, PublicState<R>>;
|
|
219
272
|
/**
|
|
220
273
|
* Process every currently eligible event. `settled` means nothing
|
|
221
274
|
* actionable remains, including work blocked behind a dead letter.
|
|
@@ -230,6 +283,14 @@ type A2Server<D extends EventDefs, P extends PresenceDefs = Record<never, never>
|
|
|
230
283
|
* their transport envelope; application code normally uses `session.schedule`.
|
|
231
284
|
*/
|
|
232
285
|
declare function deliverSchedulerAppend(server: DrainableServer, task: SchedulerAppendTask): Promise<void>;
|
|
286
|
+
/**
|
|
287
|
+
* Deliver one authenticated scheduler clear: a conditional
|
|
288
|
+
* `clear({ ifLastIndex })` that resolves after its deletion finishes, so a
|
|
289
|
+
* provider retry resumes an interrupted deletion. Custom scheduler adapters
|
|
290
|
+
* call this after validating their transport envelope; application code uses
|
|
291
|
+
* `session.schedule.clear`.
|
|
292
|
+
*/
|
|
293
|
+
declare function deliverSchedulerClear(server: DrainableServer, task: SchedulerClearTask): Promise<void>;
|
|
233
294
|
/**
|
|
234
295
|
* Which events fire `ctx.signal` while a handler runs — the preemption
|
|
235
296
|
* channel for user cancellation. The array form matches by type; the
|
|
@@ -241,11 +302,11 @@ declare function deliverSchedulerAppend(server: DrainableServer, task: Scheduler
|
|
|
241
302
|
type AbortSpec<D extends EventDefs, K extends keyof D & string> = Array<keyof D & string> | { [T in keyof D & string]?: true | ((event: ContractEvent<D, T>, trigger: ContractEvent<D, K>, context: {
|
|
242
303
|
attempt: number;
|
|
243
304
|
}) => boolean); };
|
|
244
|
-
type HandlerEntry<D extends EventDefs, K extends keyof D & string = keyof D & string, P extends PresenceDefs = Record<never, never
|
|
305
|
+
type HandlerEntry<D extends EventDefs, K extends keyof D & string = keyof D & string, P extends PresenceDefs = Record<never, never>, S = never> = Handler<D, K, P, S> | {
|
|
245
306
|
abortOn?: AbortSpec<D, K>;
|
|
246
307
|
/** Session-scoped FIFO key, resolved and persisted when the event lands. */
|
|
247
308
|
lane?: Lane<D, K>;
|
|
248
|
-
handler: Handler<D, K, P>;
|
|
309
|
+
handler: Handler<D, K, P, S>;
|
|
249
310
|
};
|
|
250
311
|
type HandlerFunction = (ctx: never) => Promise<unknown>;
|
|
251
312
|
declare function handler<H extends HandlerFunction | {
|
|
@@ -253,9 +314,9 @@ declare function handler<H extends HandlerFunction | {
|
|
|
253
314
|
}>(entry: H): H extends HandlerFunction ? {
|
|
254
315
|
handler: H;
|
|
255
316
|
} : H;
|
|
256
|
-
type ServerOptions<D extends EventDefs, P extends PresenceDefs = Record<never, never
|
|
317
|
+
type ServerOptions<D extends EventDefs, P extends PresenceDefs = Record<never, never>, R extends RegisteredReducer<D, P> | undefined = RegisteredReducer<D, P> | undefined> = {
|
|
257
318
|
/** The contract this server implements (see `a2.contract`). */
|
|
258
|
-
contract: Contract<D, P>;
|
|
319
|
+
contract: Contract<D, P, R>;
|
|
259
320
|
/** Where events live. Defaults: sqlite in dev, memory in tests, required in prod. */
|
|
260
321
|
store?: A2Store;
|
|
261
322
|
/**
|
|
@@ -281,10 +342,10 @@ type ServerOptions<D extends EventDefs, P extends PresenceDefs = Record<never, n
|
|
|
281
342
|
* wasn't imported. Compose across files by spreading objects (note:
|
|
282
343
|
* a duplicate key under spread silently last-wins).
|
|
283
344
|
*/
|
|
284
|
-
handlers?: { [K in keyof D & string]?: HandlerEntry<D, K, P
|
|
345
|
+
handlers?: { [K in keyof D & string]?: HandlerEntry<D, K, P, PublicState<R>>; };
|
|
285
346
|
};
|
|
286
347
|
/** Implement a contract: bind its vocabulary to storage and reactions. */
|
|
287
|
-
declare function createServer<D extends EventDefs, P extends PresenceDefs = Record<never, never
|
|
348
|
+
declare function createServer<D extends EventDefs, P extends PresenceDefs = Record<never, never>, R extends RegisteredReducer<D, P> | undefined = RegisteredReducer<D, P> | undefined>(options: ServerOptions<D, P, R>): A2Server<D, P, R>;
|
|
288
349
|
//#endregion
|
|
289
|
-
export {
|
|
290
|
-
//# sourceMappingURL=server-
|
|
350
|
+
export { SchedulerTask as A, deliverSchedulerAppend as C, SchedulerAppendTask as D, ScheduledEvent as E, UpgradeWebSocket as F, A2Socket as I, A2PushEvent as M, A2PushPresence as N, SchedulerClearTask as O, ServerFetchOptions as P, createServer as S, handler as T, SessionClearResult as _, Handler as a, SessionSchedule as b, HandlerEntry as c, ScheduleDelay as d, ScheduleTiming as f, SessionClearOptions as g, SessionAppend as h, DrainableServer as i, A2Operation as j, SchedulerDrainTask as k, Lane as l, Session as m, A2Server as n, HandlerAppend as o, ServerOptions as p, AbortSpec as r, HandlerContext as s, A2Scheduler as t, LaneContext as u, SessionDispatch as v, deliverSchedulerClear as w, StateOptions as x, SessionPresence as y };
|
|
351
|
+
//# sourceMappingURL=server-CGM8WzRG.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-CGM8WzRG.d.ts","names":[],"sources":["../src/session-socket.ts","../src/server-fetch.ts","../src/scheduler-task.ts","../src/server.ts"],"mappings":"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"}
|