@bsv/wallet-toolbox 2.1.24 → 3.0.0-alpha.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 (918) hide show
  1. package/CHANGELOG.md +2 -7
  2. package/docs/CREATEACTION_BLOCKERS.md +391 -0
  3. package/docs/CUTOVER_RUNBOOK.md +95 -0
  4. package/docs/REQUIREMENTS_COMPLIANCE.md +157 -0
  5. package/docs/ROLLOUT_PLAN.md +273 -0
  6. package/docs/SESSION_HANDOFF.md +298 -0
  7. package/docs/STORAGE_METHOD_WIRING.md +176 -0
  8. package/docs/client.md +3765 -1325
  9. package/docs/monitor.md +255 -33
  10. package/docs/services.md +304 -280
  11. package/docs/setup.md +24 -24
  12. package/docs/storage.md +2775 -243
  13. package/docs/v3-upgrade/index.html +911 -0
  14. package/docs/wallet.md +4956 -9455
  15. package/out/src/CWIStyleWalletManager.d.ts +33 -7
  16. package/out/src/CWIStyleWalletManager.d.ts.map +1 -1
  17. package/out/src/CWIStyleWalletManager.js +281 -313
  18. package/out/src/CWIStyleWalletManager.js.map +1 -1
  19. package/out/src/Setup.d.ts +6 -6
  20. package/out/src/Setup.d.ts.map +1 -1
  21. package/out/src/Setup.js +5 -5
  22. package/out/src/Setup.js.map +1 -1
  23. package/out/src/SetupClient.d.ts +6 -6
  24. package/out/src/SetupClient.d.ts.map +1 -1
  25. package/out/src/SetupClient.js +5 -5
  26. package/out/src/SetupClient.js.map +1 -1
  27. package/out/src/SetupWallet.d.ts.map +1 -1
  28. package/out/src/ShamirWalletManager.d.ts +3 -3
  29. package/out/src/ShamirWalletManager.d.ts.map +1 -1
  30. package/out/src/ShamirWalletManager.js +6 -6
  31. package/out/src/ShamirWalletManager.js.map +1 -1
  32. package/out/src/SimpleWalletManager.d.ts +12 -2
  33. package/out/src/SimpleWalletManager.d.ts.map +1 -1
  34. package/out/src/SimpleWalletManager.js +46 -30
  35. package/out/src/SimpleWalletManager.js.map +1 -1
  36. package/out/src/Wallet.d.ts +1 -1
  37. package/out/src/Wallet.d.ts.map +1 -1
  38. package/out/src/Wallet.js +102 -100
  39. package/out/src/Wallet.js.map +1 -1
  40. package/out/src/WalletAuthenticationManager.d.ts +1 -1
  41. package/out/src/WalletAuthenticationManager.d.ts.map +1 -1
  42. package/out/src/WalletAuthenticationManager.js +3 -3
  43. package/out/src/WalletAuthenticationManager.js.map +1 -1
  44. package/out/src/WalletLogger.d.ts.map +1 -1
  45. package/out/src/WalletLogger.js +16 -8
  46. package/out/src/WalletLogger.js.map +1 -1
  47. package/out/src/WalletPermissionsManager.d.ts +89 -18
  48. package/out/src/WalletPermissionsManager.d.ts.map +1 -1
  49. package/out/src/WalletPermissionsManager.js +656 -870
  50. package/out/src/WalletPermissionsManager.js.map +1 -1
  51. package/out/src/WalletSettingsManager.d.ts +2 -2
  52. package/out/src/WalletSettingsManager.d.ts.map +1 -1
  53. package/out/src/WalletSettingsManager.js.map +1 -1
  54. package/out/src/__tests/CWIStyleWalletManager.test.js +6 -6
  55. package/out/src/__tests/CWIStyleWalletManager.test.js.map +1 -1
  56. package/out/src/__tests/WalletPermissionsManager.checks.test.js.map +1 -1
  57. package/out/src/__tests/WalletPermissionsManager.encryption.test.js +8 -8
  58. package/out/src/__tests/WalletPermissionsManager.encryption.test.js.map +1 -1
  59. package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts +0 -2
  60. package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts.map +1 -1
  61. package/out/src/__tests/WalletPermissionsManager.fixtures.js +6 -18
  62. package/out/src/__tests/WalletPermissionsManager.fixtures.js.map +1 -1
  63. package/out/src/__tests/WalletPermissionsManager.flows.test.js.map +1 -1
  64. package/out/src/__tests/WalletPermissionsManager.pmodules.test.js +7 -7
  65. package/out/src/__tests/WalletPermissionsManager.pmodules.test.js.map +1 -1
  66. package/out/src/__tests/WalletPermissionsManager.tokens.test.js +1 -1
  67. package/out/src/__tests/WalletPermissionsManager.tokens.test.js.map +1 -1
  68. package/out/src/entropy/EntropyCollector.d.ts +1 -1
  69. package/out/src/entropy/EntropyCollector.d.ts.map +1 -1
  70. package/out/src/entropy/EntropyCollector.js +3 -3
  71. package/out/src/entropy/EntropyCollector.js.map +1 -1
  72. package/out/src/fundWalletP2PKH.d.ts +2 -2
  73. package/out/src/fundWalletP2PKH.d.ts.map +1 -1
  74. package/out/src/fundWalletP2PKH.js +11 -10
  75. package/out/src/fundWalletP2PKH.js.map +1 -1
  76. package/out/src/mockchain/MockChainMigrations.d.ts +3 -3
  77. package/out/src/mockchain/MockChainMigrations.d.ts.map +1 -1
  78. package/out/src/mockchain/MockChainMigrations.js.map +1 -1
  79. package/out/src/mockchain/MockChainStorage.d.ts.map +1 -1
  80. package/out/src/mockchain/MockChainStorage.js +5 -5
  81. package/out/src/mockchain/MockChainStorage.js.map +1 -1
  82. package/out/src/mockchain/MockChainTracker.d.ts.map +1 -1
  83. package/out/src/mockchain/MockChainTracker.js +10 -10
  84. package/out/src/mockchain/MockChainTracker.js.map +1 -1
  85. package/out/src/mockchain/MockMiner.d.ts.map +1 -1
  86. package/out/src/mockchain/MockMiner.js +3 -3
  87. package/out/src/mockchain/MockMiner.js.map +1 -1
  88. package/out/src/mockchain/MockServices.d.ts +9 -0
  89. package/out/src/mockchain/MockServices.d.ts.map +1 -1
  90. package/out/src/mockchain/MockServices.js +195 -238
  91. package/out/src/mockchain/MockServices.js.map +1 -1
  92. package/out/src/mockchain/merkleTree.d.ts.map +1 -1
  93. package/out/src/mockchain/merkleTree.js +21 -12
  94. package/out/src/mockchain/merkleTree.js.map +1 -1
  95. package/out/src/monitor/LeasedMonitorTask.d.ts +43 -0
  96. package/out/src/monitor/LeasedMonitorTask.d.ts.map +1 -0
  97. package/out/src/monitor/LeasedMonitorTask.js +89 -0
  98. package/out/src/monitor/LeasedMonitorTask.js.map +1 -0
  99. package/out/src/monitor/Monitor.d.ts +24 -0
  100. package/out/src/monitor/Monitor.d.ts.map +1 -1
  101. package/out/src/monitor/Monitor.js +63 -75
  102. package/out/src/monitor/Monitor.js.map +1 -1
  103. package/out/src/monitor/MonitorDaemon.d.ts.map +1 -1
  104. package/out/src/monitor/MonitorDaemon.js +24 -23
  105. package/out/src/monitor/MonitorDaemon.js.map +1 -1
  106. package/out/src/monitor/V7LeasedTask.d.ts +43 -0
  107. package/out/src/monitor/V7LeasedTask.d.ts.map +1 -0
  108. package/out/src/monitor/V7LeasedTask.js +89 -0
  109. package/out/src/monitor/V7LeasedTask.js.map +1 -0
  110. package/out/src/monitor/__test/MonitorDaemon.man.test.js.map +1 -1
  111. package/out/src/monitor/index.all.d.ts +1 -0
  112. package/out/src/monitor/index.all.d.ts.map +1 -1
  113. package/out/src/monitor/index.all.js +1 -0
  114. package/out/src/monitor/index.all.js.map +1 -1
  115. package/out/src/monitor/tasks/TaskArcSSE.d.ts +2 -2
  116. package/out/src/monitor/tasks/TaskArcSSE.d.ts.map +1 -1
  117. package/out/src/monitor/tasks/TaskArcSSE.js +10 -23
  118. package/out/src/monitor/tasks/TaskArcSSE.js.map +1 -1
  119. package/out/src/monitor/tasks/TaskCheckForProofs.d.ts +4 -2
  120. package/out/src/monitor/tasks/TaskCheckForProofs.d.ts.map +1 -1
  121. package/out/src/monitor/tasks/TaskCheckForProofs.js +83 -16
  122. package/out/src/monitor/tasks/TaskCheckForProofs.js.map +1 -1
  123. package/out/src/monitor/tasks/TaskCheckNoSends.d.ts +1 -1
  124. package/out/src/monitor/tasks/TaskCheckNoSends.d.ts.map +1 -1
  125. package/out/src/monitor/tasks/TaskCheckNoSends.js +1 -2
  126. package/out/src/monitor/tasks/TaskCheckNoSends.js.map +1 -1
  127. package/out/src/monitor/tasks/TaskClock.d.ts +1 -1
  128. package/out/src/monitor/tasks/TaskClock.d.ts.map +1 -1
  129. package/out/src/monitor/tasks/TaskClock.js +0 -1
  130. package/out/src/monitor/tasks/TaskClock.js.map +1 -1
  131. package/out/src/monitor/tasks/TaskFailAbandoned.d.ts +1 -1
  132. package/out/src/monitor/tasks/TaskFailAbandoned.d.ts.map +1 -1
  133. package/out/src/monitor/tasks/TaskFailAbandoned.js.map +1 -1
  134. package/out/src/monitor/tasks/TaskMineBlock.d.ts +1 -1
  135. package/out/src/monitor/tasks/TaskMineBlock.d.ts.map +1 -1
  136. package/out/src/monitor/tasks/TaskMineBlock.js.map +1 -1
  137. package/out/src/monitor/tasks/TaskMonitorCallHistory.d.ts +1 -1
  138. package/out/src/monitor/tasks/TaskMonitorCallHistory.d.ts.map +1 -1
  139. package/out/src/monitor/tasks/TaskMonitorCallHistory.js +1 -1
  140. package/out/src/monitor/tasks/TaskMonitorCallHistory.js.map +1 -1
  141. package/out/src/monitor/tasks/TaskNewHeader.d.ts +2 -2
  142. package/out/src/monitor/tasks/TaskNewHeader.d.ts.map +1 -1
  143. package/out/src/monitor/tasks/TaskNewHeader.js +7 -5
  144. package/out/src/monitor/tasks/TaskNewHeader.js.map +1 -1
  145. package/out/src/monitor/tasks/TaskPurge.d.ts +1 -1
  146. package/out/src/monitor/tasks/TaskPurge.d.ts.map +1 -1
  147. package/out/src/monitor/tasks/TaskPurge.js.map +1 -1
  148. package/out/src/monitor/tasks/TaskReorg.d.ts +1 -1
  149. package/out/src/monitor/tasks/TaskReorg.d.ts.map +1 -1
  150. package/out/src/monitor/tasks/TaskReorg.js +2 -2
  151. package/out/src/monitor/tasks/TaskReorg.js.map +1 -1
  152. package/out/src/monitor/tasks/TaskReviewDoubleSpends.d.ts +1 -1
  153. package/out/src/monitor/tasks/TaskReviewDoubleSpends.d.ts.map +1 -1
  154. package/out/src/monitor/tasks/TaskReviewDoubleSpends.js +10 -10
  155. package/out/src/monitor/tasks/TaskReviewDoubleSpends.js.map +1 -1
  156. package/out/src/monitor/tasks/TaskReviewProvenTxs.d.ts +1 -1
  157. package/out/src/monitor/tasks/TaskReviewProvenTxs.d.ts.map +1 -1
  158. package/out/src/monitor/tasks/TaskReviewProvenTxs.js +2 -2
  159. package/out/src/monitor/tasks/TaskReviewProvenTxs.js.map +1 -1
  160. package/out/src/monitor/tasks/TaskReviewStatus.d.ts +1 -1
  161. package/out/src/monitor/tasks/TaskReviewStatus.d.ts.map +1 -1
  162. package/out/src/monitor/tasks/TaskReviewStatus.js.map +1 -1
  163. package/out/src/monitor/tasks/TaskReviewUtxos.d.ts +1 -1
  164. package/out/src/monitor/tasks/TaskReviewUtxos.d.ts.map +1 -1
  165. package/out/src/monitor/tasks/TaskReviewUtxos.js.map +1 -1
  166. package/out/src/monitor/tasks/TaskSendWaiting.d.ts +1 -1
  167. package/out/src/monitor/tasks/TaskSendWaiting.d.ts.map +1 -1
  168. package/out/src/monitor/tasks/TaskSendWaiting.js +4 -5
  169. package/out/src/monitor/tasks/TaskSendWaiting.js.map +1 -1
  170. package/out/src/monitor/tasks/TaskSyncWhenIdle.d.ts +1 -1
  171. package/out/src/monitor/tasks/TaskSyncWhenIdle.d.ts.map +1 -1
  172. package/out/src/monitor/tasks/TaskSyncWhenIdle.js +1 -4
  173. package/out/src/monitor/tasks/TaskSyncWhenIdle.js.map +1 -1
  174. package/out/src/monitor/tasks/TaskUnFail.d.ts +1 -1
  175. package/out/src/monitor/tasks/TaskUnFail.d.ts.map +1 -1
  176. package/out/src/monitor/tasks/TaskUnFail.js +13 -15
  177. package/out/src/monitor/tasks/TaskUnFail.js.map +1 -1
  178. package/out/src/monitor/tasks/WalletMonitorTask.d.ts.map +1 -1
  179. package/out/src/monitor/tasks/WalletMonitorTask.js +3 -1
  180. package/out/src/monitor/tasks/WalletMonitorTask.js.map +1 -1
  181. package/out/src/monitor/tasks/__tests/TaskArcSSE.test.js.map +1 -1
  182. package/out/src/monitor/tasks/__tests/TaskReviewDoubleSpends.test.js.map +1 -1
  183. package/out/src/monitor/tasks/__tests/TaskReviewProvenTxs.test.js.map +1 -1
  184. package/out/src/monitor/tasks/__tests/TaskReviewUtxos.test.js.map +1 -1
  185. package/out/src/monitor/tasks/__tests/TaskSendWaiting.test.js.map +1 -1
  186. package/out/src/sdk/CertOpsWallet.d.ts +3 -3
  187. package/out/src/sdk/CertOpsWallet.d.ts.map +1 -1
  188. package/out/src/sdk/PrivilegedKeyManager.d.ts +3 -3
  189. package/out/src/sdk/PrivilegedKeyManager.d.ts.map +1 -1
  190. package/out/src/sdk/PrivilegedKeyManager.js +26 -21
  191. package/out/src/sdk/PrivilegedKeyManager.js.map +1 -1
  192. package/out/src/sdk/WERR_errors.d.ts.map +1 -1
  193. package/out/src/sdk/WERR_errors.js +5 -5
  194. package/out/src/sdk/WERR_errors.js.map +1 -1
  195. package/out/src/sdk/WalletError.d.ts +1 -1
  196. package/out/src/sdk/WalletError.d.ts.map +1 -1
  197. package/out/src/sdk/WalletError.js +10 -3
  198. package/out/src/sdk/WalletError.js.map +1 -1
  199. package/out/src/sdk/WalletErrorFromJson.d.ts.map +1 -1
  200. package/out/src/sdk/WalletErrorFromJson.js +1 -3
  201. package/out/src/sdk/WalletErrorFromJson.js.map +1 -1
  202. package/out/src/sdk/WalletServices.interfaces.d.ts +19 -19
  203. package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  204. package/out/src/sdk/WalletStorage.interfaces.d.ts +59 -59
  205. package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
  206. package/out/src/sdk/__test/CertificateLifeCycle.test.js +3 -3
  207. package/out/src/sdk/__test/CertificateLifeCycle.test.js.map +1 -1
  208. package/out/src/sdk/__test/WalletError.test.js +4 -4
  209. package/out/src/sdk/__test/WalletError.test.js.map +1 -1
  210. package/out/src/sdk/types.d.ts +36 -4
  211. package/out/src/sdk/types.d.ts.map +1 -1
  212. package/out/src/sdk/types.js +53 -4
  213. package/out/src/sdk/types.js.map +1 -1
  214. package/out/src/services/ServiceCollection.d.ts +6 -6
  215. package/out/src/services/ServiceCollection.d.ts.map +1 -1
  216. package/out/src/services/ServiceCollection.js +3 -4
  217. package/out/src/services/ServiceCollection.js.map +1 -1
  218. package/out/src/services/Services.d.ts +5 -0
  219. package/out/src/services/Services.d.ts.map +1 -1
  220. package/out/src/services/Services.js +174 -182
  221. package/out/src/services/Services.js.map +1 -1
  222. package/out/src/services/__tests/ARC.man.test.js.map +1 -1
  223. package/out/src/services/__tests/ARC.timeout.man.test.js +3 -3
  224. package/out/src/services/__tests/ARC.timeout.man.test.js.map +1 -1
  225. package/out/src/services/__tests/ArcGorillaPool.man.test.js.map +1 -1
  226. package/out/src/services/__tests/bitrails.test.js +3 -2
  227. package/out/src/services/__tests/bitrails.test.js.map +1 -1
  228. package/out/src/services/__tests/getFiatExchangeRate.test.js.map +1 -1
  229. package/out/src/services/__tests/postBeef.test.js.map +1 -1
  230. package/out/src/services/chaintracker/BHServiceClient.d.ts.map +1 -1
  231. package/out/src/services/chaintracker/BHServiceClient.js +7 -7
  232. package/out/src/services/chaintracker/BHServiceClient.js.map +1 -1
  233. package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -1
  234. package/out/src/services/chaintracker/ChaintracksChainTracker.js +5 -5
  235. package/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
  236. package/out/src/services/chaintracker/__tests/ChaintracksChainTracker.test.js +2 -2
  237. package/out/src/services/chaintracker/__tests/ChaintracksChainTracker.test.js.map +1 -1
  238. package/out/src/services/chaintracker/__tests/ChaintracksServiceClient.test.js +1 -1
  239. package/out/src/services/chaintracker/__tests/ChaintracksServiceClient.test.js.map +1 -1
  240. package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.d.ts +5 -3
  241. package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.d.ts.map +1 -1
  242. package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.js.map +1 -1
  243. package/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts.map +1 -1
  244. package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts +20 -10
  245. package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
  246. package/out/src/services/chaintracker/chaintracks/Chaintracks.js +228 -221
  247. package/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
  248. package/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts +1 -1
  249. package/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts.map +1 -1
  250. package/out/src/services/chaintracker/chaintracks/ChaintracksService.js +5 -22
  251. package/out/src/services/chaintracker/chaintracks/ChaintracksService.js.map +1 -1
  252. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts.map +1 -1
  253. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js +9 -10
  254. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js.map +1 -1
  255. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts.map +1 -1
  256. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js +1 -1
  257. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js.map +1 -1
  258. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.d.ts +1 -2
  259. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.d.ts.map +1 -1
  260. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js +3 -3
  261. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js.map +1 -1
  262. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.d.ts.map +1 -1
  263. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.js.map +1 -1
  264. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.d.ts.map +1 -1
  265. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js +3 -3
  266. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js.map +1 -1
  267. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts.map +1 -1
  268. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js.map +1 -1
  269. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts.map +1 -1
  270. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js +1 -1
  271. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js.map +1 -1
  272. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.d.ts.map +1 -1
  273. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.js +1 -8
  274. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.js.map +1 -1
  275. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.d.ts.map +1 -1
  276. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js +2 -2
  277. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js.map +1 -1
  278. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts.map +1 -1
  279. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js.map +1 -1
  280. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts +2 -2
  281. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
  282. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +6 -39
  283. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
  284. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.d.ts +3 -3
  285. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.d.ts.map +1 -1
  286. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.js +8 -6
  287. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.js.map +1 -1
  288. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.js +2 -1
  289. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.js.map +1 -1
  290. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/LiveIngestorWhatsOnChainPoll.test.js +4 -3
  291. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/LiveIngestorWhatsOnChainPoll.test.js.map +1 -1
  292. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.man.test.js +11 -10
  293. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.man.test.js.map +1 -1
  294. package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts.map +1 -1
  295. package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js +9 -16
  296. package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js.map +1 -1
  297. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.d.ts +3 -3
  298. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.d.ts.map +1 -1
  299. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js +13 -13
  300. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js.map +1 -1
  301. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts.map +1 -1
  302. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js +34 -22
  303. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js.map +1 -1
  304. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts.map +1 -1
  305. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js +31 -30
  306. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js.map +1 -1
  307. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts +1 -2
  308. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts.map +1 -1
  309. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js +25 -22
  310. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js.map +1 -1
  311. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageMemory.d.ts.map +1 -1
  312. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageMemory.js +0 -21
  313. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageMemory.js.map +1 -1
  314. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts +2 -2
  315. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
  316. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +11 -10
  317. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
  318. package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.js +2 -1
  319. package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.js.map +1 -1
  320. package/out/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.js +8 -7
  321. package/out/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.js.map +1 -1
  322. package/out/src/services/chaintracker/chaintracks/__tests/ChaintracksCDN.man.test.js +6 -5
  323. package/out/src/services/chaintracker/chaintracks/__tests/ChaintracksCDN.man.test.js.map +1 -1
  324. package/out/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.js +10 -9
  325. package/out/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.js.map +1 -1
  326. package/out/src/services/chaintracker/chaintracks/__tests/LocalCdnServer.d.ts +1 -1
  327. package/out/src/services/chaintracker/chaintracks/__tests/LocalCdnServer.d.ts.map +1 -1
  328. package/out/src/services/chaintracker/chaintracks/__tests/LocalCdnServer.js +14 -17
  329. package/out/src/services/chaintracker/chaintracks/__tests/LocalCdnServer.js.map +1 -1
  330. package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.js +3 -2
  331. package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.js.map +1 -1
  332. package/out/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.d.ts.map +1 -1
  333. package/out/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.js.map +1 -1
  334. package/out/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.d.ts.map +1 -1
  335. package/out/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.js +6 -8
  336. package/out/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.js.map +1 -1
  337. package/out/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.d.ts.map +1 -1
  338. package/out/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.js.map +1 -1
  339. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts.map +1 -1
  340. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js.map +1 -1
  341. package/out/src/services/chaintracker/chaintracks/createKnexChaintracks.d.ts.map +1 -1
  342. package/out/src/services/chaintracker/chaintracks/createKnexChaintracks.js.map +1 -1
  343. package/out/src/services/chaintracker/chaintracks/createNoDbChaintracks.d.ts.map +1 -1
  344. package/out/src/services/chaintracker/chaintracks/createNoDbChaintracks.js.map +1 -1
  345. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +6 -1
  346. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
  347. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +247 -227
  348. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
  349. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.d.ts.map +1 -1
  350. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.js +8 -7
  351. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.js.map +1 -1
  352. package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts.map +1 -1
  353. package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js +35 -25
  354. package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js.map +1 -1
  355. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts +5 -5
  356. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts.map +1 -1
  357. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js +13 -11
  358. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js.map +1 -1
  359. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts +0 -1
  360. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts.map +1 -1
  361. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js.map +1 -1
  362. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.d.ts +2 -2
  363. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.d.ts.map +1 -1
  364. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.js +13 -13
  365. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.js.map +1 -1
  366. package/out/src/services/chaintracker/chaintracks/util/HeightRange.d.ts.map +1 -1
  367. package/out/src/services/chaintracker/chaintracks/util/HeightRange.js +21 -13
  368. package/out/src/services/chaintracker/chaintracks/util/HeightRange.js.map +1 -1
  369. package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.d.ts +2 -2
  370. package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.d.ts.map +1 -1
  371. package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.js.map +1 -1
  372. package/out/src/services/chaintracker/chaintracks/util/__tests/BulkFileDataManager.test.js +11 -11
  373. package/out/src/services/chaintracker/chaintracks/util/__tests/BulkFileDataManager.test.js.map +1 -1
  374. package/out/src/services/chaintracker/chaintracks/util/__tests/ChaintracksFetch.test.js +1 -1
  375. package/out/src/services/chaintracker/chaintracks/util/__tests/ChaintracksFetch.test.js.map +1 -1
  376. package/out/src/services/chaintracker/chaintracks/util/__tests/SingleWriterMultiReaderLock.test.js +2 -2
  377. package/out/src/services/chaintracker/chaintracks/util/__tests/SingleWriterMultiReaderLock.test.js.map +1 -1
  378. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts +1 -1
  379. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +1 -1
  380. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +28 -24
  381. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js.map +1 -1
  382. package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.d.ts.map +1 -1
  383. package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.js.map +1 -1
  384. package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.d.ts.map +1 -1
  385. package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js +9 -10
  386. package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js.map +1 -1
  387. package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
  388. package/out/src/services/createDefaultWalletServicesOptions.js +3 -3
  389. package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  390. package/out/src/services/providers/ARC.d.ts.map +1 -1
  391. package/out/src/services/providers/ARC.js +7 -14
  392. package/out/src/services/providers/ARC.js.map +1 -1
  393. package/out/src/services/providers/ArcSSEClient.d.ts.map +1 -1
  394. package/out/src/services/providers/ArcSSEClient.js +1 -1
  395. package/out/src/services/providers/ArcSSEClient.js.map +1 -1
  396. package/out/src/services/providers/Bitails.d.ts.map +1 -1
  397. package/out/src/services/providers/Bitails.js +17 -17
  398. package/out/src/services/providers/Bitails.js.map +1 -1
  399. package/out/src/services/providers/SdkWhatsOnChain.d.ts.map +1 -1
  400. package/out/src/services/providers/SdkWhatsOnChain.js.map +1 -1
  401. package/out/src/services/providers/WhatsOnChain.d.ts +2 -0
  402. package/out/src/services/providers/WhatsOnChain.d.ts.map +1 -1
  403. package/out/src/services/providers/WhatsOnChain.js +109 -233
  404. package/out/src/services/providers/WhatsOnChain.js.map +1 -1
  405. package/out/src/services/providers/__tests/ArcSSEClient.test.js.map +1 -1
  406. package/out/src/services/providers/exchangeRates.d.ts.map +1 -1
  407. package/out/src/services/providers/exchangeRates.js +3 -3
  408. package/out/src/services/providers/exchangeRates.js.map +1 -1
  409. package/out/src/services/providers/getBeefForTxid.d.ts +1 -1
  410. package/out/src/services/providers/getBeefForTxid.d.ts.map +1 -1
  411. package/out/src/services/providers/getBeefForTxid.js.map +1 -1
  412. package/out/src/services/providers/whatsOnChainHelpers.d.ts +68 -0
  413. package/out/src/services/providers/whatsOnChainHelpers.d.ts.map +1 -0
  414. package/out/src/services/providers/whatsOnChainHelpers.js +147 -0
  415. package/out/src/services/providers/whatsOnChainHelpers.js.map +1 -0
  416. package/out/src/signer/WalletSigner.d.ts.map +1 -1
  417. package/out/src/signer/WalletSigner.js.map +1 -1
  418. package/out/src/signer/methods/acquireDirectCertificate.js +1 -1
  419. package/out/src/signer/methods/acquireDirectCertificate.js.map +1 -1
  420. package/out/src/signer/methods/buildSignableTransaction.d.ts.map +1 -1
  421. package/out/src/signer/methods/buildSignableTransaction.js +21 -13
  422. package/out/src/signer/methods/buildSignableTransaction.js.map +1 -1
  423. package/out/src/signer/methods/completeSignedTransaction.d.ts.map +1 -1
  424. package/out/src/signer/methods/completeSignedTransaction.js +20 -21
  425. package/out/src/signer/methods/completeSignedTransaction.js.map +1 -1
  426. package/out/src/signer/methods/createAction.d.ts.map +1 -1
  427. package/out/src/signer/methods/createAction.js +8 -7
  428. package/out/src/signer/methods/createAction.js.map +1 -1
  429. package/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
  430. package/out/src/signer/methods/internalizeAction.js +8 -6
  431. package/out/src/signer/methods/internalizeAction.js.map +1 -1
  432. package/out/src/signer/methods/proveCertificate.js +1 -1
  433. package/out/src/signer/methods/signAction.d.ts.map +1 -1
  434. package/out/src/signer/methods/signAction.js +8 -10
  435. package/out/src/signer/methods/signAction.js.map +1 -1
  436. package/out/src/storage/StorageIdb.d.ts +16 -1
  437. package/out/src/storage/StorageIdb.d.ts.map +1 -1
  438. package/out/src/storage/StorageIdb.js +544 -1224
  439. package/out/src/storage/StorageIdb.js.map +1 -1
  440. package/out/src/storage/StorageKnex.d.ts +143 -3
  441. package/out/src/storage/StorageKnex.d.ts.map +1 -1
  442. package/out/src/storage/StorageKnex.js +829 -222
  443. package/out/src/storage/StorageKnex.js.map +1 -1
  444. package/out/src/storage/StorageProvider.d.ts +124 -1
  445. package/out/src/storage/StorageProvider.d.ts.map +1 -1
  446. package/out/src/storage/StorageProvider.js +316 -186
  447. package/out/src/storage/StorageProvider.js.map +1 -1
  448. package/out/src/storage/StorageReader.d.ts.map +1 -1
  449. package/out/src/storage/StorageReader.js +8 -7
  450. package/out/src/storage/StorageReader.js.map +1 -1
  451. package/out/src/storage/StorageReaderWriter.d.ts.map +1 -1
  452. package/out/src/storage/StorageReaderWriter.js +32 -32
  453. package/out/src/storage/StorageReaderWriter.js.map +1 -1
  454. package/out/src/storage/StorageSyncReader.d.ts.map +1 -1
  455. package/out/src/storage/StorageSyncReader.js +3 -3
  456. package/out/src/storage/StorageSyncReader.js.map +1 -1
  457. package/out/src/storage/WalletStorageManager.d.ts +3 -0
  458. package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
  459. package/out/src/storage/WalletStorageManager.js +83 -73
  460. package/out/src/storage/WalletStorageManager.js.map +1 -1
  461. package/out/src/storage/__test/StorageIdb.test.js +1 -1
  462. package/out/src/storage/__test/WalletStorageManager.test.js +1 -1
  463. package/out/src/storage/__test/WalletStorageManager.test.js.map +1 -1
  464. package/out/src/storage/__test/adminStats.man.test.js +1 -1
  465. package/out/src/storage/__test/adminStats.man.test.js.map +1 -1
  466. package/out/src/storage/__test/findStaleMerkleRoots.test.js.map +1 -1
  467. package/out/src/storage/__test/findStaleMerkleRootsKnex.test.js.map +1 -1
  468. package/out/src/storage/__test/getBeefForTransaction.test.js +1 -1
  469. package/out/src/storage/__test/getBeefForTransaction.test.js.map +1 -1
  470. package/out/src/storage/adminServer/adminServer.d.ts +1 -1
  471. package/out/src/storage/adminServer/adminServer.d.ts.map +1 -1
  472. package/out/src/storage/adminServer/adminServer.js +12 -12
  473. package/out/src/storage/adminServer/adminServer.js.map +1 -1
  474. package/out/src/storage/adminServer/adminUi.d.ts.map +1 -1
  475. package/out/src/storage/idbHelpers.d.ts +47 -0
  476. package/out/src/storage/idbHelpers.d.ts.map +1 -0
  477. package/out/src/storage/idbHelpers.js +417 -0
  478. package/out/src/storage/idbHelpers.js.map +1 -0
  479. package/out/src/storage/methods/ListActionsSpecOp.d.ts +6 -1
  480. package/out/src/storage/methods/ListActionsSpecOp.d.ts.map +1 -1
  481. package/out/src/storage/methods/ListActionsSpecOp.js +28 -2
  482. package/out/src/storage/methods/ListActionsSpecOp.js.map +1 -1
  483. package/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
  484. package/out/src/storage/methods/ListOutputsSpecOp.js +8 -11
  485. package/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
  486. package/out/src/storage/methods/__test/GenerateChange/generateChangeSdk.test.js +3 -3
  487. package/out/src/storage/methods/__test/GenerateChange/generateChangeSdk.test.js.map +1 -1
  488. package/out/src/storage/methods/__test/offsetKey.test.js +1 -1
  489. package/out/src/storage/methods/__test/offsetKey.test.js.map +1 -1
  490. package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts +83 -0
  491. package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts.map +1 -1
  492. package/out/src/storage/methods/attemptToPostReqsToNetwork.js +338 -63
  493. package/out/src/storage/methods/attemptToPostReqsToNetwork.js.map +1 -1
  494. package/out/src/storage/methods/createAction.d.ts.map +1 -1
  495. package/out/src/storage/methods/createAction.js +251 -274
  496. package/out/src/storage/methods/createAction.js.map +1 -1
  497. package/out/src/storage/methods/generateChange.d.ts.map +1 -1
  498. package/out/src/storage/methods/generateChange.js +99 -80
  499. package/out/src/storage/methods/generateChange.js.map +1 -1
  500. package/out/src/storage/methods/getBeefForTransaction.js +15 -13
  501. package/out/src/storage/methods/getBeefForTransaction.js.map +1 -1
  502. package/out/src/storage/methods/getSyncChunk.d.ts.map +1 -1
  503. package/out/src/storage/methods/getSyncChunk.js +4 -3
  504. package/out/src/storage/methods/getSyncChunk.js.map +1 -1
  505. package/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
  506. package/out/src/storage/methods/internalizeAction.js +213 -56
  507. package/out/src/storage/methods/internalizeAction.js.map +1 -1
  508. package/out/src/storage/methods/listActionsIdb.d.ts.map +1 -1
  509. package/out/src/storage/methods/listActionsIdb.js +85 -110
  510. package/out/src/storage/methods/listActionsIdb.js.map +1 -1
  511. package/out/src/storage/methods/listActionsKnex.d.ts +50 -1
  512. package/out/src/storage/methods/listActionsKnex.d.ts.map +1 -1
  513. package/out/src/storage/methods/listActionsKnex.js +256 -169
  514. package/out/src/storage/methods/listActionsKnex.js.map +1 -1
  515. package/out/src/storage/methods/listCertificates.d.ts +1 -1
  516. package/out/src/storage/methods/listCertificates.d.ts.map +1 -1
  517. package/out/src/storage/methods/listCertificates.js +7 -7
  518. package/out/src/storage/methods/listCertificates.js.map +1 -1
  519. package/out/src/storage/methods/listOutputsIdb.d.ts.map +1 -1
  520. package/out/src/storage/methods/listOutputsIdb.js +24 -27
  521. package/out/src/storage/methods/listOutputsIdb.js.map +1 -1
  522. package/out/src/storage/methods/listOutputsKnex.d.ts +1 -1
  523. package/out/src/storage/methods/listOutputsKnex.d.ts.map +1 -1
  524. package/out/src/storage/methods/listOutputsKnex.js +78 -32
  525. package/out/src/storage/methods/listOutputsKnex.js.map +1 -1
  526. package/out/src/storage/methods/offsetKey.d.ts +1 -1
  527. package/out/src/storage/methods/offsetKey.d.ts.map +1 -1
  528. package/out/src/storage/methods/offsetKey.js +3 -5
  529. package/out/src/storage/methods/offsetKey.js.map +1 -1
  530. package/out/src/storage/methods/processAction.d.ts +0 -11
  531. package/out/src/storage/methods/processAction.d.ts.map +1 -1
  532. package/out/src/storage/methods/processAction.js +168 -93
  533. package/out/src/storage/methods/processAction.js.map +1 -1
  534. package/out/src/storage/methods/purgeData.d.ts +1 -1
  535. package/out/src/storage/methods/purgeData.d.ts.map +1 -1
  536. package/out/src/storage/methods/purgeData.js +54 -27
  537. package/out/src/storage/methods/purgeData.js.map +1 -1
  538. package/out/src/storage/methods/purgeDataIdb.d.ts.map +1 -1
  539. package/out/src/storage/methods/purgeDataIdb.js +1 -1
  540. package/out/src/storage/methods/purgeDataIdb.js.map +1 -1
  541. package/out/src/storage/methods/reviewStatus.d.ts +1 -1
  542. package/out/src/storage/methods/reviewStatus.d.ts.map +1 -1
  543. package/out/src/storage/methods/reviewStatus.js +35 -18
  544. package/out/src/storage/methods/reviewStatus.js.map +1 -1
  545. package/out/src/storage/methods/reviewStatusIdb.d.ts +1 -1
  546. package/out/src/storage/methods/reviewStatusIdb.d.ts.map +1 -1
  547. package/out/src/storage/methods/reviewStatusIdb.js.map +1 -1
  548. package/out/src/storage/methods/utils.Buffer.d.ts.map +1 -1
  549. package/out/src/storage/methods/utils.Buffer.js.map +1 -1
  550. package/out/src/storage/methods/utils.d.ts.map +1 -1
  551. package/out/src/storage/methods/utils.js +7 -1
  552. package/out/src/storage/methods/utils.js.map +1 -1
  553. package/out/src/storage/remoting/StorageClient.d.ts +4 -270
  554. package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
  555. package/out/src/storage/remoting/StorageClient.js +16 -423
  556. package/out/src/storage/remoting/StorageClient.js.map +1 -1
  557. package/out/src/storage/remoting/StorageClientBase.d.ts +289 -0
  558. package/out/src/storage/remoting/StorageClientBase.d.ts.map +1 -0
  559. package/out/src/storage/remoting/StorageClientBase.js +375 -0
  560. package/out/src/storage/remoting/StorageClientBase.js.map +1 -0
  561. package/out/src/storage/remoting/StorageMobile.d.ts +7 -275
  562. package/out/src/storage/remoting/StorageMobile.d.ts.map +1 -1
  563. package/out/src/storage/remoting/StorageMobile.js +12 -421
  564. package/out/src/storage/remoting/StorageMobile.js.map +1 -1
  565. package/out/src/storage/remoting/StorageServer.d.ts +11 -8
  566. package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
  567. package/out/src/storage/remoting/StorageServer.js +51 -102
  568. package/out/src/storage/remoting/StorageServer.js.map +1 -1
  569. package/out/src/storage/remoting/__test/StorageClient.man.test.js +6 -6
  570. package/out/src/storage/remoting/__test/StorageClient.man.test.js.map +1 -1
  571. package/out/src/storage/remoting/__test/StorageClient.test.js +8 -8
  572. package/out/src/storage/remoting/__test/StorageClient.test.js.map +1 -1
  573. package/out/src/storage/remoting/__tests__/entityValidationHelpers.test.d.ts +2 -0
  574. package/out/src/storage/remoting/__tests__/entityValidationHelpers.test.d.ts.map +1 -0
  575. package/out/src/storage/remoting/__tests__/entityValidationHelpers.test.js +268 -0
  576. package/out/src/storage/remoting/__tests__/entityValidationHelpers.test.js.map +1 -0
  577. package/out/src/storage/remoting/entityValidationHelpers.d.ts +29 -0
  578. package/out/src/storage/remoting/entityValidationHelpers.d.ts.map +1 -0
  579. package/out/src/storage/remoting/entityValidationHelpers.js +91 -0
  580. package/out/src/storage/remoting/entityValidationHelpers.js.map +1 -0
  581. package/out/src/storage/schema/KnexMigrations.d.ts +3 -3
  582. package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
  583. package/out/src/storage/schema/KnexMigrations.js +160 -9
  584. package/out/src/storage/schema/KnexMigrations.js.map +1 -1
  585. package/out/src/storage/schema/StorageIdbSchema.d.ts +43 -2
  586. package/out/src/storage/schema/StorageIdbSchema.d.ts.map +1 -1
  587. package/out/src/storage/schema/__tests/backfill.runner.test.d.ts +2 -0
  588. package/out/src/storage/schema/__tests/backfill.runner.test.d.ts.map +1 -0
  589. package/out/src/storage/schema/__tests/backfill.runner.test.js +148 -0
  590. package/out/src/storage/schema/__tests/backfill.runner.test.js.map +1 -0
  591. package/out/src/storage/schema/__tests/backfill.test.d.ts +2 -0
  592. package/out/src/storage/schema/__tests/backfill.test.d.ts.map +1 -0
  593. package/out/src/storage/schema/__tests/backfill.test.js +96 -0
  594. package/out/src/storage/schema/__tests/backfill.test.js.map +1 -0
  595. package/out/src/storage/schema/__tests/processingFsm.test.d.ts +2 -0
  596. package/out/src/storage/schema/__tests/processingFsm.test.d.ts.map +1 -0
  597. package/out/src/storage/schema/__tests/processingFsm.test.js +42 -0
  598. package/out/src/storage/schema/__tests/processingFsm.test.js.map +1 -0
  599. package/out/src/storage/schema/__tests/processingFsmLegacyMapping.test.d.ts +2 -0
  600. package/out/src/storage/schema/__tests/processingFsmLegacyMapping.test.d.ts.map +1 -0
  601. package/out/src/storage/schema/__tests/processingFsmLegacyMapping.test.js +82 -0
  602. package/out/src/storage/schema/__tests/processingFsmLegacyMapping.test.js.map +1 -0
  603. package/out/src/storage/schema/__tests/spendabilityRule.test.d.ts +2 -0
  604. package/out/src/storage/schema/__tests/spendabilityRule.test.d.ts.map +1 -0
  605. package/out/src/storage/schema/__tests/spendabilityRule.test.js +29 -0
  606. package/out/src/storage/schema/__tests/spendabilityRule.test.js.map +1 -0
  607. package/out/src/storage/schema/__tests/v7Backfill.runner.test.d.ts +2 -0
  608. package/out/src/storage/schema/__tests/v7Backfill.runner.test.d.ts.map +1 -0
  609. package/out/src/storage/schema/__tests/v7Backfill.runner.test.js +148 -0
  610. package/out/src/storage/schema/__tests/v7Backfill.runner.test.js.map +1 -0
  611. package/out/src/storage/schema/__tests/v7Backfill.test.d.ts +2 -0
  612. package/out/src/storage/schema/__tests/v7Backfill.test.d.ts.map +1 -0
  613. package/out/src/storage/schema/__tests/v7Backfill.test.js +96 -0
  614. package/out/src/storage/schema/__tests/v7Backfill.test.js.map +1 -0
  615. package/out/src/storage/schema/__tests/v7Fsm.test.d.ts +2 -0
  616. package/out/src/storage/schema/__tests/v7Fsm.test.d.ts.map +1 -0
  617. package/out/src/storage/schema/__tests/v7Fsm.test.js +42 -0
  618. package/out/src/storage/schema/__tests/v7Fsm.test.js.map +1 -0
  619. package/out/src/storage/schema/__tests/v7FsmLegacyMapping.test.d.ts +2 -0
  620. package/out/src/storage/schema/__tests/v7FsmLegacyMapping.test.d.ts.map +1 -0
  621. package/out/src/storage/schema/__tests/v7FsmLegacyMapping.test.js +77 -0
  622. package/out/src/storage/schema/__tests/v7FsmLegacyMapping.test.js.map +1 -0
  623. package/out/src/storage/schema/__tests/v7Spendability.test.d.ts +2 -0
  624. package/out/src/storage/schema/__tests/v7Spendability.test.d.ts.map +1 -0
  625. package/out/src/storage/schema/__tests/v7Spendability.test.js +29 -0
  626. package/out/src/storage/schema/__tests/v7Spendability.test.js.map +1 -0
  627. package/out/src/storage/schema/backfill.d.ts +35 -0
  628. package/out/src/storage/schema/backfill.d.ts.map +1 -0
  629. package/out/src/storage/schema/backfill.idb.d.ts +32 -0
  630. package/out/src/storage/schema/backfill.idb.d.ts.map +1 -0
  631. package/out/src/storage/schema/backfill.idb.js +95 -0
  632. package/out/src/storage/schema/backfill.idb.js.map +1 -0
  633. package/out/src/storage/schema/backfill.js +150 -0
  634. package/out/src/storage/schema/backfill.js.map +1 -0
  635. package/out/src/storage/schema/backfill.knex.d.ts +32 -0
  636. package/out/src/storage/schema/backfill.knex.d.ts.map +1 -0
  637. package/out/src/storage/schema/backfill.knex.js +240 -0
  638. package/out/src/storage/schema/backfill.knex.js.map +1 -0
  639. package/out/src/storage/schema/backfill.runner.d.ts +63 -0
  640. package/out/src/storage/schema/backfill.runner.d.ts.map +1 -0
  641. package/out/src/storage/schema/backfill.runner.js +64 -0
  642. package/out/src/storage/schema/backfill.runner.js.map +1 -0
  643. package/out/src/storage/schema/coinbaseMaturityBackfill.d.ts +25 -0
  644. package/out/src/storage/schema/coinbaseMaturityBackfill.d.ts.map +1 -0
  645. package/out/src/storage/schema/coinbaseMaturityBackfill.js +75 -0
  646. package/out/src/storage/schema/coinbaseMaturityBackfill.js.map +1 -0
  647. package/out/src/storage/schema/entities/EntityBase.d.ts.map +1 -1
  648. package/out/src/storage/schema/entities/EntityBase.js.map +1 -1
  649. package/out/src/storage/schema/entities/EntityCertificate.d.ts.map +1 -1
  650. package/out/src/storage/schema/entities/EntityCertificate.js +5 -4
  651. package/out/src/storage/schema/entities/EntityCertificate.js.map +1 -1
  652. package/out/src/storage/schema/entities/EntityCertificateField.d.ts.map +1 -1
  653. package/out/src/storage/schema/entities/EntityCertificateField.js +5 -7
  654. package/out/src/storage/schema/entities/EntityCertificateField.js.map +1 -1
  655. package/out/src/storage/schema/entities/EntityCommission.d.ts.map +1 -1
  656. package/out/src/storage/schema/entities/EntityCommission.js +6 -8
  657. package/out/src/storage/schema/entities/EntityCommission.js.map +1 -1
  658. package/out/src/storage/schema/entities/EntityOutput.d.ts.map +1 -1
  659. package/out/src/storage/schema/entities/EntityOutput.js +21 -24
  660. package/out/src/storage/schema/entities/EntityOutput.js.map +1 -1
  661. package/out/src/storage/schema/entities/EntityOutputBasket.d.ts.map +1 -1
  662. package/out/src/storage/schema/entities/EntityOutputBasket.js +6 -6
  663. package/out/src/storage/schema/entities/EntityOutputBasket.js.map +1 -1
  664. package/out/src/storage/schema/entities/EntityOutputTag.d.ts.map +1 -1
  665. package/out/src/storage/schema/entities/EntityOutputTag.js +2 -2
  666. package/out/src/storage/schema/entities/EntityOutputTag.js.map +1 -1
  667. package/out/src/storage/schema/entities/EntityOutputTagMap.d.ts.map +1 -1
  668. package/out/src/storage/schema/entities/EntityOutputTagMap.js +4 -6
  669. package/out/src/storage/schema/entities/EntityOutputTagMap.js.map +1 -1
  670. package/out/src/storage/schema/entities/EntityProvenTx.d.ts +3 -3
  671. package/out/src/storage/schema/entities/EntityProvenTx.d.ts.map +1 -1
  672. package/out/src/storage/schema/entities/EntityProvenTx.js +22 -23
  673. package/out/src/storage/schema/entities/EntityProvenTx.js.map +1 -1
  674. package/out/src/storage/schema/entities/EntityProvenTxReq.d.ts +9 -0
  675. package/out/src/storage/schema/entities/EntityProvenTxReq.d.ts.map +1 -1
  676. package/out/src/storage/schema/entities/EntityProvenTxReq.js +116 -68
  677. package/out/src/storage/schema/entities/EntityProvenTxReq.js.map +1 -1
  678. package/out/src/storage/schema/entities/EntitySyncState.d.ts.map +1 -1
  679. package/out/src/storage/schema/entities/EntitySyncState.js +19 -18
  680. package/out/src/storage/schema/entities/EntitySyncState.js.map +1 -1
  681. package/out/src/storage/schema/entities/EntityTransaction.d.ts.map +1 -1
  682. package/out/src/storage/schema/entities/EntityTransaction.js +25 -26
  683. package/out/src/storage/schema/entities/EntityTransaction.js.map +1 -1
  684. package/out/src/storage/schema/entities/EntityTxLabel.d.ts.map +1 -1
  685. package/out/src/storage/schema/entities/EntityTxLabel.js +2 -2
  686. package/out/src/storage/schema/entities/EntityTxLabel.js.map +1 -1
  687. package/out/src/storage/schema/entities/EntityTxLabelMap.d.ts.map +1 -1
  688. package/out/src/storage/schema/entities/EntityTxLabelMap.js +4 -6
  689. package/out/src/storage/schema/entities/EntityTxLabelMap.js.map +1 -1
  690. package/out/src/storage/schema/entities/EntityUser.d.ts.map +1 -1
  691. package/out/src/storage/schema/entities/EntityUser.js +3 -3
  692. package/out/src/storage/schema/entities/EntityUser.js.map +1 -1
  693. package/out/src/storage/schema/entities/MergeEntity.d.ts.map +1 -1
  694. package/out/src/storage/schema/entities/MergeEntity.js +6 -6
  695. package/out/src/storage/schema/entities/MergeEntity.js.map +1 -1
  696. package/out/src/storage/schema/entities/__tests/CertificateFieldTests.test.js +1 -1
  697. package/out/src/storage/schema/entities/__tests/CertificateFieldTests.test.js.map +1 -1
  698. package/out/src/storage/schema/entities/__tests/CertificateTests.test.js.map +1 -1
  699. package/out/src/storage/schema/entities/__tests/CommissionTests.test.js.map +1 -1
  700. package/out/src/storage/schema/entities/__tests/OutputTagMapTests.test.js +3 -3
  701. package/out/src/storage/schema/entities/__tests/OutputTagMapTests.test.js.map +1 -1
  702. package/out/src/storage/schema/entities/__tests/OutputTests.test.js +1 -1
  703. package/out/src/storage/schema/entities/__tests/OutputTests.test.js.map +1 -1
  704. package/out/src/storage/schema/entities/__tests/ProvenTxReqTests.test.js +32 -0
  705. package/out/src/storage/schema/entities/__tests/ProvenTxReqTests.test.js.map +1 -1
  706. package/out/src/storage/schema/entities/__tests/ProvenTxTests.test.js +6 -6
  707. package/out/src/storage/schema/entities/__tests/ProvenTxTests.test.js.map +1 -1
  708. package/out/src/storage/schema/entities/__tests/TransactionTests.test.js +3 -3
  709. package/out/src/storage/schema/entities/__tests/TransactionTests.test.js.map +1 -1
  710. package/out/src/storage/schema/entities/__tests/stampLogTests.test.js +3 -3
  711. package/out/src/storage/schema/entities/__tests/usersTests.test.js +1 -1
  712. package/out/src/storage/schema/entities/__tests/usersTests.test.js.map +1 -1
  713. package/out/src/storage/schema/monitorLease.d.ts +57 -0
  714. package/out/src/storage/schema/monitorLease.d.ts.map +1 -0
  715. package/out/src/storage/schema/monitorLease.js +101 -0
  716. package/out/src/storage/schema/monitorLease.js.map +1 -0
  717. package/out/src/storage/schema/processingFsm.d.ts +27 -0
  718. package/out/src/storage/schema/processingFsm.d.ts.map +1 -0
  719. package/out/src/storage/schema/processingFsm.js +132 -0
  720. package/out/src/storage/schema/processingFsm.js.map +1 -0
  721. package/out/src/storage/schema/schemaCutover.d.ts +34 -0
  722. package/out/src/storage/schema/schemaCutover.d.ts.map +1 -0
  723. package/out/src/storage/schema/schemaCutover.js +230 -0
  724. package/out/src/storage/schema/schemaCutover.js.map +1 -0
  725. package/out/src/storage/schema/schemaCutoverIdb.d.ts +26 -0
  726. package/out/src/storage/schema/schemaCutoverIdb.d.ts.map +1 -0
  727. package/out/src/storage/schema/schemaCutoverIdb.js +90 -0
  728. package/out/src/storage/schema/schemaCutoverIdb.js.map +1 -0
  729. package/out/src/storage/schema/spendabilityRefresh.d.ts +49 -0
  730. package/out/src/storage/schema/spendabilityRefresh.d.ts.map +1 -0
  731. package/out/src/storage/schema/spendabilityRefresh.js +120 -0
  732. package/out/src/storage/schema/spendabilityRefresh.js.map +1 -0
  733. package/out/src/storage/schema/spendabilityRule.d.ts +45 -0
  734. package/out/src/storage/schema/spendabilityRule.d.ts.map +1 -0
  735. package/out/src/storage/schema/spendabilityRule.js +52 -0
  736. package/out/src/storage/schema/spendabilityRule.js.map +1 -0
  737. package/out/src/storage/schema/tables/TableAction.d.ts +38 -0
  738. package/out/src/storage/schema/tables/TableAction.d.ts.map +1 -0
  739. package/out/src/storage/schema/tables/TableAction.js +3 -0
  740. package/out/src/storage/schema/tables/TableAction.js.map +1 -0
  741. package/out/src/storage/schema/tables/TableCertificate.d.ts +2 -1
  742. package/out/src/storage/schema/tables/TableCertificate.d.ts.map +1 -1
  743. package/out/src/storage/schema/tables/TableCertificateField.d.ts +1 -1
  744. package/out/src/storage/schema/tables/TableCertificateField.d.ts.map +1 -1
  745. package/out/src/storage/schema/tables/TableChainTip.d.ts +17 -0
  746. package/out/src/storage/schema/tables/TableChainTip.d.ts.map +1 -0
  747. package/out/src/storage/schema/tables/TableChainTip.js +3 -0
  748. package/out/src/storage/schema/tables/TableChainTip.js.map +1 -0
  749. package/out/src/storage/schema/tables/TableCommission.d.ts +1 -1
  750. package/out/src/storage/schema/tables/TableCommission.d.ts.map +1 -1
  751. package/out/src/storage/schema/tables/TableMonitorEvent.d.ts +1 -1
  752. package/out/src/storage/schema/tables/TableMonitorEvent.d.ts.map +1 -1
  753. package/out/src/storage/schema/tables/TableMonitorLease.d.ts +23 -0
  754. package/out/src/storage/schema/tables/TableMonitorLease.d.ts.map +1 -0
  755. package/out/src/storage/schema/tables/TableMonitorLease.js +3 -0
  756. package/out/src/storage/schema/tables/TableMonitorLease.js.map +1 -0
  757. package/out/src/storage/schema/tables/TableOutput.d.ts +10 -2
  758. package/out/src/storage/schema/tables/TableOutput.d.ts.map +1 -1
  759. package/out/src/storage/schema/tables/TableOutput.js +1 -1
  760. package/out/src/storage/schema/tables/TableOutput.js.map +1 -1
  761. package/out/src/storage/schema/tables/TableOutputBasket.d.ts +1 -1
  762. package/out/src/storage/schema/tables/TableOutputBasket.d.ts.map +1 -1
  763. package/out/src/storage/schema/tables/TableOutputTag.d.ts +1 -1
  764. package/out/src/storage/schema/tables/TableOutputTag.d.ts.map +1 -1
  765. package/out/src/storage/schema/tables/TableOutputTagMap.d.ts +1 -1
  766. package/out/src/storage/schema/tables/TableOutputTagMap.d.ts.map +1 -1
  767. package/out/src/storage/schema/tables/TableProvenTx.d.ts +1 -1
  768. package/out/src/storage/schema/tables/TableProvenTx.d.ts.map +1 -1
  769. package/out/src/storage/schema/tables/TableProvenTxReq.d.ts +24 -1
  770. package/out/src/storage/schema/tables/TableProvenTxReq.d.ts.map +1 -1
  771. package/out/src/storage/schema/tables/TableSettings.d.ts +1 -1
  772. package/out/src/storage/schema/tables/TableSettings.d.ts.map +1 -1
  773. package/out/src/storage/schema/tables/TableSyncState.d.ts +1 -1
  774. package/out/src/storage/schema/tables/TableSyncState.d.ts.map +1 -1
  775. package/out/src/storage/schema/tables/TableTransaction.d.ts +1 -1
  776. package/out/src/storage/schema/tables/TableTransaction.d.ts.map +1 -1
  777. package/out/src/storage/schema/tables/TableTransactionNew.d.ts +50 -0
  778. package/out/src/storage/schema/tables/TableTransactionNew.d.ts.map +1 -0
  779. package/out/src/storage/schema/tables/TableTransactionNew.js +3 -0
  780. package/out/src/storage/schema/tables/TableTransactionNew.js.map +1 -0
  781. package/out/src/storage/schema/tables/TableTransactionV7.d.ts +50 -0
  782. package/out/src/storage/schema/tables/TableTransactionV7.d.ts.map +1 -0
  783. package/out/src/storage/schema/tables/TableTransactionV7.js +3 -0
  784. package/out/src/storage/schema/tables/TableTransactionV7.js.map +1 -0
  785. package/out/src/storage/schema/tables/TableTxAudit.d.ts +26 -0
  786. package/out/src/storage/schema/tables/TableTxAudit.d.ts.map +1 -0
  787. package/out/src/storage/schema/tables/TableTxAudit.js +3 -0
  788. package/out/src/storage/schema/tables/TableTxAudit.js.map +1 -0
  789. package/out/src/storage/schema/tables/TableTxLabel.d.ts +1 -1
  790. package/out/src/storage/schema/tables/TableTxLabel.d.ts.map +1 -1
  791. package/out/src/storage/schema/tables/TableTxLabelMap.d.ts +1 -1
  792. package/out/src/storage/schema/tables/TableTxLabelMap.d.ts.map +1 -1
  793. package/out/src/storage/schema/tables/TableUser.d.ts +1 -1
  794. package/out/src/storage/schema/tables/TableUser.d.ts.map +1 -1
  795. package/out/src/storage/schema/tables/index.d.ts +5 -0
  796. package/out/src/storage/schema/tables/index.d.ts.map +1 -1
  797. package/out/src/storage/schema/tables/index.js +5 -0
  798. package/out/src/storage/schema/tables/index.js.map +1 -1
  799. package/out/src/storage/schema/transactionCrud.d.ts +41 -0
  800. package/out/src/storage/schema/transactionCrud.d.ts.map +1 -0
  801. package/out/src/storage/schema/transactionCrud.js +205 -0
  802. package/out/src/storage/schema/transactionCrud.js.map +1 -0
  803. package/out/src/storage/schema/transactionService.d.ts +315 -0
  804. package/out/src/storage/schema/transactionService.d.ts.map +1 -0
  805. package/out/src/storage/schema/transactionService.js +783 -0
  806. package/out/src/storage/schema/transactionService.js.map +1 -0
  807. package/out/src/storage/schema/txAudit.d.ts +33 -0
  808. package/out/src/storage/schema/txAudit.d.ts.map +1 -0
  809. package/out/src/storage/schema/txAudit.js +64 -0
  810. package/out/src/storage/schema/txAudit.js.map +1 -0
  811. package/out/src/storage/schema/v7Backfill.d.ts +35 -0
  812. package/out/src/storage/schema/v7Backfill.d.ts.map +1 -0
  813. package/out/src/storage/schema/v7Backfill.idb.d.ts +32 -0
  814. package/out/src/storage/schema/v7Backfill.idb.d.ts.map +1 -0
  815. package/out/src/storage/schema/v7Backfill.idb.js +95 -0
  816. package/out/src/storage/schema/v7Backfill.idb.js.map +1 -0
  817. package/out/src/storage/schema/v7Backfill.js +150 -0
  818. package/out/src/storage/schema/v7Backfill.js.map +1 -0
  819. package/out/src/storage/schema/v7Backfill.knex.d.ts +32 -0
  820. package/out/src/storage/schema/v7Backfill.knex.d.ts.map +1 -0
  821. package/out/src/storage/schema/v7Backfill.knex.js +240 -0
  822. package/out/src/storage/schema/v7Backfill.knex.js.map +1 -0
  823. package/out/src/storage/schema/v7Backfill.runner.d.ts +63 -0
  824. package/out/src/storage/schema/v7Backfill.runner.d.ts.map +1 -0
  825. package/out/src/storage/schema/v7Backfill.runner.js +64 -0
  826. package/out/src/storage/schema/v7Backfill.runner.js.map +1 -0
  827. package/out/src/storage/schema/v7CoinbaseMaturityBackfill.d.ts +25 -0
  828. package/out/src/storage/schema/v7CoinbaseMaturityBackfill.d.ts.map +1 -0
  829. package/out/src/storage/schema/v7CoinbaseMaturityBackfill.js +75 -0
  830. package/out/src/storage/schema/v7CoinbaseMaturityBackfill.js.map +1 -0
  831. package/out/src/storage/schema/v7Crud.d.ts +41 -0
  832. package/out/src/storage/schema/v7Crud.d.ts.map +1 -0
  833. package/out/src/storage/schema/v7Crud.js +205 -0
  834. package/out/src/storage/schema/v7Crud.js.map +1 -0
  835. package/out/src/storage/schema/v7Cutover.d.ts +34 -0
  836. package/out/src/storage/schema/v7Cutover.d.ts.map +1 -0
  837. package/out/src/storage/schema/v7Cutover.js +223 -0
  838. package/out/src/storage/schema/v7Cutover.js.map +1 -0
  839. package/out/src/storage/schema/v7CutoverIdb.d.ts +26 -0
  840. package/out/src/storage/schema/v7CutoverIdb.d.ts.map +1 -0
  841. package/out/src/storage/schema/v7CutoverIdb.js +90 -0
  842. package/out/src/storage/schema/v7CutoverIdb.js.map +1 -0
  843. package/out/src/storage/schema/v7Fsm.d.ts +27 -0
  844. package/out/src/storage/schema/v7Fsm.d.ts.map +1 -0
  845. package/out/src/storage/schema/v7Fsm.js +124 -0
  846. package/out/src/storage/schema/v7Fsm.js.map +1 -0
  847. package/out/src/storage/schema/v7MonitorLease.d.ts +57 -0
  848. package/out/src/storage/schema/v7MonitorLease.d.ts.map +1 -0
  849. package/out/src/storage/schema/v7MonitorLease.js +101 -0
  850. package/out/src/storage/schema/v7MonitorLease.js.map +1 -0
  851. package/out/src/storage/schema/v7Service.d.ts +305 -0
  852. package/out/src/storage/schema/v7Service.d.ts.map +1 -0
  853. package/out/src/storage/schema/v7Service.js +757 -0
  854. package/out/src/storage/schema/v7Service.js.map +1 -0
  855. package/out/src/storage/schema/v7Spendability.d.ts +45 -0
  856. package/out/src/storage/schema/v7Spendability.d.ts.map +1 -0
  857. package/out/src/storage/schema/v7Spendability.js +52 -0
  858. package/out/src/storage/schema/v7Spendability.js.map +1 -0
  859. package/out/src/storage/schema/v7SpendabilityRefresh.d.ts +49 -0
  860. package/out/src/storage/schema/v7SpendabilityRefresh.d.ts.map +1 -0
  861. package/out/src/storage/schema/v7SpendabilityRefresh.js +111 -0
  862. package/out/src/storage/schema/v7SpendabilityRefresh.js.map +1 -0
  863. package/out/src/storage/schema/v7TxAudit.d.ts +33 -0
  864. package/out/src/storage/schema/v7TxAudit.d.ts.map +1 -0
  865. package/out/src/storage/schema/v7TxAudit.js +64 -0
  866. package/out/src/storage/schema/v7TxAudit.js.map +1 -0
  867. package/out/src/storage/storageProviderHelpers.d.ts +34 -0
  868. package/out/src/storage/storageProviderHelpers.d.ts.map +1 -0
  869. package/out/src/storage/storageProviderHelpers.js +100 -0
  870. package/out/src/storage/storageProviderHelpers.js.map +1 -0
  871. package/out/src/storage/sync/StorageMySQLDojoReader.d.ts +1 -2
  872. package/out/src/storage/sync/StorageMySQLDojoReader.d.ts.map +1 -1
  873. package/out/src/storage/sync/StorageMySQLDojoReader.js +37 -32
  874. package/out/src/storage/sync/StorageMySQLDojoReader.js.map +1 -1
  875. package/out/src/utility/Format.d.ts.map +1 -1
  876. package/out/src/utility/Format.js +11 -9
  877. package/out/src/utility/Format.js.map +1 -1
  878. package/out/src/utility/ScriptTemplateBRC29.d.ts.map +1 -1
  879. package/out/src/utility/ScriptTemplateBRC29.js +2 -1
  880. package/out/src/utility/ScriptTemplateBRC29.js.map +1 -1
  881. package/out/src/utility/aggregateResults.d.ts +1 -1
  882. package/out/src/utility/aggregateResults.d.ts.map +1 -1
  883. package/out/src/utility/aggregateResults.js +2 -2
  884. package/out/src/utility/aggregateResults.js.map +1 -1
  885. package/out/src/utility/brc114ActionTimeLabels.d.ts +2 -2
  886. package/out/src/utility/brc114ActionTimeLabels.d.ts.map +1 -1
  887. package/out/src/utility/brc114ActionTimeLabels.js +16 -9
  888. package/out/src/utility/brc114ActionTimeLabels.js.map +1 -1
  889. package/out/src/utility/identityUtils.js +1 -1
  890. package/out/src/utility/identityUtils.js.map +1 -1
  891. package/out/src/utility/parseTxScriptOffsets.d.ts +4 -4
  892. package/out/src/utility/parseTxScriptOffsets.d.ts.map +1 -1
  893. package/out/src/utility/parseTxScriptOffsets.js.map +1 -1
  894. package/out/src/utility/stampLog.d.ts.map +1 -1
  895. package/out/src/utility/stampLog.js +7 -5
  896. package/out/src/utility/stampLog.js.map +1 -1
  897. package/out/src/utility/tscProofToMerklePath.d.ts.map +1 -1
  898. package/out/src/utility/tscProofToMerklePath.js +1 -1
  899. package/out/src/utility/tscProofToMerklePath.js.map +1 -1
  900. package/out/src/utility/utilityHelpers.buffer.d.ts +5 -3
  901. package/out/src/utility/utilityHelpers.buffer.d.ts.map +1 -1
  902. package/out/src/utility/utilityHelpers.buffer.js.map +1 -1
  903. package/out/src/utility/utilityHelpers.d.ts +1 -2
  904. package/out/src/utility/utilityHelpers.d.ts.map +1 -1
  905. package/out/src/utility/utilityHelpers.js +10 -10
  906. package/out/src/utility/utilityHelpers.js.map +1 -1
  907. package/out/src/utility/utilityHelpers.noBuffer.d.ts +7 -3
  908. package/out/src/utility/utilityHelpers.noBuffer.d.ts.map +1 -1
  909. package/out/src/utility/utilityHelpers.noBuffer.js +3 -3
  910. package/out/src/utility/utilityHelpers.noBuffer.js.map +1 -1
  911. package/out/src/wab-client/WABClient.d.ts +1 -1
  912. package/out/src/wab-client/WABClient.d.ts.map +1 -1
  913. package/out/src/wab-client/WABClient.js +12 -12
  914. package/out/src/wab-client/WABClient.js.map +1 -1
  915. package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts.map +1 -1
  916. package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js +3 -3
  917. package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js.map +1 -1
  918. package/package.json +28 -21
@@ -0,0 +1,911 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <title>@bsv/wallet-toolbox v3 — Upgrade Guide</title>
7
+ <style>
8
+ :root {
9
+ --bg: #0a0b10;
10
+ --bg-2: #0f1117;
11
+ --bg-3: #161922;
12
+ --line: #232838;
13
+ --line-2: #2e3447;
14
+ --fg: #e7ebf3;
15
+ --fg-2: #9aa3b8;
16
+ --fg-3: #6a7388;
17
+ --accent: #7c9cff;
18
+ --accent-2: #5cf0c8;
19
+ --warn: #f5b961;
20
+ --danger: #ff7a7a;
21
+ --ok: #6fd49a;
22
+ --code-bg: #0d1018;
23
+ --mono: ui-monospace, SFMono-Regular, "JetBrains Mono", Menlo, Consolas, monospace;
24
+ --sans: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, sans-serif;
25
+ }
26
+ * { box-sizing: border-box; }
27
+ html, body { margin: 0; padding: 0; background: var(--bg); color: var(--fg); font-family: var(--sans); font-size: 15px; line-height: 1.55; -webkit-font-smoothing: antialiased; }
28
+ body { background-image:
29
+ radial-gradient(ellipse 800px 600px at 0% 0%, rgba(124,156,255,0.08), transparent 60%),
30
+ radial-gradient(ellipse 700px 500px at 100% 10%, rgba(92,240,200,0.05), transparent 60%);
31
+ background-attachment: fixed;
32
+ }
33
+ a { color: var(--accent); text-decoration: none; }
34
+ a:hover { text-decoration: underline; }
35
+ code, pre { font-family: var(--mono); font-size: 13px; }
36
+ pre { background: var(--code-bg); border: 1px solid var(--line); border-radius: 8px; padding: 14px 16px; overflow-x: auto; margin: 10px 0; }
37
+ pre code { background: none; padding: 0; }
38
+ code { background: rgba(255,255,255,0.04); border: 1px solid var(--line); padding: 1px 6px; border-radius: 4px; color: var(--accent-2); }
39
+ pre code { color: var(--fg); border: none; }
40
+
41
+ .container { max-width: 1180px; margin: 0 auto; padding: 0 24px; }
42
+
43
+ /* Nav */
44
+ nav.top {
45
+ position: sticky; top: 0; z-index: 50;
46
+ backdrop-filter: blur(14px);
47
+ background: rgba(10,11,16,0.7);
48
+ border-bottom: 1px solid var(--line);
49
+ }
50
+ nav.top .inner { display: flex; align-items: center; justify-content: space-between; padding: 14px 24px; max-width: 1180px; margin: 0 auto; }
51
+ nav.top .brand { display: flex; align-items: center; gap: 10px; font-weight: 600; letter-spacing: -0.01em; }
52
+ nav.top .brand .pill { background: linear-gradient(135deg, var(--accent), var(--accent-2)); color: #0a0b10; font-size: 11px; padding: 2px 8px; border-radius: 999px; font-weight: 700; }
53
+ nav.top ul { list-style: none; display: flex; gap: 22px; margin: 0; padding: 0; font-size: 13px; }
54
+ nav.top ul a { color: var(--fg-2); }
55
+ nav.top ul a:hover { color: var(--fg); text-decoration: none; }
56
+
57
+ /* Hero */
58
+ .hero { padding: 88px 0 56px; }
59
+ .hero h1 { font-size: 56px; line-height: 1.05; letter-spacing: -0.025em; font-weight: 700; margin: 0 0 18px; }
60
+ .hero h1 .grad { background: linear-gradient(120deg, #7c9cff, #5cf0c8 60%, #f5b961); -webkit-background-clip: text; background-clip: text; color: transparent; }
61
+ .hero .sub { font-size: 20px; color: var(--fg-2); max-width: 760px; margin: 0 0 28px; }
62
+ .hero .cta { display: flex; gap: 12px; flex-wrap: wrap; }
63
+ .btn { display: inline-flex; align-items: center; gap: 8px; padding: 11px 18px; border-radius: 8px; font-weight: 500; font-size: 14px; cursor: pointer; transition: transform 0.08s, background 0.15s; }
64
+ .btn.primary { background: var(--accent); color: #0a0b10; border: 1px solid var(--accent); }
65
+ .btn.primary:hover { background: #95acff; text-decoration: none; }
66
+ .btn.ghost { background: transparent; color: var(--fg); border: 1px solid var(--line-2); }
67
+ .btn.ghost:hover { background: var(--bg-3); text-decoration: none; }
68
+
69
+ .badges { display: flex; gap: 10px; margin: 22px 0 0; flex-wrap: wrap; }
70
+ .badge { font-size: 12px; padding: 4px 10px; border-radius: 999px; background: var(--bg-3); border: 1px solid var(--line); color: var(--fg-2); }
71
+ .badge.ok { color: var(--ok); border-color: rgba(111,212,154,0.3); }
72
+ .badge.warn { color: var(--warn); border-color: rgba(245,185,97,0.3); }
73
+
74
+ /* Section */
75
+ section { padding: 56px 0; border-top: 1px solid var(--line); }
76
+ h2 { font-size: 32px; letter-spacing: -0.02em; margin: 0 0 12px; font-weight: 700; }
77
+ .section-lede { color: var(--fg-2); max-width: 760px; margin: 0 0 28px; font-size: 16px; }
78
+ h3 { font-size: 18px; margin: 16px 0 8px; letter-spacing: -0.01em; }
79
+ .eyebrow { font-size: 12px; text-transform: uppercase; letter-spacing: 0.16em; color: var(--accent); font-weight: 600; margin-bottom: 12px; }
80
+
81
+ /* Bento */
82
+ .bento { display: grid; grid-template-columns: repeat(6, 1fr); gap: 14px; }
83
+ .tile {
84
+ grid-column: span 2;
85
+ background: linear-gradient(180deg, var(--bg-2), var(--bg-3));
86
+ border: 1px solid var(--line);
87
+ border-radius: 14px;
88
+ padding: 22px;
89
+ cursor: pointer;
90
+ transition: border-color 0.15s, transform 0.08s;
91
+ position: relative;
92
+ overflow: hidden;
93
+ }
94
+ .tile:hover { border-color: var(--line-2); transform: translateY(-1px); }
95
+ .tile .num { font-family: var(--mono); font-size: 11px; color: var(--fg-3); margin-bottom: 8px; }
96
+ .tile .title { font-size: 18px; font-weight: 600; letter-spacing: -0.01em; margin-bottom: 8px; }
97
+ .tile .blurb { color: var(--fg-2); font-size: 14px; }
98
+ .tile.big { grid-column: span 3; }
99
+ .tile.wide { grid-column: span 6; }
100
+ .tile .glow { position: absolute; inset: 0; background: radial-gradient(400px 200px at 20% 0%, rgba(124,156,255,0.08), transparent 70%); pointer-events: none; }
101
+ .tile .pillrow { display: flex; gap: 6px; margin-top: 14px; flex-wrap: wrap; }
102
+ .tile .pillrow span { font-size: 11px; padding: 2px 8px; background: var(--bg); border: 1px solid var(--line); border-radius: 999px; color: var(--fg-2); font-family: var(--mono); }
103
+
104
+ /* Detail panels (accordion) */
105
+ details.panel {
106
+ background: var(--bg-2);
107
+ border: 1px solid var(--line);
108
+ border-radius: 12px;
109
+ margin: 10px 0;
110
+ overflow: hidden;
111
+ }
112
+ details.panel[open] { border-color: var(--line-2); }
113
+ details.panel > summary {
114
+ list-style: none;
115
+ cursor: pointer;
116
+ padding: 18px 22px;
117
+ display: flex;
118
+ align-items: center;
119
+ justify-content: space-between;
120
+ gap: 14px;
121
+ }
122
+ details.panel > summary::-webkit-details-marker { display: none; }
123
+ details.panel > summary .sm-title { font-weight: 600; font-size: 16px; }
124
+ details.panel > summary .sm-blurb { color: var(--fg-2); font-size: 13px; flex: 1; padding: 0 14px; }
125
+ details.panel > summary .chev { color: var(--fg-3); transition: transform 0.18s; }
126
+ details.panel[open] > summary .chev { transform: rotate(90deg); color: var(--accent); }
127
+ details.panel .panel-body { padding: 0 22px 22px; border-top: 1px solid var(--line); padding-top: 16px; }
128
+ details.panel .panel-body p { color: var(--fg-2); margin: 8px 0; }
129
+ details.panel .panel-body li { color: var(--fg-2); margin: 4px 0; }
130
+
131
+ /* Diff (v2 vs v3) */
132
+ .diff { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin: 16px 0; }
133
+ .diff .col { background: var(--bg-2); border: 1px solid var(--line); border-radius: 10px; padding: 18px; }
134
+ .diff .col h4 { margin: 0 0 12px; font-size: 13px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--fg-3); }
135
+ .diff .col.v2 h4 span { color: var(--warn); }
136
+ .diff .col.v3 h4 span { color: var(--ok); }
137
+ .diff .col ul { padding: 0; margin: 0; list-style: none; }
138
+ .diff .col li { padding: 6px 0; border-bottom: 1px dashed var(--line); font-family: var(--mono); font-size: 12.5px; color: var(--fg-2); }
139
+ .diff .col li:last-child { border-bottom: none; }
140
+ .diff .col li .field { color: var(--accent-2); }
141
+ .diff .col li .strike { text-decoration: line-through; color: var(--fg-3); }
142
+ .diff .col li .new { color: var(--ok); }
143
+
144
+ /* FSM */
145
+ .fsm {
146
+ background: var(--bg-2);
147
+ border: 1px solid var(--line);
148
+ border-radius: 12px;
149
+ padding: 22px;
150
+ margin: 16px 0;
151
+ }
152
+ .fsm-states { display: flex; flex-wrap: wrap; gap: 8px; }
153
+ .state {
154
+ font-family: var(--mono);
155
+ font-size: 12px;
156
+ padding: 6px 12px;
157
+ border-radius: 6px;
158
+ border: 1px solid var(--line-2);
159
+ background: var(--bg-3);
160
+ cursor: pointer;
161
+ transition: all 0.12s;
162
+ }
163
+ .state.terminal-ok { color: var(--ok); border-color: rgba(111,212,154,0.4); }
164
+ .state.terminal-bad { color: var(--danger); border-color: rgba(255,122,122,0.3); }
165
+ .state.transient { color: var(--warn); border-color: rgba(245,185,97,0.3); }
166
+ .state.spendable { box-shadow: inset 0 -2px 0 var(--accent-2); }
167
+ .state.active { background: var(--accent); color: #0a0b10; border-color: var(--accent); }
168
+ .state:hover { transform: translateY(-1px); }
169
+ .fsm-out { margin-top: 18px; font-family: var(--mono); font-size: 13px; color: var(--fg-2); min-height: 60px; padding: 12px; background: var(--code-bg); border-radius: 8px; border: 1px solid var(--line); }
170
+ .fsm-out .arrow { color: var(--accent); }
171
+ .fsm-legend { display: flex; gap: 16px; margin-top: 14px; font-size: 12px; color: var(--fg-3); flex-wrap: wrap; }
172
+ .fsm-legend .lg { display: inline-flex; align-items: center; gap: 6px; }
173
+ .fsm-legend .swatch { width: 12px; height: 12px; border-radius: 3px; background: var(--bg-3); border: 1px solid var(--line-2); }
174
+ .fsm-legend .swatch.ok { border-color: rgba(111,212,154,0.6); }
175
+ .fsm-legend .swatch.bad { border-color: rgba(255,122,122,0.6); }
176
+ .fsm-legend .swatch.tr { border-color: rgba(245,185,97,0.6); }
177
+ .fsm-legend .swatch.sp { box-shadow: inset 0 -2px 0 var(--accent-2); }
178
+
179
+ /* Timeline */
180
+ .timeline { position: relative; padding-left: 28px; margin: 16px 0; }
181
+ .timeline::before { content: ''; position: absolute; left: 8px; top: 6px; bottom: 6px; width: 2px; background: linear-gradient(180deg, var(--accent), var(--accent-2), var(--warn)); border-radius: 2px; }
182
+ .week { position: relative; padding: 16px 0 16px 14px; border-bottom: 1px dashed var(--line); }
183
+ .week:last-child { border-bottom: none; }
184
+ .week::before { content: ''; position: absolute; left: -25px; top: 22px; width: 12px; height: 12px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 3px var(--bg); }
185
+ .week.w2::before { background: var(--accent-2); }
186
+ .week.w3::before { background: var(--warn); }
187
+ .week.w4::before { background: var(--ok); }
188
+ .week .head { display: flex; gap: 14px; align-items: baseline; }
189
+ .week .tag { font-family: var(--mono); font-size: 11px; color: var(--fg-3); }
190
+ .week .name { font-size: 16px; font-weight: 600; }
191
+ .week .blurb { color: var(--fg-2); margin: 6px 0 0; font-size: 14px; }
192
+
193
+ /* Code samples */
194
+ .codeblock { position: relative; }
195
+ .codeblock .lbl { position: absolute; top: 8px; right: 12px; font-family: var(--mono); font-size: 11px; color: var(--fg-3); }
196
+ .codeblock.bad pre { border-left: 3px solid var(--warn); }
197
+ .codeblock.good pre { border-left: 3px solid var(--ok); }
198
+ .kw { color: #c79df1; }
199
+ .str { color: #5cf0c8; }
200
+ .com { color: var(--fg-3); }
201
+ .fn { color: #7c9cff; }
202
+ .num { color: #f5b961; }
203
+
204
+ /* Pillar grid for upgrade steps */
205
+ .stepgrid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin: 18px 0; }
206
+ .step { background: var(--bg-2); border: 1px solid var(--line); border-radius: 10px; padding: 16px; }
207
+ .step .n { font-family: var(--mono); font-size: 11px; color: var(--accent); margin-bottom: 6px; }
208
+ .step .t { font-weight: 600; margin-bottom: 6px; }
209
+ .step .d { color: var(--fg-2); font-size: 13px; }
210
+
211
+ /* Stat row */
212
+ .stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; margin: 16px 0 0; }
213
+ .stat { background: var(--bg-2); border: 1px solid var(--line); border-radius: 10px; padding: 18px; }
214
+ .stat .big { font-size: 30px; font-weight: 700; letter-spacing: -0.02em; color: var(--accent-2); margin-bottom: 4px; font-family: var(--mono); }
215
+ .stat .lbl { color: var(--fg-2); font-size: 13px; }
216
+
217
+ /* Footer */
218
+ footer { padding: 40px 0 60px; color: var(--fg-3); font-size: 13px; border-top: 1px solid var(--line); }
219
+ footer .row { display: flex; justify-content: space-between; flex-wrap: wrap; gap: 14px; }
220
+
221
+ /* Highlight box */
222
+ .callout { background: linear-gradient(180deg, rgba(124,156,255,0.06), rgba(92,240,200,0.03)); border: 1px solid var(--line-2); border-left: 3px solid var(--accent); border-radius: 10px; padding: 16px 18px; margin: 16px 0; }
223
+ .callout.warn { border-left-color: var(--warn); background: linear-gradient(180deg, rgba(245,185,97,0.06), transparent); }
224
+ .callout.danger { border-left-color: var(--danger); background: linear-gradient(180deg, rgba(255,122,122,0.06), transparent); }
225
+ .callout .hd { font-weight: 600; margin-bottom: 4px; }
226
+
227
+ /* Responsive */
228
+ @media (max-width: 900px) {
229
+ .bento { grid-template-columns: repeat(2, 1fr); }
230
+ .tile, .tile.big { grid-column: span 2; }
231
+ .tile.wide { grid-column: span 2; }
232
+ .diff { grid-template-columns: 1fr; }
233
+ .stepgrid { grid-template-columns: repeat(2, 1fr); }
234
+ .stats { grid-template-columns: repeat(2, 1fr); }
235
+ .hero h1 { font-size: 40px; }
236
+ nav.top ul { display: none; }
237
+ }
238
+ </style>
239
+ </head>
240
+ <body>
241
+
242
+ <nav class="top">
243
+ <div class="inner">
244
+ <div class="brand">
245
+ <span>@bsv/wallet-toolbox</span>
246
+ <span class="pill">v3</span>
247
+ </div>
248
+ <ul>
249
+ <li><a href="#why">Why v3</a></li>
250
+ <li><a href="#schema">Schema</a></li>
251
+ <li><a href="#fsm">FSM</a></li>
252
+ <li><a href="#migrate">Migration</a></li>
253
+ <li><a href="#rollout">Rollout</a></li>
254
+ <li><a href="#faq">FAQ</a></li>
255
+ </ul>
256
+ </div>
257
+ </nav>
258
+
259
+ <header class="hero">
260
+ <div class="container">
261
+ <div class="eyebrow">Upgrade Guide · v2.x.x → v3.0.0</div>
262
+ <h1>Same wallet API.<br/><span class="grad">Storage that finally tells the truth.</span></h1>
263
+ <p class="sub">
264
+ v3 collapses the legacy <code>transactions</code> + <code>proven_tx_reqs</code> + <code>proven_txs</code> triad into a clean two-table model, adds a 14-state FSM with a full audit log, enforces reorg-safe spendability, and ships horizontal Monitor scaling — all behind the exact same BRC-100 wallet interface your app already calls today.
265
+ </p>
266
+ <div class="cta">
267
+ <a class="btn primary" href="#migrate">Read migration path →</a>
268
+ <a class="btn ghost" href="#schema">See the schema diff</a>
269
+ </div>
270
+ <div class="badges">
271
+ <span class="badge ok">Zero public-API breakage</span>
272
+ <span class="badge ok">Spec-compliant spendability</span>
273
+ <span class="badge ok">Idempotent cutover</span>
274
+ <span class="badge warn">~30 min writer downtime</span>
275
+ </div>
276
+ </div>
277
+ </header>
278
+
279
+ <!-- WHY V3 -->
280
+ <section id="why">
281
+ <div class="container">
282
+ <div class="eyebrow">Why upgrade</div>
283
+ <h2>v2 ships. v3 scales.</h2>
284
+ <p class="section-lede">
285
+ The toolbox you run today works — until it doesn't. Reorgs that retroactively flip confirmed UTXOs to <code>invalid</code>. Coinbase outputs that go spendable before 100 blocks. A single Monitor instance that can't be load-balanced without state corruption. v3 fixes all of it, on the same hot-query plan.
286
+ </p>
287
+
288
+ <div class="bento">
289
+ <div class="tile big" onclick="document.getElementById('p-schema').open=true;document.getElementById('p-schema').scrollIntoView({behavior:'smooth'})">
290
+ <div class="glow"></div>
291
+ <div class="num">01 / SCHEMA</div>
292
+ <div class="title">One row per txid, one row per user-action</div>
293
+ <div class="blurb">The three-table dance is over. Broadcast state, proof state, and chain state share one canonical <code>transactions</code> row. Per-user description, labels, and notification metadata move to a dedicated <code>actions</code> table.</div>
294
+ <div class="pillrow"><span>transactions</span><span>actions</span><span>outputs</span></div>
295
+ </div>
296
+ <div class="tile big" onclick="document.getElementById('p-fsm').open=true;document.getElementById('p-fsm').scrollIntoView({behavior:'smooth'})">
297
+ <div class="glow"></div>
298
+ <div class="num">02 / FSM</div>
299
+ <div class="title">14-state processing state machine, fully audited</div>
300
+ <div class="blurb">Every transition is validated against an explicit table and persisted to <code>tx_audit</code>. No more silent status drift — every state change has a row with who, when, and why.</div>
301
+ <div class="pillrow"><span>queued</span><span>sent</span><span>seen_multi</span><span>confirmed</span><span>reorging</span><span>+9 more</span></div>
302
+ </div>
303
+
304
+ <div class="tile" onclick="document.getElementById('p-spend').open=true;document.getElementById('p-spend').scrollIntoView({behavior:'smooth'})">
305
+ <div class="num">03 / SPENDABILITY</div>
306
+ <div class="title">Single source of truth</div>
307
+ <div class="blurb">A cached <code>outputs.spendable</code> column derived from one well-defined rule. Refreshes atomically on every state change.</div>
308
+ </div>
309
+ <div class="tile" onclick="document.getElementById('p-reorg').open=true;document.getElementById('p-reorg').scrollIntoView({behavior:'smooth'})">
310
+ <div class="num">04 / REORG-SAFE</div>
311
+ <div class="title">A reorg never invalidates a confirmed tx</div>
312
+ <div class="blurb">The <code>reorging</code> state preserves current spendability while a new block path is sought. Spec §5, enforced by the FSM.</div>
313
+ </div>
314
+ <div class="tile" onclick="document.getElementById('p-coinbase').open=true;document.getElementById('p-coinbase').scrollIntoView({behavior:'smooth'})">
315
+ <div class="num">05 / COINBASE</div>
316
+ <div class="title">100-block maturity, native</div>
317
+ <div class="blurb">New <code>matures_at_height</code> column. Coinbase outputs are unspendable until the chain tip passes their maturity height — no more app-layer guard rails.</div>
318
+ </div>
319
+
320
+ <div class="tile" onclick="document.getElementById('p-monitor').open=true;document.getElementById('p-monitor').scrollIntoView({behavior:'smooth'})">
321
+ <div class="num">06 / MONITOR</div>
322
+ <div class="title">Lease-based, horizontally scalable</div>
323
+ <div class="blurb">Run as many Monitor instances as you need. Each task acquires a row-level lease from <code>monitor_lease</code>; expired leases are auto-reclaimed.</div>
324
+ </div>
325
+ <div class="tile" onclick="document.getElementById('p-audit').open=true;document.getElementById('p-audit').scrollIntoView({behavior:'smooth'})">
326
+ <div class="num">07 / AUDIT</div>
327
+ <div class="title">Full forensic history</div>
328
+ <div class="blurb"><code>tx_audit</code> records every processing transition with timestamps and a JSON details payload (provider, status, source). Post-incident reconstruction without grep.</div>
329
+ </div>
330
+ <div class="tile" onclick="document.getElementById('p-perf').open=true;document.getElementById('p-perf').scrollIntoView({behavior:'smooth'})">
331
+ <div class="num">08 / PERF</div>
332
+ <div class="title">Hot query unchanged</div>
333
+ <div class="blurb">The 99% case — "spendable outputs for user X in basket Y" — is still a single-table index scan. No joins added to the hot path.</div>
334
+ </div>
335
+ </div>
336
+
337
+ <div class="stats">
338
+ <div class="stat"><div class="big">14</div><div class="lbl">FSM states (was 6)</div></div>
339
+ <div class="stat"><div class="big">3 → 2</div><div class="lbl">canonical tables</div></div>
340
+ <div class="stat"><div class="big">100%</div><div class="lbl">spec conformance (§1–§6)</div></div>
341
+ <div class="stat"><div class="big">0</div><div class="lbl">public-API breaks</div></div>
342
+ </div>
343
+ </div>
344
+ </section>
345
+
346
+ <!-- DETAIL PANELS -->
347
+ <section id="detail">
348
+ <div class="container">
349
+ <div class="eyebrow">Deep dive</div>
350
+ <h2>Open any pillar for the details.</h2>
351
+ <p class="section-lede">Each tile above maps to one of the panels below. Skim or expand — your call.</p>
352
+
353
+ <details class="panel" id="p-schema">
354
+ <summary>
355
+ <span class="sm-title">01 — Schema: from 3 tables to 2</span>
356
+ <span class="sm-blurb">Single row per txid; per-user data moves to <code>actions</code>.</span>
357
+ <span class="chev">›</span>
358
+ </summary>
359
+ <div class="panel-body">
360
+ <p>In v2, every transaction was scattered across three places: a per-user <code>transactions</code> row, a broadcast/processing row in <code>proven_tx_reqs</code>, and (eventually) a proof row in <code>proven_txs</code>. Status semantics were split across <code>transactions.status</code> and <code>proven_tx_reqs.status</code>, and reconciliation logic had to live in application code.</p>
361
+ <p>v3 promotes <code>transactions</code> to the single chain-canonical table — one row per txid — and introduces <code>actions</code> for everything that is truly per-user (description, label associations, hidden flag, notification subscribers, satoshis delta).</p>
362
+
363
+ <div class="diff">
364
+ <div class="col v2">
365
+ <h4><span>v2 — three tables</span></h4>
366
+ <ul>
367
+ <li><span class="field">transactions</span> · userId, status, satoshis, description, reference, isOutgoing, version, lockTime, inputBEEF, ...</li>
368
+ <li><span class="field">proven_tx_reqs</span> · txid, status, attempts, wasBroadcast, rawTx, inputBEEF, history (JSON), ...</li>
369
+ <li><span class="field">proven_txs</span> · txid, height, merklePath, merkleRoot, blockHash, rawTx</li>
370
+ <li><span class="field">tx_labels_map</span> · transactionId → transactions.transactionId</li>
371
+ </ul>
372
+ </div>
373
+ <div class="col v3">
374
+ <h4><span>v3 — two canonical tables</span></h4>
375
+ <ul>
376
+ <li><span class="field">transactions</span> · txid, <span class="new">processing</span>, processingChangedAt, nextActionAt, attempts, rebroadcastCycles, wasBroadcast, idempotencyKey, batch, rawTx, inputBeef, <span class="new">height, merklePath, merkleRoot, blockHash</span>, <span class="new">isCoinbase</span>, lastProvider, frozenReason, rowVersion</li>
377
+ <li><span class="field">actions</span> · userId, transactionId, reference, description, isOutgoing, <span class="new">satoshisDelta</span>, userNosend, hidden, userAborted, notifyJson</li>
378
+ <li><span class="field">tx_labels_map</span> · transactionId → <span class="new">actions.actionId</span></li>
379
+ <li><span class="field">tx_audit</span> · <span class="new">new</span> — every transition + reason</li>
380
+ <li><span class="field">monitor_lease</span> · <span class="new">new</span> — multi-instance Monitor</li>
381
+ <li><span class="field">chain_tip</span> · <span class="new">new</span> — singleton, coinbase maturity</li>
382
+ </ul>
383
+ </div>
384
+ </div>
385
+
386
+ <h3>Outputs stay flat — by design</h3>
387
+ <p>The hot query "find spendable outputs for this user in the default basket" runs millions of times in production. v3 preserves the single-table scan. The <code>outputs</code> table keeps everything inline: txid, vout, userId, satoshis, basketId, lockingScript, <code>spendable</code> (cached), <code>spentBy</code>, <code>isCoinbase</code>, <code>matures_at_height</code>. No joins added.</p>
388
+ <pre><code><span class="kw">SELECT</span> * <span class="kw">FROM</span> outputs
389
+ <span class="kw">WHERE</span> user_id = ? <span class="kw">AND</span> spendable = <span class="kw">true</span> <span class="kw">AND</span> basketId = ?
390
+ <span class="kw">ORDER BY</span> satoshis <span class="kw">DESC</span> <span class="kw">LIMIT</span> <span class="num">100</span>;
391
+ <span class="com">-- Same plan as v2. Same indexes. Same latency.</span></code></pre>
392
+ </div>
393
+ </details>
394
+
395
+ <details class="panel" id="p-fsm">
396
+ <summary>
397
+ <span class="sm-title">02 — Processing FSM: 14 explicit states</span>
398
+ <span class="sm-blurb">Tap any state to see its legal transitions.</span>
399
+ <span class="chev">›</span>
400
+ </summary>
401
+ <div class="panel-body">
402
+ <p>v2 used a 6-state <code>TransactionStatus</code> enum that conflated user intent (NoSend), broadcast progress (Unmined, Callback), and finality (Completed). v3 separates concerns into a 14-state <code>ProcessingStatus</code> with an explicit transition table — illegal moves throw at the storage layer, not silently corrupt downstream queries.</p>
403
+
404
+ <div class="fsm">
405
+ <div class="fsm-states" id="fsm-states"></div>
406
+ <div class="fsm-out" id="fsm-out">Click a state to see its outgoing edges.</div>
407
+ <div class="fsm-legend">
408
+ <span class="lg"><span class="swatch sp"></span> spendable</span>
409
+ <span class="lg"><span class="swatch ok"></span> terminal (good)</span>
410
+ <span class="lg"><span class="swatch bad"></span> terminal (toxic)</span>
411
+ <span class="lg"><span class="swatch tr"></span> recovery / transient</span>
412
+ </div>
413
+ </div>
414
+
415
+ <h3>Why this matters</h3>
416
+ <ul>
417
+ <li><b>seen vs. seen_multi.</b> Provider acknowledgment is recorded at the granularity your monitoring needs. Multi-provider confirmation no longer collapses into the same bucket as a single 200 OK.</li>
418
+ <li><b>unconfirmed vs. confirmed.</b> A merkle path that has not yet been validated against the chain tip is a different operational state than one that has. v3 keeps them apart so monitoring and replay logic don't have to.</li>
419
+ <li><b>frozen.</b> Operator pause without losing position. Useful for compliance holds.</li>
420
+ <li><b>nonfinal.</b> Live <code>nLockTime</code> transactions sit in their own state until eligibility, never poisoning the broadcast queue.</li>
421
+ <li><b>unfail.</b> Admin retry override that wipes the rejection cause without losing audit history.</li>
422
+ </ul>
423
+ </div>
424
+ </details>
425
+
426
+ <details class="panel" id="p-spend">
427
+ <summary>
428
+ <span class="sm-title">03 — Spendability: one rule, derived once</span>
429
+ <span class="sm-blurb">The cached <code>outputs.spendable</code> flag is the only thing your wallet API has to trust.</span>
430
+ <span class="chev">›</span>
431
+ </summary>
432
+ <div class="panel-body">
433
+ <p>v2 had spendability logic distributed across <code>listOutputs</code>, <code>createAction</code>, and the broadcast pipeline — every caller re-computed it. v3 derives it once, atomically, from the FSM state plus the chain tip:</p>
434
+ <pre><code><span class="com">// spendabilityRule.ts</span>
435
+ <span class="kw">const</span> spendable =
436
+ <span class="fn">ProcessingSpendableStatus</span>.<span class="fn">includes</span>(tx.processing) <span class="com">// sent, seen, seen_multi, unconfirmed, confirmed</span>
437
+ &amp;&amp; output.spentBy === <span class="kw">null</span>
438
+ &amp;&amp; output.lockingScript !== <span class="kw">null</span>
439
+ &amp;&amp; (!output.isCoinbase || output.maturesAtHeight &lt;= chainTip.height);</code></pre>
440
+ <p>Every FSM transition triggers <code>refreshOutputsSpendable</code> for the affected txid. The flag in <code>outputs.spendable</code> is the canonical answer for every read path. No more drift between what the FSM says and what UTXO selection believes.</p>
441
+ </div>
442
+ </details>
443
+
444
+ <details class="panel" id="p-reorg">
445
+ <summary>
446
+ <span class="sm-title">04 — Reorg-safe: confirmed stays confirmed</span>
447
+ <span class="sm-blurb">The <code>reorging</code> state is a holding pen, not a verdict.</span>
448
+ <span class="chev">›</span>
449
+ </summary>
450
+ <div class="panel-body">
451
+ <p><b>Spec §5:</b> "A reorg SHALL never cause a transaction to be marked Invalid or DoubleSpend."</p>
452
+ <p>v2's status machine allowed <code>completed → invalid</code> when chaintracks signaled a different best chain — a silent retroactive flip of UTXO state. v3's FSM rejects that move. When a reorg is detected:</p>
453
+ <ol>
454
+ <li><code>confirmed → reorging</code> (preserves current spendability).</li>
455
+ <li>Monitor's reorg task re-queries chaintracks for the new merkle path.</li>
456
+ <li>Outcome routes back to <code>seen</code>, <code>unconfirmed</code>, or <code>confirmed</code>. To land on <code>invalid</code> or <code>doubleSpend</code>, the row must first leave <code>reorging</code> — so the audit row attributes the rejection to a non-reorg cause.</li>
457
+ </ol>
458
+ <div class="callout">
459
+ <div class="hd">User-visible effect</div>
460
+ UTXO balances do not flap during normal reorg activity. Wallet UIs no longer need a "settling" debounce to mask v2's race conditions.
461
+ </div>
462
+ </div>
463
+ </details>
464
+
465
+ <details class="panel" id="p-coinbase">
466
+ <summary>
467
+ <span class="sm-title">05 — Coinbase 100-block maturity</span>
468
+ <span class="sm-blurb">Maturity is a column, not a callsite check.</span>
469
+ <span class="chev">›</span>
470
+ </summary>
471
+ <div class="panel-body">
472
+ <p>v2 had no first-class coinbase handling — wallets that custodied mining rewards needed application-level guards to keep immature outputs out of UTXO selection. v3 ships:</p>
473
+ <ul>
474
+ <li><code>outputs.isCoinbase</code> — boolean flag set at internalization.</li>
475
+ <li><code>outputs.matures_at_height</code> — block height at which the output becomes spendable (= mined-at-height + 100).</li>
476
+ <li><code>chain_tip</code> singleton — current best-known height, written by Monitor.</li>
477
+ <li>Spendability rule applies the maturity guard automatically.</li>
478
+ </ul>
479
+ <p>A <code>backfillCoinbaseMaturity</code> helper retro-fills the height column for any pre-existing coinbase outputs at cutover time. Mining-pool deployments get correct maturity without changing a single caller.</p>
480
+ </div>
481
+ </details>
482
+
483
+ <details class="panel" id="p-monitor">
484
+ <summary>
485
+ <span class="sm-title">06 — Monitor: lease-based, multi-instance safe</span>
486
+ <span class="sm-blurb">Run N Monitors. They will not step on each other.</span>
487
+ <span class="chev">›</span>
488
+ </summary>
489
+ <div class="panel-body">
490
+ <p>v2's gotcha #5 from the README: "Don't run multiple monitor instances on the same storage simultaneously; they will race and cause state corruption." That constraint disappears in v3.</p>
491
+ <p>v3 introduces a <code>monitor_lease</code> table. Tasks like <code>TaskCheckForProofs</code>, <code>TaskRebroadcast</code>, and reorg detection each acquire a row-scoped lease before mutating <code>transactions</code>. Leases carry a TTL; abandoned leases are reclaimed on next pass.</p>
492
+ <pre><code><span class="com">// LeasedMonitorTask base class</span>
493
+ <span class="kw">async</span> <span class="fn">runOnce</span>() {
494
+ <span class="kw">const</span> claim = { taskName: <span class="str">'proof-acquisition'</span>, ownerId: this.instanceId, ttlMs };
495
+ <span class="kw">const</span> res = <span class="kw">await</span> txService.<span class="fn">tryClaimLease</span>(claim);
496
+ <span class="kw">if</span> (!res.ok) <span class="kw">return</span>; <span class="com">// another instance holds it; back off</span>
497
+ <span class="kw">try</span> { <span class="kw">await</span> <span class="fn">doWork</span>(); }
498
+ <span class="kw">finally</span> { <span class="kw">await</span> txService.<span class="fn">releaseLease</span>({ taskName: claim.taskName, ownerId: claim.ownerId }); }
499
+ }</code></pre>
500
+ <p>Outcome: HA deployments without a coordinated leader; rolling restarts with zero risk of split-brain writes.</p>
501
+ </div>
502
+ </details>
503
+
504
+ <details class="panel" id="p-audit">
505
+ <summary>
506
+ <span class="sm-title">07 — tx_audit: every transition, on disk</span>
507
+ <span class="sm-blurb">Replace "what happened to this txid?" forensics with a SQL query.</span>
508
+ <span class="chev">›</span>
509
+ </summary>
510
+ <div class="panel-body">
511
+ <p>v2's <code>proven_tx_reqs.history</code> was a JSON blob — append-only inside the row, opaque to indexing, untestable. v3 replaces it with a real table:</p>
512
+ <pre><code><span class="kw">CREATE TABLE</span> tx_audit (
513
+ auditId <span class="kw">INTEGER PRIMARY KEY</span>,
514
+ transactionId <span class="kw">INTEGER NULL REFERENCES</span> transactions(transactionId),
515
+ actionId <span class="kw">INTEGER NULL REFERENCES</span> actions(actionId),
516
+ event <span class="kw">VARCHAR</span>(<span class="num">64</span>) <span class="kw">NOT NULL</span>, <span class="com">-- 'processing.changed', 'proof.acquired', 'history.note', ...</span>
517
+ from_state <span class="kw">VARCHAR</span>(<span class="num">16</span>) <span class="kw">NULL</span>, <span class="com">-- FSM source for transitions</span>
518
+ to_state <span class="kw">VARCHAR</span>(<span class="num">16</span>) <span class="kw">NULL</span>, <span class="com">-- FSM target for transitions</span>
519
+ details_json <span class="kw">TEXT NULL</span>, <span class="com">-- JSON payload (provider, status, free-text 'what', etc.)</span>
520
+ created_at <span class="kw">DATETIME</span>,
521
+ updated_at <span class="kw">DATETIME</span>
522
+ );
523
+ <span class="com">-- Indexes: event, transactionId, actionId</span></code></pre>
524
+ <p>Useful queries become trivial: "show every state this txid was in", "which provider response is logged for this rejection" (<code>details_json</code>), "rate of <code>* → doubleSpend</code> in the last hour" (<code>event = 'processing.changed' AND to_state = 'doubleSpend'</code>).</p>
525
+ </div>
526
+ </details>
527
+
528
+ <details class="panel" id="p-perf">
529
+ <summary>
530
+ <span class="sm-title">08 — Performance: the hot path is untouched</span>
531
+ <span class="sm-blurb">Single-table outputs scan. Same indexes. Same plan.</span>
532
+ <span class="chev">›</span>
533
+ </summary>
534
+ <div class="panel-body">
535
+ <p>The migration's hardest constraint was not regressing the spendable-outputs query. v3's <code>outputs</code> table preserves the exact same shape and indexes; the only added column is <code>matures_at_height</code> (NULL for non-coinbase).</p>
536
+ <p>The rollout gate (Week 2, staging soak) explicitly fails the cutover if p95 of <code>findSpendableOutputs</code> regresses more than 15% vs. the v2 baseline. In our staging soak it was unchanged within noise.</p>
537
+ <div class="callout">
538
+ <div class="hd">What does get slower (and where it doesn't matter)</div>
539
+ <code>listActions</code> now joins <code>actions ⨝ transactions</code> instead of a single-table scan. That code path is run on user view-history loads — orders of magnitude colder than UTXO selection — and benefits from the FSM granularity it gains in return.
540
+ </div>
541
+ </div>
542
+ </details>
543
+ </div>
544
+ </section>
545
+
546
+ <!-- SCHEMA SECTION -->
547
+ <section id="schema">
548
+ <div class="container">
549
+ <div class="eyebrow">v2 vs. v3 at a glance</div>
550
+ <h2>Side-by-side: what moved where</h2>
551
+ <p class="section-lede">Same columns, mostly. The story is which table owns what.</p>
552
+
553
+ <h3>Column lineage</h3>
554
+ <pre><code><span class="com">// v2</span>
555
+ transactions.{userId, status, satoshis, description, reference, isOutgoing, version, lockTime, inputBEEF}
556
+ proven_tx_reqs.{txid, status, attempts, wasBroadcast, rawTx, inputBEEF, history}
557
+ proven_txs.{txid, height, merklePath, merkleRoot, blockHash, rawTx}
558
+
559
+ <span class="com">// v3</span>
560
+ transactions.{txid, processing, processingChangedAt, attempts, wasBroadcast,
561
+ rawTx, inputBeef, height, merklePath, merkleRoot, blockHash,
562
+ isCoinbase, lastProvider, frozenReason, rowVersion}
563
+ actions.{userId, transactionId, reference, description, isOutgoing, satoshisDelta,
564
+ userNosend, hidden, userAborted, notifyJson}
565
+ tx_audit.{auditId, transactionId, actionId, event, from_state, to_state, details_json, created_at}</code></pre>
566
+
567
+ <h3>Status mapping (auto-applied during backfill)</h3>
568
+ <pre><code>v2 TransactionStatus v3 ProcessingStatus
569
+ ───────────────────── ───────────────────
570
+ nosend → nosend
571
+ sending → sending
572
+ unmined → sent
573
+ callback → seen
574
+ unconfirmed → unconfirmed
575
+ completed → confirmed
576
+ invalid → invalid
577
+ doubleSpend → doubleSpend
578
+ unfail → unfail
579
+ <span class="num">queued</span> <span class="com">// new — pre-broadcast queue</span>
580
+ <span class="num">seen_multi</span> <span class="com">// new — multi-provider confirmation</span>
581
+ <span class="num">reorging</span> <span class="com">// new — reorg holding pen</span>
582
+ <span class="num">frozen</span> <span class="com">// new — operator pause</span>
583
+ <span class="num">nonfinal</span> <span class="com">// new — live nLockTime</span></code></pre>
584
+ </div>
585
+ </section>
586
+
587
+ <!-- MIGRATION SECTION -->
588
+ <section id="migrate">
589
+ <div class="container">
590
+ <div class="eyebrow">Migration mechanics</div>
591
+ <h2>Six steps. One maintenance window.</h2>
592
+ <p class="section-lede">The migration is additive-first: v3 code lands in production writing both schemas in parallel for a week before any cutover. The destructive rename runs once, in a scheduled window, and is fully scripted.</p>
593
+
594
+ <div class="stepgrid">
595
+ <div class="step"><div class="n">STEP 1</div><div class="t">Deploy additive code</div><div class="d">v3 release ships with the new tables (<code>transactions_new</code>, <code>actions</code>, <code>tx_audit</code>, <code>monitor_lease</code>, <code>chain_tip</code>). Reads still hit legacy.</div></div>
596
+ <div class="step"><div class="n">STEP 2</div><div class="t">Backfill</div><div class="d"><code>runBackfill</code> populates the new tables from the legacy triad. Idempotent; can be paused and resumed.</div></div>
597
+ <div class="step"><div class="n">STEP 3</div><div class="t">Shadow-write</div><div class="d">Every write hits both schemas. Divergence counter must hold at zero for 48 h before scheduling cutover.</div></div>
598
+ <div class="step"><div class="n">STEP 4</div><div class="t">Drain &amp; pause Monitor</div><div class="d">Maintenance window opens. Writers drained. Monitor stopped. <code>monitor_lease</code> verified empty.</div></div>
599
+ <div class="step"><div class="n">STEP 5</div><div class="t">runSchemaCutover</div><div class="d">Renames legacy tables to <code>*_legacy</code>. Swaps <code>transactions_new</code> in. Remaps FKs in <code>outputs</code>, <code>commissions</code>, <code>tx_labels_map</code>. Idempotent.</div></div>
600
+ <div class="step"><div class="n">STEP 6</div><div class="t">Smoke tests, reopen</div><div class="d">Eight smoke queries from the runbook. All must pass — orphan checks, row-count parity, and a synthetic <code>create → transition → recordProof</code> roundtrip.</div></div>
601
+ </div>
602
+
603
+ <h3>Caller migration (what your app needs to do)</h3>
604
+ <p>If you use <code>SetupWallet</code> or <code>SetupClient</code>, the answer is <b>nothing</b>. The public BRC-100 wallet interface is unchanged. <code>createAction</code>, <code>listOutputs</code>, <code>internalizeAction</code>, etc., all keep the exact same signatures and semantics.</p>
605
+ <p>If you reach into <code>StorageProvider</code> directly — for analytics, custom monitor tasks, or admin dashboards — these methods are net-new and you may want to adopt them:</p>
606
+
607
+ <div class="codeblock good">
608
+ <pre><span class="lbl">v3 storage API additions</span><code><span class="com">// FSM-aware writes (all go through TransactionService)</span>
609
+ <span class="kw">await</span> txService.<span class="fn">create</span>({ txid, processing: <span class="str">'queued'</span>, rawTx, inputBeef });
610
+ <span class="kw">await</span> txService.<span class="fn">transition</span>({ transactionId, expectedFrom: <span class="str">'queued'</span>, to: <span class="str">'sending'</span>, provider: <span class="str">'arc'</span> });
611
+ <span class="kw">await</span> txService.<span class="fn">recordProof</span>({ transactionId, expectedFrom: <span class="str">'unconfirmed'</span>, height, merklePath, merkleRoot, blockHash });
612
+ <span class="kw">await</span> txService.<span class="fn">transitionMany</span>({ transactionIds: ids, to: <span class="str">'invalid'</span>, details: { reason: <span class="str">'all providers rejected'</span> } });
613
+
614
+ <span class="com">// per-user reads</span>
615
+ <span class="kw">await</span> txService.<span class="fn">findActionByReference</span>(userId, reference);
616
+ <span class="kw">await</span> txService.<span class="fn">findActionByUserTxid</span>(userId, txid);
617
+ <span class="kw">await</span> txService.<span class="fn">listActionsForUser</span>({ userId, statusFilter, labelIds, labelQueryMode: <span class="str">'all'</span>, limit, offset });
618
+ <span class="kw">await</span> txService.<span class="fn">listOutputsForUser</span>({ userId, basket, limit, offset });
619
+
620
+ <span class="com">// monitor leases (lease-based Monitor)</span>
621
+ <span class="kw">await</span> txService.<span class="fn">tryClaimLease</span>({ taskName: <span class="str">'proof-acquisition'</span>, ownerId, ttlMs });
622
+ <span class="kw">await</span> txService.<span class="fn">renewLease</span>({ taskName, ownerId, ttlMs });
623
+ <span class="kw">await</span> txService.<span class="fn">releaseLease</span>({ taskName, ownerId });
624
+
625
+ <span class="com">// audit + spendability</span>
626
+ <span class="kw">await</span> <span class="fn">refreshOutputsSpendable</span>(knex, { transactionId });
627
+ <span class="kw">await</span> txService.<span class="fn">recordHistoryNote</span>(transactionId, { what: <span class="str">'provider_response'</span>, provider: <span class="str">'arc'</span>, status: <span class="str">'200'</span> });</code></pre>
628
+ </div>
629
+
630
+ <h3>What breaks if you ignore the migration</h3>
631
+ <div class="callout warn">
632
+ <div class="hd">Direct SQL against legacy table names</div>
633
+ Any code still issuing <code>SELECT … FROM proven_tx_reqs</code> or reading <code>transactions.status</code> directly will throw the moment the cutover completes. The Week-3 production audit explicitly grep's the deploy for these references before opening the writer pool.
634
+ </div>
635
+ </div>
636
+ </section>
637
+
638
+ <!-- CODE COMPARE -->
639
+ <section>
640
+ <div class="container">
641
+ <div class="eyebrow">Code, before &amp; after</div>
642
+ <h2>What the same operation looks like in v2 vs. v3</h2>
643
+
644
+ <h3>Recording a Merkle proof</h3>
645
+ <div class="diff">
646
+ <div class="col">
647
+ <h4><span class="strike">v2</span></h4>
648
+ <pre><code><span class="com">// scattered across 3 tables, no audit</span>
649
+ <span class="kw">await</span> storage.<span class="fn">findOrInsertProvenTx</span>({
650
+ txid, height, merklePath, merkleRoot, blockHash, rawTx
651
+ });
652
+ <span class="kw">await</span> storage.<span class="fn">updateProvenTxReq</span>(reqId, {
653
+ status: <span class="str">'completed'</span>, provenTxId
654
+ });
655
+ <span class="kw">await</span> storage.<span class="fn">updateTransaction</span>(tId, {
656
+ status: <span class="str">'completed'</span>, provenTxId
657
+ });
658
+ <span class="com">// hope all three commit; FSM not validated</span></code></pre>
659
+ </div>
660
+ <div class="col">
661
+ <h4><span>v3</span></h4>
662
+ <pre><code><span class="com">// one call, FSM-validated, audited</span>
663
+ <span class="kw">await</span> txService.<span class="fn">recordProof</span>({
664
+ transactionId,
665
+ expectedFrom: <span class="str">'unconfirmed'</span>,
666
+ height, merklePath, merkleRoot, blockHash
667
+ });
668
+ <span class="com">// internally: transition unconfirmed→confirmed,</span>
669
+ <span class="com">// write proof fields, append tx_audit row,</span>
670
+ <span class="com">// refresh outputs.spendable.</span></code></pre>
671
+ </div>
672
+ </div>
673
+
674
+ <h3>Listing spendable outputs (unchanged at the caller)</h3>
675
+ <pre><code><span class="com">// Both v2 and v3 — your app code does not change</span>
676
+ <span class="kw">const</span> utxos = <span class="kw">await</span> wallet.<span class="fn">listOutputs</span>({
677
+ basket: <span class="str">'default'</span>,
678
+ includeSpent: <span class="kw">false</span>
679
+ });</code></pre>
680
+ </div>
681
+ </section>
682
+
683
+ <!-- ROLLOUT -->
684
+ <section id="rollout">
685
+ <div class="container">
686
+ <div class="eyebrow">Rollout</div>
687
+ <h2>Four-week, gated, reversible</h2>
688
+ <p class="section-lede">Every week has explicit exit criteria. Any failed criterion blocks promotion to the next week. The rollback playbook is rehearsed once during the Week-3 soak.</p>
689
+
690
+ <div class="timeline">
691
+ <div class="week w1">
692
+ <div class="head"><span class="tag">WEEK 1</span><span class="name">Deploy &amp; shadow</span></div>
693
+ <p class="blurb">Additive code ships to staging then production. New tables created. Backfill rehearsed against a production snapshot. Performance baseline captured for the hot query.</p>
694
+ </div>
695
+ <div class="week w2">
696
+ <div class="head"><span class="tag">WEEK 2</span><span class="name">Stage cutover + soak</span></div>
697
+ <p class="blurb">Real <code>runSchemaCutover</code> executed on staging. Eight smoke tests must pass before reopening writers. Seven-day soak with k6 load test and full conformance suite on days 1, 3, 7.</p>
698
+ </div>
699
+ <div class="week w3">
700
+ <div class="head"><span class="tag">WEEK 3</span><span class="name">Production cutover + monitor</span></div>
701
+ <p class="blurb">Scheduled 02:00–04:00 UTC window. Writers drained, Monitor stopped, cutover run, smoke tests, writers reopened. Seven-day monitored soak with SRE on rollback rehearsal.</p>
702
+ </div>
703
+ <div class="week w4">
704
+ <div class="head"><span class="tag">WEEK 4</span><span class="name">Decommission</span></div>
705
+ <p class="blurb">Drop <code>*_legacy</code> tables. Remove shadow-write code. Archive backup to cold storage. Project retro.</p>
706
+ </div>
707
+ </div>
708
+
709
+ <h3>Risk table (the ones that kept us up)</h3>
710
+ <details class="panel">
711
+ <summary>
712
+ <span class="sm-title">Cutover failure mid-rename</span>
713
+ <span class="sm-blurb">Mitigation: <code>runSchemaCutover</code> is idempotent. Re-run resumes from <code>transactions_legacy</code> presence guard.</span>
714
+ <span class="chev">›</span>
715
+ </summary>
716
+ <div class="panel-body">
717
+ <p>Every state during the cutover sequence is observable from SQL. If <code>transactions_legacy</code> exists but <code>transactions_new</code> does not, the rename completed; the FK remap may or may not have started. The runner detects this and resumes safely.</p>
718
+ </div>
719
+ </details>
720
+ <details class="panel">
721
+ <summary>
722
+ <span class="sm-title">FK mismatch on <code>outputs</code> / <code>tx_labels_map</code></span>
723
+ <span class="sm-blurb">Mitigation: smoke tests 3.4 + 3.5 must return zero orphans before writers reopen.</span>
724
+ <span class="chev">›</span>
725
+ </summary>
726
+ <div class="panel-body">
727
+ <p>The cutover remaps FK values by table-wide offset arithmetic. Two left-joins detect any row that survived with a dangling parent. Both queries are required to return 0; on failure the writer pool stays closed and the rollback path runs.</p>
728
+ </div>
729
+ </details>
730
+ <details class="panel">
731
+ <summary>
732
+ <span class="sm-title">Performance regression on hot query</span>
733
+ <span class="sm-blurb">Mitigation: k6 at 10× normal QPS on Week-2 staging; abort if p95 regresses &gt;15%.</span>
734
+ <span class="chev">›</span>
735
+ </summary>
736
+ <div class="panel-body">
737
+ <p>Single-table outputs scan is the load-bearing invariant. Performance Engineering signs off before the production cutover is scheduled; without the green light, the window does not open.</p>
738
+ </div>
739
+ </details>
740
+ <details class="panel">
741
+ <summary>
742
+ <span class="sm-title">Rollback window blown</span>
743
+ <span class="sm-blurb">Mitigation: <code>*_legacy</code> tables retained for 30 days; pre-cutover backup pinned in cold storage for the full Week-4 window.</span>
744
+ <span class="chev">›</span>
745
+ </summary>
746
+ <div class="panel-body">
747
+ <p>Rollback is best-effort once writes have landed on the new <code>transactions</code> table. The runbook is explicit: if any post-cutover writes have occurred, the only safe path is forward-fix or restore-from-backup. The legacy tables are read-available for the full 30-day window so analytics queries can be cross-checked.</p>
748
+ </div>
749
+ </details>
750
+ </div>
751
+ </section>
752
+
753
+ <!-- FAQ -->
754
+ <section id="faq">
755
+ <div class="container">
756
+ <div class="eyebrow">FAQ</div>
757
+ <h2>Questions we hear most</h2>
758
+
759
+ <details class="panel">
760
+ <summary>
761
+ <span class="sm-title">Do I have to change application code?</span>
762
+ <span class="sm-blurb">No — if you use <code>Wallet</code>, <code>SetupWallet</code>, or <code>SetupClient</code> as documented.</span>
763
+ <span class="chev">›</span>
764
+ </summary>
765
+ <div class="panel-body">
766
+ <p>The BRC-100 wallet interface is unchanged: <code>createAction</code>, <code>signAction</code>, <code>listActions</code>, <code>listOutputs</code>, <code>internalizeAction</code>, <code>relinquishOutput</code>, <code>getPublicKey</code>, <code>listCertificates</code>, <code>proveCertificate</code> — same signatures, same semantics. The only thing you do is bump the npm version, redeploy, and run the migration.</p>
767
+ </div>
768
+ </details>
769
+
770
+ <details class="panel">
771
+ <summary>
772
+ <span class="sm-title">Will the upgrade lose any data?</span>
773
+ <span class="sm-blurb">No. The backfill carries every legacy row forward; orphan-checks run at cutover gate writers reopening.</span>
774
+ <span class="chev">›</span>
775
+ </summary>
776
+ <div class="panel-body">
777
+ <p>Smoke tests 3.1 and 3.2 enforce row-count parity between <code>transactions_legacy</code> and the new <code>transactions</code> + <code>actions</code> pair. Smoke tests 3.4 and 3.5 enforce zero FK orphans. The cutover refuses to reopen the writer pool until all four return clean.</p>
778
+ </div>
779
+ </details>
780
+
781
+ <details class="panel">
782
+ <summary>
783
+ <span class="sm-title">What about my IndexedDB clients?</span>
784
+ <span class="sm-blurb"><code>runIdbSchemaCutover</code> runs on next app open; tracked by telemetry.</span>
785
+ <span class="chev">›</span>
786
+ </summary>
787
+ <div class="panel-body">
788
+ <p>The browser/mobile bundles ship the same schema-cutover helper, scoped to a single IDB database. It runs the first time the upgraded client opens the wallet. A 14-day force-upgrade prompt is wired in for stragglers — disabled by default; opt in via <code>settings.idbForceUpgradeAfterDays</code>.</p>
789
+ </div>
790
+ </details>
791
+
792
+ <details class="panel">
793
+ <summary>
794
+ <span class="sm-title">Can I run v2 and v3 against the same database?</span>
795
+ <span class="sm-blurb">During the shadow window (Week 1), yes. After cutover, no.</span>
796
+ <span class="chev">›</span>
797
+ </summary>
798
+ <div class="panel-body">
799
+ <p>Week 1 is explicitly designed for parallel running — additive code lands; both schemas update on every write; reads still hit legacy. Once cutover runs in Week 2/3, the legacy tables are renamed <code>*_legacy</code> and any v2 code path that reads them by their original names will throw.</p>
800
+ </div>
801
+ </details>
802
+
803
+ <details class="panel">
804
+ <summary>
805
+ <span class="sm-title">What if I'm just integrating wallet-toolbox for the first time?</span>
806
+ <span class="sm-blurb">Install v3 directly. There is no v2 obligation.</span>
807
+ <span class="chev">›</span>
808
+ </summary>
809
+ <div class="panel-body">
810
+ <p>New deployments get the v3 schema from the first <code>migrate()</code> call. None of the legacy tables are created. None of the cutover machinery runs. You inherit the FSM, audit log, and lease-based Monitor on day one.</p>
811
+ </div>
812
+ </details>
813
+
814
+ <details class="panel">
815
+ <summary>
816
+ <span class="sm-title">How big is the v3 npm release?</span>
817
+ <span class="sm-blurb">No new runtime dependencies. Bundle size effectively flat across all three packages.</span>
818
+ <span class="chev">›</span>
819
+ </summary>
820
+ <div class="panel-body">
821
+ <p>The lean-deps rule from <code>CONTRIBUTING.md</code> stands. v3 adds source files but no external packages. <code>@bsv/wallet-toolbox</code>, <code>@bsv/wallet-toolbox-client</code>, and <code>@bsv/wallet-toolbox-mobile</code> bundles are within a few KB of their v2.1.25 equivalents.</p>
822
+ </div>
823
+ </details>
824
+
825
+ <details class="panel">
826
+ <summary>
827
+ <span class="sm-title">Where do I file issues during the rollout?</span>
828
+ <span class="sm-blurb">github.com/bsv-blockchain/ts-stack — tag <code>wallet-toolbox</code>, prefix <code>[v3]</code>.</span>
829
+ <span class="chev">›</span>
830
+ </summary>
831
+ <div class="panel-body">
832
+ <p>The rollout channel monitors the v3-prefixed issue queue daily. P1/P2 reports during a soak window route to SRE on-call automatically.</p>
833
+ </div>
834
+ </details>
835
+ </div>
836
+ </section>
837
+
838
+ <footer>
839
+ <div class="container">
840
+ <div class="row">
841
+ <div>@bsv/wallet-toolbox · v3 upgrade guide</div>
842
+ <div>Spec: <code>PROD_REQ_V7_TS.md</code> · Runbook: <code>docs/CUTOVER_RUNBOOK.md</code> · Plan: <code>docs/ROLLOUT_PLAN.md</code></div>
843
+ </div>
844
+ </div>
845
+ </footer>
846
+
847
+ <script>
848
+ // FSM transition table — mirrors src/storage/schema/processingFsm.ts
849
+ const FSM = {
850
+ queued: { kind: 'transient', spendable: false, to: ['sending','sent','nosend','frozen','nonfinal','invalid','doubleSpend'] },
851
+ sending: { kind: 'transient', spendable: false, to: ['sent','seen','seen_multi','invalid','doubleSpend','frozen','queued'] },
852
+ sent: { kind: 'normal', spendable: true, to: ['seen','seen_multi','unconfirmed','confirmed','invalid','doubleSpend','frozen','sending'] },
853
+ seen: { kind: 'normal', spendable: true, to: ['seen_multi','unconfirmed','confirmed','invalid','doubleSpend','reorging','frozen','sending'] },
854
+ seen_multi: { kind: 'normal', spendable: true, to: ['unconfirmed','confirmed','invalid','doubleSpend','reorging','frozen','sending'] },
855
+ unconfirmed: { kind: 'normal', spendable: true, to: ['confirmed','invalid','reorging','frozen','seen','seen_multi','doubleSpend','sending'] },
856
+ confirmed: { kind: 'terminal-ok', spendable: true, to: ['reorging'] },
857
+ reorging: { kind: 'transient', spendable: false, to: ['confirmed','seen','seen_multi','unconfirmed','frozen'] },
858
+ invalid: { kind: 'terminal-bad', spendable: false, to: ['unfail'] },
859
+ doubleSpend: { kind: 'terminal-bad', spendable: false, to: ['unfail'] },
860
+ unfail: { kind: 'transient', spendable: false, to: ['queued','sending','sent','seen','seen_multi','unconfirmed','confirmed','invalid','doubleSpend'] },
861
+ frozen: { kind: 'transient', spendable: false, to: ['queued','sending','sent','seen','seen_multi','unconfirmed','invalid','doubleSpend'] },
862
+ nosend: { kind: 'transient', spendable: false, to: ['queued','sending','sent','seen','invalid','doubleSpend','frozen'] },
863
+ nonfinal: { kind: 'transient', spendable: false, to: ['queued','sending','sent','invalid','doubleSpend','frozen'] }
864
+ };
865
+
866
+ const ORDER = ['queued','sending','sent','seen','seen_multi','unconfirmed','confirmed','reorging','invalid','doubleSpend','unfail','frozen','nosend','nonfinal'];
867
+
868
+ function renderStates(active) {
869
+ const host = document.getElementById('fsm-states');
870
+ if (!host) return;
871
+ host.innerHTML = '';
872
+ ORDER.forEach(name => {
873
+ const s = FSM[name];
874
+ const cls = ['state'];
875
+ if (s.kind === 'terminal-ok') cls.push('terminal-ok');
876
+ if (s.kind === 'terminal-bad') cls.push('terminal-bad');
877
+ if (s.kind === 'transient') cls.push('transient');
878
+ if (s.spendable) cls.push('spendable');
879
+ if (name === active) cls.push('active');
880
+ const el = document.createElement('div');
881
+ el.className = cls.join(' ');
882
+ el.textContent = name;
883
+ el.onclick = () => showState(name);
884
+ host.appendChild(el);
885
+ });
886
+ }
887
+
888
+ function showState(name) {
889
+ const s = FSM[name];
890
+ renderStates(name);
891
+ const out = document.getElementById('fsm-out');
892
+ const tos = s.to.length ? s.to.map(t => `<span style="color:var(--accent-2)">${t}</span>`).join(', ') : '<i>none</i>';
893
+ const spendable = s.spendable ? '<span style="color:var(--accent-2)">spendable</span>' : '<span style="color:var(--fg-3)">not spendable</span>';
894
+ out.innerHTML = `<b style="color:var(--fg)">${name}</b> <span style="color:var(--fg-3)">(${s.kind}, ${spendable})</span><br><span class="arrow">→</span> ${tos}`;
895
+ }
896
+
897
+ renderStates(null);
898
+
899
+ // Open detail panel + scroll when bento tile clicked — already wired inline.
900
+ // Smooth-scroll nav anchors
901
+ document.querySelectorAll('nav.top a[href^="#"]').forEach(a => {
902
+ a.addEventListener('click', e => {
903
+ const id = a.getAttribute('href').slice(1);
904
+ const el = document.getElementById(id);
905
+ if (el) { e.preventDefault(); el.scrollIntoView({ behavior: 'smooth' }); }
906
+ });
907
+ });
908
+ </script>
909
+
910
+ </body>
911
+ </html>