@bsv/wallet-toolbox 2.7.1 → 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 (104) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +22 -3
  3. package/docs/README.md +24 -23
  4. package/docs/local-first-chaintracks.md +129 -0
  5. package/out/src/index.mobile.d.ts +1 -0
  6. package/out/src/index.mobile.d.ts.map +1 -1
  7. package/out/src/index.mobile.js +1 -0
  8. package/out/src/index.mobile.js.map +1 -1
  9. package/out/src/sdk/WalletServices.interfaces.d.ts +8 -0
  10. package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  11. package/out/src/services/Services.d.ts.map +1 -1
  12. package/out/src/services/Services.js +3 -1
  13. package/out/src/services/Services.js.map +1 -1
  14. package/out/src/services/chaintracker/LocalChainTracker.d.ts +96 -0
  15. package/out/src/services/chaintracker/LocalChainTracker.d.ts.map +1 -0
  16. package/out/src/services/chaintracker/LocalChainTracker.js +295 -0
  17. package/out/src/services/chaintracker/LocalChainTracker.js.map +1 -0
  18. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataCacheApi.d.ts +48 -0
  19. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataCacheApi.d.ts.map +1 -0
  20. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataCacheApi.js +3 -0
  21. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataCacheApi.js.map +1 -0
  22. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.d.ts +70 -0
  23. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.d.ts.map +1 -0
  24. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.js +21 -0
  25. package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.js.map +1 -0
  26. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.d.ts +46 -0
  27. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.d.ts.map +1 -1
  28. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksFetchApi.d.ts +7 -2
  29. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksFetchApi.d.ts.map +1 -1
  30. package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts +9 -3
  31. package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
  32. package/out/src/services/chaintracker/chaintracks/Chaintracks.js +48 -6
  33. package/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
  34. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.d.ts.map +1 -1
  35. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js +1 -1
  36. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js.map +1 -1
  37. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts.map +1 -1
  38. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js +5 -4
  39. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js.map +1 -1
  40. package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.d.ts +8 -0
  41. package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.d.ts.map +1 -1
  42. package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.js +4 -1
  43. package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.js.map +1 -1
  44. package/out/src/services/chaintracker/chaintracks/index.all.d.ts +3 -0
  45. package/out/src/services/chaintracker/chaintracks/index.all.d.ts.map +1 -1
  46. package/out/src/services/chaintracker/chaintracks/index.all.js +3 -0
  47. package/out/src/services/chaintracker/chaintracks/index.all.js.map +1 -1
  48. package/out/src/services/chaintracker/chaintracks/index.mobile.d.ts +5 -0
  49. package/out/src/services/chaintracker/chaintracks/index.mobile.d.ts.map +1 -1
  50. package/out/src/services/chaintracker/chaintracks/index.mobile.js +5 -0
  51. package/out/src/services/chaintracker/chaintracks/index.mobile.js.map +1 -1
  52. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.d.ts +33 -0
  53. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.d.ts.map +1 -0
  54. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.js +204 -0
  55. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.js.map +1 -0
  56. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +39 -0
  57. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
  58. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +248 -85
  59. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
  60. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.d.ts +32 -0
  61. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.d.ts.map +1 -0
  62. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.js +30 -0
  63. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.js.map +1 -0
  64. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts +2 -1
  65. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts.map +1 -1
  66. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js +2 -2
  67. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js.map +1 -1
  68. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts +31 -4
  69. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts.map +1 -1
  70. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js +124 -46
  71. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js.map +1 -1
  72. package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.d.ts +39 -0
  73. package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.d.ts.map +1 -0
  74. package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.js +194 -0
  75. package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.js.map +1 -0
  76. package/out/src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.d.ts +30 -0
  77. package/out/src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.d.ts.map +1 -0
  78. package/out/src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.js +57 -0
  79. package/out/src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.js.map +1 -0
  80. package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.d.ts +12 -0
  81. package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.d.ts.map +1 -0
  82. package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.js +52 -0
  83. package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.js.map +1 -0
  84. package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.d.ts +40 -0
  85. package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.d.ts.map +1 -0
  86. package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.js +207 -0
  87. package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.js.map +1 -0
  88. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts +11 -3
  89. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +1 -1
  90. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +51 -12
  91. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js.map +1 -1
  92. package/out/src/services/chaintracker/index.all.d.ts +1 -0
  93. package/out/src/services/chaintracker/index.all.d.ts.map +1 -1
  94. package/out/src/services/chaintracker/index.all.js +1 -0
  95. package/out/src/services/chaintracker/index.all.js.map +1 -1
  96. package/out/src/services/chaintracker/index.client.d.ts +1 -0
  97. package/out/src/services/chaintracker/index.client.d.ts.map +1 -1
  98. package/out/src/services/chaintracker/index.client.js +1 -0
  99. package/out/src/services/chaintracker/index.client.js.map +1 -1
  100. package/out/src/services/chaintracker/index.mobile.d.ts +1 -0
  101. package/out/src/services/chaintracker/index.mobile.d.ts.map +1 -1
  102. package/out/src/services/chaintracker/index.mobile.js +1 -0
  103. package/out/src/services/chaintracker/index.mobile.js.map +1 -1
  104. package/package.json +2 -2
@@ -0,0 +1,96 @@
1
+ import type { ChainTracker } from '@bsv/sdk';
2
+ import type { ChaintracksClientApi } from './chaintracks/Api/ChaintracksClientApi';
3
+ /** @public */
4
+ export type LocalChainTrackerMode = 'local-primary' | 'remote-only';
5
+ /** @public */
6
+ export type LocalChainTrackerConsistency = 'unchecked' | 'agreed' | 'lagging' | 'diverged' | 'insufficient-references' | 'error';
7
+ /** @public */
8
+ export interface LocalChainTrackerRecoveryEvidence {
9
+ reason: 'lagging' | 'diverged';
10
+ localHeight: number;
11
+ referenceHeight: number;
12
+ heightLag: number;
13
+ comparisonHeight: number;
14
+ expectedHash: string;
15
+ referenceAgreement: number;
16
+ }
17
+ /** @public */
18
+ export interface LocalChainTrackerStatus {
19
+ mode: LocalChainTrackerMode;
20
+ activeSource: string;
21
+ consistency: LocalChainTrackerConsistency;
22
+ localHeight?: number;
23
+ localTipHash?: string;
24
+ referenceHeight?: number;
25
+ heightLag?: number;
26
+ comparisonHeight?: number;
27
+ expectedHash?: string;
28
+ referenceAgreement?: number;
29
+ checkedAt?: string;
30
+ recoveredAt?: string;
31
+ lastFallbackAt?: string;
32
+ lastError?: string;
33
+ }
34
+ /** @public */
35
+ export interface LocalChainTrackerOptions {
36
+ /** Locally persisted, proof-of-work-validating ChainTracks client. */
37
+ local: ChaintracksClientApi;
38
+ /** Independent references used for diagnostics and exceptional fallback. */
39
+ fallbacks?: ChaintracksClientApi[];
40
+ mode?: LocalChainTrackerMode;
41
+ fallbackOnLocalError?: boolean;
42
+ /** Number of matching references needed for a fallback validation result. */
43
+ requiredFallbackAgreement?: number;
44
+ /** Number of matching references needed to declare local divergence. */
45
+ requiredConsistencyAgreement?: number;
46
+ /** Quorum-backed height lag tolerated before local state is considered stuck. */
47
+ maxHeightLag?: number;
48
+ autoRecover?: boolean;
49
+ /** Clears/reseeds local state and returns the replacement local client. */
50
+ recoverLocal?: (evidence: LocalChainTrackerRecoveryEvidence) => Promise<ChaintracksClientApi>;
51
+ /** Clears local state and returns a fresh local client. */
52
+ clearLocal?: () => Promise<ChaintracksClientApi>;
53
+ now?: () => Date;
54
+ }
55
+ /**
56
+ * Local-first SDK ChainTracker with explicit management and fallback state.
57
+ *
58
+ * A definitive local `false` validation is never overridden by a remote
59
+ * source. Fallback is reserved for local exceptions or explicit remote-only
60
+ * mode, and applications can require agreement across multiple independent
61
+ * references before accepting a fallback result.
62
+ *
63
+ * @public
64
+ */
65
+ export declare class LocalChainTracker implements ChainTracker {
66
+ private local;
67
+ private readonly fallbacks;
68
+ private readonly fallbackOnLocalError;
69
+ private readonly requiredFallbackAgreement;
70
+ private readonly requiredConsistencyAgreement;
71
+ private readonly maxHeightLag;
72
+ private readonly autoRecover;
73
+ private readonly recoverLocal;
74
+ private readonly clearLocal;
75
+ private readonly now;
76
+ private status;
77
+ constructor(options: LocalChainTrackerOptions);
78
+ getMode(): LocalChainTrackerMode;
79
+ setMode(mode: LocalChainTrackerMode): void;
80
+ getStatus(): LocalChainTrackerStatus;
81
+ getLocalClient(): ChaintracksClientApi;
82
+ currentHeight(): Promise<number>;
83
+ isValidRootForHeight(root: string, height: number): Promise<boolean>;
84
+ synchronize(): Promise<LocalChainTrackerStatus>;
85
+ clearLocalData(): Promise<LocalChainTrackerStatus>;
86
+ checkConsistency(): Promise<LocalChainTrackerStatus>;
87
+ private checkConsistencyInternal;
88
+ private fallbackHeight;
89
+ private fallbackValidation;
90
+ private recordFallback;
91
+ private recordError;
92
+ private errorMessage;
93
+ private validateAgreement;
94
+ private validateHeightLag;
95
+ }
96
+ //# sourceMappingURL=LocalChainTracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalChainTracker.d.ts","sourceRoot":"","sources":["../../../../src/services/chaintracker/LocalChainTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LocalChainTracker = void 0;
4
+ /**
5
+ * Local-first SDK ChainTracker with explicit management and fallback state.
6
+ *
7
+ * A definitive local `false` validation is never overridden by a remote
8
+ * source. Fallback is reserved for local exceptions or explicit remote-only
9
+ * mode, and applications can require agreement across multiple independent
10
+ * references before accepting a fallback result.
11
+ *
12
+ * @public
13
+ */
14
+ class LocalChainTracker {
15
+ local;
16
+ fallbacks;
17
+ fallbackOnLocalError;
18
+ requiredFallbackAgreement;
19
+ requiredConsistencyAgreement;
20
+ maxHeightLag;
21
+ autoRecover;
22
+ recoverLocal;
23
+ clearLocal;
24
+ now;
25
+ status;
26
+ constructor(options) {
27
+ this.local = options.local;
28
+ this.fallbacks = [...(options.fallbacks ?? [])];
29
+ this.fallbackOnLocalError = options.fallbackOnLocalError ?? true;
30
+ this.requiredFallbackAgreement = this.validateAgreement(options.requiredFallbackAgreement ?? 1, 'requiredFallbackAgreement');
31
+ this.requiredConsistencyAgreement = this.validateAgreement(options.requiredConsistencyAgreement ?? 2, 'requiredConsistencyAgreement');
32
+ this.maxHeightLag = this.validateHeightLag(options.maxHeightLag ?? 6);
33
+ this.autoRecover = options.autoRecover ?? false;
34
+ this.recoverLocal = options.recoverLocal;
35
+ this.clearLocal = options.clearLocal;
36
+ this.now = options.now ?? (() => new Date());
37
+ this.status = {
38
+ mode: options.mode ?? 'local-primary',
39
+ activeSource: options.mode === 'remote-only' ? 'fallback' : 'local',
40
+ consistency: 'unchecked'
41
+ };
42
+ }
43
+ getMode() {
44
+ return this.status.mode;
45
+ }
46
+ setMode(mode) {
47
+ this.status = {
48
+ ...this.status,
49
+ mode,
50
+ activeSource: mode === 'remote-only' ? 'fallback' : 'local'
51
+ };
52
+ }
53
+ getStatus() {
54
+ return { ...this.status };
55
+ }
56
+ getLocalClient() {
57
+ return this.local;
58
+ }
59
+ async currentHeight() {
60
+ if (this.status.mode === 'remote-only') {
61
+ return await this.fallbackHeight();
62
+ }
63
+ try {
64
+ const height = await this.local.getPresentHeight();
65
+ this.status = { ...this.status, activeSource: 'local', localHeight: height, lastError: undefined };
66
+ return height;
67
+ }
68
+ catch (error) {
69
+ this.recordError(error);
70
+ if (!this.fallbackOnLocalError)
71
+ throw error;
72
+ return await this.fallbackHeight();
73
+ }
74
+ }
75
+ async isValidRootForHeight(root, height) {
76
+ if (this.status.mode !== 'remote-only') {
77
+ try {
78
+ const valid = await this.local.isValidRootForHeight(root, height);
79
+ this.status = { ...this.status, activeSource: 'local', lastError: undefined };
80
+ return valid;
81
+ }
82
+ catch (error) {
83
+ this.recordError(error);
84
+ if (!this.fallbackOnLocalError)
85
+ throw error;
86
+ }
87
+ }
88
+ return await this.fallbackValidation(root, height);
89
+ }
90
+ async synchronize() {
91
+ await this.local.startListening();
92
+ await this.local.listening();
93
+ return await this.checkConsistency();
94
+ }
95
+ async clearLocalData() {
96
+ if (this.clearLocal == null)
97
+ throw new Error('Local ChainTracks clearing is not configured.');
98
+ this.local = await this.clearLocal();
99
+ this.status = {
100
+ mode: this.status.mode,
101
+ activeSource: this.status.mode === 'remote-only' ? 'fallback' : 'local',
102
+ consistency: 'unchecked'
103
+ };
104
+ return this.getStatus();
105
+ }
106
+ async checkConsistency() {
107
+ return await this.checkConsistencyInternal(true);
108
+ }
109
+ async checkConsistencyInternal(allowRecovery) {
110
+ const checkedAt = this.now().toISOString();
111
+ try {
112
+ const localHeight = await this.local.getPresentHeight();
113
+ const localTipHash = await this.local.findChainTipHash();
114
+ const references = await Promise.all(this.fallbacks.map(async (client, index) => {
115
+ try {
116
+ return { client, index, height: await client.getPresentHeight() };
117
+ }
118
+ catch {
119
+ return undefined;
120
+ }
121
+ }));
122
+ const available = references.filter((value) => value != null);
123
+ if (available.length === 0) {
124
+ this.status = {
125
+ ...this.status,
126
+ activeSource: 'local',
127
+ consistency: 'insufficient-references',
128
+ localHeight,
129
+ localTipHash,
130
+ checkedAt,
131
+ lastError: undefined
132
+ };
133
+ return this.getStatus();
134
+ }
135
+ if (available.length < this.requiredConsistencyAgreement) {
136
+ this.status = {
137
+ ...this.status,
138
+ activeSource: 'local',
139
+ consistency: 'insufficient-references',
140
+ localHeight,
141
+ localTipHash,
142
+ checkedAt,
143
+ lastError: undefined
144
+ };
145
+ return this.getStatus();
146
+ }
147
+ // The Nth highest reference height is the greatest height reached by at
148
+ // least N references. A stale or inflated minority cannot move it.
149
+ const referenceHeight = [...available].map(reference => reference.height).sort((a, b) => b - a)[this.requiredConsistencyAgreement - 1];
150
+ const comparisonHeight = Math.min(localHeight, referenceHeight);
151
+ const heightLag = Math.max(0, referenceHeight - localHeight);
152
+ const localHeader = await this.local.findHeaderForHeight(comparisonHeight);
153
+ const referenceHeaders = await Promise.all(available
154
+ .filter(reference => reference.height >= comparisonHeight)
155
+ .map(async (reference) => {
156
+ try {
157
+ return await reference.client.findHeaderForHeight(comparisonHeight);
158
+ }
159
+ catch {
160
+ return undefined;
161
+ }
162
+ }));
163
+ const agreements = new Map();
164
+ for (const header of referenceHeaders) {
165
+ if (header != null)
166
+ agreements.set(header.hash, (agreements.get(header.hash) ?? 0) + 1);
167
+ }
168
+ const [expectedHash, referenceAgreement] = [...agreements.entries()].sort(([hashA, countA], [hashB, countB]) => countB - countA || hashA.localeCompare(hashB))[0] ?? [undefined, 0];
169
+ const enoughReferences = referenceAgreement >= this.requiredConsistencyAgreement;
170
+ let consistency;
171
+ if (!enoughReferences)
172
+ consistency = 'insufficient-references';
173
+ else if (localHeader?.hash !== expectedHash)
174
+ consistency = 'diverged';
175
+ else if (heightLag > this.maxHeightLag)
176
+ consistency = 'lagging';
177
+ else
178
+ consistency = 'agreed';
179
+ this.status = {
180
+ ...this.status,
181
+ activeSource: 'local',
182
+ consistency,
183
+ localHeight,
184
+ localTipHash,
185
+ referenceHeight,
186
+ heightLag,
187
+ comparisonHeight,
188
+ expectedHash,
189
+ referenceAgreement,
190
+ checkedAt,
191
+ lastError: undefined
192
+ };
193
+ if ((consistency === 'diverged' || consistency === 'lagging') &&
194
+ allowRecovery &&
195
+ this.autoRecover &&
196
+ this.recoverLocal != null &&
197
+ expectedHash != null) {
198
+ this.local = await this.recoverLocal({
199
+ reason: consistency,
200
+ localHeight,
201
+ referenceHeight,
202
+ heightLag,
203
+ comparisonHeight,
204
+ expectedHash,
205
+ referenceAgreement
206
+ });
207
+ const recoveredAt = this.now().toISOString();
208
+ const recovered = await this.checkConsistencyInternal(false);
209
+ this.status = { ...recovered, recoveredAt };
210
+ }
211
+ return this.getStatus();
212
+ }
213
+ catch (error) {
214
+ this.status = {
215
+ ...this.status,
216
+ consistency: 'error',
217
+ checkedAt,
218
+ lastError: this.errorMessage(error)
219
+ };
220
+ return this.getStatus();
221
+ }
222
+ }
223
+ async fallbackHeight() {
224
+ let lastError;
225
+ for (const [index, fallback] of this.fallbacks.entries()) {
226
+ try {
227
+ const height = await fallback.getPresentHeight();
228
+ this.recordFallback(index);
229
+ return height;
230
+ }
231
+ catch (error) {
232
+ lastError = error;
233
+ }
234
+ }
235
+ const error = lastError ?? new Error('No fallback ChainTracks source is configured.');
236
+ this.recordError(error);
237
+ throw error;
238
+ }
239
+ async fallbackValidation(root, height) {
240
+ let valid = 0;
241
+ let invalid = 0;
242
+ let lastError;
243
+ for (const [index, fallback] of this.fallbacks.entries()) {
244
+ try {
245
+ if (await fallback.isValidRootForHeight(root, height))
246
+ valid++;
247
+ else
248
+ invalid++;
249
+ if (valid >= this.requiredFallbackAgreement) {
250
+ this.recordFallback(index);
251
+ return true;
252
+ }
253
+ if (invalid >= this.requiredFallbackAgreement) {
254
+ this.recordFallback(index);
255
+ return false;
256
+ }
257
+ }
258
+ catch (error) {
259
+ lastError = error;
260
+ }
261
+ }
262
+ const error = lastError ??
263
+ new Error(`Fallback agreement unavailable: ${valid} valid and ${invalid} invalid responses, ` +
264
+ `${this.requiredFallbackAgreement} required.`);
265
+ this.recordError(error);
266
+ throw error;
267
+ }
268
+ recordFallback(index) {
269
+ this.status = {
270
+ ...this.status,
271
+ activeSource: `fallback-${index + 1}`,
272
+ lastFallbackAt: this.now().toISOString(),
273
+ lastError: undefined
274
+ };
275
+ }
276
+ recordError(error) {
277
+ this.status = { ...this.status, activeSource: 'unavailable', lastError: this.errorMessage(error) };
278
+ }
279
+ errorMessage(error) {
280
+ return error instanceof Error ? error.message : String(error);
281
+ }
282
+ validateAgreement(value, name) {
283
+ if (!Number.isSafeInteger(value) || value < 1)
284
+ throw new Error(`${name} must be a positive safe integer`);
285
+ return value;
286
+ }
287
+ validateHeightLag(value) {
288
+ if (!Number.isSafeInteger(value) || value < 0) {
289
+ throw new Error('maxHeightLag must be a non-negative safe integer');
290
+ }
291
+ return value;
292
+ }
293
+ }
294
+ exports.LocalChainTracker = LocalChainTracker;
295
+ //# sourceMappingURL=LocalChainTracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LocalChainTracker.js","sourceRoot":"","sources":["../../../../src/services/chaintracker/LocalChainTracker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { BulkHeaderFileInfo } from '../util/BulkHeaderFile';
2
+ /**
3
+ * Persistent backing cache for immutable bulk-header objects.
4
+ *
5
+ * Implementations may read packaged checkpoint assets, application storage,
6
+ * or a filesystem. The manager validates the byte length and SHA-256 digest
7
+ * before using any returned value or persisting a downloaded value.
8
+ *
9
+ * @public
10
+ */
11
+ export interface BulkFileDataCacheApi {
12
+ get(file: Readonly<BulkHeaderFileInfo>): Promise<Uint8Array | undefined>;
13
+ set(file: Readonly<BulkHeaderFileInfo>, data: Uint8Array): Promise<void>;
14
+ /**
15
+ * Preserve a rejected object outside the active cache namespace. The manager
16
+ * calls this before attempting a replacement and never removes a last-good
17
+ * object merely because a newer source is unavailable.
18
+ */
19
+ quarantine?(file: Readonly<BulkHeaderFileInfo>, reason: string,
20
+ /** Exact rejected bytes, used to avoid quarantining a concurrent replacement. */
21
+ rejectedData?: Uint8Array): Promise<void>;
22
+ /**
23
+ * Promote a validated legacy entry into the implementation's preferred
24
+ * immutable namespace. Implementations should make this idempotent.
25
+ */
26
+ promoteValidated?(file: Readonly<BulkHeaderFileInfo>, data: Uint8Array): Promise<void>;
27
+ delete?(file: Readonly<BulkHeaderFileInfo>): Promise<void>;
28
+ }
29
+ /**
30
+ * A deployment-defined budget for remote bulk-header downloads.
31
+ * Implementations should throw before the request when the requested byte
32
+ * reservation would exceed the configured budget.
33
+ *
34
+ * @public
35
+ */
36
+ export interface BulkFileDownloadBudgetApi {
37
+ consume(byteCount: number): void | Promise<void>;
38
+ snapshot?(): BulkFileDownloadBudgetSnapshot;
39
+ }
40
+ /** @public */
41
+ export interface BulkFileDownloadBudgetSnapshot {
42
+ maxBytes: number;
43
+ consumedBytes: number;
44
+ remainingBytes: number;
45
+ windowStartedAt: number;
46
+ windowMsecs: number;
47
+ }
48
+ //# sourceMappingURL=BulkFileDataCacheApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkFileDataCacheApi.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/Api/BulkFileDataCacheApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAEhE;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAAA;IACxE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxE;;;;OAIG;IACH,UAAU,CAAC,CACT,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,MAAM,EAAE,MAAM;IACd,iFAAiF;IACjF,YAAY,CAAC,EAAE,UAAU,GACxB,OAAO,CAAC,IAAI,CAAC,CAAA;IAChB;;;OAGG;IACH,gBAAgB,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtF,MAAM,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3D;AAED;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChD,QAAQ,CAAC,IAAI,8BAA8B,CAAA;CAC5C;AAED,cAAc;AACd,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;CACpB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=BulkFileDataCacheApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkFileDataCacheApi.js","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/Api/BulkFileDataCacheApi.ts"],"names":[],"mappings":""}
@@ -0,0 +1,70 @@
1
+ import type { Chain } from '../../../../sdk/types';
2
+ /**
3
+ * Identifies deterministic rejection of the supplied immutable bytes.
4
+ * Operational failures such as worker crashes and queue saturation deliberately
5
+ * use ordinary errors so callers preserve the cache entry and avoid downloading
6
+ * a replacement that cannot be validated.
7
+ *
8
+ * @public
9
+ */
10
+ export declare class BulkFileDataValidationError extends Error {
11
+ readonly data?: Uint8Array | undefined;
12
+ constructor(message: string, data?: Uint8Array | undefined);
13
+ }
14
+ /**
15
+ * Complete immutable bulk-header object supplied to a validator.
16
+ *
17
+ * Implementations must validate the exact byte length and digest as well as
18
+ * every header's linkage, chain work, genesis, and proof of work.
19
+ *
20
+ * @public
21
+ */
22
+ export interface BulkFileDataValidationRequest {
23
+ fileName: string;
24
+ data: Uint8Array;
25
+ count: number;
26
+ /** Expected base64 SHA-256 digest. Omit only while producing a new export. */
27
+ fileHash?: string;
28
+ firstHeight: number;
29
+ prevHash: string;
30
+ prevChainWork: string;
31
+ lastHash?: string | null;
32
+ lastChainWork?: string | null;
33
+ chain?: Chain;
34
+ }
35
+ /** @public */
36
+ export interface BulkFileDataValidationResult {
37
+ /** The validated bytes. Worker implementations may transfer ownership. */
38
+ data: Uint8Array;
39
+ fileHash: string;
40
+ lastHeaderHash: string;
41
+ lastChainWork: string;
42
+ }
43
+ /** @public */
44
+ export interface BulkFileDataValidatorStats {
45
+ submitted: number;
46
+ completed: number;
47
+ failed: number;
48
+ rejected: number;
49
+ workerRestarts: number;
50
+ inFlight: number;
51
+ queued: number;
52
+ maxQueueDepth: number;
53
+ totalValidationMsecs: number;
54
+ maxValidationMsecs: number;
55
+ }
56
+ /**
57
+ * Asynchronous validation boundary for immutable bulk-header objects.
58
+ *
59
+ * Portable runtimes may validate in-process. Node services can inject a
60
+ * worker-backed implementation so proof-of-work validation never blocks the
61
+ * request event loop.
62
+ *
63
+ * @public
64
+ */
65
+ export interface BulkFileDataValidatorApi {
66
+ validate(request: BulkFileDataValidationRequest): Promise<BulkFileDataValidationResult>;
67
+ getStats?(): BulkFileDataValidatorStats;
68
+ destroy?(): Promise<void>;
69
+ }
70
+ //# sourceMappingURL=BulkFileDataValidatorApi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkFileDataValidatorApi.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAElD;;;;;;;GAOG;AACH,qBAAa,2BAA4B,SAAQ,KAAK;aAGlC,IAAI,CAAC,EAAE,UAAU;IAFnC,YACE,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,UAAU,YAAA,EAIlC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,KAAK,CAAC,EAAE,KAAK,CAAA;CACd;AAED,cAAc;AACd,MAAM,WAAW,4BAA4B;IAC3C,0EAA0E;IAC1E,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,cAAc;AACd,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,6BAA6B,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAA;IACvF,QAAQ,CAAC,IAAI,0BAA0B,CAAA;IACvC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BulkFileDataValidationError = void 0;
4
+ /**
5
+ * Identifies deterministic rejection of the supplied immutable bytes.
6
+ * Operational failures such as worker crashes and queue saturation deliberately
7
+ * use ordinary errors so callers preserve the cache entry and avoid downloading
8
+ * a replacement that cannot be validated.
9
+ *
10
+ * @public
11
+ */
12
+ class BulkFileDataValidationError extends Error {
13
+ data;
14
+ constructor(message, data) {
15
+ super(message);
16
+ this.data = data;
17
+ this.name = 'BulkFileDataValidationError';
18
+ }
19
+ }
20
+ exports.BulkFileDataValidationError = BulkFileDataValidationError;
21
+ //# sourceMappingURL=BulkFileDataValidatorApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BulkFileDataValidatorApi.js","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.ts"],"names":[],"mappings":";;;AAEA;;;;;;;GAOG;AACH,iCAAyC,SAAQ,KAAK;IAGlC,IAAI;IAFtB,YACE,OAAe,EACC,IAAiB;QAEjC,KAAK,CAAC,OAAO,CAAC,CAAA;oBAFE,IAAI;QAGpB,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAA;IAC3C,CAAC;CACF"}
@@ -29,6 +29,41 @@ export interface ChaintracksInfoApi {
29
29
  packages: ChaintracksPackageInfoApi[];
30
30
  /** Last observed source state. Additive and omitted by older services. */
31
31
  sources?: ChaintracksSourceStatusApi[];
32
+ /** Local bulk-header retrieval counters. Additive and omitted by older services. */
33
+ bulkData?: ChaintracksBulkDataStatsApi;
34
+ }
35
+ /** @public */
36
+ export interface ChaintracksBulkDataStatsApi {
37
+ memoryHits: number;
38
+ storageHits: number;
39
+ persistentCacheHits: number;
40
+ persistentCacheMisses: number;
41
+ persistentCacheRejects: number;
42
+ coalescedLoads: number;
43
+ downloads: number;
44
+ downloadedBytes: number;
45
+ loadBackoffs: number;
46
+ /** Worker or portable validator statistics when the implementation exposes them. */
47
+ validation?: {
48
+ submitted: number;
49
+ completed: number;
50
+ failed: number;
51
+ rejected: number;
52
+ workerRestarts: number;
53
+ inFlight: number;
54
+ queued: number;
55
+ maxQueueDepth: number;
56
+ totalValidationMsecs: number;
57
+ maxValidationMsecs: number;
58
+ };
59
+ /** Durable download reservation state when configured. */
60
+ downloadBudget?: {
61
+ maxBytes: number;
62
+ consumedBytes: number;
63
+ remainingBytes: number;
64
+ windowStartedAt: number;
65
+ windowMsecs: number;
66
+ };
32
67
  }
33
68
  /** @public */
34
69
  export interface ChaintracksSourceStatusApi {
@@ -39,6 +74,17 @@ export interface ChaintracksSourceStatusApi {
39
74
  lastFailure?: string;
40
75
  error?: string;
41
76
  }
77
+ /** Constant-time, local-only process state for probes and operators. @public */
78
+ export interface ChaintracksAvailabilitySnapshotApi {
79
+ available: boolean;
80
+ startupError?: string;
81
+ presentHeight?: number;
82
+ presentHeightUpdatedAt?: string;
83
+ presentHeightRefreshInFlight: boolean;
84
+ mainLoopHeartbeatAt?: string;
85
+ sources: ChaintracksSourceStatusApi[];
86
+ bulkData: ChaintracksBulkDataStatsApi;
87
+ }
42
88
  /**
43
89
  * Chaintracks client API excluding events and callbacks
44
90
  * @public
@@ -1 +1 @@
1
- {"version":3,"file":"ChaintracksClientApi.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChaintracksClientApi.d.ts","sourceRoot":"","sources":["../../../../../../src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.ts"],"names":[],"mappings":"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"}