import { decodeB64StringToArrayBuffer } from "../utils/b64" import { settingsStore } from "~/newstore/settings" export const hasExtensionInstalled = () => typeof window.__POSTWOMAN_EXTENSION_HOOK__ !== "undefined" export const hasChromeExtensionInstalled = () => hasExtensionInstalled() && /Chrome/i.test(navigator.userAgent) && /Google/i.test(navigator.vendor) export const hasFirefoxExtensionInstalled = () => hasExtensionInstalled() && /Firefox/i.test(navigator.userAgent) export const cancelRunningExtensionRequest = () => { if ( hasExtensionInstalled() && window.__POSTWOMAN_EXTENSION_HOOK__.cancelRunningRequest ) { window.__POSTWOMAN_EXTENSION_HOOK__.cancelRunningRequest() } } const extensionWithProxy = async (req) => { const backupTimeDataStart = new Date().getTime() const res = await window.__POSTWOMAN_EXTENSION_HOOK__.sendRequest({ method: "post", url: settingsStore.value.PROXY_URL || "https://proxy.hoppscotch.io/", data: { ...req, wantsBinary: true, }, }) const backupTimeDataEnd = new Date().getTime() const parsedData = JSON.parse(res.data) if (!parsedData.success) { throw new Error(parsedData.data.message || "Proxy Error") } if (parsedData.isBinary) { parsedData.data = decodeB64StringToArrayBuffer(parsedData.data) } if (!(res && res.config && res.config.timeData)) { res.config = { timeData: { startTime: backupTimeDataStart, endTime: backupTimeDataEnd, }, } } parsedData.config = res.config return parsedData } const extensionWithoutProxy = async (req) => { const backupTimeDataStart = new Date().getTime() const res = await window.__POSTWOMAN_EXTENSION_HOOK__.sendRequest({ ...req, wantsBinary: true, }) const backupTimeDataEnd = new Date().getTime() if (!(res && res.config && res.config.timeData)) { res.config = { timeData: { startTime: backupTimeDataStart, endTime: backupTimeDataEnd, }, } } return res } const extensionStrategy = (req) => { if (settingsStore.value.PROXY_ENABLED) { return extensionWithProxy(req) } return extensionWithoutProxy(req) } export default extensionStrategy