@bsv/wallet-toolbox 2.1.9 → 2.1.10

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 (110) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/docs/client.md +305 -156
  3. package/docs/monitor.md +153 -16
  4. package/docs/setup.md +4 -8
  5. package/docs/storage.md +37 -8
  6. package/docs/wallet.md +305 -156
  7. package/out/src/Setup.d.ts.map +1 -1
  8. package/out/src/Setup.js +1 -2
  9. package/out/src/Setup.js.map +1 -1
  10. package/out/src/SetupClient.d.ts.map +1 -1
  11. package/out/src/SetupClient.js +1 -2
  12. package/out/src/SetupClient.js.map +1 -1
  13. package/out/src/index.all.d.ts +1 -2
  14. package/out/src/index.all.d.ts.map +1 -1
  15. package/out/src/index.all.js +1 -2
  16. package/out/src/index.all.js.map +1 -1
  17. package/out/src/monitor/Monitor.d.ts +4 -3
  18. package/out/src/monitor/Monitor.d.ts.map +1 -1
  19. package/out/src/monitor/Monitor.js +39 -11
  20. package/out/src/monitor/Monitor.js.map +1 -1
  21. package/out/src/monitor/MonitorDaemon.d.ts +2 -1
  22. package/out/src/monitor/MonitorDaemon.d.ts.map +1 -1
  23. package/out/src/monitor/MonitorDaemon.js +1 -4
  24. package/out/src/monitor/MonitorDaemon.js.map +1 -1
  25. package/out/src/monitor/index.all.d.ts +4 -0
  26. package/out/src/monitor/index.all.d.ts.map +1 -0
  27. package/out/src/monitor/index.all.js +43 -0
  28. package/out/src/monitor/index.all.js.map +1 -0
  29. package/out/src/monitor/tasks/TaskReviewDoubleSpends.d.ts +26 -0
  30. package/out/src/monitor/tasks/TaskReviewDoubleSpends.d.ts.map +1 -0
  31. package/out/src/monitor/tasks/TaskReviewDoubleSpends.js +124 -0
  32. package/out/src/monitor/tasks/TaskReviewDoubleSpends.js.map +1 -0
  33. package/out/src/monitor/tasks/TaskReviewProvenTxs.d.ts +34 -0
  34. package/out/src/monitor/tasks/TaskReviewProvenTxs.d.ts.map +1 -0
  35. package/out/src/monitor/tasks/TaskReviewProvenTxs.js +131 -0
  36. package/out/src/monitor/tasks/TaskReviewProvenTxs.js.map +1 -0
  37. package/out/src/monitor/tasks/TaskReviewUtxos.d.ts +23 -0
  38. package/out/src/monitor/tasks/TaskReviewUtxos.d.ts.map +1 -0
  39. package/out/src/monitor/tasks/TaskReviewUtxos.js +71 -0
  40. package/out/src/monitor/tasks/TaskReviewUtxos.js.map +1 -0
  41. package/out/src/monitor/tasks/TaskSendWaiting.d.ts +14 -1
  42. package/out/src/monitor/tasks/TaskSendWaiting.d.ts.map +1 -1
  43. package/out/src/monitor/tasks/TaskSendWaiting.js +86 -20
  44. package/out/src/monitor/tasks/TaskSendWaiting.js.map +1 -1
  45. package/out/src/monitor/tasks/__tests/TaskReviewDoubleSpends.test.d.ts +2 -0
  46. package/out/src/monitor/tasks/__tests/TaskReviewDoubleSpends.test.d.ts.map +1 -0
  47. package/out/src/monitor/tasks/__tests/TaskReviewDoubleSpends.test.js +161 -0
  48. package/out/src/monitor/tasks/__tests/TaskReviewDoubleSpends.test.js.map +1 -0
  49. package/out/src/monitor/tasks/__tests/TaskReviewProvenTxs.test.d.ts +2 -0
  50. package/out/src/monitor/tasks/__tests/TaskReviewProvenTxs.test.d.ts.map +1 -0
  51. package/out/src/monitor/tasks/__tests/TaskReviewProvenTxs.test.js +214 -0
  52. package/out/src/monitor/tasks/__tests/TaskReviewProvenTxs.test.js.map +1 -0
  53. package/out/src/monitor/tasks/__tests/TaskReviewUtxos.test.d.ts +2 -0
  54. package/out/src/monitor/tasks/__tests/TaskReviewUtxos.test.d.ts.map +1 -0
  55. package/out/src/monitor/tasks/__tests/TaskReviewUtxos.test.js +92 -0
  56. package/out/src/monitor/tasks/__tests/TaskReviewUtxos.test.js.map +1 -0
  57. package/out/src/monitor/tasks/__tests/TaskSendWaiting.test.d.ts +2 -0
  58. package/out/src/monitor/tasks/__tests/TaskSendWaiting.test.d.ts.map +1 -0
  59. package/out/src/monitor/tasks/__tests/TaskSendWaiting.test.js +139 -0
  60. package/out/src/monitor/tasks/__tests/TaskSendWaiting.test.js.map +1 -0
  61. package/out/src/monitor/tasks/index.all.d.ts +19 -0
  62. package/out/src/monitor/tasks/index.all.d.ts.map +1 -0
  63. package/out/src/monitor/tasks/index.all.js +35 -0
  64. package/out/src/monitor/tasks/index.all.js.map +1 -0
  65. package/out/src/sdk/WalletStorage.interfaces.d.ts +9 -0
  66. package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
  67. package/out/src/services/Services.d.ts.map +1 -1
  68. package/out/src/services/Services.js +10 -2
  69. package/out/src/services/Services.js.map +1 -1
  70. package/out/src/services/__tests/getFiatExchangeRate.test.d.ts +2 -0
  71. package/out/src/services/__tests/getFiatExchangeRate.test.d.ts.map +1 -0
  72. package/out/src/services/__tests/getFiatExchangeRate.test.js +156 -0
  73. package/out/src/services/__tests/getFiatExchangeRate.test.js.map +1 -0
  74. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js +1 -1
  75. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js.map +1 -1
  76. package/out/src/services/createDefaultWalletServicesOptions.js +1 -1
  77. package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  78. package/out/src/services/providers/__tests/exchangeRates.test.js +4 -0
  79. package/out/src/services/providers/__tests/exchangeRates.test.js.map +1 -1
  80. package/out/src/storage/StorageKnex.d.ts +3 -1
  81. package/out/src/storage/StorageKnex.d.ts.map +1 -1
  82. package/out/src/storage/StorageKnex.js +26 -5
  83. package/out/src/storage/StorageKnex.js.map +1 -1
  84. package/out/src/storage/StorageProvider.d.ts +6 -1
  85. package/out/src/storage/StorageProvider.d.ts.map +1 -1
  86. package/out/src/storage/StorageProvider.js +6 -0
  87. package/out/src/storage/StorageProvider.js.map +1 -1
  88. package/out/src/storage/StorageReaderWriter.d.ts +2 -1
  89. package/out/src/storage/StorageReaderWriter.d.ts.map +1 -1
  90. package/out/src/storage/StorageReaderWriter.js.map +1 -1
  91. package/out/src/storage/WalletStorageManager.d.ts +7 -0
  92. package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
  93. package/out/src/storage/WalletStorageManager.js +33 -2
  94. package/out/src/storage/WalletStorageManager.js.map +1 -1
  95. package/out/src/storage/__test/findStaleMerkleRoots.test.d.ts +2 -0
  96. package/out/src/storage/__test/findStaleMerkleRoots.test.d.ts.map +1 -0
  97. package/out/src/storage/__test/findStaleMerkleRoots.test.js +41 -0
  98. package/out/src/storage/__test/findStaleMerkleRoots.test.js.map +1 -0
  99. package/out/src/storage/__test/findStaleMerkleRootsKnex.test.d.ts +2 -0
  100. package/out/src/storage/__test/findStaleMerkleRootsKnex.test.d.ts.map +1 -0
  101. package/out/src/storage/__test/findStaleMerkleRootsKnex.test.js +73 -0
  102. package/out/src/storage/__test/findStaleMerkleRootsKnex.test.js.map +1 -0
  103. package/out/src/utility/Format.d.ts.map +1 -1
  104. package/out/src/utility/Format.js +1 -0
  105. package/out/src/utility/Format.js.map +1 -1
  106. package/out/src/utility/index.all.d.ts +1 -0
  107. package/out/src/utility/index.all.d.ts.map +1 -1
  108. package/out/src/utility/index.all.js +1 -0
  109. package/out/src/utility/index.all.js.map +1 -1
  110. package/package.json +2 -2
package/docs/monitor.md CHANGED
@@ -24,6 +24,7 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
24
24
  | [DeactivedHeader](#interface-deactivedheader) |
25
25
  | [MonitorDaemonSetup](#interface-monitordaemonsetup) |
26
26
  | [MonitorOptions](#interface-monitoroptions) |
27
+ | [ReviewHeightRangeResult](#interface-reviewheightrangeresult) |
27
28
  | [TaskPurgeParams](#interface-taskpurgeparams) |
28
29
 
29
30
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
@@ -87,10 +88,11 @@ export interface MonitorDaemonSetup {
87
88
  services?: Services;
88
89
  monitor?: Monitor;
89
90
  chaintracks?: Chaintracks;
91
+ startupTaskMode?: MonitorStartupTaskMode;
90
92
  }
91
93
  ```
92
94
 
93
- See also: [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [Monitor](./monitor.md#class-monitor), [Services](./services.md#class-services), [StorageKnexOptions](./storage.md#interface-storageknexoptions), [StorageProvider](./storage.md#class-storageprovider), [WalletServicesOptions](./client.md#interface-walletservicesoptions), [WalletStorageManager](./storage.md#class-walletstoragemanager)
95
+ See also: [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [Monitor](./monitor.md#class-monitor), [MonitorStartupTaskMode](./monitor.md#type-monitorstartuptaskmode), [Services](./services.md#class-services), [StorageKnexOptions](./storage.md#interface-storageknexoptions), [StorageProvider](./storage.md#class-storageprovider), [WalletServicesOptions](./client.md#interface-walletservicesoptions), [WalletStorageManager](./storage.md#class-walletstoragemanager)
94
96
 
95
97
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
96
98
 
@@ -104,6 +106,7 @@ export interface MonitorOptions {
104
106
  storage: MonitorStorage;
105
107
  chaintracks: ChaintracksClientApi;
106
108
  chaintracksWithEvents?: Chaintracks;
109
+ startupTaskMode?: MonitorStartupTaskMode;
107
110
  msecsWaitPerMerkleProofServiceReq: number;
108
111
  taskRunWaitMsecs: number;
109
112
  abandonedMsecs: number;
@@ -119,7 +122,7 @@ export interface MonitorOptions {
119
122
  }
120
123
  ```
121
124
 
122
- See also: [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services), [WalletServices](./client.md#interface-walletservices)
125
+ See also: [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [MonitorStartupTaskMode](./monitor.md#type-monitorstartuptaskmode), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services), [WalletServices](./client.md#interface-walletservices)
123
126
 
124
127
  ###### Property EventSourceClass
125
128
 
@@ -175,6 +178,21 @@ saveLastSSEEventId?: (lastEventId: string) => Promise<void>
175
178
 
176
179
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
177
180
 
181
+ ---
182
+ ##### Interface: ReviewHeightRangeResult
183
+
184
+ ```ts
185
+ export interface ReviewHeightRangeResult {
186
+ log: string;
187
+ reviewedHeights: number;
188
+ mismatchedHeights: number;
189
+ affectedTransactions: number;
190
+ updatedTransactions: number;
191
+ }
192
+ ```
193
+
194
+ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
195
+
178
196
  ---
179
197
  ##### Interface: TaskPurgeParams
180
198
 
@@ -216,15 +234,16 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
216
234
 
217
235
  | | |
218
236
  | --- | --- |
219
- | [Monitor](#class-monitor) | [TaskNewHeader](#class-tasknewheader) |
220
- | [MonitorDaemon](#class-monitordaemon) | [TaskPurge](#class-taskpurge) |
221
- | [TaskArcadeSSE](#class-taskarcadesse) | [TaskReorg](#class-taskreorg) |
222
- | [TaskCheckForProofs](#class-taskcheckforproofs) | [TaskReviewStatus](#class-taskreviewstatus) |
223
- | [TaskCheckNoSends](#class-taskchecknosends) | [TaskSendWaiting](#class-tasksendwaiting) |
224
- | [TaskClock](#class-taskclock) | [TaskSyncWhenIdle](#class-tasksyncwhenidle) |
225
- | [TaskFailAbandoned](#class-taskfailabandoned) | [TaskUnFail](#class-taskunfail) |
226
- | [TaskMineBlock](#class-taskmineblock) | [WalletMonitorTask](#class-walletmonitortask) |
227
- | [TaskMonitorCallHistory](#class-taskmonitorcallhistory) | |
237
+ | [Monitor](#class-monitor) | [TaskPurge](#class-taskpurge) |
238
+ | [MonitorDaemon](#class-monitordaemon) | [TaskReorg](#class-taskreorg) |
239
+ | [TaskArcadeSSE](#class-taskarcadesse) | [TaskReviewDoubleSpends](#class-taskreviewdoublespends) |
240
+ | [TaskCheckForProofs](#class-taskcheckforproofs) | [TaskReviewProvenTxs](#class-taskreviewproventxs) |
241
+ | [TaskCheckNoSends](#class-taskchecknosends) | [TaskReviewStatus](#class-taskreviewstatus) |
242
+ | [TaskClock](#class-taskclock) | [TaskReviewUtxos](#class-taskreviewutxos) |
243
+ | [TaskFailAbandoned](#class-taskfailabandoned) | [TaskSendWaiting](#class-tasksendwaiting) |
244
+ | [TaskMineBlock](#class-taskmineblock) | [TaskSyncWhenIdle](#class-tasksyncwhenidle) |
245
+ | [TaskMonitorCallHistory](#class-taskmonitorcallhistory) | [TaskUnFail](#class-taskunfail) |
246
+ | [TaskNewHeader](#class-tasknewheader) | [WalletMonitorTask](#class-walletmonitortask) |
228
247
 
229
248
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
230
249
 
@@ -237,7 +256,7 @@ and potentially that reorgs update proofs that were already received.
237
256
 
238
257
  ```ts
239
258
  export class Monitor {
240
- static createDefaultWalletMonitorOptions(chain: Chain, storage: MonitorStorage, services?: Services, chaintracks?: Chaintracks): MonitorOptions
259
+ static createDefaultWalletMonitorOptions(chain: Chain, storage: MonitorStorage, services?: Services, chaintracks?: Chaintracks, startupTaskMode: MonitorStartupTaskMode = "none"): MonitorOptions
241
260
  options: MonitorOptions;
242
261
  services: Services | WalletServices;
243
262
  chain: Chain;
@@ -293,7 +312,7 @@ export class Monitor {
293
312
  }
294
313
  ```
295
314
 
296
- See also: [BlockHeader](./client.md#interface-blockheader), [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [DeactivedHeader](./monitor.md#interface-deactivedheader), [MonitorOptions](./monitor.md#interface-monitoroptions), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services), [TaskPurgeParams](./monitor.md#interface-taskpurgeparams), [WalletMonitorTask](./monitor.md#class-walletmonitortask), [WalletServices](./client.md#interface-walletservices)
315
+ See also: [BlockHeader](./client.md#interface-blockheader), [Chain](./client.md#type-chain), [Chaintracks](./services.md#class-chaintracks), [ChaintracksClientApi](./services.md#interface-chaintracksclientapi), [DeactivedHeader](./monitor.md#interface-deactivedheader), [MonitorOptions](./monitor.md#interface-monitoroptions), [MonitorStartupTaskMode](./monitor.md#type-monitorstartuptaskmode), [MonitorStorage](./monitor.md#type-monitorstorage), [ProvenTransactionStatus](./client.md#interface-proventransactionstatus), [ReviewActionResult](./client.md#interface-reviewactionresult), [Services](./services.md#class-services), [TaskPurgeParams](./monitor.md#interface-taskpurgeparams), [WalletMonitorTask](./monitor.md#class-walletmonitortask), [WalletServices](./client.md#interface-walletservices)
297
316
 
298
317
  ###### Property _otherTasks
299
318
 
@@ -316,7 +335,6 @@ See also: [WalletMonitorTask](./monitor.md#class-walletmonitortask)
316
335
  ###### Method addDefaultTasks
317
336
 
318
337
  Default tasks with settings appropriate for a single user storage
319
- possibly with sync'ing enabled
320
338
 
321
339
  ```ts
322
340
  addDefaultTasks(): void
@@ -325,7 +343,6 @@ addDefaultTasks(): void
325
343
  ###### Method addMultiUserTasks
326
344
 
327
345
  Tasks appropriate for multi-user storage
328
- without sync'ing enabled.
329
346
 
330
347
  ```ts
331
348
  addMultiUserTasks(): void
@@ -798,6 +815,61 @@ Argument Details
798
815
 
799
816
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
800
817
 
818
+ ---
819
+ ##### Class: TaskReviewDoubleSpends
820
+
821
+ Review recent reqs in terminal 'doubleSpend' state and move any false positives
822
+ back to 'unfail' so existing recovery handling can re-process them.
823
+
824
+ ```ts
825
+ export class TaskReviewDoubleSpends extends WalletMonitorTask {
826
+ static taskName = "ReviewDoubleSpends";
827
+ static checkNow = false;
828
+ triggerNextMsecs: number;
829
+ constructor(monitor: Monitor, public triggerMsecs = Monitor.oneMinute * 12, public reviewLimit = 100, public minAgeMinutes = 60, public triggerQuickMsecs = Monitor.oneMinute * 1)
830
+ trigger(nowMsecsSinceEpoch: number): {
831
+ run: boolean;
832
+ }
833
+ async getLastReviewedCheckpoint(): Promise<{
834
+ resumeOffset: number;
835
+ expectedProvenTxReqId?: number;
836
+ } | undefined>
837
+ async runTask(): Promise<string>
838
+ }
839
+ ```
840
+
841
+ See also: [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
842
+
843
+ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
844
+
845
+ ---
846
+ ##### Class: TaskReviewProvenTxs
847
+
848
+ Backup verification task for recent proven_txs records.
849
+
850
+ Reorg handling should normally be driven by TaskReorg via deactivated-header events.
851
+ This task runs a lagged audit over recent heights and only reproves transactions when
852
+ the currently canonical merkleRoot at a height no longer matches stored proven_txs roots.
853
+
854
+ ```ts
855
+ export class TaskReviewProvenTxs extends WalletMonitorTask {
856
+ static taskName = "ReviewProvenTxs";
857
+ static checkNow = false;
858
+ triggerNextMsecs: number;
859
+ constructor(monitor: Monitor, public triggerMsecs = Monitor.oneMinute * 10, public maxHeightsPerRun = 100, public minBlockAge = 100, public triggerQuickMsecs = Monitor.oneMinute * 1)
860
+ trigger(nowMsecsSinceEpoch: number): {
861
+ run: boolean;
862
+ }
863
+ async runTask(): Promise<string>
864
+ async reviewHeightRange(range: HeightRange): Promise<ReviewHeightRangeResult>
865
+ async getLastReviewedHeight(): Promise<number | undefined>
866
+ }
867
+ ```
868
+
869
+ See also: [HeightRange](./services.md#class-heightrange), [Monitor](./monitor.md#class-monitor), [ReviewHeightRangeResult](./monitor.md#interface-reviewheightrangeresult), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
870
+
871
+ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
872
+
801
873
  ---
802
874
  ##### Class: TaskReviewStatus
803
875
 
@@ -833,6 +905,30 @@ static checkNow = false
833
905
 
834
906
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
835
907
 
908
+ ---
909
+ ##### Class: TaskReviewUtxos
910
+
911
+ Use the reviewByIdentityKey method to review the utxos of a specific user by their identityKey.
912
+
913
+ The task itself is disabled and will not run on a schedule; review must be triggered manually by calling reviewByIdentityKey.
914
+
915
+ ```ts
916
+ export class TaskReviewUtxos extends WalletMonitorTask {
917
+ static taskName = "ReviewUtxos";
918
+ static checkNow = false;
919
+ constructor(monitor: Monitor, public triggerMsecs = 0, public userLimit = 10, public userOffset = 0, public tags: string[] = ["release", "all"])
920
+ trigger(_nowMsecsSinceEpoch: number): {
921
+ run: boolean;
922
+ }
923
+ async runTask(): Promise<string>
924
+ async reviewByIdentityKey(identityKey: string, mode: "all" | "change" = "all"): Promise<string>
925
+ }
926
+ ```
927
+
928
+ See also: [Monitor](./monitor.md#class-monitor), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
929
+
930
+ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
931
+
836
932
  ---
837
933
  ##### Class: TaskSendWaiting
838
934
 
@@ -841,7 +937,8 @@ export class TaskSendWaiting extends WalletMonitorTask {
841
937
  static taskName = "SendWaiting";
842
938
  lastSendingRunMsecsSinceEpoch: number | undefined;
843
939
  includeSending: boolean = true;
844
- constructor(monitor: Monitor, public triggerMsecs = Monitor.oneSecond * 8, public agedMsecs = Monitor.oneSecond * 7, public sendingMsecs = Monitor.oneMinute * 5)
940
+ triggerNextMsecs: number;
941
+ constructor(monitor: Monitor, public triggerMsecs = Monitor.oneSecond * 8, public agedMsecs = Monitor.oneSecond * 7, public sendingMsecs = Monitor.oneMinute * 5, public triggerQuickMsecs = Monitor.oneSecond * 1, public chunkLimit = 100)
845
942
  trigger(nowMsecsSinceEpoch: number): {
846
943
  run: boolean;
847
944
  }
@@ -852,6 +949,28 @@ export class TaskSendWaiting extends WalletMonitorTask {
852
949
 
853
950
  See also: [Monitor](./monitor.md#class-monitor), [TableProvenTxReq](./storage.md#interface-tableproventxreq), [WalletMonitorTask](./monitor.md#class-walletmonitortask)
854
951
 
952
+ ###### Constructor
953
+
954
+ ```ts
955
+ constructor(monitor: Monitor, public triggerMsecs = Monitor.oneSecond * 8, public agedMsecs = Monitor.oneSecond * 7, public sendingMsecs = Monitor.oneMinute * 5, public triggerQuickMsecs = Monitor.oneSecond * 1, public chunkLimit = 100)
956
+ ```
957
+ See also: [Monitor](./monitor.md#class-monitor)
958
+
959
+ Argument Details
960
+
961
+ + **monitor**
962
+ + Wallet monitor owning this task.
963
+ + **triggerMsecs**
964
+ + Normal interval between SendWaiting runs when no backlog remains.
965
+ + **agedMsecs**
966
+ + Minimum age a request must reach before this task will attempt to send it.
967
+ + **sendingMsecs**
968
+ + Minimum interval before stale `sending` requests are included again.
969
+ + **triggerQuickMsecs**
970
+ + Follow-up interval used when a full chunk was consumed and more work may remain.
971
+ + **chunkLimit**
972
+ + Maximum number of waiting requests to fetch and inspect in a single run.
973
+
855
974
  ###### Method processUnsent
856
975
 
857
976
  Process an array of 'unsent' status table.ProvenTxReq
@@ -1041,6 +1160,24 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
1041
1160
  ---
1042
1161
  #### Types
1043
1162
 
1163
+ | |
1164
+ | --- |
1165
+ | [MonitorStartupTaskMode](#type-monitorstartuptaskmode) |
1166
+ | [MonitorStorage](#type-monitorstorage) |
1167
+
1168
+ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
1169
+
1170
+ ---
1171
+
1172
+ ##### Type: MonitorStartupTaskMode
1173
+
1174
+ ```ts
1175
+ export type MonitorStartupTaskMode = "none" | "default" | "multiuser" | "alltoother"
1176
+ ```
1177
+
1178
+ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
1179
+
1180
+ ---
1044
1181
  ##### Type: MonitorStorage
1045
1182
 
1046
1183
  ```ts
package/docs/setup.md CHANGED
@@ -614,9 +614,8 @@ DEV_KEYS = '{
614
614
  const serviceOptions = Services.createDefaultOptions(chain);
615
615
  serviceOptions.taalApiKey = args.env.taalApiKey;
616
616
  const services = new Services(serviceOptions);
617
- const monopts = Monitor.createDefaultWalletMonitorOptions(chain, storage, services);
617
+ const monopts = Monitor.createDefaultWalletMonitorOptions(chain, storage, services, undefined, "default");
618
618
  const monitor = new Monitor(monopts);
619
- monitor.addDefaultTasks();
620
619
  const privilegedKeyManager = args.privilegedKeyGetter
621
620
  ? new PrivilegedKeyManager(args.privilegedKeyGetter)
622
621
  : undefined;
@@ -811,9 +810,8 @@ static async createWallet(args: SetupWalletArgs): Promise<SetupWallet> {
811
810
  const serviceOptions = Services.createDefaultOptions(chain);
812
811
  serviceOptions.taalApiKey = args.env.taalApiKey;
813
812
  const services = new Services(serviceOptions);
814
- const monopts = Monitor.createDefaultWalletMonitorOptions(chain, storage, services);
813
+ const monopts = Monitor.createDefaultWalletMonitorOptions(chain, storage, services, undefined, "default");
815
814
  const monitor = new Monitor(monopts);
816
- monitor.addDefaultTasks();
817
815
  const privilegedKeyManager = args.privilegedKeyGetter
818
816
  ? new PrivilegedKeyManager(args.privilegedKeyGetter)
819
817
  : undefined;
@@ -1012,9 +1010,8 @@ export abstract class SetupClient {
1012
1010
  const serviceOptions = Services.createDefaultOptions(chain);
1013
1011
  serviceOptions.taalApiKey = args.taalApiKey;
1014
1012
  const services = new Services(serviceOptions);
1015
- const monopts = Monitor.createDefaultWalletMonitorOptions(chain, storage, services);
1013
+ const monopts = Monitor.createDefaultWalletMonitorOptions(chain, storage, services, undefined, "default");
1016
1014
  const monitor = new Monitor(monopts);
1017
- monitor.addDefaultTasks();
1018
1015
  const privilegedKeyManager = args.privilegedKeyGetter
1019
1016
  ? new PrivilegedKeyManager(args.privilegedKeyGetter)
1020
1017
  : undefined;
@@ -1173,9 +1170,8 @@ static async createWallet(args: SetupClientWalletArgs): Promise<SetupWallet> {
1173
1170
  const serviceOptions = Services.createDefaultOptions(chain);
1174
1171
  serviceOptions.taalApiKey = args.taalApiKey;
1175
1172
  const services = new Services(serviceOptions);
1176
- const monopts = Monitor.createDefaultWalletMonitorOptions(chain, storage, services);
1173
+ const monopts = Monitor.createDefaultWalletMonitorOptions(chain, storage, services, undefined, "default");
1177
1174
  const monitor = new Monitor(monopts);
1178
- monitor.addDefaultTasks();
1179
1175
  const privilegedKeyManager = args.privilegedKeyGetter
1180
1176
  ? new PrivilegedKeyManager(args.privilegedKeyGetter)
1181
1177
  : undefined;
package/docs/storage.md CHANGED
@@ -550,6 +550,10 @@ export interface StorageAdminStats {
550
550
  txFailedWeek: number;
551
551
  txFailedMonth: number;
552
552
  txFailedTotal: number;
553
+ txAbandonedDay: number;
554
+ txAbandonedWeek: number;
555
+ txAbandonedMonth: number;
556
+ txAbandonedTotal: number;
553
557
  txUnprocessedDay: number;
554
558
  txUnprocessedWeek: number;
555
559
  txUnprocessedMonth: number;
@@ -3525,6 +3529,7 @@ export class StorageKnex extends StorageProvider implements WalletStorageProvide
3525
3529
  findOutputTagsQuery(args: FindOutputTagsArgs): Knex.QueryBuilder
3526
3530
  findProvenTxReqsQuery(args: FindProvenTxReqsArgs): Knex.QueryBuilder
3527
3531
  findProvenTxsQuery(args: FindProvenTxsArgs): Knex.QueryBuilder
3532
+ findStaleMerkleRootsQuery(args: FindStaleMerkleRootsArgs): Knex.QueryBuilder
3528
3533
  findSyncStatesQuery(args: FindSyncStatesArgs): Knex.QueryBuilder
3529
3534
  findTransactionsQuery(args: FindTransactionsArgs, count?: boolean): Knex.QueryBuilder
3530
3535
  findTxLabelMapsQuery(args: FindTxLabelMapsArgs): Knex.QueryBuilder
@@ -3543,6 +3548,7 @@ export class StorageKnex extends StorageProvider implements WalletStorageProvide
3543
3548
  override async findOutputTags(args: FindOutputTagsArgs): Promise<TableOutputTag[]>
3544
3549
  override async findProvenTxReqs(args: FindProvenTxReqsArgs): Promise<TableProvenTxReq[]>
3545
3550
  override async findProvenTxs(args: FindProvenTxsArgs): Promise<TableProvenTx[]>
3551
+ override async findStaleMerkleRoots(args: FindStaleMerkleRootsArgs): Promise<string[]>
3546
3552
  override async findSyncStates(args: FindSyncStatesArgs): Promise<TableSyncState[]>
3547
3553
  override async findTransactions(args: FindTransactionsArgs): Promise<TableTransaction[]>
3548
3554
  override async findTxLabelMaps(args: FindTxLabelMapsArgs): Promise<TableTxLabelMap[]>
@@ -3616,7 +3622,7 @@ export class StorageKnex extends StorageProvider implements WalletStorageProvide
3616
3622
  const one_day_ago = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString();
3617
3623
  const one_week_ago = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();
3618
3624
  const one_month_ago = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000).toISOString();
3619
- const [[{ usersDay, usersMonth, usersWeek, usersTotal, transactionsDay, transactionsMonth, transactionsWeek, transactionsTotal, txCompletedDay, txCompletedMonth, txCompletedWeek, txCompletedTotal, txFailedDay, txFailedMonth, txFailedWeek, txFailedTotal, txUnprocessedDay, txUnprocessedMonth, txUnprocessedWeek, txUnprocessedTotal, txSendingDay, txSendingMonth, txSendingWeek, txSendingTotal, txUnprovenDay, txUnprovenMonth, txUnprovenWeek, txUnprovenTotal, txUnsignedDay, txUnsignedMonth, txUnsignedWeek, txUnsignedTotal, txNosendDay, txNosendMonth, txNosendWeek, txNosendTotal, txNonfinalDay, txNonfinalMonth, txNonfinalWeek, txNonfinalTotal, txUnfailDay, txUnfailMonth, txUnfailWeek, txUnfailTotal, satoshisDefaultDay, satoshisDefaultMonth, satoshisDefaultWeek, satoshisDefaultTotal, satoshisOtherDay, satoshisOtherMonth, satoshisOtherWeek, satoshisOtherTotal, basketsDay, basketsMonth, basketsWeek, basketsTotal, labelsDay, labelsMonth, labelsWeek, labelsTotal, tagsDay, tagsMonth, tagsWeek, tagsTotal }]] = await this.knex.raw(`
3625
+ const [[{ usersDay, usersMonth, usersWeek, usersTotal, transactionsDay, transactionsMonth, transactionsWeek, transactionsTotal, txCompletedDay, txCompletedMonth, txCompletedWeek, txCompletedTotal, txFailedDay, txFailedMonth, txFailedWeek, txFailedTotal, txAbandonedDay, txAbandonedMonth, txAbandonedWeek, txAbandonedTotal, txUnprocessedDay, txUnprocessedMonth, txUnprocessedWeek, txUnprocessedTotal, txSendingDay, txSendingMonth, txSendingWeek, txSendingTotal, txUnprovenDay, txUnprovenMonth, txUnprovenWeek, txUnprovenTotal, txUnsignedDay, txUnsignedMonth, txUnsignedWeek, txUnsignedTotal, txNosendDay, txNosendMonth, txNosendWeek, txNosendTotal, txNonfinalDay, txNonfinalMonth, txNonfinalWeek, txNonfinalTotal, txUnfailDay, txUnfailMonth, txUnfailWeek, txUnfailTotal, satoshisDefaultDay, satoshisDefaultMonth, satoshisDefaultWeek, satoshisDefaultTotal, satoshisOtherDay, satoshisOtherMonth, satoshisOtherWeek, satoshisOtherTotal, basketsDay, basketsMonth, basketsWeek, basketsTotal, labelsDay, labelsMonth, labelsWeek, labelsTotal, tagsDay, tagsMonth, tagsWeek, tagsTotal }]] = await this.knex.raw(`
3620
3626
  select
3621
3627
  (select count(*) from users where created_at > '${one_day_ago}') as usersDay,
3622
3628
  (select count(*) from users where created_at > '${one_week_ago}') as usersWeek,
@@ -3630,10 +3636,14 @@ select
3630
3636
  (select count(*) from transactions where status = 'completed' and created_at > '${one_week_ago}') as txCompletedWeek,
3631
3637
  (select count(*) from transactions where status = 'completed' and created_at > '${one_month_ago}') as txCompletedMonth,
3632
3638
  (select count(*) from transactions where status = 'completed') as txCompletedTotal,
3633
- (select count(*) from transactions where status = 'failed' and created_at > '${one_day_ago}') as txFailedDay,
3634
- (select count(*) from transactions where status = 'failed' and created_at > '${one_week_ago}') as txFailedWeek,
3635
- (select count(*) from transactions where status = 'failed' and created_at > '${one_month_ago}') as txFailedMonth,
3636
- (select count(*) from transactions where status = 'failed') as txFailedTotal,
3639
+ (select count(*) from transactions where status = 'failed' and not txid is null and created_at > '${one_day_ago}') as txFailedDay,
3640
+ (select count(*) from transactions where status = 'failed' and not txid is null and created_at > '${one_week_ago}') as txFailedWeek,
3641
+ (select count(*) from transactions where status = 'failed' and not txid is null and created_at > '${one_month_ago}') as txFailedMonth,
3642
+ (select count(*) from transactions where status = 'failed' and not txid is null) as txFailedTotal,
3643
+ (select count(*) from transactions where status = 'failed' and txid is null and created_at > '${one_day_ago}') as txAbandonedDay,
3644
+ (select count(*) from transactions where status = 'failed' and txid is null and created_at > '${one_week_ago}') as txAbandonedWeek,
3645
+ (select count(*) from transactions where status = 'failed' and txid is null and created_at > '${one_month_ago}') as txAbandonedMonth,
3646
+ (select count(*) from transactions where status = 'failed' and txid is null) as txAbandonedTotal,
3637
3647
  (select count(*) from transactions where status = 'unprocessed' and created_at > '${one_day_ago}') as txUnprocessedDay,
3638
3648
  (select count(*) from transactions where status = 'unprocessed' and created_at > '${one_week_ago}') as txUnprocessedWeek,
3639
3649
  (select count(*) from transactions where status = 'unprocessed' and created_at > '${one_month_ago}') as txUnprocessedMonth,
@@ -3704,6 +3714,10 @@ select
3704
3714
  txFailedWeek,
3705
3715
  txFailedMonth,
3706
3716
  txFailedTotal,
3717
+ txAbandonedDay,
3718
+ txAbandonedWeek,
3719
+ txAbandonedMonth,
3720
+ txAbandonedTotal,
3707
3721
  txUnprocessedDay,
3708
3722
  txUnprocessedWeek,
3709
3723
  txUnprocessedMonth,
@@ -3758,7 +3772,7 @@ select
3758
3772
  }
3759
3773
  ```
3760
3774
 
3761
- See also: [AdminStatsResult](./storage.md#interface-adminstatsresult), [AuthId](./client.md#interface-authid), [DBType](./storage.md#type-dbtype), [EntityTimeStamp](./client.md#interface-entitytimestamp), [FindCertificateFieldsArgs](./client.md#interface-findcertificatefieldsargs), [FindCertificatesArgs](./client.md#interface-findcertificatesargs), [FindCommissionsArgs](./client.md#interface-findcommissionsargs), [FindForUserSincePagedArgs](./client.md#interface-findforusersincepagedargs), [FindMonitorEventsArgs](./client.md#interface-findmonitoreventsargs), [FindOutputBasketsArgs](./client.md#interface-findoutputbasketsargs), [FindOutputTagMapsArgs](./client.md#interface-findoutputtagmapsargs), [FindOutputTagsArgs](./client.md#interface-findoutputtagsargs), [FindOutputsArgs](./client.md#interface-findoutputsargs), [FindPartialSincePagedArgs](./client.md#interface-findpartialsincepagedargs), [FindProvenTxReqsArgs](./client.md#interface-findproventxreqsargs), [FindProvenTxsArgs](./client.md#interface-findproventxsargs), [FindSyncStatesArgs](./client.md#interface-findsyncstatesargs), [FindTransactionsArgs](./client.md#interface-findtransactionsargs), [FindTxLabelMapsArgs](./client.md#interface-findtxlabelmapsargs), [FindTxLabelsArgs](./client.md#interface-findtxlabelsargs), [FindUsersArgs](./client.md#interface-findusersargs), [ProvenOrRawTx](./client.md#interface-provenorrawtx), [PurgeParams](./client.md#interface-purgeparams), [PurgeResults](./client.md#interface-purgeresults), [ServicesCallHistory](./client.md#type-servicescallhistory), [StorageKnexOptions](./storage.md#interface-storageknexoptions), [StorageProvider](./storage.md#class-storageprovider), [TableCertificate](./storage.md#interface-tablecertificate), [TableCertificateField](./storage.md#interface-tablecertificatefield), [TableCertificateX](./storage.md#interface-tablecertificatex), [TableCommission](./storage.md#interface-tablecommission), [TableMonitorEvent](./storage.md#interface-tablemonitorevent), [TableOutput](./storage.md#interface-tableoutput), [TableOutputBasket](./storage.md#interface-tableoutputbasket), [TableOutputTag](./storage.md#interface-tableoutputtag), [TableOutputTagMap](./storage.md#interface-tableoutputtagmap), [TableProvenTx](./storage.md#interface-tableproventx), [TableProvenTxReq](./storage.md#interface-tableproventxreq), [TableSettings](./storage.md#interface-tablesettings), [TableSyncState](./storage.md#interface-tablesyncstate), [TableTransaction](./storage.md#interface-tabletransaction), [TableTxLabel](./storage.md#interface-tabletxlabel), [TableTxLabelMap](./storage.md#interface-tabletxlabelmap), [TableUser](./storage.md#interface-tableuser), [TrxToken](./client.md#interface-trxtoken), [WERR_NOT_IMPLEMENTED](./client.md#class-werr_not_implemented), [WalletStorageProvider](./client.md#interface-walletstorageprovider), [listActions](./storage.md#function-listactions), [listOutputs](./storage.md#function-listoutputs), [purgeData](./storage.md#function-purgedata), [reviewStatus](./storage.md#function-reviewstatus), [verifyOneOrNone](./client.md#function-verifyoneornone)
3775
+ See also: [AdminStatsResult](./storage.md#interface-adminstatsresult), [AuthId](./client.md#interface-authid), [DBType](./storage.md#type-dbtype), [EntityTimeStamp](./client.md#interface-entitytimestamp), [FindCertificateFieldsArgs](./client.md#interface-findcertificatefieldsargs), [FindCertificatesArgs](./client.md#interface-findcertificatesargs), [FindCommissionsArgs](./client.md#interface-findcommissionsargs), [FindForUserSincePagedArgs](./client.md#interface-findforusersincepagedargs), [FindMonitorEventsArgs](./client.md#interface-findmonitoreventsargs), [FindOutputBasketsArgs](./client.md#interface-findoutputbasketsargs), [FindOutputTagMapsArgs](./client.md#interface-findoutputtagmapsargs), [FindOutputTagsArgs](./client.md#interface-findoutputtagsargs), [FindOutputsArgs](./client.md#interface-findoutputsargs), [FindPartialSincePagedArgs](./client.md#interface-findpartialsincepagedargs), [FindProvenTxReqsArgs](./client.md#interface-findproventxreqsargs), [FindProvenTxsArgs](./client.md#interface-findproventxsargs), [FindStaleMerkleRootsArgs](./client.md#interface-findstalemerklerootsargs), [FindSyncStatesArgs](./client.md#interface-findsyncstatesargs), [FindTransactionsArgs](./client.md#interface-findtransactionsargs), [FindTxLabelMapsArgs](./client.md#interface-findtxlabelmapsargs), [FindTxLabelsArgs](./client.md#interface-findtxlabelsargs), [FindUsersArgs](./client.md#interface-findusersargs), [ProvenOrRawTx](./client.md#interface-provenorrawtx), [PurgeParams](./client.md#interface-purgeparams), [PurgeResults](./client.md#interface-purgeresults), [ServicesCallHistory](./client.md#type-servicescallhistory), [StorageKnexOptions](./storage.md#interface-storageknexoptions), [StorageProvider](./storage.md#class-storageprovider), [TableCertificate](./storage.md#interface-tablecertificate), [TableCertificateField](./storage.md#interface-tablecertificatefield), [TableCertificateX](./storage.md#interface-tablecertificatex), [TableCommission](./storage.md#interface-tablecommission), [TableMonitorEvent](./storage.md#interface-tablemonitorevent), [TableOutput](./storage.md#interface-tableoutput), [TableOutputBasket](./storage.md#interface-tableoutputbasket), [TableOutputTag](./storage.md#interface-tableoutputtag), [TableOutputTagMap](./storage.md#interface-tableoutputtagmap), [TableProvenTx](./storage.md#interface-tableproventx), [TableProvenTxReq](./storage.md#interface-tableproventxreq), [TableSettings](./storage.md#interface-tablesettings), [TableSyncState](./storage.md#interface-tablesyncstate), [TableTransaction](./storage.md#interface-tabletransaction), [TableTxLabel](./storage.md#interface-tabletxlabel), [TableTxLabelMap](./storage.md#interface-tabletxlabelmap), [TableUser](./storage.md#interface-tableuser), [TrxToken](./client.md#interface-trxtoken), [WERR_NOT_IMPLEMENTED](./client.md#class-werr_not_implemented), [WalletStorageProvider](./client.md#interface-walletstorageprovider), [listActions](./storage.md#function-listactions), [listOutputs](./storage.md#function-listoutputs), [purgeData](./storage.md#function-purgedata), [reviewStatus](./storage.md#function-reviewstatus), [verifyOneOrNone](./client.md#function-verifyoneornone)
3762
3776
 
3763
3777
  ###### Method allocateChangeInput
3764
3778
 
@@ -3881,6 +3895,7 @@ export abstract class StorageProvider extends StorageReaderWriter implements Wal
3881
3895
  abstract listOutputs(auth: AuthId, args: Validation.ValidListOutputsArgs): Promise<ListOutputsResult>;
3882
3896
  abstract countChangeInputs(userId: number, basketId: number, excludeSending: boolean): Promise<number>;
3883
3897
  async findOutputsByIds(outputIds: number[], trx?: TrxToken): Promise<Record<number, TableOutput>>
3898
+ async findStaleMerkleRoots(args: FindStaleMerkleRootsArgs): Promise<string[]>
3884
3899
  async findOutputsByOutpoints(userId: number, outpoints: Array<{
3885
3900
  txid: string;
3886
3901
  vout: number;
@@ -3925,7 +3940,7 @@ export abstract class StorageProvider extends StorageReaderWriter implements Wal
3925
3940
  }
3926
3941
  ```
3927
3942
 
3928
- See also: [AdminStatsResult](./storage.md#interface-adminstatsresult), [AuthId](./client.md#interface-authid), [Chain](./client.md#type-chain), [EntityProvenTxReq](./storage.md#class-entityproventxreq), [FindCertificatesArgs](./client.md#interface-findcertificatesargs), [FindOutputBasketsArgs](./client.md#interface-findoutputbasketsargs), [FindOutputsArgs](./client.md#interface-findoutputsargs), [GetReqsAndBeefResult](./storage.md#interface-getreqsandbeefresult), [PostReqsToNetworkResult](./storage.md#interface-postreqstonetworkresult), [ProcessSyncChunkResult](./client.md#interface-processsyncchunkresult), [ProvenOrRawTx](./client.md#interface-provenorrawtx), [PurgeParams](./client.md#interface-purgeparams), [PurgeResults](./client.md#interface-purgeresults), [RequestSyncChunkArgs](./client.md#interface-requestsyncchunkargs), [StorageCreateActionResult](./client.md#interface-storagecreateactionresult), [StorageFeeModel](./client.md#interface-storagefeemodel), [StorageGetBeefOptions](./client.md#interface-storagegetbeefoptions), [StorageInternalizeActionResult](./client.md#interface-storageinternalizeactionresult), [StorageProcessActionArgs](./client.md#interface-storageprocessactionargs), [StorageProcessActionResults](./client.md#interface-storageprocessactionresults), [StorageProvenOrReq](./client.md#interface-storageprovenorreq), [StorageProviderOptions](./storage.md#interface-storageprovideroptions), [StorageReaderWriter](./storage.md#class-storagereaderwriter), [SyncChunk](./client.md#interface-syncchunk), [TableCertificateX](./storage.md#interface-tablecertificatex), [TableMonitorEvent](./storage.md#interface-tablemonitorevent), [TableOutput](./storage.md#interface-tableoutput), [TableOutputBasket](./storage.md#interface-tableoutputbasket), [TableOutputTag](./storage.md#interface-tableoutputtag), [TableOutputX](./storage.md#interface-tableoutputx), [TableProvenTxReq](./storage.md#interface-tableproventxreq), [TableProvenTxReqDynamics](./storage.md#interface-tableproventxreqdynamics), [TableTxLabel](./storage.md#interface-tabletxlabel), [TransactionStatus](./client.md#type-transactionstatus), [TrxToken](./client.md#interface-trxtoken), [UpdateProvenTxReqWithNewProvenTxArgs](./client.md#interface-updateproventxreqwithnewproventxargs), [UpdateProvenTxReqWithNewProvenTxResult](./client.md#interface-updateproventxreqwithnewproventxresult), [WalletServices](./client.md#interface-walletservices), [WalletStorageProvider](./client.md#interface-walletstorageprovider), [attemptToPostReqsToNetwork](./storage.md#function-attempttopostreqstonetwork), [createAction](./storage.md#function-createaction), [getBeefForTransaction](./storage.md#function-getbeeffortransaction), [internalizeAction](./storage.md#function-internalizeaction), [listActions](./storage.md#function-listactions), [listCertificates](./storage.md#function-listcertificates), [listOutputs](./storage.md#function-listoutputs), [logger](./client.md#variable-logger), [processAction](./storage.md#function-processaction), [purgeData](./storage.md#function-purgedata), [reviewStatus](./storage.md#function-reviewstatus)
3943
+ See also: [AdminStatsResult](./storage.md#interface-adminstatsresult), [AuthId](./client.md#interface-authid), [Chain](./client.md#type-chain), [EntityProvenTxReq](./storage.md#class-entityproventxreq), [FindCertificatesArgs](./client.md#interface-findcertificatesargs), [FindOutputBasketsArgs](./client.md#interface-findoutputbasketsargs), [FindOutputsArgs](./client.md#interface-findoutputsargs), [FindStaleMerkleRootsArgs](./client.md#interface-findstalemerklerootsargs), [GetReqsAndBeefResult](./storage.md#interface-getreqsandbeefresult), [PostReqsToNetworkResult](./storage.md#interface-postreqstonetworkresult), [ProcessSyncChunkResult](./client.md#interface-processsyncchunkresult), [ProvenOrRawTx](./client.md#interface-provenorrawtx), [PurgeParams](./client.md#interface-purgeparams), [PurgeResults](./client.md#interface-purgeresults), [RequestSyncChunkArgs](./client.md#interface-requestsyncchunkargs), [StorageCreateActionResult](./client.md#interface-storagecreateactionresult), [StorageFeeModel](./client.md#interface-storagefeemodel), [StorageGetBeefOptions](./client.md#interface-storagegetbeefoptions), [StorageInternalizeActionResult](./client.md#interface-storageinternalizeactionresult), [StorageProcessActionArgs](./client.md#interface-storageprocessactionargs), [StorageProcessActionResults](./client.md#interface-storageprocessactionresults), [StorageProvenOrReq](./client.md#interface-storageprovenorreq), [StorageProviderOptions](./storage.md#interface-storageprovideroptions), [StorageReaderWriter](./storage.md#class-storagereaderwriter), [SyncChunk](./client.md#interface-syncchunk), [TableCertificateX](./storage.md#interface-tablecertificatex), [TableMonitorEvent](./storage.md#interface-tablemonitorevent), [TableOutput](./storage.md#interface-tableoutput), [TableOutputBasket](./storage.md#interface-tableoutputbasket), [TableOutputTag](./storage.md#interface-tableoutputtag), [TableOutputX](./storage.md#interface-tableoutputx), [TableProvenTxReq](./storage.md#interface-tableproventxreq), [TableProvenTxReqDynamics](./storage.md#interface-tableproventxreqdynamics), [TableTxLabel](./storage.md#interface-tabletxlabel), [TransactionStatus](./client.md#type-transactionstatus), [TrxToken](./client.md#interface-trxtoken), [UpdateProvenTxReqWithNewProvenTxArgs](./client.md#interface-updateproventxreqwithnewproventxargs), [UpdateProvenTxReqWithNewProvenTxResult](./client.md#interface-updateproventxreqwithnewproventxresult), [WalletServices](./client.md#interface-walletservices), [WalletStorageProvider](./client.md#interface-walletstorageprovider), [attemptToPostReqsToNetwork](./storage.md#function-attempttopostreqstonetwork), [createAction](./storage.md#function-createaction), [getBeefForTransaction](./storage.md#function-getbeeffortransaction), [internalizeAction](./storage.md#function-internalizeaction), [listActions](./storage.md#function-listactions), [listCertificates](./storage.md#function-listcertificates), [listOutputs](./storage.md#function-listoutputs), [logger](./client.md#variable-logger), [processAction](./storage.md#function-processaction), [purgeData](./storage.md#function-purgedata), [reviewStatus](./storage.md#function-reviewstatus)
3929
3944
 
3930
3945
  ###### Method confirmSpendableOutputs
3931
3946
 
@@ -4113,6 +4128,7 @@ export abstract class StorageReaderWriter extends StorageReader {
4113
4128
  abstract findProvenTxReqs(args: FindProvenTxReqsArgs): Promise<TableProvenTxReq[]>;
4114
4129
  abstract findProvenTxs(args: FindProvenTxsArgs): Promise<TableProvenTx[]>;
4115
4130
  abstract findTxLabelMaps(args: FindTxLabelMapsArgs): Promise<TableTxLabelMap[]>;
4131
+ abstract findStaleMerkleRoots(args: FindStaleMerkleRootsArgs): Promise<string[]>;
4116
4132
  abstract countOutputTagMaps(args: FindOutputTagMapsArgs): Promise<number>;
4117
4133
  abstract countProvenTxReqs(args: FindProvenTxReqsArgs): Promise<number>;
4118
4134
  abstract countProvenTxs(args: FindProvenTxsArgs): Promise<number>;
@@ -4189,7 +4205,7 @@ export abstract class StorageReaderWriter extends StorageReader {
4189
4205
  }
4190
4206
  ```
4191
4207
 
4192
- See also: [AuthId](./client.md#interface-authid), [FindOutputTagMapsArgs](./client.md#interface-findoutputtagmapsargs), [FindProvenTxReqsArgs](./client.md#interface-findproventxreqsargs), [FindProvenTxsArgs](./client.md#interface-findproventxsargs), [FindTxLabelMapsArgs](./client.md#interface-findtxlabelmapsargs), [ProcessSyncChunkResult](./client.md#interface-processsyncchunkresult), [RequestSyncChunkArgs](./client.md#interface-requestsyncchunkargs), [StorageReader](./storage.md#class-storagereader), [StorageReaderWriterOptions](./storage.md#interface-storagereaderwriteroptions), [SyncChunk](./client.md#interface-syncchunk), [TableCertificate](./storage.md#interface-tablecertificate), [TableCertificateField](./storage.md#interface-tablecertificatefield), [TableCommission](./storage.md#interface-tablecommission), [TableMonitorEvent](./storage.md#interface-tablemonitorevent), [TableOutput](./storage.md#interface-tableoutput), [TableOutputBasket](./storage.md#interface-tableoutputbasket), [TableOutputTag](./storage.md#interface-tableoutputtag), [TableOutputTagMap](./storage.md#interface-tableoutputtagmap), [TableProvenTx](./storage.md#interface-tableproventx), [TableProvenTxReq](./storage.md#interface-tableproventxreq), [TableSyncState](./storage.md#interface-tablesyncstate), [TableTransaction](./storage.md#interface-tabletransaction), [TableTxLabel](./storage.md#interface-tabletxlabel), [TableTxLabelMap](./storage.md#interface-tabletxlabelmap), [TableUser](./storage.md#interface-tableuser), [TrxToken](./client.md#interface-trxtoken)
4208
+ See also: [AuthId](./client.md#interface-authid), [FindOutputTagMapsArgs](./client.md#interface-findoutputtagmapsargs), [FindProvenTxReqsArgs](./client.md#interface-findproventxreqsargs), [FindProvenTxsArgs](./client.md#interface-findproventxsargs), [FindStaleMerkleRootsArgs](./client.md#interface-findstalemerklerootsargs), [FindTxLabelMapsArgs](./client.md#interface-findtxlabelmapsargs), [ProcessSyncChunkResult](./client.md#interface-processsyncchunkresult), [RequestSyncChunkArgs](./client.md#interface-requestsyncchunkargs), [StorageReader](./storage.md#class-storagereader), [StorageReaderWriterOptions](./storage.md#interface-storagereaderwriteroptions), [SyncChunk](./client.md#interface-syncchunk), [TableCertificate](./storage.md#interface-tablecertificate), [TableCertificateField](./storage.md#interface-tablecertificatefield), [TableCommission](./storage.md#interface-tablecommission), [TableMonitorEvent](./storage.md#interface-tablemonitorevent), [TableOutput](./storage.md#interface-tableoutput), [TableOutputBasket](./storage.md#interface-tableoutputbasket), [TableOutputTag](./storage.md#interface-tableoutputtag), [TableOutputTagMap](./storage.md#interface-tableoutputtagmap), [TableProvenTx](./storage.md#interface-tableproventx), [TableProvenTxReq](./storage.md#interface-tableproventxreq), [TableSyncState](./storage.md#interface-tablesyncstate), [TableTransaction](./storage.md#interface-tabletransaction), [TableTxLabel](./storage.md#interface-tabletxlabel), [TableTxLabelMap](./storage.md#interface-tabletxlabelmap), [TableUser](./storage.md#interface-tableuser), [TrxToken](./client.md#interface-trxtoken)
4193
4209
 
4194
4210
  Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](#functions), [Types](#types), [Variables](#variables)
4195
4211
 
@@ -4329,6 +4345,7 @@ export class WalletStorageManager implements sdk.WalletStorage {
4329
4345
  async findOutputs(args: sdk.FindOutputsArgs): Promise<TableOutput[]>
4330
4346
  async findProvenTxReqs(args: sdk.FindProvenTxReqsArgs): Promise<TableProvenTxReq[]>
4331
4347
  async reproveHeader(deactivatedHash: string): Promise<sdk.ReproveHeaderResult>
4348
+ async reproveHeightMerkleRoot(height: number, staleMerkleRoot: string): Promise<sdk.ReproveHeaderResult>
4332
4349
  async reproveProven(ptx: TableProvenTx, noUpdate?: boolean): Promise<sdk.ReproveProvenResult>
4333
4350
  async syncFromReader(identityKey: string, reader: sdk.WalletStorageSyncReader, activeSync?: sdk.WalletStorageSync, log: string = ""): Promise<{
4334
4351
  inserts: number;
@@ -4481,6 +4498,18 @@ Argument Details
4481
4498
  + **deactivatedHash**
4482
4499
  + An orphaned header than may have served as a proof source for proven_txs records.
4483
4500
 
4501
+ ###### Method reproveHeightMerkleRoot
4502
+
4503
+ For all proven_txs records at the given height currently tied to the given stale merkleRoot,
4504
+ attempt to reprove them against the current chain and update proof data if new valid proofs are found.
4505
+
4506
+ This is intended for backup auditing of recent heights after the primary reorg event path has run.
4507
+
4508
+ ```ts
4509
+ async reproveHeightMerkleRoot(height: number, staleMerkleRoot: string): Promise<sdk.ReproveHeaderResult>
4510
+ ```
4511
+ See also: [ReproveHeaderResult](./client.md#interface-reproveheaderresult)
4512
+
4484
4513
  ###### Method reproveProven
4485
4514
 
4486
4515
  Attempt to reprove the transaction against the current chain,