@bsv/sdk 2.0.11 → 2.0.13
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/dist/cjs/package.json +1 -1
- package/dist/cjs/src/auth/clients/__tests__/AuthFetch.additional.test.js +827 -0
- package/dist/cjs/src/auth/clients/__tests__/AuthFetch.additional.test.js.map +1 -0
- package/dist/cjs/src/auth/transports/__tests__/SimplifiedFetchTransport.additional.test.js +654 -0
- package/dist/cjs/src/auth/transports/__tests__/SimplifiedFetchTransport.additional.test.js.map +1 -0
- package/dist/cjs/src/overlay-tools/HostReputationTracker.js +21 -13
- package/dist/cjs/src/overlay-tools/HostReputationTracker.js.map +1 -1
- package/dist/cjs/src/primitives/PrivateKey.js +3 -3
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
- package/dist/cjs/src/script/Spend.js +17 -9
- package/dist/cjs/src/script/Spend.js.map +1 -1
- package/dist/cjs/src/storage/StorageDownloader.js +6 -6
- package/dist/cjs/src/storage/StorageDownloader.js.map +1 -1
- package/dist/cjs/src/storage/StorageUtils.js +1 -1
- package/dist/cjs/src/storage/StorageUtils.js.map +1 -1
- package/dist/cjs/src/transaction/MerklePath.js +168 -27
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/auth/clients/__tests__/AuthFetch.additional.test.js +825 -0
- package/dist/esm/src/auth/clients/__tests__/AuthFetch.additional.test.js.map +1 -0
- package/dist/esm/src/auth/transports/__tests__/SimplifiedFetchTransport.additional.test.js +619 -0
- package/dist/esm/src/auth/transports/__tests__/SimplifiedFetchTransport.additional.test.js.map +1 -0
- package/dist/esm/src/overlay-tools/HostReputationTracker.js +21 -13
- package/dist/esm/src/overlay-tools/HostReputationTracker.js.map +1 -1
- package/dist/esm/src/primitives/PrivateKey.js +3 -3
- package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
- package/dist/esm/src/script/Spend.js +17 -9
- package/dist/esm/src/script/Spend.js.map +1 -1
- package/dist/esm/src/storage/StorageDownloader.js +6 -6
- package/dist/esm/src/storage/StorageDownloader.js.map +1 -1
- package/dist/esm/src/storage/StorageUtils.js +1 -1
- package/dist/esm/src/storage/StorageUtils.js.map +1 -1
- package/dist/esm/src/transaction/MerklePath.js +168 -27
- package/dist/esm/src/transaction/MerklePath.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/auth/clients/__tests__/AuthFetch.additional.test.d.ts +21 -0
- package/dist/types/src/auth/clients/__tests__/AuthFetch.additional.test.d.ts.map +1 -0
- package/dist/types/src/auth/transports/__tests__/SimplifiedFetchTransport.additional.test.d.ts +2 -0
- package/dist/types/src/auth/transports/__tests__/SimplifiedFetchTransport.additional.test.d.ts.map +1 -0
- package/dist/types/src/overlay-tools/HostReputationTracker.d.ts.map +1 -1
- package/dist/types/src/script/Spend.d.ts.map +1 -1
- package/dist/types/src/transaction/MerklePath.d.ts +27 -0
- package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +3 -3
- package/dist/umd/bundle.js.map +1 -1
- package/docs/reference/storage.md +1 -1
- package/docs/reference/transaction.md +40 -0
- package/package.json +1 -1
- package/src/auth/clients/__tests__/AuthFetch.additional.test.ts +1131 -0
- package/src/auth/transports/__tests__/SimplifiedFetchTransport.additional.test.ts +770 -0
- package/src/auth/utils/__tests/validateCertificates.test.ts +12 -9
- package/src/compat/__tests/Mnemonic.additional.test.ts +64 -0
- package/src/identity/__tests/IdentityClient.additional.test.ts +767 -0
- package/src/kvstore/__tests/LocalKVStore.additional.test.ts +611 -0
- package/src/kvstore/__tests/LocalKVStore.test.ts +4 -6
- package/src/kvstore/__tests/kvStoreInterpreter.test.ts +327 -0
- package/src/overlay-tools/HostReputationTracker.ts +17 -14
- package/src/overlay-tools/__tests/HostReputationTracker.additional.test.ts +561 -0
- package/src/overlay-tools/__tests/LookupResolver.additional.test.ts +612 -0
- package/src/overlay-tools/__tests/withDoubleSpendRetry.test.ts +278 -0
- package/src/primitives/PrivateKey.ts +3 -3
- package/src/primitives/__tests/BigNumber.additional.test.ts +79 -0
- package/src/primitives/__tests/Curve.additional.test.ts +208 -0
- package/src/primitives/__tests/ECDSA.additional.test.ts +122 -0
- package/src/primitives/__tests/Hash.additional.test.ts +59 -0
- package/src/primitives/__tests/JacobianPoint.test.ts +308 -0
- package/src/primitives/__tests/Point.additional.test.ts +503 -0
- package/src/primitives/__tests/PublicKey.additional.test.ts +383 -0
- package/src/primitives/__tests/Random.additional.test.ts +262 -0
- package/src/primitives/__tests/Signature.test.ts +333 -0
- package/src/primitives/__tests/TransactionSignature.additional.test.ts +241 -0
- package/src/registry/__tests/RegistryClient.additional.test.ts +750 -0
- package/src/remittance/__tests/BasicBRC29.additional.test.ts +657 -0
- package/src/remittance/__tests/RemittanceManager.additional.test.ts +1272 -0
- package/src/script/Spend.ts +19 -11
- package/src/script/__tests/LockingUnlockingScript.test.ts +79 -0
- package/src/script/__tests/Script.additional.test.ts +100 -0
- package/src/script/__tests/ScriptEvaluationError.test.ts +98 -0
- package/src/script/__tests/Spend.additional.test.ts +837 -0
- package/src/script/templates/__tests/RPuzzle.test.ts +134 -0
- package/src/storage/StorageDownloader.ts +6 -6
- package/src/storage/StorageUtils.ts +1 -1
- package/src/transaction/MerklePath.ts +196 -36
- package/src/transaction/__tests/BeefParty.additional.test.ts +22 -0
- package/src/transaction/__tests/Broadcaster.test.ts +159 -0
- package/src/transaction/__tests/MerklePath.bench.test.ts +105 -0
- package/src/transaction/__tests/MerklePath.test.ts +232 -21
- package/src/transaction/__tests/Transaction.additional.test.ts +225 -0
- package/src/transaction/broadcasters/__tests/ARC.additional.test.ts +585 -0
- package/src/transaction/broadcasters/__tests/Teranode.test.ts +349 -0
- package/src/transaction/chaintrackers/__tests/BlockHeadersService.test.ts +253 -0
- package/src/transaction/chaintrackers/__tests/DefaultChainTracker.test.ts +44 -0
- package/src/transaction/chaintrackers/__tests/WhatsOnChain.additional.test.ts +193 -0
- package/src/transaction/fee-models/__tests/SatoshisPerKilobyte.test.ts +262 -0
- package/src/transaction/http/__tests/BinaryFetchClient.test.ts +212 -0
- package/src/transaction/http/__tests/DefaultHttpClient.additional.test.ts +192 -0
- package/src/transaction/http/__tests/DefaultHttpClient.test.ts +71 -0
- package/src/wallet/__tests/ProtoWallet.additional.test.ts +134 -0
- package/src/wallet/__tests/WERR.test.ts +212 -0
- package/src/wallet/__tests/WalletClient.additional.test.ts +699 -0
- package/src/wallet/__tests/WalletClient.substrate.test.ts +759 -0
- package/src/wallet/__tests/WalletError.test.ts +290 -0
- package/src/wallet/__tests/validationHelpers.test.ts +1218 -0
- package/src/wallet/substrates/__tests/HTTPWalletJSON.test.ts +496 -0
- package/src/wallet/substrates/__tests/HTTPWalletWire.test.ts +273 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { WalletError, walletErrors } from '../WalletError'
|
|
2
|
+
import { WERR_REVIEW_ACTIONS } from '../WERR_REVIEW_ACTIONS'
|
|
3
|
+
import { WERR_INVALID_PARAMETER } from '../WERR_INVALID_PARAMETER'
|
|
4
|
+
import { WERR_INSUFFICIENT_FUNDS } from '../WERR_INSUFFICIENT_FUNDS'
|
|
5
|
+
|
|
6
|
+
describe('WalletError', () => {
|
|
7
|
+
describe('constructor', () => {
|
|
8
|
+
it('sets message from the first argument', () => {
|
|
9
|
+
const err = new WalletError('something went wrong')
|
|
10
|
+
expect(err.message).toBe('something went wrong')
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
it('defaults code to 1 when not supplied', () => {
|
|
14
|
+
const err = new WalletError('oops')
|
|
15
|
+
expect(err.code).toBe(1)
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
it('accepts an explicit code', () => {
|
|
19
|
+
const err = new WalletError('bad parameter', 6)
|
|
20
|
+
expect(err.code).toBe(6)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('sets name to the constructor name (WalletError)', () => {
|
|
24
|
+
const err = new WalletError('msg')
|
|
25
|
+
expect(err.name).toBe('WalletError')
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
it('sets isError to true', () => {
|
|
29
|
+
const err = new WalletError('msg')
|
|
30
|
+
expect(err.isError).toBe(true)
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
it('is an instance of Error', () => {
|
|
34
|
+
const err = new WalletError('msg')
|
|
35
|
+
expect(err).toBeInstanceOf(Error)
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
it('uses the provided stack when supplied', () => {
|
|
39
|
+
const customStack = 'custom stack trace line 1\ncustom stack trace line 2'
|
|
40
|
+
const err = new WalletError('msg', 1, customStack)
|
|
41
|
+
expect(err.stack).toBe(customStack)
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
it('calls Error.captureStackTrace when stack is not provided', () => {
|
|
45
|
+
const spy = jest.spyOn(Error, 'captureStackTrace')
|
|
46
|
+
const err = new WalletError('msg')
|
|
47
|
+
expect(spy).toHaveBeenCalledWith(err, WalletError)
|
|
48
|
+
spy.mockRestore()
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
it('calls Error.captureStackTrace when stack is empty string', () => {
|
|
52
|
+
const spy = jest.spyOn(Error, 'captureStackTrace')
|
|
53
|
+
const err = new WalletError('msg', 1, '')
|
|
54
|
+
expect(spy).toHaveBeenCalledWith(err, WalletError)
|
|
55
|
+
spy.mockRestore()
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
it('calls Error.captureStackTrace when stack is null (cast as undefined path)', () => {
|
|
59
|
+
// null is coerced via the (stack !== null) guard → falls through to captureStackTrace
|
|
60
|
+
const spy = jest.spyOn(Error, 'captureStackTrace')
|
|
61
|
+
const err = new WalletError('msg', 1, null as unknown as string)
|
|
62
|
+
expect(spy).toHaveBeenCalledWith(err, WalletError)
|
|
63
|
+
spy.mockRestore()
|
|
64
|
+
})
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
describe('walletErrors enum', () => {
|
|
68
|
+
it('has value 1 for unknownError', () => {
|
|
69
|
+
expect(walletErrors.unknownError).toBe(1)
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
it('has value 2 for unsupportedAction', () => {
|
|
73
|
+
expect(walletErrors.unsupportedAction).toBe(2)
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
it('has value 3 for invalidHmac', () => {
|
|
77
|
+
expect(walletErrors.invalidHmac).toBe(3)
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
it('has value 4 for invalidSignature', () => {
|
|
81
|
+
expect(walletErrors.invalidSignature).toBe(4)
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
it('has value 5 for reviewActions', () => {
|
|
85
|
+
expect(walletErrors.reviewActions).toBe(5)
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
it('has value 6 for invalidParameter', () => {
|
|
89
|
+
expect(walletErrors.invalidParameter).toBe(6)
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
it('has value 7 for insufficientFunds', () => {
|
|
93
|
+
expect(walletErrors.insufficientFunds).toBe(7)
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
it('all values are within the UInt8 range (0-255)', () => {
|
|
97
|
+
for (const val of Object.values(walletErrors).filter(v => typeof v === 'number')) {
|
|
98
|
+
expect(val as number).toBeGreaterThanOrEqual(0)
|
|
99
|
+
expect(val as number).toBeLessThanOrEqual(255)
|
|
100
|
+
}
|
|
101
|
+
})
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
describe('unknownToJson', () => {
|
|
105
|
+
it('returns valid JSON for every error type', () => {
|
|
106
|
+
const err = new WalletError('test', 1)
|
|
107
|
+
const json = WalletError.unknownToJson(err)
|
|
108
|
+
expect(() => JSON.parse(json)).not.toThrow()
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
describe('with a WERR_REVIEW_ACTIONS error', () => {
|
|
112
|
+
const reviewActionResults = [{ txid: 'abc123', status: 'success' as const }]
|
|
113
|
+
const sendWithResults = [{ txid: 'def456', status: 'unproven' as const }]
|
|
114
|
+
|
|
115
|
+
it('serializes name and isError', () => {
|
|
116
|
+
const err = new WERR_REVIEW_ACTIONS(reviewActionResults, sendWithResults)
|
|
117
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
118
|
+
expect(parsed.name).toBe('WERR_REVIEW_ACTIONS')
|
|
119
|
+
expect(parsed.isError).toBe(true)
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
it('includes code 5', () => {
|
|
123
|
+
const err = new WERR_REVIEW_ACTIONS(reviewActionResults, sendWithResults)
|
|
124
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
125
|
+
expect(parsed.code).toBe(5)
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
it('includes reviewActionResults and sendWithResults', () => {
|
|
129
|
+
const err = new WERR_REVIEW_ACTIONS(reviewActionResults, sendWithResults)
|
|
130
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
131
|
+
expect(parsed.reviewActionResults).toEqual(reviewActionResults)
|
|
132
|
+
expect(parsed.sendWithResults).toEqual(sendWithResults)
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
it('includes optional txid when provided', () => {
|
|
136
|
+
const err = new WERR_REVIEW_ACTIONS(reviewActionResults, sendWithResults, 'txid999')
|
|
137
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
138
|
+
expect(parsed.txid).toBe('txid999')
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
it('includes optional tx when provided', () => {
|
|
142
|
+
const tx = [1, 2, 3]
|
|
143
|
+
const err = new WERR_REVIEW_ACTIONS(reviewActionResults, sendWithResults, undefined, tx)
|
|
144
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
145
|
+
expect(parsed.tx).toEqual(tx)
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
it('includes optional noSendChange when provided', () => {
|
|
149
|
+
const noSendChange = ['outpoint1', 'outpoint2']
|
|
150
|
+
const err = new WERR_REVIEW_ACTIONS(
|
|
151
|
+
reviewActionResults,
|
|
152
|
+
sendWithResults,
|
|
153
|
+
undefined,
|
|
154
|
+
undefined,
|
|
155
|
+
noSendChange
|
|
156
|
+
)
|
|
157
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
158
|
+
expect(parsed.noSendChange).toEqual(noSendChange)
|
|
159
|
+
})
|
|
160
|
+
|
|
161
|
+
it('omits optional fields when not provided', () => {
|
|
162
|
+
const err = new WERR_REVIEW_ACTIONS(reviewActionResults, sendWithResults)
|
|
163
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
164
|
+
expect(parsed.txid).toBeUndefined()
|
|
165
|
+
expect(parsed.tx).toBeUndefined()
|
|
166
|
+
expect(parsed.noSendChange).toBeUndefined()
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
it('includes message', () => {
|
|
170
|
+
const err = new WERR_REVIEW_ACTIONS(reviewActionResults, sendWithResults)
|
|
171
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
172
|
+
expect(typeof parsed.message).toBe('string')
|
|
173
|
+
expect(parsed.message.length).toBeGreaterThan(0)
|
|
174
|
+
})
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
describe('with a WERR_INVALID_PARAMETER error', () => {
|
|
178
|
+
it('serializes name, isError, code 6, and parameter', () => {
|
|
179
|
+
const err = new WERR_INVALID_PARAMETER('myParam', 'a non-empty string')
|
|
180
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
181
|
+
expect(parsed.name).toBe('WERR_INVALID_PARAMETER')
|
|
182
|
+
expect(parsed.isError).toBe(true)
|
|
183
|
+
expect(parsed.code).toBe(6)
|
|
184
|
+
expect(parsed.parameter).toBe('myParam')
|
|
185
|
+
})
|
|
186
|
+
|
|
187
|
+
it('includes message', () => {
|
|
188
|
+
const err = new WERR_INVALID_PARAMETER('myParam', 'a valid value')
|
|
189
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
190
|
+
expect(typeof parsed.message).toBe('string')
|
|
191
|
+
expect(parsed.message).toContain('myParam')
|
|
192
|
+
})
|
|
193
|
+
})
|
|
194
|
+
|
|
195
|
+
describe('with a WERR_INSUFFICIENT_FUNDS error', () => {
|
|
196
|
+
it('serializes name, isError, code 7, totalSatoshisNeeded, and moreSatoshisNeeded', () => {
|
|
197
|
+
const err = new WERR_INSUFFICIENT_FUNDS(1000, 500)
|
|
198
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
199
|
+
expect(parsed.name).toBe('WERR_INSUFFICIENT_FUNDS')
|
|
200
|
+
expect(parsed.isError).toBe(true)
|
|
201
|
+
expect(parsed.code).toBe(7)
|
|
202
|
+
expect(parsed.totalSatoshisNeeded).toBe(1000)
|
|
203
|
+
expect(parsed.moreSatoshisNeeded).toBe(500)
|
|
204
|
+
})
|
|
205
|
+
|
|
206
|
+
it('includes message with satoshi amounts', () => {
|
|
207
|
+
const err = new WERR_INSUFFICIENT_FUNDS(2000, 800)
|
|
208
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
209
|
+
expect(parsed.message).toContain('2000')
|
|
210
|
+
expect(parsed.message).toContain('800')
|
|
211
|
+
})
|
|
212
|
+
})
|
|
213
|
+
|
|
214
|
+
describe('with a WalletError whose name does NOT start with WERR_', () => {
|
|
215
|
+
it('falls through to the instanceof Error branch', () => {
|
|
216
|
+
const err = new WalletError('plain wallet error', 1)
|
|
217
|
+
// WalletError has isError=true but name='WalletError' (does not start with WERR_)
|
|
218
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
219
|
+
expect(parsed.name).toBe('WalletError')
|
|
220
|
+
expect(parsed.isError).toBe(true)
|
|
221
|
+
expect(parsed.message).toBe('plain wallet error')
|
|
222
|
+
// code should NOT be set by the WERR_ branch
|
|
223
|
+
expect(parsed.code).toBeUndefined()
|
|
224
|
+
})
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
describe('with a WERR_ name not matching any known subtype', () => {
|
|
228
|
+
it('enters the WERR_ branch but skips all named sub-branches', () => {
|
|
229
|
+
// Craft an object that satisfies isError===true and name starts with WERR_
|
|
230
|
+
// but is not one of the three recognised subtypes.
|
|
231
|
+
const syntheticErr = {
|
|
232
|
+
isError: true,
|
|
233
|
+
name: 'WERR_UNKNOWN_SUBTYPE',
|
|
234
|
+
message: 'custom werr error'
|
|
235
|
+
}
|
|
236
|
+
const parsed = JSON.parse(WalletError.unknownToJson(syntheticErr))
|
|
237
|
+
expect(parsed.name).toBe('WERR_UNKNOWN_SUBTYPE')
|
|
238
|
+
expect(parsed.isError).toBe(true)
|
|
239
|
+
expect(parsed.message).toBe('custom werr error')
|
|
240
|
+
// No code is added because none of the named sub-branches matched
|
|
241
|
+
expect(parsed.code).toBeUndefined()
|
|
242
|
+
})
|
|
243
|
+
})
|
|
244
|
+
|
|
245
|
+
describe('with a plain Error', () => {
|
|
246
|
+
it('serializes name, message, and isError=true', () => {
|
|
247
|
+
const err = new Error('plain error')
|
|
248
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
249
|
+
expect(parsed.name).toBe('Error')
|
|
250
|
+
expect(parsed.message).toBe('plain error')
|
|
251
|
+
expect(parsed.isError).toBe(true)
|
|
252
|
+
})
|
|
253
|
+
|
|
254
|
+
it('uses the constructor name, not the name property', () => {
|
|
255
|
+
class CustomError extends Error {
|
|
256
|
+
constructor (msg: string) {
|
|
257
|
+
super(msg)
|
|
258
|
+
this.name = 'CustomError'
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
const err = new CustomError('custom')
|
|
262
|
+
const parsed = JSON.parse(WalletError.unknownToJson(err))
|
|
263
|
+
// unknownToJson uses error.constructor.name
|
|
264
|
+
expect(parsed.name).toBe('CustomError')
|
|
265
|
+
})
|
|
266
|
+
})
|
|
267
|
+
|
|
268
|
+
describe('with a non-Error value (string / unknown)', () => {
|
|
269
|
+
it('serializes a string with name WERR_UNKNOWN', () => {
|
|
270
|
+
const parsed = JSON.parse(WalletError.unknownToJson('just a string'))
|
|
271
|
+
expect(parsed.name).toBe('WERR_UNKNOWN')
|
|
272
|
+
expect(parsed.message).toBe('just a string')
|
|
273
|
+
expect(parsed.isError).toBe(true)
|
|
274
|
+
})
|
|
275
|
+
|
|
276
|
+
it('serializes a number with name WERR_UNKNOWN', () => {
|
|
277
|
+
const parsed = JSON.parse(WalletError.unknownToJson(42))
|
|
278
|
+
expect(parsed.name).toBe('WERR_UNKNOWN')
|
|
279
|
+
expect(parsed.message).toBe('42')
|
|
280
|
+
expect(parsed.isError).toBe(true)
|
|
281
|
+
})
|
|
282
|
+
|
|
283
|
+
it('serializes a plain object with name WERR_UNKNOWN', () => {
|
|
284
|
+
const parsed = JSON.parse(WalletError.unknownToJson({ weird: true }))
|
|
285
|
+
expect(parsed.name).toBe('WERR_UNKNOWN')
|
|
286
|
+
expect(parsed.isError).toBe(true)
|
|
287
|
+
})
|
|
288
|
+
})
|
|
289
|
+
})
|
|
290
|
+
})
|