@bsv/wallet-toolbox-client 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (390) hide show
  1. package/out/src/Wallet.d.ts +83 -0
  2. package/out/src/Wallet.d.ts.map +1 -0
  3. package/out/src/Wallet.js +415 -0
  4. package/out/src/Wallet.js.map +1 -0
  5. package/out/src/index.client.d.ts +8 -0
  6. package/out/src/index.client.d.ts.map +1 -0
  7. package/out/src/index.client.js +47 -0
  8. package/out/src/index.client.js.map +1 -0
  9. package/out/src/monitor/Monitor.d.ts +89 -0
  10. package/out/src/monitor/Monitor.d.ts.map +1 -0
  11. package/out/src/monitor/Monitor.js +253 -0
  12. package/out/src/monitor/Monitor.js.map +1 -0
  13. package/out/src/monitor/tasks/TaskCheckForProofs.d.ts +53 -0
  14. package/out/src/monitor/tasks/TaskCheckForProofs.d.ts.map +1 -0
  15. package/out/src/monitor/tasks/TaskCheckForProofs.js +197 -0
  16. package/out/src/monitor/tasks/TaskCheckForProofs.js.map +1 -0
  17. package/out/src/monitor/tasks/TaskClock.d.ts +14 -0
  18. package/out/src/monitor/tasks/TaskClock.d.ts.map +1 -0
  19. package/out/src/monitor/tasks/TaskClock.js +27 -0
  20. package/out/src/monitor/tasks/TaskClock.js.map +1 -0
  21. package/out/src/monitor/tasks/TaskFailAbandoned.d.ts +20 -0
  22. package/out/src/monitor/tasks/TaskFailAbandoned.d.ts.map +1 -0
  23. package/out/src/monitor/tasks/TaskFailAbandoned.js +52 -0
  24. package/out/src/monitor/tasks/TaskFailAbandoned.js.map +1 -0
  25. package/out/src/monitor/tasks/TaskNewHeader.d.ts +15 -0
  26. package/out/src/monitor/tasks/TaskNewHeader.d.ts.map +1 -0
  27. package/out/src/monitor/tasks/TaskNewHeader.js +45 -0
  28. package/out/src/monitor/tasks/TaskNewHeader.js.map +1 -0
  29. package/out/src/monitor/tasks/TaskPurge.d.ts +45 -0
  30. package/out/src/monitor/tasks/TaskPurge.d.ts.map +1 -0
  31. package/out/src/monitor/tasks/TaskPurge.js +35 -0
  32. package/out/src/monitor/tasks/TaskPurge.js.map +1 -0
  33. package/out/src/monitor/tasks/TaskReviewStatus.d.ts +26 -0
  34. package/out/src/monitor/tasks/TaskReviewStatus.d.ts.map +1 -0
  35. package/out/src/monitor/tasks/TaskReviewStatus.js +44 -0
  36. package/out/src/monitor/tasks/TaskReviewStatus.js.map +1 -0
  37. package/out/src/monitor/tasks/TaskSendWaiting.d.ts +32 -0
  38. package/out/src/monitor/tasks/TaskSendWaiting.d.ts.map +1 -0
  39. package/out/src/monitor/tasks/TaskSendWaiting.js +99 -0
  40. package/out/src/monitor/tasks/TaskSendWaiting.js.map +1 -0
  41. package/out/src/monitor/tasks/TaskSyncWhenIdle.d.ts +12 -0
  42. package/out/src/monitor/tasks/TaskSyncWhenIdle.d.ts.map +1 -0
  43. package/out/src/monitor/tasks/TaskSyncWhenIdle.js +22 -0
  44. package/out/src/monitor/tasks/TaskSyncWhenIdle.js.map +1 -0
  45. package/out/src/monitor/tasks/WalletMonitorTask.d.ts +40 -0
  46. package/out/src/monitor/tasks/WalletMonitorTask.d.ts.map +1 -0
  47. package/out/src/monitor/tasks/WalletMonitorTask.js +37 -0
  48. package/out/src/monitor/tasks/WalletMonitorTask.js.map +1 -0
  49. package/out/src/sdk/CertOps.d.ts +66 -0
  50. package/out/src/sdk/CertOps.d.ts.map +1 -0
  51. package/out/src/sdk/CertOps.js +198 -0
  52. package/out/src/sdk/CertOps.js.map +1 -0
  53. package/out/src/sdk/PrivilegedKeyManager.d.ts +125 -0
  54. package/out/src/sdk/PrivilegedKeyManager.d.ts.map +1 -0
  55. package/out/src/sdk/PrivilegedKeyManager.js +293 -0
  56. package/out/src/sdk/PrivilegedKeyManager.js.map +1 -0
  57. package/out/src/sdk/StorageSyncReader.d.ts +121 -0
  58. package/out/src/sdk/StorageSyncReader.d.ts.map +1 -0
  59. package/out/src/sdk/StorageSyncReader.js +3 -0
  60. package/out/src/sdk/StorageSyncReader.js.map +1 -0
  61. package/out/src/sdk/StorageSyncReaderWriter.d.ts +89 -0
  62. package/out/src/sdk/StorageSyncReaderWriter.d.ts.map +1 -0
  63. package/out/src/sdk/StorageSyncReaderWriter.js +3 -0
  64. package/out/src/sdk/StorageSyncReaderWriter.js.map +1 -0
  65. package/out/src/sdk/WERR_errors.d.ts +90 -0
  66. package/out/src/sdk/WERR_errors.d.ts.map +1 -0
  67. package/out/src/sdk/WERR_errors.js +128 -0
  68. package/out/src/sdk/WERR_errors.js.map +1 -0
  69. package/out/src/sdk/WalletError.d.ts +45 -0
  70. package/out/src/sdk/WalletError.d.ts.map +1 -0
  71. package/out/src/sdk/WalletError.js +122 -0
  72. package/out/src/sdk/WalletError.js.map +1 -0
  73. package/out/src/sdk/WalletServices.interfaces.d.ts +325 -0
  74. package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -0
  75. package/out/src/sdk/WalletServices.interfaces.js +3 -0
  76. package/out/src/sdk/WalletServices.interfaces.js.map +1 -0
  77. package/out/src/sdk/WalletSigner.interfaces.d.ts +10 -0
  78. package/out/src/sdk/WalletSigner.interfaces.d.ts.map +1 -0
  79. package/out/src/sdk/WalletSigner.interfaces.js +3 -0
  80. package/out/src/sdk/WalletSigner.interfaces.js.map +1 -0
  81. package/out/src/sdk/WalletStorage.interfaces.d.ts +299 -0
  82. package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -0
  83. package/out/src/sdk/WalletStorage.interfaces.js +3 -0
  84. package/out/src/sdk/WalletStorage.interfaces.js.map +1 -0
  85. package/out/src/sdk/index.d.ts +12 -0
  86. package/out/src/sdk/index.d.ts.map +1 -0
  87. package/out/src/sdk/index.js +28 -0
  88. package/out/src/sdk/index.js.map +1 -0
  89. package/out/src/sdk/types.d.ts +74 -0
  90. package/out/src/sdk/types.d.ts.map +1 -0
  91. package/out/src/sdk/types.js +20 -0
  92. package/out/src/sdk/types.js.map +1 -0
  93. package/out/src/sdk/validationHelpers.d.ts +288 -0
  94. package/out/src/sdk/validationHelpers.d.ts.map +1 -0
  95. package/out/src/sdk/validationHelpers.js +630 -0
  96. package/out/src/sdk/validationHelpers.js.map +1 -0
  97. package/out/src/services/ServiceCollection.d.ts +25 -0
  98. package/out/src/services/ServiceCollection.d.ts.map +1 -0
  99. package/out/src/services/ServiceCollection.js +43 -0
  100. package/out/src/services/ServiceCollection.js.map +1 -0
  101. package/out/src/services/Services.d.ts +60 -0
  102. package/out/src/services/Services.d.ts.map +1 -0
  103. package/out/src/services/Services.js +342 -0
  104. package/out/src/services/Services.js.map +1 -0
  105. package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts +15 -0
  106. package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -0
  107. package/out/src/services/chaintracker/ChaintracksChainTracker.js +51 -0
  108. package/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -0
  109. package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts +98 -0
  110. package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts.map +1 -0
  111. package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js +38 -0
  112. package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js.map +1 -0
  113. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts +36 -0
  114. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts.map +1 -0
  115. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js +130 -0
  116. package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js.map +1 -0
  117. package/out/src/services/chaintracker/chaintracks/index.d.ts +3 -0
  118. package/out/src/services/chaintracker/chaintracks/index.d.ts.map +1 -0
  119. package/out/src/services/chaintracker/chaintracks/index.js +19 -0
  120. package/out/src/services/chaintracker/chaintracks/index.js.map +1 -0
  121. package/out/src/services/chaintracker/index.d.ts +3 -0
  122. package/out/src/services/chaintracker/index.d.ts.map +1 -0
  123. package/out/src/services/chaintracker/index.js +19 -0
  124. package/out/src/services/chaintracker/index.js.map +1 -0
  125. package/out/src/services/createDefaultWalletServicesOptions.d.ts +3 -0
  126. package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -0
  127. package/out/src/services/createDefaultWalletServicesOptions.js +34 -0
  128. package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -0
  129. package/out/src/services/providers/arcServices.d.ts +62 -0
  130. package/out/src/services/providers/arcServices.d.ts.map +1 -0
  131. package/out/src/services/providers/arcServices.js +368 -0
  132. package/out/src/services/providers/arcServices.js.map +1 -0
  133. package/out/src/services/providers/echangeRates.d.ts +12 -0
  134. package/out/src/services/providers/echangeRates.d.ts.map +1 -0
  135. package/out/src/services/providers/echangeRates.js +237 -0
  136. package/out/src/services/providers/echangeRates.js.map +1 -0
  137. package/out/src/services/providers/whatsonchain.d.ts +17 -0
  138. package/out/src/services/providers/whatsonchain.d.ts.map +1 -0
  139. package/out/src/services/providers/whatsonchain.js +130 -0
  140. package/out/src/services/providers/whatsonchain.js.map +1 -0
  141. package/out/src/signer/WalletSigner.d.ts +11 -0
  142. package/out/src/signer/WalletSigner.d.ts.map +1 -0
  143. package/out/src/signer/WalletSigner.js +13 -0
  144. package/out/src/signer/WalletSigner.js.map +1 -0
  145. package/out/src/signer/methods/acquireDirectCertificate.d.ts +4 -0
  146. package/out/src/signer/methods/acquireDirectCertificate.d.ts.map +1 -0
  147. package/out/src/signer/methods/acquireDirectCertificate.js +47 -0
  148. package/out/src/signer/methods/acquireDirectCertificate.js.map +1 -0
  149. package/out/src/signer/methods/createAction.d.ts +7 -0
  150. package/out/src/signer/methods/createAction.d.ts.map +1 -0
  151. package/out/src/signer/methods/createAction.js +250 -0
  152. package/out/src/signer/methods/createAction.js.map +1 -0
  153. package/out/src/signer/methods/internalizeAction.d.ts +31 -0
  154. package/out/src/signer/methods/internalizeAction.d.ts.map +1 -0
  155. package/out/src/signer/methods/internalizeAction.js +95 -0
  156. package/out/src/signer/methods/internalizeAction.js.map +1 -0
  157. package/out/src/signer/methods/proveCertificate.d.ts +4 -0
  158. package/out/src/signer/methods/proveCertificate.d.ts.map +1 -0
  159. package/out/src/signer/methods/proveCertificate.js +45 -0
  160. package/out/src/signer/methods/proveCertificate.js.map +1 -0
  161. package/out/src/signer/methods/signAction.d.ts +6 -0
  162. package/out/src/signer/methods/signAction.d.ts.map +1 -0
  163. package/out/src/signer/methods/signAction.js +79 -0
  164. package/out/src/signer/methods/signAction.js.map +1 -0
  165. package/out/src/storage/StorageProvider.d.ts +140 -0
  166. package/out/src/storage/StorageProvider.d.ts.map +1 -0
  167. package/out/src/storage/StorageProvider.js +539 -0
  168. package/out/src/storage/StorageProvider.js.map +1 -0
  169. package/out/src/storage/StorageReader.d.ts +76 -0
  170. package/out/src/storage/StorageReader.d.ts.map +1 -0
  171. package/out/src/storage/StorageReader.js +124 -0
  172. package/out/src/storage/StorageReader.js.map +1 -0
  173. package/out/src/storage/StorageReaderWriter.d.ts +87 -0
  174. package/out/src/storage/StorageReaderWriter.d.ts.map +1 -0
  175. package/out/src/storage/StorageReaderWriter.js +337 -0
  176. package/out/src/storage/StorageReaderWriter.js.map +1 -0
  177. package/out/src/storage/StorageSyncReader.d.ts +33 -0
  178. package/out/src/storage/StorageSyncReader.d.ts.map +1 -0
  179. package/out/src/storage/StorageSyncReader.js +142 -0
  180. package/out/src/storage/StorageSyncReader.js.map +1 -0
  181. package/out/src/storage/WalletStorageManager.d.ts +103 -0
  182. package/out/src/storage/WalletStorageManager.d.ts.map +1 -0
  183. package/out/src/storage/WalletStorageManager.js +408 -0
  184. package/out/src/storage/WalletStorageManager.js.map +1 -0
  185. package/out/src/storage/index.client.d.ts +7 -0
  186. package/out/src/storage/index.client.d.ts.map +1 -0
  187. package/out/src/storage/index.client.js +46 -0
  188. package/out/src/storage/index.client.js.map +1 -0
  189. package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts +27 -0
  190. package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts.map +1 -0
  191. package/out/src/storage/methods/attemptToPostReqsToNetwork.js +148 -0
  192. package/out/src/storage/methods/attemptToPostReqsToNetwork.js.map +1 -0
  193. package/out/src/storage/methods/createAction.d.ts +23 -0
  194. package/out/src/storage/methods/createAction.d.ts.map +1 -0
  195. package/out/src/storage/methods/createAction.js +663 -0
  196. package/out/src/storage/methods/createAction.js.map +1 -0
  197. package/out/src/storage/methods/generateChange.d.ts +108 -0
  198. package/out/src/storage/methods/generateChange.d.ts.map +1 -0
  199. package/out/src/storage/methods/generateChange.js +422 -0
  200. package/out/src/storage/methods/generateChange.js.map +1 -0
  201. package/out/src/storage/methods/getBeefForTransaction.d.ts +22 -0
  202. package/out/src/storage/methods/getBeefForTransaction.d.ts.map +1 -0
  203. package/out/src/storage/methods/getBeefForTransaction.js +94 -0
  204. package/out/src/storage/methods/getBeefForTransaction.js.map +1 -0
  205. package/out/src/storage/methods/getSyncChunk.d.ts +10 -0
  206. package/out/src/storage/methods/getSyncChunk.d.ts.map +1 -0
  207. package/out/src/storage/methods/getSyncChunk.js +271 -0
  208. package/out/src/storage/methods/getSyncChunk.js.map +1 -0
  209. package/out/src/storage/methods/internalizeAction.d.ts +38 -0
  210. package/out/src/storage/methods/internalizeAction.d.ts.map +1 -0
  211. package/out/src/storage/methods/internalizeAction.js +378 -0
  212. package/out/src/storage/methods/internalizeAction.js.map +1 -0
  213. package/out/src/storage/methods/listCertificates.d.ts +5 -0
  214. package/out/src/storage/methods/listCertificates.d.ts.map +1 -0
  215. package/out/src/storage/methods/listCertificates.js +68 -0
  216. package/out/src/storage/methods/listCertificates.js.map +1 -0
  217. package/out/src/storage/methods/processAction.d.ts +35 -0
  218. package/out/src/storage/methods/processAction.d.ts.map +1 -0
  219. package/out/src/storage/methods/processAction.js +271 -0
  220. package/out/src/storage/methods/processAction.js.map +1 -0
  221. package/out/src/storage/remoting/StorageClient.d.ts +56 -0
  222. package/out/src/storage/remoting/StorageClient.d.ts.map +1 -0
  223. package/out/src/storage/remoting/StorageClient.js +181 -0
  224. package/out/src/storage/remoting/StorageClient.js.map +1 -0
  225. package/out/src/storage/schema/entities/Certificate.d.ts +43 -0
  226. package/out/src/storage/schema/entities/Certificate.d.ts.map +1 -0
  227. package/out/src/storage/schema/entities/Certificate.js +162 -0
  228. package/out/src/storage/schema/entities/Certificate.js.map +1 -0
  229. package/out/src/storage/schema/entities/CertificateField.d.ts +32 -0
  230. package/out/src/storage/schema/entities/CertificateField.d.ts.map +1 -0
  231. package/out/src/storage/schema/entities/CertificateField.js +114 -0
  232. package/out/src/storage/schema/entities/CertificateField.js.map +1 -0
  233. package/out/src/storage/schema/entities/Commission.d.ts +37 -0
  234. package/out/src/storage/schema/entities/Commission.d.ts.map +1 -0
  235. package/out/src/storage/schema/entities/Commission.js +130 -0
  236. package/out/src/storage/schema/entities/Commission.js.map +1 -0
  237. package/out/src/storage/schema/entities/EntityBase.d.ts +105 -0
  238. package/out/src/storage/schema/entities/EntityBase.d.ts.map +1 -0
  239. package/out/src/storage/schema/entities/EntityBase.js +100 -0
  240. package/out/src/storage/schema/entities/EntityBase.js.map +1 -0
  241. package/out/src/storage/schema/entities/MergeEntity.d.ts +34 -0
  242. package/out/src/storage/schema/entities/MergeEntity.d.ts.map +1 -0
  243. package/out/src/storage/schema/entities/MergeEntity.js +57 -0
  244. package/out/src/storage/schema/entities/MergeEntity.js.map +1 -0
  245. package/out/src/storage/schema/entities/Output.d.ts +67 -0
  246. package/out/src/storage/schema/entities/Output.d.ts.map +1 -0
  247. package/out/src/storage/schema/entities/Output.js +281 -0
  248. package/out/src/storage/schema/entities/Output.js.map +1 -0
  249. package/out/src/storage/schema/entities/OutputBasket.d.ts +35 -0
  250. package/out/src/storage/schema/entities/OutputBasket.d.ts.map +1 -0
  251. package/out/src/storage/schema/entities/OutputBasket.js +133 -0
  252. package/out/src/storage/schema/entities/OutputBasket.js.map +1 -0
  253. package/out/src/storage/schema/entities/OutputTag.d.ts +31 -0
  254. package/out/src/storage/schema/entities/OutputTag.d.ts.map +1 -0
  255. package/out/src/storage/schema/entities/OutputTag.js +104 -0
  256. package/out/src/storage/schema/entities/OutputTag.js.map +1 -0
  257. package/out/src/storage/schema/entities/OutputTagMap.d.ts +28 -0
  258. package/out/src/storage/schema/entities/OutputTagMap.d.ts.map +1 -0
  259. package/out/src/storage/schema/entities/OutputTagMap.js +101 -0
  260. package/out/src/storage/schema/entities/OutputTagMap.js.map +1 -0
  261. package/out/src/storage/schema/entities/ProvenTx.d.ts +84 -0
  262. package/out/src/storage/schema/entities/ProvenTx.d.ts.map +1 -0
  263. package/out/src/storage/schema/entities/ProvenTx.js +283 -0
  264. package/out/src/storage/schema/entities/ProvenTx.js.map +1 -0
  265. package/out/src/storage/schema/entities/ProvenTxReq.d.ts +130 -0
  266. package/out/src/storage/schema/entities/ProvenTxReq.d.ts.map +1 -0
  267. package/out/src/storage/schema/entities/ProvenTxReq.js +521 -0
  268. package/out/src/storage/schema/entities/ProvenTxReq.js.map +1 -0
  269. package/out/src/storage/schema/entities/SyncState.d.ts +66 -0
  270. package/out/src/storage/schema/entities/SyncState.d.ts.map +1 -0
  271. package/out/src/storage/schema/entities/SyncState.js +284 -0
  272. package/out/src/storage/schema/entities/SyncState.js.map +1 -0
  273. package/out/src/storage/schema/entities/Transaction.d.ts +67 -0
  274. package/out/src/storage/schema/entities/Transaction.d.ts.map +1 -0
  275. package/out/src/storage/schema/entities/Transaction.js +264 -0
  276. package/out/src/storage/schema/entities/Transaction.js.map +1 -0
  277. package/out/src/storage/schema/entities/TxLabel.d.ts +31 -0
  278. package/out/src/storage/schema/entities/TxLabel.d.ts.map +1 -0
  279. package/out/src/storage/schema/entities/TxLabel.js +104 -0
  280. package/out/src/storage/schema/entities/TxLabel.js.map +1 -0
  281. package/out/src/storage/schema/entities/TxLabelMap.d.ts +28 -0
  282. package/out/src/storage/schema/entities/TxLabelMap.d.ts.map +1 -0
  283. package/out/src/storage/schema/entities/TxLabelMap.js +103 -0
  284. package/out/src/storage/schema/entities/TxLabelMap.js.map +1 -0
  285. package/out/src/storage/schema/entities/User.d.ts +29 -0
  286. package/out/src/storage/schema/entities/User.d.ts.map +1 -0
  287. package/out/src/storage/schema/entities/User.js +100 -0
  288. package/out/src/storage/schema/entities/User.js.map +1 -0
  289. package/out/src/storage/schema/entities/index.d.ts +17 -0
  290. package/out/src/storage/schema/entities/index.d.ts.map +1 -0
  291. package/out/src/storage/schema/entities/index.js +33 -0
  292. package/out/src/storage/schema/entities/index.js.map +1 -0
  293. package/out/src/storage/schema/tables/Certificate.d.ts +20 -0
  294. package/out/src/storage/schema/tables/Certificate.d.ts.map +1 -0
  295. package/out/src/storage/schema/tables/Certificate.js +3 -0
  296. package/out/src/storage/schema/tables/Certificate.js.map +1 -0
  297. package/out/src/storage/schema/tables/CertificateField.d.ts +12 -0
  298. package/out/src/storage/schema/tables/CertificateField.d.ts.map +1 -0
  299. package/out/src/storage/schema/tables/CertificateField.js +3 -0
  300. package/out/src/storage/schema/tables/CertificateField.js.map +1 -0
  301. package/out/src/storage/schema/tables/Commission.d.ts +13 -0
  302. package/out/src/storage/schema/tables/Commission.d.ts.map +1 -0
  303. package/out/src/storage/schema/tables/Commission.js +3 -0
  304. package/out/src/storage/schema/tables/Commission.js.map +1 -0
  305. package/out/src/storage/schema/tables/MonitorEvent.d.ts +9 -0
  306. package/out/src/storage/schema/tables/MonitorEvent.d.ts.map +1 -0
  307. package/out/src/storage/schema/tables/MonitorEvent.js +3 -0
  308. package/out/src/storage/schema/tables/MonitorEvent.js.map +1 -0
  309. package/out/src/storage/schema/tables/Output.d.ts +36 -0
  310. package/out/src/storage/schema/tables/Output.d.ts.map +1 -0
  311. package/out/src/storage/schema/tables/Output.js +31 -0
  312. package/out/src/storage/schema/tables/Output.js.map +1 -0
  313. package/out/src/storage/schema/tables/OutputBasket.d.ts +12 -0
  314. package/out/src/storage/schema/tables/OutputBasket.d.ts.map +1 -0
  315. package/out/src/storage/schema/tables/OutputBasket.js +3 -0
  316. package/out/src/storage/schema/tables/OutputBasket.js.map +1 -0
  317. package/out/src/storage/schema/tables/OutputTag.d.ts +10 -0
  318. package/out/src/storage/schema/tables/OutputTag.d.ts.map +1 -0
  319. package/out/src/storage/schema/tables/OutputTag.js +3 -0
  320. package/out/src/storage/schema/tables/OutputTag.js.map +1 -0
  321. package/out/src/storage/schema/tables/OutputTagMap.d.ts +9 -0
  322. package/out/src/storage/schema/tables/OutputTagMap.d.ts.map +1 -0
  323. package/out/src/storage/schema/tables/OutputTagMap.js +3 -0
  324. package/out/src/storage/schema/tables/OutputTagMap.js.map +1 -0
  325. package/out/src/storage/schema/tables/ProvenTx.d.ts +14 -0
  326. package/out/src/storage/schema/tables/ProvenTx.d.ts.map +1 -0
  327. package/out/src/storage/schema/tables/ProvenTx.js +3 -0
  328. package/out/src/storage/schema/tables/ProvenTx.js.map +1 -0
  329. package/out/src/storage/schema/tables/ProvenTxReq.d.ts +64 -0
  330. package/out/src/storage/schema/tables/ProvenTxReq.d.ts.map +1 -0
  331. package/out/src/storage/schema/tables/ProvenTxReq.js +3 -0
  332. package/out/src/storage/schema/tables/ProvenTxReq.js.map +1 -0
  333. package/out/src/storage/schema/tables/Settings.d.ts +17 -0
  334. package/out/src/storage/schema/tables/Settings.d.ts.map +1 -0
  335. package/out/src/storage/schema/tables/Settings.js +3 -0
  336. package/out/src/storage/schema/tables/Settings.js.map +1 -0
  337. package/out/src/storage/schema/tables/SyncState.d.ts +18 -0
  338. package/out/src/storage/schema/tables/SyncState.d.ts.map +1 -0
  339. package/out/src/storage/schema/tables/SyncState.js +3 -0
  340. package/out/src/storage/schema/tables/SyncState.js.map +1 -0
  341. package/out/src/storage/schema/tables/Transaction.d.ts +37 -0
  342. package/out/src/storage/schema/tables/Transaction.d.ts.map +1 -0
  343. package/out/src/storage/schema/tables/Transaction.js +21 -0
  344. package/out/src/storage/schema/tables/Transaction.js.map +1 -0
  345. package/out/src/storage/schema/tables/TxLabel.d.ts +10 -0
  346. package/out/src/storage/schema/tables/TxLabel.d.ts.map +1 -0
  347. package/out/src/storage/schema/tables/TxLabel.js +3 -0
  348. package/out/src/storage/schema/tables/TxLabel.js.map +1 -0
  349. package/out/src/storage/schema/tables/TxLabelMap.d.ts +9 -0
  350. package/out/src/storage/schema/tables/TxLabelMap.d.ts.map +1 -0
  351. package/out/src/storage/schema/tables/TxLabelMap.js +3 -0
  352. package/out/src/storage/schema/tables/TxLabelMap.js.map +1 -0
  353. package/out/src/storage/schema/tables/User.d.ts +16 -0
  354. package/out/src/storage/schema/tables/User.d.ts.map +1 -0
  355. package/out/src/storage/schema/tables/User.js +3 -0
  356. package/out/src/storage/schema/tables/User.js.map +1 -0
  357. package/out/src/storage/schema/tables/index.d.ts +17 -0
  358. package/out/src/storage/schema/tables/index.d.ts.map +1 -0
  359. package/out/src/storage/schema/tables/index.js +33 -0
  360. package/out/src/storage/schema/tables/index.js.map +1 -0
  361. package/out/src/utility/ScriptTemplateSABPPP.d.ts +25 -0
  362. package/out/src/utility/ScriptTemplateSABPPP.d.ts.map +1 -0
  363. package/out/src/utility/ScriptTemplateSABPPP.js +46 -0
  364. package/out/src/utility/ScriptTemplateSABPPP.js.map +1 -0
  365. package/out/src/utility/index.client.d.ts +7 -0
  366. package/out/src/utility/index.client.d.ts.map +1 -0
  367. package/out/src/utility/index.client.js +23 -0
  368. package/out/src/utility/index.client.js.map +1 -0
  369. package/out/src/utility/parseTxScriptOffsets.d.ts +14 -0
  370. package/out/src/utility/parseTxScriptOffsets.d.ts.map +1 -0
  371. package/out/src/utility/parseTxScriptOffsets.js +26 -0
  372. package/out/src/utility/parseTxScriptOffsets.js.map +1 -0
  373. package/out/src/utility/stampLog.d.ts +18 -0
  374. package/out/src/utility/stampLog.d.ts.map +1 -0
  375. package/out/src/utility/stampLog.js +72 -0
  376. package/out/src/utility/stampLog.js.map +1 -0
  377. package/out/src/utility/tscProofToMerklePath.d.ts +8 -0
  378. package/out/src/utility/tscProofToMerklePath.d.ts.map +1 -0
  379. package/out/src/utility/tscProofToMerklePath.js +41 -0
  380. package/out/src/utility/tscProofToMerklePath.js.map +1 -0
  381. package/out/src/utility/utilityHelpers.d.ts +129 -0
  382. package/out/src/utility/utilityHelpers.d.ts.map +1 -0
  383. package/out/src/utility/utilityHelpers.js +268 -0
  384. package/out/src/utility/utilityHelpers.js.map +1 -0
  385. package/out/src/utility/utilityHelpers.noBuffer.d.ts +9 -0
  386. package/out/src/utility/utilityHelpers.noBuffer.d.ts.map +1 -0
  387. package/out/src/utility/utilityHelpers.noBuffer.js +23 -0
  388. package/out/src/utility/utilityHelpers.noBuffer.js.map +1 -0
  389. package/out/tsconfig.client.tsbuildinfo +1 -0
  390. package/package.json +27 -0
@@ -0,0 +1,663 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAction = createAction;
4
+ exports.offsetPubKey = offsetPubKey;
5
+ exports.lockScriptWithKeyOffsetFromPubKey = lockScriptWithKeyOffsetFromPubKey;
6
+ exports.createStorageServiceChargeScript = createStorageServiceChargeScript;
7
+ const sdk_1 = require("@bsv/sdk");
8
+ const index_client_1 = require("../../index.client");
9
+ const generateChange_1 = require("./generateChange");
10
+ async function createAction(storage, auth, vargs, originator) {
11
+ //stampLog(vargs, `start storage createTransactionSdk`)
12
+ if (!vargs.isNewTx)
13
+ // The purpose of this function is to create the initial storage records associated
14
+ // with a new transaction. It's an error if we have no new inputs or outputs...
15
+ throw new index_client_1.sdk.WERR_INTERNAL();
16
+ /**
17
+ * Steps to create a transaction:
18
+ * - Verify that all inputs either have proof in vargs.inputBEEF or that options.trustSelf === 'known' and input txid.vout are known valid to storage.
19
+ * - Create a new transaction record with status 'unsigned' as the anchor for construction work and to new outputs.
20
+ * - Create all transaction labels.
21
+ * - Add new commission output
22
+ * - Attempt to fund the transaction by allocating change outputs:
23
+ * - As each change output is selected it is simultaneously locked.
24
+ * - Create all new output, basket, tag records
25
+ * - If requested, create result Beef with complete proofs for all inputs used
26
+ * - Create result inputs with source locking scripts
27
+ * - Create result outputs with new locking scripts.
28
+ * - Create and return result.
29
+ */
30
+ const userId = auth.userId;
31
+ const { storageBeef, beef, xinputs } = await validateRequiredInputs(storage, userId, vargs);
32
+ const xoutputs = validateRequiredOutputs(storage, userId, vargs);
33
+ const changeBasketName = 'default';
34
+ const changeBasket = (0, index_client_1.verifyOne)(await storage.findOutputBaskets({
35
+ partial: { userId, name: changeBasketName }
36
+ }), `Invalid outputGeneration basket "${changeBasketName}"`);
37
+ const noSendChangeIn = await validateNoSendChange(storage, userId, vargs, changeBasket);
38
+ const availableChangeCount = await storage.countChangeInputs(userId, changeBasket.basketId, !vargs.isDelayed);
39
+ const feeModel = (0, index_client_1.validateStorageFeeModel)(storage.feeModel);
40
+ const newTx = await createNewTxRecord(storage, userId, vargs, storageBeef);
41
+ const ctx = {
42
+ xinputs,
43
+ xoutputs,
44
+ changeBasket,
45
+ noSendChangeIn,
46
+ availableChangeCount,
47
+ feeModel,
48
+ transactionId: newTx.transactionId
49
+ };
50
+ const { allocatedChange, changeOutputs, derivationPrefix } = await fundNewTransactionSdk(storage, userId, vargs, ctx);
51
+ // The satoshis of the transaction is the satoshis we get back in change minus the satoshis we spend.
52
+ const satoshis = changeOutputs.reduce((a, e) => a + e.satoshis, 0) -
53
+ allocatedChange.reduce((a, e) => a + e.satoshis, 0);
54
+ await storage.updateTransaction(newTx.transactionId, { satoshis });
55
+ const { outputs, changeVouts } = await createNewOutputs(storage, userId, vargs, ctx, changeOutputs);
56
+ const inputBeef = await mergeAllocatedChangeBeefs(storage, userId, vargs, allocatedChange, beef);
57
+ const inputs = await createNewInputs(storage, userId, vargs, ctx, allocatedChange);
58
+ const r = {
59
+ reference: newTx.reference,
60
+ version: newTx.version,
61
+ lockTime: newTx.lockTime,
62
+ inputs,
63
+ outputs,
64
+ derivationPrefix,
65
+ inputBeef,
66
+ noSendChangeOutputVouts: vargs.isNoSend ? changeVouts : undefined
67
+ };
68
+ //stampLog(vargs, `end storage createTransactionSdk`)
69
+ return r;
70
+ }
71
+ function makeDefaultOutput(userId, transactionId, satoshis, vout) {
72
+ const now = new Date();
73
+ const output = {
74
+ created_at: now,
75
+ updated_at: now,
76
+ outputId: 0,
77
+ userId,
78
+ transactionId,
79
+ satoshis: satoshis,
80
+ vout,
81
+ basketId: undefined,
82
+ change: false,
83
+ customInstructions: undefined,
84
+ derivationPrefix: undefined,
85
+ derivationSuffix: undefined,
86
+ outputDescription: '',
87
+ lockingScript: undefined,
88
+ providedBy: 'you',
89
+ purpose: '',
90
+ senderIdentityKey: undefined,
91
+ spendable: true,
92
+ spendingDescription: undefined,
93
+ spentBy: undefined,
94
+ txid: undefined,
95
+ type: ''
96
+ };
97
+ return output;
98
+ }
99
+ async function createNewInputs(storage, userId, vargs, ctx, allocatedChange) {
100
+ const r = [];
101
+ const newInputs = [];
102
+ for (const i of ctx.xinputs) {
103
+ const o = i.output;
104
+ newInputs.push({ i, o });
105
+ if (o) {
106
+ await storage.updateOutput(o.outputId, {
107
+ spendable: false,
108
+ spentBy: ctx.transactionId,
109
+ spendingDescription: i.inputDescription
110
+ });
111
+ }
112
+ }
113
+ for (const o of allocatedChange) {
114
+ newInputs.push({ o, unlockLen: 107 });
115
+ }
116
+ let vin = -1;
117
+ for (const { i, o, unlockLen } of newInputs) {
118
+ vin++;
119
+ if (o) {
120
+ if (!i && !unlockLen)
121
+ throw new index_client_1.sdk.WERR_INTERNAL(`vin ${vin} non-fixedInput without unlockLen`);
122
+ const ri = {
123
+ vin,
124
+ sourceTxid: o.txid,
125
+ sourceVout: o.vout,
126
+ sourceSatoshis: o.satoshis,
127
+ sourceLockingScript: (0, index_client_1.asString)(o.lockingScript),
128
+ unlockingScriptLength: unlockLen ? unlockLen : i.unlockingScriptLength,
129
+ providedBy: i && o.providedBy === 'storage'
130
+ ? 'you-and-storage'
131
+ : o.providedBy,
132
+ type: o.type,
133
+ spendingDescription: o.spendingDescription || undefined,
134
+ derivationPrefix: o.derivationPrefix || undefined,
135
+ derivationSuffix: o.derivationSuffix || undefined,
136
+ senderIdentityKey: o.senderIdentityKey || undefined
137
+ };
138
+ r.push(ri);
139
+ }
140
+ else {
141
+ if (!i)
142
+ throw new index_client_1.sdk.WERR_INTERNAL(`vin ${vin} without output or xinput`);
143
+ // user specified input with no corresponding output being spent.
144
+ const ri = {
145
+ vin,
146
+ sourceTxid: i.outpoint.txid,
147
+ sourceVout: i.outpoint.vout,
148
+ sourceSatoshis: i.satoshis,
149
+ sourceLockingScript: i.lockingScript.toHex(),
150
+ unlockingScriptLength: i.unlockingScriptLength,
151
+ providedBy: 'you',
152
+ type: 'custom',
153
+ spendingDescription: undefined,
154
+ derivationPrefix: undefined,
155
+ derivationSuffix: undefined,
156
+ senderIdentityKey: undefined
157
+ };
158
+ r.push(ri);
159
+ }
160
+ }
161
+ return r;
162
+ }
163
+ async function createNewOutputs(storage, userId, vargs, ctx, changeOutputs) {
164
+ var _a;
165
+ const outputs = [];
166
+ // Lookup output baskets
167
+ const txBaskets = {};
168
+ for (const xo of ctx.xoutputs) {
169
+ if (xo.basket !== undefined && !txBaskets[xo.basket])
170
+ txBaskets[xo.basket] = await storage.findOrInsertOutputBasket(userId, xo.basket);
171
+ }
172
+ // Lookup output tags
173
+ const txTags = {};
174
+ for (const xo of ctx.xoutputs) {
175
+ for (const tag of xo.tags) {
176
+ txTags[tag] = await storage.findOrInsertOutputTag(userId, tag);
177
+ }
178
+ }
179
+ const newOutputs = [];
180
+ for (const xo of ctx.xoutputs) {
181
+ const lockingScript = (0, index_client_1.asArray)(xo.lockingScript);
182
+ if (xo.purpose === 'service-charge') {
183
+ const now = new Date();
184
+ await storage.insertCommission({
185
+ userId,
186
+ transactionId: ctx.transactionId,
187
+ lockingScript,
188
+ satoshis: xo.satoshis,
189
+ isRedeemed: false,
190
+ keyOffset: (0, index_client_1.verifyTruthy)(xo.keyOffset),
191
+ created_at: now,
192
+ updated_at: now,
193
+ commissionId: 0
194
+ });
195
+ const o = makeDefaultOutput(userId, ctx.transactionId, xo.satoshis, xo.vout);
196
+ o.lockingScript = lockingScript;
197
+ o.providedBy = 'storage';
198
+ o.purpose = 'storage-commission';
199
+ o.type = 'custom';
200
+ o.spendable = false;
201
+ newOutputs.push({ o, tags: [] });
202
+ }
203
+ else {
204
+ // The user wants tracking if they put their output in a basket
205
+ const basketId = !xo.basket ? undefined : txBaskets[xo.basket].basketId;
206
+ const o = makeDefaultOutput(userId, ctx.transactionId, xo.satoshis, xo.vout);
207
+ o.lockingScript = lockingScript;
208
+ o.basketId = basketId;
209
+ o.customInstructions = xo.customInstructions;
210
+ o.outputDescription = xo.outputDescription;
211
+ o.providedBy = xo.providedBy;
212
+ o.purpose = xo.purpose || '';
213
+ o.type = 'custom';
214
+ newOutputs.push({ o, tags: xo.tags });
215
+ }
216
+ }
217
+ for (const o of changeOutputs) {
218
+ o.spendable = true;
219
+ newOutputs.push({ o, tags: [] });
220
+ }
221
+ if (vargs.options.randomizeOutputs) {
222
+ const randomVals = [];
223
+ const nextRandomVal = () => {
224
+ let val = 0;
225
+ if (!randomVals || randomVals.length === 0) {
226
+ val = Math.random();
227
+ }
228
+ else {
229
+ val = randomVals.shift() || 0;
230
+ randomVals.push(val);
231
+ }
232
+ return val;
233
+ };
234
+ /** In-place array shuffle */
235
+ const shuffleArray = (array) => {
236
+ let currentIndex = array.length;
237
+ let temporaryValue;
238
+ let randomIndex;
239
+ while (currentIndex !== 0) {
240
+ randomIndex = Math.floor(nextRandomVal() * currentIndex);
241
+ currentIndex -= 1;
242
+ temporaryValue = array[currentIndex];
243
+ array[currentIndex] = array[randomIndex];
244
+ array[randomIndex] = temporaryValue;
245
+ }
246
+ return array;
247
+ };
248
+ let vout = -1;
249
+ const newVouts = Array(newOutputs.length);
250
+ for (let i = 0; i < newVouts.length; i++)
251
+ newVouts[i] = i;
252
+ shuffleArray(newVouts);
253
+ for (const no of newOutputs) {
254
+ vout++;
255
+ if (no.o.vout !== vout)
256
+ throw new index_client_1.sdk.WERR_INTERNAL(`new output ${vout} has out of order vout ${no.o.vout}`);
257
+ no.o.vout = newVouts[vout];
258
+ }
259
+ }
260
+ const changeVouts = [];
261
+ for (const { o, tags } of newOutputs) {
262
+ o.outputId = await storage.insertOutput(o);
263
+ if (o.change && o.purpose === 'change' && o.providedBy === 'storage')
264
+ changeVouts.push(o.vout);
265
+ // Add tags to the output
266
+ for (const tagName of tags) {
267
+ const tag = txTags[tagName];
268
+ await storage.findOrInsertOutputTagMap((0, index_client_1.verifyId)(o.outputId), (0, index_client_1.verifyId)(tag.outputTagId));
269
+ }
270
+ const ro = {
271
+ vout: (0, index_client_1.verifyTruthy)(o.vout),
272
+ satoshis: (0, index_client_1.verifyTruthy)(o.satoshis),
273
+ lockingScript: !o.lockingScript ? '' : (0, index_client_1.asString)(o.lockingScript),
274
+ providedBy: (0, index_client_1.verifyTruthy)(o.providedBy),
275
+ purpose: o.purpose || undefined,
276
+ basket: (_a = Object.values(txBaskets).find(b => b.basketId === o.basketId)) === null || _a === void 0 ? void 0 : _a.name,
277
+ tags: tags,
278
+ outputDescription: o.outputDescription,
279
+ derivationSuffix: o.derivationSuffix,
280
+ customInstructions: o.customInstructions
281
+ };
282
+ outputs.push(ro);
283
+ }
284
+ return { outputs, changeVouts };
285
+ }
286
+ async function createNewTxRecord(storage, userId, vargs, storageBeef) {
287
+ const now = new Date();
288
+ const newTx = {
289
+ created_at: now,
290
+ updated_at: now,
291
+ transactionId: 0,
292
+ version: vargs.version,
293
+ lockTime: vargs.lockTime,
294
+ status: 'unsigned',
295
+ reference: (0, index_client_1.randomBytesBase64)(12),
296
+ satoshis: 0, // updated after fundingTransaction
297
+ userId,
298
+ isOutgoing: true,
299
+ inputBEEF: storageBeef.toBinary(),
300
+ description: vargs.description,
301
+ txid: undefined,
302
+ rawTx: undefined
303
+ };
304
+ newTx.transactionId = await storage.insertTransaction(newTx);
305
+ for (const label of vargs.labels) {
306
+ const txLabel = await storage.findOrInsertTxLabel(userId, label);
307
+ await storage.findOrInsertTxLabelMap((0, index_client_1.verifyId)(newTx.transactionId), (0, index_client_1.verifyId)(txLabel.txLabelId));
308
+ }
309
+ return newTx;
310
+ }
311
+ /**
312
+ * Convert vargs.outputs:
313
+ *
314
+ * lockingScript: HexString
315
+ * satoshis: SatoshiValue
316
+ * outputDescription: DescriptionString5to50Bytes
317
+ * basket?: BasketStringUnder300Bytes
318
+ * customInstructions?: string
319
+ * tags: BasketStringUnderBytes[]
320
+ *
321
+ * to XValidCreateActionOutput (which aims for sdk.StorageCreateTransactionSdkOutput)
322
+ *
323
+ * adds:
324
+ * vout: number
325
+ * providedBy: sdk.StorageProvidedBy
326
+ * purpose?: string
327
+ * derivationSuffix?: string
328
+ * keyOffset?: string
329
+ *
330
+ * @param vargs
331
+ * @returns xoutputs
332
+ */
333
+ function validateRequiredOutputs(storage, userId, vargs) {
334
+ const xoutputs = [];
335
+ let vout = -1;
336
+ for (const output of vargs.outputs) {
337
+ vout++;
338
+ const xo = {
339
+ ...output,
340
+ vout,
341
+ providedBy: 'you',
342
+ purpose: undefined,
343
+ derivationSuffix: undefined,
344
+ keyOffset: undefined
345
+ };
346
+ xoutputs.push(xo);
347
+ }
348
+ if (storage.commissionSatoshis > 0 && storage.commissionPubKeyHex) {
349
+ vout++;
350
+ const { script, keyOffset } = createStorageServiceChargeScript(storage.commissionPubKeyHex);
351
+ xoutputs.push({
352
+ lockingScript: script,
353
+ satoshis: storage.commissionSatoshis,
354
+ outputDescription: 'Storage Service Charge',
355
+ basket: undefined,
356
+ tags: [],
357
+ vout,
358
+ providedBy: 'storage',
359
+ purpose: 'service-charge',
360
+ keyOffset
361
+ });
362
+ }
363
+ return xoutputs;
364
+ }
365
+ /**
366
+ * Verify that we are in posession of validity proof data for any inputs being proposed for a new transaction.
367
+ *
368
+ * `vargs.inputs` is the source of inputs.
369
+ * `vargs.inputBEEF` may include new user supplied validity data.
370
+ * 'vargs.options.trustSelf === 'known'` indicates whether we can rely on the storage database records.
371
+ *
372
+ * If there are no inputs, returns an empty `Beef`.
373
+ *
374
+ * Always pulls rawTx data into first level of validity chains so that parsed transaction data is available
375
+ * and checks input sourceSatoshis as well as filling in input sourceLockingScript.
376
+ *
377
+ * This data may be pruned again before being returned to the user based on `vargs.options.knownTxids`.
378
+ *
379
+ * @param storage
380
+ * @param userId
381
+ * @param vargs
382
+ * @returns {storageBeef} containing only validity proof data for only unknown required inputs.
383
+ * @returns {beef} containing verified validity proof data for all required inputs.
384
+ * @returns {xinputs} extended validated required inputs.
385
+ */
386
+ async function validateRequiredInputs(storage, userId, vargs) {
387
+ //stampLog(vargs, `start storage verifyInputBeef`)
388
+ const beef = new sdk_1.Beef();
389
+ if (vargs.inputs.length === 0)
390
+ return { storageBeef: beef, beef, xinputs: [] };
391
+ if (vargs.inputBEEF)
392
+ beef.mergeBeef(vargs.inputBEEF);
393
+ const xinputs = vargs.inputs.map((input, vin) => ({
394
+ ...input,
395
+ vin,
396
+ satoshis: -1,
397
+ lockingScript: new sdk_1.Script()
398
+ }));
399
+ const trustSelf = vargs.options.trustSelf === 'known';
400
+ const inputTxids = {};
401
+ for (const input of xinputs)
402
+ inputTxids[input.outpoint.txid] = true;
403
+ // Check beef from user that either there are no txidOnly entries,
404
+ // or that we can trust storage data and it does indeed vouch
405
+ // for any txidOnly entries
406
+ for (const btx of beef.txs) {
407
+ if (btx.isTxidOnly) {
408
+ if (!trustSelf)
409
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER('inputBEEF', `valid and contain complete proof data for ${btx.txid}`);
410
+ if (!inputTxids[btx.txid]) {
411
+ // inputTxids are checked next
412
+ const isKnown = await storage.verifyKnownValidTransaction(btx.txid);
413
+ if (!isKnown)
414
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER('inputBEEF', `valid and contain complete proof data for unknown ${btx.txid}`);
415
+ }
416
+ }
417
+ }
418
+ // Make sure that there's an entry for all inputs txid values:
419
+ for (const txid of Object.keys(inputTxids)) {
420
+ let btx = beef.findTxid(txid);
421
+ if (!btx && trustSelf) {
422
+ if (await storage.verifyKnownValidTransaction(txid))
423
+ btx = beef.mergeTxidOnly(txid);
424
+ }
425
+ if (!btx)
426
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER('inputBEEF', `valid and contain proof data for possibly known ${txid}`);
427
+ }
428
+ if (!(await beef.verify(await storage.getServices().getChainTracker(), true))) {
429
+ console.log(`verifyInputBeef failed, inputBEEF failed to verify.\n${beef.toLogString()}\n`);
430
+ //console.log(`verifyInputBeef failed, inputBEEF failed to verify.\n${stampLogFormat(vargs.log)}\n${beef.toLogString()}\n`)
431
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER('inputBEEF', 'valid Beef when factoring options.trustSelf');
432
+ }
433
+ // beef may now be trusted and has a BeefTx for every input txid.
434
+ const storageBeef = beef.clone();
435
+ for (const input of xinputs) {
436
+ const { txid, vout } = input.outpoint;
437
+ const output = (0, index_client_1.verifyOneOrNone)(await storage.findOutputs({ partial: { userId, txid, vout } }));
438
+ if (output) {
439
+ input.output = output;
440
+ if (!Array.isArray(output.lockingScript) ||
441
+ !Number.isInteger(output.satoshis))
442
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER(`${txid}.${vout}`, 'output with valid lockingScript and satoshis');
443
+ if (!output.spendable && !vargs.isNoSend)
444
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER(`${txid}.${vout}`, 'spendable output unless noSend is true');
445
+ // input is spending an existing user output which has an lockingScript
446
+ input.satoshis = (0, index_client_1.verifyNumber)(output.satoshis);
447
+ input.lockingScript = sdk_1.Script.fromBinary((0, index_client_1.asArray)(output.lockingScript));
448
+ }
449
+ else {
450
+ let btx = beef.findTxid(txid);
451
+ if (btx.isTxidOnly) {
452
+ const { rawTx, proven } = await storage.getProvenOrRawTx(txid);
453
+ //stampLog(vargs, `... storage verifyInputBeef getProvenOrRawTx ${txid} ${proven ? 'proven' : rawTx ? 'rawTx' : 'unknown'}`)
454
+ if (!rawTx)
455
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER('inputBEEF', `valid and contain proof data for ${txid}`);
456
+ btx = beef.mergeRawTx((0, index_client_1.asArray)(rawTx));
457
+ if (proven)
458
+ beef.mergeBump(new index_client_1.entity.ProvenTx(proven).getMerklePath());
459
+ }
460
+ // btx is valid has parsed transaction data.
461
+ if (vout >= btx.tx.outputs.length)
462
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER(`${txid}.${vout}`, 'valid outpoint');
463
+ const so = btx.tx.outputs[vout];
464
+ input.satoshis = (0, index_client_1.verifyTruthy)(so.satoshis);
465
+ input.lockingScript = so.lockingScript;
466
+ }
467
+ }
468
+ return { beef, storageBeef, xinputs };
469
+ }
470
+ async function validateNoSendChange(dojo, userId, vargs, changeBasket) {
471
+ const r = [];
472
+ if (!vargs.isNoSend)
473
+ return [];
474
+ const noSendChange = vargs.options.noSendChange;
475
+ if (noSendChange && noSendChange.length > 0) {
476
+ for (const op of noSendChange) {
477
+ const output = (0, index_client_1.verifyOneOrNone)(await dojo.findOutputs({
478
+ partial: { userId, txid: op.txid, vout: op.vout }
479
+ }));
480
+ // noSendChange is not marked spendable until sent, may not already be spent, and must have a valid greater than zero satoshis
481
+ if (!output ||
482
+ output.providedBy !== 'storage' ||
483
+ output.purpose !== 'change' ||
484
+ output.spendable === false ||
485
+ Number.isInteger(output.spentBy) ||
486
+ !(0, index_client_1.verifyNumber)(output.satoshis) ||
487
+ output.basketId !== changeBasket.basketId)
488
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER('noSendChange outpoint', 'valid');
489
+ if (-1 < r.findIndex(o => o.outputId === output.outputId))
490
+ // noSendChange duplicate OutPoints are not allowed.
491
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER('noSendChange outpoint', 'unique. Duplicates are not allowed.');
492
+ r.push(output);
493
+ }
494
+ }
495
+ return r;
496
+ }
497
+ async function fundNewTransactionSdk(dojo, userId, vargs, ctx) {
498
+ const params = {
499
+ fixedInputs: ctx.xinputs.map(xi => ({
500
+ satoshis: xi.satoshis,
501
+ unlockingScriptLength: xi.unlockingScriptLength
502
+ })),
503
+ fixedOutputs: ctx.xoutputs.map(xo => ({
504
+ satoshis: xo.satoshis,
505
+ lockingScriptLength: xo.lockingScript.length / 2
506
+ })),
507
+ feeModel: ctx.feeModel,
508
+ changeInitialSatoshis: ctx.changeBasket.minimumDesiredUTXOValue,
509
+ changeFirstSatoshis: Math.max(1, ctx.changeBasket.minimumDesiredUTXOValue / 4),
510
+ changeLockingScriptLength: 25,
511
+ changeUnlockingScriptLength: 107,
512
+ targetNetCount: ctx.changeBasket.numberOfDesiredUTXOs - ctx.availableChangeCount
513
+ };
514
+ const noSendChange = [...ctx.noSendChangeIn];
515
+ const outputs = {};
516
+ const allocateChangeInput = async (targetSatoshis, exactSatoshis) => {
517
+ // noSendChange gets allocated first...typically only one input...just allocate in order...
518
+ if (noSendChange.length > 0) {
519
+ const o = noSendChange.pop();
520
+ outputs[o.outputId] = o;
521
+ // allocate the output in storage, noSendChange is by definition spendable false and part of noSpend transaction batch.
522
+ await dojo.updateOutput(o.outputId, {
523
+ spendable: false,
524
+ spentBy: ctx.transactionId
525
+ });
526
+ o.spendable = false;
527
+ o.spentBy = ctx.transactionId;
528
+ const r = {
529
+ outputId: o.outputId,
530
+ satoshis: o.satoshis
531
+ };
532
+ return r;
533
+ }
534
+ const basketId = ctx.changeBasket.basketId;
535
+ const o = await dojo.allocateChangeInput(userId, basketId, targetSatoshis, exactSatoshis, !vargs.isDelayed, ctx.transactionId);
536
+ if (!o)
537
+ return undefined;
538
+ outputs[o.outputId] = o;
539
+ const r = {
540
+ outputId: o.outputId,
541
+ satoshis: o.satoshis
542
+ };
543
+ return r;
544
+ };
545
+ const releaseChangeInput = async (outputId) => {
546
+ const nsco = ctx.noSendChangeIn.find(o => o.outputId === outputId);
547
+ if (nsco) {
548
+ noSendChange.push(nsco);
549
+ return;
550
+ }
551
+ await dojo.updateOutput(outputId, {
552
+ spendable: true,
553
+ spentBy: undefined
554
+ });
555
+ };
556
+ const gcr = await (0, generateChange_1.generateChangeSdk)(params, allocateChangeInput, releaseChangeInput);
557
+ // Generate a derivation prefix for the payment
558
+ const derivationPrefix = (0, index_client_1.randomBytesBase64)(16);
559
+ const r = {
560
+ allocatedChange: gcr.allocatedChangeInputs.map(i => outputs[i.outputId]),
561
+ changeOutputs: gcr.changeOutputs.map((o, i) => ({
562
+ // what we knnow now and can insert into the database for this new transaction's change output
563
+ created_at: new Date(),
564
+ updated_at: new Date(),
565
+ outputId: 0,
566
+ userId,
567
+ transactionId: ctx.transactionId,
568
+ vout: params.fixedOutputs.length + i,
569
+ satoshis: o.satoshis,
570
+ basketId: ctx.changeBasket.basketId,
571
+ spendable: false,
572
+ change: true,
573
+ type: 'P2PKH',
574
+ derivationPrefix,
575
+ derivationSuffix: (0, index_client_1.randomBytesBase64)(16),
576
+ providedBy: 'storage',
577
+ purpose: 'change',
578
+ customInstructions: undefined,
579
+ senderIdentityKey: undefined,
580
+ outputDescription: '',
581
+ // what will be known when transaction is signed
582
+ txid: undefined,
583
+ lockingScript: undefined,
584
+ // when this output gets spent
585
+ spentBy: undefined,
586
+ spendingDescription: undefined
587
+ })),
588
+ derivationPrefix
589
+ };
590
+ return r;
591
+ }
592
+ /**
593
+ * Avoid returning any known raw transaction data by converting any known transaction
594
+ * in the `beef` to txidOnly.
595
+ * @returns undefined if `vargs.options.returnTXIDOnly` or trimmed `Beef`
596
+ */
597
+ function trimInputBeef(beef, vargs) {
598
+ if (vargs.options.returnTXIDOnly)
599
+ return undefined;
600
+ const knownTxids = {};
601
+ for (const txid of vargs.options.knownTxids)
602
+ knownTxids[txid] = true;
603
+ for (const txid of beef.txs.map(btx => btx.txid))
604
+ if (knownTxids[txid])
605
+ beef.makeTxidOnly(txid);
606
+ return beef.toBinary();
607
+ }
608
+ async function mergeAllocatedChangeBeefs(dojo, userId, vargs, allocatedChange, beef) {
609
+ const options = {
610
+ trustSelf: undefined,
611
+ knownTxids: vargs.options.knownTxids,
612
+ mergeToBeef: beef,
613
+ ignoreStorage: false,
614
+ ignoreServices: true,
615
+ ignoreNewProven: false,
616
+ minProofLevel: undefined
617
+ };
618
+ if (vargs.options.returnTXIDOnly)
619
+ return undefined;
620
+ for (const o of allocatedChange) {
621
+ if (!beef.findTxid(o.txid) &&
622
+ !vargs.options.knownTxids.find(txid => txid === o.txid)) {
623
+ await dojo.getBeefForTransaction(o.txid, options);
624
+ }
625
+ }
626
+ return trimInputBeef(beef, vargs);
627
+ }
628
+ function keyOffsetToHashedSecret(pub, keyOffset) {
629
+ let offset;
630
+ if (keyOffset !== undefined && typeof keyOffset === 'string') {
631
+ if (keyOffset.length === 64)
632
+ offset = sdk_1.PrivateKey.fromString(keyOffset, 'hex');
633
+ else
634
+ offset = sdk_1.PrivateKey.fromWif(keyOffset);
635
+ }
636
+ else {
637
+ offset = sdk_1.PrivateKey.fromRandom();
638
+ keyOffset = offset.toWif();
639
+ }
640
+ const sharedSecret = pub.mul(offset).encode(true, undefined);
641
+ const hashedSecret = (0, index_client_1.sha256Hash)(sharedSecret);
642
+ return { hashedSecret: new sdk_1.BigNumber(hashedSecret), keyOffset };
643
+ }
644
+ function offsetPubKey(pubKey, keyOffset) {
645
+ const pub = sdk_1.PublicKey.fromString(pubKey);
646
+ const r = keyOffsetToHashedSecret(pub, keyOffset);
647
+ // The hashed secret is multiplied by the generator point.
648
+ const point = new sdk_1.Curve().g.mul(r.hashedSecret);
649
+ // The resulting point is added to the recipient public key.
650
+ const offsetPubKey = new sdk_1.PublicKey(pub.add(point));
651
+ return { offsetPubKey: offsetPubKey.toString(), keyOffset: r.keyOffset };
652
+ }
653
+ function lockScriptWithKeyOffsetFromPubKey(pubKey, keyOffset) {
654
+ const r = offsetPubKey(pubKey, keyOffset);
655
+ const offsetPub = sdk_1.PublicKey.fromString(r.offsetPubKey);
656
+ const hash = offsetPub.toHash();
657
+ const script = new sdk_1.P2PKH().lock(hash).toHex();
658
+ return { script, keyOffset: r.keyOffset };
659
+ }
660
+ function createStorageServiceChargeScript(pubKeyHex) {
661
+ return lockScriptWithKeyOffsetFromPubKey(pubKeyHex);
662
+ }
663
+ //# sourceMappingURL=createAction.js.map