@ultimat3/realtime 19.3.3 → 20.0.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ultimat3/realtime",
3
- "version": "19.3.3",
3
+ "version": "20.0.0",
4
4
  "description": "Three-tier realtime: channels, live queries, local-first sync — one protocol, one mutator shape",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -36,8 +36,8 @@
36
36
  "test": "bun test"
37
37
  },
38
38
  "dependencies": {
39
- "@ultimat3/core": "19.3.3",
40
- "@ultimat3/query": "19.3.3",
39
+ "@ultimat3/core": "20.0.0",
40
+ "@ultimat3/query": "20.0.0",
41
41
  "nats": "2.29.3"
42
42
  }
43
43
  }
package/src/sync-node.ts CHANGED
@@ -99,6 +99,8 @@ export interface SyncNodeOptions {
99
99
  export interface SyncNode {
100
100
  readonly sockets: SocketRegistry;
101
101
  readonly ready: boolean;
102
+ /** The one path it answers an upgrade on: a HOST has to route it, and must not restate it. */
103
+ readonly path: string;
102
104
  start(): Promise<void>;
103
105
  /**
104
106
  * Refuse new connections, keep every one this node holds. The SIGTERM `accept` phase calls it —
@@ -280,6 +282,7 @@ export function createSyncNode(options: SyncNodeOptions): SyncNode {
280
282
 
281
283
  return {
282
284
  sockets,
285
+ path,
283
286
 
284
287
  get ready(): boolean {
285
288
  return ready;
@@ -1,6 +1,10 @@
1
1
  // The wire. One protocol for all three tiers: a channel subscribe, a live-query subscribe, and an
2
- // offline mutation drain are frames in the same union. Moving a route from tier 2 to tier 3 is a
3
- // config flag (`persist: true`), never a new protocol — that promise is enforced here.
2
+ // offline mutation drain are frames in the same union — so moving a route from tier 2 to tier 3
3
+ // needs no new protocol, and THAT is the half this file enforces.
4
+ // It is not a `persist: true` config flag: this header said so until 2026-09 and `query()` has
5
+ // never accepted the key (`local-store.ts` records the same). Tier 3 is reached by passing a
6
+ // `LocalStore` to the live client, which is a client-side wiring decision this file cannot see —
7
+ // claiming to enforce it here is the declared-and-never-wired shape the repo keeps re-shipping.
4
8
 
5
9
  import { renderThrowable, stringField } from '@ultimat3/core';
6
10
  import { CURSOR_ID_LIMIT, type LiveCursor } from './cursor';