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