aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/webex/notify.ts218
1 files changed, 0 insertions, 218 deletions
diff --git a/src/webex/notify.ts b/src/webex/notify.ts
deleted file mode 100644
index 9fb0529db..000000000
--- a/src/webex/notify.ts
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- This file is part of TALER
- (C) 2015 GNUnet e.V.
-
- TALER is free software; you can redistribute it and/or modify it under the
- terms of the GNU General Public License as published by the Free Software
- Foundation; either version 3, or (at your option) any later version.
-
- TALER is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
- A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along with
- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
- */
-
-// tslint:disable:no-unused-expression
-
-/**
- * Module that is injected into (all!) pages to allow them
- * to interact with the GNU Taler wallet via DOM Events.
- */
-
-/**
- * Imports.
- */
-import * as wxApi from "./wxApi";
-
-declare let cloneInto: any;
-
-let logVerbose = false;
-try {
- logVerbose = !!localStorage.getItem("taler-log-verbose");
-} catch (e) {
- // can't read from local storage
-}
-
-if (document.documentElement.getAttribute("data-taler-nojs")) {
- document.dispatchEvent(new Event("taler-probe-result"));
-}
-
-interface Handler {
- type: string;
- listener: (e: Event) => void | Promise<void>;
-}
-const handlers: Handler[] = [];
-
-let sheet: CSSStyleSheet | null;
-
-function initStyle(): void {
- logVerbose && console.log("taking over styles");
- const name = "taler-presence-stylesheet";
- const content = "/* Taler stylesheet controlled by JS */";
- let style = document.getElementById(name) as HTMLStyleElement | null;
- if (!style) {
- style = document.createElement("style");
- // Needed by WebKit
- style.appendChild(document.createTextNode(content));
- style.id = name;
- document.head.appendChild(style);
- sheet = style.sheet as CSSStyleSheet;
- } else {
- // We've taken over the stylesheet now,
- // make it clear by clearing all the rules in it
- // and making it obvious in the DOM.
- if (style.tagName.toLowerCase() === "style") {
- style.innerText = content;
- }
- if (!style.sheet) {
- throw Error(
- "taler-presence-stylesheet should be a style sheet (<link> or <style>)",
- );
- }
- sheet = style.sheet as CSSStyleSheet;
- while (sheet.cssRules.length > 0) {
- sheet.deleteRule(0);
- }
- }
-}
-
-function setStyles(installed: boolean): void {
- if (!sheet || !sheet.cssRules) {
- return;
- }
- while (sheet.cssRules.length > 0) {
- sheet.deleteRule(0);
- }
- if (installed) {
- sheet.insertRule(".taler-installed-hide { display: none; }", 0);
- sheet.insertRule(".taler-probed-hide { display: none; }", 0);
- } else {
- sheet.insertRule(".taler-installed-show { display: none; }", 0);
- }
-}
-
-function onceOnComplete(cb: () => void): void {
- if (document.readyState === "complete") {
- cb();
- } else {
- document.addEventListener("readystatechange", () => {
- if (document.readyState === "complete") {
- cb();
- }
- });
- }
-}
-
-function init(): void {
- onceOnComplete(() => {
- if (document.documentElement.getAttribute("data-taler-nojs")) {
- initStyle();
- setStyles(true);
- }
- });
- registerHandlers();
- // Hack to know when the extension is unloaded
- const port = chrome.runtime.connect();
-
- port.onDisconnect.addListener(() => {
- logVerbose && console.log("chrome runtime disconnected, removing handlers");
- if (document.documentElement.getAttribute("data-taler-nojs")) {
- setStyles(false);
- }
- for (const handler of handlers) {
- document.removeEventListener(handler.type, handler.listener);
- }
- });
-}
-
-type HandlerFn = (detail: any, sendResponse: (msg: any) => void) => void;
-
-function registerHandlers(): void {
- /**
- * Add a handler for a DOM event, which automatically
- * handles adding sequence numbers to responses.
- */
- function addHandler(type: string, handler: HandlerFn): void {
- const handlerWrap = (e: Event): void => {
- if (!(e instanceof Event)) {
- console.log("unexpected event", e);
- throw Error(`invariant violated`);
- }
- if (e.type !== type) {
- console.log("unexpected event type", e);
- throw Error(`invariant violated`);
- }
- let callId: number | undefined;
- let detail;
- if (
- e instanceof CustomEvent &&
- e.detail &&
- e.detail.callId !== undefined
- ) {
- callId = e.detail.callId;
- detail = e.detail;
- }
- const responder = (msg?: any): void => {
- const fullMsg = Object.assign({}, msg, { callId });
- let opts = { detail: fullMsg };
- if ("function" === typeof cloneInto) {
- opts = cloneInto(opts, document.defaultView);
- }
- const evt = new CustomEvent(type + "-result", opts);
- document.dispatchEvent(evt);
- };
- handler(detail, responder);
- };
- document.addEventListener(type, handlerWrap);
- handlers.push({ type, listener: handlerWrap });
- }
-
- addHandler("taler-query-id", (msg: any, sendResponse: any) => {
- // FIXME: maybe include this info in taler-probe?
- sendResponse({ id: chrome.runtime.id });
- });
-
- addHandler("taler-probe", (msg: any, sendResponse: any) => {
- sendResponse();
- });
-
- addHandler("taler-create-reserve", (msg: any) => {
- const uri = new URL(
- chrome.extension.getURL("/src/webex/pages/confirm-create-reserve.html"),
- );
- uri.searchParams.set("amount", JSON.stringify(msg.amount));
- uri.searchParams.set("bank_url", document.location.href);
- uri.searchParams.set(
- "callback_url",
- new URL(msg.callback_url, document.location.href).href,
- );
- uri.searchParams.set("suggested_exchange_url", msg.suggested_exchange_url);
- uri.searchParams.set("wt_types", JSON.stringify(msg.wt_types));
- window.location.href = uri.href;
- });
-
- addHandler("taler-add-auditor", (msg: any) => {
- const uri = new URL(
- chrome.extension.getURL("/src/webex/pages/add-auditor.html"),
- );
- uri.searchParams.set("req", JSON.stringify(msg));
- window.location.href = uri.href;
- });
-
- addHandler("taler-confirm-reserve", async (msg: any, sendResponse: any) => {
- const reservePub = msg.reserve_pub;
- if (typeof reservePub !== "string") {
- console.error(
- "taler-confirm-reserve expects parameter reserve_pub of type 'string'",
- );
- return;
- }
- await wxApi.confirmReserve(msg.reserve_pub);
- sendResponse();
- });
-}
-
-logVerbose && console.log("loading Taler content script");
-init();