* configurable host overrides * base host overrides on name of service instead of key and hide the options by default * added unit tests * review changes * Refactor options * Refactor * Update Readme * Pump version and update Changelog Co-authored-by: Tobias Jacksteit <me@xtj7.de>
71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
import { head, pick, reduce, filter, prop, pipe } from "lodash/fp"
|
|
import remoteServices from "../remoteServices"
|
|
|
|
const DEFAULT_SUBDOMAIN = "unset"
|
|
|
|
export const isChrome = () => typeof browser === "undefined" && chrome
|
|
export const isFirefox = () => typeof browser !== "undefined" && chrome
|
|
|
|
export const defaultHostOverrides = pipe(
|
|
filter(prop("allowHostOverride")),
|
|
reduce((acc, remoteService) => {
|
|
acc[remoteService.name] = remoteService.host
|
|
return acc
|
|
}, {}),
|
|
)(remoteServices)
|
|
|
|
// We pick only the keys defined in `defaultHostOverrides`, so that
|
|
// deleted host overrides get cleared from the settings
|
|
const getHostOverrides = (settings) => ({
|
|
...defaultHostOverrides,
|
|
...pick(Object.keys(defaultHostOverrides), settings.hostOverrides || {}),
|
|
})
|
|
|
|
export const getSettings = (withDefaultSubdomain = true) => {
|
|
const keys = ["subdomain", "apiKey", "settingTimeTrackingHHMM", "hostOverrides"]
|
|
const { version } = chrome.runtime.getManifest()
|
|
if (isChrome()) {
|
|
return new Promise((resolve) => {
|
|
chrome.storage.sync.get(keys, (settings) => {
|
|
if (withDefaultSubdomain) {
|
|
settings.subdomain = settings.subdomain || DEFAULT_SUBDOMAIN
|
|
}
|
|
settings.hostOverrides = getHostOverrides(settings)
|
|
resolve({ ...settings, version })
|
|
})
|
|
})
|
|
} else {
|
|
return browser.storage.sync.get(keys).then((settings) => {
|
|
if (withDefaultSubdomain) {
|
|
settings.subdomain = settings.subdomain || DEFAULT_SUBDOMAIN
|
|
}
|
|
settings.hostOverrides = getHostOverrides(settings)
|
|
return { ...settings, version }
|
|
})
|
|
}
|
|
}
|
|
|
|
export const setStorage = (items) => {
|
|
if (isChrome()) {
|
|
return new Promise((resolve) => {
|
|
chrome.storage.sync.set(items, resolve)
|
|
})
|
|
} else {
|
|
return browser.storage.sync.set(items)
|
|
}
|
|
}
|
|
|
|
export const queryTabs = (queryInfo) => {
|
|
if (isChrome()) {
|
|
return new Promise((resolve) => chrome.tabs.query(queryInfo, resolve))
|
|
} else {
|
|
return browser.tabs.query(queryInfo)
|
|
}
|
|
}
|
|
|
|
export const getCurrentTab = () => {
|
|
return queryTabs({ currentWindow: true, active: true }).then(head)
|
|
}
|
|
|
|
export const isBrowserTab = (tab) => /^(?:chrome|about):/.test(tab.url)
|