@bsv/wallet-toolbox 1.3.28 → 1.3.30
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 +24 -0
- package/docs/client.md +550 -172
- package/docs/monitor.md +25 -7
- package/docs/services.md +136 -23
- package/docs/storage.md +53 -22
- package/docs/wallet.md +550 -172
- package/mobile/out/src/monitor/Monitor.js +1 -1
- package/mobile/out/src/monitor/Monitor.js.map +1 -1
- package/mobile/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/mobile/out/src/services/ServiceCollection.d.ts +3 -2
- package/mobile/out/src/services/ServiceCollection.d.ts.map +1 -1
- package/mobile/out/src/services/ServiceCollection.js +5 -4
- package/mobile/out/src/services/ServiceCollection.js.map +1 -1
- package/mobile/out/src/services/Services.d.ts +1 -0
- package/mobile/out/src/services/Services.d.ts.map +1 -1
- package/mobile/out/src/services/Services.js +29 -7
- package/mobile/out/src/services/Services.js.map +1 -1
- package/mobile/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
- package/mobile/out/src/services/createDefaultWalletServicesOptions.js +1 -3
- package/mobile/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
- package/mobile/out/src/signer/methods/completeSignedTransaction.d.ts +10 -0
- package/mobile/out/src/signer/methods/completeSignedTransaction.d.ts.map +1 -0
- package/mobile/out/src/signer/methods/completeSignedTransaction.js +104 -0
- package/mobile/out/src/signer/methods/completeSignedTransaction.js.map +1 -0
- package/mobile/out/src/signer/methods/createAction.d.ts +2 -3
- package/mobile/out/src/signer/methods/createAction.d.ts.map +1 -1
- package/mobile/out/src/signer/methods/createAction.js +8 -46
- package/mobile/out/src/signer/methods/createAction.js.map +1 -1
- package/mobile/out/src/signer/methods/signAction.d.ts +2 -4
- package/mobile/out/src/signer/methods/signAction.d.ts.map +1 -1
- package/mobile/out/src/signer/methods/signAction.js +7 -54
- package/mobile/out/src/signer/methods/signAction.js.map +1 -1
- package/mobile/out/src/storage/methods/createAction.d.ts.map +1 -1
- package/mobile/out/src/storage/methods/createAction.js.map +1 -1
- package/mobile/package-lock.json +2 -2
- package/mobile/package.json +1 -1
- package/out/src/monitor/Monitor.js +1 -1
- package/out/src/monitor/Monitor.js.map +1 -1
- package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/out/src/services/ServiceCollection.d.ts +3 -2
- package/out/src/services/ServiceCollection.d.ts.map +1 -1
- package/out/src/services/ServiceCollection.js +5 -4
- package/out/src/services/ServiceCollection.js.map +1 -1
- package/out/src/services/Services.d.ts +1 -0
- package/out/src/services/Services.d.ts.map +1 -1
- package/out/src/services/Services.js +29 -7
- package/out/src/services/Services.js.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.js +1 -3
- package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
- package/out/src/signer/methods/completeSignedTransaction.d.ts +10 -0
- package/out/src/signer/methods/completeSignedTransaction.d.ts.map +1 -0
- package/out/src/signer/methods/completeSignedTransaction.js +104 -0
- package/out/src/signer/methods/completeSignedTransaction.js.map +1 -0
- package/out/src/signer/methods/createAction.d.ts +2 -3
- package/out/src/signer/methods/createAction.d.ts.map +1 -1
- package/out/src/signer/methods/createAction.js +8 -46
- package/out/src/signer/methods/createAction.js.map +1 -1
- package/out/src/signer/methods/signAction.d.ts +2 -4
- package/out/src/signer/methods/signAction.d.ts.map +1 -1
- package/out/src/signer/methods/signAction.js +7 -54
- package/out/src/signer/methods/signAction.js.map +1 -1
- package/out/src/storage/StorageKnex.d.ts.map +1 -1
- package/out/src/storage/StorageKnex.js +7 -2
- package/out/src/storage/StorageKnex.js.map +1 -1
- package/out/src/storage/methods/createAction.d.ts.map +1 -1
- package/out/src/storage/methods/createAction.js.map +1 -1
- package/out/test/Wallet/support/operations.man.test.js +23 -5
- package/out/test/Wallet/support/operations.man.test.js.map +1 -1
- package/out/test/wallet/action/createAction2.test.d.ts.map +1 -1
- package/out/test/wallet/action/createAction2.test.js +1 -0
- package/out/test/wallet/action/createAction2.test.js.map +1 -1
- package/out/tsconfig.all.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/monitor/Monitor.ts +1 -1
- package/src/sdk/WalletServices.interfaces.ts +2 -2
- package/src/services/ServiceCollection.ts +15 -10
- package/src/services/Services.ts +53 -42
- package/src/services/createDefaultWalletServicesOptions.ts +1 -4
- package/src/signer/methods/completeSignedTransaction.ts +115 -0
- package/src/signer/methods/createAction.ts +9 -68
- package/src/signer/methods/signAction.ts +11 -78
- package/src/storage/StorageKnex.ts +45 -14
- package/src/storage/StorageProvider.ts +1 -1
- package/src/storage/methods/createAction.ts +4 -1
- package/test/Wallet/support/operations.man.test.ts +29 -10
- package/test/wallet/action/createAction2.test.ts +1 -0
|
@@ -492,19 +492,44 @@ export class StorageKnex extends StorageProvider implements sdk.WalletStoragePro
|
|
|
492
492
|
if (args.orderDescending) {
|
|
493
493
|
let sortColumn = ''
|
|
494
494
|
switch (table) {
|
|
495
|
-
case 'certificates':
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
case '
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
case '
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
case '
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
495
|
+
case 'certificates':
|
|
496
|
+
sortColumn = 'certificateId'
|
|
497
|
+
break
|
|
498
|
+
case 'commissions':
|
|
499
|
+
sortColumn = 'commissionId'
|
|
500
|
+
break
|
|
501
|
+
case 'output_baskets':
|
|
502
|
+
sortColumn = 'basketId'
|
|
503
|
+
break
|
|
504
|
+
case 'outputs':
|
|
505
|
+
sortColumn = 'outputId'
|
|
506
|
+
break
|
|
507
|
+
case 'output_tags':
|
|
508
|
+
sortColumn = 'outputTagId'
|
|
509
|
+
break
|
|
510
|
+
case 'proven_tx_reqs':
|
|
511
|
+
sortColumn = 'provenTxReqId'
|
|
512
|
+
break
|
|
513
|
+
case 'proven_txs':
|
|
514
|
+
sortColumn = 'provenTxId'
|
|
515
|
+
break
|
|
516
|
+
case 'sync_states':
|
|
517
|
+
sortColumn = 'syncStateId'
|
|
518
|
+
break
|
|
519
|
+
case 'transactions':
|
|
520
|
+
sortColumn = 'transactionId'
|
|
521
|
+
break
|
|
522
|
+
case 'tx_labels':
|
|
523
|
+
sortColumn = 'txLabelId'
|
|
524
|
+
break
|
|
525
|
+
case 'users':
|
|
526
|
+
sortColumn = 'userId'
|
|
527
|
+
break
|
|
528
|
+
case 'monitor_events':
|
|
529
|
+
sortColumn = 'id'
|
|
530
|
+
break
|
|
531
|
+
default:
|
|
532
|
+
break
|
|
508
533
|
}
|
|
509
534
|
if (sortColumn !== '') {
|
|
510
535
|
q.orderBy(sortColumn, 'desc')
|
|
@@ -1156,7 +1181,13 @@ export class StorageKnex extends StorageProvider implements sdk.WalletStoragePro
|
|
|
1156
1181
|
async adminStats(adminIdentityKey: string): Promise<AdminStatsResult> {
|
|
1157
1182
|
if (this.dbtype !== 'MySQL') throw new sdk.WERR_NOT_IMPLEMENTED('adminStats, only MySQL is supported')
|
|
1158
1183
|
|
|
1159
|
-
const monitorEvent = verifyOneOrNone(
|
|
1184
|
+
const monitorEvent = verifyOneOrNone(
|
|
1185
|
+
await this.findMonitorEvents({
|
|
1186
|
+
partial: { event: 'MonitorCallHistory' },
|
|
1187
|
+
orderDescending: true,
|
|
1188
|
+
paged: { limit: 1 }
|
|
1189
|
+
})
|
|
1190
|
+
)
|
|
1160
1191
|
const monitorStats: ServicesCallHistory | undefined = monitorEvent ? JSON.parse(monitorEvent.details!) : undefined
|
|
1161
1192
|
const servicesStats = this.getServices().getServicesCallHistory(true)
|
|
1162
1193
|
await this.insertMonitorEvent({
|
|
@@ -603,7 +603,10 @@ async function validateRequiredInputs(
|
|
|
603
603
|
const output = verifyOneOrNone(await storage.findOutputs({ partial: { userId, txid, vout } }))
|
|
604
604
|
if (output) {
|
|
605
605
|
if (output.change) {
|
|
606
|
-
throw new sdk.WERR_INVALID_PARAMETER(
|
|
606
|
+
throw new sdk.WERR_INVALID_PARAMETER(
|
|
607
|
+
`inputs[${input.vin}]`,
|
|
608
|
+
'an unmanaged input. Change outputs are managed by your wallet.'
|
|
609
|
+
)
|
|
607
610
|
}
|
|
608
611
|
input.output = output
|
|
609
612
|
if (!Array.isArray(output.lockingScript) || !Number.isInteger(output.satoshis))
|
|
@@ -11,7 +11,7 @@ describe('operations.man tests', () => {
|
|
|
11
11
|
|
|
12
12
|
test('0 review and release all production invalid change utxos', async () => {
|
|
13
13
|
const { env, storage } = await _tu.createMainReviewSetup()
|
|
14
|
-
const users = await storage.findUsers({ partial: {
|
|
14
|
+
const users = await storage.findUsers({ partial: {} })
|
|
15
15
|
const withInvalid: Record<number, { user: TableUser; outputs: WalletOutput[]; total: number }> = {}
|
|
16
16
|
const vargs: ValidListOutputsArgs = {
|
|
17
17
|
basket: specOpInvalidChange,
|
|
@@ -55,8 +55,11 @@ describe('operations.man tests', () => {
|
|
|
55
55
|
for (;;) {
|
|
56
56
|
let log = ''
|
|
57
57
|
const unfails: number[] = []
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
const reqs = await storage.findProvenTxReqs({
|
|
59
|
+
partial: { status: 'doubleSpend' },
|
|
60
|
+
paged: { limit, offset },
|
|
61
|
+
orderDescending: true
|
|
62
|
+
})
|
|
60
63
|
for (const req of reqs) {
|
|
61
64
|
const gsr = await services.getStatusForTxids([req.txid])
|
|
62
65
|
if (gsr.results[0].status !== 'unknown') {
|
|
@@ -83,7 +86,11 @@ describe('operations.man tests', () => {
|
|
|
83
86
|
for (;;) {
|
|
84
87
|
let log = ''
|
|
85
88
|
const unfails: number[] = []
|
|
86
|
-
const reqs = await storage.findProvenTxReqs({
|
|
89
|
+
const reqs = await storage.findProvenTxReqs({
|
|
90
|
+
partial: { status: 'invalid' },
|
|
91
|
+
paged: { limit, offset },
|
|
92
|
+
orderDescending: true
|
|
93
|
+
})
|
|
87
94
|
for (const req of reqs) {
|
|
88
95
|
if (!req.txid || !req.rawTx) continue
|
|
89
96
|
const gsr = await services.getStatusForTxids([req.txid])
|
|
@@ -127,8 +134,16 @@ describe('operations.man tests', () => {
|
|
|
127
134
|
if (h.height !== mp.blockHeight || h.merkleRoot !== mr) {
|
|
128
135
|
console.log(`Merkle root mismatch for ${tx.txid} ${h.merkleRoot} != ${mr}`)
|
|
129
136
|
} else {
|
|
130
|
-
if (
|
|
131
|
-
|
|
137
|
+
if (
|
|
138
|
+
tx.merkleRoot !== mr ||
|
|
139
|
+
tx.height !== mp.blockHeight ||
|
|
140
|
+
tx.blockHash !== h.hash ||
|
|
141
|
+
tx.index !== index ||
|
|
142
|
+
mp2.blockHeight !== tx.height ||
|
|
143
|
+
mr2 !== tx.merkleRoot ||
|
|
144
|
+
asString(tx.merklePath) !== asString(mp.toBinary())
|
|
145
|
+
) {
|
|
146
|
+
debugger
|
|
132
147
|
await storage.updateProvenTx(tx.provenTxId, {
|
|
133
148
|
merklePath: mp.toBinary(),
|
|
134
149
|
merkleRoot: mr,
|
|
@@ -242,12 +257,17 @@ describe('operations.man tests', () => {
|
|
|
242
257
|
|
|
243
258
|
test('13 review use of outputs in all following transactions', async () => {
|
|
244
259
|
const { env, storage, services } = await _tu.createMainReviewSetup()
|
|
245
|
-
|
|
260
|
+
|
|
246
261
|
const txids = ['2df7b5059112a42fc40adb54ee36244cee0dd216c35ad6c4b6ef4631c14a0e83'] //, '9fb38fc87c6ff39f5c7321a4c689db535c024498ed20031434485c981dd7a182', '3fb6b02e1d001dded1daee3f59dcd684489b96a35a9dfb5082b4119a31689966', '72ea8d84a4c54dbca292f4a79a5ff08cb9917fc3127c1dcff0628aeba8b40823', '0564a515566bc43c1396becf12bbf2d82d821ae7b6e0ef404eedfa090d4877c2', '3b93e4327a50a7f4a421af9fbdec0206b3b7ba5252bc5a0142d0d64aa34c2e73', 'd4b0c3d820696afad43b43e095f3b8c3df52385bb4aeddff0212e0a472dd8e4e']
|
|
247
262
|
const userId = 111
|
|
248
|
-
const txs = await storage.findTransactions({
|
|
263
|
+
const txs = await storage.findTransactions({
|
|
264
|
+
partial: { userId },
|
|
265
|
+
status: ['completed', 'unproven', 'failed'],
|
|
266
|
+
orderDescending: true,
|
|
267
|
+
paged: { limit: 50 }
|
|
268
|
+
})
|
|
249
269
|
const allTxids = txs.map(tx => tx.txid!)
|
|
250
|
-
debugger
|
|
270
|
+
debugger
|
|
251
271
|
const reqs = await storage.findProvenTxReqs({ partial: {}, txids: allTxids })
|
|
252
272
|
const beef = new Beef()
|
|
253
273
|
for (const req of reqs) {
|
|
@@ -273,5 +293,4 @@ describe('operations.man tests', () => {
|
|
|
273
293
|
}
|
|
274
294
|
await storage.destroy()
|
|
275
295
|
})
|
|
276
|
-
|
|
277
296
|
})
|
|
@@ -188,6 +188,7 @@ describe('createAction2 nosend transactions', () => {
|
|
|
188
188
|
labels: ['spending transaction test'],
|
|
189
189
|
description: 'Explicit check on returned change',
|
|
190
190
|
options: {
|
|
191
|
+
knownTxids: [fundingResult.txid!],
|
|
191
192
|
noSend: true,
|
|
192
193
|
randomizeOutputs: false,
|
|
193
194
|
noSendChange: []
|