@amalgm/live 0.2.80 → 0.2.85

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 (35) hide show
  1. package/PURPOSE.md +27 -3
  2. package/dist/apply/contracts.d.ts +23 -0
  3. package/dist/apply/contracts.d.ts.map +1 -1
  4. package/dist/apply/contracts.js.map +1 -1
  5. package/dist/apply/rail.d.ts.map +1 -1
  6. package/dist/apply/rail.js +55 -18
  7. package/dist/apply/rail.js.map +1 -1
  8. package/dist/apply/repository-result.d.ts +26 -1
  9. package/dist/apply/repository-result.d.ts.map +1 -1
  10. package/dist/apply/repository-result.js +57 -20
  11. package/dist/apply/repository-result.js.map +1 -1
  12. package/dist/detection/echo.d.ts +2 -1
  13. package/dist/detection/echo.d.ts.map +1 -1
  14. package/dist/detection/echo.js +8 -5
  15. package/dist/detection/echo.js.map +1 -1
  16. package/dist/files/index.d.ts +1 -0
  17. package/dist/files/index.d.ts.map +1 -1
  18. package/dist/files/index.js +1 -0
  19. package/dist/files/index.js.map +1 -1
  20. package/dist/files/retained-artifacts.d.ts +48 -0
  21. package/dist/files/retained-artifacts.d.ts.map +1 -0
  22. package/dist/files/retained-artifacts.js +150 -0
  23. package/dist/files/retained-artifacts.js.map +1 -0
  24. package/dist-cjs/apply/contracts.js.map +1 -1
  25. package/dist-cjs/apply/rail.js +55 -18
  26. package/dist-cjs/apply/rail.js.map +1 -1
  27. package/dist-cjs/apply/repository-result.js +58 -20
  28. package/dist-cjs/apply/repository-result.js.map +1 -1
  29. package/dist-cjs/detection/echo.js +9 -5
  30. package/dist-cjs/detection/echo.js.map +1 -1
  31. package/dist-cjs/files/index.js +1 -0
  32. package/dist-cjs/files/index.js.map +1 -1
  33. package/dist-cjs/files/retained-artifacts.js +154 -0
  34. package/dist-cjs/files/retained-artifacts.js.map +1 -0
  35. package/package.json +1 -1
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  /** Portable proof of one incremental Git Card + Checkpoint transport chain. */
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.prepareRepositorySuffix = prepareRepositorySuffix;
4
5
  exports.prepareRepositoryResult = prepareRepositoryResult;
5
6
  const repo_states_js_1 = require("../entities/repo-states.js");
6
7
  const portableRepositoryPath = (path) => path.length > 0
@@ -56,43 +57,47 @@ function assertTransportTruth(state, sha256Hex) {
56
57
  throw new Error(`repository Apply Checkpoint content failed verification for ${file.path}`);
57
58
  }
58
59
  }
59
- for (const entry of state.identityDelta.upsert) {
60
+ assertIdentityDeltaPaths(state.identityDelta);
61
+ }
62
+ function assertIdentityDeltaPaths(delta) {
63
+ for (const entry of delta.upsert) {
60
64
  if (!portableRepositoryPath(entry.path)) {
61
65
  throw new Error('repository Apply identity map has an unsafe path');
62
66
  }
63
67
  }
64
- if (state.identityDelta.remove.some((path) => !portableRepositoryPath(path))) {
68
+ if (delta.remove.some((path) => !portableRepositoryPath(path))) {
65
69
  throw new Error('repository Apply identity map has an unsafe removal path');
66
70
  }
67
71
  }
68
72
  /**
69
- * Verify a sealed transport suffix before a host invokes Git. With a null
70
- * base the chain must be complete from its reset node. With a durable local
71
- * base, the first incremental node must name that exact transport frontier.
73
+ * Prove that a host-verified immutable suffix extends exactly one base
74
+ * frontier and produces the accepted repository result. A null base demands
75
+ * a self-contained reset node. An exact base permits every older transport to
76
+ * be absent: its complete identity frontier, not mutable child rows, is the
77
+ * only portable predecessor truth.
72
78
  */
73
- function prepareRepositoryResult(plan, nodes, base, sha256Hex) {
79
+ function prepareRepositorySuffix(plan, nodes, base, sha256Hex) {
74
80
  if (nodes.length === 0)
75
- throw new Error('repository Apply transport chain is empty');
76
- let priorVersion = base.transportVersion;
77
- let identity = base.identity;
81
+ throw new Error('repository Apply transport suffix is empty');
78
82
  if ((base.transportVersion === null) !== (base.identity === null)) {
79
83
  throw new Error('repository Apply base frontier is incomplete');
80
84
  }
81
- const transports = [];
85
+ let priorVersion = base.transportVersion;
86
+ let identity = base.identity;
87
+ const versions = new Set();
82
88
  for (const node of nodes) {
83
- if (sha256Hex(node.bytes) !== node.transportVersion) {
84
- throw new Error('repository Apply transport failed its immutable hash');
89
+ if (!/^[0-9a-f]{64}$/.test(node.transportVersion) || versions.has(node.transportVersion)) {
90
+ throw new Error('repository Apply transport suffix has an invalid or repeated identity');
85
91
  }
86
- const state = (0, repo_states_js_1.decodeRepositoryTransport)(node.bytes);
87
- if (state.parentTransportVersion !== priorVersion) {
92
+ versions.add(node.transportVersion);
93
+ if (node.parentTransportVersion !== priorVersion) {
88
94
  throw new Error('repository Apply transport chain is discontinuous');
89
95
  }
90
- assertTransportTruth(state, sha256Hex);
91
- identity = (0, repo_states_js_1.applyRepositoryIdentity)(identity, state, sha256Hex);
92
- transports.push(state);
96
+ assertIdentityDeltaPaths(node.identityDelta);
97
+ identity = (0, repo_states_js_1.applyRepositoryIdentity)(identity, node, sha256Hex);
93
98
  priorVersion = node.transportVersion;
94
99
  }
95
- const latest = transports.at(-1);
100
+ const latest = nodes.at(-1);
96
101
  if (priorVersion !== plan.transportVersion
97
102
  || latest.parentTransportVersion !== plan.parentTransportVersion
98
103
  || latest.stateId !== plan.stateId
@@ -100,6 +105,39 @@ function prepareRepositoryResult(plan, nodes, base, sha256Hex) {
100
105
  || latest.checkpointId !== plan.checkpointId) {
101
106
  throw new Error('repository Apply chain does not produce its accepted complete result');
102
107
  }
108
+ return Object.freeze({
109
+ baseTransportVersion: base.transportVersion,
110
+ transportVersion: priorVersion,
111
+ identity: Object.freeze([...identity]),
112
+ });
113
+ }
114
+ /**
115
+ * Verify a sealed transport suffix before a host invokes Git. With a null
116
+ * base the chain must be complete from its reset node. With a durable local
117
+ * base, the first incremental node must name that exact transport frontier.
118
+ */
119
+ function prepareRepositoryResult(plan, nodes, base, sha256Hex) {
120
+ if (nodes.length === 0)
121
+ throw new Error('repository Apply transport chain is empty');
122
+ const transports = [];
123
+ for (const node of nodes) {
124
+ if (sha256Hex(node.bytes) !== node.transportVersion) {
125
+ throw new Error('repository Apply transport failed its immutable hash');
126
+ }
127
+ const state = (0, repo_states_js_1.decodeRepositoryTransport)(node.bytes);
128
+ assertTransportTruth(state, sha256Hex);
129
+ transports.push(state);
130
+ }
131
+ const suffix = prepareRepositorySuffix(plan, transports.map((state, index) => ({
132
+ transportVersion: nodes[index].transportVersion,
133
+ stateId: state.stateId,
134
+ cardId: state.cardId,
135
+ checkpointId: state.checkpointId,
136
+ parentTransportVersion: state.parentTransportVersion,
137
+ identityHash: state.identityHash,
138
+ identityDelta: state.identityDelta,
139
+ })), base, sha256Hex);
140
+ const latest = transports.at(-1);
103
141
  const missingUntracked = latest.checkpoint.untracked.find((file) => file.content === null);
104
142
  if (missingUntracked) {
105
143
  throw new Error(`repository Apply Checkpoint omitted untracked content for ${missingUntracked.path}`);
@@ -111,8 +149,8 @@ function prepareRepositoryResult(plan, nodes, base, sha256Hex) {
111
149
  return Object.freeze({
112
150
  transports: Object.freeze(transports),
113
151
  latest,
114
- transportVersion: priorVersion,
115
- identity: Object.freeze([...identity]),
152
+ transportVersion: suffix.transportVersion,
153
+ identity: suffix.identity,
116
154
  });
117
155
  }
118
156
  //# sourceMappingURL=repository-result.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"repository-result.js","sourceRoot":"","sources":["../../src/apply/repository-result.ts"],"names":[],"mappings":";AAAA,+EAA+E;;AAoG/E,0DAiDC;AAnJD,+DAQoC;AAqBpC,MAAM,sBAAsB,GAAG,CAAC,IAAY,EAAW,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;OACpE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;OACrB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;OACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC;AAEnF,SAAS,oBAAoB,CAAC,KAA0B,EAAE,SAAoB;IAC5E,MAAM,MAAM,GAAG,IAAA,6BAAY,EAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,IAAA,mCAAkB,EAAC,KAAK,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,IAAA,8BAAa,EAAC,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;IAC/D,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,YAAY,KAAK,YAAY,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAChG,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QACjC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;eACjE,QAAQ,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC;eAC5B,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBAChC,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;uBACxC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;uBACxB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;uBAC7D,+BAA+B,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBAC1D,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACxB,OAAO,CAAC,KAAK,CAAC;YAChB,CAAC,CAAC,EAAE,CAAC;YACL,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC7F,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;mBAC/D,QAAQ,CAAC,QAAQ,CAAC,OAAO,KAAK,IAAI;mBAClC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACvE,MAAM,IAAI,KAAK,CAAC,wEAAwE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3G,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;IAC7C,IAAI,SAAS,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;WAChF,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,+BAA+B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;QAC9C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;eACzD,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;QACvF,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,+DAA+D,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QAC/C,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IACD,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,uBAAuB,CACrC,IAAyB,EACzB,KAA2C,EAC3C,IAAyB,EACzB,SAAoB;IAEpB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IACrF,IAAI,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACzC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC7B,IAAI,CAAC,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,UAAU,GAA0B,EAAE,CAAC;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,KAAK,GAAG,IAAA,0CAAyB,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,KAAK,CAAC,sBAAsB,KAAK,YAAY,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QACD,oBAAoB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QACvC,QAAQ,GAAG,IAAA,wCAAuB,EAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC/D,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC;IACvC,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAwB,CAAC;IACxD,IAAI,YAAY,KAAK,IAAI,CAAC,gBAAgB;WACrC,MAAM,CAAC,sBAAsB,KAAK,IAAI,CAAC,sBAAsB;WAC7D,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;WAC/B,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;WAC7B,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;IAC3F,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,6DAA6D,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC;IACxG,CAAC;IACD,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAChE,KAAK,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;IAC9D,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,4DAA4D,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;IACtG,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;QACrC,MAAM;QACN,gBAAgB,EAAE,YAAY;QAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAI,QAAyC,CAAC,CAAC;KACzE,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"repository-result.js","sourceRoot":"","sources":["../../src/apply/repository-result.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@
9
9
  */
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.echoDecision = echoDecision;
12
+ exports.entityRecordResultCoversDetection = entityRecordResultCoversDetection;
12
13
  exports.acceptedResultCoversDetection = acceptedResultCoversDetection;
13
14
  const cloud_js_1 = require("../entities/cloud.js");
14
15
  function echoDecision(notebook, observed) {
@@ -43,11 +44,14 @@ function echoDecision(notebook, observed) {
43
44
  * whole-result LWW. Different result bytes, address, type, lifecycle, replay,
44
45
  * or repository identity transport still require a new local record.
45
46
  */
47
+ function entityRecordResultCoversDetection(record, proposal) {
48
+ return record.entityId === proposal.entityId
49
+ && record.resultState === proposal.result.version
50
+ && (0, cloud_js_1.stableJson)(record.change.result) === (0, cloud_js_1.stableJson)(proposal.result)
51
+ && (0, cloud_js_1.stableJson)(record.change.replay) === (0, cloud_js_1.stableJson)(proposal.replay)
52
+ && (0, cloud_js_1.stableJson)(record.change.cargo) === (0, cloud_js_1.stableJson)(proposal.cargo);
53
+ }
46
54
  function acceptedResultCoversDetection(accepted, proposal) {
47
- return accepted.entityId === proposal.entityId
48
- && accepted.resultState === proposal.result.version
49
- && (0, cloud_js_1.stableJson)(accepted.change.result) === (0, cloud_js_1.stableJson)(proposal.result)
50
- && (0, cloud_js_1.stableJson)(accepted.change.replay) === (0, cloud_js_1.stableJson)(proposal.replay)
51
- && (0, cloud_js_1.stableJson)(accepted.change.cargo) === (0, cloud_js_1.stableJson)(proposal.cargo);
55
+ return entityRecordResultCoversDetection(accepted, proposal);
52
56
  }
53
57
  //# sourceMappingURL=echo.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"echo.js","sourceRoot":"","sources":["../../src/detection/echo.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAYH,oCAsBC;AAcD,sEASC;AAtDD,mDAA0E;AAS1E,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;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,6BAA6B,CAC3C,QAA8B,EAC9B,QAAgC;IAEhC,OAAO,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;WACzC,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,MAAM,CAAC,OAAO;WAChD,IAAA,qBAAU,EAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAA,qBAAU,EAAC,QAAQ,CAAC,MAAM,CAAC;WAClE,IAAA,qBAAU,EAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAA,qBAAU,EAAC,QAAQ,CAAC,MAAM,CAAC;WAClE,IAAA,qBAAU,EAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAA,qBAAU,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC"}
1
+ {"version":3,"file":"echo.js","sourceRoot":"","sources":["../../src/detection/echo.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAYH,oCAsBC;AAcD,8EASC;AAED,sEAKC;AA7DD,mDAA0E;AAS1E,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;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,iCAAiC,CAC/C,MAAsE,EACtE,QAAgC;IAEhC,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,QAAQ;WACvC,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,MAAM,CAAC,OAAO;WAC9C,IAAA,qBAAU,EAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAA,qBAAU,EAAC,QAAQ,CAAC,MAAM,CAAC;WAChE,IAAA,qBAAU,EAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAA,qBAAU,EAAC,QAAQ,CAAC,MAAM,CAAC;WAChE,IAAA,qBAAU,EAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAA,qBAAU,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,SAAgB,6BAA6B,CAC3C,QAA8B,EAC9B,QAAgC;IAEhC,OAAO,iCAAiC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAC/D,CAAC"}
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  /** Files product operations. Hosts own effects; Live owns decisions. */
18
18
  __exportStar(require("./commands.js"), exports);
19
+ __exportStar(require("./retained-artifacts.js"), exports);
19
20
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/files/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wEAAwE;AACxE,gDAA8B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/files/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wEAAwE;AACxE,gDAA8B;AAC9B,0DAAwC"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ /**
3
+ * Read-only proof that exact immutable heads retained by cloud authority are
4
+ * still fetchable through the product's authenticated content plane.
5
+ *
6
+ * This operation never materializes entity ground and never treats a manifest
7
+ * row as proof. The host must freshly read and verify every requested artifact;
8
+ * Live owns the type law and the complete repository dependency walk.
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.checkRetainedArtifactHeads = checkRetainedArtifactHeads;
12
+ exports.verifyRetainedArtifacts = verifyRetainedArtifacts;
13
+ const types_js_1 = require("../entities/types.js");
14
+ const artifacts_js_1 = require("../transfer/artifacts.js");
15
+ const SHA256 = /^[0-9a-f]{64}$/;
16
+ function hash(value, label) {
17
+ if (typeof value !== 'string' || !SHA256.test(value)) {
18
+ throw new Error(`${label} must be a sha256 hex digest`);
19
+ }
20
+ return value;
21
+ }
22
+ function assertHead(head) {
23
+ if (!types_js_1.UUID_PATTERN.test(head.artifact.entityId)) {
24
+ throw new Error('retained artifact entity id must be a UUID');
25
+ }
26
+ (0, artifacts_js_1.assertTransferArtifact)(head.artifact);
27
+ hash(head.artifact.contentHash, 'retained artifact head');
28
+ if (head.artifact.kind === 'git') {
29
+ hash(head.expectedStateId, 'retained repository state');
30
+ }
31
+ else if (head.expectedStateId !== null) {
32
+ throw new Error('only a Git retained artifact may name an expected repository state');
33
+ }
34
+ }
35
+ /** Validate the JSON boundary used by authenticated runtime adapters. */
36
+ function checkRetainedArtifactHeads(value) {
37
+ if (!Array.isArray(value))
38
+ throw new Error('retained artifact heads must be an array');
39
+ return value.map((candidate, index) => {
40
+ if (!candidate || typeof candidate !== 'object' || Array.isArray(candidate)) {
41
+ throw new Error(`retained artifact head ${index} must be an object`);
42
+ }
43
+ const artifact = candidate.artifact;
44
+ if (!artifact || typeof artifact !== 'object' || Array.isArray(artifact)) {
45
+ throw new Error(`retained artifact head ${index} has no artifact`);
46
+ }
47
+ const typedArtifact = {
48
+ entityId: String(artifact.entityId ?? ''),
49
+ entityType: String(artifact.entityType ?? ''),
50
+ kind: String(artifact.kind ?? ''),
51
+ contentHash: String(artifact.contentHash ?? ''),
52
+ };
53
+ const expected = candidate.expectedStateId;
54
+ const head = {
55
+ artifact: typedArtifact,
56
+ expectedStateId: expected === null ? null : String(expected ?? ''),
57
+ };
58
+ assertHead(head);
59
+ return head;
60
+ });
61
+ }
62
+ function provenRead(reads, contentHash) {
63
+ const read = reads.get(contentHash);
64
+ if (!read)
65
+ throw new Error(`retained artifact ${contentHash} was not read`);
66
+ if (read.contentHash !== contentHash) {
67
+ throw new Error(`retained artifact ${contentHash} returned the wrong content hash`);
68
+ }
69
+ if (!Number.isSafeInteger(read.bytes) || read.bytes < 0) {
70
+ throw new Error(`retained artifact ${contentHash} returned an invalid byte count`);
71
+ }
72
+ return read;
73
+ }
74
+ async function readWave(artifacts, ports) {
75
+ const unique = new Map();
76
+ for (const artifact of artifacts) {
77
+ if (!unique.has(artifact.contentHash))
78
+ unique.set(artifact.contentHash, artifact);
79
+ }
80
+ const reads = await ports.readExact([...unique.values()]);
81
+ for (const contentHash of unique.keys())
82
+ provenRead(reads, contentHash);
83
+ return reads;
84
+ }
85
+ /**
86
+ * Prove exact retained heads and, for Git, every immutable parent transport.
87
+ * The input order is preserved in the result.
88
+ */
89
+ async function verifyRetainedArtifacts(heads, ports) {
90
+ const checkedHeads = checkRetainedArtifactHeads(heads);
91
+ if (checkedHeads.length === 0)
92
+ return [];
93
+ const headReads = await readWave(checkedHeads.map((head) => head.artifact), ports);
94
+ const git = [];
95
+ const byInput = new Map();
96
+ for (const input of checkedHeads) {
97
+ if (input.artifact.kind !== 'git')
98
+ continue;
99
+ const head = provenRead(headReads, input.artifact.contentHash);
100
+ const layout = ports.inspectRepositoryTransport(head.local);
101
+ if (layout.stateId !== input.expectedStateId) {
102
+ throw new Error(`retained repository ${input.artifact.entityId} head names the wrong state`);
103
+ }
104
+ const parent = layout.parentTransportVersion;
105
+ if (parent !== null)
106
+ hash(parent, 'retained repository parent transport');
107
+ const walk = {
108
+ input,
109
+ head,
110
+ seen: new Set([input.artifact.contentHash]),
111
+ parentsNewestFirst: [],
112
+ parent,
113
+ };
114
+ git.push(walk);
115
+ byInput.set(input, walk);
116
+ }
117
+ for (let frontier = git.filter((walk) => walk.parent !== null); frontier.length > 0; frontier = git.filter((walk) => walk.parent !== null)) {
118
+ const wanted = frontier.map((walk) => ({
119
+ ...walk.input.artifact,
120
+ contentHash: walk.parent,
121
+ }));
122
+ const reads = await readWave(wanted, ports);
123
+ for (const walk of frontier) {
124
+ const parentHash = walk.parent;
125
+ if (walk.seen.has(parentHash)) {
126
+ throw new Error(`retained repository ${walk.input.artifact.entityId} transport chain has a cycle`);
127
+ }
128
+ walk.seen.add(parentHash);
129
+ const parent = provenRead(reads, parentHash);
130
+ walk.parentsNewestFirst.push(parent);
131
+ const layout = ports.inspectRepositoryTransport(parent.local);
132
+ if (layout.parentTransportVersion !== null) {
133
+ hash(layout.parentTransportVersion, 'retained repository parent transport');
134
+ }
135
+ walk.parent = layout.parentTransportVersion;
136
+ }
137
+ }
138
+ return checkedHeads.map((input) => {
139
+ const head = provenRead(headReads, input.artifact.contentHash);
140
+ const walk = byInput.get(input);
141
+ return {
142
+ artifact: input.artifact,
143
+ expectedStateId: input.expectedStateId,
144
+ head: { contentHash: head.contentHash, bytes: head.bytes },
145
+ dependencyClosure: walk
146
+ ? [...walk.parentsNewestFirst].reverse().map((parent) => ({
147
+ contentHash: parent.contentHash,
148
+ bytes: parent.bytes,
149
+ }))
150
+ : [],
151
+ };
152
+ });
153
+ }
154
+ //# sourceMappingURL=retained-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retained-artifacts.js","sourceRoot":"","sources":["../../src/files/retained-artifacts.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.80",
3
+ "version": "0.2.85",
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",