You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OneAuth/ui/env.js

37 lines
1.1 KiB
JavaScript

export default async ($mod) => {
console.log('load vbase')
// Load i18n
try {
const langs = await (await fetch($mod.scoped + '/langs.json')).json()
$mod.$i18n.load(langs)
} catch (e) {
console.error('Failed to load langs.json', e)
}
if (!$mod.$auth) {
let VBase = (await import($mod.scoped + '/vbase.js')).default
$mod.users = {}
const vbase = new VBase($mod.scoped, $mod.scoped + '/login', $mod.users)
$mod.$auth = vbase
}
$mod.$fetch = async (url, opts = {}) => {
let fullUrl = url
if (opts.params) {
const qs = new URLSearchParams()
for (const [k, v] of Object.entries(opts.params)) {
if (v != null) qs.append(k, v)
}
fullUrl += '?' + qs.toString()
}
const init = { method: opts.method || 'GET', headers: {} }
if (opts.body != null && init.method !== 'GET') {
init.headers['Content-Type'] = 'application/json'
init.body = JSON.stringify(opts.body)
}
const r = await $mod.fetch(fullUrl, init)
const d = await r.json().catch(() => ({}))
if (!r.ok) throw new Error(d.message || d.error || `HTTP ${r.status}`)
return d
}
}