forked from Mirrors/elk
71 lines
1.8 KiB
TypeScript
71 lines
1.8 KiB
TypeScript
import {
|
|
createApp,
|
|
createRouter,
|
|
defineLazyEventHandler,
|
|
toNodeListener,
|
|
} from 'h3'
|
|
import { createFetch } from 'ofetch'
|
|
import { parseURL } from 'ufo'
|
|
import {
|
|
createCall,
|
|
createFetch as createLocalFetch,
|
|
} from 'unenv/runtime/fetch/index'
|
|
|
|
const handlers = [
|
|
{
|
|
route: '/api/:server/oauth',
|
|
handler: defineLazyEventHandler(() => import('~/server/api/[server]/oauth').then(r => r.default || r)),
|
|
},
|
|
{
|
|
route: '/api/:server/login',
|
|
handler: defineLazyEventHandler(() => import('~/server/api/[server]/login').then(r => r.default || r)),
|
|
},
|
|
]
|
|
|
|
const { protocol, host } = parseURL(window.location.href)
|
|
|
|
// @ts-expect-error undeclared global window property
|
|
window.__NUXT__.config = {
|
|
// @ts-expect-error undeclared global window property
|
|
...window.__NUXT__.config,
|
|
deployUrl: `${protocol}//${host}`,
|
|
storage: {},
|
|
}
|
|
|
|
export default defineNuxtPlugin(async () => {
|
|
const config = useRuntimeConfig()
|
|
|
|
const h3App = createApp({
|
|
debug: process.dev,
|
|
// TODO: add global error handler
|
|
// onError: (err, event) => {
|
|
// console.log({ err, event })
|
|
// },
|
|
})
|
|
|
|
const router = createRouter()
|
|
|
|
for (const h of handlers)
|
|
router.use(h.route, h.handler)
|
|
|
|
// @ts-expect-error TODO: fix
|
|
h3App.use(config.app.baseURL, router)
|
|
|
|
const localCall = createCall(toNodeListener(h3App) as any)
|
|
const localFetch = createLocalFetch(localCall, globalThis.fetch)
|
|
|
|
// @ts-expect-error slight differences in api
|
|
globalThis.$fetch = createFetch({
|
|
// @ts-expect-error slight differences in api
|
|
fetch: localFetch,
|
|
Headers,
|
|
defaults: { baseURL: config.app.baseURL },
|
|
})
|
|
|
|
const route = useRoute()
|
|
if (route.path.startsWith('/api')) {
|
|
const result = await $fetch.raw(route.fullPath)
|
|
if (result.headers.get('location'))
|
|
location.href = result.headers.get('location')!
|
|
}
|
|
})
|