UNPKG

test-ic-wallet-middleware-icrc

Version:
110 lines (109 loc) 5.1 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AddAssetHandler = void 0; const common_1 = require("@ic-wallet-middleware/common"); const getTokenSNSCacheHandler_1 = require("../../../internalHandlers/icrcCacheDataHandlers/tokens/getTokenSNSCacheHandler"); const loadAssetHandler_1 = require("../../../internalHandlers/loadAssetHandler/loadAssetHandler"); const assetRepository_1 = require("../../../repositories/persists/assetRepository/assetRepository"); const types_1 = require("../../../types"); const enums_1 = require("../../../types/enums"); const wrappers_1 = require("../../../wrappers"); const typedi_1 = require("typedi"); let AddAssetHandler = class AddAssetHandler extends common_1.BaseHandler { loadAssetHandler; identifierService; getTokenSNSCacheHandler; assetRepository; constructor(logger, assetRepository, loadAssetHandler, identifierService, getTokenSNSCacheHandler) { super(logger); this.loadAssetHandler = loadAssetHandler; this.identifierService = identifierService; this.getTokenSNSCacheHandler = getTokenSNSCacheHandler; this.assetRepository = assetRepository; } async validate(form) { const isExists = await this.assetRepository.isAssetExist(form.ledgerAddress); if (isExists) { throw new common_1.ValidationError("adding.asset.already.imported", "", "Asset already Imported"); } } async process(form) { const idx = await this.assetRepository.getAssetNextIndex(); const asset = { sortOrder: idx, ledgerAddress: form.ledgerAddress, indexAddress: form.indexAddress, name: form.name, tokenName: form.name, symbol: form.symbol, tokenSymbol: form.symbol, shortDecimal: form.shortDecimal, logo: undefined, supportedStandards: [], subAccounts: [ { subAccountId: "0x0", ledgerAddress: form.ledgerAddress, name: enums_1.AccountDefaultEnum[enums_1.AccountDefaultEnum.Default], } ] }; const info = { ledgerAddress: asset.ledgerAddress, indexAddress: asset.indexAddress, subAccounts: asset.subAccounts.map((sa) => types_1.SubAccountId.parseFromString(sa.subAccountId)), loadType: common_1.LoadType.Quick }; const assetResult = await this.loadAssetHandler.process(info); asset.symbol = form.symbol; asset.logo = assetResult.logo; asset.subAccounts = asset.subAccounts.map((sa) => { return { name: sa.name, ledgerAddress: sa.ledgerAddress, subAccountId: sa.subAccountId.toString() }; }); const params = { agent: this.identifierService.getAgent(), ledgerAddress: asset.ledgerAddress }; const icrcLedgerServiceWrapper = wrappers_1.IcrcLedgerServiceWrapper.create(params, this.logger); asset.supportedStandards = await icrcLedgerServiceWrapper.getICRCSupportedStandards(); if (!asset.logo) { const tokens = await this.getTokenSNSCacheHandler.handle({ loadType: common_1.LoadType.Quick }); if (tokens.isSuccess) { const token = tokens.data?.TokenList.find(t => t.ledgerAddress == asset.ledgerAddress); if (token) { asset.logo = token.logo; } } } await this.assetRepository.addAsset(asset); return {}; } }; exports.AddAssetHandler = AddAssetHandler; exports.AddAssetHandler = AddAssetHandler = __decorate([ (0, typedi_1.Service)(), __param(0, (0, typedi_1.Inject)("ILogger")), __param(1, (0, typedi_1.Inject)("AssetRepository")), __metadata("design:paramtypes", [Object, assetRepository_1.AssetRepository, loadAssetHandler_1.LoadAssetHandler, common_1.IdentifierService, getTokenSNSCacheHandler_1.GetTokenSNSCacheHandler]) ], AddAssetHandler);