UNPKG

@cosmos-kit/terra-extension

Version:
135 lines (134 loc) 4.62 kB
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; const _excluded = ["error"], _excluded2 = ["purgeQueue"], _excluded3 = ["error"], _excluded4 = ["error"], _excluded5 = ["error"]; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } import { Extension } from '@terra-money/feather.js'; function isValidResult(_ref) { let { error } = _ref, payload = _objectWithoutProperties(_ref, _excluded); if (typeof payload.success !== 'boolean') { return false; } else if (typeof payload.result === 'undefined' && typeof error === 'undefined') { return false; } return true; } export class TerraExtension { // resolvers constructor() { _defineProperty(this, "extension", void 0); _defineProperty(this, "identifier", 'station'); _defineProperty(this, "_inTransactionProgress", false); _defineProperty(this, "connectResolvers", new Set()); _defineProperty(this, "infoResolvers", new Set()); _defineProperty(this, "signResolvers", new Map()); } get isAvailable() { return this.extension.isAvailable; } async init() { this.extension = new Extension(); this.onResponse(); } async connect() { return new Promise((...resolver) => { this.connectResolvers.add(resolver); this.extension.connect(); }); } async info() { return new Promise((...resolver) => { this.infoResolvers.add(resolver); this.extension.info(); }); } disconnect() { this.connectResolvers.clear(); this.infoResolvers.clear(); this.signResolvers.clear(); } async sign(_ref2) { let { purgeQueue = true } = _ref2, data = _objectWithoutProperties(_ref2, _excluded2); return new Promise((...resolver) => { this._inTransactionProgress = true; const id = this.extension.sign(_objectSpread(_objectSpread({}, data), {}, { purgeQueue })); this.signResolvers.set(id, resolver); setTimeout(() => { if (this.signResolvers.has(id)) { this.signResolvers.delete(id); if (this.signResolvers.size === 0) { this._inTransactionProgress = false; } } }, 1000 * 120); }); } onResponse() { this.extension.on('onConnect', result => { if (!result) return; const { error } = result, payload = _objectWithoutProperties(result, _excluded3); for (const [resolve, reject] of this.connectResolvers) { if (error) { reject(error); } else { resolve(payload); } } this.connectResolvers.clear(); }); this.extension.on('onInterchainInfo', result => { if (!result) return; const { error } = result, payload = _objectWithoutProperties(result, _excluded4); for (const [resolve, reject] of this.infoResolvers) { if (error) { reject(error); } else { resolve(payload); } } this.infoResolvers.clear(); }); this.extension.on('onSign', result => { if (!result || !isValidResult(result)) { return; } const { error } = result, payload = _objectWithoutProperties(result, _excluded5); if (this.signResolvers.has(payload.id)) { const [resolve, reject] = this.signResolvers.get(payload.id); if (!payload.success) { reject(error); } else if (resolve) { resolve({ name: 'onSign', payload }); } this.signResolvers.delete(payload.id); if (this.signResolvers.size === 0) { this._inTransactionProgress = false; } } }); } }