// 导入所需模块 import { Hono } from 'hono' import { APIClient } from '@d8d-appcontainer/api' import { Auth } from '@d8d-appcontainer/auth'; import debug from "debug" import { cors } from 'hono/cors' import { Server } from "socket.io" import httpServer from './app.tsx' import { setupSocketIO } from './router_io.ts' // 初始化debug实例 const log = { app: debug('app:server'), auth: debug('auth:server'), api: debug('api:server'), debug: debug('debug:server') } // 启用所有日志 Object.values(log).forEach(logger => logger.enabled = true) // 初始化 API Client const getApiClient = async (workspaceKey: string, serverUrl?: string) => { try { log.api('正在初始化API Client实例') const apiClient = await APIClient.getInstance({ scope: 'user', config: { serverUrl: serverUrl || Deno.env.get('SERVER_URL') || 'https://app-server.d8d.fun', workspaceKey: workspaceKey, type: 'http', } }) log.api('API Client初始化成功') return apiClient } catch (error) { log.api('API Client初始化失败:', error) throw error } } // 初始化Auth实例 const initAuth = async (apiClient: APIClient) => { try { log.auth('正在初始化Auth实例') const auth = new Auth(apiClient as any, { jwtSecret: Deno.env.get("JWT_SECRET") || 'your-jwt-secret-key', initialUsers: [], storagePrefix: '', userTable: 'users', fieldNames: { id: 'id', username: 'username', password: 'password', phone: 'phone', email: 'email', is_disabled: 'is_disabled', is_deleted: 'is_deleted' }, tokenExpiry: 24 * 60 * 60, refreshTokenExpiry: 7 * 24 * 60 * 60 }) log.auth('Auth实例初始化完成') return auth } catch (error) { log.auth('Auth初始化失败:', error) throw error } } // 初始化API Client // 注意:WORKSPACE_KEY 需要在 多八多(www.d8d.fun) 平台注册并开通工作空间后获取 const workspaceKey = Deno.env.get('WORKSPACE_KEY') || '' if (!workspaceKey) { console.warn('未设置WORKSPACE_KEY,请前往 多八多(www.d8d.fun) 注册并开通工作空间以获取密钥') } const apiClient = await getApiClient(workspaceKey) const auth = await initAuth(apiClient); // 创建Hono应用实例 const app = new Hono() // 注册CORS中间件 app.use('/*', cors()) // 创建Socket.IO实例 const io = new Server({ cors: { origin: "*", methods: ["GET", "POST"], credentials: true } }) setupSocketIO({io, auth, apiClient}); // 动态加载并运行模板 const runTemplate = () => { try { // 创建基础app实例 const moduleApp = new Hono() // 传入必要参数并初始化应用 const appInstance = httpServer({ apiClient: apiClient, app: moduleApp, moduleDir: './', auth }) // 启动服务器 Deno.serve({ handler: io.handler(async (req) => { return await appInstance.fetch(req) || new Response(null, { status: 404 }); }), port: 8080 }) console.log('应用已启动,监听端口: 8080') } catch (error) { console.error('模板加载失败:', error) } } // 执行模板 runTemplate()