@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
JavaScript
;
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