UNPKG

@slide-computer/signer-web

Version:

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

84 lines 5.37 kB
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, _PostMessageChannel_pendingQueue; import { isJsonRpcResponse, } from "@slide-computer/signer"; import { PostMessageTransportError } from "./postMessageTransport.js"; export class PostMessageChannel { constructor(options) { _PostMessageChannel_closeListeners.set(this, new Set()); _PostMessageChannel_options.set(this, void 0); _PostMessageChannel_closed.set(this, false); _PostMessageChannel_pendingQueue.set(this, []); __classPrivateFieldSet(this, _PostMessageChannel_options, Object.assign({ signerStatus: "ready", 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 || !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 PostMessageTransportError("Communication channel is closed"); } if (__classPrivateFieldGet(this, _PostMessageChannel_options, "f").signerStatus === "pending") { __classPrivateFieldGet(this, _PostMessageChannel_pendingQueue, "f").push(request); return; } __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()); } changeStatus(status) { __classPrivateFieldGet(this, _PostMessageChannel_options, "f").signerStatus = status; if (status === "ready") { const requests = __classPrivateFieldGet(this, _PostMessageChannel_pendingQueue, "f"); __classPrivateFieldSet(this, _PostMessageChannel_pendingQueue, [], "f"); requests.forEach((request, index) => { __classPrivateFieldGet(this, _PostMessageChannel_options, "f").signerWindow.postMessage(request, __classPrivateFieldGet(this, _PostMessageChannel_options, "f").signerOrigin); }); } } } _PostMessageChannel_closeListeners = new WeakMap(), _PostMessageChannel_options = new WeakMap(), _PostMessageChannel_closed = new WeakMap(), _PostMessageChannel_pendingQueue = new WeakMap(); //# sourceMappingURL=postMessageChannel.js.map