UNPKG

@slide-computer/signer-web

Version:

JavaScript and TypeScript library to communicate with web signers on the Internet Computer

73 lines 4.55 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _PostMessageChannel_closeListeners, _PostMessageChannel_options, _PostMessageChannel_closed; Object.defineProperty(exports, "__esModule", { value: true }); exports.PostMessageChannel = void 0; const signer_1 = require("@slide-computer/signer"); const postMessageTransport_1 = require("./postMessageTransport"); class PostMessageChannel { constructor(options) { _PostMessageChannel_closeListeners.set(this, new Set()); _PostMessageChannel_options.set(this, void 0); _PostMessageChannel_closed.set(this, false); __classPrivateFieldSet(this, _PostMessageChannel_options, Object.assign({ window: globalThis.window, manageFocus: true }, options), "f"); } get closed() { return __classPrivateFieldGet(this, _PostMessageChannel_closed, "f"); } addEventListener(...[event, listener]) { switch (event) { case "close": __classPrivateFieldGet(this, _PostMessageChannel_closeListeners, "f").add(listener); return () => { __classPrivateFieldGet(this, _PostMessageChannel_closeListeners, "f").delete(listener); }; case "response": const messageListener = async (event) => { if (event.source !== __classPrivateFieldGet(this, _PostMessageChannel_options, "f").signerWindow || event.origin !== __classPrivateFieldGet(this, _PostMessageChannel_options, "f").signerOrigin || !(0, signer_1.isJsonRpcResponse)(event.data)) { return; } listener(event.data); }; __classPrivateFieldGet(this, _PostMessageChannel_options, "f").window.addEventListener("message", messageListener); return () => { __classPrivateFieldGet(this, _PostMessageChannel_options, "f").window.removeEventListener("message", messageListener); }; } } async send(request) { if (__classPrivateFieldGet(this, _PostMessageChannel_closed, "f")) { throw new postMessageTransport_1.PostMessageTransportError("Communication channel is closed"); } __classPrivateFieldGet(this, _PostMessageChannel_options, "f").signerWindow.postMessage(request, __classPrivateFieldGet(this, _PostMessageChannel_options, "f").signerOrigin); if (__classPrivateFieldGet(this, _PostMessageChannel_options, "f").manageFocus) { __classPrivateFieldGet(this, _PostMessageChannel_options, "f").signerWindow.focus(); } } async close() { if (__classPrivateFieldGet(this, _PostMessageChannel_closed, "f")) { return; } __classPrivateFieldSet(this, _PostMessageChannel_closed, true, "f"); __classPrivateFieldGet(this, _PostMessageChannel_options, "f").signerWindow.close(); if (__classPrivateFieldGet(this, _PostMessageChannel_options, "f").manageFocus) { __classPrivateFieldGet(this, _PostMessageChannel_options, "f").window.focus(); } __classPrivateFieldGet(this, _PostMessageChannel_closeListeners, "f").forEach((listener) => listener()); } } exports.PostMessageChannel = PostMessageChannel; _PostMessageChannel_closeListeners = new WeakMap(), _PostMessageChannel_options = new WeakMap(), _PostMessageChannel_closed = new WeakMap(); //# sourceMappingURL=postMessageChannel.js.map