@yoroi/portfolio
Version:
The Portfolio package of Yoroi SDK
96 lines (93 loc) • 2.88 kB
JavaScript
;
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