UNPKG

@trezor/connect-web

Version:

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

89 lines 3.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const factory_1 = require("@trezor/connect/lib/factory"); const dynamic_1 = require("@trezor/connect/lib/impl/dynamic"); const connectSettings_1 = require("./connectSettings"); const core_in_iframe_1 = require("./impl/core-in-iframe"); const core_in_popup_1 = require("./impl/core-in-popup"); const core_in_suite_desktop_1 = require("./impl/core-in-suite-desktop"); const IFRAME_ERRORS = ['Init_IframeBlocked', 'Init_IframeTimeout', 'Transport_Missing']; const impl = new dynamic_1.TrezorConnectDynamic({ implementations: [ { type: 'iframe', impl: new core_in_iframe_1.CoreInIframe(), }, { type: 'core-in-popup', impl: new core_in_popup_1.CoreInPopup(), }, { type: 'core-in-suite-desktop', impl: new core_in_suite_desktop_1.CoreInSuiteDesktop(), }, ], getInitTarget: (settings) => { if (settings.coreMode === 'iframe') { return 'iframe'; } else if (settings.coreMode === 'popup') { return 'core-in-popup'; } else if (settings.coreMode === 'suite-desktop') { return 'core-in-suite-desktop'; } else { if (settings.coreMode && settings.coreMode !== 'auto') { console.warn(`Invalid coreMode: ${settings.coreMode}`); } return 'iframe'; } }, handleBeforeCall: async () => { const isCoreModeDesktop = impl.lastSettings?.coreMode === 'suite-desktop'; const isCoreModeAuto = impl.lastSettings?.coreMode === 'auto' || impl.lastSettings?.coreMode === undefined; if (isCoreModeDesktop || isCoreModeAuto) { await impl.switchTarget('core-in-suite-desktop'); } }, handleErrorFallback: async (errorCode) => { const env = (0, connectSettings_1.getEnv)(); const isCoreModeDisabled = impl.lastSettings?.popup === false || env === 'webextension'; const isCoreModeAuto = impl.lastSettings?.coreMode === 'auto' || impl.lastSettings?.coreMode === undefined; if (impl.getTargetType() === 'core-in-suite-desktop' && errorCode === 'Desktop_ConnectionMissing') { await impl.switchTarget('iframe'); return true; } if (!isCoreModeDisabled && isCoreModeAuto && IFRAME_ERRORS.includes(errorCode)) { const webUsbUnavailableInBrowser = !navigator?.usb; const webUsbDisabledInSettings = impl.lastSettings?.transports?.includes('WebUsbTransport') === false; if (errorCode === 'Transport_Missing' && (webUsbUnavailableInBrowser || webUsbDisabledInSettings)) { return false; } await impl.switchTarget('core-in-popup'); return true; } return false; }, }); const 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), requestLogin: impl.requestLogin.bind(impl), uiResponse: impl.uiResponse.bind(impl), cancel: impl.cancel.bind(impl), dispose: impl.dispose.bind(impl), }, { renderWebUSBButton: impl.getTarget().renderWebUSBButton.bind(impl), disableWebUSB: impl.getTarget().disableWebUSB.bind(impl), requestWebUSBDevice: impl.getTarget().requestWebUSBDevice.bind(impl), }); exports.default = TrezorConnect; tslib_1.__exportStar(require("@trezor/connect/lib/exports"), exports); //# sourceMappingURL=index.js.map