trellis 3.1.35 → 3.2.2
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 +23 -5
- package/README.md +63 -156
- package/bin/trellis.mjs +2 -75
- package/dist/{better-sqlite-backend-ahx5p0br.js → better-sqlite-backend-2P4F6AOJ.js} +91 -29
- package/dist/boot-middleware-MHLHFCUC.js +9 -0
- package/dist/browser/index.d.ts +18 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +95 -0
- package/dist/{index-53f3b8p8.js → chunk-2W3MHTMG.js} +552 -213
- package/dist/chunk-44FFQKQX.js +142 -0
- package/dist/chunk-4HYPLFJD.js +150 -0
- package/dist/chunk-4XIVMVHC.js +361 -0
- package/dist/{index-yp88he8n.js → chunk-6CTA6MCE.js} +88 -64
- package/dist/chunk-6GEZ6DN5.js +394 -0
- package/dist/chunk-7ZFRVCUE.js +211 -0
- package/dist/chunk-CAG4FULI.js +121 -0
- package/dist/chunk-FF36CQHZ.js +61 -0
- package/dist/{index-h32txmxe.js → chunk-FKQO5A3H.js} +6 -13
- package/dist/{index-nq520y6k.js → chunk-FWRS4CSC.js} +46 -32
- package/dist/chunk-GFZCJ4EH.js +108 -0
- package/dist/chunk-GLM4HGN4.js +55 -0
- package/dist/{index-4cdr7x2x.js → chunk-GU374KWZ.js} +182 -111
- package/dist/chunk-H6JB3PZ3.js +45 -0
- package/dist/chunk-IZX2PLIB.js +1240 -0
- package/dist/chunk-J2TXUFCZ.js +289 -0
- package/dist/chunk-J3WYZO3Q.js +211 -0
- package/dist/{index-xzym9w0m.js → chunk-JA7AIHRK.js} +12 -7
- package/dist/chunk-JHHEXEDM.js +162 -0
- package/dist/chunk-JUEMDWLU.js +233 -0
- package/dist/chunk-KFQGP6VL.js +33 -0
- package/dist/chunk-KIJITUZB.js +419 -0
- package/dist/{index-4wxa8xz4.js → chunk-KQ4A2D2P.js} +162 -23
- package/dist/chunk-KSU2GW22.js +958 -0
- package/dist/{index-rv1p47gp.js → chunk-L5N5PR2S.js} +3015 -2480
- package/dist/{index-h9e2efx4.js → chunk-LNUIGRDZ.js} +71 -55
- package/dist/{index-skhn0agf.js → chunk-MLC5BUYO.js} +19 -20
- package/dist/chunk-MPXUVGT3.js +104 -0
- package/dist/chunk-N6MYZT4O.js +68 -0
- package/dist/chunk-O2AV5WMN.js +48 -0
- package/dist/chunk-PZ4XYZ4J.js +143 -0
- package/dist/chunk-QB5ISE47.js +419 -0
- package/dist/chunk-RSWUFTO2.js +857 -0
- package/dist/chunk-S3XLFZ27.js +1095 -0
- package/dist/{index-w5wccer3.js → chunk-S6GBJ2ZB.js} +28 -12
- package/dist/{index-7pjz3tsy.js → chunk-SGMDTWJJ.js} +57 -15
- package/dist/chunk-SPSPV5BC.js +390 -0
- package/dist/chunk-TCKXSOBP.js +123 -0
- package/dist/chunk-UBGUDMUV.js +59 -0
- package/dist/{index-wt8rz4gn.js → chunk-UQISRW6T.js} +97 -26
- package/dist/chunk-USEINYUL.js +12 -0
- package/dist/{index-bmyt7k8n.js → chunk-UZRUP7QW.js} +12 -4
- package/dist/{index-xhcp6xrn.js → chunk-VBYUTRXX.js} +695 -514
- package/dist/{index-vkpkfwhq.js → chunk-VDAKEOML.js} +234 -194
- package/dist/chunk-WXSWA3MV.js +0 -0
- package/dist/{index-n9f2qyh5.js → chunk-X5FLTRUB.js} +55 -33
- package/dist/{index-h7zxhhhh.js → chunk-XMQ7G77X.js} +46 -38
- package/dist/{index-w7ng765c.js → chunk-YCM7ZYEZ.js} +102 -49
- package/dist/cli/deploy-cli.d.ts +18 -0
- package/dist/cli/deploy-cli.d.ts.map +1 -0
- package/dist/cli/errors.d.ts +6 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/examples.d.ts +23 -0
- package/dist/cli/examples.d.ts.map +1 -0
- package/dist/cli/index.d.ts +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2426 -6225
- package/dist/client/index.browser.d.ts +29 -0
- package/dist/client/index.browser.d.ts.map +1 -0
- package/dist/client/index.browser.js +64 -0
- package/dist/client/index.d.ts +6 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +41 -21
- package/dist/client/live.d.ts +67 -0
- package/dist/client/live.d.ts.map +1 -0
- package/dist/client/reactive.d.ts +31 -0
- package/dist/client/reactive.d.ts.map +1 -0
- package/dist/client/sdk.browser.d.ts +104 -0
- package/dist/client/sdk.browser.d.ts.map +1 -0
- package/dist/client/sdk.browser.js +9 -0
- package/dist/client/sdk.d.ts +26 -2
- package/dist/client/sdk.d.ts.map +1 -1
- package/dist/client/sdk.js +9 -0
- package/dist/client/vcs-client.d.ts +129 -0
- package/dist/client/vcs-client.d.ts.map +1 -0
- package/dist/cms/index.js +171 -163
- package/dist/{config-8hczw0rs.js → config-PFTP67TR.js} +8 -9
- package/dist/core/computation/index.d.ts +5 -0
- package/dist/core/computation/index.d.ts.map +1 -0
- package/dist/core/computation/rollup.d.ts +18 -0
- package/dist/core/computation/rollup.d.ts.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +171 -104
- package/dist/core/kernel/boot-middleware.d.ts +10 -0
- package/dist/core/kernel/boot-middleware.d.ts.map +1 -0
- package/dist/core/kernel/logic-middleware.d.ts +7 -1
- package/dist/core/kernel/logic-middleware.d.ts.map +1 -1
- package/dist/core/kernel/trellis-kernel.d.ts.map +1 -1
- package/dist/core/ontology/types.d.ts +5 -0
- package/dist/core/ontology/types.d.ts.map +1 -1
- package/dist/core/persist/better-sqlite-backend.d.ts +9 -2
- package/dist/core/persist/better-sqlite-backend.d.ts.map +1 -1
- package/dist/core/persist/factory.d.ts +6 -7
- package/dist/core/persist/factory.d.ts.map +1 -1
- package/dist/core/persist/factory.js +2 -3
- package/dist/core/persist/sqljs-backend.js +2 -3
- package/dist/db/index.d.ts +4 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +67 -54
- package/dist/db/inspector.js +11 -19
- package/dist/db/trellis.css +1 -1
- package/dist/decisions/index.js +9 -10
- package/dist/deploy-LQ7GUGJ5.js +9 -0
- package/dist/deploy-YNVG5E4E.js +9 -0
- package/dist/deploy-cli-24BCHAXY.js +67 -0
- package/dist/deploy-cli-C35HTITO.js +67 -0
- package/dist/embeddings/auto-embed.d.ts +2 -2
- package/dist/embeddings/auto-embed.d.ts.map +1 -1
- package/dist/embeddings/index.js +20 -22
- package/dist/embeddings/search.d.ts +2 -1
- package/dist/embeddings/search.d.ts.map +1 -1
- package/dist/embeddings/store.d.ts +25 -4
- package/dist/embeddings/store.d.ts.map +1 -1
- package/dist/engine.d.ts +59 -19
- package/dist/engine.d.ts.map +1 -1
- package/dist/import-UZEKXU3B.js +10 -0
- package/dist/index.js +102 -93
- package/dist/launch-explorer-HZ4ZJA4X.js +95 -0
- package/dist/links/index.js +24 -26
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/plugins/agent-memory/index.js +316 -0
- package/dist/plugins/idea-garden/index.js +165 -0
- package/dist/plugins/plan-approval/index.js +579 -0
- package/dist/plugins/proactive-watcher/index.js +194 -0
- package/dist/{index-2r4jxwnb.js → query-XYLTJYSA.js} +14 -15
- package/dist/react/index.js +39 -70
- package/dist/react/realtime.js +11 -0
- package/dist/react/schema-hooks.js +87 -0
- package/dist/realtime/broadcast-channel-transport.d.ts +43 -0
- package/dist/realtime/broadcast-channel-transport.d.ts.map +1 -0
- package/dist/realtime/durable-object-relay-transport.d.ts +96 -0
- package/dist/realtime/durable-object-relay-transport.d.ts.map +1 -0
- package/dist/realtime/index.d.ts +44 -0
- package/dist/realtime/index.d.ts.map +1 -0
- package/dist/realtime/index.js +40 -0
- package/dist/realtime/memory-hub.d.ts +32 -0
- package/dist/realtime/memory-hub.d.ts.map +1 -0
- package/dist/realtime/persistent-channel.d.ts +105 -0
- package/dist/realtime/persistent-channel.d.ts.map +1 -0
- package/dist/realtime/presence.d.ts +73 -0
- package/dist/realtime/presence.d.ts.map +1 -0
- package/dist/realtime/relay-persistence.d.ts +37 -0
- package/dist/realtime/relay-persistence.d.ts.map +1 -0
- package/dist/realtime/relay-persistence.js +107 -0
- package/dist/realtime/relay-server.d.ts +103 -0
- package/dist/realtime/relay-server.d.ts.map +1 -0
- package/dist/realtime/room.d.ts +98 -0
- package/dist/realtime/room.d.ts.map +1 -0
- package/dist/realtime/text.d.ts +73 -0
- package/dist/realtime/text.d.ts.map +1 -0
- package/dist/realtime/types.d.ts +89 -0
- package/dist/realtime/types.d.ts.map +1 -0
- package/dist/realtime/websocket-relay-transport.d.ts +28 -0
- package/dist/realtime/websocket-relay-transport.d.ts.map +1 -0
- package/dist/realtime.bundle.js +1100 -0
- package/dist/{remote-manager-xvbg4230.js → remote-manager-ODE3T2KR.js} +25 -15
- package/dist/scaffold/seed.d.ts.map +1 -1
- package/dist/scaffold/write.d.ts +1 -1
- package/dist/scaffold/write.d.ts.map +1 -1
- package/dist/schema/define.d.ts +137 -0
- package/dist/schema/define.d.ts.map +1 -0
- package/dist/schema/entity-projection.d.ts +34 -0
- package/dist/schema/entity-projection.d.ts.map +1 -0
- package/dist/schema/eql.d.ts +46 -0
- package/dist/schema/eql.d.ts.map +1 -0
- package/dist/schema/index.d.ts +21 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +46 -0
- package/dist/schema/kernel-resolve.d.ts +21 -0
- package/dist/schema/kernel-resolve.d.ts.map +1 -0
- package/dist/schema/mutations.d.ts +20 -0
- package/dist/schema/mutations.d.ts.map +1 -0
- package/dist/schema/resolve.d.ts +21 -0
- package/dist/schema/resolve.d.ts.map +1 -0
- package/dist/server/deploy-meta.d.ts +25 -0
- package/dist/server/deploy-meta.d.ts.map +1 -0
- package/dist/server/deploy.d.ts +7 -2
- package/dist/server/deploy.d.ts.map +1 -1
- package/dist/server/index.d.ts +7 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +100 -58
- package/dist/server/node-adapter.js +5 -104
- package/dist/server/realtime.d.ts +14 -3
- package/dist/server/realtime.d.ts.map +1 -1
- package/dist/server/server.d.ts +8 -16
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/sprites.d.ts +18 -1
- package/dist/server/sprites.d.ts.map +1 -1
- package/dist/server/tenancy.d.ts +4 -0
- package/dist/server/tenancy.d.ts.map +1 -1
- package/dist/server/usage-meter.d.ts +53 -0
- package/dist/server/usage-meter.d.ts.map +1 -0
- package/dist/server-MB3OPSPI.js +18 -0
- package/dist/server-ZVWGLLRF.js +18 -0
- package/dist/sprites-KQGTGM6W.js +27 -0
- package/dist/{sprites-vc4qbrp1.js → sprites-RU3E4XQN.js} +6 -7
- package/dist/svelte/index.d.ts +17 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +51 -0
- package/dist/svelte/schema-hooks.d.ts +45 -0
- package/dist/svelte/schema-hooks.d.ts.map +1 -0
- package/dist/svelte/schema-hooks.js +71 -0
- package/dist/svelte/stores.d.ts +78 -0
- package/dist/svelte/stores.d.ts.map +1 -0
- package/dist/sync/http-transport.d.ts +3 -3
- package/dist/sync/http-transport.d.ts.map +1 -1
- package/dist/sync/index.d.ts +15 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +617 -0
- package/dist/sync/memory-room.d.ts +37 -0
- package/dist/sync/memory-room.d.ts.map +1 -0
- package/dist/sync/memory-transport.d.ts +3 -3
- package/dist/sync/memory-transport.d.ts.map +1 -1
- package/dist/sync/partykit-room.d.ts +40 -0
- package/dist/sync/partykit-room.d.ts.map +1 -0
- package/dist/sync/partykit-transport.d.ts +84 -0
- package/dist/sync/partykit-transport.d.ts.map +1 -0
- package/dist/sync/room-core.d.ts +53 -0
- package/dist/sync/room-core.d.ts.map +1 -0
- package/dist/sync/sync-engine.d.ts +40 -2
- package/dist/sync/sync-engine.d.ts.map +1 -1
- package/dist/sync/sync-room-server.d.ts +39 -0
- package/dist/sync/sync-room-server.d.ts.map +1 -0
- package/dist/sync/types.d.ts +70 -3
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/sync/vcs-sync-peer.d.ts +63 -0
- package/dist/sync/vcs-sync-peer.d.ts.map +1 -0
- package/dist/sync/ws-transport.d.ts +2 -2
- package/dist/sync/ws-transport.d.ts.map +1 -1
- package/dist/tenancy-NBLLGCNJ.js +14 -0
- package/dist/tenancy-POMWQP6M.js +16 -0
- package/dist/ui/client.html +355 -67
- package/dist/ui/launch-explorer.d.ts +22 -0
- package/dist/ui/launch-explorer.d.ts.map +1 -0
- package/dist/ui/server.d.ts +1 -1
- package/dist/ui/server.d.ts.map +1 -1
- package/dist/vcs/blob-store.d.ts.map +1 -1
- package/dist/vcs/idb-op-log.d.ts +67 -0
- package/dist/vcs/idb-op-log.d.ts.map +1 -0
- package/dist/vcs/index.d.ts +1 -0
- package/dist/vcs/index.d.ts.map +1 -1
- package/dist/vcs/index.js +81 -72
- package/dist/vcs/issue.d.ts +22 -5
- package/dist/vcs/issue.d.ts.map +1 -1
- package/dist/vcs/lane-materialize.d.ts +5 -0
- package/dist/vcs/lane-materialize.d.ts.map +1 -1
- package/dist/vcs/op-log.d.ts +28 -2
- package/dist/vcs/op-log.d.ts.map +1 -1
- package/dist/vcs/ops.d.ts +10 -0
- package/dist/vcs/ops.d.ts.map +1 -1
- package/dist/vcs/types.d.ts +2 -0
- package/dist/vcs/types.d.ts.map +1 -1
- package/dist/{vm-config-6xhsj6b3.js → vm-config-JI4OXKDQ.js} +9 -10
- package/dist/vue/hooks.d.ts +64 -0
- package/dist/vue/hooks.d.ts.map +1 -0
- package/dist/vue/index.d.ts +19 -0
- package/dist/vue/index.d.ts.map +1 -0
- package/dist/vue/index.js +59 -0
- package/dist/vue/schema-hooks.d.ts +41 -0
- package/dist/vue/schema-hooks.d.ts.map +1 -0
- package/dist/vue/schema-hooks.js +64 -0
- package/package.json +130 -17
- package/dist/deploy-999q207z.js +0 -10
- package/dist/engine-y0724kjq.js +0 -8
- package/dist/import-s2b8e0ft.js +0 -11
- package/dist/index-a76rekgs.js +0 -67
- package/dist/index-c9h37r6h.js +0 -1
- package/dist/index-hr9qvv77.js +0 -860
- package/dist/index-k5b0xskw.js +0 -1
- package/dist/index-nzb3am4f.js +0 -80
- package/dist/index-wncptktd.js +0 -292
- package/dist/index-y6a4kj0p.js +0 -43
- package/dist/index-yhwjgfvj.js +0 -342
- package/dist/sdk-bepky0xs.js +0 -16
- package/dist/server-szdjx0nt.js +0 -13
- package/dist/sqlite-backend-0vsmc6qj.js +0 -8
- package/dist/tenancy-pjm32b4v.js +0 -14
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RealtimeText — a compact RGA-style sequence CRDT for collaborative text.
|
|
3
|
+
*
|
|
4
|
+
* Each character is a node with a globally-unique id (`<lamport>@<peerId>`) and
|
|
5
|
+
* an `after` pointer to the node it follows. Concurrent inserts sharing an
|
|
6
|
+
* anchor are ordered deterministically (higher lamport first, peer id as
|
|
7
|
+
* tiebreak), so all replicas converge regardless of delivery order. Deletes are
|
|
8
|
+
* tombstones, making them idempotent and commutative.
|
|
9
|
+
*
|
|
10
|
+
* This is intentionally minimal — enough for a genuine multiplayer editor demo
|
|
11
|
+
* without the weight of a full production CRDT (no block compaction, GC, or
|
|
12
|
+
* rich formatting).
|
|
13
|
+
*/
|
|
14
|
+
import type { RealtimeRoom } from './room.js';
|
|
15
|
+
export interface TextNode {
|
|
16
|
+
id: string;
|
|
17
|
+
ch: string;
|
|
18
|
+
after: string | null;
|
|
19
|
+
deleted: boolean;
|
|
20
|
+
}
|
|
21
|
+
export type TextOp = {
|
|
22
|
+
op: 'ins';
|
|
23
|
+
id: string;
|
|
24
|
+
ch: string;
|
|
25
|
+
after: string | null;
|
|
26
|
+
} | {
|
|
27
|
+
op: 'del';
|
|
28
|
+
id: string;
|
|
29
|
+
};
|
|
30
|
+
export interface RealtimeTextOptions {
|
|
31
|
+
peerId: string;
|
|
32
|
+
/** Optional room binding for automatic op + state sync. */
|
|
33
|
+
room?: RealtimeRoom;
|
|
34
|
+
/** Broadcast channel name when bound to a room. Default `text`. */
|
|
35
|
+
channel?: string;
|
|
36
|
+
}
|
|
37
|
+
export declare class RealtimeText {
|
|
38
|
+
private nodes;
|
|
39
|
+
private counter;
|
|
40
|
+
private peerId;
|
|
41
|
+
private listeners;
|
|
42
|
+
private room?;
|
|
43
|
+
private channel;
|
|
44
|
+
private unsubscribe?;
|
|
45
|
+
constructor(opts: RealtimeTextOptions);
|
|
46
|
+
/** Materialized visible text. */
|
|
47
|
+
toString(): string;
|
|
48
|
+
/** Current length of visible text. */
|
|
49
|
+
get length(): number;
|
|
50
|
+
/** Insert a string at a visible index. Broadcasts ops when room-bound. */
|
|
51
|
+
insert(index: number, str: string): TextOp[];
|
|
52
|
+
/** Delete `count` visible characters starting at `index`. */
|
|
53
|
+
delete(index: number, count?: number): TextOp[];
|
|
54
|
+
/** Apply a single remote op. Returns true if the document changed. */
|
|
55
|
+
applyOp(op: TextOp): boolean;
|
|
56
|
+
/** Apply a batch of remote ops, emitting once. */
|
|
57
|
+
applyOps(ops: TextOp[]): void;
|
|
58
|
+
/** Snapshot of all nodes (including tombstones) for state sync. */
|
|
59
|
+
getNodes(): TextNode[];
|
|
60
|
+
/** Merge a remote snapshot of nodes. */
|
|
61
|
+
mergeNodes(nodes: TextNode[]): void;
|
|
62
|
+
/** Subscribe to text changes. Returns an unsubscribe fn. */
|
|
63
|
+
onChange(cb: (text: string) => void): () => void;
|
|
64
|
+
/** Detach room bindings. */
|
|
65
|
+
dispose(): void;
|
|
66
|
+
private onRemote;
|
|
67
|
+
private publish;
|
|
68
|
+
private visibleNodes;
|
|
69
|
+
private nextId;
|
|
70
|
+
private bumpCounter;
|
|
71
|
+
private emit;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/realtime/text.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,MAAM,GACd;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC3D;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9B,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAuBD,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAe;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAC,CAAa;gBAErB,IAAI,EAAE,mBAAmB;IAerC,iCAAiC;IACjC,QAAQ,IAAI,MAAM;IAMlB,sCAAsC;IACtC,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,0EAA0E;IAC1E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE;IAmB5C,6DAA6D;IAC7D,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE;IAsB1C,sEAAsE;IACtE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAmB5B,kDAAkD;IAClD,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;IAQ7B,mEAAmE;IACnE,QAAQ,IAAI,QAAQ,EAAE;IAItB,wCAAwC;IACxC,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI;IAgBnC,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;IAOhD,4BAA4B;IAC5B,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,YAAY;IAwBpB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,IAAI;CAUb"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trellis Realtime — Ephemeral Presence & Broadcast Types
|
|
3
|
+
*
|
|
4
|
+
* Distinct from the persisted VCS op log: realtime messages are ephemeral,
|
|
5
|
+
* mesh-broadcast, and never written to the causal history. This is the right
|
|
6
|
+
* home for high-frequency, disposable signals like cursors and presence, plus
|
|
7
|
+
* fire-and-forget broadcast (chat, live text edits).
|
|
8
|
+
*
|
|
9
|
+
* The transport is a broadcast mesh: `send` delivers a message to every other
|
|
10
|
+
* peer sharing the channel. Senders never receive their own messages.
|
|
11
|
+
*/
|
|
12
|
+
export declare const REALTIME_PROTOCOL: 1;
|
|
13
|
+
/** Arbitrary per-peer presence state (name, avatar, color, cursor, …). */
|
|
14
|
+
export type PresenceState = Record<string, unknown>;
|
|
15
|
+
export interface PresencePeer<P extends PresenceState = PresenceState> {
|
|
16
|
+
/** Peer/client identity. */
|
|
17
|
+
id: string;
|
|
18
|
+
/** Latest published presence state. */
|
|
19
|
+
state: P;
|
|
20
|
+
/** Epoch ms of the last presence heartbeat we saw. */
|
|
21
|
+
lastSeen: number;
|
|
22
|
+
/** True for the local peer. */
|
|
23
|
+
self: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** A received broadcast on a channel. */
|
|
26
|
+
export interface BroadcastEvent {
|
|
27
|
+
from: string;
|
|
28
|
+
channel: string;
|
|
29
|
+
event: string;
|
|
30
|
+
payload: unknown;
|
|
31
|
+
ts: number;
|
|
32
|
+
/**
|
|
33
|
+
* Stable message identity. Assigned by the sender and carried unchanged to
|
|
34
|
+
* every replica, so dedup is order-independent (a grow-only set). Present on
|
|
35
|
+
* all broadcasts emitted by {@link RealtimeRoom.broadcast}; may be absent on
|
|
36
|
+
* legacy frames.
|
|
37
|
+
*/
|
|
38
|
+
id?: string;
|
|
39
|
+
}
|
|
40
|
+
export type RealtimeMessage<P extends PresenceState = PresenceState> = {
|
|
41
|
+
v: 1;
|
|
42
|
+
t: 'hello';
|
|
43
|
+
from: string;
|
|
44
|
+
} | {
|
|
45
|
+
v: 1;
|
|
46
|
+
t: 'presence';
|
|
47
|
+
from: string;
|
|
48
|
+
state: P;
|
|
49
|
+
ts: number;
|
|
50
|
+
} | {
|
|
51
|
+
v: 1;
|
|
52
|
+
t: 'bye';
|
|
53
|
+
from: string;
|
|
54
|
+
ts: number;
|
|
55
|
+
} | {
|
|
56
|
+
v: 1;
|
|
57
|
+
t: 'msg';
|
|
58
|
+
from: string;
|
|
59
|
+
channel: string;
|
|
60
|
+
event: string;
|
|
61
|
+
payload: unknown;
|
|
62
|
+
ts: number;
|
|
63
|
+
/** Stable per-message id (dedup key for grow-only replay). */
|
|
64
|
+
id?: string;
|
|
65
|
+
}
|
|
66
|
+
/** Relay welcome: re-deliver persisted session state to a new connection. */
|
|
67
|
+
| {
|
|
68
|
+
v: 1;
|
|
69
|
+
t: 'replay';
|
|
70
|
+
from: string;
|
|
71
|
+
messages: RealtimeMessage<P>[];
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Broadcast mesh transport. Implementations: {@link MemoryHub} (in-process /
|
|
75
|
+
* tests / side-by-side panes), {@link BroadcastChannelTransport} (serverless
|
|
76
|
+
* cross-tab in one browser), and {@link WebSocketRelayTransport} (relay-backed
|
|
77
|
+
* cross-browser rooms).
|
|
78
|
+
*/
|
|
79
|
+
export interface RealtimeTransport {
|
|
80
|
+
/** Local peer identity on this transport. */
|
|
81
|
+
readonly id: string;
|
|
82
|
+
/** Broadcast a message to all other peers. Never echoes to the sender. */
|
|
83
|
+
send(message: RealtimeMessage): void;
|
|
84
|
+
/** Register an inbound message handler. Returns an unsubscribe fn. */
|
|
85
|
+
onMessage(handler: (message: RealtimeMessage) => void): () => void;
|
|
86
|
+
/** Tear down the transport. */
|
|
87
|
+
close(): void;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/realtime/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,iBAAiB,EAAG,CAAU,CAAC;AAE5C,0EAA0E;AAC1E,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAEpD,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa;IACnE,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,uCAAuC;IACvC,KAAK,EAAE,CAAC,CAAC;IACT,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,+BAA+B;IAC/B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX;;;;;OAKG;IACH,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,IAC/D;IAAE,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC3D;IAAE,CAAC,EAAE,CAAC,CAAC;IAAC,CAAC,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC5C;IACE,CAAC,EAAE,CAAC,CAAC;IACL,CAAC,EAAE,KAAK,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,8DAA8D;IAC9D,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AACH,6EAA6E;GAC3E;IACE,CAAC,EAAE,CAAC,CAAC;IACL,CAAC,EAAE,QAAQ,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;CAChC,CAAC;AAEN;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,sEAAsE;IACtE,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACnE,+BAA+B;IAC/B,KAAK,IAAI,IAAI,CAAC;CACf"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Browser transport that relays {@link RealtimeMessage} frames through a
|
|
3
|
+
* shared WebSocket hub (demo server or custom relay). Unlike
|
|
4
|
+
* {@link BroadcastChannelTransport}, this works across different browsers on
|
|
5
|
+
* the same origin.
|
|
6
|
+
*/
|
|
7
|
+
import type { RealtimeMessage, RealtimeTransport } from './types.js';
|
|
8
|
+
export interface WebSocketRelayTransportOptions {
|
|
9
|
+
/** Local peer identity. */
|
|
10
|
+
id: string;
|
|
11
|
+
/** Hub URL, e.g. `ws://localhost:8231/rt`. */
|
|
12
|
+
url: string;
|
|
13
|
+
/** Injectable WebSocket for tests. */
|
|
14
|
+
WebSocketImpl?: typeof WebSocket;
|
|
15
|
+
}
|
|
16
|
+
export declare class WebSocketRelayTransport implements RealtimeTransport {
|
|
17
|
+
readonly id: string;
|
|
18
|
+
private ws;
|
|
19
|
+
private handlers;
|
|
20
|
+
private closed;
|
|
21
|
+
private pending;
|
|
22
|
+
constructor(opts: WebSocketRelayTransportOptions);
|
|
23
|
+
send(message: RealtimeMessage): void;
|
|
24
|
+
onMessage(handler: (message: RealtimeMessage) => void): () => void;
|
|
25
|
+
close(): void;
|
|
26
|
+
private flushPending;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=websocket-relay-transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-relay-transport.d.ts","sourceRoot":"","sources":["../../src/realtime/websocket-relay-transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAErE,MAAM,WAAW,8BAA8B;IAC7C,2BAA2B;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,GAAG,EAAE,MAAM,CAAC;IACZ,sCAAsC;IACtC,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;CAClC;AAED,qBAAa,uBAAwB,YAAW,iBAAiB;IAC/D,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,QAAQ,CAAiD;IACjE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAyB;gBAE5B,IAAI,EAAE,8BAA8B;IAgChD,IAAI,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAUpC,SAAS,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,GAAG,MAAM,IAAI;IAOlE,KAAK,IAAI,IAAI;IAYb,OAAO,CAAC,YAAY;CAOrB"}
|