@bsv/wallet-toolbox 1.3.13 → 1.3.14

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsv/wallet-toolbox",
3
- "version": "1.3.13",
3
+ "version": "1.3.14",
4
4
  "description": "BRC100 conforming wallet, wallet storage and wallet signer components",
5
5
  "main": "./out/src/index.js",
6
6
  "types": "./out/src/index.d.ts",
@@ -155,6 +155,19 @@ export interface WalletServices {
155
155
  * @param txOrLockTime either a bitcoin locktime value or hex, binary, un-encoded Transaction
156
156
  */
157
157
  nLockTimeIsFinal(txOrLockTime: string | number[] | BsvTransaction | number): Promise<boolean>
158
+
159
+ /**
160
+ * Constructs a `Beef` for the given `txid` using only external data retrieval services.
161
+ *
162
+ * In most cases, the `getBeefForTransaction` method of the `StorageProvider` class should be
163
+ * used instead to avoid redundantly retrieving data.
164
+ *
165
+ * @throws errors if txid does not correspond to a valid transaction as determined by the
166
+ * configured services.
167
+ *
168
+ * @param txid
169
+ */
170
+ getBeefForTxid(txid: string): Promise<Beef>
158
171
  }
159
172
 
160
173
  export type ScriptHashFormat = 'hashLE' | 'hashBE' | 'script'
@@ -7,6 +7,7 @@ import { WhatsOnChain } from './providers/WhatsOnChain'
7
7
  import { updateChaintracksFiatExchangeRates, updateExchangeratesapi } from './providers/echangeRates'
8
8
  import { ARC } from './providers/ARC'
9
9
  import { Bitails } from './providers/Bitails'
10
+ import { getBeefForTxid } from './providers/getBeefForTxid'
10
11
 
11
12
  export class Services implements sdk.WalletServices {
12
13
  static createDefaultOptions(chain: sdk.Chain): sdk.WalletServicesOptions {
@@ -404,6 +405,11 @@ export class Services implements sdk.WalletServices {
404
405
  const height = await this.getHeight()
405
406
  return nLockTime < height
406
407
  }
408
+
409
+ async getBeefForTxid(txid: string): Promise<Beef> {
410
+ const beef = await getBeefForTxid(this, txid)
411
+ return beef
412
+ }
407
413
  }
408
414
 
409
415
  export function validateScriptHash(output: string, outputFormat?: sdk.GetUtxoStatusOutputFormat): string {
@@ -0,0 +1,371 @@
1
+ import { Beef, ListActionsResult, ListOutputsResult } from '@bsv/sdk'
2
+ import {
3
+ TrxToken,
4
+ PurgeParams,
5
+ PurgeResults,
6
+ ProvenOrRawTx,
7
+ AuthId,
8
+ ValidListActionsArgs,
9
+ ValidListOutputsArgs,
10
+ FindCertificatesArgs,
11
+ FindOutputBasketsArgs,
12
+ FindOutputsArgs,
13
+ FindOutputTagMapsArgs,
14
+ FindProvenTxReqsArgs,
15
+ FindProvenTxsArgs,
16
+ FindTxLabelMapsArgs,
17
+ FindCertificateFieldsArgs,
18
+ FindCommissionsArgs,
19
+ FindMonitorEventsArgs,
20
+ FindOutputTagsArgs,
21
+ FindSyncStatesArgs,
22
+ FindTransactionsArgs,
23
+ FindTxLabelsArgs,
24
+ FindUsersArgs,
25
+ FindForUserSincePagedArgs,
26
+ StorageGetBeefOptions
27
+ } from '../../sdk'
28
+ import {
29
+ TableCertificate,
30
+ TableCertificateField,
31
+ TableCertificateX,
32
+ TableCommission,
33
+ TableMonitorEvent,
34
+ TableOutput,
35
+ TableOutputBasket,
36
+ TableOutputTag,
37
+ TableOutputTagMap,
38
+ TableProvenTx,
39
+ TableProvenTxReq,
40
+ TableSettings,
41
+ TableSyncState,
42
+ TableTransaction,
43
+ TableTxLabel,
44
+ TableTxLabelMap,
45
+ TableUser,
46
+ Services,
47
+ StorageAdminStats,
48
+ } from '../../index.client'
49
+ import { StorageProvider } from '../../storage/StorageProvider'
50
+
51
+ export async function getBeefForTxid(services: Services, txid: string): Promise<Beef> {
52
+ const storage = new ServicesOnlyStorageProvider(services)
53
+ const beef = await storage.getBeefForTxid(txid)
54
+ return beef
55
+ }
56
+
57
+ /**
58
+ * The generalized implementation of getBeefForTransaction uses storage to
59
+ * avoid incurring the cost of redundant block chain data queries.
60
+ *
61
+ * This class makes the generalized implementation of getBeefForTransaction
62
+ * available in situations where there storage is not relevant.
63
+ */
64
+ class ServicesOnlyStorageProvider extends StorageProvider {
65
+ gbo: StorageGetBeefOptions
66
+
67
+ constructor(services: Services) {
68
+ const o = StorageProvider.createStorageBaseOptions(services.chain)
69
+ super(o)
70
+ this.setServices(services)
71
+ this.gbo = {
72
+ ignoreServices: false,
73
+ ignoreStorage: true,
74
+ ignoreNewProven: true
75
+ }
76
+ }
77
+
78
+ async getBeefForTxid(txid: string): Promise<Beef> {
79
+ const beef = await this.getBeefForTransaction(txid, this.gbo)
80
+ return beef
81
+ }
82
+
83
+ nip = new Error('Method not implemented.')
84
+ override reviewStatus(args: { agedLimit: Date; trx?: TrxToken }): Promise<{ log: string }> {
85
+ throw this.nip
86
+ }
87
+ override purgeData(params: PurgeParams, trx?: TrxToken): Promise<PurgeResults> {
88
+ throw this.nip
89
+ }
90
+ override allocateChangeInput(
91
+ userId: number,
92
+ basketId: number,
93
+ targetSatoshis: number,
94
+ exactSatoshis: number | undefined,
95
+ excludeSending: boolean,
96
+ transactionId: number
97
+ ): Promise<TableOutput | undefined> {
98
+ throw this.nip
99
+ }
100
+ override getProvenOrRawTx(txid: string, trx?: TrxToken): Promise<ProvenOrRawTx> {
101
+ throw this.nip
102
+ }
103
+ override getRawTxOfKnownValidTransaction(
104
+ txid?: string,
105
+ offset?: number,
106
+ length?: number,
107
+ trx?: TrxToken
108
+ ): Promise<number[] | undefined> {
109
+ throw this.nip
110
+ }
111
+ override getLabelsForTransactionId(transactionId?: number, trx?: TrxToken): Promise<TableTxLabel[]> {
112
+ throw this.nip
113
+ }
114
+ override getTagsForOutputId(outputId: number, trx?: TrxToken): Promise<TableOutputTag[]> {
115
+ throw this.nip
116
+ }
117
+ override listActions(auth: AuthId, args: ValidListActionsArgs): Promise<ListActionsResult> {
118
+ throw this.nip
119
+ }
120
+ override listOutputs(auth: AuthId, args: ValidListOutputsArgs): Promise<ListOutputsResult> {
121
+ throw this.nip
122
+ }
123
+ override countChangeInputs(userId: number, basketId: number, excludeSending: boolean): Promise<number> {
124
+ throw this.nip
125
+ }
126
+ override findCertificatesAuth(auth: AuthId, args: FindCertificatesArgs): Promise<TableCertificateX[]> {
127
+ throw this.nip
128
+ }
129
+ override findOutputBasketsAuth(auth: AuthId, args: FindOutputBasketsArgs): Promise<TableOutputBasket[]> {
130
+ throw this.nip
131
+ }
132
+ override findOutputsAuth(auth: AuthId, args: FindOutputsArgs): Promise<TableOutput[]> {
133
+ throw this.nip
134
+ }
135
+ override insertCertificateAuth(auth: AuthId, certificate: TableCertificateX): Promise<number> {
136
+ throw this.nip
137
+ }
138
+ override dropAllData(): Promise<void> {
139
+ throw this.nip
140
+ }
141
+ override migrate(storageName: string, storageIdentityKey: string): Promise<string> {
142
+ throw this.nip
143
+ }
144
+ override findOutputTagMaps(args: FindOutputTagMapsArgs): Promise<TableOutputTagMap[]> {
145
+ throw this.nip
146
+ }
147
+ override findProvenTxReqs(args: FindProvenTxReqsArgs): Promise<TableProvenTxReq[]> {
148
+ throw this.nip
149
+ }
150
+ override findProvenTxs(args: FindProvenTxsArgs): Promise<TableProvenTx[]> {
151
+ throw this.nip
152
+ }
153
+ override findTxLabelMaps(args: FindTxLabelMapsArgs): Promise<TableTxLabelMap[]> {
154
+ throw this.nip
155
+ }
156
+ override countOutputTagMaps(args: FindOutputTagMapsArgs): Promise<number> {
157
+ throw this.nip
158
+ }
159
+ override countProvenTxReqs(args: FindProvenTxReqsArgs): Promise<number> {
160
+ throw this.nip
161
+ }
162
+ override countProvenTxs(args: FindProvenTxsArgs): Promise<number> {
163
+ throw this.nip
164
+ }
165
+ override countTxLabelMaps(args: FindTxLabelMapsArgs): Promise<number> {
166
+ throw this.nip
167
+ }
168
+ override insertCertificate(certificate: TableCertificate, trx?: TrxToken): Promise<number> {
169
+ throw this.nip
170
+ }
171
+ override insertCertificateField(certificateField: TableCertificateField, trx?: TrxToken): Promise<void> {
172
+ throw this.nip
173
+ }
174
+ override insertCommission(commission: TableCommission, trx?: TrxToken): Promise<number> {
175
+ throw this.nip
176
+ }
177
+ override insertMonitorEvent(event: TableMonitorEvent, trx?: TrxToken): Promise<number> {
178
+ throw this.nip
179
+ }
180
+ override insertOutput(output: TableOutput, trx?: TrxToken): Promise<number> {
181
+ throw this.nip
182
+ }
183
+ override insertOutputBasket(basket: TableOutputBasket, trx?: TrxToken): Promise<number> {
184
+ throw this.nip
185
+ }
186
+ override insertOutputTag(tag: TableOutputTag, trx?: TrxToken): Promise<number> {
187
+ throw this.nip
188
+ }
189
+ override insertOutputTagMap(tagMap: TableOutputTagMap, trx?: TrxToken): Promise<void> {
190
+ throw this.nip
191
+ }
192
+ override insertProvenTx(tx: TableProvenTx, trx?: TrxToken): Promise<number> {
193
+ throw this.nip
194
+ }
195
+ override insertProvenTxReq(tx: TableProvenTxReq, trx?: TrxToken): Promise<number> {
196
+ throw this.nip
197
+ }
198
+ override insertSyncState(syncState: TableSyncState, trx?: TrxToken): Promise<number> {
199
+ throw this.nip
200
+ }
201
+ override insertTransaction(tx: TableTransaction, trx?: TrxToken): Promise<number> {
202
+ throw this.nip
203
+ }
204
+ override insertTxLabel(label: TableTxLabel, trx?: TrxToken): Promise<number> {
205
+ throw this.nip
206
+ }
207
+ override insertTxLabelMap(labelMap: TableTxLabelMap, trx?: TrxToken): Promise<void> {
208
+ throw this.nip
209
+ }
210
+ override insertUser(user: TableUser, trx?: TrxToken): Promise<number> {
211
+ throw this.nip
212
+ }
213
+ override updateCertificate(id: number, update: Partial<TableCertificate>, trx?: TrxToken): Promise<number> {
214
+ throw this.nip
215
+ }
216
+ override updateCertificateField(
217
+ certificateId: number,
218
+ fieldName: string,
219
+ update: Partial<TableCertificateField>,
220
+ trx?: TrxToken
221
+ ): Promise<number> {
222
+ throw this.nip
223
+ }
224
+ override updateCommission(id: number, update: Partial<TableCommission>, trx?: TrxToken): Promise<number> {
225
+ throw this.nip
226
+ }
227
+ override updateMonitorEvent(id: number, update: Partial<TableMonitorEvent>, trx?: TrxToken): Promise<number> {
228
+ throw this.nip
229
+ }
230
+ override updateOutput(id: number, update: Partial<TableOutput>, trx?: TrxToken): Promise<number> {
231
+ throw this.nip
232
+ }
233
+ override updateOutputBasket(id: number, update: Partial<TableOutputBasket>, trx?: TrxToken): Promise<number> {
234
+ throw this.nip
235
+ }
236
+ override updateOutputTag(id: number, update: Partial<TableOutputTag>, trx?: TrxToken): Promise<number> {
237
+ throw this.nip
238
+ }
239
+ override updateOutputTagMap(
240
+ outputId: number,
241
+ tagId: number,
242
+ update: Partial<TableOutputTagMap>,
243
+ trx?: TrxToken
244
+ ): Promise<number> {
245
+ throw this.nip
246
+ }
247
+ override updateProvenTx(id: number, update: Partial<TableProvenTx>, trx?: TrxToken): Promise<number> {
248
+ throw this.nip
249
+ }
250
+ override updateProvenTxReq(
251
+ id: number | number[],
252
+ update: Partial<TableProvenTxReq>,
253
+ trx?: TrxToken
254
+ ): Promise<number> {
255
+ throw this.nip
256
+ }
257
+ override updateSyncState(id: number, update: Partial<TableSyncState>, trx?: TrxToken): Promise<number> {
258
+ throw this.nip
259
+ }
260
+ override updateTransaction(
261
+ id: number | number[],
262
+ update: Partial<TableTransaction>,
263
+ trx?: TrxToken
264
+ ): Promise<number> {
265
+ throw this.nip
266
+ }
267
+ override updateTxLabel(id: number, update: Partial<TableTxLabel>, trx?: TrxToken): Promise<number> {
268
+ throw this.nip
269
+ }
270
+ override updateTxLabelMap(
271
+ transactionId: number,
272
+ txLabelId: number,
273
+ update: Partial<TableTxLabelMap>,
274
+ trx?: TrxToken
275
+ ): Promise<number> {
276
+ throw this.nip
277
+ }
278
+ override updateUser(id: number, update: Partial<TableUser>, trx?: TrxToken): Promise<number> {
279
+ throw this.nip
280
+ }
281
+ override destroy(): Promise<void> {
282
+ throw this.nip
283
+ }
284
+ override transaction<T>(scope: (trx: TrxToken) => Promise<T>, trx?: TrxToken): Promise<T> {
285
+ throw this.nip
286
+ }
287
+ override readSettings(trx?: TrxToken): Promise<TableSettings> {
288
+ throw this.nip
289
+ }
290
+ override findCertificateFields(args: FindCertificateFieldsArgs): Promise<TableCertificateField[]> {
291
+ throw this.nip
292
+ }
293
+ override findCertificates(args: FindCertificatesArgs): Promise<TableCertificateX[]> {
294
+ throw this.nip
295
+ }
296
+ override findCommissions(args: FindCommissionsArgs): Promise<TableCommission[]> {
297
+ throw this.nip
298
+ }
299
+ override findMonitorEvents(args: FindMonitorEventsArgs): Promise<TableMonitorEvent[]> {
300
+ throw this.nip
301
+ }
302
+ override findOutputBaskets(args: FindOutputBasketsArgs): Promise<TableOutputBasket[]> {
303
+ throw this.nip
304
+ }
305
+ override findOutputs(args: FindOutputsArgs): Promise<TableOutput[]> {
306
+ throw this.nip
307
+ }
308
+ override findOutputTags(args: FindOutputTagsArgs): Promise<TableOutputTag[]> {
309
+ throw this.nip
310
+ }
311
+ override findSyncStates(args: FindSyncStatesArgs): Promise<TableSyncState[]> {
312
+ throw this.nip
313
+ }
314
+ override findTransactions(args: FindTransactionsArgs): Promise<TableTransaction[]> {
315
+ throw this.nip
316
+ }
317
+ override findTxLabels(args: FindTxLabelsArgs): Promise<TableTxLabel[]> {
318
+ throw this.nip
319
+ }
320
+ override findUsers(args: FindUsersArgs): Promise<TableUser[]> {
321
+ throw this.nip
322
+ }
323
+ override countCertificateFields(args: FindCertificateFieldsArgs): Promise<number> {
324
+ throw this.nip
325
+ }
326
+ override countCertificates(args: FindCertificatesArgs): Promise<number> {
327
+ throw this.nip
328
+ }
329
+ override countCommissions(args: FindCommissionsArgs): Promise<number> {
330
+ throw this.nip
331
+ }
332
+ override countMonitorEvents(args: FindMonitorEventsArgs): Promise<number> {
333
+ throw this.nip
334
+ }
335
+ override countOutputBaskets(args: FindOutputBasketsArgs): Promise<number> {
336
+ throw this.nip
337
+ }
338
+ override countOutputs(args: FindOutputsArgs): Promise<number> {
339
+ throw this.nip
340
+ }
341
+ override countOutputTags(args: FindOutputTagsArgs): Promise<number> {
342
+ throw this.nip
343
+ }
344
+ override countSyncStates(args: FindSyncStatesArgs): Promise<number> {
345
+ throw this.nip
346
+ }
347
+ override countTransactions(args: FindTransactionsArgs): Promise<number> {
348
+ throw this.nip
349
+ }
350
+ override countTxLabels(args: FindTxLabelsArgs): Promise<number> {
351
+ throw this.nip
352
+ }
353
+ override countUsers(args: FindUsersArgs): Promise<number> {
354
+ throw this.nip
355
+ }
356
+ override getProvenTxsForUser(args: FindForUserSincePagedArgs): Promise<TableProvenTx[]> {
357
+ throw this.nip
358
+ }
359
+ override getProvenTxReqsForUser(args: FindForUserSincePagedArgs): Promise<TableProvenTxReq[]> {
360
+ throw this.nip
361
+ }
362
+ override getTxLabelMapsForUser(args: FindForUserSincePagedArgs): Promise<TableTxLabelMap[]> {
363
+ throw this.nip
364
+ }
365
+ override getOutputTagMapsForUser(args: FindForUserSincePagedArgs): Promise<TableOutputTagMap[]> {
366
+ throw this.nip
367
+ }
368
+ override adminStats(adminIdentityKey: string): Promise<StorageAdminStats> {
369
+ throw this.nip
370
+ }
371
+ }
@@ -29,7 +29,14 @@ describe('StorageIdb tests', () => {
29
29
  await store.migrate(store.dbName, PrivateKey.fromRandom().toHex())
30
30
  await store.makeAvailable()
31
31
  await wallet.storage.addWalletStorageProvider(store)
32
- await wallet.storage.setActive(stores[0].storageIdentityKey, (s) => { console.log(s); return s })
33
- await wallet.storage.updateBackups(undefined, (s) => { console.log(s); return s })
32
+ await wallet.storage.setActive(stores[0].storageIdentityKey, s => {
33
+ console.log(s)
34
+ return s
35
+ })
36
+ await wallet.storage.updateBackups(undefined, s => {
37
+ console.log(s)
38
+ return s
39
+ })
40
+ await wallet.destroy()
34
41
  })
35
42
  })
@@ -134,7 +134,9 @@ describe('ProvenTx class method tests', () => {
134
134
  height: height,
135
135
  hash: blockHash
136
136
  }),
137
- nLockTimeIsFinal: async () => true
137
+ nLockTimeIsFinal: async () => true,
138
+
139
+ getBeefForTxid: async () => new bsv.Beef()
138
140
  }
139
141
 
140
142
  // Call the method under test