mirror of
https://github.com/elk-zone/elk
synced 2024-12-13 06:08:06 +09:00
77 lines
2.2 KiB
TypeScript
77 lines
2.2 KiB
TypeScript
import {
|
|
createApp,
|
|
createRouter,
|
|
defineLazyEventHandler,
|
|
toNodeListener,
|
|
} from 'h3'
|
|
import type { FetchResponse } from 'ofetch'
|
|
import { createFetch } from 'ofetch'
|
|
import {
|
|
createCall,
|
|
createFetch as createLocalFetch,
|
|
} from 'unenv/runtime/fetch/index'
|
|
|
|
const handlers = [
|
|
{
|
|
route: '/api/:server/oauth',
|
|
handler: defineLazyEventHandler(() => import('~/server/api/[server]/oauth/[origin]').then(r => r.default || r)),
|
|
},
|
|
{
|
|
route: '/api/:server/login',
|
|
handler: defineLazyEventHandler(() => import('~/server/api/[server]/login').then(r => r.default || r)),
|
|
},
|
|
{
|
|
route: '/api/list-servers',
|
|
handler: defineLazyEventHandler(() => import('~/server/api/list-servers').then(r => r.default || r)),
|
|
},
|
|
]
|
|
|
|
// @ts-expect-error undeclared global window property
|
|
window.__NUXT__.config = {
|
|
// @ts-expect-error undeclared global window property
|
|
...window.__NUXT__.config,
|
|
storage: {},
|
|
}
|
|
|
|
export default defineNuxtPlugin(async () => {
|
|
const config = useRuntimeConfig()
|
|
|
|
const h3App = createApp({
|
|
debug: import.meta.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)
|
|
|
|
// eslint-disable-next-line ts/prefer-ts-expect-error
|
|
// @ts-ignore error TS2321: Excessive stack depth comparing types
|
|
globalThis.$fetch = createFetch({
|
|
// eslint-disable-next-line ts/prefer-ts-expect-error
|
|
// @ts-ignore slight differences in api
|
|
fetch: localFetch,
|
|
Headers,
|
|
// eslint-disable-next-line ts/prefer-ts-expect-error
|
|
// @ts-ignore error TS2321: Excessive stack depth comparing types
|
|
defaults: { baseURL: config.app.baseURL },
|
|
})
|
|
|
|
const route = useRoute()
|
|
if (route.path.startsWith('/api')) {
|
|
const result = (await ($fetch.raw as any)(route.fullPath)) as FetchResponse<unknown>
|
|
if (result.headers.get('location'))
|
|
location.href = result.headers.get('location')!
|
|
}
|
|
})
|