UNPKG

@broxus/js-core

Version:

MobX-based JavaScript Core library

49 lines (48 loc) 2.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getFullContractState = getFullContractState; const js_utils_1 = require("@broxus/js-utils"); const console_1 = require("../console"); const resolve_tvm_address_1 = require("../utils/resolve-tvm-address"); const cache = new Map(); const ttl = 10 * 1000; async function getFullContractState(connection, address, options) { const addr = address.toString().toLowerCase(); try { const cached = cache.get(addr); if (cached && !options?.force) { const _ttl = options?.ttl ?? ttl; const { state, timestamp } = cached; if (Date.now() - timestamp < _ttl && state) { if (process.env.NODE_ENV !== 'production') { connection.getProviderState().then(providerState => { (0, js_utils_1.groupCollapsed)(`%cRPC%c Full contract state [%c${(0, js_utils_1.sliceAddress)(addr.toString())}%c] retrieved from cache`, console_1.baseLabelStyle, console_1.inheritTextStyle, console_1.successTextStyle, console_1.inheritTextStyle); (0, js_utils_1.debug)(`Address: %c${(0, js_utils_1.sliceAddress)(addr.toString())}%c ${(0, console_1.getScanLink)(addr.toString(), providerState.networkId.toString())}`, console_1.successTextStyle, console_1.inheritTextStyle); (0, js_utils_1.debug)(`Last updated at: %c${new Date(timestamp).toLocaleString()}`, console_1.inheritTextStyle); (0, js_utils_1.groupEnd)(); }).catch(() => undefined); } return await state; } } const state = connection.getFullContractState({ address: (0, resolve_tvm_address_1.resolveTvmAddress)(address) }) .then(r => r.state) .catch(e => { cache.delete(addr); throw e; }); if (process.env.NODE_ENV !== 'production') { connection.getProviderState().then(providerState => { (0, js_utils_1.groupCollapsed)(`%cRPC%c Request a full contract state [%c${(0, js_utils_1.sliceAddress)(addr.toString())}%c]`, console_1.baseLabelStyle, console_1.inheritTextStyle, console_1.successTextStyle, console_1.inheritTextStyle); (0, js_utils_1.debug)(`Address: %c${(0, js_utils_1.sliceAddress)(addr.toString())}%c ${(0, console_1.getScanLink)(addr.toString(), providerState.networkId.toString())}`, console_1.successTextStyle, console_1.inheritTextStyle); (0, js_utils_1.groupEnd)(); }).catch(() => undefined); } cache.set(addr, { state, timestamp: Date.now() }); return await state; } catch (e) { cache.delete(addr); return undefined; } }