UNPKG

@yoroi/portfolio

Version:

The Portfolio package of Yoroi SDK

96 lines (93 loc) 2.88 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.portfolioTokenManagerMaker = void 0; var _types = require("@yoroi/types"); var _common = require("@yoroi/common"); var _immer = require("immer"); var _createCachedUnknownTokenInfo = require("./helpers/create-cached-unknown-token-info"); const portfolioTokenManagerMaker = function (_ref) { let { api, storage } = _ref; let { observer = (0, _common.observerMaker)() } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; const cachedInfosWithoutRecord = new Map(); const hydrate = _ref2 => { let { sourceId } = _ref2; // load only the cache info, drop the record storage.token.infos.all().map(_common.extractEntryCacheInfo).filter(_common.hasEntryValue).forEach(_ref3 => { let [id, value] = _ref3; return cachedInfosWithoutRecord.set(id, (0, _immer.freeze)(value)); }); observer.notify({ on: _types.Portfolio.Event.ManagerOn.Hydrate, sourceId }); }; const sync = async _ref4 => { let { secondaryTokenIds, sourceId } = _ref4; const { records, unknownIds, updatedIds, isInvalidated } = await (0, _common.cacheManageMultiRequest)({ request: async ids => api.tokenInfos(ids), cachedInfosWithoutRecord: (0, _immer.freeze)(new Map(cachedInfosWithoutRecord)), ids: secondaryTokenIds, unknownRecordFactory: _createCachedUnknownTokenInfo.createCachedUnknownTokenInfo, persistance: (0, _immer.freeze)({ save: storage.token.infos.save, read: storage.token.infos.read }) }); const recordsEntries = [...records.entries()]; recordsEntries.map(_common.extractEntryCacheInfo).filter(_common.hasEntryValue).forEach(_ref5 => { let [id, record] = _ref5; return cachedInfosWithoutRecord.set(id, (0, _immer.freeze)(record)); }); // if the cache was invalidated, notify if (isInvalidated) observer.notify({ on: _types.Portfolio.Event.ManagerOn.Sync, ids: [...updatedIds, ...unknownIds], sourceId }); // when using subscriptions, or streams, read from storage base on callback args, not from this return return records; }; const clear = _ref6 => { let { sourceId } = _ref6; storage.token.infos.clear(); cachedInfosWithoutRecord.clear(); observer.notify({ on: _types.Portfolio.Event.ManagerOn.Clear, sourceId }); }; const destroy = () => { observer.destroy(); }; return (0, _immer.freeze)({ hydrate, sync, subscribe: observer.subscribe, unsubscribe: observer.unsubscribe, observable$: observer.observable, api, destroy, clear }, true); }; exports.portfolioTokenManagerMaker = portfolioTokenManagerMaker; //# sourceMappingURL=token-manager.js.map