@bsv/wallet-toolbox 2.4.3 → 2.4.20

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 (675) hide show
  1. package/CHANGELOG.md +81 -1
  2. package/LICENSE.txt +58 -0
  3. package/README.md +98 -36
  4. package/docs/README.md +3 -1
  5. package/docs/action-batch-planning.md +220 -0
  6. package/docs/authentication-observability.md +94 -0
  7. package/docs/client.md +1125 -2776
  8. package/docs/monitor.md +29 -111
  9. package/docs/services.md +296 -602
  10. package/docs/setup.md +48 -28
  11. package/docs/storage.md +329 -1692
  12. package/docs/wallet.md +9718 -4890
  13. package/out/src/CWIStyleWalletManager.d.ts +62 -6
  14. package/out/src/CWIStyleWalletManager.d.ts.map +1 -1
  15. package/out/src/CWIStyleWalletManager.js +584 -181
  16. package/out/src/CWIStyleWalletManager.js.map +1 -1
  17. package/out/src/Setup.d.ts +7 -0
  18. package/out/src/Setup.d.ts.map +1 -1
  19. package/out/src/Setup.js +10 -11
  20. package/out/src/Setup.js.map +1 -1
  21. package/out/src/SetupClient.d.ts +2 -0
  22. package/out/src/SetupClient.d.ts.map +1 -1
  23. package/out/src/SetupClient.js +8 -9
  24. package/out/src/SetupClient.js.map +1 -1
  25. package/out/src/SetupWallet.d.ts +6 -0
  26. package/out/src/SetupWallet.d.ts.map +1 -1
  27. package/out/src/ShamirWalletManager.d.ts.map +1 -1
  28. package/out/src/ShamirWalletManager.js.map +1 -1
  29. package/out/src/SimpleWalletManager.d.ts.map +1 -1
  30. package/out/src/SimpleWalletManager.js +2 -5
  31. package/out/src/SimpleWalletManager.js.map +1 -1
  32. package/out/src/Wallet.d.ts +36 -10
  33. package/out/src/Wallet.d.ts.map +1 -1
  34. package/out/src/Wallet.js +167 -132
  35. package/out/src/Wallet.js.map +1 -1
  36. package/out/src/WalletAuthenticationManager.d.ts +30 -6
  37. package/out/src/WalletAuthenticationManager.d.ts.map +1 -1
  38. package/out/src/WalletAuthenticationManager.js +215 -34
  39. package/out/src/WalletAuthenticationManager.js.map +1 -1
  40. package/out/src/WalletLogger.d.ts.map +1 -1
  41. package/out/src/WalletLogger.js +33 -30
  42. package/out/src/WalletLogger.js.map +1 -1
  43. package/out/src/WalletPermissionsManager.d.ts +22 -1
  44. package/out/src/WalletPermissionsManager.d.ts.map +1 -1
  45. package/out/src/WalletPermissionsManager.js +392 -267
  46. package/out/src/WalletPermissionsManager.js.map +1 -1
  47. package/out/src/WalletSettingsManager.d.ts.map +1 -1
  48. package/out/src/WalletSettingsManager.js.map +1 -1
  49. package/out/src/entropy/EntropyCollector.d.ts.map +1 -1
  50. package/out/src/entropy/EntropyCollector.js +6 -8
  51. package/out/src/entropy/EntropyCollector.js.map +1 -1
  52. package/out/src/fundWalletP2PKH.js.map +1 -1
  53. package/out/src/index.all.d.ts +1 -0
  54. package/out/src/index.all.d.ts.map +1 -1
  55. package/out/src/index.all.js +1 -0
  56. package/out/src/index.all.js.map +1 -1
  57. package/out/src/index.client.d.ts +2 -0
  58. package/out/src/index.client.d.ts.map +1 -1
  59. package/out/src/index.client.js +2 -0
  60. package/out/src/index.client.js.map +1 -1
  61. package/out/src/index.mobile.d.ts +2 -0
  62. package/out/src/index.mobile.d.ts.map +1 -1
  63. package/out/src/index.mobile.js +2 -0
  64. package/out/src/index.mobile.js.map +1 -1
  65. package/out/src/mockchain/MockChainMigrations.d.ts.map +1 -1
  66. package/out/src/mockchain/MockChainMigrations.js.map +1 -1
  67. package/out/src/mockchain/MockChainStorage.d.ts.map +1 -1
  68. package/out/src/mockchain/MockChainStorage.js.map +1 -1
  69. package/out/src/mockchain/MockChainTracker.d.ts.map +1 -1
  70. package/out/src/mockchain/MockChainTracker.js.map +1 -1
  71. package/out/src/mockchain/MockMiner.d.ts.map +1 -1
  72. package/out/src/mockchain/MockMiner.js.map +1 -1
  73. package/out/src/mockchain/MockServices.d.ts +4 -0
  74. package/out/src/mockchain/MockServices.d.ts.map +1 -1
  75. package/out/src/mockchain/MockServices.js +69 -74
  76. package/out/src/mockchain/MockServices.js.map +1 -1
  77. package/out/src/mockchain/merkleTree.d.ts.map +1 -1
  78. package/out/src/mockchain/merkleTree.js +51 -56
  79. package/out/src/mockchain/merkleTree.js.map +1 -1
  80. package/out/src/monitor/Monitor.d.ts +4 -0
  81. package/out/src/monitor/Monitor.d.ts.map +1 -1
  82. package/out/src/monitor/Monitor.js +60 -57
  83. package/out/src/monitor/Monitor.js.map +1 -1
  84. package/out/src/monitor/MonitorDaemon.d.ts +3 -0
  85. package/out/src/monitor/MonitorDaemon.d.ts.map +1 -1
  86. package/out/src/monitor/MonitorDaemon.js +65 -56
  87. package/out/src/monitor/MonitorDaemon.js.map +1 -1
  88. package/out/src/monitor/index.all.js.map +1 -1
  89. package/out/src/monitor/tasks/TaskArcSSE.d.ts +5 -0
  90. package/out/src/monitor/tasks/TaskArcSSE.d.ts.map +1 -1
  91. package/out/src/monitor/tasks/TaskArcSSE.js +86 -77
  92. package/out/src/monitor/tasks/TaskArcSSE.js.map +1 -1
  93. package/out/src/monitor/tasks/TaskCheckForProofs.d.ts +4 -2
  94. package/out/src/monitor/tasks/TaskCheckForProofs.d.ts.map +1 -1
  95. package/out/src/monitor/tasks/TaskCheckForProofs.js +132 -131
  96. package/out/src/monitor/tasks/TaskCheckForProofs.js.map +1 -1
  97. package/out/src/monitor/tasks/TaskCheckNoSends.d.ts +3 -1
  98. package/out/src/monitor/tasks/TaskCheckNoSends.d.ts.map +1 -1
  99. package/out/src/monitor/tasks/TaskCheckNoSends.js +3 -1
  100. package/out/src/monitor/tasks/TaskCheckNoSends.js.map +1 -1
  101. package/out/src/monitor/tasks/TaskCleanupActionBatches.d.ts +13 -0
  102. package/out/src/monitor/tasks/TaskCleanupActionBatches.d.ts.map +1 -0
  103. package/out/src/monitor/tasks/TaskCleanupActionBatches.js +24 -0
  104. package/out/src/monitor/tasks/TaskCleanupActionBatches.js.map +1 -0
  105. package/out/src/monitor/tasks/TaskClock.d.ts +1 -1
  106. package/out/src/monitor/tasks/TaskClock.d.ts.map +1 -1
  107. package/out/src/monitor/tasks/TaskClock.js +1 -1
  108. package/out/src/monitor/tasks/TaskClock.js.map +1 -1
  109. package/out/src/monitor/tasks/TaskFailAbandoned.d.ts.map +1 -1
  110. package/out/src/monitor/tasks/TaskFailAbandoned.js.map +1 -1
  111. package/out/src/monitor/tasks/TaskMineBlock.d.ts +3 -1
  112. package/out/src/monitor/tasks/TaskMineBlock.d.ts.map +1 -1
  113. package/out/src/monitor/tasks/TaskMineBlock.js +3 -1
  114. package/out/src/monitor/tasks/TaskMineBlock.js.map +1 -1
  115. package/out/src/monitor/tasks/TaskMonitorCallHistory.d.ts.map +1 -1
  116. package/out/src/monitor/tasks/TaskMonitorCallHistory.js.map +1 -1
  117. package/out/src/monitor/tasks/TaskNewHeader.d.ts +4 -3
  118. package/out/src/monitor/tasks/TaskNewHeader.d.ts.map +1 -1
  119. package/out/src/monitor/tasks/TaskNewHeader.js +4 -3
  120. package/out/src/monitor/tasks/TaskNewHeader.js.map +1 -1
  121. package/out/src/monitor/tasks/TaskPurge.d.ts +3 -1
  122. package/out/src/monitor/tasks/TaskPurge.d.ts.map +1 -1
  123. package/out/src/monitor/tasks/TaskPurge.js +3 -1
  124. package/out/src/monitor/tasks/TaskPurge.js.map +1 -1
  125. package/out/src/monitor/tasks/TaskReorg.d.ts.map +1 -1
  126. package/out/src/monitor/tasks/TaskReorg.js.map +1 -1
  127. package/out/src/monitor/tasks/TaskReviewDoubleSpends.d.ts +3 -1
  128. package/out/src/monitor/tasks/TaskReviewDoubleSpends.d.ts.map +1 -1
  129. package/out/src/monitor/tasks/TaskReviewDoubleSpends.js +3 -1
  130. package/out/src/monitor/tasks/TaskReviewDoubleSpends.js.map +1 -1
  131. package/out/src/monitor/tasks/TaskReviewProvenTxs.d.ts +3 -1
  132. package/out/src/monitor/tasks/TaskReviewProvenTxs.d.ts.map +1 -1
  133. package/out/src/monitor/tasks/TaskReviewProvenTxs.js +3 -1
  134. package/out/src/monitor/tasks/TaskReviewProvenTxs.js.map +1 -1
  135. package/out/src/monitor/tasks/TaskReviewStatus.d.ts +3 -1
  136. package/out/src/monitor/tasks/TaskReviewStatus.d.ts.map +1 -1
  137. package/out/src/monitor/tasks/TaskReviewStatus.js +3 -1
  138. package/out/src/monitor/tasks/TaskReviewStatus.js.map +1 -1
  139. package/out/src/monitor/tasks/TaskReviewUtxos.d.ts +3 -1
  140. package/out/src/monitor/tasks/TaskReviewUtxos.d.ts.map +1 -1
  141. package/out/src/monitor/tasks/TaskReviewUtxos.js +3 -1
  142. package/out/src/monitor/tasks/TaskReviewUtxos.js.map +1 -1
  143. package/out/src/monitor/tasks/TaskSendWaiting.d.ts +3 -0
  144. package/out/src/monitor/tasks/TaskSendWaiting.d.ts.map +1 -1
  145. package/out/src/monitor/tasks/TaskSendWaiting.js +53 -46
  146. package/out/src/monitor/tasks/TaskSendWaiting.js.map +1 -1
  147. package/out/src/monitor/tasks/TaskSyncWhenIdle.d.ts +1 -1
  148. package/out/src/monitor/tasks/TaskSyncWhenIdle.d.ts.map +1 -1
  149. package/out/src/monitor/tasks/TaskSyncWhenIdle.js +1 -1
  150. package/out/src/monitor/tasks/TaskSyncWhenIdle.js.map +1 -1
  151. package/out/src/monitor/tasks/TaskUnFail.d.ts +3 -1
  152. package/out/src/monitor/tasks/TaskUnFail.d.ts.map +1 -1
  153. package/out/src/monitor/tasks/TaskUnFail.js +3 -1
  154. package/out/src/monitor/tasks/TaskUnFail.js.map +1 -1
  155. package/out/src/monitor/tasks/WalletMonitorTask.d.ts.map +1 -1
  156. package/out/src/monitor/tasks/WalletMonitorTask.js.map +1 -1
  157. package/out/src/monitor/tasks/index.all.d.ts +1 -0
  158. package/out/src/monitor/tasks/index.all.d.ts.map +1 -1
  159. package/out/src/monitor/tasks/index.all.js +1 -0
  160. package/out/src/monitor/tasks/index.all.js.map +1 -1
  161. package/out/src/sdk/ActionBatch.interfaces.d.ts +159 -0
  162. package/out/src/sdk/ActionBatch.interfaces.d.ts.map +1 -0
  163. package/out/src/sdk/ActionBatch.interfaces.js +3 -0
  164. package/out/src/sdk/ActionBatch.interfaces.js.map +1 -0
  165. package/out/src/sdk/PrivilegedKeyManager.d.ts.map +1 -1
  166. package/out/src/sdk/PrivilegedKeyManager.js +3 -3
  167. package/out/src/sdk/PrivilegedKeyManager.js.map +1 -1
  168. package/out/src/sdk/WERR_errors.d.ts +1 -1
  169. package/out/src/sdk/WERR_errors.d.ts.map +1 -1
  170. package/out/src/sdk/WERR_errors.js +2 -2
  171. package/out/src/sdk/WERR_errors.js.map +1 -1
  172. package/out/src/sdk/WalletError.d.ts +3 -0
  173. package/out/src/sdk/WalletError.d.ts.map +1 -1
  174. package/out/src/sdk/WalletError.js +53 -56
  175. package/out/src/sdk/WalletError.js.map +1 -1
  176. package/out/src/sdk/WalletErrorFromJson.js.map +1 -1
  177. package/out/src/sdk/WalletServices.interfaces.d.ts +3 -1
  178. package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  179. package/out/src/sdk/WalletStorage.interfaces.d.ts +22 -1
  180. package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
  181. package/out/src/sdk/index.d.ts +1 -0
  182. package/out/src/sdk/index.d.ts.map +1 -1
  183. package/out/src/sdk/index.js +1 -0
  184. package/out/src/sdk/index.js.map +1 -1
  185. package/out/src/sdk/types.js.map +1 -1
  186. package/out/src/services/ServiceCollection.d.ts.map +1 -1
  187. package/out/src/services/ServiceCollection.js.map +1 -1
  188. package/out/src/services/Services.d.ts +8 -2
  189. package/out/src/services/Services.d.ts.map +1 -1
  190. package/out/src/services/Services.js +86 -44
  191. package/out/src/services/Services.js.map +1 -1
  192. package/out/src/services/chaintracker/BHServiceClient.d.ts +7 -7
  193. package/out/src/services/chaintracker/BHServiceClient.d.ts.map +1 -1
  194. package/out/src/services/chaintracker/BHServiceClient.js +9 -9
  195. package/out/src/services/chaintracker/BHServiceClient.js.map +1 -1
  196. package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts +4 -1
  197. package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -1
  198. package/out/src/services/chaintracker/ChaintracksChainTracker.js +42 -6
  199. package/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
  200. package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.d.ts +4 -4
  201. package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.d.ts.map +1 -1
  202. package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.js +1 -1
  203. package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.js.map +1 -1
  204. package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts +3 -0
  205. package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
  206. package/out/src/services/chaintracker/chaintracks/Chaintracks.js +45 -40
  207. package/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
  208. package/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts +5 -0
  209. package/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts.map +1 -1
  210. package/out/src/services/chaintracker/chaintracks/ChaintracksService.js +25 -18
  211. package/out/src/services/chaintracker/chaintracks/ChaintracksService.js.map +1 -1
  212. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts +3 -3
  213. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts.map +1 -1
  214. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js +6 -7
  215. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js.map +1 -1
  216. package/out/src/services/chaintracker/chaintracks/GoChaintracksServiceClient.d.ts.map +1 -1
  217. package/out/src/services/chaintracker/chaintracks/GoChaintracksServiceClient.js.map +1 -1
  218. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts.map +1 -1
  219. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js.map +1 -1
  220. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.d.ts.map +1 -1
  221. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js.map +1 -1
  222. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.d.ts.map +1 -1
  223. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.js.map +1 -1
  224. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.d.ts.map +1 -1
  225. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js +0 -1
  226. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js.map +1 -1
  227. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts.map +1 -1
  228. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js.map +1 -1
  229. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts.map +1 -1
  230. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js.map +1 -1
  231. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorChaintracksSSE.d.ts.map +1 -1
  232. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorChaintracksSSE.js.map +1 -1
  233. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.d.ts +2 -2
  234. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.d.ts.map +1 -1
  235. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.js +2 -2
  236. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.js.map +1 -1
  237. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.d.ts.map +1 -1
  238. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js.map +1 -1
  239. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts.map +1 -1
  240. package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js.map +1 -1
  241. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts +12 -2
  242. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
  243. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +110 -103
  244. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
  245. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.d.ts +8 -0
  246. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.d.ts.map +1 -1
  247. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.js +58 -48
  248. package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.js.map +1 -1
  249. package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts.map +1 -1
  250. package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js.map +1 -1
  251. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.d.ts.map +1 -1
  252. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js.map +1 -1
  253. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts +3 -0
  254. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts.map +1 -1
  255. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js +55 -54
  256. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js.map +1 -1
  257. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts +4 -0
  258. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts.map +1 -1
  259. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js +97 -72
  260. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js.map +1 -1
  261. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts +5 -0
  262. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts.map +1 -1
  263. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js +145 -136
  264. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js.map +1 -1
  265. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts +4 -0
  266. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
  267. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +92 -68
  268. package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
  269. package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.d.ts +43 -0
  270. package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.d.ts.map +1 -1
  271. package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.js +76 -0
  272. package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.js.map +1 -1
  273. package/out/src/services/chaintracker/chaintracks/configureKnexChaintracks.d.ts +18 -0
  274. package/out/src/services/chaintracker/chaintracks/configureKnexChaintracks.d.ts.map +1 -0
  275. package/out/src/services/chaintracker/chaintracks/configureKnexChaintracks.js +24 -0
  276. package/out/src/services/chaintracker/chaintracks/configureKnexChaintracks.js.map +1 -0
  277. package/out/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.d.ts +2 -3
  278. package/out/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.d.ts.map +1 -1
  279. package/out/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.js +4 -22
  280. package/out/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.js.map +1 -1
  281. package/out/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.d.ts +2 -4
  282. package/out/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.d.ts.map +1 -1
  283. package/out/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.js +12 -25
  284. package/out/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.js.map +1 -1
  285. package/out/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.d.ts +2 -3
  286. package/out/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.d.ts.map +1 -1
  287. package/out/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.js +4 -22
  288. package/out/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.js.map +1 -1
  289. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts +2 -1
  290. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts.map +1 -1
  291. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js +3 -15
  292. package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js.map +1 -1
  293. package/out/src/services/chaintracker/chaintracks/createKnexChaintracks.d.ts +2 -2
  294. package/out/src/services/chaintracker/chaintracks/createKnexChaintracks.d.ts.map +1 -1
  295. package/out/src/services/chaintracker/chaintracks/createKnexChaintracks.js +3 -15
  296. package/out/src/services/chaintracker/chaintracks/createKnexChaintracks.js.map +1 -1
  297. package/out/src/services/chaintracker/chaintracks/createNoDbChaintracks.d.ts +2 -1
  298. package/out/src/services/chaintracker/chaintracks/createNoDbChaintracks.d.ts.map +1 -1
  299. package/out/src/services/chaintracker/chaintracks/createNoDbChaintracks.js +3 -15
  300. package/out/src/services/chaintracker/chaintracks/createNoDbChaintracks.js.map +1 -1
  301. package/out/src/services/chaintracker/chaintracks/index.mobile.d.ts +1 -1
  302. package/out/src/services/chaintracker/chaintracks/index.mobile.d.ts.map +1 -1
  303. package/out/src/services/chaintracker/chaintracks/index.mobile.js.map +1 -1
  304. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +2 -0
  305. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
  306. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +64 -61
  307. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
  308. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.d.ts.map +1 -1
  309. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.js.map +1 -1
  310. package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts.map +1 -1
  311. package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js +4 -3
  312. package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js.map +1 -1
  313. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts.map +1 -1
  314. package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js.map +1 -1
  315. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts.map +1 -1
  316. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js.map +1 -1
  317. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.d.ts +8 -10
  318. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.d.ts.map +1 -1
  319. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.js +14 -24
  320. package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.js.map +1 -1
  321. package/out/src/services/chaintracker/chaintracks/util/HeightRange.d.ts.map +1 -1
  322. package/out/src/services/chaintracker/chaintracks/util/HeightRange.js.map +1 -1
  323. package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.d.ts.map +1 -1
  324. package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.js.map +1 -1
  325. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts +1 -11
  326. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +1 -1
  327. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +20 -49
  328. package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js.map +1 -1
  329. package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.d.ts.map +1 -1
  330. package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.js +4 -2
  331. package/out/src/services/chaintracker/chaintracks/util/dirtyHashes.js.map +1 -1
  332. package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js.map +1 -1
  333. package/out/src/services/createDefaultWalletServicesOptions.d.ts +23 -14
  334. package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
  335. package/out/src/services/createDefaultWalletServicesOptions.js +1 -14
  336. package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  337. package/out/src/services/networkConfig.js.map +1 -1
  338. package/out/src/services/providers/ARC.d.ts +4 -0
  339. package/out/src/services/providers/ARC.d.ts.map +1 -1
  340. package/out/src/services/providers/ARC.js +96 -83
  341. package/out/src/services/providers/ARC.js.map +1 -1
  342. package/out/src/services/providers/ArcSSEClient.d.ts.map +1 -1
  343. package/out/src/services/providers/ArcSSEClient.js.map +1 -1
  344. package/out/src/services/providers/Arcade.d.ts +4 -0
  345. package/out/src/services/providers/Arcade.d.ts.map +1 -1
  346. package/out/src/services/providers/Arcade.js +118 -92
  347. package/out/src/services/providers/Arcade.js.map +1 -1
  348. package/out/src/services/providers/Bitails.d.ts.map +1 -1
  349. package/out/src/services/providers/Bitails.js +107 -86
  350. package/out/src/services/providers/Bitails.js.map +1 -1
  351. package/out/src/services/providers/SdkWhatsOnChain.d.ts.map +1 -1
  352. package/out/src/services/providers/SdkWhatsOnChain.js.map +1 -1
  353. package/out/src/services/providers/WhatsOnChain.d.ts.map +1 -1
  354. package/out/src/services/providers/WhatsOnChain.js +19 -6
  355. package/out/src/services/providers/WhatsOnChain.js.map +1 -1
  356. package/out/src/services/providers/exchangeRates.js +1 -1
  357. package/out/src/services/providers/exchangeRates.js.map +1 -1
  358. package/out/src/services/providers/getBeefForTxid.js.map +1 -1
  359. package/out/src/services/providers/whatsOnChainHelpers.js.map +1 -1
  360. package/out/src/signer/WalletSigner.d.ts.map +1 -1
  361. package/out/src/signer/WalletSigner.js.map +1 -1
  362. package/out/src/signer/actionBatch/ActionBatchPlanner.d.ts +29 -0
  363. package/out/src/signer/actionBatch/ActionBatchPlanner.d.ts.map +1 -0
  364. package/out/src/signer/actionBatch/ActionBatchPlanner.js +346 -0
  365. package/out/src/signer/actionBatch/ActionBatchPlanner.js.map +1 -0
  366. package/out/src/signer/actionBatch/ActionBatchWorkspace.d.ts +33 -0
  367. package/out/src/signer/actionBatch/ActionBatchWorkspace.d.ts.map +1 -0
  368. package/out/src/signer/actionBatch/ActionBatchWorkspace.js +869 -0
  369. package/out/src/signer/actionBatch/ActionBatchWorkspace.js.map +1 -0
  370. package/out/src/signer/actionBatch/actionBatchBootstrap.d.ts +11 -0
  371. package/out/src/signer/actionBatch/actionBatchBootstrap.d.ts.map +1 -0
  372. package/out/src/signer/actionBatch/actionBatchBootstrap.js +38 -0
  373. package/out/src/signer/actionBatch/actionBatchBootstrap.js.map +1 -0
  374. package/out/src/signer/methods/acquireDirectCertificate.js.map +1 -1
  375. package/out/src/signer/methods/buildSignableTransaction.d.ts.map +1 -1
  376. package/out/src/signer/methods/buildSignableTransaction.js +97 -107
  377. package/out/src/signer/methods/buildSignableTransaction.js.map +1 -1
  378. package/out/src/signer/methods/completeSignedTransaction.d.ts +3 -7
  379. package/out/src/signer/methods/completeSignedTransaction.d.ts.map +1 -1
  380. package/out/src/signer/methods/completeSignedTransaction.js +14 -57
  381. package/out/src/signer/methods/completeSignedTransaction.js.map +1 -1
  382. package/out/src/signer/methods/createAction.d.ts.map +1 -1
  383. package/out/src/signer/methods/createAction.js +50 -20
  384. package/out/src/signer/methods/createAction.js.map +1 -1
  385. package/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
  386. package/out/src/signer/methods/internalizeAction.js +4 -4
  387. package/out/src/signer/methods/internalizeAction.js.map +1 -1
  388. package/out/src/signer/methods/proveCertificate.js.map +1 -1
  389. package/out/src/signer/methods/resultBeef.js.map +1 -1
  390. package/out/src/signer/methods/signAction.d.ts.map +1 -1
  391. package/out/src/signer/methods/signAction.js +29 -4
  392. package/out/src/signer/methods/signAction.js.map +1 -1
  393. package/out/src/signer/methods/verifyUnlockScripts.d.ts +17 -0
  394. package/out/src/signer/methods/verifyUnlockScripts.d.ts.map +1 -0
  395. package/out/src/signer/methods/verifyUnlockScripts.js +137 -0
  396. package/out/src/signer/methods/verifyUnlockScripts.js.map +1 -0
  397. package/out/src/storage/StorageIdb.d.ts +19 -3
  398. package/out/src/storage/StorageIdb.d.ts.map +1 -1
  399. package/out/src/storage/StorageIdb.js +232 -53
  400. package/out/src/storage/StorageIdb.js.map +1 -1
  401. package/out/src/storage/StorageKnex.d.ts +29 -1
  402. package/out/src/storage/StorageKnex.d.ts.map +1 -1
  403. package/out/src/storage/StorageKnex.js +225 -10
  404. package/out/src/storage/StorageKnex.js.map +1 -1
  405. package/out/src/storage/StorageProvider.d.ts +57 -1
  406. package/out/src/storage/StorageProvider.d.ts.map +1 -1
  407. package/out/src/storage/StorageProvider.js +277 -145
  408. package/out/src/storage/StorageProvider.js.map +1 -1
  409. package/out/src/storage/StorageReader.d.ts +13 -5
  410. package/out/src/storage/StorageReader.d.ts.map +1 -1
  411. package/out/src/storage/StorageReader.js +3 -0
  412. package/out/src/storage/StorageReader.js.map +1 -1
  413. package/out/src/storage/StorageReaderWriter.d.ts.map +1 -1
  414. package/out/src/storage/StorageReaderWriter.js.map +1 -1
  415. package/out/src/storage/StorageSyncReader.d.ts.map +1 -1
  416. package/out/src/storage/StorageSyncReader.js.map +1 -1
  417. package/out/src/storage/WalletStorageManager.d.ts +10 -0
  418. package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
  419. package/out/src/storage/WalletStorageManager.js +49 -6
  420. package/out/src/storage/WalletStorageManager.js.map +1 -1
  421. package/out/src/storage/adminServer/adminServer.d.ts +79 -0
  422. package/out/src/storage/adminServer/adminServer.d.ts.map +1 -1
  423. package/out/src/storage/adminServer/adminServer.js +47 -16
  424. package/out/src/storage/adminServer/adminServer.js.map +1 -1
  425. package/out/src/storage/adminServer/adminUi.js.map +1 -1
  426. package/out/src/storage/idbHelpers.d.ts +2 -0
  427. package/out/src/storage/idbHelpers.d.ts.map +1 -1
  428. package/out/src/storage/idbHelpers.js +19 -0
  429. package/out/src/storage/idbHelpers.js.map +1 -1
  430. package/out/src/storage/index.all.js.map +1 -1
  431. package/out/src/storage/methods/ListActionsSpecOp.d.ts.map +1 -1
  432. package/out/src/storage/methods/ListActionsSpecOp.js +48 -71
  433. package/out/src/storage/methods/ListActionsSpecOp.js.map +1 -1
  434. package/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
  435. package/out/src/storage/methods/ListOutputsSpecOp.js +29 -27
  436. package/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
  437. package/out/src/storage/methods/actionBatch.d.ts +15 -0
  438. package/out/src/storage/methods/actionBatch.d.ts.map +1 -0
  439. package/out/src/storage/methods/actionBatch.js +737 -0
  440. package/out/src/storage/methods/actionBatch.js.map +1 -0
  441. package/out/src/storage/methods/actionBatchBlobs.d.ts +15 -0
  442. package/out/src/storage/methods/actionBatchBlobs.d.ts.map +1 -0
  443. package/out/src/storage/methods/actionBatchBlobs.js +184 -0
  444. package/out/src/storage/methods/actionBatchBlobs.js.map +1 -0
  445. package/out/src/storage/methods/actionBatchValidation.d.ts +17 -0
  446. package/out/src/storage/methods/actionBatchValidation.d.ts.map +1 -0
  447. package/out/src/storage/methods/actionBatchValidation.js +416 -0
  448. package/out/src/storage/methods/actionBatchValidation.js.map +1 -0
  449. package/out/src/storage/methods/actionPlanning.d.ts +12 -0
  450. package/out/src/storage/methods/actionPlanning.d.ts.map +1 -0
  451. package/out/src/storage/methods/actionPlanning.js +48 -0
  452. package/out/src/storage/methods/actionPlanning.js.map +1 -0
  453. package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts +0 -21
  454. package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts.map +1 -1
  455. package/out/src/storage/methods/attemptToPostReqsToNetwork.js +43 -51
  456. package/out/src/storage/methods/attemptToPostReqsToNetwork.js.map +1 -1
  457. package/out/src/storage/methods/createAction.d.ts +1 -1
  458. package/out/src/storage/methods/createAction.d.ts.map +1 -1
  459. package/out/src/storage/methods/createAction.js +66 -63
  460. package/out/src/storage/methods/createAction.js.map +1 -1
  461. package/out/src/storage/methods/generateChange.d.ts +2 -2
  462. package/out/src/storage/methods/generateChange.d.ts.map +1 -1
  463. package/out/src/storage/methods/generateChange.js +66 -38
  464. package/out/src/storage/methods/generateChange.js.map +1 -1
  465. package/out/src/storage/methods/getBeefForTransaction.d.ts.map +1 -1
  466. package/out/src/storage/methods/getBeefForTransaction.js +48 -42
  467. package/out/src/storage/methods/getBeefForTransaction.js.map +1 -1
  468. package/out/src/storage/methods/getSyncChunk.d.ts.map +1 -1
  469. package/out/src/storage/methods/getSyncChunk.js +8 -6
  470. package/out/src/storage/methods/getSyncChunk.js.map +1 -1
  471. package/out/src/storage/methods/internalizeAction.js +145 -121
  472. package/out/src/storage/methods/internalizeAction.js.map +1 -1
  473. package/out/src/storage/methods/listActionsIdb.js.map +1 -1
  474. package/out/src/storage/methods/listActionsKnex.js +1 -1
  475. package/out/src/storage/methods/listActionsKnex.js.map +1 -1
  476. package/out/src/storage/methods/listCertificates.d.ts +1 -1
  477. package/out/src/storage/methods/listCertificates.d.ts.map +1 -1
  478. package/out/src/storage/methods/listCertificates.js +1 -1
  479. package/out/src/storage/methods/listCertificates.js.map +1 -1
  480. package/out/src/storage/methods/listOutputsIdb.d.ts +1 -1
  481. package/out/src/storage/methods/listOutputsIdb.d.ts.map +1 -1
  482. package/out/src/storage/methods/listOutputsIdb.js +133 -152
  483. package/out/src/storage/methods/listOutputsIdb.js.map +1 -1
  484. package/out/src/storage/methods/listOutputsKnex.d.ts +1 -1
  485. package/out/src/storage/methods/listOutputsKnex.d.ts.map +1 -1
  486. package/out/src/storage/methods/listOutputsKnex.js +213 -254
  487. package/out/src/storage/methods/listOutputsKnex.js.map +1 -1
  488. package/out/src/storage/methods/managedChange.d.ts +3 -3
  489. package/out/src/storage/methods/managedChange.d.ts.map +1 -1
  490. package/out/src/storage/methods/managedChange.js +1 -2
  491. package/out/src/storage/methods/managedChange.js.map +1 -1
  492. package/out/src/storage/methods/offsetKey.d.ts.map +1 -1
  493. package/out/src/storage/methods/offsetKey.js +0 -1
  494. package/out/src/storage/methods/offsetKey.js.map +1 -1
  495. package/out/src/storage/methods/processAction.d.ts +2 -0
  496. package/out/src/storage/methods/processAction.d.ts.map +1 -1
  497. package/out/src/storage/methods/processAction.js +8 -8
  498. package/out/src/storage/methods/processAction.js.map +1 -1
  499. package/out/src/storage/methods/purgeData.d.ts.map +1 -1
  500. package/out/src/storage/methods/purgeData.js +157 -179
  501. package/out/src/storage/methods/purgeData.js.map +1 -1
  502. package/out/src/storage/methods/purgeDataIdb.d.ts +1 -1
  503. package/out/src/storage/methods/purgeDataIdb.d.ts.map +1 -1
  504. package/out/src/storage/methods/purgeDataIdb.js +1 -1
  505. package/out/src/storage/methods/purgeDataIdb.js.map +1 -1
  506. package/out/src/storage/methods/reviewStatus.js +6 -6
  507. package/out/src/storage/methods/reviewStatus.js.map +1 -1
  508. package/out/src/storage/methods/reviewStatusIdb.js.map +1 -1
  509. package/out/src/storage/methods/utils.Buffer.js.map +1 -1
  510. package/out/src/storage/methods/utils.js.map +1 -1
  511. package/out/src/storage/portable/index.js +2 -2
  512. package/out/src/storage/portable/index.js.map +1 -1
  513. package/out/src/storage/remoting/BinaryJson.d.ts.map +1 -1
  514. package/out/src/storage/remoting/BinaryJson.js +84 -38
  515. package/out/src/storage/remoting/BinaryJson.js.map +1 -1
  516. package/out/src/storage/remoting/KnexSessionManager.d.ts.map +1 -1
  517. package/out/src/storage/remoting/KnexSessionManager.js.map +1 -1
  518. package/out/src/storage/remoting/RateLimitPolicy.d.ts +10 -0
  519. package/out/src/storage/remoting/RateLimitPolicy.d.ts.map +1 -0
  520. package/out/src/storage/remoting/RateLimitPolicy.js +37 -0
  521. package/out/src/storage/remoting/RateLimitPolicy.js.map +1 -0
  522. package/out/src/storage/remoting/StorageClient.d.ts +2 -0
  523. package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
  524. package/out/src/storage/remoting/StorageClient.js +82 -50
  525. package/out/src/storage/remoting/StorageClient.js.map +1 -1
  526. package/out/src/storage/remoting/StorageClientBase.d.ts +23 -4
  527. package/out/src/storage/remoting/StorageClientBase.d.ts.map +1 -1
  528. package/out/src/storage/remoting/StorageClientBase.js +97 -4
  529. package/out/src/storage/remoting/StorageClientBase.js.map +1 -1
  530. package/out/src/storage/remoting/StorageMobile.d.ts.map +1 -1
  531. package/out/src/storage/remoting/StorageMobile.js +34 -22
  532. package/out/src/storage/remoting/StorageMobile.js.map +1 -1
  533. package/out/src/storage/remoting/StorageServer.d.ts +62 -1
  534. package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
  535. package/out/src/storage/remoting/StorageServer.js +451 -172
  536. package/out/src/storage/remoting/StorageServer.js.map +1 -1
  537. package/out/src/storage/remoting/edgePolicy.d.ts +57 -0
  538. package/out/src/storage/remoting/edgePolicy.d.ts.map +1 -0
  539. package/out/src/storage/remoting/edgePolicy.js +387 -0
  540. package/out/src/storage/remoting/edgePolicy.js.map +1 -0
  541. package/out/src/storage/remoting/entityValidationHelpers.d.ts.map +1 -1
  542. package/out/src/storage/remoting/entityValidationHelpers.js +22 -5
  543. package/out/src/storage/remoting/entityValidationHelpers.js.map +1 -1
  544. package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
  545. package/out/src/storage/schema/KnexMigrations.js +56 -0
  546. package/out/src/storage/schema/KnexMigrations.js.map +1 -1
  547. package/out/src/storage/schema/StorageIdbSchema.d.ts +24 -0
  548. package/out/src/storage/schema/StorageIdbSchema.d.ts.map +1 -1
  549. package/out/src/storage/schema/entities/EntityBase.d.ts.map +1 -1
  550. package/out/src/storage/schema/entities/EntityBase.js.map +1 -1
  551. package/out/src/storage/schema/entities/EntityCertificate.d.ts.map +1 -1
  552. package/out/src/storage/schema/entities/EntityCertificate.js.map +1 -1
  553. package/out/src/storage/schema/entities/EntityCertificateField.d.ts.map +1 -1
  554. package/out/src/storage/schema/entities/EntityCertificateField.js.map +1 -1
  555. package/out/src/storage/schema/entities/EntityCommission.d.ts.map +1 -1
  556. package/out/src/storage/schema/entities/EntityCommission.js.map +1 -1
  557. package/out/src/storage/schema/entities/EntityOutput.d.ts.map +1 -1
  558. package/out/src/storage/schema/entities/EntityOutput.js.map +1 -1
  559. package/out/src/storage/schema/entities/EntityOutputBasket.d.ts.map +1 -1
  560. package/out/src/storage/schema/entities/EntityOutputBasket.js.map +1 -1
  561. package/out/src/storage/schema/entities/EntityOutputTag.d.ts.map +1 -1
  562. package/out/src/storage/schema/entities/EntityOutputTag.js.map +1 -1
  563. package/out/src/storage/schema/entities/EntityOutputTagMap.d.ts.map +1 -1
  564. package/out/src/storage/schema/entities/EntityOutputTagMap.js.map +1 -1
  565. package/out/src/storage/schema/entities/EntityProvenTx.d.ts +3 -0
  566. package/out/src/storage/schema/entities/EntityProvenTx.d.ts.map +1 -1
  567. package/out/src/storage/schema/entities/EntityProvenTx.js +46 -36
  568. package/out/src/storage/schema/entities/EntityProvenTx.js.map +1 -1
  569. package/out/src/storage/schema/entities/EntityProvenTxReq.d.ts +2 -2
  570. package/out/src/storage/schema/entities/EntityProvenTxReq.d.ts.map +1 -1
  571. package/out/src/storage/schema/entities/EntityProvenTxReq.js +12 -10
  572. package/out/src/storage/schema/entities/EntityProvenTxReq.js.map +1 -1
  573. package/out/src/storage/schema/entities/EntitySyncState.d.ts.map +1 -1
  574. package/out/src/storage/schema/entities/EntitySyncState.js +25 -34
  575. package/out/src/storage/schema/entities/EntitySyncState.js.map +1 -1
  576. package/out/src/storage/schema/entities/EntityTransaction.d.ts.map +1 -1
  577. package/out/src/storage/schema/entities/EntityTransaction.js.map +1 -1
  578. package/out/src/storage/schema/entities/EntityTxLabel.d.ts.map +1 -1
  579. package/out/src/storage/schema/entities/EntityTxLabel.js.map +1 -1
  580. package/out/src/storage/schema/entities/EntityTxLabelMap.d.ts.map +1 -1
  581. package/out/src/storage/schema/entities/EntityTxLabelMap.js.map +1 -1
  582. package/out/src/storage/schema/entities/EntityUser.d.ts.map +1 -1
  583. package/out/src/storage/schema/entities/EntityUser.js.map +1 -1
  584. package/out/src/storage/schema/entities/MergeEntity.d.ts.map +1 -1
  585. package/out/src/storage/schema/entities/MergeEntity.js +9 -14
  586. package/out/src/storage/schema/entities/MergeEntity.js.map +1 -1
  587. package/out/src/storage/schema/tables/TableActionBatch.d.ts +26 -0
  588. package/out/src/storage/schema/tables/TableActionBatch.d.ts.map +1 -0
  589. package/out/src/storage/schema/tables/TableActionBatch.js +3 -0
  590. package/out/src/storage/schema/tables/TableActionBatch.js.map +1 -0
  591. package/out/src/storage/schema/tables/TableAuthSession.js.map +1 -1
  592. package/out/src/storage/schema/tables/index.d.ts +1 -0
  593. package/out/src/storage/schema/tables/index.d.ts.map +1 -1
  594. package/out/src/storage/schema/tables/index.js +1 -0
  595. package/out/src/storage/schema/tables/index.js.map +1 -1
  596. package/out/src/storage/storageProviderHelpers.js.map +1 -1
  597. package/out/src/storage/sync/StorageMySQLDojoReader.d.ts +3 -0
  598. package/out/src/storage/sync/StorageMySQLDojoReader.d.ts.map +1 -1
  599. package/out/src/storage/sync/StorageMySQLDojoReader.js +30 -16
  600. package/out/src/storage/sync/StorageMySQLDojoReader.js.map +1 -1
  601. package/out/src/utility/Format.d.ts.map +1 -1
  602. package/out/src/utility/Format.js +2 -2
  603. package/out/src/utility/Format.js.map +1 -1
  604. package/out/src/utility/ScriptTemplateBRC29.d.ts.map +1 -1
  605. package/out/src/utility/ScriptTemplateBRC29.js.map +1 -1
  606. package/out/src/utility/actionBatchDigest.d.ts +9 -0
  607. package/out/src/utility/actionBatchDigest.d.ts.map +1 -0
  608. package/out/src/utility/actionBatchDigest.js +86 -0
  609. package/out/src/utility/actionBatchDigest.js.map +1 -0
  610. package/out/src/utility/actionBatchPack.d.ts +16 -0
  611. package/out/src/utility/actionBatchPack.d.ts.map +1 -0
  612. package/out/src/utility/actionBatchPack.js +220 -0
  613. package/out/src/utility/actionBatchPack.js.map +1 -0
  614. package/out/src/utility/aggregateResults.d.ts.map +1 -1
  615. package/out/src/utility/aggregateResults.js.map +1 -1
  616. package/out/src/utility/beefForTxids.d.ts +9 -0
  617. package/out/src/utility/beefForTxids.d.ts.map +1 -0
  618. package/out/src/utility/beefForTxids.js +35 -0
  619. package/out/src/utility/beefForTxids.js.map +1 -0
  620. package/out/src/utility/brc114ActionTimeLabels.d.ts.map +1 -1
  621. package/out/src/utility/brc114ActionTimeLabels.js +26 -30
  622. package/out/src/utility/brc114ActionTimeLabels.js.map +1 -1
  623. package/out/src/utility/formatUnknown.d.ts +6 -0
  624. package/out/src/utility/formatUnknown.d.ts.map +1 -0
  625. package/out/src/utility/formatUnknown.js +39 -0
  626. package/out/src/utility/formatUnknown.js.map +1 -0
  627. package/out/src/utility/hashWasm.d.ts +5 -0
  628. package/out/src/utility/hashWasm.d.ts.map +1 -0
  629. package/out/src/utility/hashWasm.js +15 -0
  630. package/out/src/utility/hashWasm.js.map +1 -0
  631. package/out/src/utility/identityUtils.d.ts.map +1 -1
  632. package/out/src/utility/identityUtils.js +2 -4
  633. package/out/src/utility/identityUtils.js.map +1 -1
  634. package/out/src/utility/parseTxScriptOffsets.d.ts +1 -1
  635. package/out/src/utility/parseTxScriptOffsets.d.ts.map +1 -1
  636. package/out/src/utility/parseTxScriptOffsets.js +1 -1
  637. package/out/src/utility/parseTxScriptOffsets.js.map +1 -1
  638. package/out/src/utility/stampLog.d.ts.map +1 -1
  639. package/out/src/utility/stampLog.js +49 -42
  640. package/out/src/utility/stampLog.js.map +1 -1
  641. package/out/src/utility/traceContext.d.ts +13 -0
  642. package/out/src/utility/traceContext.d.ts.map +1 -0
  643. package/out/src/utility/traceContext.js +34 -0
  644. package/out/src/utility/traceContext.js.map +1 -0
  645. package/out/src/utility/tscProofToMerklePath.d.ts.map +1 -1
  646. package/out/src/utility/tscProofToMerklePath.js +1 -1
  647. package/out/src/utility/tscProofToMerklePath.js.map +1 -1
  648. package/out/src/utility/utilityHelpers.buffer.js.map +1 -1
  649. package/out/src/utility/utilityHelpers.d.ts +2 -2
  650. package/out/src/utility/utilityHelpers.d.ts.map +1 -1
  651. package/out/src/utility/utilityHelpers.js +8 -4
  652. package/out/src/utility/utilityHelpers.js.map +1 -1
  653. package/out/src/utility/utilityHelpers.noBuffer.d.ts.map +1 -1
  654. package/out/src/utility/utilityHelpers.noBuffer.js +1 -2
  655. package/out/src/utility/utilityHelpers.noBuffer.js.map +1 -1
  656. package/out/src/wab-client/WABClient.d.ts +36 -90
  657. package/out/src/wab-client/WABClient.d.ts.map +1 -1
  658. package/out/src/wab-client/WABClient.js +103 -151
  659. package/out/src/wab-client/WABClient.js.map +1 -1
  660. package/out/src/wab-client/WABTransport.d.ts +81 -0
  661. package/out/src/wab-client/WABTransport.d.ts.map +1 -0
  662. package/out/src/wab-client/WABTransport.js +420 -0
  663. package/out/src/wab-client/WABTransport.js.map +1 -0
  664. package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts +10 -10
  665. package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts.map +1 -1
  666. package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js +16 -21
  667. package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js.map +1 -1
  668. package/out/src/wab-client/auth-method-interactors/DevConsoleInteractor.js.map +1 -1
  669. package/out/src/wab-client/auth-method-interactors/PersonaIDInteractor.js.map +1 -1
  670. package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.d.ts +2 -1
  671. package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.d.ts.map +1 -1
  672. package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.js +14 -0
  673. package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.js.map +1 -1
  674. package/package.json +66 -30
  675. package/license.md +0 -28
@@ -10,14 +10,102 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.StorageServer = void 0;
13
+ const sdk_1 = require("@bsv/sdk");
13
14
  const express_1 = __importDefault(require("express"));
14
15
  const auth_express_middleware_1 = require("@bsv/auth-express-middleware");
15
16
  const payment_express_middleware_1 = require("@bsv/payment-express-middleware");
17
+ const express_rate_limit_1 = require("express-rate-limit");
16
18
  const WERR_errors_1 = require("../../sdk/WERR_errors");
17
19
  const entityValidationHelpers_1 = require("./entityValidationHelpers");
18
20
  const WalletError_1 = require("../../sdk/WalletError");
19
21
  const WalletLogger_1 = require("../../WalletLogger");
22
+ const traceContext_1 = require("../../utility/traceContext");
20
23
  const BinaryJson_1 = require("./BinaryJson");
24
+ const RateLimitPolicy_1 = require("./RateLimitPolicy");
25
+ const edgePolicy_1 = require("./edgePolicy");
26
+ const actionBatchPack_1 = require("../../utility/actionBatchPack");
27
+ const actionBatchBlobs_1 = require("../methods/actionBatchBlobs");
28
+ const storageRpcMethods = new Set([
29
+ 'abortAction',
30
+ 'abortActionBatch',
31
+ 'adminStats',
32
+ 'beginActionBatch',
33
+ 'commitActionBatch',
34
+ 'commitActionBatchByDigest',
35
+ 'createAction',
36
+ 'destroy',
37
+ 'extendActionBatch',
38
+ 'findCertificatesAuth',
39
+ 'findOrInsertSyncStateAuth',
40
+ 'findOrInsertUser',
41
+ 'findOutputBaskets',
42
+ 'findOutputBasketsAuth',
43
+ 'findOutputsAuth',
44
+ 'findProvenTxReqs',
45
+ 'getCapabilities',
46
+ 'getSettings',
47
+ 'getSyncChunk',
48
+ 'insertCertificateAuth',
49
+ 'internalizeAction',
50
+ 'listActions',
51
+ 'listCertificates',
52
+ 'listOutputs',
53
+ 'makeAvailable',
54
+ 'migrate',
55
+ 'prepareActionBatchCommit',
56
+ 'processAction',
57
+ 'processSyncChunk',
58
+ 'relinquishCertificate',
59
+ 'relinquishOutput',
60
+ 'renewActionBatch',
61
+ 'setActive',
62
+ 'updateProvenTxReqWithNewProvenTx'
63
+ ]);
64
+ const authIdRpcMethods = new Set([
65
+ 'abortAction',
66
+ 'abortActionBatch',
67
+ 'beginActionBatch',
68
+ 'commitActionBatch',
69
+ 'commitActionBatchByDigest',
70
+ 'createAction',
71
+ 'extendActionBatch',
72
+ 'findCertificatesAuth',
73
+ 'findOrInsertSyncStateAuth',
74
+ 'findOutputBaskets',
75
+ 'findOutputBasketsAuth',
76
+ 'findOutputsAuth',
77
+ 'insertCertificateAuth',
78
+ 'internalizeAction',
79
+ 'listActions',
80
+ 'listCertificates',
81
+ 'listOutputs',
82
+ 'prepareActionBatchCommit',
83
+ 'processAction',
84
+ 'relinquishCertificate',
85
+ 'relinquishOutput',
86
+ 'renewActionBatch',
87
+ 'setActive'
88
+ ]);
89
+ const actionBatchRpcMethods = new Set([
90
+ 'abortActionBatch',
91
+ 'beginActionBatch',
92
+ 'commitActionBatch',
93
+ 'commitActionBatchByDigest',
94
+ 'extendActionBatch',
95
+ 'prepareActionBatchCommit',
96
+ 'renewActionBatch'
97
+ ]);
98
+ function requiredAuthenticatedIdentityKey(req) {
99
+ const identityKey = req.auth?.identityKey;
100
+ if (typeof identityKey !== 'string' || identityKey.trim() === '' || identityKey === 'unknown') {
101
+ throw new WERR_errors_1.WERR_UNAUTHORIZED('authenticated request identity is required');
102
+ }
103
+ return identityKey;
104
+ }
105
+ function firstRequestHeader(req, name) {
106
+ const value = req.headers[name.toLowerCase()];
107
+ return Array.isArray(value) ? value[0] : value;
108
+ }
21
109
  class StorageServer {
22
110
  app = (0, express_1.default)();
23
111
  port;
@@ -28,7 +116,16 @@ class StorageServer {
28
116
  adminIdentityKeys;
29
117
  makeLogger;
30
118
  sessionManager;
119
+ rateLimitOptions;
120
+ preAuthRateLimitOptions;
121
+ trustProxy;
122
+ allowedOrigins;
123
+ maxConcurrentRequests;
124
+ httpPolicy;
125
+ securityHeadersPolicy;
31
126
  logRpcRequests;
127
+ telemetry;
128
+ telemetryConfig;
32
129
  constructor(storage, options) {
33
130
  this.storage = storage;
34
131
  this.port = options.port;
@@ -38,8 +135,25 @@ class StorageServer {
38
135
  this.adminIdentityKeys = options.adminIdentityKeys;
39
136
  this.makeLogger = options.makeLogger;
40
137
  this.sessionManager = options.sessionManager;
138
+ this.rateLimitOptions = options.rateLimit;
139
+ this.preAuthRateLimitOptions = options.preAuthRateLimit;
140
+ this.trustProxy = options.trustProxy;
141
+ this.allowedOrigins = options.allowedOrigins;
142
+ this.maxConcurrentRequests = options.maxConcurrentRequests ?? 200;
143
+ this.httpPolicy = {
144
+ requestTimeoutMs: 2 * 60 * 1000,
145
+ headersTimeoutMs: 15_000,
146
+ keepAliveTimeoutMs: 5_000,
147
+ socketTimeoutMs: 2 * 60 * 1000,
148
+ maxRequestsPerSocket: 1_000,
149
+ ...options.http
150
+ };
151
+ this.securityHeadersPolicy = options.securityHeaders ?? {};
41
152
  this.logRpcRequests = options.logRpcRequests ?? true;
42
- if (options['logShortReqs']) {
153
+ this.telemetryConfig = options.telemetry;
154
+ this.telemetry = new sdk_1.Telemetry(options.telemetry);
155
+ const legacyLogShortReqs = options['logShortReqs'];
156
+ if (legacyLogShortReqs) {
43
157
  this.setupShortReqLogging();
44
158
  }
45
159
  this.setupRoutes();
@@ -55,51 +169,53 @@ class StorageServer {
55
169
  ts: new Date().toISOString(),
56
170
  url: req.originalUrl,
57
171
  ip: req.ip || req.socket.remoteAddress,
58
- ua: req.headers['user-agent'] || '-',
59
- headers: { ...req.headers } // shallow copy
172
+ ua: req.headers['user-agent'] || '-'
60
173
  };
61
- const traceContext = (req.headers['X-Cloud-Trace-Context'] || req.headers['x-cloud-trace-context'])?.split('/')[0];
174
+ const traceContext = firstRequestHeader(req, 'X-Cloud-Trace-Context')?.split('/')[0];
62
175
  if (traceContext) {
63
176
  logObj['logging.googleapis.com/trace'] = `projects/computing-with-integrity/traces/${traceContext}`;
64
177
  }
65
- const chunks = [];
66
- req.on('data', chunk => chunks.push(Buffer.from(chunk)));
67
- req.on('end', () => {
68
- const bodyBuffer = Buffer.concat(chunks);
69
- try {
70
- logObj.body = bodyBuffer.toString('utf8');
71
- }
72
- catch {
73
- logObj.body = bodyBuffer.toString('hex');
74
- logObj.bodyEncoding = 'hex';
75
- }
76
- console.log(JSON.stringify(logObj));
77
- });
178
+ // Request bodies and BSV auth/payment headers can contain sensitive
179
+ // material. Short-request logging records metadata only.
180
+ console.log(JSON.stringify(logObj));
78
181
  }
79
182
  next();
80
183
  });
81
184
  }
82
185
  setupRoutes() {
186
+ (0, RateLimitPolicy_1.configureTrustProxy)(this.app, this.trustProxy);
187
+ this.app.disable('x-powered-by');
188
+ this.app.use((0, edgePolicy_1.securityHeaders)({
189
+ environmentPrefix: 'WALLET_STORAGE',
190
+ ...this.securityHeadersPolicy
191
+ }));
192
+ this.app.use((0, edgePolicy_1.corsPolicy)({
193
+ environmentPrefix: 'WALLET_STORAGE',
194
+ allowedOrigins: this.allowedOrigins,
195
+ methods: ['GET', 'PUT', 'POST', 'OPTIONS']
196
+ }));
197
+ this.app.use((0, edgePolicy_1.concurrencyLimit)('WALLET_STORAGE', this.maxConcurrentRequests));
198
+ this.app.use((0, express_rate_limit_1.rateLimit)((0, RateLimitPolicy_1.rateLimitOptions)({ windowMs: 60_000, limit: 300 }, {
199
+ skip: (req) => req.method === 'GET' || req.method === 'HEAD' || req.method === 'OPTIONS',
200
+ ...this.preAuthRateLimitOptions
201
+ })));
202
+ if (this.telemetry.enabled) {
203
+ this.app.use(this.traceHttpRequest.bind(this));
204
+ }
83
205
  // Escape HTML-significant characters in JSON responses. This preserves the
84
206
  // decoded JSON value while keeping user-controlled strings inert even if a
85
207
  // consumer embeds a response in an HTML context.
86
208
  this.app.set('json escape', true);
87
- this.app.use(express_1.default.json({ limit: '30mb' }));
88
- // This allows the API to be used everywhere when CORS is enforced
89
- this.app.use((req, res, next) => {
90
- res.header('Access-Control-Allow-Origin', '*');
91
- res.header('Access-Control-Allow-Headers', '*');
92
- res.header('Access-Control-Allow-Methods', '*');
93
- res.header('Access-Control-Expose-Headers', '*');
94
- res.header('Access-Control-Allow-Private-Network', 'true');
95
- if (req.method === 'OPTIONS') {
96
- // Handle CORS preflight requests to allow cross-origin POST/PUT requests
97
- res.sendStatus(200);
98
- }
99
- else {
100
- next();
101
- }
102
- });
209
+ this.app.use(express_1.default.json({
210
+ limit: (0, edgePolicy_1.readBodyLimitBytes)('WALLET_STORAGE_JSON', 30 * 1024 * 1024)
211
+ }));
212
+ // Authentication must see the exact binary body bytes, so parse octet
213
+ // streams before the auth middleware just as JSON is parsed above.
214
+ this.app.use(express_1.default.raw({
215
+ type: 'application/octet-stream',
216
+ limit: (0, edgePolicy_1.readBodyLimitBytes)('WALLET_STORAGE_BINARY', 8 * 1024 * 1024)
217
+ }));
218
+ this.app.use(edgePolicy_1.bodyParserErrorHandler);
103
219
  this.app.get('/robots.txt', (req, res) => {
104
220
  res.type('text/plain');
105
221
  res.send('User-agent: *\nDisallow: /');
@@ -109,170 +225,330 @@ class StorageServer {
109
225
  res.send(`BRC-100 ${this.wallet.chain}Net Storage Provider.`);
110
226
  });
111
227
  const options = {
112
- wallet: this.wallet
228
+ wallet: this.wallet,
229
+ ...(this.telemetryConfig == null ? {} : { telemetry: this.telemetryConfig })
113
230
  };
114
231
  if (this.sessionManager != null)
115
232
  options.sessionManager = this.sessionManager;
116
233
  this.app.use((0, auth_express_middleware_1.createAuthMiddleware)(options));
234
+ const authenticatedRateLimit = (0, express_rate_limit_1.rateLimit)((0, RateLimitPolicy_1.rateLimitOptions)({ windowMs: 60_000, limit: 1_000 }, {
235
+ keyGenerator: RateLimitPolicy_1.authenticatedIdentityKey,
236
+ ...this.rateLimitOptions
237
+ }));
238
+ this.app.use(authenticatedRateLimit);
117
239
  if (this.monetize) {
118
240
  this.app.use((0, payment_express_middleware_1.createPaymentMiddleware)({
119
241
  wallet: this.wallet,
120
242
  calculateRequestPrice: this.calculateRequestPrice || (() => 100)
121
243
  }));
122
244
  }
123
- // A single POST endpoint for JSON-RPC:
124
- this.app.post('/', async (req, res) => {
125
- const useBinary = req.header(BinaryJson_1.BINARY_ENCODING_HEADER) === BinaryJson_1.BINARY_ENCODING;
126
- const requestUsesBinary = req.header(BinaryJson_1.BINARY_REQUEST_ENCODING_HEADER) === BinaryJson_1.BINARY_ENCODING;
127
- if (useBinary)
128
- res.set(BinaryJson_1.BINARY_ENCODING_HEADER, BinaryJson_1.BINARY_ENCODING);
129
- const { jsonrpc, method, id } = req.body;
130
- const params = (requestUsesBinary ? (0, BinaryJson_1.decodeBinaryJsonValue)(req.body.params) : req.body.params);
131
- const sendRpc = (payload, status = 200) => {
132
- res.set('X-Content-Type-Options', 'nosniff');
133
- // Normalize with the negotiated binary replacer, then let Express emit
134
- // the JSON response through its escaping-aware JSON sink.
135
- return res.status(status).json(JSON.parse((0, BinaryJson_1.stringifyJsonRpc)(payload, useBinary)));
136
- };
137
- // Basic JSON-RPC protocol checks:
138
- if (jsonrpc !== '2.0' || !method || typeof method !== 'string') {
139
- return sendRpc({ error: { code: -32600, message: 'Invalid Request' } }, 400);
140
- }
141
- let logObj;
142
- if (this.logRpcRequests) {
143
- logObj = {
144
- source: 'StorageServer POST handler',
145
- method,
146
- id,
147
- user: req.auth.identityKey,
148
- params: JSON.stringify(params || '').slice(0, 256)
149
- };
150
- const traceContext = (req.headers['X-Cloud-Trace-Context'] || req.headers['x-cloud-trace-context'])?.split('/')[0];
151
- if (traceContext) {
152
- logObj['logging.googleapis.com/trace'] = `projects/computing-with-integrity/traces/${traceContext}`;
245
+ this.app.put('/action-batch/:batchId/pack', async (req, res) => {
246
+ try {
247
+ const auth = await this.authenticatedAuth(req, true);
248
+ const batchId = String(req.params.batchId);
249
+ // Express types request bodies as `any`, and other body parsers can
250
+ // produce strings, arrays, or objects. Keep the runtime narrowing
251
+ // inline so both the transport and static data-flow analysis can see
252
+ // that only a real byte view reaches the binary pack decoder.
253
+ const rawBody = req.body;
254
+ if (typeof rawBody !== 'object' || rawBody === null || !(rawBody instanceof Uint8Array)) {
255
+ throw new TypeError('binary action batch body required');
153
256
  }
154
- console.log(JSON.stringify(logObj));
257
+ // Re-wrap without copying. Besides normalizing Buffer subclasses,
258
+ // this makes the decoder's runtime type independent of req.body.
259
+ const body = new Uint8Array(rawBody.buffer, rawBody.byteOffset, rawBody.byteLength);
260
+ const requestedEncoding = req.header(actionBatchPack_1.ACTION_BATCH_PACK_ENCODING_HEADER) ?? 'identity';
261
+ const encoding = (0, actionBatchPack_1.supportedActionBatchPackEncodings)().find(candidate => candidate === requestedEncoding);
262
+ if (encoding == null)
263
+ throw new TypeError(`unsupported action batch pack encoding ${requestedEncoding}`);
264
+ const frame = await (0, actionBatchPack_1.decompressActionBatchPack)(body, encoding, actionBatchBlobs_1.ACTION_BATCH_MAX_PACK_BYTES);
265
+ const items = (0, actionBatchPack_1.decodeActionBatchPack)(frame, actionBatchBlobs_1.ACTION_BATCH_MAX_PACK_BYTES, actionBatchBlobs_1.ACTION_BATCH_MAX_PACK_ITEMS);
266
+ await this.storage.putActionBatchPack(auth, {
267
+ batchId,
268
+ items,
269
+ maxPackBytes: actionBatchBlobs_1.ACTION_BATCH_MAX_PACK_BYTES,
270
+ maxItems: actionBatchBlobs_1.ACTION_BATCH_MAX_PACK_ITEMS
271
+ });
272
+ res.status(200).json({ uploaded: true });
155
273
  }
274
+ catch (error) {
275
+ const json = WalletError_1.WalletError.unknownToJson(error);
276
+ res.status(400).json(JSON.parse(json));
277
+ }
278
+ });
279
+ this.app.put('/action-batch/:batchId/blob/:digest', async (req, res) => {
156
280
  try {
157
- // Dispatch the method call:
158
- if (typeof this[method] === 'function') {
159
- // if you wanted to handle certain methods on the server class itself
160
- // e.g. this['someServerMethod'](params)
161
- throw new TypeError('Server method dispatch not used in this approach.');
162
- }
163
- else if (typeof this.storage[method] === 'function') {
164
- // method is on the walletStorage:
165
- // Find user
166
- switch (method) {
167
- case 'destroy': {
168
- if (logObj != null) {
169
- logObj.result = undefined;
170
- logObj.comment = 'IGNORED';
171
- console.log(JSON.stringify(logObj));
172
- }
173
- return sendRpc({ jsonrpc: '2.0', result: undefined, id });
174
- }
175
- case 'getSettings':
176
- /** */
177
- break;
178
- case 'findOrInsertUser':
179
- if (params[0] !== req.auth.identityKey) {
180
- throw new WERR_errors_1.WERR_UNAUTHORIZED('function may only access authenticated user.');
181
- }
182
- break;
183
- case 'adminStats':
184
- // Add check for admin user
185
- if (params[0] !== req.auth.identityKey) {
186
- throw new WERR_errors_1.WERR_UNAUTHORIZED('function may only access authenticated admin user.');
187
- }
188
- if (!this.adminIdentityKeys?.includes(req.auth.identityKey)) {
189
- throw new WERR_errors_1.WERR_UNAUTHORIZED('function may only be accessed by admin user.');
190
- }
191
- break;
192
- case 'processSyncChunk': {
193
- await this.validateParam0(params, req);
194
- // const args: RequestSyncChunkArgs = params[0]
195
- const r = params[1];
196
- (0, entityValidationHelpers_1.validateSyncChunkEntities)(r);
197
- break;
198
- }
199
- default:
200
- await this.validateParam0(params, req);
201
- break;
202
- }
203
- // If makeLogger is valid, setup and potentially initialize to return data
204
- let logger;
205
- if ((this.makeLogger != null) && typeof params[1] === 'object') {
206
- logger = this.makeLogger(params[1].logger);
207
- params[1].logger = logger;
208
- logger.group(`StorageSever ${method}`);
209
- const userId = params[0]?.userId;
210
- const identityKey = params[0]?.identityKey;
211
- if (userId)
212
- logger.log(`userId: ${userId}`);
213
- if (identityKey)
214
- logger.log(`identityKey: ${identityKey}`);
215
- }
216
- try {
217
- const result = await this.storage[method](...(params || []));
218
- if (logger != null) {
219
- logger.groupEnd();
220
- logger.flush?.();
221
- if (logger.isOrigin) {
222
- // Potentially only flush if isOrigin...
223
- }
224
- else if ((logger.logs != null) && typeof result === 'object') {
225
- // If not the start of logging, return logged data with result.
226
- result.log = { logs: logger.logs };
227
- }
228
- }
229
- return sendRpc({ jsonrpc: '2.0', result, id });
230
- }
231
- catch (error_) {
232
- (0, WalletLogger_1.logWalletError)(error_, logger, 'error executing requested method');
233
- logger?.flush?.();
234
- throw error_;
235
- }
236
- }
237
- else {
238
- // Unknown method
239
- return sendRpc({
240
- jsonrpc: '2.0',
241
- error: { code: -32601, message: `Method not found: ${method}` },
242
- id
243
- }, 400);
244
- }
281
+ const auth = await this.authenticatedAuth(req, true);
282
+ const batchId = String(req.params.batchId);
283
+ const digest = String(req.params.digest);
284
+ const body = req.body;
285
+ if (!(body instanceof Uint8Array))
286
+ throw new TypeError('binary action batch body required');
287
+ await this.storage.putActionBatchBlob(auth, { batchId, digest, bytes: body });
288
+ res.status(200).json({ uploaded: true });
245
289
  }
246
290
  catch (error) {
247
- /**
248
- * Catch any thrown errors from the local walletStorage method.
249
- *
250
- * Convert errors to standard JSON object format that can be converted
251
- * back to WalletError derived objects on the client side and re-thrown.
252
- *
253
- * Uses WalletError.fromJson(<error object>) on the client side to re-create
254
- * an error object of the right class and properties.
255
- */
256
291
  const json = WalletError_1.WalletError.unknownToJson(error);
257
- return sendRpc({
292
+ res.status(400).json(JSON.parse(json));
293
+ }
294
+ });
295
+ // A single POST endpoint for JSON-RPC:
296
+ this.app.post('/', this.handleRpcRequest.bind(this));
297
+ }
298
+ async handleRpcRequest(req, res) {
299
+ if (!this.telemetry.enabled)
300
+ return await this.handleRpcRequestCore(req, res);
301
+ return await this.telemetry.withSpan('wallet.storage.rpc', {
302
+ component: 'wallet-storage-server',
303
+ kind: 'server',
304
+ carrier: req,
305
+ attributes: {
306
+ 'rpc.system': 'wallet-storage',
307
+ 'rpc.method': typeof req.body?.method === 'string' ? req.body.method : 'invalid'
308
+ }
309
+ }, async (span) => await this.handleRpcRequestCore(req, res, span));
310
+ }
311
+ async handleRpcRequestCore(req, res, rpcSpan) {
312
+ const useBinary = req.header(BinaryJson_1.BINARY_ENCODING_HEADER) === BinaryJson_1.BINARY_ENCODING;
313
+ const requestUsesBinary = req.header(BinaryJson_1.BINARY_REQUEST_ENCODING_HEADER) === BinaryJson_1.BINARY_ENCODING;
314
+ if (useBinary)
315
+ res.set(BinaryJson_1.BINARY_ENCODING_HEADER, BinaryJson_1.BINARY_ENCODING);
316
+ const { jsonrpc, method, id } = req.body;
317
+ const params = (requestUsesBinary ? (0, BinaryJson_1.decodeBinaryJsonValue)(req.body.params) : req.body.params);
318
+ if (jsonrpc !== '2.0' || !method || typeof method !== 'string') {
319
+ return this.sendRpc(res, useBinary, { error: { code: -32600, message: 'Invalid Request' } }, 400);
320
+ }
321
+ const logObj = this.createRpcLog(req, method, id, params);
322
+ try {
323
+ const dispatch = await this.dispatchRpcCall(method, params, req, logObj, rpcSpan);
324
+ if (!dispatch.found) {
325
+ return this.sendRpc(res, useBinary, {
258
326
  jsonrpc: '2.0',
259
- error: JSON.parse(json),
327
+ error: { code: -32601, message: `Method not found: ${method}` },
260
328
  id
261
- });
329
+ }, 400);
330
+ }
331
+ return this.sendRpc(res, useBinary, { jsonrpc: '2.0', result: dispatch.result, id });
332
+ }
333
+ catch (error) {
334
+ return this.sendRpcError(res, useBinary, id, error);
335
+ }
336
+ }
337
+ traceHttpRequest(req, res, next) {
338
+ const span = this.telemetry.startSpan('wallet.storage.http.request', {
339
+ component: 'wallet-storage-server',
340
+ kind: 'server',
341
+ parent: (0, traceContext_1.parseTraceparent)(req.headers.traceparent),
342
+ carrier: req,
343
+ attributes: {
344
+ 'http.request.method': req.method,
345
+ 'http.request.body_size': Number(req.headers['content-length'] ?? 0),
346
+ 'network.protocol': 'http'
262
347
  }
263
348
  });
349
+ span.bind(req);
350
+ let ended = false;
351
+ const end = (status) => {
352
+ if (ended)
353
+ return;
354
+ ended = true;
355
+ span.end({
356
+ status,
357
+ attributes: {
358
+ 'http.response.status_code': res.statusCode
359
+ }
360
+ });
361
+ };
362
+ res.once('finish', () => {
363
+ end(res.statusCode >= 500 ? 'error' : 'ok');
364
+ });
365
+ res.once('close', () => {
366
+ end(res.writableEnded ? 'ok' : 'cancelled');
367
+ });
368
+ next();
369
+ }
370
+ sendRpc(res, useBinary, payload, status = 200) {
371
+ res.set('X-Content-Type-Options', 'nosniff');
372
+ // Normalize with the negotiated binary replacer, then let Express emit
373
+ // the JSON response through its escaping-aware JSON sink.
374
+ return res.status(status).json(JSON.parse((0, BinaryJson_1.stringifyJsonRpc)(payload, useBinary)));
375
+ }
376
+ sendRpcError(res, useBinary, id, error) {
377
+ /**
378
+ * Convert errors to standard JSON object format that can be converted back
379
+ * to WalletError derived objects on the client side and re-thrown.
380
+ */
381
+ const json = WalletError_1.WalletError.unknownToJson(error);
382
+ return this.sendRpc(res, useBinary, {
383
+ jsonrpc: '2.0',
384
+ error: JSON.parse(json),
385
+ id
386
+ });
387
+ }
388
+ createRpcLog(req, method, id, params) {
389
+ if (!this.logRpcRequests)
390
+ return undefined;
391
+ const logObj = {
392
+ source: 'StorageServer POST handler',
393
+ method,
394
+ requestIdType: typeof id,
395
+ authenticated: requiredAuthenticatedIdentityKey(req) !== '',
396
+ parameterCount: Array.isArray(params) ? params.length : 0
397
+ };
398
+ const traceContext = this.telemetry.contextFor(req)?.traceId ??
399
+ (0, traceContext_1.parseTraceparent)(firstRequestHeader(req, 'traceparent'))?.traceId ??
400
+ firstRequestHeader(req, 'X-Cloud-Trace-Context')?.split('/')[0];
401
+ if (traceContext) {
402
+ logObj['logging.googleapis.com/trace'] = `projects/computing-with-integrity/traces/${traceContext}`;
403
+ }
404
+ console.log(JSON.stringify(logObj));
405
+ return logObj;
406
+ }
407
+ async dispatchRpcCall(method, params, req, logObj, rpcSpan) {
408
+ if (!storageRpcMethods.has(method))
409
+ return { found: false };
410
+ const storageMethod = method === 'findOutputBaskets' ? 'findOutputBasketsAuth' : method;
411
+ const storageHandler = this.storage[storageMethod];
412
+ if (typeof storageHandler !== 'function')
413
+ return { found: false };
414
+ const shouldInvoke = await this.traceRpcStep('wallet.storage.authorize', rpcSpan, async () => await this.authorizeRpcCall(method, params, req, logObj), { 'rpc.method': method });
415
+ if (!shouldInvoke)
416
+ return { found: true, result: undefined };
417
+ const logger = this.createRpcLogger(method, params);
418
+ try {
419
+ const result = await this.traceRpcStep('wallet.storage.handler', rpcSpan, async () => await storageHandler.call(this.storage, ...params), { 'rpc.method': method });
420
+ this.finishRpcLogging(logger, result);
421
+ return { found: true, result };
422
+ }
423
+ catch (error) {
424
+ (0, WalletLogger_1.logWalletError)(error, logger, 'error executing requested method');
425
+ logger?.flush?.();
426
+ throw error;
427
+ }
428
+ }
429
+ async traceRpcStep(name, parent, callback, attributes) {
430
+ if (parent == null)
431
+ return await callback();
432
+ return await this.telemetry.withSpan(name, {
433
+ component: 'wallet-storage-server',
434
+ kind: 'server',
435
+ parent: parent.context,
436
+ attributes
437
+ }, callback);
438
+ }
439
+ async authorizeRpcCall(method, params, req, logObj) {
440
+ switch (method) {
441
+ case 'destroy':
442
+ this.logIgnoredDestroy(logObj);
443
+ return false;
444
+ case 'getSettings':
445
+ return true;
446
+ case 'findOrInsertUser':
447
+ if (params[0] !== requiredAuthenticatedIdentityKey(req)) {
448
+ throw new WERR_errors_1.WERR_UNAUTHORIZED('function may only access authenticated user.');
449
+ }
450
+ return true;
451
+ case 'adminStats':
452
+ this.authorizeAdminStats(params, req);
453
+ return true;
454
+ case 'processSyncChunk':
455
+ await this.validateParam0(params, req);
456
+ (0, entityValidationHelpers_1.validateSyncChunkEntities)(params[1]);
457
+ return true;
458
+ default:
459
+ await this.authorizeStandardRpcCall(method, params, req);
460
+ return true;
461
+ }
462
+ }
463
+ logIgnoredDestroy(logObj) {
464
+ if (logObj == null)
465
+ return;
466
+ logObj.result = undefined;
467
+ logObj.comment = 'IGNORED';
468
+ console.log(JSON.stringify(logObj));
469
+ }
470
+ authorizeAdminStats(params, req) {
471
+ const identityKey = requiredAuthenticatedIdentityKey(req);
472
+ if (params[0] !== identityKey) {
473
+ throw new WERR_errors_1.WERR_UNAUTHORIZED('function may only access authenticated admin user.');
474
+ }
475
+ if (!this.adminIdentityKeys?.includes(identityKey)) {
476
+ throw new WERR_errors_1.WERR_UNAUTHORIZED('function may only be accessed by admin user.');
477
+ }
478
+ }
479
+ async authorizeStandardRpcCall(method, params, req) {
480
+ if (authIdRpcMethods.has(method)) {
481
+ await this.bindAuthenticatedAuth(params, req, actionBatchRpcMethods.has(method));
482
+ return;
483
+ }
484
+ await this.validateParam0(params, req);
485
+ }
486
+ createRpcLogger(method, params) {
487
+ if (this.makeLogger == null || params[1] == null || typeof params[1] !== 'object')
488
+ return undefined;
489
+ const logger = this.makeLogger(params[1].logger);
490
+ params[1].logger = logger;
491
+ logger.group(`StorageSever ${method}`);
492
+ const userId = params[0]?.userId;
493
+ const identityKey = params[0]?.identityKey;
494
+ if (userId)
495
+ logger.log(`userId: ${userId}`);
496
+ if (identityKey)
497
+ logger.log(`identityKey: ${identityKey}`);
498
+ return logger;
499
+ }
500
+ finishRpcLogging(logger, result) {
501
+ if (logger == null)
502
+ return;
503
+ logger.groupEnd();
504
+ logger.flush?.();
505
+ if (!logger.isOrigin && logger.logs != null && result != null && typeof result === 'object') {
506
+ // If this is not the start of logging, return logged data with the result.
507
+ result.log = { logs: logger.logs };
508
+ }
509
+ }
510
+ async authenticatedAuth(req, requireActive) {
511
+ const identityKey = requiredAuthenticatedIdentityKey(req);
512
+ const { user } = await this.storage.findOrInsertUser(identityKey);
513
+ const isActive = user.activeStorage === this.storage.getSettings().storageIdentityKey;
514
+ if (requireActive && !isActive) {
515
+ throw new WERR_errors_1.WERR_NOT_ACTIVE("action batch methods require the authenticated user's active storage provider");
516
+ }
517
+ return {
518
+ identityKey,
519
+ userId: user.userId,
520
+ isActive
521
+ };
522
+ }
523
+ async bindAuthenticatedAuth(params, req, requireActive) {
524
+ if (!Array.isArray(params))
525
+ throw new WERR_errors_1.WERR_UNAUTHORIZED('authenticated RPC parameters are required');
526
+ const claimed = typeof params[0] === 'object' && params[0] != null ? params[0] : {};
527
+ const identityKey = requiredAuthenticatedIdentityKey(req);
528
+ if (claimed.identityKey != null && claimed.identityKey !== identityKey) {
529
+ throw new WERR_errors_1.WERR_UNAUTHORIZED('identityKey does not match authentication');
530
+ }
531
+ const auth = await this.authenticatedAuth(req, requireActive);
532
+ params[0] = {
533
+ ...claimed,
534
+ ...auth,
535
+ reqAuthUserId: auth.userId
536
+ };
264
537
  }
265
538
  async validateParam0(params, req) {
539
+ if (!Array.isArray(params))
540
+ throw new WERR_errors_1.WERR_UNAUTHORIZED('authenticated RPC parameters are required');
266
541
  if (typeof params[0] !== 'object' || !params[0]) {
267
- params = [{}];
542
+ params[0] = {};
268
543
  }
269
- if (params[0].identityKey && params[0].identityKey !== req.auth.identityKey) {
270
- throw new WERR_errors_1.WERR_UNAUTHORIZED('identityKey does not match authentiation');
544
+ const identityKey = requiredAuthenticatedIdentityKey(req);
545
+ if (params[0].identityKey && params[0].identityKey !== identityKey) {
546
+ throw new WERR_errors_1.WERR_UNAUTHORIZED('identityKey does not match authentication');
271
547
  }
272
- // console.log('looking up user with identityKey:', req.auth.identityKey)
273
- const { user } = await this.storage.findOrInsertUser(req.auth.identityKey);
548
+ // console.log('looking up user with identityKey:', identityKey)
549
+ const { user } = await this.storage.findOrInsertUser(identityKey);
274
550
  params[0].reqAuthUserId = user.userId;
275
- if (params[0].identityKey)
551
+ if (params[0].identityKey || params[0].userId != null)
276
552
  params[0].userId = user.userId;
277
553
  }
278
554
  server;
@@ -280,6 +556,7 @@ class StorageServer {
280
556
  this.server = this.app.listen(this.port, () => {
281
557
  console.log(`WalletStorageServer listening at http://localhost:${this.port}`);
282
558
  });
559
+ (0, edgePolicy_1.configureHttpServer)(this.server, 'WALLET_STORAGE', this.httpPolicy);
283
560
  }
284
561
  async close() {
285
562
  if (this.server) {
@@ -289,7 +566,9 @@ class StorageServer {
289
566
  }
290
567
  }
291
568
  /** @see {@link validateDate} */
292
- validateDate(date) { return (0, entityValidationHelpers_1.validateDate)(date); }
569
+ validateDate(date) {
570
+ return (0, entityValidationHelpers_1.validateDate)(date);
571
+ }
293
572
  /**
294
573
  * Helper to force uniform behavior across database engines.
295
574
  * Use to process all individual records with time stamps retreived from database.