UNPKG

@trezor/connect-web

Version:

High-level javascript interface for Trezor hardware wallet in web environment.

133 lines (132 loc) 4.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TrezorConnect = exports.CoreInSuiteWeb = void 0; const tslib_1 = require("tslib"); const events_1 = tslib_1.__importDefault(require("events")); const ERRORS = tslib_1.__importStar(require("@trezor/connect/lib/constants/errors")); const events_2 = require("@trezor/connect/lib/events"); const factory_1 = require("@trezor/connect/lib/factory"); const debug_1 = require("@trezor/connect/lib/utils/debug"); const connectSettings_1 = require("../connectSettings"); const popup_1 = require("../popup"); class CoreInSuiteWeb { eventEmitter = new events_1.default(); _settings; _popupManager; logger; constructor() { this._settings = (0, connectSettings_1.parseConnectSettings)(); this.logger = (0, debug_1.initLog)('@trezor/connect-web'); } manifest(data) { this._settings = (0, connectSettings_1.parseConnectSettings)({ ...this._settings, manifest: data }); } dispose() { this.eventEmitter.removeAllListeners(); this._settings = (0, connectSettings_1.parseConnectSettings)(); return Promise.resolve(undefined); } init(settings) { this._settings = (0, connectSettings_1.parseConnectSettings)({ ...this._settings, ...settings }); this.logger.enabled = !!this._settings.debug; if (!this._settings.manifest) { throw ERRORS.TypedError('Init_ManifestMissing'); } if (!this._popupManager) { this._popupManager = new popup_1.PopupManager({ ...this._settings, useCoreInPopup: true, popupSrc: this.getSuiteUrl() }, { logger: this.logger }); this._popupManager.on(events_2.DEVICE_EVENT, event => { this.eventEmitter.emit(events_2.DEVICE_EVENT, event); }); } this.logger.debug('initiated'); return Promise.resolve(); } getSuiteUrl() { if (this._settings.connectSrc?.startsWith('http://localhost')) { return 'http://localhost:8000/connect-popup'; } if (this._settings.connectSrc?.startsWith('https://dev.suite.sldev.cz/connect/')) { const branch = this._settings.connectSrc?.replace('https://dev.suite.sldev.cz/connect/', ''); return `https://dev.suite.sldev.cz/suite-web/${branch}web/connect-popup`; } return 'https://suite.trezor.io/web/connect-popup'; } async call(params) { this.logger.debug('call', params); if (!this._popupManager) { return (0, events_2.createErrorMessage)(ERRORS.TypedError('Init_NotInitialized')); } await this._popupManager.request(); await this._popupManager.channel.init(); await this._popupManager.handshakePromise?.promise; try { const response = await this._popupManager.channel.postMessage({ type: events_2.IFRAME.CALL, payload: params }); this.logger.debug('call: response: ', response); if (!response?.payload) { throw ERRORS.TypedError('Method_NoResponse'); } if (response.payload.error && response.payload.code) { throw response.payload; } return { success: response.payload.success, payload: response.payload.payload, device: response.payload.device }; } catch (error) { this.logger.error('call: error', error); return (0, events_2.createErrorMessage)(error); } } cancel(_error) { this._popupManager?.channel?.postMessage({ type: events_2.POPUP.CLOSED, payload: { error: _error } }); } setTransports() { throw new Error('Method_InvalidPackage'); } uiResponse(_response) { throw ERRORS.TypedError('Method_InvalidPackage'); } disableWebUSB() { throw ERRORS.TypedError('Method_InvalidPackage'); } requestWebUSBDevice() { throw ERRORS.TypedError('Method_InvalidPackage'); } renderWebUSBButton() {} } exports.CoreInSuiteWeb = CoreInSuiteWeb; const impl = new CoreInSuiteWeb(); exports.TrezorConnect = (0, factory_1.factory)({ eventEmitter: impl.eventEmitter, init: impl.init.bind(impl), call: impl.call.bind(impl), setTransports: impl.setTransports.bind(impl), manifest: impl.manifest.bind(impl), uiResponse: impl.uiResponse.bind(impl), cancel: impl.cancel.bind(impl), dispose: impl.dispose.bind(impl) }); //# sourceMappingURL=core-in-suite-web.js.map