Skip to content

Commit 4af4f65

Browse files
committed
update tsrest code (#5755)
* doc * update tsrest code
1 parent 6758199 commit 4af4f65

File tree

23 files changed

+743
-39
lines changed

23 files changed

+743
-39
lines changed

document/content/docs/upgrading/4-13/4132.mdx

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,8 @@ S3_PUBLIC_BUCKET=S3公开桶名称(公开读私有写)
3434

3535
## 🔨 插件更新
3636

37-
1. 新增:Perplexity search 工具。
38-
2. 新增:Base64转文件工具。
39-
3. 新增:MiniMax TTS 文件生成工具。
40-
4. 新增:Openrouter nano banana 绘图工具。
41-
5. 新增:Redis 缓存操作工具。
42-
6. 新增:Tavily search 工具。
43-
7. 新增:硅基流动 qwen-image 和 qwen-image-edit 工具。
44-
8. 新增:飞书多维表格操作套件。
45-
9. 新增:Youtube 字幕提取。
46-
10. 新增:阿里百炼 qwen image edit。
47-
11. 新增:Markdown 转 PPT 工具。
48-
12. 新增:whisper 语音转文字工具。
49-
13. 系统工具支持配置是否需要在 Worker 中运行。
37+
1. Perplexity search 工具。
38+
2. Base64转文件工具。
39+
3. MiniMax TTS 文件生成工具。
40+
4. Openrouter nano banana 绘图工具。
41+
5. 系统工具支持配置是否需要在 Worker 中运行。
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { initClient } from '@ts-rest/core';
2+
import { fastgptContract } from './contracts';
3+
4+
export function createFastGPTClient(options: {
5+
baseUrl: string;
6+
baseHeaders?: Record<string, string>;
7+
api?: any;
8+
credentials?: RequestCredentials;
9+
throwOnUnknownStatus?: boolean;
10+
validateResponse?: boolean;
11+
}) {
12+
return initClient(fastgptContract, options);
13+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { settingContract } from './setting';
2+
import { initContract } from '@ts-rest/core';
3+
const c = initContract();
4+
5+
export const chatContract = c.router({
6+
setting: settingContract
7+
});
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
import z from 'zod';
2+
import {
3+
ChatSettingResponseSchema,
4+
ChatSettingSchema
5+
} from '../../../../../../core/chat/setting/type';
6+
import { ChatFavouriteAppResponseItemSchema } from '../../../../../../core/chat/favouriteApp/type';
7+
import { ObjectIdSchema } from '../../../../../type';
8+
import { initContract } from '@ts-rest/core';
9+
10+
const c = initContract();
11+
const favouriteContract = c.router({
12+
list: {
13+
path: '/proApi/core/chat/setting/favourite/list',
14+
method: 'GET',
15+
query: z.object({
16+
name: z.string().optional().openapi({ example: 'FastGPT' }),
17+
tag: z.string().optional().openapi({ example: 'i7Ege2W2' })
18+
}),
19+
responses: {
20+
200: z.array(ChatFavouriteAppResponseItemSchema)
21+
},
22+
metadata: {
23+
tags: ['chat']
24+
},
25+
description: '获取精选应用列表',
26+
summary: '获取精选应用列表'
27+
},
28+
update: {
29+
path: '/proApi/core/chat/setting/favourite/update',
30+
method: 'PUT',
31+
body: z.array(
32+
z.object({
33+
appId: z.string(),
34+
order: z.number()
35+
})
36+
),
37+
responses: {
38+
200: z.void()
39+
},
40+
metadata: {
41+
tags: ['chat']
42+
},
43+
description: '更新精选应用',
44+
summary: '更新精选应用'
45+
},
46+
delete: {
47+
path: '/proApi/core/chat/setting/favourite/delete',
48+
method: 'DELETE',
49+
query: z.object({
50+
id: ObjectIdSchema
51+
}),
52+
responses: {
53+
200: z.void()
54+
},
55+
metadata: {
56+
tags: ['chat']
57+
},
58+
description: '删除精选应用',
59+
summary: '删除精选应用'
60+
},
61+
order: {
62+
path: '/proApi/core/chat/setting/favourite/order',
63+
method: 'PUT',
64+
body: z.array(
65+
z.object({
66+
id: ObjectIdSchema,
67+
order: z.number()
68+
})
69+
),
70+
responses: {
71+
200: z.void()
72+
},
73+
metadata: {
74+
tags: ['chat']
75+
},
76+
description: '更新精选应用顺序',
77+
summary: '更新精选应用顺序'
78+
},
79+
tags: {
80+
path: '/proApi/core/chat/setting/favourite/tags',
81+
method: 'PUT',
82+
body: z.array(
83+
z.object({
84+
id: z.string(),
85+
tags: z.array(z.string())
86+
})
87+
),
88+
responses: {
89+
200: z.void()
90+
},
91+
metadata: {
92+
tags: ['chat']
93+
},
94+
description: '更新精选应用标签',
95+
summary: '更新精选应用标签'
96+
}
97+
});
98+
99+
export const settingContract = c.router({
100+
favourite: favouriteContract,
101+
102+
detail: {
103+
path: '/proApi/core/chat/setting/detail',
104+
method: 'GET',
105+
responses: {
106+
200: ChatSettingResponseSchema
107+
},
108+
metadata: {
109+
tags: ['chat']
110+
},
111+
description: '获取聊天设置',
112+
summary: '获取聊天设置'
113+
},
114+
update: {
115+
path: '/proApi/core/chat/setting/update',
116+
method: 'PUT',
117+
body: ChatSettingSchema.partial(),
118+
responses: {
119+
200: z.void()
120+
},
121+
metadata: {
122+
tags: ['chat']
123+
},
124+
description: '更新聊天设置',
125+
summary: '更新聊天设置'
126+
}
127+
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { initContract } from '@ts-rest/core';
2+
import { chatContract } from './chat';
3+
const c = initContract();
4+
5+
export const coreContract = c.router({
6+
chat: chatContract
7+
});
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { initContract } from '@ts-rest/core';
2+
import { coreContract } from './core';
3+
import { supportContract } from './support';
4+
5+
const c = initContract();
6+
7+
export const fastgptContract = c.router({
8+
core: coreContract,
9+
support: supportContract
10+
});
11+
12+
export type FadtGPTContractType = typeof fastgptContract;
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { userContract } from './user';
2+
import { initContract } from '@ts-rest/core';
3+
const c = initContract();
4+
5+
export const supportContract = c.router({
6+
user: userContract
7+
});
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { initContract } from '@ts-rest/core';
2+
import z from 'zod';
3+
const c = initContract();
4+
5+
export const accountContract = c.router({
6+
logout: {
7+
path: '/support/user/account/login',
8+
method: 'POST',
9+
body: z.undefined(),
10+
responses: {
11+
200: z.void()
12+
},
13+
metadata: {
14+
tags: ['support']
15+
},
16+
description: '退出登录',
17+
summary: '退出登录'
18+
}
19+
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { accountContract } from './account';
2+
import { initContract } from '@ts-rest/core';
3+
const c = initContract();
4+
5+
export const userContract = c.router({
6+
account: accountContract
7+
});
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { fastgptContract, type FadtGPTContractType } from './contracts';
2+
import { generateOpenApi } from '@ts-rest/open-api';
3+
4+
const hasCustomTags = (metadata: unknown): metadata is { tags: string[] } => {
5+
return !!metadata && typeof metadata === 'object' && 'tags' in metadata;
6+
};
7+
8+
type OpenAPIObject = ReturnType<typeof generateOpenApi>;
9+
function generateOpenApiDocument(c: FadtGPTContractType): OpenAPIObject {
10+
return generateOpenApi(
11+
c,
12+
{
13+
info: {
14+
title: 'FastGPT OpenAPI',
15+
version: '4.13.2',
16+
description: 'FastGPT OpenAPI'
17+
},
18+
servers: [{ url: '/api' }]
19+
},
20+
{
21+
operationMapper(operation, appRoute) {
22+
return {
23+
...operation,
24+
...(hasCustomTags(appRoute.metadata)
25+
? {
26+
tags: appRoute.metadata.tags
27+
}
28+
: {})
29+
};
30+
},
31+
setOperationId: false
32+
}
33+
);
34+
}
35+
36+
export const fastgptOpenApiDocument = generateOpenApiDocument(fastgptContract);

0 commit comments

Comments
 (0)