@amalgm/live 0.2.29 → 0.2.31

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 (93) hide show
  1. package/PURPOSE.md +37 -2
  2. package/README.md +1 -0
  3. package/dist/apply/content-results.d.ts +26 -0
  4. package/dist/apply/content-results.d.ts.map +1 -0
  5. package/dist/apply/content-results.js +52 -0
  6. package/dist/apply/content-results.js.map +1 -0
  7. package/dist/apply/contracts.d.ts +191 -0
  8. package/dist/apply/contracts.d.ts.map +1 -0
  9. package/dist/apply/contracts.js +47 -0
  10. package/dist/apply/contracts.js.map +1 -0
  11. package/dist/apply/index.d.ts +10 -0
  12. package/dist/apply/index.d.ts.map +1 -0
  13. package/dist/apply/index.js +10 -0
  14. package/dist/apply/index.js.map +1 -0
  15. package/dist/apply/local-work.d.ts +10 -0
  16. package/dist/apply/local-work.d.ts.map +1 -0
  17. package/dist/apply/local-work.js +17 -0
  18. package/dist/apply/local-work.js.map +1 -0
  19. package/dist/apply/plans.d.ts +14 -0
  20. package/dist/apply/plans.d.ts.map +1 -0
  21. package/dist/apply/plans.js +183 -0
  22. package/dist/apply/plans.js.map +1 -0
  23. package/dist/apply/rail.d.ts +25 -0
  24. package/dist/apply/rail.d.ts.map +1 -0
  25. package/dist/apply/rail.js +304 -0
  26. package/dist/apply/rail.js.map +1 -0
  27. package/dist/apply/repository-result.d.ts +25 -0
  28. package/dist/apply/repository-result.d.ts.map +1 -0
  29. package/dist/apply/repository-result.js +83 -0
  30. package/dist/apply/repository-result.js.map +1 -0
  31. package/dist/apply/selection.d.ts +14 -0
  32. package/dist/apply/selection.d.ts.map +1 -0
  33. package/dist/apply/selection.js +63 -0
  34. package/dist/apply/selection.js.map +1 -0
  35. package/dist/apply/type-adapters.d.ts +13 -0
  36. package/dist/apply/type-adapters.d.ts.map +1 -0
  37. package/dist/apply/type-adapters.js +37 -0
  38. package/dist/apply/type-adapters.js.map +1 -0
  39. package/dist/detection/adapter-contract.d.ts +11 -8
  40. package/dist/detection/adapter-contract.d.ts.map +1 -1
  41. package/dist/detection/adapter-contract.js +5 -5
  42. package/dist/detection/adapter-contract.js.map +1 -1
  43. package/dist/detection/echo.d.ts +1 -1
  44. package/dist/detection/echo.d.ts.map +1 -1
  45. package/dist/detection/echo.js +8 -1
  46. package/dist/detection/echo.js.map +1 -1
  47. package/dist/index.d.ts +1 -0
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +1 -0
  50. package/dist/index.js.map +1 -1
  51. package/dist/records/index.d.ts +2 -0
  52. package/dist/records/index.d.ts.map +1 -1
  53. package/dist/records/index.js +2 -0
  54. package/dist/records/index.js.map +1 -1
  55. package/dist/records/rail.d.ts +97 -0
  56. package/dist/records/rail.d.ts.map +1 -0
  57. package/dist/records/rail.js +250 -0
  58. package/dist/records/rail.js.map +1 -0
  59. package/dist/records/wire.d.ts +63 -0
  60. package/dist/records/wire.d.ts.map +1 -0
  61. package/dist/records/wire.js +86 -0
  62. package/dist/records/wire.js.map +1 -0
  63. package/dist-cjs/apply/content-results.js +57 -0
  64. package/dist-cjs/apply/content-results.js.map +1 -0
  65. package/dist-cjs/apply/contracts.js +53 -0
  66. package/dist-cjs/apply/contracts.js.map +1 -0
  67. package/dist-cjs/apply/index.js +28 -0
  68. package/dist-cjs/apply/index.js.map +1 -0
  69. package/dist-cjs/apply/local-work.js +20 -0
  70. package/dist-cjs/apply/local-work.js.map +1 -0
  71. package/dist-cjs/apply/plans.js +187 -0
  72. package/dist-cjs/apply/plans.js.map +1 -0
  73. package/dist-cjs/apply/rail.js +308 -0
  74. package/dist-cjs/apply/rail.js.map +1 -0
  75. package/dist-cjs/apply/repository-result.js +86 -0
  76. package/dist-cjs/apply/repository-result.js.map +1 -0
  77. package/dist-cjs/apply/selection.js +66 -0
  78. package/dist-cjs/apply/selection.js.map +1 -0
  79. package/dist-cjs/apply/type-adapters.js +41 -0
  80. package/dist-cjs/apply/type-adapters.js.map +1 -0
  81. package/dist-cjs/detection/adapter-contract.js +5 -5
  82. package/dist-cjs/detection/adapter-contract.js.map +1 -1
  83. package/dist-cjs/detection/echo.js +8 -1
  84. package/dist-cjs/detection/echo.js.map +1 -1
  85. package/dist-cjs/index.js +1 -0
  86. package/dist-cjs/index.js.map +1 -1
  87. package/dist-cjs/records/index.js +2 -0
  88. package/dist-cjs/records/index.js.map +1 -1
  89. package/dist-cjs/records/rail.js +254 -0
  90. package/dist-cjs/records/rail.js.map +1 -0
  91. package/dist-cjs/records/wire.js +91 -0
  92. package/dist-cjs/records/wire.js.map +1 -0
  93. package/package.json +7 -1
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ /** Gap-free per-entity Apply selection and complete-result coalescing. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.selectEntityApply = selectEntityApply;
5
+ const cloud_js_1 = require("../entities/cloud.js");
6
+ const contracts_js_1 = require("../records/contracts.js");
7
+ const contracts_js_2 = require("./contracts.js");
8
+ /**
9
+ * Select the exact target named by a recovering intent, otherwise the newest
10
+ * contiguous complete result. The host may reveal only this target; every
11
+ * earlier selected row becomes resolved after target Verify succeeds.
12
+ */
13
+ function selectEntityApply(work) {
14
+ if (!work.authorityId || !work.entityId
15
+ || !Number.isSafeInteger(work.resolvedThrough) || work.resolvedThrough < 0
16
+ || work.records.length === 0) {
17
+ throw new Error('entity Apply work is invalid');
18
+ }
19
+ let expected = work.resolvedThrough + 1;
20
+ for (const record of work.records) {
21
+ const checked = (0, contracts_js_1.checkAcceptedEntityRecord)(record);
22
+ if (!checked.ok)
23
+ throw new Error(checked.error);
24
+ if (record.authorityId !== work.authorityId || record.entityId !== work.entityId) {
25
+ throw new Error('one entity Apply batch cannot cross authority or UUID channels');
26
+ }
27
+ if (record.globalSequence !== expected) {
28
+ throw new Error(`entity Apply work has a gap before sequence ${record.globalSequence}`);
29
+ }
30
+ expected += 1;
31
+ }
32
+ if (work.materialized !== null) {
33
+ const current = (0, cloud_js_1.assertRecord)(work.materialized.record);
34
+ if (current.uuid !== work.entityId
35
+ || !Number.isSafeInteger(work.materialized.globalSequence)
36
+ || work.materialized.globalSequence < 1
37
+ || work.materialized.globalSequence > work.resolvedThrough) {
38
+ throw new Error('entity Apply materialization proof is invalid');
39
+ }
40
+ }
41
+ let through = work.records.at(-1).globalSequence;
42
+ if (work.intent !== null) {
43
+ (0, contracts_js_2.assertApplyIntent)(work.intent);
44
+ if (work.intent.authorityId !== work.authorityId
45
+ || work.intent.entityId !== work.entityId
46
+ || work.intent.fromSequence !== work.resolvedThrough) {
47
+ throw new Error('entity Apply intent does not own this work range');
48
+ }
49
+ through = work.intent.throughSequence;
50
+ }
51
+ const index = through - work.resolvedThrough - 1;
52
+ const target = work.records[index];
53
+ if (!target)
54
+ throw new Error('entity Apply intent target is absent from Inbox work');
55
+ if (work.intent !== null
56
+ && (target.mutationId !== work.intent.targetMutationId
57
+ || target.resultState !== work.intent.targetState
58
+ || target.change.result.type !== work.intent.targetType)) {
59
+ throw new Error('entity Apply intent target does not match its retained Inbox record');
60
+ }
61
+ return Object.freeze({
62
+ records: Object.freeze(work.records.slice(0, index + 1)),
63
+ target,
64
+ });
65
+ }
66
+ //# sourceMappingURL=selection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection.js","sourceRoot":"","sources":["../../src/apply/selection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ /** Bridge the canonical entity type registry to the Apply/Verify coordinator. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.entityApplyEffects = entityApplyEffects;
5
+ exports.buildEntityApplyEffects = buildEntityApplyEffects;
6
+ const adapter_contract_js_1 = require("../detection/adapter-contract.js");
7
+ const types_js_1 = require("../entities/types.js");
8
+ /**
9
+ * Adapt the already-convicted one-type/one-adapter registry for Apply. The
10
+ * subsystem refuses partial support: every type selected at runtime must bind
11
+ * both complete sockets, never a generic fallback or a path-based guess.
12
+ */
13
+ function entityApplyEffects(byType, captureLocal) {
14
+ const operational = new Map();
15
+ for (const [type, descriptor] of byType) {
16
+ if (!(0, types_js_1.isEntityType)(type)) {
17
+ throw new Error(`Apply adapter registry contains unknown entity type ${JSON.stringify(type)}`);
18
+ }
19
+ const { apply, verify } = descriptor.rails;
20
+ if (!apply || !verify) {
21
+ throw new Error(`adapter ${descriptor.name} cannot Apply ${type} until both Apply and Verify sockets are bound`);
22
+ }
23
+ operational.set(type, Object.freeze({ name: descriptor.name, apply, verify }));
24
+ }
25
+ return Object.freeze({
26
+ adapterFor(type) {
27
+ const adapter = operational.get(type);
28
+ if (!adapter)
29
+ throw new Error(`entity type ${type} has no operational Apply adapter`);
30
+ return adapter;
31
+ },
32
+ captureLocal(intent, plan, position) {
33
+ return captureLocal(intent, plan, position);
34
+ },
35
+ });
36
+ }
37
+ /** Build the universal physical-type registry, refusing any missing type. */
38
+ function buildEntityApplyEffects(adapters, captureLocal) {
39
+ return entityApplyEffects((0, adapter_contract_js_1.buildTypeMap)(adapters, types_js_1.ENTITY_TYPES), captureLocal);
40
+ }
41
+ //# sourceMappingURL=type-adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-adapters.js","sourceRoot":"","sources":["../../src/apply/type-adapters.ts"],"names":[],"mappings":";AAAA,iFAAiF;;AAkBjF,gDA6BC;AAGD,0DAKC;AArDD,0EAAwF;AACxF,mDAAmF;AAUnF;;;;GAIG;AACH,SAAgB,kBAAkB,CAChC,MAA8C,EAC9C,YAAgC;IAEhC,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6C,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,MAAM,EAAE,CAAC;QACxC,IAAI,CAAC,IAAA,uBAAY,EAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,uDAAuD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjG,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC;QAC3C,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,CAAC,IAAI,iBAAiB,IAAI,gDAAgD,CAAC,CAAC;QACnH,CAAC;QACD,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,UAAU,CAAC,IAAgB;YACzB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,eAAe,IAAI,mCAAmC,CAAC,CAAC;YACtF,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,YAAY,CACV,MAAyB,EACzB,IAAqB,EACrB,QAA0C;YAE1C,OAAO,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9C,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,6EAA6E;AAC7E,SAAgB,uBAAuB,CACrC,QAA2B,EAC3B,YAAgC;IAEhC,OAAO,kBAAkB,CAAC,IAAA,kCAAY,EAAC,QAAQ,EAAE,uBAAY,CAAC,EAAE,YAAY,CAAC,CAAC;AAChF,CAAC"}
@@ -44,15 +44,15 @@ exports.RAILS = Object.freeze([
44
44
  /**
45
45
  * The ratified sockets — for each rail that has one, the exact surfaces
46
46
  * every binding adapter implements. Same names, same shapes, every
47
- * type. ONE socket is ratified today (detect), derived from what
48
- * production detection actually asks of a type. Watch and record earn
49
- * none at this bar (adjudicated 2026-08-03 under axiom 7); apply and
50
- * verify join only when the Send/Receive rails exist to derive their
51
- * socket from. A socket is ratified from a real consumer or it is not
47
+ * type. Detect, Apply, and Verify are ratified from their real portable
48
+ * consumers. Watch, Record, Send, and Receive need no type-specific surface
49
+ * at this bar. A socket is ratified from a real consumer or it is not
52
50
  * ratified at all.
53
51
  */
54
52
  exports.SOCKETS = Object.freeze({
55
53
  detect: Object.freeze(['truth']),
54
+ apply: Object.freeze(['prepare', 'guard', 'reveal', 'discard']),
55
+ verify: Object.freeze(['verify']),
56
56
  });
57
57
  /**
58
58
  * Convict a malformed adapter descriptor loudly; return it (typed)
@@ -1 +1 @@
1
- {"version":3,"file":"adapter-contract.js","sourceRoot":"","sources":["../../src/detection/adapter-contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter-contract.js","sourceRoot":"","sources":["../../src/detection/adapter-contract.ts"],"names":[],"mappings":"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"}
@@ -16,7 +16,14 @@ function echoDecision(notebook, observed) {
16
16
  : { kind: 'retry', reason: observed.reason };
17
17
  }
18
18
  if (notebook.status === 'active') {
19
- return observed.truth === 'present' && observed.version === notebook.version
19
+ const exactTransport = notebook.transportVersion === null
20
+ ? observed.truth === 'present'
21
+ && (observed.transportVersion === undefined || observed.transportVersion === null)
22
+ : observed.truth === 'present'
23
+ && observed.transportVersion === notebook.transportVersion;
24
+ return observed.truth === 'present'
25
+ && observed.version === notebook.version
26
+ && exactTransport
20
27
  ? { kind: 'silence' }
21
28
  : { kind: 'detect' };
22
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"echo.js","sourceRoot":"","sources":["../../src/detection/echo.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAUH,oCAeC;AAfD,SAAgB,YAAY,CAC1B,QAAuD,EACvD,QAAsB;IAEtB,IAAI,QAAQ,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,MAAM,KAAK,SAAS;YAClC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;YACnB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO;YAC1E,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;YACrB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAChF,CAAC"}
1
+ {"version":3,"file":"echo.js","sourceRoot":"","sources":["../../src/detection/echo.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAUH,oCAsBC;AAtBD,SAAgB,YAAY,CAC1B,QAA4E,EAC5E,QAAsB;IAEtB,IAAI,QAAQ,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO,QAAQ,CAAC,MAAM,KAAK,SAAS;YAClC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE;YACnB,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IACjD,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,cAAc,GAAG,QAAQ,CAAC,gBAAgB,KAAK,IAAI;YACvD,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS;mBACzB,CAAC,QAAQ,CAAC,gBAAgB,KAAK,SAAS,IAAI,QAAQ,CAAC,gBAAgB,KAAK,IAAI,CAAC;YACpF,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS;mBACzB,QAAQ,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,CAAC;QAC/D,OAAO,QAAQ,CAAC,KAAK,KAAK,SAAS;eAC9B,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO;eACrC,cAAc;YACjB,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;YACrB,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACzB,CAAC;IACD,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAChF,CAAC"}
package/dist-cjs/index.js CHANGED
@@ -31,6 +31,7 @@ __exportStar(require("./entities/index.js"), exports);
31
31
  __exportStar(require("./watching/index.js"), exports);
32
32
  __exportStar(require("./detection/index.js"), exports);
33
33
  __exportStar(require("./records/index.js"), exports);
34
+ __exportStar(require("./apply/index.js"), exports);
34
35
  __exportStar(require("./registration/index.js"), exports);
35
36
  __exportStar(require("./files/index.js"), exports);
36
37
  __exportStar(require("./transfer/index.js"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;AAEH,uDAAqC;AACrC,sDAAoC;AACpC,sDAAoC;AACpC,sDAAoC;AACpC,uDAAqC;AACrC,qDAAmC;AACnC,0DAAwC;AACxC,mDAAiC;AACjC,sDAAoC;AACpC,mDAAiC;AACjC,uDAAqC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;;;;;;;;;;;;;;AAEH,uDAAqC;AACrC,sDAAoC;AACpC,sDAAoC;AACpC,sDAAoC;AACpC,uDAAqC;AACrC,qDAAmC;AACnC,mDAAiC;AACjC,0DAAwC;AACxC,mDAAiC;AACjC,sDAAoC;AACpC,mDAAiC;AACjC,uDAAqC"}
@@ -20,4 +20,6 @@ __exportStar(require("./codec.js"), exports);
20
20
  __exportStar(require("./contracts.js"), exports);
21
21
  __exportStar(require("./inbox.js"), exports);
22
22
  __exportStar(require("./outbox.js"), exports);
23
+ __exportStar(require("./rail.js"), exports);
24
+ __exportStar(require("./wire.js"), exports);
23
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/records/index.ts"],"names":[],"mappings":";AAAA,2EAA2E;;;;;;;;;;;;;;;;AAE3E,iDAA+B;AAC/B,6CAA2B;AAC3B,iDAA+B;AAC/B,6CAA2B;AAC3B,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/records/index.ts"],"names":[],"mappings":";AAAA,2EAA2E;;;;;;;;;;;;;;;;AAE3E,iDAA+B;AAC/B,6CAA2B;AAC3B,iDAA+B;AAC/B,6CAA2B;AAC3B,8CAA4B;AAC5B,4CAA0B;AAC1B,4CAA0B"}
@@ -0,0 +1,254 @@
1
+ "use strict";
2
+ /** Portable, event-driven Send and Receive orchestration. Hosts inject effects. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.EntityRecordRail = exports.ENTITY_RECORD_RETRY_MAX_MS = exports.ENTITY_RECORD_RETRY_BASE_MS = exports.ENTITY_RECORD_DELIVERY_LIMIT = void 0;
5
+ const outbox_js_1 = require("./outbox.js");
6
+ exports.ENTITY_RECORD_DELIVERY_LIMIT = 256;
7
+ exports.ENTITY_RECORD_RETRY_BASE_MS = 1_000;
8
+ exports.ENTITY_RECORD_RETRY_MAX_MS = 30_000;
9
+ /**
10
+ * One rail has only two reasons to run: local work exists, or authority work
11
+ * may exist. Repeated reasons coalesce while the current run is in flight.
12
+ */
13
+ class EntityRecordRail {
14
+ #authorityId;
15
+ #store;
16
+ #cargo;
17
+ #authority;
18
+ #schedule;
19
+ #onInboxCommitted;
20
+ #onBackgroundError;
21
+ #started = false;
22
+ #stopped = false;
23
+ #subscribed = false;
24
+ #needsSubscribe = false;
25
+ #needsSend = false;
26
+ #running = null;
27
+ #retry = null;
28
+ #retryAttempt = 0;
29
+ #removeAvailable = null;
30
+ #removeDisconnect = null;
31
+ constructor(options) {
32
+ if (!options.authorityId.trim())
33
+ throw new Error('entity record authority is required');
34
+ this.#authorityId = options.authorityId;
35
+ this.#store = options.store;
36
+ this.#cargo = options.cargo;
37
+ this.#authority = options.authority;
38
+ this.#schedule = options.schedule;
39
+ this.#onInboxCommitted = options.onInboxCommitted ?? (() => undefined);
40
+ this.#onBackgroundError = options.onBackgroundError ?? (() => undefined);
41
+ }
42
+ /** Subscribe first, catch up from the durable cursor, then drain local work. */
43
+ async start() {
44
+ if (this.#started)
45
+ throw new Error('entity record rail already started');
46
+ if (this.#stopped)
47
+ throw new Error('entity record rail is stopped');
48
+ this.#started = true;
49
+ this.#removeAvailable = this.#authority.onAvailable((signal) => {
50
+ if (signal.authorityId !== this.#authorityId || this.#stopped)
51
+ return;
52
+ this.#needsSubscribe = true;
53
+ this.#kick();
54
+ });
55
+ this.#removeDisconnect = this.#authority.onDisconnect(() => {
56
+ if (this.#stopped)
57
+ return;
58
+ this.#subscribed = false;
59
+ this.#needsSubscribe = true;
60
+ this.#scheduleRetry();
61
+ });
62
+ this.#needsSubscribe = true;
63
+ this.#needsSend = true;
64
+ await this.#runExplicitly();
65
+ }
66
+ /** Record calls this only after its local outbox transaction commits. */
67
+ localRecordsAvailable() {
68
+ if (this.#stopped)
69
+ return;
70
+ this.#needsSend = true;
71
+ if (this.#started)
72
+ this.#kick();
73
+ }
74
+ /** Await all work known at this boundary; it never creates an idle query. */
75
+ async flush() {
76
+ if (!this.#started)
77
+ throw new Error('entity record rail has not started');
78
+ if (this.#stopped)
79
+ return;
80
+ this.#needsSend = true;
81
+ if (!this.#subscribed)
82
+ this.#needsSubscribe = true;
83
+ await this.#runExplicitly();
84
+ }
85
+ /** Stop accepting events. Closing the injected wire may interrupt a request. */
86
+ async stop() {
87
+ if (this.#stopped)
88
+ return;
89
+ this.#stopped = true;
90
+ this.#cancelRetry();
91
+ this.#removeAvailable?.();
92
+ this.#removeAvailable = null;
93
+ this.#removeDisconnect?.();
94
+ this.#removeDisconnect = null;
95
+ await this.#running?.catch(() => undefined);
96
+ }
97
+ async #runExplicitly() {
98
+ this.#cancelRetry();
99
+ try {
100
+ await this.#ensureRun();
101
+ this.#retryAttempt = 0;
102
+ }
103
+ catch (error) {
104
+ this.#scheduleRetry();
105
+ throw error;
106
+ }
107
+ }
108
+ #kick() {
109
+ if (!this.#started || this.#stopped)
110
+ return;
111
+ this.#cancelRetry();
112
+ void this.#ensureRun().then(() => {
113
+ this.#retryAttempt = 0;
114
+ }, (error) => {
115
+ this.#onBackgroundError(error);
116
+ this.#scheduleRetry();
117
+ });
118
+ }
119
+ #ensureRun() {
120
+ if (this.#running)
121
+ return this.#running;
122
+ const running = this.#drain();
123
+ this.#running = running;
124
+ void running.then(() => {
125
+ if (this.#running === running)
126
+ this.#running = null;
127
+ if (!this.#stopped && (this.#needsSubscribe || this.#needsSend))
128
+ this.#kick();
129
+ }, () => {
130
+ if (this.#running === running)
131
+ this.#running = null;
132
+ });
133
+ return running;
134
+ }
135
+ async #drain() {
136
+ while (!this.#stopped && (this.#needsSubscribe || this.#needsSend)) {
137
+ if (this.#needsSubscribe) {
138
+ this.#needsSubscribe = false;
139
+ try {
140
+ await this.#catchUp();
141
+ this.#subscribed = true;
142
+ }
143
+ catch (error) {
144
+ this.#subscribed = false;
145
+ this.#needsSubscribe = true;
146
+ throw error;
147
+ }
148
+ }
149
+ if (this.#stopped)
150
+ return;
151
+ if (this.#needsSend) {
152
+ this.#needsSend = false;
153
+ try {
154
+ if (await this.#sendPending())
155
+ this.#needsSubscribe = true;
156
+ }
157
+ catch (error) {
158
+ this.#needsSend = true;
159
+ throw error;
160
+ }
161
+ }
162
+ }
163
+ }
164
+ async #catchUp() {
165
+ let after = await this.#store.readDeliveryCursor(this.#authorityId);
166
+ while (!this.#stopped) {
167
+ const deliveries = await this.#authority.subscribe({
168
+ authorityId: this.#authorityId,
169
+ afterDeliverySequence: after,
170
+ limit: exports.ENTITY_RECORD_DELIVERY_LIMIT,
171
+ });
172
+ if (deliveries.length === 0)
173
+ return;
174
+ let stored = await this.#store.receive({
175
+ authorityId: this.#authorityId,
176
+ deliveries,
177
+ advanceDeliveryCursor: true,
178
+ });
179
+ if (stored.kind === 'stored')
180
+ this.#onInboxCommitted();
181
+ if (stored.kind === 'gap') {
182
+ const missing = await this.#authority.backfill({
183
+ authorityId: this.#authorityId,
184
+ entityId: stored.gap.entityId,
185
+ afterGlobalSequence: stored.gap.after,
186
+ throughGlobalSequence: stored.gap.received,
187
+ });
188
+ if (missing.length === 0) {
189
+ throw new Error(`entity ${stored.gap.entityId} is missing sequence ${stored.gap.after + 1}`);
190
+ }
191
+ const repaired = await this.#store.receive({
192
+ authorityId: this.#authorityId,
193
+ deliveries: missing,
194
+ advanceDeliveryCursor: false,
195
+ });
196
+ if (repaired.kind === 'gap') {
197
+ throw new Error(`entity ${repaired.gap.entityId} history remained gapped after backfill`);
198
+ }
199
+ this.#onInboxCommitted();
200
+ stored = await this.#store.receive({
201
+ authorityId: this.#authorityId,
202
+ deliveries,
203
+ advanceDeliveryCursor: true,
204
+ });
205
+ if (stored.kind === 'gap') {
206
+ throw new Error(`entity ${stored.gap.entityId} history did not reach ${stored.gap.received}`);
207
+ }
208
+ this.#onInboxCommitted();
209
+ }
210
+ after = stored.deliveryCursor;
211
+ if (deliveries.length < exports.ENTITY_RECORD_DELIVERY_LIMIT)
212
+ return;
213
+ }
214
+ }
215
+ async #sendPending() {
216
+ let sent = false;
217
+ while (!this.#stopped) {
218
+ const pending = await this.#store.readPending();
219
+ const selected = (0, outbox_js_1.nextEntitySends)(pending);
220
+ if (selected.length === 0)
221
+ return sent;
222
+ const results = await Promise.allSettled(selected.map(async (row) => {
223
+ await this.#cargo.ensure(row.record);
224
+ if (this.#stopped)
225
+ return;
226
+ const accepted = await this.#authority.submit(row.record);
227
+ await this.#store.stampAccepted(row, accepted);
228
+ sent = true;
229
+ }));
230
+ const failure = results.find((result) => result.status === 'rejected');
231
+ if (failure)
232
+ throw failure.reason;
233
+ }
234
+ return sent;
235
+ }
236
+ #scheduleRetry() {
237
+ if (this.#stopped || this.#retry)
238
+ return;
239
+ const base = Math.min(exports.ENTITY_RECORD_RETRY_MAX_MS, exports.ENTITY_RECORD_RETRY_BASE_MS * (2 ** Math.min(this.#retryAttempt, 16)));
240
+ const random = Math.max(0, Math.min(1, this.#schedule.random()));
241
+ const delay = Math.round(base * (0.5 + random));
242
+ this.#retryAttempt += 1;
243
+ this.#retry = this.#schedule.schedule(delay, () => {
244
+ this.#retry = null;
245
+ this.#kick();
246
+ });
247
+ }
248
+ #cancelRetry() {
249
+ this.#retry?.cancel();
250
+ this.#retry = null;
251
+ }
252
+ }
253
+ exports.EntityRecordRail = EntityRecordRail;
254
+ //# sourceMappingURL=rail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rail.js","sourceRoot":"","sources":["../../src/records/rail.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ /** Exact wire for the entity Record/Send/Receive rail. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.decodeEntityRecordDeliveries = decodeEntityRecordDeliveries;
5
+ exports.decodeEntityRecordAvailability = decodeEntityRecordAvailability;
6
+ exports.createEntityRecordAuthorityPort = createEntityRecordAuthorityPort;
7
+ const validate_js_1 = require("../contracts/validate.js");
8
+ const codec_js_1 = require("./codec.js");
9
+ const positiveSequence = (value) => typeof value === 'number' && Number.isSafeInteger(value) && value > 0;
10
+ function decodeEntityRecordDeliveries(value) {
11
+ if (!Array.isArray(value))
12
+ throw new Error('entity record authority did not return a records array');
13
+ return Object.freeze(value.map((item) => {
14
+ if (!(0, validate_js_1.isRecord)(item)
15
+ || !positiveSequence(item.delivery_sequence)
16
+ || typeof item.record_json !== 'string') {
17
+ throw new Error('entity record authority returned an invalid delivery');
18
+ }
19
+ return Object.freeze({
20
+ deliverySequence: item.delivery_sequence,
21
+ record: (0, codec_js_1.decodeAcceptedEntityRecord)(item.record_json),
22
+ });
23
+ }));
24
+ }
25
+ function decodeEntityRecordAvailability(value) {
26
+ if (!(0, validate_js_1.isRecord)(value)
27
+ || value.type !== 'entity.record.available'
28
+ || typeof value.authority_id !== 'string'
29
+ || !value.authority_id) {
30
+ throw new Error('entity record availability signal is invalid');
31
+ }
32
+ return Object.freeze({
33
+ authorityId: value.authority_id,
34
+ });
35
+ }
36
+ /** Map one authenticated request/event wire onto the portable authority port. */
37
+ function createEntityRecordAuthorityPort(wire) {
38
+ return {
39
+ async submit(record) {
40
+ const frame = await wire.request({
41
+ type: 'entity.record.submit',
42
+ record_json: (0, codec_js_1.encodeEntityRecord)(record),
43
+ }, ['entity.record.ack']);
44
+ if (!(0, validate_js_1.isRecord)(frame) || frame.type !== 'entity.record.ack' || typeof frame.record_json !== 'string') {
45
+ throw new Error('entity record acknowledgement is invalid');
46
+ }
47
+ return (0, codec_js_1.decodeAcceptedEntityRecord)(frame.record_json);
48
+ },
49
+ async subscribe(input) {
50
+ const frame = await wire.request({
51
+ type: 'entity.record.subscribe',
52
+ authority_id: input.authorityId,
53
+ after_delivery_sequence: input.afterDeliverySequence,
54
+ limit: input.limit,
55
+ }, ['entity.record.subscribed']);
56
+ if (!(0, validate_js_1.isRecord)(frame) || frame.type !== 'entity.record.subscribed') {
57
+ throw new Error('entity record subscription response is invalid');
58
+ }
59
+ return decodeEntityRecordDeliveries(frame.records);
60
+ },
61
+ async backfill(input) {
62
+ const frame = await wire.request({
63
+ type: 'entity.record.backfill',
64
+ authority_id: input.authorityId,
65
+ entity_id: input.entityId,
66
+ after_global_sequence: input.afterGlobalSequence,
67
+ through_global_sequence: input.throughGlobalSequence,
68
+ }, ['entity.record.backfill-result']);
69
+ if (!(0, validate_js_1.isRecord)(frame) || frame.type !== 'entity.record.backfill-result') {
70
+ throw new Error('entity record backfill response is invalid');
71
+ }
72
+ return decodeEntityRecordDeliveries(frame.records);
73
+ },
74
+ onAvailable(listener) {
75
+ return wire.onFrame((frame) => {
76
+ if (!(0, validate_js_1.isRecord)(frame) || frame.type !== 'entity.record.available')
77
+ return;
78
+ try {
79
+ listener(decodeEntityRecordAvailability(frame));
80
+ }
81
+ catch {
82
+ // A malformed unsolicited frame is not authority evidence.
83
+ }
84
+ });
85
+ },
86
+ onDisconnect(listener) {
87
+ return wire.onDisconnect(listener);
88
+ },
89
+ };
90
+ }
91
+ //# sourceMappingURL=wire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../src/records/wire.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amalgm/live",
3
- "version": "0.2.29",
3
+ "version": "0.2.31",
4
4
  "description": "Portable realtime SDK for Amalgm — wire contracts, mutation discipline, and delivery state machines behind host-injected adapters.",
5
5
  "type": "module",
6
6
  "main": "./dist-cjs/index.js",
@@ -62,6 +62,12 @@
62
62
  "require": "./dist-cjs/records/index.js",
63
63
  "default": "./dist/records/index.js"
64
64
  },
65
+ "./apply": {
66
+ "types": "./dist/apply/index.d.ts",
67
+ "import": "./dist/apply/index.js",
68
+ "require": "./dist-cjs/apply/index.js",
69
+ "default": "./dist/apply/index.js"
70
+ },
65
71
  "./files": {
66
72
  "types": "./dist/files/index.d.ts",
67
73
  "import": "./dist/files/index.js",