meridian-sdk 0.2.1 → 0.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.
Files changed (84) hide show
  1. package/biome.json +4 -0
  2. package/dist/auth/token.d.ts +0 -19
  3. package/dist/auth/token.d.ts.map +1 -1
  4. package/dist/auth/token.js +6 -31
  5. package/dist/auth/token.js.map +1 -1
  6. package/dist/client.d.ts +139 -23
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +165 -52
  9. package/dist/client.js.map +1 -1
  10. package/dist/codec.d.ts +7 -35
  11. package/dist/codec.d.ts.map +1 -1
  12. package/dist/codec.js +13 -65
  13. package/dist/codec.js.map +1 -1
  14. package/dist/constants.d.ts +7 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/constants.js +7 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/crdt/gcounter.d.ts +18 -9
  19. package/dist/crdt/gcounter.d.ts.map +1 -1
  20. package/dist/crdt/gcounter.js +16 -13
  21. package/dist/crdt/gcounter.js.map +1 -1
  22. package/dist/crdt/lwwregister.d.ts +24 -11
  23. package/dist/crdt/lwwregister.d.ts.map +1 -1
  24. package/dist/crdt/lwwregister.js +25 -19
  25. package/dist/crdt/lwwregister.js.map +1 -1
  26. package/dist/crdt/orset.d.ts +25 -13
  27. package/dist/crdt/orset.d.ts.map +1 -1
  28. package/dist/crdt/orset.js +31 -23
  29. package/dist/crdt/orset.js.map +1 -1
  30. package/dist/crdt/pncounter.d.ts +22 -4
  31. package/dist/crdt/pncounter.d.ts.map +1 -1
  32. package/dist/crdt/pncounter.js +28 -14
  33. package/dist/crdt/pncounter.js.map +1 -1
  34. package/dist/crdt/presence.d.ts +33 -13
  35. package/dist/crdt/presence.d.ts.map +1 -1
  36. package/dist/crdt/presence.js +36 -20
  37. package/dist/crdt/presence.js.map +1 -1
  38. package/dist/errors.d.ts +0 -4
  39. package/dist/errors.d.ts.map +1 -1
  40. package/dist/errors.js +0 -16
  41. package/dist/errors.js.map +1 -1
  42. package/dist/schema.d.ts +3 -9
  43. package/dist/schema.d.ts.map +1 -1
  44. package/dist/schema.js +3 -34
  45. package/dist/schema.js.map +1 -1
  46. package/dist/sync/clock.d.ts +1 -20
  47. package/dist/sync/clock.d.ts.map +1 -1
  48. package/dist/sync/clock.js +20 -46
  49. package/dist/sync/clock.js.map +1 -1
  50. package/dist/sync/delta.d.ts +5 -22
  51. package/dist/sync/delta.d.ts.map +1 -1
  52. package/dist/sync/delta.js +18 -26
  53. package/dist/sync/delta.js.map +1 -1
  54. package/dist/transport/http.d.ts +1 -14
  55. package/dist/transport/http.d.ts.map +1 -1
  56. package/dist/transport/http.js +3 -21
  57. package/dist/transport/http.js.map +1 -1
  58. package/dist/transport/websocket.d.ts +0 -27
  59. package/dist/transport/websocket.d.ts.map +1 -1
  60. package/dist/transport/websocket.js +9 -37
  61. package/dist/transport/websocket.js.map +1 -1
  62. package/dist/utils/to-hex.d.ts +2 -0
  63. package/dist/utils/to-hex.d.ts.map +1 -0
  64. package/dist/utils/to-hex.js +2 -0
  65. package/dist/utils/to-hex.js.map +1 -0
  66. package/package.json +6 -3
  67. package/src/auth/token.ts +6 -34
  68. package/src/client.ts +165 -65
  69. package/src/codec.ts +13 -71
  70. package/src/constants.ts +6 -0
  71. package/src/crdt/gcounter.ts +18 -20
  72. package/src/crdt/lwwregister.ts +27 -26
  73. package/src/crdt/orset.ts +32 -29
  74. package/src/crdt/pncounter.ts +30 -21
  75. package/src/crdt/presence.ts +37 -26
  76. package/src/errors.ts +0 -21
  77. package/src/schema.ts +3 -44
  78. package/src/sync/clock.ts +18 -50
  79. package/src/sync/delta.ts +20 -58
  80. package/src/transport/http.ts +3 -33
  81. package/src/transport/websocket.ts +15 -52
  82. package/src/utils/to-hex.ts +1 -0
  83. package/test/integration.test.ts +2 -3
  84. package/test/sync.test.ts +1 -2
package/dist/schema.js CHANGED
@@ -5,22 +5,10 @@
5
5
  * Plain TypeScript types are inferred via Schema.Type<typeof S>.
6
6
  */
7
7
  import { Schema } from "effect";
8
- // ---------------------------------------------------------------------------
9
- // Shared primitives
10
- // ---------------------------------------------------------------------------
11
- /**
12
- * Unix timestamp in milliseconds.
13
- * msgpackr decodes Rust u64 as BigInt — accept both for compatibility.
14
- */
8
+ /** Unix timestamp in milliseconds. Rust u64 decodes as bigint when > Number.MAX_SAFE_INTEGER — normalise to number. */
15
9
  export const TimestampMs = Schema.Union(Schema.Number, Schema.BigIntFromSelf.pipe(Schema.transform(Schema.Number, { decode: (n) => Number(n), encode: (n) => BigInt(n) })));
16
- /**
17
- * client_id / author — Rust u64, decoded by msgpackr as BigInt or number.
18
- * Accept both and normalise to number.
19
- */
10
+ /** client_id / author — Rust u64, may decode as bigint for large values. Normalise to number. */
20
11
  export const ClientId = Schema.Union(Schema.Number, Schema.BigIntFromSelf.pipe(Schema.transform(Schema.Number, { decode: (n) => Number(n), encode: (n) => BigInt(n) })));
21
- // ---------------------------------------------------------------------------
22
- // Auth / Token claims
23
- // ---------------------------------------------------------------------------
24
12
  export const Permissions = Schema.Struct({
25
13
  read: Schema.Array(Schema.String),
26
14
  write: Schema.Array(Schema.String),
@@ -32,37 +20,21 @@ export const TokenClaims = Schema.Struct({
32
20
  expires_at: TimestampMs,
33
21
  permissions: Permissions,
34
22
  });
35
- // ---------------------------------------------------------------------------
36
- // Vector clock
37
- // ---------------------------------------------------------------------------
38
23
  /** BTreeMap<client_id, version> — matches server VectorClock.entries */
39
24
  export const VectorClock = Schema.Record({ key: Schema.String, value: Schema.Number });
40
- // ---------------------------------------------------------------------------
41
- // Client → Server WebSocket messages
42
- // ---------------------------------------------------------------------------
43
25
  export const ClientMsg = Schema.Union(Schema.Struct({ Subscribe: Schema.Struct({ crdt_id: Schema.String }) }), Schema.Struct({
44
26
  Op: Schema.Struct({ crdt_id: Schema.String, op_bytes: Schema.Uint8ArrayFromSelf }),
45
27
  }), Schema.Struct({
46
28
  Sync: Schema.Struct({ crdt_id: Schema.String, since_vc: Schema.Uint8ArrayFromSelf }),
47
29
  }));
48
- // ---------------------------------------------------------------------------
49
- // Server → Client WebSocket messages
50
- // ---------------------------------------------------------------------------
51
30
  export const ServerMsg = Schema.Union(Schema.Struct({
52
31
  Delta: Schema.Struct({
53
32
  crdt_id: Schema.String,
54
- // msgpackr may decode bin as Uint8Array or number[] depending on context — normalise to Uint8Array
55
- delta_bytes: Schema.Union(Schema.Uint8ArrayFromSelf, Schema.Array(Schema.Number).pipe(Schema.transform(Schema.Uint8ArrayFromSelf, {
56
- decode: (arr) => new Uint8Array(arr),
57
- encode: (u8) => Array.from(u8),
58
- }))),
33
+ delta_bytes: Schema.Uint8ArrayFromSelf,
59
34
  }),
60
35
  }), Schema.Struct({ Ack: Schema.Struct({ seq: Schema.Number }) }), Schema.Struct({
61
36
  Error: Schema.Struct({ code: Schema.Number, message: Schema.String }),
62
37
  }));
63
- // ---------------------------------------------------------------------------
64
- // CRDT value types (returned by GET /v1/namespaces/:ns/crdts/:id)
65
- // ---------------------------------------------------------------------------
66
38
  export const GCounterValue = Schema.Struct({
67
39
  value: Schema.Number,
68
40
  counts: Schema.Record({ key: Schema.String, value: Schema.Number }),
@@ -85,9 +57,6 @@ export const PresenceEntryView = Schema.Struct({
85
57
  export const PresenceValue = Schema.Struct({
86
58
  entries: Schema.Record({ key: Schema.String, value: PresenceEntryView }),
87
59
  });
88
- // ---------------------------------------------------------------------------
89
- // HTTP response envelopes
90
- // ---------------------------------------------------------------------------
91
60
  /** GET /v1/namespaces/:ns/crdts/:id — server returns the raw JSON value directly. */
92
61
  export const CrdtGetResponse = Schema.Unknown;
93
62
  /** POST /v1/namespaces/:ns/crdts/:id/ops — server returns msgpack-encoded delta bytes. */
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
@@ -1,25 +1,10 @@
1
- /**
2
- * Client-side VectorClock.
3
- *
4
- * Tracks the latest version seen per client_id. Used to request
5
- * delta-since on reconnect (Sync message).
6
- *
7
- * Persisted to localStorage (browser) or a JSON file (Node/Bun) via
8
- * the optional `ClockStorage` adapter injected at construction.
9
- */
10
1
  import type { VectorClock } from "../schema.js";
11
2
  export interface ClockStorage {
12
3
  load(key: string): VectorClock | null;
13
4
  save(key: string, vc: VectorClock): void;
14
5
  }
15
- /** In-memory only — useful for tests and SSR. */
16
6
  export declare const memoryStorage: ClockStorage;
17
- /** localStorage-backed storage (browser). Falls back to memory if unavailable. */
18
- export declare function localStorageAdapter(prefix?: string): ClockStorage;
19
- /**
20
- * Mutable wrapper around VectorClock that tracks seen versions and
21
- * optionally persists them across page reloads.
22
- */
7
+ export declare const localStorageAdapter: (prefix?: string) => ClockStorage;
23
8
  export declare class VectorClockTracker {
24
9
  private readonly clock;
25
10
  private readonly storage;
@@ -30,13 +15,9 @@ export declare class VectorClockTracker {
30
15
  storage?: ClockStorage | null;
31
16
  initial?: VectorClock;
32
17
  });
33
- /** Observe a version from a peer. Updates clock if newer. */
34
18
  observe(clientId: string, version: number): void;
35
- /** Merge an entire remote VectorClock (take max per entry). */
36
19
  merge(remote: VectorClock): void;
37
- /** Returns an immutable snapshot suitable for the Sync message. */
38
20
  snapshot(): VectorClock;
39
- /** Reset to empty (e.g. when the namespace is cleared). */
40
21
  reset(): void;
41
22
  }
42
23
  //# sourceMappingURL=clock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/sync/clock.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC;CAC1C;AAED,iDAAiD;AACjD,eAAO,MAAM,aAAa,EAAE,YAMxB,CAAC;AAEL,kFAAkF;AAClF,wBAAgB,mBAAmB,CAAC,MAAM,SAAc,GAAG,YAAY,CAmBtE;AAMD;;;GAGG;AACH,qBAAa,kBAAkB;IAG7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,IAAI,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;QAC9B,OAAO,CAAC,EAAE,WAAW,CAAC;KACvB;IAQD,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAQhD,+DAA+D;IAC/D,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAchC,mEAAmE;IACnE,QAAQ,IAAI,WAAW;IAIvB,2DAA2D;IAC3D,KAAK,IAAI,IAAI;CAMd"}
1
+ {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/sync/clock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAAC;IACtC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI,CAAC;CAC1C;AAED,eAAO,MAAM,aAAa,EAAE,YAMxB,CAAC;AAEL,eAAO,MAAM,mBAAmB,GAAI,eAAoB,KAAG,YAgBzD,CAAC;AAEH,qBAAa,kBAAkB;IAE7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,IAAI,EAAE;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;QAC9B,OAAO,CAAC,EAAE,WAAW,CAAC;KACvB;IAQD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAQhD,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAchC,QAAQ,IAAI,WAAW;IAIvB,KAAK,IAAI,IAAI;CAMd"}
@@ -1,13 +1,3 @@
1
- /**
2
- * Client-side VectorClock.
3
- *
4
- * Tracks the latest version seen per client_id. Used to request
5
- * delta-since on reconnect (Sync message).
6
- *
7
- * Persisted to localStorage (browser) or a JSON file (Node/Bun) via
8
- * the optional `ClockStorage` adapter injected at construction.
9
- */
10
- /** In-memory only — useful for tests and SSR. */
11
1
  export const memoryStorage = (() => {
12
2
  const store = new Map();
13
3
  return {
@@ -15,40 +5,28 @@ export const memoryStorage = (() => {
15
5
  save: (key, vc) => { store.set(key, vc); },
16
6
  };
17
7
  })();
18
- /** localStorage-backed storage (browser). Falls back to memory if unavailable. */
19
- export function localStorageAdapter(prefix = "meridian:") {
20
- return {
21
- load(key) {
22
- try {
23
- const raw = localStorage.getItem(`${prefix}${key}`);
24
- if (raw === null)
25
- return null;
26
- return JSON.parse(raw);
27
- }
28
- catch {
8
+ export const localStorageAdapter = (prefix = "meridian:") => ({
9
+ load(key) {
10
+ try {
11
+ const raw = localStorage.getItem(`${prefix}${key}`);
12
+ if (raw === null)
29
13
  return null;
30
- }
31
- },
32
- save(key, vc) {
33
- try {
34
- localStorage.setItem(`${prefix}${key}`, JSON.stringify(vc));
35
- }
36
- catch {
37
- // quota exceeded — ignore
38
- }
39
- },
40
- };
41
- }
42
- // ---------------------------------------------------------------------------
43
- // VectorClockTracker
44
- // ---------------------------------------------------------------------------
45
- /**
46
- * Mutable wrapper around VectorClock that tracks seen versions and
47
- * optionally persists them across page reloads.
48
- */
14
+ return JSON.parse(raw);
15
+ }
16
+ catch {
17
+ return null;
18
+ }
19
+ },
20
+ save(key, vc) {
21
+ try {
22
+ localStorage.setItem(`${prefix}${key}`, JSON.stringify(vc));
23
+ }
24
+ catch {
25
+ }
26
+ },
27
+ });
49
28
  export class VectorClockTracker {
50
- // Mutable internal copy — VectorClock (Schema type) is readonly, so we
51
- // keep a plain mutable Record internally and expose snapshots.
29
+ // HACK: VectorClock (Schema type) is readonly, so we keep a plain mutable Record internally and expose snapshots.
52
30
  clock;
53
31
  storage;
54
32
  storageKey;
@@ -58,7 +36,6 @@ export class VectorClockTracker {
58
36
  const persisted = this.storage?.load(this.storageKey) ?? null;
59
37
  this.clock = { ...(opts.initial ?? {}), ...(persisted ?? {}) };
60
38
  }
61
- /** Observe a version from a peer. Updates clock if newer. */
62
39
  observe(clientId, version) {
63
40
  const current = this.clock[clientId] ?? 0;
64
41
  if (version > current) {
@@ -66,7 +43,6 @@ export class VectorClockTracker {
66
43
  this.storage?.save(this.storageKey, this.snapshot());
67
44
  }
68
45
  }
69
- /** Merge an entire remote VectorClock (take max per entry). */
70
46
  merge(remote) {
71
47
  let changed = false;
72
48
  for (const [id, ver] of Object.entries(remote)) {
@@ -80,11 +56,9 @@ export class VectorClockTracker {
80
56
  this.storage?.save(this.storageKey, this.snapshot());
81
57
  }
82
58
  }
83
- /** Returns an immutable snapshot suitable for the Sync message. */
84
59
  snapshot() {
85
60
  return { ...this.clock };
86
61
  }
87
- /** Reset to empty (e.g. when the namespace is cleared). */
88
62
  reset() {
89
63
  for (const key of Object.keys(this.clock)) {
90
64
  delete this.clock[key];
@@ -1 +1 @@
1
- {"version":3,"file":"clock.js","sourceRoot":"","sources":["../../src/sync/clock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"clock.js","sourceRoot":"","sources":["../../src/sync/clock.ts"],"names":[],"mappings":"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"}
@@ -1,32 +1,17 @@
1
- /**
2
- * Delta application helpers.
3
- *
4
- * The server sends deltas as opaque msgpack bytes inside `ServerMsg.Delta`.
5
- * Each CRDT type decodes its own delta format matching Rust serde output.
6
- *
7
- * Field names mirror the Rust structs exactly (rmp-serde named encoding).
8
- */
9
- /** GCounterDelta { counters: BTreeMap<u64, u64> } */
10
1
  export interface GCounterDelta {
11
2
  counters: Record<string, number>;
12
3
  }
13
- export declare function decodeGCounterDelta(bytes: Uint8Array): GCounterDelta;
14
- /** PNCounterDelta { pos: Option<GCounterDelta>, neg: Option<GCounterDelta> } */
4
+ export declare const decodeGCounterDelta: (bytes: Uint8Array) => GCounterDelta;
15
5
  export interface PNCounterDelta {
16
6
  pos: GCounterDelta | null;
17
7
  neg: GCounterDelta | null;
18
8
  }
19
- export declare function decodePNCounterDelta(bytes: Uint8Array): PNCounterDelta;
20
- /**
21
- * ORSetDelta { adds: HashMap<String, HashSet<Uuid>>, removes: HashMap<String, HashSet<Uuid>> }
22
- * Uuid bytes are decoded by msgpackr as Uint8Array or number[].
23
- */
9
+ export declare const decodePNCounterDelta: (bytes: Uint8Array) => PNCounterDelta;
24
10
  export interface ORSetDelta {
25
11
  adds: Record<string, Uint8Array[]>;
26
12
  removes: Record<string, Uint8Array[]>;
27
13
  }
28
- export declare function decodeORSetDelta(bytes: Uint8Array): ORSetDelta;
29
- /** LwwEntry { value, hlc: HybridLogicalClock, author: u64 } */
14
+ export declare const decodeORSetDelta: (bytes: Uint8Array) => ORSetDelta;
30
15
  export interface LwwEntry {
31
16
  value: unknown;
32
17
  hlc: {
@@ -36,11 +21,10 @@ export interface LwwEntry {
36
21
  };
37
22
  author: number | bigint;
38
23
  }
39
- /** LwwDelta { entry: Option<LwwEntry> } */
40
24
  export interface LwwDelta {
41
25
  entry: LwwEntry | null;
42
26
  }
43
- export declare function decodeLwwDelta(bytes: Uint8Array): LwwDelta;
27
+ export declare const decodeLwwDelta: (bytes: Uint8Array) => LwwDelta;
44
28
  export interface PresenceEntryDelta {
45
29
  data: unknown;
46
30
  hlc: {
@@ -50,9 +34,8 @@ export interface PresenceEntryDelta {
50
34
  };
51
35
  ttl_ms: number | bigint;
52
36
  }
53
- /** PresenceDelta — changes per client_id */
54
37
  export interface PresenceDelta {
55
38
  changes: Record<string, PresenceEntryDelta | null>;
56
39
  }
57
- export declare function decodePresenceDelta(bytes: Uint8Array): PresenceDelta;
40
+ export declare const decodePresenceDelta: (bytes: Uint8Array) => PresenceDelta;
58
41
  //# sourceMappingURL=delta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"delta.d.ts","sourceRoot":"","sources":["../../src/sync/delta.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,CAGpE;AAMD,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1B,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,CAStE;AAMD;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;CACvC;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAU9D;AAMD,+DAA+D;AAC/D,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC7E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,2CAA2C;AAC3C,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;CACxB;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,CAG1D;AAMD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC7E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,4CAA4C;AAC5C,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC,CAAC;CACpD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,CAGpE"}
1
+ {"version":3,"file":"delta.d.ts","sourceRoot":"","sources":["../../src/sync/delta.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,eAAO,MAAM,mBAAmB,GAAI,OAAO,UAAU,KAAG,aAGvD,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1B,GAAG,EAAE,aAAa,GAAG,IAAI,CAAC;CAC3B;AAED,eAAO,MAAM,oBAAoB,GAAI,OAAO,UAAU,KAAG,cASxD,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,gBAAgB,GAAI,OAAO,UAAU,KAAG,UAUpD,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC7E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,cAAc,GAAI,OAAO,UAAU,KAAG,QAGlD,CAAC;AAEF,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE;QAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAC7E,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC,CAAC;CACpD;AAED,eAAO,MAAM,mBAAmB,GAAI,OAAO,UAAU,KAAG,aAGvD,CAAC"}
@@ -1,35 +1,27 @@
1
- /**
2
- * Delta application helpers.
3
- *
4
- * The server sends deltas as opaque msgpack bytes inside `ServerMsg.Delta`.
5
- * Each CRDT type decodes its own delta format matching Rust serde output.
6
- *
7
- * Field names mirror the Rust structs exactly (rmp-serde named encoding).
8
- */
9
- import { unpack } from "msgpackr";
10
- export function decodeGCounterDelta(bytes) {
11
- const raw = unpack(bytes);
1
+ import { decode } from "@msgpack/msgpack";
2
+ export const decodeGCounterDelta = (bytes) => {
3
+ const raw = decode(bytes);
12
4
  return { counters: raw.counters ?? {} };
13
- }
14
- export function decodePNCounterDelta(bytes) {
15
- const raw = unpack(bytes);
5
+ };
6
+ export const decodePNCounterDelta = (bytes) => {
7
+ const raw = decode(bytes);
16
8
  return {
17
9
  pos: raw.pos ? { counters: raw.pos.counters ?? {} } : null,
18
10
  neg: raw.neg ? { counters: raw.neg.counters ?? {} } : null,
19
11
  };
20
- }
21
- export function decodeORSetDelta(bytes) {
22
- const raw = unpack(bytes);
23
- const toBytes = (v) => v instanceof Uint8Array ? v : new Uint8Array(v);
24
- const decodeMap = (m) => Object.fromEntries(Object.entries(m ?? {}).map(([k, tags]) => [k, tags.map(toBytes)]));
12
+ };
13
+ export const decodeORSetDelta = (bytes) => {
14
+ const raw = decode(bytes);
15
+ const toBytes = (value) => value instanceof Uint8Array ? value : new Uint8Array(value);
16
+ const decodeMap = (map) => Object.fromEntries(Object.entries(map ?? {}).map(([key, tags]) => [key, tags.map(toBytes)]));
25
17
  return { adds: decodeMap(raw.adds), removes: decodeMap(raw.removes) };
26
- }
27
- export function decodeLwwDelta(bytes) {
28
- const raw = unpack(bytes);
18
+ };
19
+ export const decodeLwwDelta = (bytes) => {
20
+ const raw = decode(bytes);
29
21
  return { entry: raw.entry ?? null };
30
- }
31
- export function decodePresenceDelta(bytes) {
32
- const raw = unpack(bytes);
22
+ };
23
+ export const decodePresenceDelta = (bytes) => {
24
+ const raw = decode(bytes);
33
25
  return { changes: raw.changes ?? {} };
34
- }
26
+ };
35
27
  //# sourceMappingURL=delta.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../src/sync/delta.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAWlC,MAAM,UAAU,mBAAmB,CAAC,KAAiB;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAA0C,CAAC;IACnE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;AAC1C,CAAC;AAYD,MAAM,UAAU,oBAAoB,CAAC,KAAiB;IACpD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAGvB,CAAC;IACF,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;QAC1D,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;KAC3D,CAAC;AACJ,CAAC;AAeD,MAAM,UAAU,gBAAgB,CAAC,KAAiB;IAChD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAGvB,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,CAAU,EAAc,EAAE,CACzC,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAa,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,CAAC,CAA6B,EAAE,EAAE,CAClD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxE,CAAC;AAkBD,MAAM,UAAU,cAAc,CAAC,KAAiB;IAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAgC,CAAC;IACzD,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;AACtC,CAAC;AAiBD,MAAM,UAAU,mBAAmB,CAAC,KAAiB;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAA4D,CAAC;IACrF,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"delta.js","sourceRoot":"","sources":["../../src/sync/delta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAM1C,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAiB,EAAiB,EAAE;IACtE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAA0C,CAAC;IACnE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;AAC1C,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAiB,EAAkB,EAAE;IACxE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAGvB,CAAC;IACF,OAAO;QACL,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;QAC1D,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;KAC3D,CAAC;AACJ,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAiB,EAAc,EAAE;IAChE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAGvB,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,KAAc,EAAc,EAAE,CAC7C,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,KAAiB,CAAC,CAAC;IAC1E,MAAM,SAAS,GAAG,CAAC,GAA+B,EAAE,EAAE,CACpD,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;AACxE,CAAC,CAAC;AAYF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAY,EAAE;IAC5D,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAgC,CAAC;IACzD,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;AACtC,CAAC,CAAC;AAYF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAiB,EAAiB,EAAE;IACtE,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAA4D,CAAC;IACrF,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;AACxC,CAAC,CAAC"}
@@ -1,19 +1,10 @@
1
- /**
2
- * HTTP transport — REST API client for Meridian.
3
- *
4
- * All methods return Effect<T, HttpError | NetworkError> so callers
5
- * can handle network failures and server errors as typed values.
6
- */
7
1
  import { Effect } from "effect";
8
2
  import { HttpError, NetworkError } from "../errors.js";
9
- import { CrdtGetResponse, CrdtOpResponse, TokenIssueResponse, VectorClock } from "../schema.js";
3
+ import { CrdtGetResponse, CrdtOpResponse, TokenIssueResponse, type VectorClock } from "../schema.js";
10
4
  import type { Permissions } from "../schema.js";
11
5
  export interface HttpClientConfig {
12
- /** Base URL of the Meridian server, e.g. "http://localhost:3000" */
13
6
  baseUrl: string;
14
- /** Bearer token. Can be updated after construction (e.g. after refresh). */
15
7
  token: string;
16
- /** Request timeout in ms. Default: 10_000 */
17
8
  timeoutMs?: number;
18
9
  }
19
10
  export declare class HttpClient {
@@ -21,13 +12,9 @@ export declare class HttpClient {
21
12
  private readonly timeoutMs;
22
13
  token: string;
23
14
  constructor(config: HttpClientConfig);
24
- /** GET /v1/namespaces/:ns/crdts/:id */
25
15
  getCrdt(ns: string, id: string): Effect.Effect<CrdtGetResponse, HttpError | NetworkError>;
26
- /** POST /v1/namespaces/:ns/crdts/:id/ops */
27
16
  postOp(ns: string, id: string, op: unknown): Effect.Effect<CrdtOpResponse, HttpError | NetworkError>;
28
- /** GET /v1/namespaces/:ns/crdts/:id/sync?since=<base64url(msgpack(vc))> */
29
17
  syncCrdt(ns: string, id: string, sinceVc?: VectorClock): Effect.Effect<CrdtGetResponse, HttpError | NetworkError>;
30
- /** POST /v1/namespaces/:ns/tokens (admin-only) */
31
18
  issueToken(ns: string, opts: {
32
19
  client_id: number;
33
20
  ttl_ms: number;
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EAElB,WAAW,EACZ,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,MAAM,WAAW,gBAAgB;IAC/B,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,KAAK,EAAE,MAAM,CAAC;gBAEF,MAAM,EAAE,gBAAgB;IAQpC,uCAAuC;IACvC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,GAAG,YAAY,CAAC;IAIzF,4CAA4C;IAC5C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,GAAG,YAAY,CAAC;IAIpG,2EAA2E;IAC3E,QAAQ,CACN,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,GAAG,YAAY,CAAC;IAS3D,mDAAmD;IACnD,UAAU,CACR,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,WAAW,CAAA;KAAE,GACpE,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,SAAS,GAAG,YAAY,CAAC;IAM9D,OAAO,CAAC,OAAO;CAyDhB"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EAElB,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,KAAK,EAAE,MAAM,CAAC;gBAEF,MAAM,EAAE,gBAAgB;IAMpC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,GAAG,YAAY,CAAC;IAIzF,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,SAAS,GAAG,YAAY,CAAC;IAIpG,QAAQ,CACN,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,WAAW,GACpB,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,SAAS,GAAG,YAAY,CAAC;IAS3D,UAAU,CACR,EAAE,EAAE,MAAM,EACV,IAAI,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,WAAW,CAAA;KAAE,GACpE,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,SAAS,GAAG,YAAY,CAAC;IAI9D,OAAO,CAAC,OAAO;CAyDhB"}
@@ -1,16 +1,7 @@
1
- /**
2
- * HTTP transport — REST API client for Meridian.
3
- *
4
- * All methods return Effect<T, HttpError | NetworkError> so callers
5
- * can handle network failures and server errors as typed values.
6
- */
7
1
  import { encode, decode } from "../codec.js";
8
2
  import { Effect, Schema } from "effect";
9
3
  import { HttpError, NetworkError } from "../errors.js";
10
- import { CrdtGetResponse, CrdtOpResponse, TokenIssueResponse, ErrorResponse, VectorClock, } from "../schema.js";
11
- // ---------------------------------------------------------------------------
12
- // HttpClient
13
- // ---------------------------------------------------------------------------
4
+ import { CrdtGetResponse, CrdtOpResponse, TokenIssueResponse, ErrorResponse, } from "../schema.js";
14
5
  export class HttpClient {
15
6
  baseUrl;
16
7
  timeoutMs;
@@ -20,16 +11,12 @@ export class HttpClient {
20
11
  this.token = config.token;
21
12
  this.timeoutMs = config.timeoutMs ?? 10_000;
22
13
  }
23
- // ---- CRDT REST ----
24
- /** GET /v1/namespaces/:ns/crdts/:id */
25
14
  getCrdt(ns, id) {
26
15
  return this.request(CrdtGetResponse, "GET", `/v1/namespaces/${ns}/crdts/${id}`);
27
16
  }
28
- /** POST /v1/namespaces/:ns/crdts/:id/ops */
29
17
  postOp(ns, id, op) {
30
18
  return this.request(CrdtOpResponse, "POST", `/v1/namespaces/${ns}/crdts/${id}/ops`, op);
31
19
  }
32
- /** GET /v1/namespaces/:ns/crdts/:id/sync?since=<base64url(msgpack(vc))> */
33
20
  syncCrdt(ns, id, sinceVc) {
34
21
  let path = `/v1/namespaces/${ns}/crdts/${id}/sync`;
35
22
  if (sinceVc && Object.keys(sinceVc).length > 0) {
@@ -38,11 +25,9 @@ export class HttpClient {
38
25
  }
39
26
  return this.request(CrdtGetResponse, "GET", path);
40
27
  }
41
- /** POST /v1/namespaces/:ns/tokens (admin-only) */
42
28
  issueToken(ns, opts) {
43
29
  return this.request(TokenIssueResponse, "POST", `/v1/namespaces/${ns}/tokens`, opts);
44
30
  }
45
- // ---- Internal ----
46
31
  request(responseSchema, method, path, body) {
47
32
  const url = `${this.baseUrl}${path}`;
48
33
  const headers = {
@@ -88,14 +73,11 @@ export class HttpClient {
88
73
  }));
89
74
  }
90
75
  }
91
- // ---------------------------------------------------------------------------
92
- // base64url (no-padding) encoder
93
- // ---------------------------------------------------------------------------
94
- function base64urlEncode(bytes) {
76
+ const base64urlEncode = (bytes) => {
95
77
  let binary = "";
96
78
  for (const b of bytes) {
97
79
  binary += String.fromCharCode(b);
98
80
  }
99
81
  return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=/g, "");
100
- }
82
+ };
101
83
  //# sourceMappingURL=http.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EACL,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,aAAa,EACb,WAAW,GACZ,MAAM,cAAc,CAAC;AAgBtB,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,OAAO,UAAU;IACJ,OAAO,CAAS;IAChB,SAAS,CAAS;IACnC,KAAK,CAAS;IAEd,YAAY,MAAwB;QAClC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,CAAC;IAED,sBAAsB;IAEtB,uCAAuC;IACvC,OAAO,CAAC,EAAU,EAAE,EAAU;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,4CAA4C;IAC5C,MAAM,CAAC,EAAU,EAAE,EAAU,EAAE,EAAW;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,2EAA2E;IAC3E,QAAQ,CACN,EAAU,EACV,EAAU,EACV,OAAqB;QAErB,IAAI,IAAI,GAAG,kBAAkB,EAAE,UAAU,EAAE,OAAO,CAAC;QACnD,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC3C,IAAI,IAAI,UAAU,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC7C,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,mDAAmD;IACnD,UAAU,CACR,EAAU,EACV,IAAqE;QAErE,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IACvF,CAAC;IAED,qBAAqB;IAEb,OAAO,CACb,cAAmC,EACnC,MAAc,EACd,IAAY,EACZ,IAAc;QAEd,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QACrC,MAAM,OAAO,GAA2B;YACtC,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE;YACrC,MAAM,EAAE,qBAAqB;SAC9B,CAAC;QAEF,IAAI,SAAiC,CAAC;QACtC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO,CAAC,cAAc,CAAC,GAAG,qBAAqB,CAAC;QAClD,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;YACpC,GAAG,EAAE,KAAK,IAAI,EAAE;gBACd,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;gBACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;gBACnE,IAAI,CAAC;oBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;oBACnG,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;oBAC3D,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;gBAC7B,CAAC;wBAAS,CAAC;oBACT,YAAY,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;YACD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CACX,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;SAC3F,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC,IAAI,CACrB,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAA8C,EAAE;YACjF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,IAAI,OAAsB,CAAC;gBAC3B,IAAI,CAAC;oBACH,OAAO,GAAG,MAAM,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjG,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBACrE,CAAC;gBACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;YAChF,CAAC;YACD,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC/D,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,qBAAqB,CAAC;gBACrD,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBACf,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAChD,OAAO,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CACnD,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CACpB,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,sCAAsC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACjF,CACF,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;IACJ,CAAC;CACF;AAED,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAE9E,SAAS,eAAe,CAAC,KAAiB;IACxC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
@@ -1,27 +1,11 @@
1
- /**
2
- * WebSocket transport — reconnect FSM + Sync on reconnect.
3
- *
4
- * States:
5
- * DISCONNECTED → CONNECTING → AUTHENTICATING → CONNECTED → CLOSING
6
- *
7
- * On reconnect: re-subscribes to all known CRDTs and sends Sync(localVectorClock)
8
- * so the server can push missed deltas.
9
- *
10
- * Backoff: 100ms → 200ms → 400ms → … → 30s (±20% jitter).
11
- */
12
1
  import { encodeClientMsg } from "../codec.js";
13
2
  import type { ServerMsg, VectorClock } from "../schema.js";
14
3
  export type WsState = "DISCONNECTED" | "CONNECTING" | "CONNECTED" | "CLOSING";
15
4
  export interface WsTransportConfig {
16
- /** Full WebSocket URL, e.g. "ws://localhost:3000/v1/namespaces/my-room/connect" */
17
5
  url: string;
18
- /** Bearer token passed as ?token= query param (WS can't set headers). */
19
6
  token: string;
20
- /** Called whenever a ServerMsg arrives. */
21
7
  onMessage: (msg: ServerMsg) => void;
22
- /** Called on state transitions. */
23
8
  onStateChange?: (state: WsState) => void;
24
- /** Maximum reconnect delay in ms. Default: 30_000 */
25
9
  maxBackoffMs?: number;
26
10
  }
27
11
  export declare class WsTransport {
@@ -32,30 +16,19 @@ export declare class WsTransport {
32
16
  private backoffMs;
33
17
  private reconnectTimer;
34
18
  private closed;
35
- /** CRDTs to re-subscribe on reconnect: crdt_id → last known VectorClock */
36
19
  private readonly subscriptions;
37
20
  constructor(config: WsTransportConfig);
38
21
  connect(): void;
39
- /** Gracefully close — will not reconnect. */
40
22
  close(): void;
41
- /**
42
- * Subscribe to a CRDT's deltas.
43
- * If already connected, sends Subscribe immediately.
44
- * On reconnect, the subscription is re-sent automatically.
45
- */
46
23
  subscribe(crdtId: string, sinceVc?: VectorClock): void;
47
- /** Update the local vector clock for a CRDT (used for reconnect Sync). */
48
24
  updateClock(crdtId: string, vc: VectorClock): void;
49
- /** Send a raw ClientMsg. Throws if not connected. */
50
25
  send(msg: Parameters<typeof encodeClientMsg>[0]): void;
51
26
  get currentState(): WsState;
52
- /** Resolves when the transport reaches CONNECTED state (or rejects on timeout). */
53
27
  waitForConnected(timeoutMs?: number): Promise<void>;
54
28
  private doConnect;
55
29
  private scheduleReconnect;
56
30
  private clearReconnectTimer;
57
31
  private transitionTo;
58
- /** On reconnect: re-subscribe and send Sync for each known CRDT. */
59
32
  private resubscribeAll;
60
33
  private sendSubscribe;
61
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,eAAe,EAAsC,MAAM,aAAa,CAAC;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAM3D,MAAM,MAAM,OAAO,GACf,cAAc,GACd,YAAY,GACZ,WAAW,GACX,SAAS,CAAC;AAEd,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,GAAG,EAAE,MAAM,CAAC;IACZ,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,SAAS,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IACpC,mCAAmC;IACnC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,qDAAqD;IACrD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,MAAM,CAAS;IAEvB,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;gBAEpD,MAAM,EAAE,iBAAiB;IAOrC,OAAO,IAAI,IAAI;IAMf,6CAA6C;IAC7C,KAAK,IAAI,IAAI;IAOb;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI;IAO1D,0EAA0E;IAC1E,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI;IAIlD,qDAAqD;IACrD,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAOtD,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,mFAAmF;IACnF,gBAAgB,CAAC,SAAS,SAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BlD,OAAO,CAAC,SAAS;IAuCjB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,YAAY;IAMpB,oEAAoE;IACpE,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,aAAa;CAUtB"}
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../../src/transport/websocket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAsC,MAAM,aAAa,CAAC;AAClF,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAS3D,MAAM,MAAM,OAAO,GACf,cAAc,GACd,YAAY,GACZ,WAAW,GACX,SAAS,CAAC;AAEd,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,CAAC;IACpC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAEtC,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,MAAM,CAAS;IAEvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAkC;gBAEpD,MAAM,EAAE,iBAAiB;IAKrC,OAAO,IAAI,IAAI;IAMf,KAAK,IAAI,IAAI;IAOb,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,IAAI;IAO1D,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,WAAW,GAAG,IAAI;IAIlD,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAOtD,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,gBAAgB,CAAC,SAAS,SAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B/D,OAAO,CAAC,SAAS;IAuCjB,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,aAAa;CAMtB"}