diff --git a/packages/wallet-lib/docs/_sidebar.md b/packages/wallet-lib/docs/_sidebar.md index 100de697a9d..d44aa0ea626 100644 --- a/packages/wallet-lib/docs/_sidebar.md +++ b/packages/wallet-lib/docs/_sidebar.md @@ -42,6 +42,7 @@ - [`.fromSeed()`](wallet/fromSeed.md) - [`.generateNewWalletId()`](wallet/generateNewWalletId.md) - [`.getAccount()`](wallet/getAccount.md) + - [`.dumpStorage()`](wallet/dumpStorage.md) - Identities - [`new Identities()`](identities/Identities.md) - [`.getIdentityHDKeyByIndex()`](identities/getIdentityHDKeyByIndex.md) diff --git a/packages/wallet-lib/docs/wallet/dumpStorage.md b/packages/wallet-lib/docs/wallet/dumpStorage.md new file mode 100644 index 00000000000..8b1952b4bf6 --- /dev/null +++ b/packages/wallet-lib/docs/wallet/dumpStorage.md @@ -0,0 +1,15 @@ +**Usage**: `wallet.dumpStorage([opts])` +**Description**: Method dumps the state of the storage in JSON format + +**Warning**: Storage dump may contain sensitive data. +Please, do not share the output of this function for `mainnet` wallets. + +Parameters: + +| parameters | type | required | Description | +|------------------------|-----------|----------------| ---------------------------------------------------------- | +| **opts.log** | Boolean | no | Indicates whether storage should be logged in the console | + +Returns : {String} + + diff --git a/packages/wallet-lib/src/types/Wallet/Wallet.d.ts b/packages/wallet-lib/src/types/Wallet/Wallet.d.ts index 566d157efe4..b6f8e35fa02 100644 --- a/packages/wallet-lib/src/types/Wallet/Wallet.d.ts +++ b/packages/wallet-lib/src/types/Wallet/Wallet.d.ts @@ -30,6 +30,15 @@ export declare class Wallet { generateNewWalletId():string; getAccount(accOptions?: Account.Options): Promise; sweepWallet(): Promise + + /** + * Warning: Storage dump may contain sensitive data. + * Please, do not share the output of this function for mainnet wallets. + * @param options + */ + dumpStorage(options?: { + log: boolean + }): string; } declare interface DAPIClientOptions { diff --git a/packages/wallet-lib/src/types/Wallet/Wallet.js b/packages/wallet-lib/src/types/Wallet/Wallet.js index 644e8da1b72..bffff130bd1 100644 --- a/packages/wallet-lib/src/types/Wallet/Wallet.js +++ b/packages/wallet-lib/src/types/Wallet/Wallet.js @@ -188,5 +188,6 @@ Wallet.prototype.getAccount = require('./methods/getAccount'); Wallet.prototype.generateNewWalletId = generateNewWalletId; Wallet.prototype.exportWallet = require('./methods/exportWallet'); Wallet.prototype.sweepWallet = require('./methods/sweepWallet'); +Wallet.prototype.dumpStorage = require('./methods/dumpStorage'); module.exports = Wallet; diff --git a/packages/wallet-lib/src/types/Wallet/methods/dumpStorage.js b/packages/wallet-lib/src/types/Wallet/methods/dumpStorage.js new file mode 100644 index 00000000000..72c002f12a7 --- /dev/null +++ b/packages/wallet-lib/src/types/Wallet/methods/dumpStorage.js @@ -0,0 +1,29 @@ +const logger = require('../../../logger'); + +const defaultOptions = { + log: false, +}; + +/** + * Dumps storage on user's demand + * + * @param options - dumping options + * @return {string} - Returns JSON string of the wallet store + */ +function dumpStorage(options) { + const dumpOptions = options !== null && typeof options === 'object' + ? Object.assign(defaultOptions, options) + : defaultOptions; + const storageDump = JSON.stringify(this.storage.store); + + if (dumpOptions.log) { + // Add a linebreak to the log message for the ease of copying of the + // truncated log from the browser consoles + // (the text from the buffer then can be directly pasted to the JSON parser) + logger.info('Dumping wallet storage\n', storageDump); + } + + return storageDump; +} + +module.exports = dumpStorage;