@bsv/overlay 2.3.1 → 2.6.1

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 (201) hide show
  1. package/README.md +166 -0
  2. package/dist/cjs/mod.d.ts +3 -0
  3. package/dist/cjs/mod.d.ts.map +1 -1
  4. package/dist/cjs/mod.js +8 -1
  5. package/dist/cjs/mod.js.map +1 -1
  6. package/dist/cjs/package.json +10 -4
  7. package/dist/cjs/src/BASM.d.ts +6 -0
  8. package/dist/cjs/src/BASM.d.ts.map +1 -1
  9. package/dist/cjs/src/BASM.js +21 -8
  10. package/dist/cjs/src/BASM.js.map +1 -1
  11. package/dist/cjs/src/BASMRemote.d.ts +8 -1
  12. package/dist/cjs/src/BASMRemote.d.ts.map +1 -1
  13. package/dist/cjs/src/BASMRemote.js +179 -13
  14. package/dist/cjs/src/BASMRemote.js.map +1 -1
  15. package/dist/cjs/src/BASMValidation.d.ts +27 -0
  16. package/dist/cjs/src/BASMValidation.d.ts.map +1 -0
  17. package/dist/cjs/src/BASMValidation.js +108 -0
  18. package/dist/cjs/src/BASMValidation.js.map +1 -0
  19. package/dist/cjs/src/DiscoveryAdvertisementValidation.d.ts +11 -0
  20. package/dist/cjs/src/DiscoveryAdvertisementValidation.d.ts.map +1 -0
  21. package/dist/cjs/src/DiscoveryAdvertisementValidation.js +60 -0
  22. package/dist/cjs/src/DiscoveryAdvertisementValidation.js.map +1 -0
  23. package/dist/cjs/src/Engine.d.ts +37 -13
  24. package/dist/cjs/src/Engine.d.ts.map +1 -1
  25. package/dist/cjs/src/Engine.js +1713 -336
  26. package/dist/cjs/src/Engine.js.map +1 -1
  27. package/dist/cjs/src/EngineAdmission.d.ts +70 -0
  28. package/dist/cjs/src/EngineAdmission.d.ts.map +1 -0
  29. package/dist/cjs/src/EngineAdmission.js +297 -0
  30. package/dist/cjs/src/EngineAdmission.js.map +1 -0
  31. package/dist/cjs/src/GASP/OverlayGASPRemote.d.ts +4 -3
  32. package/dist/cjs/src/GASP/OverlayGASPRemote.d.ts.map +1 -1
  33. package/dist/cjs/src/GASP/OverlayGASPRemote.js +27 -43
  34. package/dist/cjs/src/GASP/OverlayGASPRemote.js.map +1 -1
  35. package/dist/cjs/src/GASP/OverlayGASPStorage.d.ts +22 -16
  36. package/dist/cjs/src/GASP/OverlayGASPStorage.d.ts.map +1 -1
  37. package/dist/cjs/src/GASP/OverlayGASPStorage.js +206 -57
  38. package/dist/cjs/src/GASP/OverlayGASPStorage.js.map +1 -1
  39. package/dist/cjs/src/RemoteSecurity.d.ts +50 -0
  40. package/dist/cjs/src/RemoteSecurity.d.ts.map +1 -0
  41. package/dist/cjs/src/RemoteSecurity.js +301 -0
  42. package/dist/cjs/src/RemoteSecurity.js.map +1 -0
  43. package/dist/cjs/src/storage/AdmissionStorage.d.ts +185 -0
  44. package/dist/cjs/src/storage/AdmissionStorage.d.ts.map +1 -0
  45. package/dist/cjs/src/storage/AdmissionStorage.js +93 -0
  46. package/dist/cjs/src/storage/AdmissionStorage.js.map +1 -0
  47. package/dist/cjs/src/storage/RecoveryContract.d.ts +50 -0
  48. package/dist/cjs/src/storage/RecoveryContract.d.ts.map +1 -0
  49. package/dist/cjs/src/storage/RecoveryContract.js +35 -0
  50. package/dist/cjs/src/storage/RecoveryContract.js.map +1 -0
  51. package/dist/cjs/src/storage/Storage.d.ts +32 -19
  52. package/dist/cjs/src/storage/Storage.d.ts.map +1 -1
  53. package/dist/cjs/src/storage/Storage.js +5 -0
  54. package/dist/cjs/src/storage/Storage.js.map +1 -1
  55. package/dist/cjs/src/storage/knex/KnexStorage.d.ts +8 -8
  56. package/dist/cjs/src/storage/knex/KnexStorage.d.ts.map +1 -1
  57. package/dist/cjs/src/storage/knex/KnexStorage.js +98 -61
  58. package/dist/cjs/src/storage/knex/KnexStorage.js.map +1 -1
  59. package/dist/cjs/src/storage/knex/all-migrations.d.ts.map +1 -1
  60. package/dist/cjs/src/storage/knex/all-migrations.js +5 -1
  61. package/dist/cjs/src/storage/knex/all-migrations.js.map +1 -1
  62. package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts +4 -0
  63. package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts.map +1 -0
  64. package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js +36 -0
  65. package/dist/cjs/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js.map +1 -0
  66. package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts +5 -0
  67. package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts.map +1 -0
  68. package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.js +16 -0
  69. package/dist/cjs/src/storage/knex/migrations/2026-09-20-001-spent-by.js.map +1 -0
  70. package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.d.ts +18 -0
  71. package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.d.ts.map +1 -0
  72. package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.js +229 -0
  73. package/dist/cjs/src/storage/mongo/MongoAdmissionPlan.js.map +1 -0
  74. package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.d.ts +112 -0
  75. package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.d.ts.map +1 -0
  76. package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.js +675 -0
  77. package/dist/cjs/src/storage/mongo/MongoAdmissionStorage.js.map +1 -0
  78. package/dist/cjs/src/storage/mongo/MongoOverlayStorage.d.ts +71 -0
  79. package/dist/cjs/src/storage/mongo/MongoOverlayStorage.d.ts.map +1 -0
  80. package/dist/cjs/src/storage/mongo/MongoOverlayStorage.js +453 -0
  81. package/dist/cjs/src/storage/mongo/MongoOverlayStorage.js.map +1 -0
  82. package/dist/cjs/src/storage/mongo/MongoPayloadStore.d.ts +134 -0
  83. package/dist/cjs/src/storage/mongo/MongoPayloadStore.d.ts.map +1 -0
  84. package/dist/cjs/src/storage/mongo/MongoPayloadStore.js +756 -0
  85. package/dist/cjs/src/storage/mongo/MongoPayloadStore.js.map +1 -0
  86. package/dist/cjs/src/storage/mongo/MongoReadGuards.d.ts +44 -0
  87. package/dist/cjs/src/storage/mongo/MongoReadGuards.d.ts.map +1 -0
  88. package/dist/cjs/src/storage/mongo/MongoReadGuards.js +135 -0
  89. package/dist/cjs/src/storage/mongo/MongoReadGuards.js.map +1 -0
  90. package/dist/cjs/src/storage/mongo/MongoSchema.d.ts +67 -0
  91. package/dist/cjs/src/storage/mongo/MongoSchema.d.ts.map +1 -0
  92. package/dist/cjs/src/storage/mongo/MongoSchema.js +743 -0
  93. package/dist/cjs/src/storage/mongo/MongoSchema.js.map +1 -0
  94. package/dist/cjs/src/storage/mongo/MongoTransactionRunner.d.ts +69 -0
  95. package/dist/cjs/src/storage/mongo/MongoTransactionRunner.d.ts.map +1 -0
  96. package/dist/cjs/src/storage/mongo/MongoTransactionRunner.js +368 -0
  97. package/dist/cjs/src/storage/mongo/MongoTransactionRunner.js.map +1 -0
  98. package/dist/cjs/src/storage/mongo.d.ts +9 -0
  99. package/dist/cjs/src/storage/mongo.d.ts.map +1 -0
  100. package/dist/cjs/src/storage/mongo.js +25 -0
  101. package/dist/cjs/src/storage/mongo.js.map +1 -0
  102. package/dist/esm/mod.js +3 -0
  103. package/dist/esm/mod.js.map +1 -1
  104. package/dist/esm/src/BASM.js +21 -8
  105. package/dist/esm/src/BASM.js.map +1 -1
  106. package/dist/esm/src/BASMRemote.js +176 -12
  107. package/dist/esm/src/BASMRemote.js.map +1 -1
  108. package/dist/esm/src/BASMValidation.js +95 -0
  109. package/dist/esm/src/BASMValidation.js.map +1 -0
  110. package/dist/esm/src/DiscoveryAdvertisementValidation.js +57 -0
  111. package/dist/esm/src/DiscoveryAdvertisementValidation.js.map +1 -0
  112. package/dist/esm/src/Engine.js +1698 -326
  113. package/dist/esm/src/Engine.js.map +1 -1
  114. package/dist/esm/src/EngineAdmission.js +280 -0
  115. package/dist/esm/src/EngineAdmission.js.map +1 -0
  116. package/dist/esm/src/GASP/OverlayGASPRemote.js +27 -43
  117. package/dist/esm/src/GASP/OverlayGASPRemote.js.map +1 -1
  118. package/dist/esm/src/GASP/OverlayGASPStorage.js +200 -56
  119. package/dist/esm/src/GASP/OverlayGASPStorage.js.map +1 -1
  120. package/dist/esm/src/RemoteSecurity.js +279 -0
  121. package/dist/esm/src/RemoteSecurity.js.map +1 -0
  122. package/dist/esm/src/storage/AdmissionStorage.js +85 -0
  123. package/dist/esm/src/storage/AdmissionStorage.js.map +1 -0
  124. package/dist/esm/src/storage/RecoveryContract.js +31 -0
  125. package/dist/esm/src/storage/RecoveryContract.js.map +1 -0
  126. package/dist/esm/src/storage/Storage.js +4 -1
  127. package/dist/esm/src/storage/Storage.js.map +1 -1
  128. package/dist/esm/src/storage/knex/KnexStorage.js +98 -61
  129. package/dist/esm/src/storage/knex/KnexStorage.js.map +1 -1
  130. package/dist/esm/src/storage/knex/all-migrations.js +5 -1
  131. package/dist/esm/src/storage/knex/all-migrations.js.map +1 -1
  132. package/dist/esm/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js +32 -0
  133. package/dist/esm/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.js.map +1 -0
  134. package/dist/esm/src/storage/knex/migrations/2026-09-20-001-spent-by.js +12 -0
  135. package/dist/esm/src/storage/knex/migrations/2026-09-20-001-spent-by.js.map +1 -0
  136. package/dist/esm/src/storage/mongo/MongoAdmissionPlan.js +217 -0
  137. package/dist/esm/src/storage/mongo/MongoAdmissionPlan.js.map +1 -0
  138. package/dist/esm/src/storage/mongo/MongoAdmissionStorage.js +673 -0
  139. package/dist/esm/src/storage/mongo/MongoAdmissionStorage.js.map +1 -0
  140. package/dist/esm/src/storage/mongo/MongoOverlayStorage.js +451 -0
  141. package/dist/esm/src/storage/mongo/MongoOverlayStorage.js.map +1 -0
  142. package/dist/esm/src/storage/mongo/MongoPayloadStore.js +747 -0
  143. package/dist/esm/src/storage/mongo/MongoPayloadStore.js.map +1 -0
  144. package/dist/esm/src/storage/mongo/MongoReadGuards.js +129 -0
  145. package/dist/esm/src/storage/mongo/MongoReadGuards.js.map +1 -0
  146. package/dist/esm/src/storage/mongo/MongoSchema.js +730 -0
  147. package/dist/esm/src/storage/mongo/MongoSchema.js.map +1 -0
  148. package/dist/esm/src/storage/mongo/MongoTransactionRunner.js +371 -0
  149. package/dist/esm/src/storage/mongo/MongoTransactionRunner.js.map +1 -0
  150. package/dist/esm/src/storage/mongo.js +9 -0
  151. package/dist/esm/src/storage/mongo.js.map +1 -0
  152. package/dist/types/mod.d.ts +3 -0
  153. package/dist/types/mod.d.ts.map +1 -1
  154. package/dist/types/src/BASM.d.ts +6 -0
  155. package/dist/types/src/BASM.d.ts.map +1 -1
  156. package/dist/types/src/BASMRemote.d.ts +8 -1
  157. package/dist/types/src/BASMRemote.d.ts.map +1 -1
  158. package/dist/types/src/BASMValidation.d.ts +27 -0
  159. package/dist/types/src/BASMValidation.d.ts.map +1 -0
  160. package/dist/types/src/DiscoveryAdvertisementValidation.d.ts +11 -0
  161. package/dist/types/src/DiscoveryAdvertisementValidation.d.ts.map +1 -0
  162. package/dist/types/src/Engine.d.ts +37 -13
  163. package/dist/types/src/Engine.d.ts.map +1 -1
  164. package/dist/types/src/EngineAdmission.d.ts +70 -0
  165. package/dist/types/src/EngineAdmission.d.ts.map +1 -0
  166. package/dist/types/src/GASP/OverlayGASPRemote.d.ts +4 -3
  167. package/dist/types/src/GASP/OverlayGASPRemote.d.ts.map +1 -1
  168. package/dist/types/src/GASP/OverlayGASPStorage.d.ts +22 -16
  169. package/dist/types/src/GASP/OverlayGASPStorage.d.ts.map +1 -1
  170. package/dist/types/src/RemoteSecurity.d.ts +50 -0
  171. package/dist/types/src/RemoteSecurity.d.ts.map +1 -0
  172. package/dist/types/src/storage/AdmissionStorage.d.ts +185 -0
  173. package/dist/types/src/storage/AdmissionStorage.d.ts.map +1 -0
  174. package/dist/types/src/storage/RecoveryContract.d.ts +50 -0
  175. package/dist/types/src/storage/RecoveryContract.d.ts.map +1 -0
  176. package/dist/types/src/storage/Storage.d.ts +32 -19
  177. package/dist/types/src/storage/Storage.d.ts.map +1 -1
  178. package/dist/types/src/storage/knex/KnexStorage.d.ts +8 -8
  179. package/dist/types/src/storage/knex/KnexStorage.d.ts.map +1 -1
  180. package/dist/types/src/storage/knex/all-migrations.d.ts.map +1 -1
  181. package/dist/types/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts +4 -0
  182. package/dist/types/src/storage/knex/migrations/2026-09-17-001-topical-uniqueness.d.ts.map +1 -0
  183. package/dist/types/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts +5 -0
  184. package/dist/types/src/storage/knex/migrations/2026-09-20-001-spent-by.d.ts.map +1 -0
  185. package/dist/types/src/storage/mongo/MongoAdmissionPlan.d.ts +18 -0
  186. package/dist/types/src/storage/mongo/MongoAdmissionPlan.d.ts.map +1 -0
  187. package/dist/types/src/storage/mongo/MongoAdmissionStorage.d.ts +112 -0
  188. package/dist/types/src/storage/mongo/MongoAdmissionStorage.d.ts.map +1 -0
  189. package/dist/types/src/storage/mongo/MongoOverlayStorage.d.ts +71 -0
  190. package/dist/types/src/storage/mongo/MongoOverlayStorage.d.ts.map +1 -0
  191. package/dist/types/src/storage/mongo/MongoPayloadStore.d.ts +134 -0
  192. package/dist/types/src/storage/mongo/MongoPayloadStore.d.ts.map +1 -0
  193. package/dist/types/src/storage/mongo/MongoReadGuards.d.ts +44 -0
  194. package/dist/types/src/storage/mongo/MongoReadGuards.d.ts.map +1 -0
  195. package/dist/types/src/storage/mongo/MongoSchema.d.ts +67 -0
  196. package/dist/types/src/storage/mongo/MongoSchema.d.ts.map +1 -0
  197. package/dist/types/src/storage/mongo/MongoTransactionRunner.d.ts +69 -0
  198. package/dist/types/src/storage/mongo/MongoTransactionRunner.d.ts.map +1 -0
  199. package/dist/types/src/storage/mongo.d.ts +9 -0
  200. package/dist/types/src/storage/mongo.d.ts.map +1 -0
  201. package/package.json +11 -5
@@ -1,17 +1,58 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.OverlayGASPStorage = void 0;
4
+ const utils_1 = require("@bsv/sdk/primitives/utils");
4
5
  const sdk_1 = require("@bsv/sdk");
6
+ const RemoteSecurity_js_1 = require("../RemoteSecurity.js");
7
+ const DEFAULT_MAX_NODES_IN_GRAPH = 2048;
8
+ const MAX_CONFIGURED_NODES_IN_GRAPH = 100000;
9
+ const DEFAULT_MAX_BYTES_IN_GRAPH = 64 * 1024 * 1024;
5
10
  class OverlayGASPStorage {
6
- constructor(topic, engine, maxNodesInGraph) {
11
+ constructor(topic, engine, maxNodesInGraph, maxBytesInGraph = DEFAULT_MAX_BYTES_IN_GRAPH) {
7
12
  this.topic = topic;
8
13
  this.engine = engine;
9
14
  this.maxNodesInGraph = maxNodesInGraph;
10
- this.temporaryGraphNodeRefs = {};
15
+ this.maxBytesInGraph = maxBytesInGraph;
16
+ this.temporaryGraphNodeRefs = Object.create(null);
17
+ this.graphNodeCounts = new Map();
18
+ this.graphByteCounts = new Map();
19
+ (0, RemoteSecurity_js_1.assertTopic)(topic, 'GASP storage topic');
20
+ const nodeLimit = maxNodesInGraph !== null && maxNodesInGraph !== void 0 ? maxNodesInGraph : DEFAULT_MAX_NODES_IN_GRAPH;
21
+ if (!Number.isSafeInteger(nodeLimit) ||
22
+ nodeLimit < 1 ||
23
+ nodeLimit > MAX_CONFIGURED_NODES_IN_GRAPH) {
24
+ throw new TypeError(`maxNodesInGraph must be between 1 and ${MAX_CONFIGURED_NODES_IN_GRAPH}`);
25
+ }
26
+ if (!Number.isSafeInteger(maxBytesInGraph) || maxBytesInGraph < 1) {
27
+ throw new TypeError('maxBytesInGraph must be a positive safe integer');
28
+ }
29
+ this.maxNodesInGraph = nodeLimit;
30
+ }
31
+ graphNodeKey(graphID, nodeID) {
32
+ return graphID === nodeID ? graphID : `${graphID}\u0000${nodeID}`;
33
+ }
34
+ graphNode(graphID, nodeID) {
35
+ return this.temporaryGraphNodeRefs[this.graphNodeKey(graphID, nodeID)];
36
+ }
37
+ nodeByteLength(node) {
38
+ var _a, _b, _c;
39
+ var _d, _e, _f, _g;
40
+ let length = node.graphID.length + node.rawTx.length + 16;
41
+ length += (_d = (_a = node.proof) === null || _a === void 0 ? void 0 : _a.length) !== null && _d !== void 0 ? _d : 0;
42
+ length += (_e = (_b = node.txMetadata) === null || _b === void 0 ? void 0 : _b.length) !== null && _e !== void 0 ? _e : 0;
43
+ length += (_f = (_c = node.outputMetadata) === null || _c === void 0 ? void 0 : _c.length) !== null && _f !== void 0 ? _f : 0;
44
+ for (const [outpoint, metadata] of Object.entries((_g = node.inputs) !== null && _g !== void 0 ? _g : {})) {
45
+ length += outpoint.length + metadata.hash.length;
46
+ }
47
+ return length;
11
48
  }
12
49
  static async acquireAnchorValidationSlot() {
13
- if (OverlayGASPStorage.activeAnchorValidations >= OverlayGASPStorage.MAX_CONCURRENT_ANCHOR_VALIDATIONS) {
14
- await new Promise(resolve => { OverlayGASPStorage.anchorValidationQueue.push(resolve); });
50
+ if (OverlayGASPStorage.activeAnchorValidations >=
51
+ OverlayGASPStorage.MAX_CONCURRENT_ANCHOR_VALIDATIONS) {
52
+ await new Promise(resolve => {
53
+ OverlayGASPStorage.anchorValidationQueue.push(resolve);
54
+ });
55
+ return;
15
56
  }
16
57
  OverlayGASPStorage.activeAnchorValidations++;
17
58
  }
@@ -19,12 +60,16 @@ class OverlayGASPStorage {
19
60
  OverlayGASPStorage.activeAnchorValidations--;
20
61
  const next = OverlayGASPStorage.anchorValidationQueue.shift();
21
62
  if (next !== undefined) {
63
+ OverlayGASPStorage.activeAnchorValidations++;
22
64
  next();
23
65
  }
24
66
  }
25
67
  static async acquireFinalizationSlot() {
26
68
  if (OverlayGASPStorage.activeFinalizations >= OverlayGASPStorage.MAX_CONCURRENT_FINALIZATIONS) {
27
- await new Promise(resolve => { OverlayGASPStorage.finalizationQueue.push(resolve); });
69
+ await new Promise(resolve => {
70
+ OverlayGASPStorage.finalizationQueue.push(resolve);
71
+ });
72
+ return;
28
73
  }
29
74
  OverlayGASPStorage.activeFinalizations++;
30
75
  }
@@ -32,6 +77,7 @@ class OverlayGASPStorage {
32
77
  OverlayGASPStorage.activeFinalizations--;
33
78
  const next = OverlayGASPStorage.finalizationQueue.shift();
34
79
  if (next !== undefined) {
80
+ OverlayGASPStorage.activeFinalizations++;
35
81
  next();
36
82
  }
37
83
  }
@@ -41,12 +87,21 @@ class OverlayGASPStorage {
41
87
  * @returns
42
88
  */
43
89
  async findKnownUTXOs(since) {
90
+ (0, RemoteSecurity_js_1.assertNonnegativeInteger)(since, 'GASP since score');
44
91
  const UTXOs = await this.engine.storage.findUTXOsForTopic(this.topic, since);
45
- return UTXOs.map(output => { var _a; return ({
46
- txid: output.txid,
47
- outputIndex: output.outputIndex,
48
- score: (_a = output.score) !== null && _a !== void 0 ? _a : 0
49
- }); });
92
+ if (!Array.isArray(UTXOs))
93
+ throw new TypeError('Storage returned an invalid GASP UTXO list');
94
+ return UTXOs.map((output, index) => {
95
+ var _a, _b;
96
+ (0, RemoteSecurity_js_1.assertHash)(output.txid, `GASP UTXO[${index}] txid`);
97
+ (0, RemoteSecurity_js_1.assertOutputIndex)(output.outputIndex, `GASP UTXO[${index}] output index`);
98
+ (0, RemoteSecurity_js_1.assertNonnegativeInteger)((_a = output.score) !== null && _a !== void 0 ? _a : 0, `GASP UTXO[${index}] score`);
99
+ return {
100
+ txid: output.txid,
101
+ outputIndex: output.outputIndex,
102
+ score: (_b = output.score) !== null && _b !== void 0 ? _b : 0
103
+ };
104
+ });
50
105
  }
51
106
  /**
52
107
  * For a given txid and output index, returns the associated transaction, a merkle proof if the transaction is in a block, and metadata if if requested. If no metadata is requested, metadata hashes on inputs are not returned.
@@ -57,11 +112,20 @@ class OverlayGASPStorage {
57
112
  * @returns
58
113
  */
59
114
  async hydrateGASPNode(graphID, txid, outputIndex, _metadata) {
60
- const output = await this.engine.storage.findOutput(txid, outputIndex, undefined, undefined, true);
115
+ (0, RemoteSecurity_js_1.assertOutpoint)(graphID, 'GASP graphID');
116
+ (0, RemoteSecurity_js_1.assertHash)(txid, 'GASP txid');
117
+ (0, RemoteSecurity_js_1.assertOutputIndex)(outputIndex, 'GASP output index');
118
+ const output = await this.engine.storage.findOutput(txid, outputIndex, this.topic, undefined, true);
61
119
  if ((output === null || output === void 0 ? void 0 : output.beef) === undefined) {
62
120
  throw new Error('No matching output found!');
63
121
  }
122
+ if (output.topic !== this.topic) {
123
+ throw new Error('Stored GASP output is not admitted to the requested topic');
124
+ }
64
125
  const tx = sdk_1.Transaction.fromBEEF(output.beef);
126
+ if (tx.id('hex').toLowerCase() !== txid.toLowerCase() || outputIndex >= tx.outputs.length) {
127
+ throw new Error('Stored GASP output does not match its transaction');
128
+ }
65
129
  const rawTx = tx.toHex();
66
130
  const node = {
67
131
  rawTx,
@@ -74,21 +138,25 @@ class OverlayGASPStorage {
74
138
  return node;
75
139
  }
76
140
  /**
77
- * For a given node, returns the inputs needed to complete the graph, including whether updated metadata is requested for those inputs.
78
- * @param tx The node for which needed inputs should be found.
79
- * @returns A promise for a mapping of requested input transactions and whether metadata should be provided for each.
80
- */
141
+ * For a given node, returns the inputs needed to complete the graph, including whether updated metadata is requested for those inputs.
142
+ * @param tx The node for which needed inputs should be found.
143
+ * @returns A promise for a mapping of requested input transactions and whether metadata should be provided for each.
144
+ */
81
145
  async findNeededInputs(tx) {
82
146
  var _a, _b;
83
- var _c, _d;
147
+ var _c, _d, _e;
84
148
  // If there is no Merkle proof, we always need the inputs
85
149
  const response = {
86
- requestedInputs: {}
150
+ requestedInputs: Object.create(null)
87
151
  };
88
152
  const parsedTx = sdk_1.Transaction.fromHex(tx.rawTx);
153
+ const nodeLimit = (_c = this.maxNodesInGraph) !== null && _c !== void 0 ? _c : DEFAULT_MAX_NODES_IN_GRAPH;
154
+ if (parsedTx.inputs.length > nodeLimit) {
155
+ throw new Error('GASP transaction input count exceeds the graph node limit');
156
+ }
89
157
  if (tx.proof === undefined) {
90
158
  for (const input of parsedTx.inputs) {
91
- response.requestedInputs[`${(_c = input.sourceTXID) !== null && _c !== void 0 ? _c : ''}.${input.sourceOutputIndex}`] = {
159
+ response.requestedInputs[`${(_d = input.sourceTXID) !== null && _d !== void 0 ? _d : ''}.${input.sourceOutputIndex}`] = {
92
160
  metadata: false
93
161
  };
94
162
  }
@@ -96,13 +164,23 @@ class OverlayGASPStorage {
96
164
  }
97
165
  // Attempt to check if the current transaction is admissible
98
166
  parsedTx.merklePath = sdk_1.MerklePath.fromHex(tx.proof);
99
- const admittanceResult = await this.engine.managers[this.topic].identifyAdmissibleOutputs(parsedTx.toBEEF(), [], typeof tx.txMetadata === 'string' ? sdk_1.Utils.toArray(tx.txMetadata) : undefined, 'historical-tx', { dryRun: true });
100
- if (!admittanceResult.outputsToAdmit.includes(tx.outputIndex) && this.engine.managers[this.topic] !== undefined && typeof this.engine.managers[this.topic].identifyNeededInputs === 'function') {
167
+ const admittanceResult = (0, RemoteSecurity_js_1.validateAdmittanceInstructions)(await this.engine.managers[this.topic].identifyAdmissibleOutputs(parsedTx.toBEEF(), [], typeof tx.txMetadata === 'string' ? (0, utils_1.toArray)(tx.txMetadata) : undefined, 'historical-tx', { dryRun: true }), parsedTx, []);
168
+ if (!admittanceResult.outputsToAdmit.includes(tx.outputIndex) &&
169
+ this.engine.managers[this.topic] !== undefined &&
170
+ typeof this.engine.managers[this.topic].identifyNeededInputs === 'function') {
101
171
  // The transaction is not admissible, get inputs needed for further verification
102
172
  // TopicManagers should implement a function to identify which inputs are needed.
103
173
  try {
104
- const neededInputs = (_d = await ((_b = (_a = this.engine.managers[this.topic]).identifyNeededInputs) === null || _b === void 0 ? void 0 : _b.call(_a, parsedTx.toBEEF()))) !== null && _d !== void 0 ? _d : [];
174
+ const neededInputs = (_e = (await ((_b = (_a = this.engine.managers[this.topic]).identifyNeededInputs) === null || _b === void 0 ? void 0 : _b.call(_a, parsedTx.toBEEF())))) !== null && _e !== void 0 ? _e : [];
175
+ if (!Array.isArray(neededInputs) || neededInputs.length > nodeLimit) {
176
+ throw new TypeError('Topic manager returned an invalid or oversized needed-input list');
177
+ }
105
178
  for (const input of neededInputs) {
179
+ if (typeof input !== 'object' || input === null) {
180
+ throw new TypeError('Topic manager returned an invalid needed input');
181
+ }
182
+ (0, RemoteSecurity_js_1.assertHash)(input.txid, 'Topic manager needed-input txid');
183
+ (0, RemoteSecurity_js_1.assertOutputIndex)(input.outputIndex, 'Topic manager needed-input output index');
106
184
  response.requestedInputs[`${input.txid}.${input.outputIndex}`] = {
107
185
  metadata: false
108
186
  };
@@ -140,17 +218,33 @@ class OverlayGASPStorage {
140
218
  return response;
141
219
  }
142
220
  /**
143
- * Appends a new node to a temporary graph.
144
- * @param tx The node to append to this graph.
145
- * @param spentBy Unless this is the same node identified by the graph ID, denotes the TXID and input index for the node which spent this one, in 36-byte format.
146
- * @throws If the node cannot be appended to the graph, either because the graph ID is for a graph the recipient does not want or because the graph has grown to be too large before being finalized.
147
- */
221
+ * Appends a new node to a temporary graph.
222
+ * @param tx The node to append to this graph.
223
+ * @param spentBy Unless this is the same node identified by the graph ID, denotes the TXID and input index for the node which spent this one, in 36-byte format.
224
+ * @throws If the node cannot be appended to the graph, either because the graph ID is for a graph the recipient does not want or because the graph has grown to be too large before being finalized.
225
+ */
148
226
  async appendToGraph(tx, spentBy) {
149
- if (this.maxNodesInGraph !== undefined && Object.keys(this.temporaryGraphNodeRefs).length >= this.maxNodesInGraph) {
150
- throw new Error('The max number of nodes in transaction graph has been reached!');
151
- }
227
+ var _a, _b, _c;
152
228
  const parsedTx = sdk_1.Transaction.fromHex(tx.rawTx);
153
229
  const txid = parsedTx.id('hex');
230
+ (0, RemoteSecurity_js_1.assertGASPNode)(tx, { graphID: tx.graphID, txid, outputIndex: tx.outputIndex });
231
+ if (tx.outputIndex >= parsedTx.outputs.length) {
232
+ throw new Error('GASP node output index does not exist in its transaction');
233
+ }
234
+ const nodeID = `${txid}.${tx.outputIndex}`;
235
+ const nodeLimit = (_a = this.maxNodesInGraph) !== null && _a !== void 0 ? _a : DEFAULT_MAX_NODES_IN_GRAPH;
236
+ if (parsedTx.inputs.length > nodeLimit) {
237
+ throw new Error('GASP transaction input count exceeds the graph node limit');
238
+ }
239
+ const nodeCount = (_b = this.graphNodeCounts.get(tx.graphID)) !== null && _b !== void 0 ? _b : 0;
240
+ if (nodeCount >= nodeLimit) {
241
+ throw new Error('The max number of nodes in transaction graph has been reached!');
242
+ }
243
+ const nodeBytes = this.nodeByteLength(tx);
244
+ const graphBytes = (_c = this.graphByteCounts.get(tx.graphID)) !== null && _c !== void 0 ? _c : 0;
245
+ if (graphBytes + nodeBytes > this.maxBytesInGraph) {
246
+ throw new Error('The max byte size of the transaction graph has been reached!');
247
+ }
154
248
  if (tx.proof !== undefined) {
155
249
  parsedTx.merklePath = sdk_1.MerklePath.fromHex(tx.proof);
156
250
  }
@@ -169,19 +263,37 @@ class OverlayGASPStorage {
169
263
  };
170
264
  // If spentBy is undefined, then we know it's the root node.
171
265
  if (spentBy === undefined) {
172
- this.temporaryGraphNodeRefs[tx.graphID] = newGraphNode;
266
+ if (nodeID !== tx.graphID) {
267
+ throw new Error('The root GASP node does not match its graph ID');
268
+ }
269
+ if (this.graphNode(tx.graphID, nodeID) !== undefined) {
270
+ throw new Error('The GASP graph already contains this node');
271
+ }
272
+ this.temporaryGraphNodeRefs[this.graphNodeKey(tx.graphID, nodeID)] = newGraphNode;
173
273
  }
174
274
  else {
275
+ (0, RemoteSecurity_js_1.assertOutpoint)(spentBy, 'GASP parent outpoint');
175
276
  // Find the parent node based on spentBy
176
- const parentNode = this.temporaryGraphNodeRefs[spentBy];
277
+ const parentNode = this.graphNode(tx.graphID, spentBy);
177
278
  if (parentNode === undefined) {
178
279
  throw new Error(`Parent node with GraphID ${spentBy} not found`);
179
280
  }
281
+ if (this.graphNode(tx.graphID, nodeID) !== undefined) {
282
+ throw new Error('The GASP graph already contains this node');
283
+ }
284
+ const parentTransaction = sdk_1.Transaction.fromHex(parentNode.rawTx);
285
+ const isReferencedInput = parentTransaction.inputs.some(input => { var _a, _b; var _c; return ((_b = ((_c = input.sourceTXID) !== null && _c !== void 0 ? _c : (_a = input.sourceTransaction) === null || _a === void 0 ? void 0 : _a.id('hex'))) === null || _b === void 0 ? void 0 : _b.toLowerCase()) ===
286
+ txid.toLowerCase() && input.sourceOutputIndex === tx.outputIndex; });
287
+ if (!isReferencedInput) {
288
+ throw new Error('The GASP child node is not an input of its declared parent');
289
+ }
180
290
  // Set parent-child relationship
181
291
  parentNode.children.push(newGraphNode);
182
292
  newGraphNode.parent = parentNode;
183
- this.temporaryGraphNodeRefs[`${newGraphNode.txid}.${newGraphNode.outputIndex}`] = newGraphNode;
293
+ this.temporaryGraphNodeRefs[this.graphNodeKey(tx.graphID, nodeID)] = newGraphNode;
184
294
  }
295
+ this.graphNodeCounts.set(tx.graphID, nodeCount + 1);
296
+ this.graphByteCounts.set(tx.graphID, graphBytes + nodeBytes);
185
297
  }
186
298
  previousCoinIndexes(tx, coins) {
187
299
  var _a;
@@ -191,26 +303,45 @@ class OverlayGASPStorage {
191
303
  const sourceTXID = (_b = input.sourceTXID) !== null && _b !== void 0 ? _b : (_a = input.sourceTransaction) === null || _a === void 0 ? void 0 : _a.id('hex');
192
304
  if (sourceTXID == null || sourceTXID === '')
193
305
  continue;
194
- if (coins.has(`${sourceTXID}.${input.sourceOutputIndex}`)) {
306
+ if (coins.has(`${sourceTXID.toLowerCase()}.${input.sourceOutputIndex}`)) {
195
307
  previousCoins.push(Number(inputIndex));
196
308
  }
197
309
  }
198
310
  return previousCoins;
199
311
  }
200
- async admitHistoricalBEEF(beef, coins) {
312
+ async admitHistoricalBEEF(beef, coins, spentOutpoints) {
313
+ var _a;
314
+ var _b;
201
315
  const tx = sdk_1.Transaction.fromBEEF(beef);
202
- const admittanceInstructions = await this.engine.managers[this.topic].identifyAdmissibleOutputs(beef, this.previousCoinIndexes(tx, coins), undefined, 'historical-tx', { dryRun: true });
316
+ const previousCoins = this.previousCoinIndexes(tx, coins);
317
+ const inputOutpoints = [];
318
+ for (const input of tx.inputs) {
319
+ const sourceTXID = (_b = input.sourceTXID) !== null && _b !== void 0 ? _b : (_a = input.sourceTransaction) === null || _a === void 0 ? void 0 : _a.id('hex');
320
+ if (sourceTXID == null || sourceTXID === '') {
321
+ throw new Error('Historical GASP transaction contains an unresolved input');
322
+ }
323
+ const outpoint = `${sourceTXID.toLowerCase()}.${input.sourceOutputIndex}`;
324
+ if (spentOutpoints.has(outpoint)) {
325
+ throw new Error(`Historical GASP graph contains a conflicting spend of ${outpoint}`);
326
+ }
327
+ inputOutpoints.push(outpoint);
328
+ }
329
+ const admittanceInstructions = (0, RemoteSecurity_js_1.validateAdmittanceInstructions)(await this.engine.managers[this.topic].identifyAdmissibleOutputs(beef, previousCoins, undefined, 'historical-tx', { dryRun: true }), tx, previousCoins);
330
+ for (const outpoint of inputOutpoints) {
331
+ spentOutpoints.add(outpoint);
332
+ coins.delete(outpoint);
333
+ }
203
334
  for (const outputIndex of admittanceInstructions.outputsToAdmit) {
204
- coins.add(`${tx.id('hex')}.${outputIndex}`);
335
+ coins.add(`${tx.id('hex').toLowerCase()}.${outputIndex}`);
205
336
  }
206
337
  }
207
338
  /**
208
- * Checks whether the given graph, in its current state, makes reference only to transactions that are proven in the blockchain, or already known by the recipient to be valid.
209
- * Additionally, in a breadth-first manner (ensuring that all inputs for any given node are processed before nodes that spend them), it ensures that the root node remains valid according to the rules of the overlay's topic manager,
210
- * while considering any coins which the Manager had previously indicated were either valid or invalid.
211
- * @param graphID The TXID and output index (in 36-byte format) for the UTXO at the tip of this graph.
212
- * @throws If the graph is not well-anchored, according to the rules of Bitcoin or the rules of the Overlay Topic Manager.
213
- */
339
+ * Checks whether the given graph, in its current state, makes reference only to transactions that are proven in the blockchain, or already known by the recipient to be valid.
340
+ * Additionally, in a breadth-first manner (ensuring that all inputs for any given node are processed before nodes that spend them), it ensures that the root node remains valid according to the rules of the overlay's topic manager,
341
+ * while considering any coins which the Manager had previously indicated were either valid or invalid.
342
+ * @param graphID The TXID and output index (in 36-byte format) for the UTXO at the tip of this graph.
343
+ * @throws If the graph is not well-anchored, according to the rules of Bitcoin or the rules of the Overlay Topic Manager.
344
+ */
214
345
  async validateGraphAnchor(graphID) {
215
346
  await OverlayGASPStorage.acquireAnchorValidationSlot();
216
347
  try {
@@ -229,10 +360,11 @@ class OverlayGASPStorage {
229
360
  const beefs = this.computeOrderedBEEFsForGraph(graphID);
230
361
  // coins: a Set of all historical coins to retain (no need to remove them), used to emulate topical admittance of previous inputs over time.
231
362
  const coins = new Set();
363
+ const spentOutpoints = new Set();
232
364
  // Submit all historical BEEFs in order through the topic manager, tracking what would be retained until we submit the root node last.
233
365
  // If, at the end, the root node is admitted, we have a valid overlay-specific graph.
234
366
  for (const beef of beefs) {
235
- await this.admitHistoricalBEEF(beef, coins);
367
+ await this.admitHistoricalBEEF(beef, coins, spentOutpoints);
236
368
  }
237
369
  // After sending through all the graph's BEEFs...
238
370
  // If the root node is now a coin, we have acceptance by the overlay.
@@ -257,6 +389,8 @@ class OverlayGASPStorage {
257
389
  delete this.temporaryGraphNodeRefs[nodeId];
258
390
  }
259
391
  }
392
+ this.graphNodeCounts.delete(graphID);
393
+ this.graphByteCounts.delete(graphID);
260
394
  }
261
395
  /**
262
396
  * Finalizes a graph, solidifying the new UTXO and its ancestors so that it will appear in the list of known UTXOs.
@@ -274,6 +408,7 @@ class OverlayGASPStorage {
274
408
  topics: [this.topic]
275
409
  }, () => { }, 'historical-tx-no-spv');
276
410
  }
411
+ await this.discardGraph(graphID);
277
412
  }
278
413
  finally {
279
414
  OverlayGASPStorage.releaseFinalizationSlot();
@@ -286,22 +421,36 @@ class OverlayGASPStorage {
286
421
  */
287
422
  computeOrderedBEEFsForGraph(graphID) {
288
423
  const beefs = [];
289
- const hydrator = (node) => {
290
- const currentBEEF = this.getBEEFForNode(node);
291
- if (!beefs.includes(currentBEEF)) {
292
- beefs.unshift(currentBEEF);
293
- }
294
- for (const child of node.children) {
295
- // Continue backwards to the earliest nodes, adding them onto the beginning
296
- hydrator(child);
297
- }
298
- };
299
- // Start the hydrator with the root node
300
- const foundRoot = this.temporaryGraphNodeRefs[graphID];
424
+ const foundRoot = this.graphNode(graphID, graphID);
301
425
  if (foundRoot == null) {
302
426
  throw new Error('Unable to find root node in graph for finalization!');
303
427
  }
304
- hydrator(foundRoot);
428
+ const complete = new Set();
429
+ const visiting = new Set();
430
+ const stack = [
431
+ { node: foundRoot, expanded: false }
432
+ ];
433
+ while (stack.length > 0) {
434
+ const current = stack.pop();
435
+ const nodeID = `${current.node.txid}.${current.node.outputIndex}`;
436
+ if (current.expanded) {
437
+ visiting.delete(nodeID);
438
+ if (!complete.has(nodeID)) {
439
+ beefs.push(this.getBEEFForNode(current.node));
440
+ complete.add(nodeID);
441
+ }
442
+ continue;
443
+ }
444
+ if (complete.has(nodeID))
445
+ continue;
446
+ if (visiting.has(nodeID))
447
+ throw new Error('Cycle detected in temporary GASP graph');
448
+ visiting.add(nodeID);
449
+ stack.push({ node: current.node, expanded: true });
450
+ for (let index = current.node.children.length - 1; index >= 0; index--) {
451
+ stack.push({ node: current.node.children[index], expanded: false });
452
+ }
453
+ }
305
454
  return beefs;
306
455
  }
307
456
  /**
@@ -320,7 +469,7 @@ class OverlayGASPStorage {
320
469
  }
321
470
  // For each input, look it up and recurse.
322
471
  for (const [inputIndex, input] of tx.inputs.entries()) {
323
- const foundNode = this.temporaryGraphNodeRefs[`${(_a = input.sourceTXID) !== null && _a !== void 0 ? _a : ''}.${input.sourceOutputIndex}`];
472
+ const foundNode = this.graphNode(node.graphID, `${(_a = input.sourceTXID) !== null && _a !== void 0 ? _a : ''}.${input.sourceOutputIndex}`);
324
473
  if (foundNode == null) {
325
474
  throw new Error('Required input node for unproven parent not found in temporary graph store. Ensure, for every parent of any given already-proven node (kept for Overlay-specific historical reasons), that a proof is also provided on those inputs. While implicitly they are valid by virtue of their descendents being proven in the blockchain, BEEF serialization will still fail when winding forward the topical UTXO set histories during sync.');
326
475
  }
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayGASPStorage.js","sourceRoot":"","sources":["../../../../src/GASP/OverlayGASPStorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OverlayGASPStorage.js","sourceRoot":"","sources":["../../../../src/GASP/OverlayGASPStorage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { Transaction, type AdmittanceInstructions } from '@bsv/sdk';
2
+ export declare const MAX_GASP_PAGE_SIZE = 10000;
3
+ export declare const MAX_BASM_TXIDS = 256;
4
+ export declare const MAX_REMOTE_JSON_BYTES: number;
5
+ export declare const MAX_GASP_NODE_JSON_BYTES: number;
6
+ export declare const MAX_RAW_TRANSACTION_BYTES: number;
7
+ export declare const REMOTE_BODY_TIMEOUT_MS = 30000;
8
+ export declare function validateAdmittanceInstructions(value: unknown, tx: Transaction, previousCoins: number[]): AdmittanceInstructions;
9
+ export declare function assertTopic(topic: unknown, label?: string): asserts topic is string;
10
+ export declare function assertRegistryName(value: unknown, label: string): asserts value is string;
11
+ export declare function assertHash(value: unknown, label: string): asserts value is string;
12
+ export declare function assertOutputIndex(value: unknown, label: string): asserts value is number;
13
+ export declare function assertNonnegativeInteger(value: unknown, label: string): asserts value is number;
14
+ export declare function assertOutpoint(value: unknown, label: string): asserts value is string;
15
+ export declare function assertHexBytes(value: unknown, label: string, maxBytes: number, allowEmpty?: boolean): asserts value is string;
16
+ export declare function assertTxidList(value: unknown, label: string, options?: {
17
+ allowEmpty?: boolean;
18
+ max?: number;
19
+ }): asserts value is string[];
20
+ export declare function normalizePeerEndpoint(endpoint: string): string;
21
+ export declare function securePeerFetch(endpoint: string, supplied?: typeof fetch): {
22
+ endpoint: string;
23
+ fetchImpl: typeof fetch;
24
+ };
25
+ export declare function readPeerJSON(response: Response, maxBytes?: number): Promise<unknown>;
26
+ export declare function assertGASPInitialResponse(value: unknown, maxOutputs: number): asserts value is {
27
+ UTXOList: Array<{
28
+ txid: string;
29
+ outputIndex: number;
30
+ score: number;
31
+ }>;
32
+ since: number;
33
+ };
34
+ export declare function assertGASPNode(value: unknown, expected: {
35
+ graphID: string;
36
+ txid: string;
37
+ outputIndex: number;
38
+ }): asserts value is {
39
+ graphID: string;
40
+ rawTx: string;
41
+ outputIndex: number;
42
+ proof?: string;
43
+ txMetadata?: string;
44
+ outputMetadata?: string;
45
+ inputs?: Record<string, {
46
+ hash: string;
47
+ }>;
48
+ };
49
+ export declare function assertRawTransactionMatches(txid: string, rawTx: string): void;
50
+ //# sourceMappingURL=RemoteSecurity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteSecurity.d.ts","sourceRoot":"","sources":["../../../src/RemoteSecurity.ts"],"names":[],"mappings":"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"}