UNPKG

@ngraveio/bc-ur-multi-layer-sync

Version:

Provides BC-UR types for syncing multiple coins and accounts from cold wallets to watch only wallets.

78 lines 3.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CryptoPortfolio = void 0; const bc_ur_registry_1 = require("@keystonehq/bc-ur-registry"); const RegistryType_1 = require("./RegistryType"); const CryptoPortfolioCoin_1 = require("./CryptoPortfolioCoin"); const bc_ur_registry_crypto_portfolio_metadata_1 = require("@ngraveio/bc-ur-registry-crypto-portfolio-metadata"); const { RegistryTypes, decodeToDataItem } = bc_ur_registry_1.extend; /** CDDL * * ; Top level multi coin sync payload * ; All master-fingerprint fields must match within the included UR types * sync = { * coins: [+ #6.1402(crypto-portfolio-coin)] ; Multiple coins with their respective accounts and coin identities * ? master-fingerprint: uint32, ; Master fingerprint (fingerprint for the master public key as per BIP32 derived on secp256k1 curve) * ? metadata: #6.1403(crypto-portfolio-metadata) ; Optional wallet metadata * } * * coins = 1 * metadata = 2 * */ var Keys; (function (Keys) { Keys[Keys["coins"] = 1] = "coins"; Keys[Keys["metadata"] = 2] = "metadata"; })(Keys || (Keys = {})); class CryptoPortfolio extends bc_ur_registry_1.RegistryItem { constructor(coins, metadata) { super(); this.getRegistryType = () => RegistryType_1.ExtendedRegistryTypes.CRYPTO_PORTFOLIO; this.getCoins = () => this.coins; this.getMetadata = () => this.metadata; this.toDataItem = () => { const map = {}; // Add coins map[Keys.coins] = this.coins.map((coin) => { const dataItem = coin.toDataItem(); dataItem.setTag(RegistryType_1.ExtendedRegistryTypes.CRYPTO_SYNC_COIN.getTag()); return dataItem; }); // If metadata is set add it to map if (this.metadata) { map[Keys.metadata] = this.metadata.toDataItem(); map[Keys.metadata].setTag(this.metadata.getRegistryType().getTag()); } return new bc_ur_registry_1.DataItem(map); }; // Test metadata if (metadata && !(metadata instanceof bc_ur_registry_crypto_portfolio_metadata_1.CryptoPortfolioMetadata)) { throw new Error("metadata must be of type CryptoPortfolioMetadata"); } // Check if coins is array if so check if every element is instance of CryptoPortfolioCoin if (!Array.isArray(coins) || !coins.every((coin) => coin instanceof CryptoPortfolioCoin_1.CryptoPortfolioCoin)) { throw new Error("coins must be of type CryptoPortfolioCoin[]"); } this.coins = coins; this.metadata = metadata; } } exports.CryptoPortfolio = CryptoPortfolio; CryptoPortfolio.fromDataItem = (dataItem) => { const map = dataItem.getData(); let metadata = undefined; // Get coins const coins = map[Keys.coins]; const coinsParsed = coins.map((coin) => CryptoPortfolioCoin_1.CryptoPortfolioCoin.fromDataItem(coin)); // Get master_fingerprint // Get metadata if (map[Keys.metadata]) metadata = bc_ur_registry_crypto_portfolio_metadata_1.CryptoPortfolioMetadata.fromDataItem(map[Keys.metadata]); return new CryptoPortfolio(coinsParsed, metadata); }; CryptoPortfolio.fromCBOR = (_cborPayload) => { const dataItem = decodeToDataItem(_cborPayload); return CryptoPortfolio.fromDataItem(dataItem); }; //# sourceMappingURL=CryptoPortfolio.js.map