Files
nostr-connect/extension/output/content-script.build.js
2024-12-22 07:35:25 +07:00

1173 lines
28 KiB
JavaScript

(() => {
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __commonJS = (cb, mod) =>
function __require() {
return (
mod ||
(0, cb[__getOwnPropNames(cb)[0]])(
(mod = { exports: {} }).exports,
mod,
),
mod.exports
);
};
var __copyProps = (to, from, except, desc) => {
if ((from && typeof from === "object") || typeof from === "function") {
for (const key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, {
get: () => from[key],
enumerable:
!(desc = __getOwnPropDesc(from, key)) || desc.enumerable,
});
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (
(target = mod != null ? __create(__getProtoOf(mod)) : {}),
__copyProps(
isNodeMode || !mod || !mod.__esModule
? __defProp(target, "default", { value: mod, enumerable: true })
: target,
mod,
)
);
// node_modules/.pnpm/webextension-polyfill@0.8.0/node_modules/webextension-polyfill/dist/browser-polyfill.js
var require_browser_polyfill = __commonJS({
"node_modules/.pnpm/webextension-polyfill@0.8.0/node_modules/webextension-polyfill/dist/browser-polyfill.js"(
exports,
module,
) {
((global, factory) => {
if (typeof define === "function" && define.amd) {
define("webextension-polyfill", ["module"], factory);
} else if (typeof exports !== "undefined") {
factory(module);
} else {
var mod = {
exports: {},
};
factory(mod);
global.browser = mod.exports;
}
})(
typeof globalThis !== "undefined"
? globalThis
: typeof self !== "undefined"
? self
: exports,
(module2) => {
if (
typeof browser === "undefined" ||
Object.getPrototypeOf(browser) !== Object.prototype
) {
const CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE =
"The message port closed before a response was received.";
const SEND_RESPONSE_DEPRECATION_WARNING =
"Returning a Promise is the preferred way to send a reply from an onMessage/onMessageExternal listener, as the sendResponse will be removed from the specs (See https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage)";
const wrapAPIs = (extensionAPIs) => {
const apiMetadata = {
alarms: {
clear: {
minArgs: 0,
maxArgs: 1,
},
clearAll: {
minArgs: 0,
maxArgs: 0,
},
get: {
minArgs: 0,
maxArgs: 1,
},
getAll: {
minArgs: 0,
maxArgs: 0,
},
},
bookmarks: {
create: {
minArgs: 1,
maxArgs: 1,
},
get: {
minArgs: 1,
maxArgs: 1,
},
getChildren: {
minArgs: 1,
maxArgs: 1,
},
getRecent: {
minArgs: 1,
maxArgs: 1,
},
getSubTree: {
minArgs: 1,
maxArgs: 1,
},
getTree: {
minArgs: 0,
maxArgs: 0,
},
move: {
minArgs: 2,
maxArgs: 2,
},
remove: {
minArgs: 1,
maxArgs: 1,
},
removeTree: {
minArgs: 1,
maxArgs: 1,
},
search: {
minArgs: 1,
maxArgs: 1,
},
update: {
minArgs: 2,
maxArgs: 2,
},
},
browserAction: {
disable: {
minArgs: 0,
maxArgs: 1,
fallbackToNoCallback: true,
},
enable: {
minArgs: 0,
maxArgs: 1,
fallbackToNoCallback: true,
},
getBadgeBackgroundColor: {
minArgs: 1,
maxArgs: 1,
},
getBadgeText: {
minArgs: 1,
maxArgs: 1,
},
getPopup: {
minArgs: 1,
maxArgs: 1,
},
getTitle: {
minArgs: 1,
maxArgs: 1,
},
openPopup: {
minArgs: 0,
maxArgs: 0,
},
setBadgeBackgroundColor: {
minArgs: 1,
maxArgs: 1,
fallbackToNoCallback: true,
},
setBadgeText: {
minArgs: 1,
maxArgs: 1,
fallbackToNoCallback: true,
},
setIcon: {
minArgs: 1,
maxArgs: 1,
},
setPopup: {
minArgs: 1,
maxArgs: 1,
fallbackToNoCallback: true,
},
setTitle: {
minArgs: 1,
maxArgs: 1,
fallbackToNoCallback: true,
},
},
browsingData: {
remove: {
minArgs: 2,
maxArgs: 2,
},
removeCache: {
minArgs: 1,
maxArgs: 1,
},
removeCookies: {
minArgs: 1,
maxArgs: 1,
},
removeDownloads: {
minArgs: 1,
maxArgs: 1,
},
removeFormData: {
minArgs: 1,
maxArgs: 1,
},
removeHistory: {
minArgs: 1,
maxArgs: 1,
},
removeLocalStorage: {
minArgs: 1,
maxArgs: 1,
},
removePasswords: {
minArgs: 1,
maxArgs: 1,
},
removePluginData: {
minArgs: 1,
maxArgs: 1,
},
settings: {
minArgs: 0,
maxArgs: 0,
},
},
commands: {
getAll: {
minArgs: 0,
maxArgs: 0,
},
},
contextMenus: {
remove: {
minArgs: 1,
maxArgs: 1,
},
removeAll: {
minArgs: 0,
maxArgs: 0,
},
update: {
minArgs: 2,
maxArgs: 2,
},
},
cookies: {
get: {
minArgs: 1,
maxArgs: 1,
},
getAll: {
minArgs: 1,
maxArgs: 1,
},
getAllCookieStores: {
minArgs: 0,
maxArgs: 0,
},
remove: {
minArgs: 1,
maxArgs: 1,
},
set: {
minArgs: 1,
maxArgs: 1,
},
},
devtools: {
inspectedWindow: {
eval: {
minArgs: 1,
maxArgs: 2,
singleCallbackArg: false,
},
},
panels: {
create: {
minArgs: 3,
maxArgs: 3,
singleCallbackArg: true,
},
elements: {
createSidebarPane: {
minArgs: 1,
maxArgs: 1,
},
},
},
},
downloads: {
cancel: {
minArgs: 1,
maxArgs: 1,
},
download: {
minArgs: 1,
maxArgs: 1,
},
erase: {
minArgs: 1,
maxArgs: 1,
},
getFileIcon: {
minArgs: 1,
maxArgs: 2,
},
open: {
minArgs: 1,
maxArgs: 1,
fallbackToNoCallback: true,
},
pause: {
minArgs: 1,
maxArgs: 1,
},
removeFile: {
minArgs: 1,
maxArgs: 1,
},
resume: {
minArgs: 1,
maxArgs: 1,
},
search: {
minArgs: 1,
maxArgs: 1,
},
show: {
minArgs: 1,
maxArgs: 1,
fallbackToNoCallback: true,
},
},
extension: {
isAllowedFileSchemeAccess: {
minArgs: 0,
maxArgs: 0,
},
isAllowedIncognitoAccess: {
minArgs: 0,
maxArgs: 0,
},
},
history: {
addUrl: {
minArgs: 1,
maxArgs: 1,
},
deleteAll: {
minArgs: 0,
maxArgs: 0,
},
deleteRange: {
minArgs: 1,
maxArgs: 1,
},
deleteUrl: {
minArgs: 1,
maxArgs: 1,
},
getVisits: {
minArgs: 1,
maxArgs: 1,
},
search: {
minArgs: 1,
maxArgs: 1,
},
},
i18n: {
detectLanguage: {
minArgs: 1,
maxArgs: 1,
},
getAcceptLanguages: {
minArgs: 0,
maxArgs: 0,
},
},
identity: {
launchWebAuthFlow: {
minArgs: 1,
maxArgs: 1,
},
},
idle: {
queryState: {
minArgs: 1,
maxArgs: 1,
},
},
management: {
get: {
minArgs: 1,
maxArgs: 1,
},
getAll: {
minArgs: 0,
maxArgs: 0,
},
getSelf: {
minArgs: 0,
maxArgs: 0,
},
setEnabled: {
minArgs: 2,
maxArgs: 2,
},
uninstallSelf: {
minArgs: 0,
maxArgs: 1,
},
},
notifications: {
clear: {
minArgs: 1,
maxArgs: 1,
},
create: {
minArgs: 1,
maxArgs: 2,
},
getAll: {
minArgs: 0,
maxArgs: 0,
},
getPermissionLevel: {
minArgs: 0,
maxArgs: 0,
},
update: {
minArgs: 2,
maxArgs: 2,
},
},
pageAction: {
getPopup: {
minArgs: 1,
maxArgs: 1,
},
getTitle: {
minArgs: 1,
maxArgs: 1,
},
hide: {
minArgs: 1,
maxArgs: 1,
fallbackToNoCallback: true,
},
setIcon: {
minArgs: 1,
maxArgs: 1,
},
setPopup: {
minArgs: 1,
maxArgs: 1,
fallbackToNoCallback: true,
},
setTitle: {
minArgs: 1,
maxArgs: 1,
fallbackToNoCallback: true,
},
show: {
minArgs: 1,
maxArgs: 1,
fallbackToNoCallback: true,
},
},
permissions: {
contains: {
minArgs: 1,
maxArgs: 1,
},
getAll: {
minArgs: 0,
maxArgs: 0,
},
remove: {
minArgs: 1,
maxArgs: 1,
},
request: {
minArgs: 1,
maxArgs: 1,
},
},
runtime: {
getBackgroundPage: {
minArgs: 0,
maxArgs: 0,
},
getPlatformInfo: {
minArgs: 0,
maxArgs: 0,
},
openOptionsPage: {
minArgs: 0,
maxArgs: 0,
},
requestUpdateCheck: {
minArgs: 0,
maxArgs: 0,
},
sendMessage: {
minArgs: 1,
maxArgs: 3,
},
sendNativeMessage: {
minArgs: 2,
maxArgs: 2,
},
setUninstallURL: {
minArgs: 1,
maxArgs: 1,
},
},
sessions: {
getDevices: {
minArgs: 0,
maxArgs: 1,
},
getRecentlyClosed: {
minArgs: 0,
maxArgs: 1,
},
restore: {
minArgs: 0,
maxArgs: 1,
},
},
storage: {
local: {
clear: {
minArgs: 0,
maxArgs: 0,
},
get: {
minArgs: 0,
maxArgs: 1,
},
getBytesInUse: {
minArgs: 0,
maxArgs: 1,
},
remove: {
minArgs: 1,
maxArgs: 1,
},
set: {
minArgs: 1,
maxArgs: 1,
},
},
managed: {
get: {
minArgs: 0,
maxArgs: 1,
},
getBytesInUse: {
minArgs: 0,
maxArgs: 1,
},
},
sync: {
clear: {
minArgs: 0,
maxArgs: 0,
},
get: {
minArgs: 0,
maxArgs: 1,
},
getBytesInUse: {
minArgs: 0,
maxArgs: 1,
},
remove: {
minArgs: 1,
maxArgs: 1,
},
set: {
minArgs: 1,
maxArgs: 1,
},
},
},
tabs: {
captureVisibleTab: {
minArgs: 0,
maxArgs: 2,
},
create: {
minArgs: 1,
maxArgs: 1,
},
detectLanguage: {
minArgs: 0,
maxArgs: 1,
},
discard: {
minArgs: 0,
maxArgs: 1,
},
duplicate: {
minArgs: 1,
maxArgs: 1,
},
executeScript: {
minArgs: 1,
maxArgs: 2,
},
get: {
minArgs: 1,
maxArgs: 1,
},
getCurrent: {
minArgs: 0,
maxArgs: 0,
},
getZoom: {
minArgs: 0,
maxArgs: 1,
},
getZoomSettings: {
minArgs: 0,
maxArgs: 1,
},
goBack: {
minArgs: 0,
maxArgs: 1,
},
goForward: {
minArgs: 0,
maxArgs: 1,
},
highlight: {
minArgs: 1,
maxArgs: 1,
},
insertCSS: {
minArgs: 1,
maxArgs: 2,
},
move: {
minArgs: 2,
maxArgs: 2,
},
query: {
minArgs: 1,
maxArgs: 1,
},
reload: {
minArgs: 0,
maxArgs: 2,
},
remove: {
minArgs: 1,
maxArgs: 1,
},
removeCSS: {
minArgs: 1,
maxArgs: 2,
},
sendMessage: {
minArgs: 2,
maxArgs: 3,
},
setZoom: {
minArgs: 1,
maxArgs: 2,
},
setZoomSettings: {
minArgs: 1,
maxArgs: 2,
},
update: {
minArgs: 1,
maxArgs: 2,
},
},
topSites: {
get: {
minArgs: 0,
maxArgs: 0,
},
},
webNavigation: {
getAllFrames: {
minArgs: 1,
maxArgs: 1,
},
getFrame: {
minArgs: 1,
maxArgs: 1,
},
},
webRequest: {
handlerBehaviorChanged: {
minArgs: 0,
maxArgs: 0,
},
},
windows: {
create: {
minArgs: 0,
maxArgs: 1,
},
get: {
minArgs: 1,
maxArgs: 2,
},
getAll: {
minArgs: 0,
maxArgs: 1,
},
getCurrent: {
minArgs: 0,
maxArgs: 1,
},
getLastFocused: {
minArgs: 0,
maxArgs: 1,
},
remove: {
minArgs: 1,
maxArgs: 1,
},
update: {
minArgs: 2,
maxArgs: 2,
},
},
};
if (Object.keys(apiMetadata).length === 0) {
throw new Error(
"api-metadata.json has not been included in browser-polyfill",
);
}
class DefaultWeakMap extends WeakMap {
constructor(createItem, items = void 0) {
super(items);
this.createItem = createItem;
}
get(key) {
if (!this.has(key)) {
this.set(key, this.createItem(key));
}
return super.get(key);
}
}
const isThenable = (value) => {
return (
value &&
typeof value === "object" &&
typeof value.then === "function"
);
};
const makeCallback = (promise, metadata) => {
return (...callbackArgs) => {
if (extensionAPIs.runtime.lastError) {
promise.reject(
new Error(extensionAPIs.runtime.lastError.message),
);
} else if (
metadata.singleCallbackArg ||
(callbackArgs.length <= 1 &&
metadata.singleCallbackArg !== false)
) {
promise.resolve(callbackArgs[0]);
} else {
promise.resolve(callbackArgs);
}
};
};
const pluralizeArguments = (numArgs) =>
numArgs == 1 ? "argument" : "arguments";
const wrapAsyncFunction = (name, metadata) => {
return function asyncFunctionWrapper(target, ...args) {
if (args.length < metadata.minArgs) {
throw new Error(
`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`,
);
}
if (args.length > metadata.maxArgs) {
throw new Error(
`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`,
);
}
return new Promise((resolve, reject) => {
if (metadata.fallbackToNoCallback) {
try {
target[name](
...args,
makeCallback(
{
resolve,
reject,
},
metadata,
),
);
} catch (cbError) {
console.warn(
`${name} API method doesn't seem to support the callback parameter, falling back to call it without a callback: `,
cbError,
);
target[name](...args);
metadata.fallbackToNoCallback = false;
metadata.noCallback = true;
resolve();
}
} else if (metadata.noCallback) {
target[name](...args);
resolve();
} else {
target[name](
...args,
makeCallback(
{
resolve,
reject,
},
metadata,
),
);
}
});
};
};
const wrapMethod = (target, method, wrapper) => {
return new Proxy(method, {
apply(targetMethod, thisObj, args) {
return wrapper.call(thisObj, target, ...args);
},
});
};
const hasOwnProperty = Function.call.bind(
Object.prototype.hasOwnProperty,
);
const wrapObject = (target, wrappers = {}, metadata = {}) => {
const cache = /* @__PURE__ */ Object.create(null);
const handlers = {
has(proxyTarget2, prop) {
return prop in target || prop in cache;
},
get(proxyTarget2, prop, receiver) {
if (prop in cache) {
return cache[prop];
}
if (!(prop in target)) {
return void 0;
}
let value = target[prop];
if (typeof value === "function") {
if (typeof wrappers[prop] === "function") {
value = wrapMethod(
target,
target[prop],
wrappers[prop],
);
} else if (hasOwnProperty(metadata, prop)) {
const wrapper = wrapAsyncFunction(prop, metadata[prop]);
value = wrapMethod(target, target[prop], wrapper);
} else {
value = value.bind(target);
}
} else if (
typeof value === "object" &&
value !== null &&
(hasOwnProperty(wrappers, prop) ||
hasOwnProperty(metadata, prop))
) {
value = wrapObject(value, wrappers[prop], metadata[prop]);
} else if (hasOwnProperty(metadata, "*")) {
value = wrapObject(value, wrappers[prop], metadata["*"]);
} else {
Object.defineProperty(cache, prop, {
configurable: true,
enumerable: true,
get() {
return target[prop];
},
set(value2) {
target[prop] = value2;
},
});
return value;
}
cache[prop] = value;
return value;
},
set(proxyTarget2, prop, value, receiver) {
if (prop in cache) {
cache[prop] = value;
} else {
target[prop] = value;
}
return true;
},
defineProperty(proxyTarget2, prop, desc) {
return Reflect.defineProperty(cache, prop, desc);
},
deleteProperty(proxyTarget2, prop) {
return Reflect.deleteProperty(cache, prop);
},
};
const proxyTarget = Object.create(target);
return new Proxy(proxyTarget, handlers);
};
const wrapEvent = (wrapperMap) => ({
addListener(target, listener, ...args) {
target.addListener(wrapperMap.get(listener), ...args);
},
hasListener(target, listener) {
return target.hasListener(wrapperMap.get(listener));
},
removeListener(target, listener) {
target.removeListener(wrapperMap.get(listener));
},
});
const onRequestFinishedWrappers = new DefaultWeakMap(
(listener) => {
if (typeof listener !== "function") {
return listener;
}
return function onRequestFinished(req) {
const wrappedReq = wrapObject(
req,
{},
{
getContent: {
minArgs: 0,
maxArgs: 0,
},
},
);
listener(wrappedReq);
};
},
);
let loggedSendResponseDeprecationWarning = false;
const onMessageWrappers = new DefaultWeakMap((listener) => {
if (typeof listener !== "function") {
return listener;
}
return function onMessage(message, sender, sendResponse) {
let didCallSendResponse = false;
let wrappedSendResponse;
const sendResponsePromise = new Promise((resolve) => {
wrappedSendResponse = (response) => {
if (!loggedSendResponseDeprecationWarning) {
console.warn(
SEND_RESPONSE_DEPRECATION_WARNING,
new Error().stack,
);
loggedSendResponseDeprecationWarning = true;
}
didCallSendResponse = true;
resolve(response);
};
});
let result;
try {
result = listener(message, sender, wrappedSendResponse);
} catch (err) {
result = Promise.reject(err);
}
const isResultThenable =
result !== true && isThenable(result);
if (
result !== true &&
!isResultThenable &&
!didCallSendResponse
) {
return false;
}
const sendPromisedResult = (promise) => {
promise
.then(
(msg) => {
sendResponse(msg);
},
(error) => {
let message2;
if (
error &&
(error instanceof Error ||
typeof error.message === "string")
) {
message2 = error.message;
} else {
message2 = "An unexpected error occurred";
}
sendResponse({
__mozWebExtensionPolyfillReject__: true,
message: message2,
});
},
)
.catch((err) => {
console.error(
"Failed to send onMessage rejected reply",
err,
);
});
};
if (isResultThenable) {
sendPromisedResult(result);
} else {
sendPromisedResult(sendResponsePromise);
}
return true;
};
});
const wrappedSendMessageCallback = (
{ reject, resolve },
reply,
) => {
if (extensionAPIs.runtime.lastError) {
if (
extensionAPIs.runtime.lastError.message ===
CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE
) {
resolve();
} else {
reject(new Error(extensionAPIs.runtime.lastError.message));
}
} else if (reply && reply.__mozWebExtensionPolyfillReject__) {
reject(new Error(reply.message));
} else {
resolve(reply);
}
};
const wrappedSendMessage = (
name,
metadata,
apiNamespaceObj,
...args
) => {
if (args.length < metadata.minArgs) {
throw new Error(
`Expected at least ${metadata.minArgs} ${pluralizeArguments(metadata.minArgs)} for ${name}(), got ${args.length}`,
);
}
if (args.length > metadata.maxArgs) {
throw new Error(
`Expected at most ${metadata.maxArgs} ${pluralizeArguments(metadata.maxArgs)} for ${name}(), got ${args.length}`,
);
}
return new Promise((resolve, reject) => {
const wrappedCb = wrappedSendMessageCallback.bind(null, {
resolve,
reject,
});
args.push(wrappedCb);
apiNamespaceObj.sendMessage(...args);
});
};
const staticWrappers = {
devtools: {
network: {
onRequestFinished: wrapEvent(onRequestFinishedWrappers),
},
},
runtime: {
onMessage: wrapEvent(onMessageWrappers),
onMessageExternal: wrapEvent(onMessageWrappers),
sendMessage: wrappedSendMessage.bind(null, "sendMessage", {
minArgs: 1,
maxArgs: 3,
}),
},
tabs: {
sendMessage: wrappedSendMessage.bind(null, "sendMessage", {
minArgs: 2,
maxArgs: 3,
}),
},
};
const settingMetadata = {
clear: {
minArgs: 1,
maxArgs: 1,
},
get: {
minArgs: 1,
maxArgs: 1,
},
set: {
minArgs: 1,
maxArgs: 1,
},
};
apiMetadata.privacy = {
network: {
"*": settingMetadata,
},
services: {
"*": settingMetadata,
},
websites: {
"*": settingMetadata,
},
};
return wrapObject(extensionAPIs, staticWrappers, apiMetadata);
};
if (
typeof chrome != "object" ||
!chrome ||
!chrome.runtime ||
!chrome.runtime.id
) {
throw new Error(
"This script should only be loaded in a browser extension.",
);
}
module2.exports = wrapAPIs(chrome);
} else {
module2.exports = browser;
}
},
);
},
});
// extension/content-script.js
var import_webextension_polyfill = __toESM(require_browser_polyfill());
var EXTENSION = "nostrconnect";
var script = document.createElement("script");
script.setAttribute("async", "false");
script.setAttribute("type", "text/javascript");
script.setAttribute(
"src",
import_webextension_polyfill.default.runtime.getURL("nostr-provider.js"),
);
document.head.appendChild(script);
self.addEventListener("message", async (message) => {
if (message.source !== self) return;
if (!message.data) return;
if (!message.data.params) return;
if (message.data.ext !== EXTENSION) return;
var response;
try {
response = await import_webextension_polyfill.default.runtime.sendMessage(
{
type: message.data.type,
params: message.data.params,
host: location.host,
},
);
} catch (error) {
response = { error };
}
self.postMessage(
{ id: message.data.id, ext: EXTENSION, response },
message.origin,
);
});
})();