@bsv/wallet-toolbox 1.7.1 → 1.7.2
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 +7 -0
- package/docs/client.md +489 -1334
- package/docs/services.md +5 -5
- package/docs/storage.md +64 -61
- package/docs/wallet.md +489 -1334
- package/mobile/out/src/Wallet.d.ts +21 -4
- package/mobile/out/src/Wallet.d.ts.map +1 -1
- package/mobile/out/src/Wallet.js +93 -57
- package/mobile/out/src/Wallet.js.map +1 -1
- package/mobile/out/src/WalletLogger.d.ts +33 -0
- package/mobile/out/src/WalletLogger.d.ts.map +1 -0
- package/mobile/out/src/WalletLogger.js +157 -0
- package/mobile/out/src/WalletLogger.js.map +1 -0
- package/mobile/out/src/WalletPermissionsManager.d.ts.map +1 -1
- package/mobile/out/src/WalletPermissionsManager.js +1 -2
- package/mobile/out/src/WalletPermissionsManager.js.map +1 -1
- package/mobile/out/src/sdk/WERR_errors.d.ts.map +1 -1
- package/mobile/out/src/sdk/WERR_errors.js.map +1 -1
- package/mobile/out/src/sdk/WalletError.d.ts.map +1 -1
- package/mobile/out/src/sdk/WalletError.js +0 -2
- package/mobile/out/src/sdk/WalletError.js.map +1 -1
- package/mobile/out/src/sdk/WalletServices.interfaces.d.ts +3 -3
- package/mobile/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/mobile/out/src/sdk/WalletStorage.interfaces.d.ts +9 -10
- package/mobile/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
- package/mobile/out/src/sdk/index.d.ts +1 -1
- package/mobile/out/src/sdk/index.d.ts.map +1 -1
- package/mobile/out/src/sdk/index.js +3 -1
- package/mobile/out/src/sdk/index.js.map +1 -1
- package/mobile/out/src/services/Services.d.ts +5 -5
- package/mobile/out/src/services/Services.d.ts.map +1 -1
- package/mobile/out/src/services/Services.js +18 -4
- package/mobile/out/src/services/Services.js.map +1 -1
- package/mobile/out/src/services/providers/WhatsOnChain.d.ts.map +1 -1
- package/mobile/out/src/services/providers/WhatsOnChain.js +1 -2
- package/mobile/out/src/services/providers/WhatsOnChain.js.map +1 -1
- package/mobile/out/src/services/providers/getBeefForTxid.d.ts.map +1 -1
- package/mobile/out/src/services/providers/getBeefForTxid.js.map +1 -1
- package/mobile/out/src/signer/methods/acquireDirectCertificate.d.ts +2 -3
- package/mobile/out/src/signer/methods/acquireDirectCertificate.d.ts.map +1 -1
- package/mobile/out/src/signer/methods/acquireDirectCertificate.js.map +1 -1
- package/mobile/out/src/signer/methods/buildSignableTransaction.d.ts +3 -4
- package/mobile/out/src/signer/methods/buildSignableTransaction.d.ts.map +1 -1
- package/mobile/out/src/signer/methods/buildSignableTransaction.js +1 -2
- package/mobile/out/src/signer/methods/buildSignableTransaction.js.map +1 -1
- package/mobile/out/src/signer/methods/createAction.d.ts +3 -4
- package/mobile/out/src/signer/methods/createAction.d.ts.map +1 -1
- package/mobile/out/src/signer/methods/createAction.js +17 -6
- package/mobile/out/src/signer/methods/createAction.js.map +1 -1
- package/mobile/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
- package/mobile/out/src/signer/methods/internalizeAction.js +1 -2
- package/mobile/out/src/signer/methods/internalizeAction.js.map +1 -1
- package/mobile/out/src/signer/methods/proveCertificate.d.ts +2 -3
- package/mobile/out/src/signer/methods/proveCertificate.d.ts.map +1 -1
- package/mobile/out/src/signer/methods/proveCertificate.js.map +1 -1
- package/mobile/out/src/signer/methods/signAction.d.ts.map +1 -1
- package/mobile/out/src/signer/methods/signAction.js +1 -2
- package/mobile/out/src/signer/methods/signAction.js.map +1 -1
- package/mobile/out/src/storage/StorageIdb.d.ts +3 -4
- package/mobile/out/src/storage/StorageIdb.d.ts.map +1 -1
- package/mobile/out/src/storage/StorageIdb.js.map +1 -1
- package/mobile/out/src/storage/StorageProvider.d.ts +6 -7
- package/mobile/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/mobile/out/src/storage/StorageProvider.js +5 -6
- package/mobile/out/src/storage/StorageProvider.js.map +1 -1
- package/mobile/out/src/storage/WalletStorageManager.d.ts +5 -5
- package/mobile/out/src/storage/WalletStorageManager.d.ts.map +1 -1
- package/mobile/out/src/storage/WalletStorageManager.js +5 -4
- package/mobile/out/src/storage/WalletStorageManager.js.map +1 -1
- package/mobile/out/src/storage/methods/ListActionsSpecOp.d.ts +2 -2
- package/mobile/out/src/storage/methods/ListActionsSpecOp.d.ts.map +1 -1
- package/mobile/out/src/storage/methods/ListActionsSpecOp.js.map +1 -1
- package/mobile/out/src/storage/methods/ListOutputsSpecOp.d.ts +4 -5
- package/mobile/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
- package/mobile/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
- package/mobile/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts +2 -2
- package/mobile/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts.map +1 -1
- package/mobile/out/src/storage/methods/attemptToPostReqsToNetwork.js +11 -7
- package/mobile/out/src/storage/methods/attemptToPostReqsToNetwork.js.map +1 -1
- package/mobile/out/src/storage/methods/createAction.d.ts +3 -4
- package/mobile/out/src/storage/methods/createAction.d.ts.map +1 -1
- package/mobile/out/src/storage/methods/createAction.js +18 -5
- package/mobile/out/src/storage/methods/createAction.js.map +1 -1
- package/mobile/out/src/storage/methods/generateChange.js +10 -10
- package/mobile/out/src/storage/methods/generateChange.js.map +1 -1
- package/mobile/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
- package/mobile/out/src/storage/methods/internalizeAction.js +1 -2
- package/mobile/out/src/storage/methods/internalizeAction.js.map +1 -1
- package/mobile/out/src/storage/methods/listActionsIdb.d.ts +2 -3
- package/mobile/out/src/storage/methods/listActionsIdb.d.ts.map +1 -1
- package/mobile/out/src/storage/methods/listActionsIdb.js.map +1 -1
- package/mobile/out/src/storage/methods/listCertificates.d.ts +3 -3
- package/mobile/out/src/storage/methods/listCertificates.d.ts.map +1 -1
- package/mobile/out/src/storage/methods/listCertificates.js.map +1 -1
- package/mobile/out/src/storage/methods/listOutputsIdb.d.ts +2 -3
- package/mobile/out/src/storage/methods/listOutputsIdb.d.ts.map +1 -1
- package/mobile/out/src/storage/methods/listOutputsIdb.js.map +1 -1
- package/mobile/out/src/storage/methods/processAction.d.ts +2 -2
- package/mobile/out/src/storage/methods/processAction.d.ts.map +1 -1
- package/mobile/out/src/storage/methods/processAction.js +15 -10
- package/mobile/out/src/storage/methods/processAction.js.map +1 -1
- package/mobile/out/src/storage/remoting/StorageClient.d.ts +5 -6
- package/mobile/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
- package/mobile/out/src/storage/remoting/StorageClient.js +22 -0
- package/mobile/out/src/storage/remoting/StorageClient.js.map +1 -1
- package/mobile/out/src/storage/remoting/StorageMobile.d.ts +5 -6
- package/mobile/out/src/storage/remoting/StorageMobile.d.ts.map +1 -1
- package/mobile/out/src/storage/remoting/StorageMobile.js.map +1 -1
- package/mobile/package-lock.json +6 -6
- package/mobile/package.json +2 -2
- package/out/src/Wallet.d.ts +21 -4
- package/out/src/Wallet.d.ts.map +1 -1
- package/out/src/Wallet.js +93 -57
- package/out/src/Wallet.js.map +1 -1
- package/out/src/WalletLogger.d.ts +33 -0
- package/out/src/WalletLogger.d.ts.map +1 -0
- package/out/src/WalletLogger.js +157 -0
- package/out/src/WalletLogger.js.map +1 -0
- package/out/src/WalletPermissionsManager.d.ts.map +1 -1
- package/out/src/WalletPermissionsManager.js +1 -2
- package/out/src/WalletPermissionsManager.js.map +1 -1
- package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts +1 -0
- package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts.map +1 -1
- package/out/src/__tests/WalletPermissionsManager.fixtures.js +15 -4
- package/out/src/__tests/WalletPermissionsManager.fixtures.js.map +1 -1
- package/out/src/__tests/WalletPermissionsManager.proxying.test.js +79 -74
- package/out/src/__tests/WalletPermissionsManager.proxying.test.js.map +1 -1
- package/out/src/sdk/WERR_errors.d.ts.map +1 -1
- package/out/src/sdk/WERR_errors.js.map +1 -1
- package/out/src/sdk/WalletError.d.ts.map +1 -1
- package/out/src/sdk/WalletError.js +0 -2
- package/out/src/sdk/WalletError.js.map +1 -1
- package/out/src/sdk/WalletServices.interfaces.d.ts +3 -3
- package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/out/src/sdk/WalletStorage.interfaces.d.ts +9 -10
- package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
- package/out/src/sdk/__test/validationHelpers.test.js +4 -4
- package/out/src/sdk/__test/validationHelpers.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 +3 -1
- package/out/src/sdk/index.js.map +1 -1
- package/out/src/services/Services.d.ts +5 -5
- package/out/src/services/Services.d.ts.map +1 -1
- package/out/src/services/Services.js +18 -4
- package/out/src/services/Services.js.map +1 -1
- package/out/src/services/providers/WhatsOnChain.d.ts.map +1 -1
- package/out/src/services/providers/WhatsOnChain.js +1 -2
- package/out/src/services/providers/WhatsOnChain.js.map +1 -1
- package/out/src/services/providers/getBeefForTxid.d.ts.map +1 -1
- package/out/src/services/providers/getBeefForTxid.js.map +1 -1
- package/out/src/signer/methods/acquireDirectCertificate.d.ts +2 -3
- package/out/src/signer/methods/acquireDirectCertificate.d.ts.map +1 -1
- package/out/src/signer/methods/acquireDirectCertificate.js.map +1 -1
- package/out/src/signer/methods/buildSignableTransaction.d.ts +3 -4
- package/out/src/signer/methods/buildSignableTransaction.d.ts.map +1 -1
- package/out/src/signer/methods/buildSignableTransaction.js +1 -2
- package/out/src/signer/methods/buildSignableTransaction.js.map +1 -1
- package/out/src/signer/methods/createAction.d.ts +3 -4
- package/out/src/signer/methods/createAction.d.ts.map +1 -1
- package/out/src/signer/methods/createAction.js +17 -6
- package/out/src/signer/methods/createAction.js.map +1 -1
- package/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
- package/out/src/signer/methods/internalizeAction.js +1 -2
- package/out/src/signer/methods/internalizeAction.js.map +1 -1
- package/out/src/signer/methods/proveCertificate.d.ts +2 -3
- package/out/src/signer/methods/proveCertificate.d.ts.map +1 -1
- package/out/src/signer/methods/proveCertificate.js.map +1 -1
- package/out/src/signer/methods/signAction.d.ts.map +1 -1
- package/out/src/signer/methods/signAction.js +1 -2
- package/out/src/signer/methods/signAction.js.map +1 -1
- package/out/src/storage/StorageIdb.d.ts +3 -4
- package/out/src/storage/StorageIdb.d.ts.map +1 -1
- package/out/src/storage/StorageIdb.js.map +1 -1
- package/out/src/storage/StorageKnex.d.ts +3 -4
- package/out/src/storage/StorageKnex.d.ts.map +1 -1
- package/out/src/storage/StorageKnex.js.map +1 -1
- package/out/src/storage/StorageProvider.d.ts +6 -7
- package/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/out/src/storage/StorageProvider.js +5 -6
- package/out/src/storage/StorageProvider.js.map +1 -1
- package/out/src/storage/WalletStorageManager.d.ts +5 -5
- package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
- package/out/src/storage/WalletStorageManager.js +5 -4
- package/out/src/storage/WalletStorageManager.js.map +1 -1
- package/out/src/storage/__test/getBeefForTransaction.test.js.map +1 -1
- package/out/src/storage/methods/ListActionsSpecOp.d.ts +2 -2
- package/out/src/storage/methods/ListActionsSpecOp.d.ts.map +1 -1
- package/out/src/storage/methods/ListActionsSpecOp.js.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.d.ts +4 -5
- package/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts +2 -2
- package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js +11 -7
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js.map +1 -1
- package/out/src/storage/methods/createAction.d.ts +3 -4
- package/out/src/storage/methods/createAction.d.ts.map +1 -1
- package/out/src/storage/methods/createAction.js +18 -5
- package/out/src/storage/methods/createAction.js.map +1 -1
- package/out/src/storage/methods/generateChange.js +10 -10
- package/out/src/storage/methods/generateChange.js.map +1 -1
- package/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
- package/out/src/storage/methods/internalizeAction.js +1 -2
- package/out/src/storage/methods/internalizeAction.js.map +1 -1
- package/out/src/storage/methods/listActionsIdb.d.ts +2 -3
- package/out/src/storage/methods/listActionsIdb.d.ts.map +1 -1
- package/out/src/storage/methods/listActionsIdb.js.map +1 -1
- package/out/src/storage/methods/listActionsKnex.d.ts +2 -3
- package/out/src/storage/methods/listActionsKnex.d.ts.map +1 -1
- package/out/src/storage/methods/listActionsKnex.js.map +1 -1
- package/out/src/storage/methods/listCertificates.d.ts +3 -3
- package/out/src/storage/methods/listCertificates.d.ts.map +1 -1
- package/out/src/storage/methods/listCertificates.js.map +1 -1
- package/out/src/storage/methods/listOutputsIdb.d.ts +2 -3
- package/out/src/storage/methods/listOutputsIdb.d.ts.map +1 -1
- package/out/src/storage/methods/listOutputsIdb.js.map +1 -1
- package/out/src/storage/methods/listOutputsKnex.d.ts +2 -3
- package/out/src/storage/methods/listOutputsKnex.d.ts.map +1 -1
- package/out/src/storage/methods/listOutputsKnex.js.map +1 -1
- package/out/src/storage/methods/processAction.d.ts +2 -2
- package/out/src/storage/methods/processAction.d.ts.map +1 -1
- package/out/src/storage/methods/processAction.js +15 -10
- package/out/src/storage/methods/processAction.js.map +1 -1
- package/out/src/storage/remoting/StorageClient.d.ts +5 -6
- package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageClient.js +22 -0
- package/out/src/storage/remoting/StorageClient.js.map +1 -1
- package/out/src/storage/remoting/StorageMobile.d.ts +5 -6
- package/out/src/storage/remoting/StorageMobile.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageMobile.js.map +1 -1
- package/out/src/storage/remoting/StorageServer.d.ts +5 -0
- package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageServer.js +38 -5
- package/out/src/storage/remoting/StorageServer.js.map +1 -1
- package/out/src/storage/remoting/__test/StorageClient.test.d.ts +2 -0
- package/out/src/storage/remoting/__test/StorageClient.test.d.ts.map +1 -0
- package/out/src/storage/remoting/__test/StorageClient.test.js +98 -0
- package/out/src/storage/remoting/__test/StorageClient.test.js.map +1 -0
- package/out/src/storage/sync/StorageMySQLDojoReader.d.ts.map +1 -1
- package/out/src/storage/sync/StorageMySQLDojoReader.js +1 -2
- package/out/src/storage/sync/StorageMySQLDojoReader.js.map +1 -1
- package/out/test/Wallet/certificate/listCertificates.test.js.map +1 -1
- package/out/test/Wallet/local/localWallet2.man.test.js.map +1 -1
- package/out/test/Wallet/signAction/mountaintop.man.test.js +2 -2
- package/out/test/Wallet/signAction/mountaintop.man.test.js.map +1 -1
- package/out/test/Wallet/support/operations.man.test.js +46 -1
- package/out/test/Wallet/support/operations.man.test.js.map +1 -1
- package/out/test/Wallet/support/reqErrorReview.2025.05.06.man.test.js.map +1 -1
- package/out/test/WalletClient/WERR.man.test.js +1 -1
- package/out/test/WalletClient/WERR.man.test.js.map +1 -1
- package/out/test/utils/localWalletMethods.d.ts.map +1 -1
- package/out/test/utils/localWalletMethods.js +2 -3
- package/out/test/utils/localWalletMethods.js.map +1 -1
- package/out/test/wallet/action/createAction.test.js +3 -0
- package/out/test/wallet/action/createAction.test.js.map +1 -1
- package/out/tsconfig.all.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/Wallet.ts +114 -79
- package/src/WalletLogger.ts +167 -0
- package/src/WalletPermissionsManager.ts +3 -5
- package/src/__tests/WalletPermissionsManager.fixtures.ts +14 -1
- package/src/__tests/WalletPermissionsManager.proxying.test.ts +89 -85
- package/src/sdk/WERR_errors.ts +6 -3
- package/src/sdk/WalletError.ts +0 -4
- package/src/sdk/WalletServices.interfaces.ts +14 -3
- package/src/sdk/WalletStorage.interfaces.ts +11 -16
- package/src/sdk/__test/validationHelpers.test.ts +4 -5
- package/src/sdk/index.ts +1 -1
- package/src/services/Services.ts +23 -5
- package/src/services/providers/WhatsOnChain.ts +2 -3
- package/src/services/providers/getBeefForTxid.ts +3 -5
- package/src/signer/methods/acquireDirectCertificate.ts +2 -3
- package/src/signer/methods/buildSignableTransaction.ts +5 -6
- package/src/signer/methods/createAction.ts +24 -18
- package/src/signer/methods/internalizeAction.ts +4 -5
- package/src/signer/methods/proveCertificate.ts +3 -4
- package/src/signer/methods/signAction.ts +6 -4
- package/src/storage/StorageIdb.ts +3 -4
- package/src/storage/StorageKnex.ts +3 -4
- package/src/storage/StorageProvider.ts +16 -20
- package/src/storage/WalletStorageManager.ts +10 -11
- package/src/storage/__test/getBeefForTransaction.test.ts +3 -4
- package/src/storage/methods/ListActionsSpecOp.ts +4 -4
- package/src/storage/methods/ListOutputsSpecOp.ts +7 -8
- package/src/storage/methods/attemptToPostReqsToNetwork.ts +15 -8
- package/src/storage/methods/createAction.ts +39 -23
- package/src/storage/methods/generateChange.ts +10 -10
- package/src/storage/methods/internalizeAction.ts +4 -4
- package/src/storage/methods/listActionsIdb.ts +3 -3
- package/src/storage/methods/listActionsKnex.ts +3 -3
- package/src/storage/methods/listCertificates.ts +7 -6
- package/src/storage/methods/listOutputsIdb.ts +2 -3
- package/src/storage/methods/listOutputsKnex.ts +2 -3
- package/src/storage/methods/processAction.ts +30 -11
- package/src/storage/remoting/StorageClient.ts +31 -12
- package/src/storage/remoting/StorageMobile.ts +6 -12
- package/src/storage/remoting/StorageServer.ts +45 -6
- package/src/storage/remoting/__test/StorageClient.test.ts +113 -0
- package/src/storage/sync/StorageMySQLDojoReader.ts +2 -3
- package/test/Wallet/certificate/listCertificates.test.ts +2 -2
- package/test/Wallet/local/localWallet2.man.test.ts +5 -5
- package/test/Wallet/signAction/mountaintop.man.test.ts +3 -2
- package/test/Wallet/support/operations.man.test.ts +65 -6
- package/test/Wallet/support/reqErrorReview.2025.05.06.man.test.ts +2 -14
- package/test/WalletClient/WERR.man.test.ts +3 -3
- package/test/utils/localWalletMethods.ts +5 -5
- package/test/wallet/action/createAction.test.ts +3 -0
- package/mobile/out/src/sdk/validationHelpers.d.ts +0 -322
- package/mobile/out/src/sdk/validationHelpers.d.ts.map +0 -1
- package/mobile/out/src/sdk/validationHelpers.js +0 -691
- package/mobile/out/src/sdk/validationHelpers.js.map +0 -1
- package/out/src/sdk/validationHelpers.d.ts +0 -322
- package/out/src/sdk/validationHelpers.d.ts.map +0 -1
- package/out/src/sdk/validationHelpers.js +0 -691
- package/out/src/sdk/validationHelpers.js.map +0 -1
- package/src/sdk/validationHelpers.ts +0 -1034
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bsv/wallet-toolbox",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.2",
|
|
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",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@bsv/auth-express-middleware": "^1.2.3",
|
|
35
35
|
"@bsv/payment-express-middleware": "^1.2.3",
|
|
36
|
-
"@bsv/sdk": "^1.9.
|
|
36
|
+
"@bsv/sdk": "^1.9.9",
|
|
37
37
|
"express": "^4.21.2",
|
|
38
38
|
"idb": "^8.0.2",
|
|
39
39
|
"knex": "^3.1.0",
|
package/src/Wallet.ts
CHANGED
|
@@ -24,7 +24,6 @@ import {
|
|
|
24
24
|
GetVersionResult,
|
|
25
25
|
InternalizeActionArgs,
|
|
26
26
|
InternalizeActionResult,
|
|
27
|
-
KeyDeriver,
|
|
28
27
|
ListActionsArgs,
|
|
29
28
|
ListActionsResult,
|
|
30
29
|
ListCertificatesArgs,
|
|
@@ -66,7 +65,10 @@ import {
|
|
|
66
65
|
LookupResolver,
|
|
67
66
|
AtomicBEEF,
|
|
68
67
|
BEEF,
|
|
69
|
-
KeyDeriverApi
|
|
68
|
+
KeyDeriverApi,
|
|
69
|
+
Validation,
|
|
70
|
+
WalletLoggerInterface,
|
|
71
|
+
MakeWalletLogger
|
|
70
72
|
} from '@bsv/sdk'
|
|
71
73
|
import { acquireDirectCertificate } from './signer/methods/acquireDirectCertificate'
|
|
72
74
|
import { proveCertificate } from './signer/methods/proveCertificate'
|
|
@@ -96,28 +98,12 @@ import {
|
|
|
96
98
|
import { WalletServices } from './sdk/WalletServices.interfaces'
|
|
97
99
|
import { PrivilegedKeyManager } from './sdk/PrivilegedKeyManager'
|
|
98
100
|
import { WERR_INTERNAL, WERR_INVALID_PARAMETER, WERR_REVIEW_ACTIONS } from './sdk/WERR_errors'
|
|
99
|
-
import {
|
|
100
|
-
validateAbortActionArgs,
|
|
101
|
-
validateAcquireDirectCertificateArgs,
|
|
102
|
-
validateAcquireIssuanceCertificateArgs,
|
|
103
|
-
validateCreateActionArgs,
|
|
104
|
-
validateDiscoverByAttributesArgs,
|
|
105
|
-
validateDiscoverByIdentityKeyArgs,
|
|
106
|
-
validateInternalizeActionArgs,
|
|
107
|
-
validateListActionsArgs,
|
|
108
|
-
validateListCertificatesArgs,
|
|
109
|
-
validateListOutputsArgs,
|
|
110
|
-
validateOriginator,
|
|
111
|
-
validateProveCertificateArgs,
|
|
112
|
-
validateRelinquishCertificateArgs,
|
|
113
|
-
validateRelinquishOutputArgs,
|
|
114
|
-
validateSignActionArgs,
|
|
115
|
-
ValidCreateActionArgs,
|
|
116
|
-
ValidWalletSignerArgs
|
|
117
|
-
} from './sdk/validationHelpers'
|
|
118
101
|
import { AuthId, StorageCreateActionResult, StorageInternalizeActionResult } from './sdk/WalletStorage.interfaces'
|
|
119
102
|
import { WalletError } from './sdk/WalletError'
|
|
120
103
|
|
|
104
|
+
/**
|
|
105
|
+
* The preferred means of constructing a `Wallet` is with a `WalletArgs` instance.
|
|
106
|
+
*/
|
|
121
107
|
export interface WalletArgs {
|
|
122
108
|
chain: Chain
|
|
123
109
|
keyDeriver: KeyDeriverApi
|
|
@@ -127,6 +113,16 @@ export interface WalletArgs {
|
|
|
127
113
|
privilegedKeyManager?: PrivilegedKeyManager
|
|
128
114
|
settingsManager?: WalletSettingsManager
|
|
129
115
|
lookupResolver?: LookupResolver
|
|
116
|
+
/**
|
|
117
|
+
* Optional. Provide a function conforming to the `MakeWalletLogger` type to enable wallet request logging.
|
|
118
|
+
*
|
|
119
|
+
* For simple requests using `Console` may be adequate, initialize with
|
|
120
|
+
* `() => Console`
|
|
121
|
+
*
|
|
122
|
+
* Aggregate tracing and control over capturing all logged output in one place:
|
|
123
|
+
* `(log?: string | WalletLoggerInterface) => new WalletLogger(log)`
|
|
124
|
+
*/
|
|
125
|
+
makeLogger?: MakeWalletLogger
|
|
130
126
|
}
|
|
131
127
|
|
|
132
128
|
function isWalletSigner(args: WalletArgs | WalletSigner): args is WalletSigner {
|
|
@@ -174,6 +170,7 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
174
170
|
userParty: string
|
|
175
171
|
proto: ProtoWallet
|
|
176
172
|
privilegedKeyManager?: PrivilegedKeyManager
|
|
173
|
+
makeLogger?: MakeWalletLogger
|
|
177
174
|
|
|
178
175
|
pendingSignActions: Record<string, PendingSignAction>
|
|
179
176
|
|
|
@@ -186,7 +183,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
186
183
|
argsOrSigner: WalletArgs | WalletSigner,
|
|
187
184
|
services?: WalletServices,
|
|
188
185
|
monitor?: Monitor,
|
|
189
|
-
privilegedKeyManager?: PrivilegedKeyManager
|
|
186
|
+
privilegedKeyManager?: PrivilegedKeyManager,
|
|
187
|
+
makeLogger?: MakeWalletLogger
|
|
190
188
|
) {
|
|
191
189
|
const args: WalletArgs = !isWalletSigner(argsOrSigner)
|
|
192
190
|
? argsOrSigner
|
|
@@ -196,7 +194,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
196
194
|
storage: argsOrSigner.storage,
|
|
197
195
|
services,
|
|
198
196
|
monitor,
|
|
199
|
-
privilegedKeyManager
|
|
197
|
+
privilegedKeyManager,
|
|
198
|
+
makeLogger
|
|
200
199
|
}
|
|
201
200
|
|
|
202
201
|
if (args.storage._authId.identityKey != args.keyDeriver.identityKey)
|
|
@@ -218,6 +217,7 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
218
217
|
this.services = args.services
|
|
219
218
|
this.monitor = args.monitor
|
|
220
219
|
this.privilegedKeyManager = args.privilegedKeyManager
|
|
220
|
+
this.makeLogger = args.makeLogger
|
|
221
221
|
|
|
222
222
|
this.identityKey = this.keyDeriver.identityKey
|
|
223
223
|
|
|
@@ -374,11 +374,12 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
374
374
|
}
|
|
375
375
|
}
|
|
376
376
|
|
|
377
|
-
private validateAuthAndArgs<A, T extends ValidWalletSignerArgs>(
|
|
377
|
+
private validateAuthAndArgs<A, T extends Validation.ValidWalletSignerArgs>(
|
|
378
378
|
args: A,
|
|
379
|
-
validate: (args: A) => T
|
|
379
|
+
validate: (args: A, logger?: WalletLoggerInterface) => T,
|
|
380
|
+
logger?: WalletLoggerInterface
|
|
380
381
|
): { vargs: T; auth: AuthId } {
|
|
381
|
-
const vargs = validate(args)
|
|
382
|
+
const vargs = validate(args, logger)
|
|
382
383
|
const auth: AuthId = { identityKey: this.identityKey }
|
|
383
384
|
return { vargs, auth }
|
|
384
385
|
}
|
|
@@ -391,8 +392,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
391
392
|
args: ListActionsArgs,
|
|
392
393
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
393
394
|
): Promise<ListActionsResult> {
|
|
394
|
-
validateOriginator(originator)
|
|
395
|
-
const { vargs } = this.validateAuthAndArgs(args, validateListActionsArgs)
|
|
395
|
+
Validation.validateOriginator(originator)
|
|
396
|
+
const { vargs } = this.validateAuthAndArgs(args, Validation.validateListActionsArgs)
|
|
396
397
|
const r = await this.storage.listActions(vargs)
|
|
397
398
|
return r
|
|
398
399
|
}
|
|
@@ -405,8 +406,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
405
406
|
args: ListOutputsArgs,
|
|
406
407
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
407
408
|
): Promise<ListOutputsResult> {
|
|
408
|
-
validateOriginator(originator)
|
|
409
|
-
const { vargs } = this.validateAuthAndArgs(args, validateListOutputsArgs)
|
|
409
|
+
Validation.validateOriginator(originator)
|
|
410
|
+
const { vargs } = this.validateAuthAndArgs(args, Validation.validateListOutputsArgs)
|
|
410
411
|
if (this.autoKnownTxids && !vargs.knownTxids) {
|
|
411
412
|
vargs.knownTxids = this.getKnownTxids()
|
|
412
413
|
}
|
|
@@ -422,8 +423,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
422
423
|
args: ListCertificatesArgs,
|
|
423
424
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
424
425
|
): Promise<ListCertificatesResult> {
|
|
425
|
-
validateOriginator(originator)
|
|
426
|
-
const { vargs } = this.validateAuthAndArgs(args, validateListCertificatesArgs)
|
|
426
|
+
Validation.validateOriginator(originator)
|
|
427
|
+
const { vargs } = this.validateAuthAndArgs(args, Validation.validateListCertificatesArgs)
|
|
427
428
|
const r = await this.storage.listCertificates(vargs)
|
|
428
429
|
return r
|
|
429
430
|
}
|
|
@@ -436,9 +437,9 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
436
437
|
args: AcquireCertificateArgs,
|
|
437
438
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
438
439
|
): Promise<AcquireCertificateResult> {
|
|
439
|
-
validateOriginator(originator)
|
|
440
|
+
Validation.validateOriginator(originator)
|
|
440
441
|
if (args.acquisitionProtocol === 'direct') {
|
|
441
|
-
const { auth, vargs } = this.validateAuthAndArgs(args, validateAcquireDirectCertificateArgs)
|
|
442
|
+
const { auth, vargs } = this.validateAuthAndArgs(args, Validation.validateAcquireDirectCertificateArgs)
|
|
442
443
|
vargs.subject = (
|
|
443
444
|
await this.getPublicKey({
|
|
444
445
|
identityKey: true,
|
|
@@ -483,7 +484,7 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
483
484
|
}
|
|
484
485
|
|
|
485
486
|
if (args.acquisitionProtocol === 'issuance') {
|
|
486
|
-
const { auth, vargs } = this.validateAuthAndArgs(args, validateAcquireIssuanceCertificateArgs)
|
|
487
|
+
const { auth, vargs } = this.validateAuthAndArgs(args, Validation.validateAcquireIssuanceCertificateArgs)
|
|
487
488
|
// Create a random nonce that the server can verify
|
|
488
489
|
const clientNonce = await createNonce(this, vargs.certifier)
|
|
489
490
|
// TODO: Consider adding support to request certificates from a certifier before acquiring a certificate.
|
|
@@ -599,8 +600,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
599
600
|
args: RelinquishCertificateArgs,
|
|
600
601
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
601
602
|
): Promise<RelinquishCertificateResult> {
|
|
602
|
-
validateOriginator(originator)
|
|
603
|
-
this.validateAuthAndArgs(args, validateRelinquishCertificateArgs)
|
|
603
|
+
Validation.validateOriginator(originator)
|
|
604
|
+
this.validateAuthAndArgs(args, Validation.validateRelinquishCertificateArgs)
|
|
604
605
|
const r = await this.storage.relinquishCertificate(args)
|
|
605
606
|
return { relinquished: true }
|
|
606
607
|
}
|
|
@@ -609,8 +610,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
609
610
|
args: ProveCertificateArgs,
|
|
610
611
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
611
612
|
): Promise<ProveCertificateResult> {
|
|
612
|
-
originator = validateOriginator(originator)
|
|
613
|
-
const { auth, vargs } = this.validateAuthAndArgs(args, validateProveCertificateArgs)
|
|
613
|
+
originator = Validation.validateOriginator(originator)
|
|
614
|
+
const { auth, vargs } = this.validateAuthAndArgs(args, Validation.validateProveCertificateArgs)
|
|
614
615
|
const r = await proveCertificate(this, auth, vargs)
|
|
615
616
|
return r
|
|
616
617
|
}
|
|
@@ -628,8 +629,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
628
629
|
args: DiscoverByIdentityKeyArgs,
|
|
629
630
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
630
631
|
): Promise<DiscoverCertificatesResult> {
|
|
631
|
-
validateOriginator(originator)
|
|
632
|
-
this.validateAuthAndArgs(args, validateDiscoverByIdentityKeyArgs)
|
|
632
|
+
Validation.validateOriginator(originator)
|
|
633
|
+
this.validateAuthAndArgs(args, Validation.validateDiscoverByIdentityKeyArgs)
|
|
633
634
|
|
|
634
635
|
const TTL_MS = 2 * 60 * 1000
|
|
635
636
|
const now = Date.now()
|
|
@@ -673,8 +674,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
673
674
|
args: DiscoverByAttributesArgs,
|
|
674
675
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
675
676
|
): Promise<DiscoverCertificatesResult> {
|
|
676
|
-
validateOriginator(originator)
|
|
677
|
-
this.validateAuthAndArgs(args, validateDiscoverByAttributesArgs)
|
|
677
|
+
Validation.validateOriginator(originator)
|
|
678
|
+
this.validateAuthAndArgs(args, Validation.validateDiscoverByAttributesArgs)
|
|
678
679
|
|
|
679
680
|
const TTL_MS = 2 * 60 * 1000
|
|
680
681
|
const now = Date.now()
|
|
@@ -752,6 +753,28 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
752
753
|
return this.verifyReturnedTxidOnly(b).toBinary()
|
|
753
754
|
}
|
|
754
755
|
|
|
756
|
+
logMakeLogger(method: string, args: any): WalletLoggerInterface | undefined {
|
|
757
|
+
const logger = this.makeLogger?.(args['log'])
|
|
758
|
+
this.logMethodStart(method, logger)
|
|
759
|
+
return logger
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
logMethodStart(method: string, logger?: WalletLoggerInterface): void {
|
|
763
|
+
logger?.group(`Wallet ${method}`)
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
logResult(r: any, logger?: WalletLoggerInterface): void {
|
|
767
|
+
if (!logger) return
|
|
768
|
+
logger.groupEnd()
|
|
769
|
+
r['log'] = logger.flush?.()
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
logWalletError(eu: unknown, logger?: WalletLoggerInterface): void {
|
|
773
|
+
if (!logger) return
|
|
774
|
+
logger.error('WalletError:', WalletError.unknownToJson(eu))
|
|
775
|
+
logger.flush?.()
|
|
776
|
+
}
|
|
777
|
+
|
|
755
778
|
//////////////////
|
|
756
779
|
// Actions
|
|
757
780
|
//////////////////
|
|
@@ -760,41 +783,53 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
760
783
|
args: CreateActionArgs,
|
|
761
784
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
762
785
|
): Promise<CreateActionResult> {
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
args.options.
|
|
769
|
-
|
|
786
|
+
const logger = this.logMakeLogger(`createAction`, args)
|
|
787
|
+
try {
|
|
788
|
+
Validation.validateOriginator(originator)
|
|
789
|
+
|
|
790
|
+
if (!args.options) args.options = {}
|
|
791
|
+
args.options.trustSelf ||= this.trustSelf
|
|
792
|
+
if (this.autoKnownTxids && !args.options.knownTxids) {
|
|
793
|
+
args.options.knownTxids = this.getKnownTxids(args.options.knownTxids)
|
|
794
|
+
}
|
|
770
795
|
|
|
771
|
-
|
|
796
|
+
const { auth, vargs } = this.validateAuthAndArgs(args, Validation.validateCreateActionArgs, logger)
|
|
797
|
+
logger?.log('validated args')
|
|
772
798
|
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
799
|
+
vargs.includeAllSourceTransactions = this.includeAllSourceTransactions
|
|
800
|
+
if (this.randomVals && this.randomVals.length > 1) {
|
|
801
|
+
vargs.randomVals = [...this.randomVals]
|
|
802
|
+
}
|
|
777
803
|
|
|
778
|
-
|
|
804
|
+
const r = await createAction(this, auth, vargs)
|
|
805
|
+
logger?.log('action created')
|
|
779
806
|
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
807
|
+
if (r.tx) {
|
|
808
|
+
this.beef.mergeBeefFromParty(this.storageParty, r.tx)
|
|
809
|
+
}
|
|
783
810
|
|
|
784
|
-
|
|
811
|
+
if (r.tx) {
|
|
812
|
+
r.tx = this.verifyReturnedTxidOnlyAtomicBEEF(r.tx, args.options?.knownTxids)
|
|
813
|
+
logger?.log('verify returned AtomicBEEF')
|
|
814
|
+
}
|
|
785
815
|
|
|
786
|
-
|
|
816
|
+
if (!vargs.isDelayed) throwIfAnyUnsuccessfulCreateActions(r)
|
|
787
817
|
|
|
788
|
-
|
|
818
|
+
this.logResult(r, logger)
|
|
819
|
+
return r
|
|
820
|
+
} catch (eu: unknown) {
|
|
821
|
+
this.logWalletError(eu, logger)
|
|
822
|
+
throw eu
|
|
823
|
+
}
|
|
789
824
|
}
|
|
790
825
|
|
|
791
826
|
async signAction(
|
|
792
827
|
args: SignActionArgs,
|
|
793
828
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
794
829
|
): Promise<SignActionResult> {
|
|
795
|
-
validateOriginator(originator)
|
|
830
|
+
Validation.validateOriginator(originator)
|
|
796
831
|
|
|
797
|
-
const { auth, vargs } = this.validateAuthAndArgs(args, validateSignActionArgs)
|
|
832
|
+
const { auth, vargs } = this.validateAuthAndArgs(args, Validation.validateSignActionArgs)
|
|
798
833
|
// createAction options are merged with undefined signAction options before validation...
|
|
799
834
|
const r = await signAction(this, auth, args)
|
|
800
835
|
|
|
@@ -810,8 +845,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
810
845
|
args: InternalizeActionArgs,
|
|
811
846
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
812
847
|
): Promise<InternalizeActionResult> {
|
|
813
|
-
validateOriginator(originator)
|
|
814
|
-
const { auth, vargs } = this.validateAuthAndArgs(args, validateInternalizeActionArgs)
|
|
848
|
+
Validation.validateOriginator(originator)
|
|
849
|
+
const { auth, vargs } = this.validateAuthAndArgs(args, Validation.validateInternalizeActionArgs)
|
|
815
850
|
|
|
816
851
|
if (vargs.labels.indexOf(specOpThrowReviewActions) >= 0) throwDummyReviewActions()
|
|
817
852
|
|
|
@@ -826,9 +861,9 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
826
861
|
args: AbortActionArgs,
|
|
827
862
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
828
863
|
): Promise<AbortActionResult> {
|
|
829
|
-
validateOriginator(originator)
|
|
864
|
+
Validation.validateOriginator(originator)
|
|
830
865
|
|
|
831
|
-
const { auth } = this.validateAuthAndArgs(args, validateAbortActionArgs)
|
|
866
|
+
const { auth } = this.validateAuthAndArgs(args, Validation.validateAbortActionArgs)
|
|
832
867
|
const r = await this.storage.abortAction(args)
|
|
833
868
|
return r
|
|
834
869
|
}
|
|
@@ -837,14 +872,14 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
837
872
|
args: RelinquishOutputArgs,
|
|
838
873
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
839
874
|
): Promise<RelinquishOutputResult> {
|
|
840
|
-
validateOriginator(originator)
|
|
841
|
-
const { vargs } = this.validateAuthAndArgs(args, validateRelinquishOutputArgs)
|
|
875
|
+
Validation.validateOriginator(originator)
|
|
876
|
+
const { vargs } = this.validateAuthAndArgs(args, Validation.validateRelinquishOutputArgs)
|
|
842
877
|
const r = await this.storage.relinquishOutput(args)
|
|
843
878
|
return { relinquished: true }
|
|
844
879
|
}
|
|
845
880
|
|
|
846
881
|
async isAuthenticated(args: {}, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<AuthenticatedResult> {
|
|
847
|
-
validateOriginator(originator)
|
|
882
|
+
Validation.validateOriginator(originator)
|
|
848
883
|
const r: { authenticated: true } = {
|
|
849
884
|
authenticated: true
|
|
850
885
|
}
|
|
@@ -855,12 +890,12 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
855
890
|
args: {},
|
|
856
891
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
857
892
|
): Promise<AuthenticatedResult> {
|
|
858
|
-
validateOriginator(originator)
|
|
893
|
+
Validation.validateOriginator(originator)
|
|
859
894
|
return { authenticated: true }
|
|
860
895
|
}
|
|
861
896
|
|
|
862
897
|
async getHeight(args: {}, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<GetHeightResult> {
|
|
863
|
-
validateOriginator(originator)
|
|
898
|
+
Validation.validateOriginator(originator)
|
|
864
899
|
const height = await this.getServices().getHeight()
|
|
865
900
|
return { height }
|
|
866
901
|
}
|
|
@@ -869,18 +904,18 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
869
904
|
args: GetHeaderArgs,
|
|
870
905
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
871
906
|
): Promise<GetHeaderResult> {
|
|
872
|
-
validateOriginator(originator)
|
|
907
|
+
Validation.validateOriginator(originator)
|
|
873
908
|
const serializedHeader = await this.getServices().getHeaderForHeight(args.height)
|
|
874
909
|
return { header: Utils.toHex(serializedHeader) }
|
|
875
910
|
}
|
|
876
911
|
|
|
877
912
|
async getNetwork(args: {}, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<GetNetworkResult> {
|
|
878
|
-
validateOriginator(originator)
|
|
913
|
+
Validation.validateOriginator(originator)
|
|
879
914
|
return { network: toWalletNetwork(this.chain) }
|
|
880
915
|
}
|
|
881
916
|
|
|
882
917
|
async getVersion(args: {}, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<GetVersionResult> {
|
|
883
|
-
validateOriginator(originator)
|
|
918
|
+
Validation.validateOriginator(originator)
|
|
884
919
|
return { version: 'wallet-brc100-1.0.0' }
|
|
885
920
|
}
|
|
886
921
|
|
|
@@ -1033,7 +1068,7 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
1033
1068
|
* @returns {ListActionsResult} start `listActions` result restricted to 'nosend' (or 'failed' if aborted) actions.
|
|
1034
1069
|
*/
|
|
1035
1070
|
async listNoSendActions(args: ListActionsArgs, abort = false): Promise<ListActionsResult> {
|
|
1036
|
-
const { vargs } = this.validateAuthAndArgs(args, validateListActionsArgs)
|
|
1071
|
+
const { vargs } = this.validateAuthAndArgs(args, Validation.validateListActionsArgs)
|
|
1037
1072
|
vargs.labels.push(specOpNoSendActions)
|
|
1038
1073
|
if (abort) vargs.labels.push('abort')
|
|
1039
1074
|
const r = await this.storage.listActions(vargs)
|
|
@@ -1047,7 +1082,7 @@ export class Wallet implements WalletInterface, ProtoWallet {
|
|
|
1047
1082
|
* @returns {ListActionsResult} start `listActions` result restricted to 'failed' status actions.
|
|
1048
1083
|
*/
|
|
1049
1084
|
async listFailedActions(args: ListActionsArgs, unfail = false): Promise<ListActionsResult> {
|
|
1050
|
-
const { vargs } = this.validateAuthAndArgs(args, validateListActionsArgs)
|
|
1085
|
+
const { vargs } = this.validateAuthAndArgs(args, Validation.validateListActionsArgs)
|
|
1051
1086
|
vargs.labels.push(specOpFailedActions)
|
|
1052
1087
|
if (unfail) vargs.labels.push('unfail')
|
|
1053
1088
|
const r = await this.storage.listActions(vargs)
|
|
@@ -1067,7 +1102,7 @@ export interface PendingStorageInput {
|
|
|
1067
1102
|
export interface PendingSignAction {
|
|
1068
1103
|
reference: string
|
|
1069
1104
|
dcr: StorageCreateActionResult
|
|
1070
|
-
args: ValidCreateActionArgs
|
|
1105
|
+
args: Validation.ValidCreateActionArgs
|
|
1071
1106
|
tx: BsvTransaction
|
|
1072
1107
|
amount: number
|
|
1073
1108
|
pdi: PendingStorageInput[]
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { Beef, CreateActionArgs, WalletInterface, WalletLoggerInterface, WalletLoggerLog } from '@bsv/sdk'
|
|
2
|
+
import { WalletError } from './sdk/WalletError'
|
|
3
|
+
|
|
4
|
+
export class WalletLogger implements WalletLoggerInterface {
|
|
5
|
+
indent: number = 0
|
|
6
|
+
logs: WalletLoggerLog[] = []
|
|
7
|
+
isOrigin: boolean = true
|
|
8
|
+
isError: boolean = false
|
|
9
|
+
level?: WalletLoggerLevel
|
|
10
|
+
|
|
11
|
+
constructor(log?: string | WalletLoggerInterface) {
|
|
12
|
+
if (log) {
|
|
13
|
+
const lo = typeof log === 'string' ? JSON.parse(log) : log
|
|
14
|
+
this.indent = lo.indent || 0
|
|
15
|
+
this.logs = lo.logs || []
|
|
16
|
+
this.isOrigin = this.indent === 0
|
|
17
|
+
this.level = lo.level
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
private logAny(message?: any): string {
|
|
22
|
+
if (!message) return ''
|
|
23
|
+
if (typeof message === 'string') return message
|
|
24
|
+
if (typeof message === 'object') return JSON.stringify(message)
|
|
25
|
+
return ''
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
private toAdd(
|
|
29
|
+
isBegin: boolean,
|
|
30
|
+
isEnd: boolean,
|
|
31
|
+
isError: boolean,
|
|
32
|
+
message?: any,
|
|
33
|
+
optionalParams?: any[]
|
|
34
|
+
): WalletLoggerLog {
|
|
35
|
+
let add = ''
|
|
36
|
+
if (message) add += this.logAny(message)
|
|
37
|
+
if (optionalParams) for (const p of optionalParams) add += this.logAny(p)
|
|
38
|
+
let log = {
|
|
39
|
+
when: Date.now(),
|
|
40
|
+
indent: this.indent,
|
|
41
|
+
isBegin,
|
|
42
|
+
isEnd,
|
|
43
|
+
isError,
|
|
44
|
+
log: add
|
|
45
|
+
}
|
|
46
|
+
return log
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
private stampLog(isBegin: boolean, isEnd: boolean, isError: boolean, message?: any, optionalParams?: any[]) {
|
|
50
|
+
const add = this.toAdd(isBegin, isEnd, isError, message, optionalParams)
|
|
51
|
+
this.logs.push(add)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
group(...label: any[]): void {
|
|
55
|
+
this.stampLog(true, false, false, undefined, label)
|
|
56
|
+
this.indent++
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
groupEnd(): void {
|
|
60
|
+
this.indent--
|
|
61
|
+
if (this.indent < 0) this.indent = 0
|
|
62
|
+
this.stampLog(false, true, false)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
log(message?: any, ...optionalParams: any[]): void {
|
|
66
|
+
this.stampLog(false, false, false, message, optionalParams)
|
|
67
|
+
}
|
|
68
|
+
error(message?: any, ...optionalParams: any[]): void {
|
|
69
|
+
this.stampLog(false, false, true, message, optionalParams)
|
|
70
|
+
this.isError = true
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
toWalletLoggerJson(): object {
|
|
74
|
+
const json: object = {
|
|
75
|
+
isWalletLoggerJson: true,
|
|
76
|
+
indent: this.indent,
|
|
77
|
+
logs: this.logs,
|
|
78
|
+
isError: this.isError
|
|
79
|
+
}
|
|
80
|
+
return json
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
toLogString(): string {
|
|
84
|
+
let log = ''
|
|
85
|
+
if (this.logs.length > 0) {
|
|
86
|
+
const first = this.logs[0]
|
|
87
|
+
const last = this.logs.slice(-1)[0]
|
|
88
|
+
const msecs = last.when - first.when
|
|
89
|
+
log += ` msecs WalletLogger ${new Date(first.when).toISOString()} logged ${msecs / 1000} seconds\n`
|
|
90
|
+
let prev = first
|
|
91
|
+
const begins: WalletLoggerLog[] = []
|
|
92
|
+
for (const d of this.logs) {
|
|
93
|
+
let df = (d.when - prev.when).toString()
|
|
94
|
+
df = `${' '.repeat(8 - df.length)}${df}`
|
|
95
|
+
const what = d.isBegin ? ' begin' : d.isEnd ? ' end' : d.isError ? ' ERROR' : ''
|
|
96
|
+
if (d.isBegin) begins.push(d)
|
|
97
|
+
let m = d.log
|
|
98
|
+
if (!m && d.isEnd && begins.length > 0) {
|
|
99
|
+
const begin = begins.pop()!
|
|
100
|
+
m = begin.log
|
|
101
|
+
}
|
|
102
|
+
log += `${df}${' '.repeat(d.indent)}${what} ${m}\n`
|
|
103
|
+
prev = d
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return log
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
flush(): object | undefined {
|
|
110
|
+
const log = this.toLogString()
|
|
111
|
+
if (this.isError) console.error(log)
|
|
112
|
+
else console.log(log)
|
|
113
|
+
const r = this.isOrigin ? undefined : this.toWalletLoggerJson()
|
|
114
|
+
return r
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
merge(log: WalletLoggerInterface): void {
|
|
118
|
+
if (log.logs) {
|
|
119
|
+
this.logs.push(...log.logs)
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export function logWalletError(eu: unknown, logger?: WalletLoggerInterface, label?: string): void {
|
|
125
|
+
if (!logger) return
|
|
126
|
+
logger.error(label || 'WalletError', WalletError.unknownToJson(eu))
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export function logCreateActionArgs(args: CreateActionArgs): object {
|
|
130
|
+
const o: any = {
|
|
131
|
+
description: args.description
|
|
132
|
+
}
|
|
133
|
+
if (args.labels) o.labels = args.labels
|
|
134
|
+
if (args.inputBEEF) o.inputBEEF = Beef.fromBinary(args.inputBEEF).toLogString()
|
|
135
|
+
if (args.lockTime !== undefined) o.lockTime = args.lockTime
|
|
136
|
+
if (args.version !== undefined) o.version = args.version
|
|
137
|
+
/*
|
|
138
|
+
if (args.inputs) {
|
|
139
|
+
|
|
140
|
+
}
|
|
141
|
+
if (args.outputs) {
|
|
142
|
+
|
|
143
|
+
}
|
|
144
|
+
options: validateCreateActionOptions(args.options),
|
|
145
|
+
isSendWith: false,
|
|
146
|
+
isDelayed: false,
|
|
147
|
+
isNoSend: false,
|
|
148
|
+
isNewTx: false,
|
|
149
|
+
isRemixChange: false,
|
|
150
|
+
isSignAction: false,
|
|
151
|
+
randomVals: undefined,
|
|
152
|
+
includeAllSourceTransactions: false,
|
|
153
|
+
isTestWerrReviewActions: false
|
|
154
|
+
*/
|
|
155
|
+
return o
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Optional. Logging levels that may influence what is logged.
|
|
160
|
+
*
|
|
161
|
+
* 'error' Only requests resulting in an exception should be logged.
|
|
162
|
+
* 'warn' Also log requests that succeed but with an abnormal condition.
|
|
163
|
+
* 'info' Also log normal successful requests.
|
|
164
|
+
* 'debug' Add input parm and result details where possible.
|
|
165
|
+
* 'trace' Instead of adding debug details, focus on execution path and timing.
|
|
166
|
+
*/
|
|
167
|
+
export type WalletLoggerLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace'
|
|
@@ -7,11 +7,9 @@ import {
|
|
|
7
7
|
WalletProtocol,
|
|
8
8
|
Base64String,
|
|
9
9
|
PubKeyHex,
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
Beef
|
|
10
|
+
Beef,
|
|
11
|
+
Validation
|
|
13
12
|
} from '@bsv/sdk'
|
|
14
|
-
import { validateCreateActionArgs } from './sdk'
|
|
15
13
|
|
|
16
14
|
////// TODO: ADD SUPPORT FOR ADMIN COUNTERPARTIES BASED ON WALLET STORAGE
|
|
17
15
|
////// PROHIBITION OF SPECIAL OPERATIONS IS ALSO CRITICAL.
|
|
@@ -2648,7 +2646,7 @@ export class WalletPermissionsManager implements WalletInterface {
|
|
|
2648
2646
|
* - If the user originally wanted signAndProcess (the default when undefined), we forcibly set it to false earlier, so check if we should now finalize it.
|
|
2649
2647
|
* - If the transaction still needs more signatures, we must return the signableTransaction.
|
|
2650
2648
|
*/
|
|
2651
|
-
const vargs = validateCreateActionArgs(args)
|
|
2649
|
+
const vargs = Validation.validateCreateActionArgs(args)
|
|
2652
2650
|
if (vargs.isSignAction) {
|
|
2653
2651
|
return createResult
|
|
2654
2652
|
}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
|
|
2
|
+
const { Validation } = jest.requireActual('@bsv/sdk');
|
|
3
|
+
|
|
1
4
|
/**
|
|
2
5
|
* A permissions manager testing mock/stub file for:
|
|
3
6
|
* 1) The `@bsv/sdk` library: Transaction, LockingScript, PushDrop, Utils, Random, etc.
|
|
@@ -166,6 +169,15 @@ export const MockUtils = {
|
|
|
166
169
|
return btoa(binaryStr)
|
|
167
170
|
}
|
|
168
171
|
}
|
|
172
|
+
/*
|
|
173
|
+
export const MockValidation = {
|
|
174
|
+
validateCreateActionArgs: (args: object) => {
|
|
175
|
+
return {
|
|
176
|
+
isSignAction: false
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
*/
|
|
169
181
|
|
|
170
182
|
/**
|
|
171
183
|
* Mocks for Random
|
|
@@ -183,7 +195,8 @@ export const MockedBSV_SDK = {
|
|
|
183
195
|
PushDrop: MockPushDrop,
|
|
184
196
|
Utils: MockUtils,
|
|
185
197
|
Random: MockRandom,
|
|
186
|
-
Certificate: null
|
|
198
|
+
Certificate: null,
|
|
199
|
+
Validation: Validation
|
|
187
200
|
}
|
|
188
201
|
|
|
189
202
|
/* ---------------------------------------------------------------------------
|