@catchmexz/fedin-vibe-mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +202 -0
  2. package/dist/common/errors.js +69 -0
  3. package/dist/common/modularTemplates.js +483 -0
  4. package/dist/common/pipelineTemplates.js +19 -0
  5. package/dist/common/types.js +42 -0
  6. package/dist/common/utils.js +347 -0
  7. package/dist/common/version.js +1 -0
  8. package/dist/index.js +217 -0
  9. package/dist/operations/appstack/appOrchestrations.js +235 -0
  10. package/dist/operations/appstack/appTags.js +147 -0
  11. package/dist/operations/appstack/appTemplates.js +67 -0
  12. package/dist/operations/appstack/applications.js +154 -0
  13. package/dist/operations/appstack/changeOrders.js +293 -0
  14. package/dist/operations/appstack/changeRequests.js +263 -0
  15. package/dist/operations/appstack/deploymentResources.js +265 -0
  16. package/dist/operations/appstack/globalVars.js +200 -0
  17. package/dist/operations/appstack/releaseWorkflows.js +178 -0
  18. package/dist/operations/appstack/variableGroups.js +216 -0
  19. package/dist/operations/codeup/branches.js +144 -0
  20. package/dist/operations/codeup/changeRequestComments.js +89 -0
  21. package/dist/operations/codeup/changeRequests.js +203 -0
  22. package/dist/operations/codeup/compare.js +26 -0
  23. package/dist/operations/codeup/files.js +483 -0
  24. package/dist/operations/codeup/repositories.js +83 -0
  25. package/dist/operations/codeup/types.js +372 -0
  26. package/dist/operations/flow/hostGroup.js +48 -0
  27. package/dist/operations/flow/pipeline.js +530 -0
  28. package/dist/operations/flow/pipelineJob.js +113 -0
  29. package/dist/operations/flow/serviceConnection.js +23 -0
  30. package/dist/operations/flow/types.js +377 -0
  31. package/dist/operations/git/git-repository.js +334 -0
  32. package/dist/operations/git/index.js +210 -0
  33. package/dist/operations/organization/members.js +94 -0
  34. package/dist/operations/organization/organization.js +73 -0
  35. package/dist/operations/organization/types.js +111 -0
  36. package/dist/operations/packages/artifacts.js +64 -0
  37. package/dist/operations/packages/repositories.js +35 -0
  38. package/dist/operations/packages/types.js +56 -0
  39. package/dist/operations/projex/project.js +206 -0
  40. package/dist/operations/projex/sprint.js +90 -0
  41. package/dist/operations/projex/types.js +390 -0
  42. package/dist/operations/projex/workitem.js +452 -0
  43. package/dist/tool-handlers/appstack-change-orders.js +55 -0
  44. package/dist/tool-handlers/appstack-change-requests.js +49 -0
  45. package/dist/tool-handlers/appstack-deployment-resources.js +43 -0
  46. package/dist/tool-handlers/appstack-global-vars.js +43 -0
  47. package/dist/tool-handlers/appstack-orchestrations.js +49 -0
  48. package/dist/tool-handlers/appstack-tags.js +43 -0
  49. package/dist/tool-handlers/appstack-templates.js +19 -0
  50. package/dist/tool-handlers/appstack-variable-groups.js +55 -0
  51. package/dist/tool-handlers/appstack.js +37 -0
  52. package/dist/tool-handlers/code-management.js +174 -0
  53. package/dist/tool-handlers/git/branch-operations.js +1 -0
  54. package/dist/tool-handlers/git/clone-repository.js +36 -0
  55. package/dist/tool-handlers/git/create-branch.js +26 -0
  56. package/dist/tool-handlers/git/get-repository-status.js +33 -0
  57. package/dist/tool-handlers/git/pull-repository.js +27 -0
  58. package/dist/tool-handlers/git/push-repository.js +37 -0
  59. package/dist/tool-handlers/git/switch-branch.js +25 -0
  60. package/dist/tool-handlers/index.js +43 -0
  61. package/dist/tool-handlers/organization.js +90 -0
  62. package/dist/tool-handlers/packages.js +32 -0
  63. package/dist/tool-handlers/pipeline.js +272 -0
  64. package/dist/tool-handlers/project-management.js +152 -0
  65. package/dist/tool-handlers/service-connections.js +16 -0
  66. package/dist/tool-registry/appstack-change-orders.js +40 -0
  67. package/dist/tool-registry/appstack-change-requests.js +35 -0
  68. package/dist/tool-registry/appstack-deployment-resources.js +30 -0
  69. package/dist/tool-registry/appstack-global-vars.js +30 -0
  70. package/dist/tool-registry/appstack-orchestrations.js +35 -0
  71. package/dist/tool-registry/appstack-tags.js +30 -0
  72. package/dist/tool-registry/appstack-templates.js +10 -0
  73. package/dist/tool-registry/appstack-variable-groups.js +40 -0
  74. package/dist/tool-registry/appstack.js +25 -0
  75. package/dist/tool-registry/code-management.js +89 -0
  76. package/dist/tool-registry/git-repository.js +41 -0
  77. package/dist/tool-registry/index.js +6 -0
  78. package/dist/tool-registry/organization.js +65 -0
  79. package/dist/tool-registry/packages.js +21 -0
  80. package/dist/tool-registry/pipeline.js +157 -0
  81. package/dist/tool-registry/project-management.js +108 -0
  82. package/dist/tool-registry/service-connections.js +10 -0
  83. package/package.json +39 -0
@@ -0,0 +1,235 @@
1
+ import { z } from 'zod';
2
+ import { yunxiaoRequest, buildUrl } from '../../common/utils.js';
3
+ // Define the referenced schemas based on their usage
4
+ // Since we can't find the full definitions, we'll create simplified versions
5
+ const AppSchema = z.object({
6
+ name: z.string().optional().describe("应用名称"),
7
+ }).describe("应用");
8
+ const OrchestrationRevisionSchema = z.object({
9
+ author: z.string().nullable().optional().describe("作者"),
10
+ commitTime: z.union([z.number(), z.string()]).nullable().optional().describe("提交时间"),
11
+ message: z.string().nullable().optional().describe("提交信息"),
12
+ sha: z.string().nullable().optional().describe("提交SHA"),
13
+ }).describe("编排版本");
14
+ const AppOrchestrationSchema = z.object({
15
+ app: AppSchema.optional().describe("应用"),
16
+ creatorId: z.string().nullable().optional().describe("创建人ID"),
17
+ description: z.string().nullable().optional().describe("描述"),
18
+ format: z.enum(["MANIFEST", "HELM_CHARTS"]).nullable().optional().describe("格式"),
19
+ gmtCreate: z.string().nullable().optional().describe("创建时间"),
20
+ gmtModified: z.string().nullable().optional().describe("修改时间"),
21
+ modifierId: z.string().nullable().optional().describe("修改人ID"),
22
+ name: z.string().nullable().optional().describe("名称"),
23
+ revision: OrchestrationRevisionSchema.nullable().optional().describe("版本"),
24
+ sn: z.string().nullable().optional().describe("序列号"),
25
+ storageType: z.enum(["BUILTIN", "EXTERNAL"]).nullable().optional().describe("存储类型"),
26
+ suitableResourceTypes: z.array(z.enum(["KUBERNETES", "HOST", "BePending"])).nullable().optional().describe("适用资源类型"),
27
+ type: z.string().nullable().optional().describe("类型"),
28
+ }).describe("应用编排");
29
+ const AppBuiltInOrchestrationSchema = AppOrchestrationSchema.extend({
30
+ componentList: z.array(z.object({}).passthrough()).nullable().optional().describe("组件列表"),
31
+ groupNameMap: z.record(z.string()).nullable().optional().describe("组名映射"),
32
+ labelList: z.array(z.object({}).passthrough()).nullable().optional().describe("标签列表"),
33
+ labelPolicy: z.string().nullable().optional().describe("标签策略"),
34
+ placeholderList: z.array(z.object({}).passthrough()).nullable().optional().describe("占位符列表"),
35
+ syncSourceTemplate: z.object({}).passthrough().nullable().optional().describe("同步源模板"),
36
+ }).describe("应用内置编排");
37
+ const AppExternalCodeupOrchestrationSchema = AppOrchestrationSchema.extend({
38
+ datasource: z.object({}).passthrough().optional().describe("Codeup数据源"),
39
+ }).describe("外置Codeup应用编排");
40
+ const AppExternalGitlabOrchestrationSchema = AppOrchestrationSchema.extend({
41
+ datasource: z.object({}).passthrough().optional().describe("Gitlab数据源"),
42
+ }).describe("外置GitLab应用编排");
43
+ // Schema for the GetLatestOrchestration API
44
+ export const GetLatestOrchestrationRequestSchema = z.object({
45
+ organizationId: z.string().describe("组织ID"),
46
+ appName: z.string().describe("应用名"),
47
+ envName: z.string().describe("环境名"),
48
+ });
49
+ export const GetLatestOrchestrationResponseSchema = z.union([
50
+ AppBuiltInOrchestrationSchema,
51
+ AppExternalCodeupOrchestrationSchema,
52
+ AppExternalGitlabOrchestrationSchema
53
+ ]);
54
+ // Schema for the ListAppOrchestration API
55
+ export const ListAppOrchestrationRequestSchema = z.object({
56
+ organizationId: z.string().describe("组织ID"),
57
+ appName: z.string().describe("应用名"),
58
+ });
59
+ export const ListAppOrchestrationResponseSchema = z.object({
60
+ current: z.number().describe("当前页数"),
61
+ pageSize: z.number().describe("每页大小"),
62
+ pages: z.number().describe("总页数"),
63
+ records: z.array(z.union([
64
+ AppBuiltInOrchestrationSchema,
65
+ AppExternalCodeupOrchestrationSchema,
66
+ AppExternalGitlabOrchestrationSchema
67
+ ])).describe("数据列表"),
68
+ total: z.number().describe("总数"),
69
+ });
70
+ // Schema for the CreateAppOrchestration API
71
+ export const CreateAppOrchestrationRequestSchema = z.object({
72
+ organizationId: z.string().describe("组织ID"),
73
+ appName: z.string().describe("应用名"),
74
+ templateId: z.string().describe("编排模板 ID"),
75
+ templateType: z.enum(["PREDEFINED", "ORG"]).describe("编排模板类型"),
76
+ });
77
+ export const CreateAppOrchestrationResponseSchema = z.union([
78
+ AppBuiltInOrchestrationSchema,
79
+ AppExternalCodeupOrchestrationSchema,
80
+ AppExternalGitlabOrchestrationSchema
81
+ ]);
82
+ // Schema for the DeleteAppOrchestration API
83
+ export const DeleteAppOrchestrationRequestSchema = z.object({
84
+ organizationId: z.string().describe("组织ID"),
85
+ appName: z.string().describe("应用名"),
86
+ sn: z.string().describe("应用编排唯一序列号"),
87
+ });
88
+ export const DeleteAppOrchestrationResponseSchema = z.boolean().describe("调用是否成功");
89
+ // Schema for the GetAppOrchestration API
90
+ export const GetAppOrchestrationRequestSchema = z.object({
91
+ organizationId: z.string().describe("组织ID"),
92
+ appName: z.string().describe("应用名"),
93
+ sn: z.string().describe("应用编排唯一序列号,未指定 tag 和 sha 时将查找最新版本"),
94
+ tagName: z.string().optional().describe("编排 tag"),
95
+ sha: z.string().optional().describe("编排 commit sha"),
96
+ });
97
+ export const GetAppOrchestrationResponseSchema = z.union([
98
+ AppBuiltInOrchestrationSchema,
99
+ AppExternalCodeupOrchestrationSchema,
100
+ AppExternalGitlabOrchestrationSchema
101
+ ]);
102
+ // Schema for the UpdateAppOrchestration API
103
+ export const UpdateAppOrchestrationRequestSchema = z.object({
104
+ organizationId: z.string().describe("组织ID"),
105
+ appName: z.string().describe("应用名"),
106
+ sn: z.string().describe("应用编排唯一序列号"),
107
+ branchName: z.enum(["master"]).optional().describe("本次提交的编排分支,不填写则使用默认主干"),
108
+ commitMessage: z.string().optional().describe("本次提交的描述信息"),
109
+ description: z.string().optional().describe("编排描述"),
110
+ fromRevisionSha: z.string().optional().describe("本次提交的基线版本 SHA 值"),
111
+ name: z.string().describe("编排名"),
112
+ spec: z.object({}).passthrough().optional().describe("编排规范"),
113
+ });
114
+ export const UpdateAppOrchestrationResponseSchema = z.union([
115
+ AppBuiltInOrchestrationSchema,
116
+ AppExternalCodeupOrchestrationSchema,
117
+ AppExternalGitlabOrchestrationSchema
118
+ ]);
119
+ /**
120
+ * Get the latest orchestration for an environment
121
+ *
122
+ * @param params - The request parameters
123
+ * @returns The latest orchestration
124
+ */
125
+ export async function getLatestOrchestration(params) {
126
+ const { organizationId, appName, envName } = params;
127
+ try {
128
+ const response = await yunxiaoRequest(`/oapi/v1/appstack/organizations/${organizationId}/apps/${appName}/envs/${envName}/orchestration:latestAvailable`, {
129
+ method: 'GET',
130
+ });
131
+ return GetLatestOrchestrationResponseSchema.parse(response);
132
+ }
133
+ catch (error) {
134
+ throw error;
135
+ }
136
+ }
137
+ /**
138
+ * List application orchestrations
139
+ *
140
+ * @param params - The request parameters
141
+ * @returns The list of application orchestrations
142
+ */
143
+ export async function listAppOrchestration(params) {
144
+ const { organizationId, appName } = params;
145
+ try {
146
+ const response = await yunxiaoRequest(`/oapi/v1/appstack/organizations/${organizationId}/apps/${appName}/orchestrations`, {
147
+ method: 'GET',
148
+ });
149
+ return ListAppOrchestrationResponseSchema.parse(response);
150
+ }
151
+ catch (error) {
152
+ throw error;
153
+ }
154
+ }
155
+ /**
156
+ * Create an application orchestration
157
+ *
158
+ * @param params - The request parameters
159
+ * @returns The created application orchestration
160
+ */
161
+ export async function createAppOrchestration(params) {
162
+ const { organizationId, appName, ...body } = params;
163
+ try {
164
+ const response = await yunxiaoRequest(`/oapi/v1/appstack/organizations/${organizationId}/apps/${appName}/orchestrations`, {
165
+ method: 'POST',
166
+ body: body,
167
+ });
168
+ return CreateAppOrchestrationResponseSchema.parse(response);
169
+ }
170
+ catch (error) {
171
+ throw error;
172
+ }
173
+ }
174
+ /**
175
+ * Delete an application orchestration
176
+ *
177
+ * @param params - The request parameters
178
+ * @returns Whether the deletion was successful
179
+ */
180
+ export async function deleteAppOrchestration(params) {
181
+ const { organizationId, appName, sn } = params;
182
+ try {
183
+ const response = await yunxiaoRequest(`/oapi/v1/appstack/organizations/${organizationId}/apps/${appName}/orchestrations/${sn}`, {
184
+ method: 'DELETE',
185
+ });
186
+ return DeleteAppOrchestrationResponseSchema.parse(response);
187
+ }
188
+ catch (error) {
189
+ throw error;
190
+ }
191
+ }
192
+ /**
193
+ * Get an application orchestration
194
+ *
195
+ * @param params - The request parameters
196
+ * @returns The application orchestration
197
+ */
198
+ export async function getAppOrchestration(params) {
199
+ const { organizationId, appName, sn, tagName, sha } = params;
200
+ // Build query string properly
201
+ const query = {};
202
+ if (tagName)
203
+ query.tagName = tagName;
204
+ if (sha)
205
+ query.sha = sha;
206
+ try {
207
+ const url = buildUrl(`/oapi/v1/appstack/organizations/${organizationId}/apps/${appName}/orchestrations/${sn}`, query);
208
+ const response = await yunxiaoRequest(url, {
209
+ method: 'GET',
210
+ });
211
+ return GetAppOrchestrationResponseSchema.parse(response);
212
+ }
213
+ catch (error) {
214
+ throw error;
215
+ }
216
+ }
217
+ /**
218
+ * Update an application orchestration
219
+ *
220
+ * @param params - The request parameters
221
+ * @returns The updated application orchestration
222
+ */
223
+ export async function updateAppOrchestration(params) {
224
+ const { organizationId, appName, sn, ...body } = params;
225
+ try {
226
+ const response = await yunxiaoRequest(`/oapi/v1/appstack/organizations/${organizationId}/apps/${appName}/orchestrations/${sn}`, {
227
+ method: 'PUT',
228
+ body: body,
229
+ });
230
+ return UpdateAppOrchestrationResponseSchema.parse(response);
231
+ }
232
+ catch (error) {
233
+ throw error;
234
+ }
235
+ }
@@ -0,0 +1,147 @@
1
+ import { z } from 'zod';
2
+ import { yunxiaoRequest, buildUrl } from '../../common/utils.js';
3
+ // Schema for the CreateAppTag API
4
+ export const CreateAppTagRequestSchema = z.object({
5
+ organizationId: z.string().describe("组织ID"),
6
+ name: z.string().describe("应用标签名称"),
7
+ color: z.string().describe("标签颜色:#66acab 蓝绿色, #7b9ab4 蓝灰色, #698cd4 明亮的蓝色, #4676e5 强烈的蓝色, #5c68c1 深蓝紫色, #9f76dA 紫色, #6bAe3f 绿色, #ae9e6b 土黄色, #a7bc60 浅绿, #ae785e 棕色, #eb933e 橙色, #d75644 红色"),
8
+ });
9
+ export const CreateAppTagResponseSchema = z.object({
10
+ frontendStyle: z.string().describe("样式,目前仅含颜色"),
11
+ name: z.string().describe("应用标签名称"),
12
+ });
13
+ // Schema for the UpdateAppTag API
14
+ export const UpdateAppTagRequestSchema = z.object({
15
+ organizationId: z.string().describe("组织ID"),
16
+ name: z.string().describe("应用标签名称"),
17
+ newName: z.string().describe("要修改为的新的应用标签名称,如无需修改,请确保与原name相同"),
18
+ color: z.string().optional().describe("应用标签颜色:#66acab 蓝绿色, #7b9ab4 蓝灰色, #698cd4 明亮的蓝色, #4676e5 强烈的蓝色, #5c68c1 深蓝紫色, #9f76dA 紫色, #6bAe3f 绿色, #ae9e6b 土黄色, #a7bc60 浅绿, #ae785e 棕色, #eb933e 橙色, #d75644 红色。若不填写则保持原有颜色不变"),
19
+ });
20
+ export const UpdateAppTagResponseSchema = z.object({
21
+ frontendStyle: z.string().describe("样式,目前仅含颜色"),
22
+ name: z.string().describe("应用标签名称"),
23
+ });
24
+ // Schema for the DeleteAppTag API
25
+ export const DeleteAppTagRequestSchema = z.object({
26
+ organizationId: z.string().describe("组织ID"),
27
+ name: z.string().describe("应用标签名称"),
28
+ });
29
+ // Schema for the SearchAppTag API
30
+ export const SearchAppTagRequestSchema = z.object({
31
+ organizationId: z.string().describe("组织ID"),
32
+ current: z.number().optional().describe("页数,从1开始。默认值为1"),
33
+ pageSize: z.number().optional().describe("本页返回的数量,默认值为10"),
34
+ orderBy: z.string().optional().describe("排序方式,支持tagName和id,默认为id"),
35
+ sort: z.string().optional().describe("排序方式,支持asc和desc,默认为desc"),
36
+ search: z.string().optional().describe("应用标签名称的模糊搜索"),
37
+ });
38
+ export const SearchAppTagResponseSchema = z.object({
39
+ total: z.number().describe("当前搜索条件下的总数"),
40
+ data: z.array(z.object({
41
+ frontendStyle: z.string().optional().describe("样式,目前仅含颜色"),
42
+ name: z.string().optional().describe("应用标签名称"),
43
+ })).describe("返回的应用标签列表"),
44
+ });
45
+ // Schema for the UpdateAppTagBind API
46
+ export const UpdateAppTagBindRequestSchema = z.object({
47
+ organizationId: z.string().describe("组织ID"),
48
+ appName: z.string().describe("应用名"),
49
+ tagNames: z.array(z.string()).describe("要绑定的应用标签名称列表。注意:tagNames中不存在的应用标签将被忽略。如果tagNames中的所有应用标签都不存在,或者tagNames为空数组,则会清空当前应用的应用标签列表"),
50
+ });
51
+ /**
52
+ * Create an application tag
53
+ *
54
+ * @param params - The request parameters
55
+ * @returns The created tag details
56
+ */
57
+ export async function createAppTag(params) {
58
+ const { organizationId, ...body } = params;
59
+ try {
60
+ const response = await yunxiaoRequest(`/oapi/v1/appstack/organizations/${organizationId}/appTags`, {
61
+ method: 'POST',
62
+ body: body,
63
+ });
64
+ return CreateAppTagResponseSchema.parse(response);
65
+ }
66
+ catch (error) {
67
+ throw error;
68
+ }
69
+ }
70
+ /**
71
+ * Update an application tag
72
+ *
73
+ * @param params - The request parameters
74
+ * @returns The updated tag details
75
+ */
76
+ export async function updateAppTag(params) {
77
+ const { organizationId, name, ...body } = params;
78
+ try {
79
+ const response = await yunxiaoRequest(`/oapi/v1/appstack/organizations/${organizationId}/appTags/updateTag?name=${name}`, {
80
+ method: 'PUT',
81
+ body: body,
82
+ });
83
+ return UpdateAppTagResponseSchema.parse(response);
84
+ }
85
+ catch (error) {
86
+ throw error;
87
+ }
88
+ }
89
+ /**
90
+ * Delete an application tag
91
+ *
92
+ * @param params - The request parameters
93
+ */
94
+ export async function deleteAppTag(params) {
95
+ const { organizationId, name } = params;
96
+ try {
97
+ await yunxiaoRequest(`/oapi/v1/appstack/organizations/${organizationId}/appTags/deleteTag?name=${name}`, {
98
+ method: 'DELETE',
99
+ });
100
+ }
101
+ catch (error) {
102
+ throw error;
103
+ }
104
+ }
105
+ /**
106
+ * Search application tags
107
+ *
108
+ * @param params - The request parameters
109
+ * @returns The search results
110
+ */
111
+ export async function searchAppTag(params) {
112
+ const { organizationId, current, pageSize, ...body } = params;
113
+ // Build query string properly
114
+ const query = {};
115
+ if (current)
116
+ query.current = current;
117
+ if (pageSize)
118
+ query.pageSize = pageSize;
119
+ try {
120
+ const url = buildUrl(`/oapi/v1/appstack/organizations/${organizationId}/appTags:search`, query);
121
+ const response = await yunxiaoRequest(url, {
122
+ method: 'POST',
123
+ body: body,
124
+ });
125
+ return SearchAppTagResponseSchema.parse(response);
126
+ }
127
+ catch (error) {
128
+ throw error;
129
+ }
130
+ }
131
+ /**
132
+ * Update application tag bindings
133
+ *
134
+ * @param params - The request parameters
135
+ */
136
+ export async function updateAppTagBind(params) {
137
+ const { organizationId, appName, ...body } = params;
138
+ try {
139
+ await yunxiaoRequest(`/oapi/v1/appstack/organizations/${organizationId}/apps/${appName}/appTags`, {
140
+ method: 'PUT',
141
+ body: body,
142
+ });
143
+ }
144
+ catch (error) {
145
+ throw error;
146
+ }
147
+ }
@@ -0,0 +1,67 @@
1
+ import { z } from 'zod';
2
+ import { yunxiaoRequest, buildUrl } from '../../common/utils.js';
3
+ // Schema for the SearchAppTemplates API
4
+ export const SearchAppTemplatesRequestSchema = z.object({
5
+ organizationId: z.string().describe("组织ID"),
6
+ pagination: z.enum(['keyset']).optional().default('keyset').describe("分页模式参数,目前只支持键集分页 keyset 模式"),
7
+ perPage: z.number().optional().describe("分页尺寸参数,决定一页最多返回多少对象"),
8
+ orderBy: z.enum(['id', 'gmtCreate']).optional().default('id').describe("分页排序属性,决定根据何种属性进行记录排序;推荐在实现严格遍历时,使用 id 属性"),
9
+ sort: z.enum(['asc', 'desc']).optional().default('asc').describe("分页排序升降序,asc 为升序,desc 为降序;推荐在实现严格遍历时,使用升序"),
10
+ nextToken: z.string().optional().describe("键集分页 token,获取第一页数据时无需传入,否则需要传入前一页查询结果中的 nextToken 字段"),
11
+ displayNameKeyword: z.string().optional().describe("按展示名进行模糊搜索的关键字"),
12
+ page: z.number().optional().default(1).describe("页码分页时使用,用于获取下一页内容"),
13
+ });
14
+ export const SearchAppTemplatesResponseSchema = z.object({
15
+ current: z.number().optional().nullable().describe("页码分页时存在该字段,表示当前页"),
16
+ data: z.array(z.object({
17
+ cover: z.string().nullable().optional().describe("应用模板封面"),
18
+ creatorId: z.string().nullable().optional().describe("应用模板创建人"),
19
+ description: z.string().nullable().optional().describe("应用模板描述"),
20
+ displayName: z.string().nullable().optional().describe("应用模板展示名称"),
21
+ gmtCreate: z.string().nullable().optional().describe("应用模板创建时间"),
22
+ gmtModified: z.string().nullable().optional().describe("应用模板修改时间"),
23
+ modifierId: z.string().nullable().optional().describe("应用模板修改人"),
24
+ name: z.string().nullable().optional().describe("应用模板名称"),
25
+ type: z.enum(['CUSTOMIZE', 'PRESET']).nullable().optional().describe("应用模板类型"),
26
+ })).describe("分页结果数据"),
27
+ nextToken: z.string().nullable().optional().describe("采用键值分页时存在该字段,用于传给分页接口,迭代获取下一页数据"),
28
+ pages: z.number().nullable().optional().describe("页码分页时存在该字段,表示总页数"),
29
+ perPage: z.number().nullable().optional().describe("页码分页时存在该字段,表示每页大小"),
30
+ total: z.number().nullable().optional().describe("页码分页时存在该字段,表示结果总数"),
31
+ });
32
+ /**
33
+ * Search application templates
34
+ *
35
+ * @param params - The request parameters
36
+ * @returns The list of application templates
37
+ */
38
+ export async function searchAppTemplates(params) {
39
+ const { organizationId, ...queryParams } = params;
40
+ // Build query string properly
41
+ const query = {};
42
+ if (queryParams.pagination)
43
+ query.pagination = queryParams.pagination;
44
+ if (queryParams.perPage)
45
+ query.perPage = queryParams.perPage;
46
+ if (queryParams.orderBy)
47
+ query.orderBy = queryParams.orderBy;
48
+ if (queryParams.sort)
49
+ query.sort = queryParams.sort;
50
+ if (queryParams.nextToken)
51
+ query.nextToken = queryParams.nextToken;
52
+ if (queryParams.displayNameKeyword)
53
+ query.displayNameKeyword = queryParams.displayNameKeyword;
54
+ if (queryParams.page)
55
+ query.page = queryParams.page;
56
+ try {
57
+ // Build the full URL with query parameters
58
+ const url = buildUrl(`/oapi/v1/appstack/organizations/${organizationId}/appTemplates:search`, query);
59
+ const response = await yunxiaoRequest(url, {
60
+ method: 'GET',
61
+ });
62
+ return SearchAppTemplatesResponseSchema.parse(response);
63
+ }
64
+ catch (error) {
65
+ throw error;
66
+ }
67
+ }
@@ -0,0 +1,154 @@
1
+ import { z } from 'zod';
2
+ import { yunxiaoRequest, buildUrl } from '../../common/utils.js';
3
+ // Schema for the ListApplications API
4
+ export const ListApplicationsRequestSchema = z.object({
5
+ organizationId: z.string().describe("组织id"),
6
+ pagination: z.enum(['keyset']).default('keyset').describe("分页模式参数,目前只支持键集分页 keyset 模式"),
7
+ perPage: z.number().optional().describe("分页尺寸参数,决定一页最多返回多少对象"),
8
+ orderBy: z.string().optional().default("id").describe("分页排序属性,决定根据何种属性进行记录排序;推荐在实现严格遍历时,使用 id 属性"),
9
+ sort: z.enum(['asc', 'desc']).optional().default('asc').describe("分页排序为升降序,asc 为升序,desc 为降序;推荐在实现严格遍历时,使用升序"),
10
+ nextToken: z.string().optional().describe("分页 token,获取第一页数据时无需传入,否则需要传入前一页查询结果中的 nextToken 字段"),
11
+ });
12
+ export const ListApplicationsResponseSchema = z.object({
13
+ data: z.array(z.object({
14
+ appTemplateDisplayName: z.string().nullable().optional().describe("应用模版展示名称"),
15
+ appTemplateName: z.string().nullable().optional().describe("应用模版名称"),
16
+ creatorId: z.string().optional().describe("应用创建者id"),
17
+ description: z.string().optional().describe("应用描述"),
18
+ gmtCreate: z.string().optional().describe("创建时间"),
19
+ name: z.string().optional().describe("应用名"),
20
+ })),
21
+ nextToken: z.string().optional(),
22
+ });
23
+ // Schema for the GetApplication API
24
+ export const GetApplicationRequestSchema = z.object({
25
+ organizationId: z.string().describe("组织id"),
26
+ appName: z.string().describe("应用名"),
27
+ });
28
+ export const GetApplicationResponseSchema = z.object({
29
+ appTemplateDisplayName: z.string().nullable().optional().describe("应用模版展示名称"),
30
+ appTemplateName: z.string().nullable().optional().describe("应用模版名称"),
31
+ creatorId: z.string().optional().describe("应用创建者id"),
32
+ description: z.string().optional().describe("应用描述"),
33
+ gmtCreate: z.string().optional().describe("创建时间"),
34
+ name: z.string().optional().describe("应用名"),
35
+ });
36
+ // Schema for the CreateApplication API
37
+ export const CreateApplicationRequestSchema = z.object({
38
+ organizationId: z.string().describe("组织id"),
39
+ name: z.string().describe("应用名"),
40
+ appTemplateName: z.string().optional().describe("应用模板唯一名"),
41
+ description: z.string().optional().describe("应用描述"),
42
+ ownerId: z.string().optional().describe("应用 owner ID"),
43
+ tags: z.array(z.string()).optional().describe("应用标签"),
44
+ });
45
+ export const CreateApplicationResponseSchema = z.object({
46
+ appTemplateDisplayName: z.string().nullable().optional().describe("应用模版展示名称"),
47
+ appTemplateName: z.string().nullable().optional().describe("应用模版名称"),
48
+ creatorId: z.string().optional().describe("应用创建者id"),
49
+ description: z.string().optional().describe("应用描述"),
50
+ gmtCreate: z.string().optional().describe("创建时间"),
51
+ name: z.string().optional().describe("应用名"),
52
+ });
53
+ // Schema for the UpdateApplication API
54
+ export const UpdateApplicationRequestSchema = z.object({
55
+ organizationId: z.string().describe("组织id"),
56
+ appName: z.string().describe("应用名"),
57
+ ownerId: z.string().optional().describe("应用 owner ID"),
58
+ });
59
+ export const UpdateApplicationResponseSchema = z.object({
60
+ appTemplateDisplayName: z.string().nullable().optional().describe("应用模版展示名称"),
61
+ appTemplateName: z.string().nullable().optional().describe("应用模版名称"),
62
+ creatorId: z.string().optional().describe("应用创建者id"),
63
+ description: z.string().optional().describe("应用描述"),
64
+ gmtCreate: z.string().optional().describe("创建时间"),
65
+ name: z.string().optional().describe("应用名"),
66
+ });
67
+ /**
68
+ * List applications in an organization with pagination
69
+ *
70
+ * @param params - The request parameters
71
+ * @returns The list of applications
72
+ */
73
+ export async function listApplications(params) {
74
+ const { organizationId, ...queryParams } = params;
75
+ // Build query string properly
76
+ const query = {};
77
+ if (queryParams.pagination)
78
+ query.pagination = queryParams.pagination;
79
+ if (queryParams.perPage)
80
+ query.perPage = queryParams.perPage;
81
+ if (queryParams.orderBy)
82
+ query.orderBy = queryParams.orderBy;
83
+ if (queryParams.sort)
84
+ query.sort = queryParams.sort;
85
+ if (queryParams.nextToken)
86
+ query.nextToken = queryParams.nextToken;
87
+ try {
88
+ // Build the full URL with query parameters
89
+ const url = buildUrl(`/oapi/v1/appstack/organizations/${organizationId}/apps:search`, query);
90
+ const response = await yunxiaoRequest(url, {
91
+ method: 'GET',
92
+ });
93
+ return ListApplicationsResponseSchema.parse(response);
94
+ }
95
+ catch (error) {
96
+ throw error;
97
+ }
98
+ }
99
+ /**
100
+ * Get application details by name
101
+ *
102
+ * @param params - The request parameters
103
+ * @returns The application details
104
+ */
105
+ export async function getApplication(params) {
106
+ const { organizationId, appName } = params;
107
+ try {
108
+ const response = await yunxiaoRequest(`/oapi/v1/appstack/organizations/${organizationId}/apps/${appName}`, {
109
+ method: 'GET',
110
+ });
111
+ return GetApplicationResponseSchema.parse(response);
112
+ }
113
+ catch (error) {
114
+ throw error;
115
+ }
116
+ }
117
+ /**
118
+ * Create a new application
119
+ *
120
+ * @param params - The request parameters
121
+ * @returns The created application details
122
+ */
123
+ export async function createApplication(params) {
124
+ const { organizationId, ...body } = params;
125
+ try {
126
+ const response = await yunxiaoRequest(`/oapi/v1/appstack/organizations/${organizationId}/apps`, {
127
+ method: 'POST',
128
+ body: body,
129
+ });
130
+ return CreateApplicationResponseSchema.parse(response);
131
+ }
132
+ catch (error) {
133
+ throw error;
134
+ }
135
+ }
136
+ /**
137
+ * Update an existing application
138
+ *
139
+ * @param params - The request parameters
140
+ * @returns The updated application details
141
+ */
142
+ export async function updateApplication(params) {
143
+ const { organizationId, appName, ...body } = params;
144
+ try {
145
+ const response = await yunxiaoRequest(`/oapi/v1/appstack/organizations/${organizationId}/apps/${appName}`, {
146
+ method: 'PUT',
147
+ body: body,
148
+ });
149
+ return UpdateApplicationResponseSchema.parse(response);
150
+ }
151
+ catch (error) {
152
+ throw error;
153
+ }
154
+ }