@bsv/wallet-toolbox 1.6.32 → 1.6.34
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 +11 -0
- package/docs/client.md +340 -93
- package/docs/monitor.md +34 -12
- package/docs/storage.md +49 -1
- package/docs/wallet.md +340 -93
- package/mobile/out/src/monitor/Monitor.d.ts +8 -0
- package/mobile/out/src/monitor/Monitor.d.ts.map +1 -1
- package/mobile/out/src/monitor/Monitor.js +8 -0
- package/mobile/out/src/monitor/Monitor.js.map +1 -1
- package/mobile/out/src/monitor/tasks/TaskReorg.d.ts +8 -12
- package/mobile/out/src/monitor/tasks/TaskReorg.d.ts.map +1 -1
- package/mobile/out/src/monitor/tasks/TaskReorg.js +20 -73
- package/mobile/out/src/monitor/tasks/TaskReorg.js.map +1 -1
- package/mobile/out/src/sdk/WERR_errors.d.ts +8 -0
- package/mobile/out/src/sdk/WERR_errors.d.ts.map +1 -1
- package/mobile/out/src/sdk/WERR_errors.js +33 -0
- package/mobile/out/src/sdk/WERR_errors.js.map +1 -1
- package/mobile/out/src/sdk/WalletError.d.ts +19 -0
- package/mobile/out/src/sdk/WalletError.d.ts.map +1 -1
- package/mobile/out/src/sdk/WalletError.js +42 -1
- package/mobile/out/src/sdk/WalletError.js.map +1 -1
- package/mobile/out/src/sdk/WalletErrorFromJson.d.ts +12 -0
- package/mobile/out/src/sdk/WalletErrorFromJson.d.ts.map +1 -0
- package/mobile/out/src/sdk/WalletErrorFromJson.js +69 -0
- package/mobile/out/src/sdk/WalletErrorFromJson.js.map +1 -0
- package/mobile/out/src/sdk/WalletStorage.interfaces.d.ts +49 -0
- package/mobile/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
- package/mobile/out/src/sdk/index.d.ts +1 -0
- package/mobile/out/src/sdk/index.d.ts.map +1 -1
- package/mobile/out/src/sdk/index.js +1 -0
- package/mobile/out/src/sdk/index.js.map +1 -1
- package/mobile/out/src/services/chaintracker/ChaintracksChainTracker.js +1 -1
- package/mobile/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js +16 -9
- package/mobile/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js.map +1 -1
- package/mobile/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/mobile/out/src/storage/StorageProvider.js +4 -0
- package/mobile/out/src/storage/StorageProvider.js.map +1 -1
- package/mobile/out/src/storage/WalletStorageManager.d.ts +34 -2
- package/mobile/out/src/storage/WalletStorageManager.d.ts.map +1 -1
- package/mobile/out/src/storage/WalletStorageManager.js +146 -0
- package/mobile/out/src/storage/WalletStorageManager.js.map +1 -1
- package/mobile/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
- package/mobile/out/src/storage/remoting/StorageClient.js +3 -5
- package/mobile/out/src/storage/remoting/StorageClient.js.map +1 -1
- package/mobile/package-lock.json +2 -2
- package/mobile/package.json +1 -1
- package/out/src/monitor/Monitor.d.ts +8 -0
- package/out/src/monitor/Monitor.d.ts.map +1 -1
- package/out/src/monitor/Monitor.js +8 -0
- package/out/src/monitor/Monitor.js.map +1 -1
- package/out/src/monitor/tasks/TaskReorg.d.ts +8 -12
- package/out/src/monitor/tasks/TaskReorg.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReorg.js +20 -73
- package/out/src/monitor/tasks/TaskReorg.js.map +1 -1
- package/out/src/sdk/WERR_errors.d.ts +8 -0
- package/out/src/sdk/WERR_errors.d.ts.map +1 -1
- package/out/src/sdk/WERR_errors.js +33 -0
- package/out/src/sdk/WERR_errors.js.map +1 -1
- package/out/src/sdk/WalletError.d.ts +19 -0
- package/out/src/sdk/WalletError.d.ts.map +1 -1
- package/out/src/sdk/WalletError.js +42 -1
- package/out/src/sdk/WalletError.js.map +1 -1
- package/out/src/sdk/WalletErrorFromJson.d.ts +12 -0
- package/out/src/sdk/WalletErrorFromJson.d.ts.map +1 -0
- package/out/src/sdk/WalletErrorFromJson.js +69 -0
- package/out/src/sdk/WalletErrorFromJson.js.map +1 -0
- package/out/src/sdk/WalletStorage.interfaces.d.ts +49 -0
- package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
- package/out/src/sdk/__test/WalletError.test.d.ts +2 -0
- package/out/src/sdk/__test/WalletError.test.d.ts.map +1 -0
- package/out/src/sdk/__test/WalletError.test.js +255 -0
- package/out/src/sdk/__test/WalletError.test.js.map +1 -0
- package/out/src/sdk/index.d.ts +1 -0
- package/out/src/sdk/index.d.ts.map +1 -1
- package/out/src/sdk/index.js +1 -0
- package/out/src/sdk/index.js.map +1 -1
- package/out/src/services/__tests/verifyBeef.test.js +7 -0
- package/out/src/services/__tests/verifyBeef.test.js.map +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.js +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js +16 -9
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js.map +1 -1
- package/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/out/src/storage/StorageProvider.js +4 -0
- package/out/src/storage/StorageProvider.js.map +1 -1
- package/out/src/storage/WalletStorageManager.d.ts +34 -2
- package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
- package/out/src/storage/WalletStorageManager.js +146 -0
- package/out/src/storage/WalletStorageManager.js.map +1 -1
- package/out/src/storage/__test/getBeefForTransaction.test.js +10 -0
- package/out/src/storage/__test/getBeefForTransaction.test.js.map +1 -1
- package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageClient.js +3 -5
- package/out/src/storage/remoting/StorageClient.js.map +1 -1
- package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageServer.js +12 -10
- package/out/src/storage/remoting/StorageServer.js.map +1 -1
- package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
- package/out/src/storage/schema/KnexMigrations.js +12 -0
- package/out/src/storage/schema/KnexMigrations.js.map +1 -1
- package/out/test/Wallet/specOps/specOps.man.test.js +8 -6
- package/out/test/Wallet/specOps/specOps.man.test.js.map +1 -1
- package/out/tsconfig.all.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/monitor/Monitor.ts +8 -0
- package/src/monitor/tasks/TaskReorg.ts +20 -70
- package/src/sdk/WERR_errors.ts +34 -0
- package/src/sdk/WalletError.ts +42 -1
- package/src/sdk/WalletErrorFromJson.ts +80 -0
- package/src/sdk/WalletStorage.interfaces.ts +44 -0
- package/src/sdk/__test/WalletError.test.ts +318 -0
- package/src/sdk/index.ts +1 -0
- package/src/services/__tests/verifyBeef.test.ts +10 -1
- package/src/services/chaintracker/ChaintracksChainTracker.ts +1 -1
- package/src/services/chaintracker/chaintracks/util/ChaintracksFetch.ts +18 -11
- package/src/storage/StorageProvider.ts +4 -0
- package/src/storage/WalletStorageManager.ts +158 -0
- package/src/storage/__test/getBeefForTransaction.test.ts +11 -2
- package/src/storage/methods/internalizeAction.ts +1 -1
- package/src/storage/remoting/StorageClient.ts +4 -6
- package/src/storage/remoting/StorageServer.ts +13 -11
- package/src/storage/schema/KnexMigrations.ts +13 -0
- package/test/Wallet/specOps/specOps.man.test.ts +6 -4
package/package.json
CHANGED
package/src/monitor/Monitor.ts
CHANGED
|
@@ -383,6 +383,14 @@ export class Monitor {
|
|
|
383
383
|
}
|
|
384
384
|
}
|
|
385
385
|
|
|
386
|
+
/**
|
|
387
|
+
* Handler for new header events from Chaintracks.
|
|
388
|
+
*
|
|
389
|
+
* To minimize reorg processing, new headers are aged before processing via TaskNewHeader.
|
|
390
|
+
* Therefore this handler is intentionally a no-op.
|
|
391
|
+
*
|
|
392
|
+
* @param header
|
|
393
|
+
*/
|
|
386
394
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
387
395
|
processHeader(header: BlockHeader): void {}
|
|
388
396
|
}
|
|
@@ -14,7 +14,7 @@ import { WalletMonitorTask } from './WalletMonitorTask'
|
|
|
14
14
|
* The current implementation ages deactivation notifications by 10 minutes with each retry.
|
|
15
15
|
* If a successful proof update confirms original proof data after 3 retries, the original is retained.
|
|
16
16
|
*
|
|
17
|
-
* In normal operation there should
|
|
17
|
+
* In normal operation there should rarely be any work for this task to perform.
|
|
18
18
|
* The most common result is that there are no matching proven_txs records because
|
|
19
19
|
* generating new proven_txs records intentionally lags new block generation to
|
|
20
20
|
* minimize this disruption.
|
|
@@ -24,17 +24,8 @@ import { WalletMonitorTask } from './WalletMonitorTask'
|
|
|
24
24
|
* - Generated beefs are impacted.
|
|
25
25
|
* - Updated proof data may be unavailable at the time a reorg is first reported.
|
|
26
26
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* createAction fails to verify against the chaintracker.
|
|
30
|
-
*
|
|
31
|
-
* An alternate approach to processing these events is to revert the proven_txs record to a proven_tx_reqs record.
|
|
32
|
-
* Pros:
|
|
33
|
-
* - The same multiple attempt logic that already exists is reused.
|
|
34
|
-
* - Failing to obtain a new proof already has transaction failure handling in place.
|
|
35
|
-
* - Generated beefs automatically become one generation deeper, potentially allowing transaction outputs to be spent.
|
|
36
|
-
* Cons:
|
|
37
|
-
* - Transactions must revert to un-proven / un-mined.
|
|
27
|
+
* Proper reorg handling also requires repairing invalid beefs for new transactions when
|
|
28
|
+
* createAction fails to verify a generated beef against the chaintracker.
|
|
38
29
|
*/
|
|
39
30
|
export class TaskReorg extends WalletMonitorTask {
|
|
40
31
|
static taskName = 'Reorg'
|
|
@@ -49,6 +40,11 @@ export class TaskReorg extends WalletMonitorTask {
|
|
|
49
40
|
super(monitor, TaskReorg.taskName)
|
|
50
41
|
}
|
|
51
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Shift aged deactivated headers onto `process` array.
|
|
45
|
+
* @param nowMsecsSinceEpoch current time in milliseconds since epoch.
|
|
46
|
+
* @returns `run` true iff there are aged deactivated headers to process.
|
|
47
|
+
*/
|
|
52
48
|
trigger(nowMsecsSinceEpoch: number): { run: boolean } {
|
|
53
49
|
const cutoff = nowMsecsSinceEpoch - this.agedMsecs
|
|
54
50
|
const q = this.monitor.deactivatedHeaders
|
|
@@ -66,72 +62,26 @@ export class TaskReorg extends WalletMonitorTask {
|
|
|
66
62
|
let log = ''
|
|
67
63
|
|
|
68
64
|
for (;;) {
|
|
65
|
+
// Loop over deactivated headers to process
|
|
69
66
|
const header = this.process.shift()
|
|
70
67
|
if (!header) break
|
|
71
68
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
await this.storage.runAsStorageProvider(async sp => {
|
|
75
|
-
// Lookup all the proven_txs records matching the deactivated headers
|
|
76
|
-
ptxs = await sp.findProvenTxs({ partial: { blockHash: header.header.hash } })
|
|
77
|
-
})
|
|
69
|
+
const r = await this.storage.reproveHeader(header.header.hash)
|
|
78
70
|
|
|
79
|
-
log +=
|
|
71
|
+
log += r.log
|
|
80
72
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
if (mpr.merklePath && mpr.header) {
|
|
85
|
-
const mp = mpr.merklePath
|
|
86
|
-
const h = mpr.header
|
|
87
|
-
const leaf = mp.path[0].find(leaf => leaf.txid === true && leaf.hash === ptx.txid)
|
|
88
|
-
if (leaf) {
|
|
89
|
-
const update: Partial<TableProvenTx> = {
|
|
90
|
-
height: mp.blockHeight,
|
|
91
|
-
index: leaf.offset,
|
|
92
|
-
merklePath: mp.toBinary(),
|
|
93
|
-
merkleRoot: h.merkleRoot,
|
|
94
|
-
blockHash: h.hash
|
|
95
|
-
}
|
|
96
|
-
if (update.blockHash === ptx.blockHash) {
|
|
97
|
-
log += ` txid ${ptx.txid} merkle path update still based on deactivated header ${ptx.blockHash}\n`
|
|
98
|
-
if (header.tries + 1 >= this.maxRetries) {
|
|
99
|
-
log += ` maximum retries ${this.maxRetries} exceeded\n`
|
|
100
|
-
} else {
|
|
101
|
-
retry = true
|
|
102
|
-
}
|
|
103
|
-
} else {
|
|
104
|
-
// Verify the new proof's validity.
|
|
105
|
-
const merkleRoot = mp.computeRoot(ptx.txid)
|
|
106
|
-
const chaintracker = await this.monitor.services.getChainTracker()
|
|
107
|
-
const isValid = await chaintracker.isValidRootForHeight(merkleRoot, update.height!)
|
|
108
|
-
const logUpdate = ` height ${ptx.height} ${ptx.height === update.height ? 'unchanged' : `-> ${update.height}`}\n`
|
|
109
|
-
log += ` blockHash ${ptx.blockHash} -> ${update.blockHash}\n`
|
|
110
|
-
log += ` merkleRoot ${ptx.merkleRoot} -> ${update.merkleRoot}\n`
|
|
111
|
-
log += ` index ${ptx.index} -> ${update.index}\n`
|
|
112
|
-
if (!isValid) {
|
|
113
|
-
log +=
|
|
114
|
-
` txid ${ptx.txid} chaintracker fails to confirm updated merkle path update invalid\n` + logUpdate
|
|
115
|
-
} else {
|
|
116
|
-
await this.storage.runAsStorageProvider(async sp => {
|
|
117
|
-
await sp.updateProvenTx(ptx.provenTxId, update)
|
|
118
|
-
})
|
|
119
|
-
log += ` txid ${ptx.txid} proof data updated\n` + logUpdate
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
} else {
|
|
123
|
-
log += ` txid ${ptx.txid} merkle path update doesn't include txid\n`
|
|
124
|
-
retry = true
|
|
125
|
-
}
|
|
73
|
+
if (r.unavailable.length > 0 || r.unchanged.length > 0) {
|
|
74
|
+
if (header.tries + 1 >= this.maxRetries) {
|
|
75
|
+
log += ` maximum retries ${this.maxRetries} exceeded\n`
|
|
126
76
|
} else {
|
|
127
|
-
log += `
|
|
128
|
-
|
|
77
|
+
log += ` retrying...\n`
|
|
78
|
+
this.monitor.deactivatedHeaders.push({
|
|
79
|
+
header: header.header,
|
|
80
|
+
whenMsecs: Date.now(),
|
|
81
|
+
tries: header.tries + 1
|
|
82
|
+
})
|
|
129
83
|
}
|
|
130
84
|
}
|
|
131
|
-
if (retry) {
|
|
132
|
-
log += ` retrying...\n`
|
|
133
|
-
this.monitor.deactivatedHeaders.push({ header: header.header, whenMsecs: Date.now(), tries: header.tries + 1 })
|
|
134
|
-
}
|
|
135
85
|
}
|
|
136
86
|
|
|
137
87
|
return log
|
package/src/sdk/WERR_errors.ts
CHANGED
|
@@ -54,6 +54,11 @@ export class WERR_INVALID_PARAMETER extends WalletError {
|
|
|
54
54
|
) {
|
|
55
55
|
super('WERR_INVALID_PARAMETER', `The ${parameter} parameter must be ${mustBe ?? 'valid.'}`)
|
|
56
56
|
}
|
|
57
|
+
override toJson(): string {
|
|
58
|
+
const obj = JSON.parse(super.toJson())
|
|
59
|
+
obj.parameter = this.parameter
|
|
60
|
+
return JSON.stringify(obj)
|
|
61
|
+
}
|
|
57
62
|
}
|
|
58
63
|
|
|
59
64
|
/**
|
|
@@ -65,6 +70,11 @@ export class WERR_MISSING_PARAMETER extends WalletError {
|
|
|
65
70
|
constructor(public parameter: string) {
|
|
66
71
|
super('WERR_MISSING_PARAMETER', `The required ${parameter} parameter is missing.`)
|
|
67
72
|
}
|
|
73
|
+
override toJson(): string {
|
|
74
|
+
const obj = JSON.parse(super.toJson())
|
|
75
|
+
obj.parameter = this.parameter
|
|
76
|
+
return JSON.stringify(obj)
|
|
77
|
+
}
|
|
68
78
|
}
|
|
69
79
|
|
|
70
80
|
/**
|
|
@@ -127,6 +137,12 @@ export class WERR_INSUFFICIENT_FUNDS extends WalletError {
|
|
|
127
137
|
`Insufficient funds in the available inputs to cover the cost of the required outputs and the transaction fee (${moreSatoshisNeeded} more satoshis are needed, for a total of ${totalSatoshisNeeded}), plus whatever would be required in order to pay the fee to unlock and spend the outputs used to provide the additional satoshis.`
|
|
128
138
|
)
|
|
129
139
|
}
|
|
140
|
+
override toJson(): string {
|
|
141
|
+
const obj = JSON.parse(super.toJson())
|
|
142
|
+
obj.totalSatoshisNeeded = this.totalSatoshisNeeded
|
|
143
|
+
obj.moreSatoshisNeeded = this.moreSatoshisNeeded
|
|
144
|
+
return JSON.stringify(obj)
|
|
145
|
+
}
|
|
130
146
|
}
|
|
131
147
|
|
|
132
148
|
export class WERR_INVALID_PUBLIC_KEY extends WalletError {
|
|
@@ -144,6 +160,11 @@ export class WERR_INVALID_PUBLIC_KEY extends WalletError {
|
|
|
144
160
|
: `The provided public key is invalid or malformed.`
|
|
145
161
|
super('WERR_INVALID_PUBLIC_KEY', message)
|
|
146
162
|
}
|
|
163
|
+
protected override toJson(): string {
|
|
164
|
+
const obj = JSON.parse(super.toJson())
|
|
165
|
+
obj.key = this.key
|
|
166
|
+
return JSON.stringify(obj)
|
|
167
|
+
}
|
|
147
168
|
}
|
|
148
169
|
|
|
149
170
|
/**
|
|
@@ -166,4 +187,17 @@ export class WERR_REVIEW_ACTIONS extends WalletError {
|
|
|
166
187
|
) {
|
|
167
188
|
super('WERR_REVIEW_ACTIONS', 'Undelayed createAction or signAction results require review.')
|
|
168
189
|
}
|
|
190
|
+
override toJson(): string {
|
|
191
|
+
const obj = JSON.parse(super.toJson())
|
|
192
|
+
obj.reviewActionResults = this.reviewActionResults
|
|
193
|
+
obj.sendWithResults = this.sendWithResults
|
|
194
|
+
obj.txid = this.txid
|
|
195
|
+
obj.tx = this.tx
|
|
196
|
+
obj.noSendChange = this.noSendChange
|
|
197
|
+
return JSON.stringify(obj)
|
|
198
|
+
}
|
|
169
199
|
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* IF YOU ADD NEW ERRORS, ALSO UPDATE THE WalletError.fromJson METHOD IN src/sdk/WalletError.ts
|
|
203
|
+
*/
|
package/src/sdk/WalletError.ts
CHANGED
|
@@ -56,7 +56,7 @@ export class WalletError extends Error implements WalletErrorObject {
|
|
|
56
56
|
static fromUnknown(err: unknown): WalletError {
|
|
57
57
|
if (err instanceof WalletError) return err
|
|
58
58
|
let name = 'WERR_UNKNOWN'
|
|
59
|
-
let message = ''
|
|
59
|
+
let message = typeof err === 'string' ? err : typeof err === 'number' ? err.toString() : ''
|
|
60
60
|
let stack: string | undefined
|
|
61
61
|
const details: Record<string, string> = {}
|
|
62
62
|
if (err !== null && typeof err === 'object') {
|
|
@@ -116,4 +116,45 @@ export class WalletError extends Error implements WalletErrorObject {
|
|
|
116
116
|
description: this.message
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Base class default JSON serialization.
|
|
122
|
+
* Captures just the name and message properties.
|
|
123
|
+
*
|
|
124
|
+
* Override this method to safely (avoid deep, large, circular issues) serialize
|
|
125
|
+
* derived class properties.
|
|
126
|
+
*
|
|
127
|
+
* @returns stringified JSON representation of the WalletError.
|
|
128
|
+
*/
|
|
129
|
+
protected toJson(): string {
|
|
130
|
+
const e = new WalletError(this.name, this.message)
|
|
131
|
+
const json = JSON.stringify({
|
|
132
|
+
isError: true,
|
|
133
|
+
name: e.name,
|
|
134
|
+
message: e.message
|
|
135
|
+
})
|
|
136
|
+
return json
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Safely serializes a WalletError derived, WERR_REVIEW_ACTIONS (special case), Error or unknown error to JSON.
|
|
141
|
+
*
|
|
142
|
+
* Safely means avoiding deep, large, circular issues.
|
|
143
|
+
*
|
|
144
|
+
* @param error
|
|
145
|
+
* @returns stringified JSON representation of the error such that it can be desirialized to a WalletError.
|
|
146
|
+
*/
|
|
147
|
+
static unknownToJson(error: unknown | WalletError): string {
|
|
148
|
+
let json: string | undefined
|
|
149
|
+
let e: WalletError | undefined
|
|
150
|
+
if (error instanceof WalletError || (typeof error === 'object' && error?.constructor.name.startsWith('WERR_'))) {
|
|
151
|
+
e = error as WalletError
|
|
152
|
+
} else if (error instanceof Error) {
|
|
153
|
+
e = new WalletError(error.name, error.message)
|
|
154
|
+
} else {
|
|
155
|
+
e = new WalletError('WERR_UNKNOWN', String(error))
|
|
156
|
+
}
|
|
157
|
+
json = e.toJson()
|
|
158
|
+
return json
|
|
159
|
+
}
|
|
119
160
|
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { WalletError } from './WalletError'
|
|
2
|
+
import {
|
|
3
|
+
WERR_BAD_REQUEST,
|
|
4
|
+
WERR_BROADCAST_UNAVAILABLE,
|
|
5
|
+
WERR_INSUFFICIENT_FUNDS,
|
|
6
|
+
WERR_INTERNAL,
|
|
7
|
+
WERR_INVALID_OPERATION,
|
|
8
|
+
WERR_INVALID_PARAMETER,
|
|
9
|
+
WERR_INVALID_PUBLIC_KEY,
|
|
10
|
+
WERR_MISSING_PARAMETER,
|
|
11
|
+
WERR_NETWORK_CHAIN,
|
|
12
|
+
WERR_NOT_ACTIVE,
|
|
13
|
+
WERR_NOT_IMPLEMENTED,
|
|
14
|
+
WERR_REVIEW_ACTIONS,
|
|
15
|
+
WERR_UNAUTHORIZED
|
|
16
|
+
} from './WERR_errors'
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Reconstruct the correct derived WalletError from a JSON object created by `WalletError.unknownToJson`.
|
|
20
|
+
*
|
|
21
|
+
* This function is implemented as a separate function instead of a WalletError class static
|
|
22
|
+
* to avoid circular dependencies.
|
|
23
|
+
*
|
|
24
|
+
* @param json
|
|
25
|
+
* @returns a WalletError derived error object, typically for re-throw.
|
|
26
|
+
*/
|
|
27
|
+
export function WalletErrorFromJson(json: object): WalletError {
|
|
28
|
+
let e: WalletError
|
|
29
|
+
const obj = json as any
|
|
30
|
+
switch (obj.name) {
|
|
31
|
+
case 'WERR_NOT_IMPLEMENTED':
|
|
32
|
+
e = new WERR_NOT_IMPLEMENTED(obj.message)
|
|
33
|
+
break
|
|
34
|
+
case 'WERR_INTERNAL':
|
|
35
|
+
e = new WERR_INTERNAL(obj.message)
|
|
36
|
+
break
|
|
37
|
+
case 'WERR_INVALID_OPERATION':
|
|
38
|
+
e = new WERR_INVALID_OPERATION(obj.message)
|
|
39
|
+
break
|
|
40
|
+
case 'WERR_BROADCAST_UNAVAILABLE':
|
|
41
|
+
e = new WERR_BROADCAST_UNAVAILABLE(obj.message)
|
|
42
|
+
break
|
|
43
|
+
case 'WERR_INVALID_PARAMETER':
|
|
44
|
+
e = new WERR_INVALID_PARAMETER(obj.parameter)
|
|
45
|
+
e.message = obj.message
|
|
46
|
+
break
|
|
47
|
+
case 'WERR_MISSING_PARAMETER':
|
|
48
|
+
e = new WERR_MISSING_PARAMETER(obj.parameter)
|
|
49
|
+
e.message = obj.message
|
|
50
|
+
break
|
|
51
|
+
case 'WERR_BAD_REQUEST':
|
|
52
|
+
e = new WERR_BAD_REQUEST(obj.message)
|
|
53
|
+
break
|
|
54
|
+
case 'WERR_NETWORK_CHAIN':
|
|
55
|
+
e = new WERR_NETWORK_CHAIN(obj.message)
|
|
56
|
+
break
|
|
57
|
+
case 'WERR_UNAUTHORIZED':
|
|
58
|
+
e = new WERR_UNAUTHORIZED(obj.message)
|
|
59
|
+
break
|
|
60
|
+
case 'WERR_NOT_ACTIVE':
|
|
61
|
+
e = new WERR_NOT_ACTIVE(obj.message)
|
|
62
|
+
break
|
|
63
|
+
case 'WERR_INSUFFICIENT_FUNDS':
|
|
64
|
+
e = new WERR_INSUFFICIENT_FUNDS(obj.totalSatoshisNeeded, obj.moreSatoshisNeeded)
|
|
65
|
+
break
|
|
66
|
+
case 'WERR_INVALID_PUBLIC_KEY':
|
|
67
|
+
e = new WERR_INVALID_PUBLIC_KEY(obj.key, 'mainnet')
|
|
68
|
+
e.message = obj.message
|
|
69
|
+
break
|
|
70
|
+
case 'WERR_REVIEW_ACTIONS':
|
|
71
|
+
e = new WERR_REVIEW_ACTIONS(obj.reviewActionResults, obj.sendWithResults, obj.txid, obj.tx, obj.noSendChange)
|
|
72
|
+
break
|
|
73
|
+
default:
|
|
74
|
+
{
|
|
75
|
+
e = new WalletError(obj.name || 'WERR_UNKNOWN', obj.message || '')
|
|
76
|
+
}
|
|
77
|
+
break
|
|
78
|
+
}
|
|
79
|
+
return e
|
|
80
|
+
}
|
|
@@ -560,3 +560,47 @@ export interface ProcessSyncChunkResult {
|
|
|
560
560
|
inserts: number
|
|
561
561
|
error?: WalletError
|
|
562
562
|
}
|
|
563
|
+
|
|
564
|
+
/**
|
|
565
|
+
* Returned results from WalletStorageManager reproveHeader method.
|
|
566
|
+
*/
|
|
567
|
+
export interface ReproveHeaderResult {
|
|
568
|
+
/**
|
|
569
|
+
* Human readable log of the reproveHeader process.
|
|
570
|
+
*/
|
|
571
|
+
log: string
|
|
572
|
+
/**
|
|
573
|
+
* List of proven_txs records that were updated with new proof data.
|
|
574
|
+
*/
|
|
575
|
+
updated: { was: TableProvenTx; update: Partial<TableProvenTx>; logUpdate: string }[]
|
|
576
|
+
/**
|
|
577
|
+
* List of proven_txs records that were checked but currently available proof is unchanged.
|
|
578
|
+
*/
|
|
579
|
+
unchanged: TableProvenTx[]
|
|
580
|
+
/**
|
|
581
|
+
* List of proven_txs records that were checked but currently proof data is unavailable.
|
|
582
|
+
*/
|
|
583
|
+
unavailable: TableProvenTx[]
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
/**
|
|
587
|
+
* Returned results from WalletStorageManager reproveProven method.
|
|
588
|
+
*/
|
|
589
|
+
export interface ReproveProvenResult {
|
|
590
|
+
/**
|
|
591
|
+
* Human readable log of the reproveProven process.
|
|
592
|
+
*/
|
|
593
|
+
log: string
|
|
594
|
+
/**
|
|
595
|
+
* Valid if proof data for proven_txs record is available and has changed.
|
|
596
|
+
*/
|
|
597
|
+
updated?: { update: Partial<TableProvenTx>; logUpdate: string }
|
|
598
|
+
/**
|
|
599
|
+
* True if proof data for proven_txs record was found to be unchanged.
|
|
600
|
+
*/
|
|
601
|
+
unchanged: boolean
|
|
602
|
+
/**
|
|
603
|
+
* True if proof data for proven_txs record is currently unavailable.
|
|
604
|
+
*/
|
|
605
|
+
unavailable: boolean
|
|
606
|
+
}
|