@bsv/wallet-toolbox 1.1.62 → 1.2.1
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/docs/client.md +2339 -182
- package/docs/wallet.md +2339 -182
- package/out/src/CWIStyleWalletManager.d.ts +417 -0
- package/out/src/CWIStyleWalletManager.d.ts.map +1 -0
- package/out/src/CWIStyleWalletManager.js +1153 -0
- package/out/src/CWIStyleWalletManager.js.map +1 -0
- package/out/src/SimpleWalletManager.d.ts +169 -0
- package/out/src/SimpleWalletManager.d.ts.map +1 -0
- package/out/src/SimpleWalletManager.js +315 -0
- package/out/src/SimpleWalletManager.js.map +1 -0
- package/out/src/Wallet.d.ts +6 -1
- package/out/src/Wallet.d.ts.map +1 -1
- package/out/src/Wallet.js +39 -7
- package/out/src/Wallet.js.map +1 -1
- package/out/src/WalletAuthenticationManager.d.ts +33 -0
- package/out/src/WalletAuthenticationManager.d.ts.map +1 -0
- package/out/src/WalletAuthenticationManager.js +110 -0
- package/out/src/WalletAuthenticationManager.js.map +1 -0
- package/out/src/WalletPermissionsManager.d.ts +575 -0
- package/out/src/WalletPermissionsManager.d.ts.map +1 -0
- package/out/src/WalletPermissionsManager.js +1789 -0
- package/out/src/WalletPermissionsManager.js.map +1 -0
- package/out/src/WalletSettingsManager.d.ts +59 -0
- package/out/src/WalletSettingsManager.d.ts.map +1 -0
- package/out/src/WalletSettingsManager.js +189 -0
- package/out/src/WalletSettingsManager.js.map +1 -0
- package/out/src/__tests/CWIStyleWalletManager.test.d.ts +2 -0
- package/out/src/__tests/CWIStyleWalletManager.test.d.ts.map +1 -0
- package/out/src/__tests/CWIStyleWalletManager.test.js +471 -0
- package/out/src/__tests/CWIStyleWalletManager.test.js.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.callbacks.test.d.ts +2 -0
- package/out/src/__tests/WalletPermissionsManager.callbacks.test.d.ts.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.callbacks.test.js +239 -0
- package/out/src/__tests/WalletPermissionsManager.callbacks.test.js.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.checks.test.d.ts +2 -0
- package/out/src/__tests/WalletPermissionsManager.checks.test.d.ts.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.checks.test.js +637 -0
- package/out/src/__tests/WalletPermissionsManager.checks.test.js.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.encryption.test.d.ts +2 -0
- package/out/src/__tests/WalletPermissionsManager.encryption.test.d.ts.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.encryption.test.js +295 -0
- package/out/src/__tests/WalletPermissionsManager.encryption.test.js.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts +83 -0
- package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.fixtures.js +261 -0
- package/out/src/__tests/WalletPermissionsManager.fixtures.js.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.flows.test.d.ts +2 -0
- package/out/src/__tests/WalletPermissionsManager.flows.test.d.ts.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.flows.test.js +377 -0
- package/out/src/__tests/WalletPermissionsManager.flows.test.js.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.initialization.test.d.ts +2 -0
- package/out/src/__tests/WalletPermissionsManager.initialization.test.d.ts.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.initialization.test.js +227 -0
- package/out/src/__tests/WalletPermissionsManager.initialization.test.js.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.proxying.test.d.ts +2 -0
- package/out/src/__tests/WalletPermissionsManager.proxying.test.d.ts.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.proxying.test.js +566 -0
- package/out/src/__tests/WalletPermissionsManager.proxying.test.js.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.tokens.test.d.ts +2 -0
- package/out/src/__tests/WalletPermissionsManager.tokens.test.d.ts.map +1 -0
- package/out/src/__tests/WalletPermissionsManager.tokens.test.js +454 -0
- package/out/src/__tests/WalletPermissionsManager.tokens.test.js.map +1 -0
- package/out/src/index.all.d.ts +9 -0
- package/out/src/index.all.d.ts.map +1 -1
- package/out/src/index.all.js +9 -0
- package/out/src/index.all.js.map +1 -1
- package/out/src/index.client.d.ts +9 -0
- package/out/src/index.client.d.ts.map +1 -1
- package/out/src/index.client.js +9 -0
- package/out/src/index.client.js.map +1 -1
- package/out/src/sdk/CertOpsWallet.d.ts +7 -0
- package/out/src/sdk/CertOpsWallet.d.ts.map +1 -0
- package/out/src/sdk/CertOpsWallet.js +3 -0
- package/out/src/sdk/CertOpsWallet.js.map +1 -0
- package/out/src/sdk/__test/CertificateLifeCycle.test.js +19 -82
- package/out/src/sdk/__test/CertificateLifeCycle.test.js.map +1 -1
- package/out/src/sdk/index.d.ts +1 -1
- package/out/src/sdk/index.d.ts.map +1 -1
- package/out/src/sdk/index.js +1 -1
- package/out/src/sdk/index.js.map +1 -1
- package/out/src/sdk/validationHelpers.d.ts.map +1 -1
- package/out/src/sdk/validationHelpers.js +13 -12
- package/out/src/sdk/validationHelpers.js.map +1 -1
- package/out/src/services/__tests/bitrails.test.js +7 -2
- package/out/src/services/__tests/bitrails.test.js.map +1 -1
- package/out/src/services/providers/__tests/WhatsOnChain.test.js +3 -3
- package/out/src/services/providers/__tests/WhatsOnChain.test.js.map +1 -1
- package/out/src/signer/methods/proveCertificate.d.ts.map +1 -1
- package/out/src/signer/methods/proveCertificate.js +3 -19
- package/out/src/signer/methods/proveCertificate.js.map +1 -1
- package/out/src/storage/__test/WalletStorageManager.test.js +1 -1
- package/out/src/storage/__test/WalletStorageManager.test.js.map +1 -1
- package/out/src/storage/remoting/StorageClient.d.ts +2 -2
- package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageClient.js +1 -1
- package/out/src/storage/remoting/StorageClient.js.map +1 -1
- package/out/src/utility/identityUtils.d.ts +31 -0
- package/out/src/utility/identityUtils.d.ts.map +1 -0
- package/out/src/utility/identityUtils.js +116 -0
- package/out/src/utility/identityUtils.js.map +1 -0
- package/out/src/wab-client/WABClient.d.ts +49 -0
- package/out/src/wab-client/WABClient.d.ts.map +1 -0
- package/out/src/wab-client/WABClient.js +83 -0
- package/out/src/wab-client/WABClient.js.map +1 -0
- package/out/src/wab-client/__tests/WABClient.man.test.d.ts +2 -0
- package/out/src/wab-client/__tests/WABClient.man.test.d.ts.map +1 -0
- package/out/src/wab-client/__tests/WABClient.man.test.js +52 -0
- package/out/src/wab-client/__tests/WABClient.man.test.js.map +1 -0
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts +34 -0
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts.map +1 -0
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js +16 -0
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js.map +1 -0
- package/out/src/wab-client/auth-method-interactors/PersonaIDInteractor.d.ts +7 -0
- package/out/src/wab-client/auth-method-interactors/PersonaIDInteractor.d.ts.map +1 -0
- package/out/src/wab-client/auth-method-interactors/PersonaIDInteractor.js +36 -0
- package/out/src/wab-client/auth-method-interactors/PersonaIDInteractor.js.map +1 -0
- package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.d.ts +28 -0
- package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.d.ts.map +1 -0
- package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.js +69 -0
- package/out/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.js.map +1 -0
- package/out/test/Wallet/action/internalizeAction.a.test.js +1 -1
- package/out/test/Wallet/action/internalizeAction.a.test.js.map +1 -1
- package/out/test/Wallet/certificate/acquireCertificate.test.js +26 -29
- package/out/test/Wallet/certificate/acquireCertificate.test.js.map +1 -1
- package/out/test/storage/KnexMigrations.test.js +1 -1
- package/out/test/storage/KnexMigrations.test.js.map +1 -1
- package/out/test/storage/update.test.js +1 -1
- package/out/test/storage/update.test.js.map +1 -1
- package/out/test/utils/TestUtilsWalletStorage.d.ts +9 -5
- package/out/test/utils/TestUtilsWalletStorage.d.ts.map +1 -1
- package/out/test/utils/TestUtilsWalletStorage.js +15 -9
- package/out/test/utils/TestUtilsWalletStorage.js.map +1 -1
- package/out/test/wallet/action/internalizeAction.test.js +1 -1
- package/out/test/wallet/action/internalizeAction.test.js.map +1 -1
- package/out/test/wallet/list/listActions2.test.js +1 -1
- package/out/test/wallet/list/listActions2.test.js.map +1 -1
- package/out/test/wallet/sync/Wallet.sync.test.js +1 -1
- package/out/test/wallet/sync/Wallet.sync.test.js.map +1 -1
- package/out/tsconfig.all.tsbuildinfo +1 -1
- package/package.json +3 -4
- package/src/CWIStyleWalletManager.ts +1738 -0
- package/src/SimpleWalletManager.ts +526 -0
- package/src/Wallet.ts +70 -7
- package/src/WalletAuthenticationManager.ts +150 -0
- package/src/WalletPermissionsManager.ts +2424 -0
- package/src/WalletSettingsManager.ts +243 -0
- package/src/__tests/CWIStyleWalletManager.test.ts +604 -0
- package/src/__tests/WalletPermissionsManager.callbacks.test.ts +323 -0
- package/src/__tests/WalletPermissionsManager.checks.test.ts +839 -0
- package/src/__tests/WalletPermissionsManager.encryption.test.ts +370 -0
- package/src/__tests/WalletPermissionsManager.fixtures.ts +284 -0
- package/src/__tests/WalletPermissionsManager.flows.test.ts +457 -0
- package/src/__tests/WalletPermissionsManager.initialization.test.ts +300 -0
- package/src/__tests/WalletPermissionsManager.proxying.test.ts +706 -0
- package/src/__tests/WalletPermissionsManager.tokens.test.ts +546 -0
- package/src/index.all.ts +9 -0
- package/src/index.client.ts +9 -0
- package/src/sdk/CertOpsWallet.ts +18 -0
- package/src/sdk/__test/CertificateLifeCycle.test.ts +66 -113
- package/src/sdk/index.ts +1 -1
- package/src/sdk/validationHelpers.ts +12 -11
- package/src/services/__tests/bitrails.test.ts +7 -2
- package/src/services/providers/__tests/WhatsOnChain.test.ts +3 -3
- package/src/signer/methods/proveCertificate.ts +14 -21
- package/src/storage/__test/WalletStorageManager.test.ts +1 -1
- package/src/storage/remoting/StorageClient.ts +4 -4
- package/src/utility/identityUtils.ts +159 -0
- package/src/wab-client/WABClient.ts +94 -0
- package/src/wab-client/__tests/WABClient.man.test.ts +59 -0
- package/src/wab-client/auth-method-interactors/AuthMethodInteractor.ts +47 -0
- package/src/wab-client/auth-method-interactors/PersonaIDInteractor.ts +35 -0
- package/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.ts +72 -0
- package/test/Wallet/action/internalizeAction.a.test.ts +1 -1
- package/test/Wallet/certificate/acquireCertificate.test.ts +89 -30
- package/test/storage/KnexMigrations.test.ts +1 -1
- package/test/storage/update.test.ts +1 -1
- package/test/utils/TestUtilsWalletStorage.ts +24 -13
- package/test/wallet/action/internalizeAction.test.ts +1 -1
- package/test/wallet/list/listActions2.test.ts +1 -1
- package/test/wallet/sync/Wallet.sync.test.ts +1 -1
- package/out/src/sdk/CertOps.d.ts +0 -66
- package/out/src/sdk/CertOps.d.ts.map +0 -1
- package/out/src/sdk/CertOps.js +0 -190
- package/out/src/sdk/CertOps.js.map +0 -1
- package/src/sdk/CertOps.ts +0 -274
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { CWIStyleWalletManager, UMPTokenInteractor, OverlayUMPTokenInteractor } from './CWIStyleWalletManager'
|
|
2
|
+
import { PrivilegedKeyManager } from './sdk/PrivilegedKeyManager'
|
|
3
|
+
import { WalletInterface, Random, Utils, Transaction, RPuzzle, PrivateKey, BigNumber } from '@bsv/sdk'
|
|
4
|
+
import { WABClient } from './wab-client/WABClient'
|
|
5
|
+
import { AuthMethodInteractor } from './wab-client/auth-method-interactors/AuthMethodInteractor'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* WalletAuthenticationManager
|
|
9
|
+
*
|
|
10
|
+
* A wallet manager that integrates
|
|
11
|
+
* with a WABClient for user authentication flows (e.g. Twilio phone).
|
|
12
|
+
*/
|
|
13
|
+
export class WalletAuthenticationManager extends CWIStyleWalletManager {
|
|
14
|
+
private wabClient: WABClient // instance of WABClient
|
|
15
|
+
private authMethod?: AuthMethodInteractor // chosen AuthMethod interactor
|
|
16
|
+
private tempPresentationKey?: string // for temporary persistence between auth steps
|
|
17
|
+
|
|
18
|
+
constructor(
|
|
19
|
+
adminOriginator: string,
|
|
20
|
+
walletBuilder: (primaryKey: number[], privilegedKeyManager: PrivilegedKeyManager) => Promise<WalletInterface>,
|
|
21
|
+
interactor: UMPTokenInteractor = new OverlayUMPTokenInteractor(),
|
|
22
|
+
recoveryKeySaver: (key: number[]) => Promise<true>,
|
|
23
|
+
passwordRetriever: (reason: string, test: (passwordCandidate: string) => boolean) => Promise<string>,
|
|
24
|
+
wabClient: WABClient,
|
|
25
|
+
authMethod?: AuthMethodInteractor,
|
|
26
|
+
stateSnapshot?: number[]
|
|
27
|
+
) {
|
|
28
|
+
super(
|
|
29
|
+
adminOriginator,
|
|
30
|
+
walletBuilder,
|
|
31
|
+
interactor,
|
|
32
|
+
recoveryKeySaver,
|
|
33
|
+
passwordRetriever,
|
|
34
|
+
// Here, we provide a custom new wallet funder that uses the Secret Server
|
|
35
|
+
async (presentationKey: number[], wallet: WalletInterface, adminOriginator: string) => {
|
|
36
|
+
debugger
|
|
37
|
+
const { paymentData } = await this.wabClient.requestFaucet(Utils.toHex(presentationKey))
|
|
38
|
+
if (!paymentData.k || !paymentData.tx) {
|
|
39
|
+
throw new Error('Invalid')
|
|
40
|
+
}
|
|
41
|
+
const tx = Transaction.fromAtomicBEEF(paymentData.tx as number[])
|
|
42
|
+
console.log(paymentData)
|
|
43
|
+
const faucetRedeemTXCreationResult = await wallet.createAction(
|
|
44
|
+
{
|
|
45
|
+
inputBEEF: tx.toBEEF(),
|
|
46
|
+
inputs: [
|
|
47
|
+
{
|
|
48
|
+
outpoint: `${paymentData.txid}.0`,
|
|
49
|
+
unlockingScriptLength: 108,
|
|
50
|
+
inputDescription: 'Fund from faucet'
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
description: 'Fund wallet'
|
|
54
|
+
},
|
|
55
|
+
adminOriginator
|
|
56
|
+
)
|
|
57
|
+
const faucetRedeemTX = Transaction.fromAtomicBEEF(faucetRedeemTXCreationResult.signableTransaction!.tx)
|
|
58
|
+
const faucetRedemptionPuzzle = new RPuzzle()
|
|
59
|
+
const randomRedemptionPrivateKey = PrivateKey.fromRandom()
|
|
60
|
+
const faucetRedeemUnlocker = faucetRedemptionPuzzle.unlock(
|
|
61
|
+
new BigNumber(paymentData.k, 16),
|
|
62
|
+
randomRedemptionPrivateKey
|
|
63
|
+
)
|
|
64
|
+
const faucetRedeemUnlockingScript = await faucetRedeemUnlocker.sign(faucetRedeemTX, 0)
|
|
65
|
+
const signActionResult = await wallet.signAction({
|
|
66
|
+
reference: faucetRedeemTXCreationResult.signableTransaction!.reference,
|
|
67
|
+
spends: {
|
|
68
|
+
0: {
|
|
69
|
+
unlockingScript: faucetRedeemUnlockingScript.toHex()
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
})
|
|
73
|
+
console.log('Sign action result:', signActionResult)
|
|
74
|
+
},
|
|
75
|
+
stateSnapshot
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
this.wabClient = wabClient
|
|
79
|
+
this.authMethod = authMethod
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Sets (or switches) the chosen AuthMethodInteractor at runtime,
|
|
84
|
+
* in case the user changes their mind or picks a new method in the UI.
|
|
85
|
+
*/
|
|
86
|
+
public setAuthMethod(method: AuthMethodInteractor) {
|
|
87
|
+
this.authMethod = method
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Initiate the WAB-based flow, e.g. sending an SMS code or starting an ID check,
|
|
92
|
+
* using the chosen AuthMethodInteractor.
|
|
93
|
+
*/
|
|
94
|
+
public async startAuth(payload: any): Promise<void> {
|
|
95
|
+
if (!this.authMethod) {
|
|
96
|
+
throw new Error('No AuthMethod selected in WalletAuthenticationManager')
|
|
97
|
+
}
|
|
98
|
+
this.tempPresentationKey = this.generateTemporaryPresentationKey()
|
|
99
|
+
|
|
100
|
+
// For example, if this.authMethod is Twilio, `payload` might contain { phoneNumber: "+1..." }
|
|
101
|
+
const startRes = await this.wabClient.startAuthMethod(
|
|
102
|
+
this.authMethod,
|
|
103
|
+
// The user might not have a presentationKey yet, so we generate one locally to pass to the server.
|
|
104
|
+
// If it’s an existing user on the WAB side, the WAB will give us the stored key later.
|
|
105
|
+
// But we do need some placeholder key for the 'startAuth' call:
|
|
106
|
+
this.tempPresentationKey,
|
|
107
|
+
payload
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
if (!startRes.success) {
|
|
111
|
+
throw new Error(startRes.message || 'Failed to start WAB auth method')
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Completes the WAB-based flow, retrieving the final presentationKey from WAB if successful.
|
|
117
|
+
*/
|
|
118
|
+
public async completeAuth(payload: any): Promise<void> {
|
|
119
|
+
if (!this.authMethod || !this.tempPresentationKey) {
|
|
120
|
+
throw new Error('No AuthMethod selected in WalletAuthenticationManager or startAuth has yet to be called.')
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// Unser the temp presentation key early (for security)
|
|
124
|
+
const tempKey = this.tempPresentationKey
|
|
125
|
+
this.tempPresentationKey = undefined
|
|
126
|
+
|
|
127
|
+
const result = await this.wabClient.completeAuthMethod(this.authMethod, tempKey, payload)
|
|
128
|
+
|
|
129
|
+
if (!result.success || !result.presentationKey) {
|
|
130
|
+
throw new Error(result.message || 'Failed to complete WAB auth')
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// We now have the final 256-bit key in hex from the WAB
|
|
134
|
+
const presentationKeyHex = result.presentationKey
|
|
135
|
+
const presentationKeyBytes = Utils.toArray(presentationKeyHex, 'hex')
|
|
136
|
+
|
|
137
|
+
// Provide this presentation key to the underlying CWI logic:
|
|
138
|
+
// This sets 'this.presentationKey' and determines if it's a new or existing user
|
|
139
|
+
// based on whether a UMP token exists on chain. We'll do "presentation-key-and-password"
|
|
140
|
+
// for new user flows, for example, or user might choose "presentation-key-and-recovery-key" if we wanted.
|
|
141
|
+
// Either way, WAB has now done its job and we are off to base-layer CWI logic at this point!
|
|
142
|
+
await this.providePresentationKey(presentationKeyBytes)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
private generateTemporaryPresentationKey(): string {
|
|
146
|
+
// For the 'startAuth' call, we can generate a random 32 bytes → 64 hex chars.
|
|
147
|
+
const randomBytes = Random(32) // array of length 32
|
|
148
|
+
return Utils.toHex(randomBytes)
|
|
149
|
+
}
|
|
150
|
+
}
|