@bsv/wallet-toolbox 2.8.0 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/CHANGELOG.md +14 -3
  2. package/README.md +9 -1
  3. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataCacheApi.d.ts +22 -0
  4. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataCacheApi.d.ts.map +1 -1
  5. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.d.ts +70 -0
  6. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.d.ts.map +1 -0
  7. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.js +21 -0
  8. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.js.map +1 -0
  9. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.d.ts +33 -0
  10. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.d.ts.map +1 -1
  11. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksFetchApi.d.ts +6 -1
  12. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksFetchApi.d.ts.map +1 -1
  13. package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts +9 -3
  14. package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
  15. package/out/src/services/chaintracker/chaintracks/Chaintracks.js +45 -5
  16. package/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
  17. package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.d.ts +3 -0
  18. package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.d.ts.map +1 -1
  19. package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.js +2 -1
  20. package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.js.map +1 -1
  21. package/out/src/services/chaintracker/chaintracks/index.all.d.ts +2 -0
  22. package/out/src/services/chaintracker/chaintracks/index.all.d.ts.map +1 -1
  23. package/out/src/services/chaintracker/chaintracks/index.all.js +2 -0
  24. package/out/src/services/chaintracker/chaintracks/index.all.js.map +1 -1
  25. package/out/src/services/chaintracker/chaintracks/index.mobile.d.ts +2 -0
  26. package/out/src/services/chaintracker/chaintracks/index.mobile.d.ts.map +1 -1
  27. package/out/src/services/chaintracker/chaintracks/index.mobile.js +2 -0
  28. package/out/src/services/chaintracker/chaintracks/index.mobile.js.map +1 -1
  29. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.d.ts +15 -2
  30. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.d.ts.map +1 -1
  31. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.js +115 -13
  32. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.js.map +1 -1
  33. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +17 -1
  34. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
  35. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +174 -87
  36. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
  37. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.d.ts +32 -0
  38. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.d.ts.map +1 -0
  39. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.js +30 -0
  40. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.js.map +1 -0
  41. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts +2 -2
  42. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts.map +1 -1
  43. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js +5 -3
  44. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js.map +1 -1
  45. package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.d.ts +39 -0
  46. package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.d.ts.map +1 -0
  47. package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.js +194 -0
  48. package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.js.map +1 -0
  49. package/out/src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.d.ts +1 -0
  50. package/out/src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.d.ts.map +1 -1
  51. package/out/src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.js +1 -0
  52. package/out/src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.js.map +1 -1
  53. package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.d.ts +12 -0
  54. package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.d.ts.map +1 -0
  55. package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.js +52 -0
  56. package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.js.map +1 -0
  57. package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.d.ts +40 -0
  58. package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.d.ts.map +1 -0
  59. package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.js +207 -0
  60. package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.js.map +1 -0
  61. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ChaintracksFetch.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/ChaintracksFetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,UAAU,EAAE,MAAM,UAAU,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAShE,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;CACtB;AAED,qBAAa,qBAAsB,SAAQ,KAAK;aAG5B,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,MAAM;aACd,UAAU,EAAE,MAAM;aAClB,eAAe,CAAC,EAAE,MAAM;IAL1C,YACE,OAAO,EAAE,MAAM,EACC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,YAAA,EAIzC;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAmCD;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,mBAAmB;IAC1D,UAAU,EAAE,UAAU,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IAErC,YAAY,OAAO,GAAE,uBAA4B,EAehD;IAEK,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAiB1E;IAEK,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAW1C;YAEa,YAAY;YA+BZ,cAAc;YAed,iBAAiB;IAwC/B,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,cAAc;IAOtB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIjD;CACF"}
1
+ {"version":3,"file":"ChaintracksFetch.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/ChaintracksFetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,UAAU,EAAE,MAAM,UAAU,CAAA;AACxD,OAAO,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAS5F,MAAM,WAAW,uBAAuB;IACtC,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;CACtB;AAED,qBAAa,qBAAsB,SAAQ,KAAK;aAG5B,GAAG,EAAE,MAAM;aACX,MAAM,EAAE,MAAM;aACd,UAAU,EAAE,MAAM;aAClB,eAAe,CAAC,EAAE,MAAM;IAL1C,YACE,OAAO,EAAE,MAAM,EACC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,YAAA,EAIzC;IAED,IAAI,SAAS,IAAI,OAAO,CAEvB;CACF;AAmCD;;;;;;GAMG;AACH,qBAAa,gBAAiB,YAAW,mBAAmB;IAC1D,UAAU,EAAE,UAAU,CAAsB;IAC5C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAQ;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAQ;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IAErC,YAAY,OAAO,GAAE,uBAA4B,EAehD;IAEK,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,0BAA0B,GAAG,OAAO,CAAC,UAAU,CAAC,CAkBhH;IAEK,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAW1C;YAEa,YAAY;YAiCZ,cAAc;YAed,iBAAiB;IAwC/B,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,cAAc;IAOtB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAIjD;CACF"}
@@ -79,14 +79,14 @@ class ChaintracksFetch {
79
79
  this.maxRetryMsecs = positiveSafeInteger(options.maxRetryMsecs, DEFAULT_MAX_RETRY_MSECS, 'maxRetryMsecs');
80
80
  this.random = options.random ?? Math.random;
81
81
  }
82
- async download(url, maxResponseBytes) {
82
+ async download(url, maxResponseBytes, options) {
83
83
  const responseLimit = maxResponseBytes == null
84
84
  ? this.maxResponseBytes
85
85
  : Math.min(this.maxResponseBytes, positiveSafeInteger(maxResponseBytes, this.maxResponseBytes, 'maxResponseBytes'));
86
86
  return await this.requestBytes(url, {
87
87
  method: 'GET',
88
88
  headers: { Accept: 'application/octet-stream' }
89
- }, 'download', responseLimit);
89
+ }, 'download', responseLimit, options);
90
90
  }
91
91
  async fetchJson(url) {
92
92
  const bytes = await this.requestBytes(url, {
@@ -95,8 +95,10 @@ class ChaintracksFetch {
95
95
  }, 'fetch JSON', this.maxResponseBytes);
96
96
  return JSON.parse(new TextDecoder().decode(bytes));
97
97
  }
98
- async requestBytes(url, init, kind, maxResponseBytes) {
98
+ async requestBytes(url, init, kind, maxResponseBytes, downloadOptions) {
99
99
  for (let retry = 0;; retry++) {
100
+ if (retry > 0)
101
+ await downloadOptions?.beforeRetry?.(retry + 1);
100
102
  const controller = new AbortController();
101
103
  const timeout = setTimeout(() => controller.abort(), this.timeoutMsecs);
102
104
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"ChaintracksFetch.js","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/ChaintracksFetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChaintracksFetch.js","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/ChaintracksFetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type { BulkFileDownloadBudgetApi, BulkFileDownloadBudgetSnapshot } from '../Api/BulkFileDataCacheApi';
2
+ export interface DurableFileBulkFileDownloadBudgetOptions {
3
+ maxBytes: number;
4
+ stateFile: string;
5
+ windowMsecs?: number;
6
+ now?: () => number;
7
+ }
8
+ /**
9
+ * Crash-safe fixed-window reservation ledger for remote bulk-header bytes.
10
+ *
11
+ * State is flushed before `consume` resolves, so a crash may conservatively
12
+ * over-count an attempt but can never reset the allowance or permit an
13
+ * unrecorded request. Deployments must place `stateFile` on durable storage.
14
+ *
15
+ * @public
16
+ */
17
+ export declare class DurableFileBulkFileDownloadBudget implements BulkFileDownloadBudgetApi {
18
+ private readonly maxBytes;
19
+ private readonly windowMsecs;
20
+ private readonly stateFile;
21
+ private readonly now;
22
+ private tail;
23
+ private snapshotState;
24
+ constructor(options: DurableFileBulkFileDownloadBudgetOptions);
25
+ /**
26
+ * Load and validate the durable ledger before the service becomes ready.
27
+ *
28
+ * `consume` also initializes lazily, but services should await this method so
29
+ * readiness reports the persisted allowance and corrupt state fails startup.
30
+ */
31
+ initialize(): Promise<void>;
32
+ consume(byteCount: number): Promise<void>;
33
+ snapshot(): BulkFileDownloadBudgetSnapshot;
34
+ private consumeSerialized;
35
+ private newState;
36
+ private readState;
37
+ private writeState;
38
+ }
39
+ //# sourceMappingURL=DurableFileBulkFileDownloadBudget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DurableFileBulkFileDownloadBudget.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAA;AAE5G,MAAM,WAAW,wCAAwC;IACvD,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAUD;;;;;;;;GAQG;AACH,qBAAa,iCAAkC,YAAW,yBAAyB;IACjF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,IAAI,CAAmC;IAC/C,OAAO,CAAC,aAAa,CAAa;IAElC,YAAY,OAAO,EAAE,wCAAwC,EAO5D;IAED;;;;;OAKG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAShC;IAEK,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ9C;IAED,QAAQ,IAAI,8BAA8B,CAQzC;YAEa,iBAAiB;IAe/B,OAAO,CAAC,QAAQ;YAUF,SAAS;YAsBT,UAAU;CAoBzB"}
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DurableFileBulkFileDownloadBudget = void 0;
37
+ const node_crypto_1 = require("node:crypto");
38
+ const node_fs_1 = require("node:fs");
39
+ const path = __importStar(require("node:path"));
40
+ const sdk_1 = require("../../../../sdk");
41
+ /**
42
+ * Crash-safe fixed-window reservation ledger for remote bulk-header bytes.
43
+ *
44
+ * State is flushed before `consume` resolves, so a crash may conservatively
45
+ * over-count an attempt but can never reset the allowance or permit an
46
+ * unrecorded request. Deployments must place `stateFile` on durable storage.
47
+ *
48
+ * @public
49
+ */
50
+ class DurableFileBulkFileDownloadBudget {
51
+ maxBytes;
52
+ windowMsecs;
53
+ stateFile;
54
+ now;
55
+ tail = Promise.resolve();
56
+ snapshotState;
57
+ constructor(options) {
58
+ this.maxBytes = positiveInteger(options.maxBytes, 'maxBytes');
59
+ this.windowMsecs = positiveInteger(options.windowMsecs ?? 60 * 60 * 1000, 'windowMsecs');
60
+ if (options.stateFile.trim() === '')
61
+ throw new sdk_1.WERR_INVALID_PARAMETER('stateFile', 'a non-empty path');
62
+ this.stateFile = path.resolve(options.stateFile);
63
+ this.now = options.now ?? Date.now;
64
+ this.snapshotState = this.newState(this.now());
65
+ }
66
+ /**
67
+ * Load and validate the durable ledger before the service becomes ready.
68
+ *
69
+ * `consume` also initializes lazily, but services should await this method so
70
+ * readiness reports the persisted allowance and corrupt state fails startup.
71
+ */
72
+ async initialize() {
73
+ const operation = this.tail.then(async () => {
74
+ await this.readState();
75
+ });
76
+ this.tail = operation.then(() => undefined, () => undefined);
77
+ await operation;
78
+ }
79
+ async consume(byteCount) {
80
+ positiveInteger(byteCount, 'byteCount');
81
+ const operation = this.tail.then(async () => await this.consumeSerialized(byteCount));
82
+ this.tail = operation.then(() => undefined, () => undefined);
83
+ return await operation;
84
+ }
85
+ snapshot() {
86
+ return {
87
+ maxBytes: this.snapshotState.maxBytes,
88
+ consumedBytes: this.snapshotState.consumedBytes,
89
+ remainingBytes: this.snapshotState.maxBytes - this.snapshotState.consumedBytes,
90
+ windowStartedAt: this.snapshotState.windowStartedAt,
91
+ windowMsecs: this.snapshotState.windowMsecs
92
+ };
93
+ }
94
+ async consumeSerialized(byteCount) {
95
+ const now = this.now();
96
+ let state = await this.readState();
97
+ if (now - state.windowStartedAt >= this.windowMsecs)
98
+ state = this.newState(now);
99
+ if (state.consumedBytes + byteCount > this.maxBytes) {
100
+ throw new Error(`Bulk-header download budget exceeded: requested ${byteCount} bytes with ` +
101
+ `${this.maxBytes - state.consumedBytes} bytes remaining in the current window.`);
102
+ }
103
+ state.consumedBytes += byteCount;
104
+ await this.writeState(state);
105
+ this.snapshotState = state;
106
+ }
107
+ newState(windowStartedAt) {
108
+ return {
109
+ version: 1,
110
+ maxBytes: this.maxBytes,
111
+ windowMsecs: this.windowMsecs,
112
+ windowStartedAt,
113
+ consumedBytes: 0
114
+ };
115
+ }
116
+ async readState() {
117
+ let parsed;
118
+ try {
119
+ parsed = JSON.parse(await node_fs_1.promises.readFile(this.stateFile, 'utf8'));
120
+ }
121
+ catch (error) {
122
+ if (error.code === 'ENOENT')
123
+ return this.newState(this.now());
124
+ throw new Error(`Unable to read durable bulk-header download budget: ${String(error)}`);
125
+ }
126
+ if (!isBudgetState(parsed))
127
+ throw new Error('Durable bulk-header download budget state is invalid.');
128
+ // Configuration changes never reset an active allowance. A lower maximum
129
+ // clamps consumption to "fully spent" and a shorter window takes effect
130
+ // only after the longer active window has elapsed.
131
+ const migrated = {
132
+ ...parsed,
133
+ maxBytes: this.maxBytes,
134
+ windowMsecs: Math.max(parsed.windowMsecs, this.windowMsecs),
135
+ consumedBytes: Math.min(parsed.consumedBytes, this.maxBytes)
136
+ };
137
+ this.snapshotState = migrated;
138
+ return migrated;
139
+ }
140
+ async writeState(state) {
141
+ const folder = path.dirname(this.stateFile);
142
+ await node_fs_1.promises.mkdir(folder, { recursive: true });
143
+ const temporary = path.join(folder, `.${path.basename(this.stateFile)}.${process.pid}.${(0, node_crypto_1.randomUUID)()}.tmp`);
144
+ let handle;
145
+ try {
146
+ handle = await node_fs_1.promises.open(temporary, 'wx', 0o600);
147
+ await handle.writeFile(JSON.stringify(state));
148
+ await handle.sync();
149
+ await handle.close();
150
+ handle = undefined;
151
+ await node_fs_1.promises.rename(temporary, this.stateFile);
152
+ await syncDirectory(folder);
153
+ }
154
+ finally {
155
+ await handle?.close().catch(() => undefined);
156
+ await node_fs_1.promises.unlink(temporary).catch(error => {
157
+ if (error.code !== 'ENOENT')
158
+ throw error;
159
+ });
160
+ }
161
+ }
162
+ }
163
+ exports.DurableFileBulkFileDownloadBudget = DurableFileBulkFileDownloadBudget;
164
+ function positiveInteger(value, name) {
165
+ if (!Number.isSafeInteger(value) || value < 1) {
166
+ throw new sdk_1.WERR_INVALID_PARAMETER(name, 'a positive safe integer');
167
+ }
168
+ return value;
169
+ }
170
+ function isBudgetState(value) {
171
+ if (value == null || typeof value !== 'object')
172
+ return false;
173
+ const state = value;
174
+ return (state.version === 1 &&
175
+ Number.isSafeInteger(state.maxBytes) &&
176
+ Number.isSafeInteger(state.windowMsecs) &&
177
+ Number.isSafeInteger(state.windowStartedAt) &&
178
+ Number.isSafeInteger(state.consumedBytes) &&
179
+ state.maxBytes > 0 &&
180
+ state.windowMsecs > 0 &&
181
+ state.windowStartedAt >= 0 &&
182
+ state.consumedBytes >= 0 &&
183
+ state.consumedBytes <= state.maxBytes);
184
+ }
185
+ async function syncDirectory(folder) {
186
+ const handle = await node_fs_1.promises.open(folder, 'r');
187
+ try {
188
+ await handle.sync();
189
+ }
190
+ finally {
191
+ await handle.close();
192
+ }
193
+ }
194
+ //# sourceMappingURL=DurableFileBulkFileDownloadBudget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DurableFileBulkFileDownloadBudget.js","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAwC;AACxC,qCAAwC;AACxC,MAAY,IAAI,sCAAiB;AACjC,yCAAwD;AAkBxD;;;;;;;;GAQG;AACH;IACmB,QAAQ,CAAQ;IAChB,WAAW,CAAQ;IACnB,SAAS,CAAQ;IACjB,GAAG,CAAc;IAC1B,IAAI,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAA;IACvC,aAAa,CAAa;IAElC,YAAY,OAAiD;QAC3D,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAC7D,IAAI,CAAC,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa,CAAC,CAAA;QACxF,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,MAAM,IAAI,4BAAsB,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAA;QACtG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAChD,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAA;QAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAChD,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC1C,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACxB,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CACxB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAA;QACD,MAAM,SAAS,CAAA;IACjB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,SAAiB;QAC7B,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QACvC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,CAAA;QACrF,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CACxB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAA;QACD,OAAO,MAAM,SAAS,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ;YACrC,aAAa,EAAE,IAAI,CAAC,aAAa,CAAC,aAAa;YAC/C,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa;YAC9E,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,eAAe;YACnD,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW;SAC5C,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QAClC,IAAI,GAAG,GAAG,KAAK,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW;YAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC/E,IAAI,KAAK,CAAC,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CACb,mDAAmD,SAAS,cAAc;gBACxE,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,aAAa,yCAAyC,CAClF,CAAA;QACH,CAAC;QACD,KAAK,CAAC,aAAa,IAAI,SAAS,CAAA;QAChC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;QAC5B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;IAC5B,CAAC;IAEO,QAAQ,CAAC,eAAuB;QACtC,OAAO;YACL,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,eAAe;YACf,aAAa,EAAE,CAAC;SACjB,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,MAAe,CAAA;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,kBAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;QAChE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;YACxF,MAAM,IAAI,KAAK,CAAC,uDAAuD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QACzF,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;QACpG,yEAAyE;QACzE,wEAAwE;QACxE,mDAAmD;QACnD,MAAM,QAAQ,GAAgB;YAC5B,GAAG,MAAM;YACT,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;YAC3D,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC;SAC7D,CAAA;QACD,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAA;QAC7B,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,KAAkB;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC3C,MAAM,kBAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,IAAI,IAAA,wBAAU,GAAE,MAAM,CAAC,CAAA;QAC3G,IAAI,MAAiC,CAAA;QACrC,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;YAC9C,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;YAC7C,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YACnB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACpB,MAAM,GAAG,SAAS,CAAA;YAClB,MAAM,kBAAE,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YAC1C,MAAM,aAAa,CAAC,MAAM,CAAC,CAAA;QAC7B,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;YAC5C,MAAM,kBAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACvC,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,KAAK,CAAA;YACrE,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF;;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,IAAY;IAClD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,4BAAsB,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAA;IACnE,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,IAAI,KAAK,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC5D,MAAM,KAAK,GAAG,KAA6B,CAAA;IAC3C,OAAO,CACL,KAAK,CAAC,OAAO,KAAK,CAAC;QACnB,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;QACpC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC;QACvC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC;QAC3C,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC;QACzC,KAAK,CAAC,QAAS,GAAG,CAAC;QACnB,KAAK,CAAC,WAAY,GAAG,CAAC;QACtB,KAAK,CAAC,eAAgB,IAAI,CAAC;QAC3B,KAAK,CAAC,aAAc,IAAI,CAAC;QACzB,KAAK,CAAC,aAAc,IAAI,KAAK,CAAC,QAAS,CACxC,CAAA;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,MAAc;IACzC,MAAM,MAAM,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IACrB,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;AACH,CAAC"}
@@ -22,6 +22,7 @@ export declare class FixedWindowBulkFileDownloadBudget implements BulkFileDownlo
22
22
  snapshot(): {
23
23
  maxBytes: number;
24
24
  consumedBytes: number;
25
+ remainingBytes: number;
25
26
  windowStartedAt: number;
26
27
  windowMsecs: number;
27
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"FixedWindowBulkFileDownloadBudget.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAE5E,MAAM,WAAW,wCAAwC;IACvD,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED;;;;;;GAMG;AACH,qBAAa,iCAAkC,YAAW,yBAAyB;IACjF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,aAAa,CAAI;IAEzB,YAAY,OAAO,EAAE,wCAAwC,EAY5D;IAED,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAgB/B;IAED,QAAQ,IAAI;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAOpG;CACF"}
1
+ {"version":3,"file":"FixedWindowBulkFileDownloadBudget.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAA;AAE5E,MAAM,WAAW,wCAAwC;IACvD,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED;;;;;;GAMG;AACH,qBAAa,iCAAkC,YAAW,yBAAyB;IACjF,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAc;IAClC,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,aAAa,CAAI;IAEzB,YAAY,OAAO,EAAE,wCAAwC,EAY5D;IAED,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAgB/B;IAED,QAAQ,IAAI;QACV,QAAQ,EAAE,MAAM,CAAA;QAChB,aAAa,EAAE,MAAM,CAAA;QACrB,cAAc,EAAE,MAAM,CAAA;QACtB,eAAe,EAAE,MAAM,CAAA;QACvB,WAAW,EAAE,MAAM,CAAA;KACpB,CAQA;CACF"}
@@ -47,6 +47,7 @@ class FixedWindowBulkFileDownloadBudget {
47
47
  return {
48
48
  maxBytes: this.maxBytes,
49
49
  consumedBytes: this.consumedBytes,
50
+ remainingBytes: this.maxBytes - this.consumedBytes,
50
51
  windowStartedAt: this.windowStartedAt,
51
52
  windowMsecs: this.windowMsecs
52
53
  };
@@ -1 +1 @@
1
- {"version":3,"file":"FixedWindowBulkFileDownloadBudget.js","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.ts"],"names":[],"mappings":";;;AAAA,yCAAwD;AASxD;;;;;;GAMG;AACH;IACmB,QAAQ,CAAQ;IAChB,WAAW,CAAQ;IACnB,GAAG,CAAc;IAC1B,eAAe,CAAQ;IACvB,aAAa,GAAG,CAAC,CAAA;IAEzB,YAAY,OAAiD;QAC3D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,4BAAsB,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAA;QACzE,CAAC;QACD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;QACzD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,4BAAsB,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAA;QAC5E,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QAChC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAA;QAClC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACnC,CAAC;IAED,OAAO,CAAC,SAAiB;QACvB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,4BAAsB,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAA;QAC1E,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnD,IAAI,CAAC,eAAe,GAAG,GAAG,CAAA;YAC1B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACb,mDAAmD,SAAS,cAAc;gBACxE,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,yCAAyC,CACjF,CAAA;QACH,CAAC;QACD,IAAI,CAAC,aAAa,IAAI,SAAS,CAAA;IACjC,CAAC;IAED,QAAQ;QACN,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAA;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"FixedWindowBulkFileDownloadBudget.js","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.ts"],"names":[],"mappings":";;;AAAA,yCAAwD;AASxD;;;;;;GAMG;AACH;IACmB,QAAQ,CAAQ;IAChB,WAAW,CAAQ;IACnB,GAAG,CAAc;IAC1B,eAAe,CAAQ;IACvB,aAAa,GAAG,CAAC,CAAA;IAEzB,YAAY,OAAiD;QAC3D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,4BAAsB,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAA;QACzE,CAAC;QACD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;QACzD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,4BAAsB,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAA;QAC5E,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QAChC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAA;QAClC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACnC,CAAC;IAED,OAAO,CAAC,SAAiB;QACvB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,4BAAsB,CAAC,WAAW,EAAE,yBAAyB,CAAC,CAAA;QAC1E,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,IAAI,GAAG,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnD,IAAI,CAAC,eAAe,GAAG,GAAG,CAAA;YAC1B,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA;QACxB,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnD,MAAM,IAAI,KAAK,CACb,mDAAmD,SAAS,cAAc;gBACxE,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,yCAAyC,CACjF,CAAA;QACH,CAAC;QACD,IAAI,CAAC,aAAa,IAAI,SAAS,CAAA;IACjC,CAAC;IAED,QAAQ;QAON,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa;YAClD,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import type { BulkFileDataValidationRequest, BulkFileDataValidationResult, BulkFileDataValidatorApi } from '../Api/BulkFileDataValidatorApi';
2
+ /**
3
+ * Portable complete-object validator. Node services should normally inject
4
+ * `NodeBulkFileDataValidator`; browser and mobile consumers retain this
5
+ * dependency-free fallback.
6
+ *
7
+ * @public
8
+ */
9
+ export declare class InlineBulkFileDataValidator implements BulkFileDataValidatorApi {
10
+ validate(request: BulkFileDataValidationRequest): Promise<BulkFileDataValidationResult>;
11
+ }
12
+ //# sourceMappingURL=InlineBulkFileDataValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineBulkFileDataValidator.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,6BAA6B,EAC7B,4BAA4B,EAC5B,wBAAwB,EACzB,MAAM,iCAAiC,CAAA;AAIxC;;;;;;GAMG;AACH,qBAAa,2BAA4B,YAAW,wBAAwB;IACpE,QAAQ,CAAC,OAAO,EAAE,6BAA6B,GAAG,OAAO,CAAC,4BAA4B,CAAC,CA6C5F;CACF"}
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InlineBulkFileDataValidator = void 0;
4
+ const sdk_1 = require("@bsv/sdk");
5
+ const sdk_2 = require("../../../../sdk");
6
+ const utilityHelpers_noBuffer_1 = require("../../../../utility/utilityHelpers.noBuffer");
7
+ const BulkFileDataValidatorApi_1 = require("../Api/BulkFileDataValidatorApi");
8
+ const blockHeaderUtilities_1 = require("./blockHeaderUtilities");
9
+ /**
10
+ * Portable complete-object validator. Node services should normally inject
11
+ * `NodeBulkFileDataValidator`; browser and mobile consumers retain this
12
+ * dependency-free fallback.
13
+ *
14
+ * @public
15
+ */
16
+ class InlineBulkFileDataValidator {
17
+ async validate(request) {
18
+ try {
19
+ const expectedLength = request.count * 80;
20
+ if (request.data.length !== expectedLength) {
21
+ throw new sdk_2.WERR_INVALID_PARAMETER('file.data', `bulk file ${request.fileName} data length ${request.data.length} does not match expected count ${request.count}`);
22
+ }
23
+ const fileHash = (0, utilityHelpers_noBuffer_1.asString)(sdk_1.Hash.sha256((0, utilityHelpers_noBuffer_1.asArray)(request.data)), 'base64');
24
+ if (request.fileHash != null && fileHash !== request.fileHash) {
25
+ throw new sdk_2.WERR_INVALID_PARAMETER('fileHash', `a match for retrieved data for ${request.fileName}`);
26
+ }
27
+ const { lastHeaderHash, lastChainWork } = (0, blockHeaderUtilities_1.validateBufferOfHeaders)(request.data, request.prevHash, 0, request.count, request.prevChainWork);
28
+ if (request.lastHash && request.lastHash !== lastHeaderHash) {
29
+ throw new sdk_2.WERR_INVALID_PARAMETER('file.lastHash', `expected ${request.lastHash} but got ${lastHeaderHash}`);
30
+ }
31
+ if (request.lastChainWork && request.lastChainWork !== lastChainWork) {
32
+ throw new sdk_2.WERR_INVALID_PARAMETER('file.lastChainWork', `expected ${request.lastChainWork} but got ${lastChainWork}`);
33
+ }
34
+ if (request.firstHeight === 0 && request.chain != null)
35
+ (0, blockHeaderUtilities_1.validateGenesisHeader)(request.data, request.chain);
36
+ return {
37
+ data: request.data,
38
+ fileHash,
39
+ lastHeaderHash,
40
+ lastChainWork: lastChainWork
41
+ };
42
+ }
43
+ catch (error) {
44
+ if (error instanceof BulkFileDataValidatorApi_1.BulkFileDataValidationError)
45
+ throw error;
46
+ const message = error instanceof Error ? error.message : String(error);
47
+ throw new BulkFileDataValidatorApi_1.BulkFileDataValidationError(message, request.data);
48
+ }
49
+ }
50
+ }
51
+ exports.InlineBulkFileDataValidator = InlineBulkFileDataValidator;
52
+ //# sourceMappingURL=InlineBulkFileDataValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InlineBulkFileDataValidator.js","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.ts"],"names":[],"mappings":";;;AAAA,kCAA+B;AAC/B,yCAAwD;AACxD,yFAA+E;AAM/E,8EAA6E;AAC7E,iEAAuF;AAEvF;;;;;;GAMG;AACH;IACE,KAAK,CAAC,QAAQ,CAAC,OAAsC;QACnD,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,GAAG,EAAE,CAAA;YACzC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;gBAC3C,MAAM,IAAI,4BAAsB,CAC9B,WAAW,EACX,aAAa,OAAO,CAAC,QAAQ,gBAAgB,OAAO,CAAC,IAAI,CAAC,MAAM,kCAAkC,OAAO,CAAC,KAAK,EAAE,CAClH,CAAA;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,IAAA,kCAAQ,EAAC,UAAI,CAAC,MAAM,CAAC,IAAA,iCAAO,EAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YACvE,IAAI,OAAO,CAAC,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC9D,MAAM,IAAI,4BAAsB,CAAC,UAAU,EAAE,kCAAkC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;YACpG,CAAC;YAED,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,IAAA,8CAAuB,EAC/D,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,QAAQ,EAChB,CAAC,EACD,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,aAAa,CACtB,CAAA;YAED,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,KAAK,cAAc,EAAE,CAAC;gBAC5D,MAAM,IAAI,4BAAsB,CAAC,eAAe,EAAE,YAAY,OAAO,CAAC,QAAQ,YAAY,cAAc,EAAE,CAAC,CAAA;YAC7G,CAAC;YACD,IAAI,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,KAAK,aAAa,EAAE,CAAC;gBACrE,MAAM,IAAI,4BAAsB,CAC9B,oBAAoB,EACpB,YAAY,OAAO,CAAC,aAAa,YAAY,aAAa,EAAE,CAC7D,CAAA;YACH,CAAC;YACD,IAAI,OAAO,CAAC,WAAW,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI;gBAAE,IAAA,4CAAqB,EAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;YAE1G,OAAO;gBACL,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ;gBACR,cAAc;gBACd,aAAa,EAAE,aAAc;aAC9B,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,sDAA2B;gBAAE,MAAM,KAAK,CAAA;YAC7D,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,MAAM,IAAI,sDAA2B,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;QAC9D,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,40 @@
1
+ import { type BulkFileDataValidationRequest, type BulkFileDataValidationResult, type BulkFileDataValidatorApi, type BulkFileDataValidatorStats } from '../Api/BulkFileDataValidatorApi';
2
+ export interface NodeBulkFileDataValidatorOptions {
3
+ /** Number of validation workers. Defaults to one to bound CPU usage. */
4
+ maxWorkers?: number;
5
+ /** Maximum number of waiting validations. Defaults to eight. */
6
+ maxQueue?: number;
7
+ /** Per-object validation deadline. Defaults to two minutes. */
8
+ taskTimeoutMsecs?: number;
9
+ /** Test-only worker entry override. */
10
+ workerPath?: string;
11
+ }
12
+ /**
13
+ * Bounded Node worker pool for complete bulk-header verification.
14
+ *
15
+ * A bounded private copy transfers to the worker and back without structured
16
+ * cloning. This preserves the caller's source bytes if a worker crashes while
17
+ * queue bounds prevent validation copies from consuming unbounded memory.
18
+ *
19
+ * @public
20
+ */
21
+ export declare class NodeBulkFileDataValidator implements BulkFileDataValidatorApi {
22
+ private readonly maxQueue;
23
+ private readonly taskTimeoutMsecs;
24
+ private readonly workerPath;
25
+ private readonly workers;
26
+ private readonly queue;
27
+ private nextTaskId;
28
+ private destroyed;
29
+ private readonly stats;
30
+ constructor(options?: NodeBulkFileDataValidatorOptions);
31
+ validate(request: BulkFileDataValidationRequest): Promise<BulkFileDataValidationResult>;
32
+ getStats(): BulkFileDataValidatorStats;
33
+ destroy(): Promise<void>;
34
+ private spawnWorker;
35
+ private dispatch;
36
+ private complete;
37
+ private failWorker;
38
+ private updateQueueStats;
39
+ }
40
+ //# sourceMappingURL=NodeBulkFileDataValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeBulkFileDataValidator.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,MAAM,iCAAiC,CAAA;AAExC,MAAM,WAAW,gCAAgC;IAC/C,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+DAA+D;IAC/D,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AA8BD;;;;;;;;GAQG;AACH,qBAAa,yBAA0B,YAAW,wBAAwB;IACxE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,UAAU,CAAI;IACtB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAWrB;IAED,YAAY,OAAO,GAAE,gCAAqC,EAMzD;IAEK,QAAQ,CAAC,OAAO,EAAE,6BAA6B,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAc5F;IAED,QAAQ,IAAI,0BAA0B,CAMrC;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAe7B;IAED,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,QAAQ;IAqBhB,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,gBAAgB;CAKzB"}