frontend: refactor storage.js
This commit is contained in:
parent
b084de7ffc
commit
b93b610eef
5 changed files with 37 additions and 45 deletions
|
@ -1,5 +1,5 @@
|
||||||
import gateway, { GatewayEventType } from "./gateway";
|
import gateway, { GatewayEventType } from "./gateway";
|
||||||
import { setAuthToken } from "./storage";
|
import { removeItem, setItem } from "./storage";
|
||||||
import { overlayStore } from "./stores";
|
import { overlayStore } from "./stores";
|
||||||
|
|
||||||
function useAuthHandlers() {
|
function useAuthHandlers() {
|
||||||
|
@ -15,12 +15,12 @@ function useAuthHandlers() {
|
||||||
|
|
||||||
export function authWithToken(token, shouldUpdate=false) {
|
export function authWithToken(token, shouldUpdate=false) {
|
||||||
if (shouldUpdate)
|
if (shouldUpdate)
|
||||||
setAuthToken(token);
|
setItem("token", token);
|
||||||
gateway.init(token);
|
gateway.init(token);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function logOut() {
|
export function logOut() {
|
||||||
setAuthToken(null);
|
removeItem("token");
|
||||||
gateway.close();
|
gateway.close();
|
||||||
gateway.dispatch(GatewayEventType.BadAuth, -1);
|
gateway.dispatch(GatewayEventType.BadAuth, -1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import logging from "./logging";
|
import logging from "./logging";
|
||||||
import { getAuthToken, getItem } from "./storage";
|
import { getItem } from "./storage";
|
||||||
|
|
||||||
export const GatewayErrors = {
|
export const GatewayErrors = {
|
||||||
BAD_PAYLOAD: 4001,
|
BAD_PAYLOAD: 4001,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import Main from './components/Main.svelte';
|
import Main from './components/Main.svelte';
|
||||||
import gateway from './gateway';
|
import gateway from './gateway';
|
||||||
import { getAuthToken, initStorageDefaults } from './storage';
|
import { getItem, init } from './storage';
|
||||||
import logging from "./logging";
|
import logging from "./logging";
|
||||||
import { authWithToken } from './auth';
|
import { authWithToken } from './auth';
|
||||||
import { initResponsiveHandlers } from './responsive';
|
import { initResponsiveHandlers } from './responsive';
|
||||||
|
@ -10,9 +10,9 @@ window.__waffle = {
|
||||||
gateway
|
gateway
|
||||||
};
|
};
|
||||||
|
|
||||||
initStorageDefaults();
|
init();
|
||||||
initResponsiveHandlers();
|
initResponsiveHandlers();
|
||||||
authWithToken(getAuthToken());
|
authWithToken(getItem("token"));
|
||||||
|
|
||||||
// Remove loading screen
|
// Remove loading screen
|
||||||
const loadingElement = document.getElementById("pre--loading-screen");
|
const loadingElement = document.getElementById("pre--loading-screen");
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { getAuthToken } from "./storage";
|
import { getItem } from "./storage";
|
||||||
|
|
||||||
export default async function(method, endpoint, auth=true, body=null) {
|
export default async function(method, endpoint, auth=true, body=null) {
|
||||||
const options = {
|
const options = {
|
||||||
|
@ -14,7 +14,7 @@ export default async function(method, endpoint, auth=true, body=null) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (auth) {
|
if (auth) {
|
||||||
const token = getAuthToken();
|
const token = getItem("token");
|
||||||
if (token) {
|
if (token) {
|
||||||
options.headers = {
|
options.headers = {
|
||||||
...options.headers || {},
|
...options.headers || {},
|
||||||
|
|
|
@ -1,54 +1,46 @@
|
||||||
const defaults = {
|
const defaults = {
|
||||||
apiBase: `${window.location.origin}/api/v1`,
|
apiBase: `${window.location.origin}/api/v1`,
|
||||||
gatewayBase: `${location.protocol === "https:" ? "wss" : "ws"}://${location.host}/gateway`,
|
gatewayBase: `${location.protocol === "https:" ? "wss" : "ws"}://${location.host}/gateway`,
|
||||||
doAnimations: true
|
doAnimations: true,
|
||||||
|
token: ""
|
||||||
};
|
};
|
||||||
|
const store = new Map(Object.entries(defaults));
|
||||||
|
const persistentProvider = localStorage;
|
||||||
|
|
||||||
const dummyProvider = {
|
export function setItem(key, value) {
|
||||||
_store: {},
|
store.set(key, value);
|
||||||
getItem(key) {
|
if (persistentProvider) {
|
||||||
return this._store[key];
|
persistentProvider.setItem(key, typeof value === "string" ? value : JSON.stringify(value));
|
||||||
},
|
|
||||||
setItem(key, value) {
|
|
||||||
this._store[key] = value;
|
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
function getProvider() {
|
|
||||||
return window.localStorage || dummyProvider;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getItem(key) {
|
export function getItem(key) {
|
||||||
return getProvider().getItem(key);
|
return store.get(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setItem(key, value) {
|
export function removeItem(key) {
|
||||||
return getProvider().setItem(key, value);
|
store.delete(key);
|
||||||
|
if (persistentProvider) {
|
||||||
|
persistentProvider.removeItem(key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getAuthToken() {
|
export function init() {
|
||||||
return getItem("token");
|
if (!persistentProvider)
|
||||||
}
|
return;
|
||||||
|
|
||||||
export function setAuthToken(value) {
|
store.forEach((defaultValue, key) => {
|
||||||
return setItem("token", value);
|
const override = persistentProvider.getItem(key);
|
||||||
|
if (override !== null) {
|
||||||
|
try {
|
||||||
|
store.set(key, typeof defaultValue === "string" ? override : JSON.parse(override));
|
||||||
|
} catch (o_O) {
|
||||||
|
console.warn("[Storage]", `init(): An exception was thrown while parsing the value of key "${key}" from _persistentProvider`, o_O);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export function apiRoute(fragment) {
|
export function apiRoute(fragment) {
|
||||||
return `${getItem("apiBase")}/${fragment}`;
|
return `${getItem("apiBase")}/${fragment}`
|
||||||
}
|
|
||||||
|
|
||||||
export function setItemIfNull(key, value) {
|
|
||||||
const provider = getProvider();
|
|
||||||
if (provider.getItem(key) === undefined) {
|
|
||||||
provider.setItem(key, value);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function initStorageDefaults() {
|
|
||||||
for (const [k, v] of Object.entries(defaults)) {
|
|
||||||
setItemIfNull(k, v);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue