wallet-core/packages/taler-wallet-webextension/src/compat.ts

86 lines
2.3 KiB
TypeScript
Raw Normal View History

2018-01-22 14:21:03 +01:00
/*
This file is part of TALER
(C) 2017 INRIA
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/>
*/
2018-02-20 15:12:45 +01:00
/**
2018-04-09 00:41:14 +02:00
* Compatibility helpers needed for browsers that don't implement
* WebExtension APIs consistently.
*/
2018-01-22 14:21:03 +01:00
2018-02-20 15:12:45 +01:00
export function isFirefox(): boolean {
2020-03-30 12:39:32 +02:00
const rt = chrome.runtime as any;
if (typeof rt.getBrowserInfo === "function") {
return true;
}
return false;
2018-02-20 15:12:45 +01:00
}
2020-03-26 16:05:06 +01:00
/**
* Check if we are running under nodejs.
*/
2020-04-07 10:07:32 +02:00
export function isNode(): boolean {
2020-03-30 12:39:32 +02:00
return typeof process !== "undefined" && process.release.name === "node";
}
2020-06-03 12:51:09 +02:00
/**
* Compatibility API that works on multiple browsers.
*/
export interface CrossBrowserPermissionsApi {
contains(
permissions: chrome.permissions.Permissions,
callback: (result: boolean) => void,
): void;
addPermissionsListener(
callback: (permissions: chrome.permissions.Permissions) => void,
): void;
request(
permissions: chrome.permissions.Permissions,
callback?: (granted: boolean) => void,
): void;
remove(
permissions: chrome.permissions.Permissions,
callback?: (removed: boolean) => void,
): void;
}
export function getPermissionsApi(): CrossBrowserPermissionsApi {
const myBrowser = (globalThis as any).browser;
if (
typeof myBrowser === "object" &&
typeof myBrowser.permissions === "object"
) {
return {
addPermissionsListener: () => {
// Not supported yet.
},
contains: myBrowser.permissions.contains,
request: myBrowser.permissions.request,
remove: myBrowser.permissions.remove,
};
} else {
return {
addPermissionsListener: chrome.permissions.onAdded.addListener.bind(
chrome.permissions.onAdded,
),
contains: chrome.permissions.contains,
request: chrome.permissions.request,
remove: chrome.permissions.remove,
};
}
}