@bsv/wallet-toolbox 1.4.11 → 1.5.1

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 (169) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/mobile/out/src/CWIStyleWalletManager.js +1 -1
  3. package/mobile/out/src/CWIStyleWalletManager.js.map +1 -1
  4. package/mobile/out/src/SetupClient.mobile.d.ts +90 -0
  5. package/mobile/out/src/SetupClient.mobile.d.ts.map +1 -0
  6. package/mobile/out/src/SetupClient.mobile.js +183 -0
  7. package/mobile/out/src/SetupClient.mobile.js.map +1 -0
  8. package/mobile/out/src/SetupWallet.mobile.d.ts +93 -0
  9. package/mobile/out/src/SetupWallet.mobile.d.ts.map +1 -0
  10. package/mobile/out/src/SetupWallet.mobile.js +3 -0
  11. package/mobile/out/src/SetupWallet.mobile.js.map +1 -0
  12. package/mobile/out/src/monitor/tasks/TaskReviewStatus.d.ts +1 -1
  13. package/mobile/out/src/monitor/tasks/TaskReviewStatus.js +1 -1
  14. package/mobile/out/src/services/chaintracker/{BHServiceClient.d.ts → BhsChainTracker.d.ts} +16 -12
  15. package/mobile/out/src/services/chaintracker/BhsChainTracker.d.ts.map +1 -0
  16. package/mobile/out/src/services/chaintracker/BhsChainTracker.js +84 -0
  17. package/mobile/out/src/services/chaintracker/BhsChainTracker.js.map +1 -0
  18. package/mobile/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts +98 -0
  19. package/mobile/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts.map +1 -0
  20. package/mobile/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js +38 -0
  21. package/mobile/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js.map +1 -0
  22. package/mobile/out/src/services/chaintracker/index.d.ts +1 -1
  23. package/mobile/out/src/services/chaintracker/index.js +1 -1
  24. package/mobile/out/src/services/createDefaultWalletServicesOptions.d.ts +1 -1
  25. package/mobile/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
  26. package/mobile/out/src/services/createDefaultWalletServicesOptions.js +7 -10
  27. package/mobile/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  28. package/mobile/out/src/storage/WalletStorageManager.d.ts +25 -19
  29. package/mobile/out/src/storage/WalletStorageManager.d.ts.map +1 -1
  30. package/mobile/out/src/storage/WalletStorageManager.js +69 -64
  31. package/mobile/out/src/storage/WalletStorageManager.js.map +1 -1
  32. package/mobile/out/src/storage/methods/createAction.d.ts.map +1 -1
  33. package/mobile/out/src/storage/methods/createAction.js +4 -9
  34. package/mobile/out/src/storage/methods/createAction.js.map +1 -1
  35. package/mobile/out/src/storage/methods/processAction.js +1 -1
  36. package/mobile/out/src/storage/methods/processAction.js.map +1 -1
  37. package/mobile/package-lock.json +6 -6
  38. package/mobile/package.json +2 -2
  39. package/out/src/AuthFetchDebug.d.ts +88 -0
  40. package/out/src/AuthFetchDebug.d.ts.map +1 -0
  41. package/out/src/AuthFetchDebug.js +518 -0
  42. package/out/src/AuthFetchDebug.js.map +1 -0
  43. package/out/src/SetupClient.mobile.d.ts +90 -0
  44. package/out/src/SetupClient.mobile.d.ts.map +1 -0
  45. package/out/src/SetupClient.mobile.js +183 -0
  46. package/out/src/SetupClient.mobile.js.map +1 -0
  47. package/out/src/SetupWallet.mobile.d.ts +93 -0
  48. package/out/src/SetupWallet.mobile.d.ts.map +1 -0
  49. package/out/src/SetupWallet.mobile.js +3 -0
  50. package/out/src/SetupWallet.mobile.js.map +1 -0
  51. package/out/src/SimplifiedFetchTransport.d.ts +1 -0
  52. package/out/src/SimplifiedFetchTransport.d.ts.map +1 -0
  53. package/out/src/SimplifiedFetchTransport.js +2 -0
  54. package/out/src/SimplifiedFetchTransport.js.map +1 -0
  55. package/out/src/services/BhsChainTracker.d.ts +1 -0
  56. package/out/src/services/BhsChainTracker.d.ts.map +1 -0
  57. package/out/src/services/BhsChainTracker.js +2 -0
  58. package/out/src/services/BhsChainTracker.js.map +1 -0
  59. package/out/src/services/chaintracker/BhsChainTracker.d.ts +38 -0
  60. package/out/src/services/chaintracker/BhsChainTracker.d.ts.map +1 -0
  61. package/out/src/services/chaintracker/BhsChainTracker.js +84 -0
  62. package/out/src/services/chaintracker/BhsChainTracker.js.map +1 -0
  63. package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts +98 -0
  64. package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts.map +1 -0
  65. package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js +38 -0
  66. package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js.map +1 -0
  67. package/out/src/storage/StorageProvider copy.d.ts +209 -0
  68. package/out/src/storage/StorageProvider copy.d.ts.map +1 -0
  69. package/out/src/storage/StorageProvider copy.js +550 -0
  70. package/out/src/storage/StorageProvider copy.js.map +1 -0
  71. package/out/src/storage/StorageProvider.mobile.d.ts +209 -0
  72. package/out/src/storage/StorageProvider.mobile.d.ts.map +1 -0
  73. package/out/src/storage/StorageProvider.mobile.js +550 -0
  74. package/out/src/storage/StorageProvider.mobile.js.map +1 -0
  75. package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
  76. package/out/src/storage/WalletStorageManager.js.map +1 -1
  77. package/out/src/storage/remoting/StorageClient copy.d.ts +283 -0
  78. package/out/src/storage/remoting/StorageClient copy.d.ts.map +1 -0
  79. package/out/src/storage/remoting/StorageClient copy.js +477 -0
  80. package/out/src/storage/remoting/StorageClient copy.js.map +1 -0
  81. package/out/test/Wallet/action/abortAction.test.d.ts.map +1 -0
  82. package/out/test/{wallet → Wallet}/action/abortAction.test.js.map +1 -1
  83. package/out/test/Wallet/action/createAction.test.d.ts.map +1 -0
  84. package/out/test/{wallet → Wallet}/action/createAction.test.js.map +1 -1
  85. package/out/test/{wallet → Wallet}/action/createAction2.test.d.ts.map +1 -1
  86. package/out/test/{wallet → Wallet}/action/createAction2.test.js.map +1 -1
  87. package/out/test/Wallet/action/createActionToGenerateBeefs.man.test.d.ts.map +1 -0
  88. package/out/test/{wallet → Wallet}/action/createActionToGenerateBeefs.man.test.js.map +1 -1
  89. package/out/test/Wallet/action/internalizeAction.test.d.ts.map +1 -0
  90. package/out/test/{wallet → Wallet}/action/internalizeAction.test.js.map +1 -1
  91. package/out/test/Wallet/action/relinquishOutput.test.d.ts.map +1 -0
  92. package/out/test/{wallet → Wallet}/action/relinquishOutput.test.js.map +1 -1
  93. package/out/test/Wallet/construct/Wallet.constructor.test.d.ts.map +1 -0
  94. package/out/test/{wallet → Wallet}/construct/Wallet.constructor.test.js.map +1 -1
  95. package/out/test/Wallet/list/listActions.test.d.ts.map +1 -0
  96. package/out/test/{wallet → Wallet}/list/listActions.test.js.map +1 -1
  97. package/out/test/Wallet/list/listActions2.test.d.ts.map +1 -0
  98. package/out/test/{wallet → Wallet}/list/listActions2.test.js.map +1 -1
  99. package/out/test/Wallet/list/listCertificates.test.d.ts.map +1 -0
  100. package/out/test/{wallet → Wallet}/list/listCertificates.test.js.map +1 -1
  101. package/out/test/Wallet/list/listOutputs.test.d.ts.map +1 -0
  102. package/out/test/{wallet → Wallet}/list/listOutputs.test.js.map +1 -1
  103. package/out/test/Wallet/sync/Wallet.sync.test.d.ts.map +1 -0
  104. package/out/test/{wallet → Wallet}/sync/Wallet.sync.test.js.map +1 -1
  105. package/out/tsconfig.all.tsbuildinfo +1 -1
  106. package/package.json +4 -4
  107. package/src/storage/WalletStorageManager.ts +1 -3
  108. package/mobile/out/src/services/chaintracker/BHServiceClient.d.ts.map +0 -1
  109. package/mobile/out/src/services/chaintracker/BHServiceClient.js +0 -163
  110. package/mobile/out/src/services/chaintracker/BHServiceClient.js.map +0 -1
  111. package/mobile/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts +0 -140
  112. package/mobile/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +0 -1
  113. package/mobile/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +0 -467
  114. package/mobile/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js.map +0 -1
  115. package/mobile/out/src/services/chaintracker/chaintracks/util/dirtyHashes.d.ts +0 -20
  116. package/mobile/out/src/services/chaintracker/chaintracks/util/dirtyHashes.d.ts.map +0 -1
  117. package/mobile/out/src/services/chaintracker/chaintracks/util/dirtyHashes.js +0 -31
  118. package/mobile/out/src/services/chaintracker/chaintracks/util/dirtyHashes.js.map +0 -1
  119. package/mobile/out/src/utility/utilityHelpers.buffer.d.ts +0 -18
  120. package/mobile/out/src/utility/utilityHelpers.buffer.d.ts.map +0 -1
  121. package/mobile/out/src/utility/utilityHelpers.buffer.js +0 -45
  122. package/mobile/out/src/utility/utilityHelpers.buffer.js.map +0 -1
  123. package/out/test/wallet/action/abortAction.test.d.ts.map +0 -1
  124. package/out/test/wallet/action/createAction.test.d.ts.map +0 -1
  125. package/out/test/wallet/action/createActionToGenerateBeefs.man.test.d.ts.map +0 -1
  126. package/out/test/wallet/action/internalizeAction.test.d.ts.map +0 -1
  127. package/out/test/wallet/action/relinquishOutput.test.d.ts.map +0 -1
  128. package/out/test/wallet/construct/Wallet.constructor.test.d.ts.map +0 -1
  129. package/out/test/wallet/list/listActions.test.d.ts.map +0 -1
  130. package/out/test/wallet/list/listActions2.test.d.ts.map +0 -1
  131. package/out/test/wallet/list/listCertificates.test.d.ts.map +0 -1
  132. package/out/test/wallet/list/listOutputs.test.d.ts.map +0 -1
  133. package/out/test/wallet/sync/Wallet.sync.test.d.ts.map +0 -1
  134. /package/out/test/{wallet → Wallet}/action/abortAction.test.d.ts +0 -0
  135. /package/out/test/{wallet → Wallet}/action/abortAction.test.js +0 -0
  136. /package/out/test/{wallet → Wallet}/action/createAction.test.d.ts +0 -0
  137. /package/out/test/{wallet → Wallet}/action/createAction.test.js +0 -0
  138. /package/out/test/{wallet → Wallet}/action/createAction2.test.d.ts +0 -0
  139. /package/out/test/{wallet → Wallet}/action/createAction2.test.js +0 -0
  140. /package/out/test/{wallet → Wallet}/action/createActionToGenerateBeefs.man.test.d.ts +0 -0
  141. /package/out/test/{wallet → Wallet}/action/createActionToGenerateBeefs.man.test.js +0 -0
  142. /package/out/test/{wallet → Wallet}/action/internalizeAction.test.d.ts +0 -0
  143. /package/out/test/{wallet → Wallet}/action/internalizeAction.test.js +0 -0
  144. /package/out/test/{wallet → Wallet}/action/relinquishOutput.test.d.ts +0 -0
  145. /package/out/test/{wallet → Wallet}/action/relinquishOutput.test.js +0 -0
  146. /package/out/test/{wallet → Wallet}/construct/Wallet.constructor.test.d.ts +0 -0
  147. /package/out/test/{wallet → Wallet}/construct/Wallet.constructor.test.js +0 -0
  148. /package/out/test/{wallet → Wallet}/list/listActions.test.d.ts +0 -0
  149. /package/out/test/{wallet → Wallet}/list/listActions.test.js +0 -0
  150. /package/out/test/{wallet → Wallet}/list/listActions2.test.d.ts +0 -0
  151. /package/out/test/{wallet → Wallet}/list/listActions2.test.js +0 -0
  152. /package/out/test/{wallet → Wallet}/list/listCertificates.test.d.ts +0 -0
  153. /package/out/test/{wallet → Wallet}/list/listCertificates.test.js +0 -0
  154. /package/out/test/{wallet → Wallet}/list/listOutputs.test.d.ts +0 -0
  155. /package/out/test/{wallet → Wallet}/list/listOutputs.test.js +0 -0
  156. /package/out/test/{wallet → Wallet}/sync/Wallet.sync.test.d.ts +0 -0
  157. /package/out/test/{wallet → Wallet}/sync/Wallet.sync.test.js +0 -0
  158. /package/test/{wallet → Wallet}/action/abortAction.test.ts +0 -0
  159. /package/test/{wallet → Wallet}/action/createAction.test.ts +0 -0
  160. /package/test/{wallet → Wallet}/action/createAction2.test.ts +0 -0
  161. /package/test/{wallet → Wallet}/action/createActionToGenerateBeefs.man.test.ts +0 -0
  162. /package/test/{wallet → Wallet}/action/internalizeAction.test.ts +0 -0
  163. /package/test/{wallet → Wallet}/action/relinquishOutput.test.ts +0 -0
  164. /package/test/{wallet → Wallet}/construct/Wallet.constructor.test.ts +0 -0
  165. /package/test/{wallet → Wallet}/list/listActions.test.ts +0 -0
  166. /package/test/{wallet → Wallet}/list/listActions2.test.ts +0 -0
  167. /package/test/{wallet → Wallet}/list/listCertificates.test.ts +0 -0
  168. /package/test/{wallet → Wallet}/list/listOutputs.test.ts +0 -0
  169. /package/test/{wallet → Wallet}/sync/Wallet.sync.test.ts +0 -0
@@ -0,0 +1,550 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StorageProvider = void 0;
4
+ exports.validateStorageFeeModel = validateStorageFeeModel;
5
+ const sdk_1 = require("@bsv/sdk");
6
+ const index_client_1 = require("../index.client");
7
+ const getBeefForTransaction_1 = require("./methods/getBeefForTransaction");
8
+ const processAction_1 = require("./methods/processAction");
9
+ const attemptToPostReqsToNetwork_1 = require("./methods/attemptToPostReqsToNetwork");
10
+ const listCertificates_1 = require("./methods/listCertificates");
11
+ const createAction_1 = require("./methods/createAction");
12
+ const internalizeAction_1 = require("./methods/internalizeAction");
13
+ const StorageReaderWriter_1 = require("./StorageReaderWriter");
14
+ const entities_1 = require("./schema/entities");
15
+ class StorageProvider extends StorageReaderWriter_1.StorageReaderWriter {
16
+ static defaultOptions() {
17
+ return {
18
+ feeModel: { model: 'sat/kb', value: 1 },
19
+ commissionSatoshis: 0,
20
+ commissionPubKeyHex: undefined
21
+ };
22
+ }
23
+ static createStorageBaseOptions(chain) {
24
+ const options = {
25
+ ...StorageProvider.defaultOptions(),
26
+ chain
27
+ };
28
+ return options;
29
+ }
30
+ constructor(options) {
31
+ super(options);
32
+ this.isDirty = false;
33
+ this.feeModel = options.feeModel;
34
+ this.commissionPubKeyHex = options.commissionPubKeyHex;
35
+ this.commissionSatoshis = options.commissionSatoshis;
36
+ }
37
+ isStorageProvider() {
38
+ return true;
39
+ }
40
+ setServices(v) {
41
+ this._services = v;
42
+ }
43
+ getServices() {
44
+ if (!this._services)
45
+ throw new index_client_1.sdk.WERR_INVALID_OPERATION('Must setServices first.');
46
+ return this._services;
47
+ }
48
+ async abortAction(auth, args) {
49
+ if (!auth.userId)
50
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER('auth.userId', 'valid');
51
+ const userId = auth.userId;
52
+ let reference = args.reference;
53
+ let txid = undefined;
54
+ const r = await this.transaction(async (trx) => {
55
+ let tx = (0, index_client_1.verifyOneOrNone)(await this.findTransactions({
56
+ partial: { reference, userId },
57
+ noRawTx: true,
58
+ trx
59
+ }));
60
+ if (!tx && args.reference.length === 64) {
61
+ // reference may also be a txid
62
+ txid = reference;
63
+ reference = undefined;
64
+ tx = (0, index_client_1.verifyOneOrNone)(await this.findTransactions({
65
+ partial: { txid, userId },
66
+ noRawTx: true,
67
+ trx
68
+ }));
69
+ }
70
+ const unAbortableStatus = ['completed', 'failed', 'sending', 'unproven'];
71
+ if (!tx || !tx.isOutgoing || -1 < unAbortableStatus.findIndex(s => s === tx.status))
72
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER('reference', 'an inprocess, outgoing action that has not been signed and shared to the network.');
73
+ await this.updateTransactionStatus('failed', tx.transactionId, userId, reference, trx);
74
+ if (tx.txid) {
75
+ const req = await entities_1.EntityProvenTxReq.fromStorageTxid(this, tx.txid, trx);
76
+ if (req) {
77
+ req.addHistoryNote({ what: 'abortAction', reference: args.reference });
78
+ req.status = 'invalid';
79
+ await req.updateStorageDynamicProperties(this, trx);
80
+ }
81
+ }
82
+ const r = {
83
+ aborted: true
84
+ };
85
+ return r;
86
+ });
87
+ return r;
88
+ }
89
+ async internalizeAction(auth, args) {
90
+ return await (0, internalizeAction_1.internalizeAction)(this, auth, args);
91
+ }
92
+ /**
93
+ * Given an array of transaction txids with current ProvenTxReq ready-to-share status,
94
+ * lookup their ProvenTxReqApi req records.
95
+ * For the txids with reqs and status still ready to send construct a single merged beef.
96
+ *
97
+ * @param txids
98
+ * @param knownTxids
99
+ * @param trx
100
+ */
101
+ async getReqsAndBeefToShareWithWorld(txids, knownTxids, trx) {
102
+ const r = {
103
+ beef: new sdk_1.Beef(),
104
+ details: []
105
+ };
106
+ for (const txid of txids) {
107
+ const d = {
108
+ txid,
109
+ status: 'unknown'
110
+ };
111
+ r.details.push(d);
112
+ try {
113
+ d.proven = (0, index_client_1.verifyOneOrNone)(await this.findProvenTxs({ partial: { txid }, trx }));
114
+ if (d.proven)
115
+ d.status = 'alreadySent';
116
+ else {
117
+ const alreadySentStatus = ['unmined', 'callback', 'unconfirmed', 'completed'];
118
+ const readyToSendStatus = ['sending', 'unsent', 'nosend', 'unprocessed'];
119
+ const errorStatus = ['unknown', 'nonfinal', 'invalid', 'doubleSpend'];
120
+ d.req = (0, index_client_1.verifyOneOrNone)(await this.findProvenTxReqs({ partial: { txid }, trx }));
121
+ if (!d.req) {
122
+ d.status = 'error';
123
+ d.error = `ERR_UNKNOWN_TXID: ${txid} was not found.`;
124
+ }
125
+ else if (errorStatus.indexOf(d.req.status) > -1) {
126
+ d.status = 'error';
127
+ d.error = `ERR_INVALID_PARAMETER: ${txid} is not ready to send.`;
128
+ }
129
+ else if (alreadySentStatus.indexOf(d.req.status) > -1) {
130
+ d.status = 'alreadySent';
131
+ }
132
+ else if (readyToSendStatus.indexOf(d.req.status) > -1) {
133
+ if (!d.req.rawTx || !d.req.inputBEEF) {
134
+ d.status = 'error';
135
+ d.error = `ERR_INTERNAL: ${txid} req is missing rawTx or beef.`;
136
+ }
137
+ else
138
+ d.status = 'readyToSend';
139
+ }
140
+ else {
141
+ d.status = 'error';
142
+ d.error = `ERR_INTERNAL: ${txid} has unexpected req status ${d.req.status}`;
143
+ }
144
+ if (d.status === 'readyToSend') {
145
+ await this.mergeReqToBeefToShareExternally(d.req, r.beef, knownTxids, trx);
146
+ }
147
+ }
148
+ }
149
+ catch (eu) {
150
+ const e = index_client_1.sdk.WalletError.fromUnknown(eu);
151
+ d.error = `${e.name}: ${e.message}`;
152
+ }
153
+ }
154
+ return r;
155
+ }
156
+ async mergeReqToBeefToShareExternally(req, mergeToBeef, knownTxids, trx) {
157
+ const { rawTx, inputBEEF: beef } = req;
158
+ if (!rawTx || !beef)
159
+ throw new index_client_1.sdk.WERR_INTERNAL(`req rawTx and beef must be valid.`);
160
+ mergeToBeef.mergeRawTx((0, index_client_1.asArray)(rawTx));
161
+ mergeToBeef.mergeBeef((0, index_client_1.asArray)(beef));
162
+ const tx = sdk_1.Transaction.fromBinary((0, index_client_1.asArray)(rawTx));
163
+ for (const input of tx.inputs) {
164
+ if (!input.sourceTXID)
165
+ throw new index_client_1.sdk.WERR_INTERNAL(`req all transaction inputs must have valid sourceTXID`);
166
+ const txid = input.sourceTXID;
167
+ const btx = mergeToBeef.findTxid(txid);
168
+ if (!btx) {
169
+ if (knownTxids && knownTxids.indexOf(txid) > -1)
170
+ mergeToBeef.mergeTxidOnly(txid);
171
+ else
172
+ await this.getValidBeefForKnownTxid(txid, mergeToBeef, undefined, knownTxids, trx);
173
+ }
174
+ }
175
+ }
176
+ /**
177
+ * Checks if txid is a known valid ProvenTx and returns it if found.
178
+ * Next checks if txid is a current ProvenTxReq and returns that if found.
179
+ * If `newReq` is provided and an existing ProvenTxReq isn't found,
180
+ * use `newReq` to create a new ProvenTxReq.
181
+ *
182
+ * This is safe "findOrInsert" operation using retry if unique index constraint
183
+ * is violated by a race condition insert.
184
+ *
185
+ * @param txid
186
+ * @param newReq
187
+ * @param trx
188
+ * @returns
189
+ */
190
+ async getProvenOrReq(txid, newReq, trx) {
191
+ if (newReq && txid !== newReq.txid)
192
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER('newReq', `same txid`);
193
+ const r = { proven: undefined, req: undefined };
194
+ r.proven = (0, index_client_1.verifyOneOrNone)(await this.findProvenTxs({ partial: { txid }, trx }));
195
+ if (r.proven)
196
+ return r;
197
+ for (let retry = 0;; retry++) {
198
+ try {
199
+ r.req = (0, index_client_1.verifyOneOrNone)(await this.findProvenTxReqs({ partial: { txid }, trx }));
200
+ if (!r.req && !newReq)
201
+ break;
202
+ if (!r.req && newReq) {
203
+ await this.insertProvenTxReq(newReq, trx);
204
+ }
205
+ if (r.req && newReq) {
206
+ // Merge history and notify into existing
207
+ const req1 = new entities_1.EntityProvenTxReq(r.req);
208
+ req1.mergeHistory(newReq, undefined, true);
209
+ req1.mergeNotifyTransactionIds(newReq);
210
+ await req1.updateStorageDynamicProperties(this, trx);
211
+ }
212
+ break;
213
+ }
214
+ catch (eu) {
215
+ if (retry > 0)
216
+ throw eu;
217
+ }
218
+ }
219
+ return r;
220
+ }
221
+ async updateTransactionsStatus(transactionIds, status, trx) {
222
+ await this.transaction(async (trx) => {
223
+ for (const id of transactionIds) {
224
+ await this.updateTransactionStatus(status, id, undefined, undefined, trx);
225
+ }
226
+ }, trx);
227
+ }
228
+ /**
229
+ * For all `status` values besides 'failed', just updates the transaction records status property.
230
+ *
231
+ * For 'status' of 'failed', attempts to make outputs previously allocated as inputs to this transaction usable again.
232
+ *
233
+ * @param status
234
+ * @param transactionId
235
+ * @param userId
236
+ * @param reference
237
+ * @param trx
238
+ */
239
+ async updateTransactionStatus(status, transactionId, userId, reference, trx) {
240
+ if (!transactionId && !(userId && reference))
241
+ throw new index_client_1.sdk.WERR_MISSING_PARAMETER('either transactionId or userId and reference');
242
+ await this.transaction(async (trx) => {
243
+ const where = {};
244
+ if (transactionId)
245
+ where.transactionId = transactionId;
246
+ if (userId)
247
+ where.userId = userId;
248
+ if (reference)
249
+ where.reference = reference;
250
+ const tx = (0, index_client_1.verifyOne)(await this.findTransactions({ partial: where, noRawTx: true, trx }));
251
+ //if (tx.status === status)
252
+ // no change required. Assume inputs and outputs spendable and spentBy are valid for status.
253
+ //return
254
+ // Once completed, this method cannot be used to "uncomplete" transaction.
255
+ if ((status !== 'completed' && tx.status === 'completed') || tx.provenTxId)
256
+ throw new index_client_1.sdk.WERR_INVALID_OPERATION('The status of a "completed" transaction cannot be changed.');
257
+ // It is not possible to un-fail a transaction. Information is lost and not recoverable.
258
+ if (status !== 'failed' && tx.status === 'failed')
259
+ throw new index_client_1.sdk.WERR_INVALID_OPERATION(`A "failed" transaction may not be un-failed by this method.`);
260
+ switch (status) {
261
+ case 'failed':
262
+ {
263
+ // Attempt to make outputs previously allocated as inputs to this transaction usable again.
264
+ // Only clear input's spentBy and reset spendable = true if it references this transaction
265
+ const t = new entities_1.EntityTransaction(tx);
266
+ const inputs = await t.getInputs(this, trx);
267
+ for (const input of inputs) {
268
+ // input is a prior output belonging to userId that reference this transaction either by `spentBy`
269
+ // or by txid and vout.
270
+ await this.updateOutput((0, index_client_1.verifyId)(input.outputId), { spendable: true, spentBy: undefined }, trx);
271
+ }
272
+ }
273
+ break;
274
+ case 'nosend':
275
+ case 'unsigned':
276
+ case 'unprocessed':
277
+ case 'sending':
278
+ case 'unproven':
279
+ case 'completed':
280
+ break;
281
+ default:
282
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER('status', `not be ${status}`);
283
+ }
284
+ await this.updateTransaction(tx.transactionId, { status }, trx);
285
+ }, trx);
286
+ }
287
+ async createAction(auth, args) {
288
+ if (!auth.userId)
289
+ throw new index_client_1.sdk.WERR_UNAUTHORIZED();
290
+ return await (0, createAction_1.createAction)(this, auth, args);
291
+ }
292
+ async processAction(auth, args) {
293
+ if (!auth.userId)
294
+ throw new index_client_1.sdk.WERR_UNAUTHORIZED();
295
+ return await (0, processAction_1.processAction)(this, auth, args);
296
+ }
297
+ async attemptToPostReqsToNetwork(reqs, trx) {
298
+ return await (0, attemptToPostReqsToNetwork_1.attemptToPostReqsToNetwork)(this, reqs, trx);
299
+ }
300
+ async listCertificates(auth, args) {
301
+ return await (0, listCertificates_1.listCertificates)(this, auth, args);
302
+ }
303
+ async verifyKnownValidTransaction(txid, trx) {
304
+ const { proven, rawTx } = await this.getProvenOrRawTx(txid, trx);
305
+ return proven != undefined || rawTx != undefined;
306
+ }
307
+ async getValidBeefForKnownTxid(txid, mergeToBeef, trustSelf, knownTxids, trx) {
308
+ const beef = await this.getValidBeefForTxid(txid, mergeToBeef, trustSelf, knownTxids, trx);
309
+ if (!beef)
310
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER('txid', `${txid} is not known to storage.`);
311
+ return beef;
312
+ }
313
+ async getValidBeefForTxid(txid, mergeToBeef, trustSelf, knownTxids, trx) {
314
+ const beef = mergeToBeef || new sdk_1.Beef();
315
+ const r = await this.getProvenOrRawTx(txid, trx);
316
+ if (r.proven) {
317
+ if (trustSelf === 'known')
318
+ beef.mergeTxidOnly(txid);
319
+ else {
320
+ beef.mergeRawTx(r.proven.rawTx);
321
+ const mp = new entities_1.EntityProvenTx(r.proven).getMerklePath();
322
+ beef.mergeBump(mp);
323
+ return beef;
324
+ }
325
+ }
326
+ if (r.rawTx && r.inputBEEF) {
327
+ if (trustSelf === 'known')
328
+ beef.mergeTxidOnly(txid);
329
+ else {
330
+ beef.mergeRawTx(r.rawTx);
331
+ beef.mergeBeef(r.inputBEEF);
332
+ const tx = sdk_1.Transaction.fromBinary(r.rawTx);
333
+ for (const input of tx.inputs) {
334
+ const btx = beef.findTxid(input.sourceTXID);
335
+ if (!btx) {
336
+ if (knownTxids && knownTxids.indexOf(input.sourceTXID) > -1)
337
+ beef.mergeTxidOnly(input.sourceTXID);
338
+ else
339
+ await this.getValidBeefForKnownTxid(input.sourceTXID, beef, trustSelf, knownTxids, trx);
340
+ }
341
+ }
342
+ return beef;
343
+ }
344
+ }
345
+ return undefined;
346
+ }
347
+ async getBeefForTransaction(txid, options) {
348
+ return await (0, getBeefForTransaction_1.getBeefForTransaction)(this, txid, options);
349
+ }
350
+ async findMonitorEventById(id, trx) {
351
+ return (0, index_client_1.verifyOneOrNone)(await this.findMonitorEvents({ partial: { id }, trx }));
352
+ }
353
+ async relinquishCertificate(auth, args) {
354
+ const vargs = index_client_1.sdk.validateRelinquishCertificateArgs(args);
355
+ const cert = (0, index_client_1.verifyOne)(await this.findCertificates({
356
+ partial: {
357
+ certifier: vargs.certifier,
358
+ serialNumber: vargs.serialNumber,
359
+ type: vargs.type
360
+ }
361
+ }));
362
+ return await this.updateCertificate(cert.certificateId, {
363
+ isDeleted: true
364
+ });
365
+ }
366
+ async relinquishOutput(auth, args) {
367
+ const vargs = index_client_1.sdk.validateRelinquishOutputArgs(args);
368
+ const { txid, vout } = index_client_1.sdk.parseWalletOutpoint(vargs.output);
369
+ const output = (0, index_client_1.verifyOne)(await this.findOutputs({ partial: { txid, vout } }));
370
+ return await this.updateOutput(output.outputId, { basketId: undefined });
371
+ }
372
+ async processSyncChunk(args, chunk) {
373
+ const user = (0, index_client_1.verifyTruthy)(await this.findUserByIdentityKey(args.identityKey));
374
+ const ss = new entities_1.EntitySyncState((0, index_client_1.verifyOne)(await this.findSyncStates({
375
+ partial: {
376
+ storageIdentityKey: args.fromStorageIdentityKey,
377
+ userId: user.userId
378
+ }
379
+ })));
380
+ const r = await ss.processSyncChunk(this, args, chunk);
381
+ return r;
382
+ }
383
+ /**
384
+ * Handles storage changes when a valid MerklePath and mined block header are found for a ProvenTxReq txid.
385
+ *
386
+ * Performs the following storage updates (typically):
387
+ * 1. Lookup the exising `ProvenTxReq` record for its rawTx
388
+ * 2. Insert a new ProvenTx record using properties from `args` and rawTx, yielding a new provenTxId
389
+ * 3. Update ProvenTxReq record with status 'completed' and new provenTxId value (and history of status changed)
390
+ * 4. Unpack notify transactionIds from req and update each transaction's status to 'completed', provenTxId value.
391
+ * 5. Update ProvenTxReq history again to record that transactions have been notified.
392
+ * 6. Return results...
393
+ *
394
+ * Alterations of "typically" to handle:
395
+ */
396
+ async updateProvenTxReqWithNewProvenTx(args) {
397
+ const req = await entities_1.EntityProvenTxReq.fromStorageId(this, args.provenTxReqId);
398
+ let proven;
399
+ if (req.provenTxId) {
400
+ // Someone beat us to it, grab what we need for results...
401
+ proven = new entities_1.EntityProvenTx((0, index_client_1.verifyOne)(await this.findProvenTxs({ partial: { txid: args.txid } })));
402
+ }
403
+ else {
404
+ let isNew;
405
+ ({ proven, isNew } = await this.transaction(async (trx) => {
406
+ const { proven: api, isNew } = await this.findOrInsertProvenTx({
407
+ created_at: new Date(),
408
+ updated_at: new Date(),
409
+ provenTxId: 0,
410
+ txid: args.txid,
411
+ height: args.height,
412
+ index: args.index,
413
+ merklePath: args.merklePath,
414
+ rawTx: req.rawTx,
415
+ blockHash: args.blockHash,
416
+ merkleRoot: args.merkleRoot
417
+ }, trx);
418
+ proven = new entities_1.EntityProvenTx(api);
419
+ if (isNew) {
420
+ req.status = 'completed';
421
+ req.provenTxId = proven.provenTxId;
422
+ await req.updateStorageDynamicProperties(this, trx);
423
+ // upate the transaction notifications outside of storage transaction....
424
+ }
425
+ return { proven, isNew };
426
+ }));
427
+ if (isNew) {
428
+ const ids = req.notify.transactionIds || [];
429
+ if (ids.length > 0) {
430
+ for (const id of ids) {
431
+ try {
432
+ await this.updateTransaction(id, {
433
+ provenTxId: proven.provenTxId,
434
+ status: 'completed'
435
+ });
436
+ req.addHistoryNote({ what: 'notifyTxOfProof', transactionId: id });
437
+ }
438
+ catch (eu) {
439
+ const { code, description } = index_client_1.sdk.WalletError.fromUnknown(eu);
440
+ const { provenTxId } = proven;
441
+ req.addHistoryNote({ what: 'notifyTxOfProofError', id, provenTxId, code, description });
442
+ }
443
+ }
444
+ await req.updateStorageDynamicProperties(this);
445
+ }
446
+ }
447
+ }
448
+ const r = {
449
+ status: req.status,
450
+ history: req.apiHistory,
451
+ provenTxId: proven.provenTxId
452
+ };
453
+ return r;
454
+ }
455
+ /**
456
+ * For each spendable output in the 'default' basket of the authenticated user,
457
+ * verify that the output script, satoshis, vout and txid match that of an output
458
+ * still in the mempool of at least one service provider.
459
+ *
460
+ * @returns object with invalidSpendableOutputs array. A good result is an empty array.
461
+ */
462
+ async confirmSpendableOutputs() {
463
+ const invalidSpendableOutputs = [];
464
+ const users = await this.findUsers({ partial: {} });
465
+ for (const { userId } of users) {
466
+ const defaultBasket = (0, index_client_1.verifyOne)(await this.findOutputBaskets({ partial: { userId, name: 'default' } }));
467
+ const where = {
468
+ userId,
469
+ basketId: defaultBasket.basketId,
470
+ spendable: true
471
+ };
472
+ const outputs = await this.findOutputs({ partial: where });
473
+ const services = this.getServices();
474
+ for (let i = outputs.length - 1; i >= 0; i--) {
475
+ const o = outputs[i];
476
+ const oid = (0, index_client_1.verifyId)(o.outputId);
477
+ if (o.spendable) {
478
+ let ok = false;
479
+ if (o.lockingScript && o.lockingScript.length > 0) {
480
+ const hash = services.hashOutputScript((0, index_client_1.asString)(o.lockingScript));
481
+ const r = await services.getUtxoStatus(hash, undefined, `${o.txid}.${o.vout}`);
482
+ if (r.isUtxo === true)
483
+ ok = true;
484
+ }
485
+ if (!ok)
486
+ invalidSpendableOutputs.push(o);
487
+ }
488
+ }
489
+ }
490
+ return { invalidSpendableOutputs };
491
+ }
492
+ async updateProvenTxReqDynamics(id, update, trx) {
493
+ const partial = {};
494
+ if (update['updated_at'])
495
+ partial['updated_at'] = update['updated_at'];
496
+ if (update['provenTxId'])
497
+ partial['provenTxId'] = update['provenTxId'];
498
+ if (update['status'])
499
+ partial['status'] = update['status'];
500
+ if (Number.isInteger(update['attempts']))
501
+ partial['attempts'] = update['attempts'];
502
+ if (update['notified'] !== undefined)
503
+ partial['notified'] = update['notified'];
504
+ if (update['batch'])
505
+ partial['batch'] = update['batch'];
506
+ if (update['history'])
507
+ partial['history'] = update['history'];
508
+ if (update['notify'])
509
+ partial['notify'] = update['notify'];
510
+ return await this.updateProvenTxReq(id, partial, trx);
511
+ }
512
+ async extendOutput(o, includeBasket = false, includeTags = false, trx) {
513
+ const ox = o;
514
+ if (includeBasket && ox.basketId)
515
+ ox.basket = await this.findOutputBasketById(o.basketId, trx);
516
+ if (includeTags) {
517
+ ox.tags = await this.getTagsForOutputId(o.outputId);
518
+ }
519
+ return o;
520
+ }
521
+ async validateOutputScript(o, trx) {
522
+ // without offset and length values return what we have (make no changes)
523
+ if (!o.scriptLength || !o.scriptOffset || !o.txid)
524
+ return;
525
+ // if there is an outputScript and its length is the expected length return what we have.
526
+ if (o.lockingScript && o.lockingScript.length === o.scriptLength)
527
+ return;
528
+ // outputScript is missing or has incorrect length...
529
+ const script = await this.getRawTxOfKnownValidTransaction(o.txid, o.scriptOffset, o.scriptLength, trx);
530
+ if (!script)
531
+ return;
532
+ o.lockingScript = script;
533
+ }
534
+ }
535
+ exports.StorageProvider = StorageProvider;
536
+ function validateStorageFeeModel(v) {
537
+ const r = {
538
+ model: 'sat/kb',
539
+ value: 1
540
+ };
541
+ if (typeof v === 'object') {
542
+ if (v.model !== 'sat/kb')
543
+ throw new index_client_1.sdk.WERR_INVALID_PARAMETER('StorageFeeModel.model', `"sat/kb"`);
544
+ if (typeof v.value === 'number') {
545
+ r.value = v.value;
546
+ }
547
+ }
548
+ return r;
549
+ }
550
+ //# sourceMappingURL=StorageProvider%20copy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StorageProvider copy.js","sourceRoot":"","sources":["../../../src/storage/StorageProvider copy.ts"],"names":[],"mappings":"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"}