@bsv/wallet-toolbox-client 1.1.12 → 1.1.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.
Files changed (65) hide show
  1. package/out/src/SetupClient.d.ts +9 -0
  2. package/out/src/SetupClient.d.ts.map +1 -1
  3. package/out/src/SetupClient.js +34 -18
  4. package/out/src/SetupClient.js.map +1 -1
  5. package/out/src/Wallet.d.ts +6 -0
  6. package/out/src/Wallet.d.ts.map +1 -1
  7. package/out/src/Wallet.js +57 -0
  8. package/out/src/Wallet.js.map +1 -1
  9. package/out/src/sdk/WalletServices.interfaces.d.ts +18 -13
  10. package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  11. package/out/src/services/Services.d.ts +4 -11
  12. package/out/src/services/Services.d.ts.map +1 -1
  13. package/out/src/services/Services.js +19 -37
  14. package/out/src/services/Services.js.map +1 -1
  15. package/out/src/services/createDefaultWalletServicesOptions.d.ts +1 -0
  16. package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
  17. package/out/src/services/createDefaultWalletServicesOptions.js +16 -4
  18. package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
  19. package/out/src/services/providers/ARC.d.ts +91 -0
  20. package/out/src/services/providers/ARC.d.ts.map +1 -0
  21. package/out/src/services/providers/ARC.js +192 -0
  22. package/out/src/services/providers/ARC.js.map +1 -0
  23. package/out/src/services/providers/SdkWhatsOnChain.d.ts +21 -0
  24. package/out/src/services/providers/SdkWhatsOnChain.d.ts.map +1 -0
  25. package/out/src/services/providers/SdkWhatsOnChain.js +67 -0
  26. package/out/src/services/providers/SdkWhatsOnChain.js.map +1 -0
  27. package/out/src/services/providers/WhatsOnChain.d.ts +35 -0
  28. package/out/src/services/providers/WhatsOnChain.d.ts.map +1 -0
  29. package/out/src/services/providers/WhatsOnChain.js +266 -0
  30. package/out/src/services/providers/WhatsOnChain.js.map +1 -0
  31. package/out/src/signer/methods/createAction.js +3 -3
  32. package/out/src/signer/methods/createAction.js.map +1 -1
  33. package/out/src/signer/methods/signAction.js +1 -1
  34. package/out/src/signer/methods/signAction.js.map +1 -1
  35. package/out/src/storage/methods/createAction.d.ts.map +1 -1
  36. package/out/src/storage/methods/createAction.js +9 -2
  37. package/out/src/storage/methods/createAction.js.map +1 -1
  38. package/out/src/storage/methods/generateChange.d.ts +12 -1
  39. package/out/src/storage/methods/generateChange.d.ts.map +1 -1
  40. package/out/src/storage/methods/generateChange.js +24 -1
  41. package/out/src/storage/methods/generateChange.js.map +1 -1
  42. package/out/src/storage/methods/processAction.d.ts.map +1 -1
  43. package/out/src/storage/methods/processAction.js +1 -1
  44. package/out/src/storage/methods/processAction.js.map +1 -1
  45. package/out/src/utility/{ScriptTemplateSABPPP.d.ts → ScriptTemplateBRC29.d.ts} +6 -6
  46. package/out/src/utility/ScriptTemplateBRC29.d.ts.map +1 -0
  47. package/out/src/utility/{ScriptTemplateSABPPP.js → ScriptTemplateBRC29.js} +4 -4
  48. package/out/src/utility/ScriptTemplateBRC29.js.map +1 -0
  49. package/out/src/utility/index.client.d.ts +1 -1
  50. package/out/src/utility/index.client.d.ts.map +1 -1
  51. package/out/src/utility/index.client.js +1 -1
  52. package/out/src/utility/index.client.js.map +1 -1
  53. package/out/src/utility/utilityHelpers.js +1 -1
  54. package/out/src/utility/utilityHelpers.js.map +1 -1
  55. package/package.json +3 -4
  56. package/out/src/services/providers/arcServices.d.ts +0 -62
  57. package/out/src/services/providers/arcServices.d.ts.map +0 -1
  58. package/out/src/services/providers/arcServices.js +0 -375
  59. package/out/src/services/providers/arcServices.js.map +0 -1
  60. package/out/src/services/providers/whatsonchain.d.ts +0 -17
  61. package/out/src/services/providers/whatsonchain.d.ts.map +0 -1
  62. package/out/src/services/providers/whatsonchain.js +0 -130
  63. package/out/src/services/providers/whatsonchain.js.map +0 -1
  64. package/out/src/utility/ScriptTemplateSABPPP.d.ts.map +0 -1
  65. package/out/src/utility/ScriptTemplateSABPPP.js.map +0 -1
@@ -1,375 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getTaalArcServiceConfig = getTaalArcServiceConfig;
7
- exports.makePostTxsToTaalARC = makePostTxsToTaalARC;
8
- exports.makePostBeefToTaalARC = makePostBeefToTaalARC;
9
- exports.makeGetMerklePathFromTaalARC = makeGetMerklePathFromTaalARC;
10
- exports.getMerklePathFromTaalARC = getMerklePathFromTaalARC;
11
- exports.postTxsToTaalArcMiner = postTxsToTaalArcMiner;
12
- exports.postBeefToTaalArcMiner = postBeefToTaalArcMiner;
13
- exports.postBeefToArcMiner = postBeefToArcMiner;
14
- exports.makePostBeefResult = makePostBeefResult;
15
- exports.makeErrorResult = makeErrorResult;
16
- const sdk_1 = require("@bsv/sdk");
17
- const index_client_1 = require("../../index.client");
18
- const axios_1 = __importDefault(require("axios"));
19
- const stream_1 = require("stream");
20
- const BEEF_V1 = 4022206465; // 0100BEEF in LE order
21
- const BEEF_V2 = 4022206466; // 0200BEEF in LE order
22
- function getTaalArcServiceConfig(chain, apiKey) {
23
- return {
24
- name: 'TaalArc',
25
- url: chain === 'main'
26
- ? 'https://api.taal.com/arc'
27
- : 'https://arc-test.taal.com',
28
- arcConfig: {
29
- apiKey,
30
- deploymentId: `WalletServices-${(0, index_client_1.randomBytesHex)(16)}`
31
- }
32
- };
33
- }
34
- function makePostTxsToTaalARC(config) {
35
- return (beef, txids, services) => {
36
- return postTxsToTaalArcMiner(beef, txids, config, services);
37
- };
38
- }
39
- function makePostBeefToTaalARC(config) {
40
- return (beef, txids, services) => {
41
- return postBeefToTaalArcMiner(beef, txids, config, services);
42
- };
43
- }
44
- function makeGetMerklePathFromTaalARC(config) {
45
- return (txid, chain, services) => {
46
- return getMerklePathFromTaalARC(txid, config, services);
47
- };
48
- }
49
- class ArcServices {
50
- /**
51
- * Constructs an instance of the ARC broadcaster.
52
- *
53
- * @param {string} URL - The URL endpoint for the ARC API.
54
- * @param {ArcConfig} config - Configuration options for the ARC broadcaster.
55
- */
56
- constructor(URL, config) {
57
- this.URL = URL;
58
- const { apiKey, deploymentId, httpClient, callbackToken, callbackUrl, headers } = config;
59
- this.apiKey = apiKey;
60
- this.httpClient = httpClient !== null && httpClient !== void 0 ? httpClient : (0, sdk_1.defaultHttpClient)();
61
- this.deploymentId = deploymentId || `WalletServices-${(0, index_client_1.randomBytesHex)(16)}`;
62
- this.callbackToken = callbackToken;
63
- this.callbackUrl = callbackUrl;
64
- this.headers = headers;
65
- }
66
- /**
67
- * Unfortunately this seems to only work for recently submitted txids...
68
- * @param txid
69
- * @returns
70
- */
71
- async getTxStatus(txid) {
72
- const requestOptions = {
73
- method: 'GET',
74
- headers: this.requestHeaders()
75
- };
76
- const response = await this.httpClient.request(`${this.URL}/v1/tx/${txid}`, requestOptions);
77
- return response.data;
78
- }
79
- requestHeaders() {
80
- const headers = {
81
- 'Content-Type': 'application/json',
82
- 'XDeployment-ID': this.deploymentId
83
- };
84
- if (this.apiKey) {
85
- headers.Authorization = `Bearer ${this.apiKey}`;
86
- }
87
- if (this.callbackUrl) {
88
- headers['X-CallbackUrl'] = this.callbackUrl;
89
- }
90
- if (this.callbackToken) {
91
- headers['X-CallbackToken'] = this.callbackToken;
92
- }
93
- if (this.headers) {
94
- for (const key in this.headers) {
95
- headers[key] = this.headers[key];
96
- }
97
- }
98
- return headers;
99
- }
100
- }
101
- async function getMerklePathFromTaalARC(txid, config, services) {
102
- const r = { name: config.name };
103
- try {
104
- const arc = new ArcServices(config.url, config.arcConfig);
105
- const rr = await arc.getTxStatus(txid);
106
- if (rr.status === 200 && rr.merklePath) {
107
- const mp = sdk_1.MerklePath.fromHex(rr.merklePath);
108
- r.merklePath = mp;
109
- r.header = await services.hashToHeader(rr.blockHash);
110
- }
111
- }
112
- catch (eu) {
113
- r.error = index_client_1.sdk.WalletError.fromUnknown(eu);
114
- }
115
- return r;
116
- }
117
- /**
118
- *
119
- * @param txs All transactions must have source transactions. Will just source locking scripts and satoshis do?? toHexEF() is used.
120
- * @param config
121
- */
122
- async function postTxsToTaalArcMiner(beef, txids, config, services) {
123
- const r = {
124
- name: config.name,
125
- status: 'error',
126
- txidResults: []
127
- };
128
- try {
129
- const arc = new sdk_1.ARC(config.url, config.arcConfig);
130
- /**
131
- * This service requires an array of EF serialized transactions:
132
- * Pull the transactions matching txids array out of the Beef and fill in input sourceTransations,
133
- * either from Beef or by external service lookup.
134
- */
135
- const txs = [];
136
- for (const txid of txids) {
137
- const btx = beef.findTxid(txid);
138
- if (btx) {
139
- const tx = btx.tx;
140
- for (const input of tx.inputs) {
141
- if (!input.sourceTXID || input.sourceTXID === '0'.repeat(64))
142
- continue; // all zero txid is a coinbase input.
143
- let itx = beef.findTxid(input.sourceTXID);
144
- if (!itx) {
145
- const rawTx = await services.getRawTx(input.sourceTXID);
146
- if (!rawTx || !rawTx.rawTx)
147
- throw new index_client_1.sdk.WERR_INVALID_PARAMETER('sourceTXID', `contained in beef or found on chain. ${input.sourceTXID}`);
148
- beef.mergeRawTx(rawTx.rawTx);
149
- itx = beef.findTxid(input.sourceTXID);
150
- }
151
- input.sourceTransaction = itx.tx;
152
- }
153
- txs.push(tx);
154
- }
155
- else
156
- throw new index_client_1.sdk.WERR_INVALID_PARAMETER('beef', `merged with rawTxs matching txids. Missing ${txid}`);
157
- }
158
- const rrs = (await arc.broadcastMany(txs));
159
- if (typeof rrs === 'string') {
160
- const rawTxs = txs.map(tx => {
161
- return { rawTx: tx.toHexEF() };
162
- });
163
- console.log(`const rawTxs = '${JSON.stringify(rawTxs)}`);
164
- throw new index_client_1.sdk.WERR_BAD_REQUEST(`broadcastMany error: ${rrs}`);
165
- }
166
- r.status = 'success';
167
- for (const txid of txids) {
168
- const txr = { txid, status: 'success' };
169
- const rr = rrs.find(r => r.txid === txid);
170
- if (!rr) {
171
- r.status = txr.status = 'error';
172
- }
173
- else {
174
- txr.data = rr;
175
- if (rr.status !== 200)
176
- r.status = txr.status = 'error';
177
- else {
178
- txr.blockHash = rr.blockHash;
179
- txr.blockHeight = rr.blockHeight;
180
- txr.merklePath = !rr.merklePath
181
- ? undefined
182
- : sdk_1.MerklePath.fromHex(rr.merklePath);
183
- }
184
- }
185
- r.txidResults.push(txr);
186
- }
187
- r.data = rrs;
188
- }
189
- catch (eu) {
190
- r.error = index_client_1.sdk.WalletError.fromUnknown(eu);
191
- }
192
- return r;
193
- }
194
- async function postBeefToTaalArcMiner(beef, txids, config, services) {
195
- const r1 = await postBeefToArcMiner(beef, txids, config);
196
- return r1;
197
- if (r1.status === 'success')
198
- return r1;
199
- const datas = { r1: r1.data };
200
- const r2 = await services.postTxs(beef, txids);
201
- const r3 = {
202
- name: config.name,
203
- status: 'success',
204
- data: {},
205
- txidResults: []
206
- };
207
- for (const txid of txids) {
208
- const rawTx = beef.findTxid(txid).rawTx;
209
- const rt = await postBeefToArcMiner(rawTx, [txid], config);
210
- if (rt.status === 'error')
211
- r3.status = 'error';
212
- r3.data[txid] = rt.data;
213
- r3.txidResults.push(rt.txidResults[0]);
214
- }
215
- datas['r3'] = r3.data;
216
- r3.data = datas;
217
- return r3;
218
- }
219
- async function postBeefToArcMiner(beef, txids, config) {
220
- const m = { ...config };
221
- let url = '';
222
- let r = undefined;
223
- // HACK to resolve ARC error when row has zero leaves.
224
- // beef.addComputedLeaves()
225
- let beefBinary;
226
- if (Array.isArray(beef))
227
- beefBinary = beef;
228
- else {
229
- // HACK to resolve ARC not handling V2 Beef after change Beef class to always serialize as V2 if default constructed:
230
- beef.version = BEEF_V1;
231
- beefBinary = beef.toBinary();
232
- }
233
- try {
234
- const length = beefBinary.length;
235
- const makeRequestHeaders = () => {
236
- const headers = {
237
- 'Content-Type': 'application/octet-stream',
238
- 'Content-Length': length.toString(),
239
- 'XDeployment-ID': m.arcConfig.deploymentId || `WalletServices-${(0, index_client_1.randomBytesHex)(16)}`
240
- };
241
- if (m.arcConfig.apiKey) {
242
- headers['Authorization'] = `Bearer ${m.arcConfig.apiKey}`;
243
- }
244
- return headers;
245
- };
246
- const headers = makeRequestHeaders();
247
- const stream = new stream_1.Readable({
248
- read() {
249
- this.push(Buffer.from(beefBinary));
250
- this.push(null);
251
- }
252
- });
253
- url = `${config.url}/v1/tx`;
254
- const data = await axios_1.default.post(url, stream, {
255
- headers,
256
- maxBodyLength: Infinity,
257
- validateStatus: () => true
258
- });
259
- if (!data || !data.data)
260
- throw new index_client_1.sdk.WERR_BAD_REQUEST('no response data');
261
- if (data.data === 'No Authorization' ||
262
- data.status === 403 ||
263
- data.statusText === 'Forbiden')
264
- throw new index_client_1.sdk.WERR_BAD_REQUEST('No Authorization');
265
- if (typeof data.data !== 'object')
266
- throw new index_client_1.sdk.WERR_BAD_REQUEST('no response data object');
267
- const dd = data.data;
268
- r = makePostBeefResult(dd, config, beefBinary, txids);
269
- }
270
- catch (err) {
271
- console.error(err);
272
- const error = new index_client_1.sdk.WERR_INTERNAL(`service: ${url}, error: ${JSON.stringify(index_client_1.sdk.WalletError.fromUnknown(err))}`);
273
- r = makeErrorResult(error, config, beefBinary, txids);
274
- }
275
- return r;
276
- }
277
- function makePostBeefResult(dd, miner, beef, txids) {
278
- let r;
279
- switch (dd.status) {
280
- case 200: // Success
281
- r = makeSuccessResult(dd, miner, beef, txids);
282
- break;
283
- case 400: // Bad Request
284
- r = makeErrorResult(new index_client_1.sdk.WERR_BAD_REQUEST(), miner, beef, txids, dd);
285
- break;
286
- case 401: // Security Failed
287
- r = makeErrorResult(new index_client_1.sdk.WERR_BAD_REQUEST(`Security Failed (401)`), miner, beef, txids, dd);
288
- break;
289
- case 409: // Generic Error
290
- case 422: // RFC 7807 Error
291
- case 460: // Not Extended Format
292
- case 467: // Mined Ancestor Missing
293
- case 468: // Invalid BUMPs
294
- r = makeErrorResult(new index_client_1.sdk.WERR_BAD_REQUEST(`status ${dd.status}, title ${dd.title}`), miner, beef, txids, dd);
295
- break;
296
- case 461: // Malformed Transaction
297
- case 463: // Malformed Transaction
298
- case 464: // Invalid Outputs
299
- r = makeErrorResult(new index_client_1.sdk.WERR_BAD_REQUEST(`status ${dd.status}, title ${dd.title}`), miner, beef, txids, dd);
300
- break;
301
- case 462: // Invalid Inputs
302
- if (dd.txid)
303
- r = makeErrorResult(new index_client_1.sdk.WERR_BAD_REQUEST(`status ${dd.status}, title ${dd.title}`), miner, beef, txids, dd);
304
- else
305
- r = makeErrorResult(new index_client_1.sdk.WERR_BAD_REQUEST(`status ${dd.status}, title ${dd.title}`), miner, beef, txids, dd);
306
- break;
307
- case 465: // Fee Too Low
308
- case 473: // Cumulative Fee Validation Failed
309
- r = makeErrorResult(new index_client_1.sdk.WERR_BAD_REQUEST(`status ${dd.status}, title ${dd.title}`), miner, beef, txids, dd);
310
- break;
311
- case 469: // Invalid Merkle Root
312
- r = makeErrorResult(new index_client_1.sdk.WERR_BAD_REQUEST(`status ${dd.status}, title ${dd.title}`), miner, beef, txids, dd);
313
- break;
314
- default:
315
- r = makeErrorResult(new index_client_1.sdk.WERR_BAD_REQUEST(`status ${dd.status}, title ${dd.title}`), miner, beef, txids, dd);
316
- break;
317
- }
318
- return r;
319
- }
320
- function makeSuccessResult(dd, miner,
321
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
322
- beef,
323
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
324
- txids) {
325
- const r = {
326
- status: 'success',
327
- name: miner.name,
328
- data: dd,
329
- txidResults: []
330
- };
331
- for (let i = 0; i < txids.length; i++) {
332
- const rt = {
333
- txid: txids[i],
334
- status: 'success'
335
- };
336
- if (dd.txid === txids[i]) {
337
- rt.alreadyKnown =
338
- !!dd.txStatus && ['SEEN_ON_NETWORK', 'MINED'].indexOf(dd.txStatus) >= 0;
339
- rt.txid = dd.txid;
340
- rt.blockHash = dd.blockHash;
341
- rt.blockHeight = dd.blockHeight;
342
- rt.merklePath = sdk_1.MerklePath.fromBinary((0, index_client_1.asArray)(dd.merklePath));
343
- }
344
- r.txidResults.push(rt);
345
- }
346
- return r;
347
- }
348
- function makeErrorResult(error, miner,
349
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
350
- beef, txids, dd) {
351
- const r = {
352
- status: 'error',
353
- name: miner.name,
354
- error,
355
- data: dd,
356
- txidResults: []
357
- };
358
- for (let i = 0; i < txids.length; i++) {
359
- const rt = {
360
- txid: txids[i],
361
- status: 'error'
362
- };
363
- if ((dd === null || dd === void 0 ? void 0 : dd.txid) === txids[i]) {
364
- rt.alreadyKnown =
365
- !!dd.txStatus && ['SEEN_ON_NETWORK', 'MINED'].indexOf(dd.txStatus) >= 0;
366
- rt.txid = dd.txid;
367
- rt.blockHash = dd.blockHash;
368
- rt.blockHeight = dd.blockHeight;
369
- rt.merklePath = sdk_1.MerklePath.fromBinary((0, index_client_1.asArray)(dd.merklePath));
370
- }
371
- r.txidResults.push(rt);
372
- }
373
- return r;
374
- }
375
- //# sourceMappingURL=arcServices.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"arcServices.js","sourceRoot":"","sources":["../../../../../src/services/providers/arcServices.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import { sdk } from '../../index.client';
2
- /**
3
- * WhatOnChain.com has their own "hash/pos/R/L" proof format and a more TSC compliant proof format.
4
- *
5
- * The "/proof/tsc" endpoint is much closer to the TSC specification. It provides "index" directly and each node is just the provided hash value.
6
- * The "targetType" is unspecified and thus defaults to block header hash, requiring a Chaintracks lookup to get the merkleRoot...
7
- * Duplicate hash values are provided in full instead of being replaced by "*".
8
- *
9
- * @param txid
10
- * @param chain
11
- * @returns
12
- */
13
- export declare function getMerklePathFromWhatsOnChainTsc(txid: string, chain: sdk.Chain, services: sdk.WalletServices): Promise<sdk.GetMerklePathResult>;
14
- export declare function getRawTxFromWhatsOnChain(txid: string, chain: sdk.Chain): Promise<sdk.GetRawTxResult>;
15
- export declare function getUtxoStatusFromWhatsOnChain(output: string, chain: sdk.Chain, outputFormat?: sdk.GetUtxoStatusOutputFormat): Promise<sdk.GetUtxoStatusResult>;
16
- export declare function updateBsvExchangeRate(rate?: sdk.BsvExchangeRate, updateMsecs?: number): Promise<sdk.BsvExchangeRate>;
17
- //# sourceMappingURL=whatsonchain.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whatsonchain.d.ts","sourceRoot":"","sources":["../../../../../src/services/providers/whatsonchain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,GAAG,EAAsB,MAAM,oBAAoB,CAAA;AAM/E;;;;;;;;;;GAUG;AACH,wBAAsB,gCAAgC,CACpD,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,QAAQ,EAAE,GAAG,CAAC,cAAc,GAC3B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAwBlC;AASD,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG,CAAC,KAAK,GACf,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAc7B;AASD,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,GAAG,CAAC,KAAK,EAChB,YAAY,CAAC,EAAE,GAAG,CAAC,yBAAyB,GAC3C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAoDlC;AAQD,wBAAsB,qBAAqB,CACzC,IAAI,CAAC,EAAE,GAAG,CAAC,eAAe,EAC1B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAsB9B"}
@@ -1,130 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getMerklePathFromWhatsOnChainTsc = getMerklePathFromWhatsOnChainTsc;
7
- exports.getRawTxFromWhatsOnChain = getRawTxFromWhatsOnChain;
8
- exports.getUtxoStatusFromWhatsOnChain = getUtxoStatusFromWhatsOnChain;
9
- exports.updateBsvExchangeRate = updateBsvExchangeRate;
10
- const index_client_1 = require("../../index.client");
11
- const tscProofToMerklePath_1 = require("../../utility/tscProofToMerklePath");
12
- const axios_1 = __importDefault(require("axios"));
13
- const whatsonchain_1 = __importDefault(require("whatsonchain"));
14
- /**
15
- * WhatOnChain.com has their own "hash/pos/R/L" proof format and a more TSC compliant proof format.
16
- *
17
- * The "/proof/tsc" endpoint is much closer to the TSC specification. It provides "index" directly and each node is just the provided hash value.
18
- * The "targetType" is unspecified and thus defaults to block header hash, requiring a Chaintracks lookup to get the merkleRoot...
19
- * Duplicate hash values are provided in full instead of being replaced by "*".
20
- *
21
- * @param txid
22
- * @param chain
23
- * @returns
24
- */
25
- async function getMerklePathFromWhatsOnChainTsc(txid, chain, services) {
26
- const r = { name: 'WoCTsc' };
27
- try {
28
- const url = `https://api.whatsonchain.com/v1/bsv/${chain}/tx/${txid}/proof/tsc`;
29
- let { data } = await axios_1.default.get(url);
30
- if (!data || data.length < 1)
31
- return r;
32
- if (!data['target'])
33
- data = data[0];
34
- const p = data;
35
- const header = await services.hashToHeader(p.target);
36
- if (!header)
37
- throw new index_client_1.sdk.WERR_INVALID_PARAMETER('blockhash', 'a valid on-chain block hash');
38
- const proof = { index: p.index, nodes: p.nodes, height: header.height };
39
- r.merklePath = (0, tscProofToMerklePath_1.convertProofToMerklePath)(txid, proof);
40
- r.header = header;
41
- }
42
- catch (err) {
43
- r.error = index_client_1.sdk.WalletError.fromUnknown(err);
44
- }
45
- return r;
46
- }
47
- async function getRawTxFromWhatsOnChain(txid, chain) {
48
- const r = { name: 'WoC', txid: (0, index_client_1.asString)(txid) };
49
- try {
50
- const url = `https://api.whatsonchain.com/v1/bsv/${chain}/tx/${txid}/hex`;
51
- const { data } = await axios_1.default.get(url);
52
- if (!data)
53
- return r;
54
- r.rawTx = (0, index_client_1.asArray)(data);
55
- }
56
- catch (err) {
57
- r.error = index_client_1.sdk.WalletError.fromUnknown(err);
58
- }
59
- return r;
60
- }
61
- async function getUtxoStatusFromWhatsOnChain(output, chain, outputFormat) {
62
- const r = {
63
- name: 'WoC',
64
- status: 'error',
65
- error: new index_client_1.sdk.WERR_INTERNAL(),
66
- details: []
67
- };
68
- for (let retry = 0;; retry++) {
69
- let url = '';
70
- try {
71
- const scriptHash = (0, index_client_1.validateScriptHash)(output, outputFormat);
72
- url = `https://api.whatsonchain.com/v1/bsv/${chain}/script/${scriptHash}/unspent`;
73
- const { data } = await axios_1.default.get(url);
74
- if (Array.isArray(data)) {
75
- if (data.length === 0) {
76
- r.status = 'success';
77
- r.error = undefined;
78
- r.isUtxo = false;
79
- }
80
- else {
81
- r.status = 'success';
82
- r.error = undefined;
83
- r.isUtxo = true;
84
- for (const s of data) {
85
- r.details.push({
86
- txid: s.tx_hash,
87
- satoshis: s.value,
88
- height: s.height,
89
- index: s.tx_pos
90
- });
91
- }
92
- }
93
- }
94
- else {
95
- throw new index_client_1.sdk.WERR_INTERNAL('data is not an array');
96
- }
97
- return r;
98
- }
99
- catch (eu) {
100
- const e = index_client_1.sdk.WalletError.fromUnknown(eu);
101
- if (e.code !== 'ECONNRESET' || retry > 2) {
102
- r.error = new index_client_1.sdk.WERR_INTERNAL(`service failure: ${url}, error: ${JSON.stringify(index_client_1.sdk.WalletError.fromUnknown(eu))}`);
103
- return r;
104
- }
105
- }
106
- }
107
- return r;
108
- }
109
- async function updateBsvExchangeRate(rate, updateMsecs) {
110
- if (rate) {
111
- // Check if the rate we know is stale enough to update.
112
- updateMsecs || (updateMsecs = 1000 * 60 * 15);
113
- if (new Date(Date.now() - updateMsecs) < rate.timestamp)
114
- return rate;
115
- }
116
- // TODO: Expand to redundant services with caching...
117
- const woc = new whatsonchain_1.default();
118
- const r = await woc.exchangeRate();
119
- const wocrate = r;
120
- if (wocrate.currency !== 'USD')
121
- wocrate.rate = NaN;
122
- const newRate = {
123
- timestamp: new Date(),
124
- base: 'USD',
125
- rate: wocrate.rate
126
- };
127
- //console.log(`new bsv rate=${JSON.stringify(newRate)}`)
128
- return newRate;
129
- }
130
- //# sourceMappingURL=whatsonchain.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whatsonchain.js","sourceRoot":"","sources":["../../../../../src/services/providers/whatsonchain.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ScriptTemplateSABPPP.d.ts","sourceRoot":"","sources":["../../../../src/utility/ScriptTemplateSABPPP.ts"],"names":[],"mappings":"AACA,OAAO,EACL,SAAS,EAET,aAAa,EACb,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,KAAK,EACL,UAAU,EACV,MAAM,EAGP,MAAM,UAAU,CAAA;AAEjB,MAAM,WAAW,0BAA0B;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE,aAAa,CAAA;CAC1B;AAED,eAAO,MAAM,eAAe,EAAE,cAAoC,CAAA;AAElE;;;GAGG;AACH,qBAAa,oBAAqB,YAAW,cAAc;IAGtC,MAAM,EAAE,0BAA0B;IAFrD,KAAK,EAAE,KAAK,CAAA;gBAEO,MAAM,EAAE,0BAA0B;IAOrD,QAAQ;IAIR,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,aAAa;IAU7D,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,aAAa;IAQlE,MAAM,CACJ,eAAe,EAAE,MAAM,EACvB,YAAY,EAAE,MAAM,EACpB,cAAc,CAAC,EAAE,MAAM,EACvB,aAAa,CAAC,EAAE,MAAM,GACrB,oBAAoB;IAcvB;;OAEG;IACH,YAAY,SAAM;CACnB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ScriptTemplateSABPPP.js","sourceRoot":"","sources":["../../../../src/utility/ScriptTemplateSABPPP.ts"],"names":[],"mappings":";;;AAAA,iDAAiE;AACjE,kCAaiB;AAQJ,QAAA,eAAe,GAAmB,CAAC,CAAC,EAAE,cAAc,CAAC,CAAA;AAElE;;;GAGG;AACH,MAAa,oBAAoB;IAG/B,YAAmB,MAAkC;QAAlC,WAAM,GAAN,MAAM,CAA4B;QAgDrD;;WAEG;QACH,iBAAY,GAAG,GAAG,CAAA;QAlDhB,IAAI,CAAC,KAAK,GAAG,IAAI,WAAK,EAAE,CAAA;QAExB,IAAA,2BAAY,EAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;QACrC,IAAA,2BAAY,EAAC,MAAM,CAAC,gBAAgB,CAAC,CAAA;IACvC,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAA;IAC1E,CAAC;IAED,aAAa,CAAC,OAA+B;QAC3C,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,GAAG,gBAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACtE,IACE,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU;YACvB,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,OAAO,CAAC,KAAK,EAAE;YAE1D,OAAO,IAAI,gBAAU,CAAC,OAAO,CAAC,CAAA;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAA;IAC/B,CAAC;IAED,IAAI,CAAC,aAAqB,EAAE,cAAsB;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC;aAC9C,eAAe,CAAC,uBAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC;aACxE,SAAS,EAAE,CAAA;QACd,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAClC,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,CACJ,eAAuB,EACvB,YAAoB,EACpB,cAAuB,EACvB,aAAsB;QAEtB,MAAM,iBAAiB,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC;aAC1D,gBAAgB,CAAC,uBAAe,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,CAAC;aAChE,KAAK,EAAE,CAAA;QACV,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CACzB,IAAA,iCAAkB,EAAC,iBAAiB,CAAC,EACrC,KAAK,EACL,KAAK,EACL,cAAc,EACd,aAAa,CACd,CAAA;QACD,OAAO,CAAC,CAAA;IACV,CAAC;CAMF;AAvDD,oDAuDC"}