* Add vue-rx, rxjs and lodash as dependencies * Added vue-rx plugin integration to nuxt config * Initial settings store implementation * Add babel plugin for private class properties to for Jest * Add DispatchingStore test spec * Initial settings code * Reactive Streams for fb current user and id token * Fix typo * Migrate index and graphql pages to the new store * Migrate network strategy to the new store * Fixed Section.vue errors * Fix getSettingSubject issue * Migrate fb settings reference in components to the new state system * Add typings for lodash as dev dependency * Load setting * Load initial sync setting values * Update proxy url * Add typescript support * Rewrite Settings store to TypeScript * Port Settings page to TypeScript as reference * Move all store migrations to a separate file * Delete test file for fb.js * Add ts-jest as dev dependency * Remove firebase-mock as dependency * Remove FRAME_COLORS_ENABLED settings value
86 lines
2.2 KiB
JavaScript
86 lines
2.2 KiB
JavaScript
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
|