UNPKG

wallet-storage

Version:

BRC100 conforming wallet, wallet storage and wallet signer components

122 lines 4.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WalletError = void 0; /** * Derived class constructors should use the derived class name as the value for `name`, * and an internationalizable constant string for `message`. * * If a derived class intends to wrap another WalletError, the public property should * be named `walletError` and will be recovered by `fromUnknown`. * * Optionaly, the derived class `message` can include template parameters passed in * to the constructor. See WERR_MISSING_PARAMETER for an example. * * To avoid derived class name colisions, packages should include a package specific * identifier after the 'WERR_' prefix. e.g. 'WERR_FOO_' as the prefix for Foo package error * classes. */ class WalletError extends Error { constructor(name, message, stack, details) { super(message); this.details = details; // Facilitates detection of Error objects from non-error return values. this.isError = true; this.name = name; if (stack) this.stack = stack; } /** * Error class compatible accessor for `code`. */ get code() { return this.name; } set code(v) { this.name = v; } /** * Error class compatible accessor for `description`. */ get description() { return this.message; } set description(v) { this.message = v; } /** * Recovers all public fields from WalletError derived error classes and relevant Error derived errors. * * Critical client data fields are preserved across HTTP DojoExpress / DojoExpressClient encoding. */ static fromUnknown(err) { // eslint-disable-next-line @typescript-eslint/no-explicit-any let name = 'WERR_UNKNOWN'; let message = ''; let stack; const details = {}; if (err !== null && typeof err === 'object') { if (err['name'] === 'Error' || err['name'] === 'FetchError') name = err['code'] || err['status'] || 'WERR_UNKNOWN'; else name = err['name'] || err['code'] || err['status'] || 'WERR_UNKNOWN'; if (typeof name !== 'string') name = 'WERR_UNKNOWN'; message = err['message'] || err['description'] || ''; if (typeof message !== 'string') message = 'WERR_UNKNOWN'; if (typeof err['stack'] === 'string') stack = err['stack']; if (typeof err['sql'] === 'string') details.sql = err['sql']; if (typeof err['sqlMessage'] === 'string') details.sqlMessage = err['sqlMessage']; } const e = new WalletError(name, message, stack, Object.keys(details).length > 0 ? details : undefined); if (err !== null && typeof err === 'object') { for (const [key, value] of Object.entries(err)) { if (key !== 'walletError' && typeof value !== 'string' && typeof value !== 'number' && !Array.isArray(value)) continue; switch (key) { case 'walletError': e[key] = WalletError.fromUnknown(value); break; case 'status': break; case 'name': break; case 'code': break; case 'message': break; case 'description': break; case 'stack': break; case 'sql': break; case 'sqlMessage': break; default: e[key] = value; break; } } } return e; } /** * @returns standard HTTP error status object with status property set to 'error'. */ asStatus() { return { status: 'error', code: this.name, description: this.message }; } } exports.WalletError = WalletError; //# sourceMappingURL=WalletError.js.map