@bsv/wallet-toolbox 1.6.4 → 1.6.6

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 (264) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/docs/client.md +402 -313
  3. package/docs/monitor.md +4 -4
  4. package/docs/services.md +118 -133
  5. package/docs/wallet.md +402 -313
  6. package/mobile/out/src/monitor/Monitor.d.ts +3 -3
  7. package/mobile/out/src/monitor/Monitor.d.ts.map +1 -1
  8. package/mobile/out/src/monitor/Monitor.js.map +1 -1
  9. package/mobile/out/src/sdk/WalletServices.interfaces.d.ts +88 -2
  10. package/mobile/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  11. package/mobile/out/src/services/Services.js +1 -1
  12. package/mobile/out/src/services/Services.js.map +1 -1
  13. package/mobile/out/src/services/chaintracker/ChaintracksChainTracker.d.ts +3 -3
  14. package/mobile/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -1
  15. package/mobile/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
  16. package/mobile/out/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.d.ts +1 -6
  17. package/mobile/out/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.d.ts.map +1 -1
  18. package/mobile/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts +1 -1
  19. package/mobile/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts.map +1 -1
  20. package/mobile/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts +2 -2
  21. package/mobile/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts.map +1 -1
  22. package/mobile/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts +33 -16
  23. package/mobile/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts.map +1 -1
  24. package/mobile/out/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.d.ts +1 -1
  25. package/mobile/out/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.d.ts.map +1 -1
  26. package/mobile/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts +1 -1
  27. package/mobile/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
  28. package/mobile/out/src/services/chaintracker/chaintracks/Chaintracks.js +15 -11
  29. package/mobile/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
  30. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts +2 -2
  31. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts.map +1 -1
  32. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js +4 -4
  33. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js.map +1 -1
  34. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js +1 -1
  35. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js.map +1 -1
  36. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.d.ts.map +1 -1
  37. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js +2 -3
  38. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js.map +1 -1
  39. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts +2 -1
  40. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts.map +1 -1
  41. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js +3 -1
  42. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js.map +1 -1
  43. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js +1 -1
  44. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js.map +1 -1
  45. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts +2 -2
  46. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
  47. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +4 -5
  48. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
  49. package/mobile/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts +2 -1
  50. package/mobile/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts.map +1 -1
  51. package/mobile/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js +2 -1
  52. package/mobile/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js.map +1 -1
  53. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts +7 -7
  54. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts.map +1 -1
  55. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js +42 -5
  56. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js.map +1 -1
  57. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts +91 -0
  58. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts.map +1 -0
  59. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js +448 -0
  60. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js.map +1 -0
  61. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts +3 -7
  62. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
  63. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +63 -130
  64. package/mobile/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
  65. package/mobile/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts +12 -0
  66. package/mobile/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts.map +1 -0
  67. package/mobile/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js +83 -0
  68. package/mobile/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js.map +1 -0
  69. package/mobile/out/src/services/chaintracker/chaintracks/index.client.d.ts +2 -0
  70. package/mobile/out/src/services/chaintracker/chaintracks/index.client.d.ts.map +1 -1
  71. package/mobile/out/src/services/chaintracker/chaintracks/index.client.js +2 -0
  72. package/mobile/out/src/services/chaintracker/chaintracks/index.client.js.map +1 -1
  73. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +2 -1
  74. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
  75. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +19 -7
  76. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
  77. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts +1 -1
  78. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts.map +1 -1
  79. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js.map +1 -1
  80. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts +2 -2
  81. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts.map +1 -1
  82. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js +2 -2
  83. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js.map +1 -1
  84. package/mobile/out/src/services/chaintracker/chaintracks/util/HeightRange.d.ts.map +1 -1
  85. package/mobile/out/src/services/chaintracker/chaintracks/util/HeightRange.js +4 -1
  86. package/mobile/out/src/services/chaintracker/chaintracks/util/HeightRange.js.map +1 -1
  87. package/mobile/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.d.ts.map +1 -1
  88. package/mobile/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js +26 -11
  89. package/mobile/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js.map +1 -1
  90. package/mobile/out/src/services/createDefaultWalletServicesOptions.d.ts +2 -1
  91. package/mobile/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
  92. package/mobile/out/src/services/createDefaultWalletServicesOptions.js +19 -17
  93. package/mobile/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  94. package/mobile/package-lock.json +2 -2
  95. package/mobile/package.json +1 -1
  96. package/out/src/monitor/Monitor.d.ts +3 -3
  97. package/out/src/monitor/Monitor.d.ts.map +1 -1
  98. package/out/src/monitor/Monitor.js.map +1 -1
  99. package/out/src/sdk/WalletServices.interfaces.d.ts +88 -2
  100. package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  101. package/out/src/services/Services.js +1 -1
  102. package/out/src/services/Services.js.map +1 -1
  103. package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts +3 -3
  104. package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -1
  105. package/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
  106. package/out/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.d.ts +1 -6
  107. package/out/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.d.ts.map +1 -1
  108. package/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts +1 -1
  109. package/out/src/services/chaintracker/chaintracks/Api/BulkStorageApi.d.ts.map +1 -1
  110. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts +2 -2
  111. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts.map +1 -1
  112. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts +33 -16
  113. package/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts.map +1 -1
  114. package/out/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.d.ts +1 -1
  115. package/out/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.d.ts.map +1 -1
  116. package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts +1 -1
  117. package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
  118. package/out/src/services/chaintracker/chaintracks/Chaintracks.js +15 -11
  119. package/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
  120. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts +2 -2
  121. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts.map +1 -1
  122. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js +4 -4
  123. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js.map +1 -1
  124. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js +1 -1
  125. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js.map +1 -1
  126. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.d.ts.map +1 -1
  127. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js +2 -3
  128. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js.map +1 -1
  129. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts.map +1 -1
  130. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js +1 -1
  131. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js.map +1 -1
  132. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts +2 -1
  133. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts.map +1 -1
  134. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js +3 -1
  135. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js.map +1 -1
  136. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js +1 -1
  137. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js.map +1 -1
  138. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts.map +1 -1
  139. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js +3 -3
  140. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js.map +1 -1
  141. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts +2 -2
  142. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
  143. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +4 -5
  144. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
  145. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.js +1 -1
  146. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.js.map +1 -1
  147. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.js +1 -1
  148. package/out/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.js.map +1 -1
  149. package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts +2 -1
  150. package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts.map +1 -1
  151. package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js +2 -1
  152. package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js.map +1 -1
  153. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.d.ts.map +1 -1
  154. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js +4 -3
  155. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js.map +1 -1
  156. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts +7 -7
  157. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts.map +1 -1
  158. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js +42 -5
  159. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js.map +1 -1
  160. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts +91 -0
  161. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts.map +1 -0
  162. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js +448 -0
  163. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js.map +1 -0
  164. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts +3 -29
  165. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts.map +1 -1
  166. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js +61 -137
  167. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js.map +1 -1
  168. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts +3 -7
  169. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
  170. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +63 -130
  171. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
  172. package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.d.ts +2 -0
  173. package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.d.ts.map +1 -0
  174. package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.js +81 -0
  175. package/out/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.js.map +1 -0
  176. package/out/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.js +12 -1
  177. package/out/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.js.map +1 -1
  178. package/out/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.js +1 -1
  179. package/out/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.js.map +1 -1
  180. package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.d.ts +2 -0
  181. package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.d.ts.map +1 -0
  182. package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.js +50 -0
  183. package/out/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.js.map +1 -0
  184. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts +12 -0
  185. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts.map +1 -0
  186. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js +83 -0
  187. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js.map +1 -0
  188. package/out/src/services/chaintracker/chaintracks/index.client.d.ts +2 -0
  189. package/out/src/services/chaintracker/chaintracks/index.client.d.ts.map +1 -1
  190. package/out/src/services/chaintracker/chaintracks/index.client.js +2 -0
  191. package/out/src/services/chaintracker/chaintracks/index.client.js.map +1 -1
  192. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +2 -1
  193. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
  194. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +19 -7
  195. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
  196. package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts +1 -1
  197. package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts.map +1 -1
  198. package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js.map +1 -1
  199. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts +2 -2
  200. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts.map +1 -1
  201. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js +2 -2
  202. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js.map +1 -1
  203. package/out/src/services/chaintracker/chaintracks/util/HeightRange.d.ts.map +1 -1
  204. package/out/src/services/chaintracker/chaintracks/util/HeightRange.js +4 -1
  205. package/out/src/services/chaintracker/chaintracks/util/HeightRange.js.map +1 -1
  206. package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.d.ts.map +1 -1
  207. package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js +26 -11
  208. package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js.map +1 -1
  209. package/out/src/services/createDefaultWalletServicesOptions.d.ts +2 -1
  210. package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
  211. package/out/src/services/createDefaultWalletServicesOptions.js +19 -17
  212. package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  213. package/out/src/services/providers/__tests/exchangeRates.test.d.ts +2 -0
  214. package/out/src/services/providers/__tests/exchangeRates.test.d.ts.map +1 -0
  215. package/out/src/services/providers/__tests/exchangeRates.test.js +19 -0
  216. package/out/src/services/providers/__tests/exchangeRates.test.js.map +1 -0
  217. package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
  218. package/out/src/storage/remoting/StorageServer.js +4 -0
  219. package/out/src/storage/remoting/StorageServer.js.map +1 -1
  220. package/out/test/Wallet/support/operations.man.test.js +1 -1
  221. package/out/test/Wallet/support/operations.man.test.js.map +1 -1
  222. package/out/tsconfig.all.tsbuildinfo +1 -1
  223. package/package.json +1 -1
  224. package/src/monitor/Monitor.ts +3 -3
  225. package/src/sdk/WalletServices.interfaces.ts +88 -1
  226. package/src/services/Services.ts +1 -1
  227. package/src/services/chaintracker/ChaintracksChainTracker.ts +3 -2
  228. package/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.ts +1 -7
  229. package/src/services/chaintracker/chaintracks/Api/BulkStorageApi.ts +1 -1
  230. package/src/services/chaintracker/chaintracks/Api/ChaintracksApi.ts +2 -2
  231. package/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.ts +39 -14
  232. package/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.ts +1 -1
  233. package/src/services/chaintracker/chaintracks/Chaintracks.ts +16 -11
  234. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.ts +4 -5
  235. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.ts +1 -1
  236. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.ts +2 -3
  237. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.ts +1 -0
  238. package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.ts +3 -1
  239. package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.ts +1 -1
  240. package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.ts +10 -3
  241. package/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.ts +6 -4
  242. package/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.ts +1 -1
  243. package/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.ts +1 -1
  244. package/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.ts +2 -1
  245. package/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.ts +4 -3
  246. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.ts +60 -11
  247. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.ts +557 -0
  248. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.ts +80 -179
  249. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.ts +63 -133
  250. package/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.ts +102 -0
  251. package/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.ts +14 -1
  252. package/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.ts +1 -1
  253. package/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.ts +61 -0
  254. package/src/services/chaintracker/chaintracks/createIdbChaintracks.ts +111 -0
  255. package/src/services/chaintracker/chaintracks/index.client.ts +2 -0
  256. package/src/services/chaintracker/chaintracks/util/BulkFileDataManager.ts +20 -11
  257. package/src/services/chaintracker/chaintracks/util/BulkFilesReader.ts +1 -1
  258. package/src/services/chaintracker/chaintracks/util/BulkHeaderFile.ts +3 -3
  259. package/src/services/chaintracker/chaintracks/util/HeightRange.ts +4 -1
  260. package/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.ts +26 -11
  261. package/src/services/createDefaultWalletServicesOptions.ts +25 -18
  262. package/src/services/providers/__tests/exchangeRates.test.ts +18 -0
  263. package/src/storage/remoting/StorageServer.ts +5 -0
  264. package/test/Wallet/support/operations.man.test.ts +1 -1
@@ -4,7 +4,13 @@ import { InsertHeaderResult, ChaintracksStorageBaseOptions } from '../Api/Chaint
4
4
  import { ChaintracksStorageBase } from './ChaintracksStorageBase'
5
5
  import { LiveBlockHeader } from '../Api/BlockHeaderApi'
6
6
  import { BlockHeader } from '../../../../sdk/WalletServices.interfaces'
7
- import { addWork, convertBitsToWork, isMoreWork, serializeBaseBlockHeader } from '../util/blockHeaderUtilities'
7
+ import {
8
+ addWork,
9
+ convertBitsToWork,
10
+ isMoreWork,
11
+ serializeBaseBlockHeader,
12
+ serializeBaseBlockHeaders
13
+ } from '../util/blockHeaderUtilities'
8
14
  import { verifyOneOrNone } from '../../../../utility/utilityHelpers'
9
15
  import { DBType } from '../../../../storage/StorageReader'
10
16
  import { BulkHeaderFileInfo } from '../util/BulkHeaderFile'
@@ -15,6 +21,8 @@ import { ChaintracksStorageBulkFileApi } from '../Api/ChaintracksStorageApi'
15
21
  import { Chain } from '../../../../sdk/types'
16
22
  import { WERR_INVALID_OPERATION, WERR_INVALID_PARAMETER } from '../../../../sdk/WERR_errors'
17
23
  import { determineDBType } from '../../../../storage/schema/KnexMigrations'
24
+ import { BulkFileDataReader } from '../index.client'
25
+ import { asArray } from '../../../../utility/utilityHelpers.noBuffer'
18
26
 
19
27
  export interface ChaintracksStorageKnexOptions extends ChaintracksStorageBaseOptions {
20
28
  /**
@@ -23,24 +31,6 @@ export interface ChaintracksStorageKnexOptions extends ChaintracksStorageBaseOpt
23
31
  * Knex.js database interface initialized with valid connection configuration.
24
32
  */
25
33
  knex: Knex | undefined
26
- /**
27
- * Required.
28
- *
29
- * The table name for live block headers.
30
- */
31
- headerTableName: string
32
- /**
33
- * Required.
34
- *
35
- * The table name for the block header hash to height index.
36
- */
37
- bulkBlockHashTableName: string
38
- /**
39
- * Required.
40
- *
41
- * The table name for the block header merkleRoot to height index.
42
- */
43
- bulkMerkleRootTableName: string
44
34
  }
45
35
 
46
36
  /**
@@ -51,28 +41,20 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
51
41
  static createStorageKnexOptions(chain: Chain, knex?: Knex): ChaintracksStorageKnexOptions {
52
42
  const options: ChaintracksStorageKnexOptions = {
53
43
  ...ChaintracksStorageBase.createStorageBaseOptions(chain),
54
- knex,
55
- headerTableName: `live_headers`,
56
- bulkBlockHashTableName: `bulk_hash`,
57
- bulkMerkleRootTableName: `bulk_merkle`
44
+ knex
58
45
  }
59
46
  return options
60
47
  }
61
48
 
62
49
  knex: Knex
63
50
  _dbtype?: DBType
64
- headerTableName: string
65
51
  bulkFilesTableName: string = 'bulk_files'
66
- bulkBlockHashTableName: string
67
- bulkMerkleRootTableName: string
52
+ headerTableName: string = `live_headers`
68
53
 
69
54
  constructor(options: ChaintracksStorageKnexOptions) {
70
55
  super(options)
71
56
  if (!options.knex) throw new Error('The knex options property is required.')
72
57
  this.knex = options.knex
73
- this.headerTableName = options.headerTableName
74
- this.bulkBlockHashTableName = options.bulkBlockHashTableName
75
- this.bulkMerkleRootTableName = options.bulkMerkleRootTableName
76
58
  }
77
59
 
78
60
  get dbtype(): DBType {
@@ -98,7 +80,7 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
98
80
  this._dbtype = await determineDBType(this.knex)
99
81
  await super.makeAvailable()
100
82
  // Connect the bulk data file manager to the table provided by this storage class.
101
- await this.bulkManager.setStorage(this)
83
+ await this.bulkManager.setStorage(this, this.log)
102
84
  }
103
85
  }
104
86
 
@@ -133,26 +115,26 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
133
115
  await this.knex.destroy()
134
116
  }
135
117
 
136
- async findLiveHeightRange(): Promise<{ minHeight: number; maxHeight: number }> {
137
- const maxHeight = (await this.findChainTipHeader()).height
138
-
139
- const [resultrow] = await this.knex(this.headerTableName).min('height as minHeight')
140
- return { minHeight: resultrow.minHeight, maxHeight }
118
+ override async findLiveHeightRange(): Promise<HeightRange> {
119
+ return new HeightRange(
120
+ ((await this.knex(this.headerTableName).where({ isActive: true }).min('height as v')).pop()?.v as number) || 0,
121
+ ((await this.knex(this.headerTableName).where({ isActive: true }).max('height as v')).pop()?.v as number) || -1
122
+ )
141
123
  }
142
124
 
143
- async findLiveHeaderForHeaderId(headerId: number): Promise<LiveBlockHeader> {
125
+ override async findLiveHeaderForHeaderId(headerId: number): Promise<LiveBlockHeader> {
144
126
  const [header] = await this.knex<LiveBlockHeader>(this.headerTableName).where({ headerId: headerId })
145
127
  if (!header) throw new Error(`HeaderId ${headerId} not found in live header database.`)
146
128
  return header
147
129
  }
148
130
 
149
- async findChainTipHeader(): Promise<LiveBlockHeader> {
131
+ override async findChainTipHeader(): Promise<LiveBlockHeader> {
150
132
  const [tip] = await this.knex<LiveBlockHeader>(this.headerTableName).where({ isActive: true, isChainTip: true })
151
133
  if (!tip) throw new Error('Database contains no active chain tip header.')
152
134
  return tip
153
135
  }
154
136
 
155
- async findChainTipHeaderOrUndefined(): Promise<LiveBlockHeader | undefined> {
137
+ override async findChainTipHeaderOrUndefined(): Promise<LiveBlockHeader | undefined> {
156
138
  const [tip] = await this.knex<LiveBlockHeader>(this.headerTableName).where({ isActive: true, isChainTip: true })
157
139
  return tip
158
140
  }
@@ -240,17 +222,19 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
240
222
  async insertHeader(header: BlockHeader): Promise<InsertHeaderResult> {
241
223
  const table = this.headerTableName
242
224
 
243
- let ok = true
244
- let dupe = false
245
- let noPrev = false
246
- let badPrev = false
247
- let noActiveAncestor = false
248
- let noTip = false
249
- let setActiveChainTip = false
250
- let reorgDepth = 0
251
- let priorTip: LiveBlockHeader | undefined
252
-
253
- ok = await this.knex.transaction(async trx => {
225
+ const r: InsertHeaderResult = {
226
+ added: false,
227
+ dupe: false,
228
+ noPrev: false,
229
+ badPrev: false,
230
+ noActiveAncestor: false,
231
+ isActiveTip: false,
232
+ reorgDepth: 0,
233
+ priorTip: undefined,
234
+ noTip: false
235
+ }
236
+
237
+ await this.knex.transaction(async trx => {
254
238
  /*
255
239
  We ensure the header does not already exist. This needs to be done
256
240
  inside the transaction to avoid inserting multiple headers. If an
@@ -258,8 +242,8 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
258
242
  */
259
243
  const [dupeCheck] = await trx(table).where({ hash: header.hash }).count()
260
244
  if (dupeCheck['count(*)']) {
261
- dupe = true
262
- return false
245
+ r.dupe = true
246
+ return
263
247
  }
264
248
 
265
249
  // This is the existing previous header to the one being inserted...
@@ -267,61 +251,69 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
267
251
 
268
252
  if (!oneBack) {
269
253
  // Check if this is first live header...
270
- const r = await trx(table).count()
271
- const count = Number(r[0]['count(*)'])
254
+ const cr = await trx(table).count()
255
+ const count = Number(cr[0]['count(*)'])
272
256
  if (count === 0) {
257
+ // If this is the first live header, the last bulk header (if there is one) is the previous header.
273
258
  const lbf = await this.bulkManager.getLastFile()
274
259
  if (!lbf) throw new WERR_INVALID_OPERATION('bulk headers must exist before first live header can be added')
275
260
  if (header.previousHash === lbf.lastHash && header.height === lbf.firstHeight + lbf.count) {
261
+ // Valid first live header. Add it.
276
262
  const chainWork = addWork(lbf.lastChainWork, convertBitsToWork(header.bits))
263
+ r.isActiveTip = true
277
264
  const newHeader = {
278
265
  ...header,
279
266
  previousHeaderId: null,
280
267
  chainWork,
281
- isChainTip: true,
282
- isActive: true
268
+ isChainTip: r.isActiveTip,
269
+ isActive: r.isActiveTip
283
270
  }
271
+ // Success
284
272
  await trx<LiveBlockHeader>(table).insert(newHeader)
285
- return true
273
+ r.added = true
274
+ return
286
275
  }
287
276
  }
288
- // Never add a header that doesn't extend existing headers.
289
- // Or one that's confused about its height.
290
- noPrev = true
291
- return false
277
+ // Failure without a oneBack
278
+ // First live header that does not follow last bulk header or
279
+ // Not the first live header and live headers doesn't include a previousHash header.
280
+ r.noPrev = true
281
+ return
292
282
  }
283
+
284
+ // This header's previousHash matches an existing live header's hash, if height isn't +1, reject it.
293
285
  if (oneBack.height + 1 != header.height) {
294
- badPrev = true
295
- return false
286
+ r.badPrev = true
287
+ return
296
288
  }
297
289
 
298
- const chainWork = addWork(oneBack.chainWork, convertBitsToWork(header.bits))
299
-
300
- let tip: LiveBlockHeader | undefined
301
290
  if (oneBack.isActive && oneBack.isChainTip) {
302
- tip = oneBack
291
+ r.priorTip = oneBack
303
292
  } else {
304
- ;[tip] = await trx<LiveBlockHeader>(table).where({ isActive: true, isChainTip: true })
293
+ ;[r.priorTip] = await trx<LiveBlockHeader>(table).where({ isActive: true, isChainTip: true })
305
294
  }
306
295
 
307
- if (!tip) {
308
- noTip = true
309
- return false
296
+ if (!r.priorTip) {
297
+ // No active chain tip found. This is a logic error in state of live headers.
298
+ r.noTip = true
299
+ return
310
300
  }
311
301
 
312
- priorTip = tip
302
+ // We have an acceptable new live header...and live headers has an active chain tip.
313
303
 
314
- setActiveChainTip = isMoreWork(chainWork, tip.chainWork)
304
+ const chainWork = addWork(oneBack.chainWork, convertBitsToWork(header.bits))
305
+
306
+ r.isActiveTip = isMoreWork(chainWork, r.priorTip.chainWork)
315
307
 
316
308
  const newHeader = {
317
309
  ...header,
318
310
  previousHeaderId: oneBack.headerId,
319
311
  chainWork,
320
- isChainTip: setActiveChainTip,
321
- isActive: setActiveChainTip
312
+ isChainTip: r.isActiveTip,
313
+ isActive: r.isActiveTip
322
314
  }
323
315
 
324
- if (setActiveChainTip) {
316
+ if (r.isActiveTip) {
325
317
  // Find newHeader's first active ancestor
326
318
  let activeAncestor = oneBack
327
319
  while (!activeAncestor.isActive) {
@@ -329,15 +321,16 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
329
321
  headerId: activeAncestor.previousHeaderId || -1
330
322
  })
331
323
  if (!previousHeader) {
332
- noActiveAncestor = true
333
- return false
324
+ // live headers doesn't contain an active ancestor. This is a live header's logic error.
325
+ r.noActiveAncestor = true
326
+ return
334
327
  }
335
328
  activeAncestor = previousHeader
336
329
  }
337
330
 
338
331
  if (!(oneBack.isActive && oneBack.isChainTip))
339
332
  // If this is the new active chain tip, and oneBack was not, this is a reorg.
340
- reorgDepth = Math.min(priorTip.height, header.height) - activeAncestor.height
333
+ r.reorgDepth = Math.min(r.priorTip.height, header.height) - activeAncestor.height
341
334
 
342
335
  if (activeAncestor.headerId !== oneBack.headerId) {
343
336
  // Deactivate headers from the current active chain tip up to but excluding our activeAncestor:
@@ -367,27 +360,17 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
367
360
  }
368
361
 
369
362
  if (oneBack.isChainTip) {
363
+ // Deactivate the old chain tip
370
364
  await trx<LiveBlockHeader>(table).where({ headerId: oneBack.headerId }).update({ isChainTip: false })
371
365
  }
372
366
 
373
367
  await trx<LiveBlockHeader>(table).insert(newHeader)
374
-
375
- return true
368
+ r.added = true
376
369
  })
377
370
 
378
- if (ok && setActiveChainTip) this.pruneLiveBlockHeaders(header.height)
379
-
380
- return {
381
- added: ok,
382
- dupe,
383
- isActiveTip: setActiveChainTip,
384
- reorgDepth,
385
- priorTip,
386
- noPrev,
387
- badPrev,
388
- noActiveAncestor,
389
- noTip
390
- }
371
+ if (r.added && r.isActiveTip) this.pruneLiveBlockHeaders(header.height)
372
+
373
+ return r
391
374
  }
392
375
 
393
376
  async findMaxHeaderId(): Promise<number> {
@@ -396,52 +379,6 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
396
379
  //return resultrow?.maxHeaderId || 0
397
380
  }
398
381
 
399
- async getLiveHeightRange(): Promise<HeightRange> {
400
- return new HeightRange(
401
- ((await this.knex(this.headerTableName).where({ isActive: true }).min('height as v')).pop()?.v as number) || 0,
402
- ((await this.knex(this.headerTableName).where({ isActive: true }).max('height as v')).pop()?.v as number) || -1
403
- )
404
- }
405
-
406
- async appendToIndexTable(table: string, index: string, buffers: string[], minHeight: number): Promise<void> {
407
- const newRows: { height: number }[] = []
408
- for (let i = 0; i < buffers.length; i++) {
409
- const row = { height: minHeight + i }
410
- row[index] = buffers[i]
411
- newRows.push(row)
412
- }
413
- try {
414
- await this.knex.batchInsert(table, newRows, newRows.length)
415
- return
416
- } catch (err: unknown) {
417
- if ((err as { code: string })?.code !== 'ER_DUP_ENTRY') throw err
418
- }
419
-
420
- // If the batchInsert failed, we may be recovering from an earlier failure. Try inserting one at a time and ignore duplicate hash values.
421
- for (let i = 0; i < newRows.length; i++) {
422
- await this.knex(this.bulkBlockHashTableName).insert(newRows[i]).onConflict(index).ignore()
423
- }
424
- }
425
-
426
- async appendToIndexTableChunked(
427
- table: string,
428
- index: string,
429
- buffers: string[],
430
- minHeight: number,
431
- chunkSize: number
432
- ): Promise<void> {
433
- let remaining = buffers.length
434
- while (remaining > 0) {
435
- const size = Math.min(remaining, chunkSize)
436
- const chunk = buffers.slice(0, size)
437
- buffers = buffers.slice(size)
438
- await this.appendToIndexTable(table, index, chunk, minHeight)
439
- console.log(`Appended ${size} index records to ${index} table`)
440
- remaining -= size
441
- minHeight += size
442
- }
443
- }
444
-
445
382
  override async deleteLiveBlockHeaders(): Promise<void> {
446
383
  const table = this.headerTableName
447
384
  await this.knex.transaction(async trx => {
@@ -480,49 +417,13 @@ export class ChaintracksStorageKnex extends ChaintracksStorageBase implements Ch
480
417
  })
481
418
  }
482
419
 
483
- async getHeaders(height: number, count: number): Promise<number[]> {
484
- if (count <= 0) return []
485
-
420
+ async getLiveHeaders(range: HeightRange): Promise<LiveBlockHeader[]> {
486
421
  const headers = await this.knex<LiveBlockHeader>(this.headerTableName)
487
422
  .where({ isActive: true })
488
- .andWhere('height', '>=', height)
489
- .andWhere('height', '<', height + count)
490
- .limit(count)
423
+ .andWhere('height', '>=', range.minHeight)
424
+ .andWhere('height', '<=', range.maxHeight)
491
425
  .orderBy('height')
492
-
493
- const bufs: Uint8Array[] = []
494
-
495
- if (headers.length === 0 || headers[0].height > height) {
496
- // Some or all headers requested are in bulk storage...
497
- // There may be some overlap between bulk and live, headers are only
498
- // deleted from live after they have been added to bulk.
499
- // Only get what is needed.
500
- const bulkCount = headers.length === 0 ? count : headers[0].height - height
501
- const range = new HeightRange(height, height + bulkCount - 1)
502
- const reader = await BulkFilesReaderStorage.fromStorage(this, new ChaintracksFetch(), range, bulkCount * 80)
503
- const bulkData = await reader.read()
504
- if (bulkData) bufs.push(bulkData)
505
- }
506
-
507
- if (headers.length > 0) {
508
- // Some or all headers requested were in live storage...
509
- let buf = new Uint8Array(headers.length * 80)
510
- for (let i = 0; i < headers.length; i++) {
511
- const h = headers[i]
512
- const ha = serializeBaseBlockHeader(h)
513
- buf.set(ha, i * 80)
514
- }
515
- bufs.push(buf)
516
- }
517
-
518
- const r = [bufs.length * 80]
519
- let i = 0
520
- for (const bh of bufs) {
521
- for (const b of bh) {
522
- r[i++] = b
523
- }
524
- }
525
- return r
426
+ return headers
526
427
  }
527
428
 
528
429
  concatSerializedHeaders(bufs: number[][]): number[] {