@slide-computer/signer-web
Version:
JavaScript and TypeScript library to communicate with web signers on the Internet Computer
73 lines • 4.55 kB
JavaScript
"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