diff --git a/src/libs/gm.js b/src/libs/gm.js new file mode 100644 index 0000000..c2a65ea --- /dev/null +++ b/src/libs/gm.js @@ -0,0 +1,23 @@ +export const injectScript = ({ eventName }) => { + window.callGM = ({ action, args }, timeout = 5000) => + new Promise((resolve, reject) => { + const handleEvent = (e) => { + window.removeEventListener(eventName + "_pong", handleEvent); + const { data, error } = e.detail; + if (error) { + reject(new Error(error)); + } else { + resolve(data); + } + }; + + window.addEventListener(eventName + "_pong", handleEvent); + window.dispatchEvent( + new CustomEvent(eventName + "_ping", { action, args }) + ); + + setTimeout(() => { + handleEvent({ detail: { error: "timeout" } }); + }, timeout); + }); +};