temp
This commit is contained in:
		@@ -1,4 +1,5 @@
 | 
			
		||||
import { app } from './index.ts';
 | 
			
		||||
import '@/modules/dev/add-auth.ts';
 | 
			
		||||
 | 
			
		||||
app.listen(4000, () => {
 | 
			
		||||
  console.log('Server is running on http://localhost:4000');
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,10 @@ import { app, config, oss } from '../app.ts';
 | 
			
		||||
import { dashscopeTTS } from '@/examples/dash-scope/tts.ts';
 | 
			
		||||
import { randomLetter } from '@/utils/random.ts';
 | 
			
		||||
import dayjs from 'dayjs';
 | 
			
		||||
const isAdmin = (tokenUser: any) => {
 | 
			
		||||
  const username = tokenUser?.username || '';
 | 
			
		||||
  return username === 'admin' || username === 'root';
 | 
			
		||||
};
 | 
			
		||||
type DashScopeTTSResponse = {
 | 
			
		||||
  output?: {
 | 
			
		||||
    finish_reason?: string;
 | 
			
		||||
@@ -30,12 +34,27 @@ app
 | 
			
		||||
  .route({
 | 
			
		||||
    path: 'aliyun-ai',
 | 
			
		||||
    key: 'createVideos',
 | 
			
		||||
    middleware: ['auth-can'],
 | 
			
		||||
  })
 | 
			
		||||
  .define(async (ctx) => {
 | 
			
		||||
    const { text, model, save = 'none' } = ctx.query;
 | 
			
		||||
    const tokenUser = ctx.state?.tokenUser;
 | 
			
		||||
    if (!text) {
 | 
			
		||||
      ctx.throw(400, 'Text and model are required parameters');
 | 
			
		||||
      ctx.throw(400, '文字text参数不能为空');
 | 
			
		||||
    }
 | 
			
		||||
    const admin = isAdmin(tokenUser);
 | 
			
		||||
    if (!tokenUser?.id) {
 | 
			
		||||
      if (text.length > 300) {
 | 
			
		||||
        // 大概1分钟
 | 
			
		||||
        ctx.throw(400, '文字长度超过限制,未登录用户最多只能输入300个字符');
 | 
			
		||||
      }
 | 
			
		||||
    } else if (!admin) {
 | 
			
		||||
      if (text.length > 1000) {
 | 
			
		||||
        // 大概3分钟
 | 
			
		||||
        ctx.throw(400, '文字长度超过限制,登录用户最多只能输入1000个字符');
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const value: DashScopeTTSResponse = await dashscopeTTS({
 | 
			
		||||
      text,
 | 
			
		||||
      voice: model || 'Chelsie',
 | 
			
		||||
@@ -43,7 +62,7 @@ app
 | 
			
		||||
    });
 | 
			
		||||
    const url = value?.output?.audio?.url;
 | 
			
		||||
    const fileName = `audio-${randomLetter(32)}.wav`;
 | 
			
		||||
    const username = 'share';
 | 
			
		||||
    const username = tokenUser?.username || 'share';
 | 
			
		||||
    const today = dayjs().format('YYYY-MM-DD');
 | 
			
		||||
    // 使用用户名和日期作为文件夹路径
 | 
			
		||||
    const filePath = `${username}/storage/aliyun-ai/audio/${today}/${fileName}`;
 | 
			
		||||
 
 | 
			
		||||
@@ -38,6 +38,7 @@
 | 
			
		||||
    "lodash-es": "^4.17.21"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@kevisual/ai": "^0.0.8",
 | 
			
		||||
    "@kevisual/context": "^0.0.3",
 | 
			
		||||
    "@kevisual/logger": "^0.0.4",
 | 
			
		||||
    "@kevisual/oss": "^0.0.12",
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										10
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							@@ -30,6 +30,9 @@ importers:
 | 
			
		||||
        specifier: ^4.17.21
 | 
			
		||||
        version: 4.17.21
 | 
			
		||||
    devDependencies:
 | 
			
		||||
      '@kevisual/ai':
 | 
			
		||||
        specifier: ^0.0.8
 | 
			
		||||
        version: 0.0.8
 | 
			
		||||
      '@kevisual/context':
 | 
			
		||||
        specifier: ^0.0.3
 | 
			
		||||
        version: 0.0.3
 | 
			
		||||
@@ -116,6 +119,9 @@ packages:
 | 
			
		||||
    resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
 | 
			
		||||
    engines: {node: '>=12'}
 | 
			
		||||
 | 
			
		||||
  '@kevisual/ai@0.0.8':
 | 
			
		||||
    resolution: {integrity: sha512-MvK4U1iWf8hz7lj/+YBQV3qWRRDy42VH8fInKFVxjpEGPGaxfXOMP73C85T4Cf82OGU/fxOayiR0xLi2SyBTLw==}
 | 
			
		||||
 | 
			
		||||
  '@kevisual/auth@1.0.5':
 | 
			
		||||
    resolution: {integrity: sha512-GwsLj7unKXi7lmMiIIgdig4LwwLiDJnOy15HHZR5gMbyK6s5/uJiMY5RXPB2+onGzTNDqFo/hXjsD2wkerHPVg==}
 | 
			
		||||
 | 
			
		||||
@@ -1349,6 +1355,10 @@ snapshots:
 | 
			
		||||
      wrap-ansi: 8.1.0
 | 
			
		||||
      wrap-ansi-cjs: wrap-ansi@7.0.0
 | 
			
		||||
 | 
			
		||||
  '@kevisual/ai@0.0.8':
 | 
			
		||||
    dependencies:
 | 
			
		||||
      '@kevisual/logger': 0.0.4
 | 
			
		||||
 | 
			
		||||
  '@kevisual/auth@1.0.5': {}
 | 
			
		||||
 | 
			
		||||
  '@kevisual/code-center-module@0.0.23(dotenv@16.6.1)':
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										21
									
								
								src/modules/ai.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								src/modules/ai.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
import { useContextKey } from '@kevisual/context';
 | 
			
		||||
import { BailianProvider } from '@kevisual/ai';
 | 
			
		||||
import { config } from './config.ts';
 | 
			
		||||
 | 
			
		||||
const createBaiLian = () => {
 | 
			
		||||
  return new BailianProvider({
 | 
			
		||||
    baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1',
 | 
			
		||||
    model: 'qwen3-235b-a22b',
 | 
			
		||||
    apiKey: config.BAILIAN_API_KEY,
 | 
			
		||||
  });
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const ai = useContextKey('ai', createBaiLian());
 | 
			
		||||
 | 
			
		||||
export const bailianModel = useContextKey('bailianModel', () => {
 | 
			
		||||
  return {
 | 
			
		||||
    turbo: 'qwen-turbo-2025-04-28',
 | 
			
		||||
    plus: 'qwen-plus-2025-04-28',
 | 
			
		||||
    a22b235: 'qwen3-235b-a22b',
 | 
			
		||||
  };
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										27
									
								
								src/modules/dev/add-auth.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/modules/dev/add-auth.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
import { useContextKey } from '@kevisual/context';
 | 
			
		||||
import { App } from '@kevisual/router';
 | 
			
		||||
const app = await useContextKey<App>('app');
 | 
			
		||||
 | 
			
		||||
app
 | 
			
		||||
  .route({
 | 
			
		||||
    path: 'auth',
 | 
			
		||||
    key: '',
 | 
			
		||||
    id: 'auth',
 | 
			
		||||
    description: '验证token,不存在拒绝',
 | 
			
		||||
  })
 | 
			
		||||
  .define(async (ctx) => {
 | 
			
		||||
    //
 | 
			
		||||
  })
 | 
			
		||||
  .addTo(app);
 | 
			
		||||
 | 
			
		||||
app
 | 
			
		||||
  .route({
 | 
			
		||||
    path: 'auth',
 | 
			
		||||
    key: 'can',
 | 
			
		||||
    id: 'auth-can',
 | 
			
		||||
    description: '如果是登陆的设置tokenUser,否者为null',
 | 
			
		||||
  })
 | 
			
		||||
  .define(async (ctx) => {
 | 
			
		||||
    //
 | 
			
		||||
  })
 | 
			
		||||
  .addTo(app);
 | 
			
		||||
@@ -3,4 +3,5 @@ import { useContextKey } from '@kevisual/context';
 | 
			
		||||
const init = () => {
 | 
			
		||||
  return new App();
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export const app = useContextKey('app', init);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
import { sequelize, User, UserInit, Org, OrgInit } from '@kevisual/code-center-module';
 | 
			
		||||
import { User, UserInit, Org, OrgInit } from '@kevisual/code-center-module/src/core-models.ts';
 | 
			
		||||
 | 
			
		||||
export { sequelize, User, UserInit, Org, OrgInit };
 | 
			
		||||
export { User, UserInit, Org, OrgInit };
 | 
			
		||||
 | 
			
		||||
export const init = () => {
 | 
			
		||||
  UserInit();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user