85 lines
2.2 KiB
JavaScript
85 lines
2.2 KiB
JavaScript
import { decodeB64StringToArrayBuffer } from "../utils/b64"
|
|
|
|
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, { state }) => {
|
|
const backupTimeDataStart = new Date().getTime()
|
|
|
|
const res = await window.__POSTWOMAN_EXTENSION_HOOK__.sendRequest({
|
|
method: "post",
|
|
url: state.postwoman.settings.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, _store) => {
|
|
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, store) => {
|
|
if (store.state.postwoman.settings.PROXY_ENABLED) {
|
|
return extensionWithProxy(req, store)
|
|
}
|
|
return extensionWithoutProxy(req, store)
|
|
}
|
|
|
|
export default extensionStrategy
|