62 lines
2.0 KiB
TypeScript
62 lines
2.0 KiB
TypeScript
import { Query } from "@kevisual/query";
|
|
import { RouterViewApi, RouterItem } from "./proxy.ts";
|
|
import { type App, type QueryRouterServer } from "@kevisual/router";
|
|
import { filter } from "@kevisual/js-filter";
|
|
import { isBrowser } from "es-toolkit";
|
|
export const initApi = async (opts: {
|
|
item?: RouterViewApi,
|
|
router: QueryRouterServer | App,
|
|
token?: string,
|
|
/**
|
|
* WHERE path = 'auth' OR path = 'router' OR path = 'call'
|
|
*/
|
|
exclude?: string;
|
|
}) => {
|
|
const router = opts?.router! as QueryRouterServer;
|
|
const item = opts?.item;
|
|
const token = opts?.token;
|
|
const query = item?.api?.query || new Query({ url: item?.api?.url || '/api/router' })
|
|
const res = await query.post<{ list: RouterItem[] }>({ path: "router", key: 'list', token: token });
|
|
if (res.code !== 200) {
|
|
return {
|
|
code: res.code,
|
|
message: `初始化路由失败: ${res.message}, url: ${query.url}`
|
|
}
|
|
}
|
|
let _list = res.data?.list || []
|
|
if (opts?.exclude) {
|
|
if (opts?.exclude) {
|
|
let excludeList = filter(_list, opts.exclude);
|
|
const excludeIds = excludeList.map(i => i.id);
|
|
_list = _list.filter(i => !excludeIds.includes(i.id!));
|
|
}
|
|
}
|
|
const _isBrowser = isBrowser();
|
|
for (const r of _list) {
|
|
if (r.path || r.id) {
|
|
_isBrowser && console.debug(`注册路由: [${r.path}] ${r?.key}`, 'API');
|
|
let metadata = r.metadata || {};
|
|
metadata.viewItem = item;
|
|
metadata.url = query.url;
|
|
metadata.source = 'query-proxy-api';
|
|
router.route({
|
|
path: r.path,
|
|
key: r.key || '',
|
|
id: r.id,
|
|
description: r.description,
|
|
metadata: metadata,
|
|
}).define(async (ctx) => {
|
|
const msg = { ...ctx.query };
|
|
if (msg.token === undefined && token !== undefined && !_isBrowser) {
|
|
msg.token = token;
|
|
}
|
|
const res = await query.post<any>({ path: r.path, key: r.key, ...msg });
|
|
ctx.forward(res)
|
|
}).addTo(router);
|
|
}
|
|
}
|
|
return {
|
|
code: 200,
|
|
message: '初始化路由成功'
|
|
}
|
|
} |