@bsv/wallet-toolbox 1.5.8 → 1.5.10
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/CHANGELOG.md +4 -0
- package/docs/client.md +10 -0
- package/docs/services.md +10 -0
- package/docs/wallet.md +10 -0
- package/mobile/out/src/services/ServiceCollection.d.ts +5 -0
- package/mobile/out/src/services/ServiceCollection.d.ts.map +1 -1
- package/mobile/out/src/services/ServiceCollection.js +11 -0
- package/mobile/out/src/services/ServiceCollection.js.map +1 -1
- package/mobile/out/src/services/Services.d.ts.map +1 -1
- package/mobile/out/src/services/Services.js +4 -0
- package/mobile/out/src/services/Services.js.map +1 -1
- package/mobile/out/src/services/providers/ARC.d.ts.map +1 -1
- package/mobile/out/src/services/providers/ARC.js +2 -0
- package/mobile/out/src/services/providers/ARC.js.map +1 -1
- package/mobile/package-lock.json +6 -6
- package/mobile/package.json +2 -2
- package/out/src/services/ServiceCollection.d.ts +5 -0
- package/out/src/services/ServiceCollection.d.ts.map +1 -1
- package/out/src/services/ServiceCollection.js +11 -0
- package/out/src/services/ServiceCollection.js.map +1 -1
- package/out/src/services/Services.d.ts.map +1 -1
- package/out/src/services/Services.js +4 -0
- package/out/src/services/Services.js.map +1 -1
- package/out/src/services/__tests/ARC.timeout.man.test.d.ts +2 -0
- package/out/src/services/__tests/ARC.timeout.man.test.d.ts.map +1 -0
- package/out/src/services/__tests/ARC.timeout.man.test.js +33 -0
- package/out/src/services/__tests/ARC.timeout.man.test.js.map +1 -0
- package/out/src/services/__tests/postBeef.test.js +16 -0
- package/out/src/services/__tests/postBeef.test.js.map +1 -1
- package/out/src/services/__tests/verifyBeef.test.js +20 -1
- package/out/src/services/__tests/verifyBeef.test.js.map +1 -1
- package/out/src/services/providers/ARC.d.ts.map +1 -1
- package/out/src/services/providers/ARC.js +2 -0
- package/out/src/services/providers/ARC.js.map +1 -1
- package/out/src/storage/__test/adminStats.man.test.js.map +1 -1
- package/out/test/utils/TestUtilsWalletStorage.js +1 -1
- package/out/test/utils/TestUtilsWalletStorage.js.map +1 -1
- package/out/tsconfig.all.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/services/ServiceCollection.ts +12 -0
- package/src/services/Services.ts +4 -0
- package/src/services/__tests/ARC.timeout.man.test.ts +36 -0
- package/src/services/__tests/postBeef.test.ts +19 -1
- package/src/services/__tests/verifyBeef.test.ts +24 -2
- package/src/services/providers/ARC.ts +2 -0
- package/src/storage/__test/adminStats.man.test.ts +2 -3
- package/test/utils/TestUtilsWalletStorage.ts +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bsv/wallet-toolbox",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.10",
|
|
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",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@bsv/auth-express-middleware": "^1.2.0",
|
|
34
34
|
"@bsv/payment-express-middleware": "^1.2.1",
|
|
35
|
-
"@bsv/sdk": "^1.6.
|
|
35
|
+
"@bsv/sdk": "^1.6.12",
|
|
36
36
|
"express": "^4.21.2",
|
|
37
37
|
"idb": "^8.0.2",
|
|
38
38
|
"knex": "^3.1.0",
|
|
@@ -59,6 +59,18 @@ export class ServiceCollection<T> {
|
|
|
59
59
|
return all
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
+
/**
|
|
63
|
+
* Used to de-prioritize a service call by moving it to the end of the list.
|
|
64
|
+
* @param stc
|
|
65
|
+
*/
|
|
66
|
+
moveServiceToLast(stc: ServiceToCall<T>) {
|
|
67
|
+
const index = this.services.findIndex(s => s.name === stc.providerName)
|
|
68
|
+
if (index !== -1) {
|
|
69
|
+
const [service] = this.services.splice(index, 1)
|
|
70
|
+
this.services.push(service)
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
62
74
|
get allServices() {
|
|
63
75
|
return this.services.map(x => x.service)
|
|
64
76
|
}
|
package/src/services/Services.ts
CHANGED
|
@@ -280,6 +280,10 @@ export class Services implements sdk.WalletServices {
|
|
|
280
280
|
const r = await callService(stc)
|
|
281
281
|
rs.push(r)
|
|
282
282
|
if (r.status === 'success') break
|
|
283
|
+
if (r.txidResults && r.txidResults.every(txr => txr.serviceError)) {
|
|
284
|
+
// move this service to the end of the list
|
|
285
|
+
this.postBeefServices.moveServiceToLast(stc)
|
|
286
|
+
}
|
|
283
287
|
}
|
|
284
288
|
}
|
|
285
289
|
break
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { _tu } from '../../../test/utils/TestUtilsWalletStorage'
|
|
2
|
+
import { defaultHttpClient, HttpClientRequestOptions } from '@bsv/sdk'
|
|
3
|
+
|
|
4
|
+
describe('ARC tests', () => {
|
|
5
|
+
jest.setTimeout(99999999)
|
|
6
|
+
|
|
7
|
+
const envMain = _tu.getEnv('main')
|
|
8
|
+
test('11 post to TAAL for timeout', async () => {
|
|
9
|
+
const httpClient = defaultHttpClient()
|
|
10
|
+
const url = `https://arc.taal.com/v1/tx`
|
|
11
|
+
|
|
12
|
+
const headers: Record<string, string> = {
|
|
13
|
+
'Content-Type': 'application/json',
|
|
14
|
+
'XDeployment-ID': 'wallet-toolbox-test11',
|
|
15
|
+
Authorization: `Bearer ${envMain.taalApiKey}`
|
|
16
|
+
}
|
|
17
|
+
const requestOptions: HttpClientRequestOptions = {
|
|
18
|
+
method: 'POST',
|
|
19
|
+
headers,
|
|
20
|
+
data: { rawTx: beef905631 }
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
requestOptions['signal'] = AbortSignal.timeout(5000)
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
const response = await httpClient.request(url, requestOptions)
|
|
27
|
+
expect(response.status).toBe(200)
|
|
28
|
+
} catch (error: any) {
|
|
29
|
+
console.log('Error posting to TAAL:', error.message)
|
|
30
|
+
expect(error.code).toBe('ABORT_ERR')
|
|
31
|
+
}
|
|
32
|
+
})
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
const beef905631 =
|
|
36
|
+
'0100beef01fe9fd10d000d02fdfe0300724e96684b24c87532f99023087423b97ffdff2d2f5ef0297a7d6ea954e48964fdff03026bafadb339fe2bf651958e94235251d68ca0784e45209265a0b2f1928e6f48ef01fdfe0100202bf5ecef0fb931ce451e514443c2026f58889c5a630a5d87c02f3eaca080e601fdfe000008ef522990bf4cb377cd013214b50689424b2031bd2c8fb758668aba3a007011017e0016924511d5773ce8030fc54595e4a1028fc9c071e5624205cb53faa5fb286680013e004c3dfbf8f8dd000521fc7121cc03c2cd2007a4424d8d3018671bc0fc32f5e1ba011e007c676e284227ecf36dac58506ebb0fc5833212860832d4d826803bffd74a2b21010e000b0f8c43e4beab689c14cb59b3f1cf93efe33905c22f40a9579c6b6e46cbd573010600f7734085b02e93f104d66d3fa5d864f4a1cc26cdb95fdfc450e34a3d8f13b5f201020041fe0c3fd297e1d83da186868cd92d374ddb3902d7d1054705df5165c0c93e8a0100007ed98d26a6f0d8d2043301cc9bfb255497c22566a59b83dade97240fa406a525010100a0561fe617c0ae0f34ee659a0d714c5b0a97e8c7cf1198edd56bfe8e8b15b7540101007bf537219f147fdedb4a5b8e0bb8a9b9c61a7bca3d05fe4ec84f85b11e21098d0101000198f7ae218e00137045252fb5f0d02c0c1a77e1ef686035dc22329b85f3e5c5020100000001b5db5dbd327c692ca8c9d5fdf7cc967f46769bfc0f481ea594a07fc60b8e9246010000006a4730440220537dcf526cf749d95c322e5daaf4479c15dbbbffa008a25560cbf833e6713fb902203f114c021d768ce9c5ea2094de296593b00926b59f64e37a6a39159607e4d05e412103852907f4bce12316784ea0ef7ac2b6a9d853a066d005ea5961750902025982a4ffffffff0214000000000000001976a914226cdae741a5e1258272bf2532669b54e7a813f988ac0100000000000000fdc5012102e01ef1e893d1164d05595f3979721d09e7dc8b971172df4bbceb56e72b7ed544ac3e314fc657a97ff276becda888ede531346172571a61491128c34c7df7ed5856e83db22843c1501de00fe93cddb47403e532f2492d4551bd974f0c7136ea533adb8d21e38f01080ce0c3fdbcbbb243b73ec0856836a423d368d100f97dafc690c0aa55534a632c612a1a0023886ac8dd2ba704d396b60894a11835eb13a01199d83bc1d19780186959f04d5408849d997fc07d99a58f9f0110b1e5ee52fe87606578c0cc33886597cca074d19b777de331fac609dea2b4108e5b95ec5b58529e5736101e54b537dc76eb3e5c9bfc4d793af8e8caa0550ce2b6ca9c1c10cedfe8f8e63c109f26aab8f9cb5f9e3456d9351d33fadd57e6a5a8973ad0ec148c27a0d1fecc720d222cedb8fbbd30af317298fd8347f7845f3edc4883ddfcd2a0c93665cff964a816f1c3a89b1c5dca7d6eb22326c023f316534299b93e836a49569a885c7ebe416fad632a1a0a4d506806d11c133bc2e8364730450221008975ecf19934195f972fbe7b4d1e6993d2186985aee919810bfaaf439ddf6cb802201946afd710f044e36932bb6d59d6191daaf044905e4b24a9f9ded193c4ac6d236d6d6d7500000000010001000000016bafadb339fe2bf651958e94235251d68ca0784e45209265a0b2f1928e6f48ef000000006b48304502210082b15b0e46da56060c3e508dbbe20c53a6282cc2c3ef2c8f7bd90c9e1748a86a02200e052abe131fb1aea3fdccf2f9ddbb59230aa99ebd7b55655388dbc6710fd15541210349c86999cb3a992c78e3cf72835071e3ca49d16c41e7c0a89d678c1a3cdc8bc8ffffffff0201000000000000001976a914554a6bf9c0203d0c2c75264786d7e8b05f143e0888ac12000000000000001976a914365fb266360071280a82ed90e6a9a85d8d35f74888ac0000000000'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BeefTx } from '@bsv/sdk'
|
|
1
|
+
import { Beef, BeefTx } from '@bsv/sdk'
|
|
2
2
|
import { Services } from '../../index.client'
|
|
3
3
|
import { _tu, logger } from '../../../test/utils/TestUtilsWalletStorage'
|
|
4
4
|
import { sdk, Setup } from '../../index.all'
|
|
@@ -17,8 +17,26 @@ describe('postBeef service tests', () => {
|
|
|
17
17
|
const services = createServices('test')
|
|
18
18
|
await postBeefTest(services)
|
|
19
19
|
})
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Test to verify deprioritization of a postBeef service that times out.
|
|
23
|
+
*/
|
|
24
|
+
test.skip('2 postBeef mainnet timeout', async () => {
|
|
25
|
+
if (Setup.noEnv('main')) return
|
|
26
|
+
const services = createServices('main')
|
|
27
|
+
const beef = Beef.fromString(beefTimeout)
|
|
28
|
+
const txid = beef.txs.slice(-1)[0].txid
|
|
29
|
+
const svcs0 = [...services.postBeefServices.services]
|
|
30
|
+
const r = await services.postBeef(beef, [txid])
|
|
31
|
+
const svcs1 = [...services.postBeefServices.services]
|
|
32
|
+
expect(svcs0[1].name).toBe('TaalArcBeef')
|
|
33
|
+
expect(svcs1.slice(-1)[0].name).toBe('TaalArcBeef')
|
|
34
|
+
})
|
|
20
35
|
})
|
|
21
36
|
|
|
37
|
+
const beefTimeout =
|
|
38
|
+
'0100beef01fe9fd10d000d02fdfe0300724e96684b24c87532f99023087423b97ffdff2d2f5ef0297a7d6ea954e48964fdff03026bafadb339fe2bf651958e94235251d68ca0784e45209265a0b2f1928e6f48ef01fdfe0100202bf5ecef0fb931ce451e514443c2026f58889c5a630a5d87c02f3eaca080e601fdfe000008ef522990bf4cb377cd013214b50689424b2031bd2c8fb758668aba3a007011017e0016924511d5773ce8030fc54595e4a1028fc9c071e5624205cb53faa5fb286680013e004c3dfbf8f8dd000521fc7121cc03c2cd2007a4424d8d3018671bc0fc32f5e1ba011e007c676e284227ecf36dac58506ebb0fc5833212860832d4d826803bffd74a2b21010e000b0f8c43e4beab689c14cb59b3f1cf93efe33905c22f40a9579c6b6e46cbd573010600f7734085b02e93f104d66d3fa5d864f4a1cc26cdb95fdfc450e34a3d8f13b5f201020041fe0c3fd297e1d83da186868cd92d374ddb3902d7d1054705df5165c0c93e8a0100007ed98d26a6f0d8d2043301cc9bfb255497c22566a59b83dade97240fa406a525010100a0561fe617c0ae0f34ee659a0d714c5b0a97e8c7cf1198edd56bfe8e8b15b7540101007bf537219f147fdedb4a5b8e0bb8a9b9c61a7bca3d05fe4ec84f85b11e21098d0101000198f7ae218e00137045252fb5f0d02c0c1a77e1ef686035dc22329b85f3e5c5020100000001b5db5dbd327c692ca8c9d5fdf7cc967f46769bfc0f481ea594a07fc60b8e9246010000006a4730440220537dcf526cf749d95c322e5daaf4479c15dbbbffa008a25560cbf833e6713fb902203f114c021d768ce9c5ea2094de296593b00926b59f64e37a6a39159607e4d05e412103852907f4bce12316784ea0ef7ac2b6a9d853a066d005ea5961750902025982a4ffffffff0214000000000000001976a914226cdae741a5e1258272bf2532669b54e7a813f988ac0100000000000000fdc5012102e01ef1e893d1164d05595f3979721d09e7dc8b971172df4bbceb56e72b7ed544ac3e314fc657a97ff276becda888ede531346172571a61491128c34c7df7ed5856e83db22843c1501de00fe93cddb47403e532f2492d4551bd974f0c7136ea533adb8d21e38f01080ce0c3fdbcbbb243b73ec0856836a423d368d100f97dafc690c0aa55534a632c612a1a0023886ac8dd2ba704d396b60894a11835eb13a01199d83bc1d19780186959f04d5408849d997fc07d99a58f9f0110b1e5ee52fe87606578c0cc33886597cca074d19b777de331fac609dea2b4108e5b95ec5b58529e5736101e54b537dc76eb3e5c9bfc4d793af8e8caa0550ce2b6ca9c1c10cedfe8f8e63c109f26aab8f9cb5f9e3456d9351d33fadd57e6a5a8973ad0ec148c27a0d1fecc720d222cedb8fbbd30af317298fd8347f7845f3edc4883ddfcd2a0c93665cff964a816f1c3a89b1c5dca7d6eb22326c023f316534299b93e836a49569a885c7ebe416fad632a1a0a4d506806d11c133bc2e8364730450221008975ecf19934195f972fbe7b4d1e6993d2186985aee919810bfaaf439ddf6cb802201946afd710f044e36932bb6d59d6191daaf044905e4b24a9f9ded193c4ac6d236d6d6d7500000000010001000000016bafadb339fe2bf651958e94235251d68ca0784e45209265a0b2f1928e6f48ef000000006b48304502210082b15b0e46da56060c3e508dbbe20c53a6282cc2c3ef2c8f7bd90c9e1748a86a02200e052abe131fb1aea3fdccf2f9ddbb59230aa99ebd7b55655388dbc6710fd15541210349c86999cb3a992c78e3cf72835071e3ca49d16c41e7c0a89d678c1a3cdc8bc8ffffffff0201000000000000001976a914554a6bf9c0203d0c2c75264786d7e8b05f143e0888ac12000000000000001976a914365fb266360071280a82ed90e6a9a85d8d35f74888ac0000000000'
|
|
39
|
+
|
|
22
40
|
function createServices(chain: sdk.Chain): Services {
|
|
23
41
|
const env = _tu.getEnv(chain)
|
|
24
42
|
const options = Services.createDefaultOptions(chain)
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Beef } from '@bsv/sdk'
|
|
2
2
|
import { Services } from '../Services'
|
|
3
|
-
import { logger } from '../../../test/utils/TestUtilsWalletStorage'
|
|
3
|
+
import { _tu, logger } from '../../../test/utils/TestUtilsWalletStorage'
|
|
4
|
+
import { verifyTruthy } from '../../utility/utilityHelpers'
|
|
4
5
|
|
|
5
6
|
describe('verifyBeef tests', () => {
|
|
6
7
|
jest.setTimeout(99999999)
|
|
@@ -14,6 +15,27 @@ describe('verifyBeef tests', () => {
|
|
|
14
15
|
logger(beef.toLogString())
|
|
15
16
|
|
|
16
17
|
const ok = await beef.verify(chaintracker, true)
|
|
17
|
-
expect(ok)
|
|
18
|
+
expect(ok).toBe(true)
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test('1_', async () => {
|
|
22
|
+
if (_tu.noEnv('main')) return
|
|
23
|
+
const { env, storage, services } = await _tu.createMainReviewSetup()
|
|
24
|
+
|
|
25
|
+
const getBeefForTxid = '4d9a1eff26bac99c7524cb7b2e808b77935d3d890562db2fefc6cb8cb92a6b16'
|
|
26
|
+
{
|
|
27
|
+
const beef = await services.getBeefForTxid(getBeefForTxid)
|
|
28
|
+
const chaintracker = await services.getChainTracker()
|
|
29
|
+
const ok = await beef.verify(chaintracker, true)
|
|
30
|
+
expect(ok).toBe(true)
|
|
31
|
+
}
|
|
32
|
+
{
|
|
33
|
+
const beef = verifyTruthy(
|
|
34
|
+
await storage.getValidBeefForTxid(getBeefForTxid, undefined, undefined, undefined, undefined, 1)
|
|
35
|
+
)
|
|
36
|
+
const chaintracker = await services.getChainTracker()
|
|
37
|
+
const ok = await beef.verify(chaintracker, true)
|
|
38
|
+
expect(ok).toBe(true)
|
|
39
|
+
}
|
|
18
40
|
})
|
|
19
41
|
})
|
|
@@ -143,6 +143,8 @@ export class ARC {
|
|
|
143
143
|
status: 'success',
|
|
144
144
|
notes: []
|
|
145
145
|
}
|
|
146
|
+
// Set a timeout on the request
|
|
147
|
+
requestOptions['signal'] = AbortSignal.timeout(1000 * 30) // 30 seconds timeout, error.code will be 'ABORT_ERR'
|
|
146
148
|
|
|
147
149
|
const url = `${this.URL}/v1/tx`
|
|
148
150
|
const nn = () => ({ name: this.name, when: new Date().toISOString() })
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { before } from 'node:test'
|
|
2
1
|
import { _tu, TestWalletOnly } from '../../../test/utils/TestUtilsWalletStorage'
|
|
3
2
|
import { Setup } from '../../Setup'
|
|
4
3
|
import { StorageKnex } from '../StorageKnex'
|
|
5
|
-
import { AuthFetch
|
|
6
|
-
import { StorageAdminStats
|
|
4
|
+
import { AuthFetch } from '@bsv/sdk'
|
|
5
|
+
import { StorageAdminStats } from '../index.client'
|
|
7
6
|
import { Format } from '../../utility/Format'
|
|
8
7
|
|
|
9
8
|
describe('storage adminStats tests', () => {
|
|
@@ -169,7 +169,7 @@ export abstract class TestUtilsWalletStorage {
|
|
|
169
169
|
services: Services
|
|
170
170
|
}> {
|
|
171
171
|
const env = _tu.getEnv('main')
|
|
172
|
-
if (!env.cloudMySQLConnection) throw new sdk.WERR_INVALID_PARAMETER('env.
|
|
172
|
+
if (!env.cloudMySQLConnection) throw new sdk.WERR_INVALID_PARAMETER('env.cloudMySQLConnection', 'valid')
|
|
173
173
|
const knex = Setup.createMySQLKnex(env.cloudMySQLConnection)
|
|
174
174
|
const storage = new StorageKnex({
|
|
175
175
|
chain: env.chain,
|