@xurenxiang1219/pingcode-mcp 0.3.1

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 (268) hide show
  1. package/.env.example +115 -0
  2. package/.env.stdio.local.example +13 -0
  3. package/README.md +222 -0
  4. package/dist/approve-write.d.ts +3 -0
  5. package/dist/approve-write.d.ts.map +1 -0
  6. package/dist/approve-write.js +81 -0
  7. package/dist/approve-write.js.map +1 -0
  8. package/dist/auth/cimd-client-resolver.d.ts +35 -0
  9. package/dist/auth/cimd-client-resolver.d.ts.map +1 -0
  10. package/dist/auth/cimd-client-resolver.js +293 -0
  11. package/dist/auth/cimd-client-resolver.js.map +1 -0
  12. package/dist/auth/memory-store.d.ts +15 -0
  13. package/dist/auth/memory-store.d.ts.map +1 -0
  14. package/dist/auth/memory-store.js +46 -0
  15. package/dist/auth/memory-store.js.map +1 -0
  16. package/dist/auth/pingcode-oauth-client.d.ts +23 -0
  17. package/dist/auth/pingcode-oauth-client.d.ts.map +1 -0
  18. package/dist/auth/pingcode-oauth-client.js +103 -0
  19. package/dist/auth/pingcode-oauth-client.js.map +1 -0
  20. package/dist/auth/pingcode-oauth-provider.d.ts +70 -0
  21. package/dist/auth/pingcode-oauth-provider.d.ts.map +1 -0
  22. package/dist/auth/pingcode-oauth-provider.js +414 -0
  23. package/dist/auth/pingcode-oauth-provider.js.map +1 -0
  24. package/dist/auth/redis-store.d.ts +16 -0
  25. package/dist/auth/redis-store.d.ts.map +1 -0
  26. package/dist/auth/redis-store.js +54 -0
  27. package/dist/auth/redis-store.js.map +1 -0
  28. package/dist/auth/runtime.d.ts +10 -0
  29. package/dist/auth/runtime.d.ts.map +1 -0
  30. package/dist/auth/runtime.js +57 -0
  31. package/dist/auth/runtime.js.map +1 -0
  32. package/dist/auth/store.d.ts +35 -0
  33. package/dist/auth/store.d.ts.map +1 -0
  34. package/dist/auth/store.js +55 -0
  35. package/dist/auth/store.js.map +1 -0
  36. package/dist/auth/token-cipher.d.ts +7 -0
  37. package/dist/auth/token-cipher.d.ts.map +1 -0
  38. package/dist/auth/token-cipher.js +36 -0
  39. package/dist/auth/token-cipher.js.map +1 -0
  40. package/dist/config.d.ts +54 -0
  41. package/dist/config.d.ts.map +1 -0
  42. package/dist/config.js +270 -0
  43. package/dist/config.js.map +1 -0
  44. package/dist/domain/content-hash.d.ts +5 -0
  45. package/dist/domain/content-hash.d.ts.map +1 -0
  46. package/dist/domain/content-hash.js +17 -0
  47. package/dist/domain/content-hash.js.map +1 -0
  48. package/dist/domain/requirement-context.d.ts +29 -0
  49. package/dist/domain/requirement-context.d.ts.map +1 -0
  50. package/dist/domain/requirement-context.js +2 -0
  51. package/dist/domain/requirement-context.js.map +1 -0
  52. package/dist/domain/test-case-context.d.ts +56 -0
  53. package/dist/domain/test-case-context.d.ts.map +1 -0
  54. package/dist/domain/test-case-context.js +2 -0
  55. package/dist/domain/test-case-context.js.map +1 -0
  56. package/dist/domain/work-item-context.d.ts +47 -0
  57. package/dist/domain/work-item-context.d.ts.map +1 -0
  58. package/dist/domain/work-item-context.js +2 -0
  59. package/dist/domain/work-item-context.js.map +1 -0
  60. package/dist/environment.d.ts +2 -0
  61. package/dist/environment.d.ts.map +1 -0
  62. package/dist/environment.js +21 -0
  63. package/dist/environment.js.map +1 -0
  64. package/dist/index.d.ts +3 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +52 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/inspect-wiki.d.ts +3 -0
  69. package/dist/inspect-wiki.d.ts.map +1 -0
  70. package/dist/inspect-wiki.js +49 -0
  71. package/dist/inspect-wiki.js.map +1 -0
  72. package/dist/logger.d.ts +9 -0
  73. package/dist/logger.d.ts.map +1 -0
  74. package/dist/logger.js +40 -0
  75. package/dist/logger.js.map +1 -0
  76. package/dist/mcp/create-server.d.ts +10 -0
  77. package/dist/mcp/create-server.d.ts.map +1 -0
  78. package/dist/mcp/create-server.js +40 -0
  79. package/dist/mcp/create-server.js.map +1 -0
  80. package/dist/mcp/pagination-guidance.d.ts +19 -0
  81. package/dist/mcp/pagination-guidance.d.ts.map +1 -0
  82. package/dist/mcp/pagination-guidance.js +36 -0
  83. package/dist/mcp/pagination-guidance.js.map +1 -0
  84. package/dist/mcp/reference-resolution.d.ts +19 -0
  85. package/dist/mcp/reference-resolution.d.ts.map +1 -0
  86. package/dist/mcp/reference-resolution.js +160 -0
  87. package/dist/mcp/reference-resolution.js.map +1 -0
  88. package/dist/mcp/tool-registry.d.ts +2 -0
  89. package/dist/mcp/tool-registry.d.ts.map +1 -0
  90. package/dist/mcp/tool-registry.js +55 -0
  91. package/dist/mcp/tool-registry.js.map +1 -0
  92. package/dist/mcp/tool-runtime.d.ts +22 -0
  93. package/dist/mcp/tool-runtime.d.ts.map +1 -0
  94. package/dist/mcp/tool-runtime.js +214 -0
  95. package/dist/mcp/tool-runtime.js.map +1 -0
  96. package/dist/mcp/tools/member-role.d.ts +8 -0
  97. package/dist/mcp/tools/member-role.d.ts.map +1 -0
  98. package/dist/mcp/tools/member-role.js +451 -0
  99. package/dist/mcp/tools/member-role.js.map +1 -0
  100. package/dist/mcp/tools/metadata.d.ts +5 -0
  101. package/dist/mcp/tools/metadata.d.ts.map +1 -0
  102. package/dist/mcp/tools/metadata.js +606 -0
  103. package/dist/mcp/tools/metadata.js.map +1 -0
  104. package/dist/mcp/tools/project-context.d.ts +4 -0
  105. package/dist/mcp/tools/project-context.d.ts.map +1 -0
  106. package/dist/mcp/tools/project-context.js +111 -0
  107. package/dist/mcp/tools/project-context.js.map +1 -0
  108. package/dist/mcp/tools/project.d.ts +7 -0
  109. package/dist/mcp/tools/project.d.ts.map +1 -0
  110. package/dist/mcp/tools/project.js +370 -0
  111. package/dist/mcp/tools/project.js.map +1 -0
  112. package/dist/mcp/tools/relation.d.ts +7 -0
  113. package/dist/mcp/tools/relation.d.ts.map +1 -0
  114. package/dist/mcp/tools/relation.js +592 -0
  115. package/dist/mcp/tools/relation.js.map +1 -0
  116. package/dist/mcp/tools/runtime-info.d.ts +4 -0
  117. package/dist/mcp/tools/runtime-info.d.ts.map +1 -0
  118. package/dist/mcp/tools/runtime-info.js +49 -0
  119. package/dist/mcp/tools/runtime-info.js.map +1 -0
  120. package/dist/mcp/tools/ship-suite.d.ts +7 -0
  121. package/dist/mcp/tools/ship-suite.d.ts.map +1 -0
  122. package/dist/mcp/tools/ship-suite.js +636 -0
  123. package/dist/mcp/tools/ship-suite.js.map +1 -0
  124. package/dist/mcp/tools/ship.d.ts +7 -0
  125. package/dist/mcp/tools/ship.d.ts.map +1 -0
  126. package/dist/mcp/tools/ship.js +617 -0
  127. package/dist/mcp/tools/ship.js.map +1 -0
  128. package/dist/mcp/tools/sync.d.ts +10 -0
  129. package/dist/mcp/tools/sync.d.ts.map +1 -0
  130. package/dist/mcp/tools/sync.js +1110 -0
  131. package/dist/mcp/tools/sync.js.map +1 -0
  132. package/dist/mcp/tools/task.d.ts +5 -0
  133. package/dist/mcp/tools/task.d.ts.map +1 -0
  134. package/dist/mcp/tools/task.js +236 -0
  135. package/dist/mcp/tools/task.js.map +1 -0
  136. package/dist/mcp/tools/test-case-bulk.d.ts +7 -0
  137. package/dist/mcp/tools/test-case-bulk.d.ts.map +1 -0
  138. package/dist/mcp/tools/test-case-bulk.js +297 -0
  139. package/dist/mcp/tools/test-case-bulk.js.map +1 -0
  140. package/dist/mcp/tools/test-case-delete.d.ts +7 -0
  141. package/dist/mcp/tools/test-case-delete.d.ts.map +1 -0
  142. package/dist/mcp/tools/test-case-delete.js +247 -0
  143. package/dist/mcp/tools/test-case-delete.js.map +1 -0
  144. package/dist/mcp/tools/test-case.d.ts +5 -0
  145. package/dist/mcp/tools/test-case.d.ts.map +1 -0
  146. package/dist/mcp/tools/test-case.js +155 -0
  147. package/dist/mcp/tools/test-case.js.map +1 -0
  148. package/dist/mcp/tools/test-library.d.ts +7 -0
  149. package/dist/mcp/tools/test-library.d.ts.map +1 -0
  150. package/dist/mcp/tools/test-library.js +302 -0
  151. package/dist/mcp/tools/test-library.js.map +1 -0
  152. package/dist/mcp/tools/wiki.d.ts +5 -0
  153. package/dist/mcp/tools/wiki.d.ts.map +1 -0
  154. package/dist/mcp/tools/wiki.js +266 -0
  155. package/dist/mcp/tools/wiki.js.map +1 -0
  156. package/dist/mcp/write-approval.d.ts +48 -0
  157. package/dist/mcp/write-approval.d.ts.map +1 -0
  158. package/dist/mcp/write-approval.js +321 -0
  159. package/dist/mcp/write-approval.js.map +1 -0
  160. package/dist/observability/metrics.d.ts +46 -0
  161. package/dist/observability/metrics.d.ts.map +1 -0
  162. package/dist/observability/metrics.js +79 -0
  163. package/dist/observability/metrics.js.map +1 -0
  164. package/dist/pingcode/access-token-provider.d.ts +5 -0
  165. package/dist/pingcode/access-token-provider.d.ts.map +1 -0
  166. package/dist/pingcode/access-token-provider.js +2 -0
  167. package/dist/pingcode/access-token-provider.js.map +1 -0
  168. package/dist/pingcode/client.d.ts +43 -0
  169. package/dist/pingcode/client.d.ts.map +1 -0
  170. package/dist/pingcode/client.js +300 -0
  171. package/dist/pingcode/client.js.map +1 -0
  172. package/dist/pingcode/errors.d.ts +20 -0
  173. package/dist/pingcode/errors.d.ts.map +1 -0
  174. package/dist/pingcode/errors.js +14 -0
  175. package/dist/pingcode/errors.js.map +1 -0
  176. package/dist/pingcode/schemas.d.ts +465 -0
  177. package/dist/pingcode/schemas.d.ts.map +1 -0
  178. package/dist/pingcode/schemas.js +450 -0
  179. package/dist/pingcode/schemas.js.map +1 -0
  180. package/dist/pingcode/token-provider.d.ts +20 -0
  181. package/dist/pingcode/token-provider.d.ts.map +1 -0
  182. package/dist/pingcode/token-provider.js +97 -0
  183. package/dist/pingcode/token-provider.js.map +1 -0
  184. package/dist/pingcode/write-response.d.ts +9 -0
  185. package/dist/pingcode/write-response.d.ts.map +1 -0
  186. package/dist/pingcode/write-response.js +39 -0
  187. package/dist/pingcode/write-response.js.map +1 -0
  188. package/dist/services.d.ts +22 -0
  189. package/dist/services.d.ts.map +1 -0
  190. package/dist/services.js +84 -0
  191. package/dist/services.js.map +1 -0
  192. package/dist/sources/metadata-source.d.ts +445 -0
  193. package/dist/sources/metadata-source.d.ts.map +1 -0
  194. package/dist/sources/metadata-source.js +167 -0
  195. package/dist/sources/metadata-source.js.map +1 -0
  196. package/dist/sources/project-context-source.d.ts +61 -0
  197. package/dist/sources/project-context-source.d.ts.map +1 -0
  198. package/dist/sources/project-context-source.js +224 -0
  199. package/dist/sources/project-context-source.js.map +1 -0
  200. package/dist/sources/relation-source.d.ts +83 -0
  201. package/dist/sources/relation-source.d.ts.map +1 -0
  202. package/dist/sources/relation-source.js +129 -0
  203. package/dist/sources/relation-source.js.map +1 -0
  204. package/dist/sources/requirement-source.d.ts +5 -0
  205. package/dist/sources/requirement-source.d.ts.map +1 -0
  206. package/dist/sources/requirement-source.js +2 -0
  207. package/dist/sources/requirement-source.js.map +1 -0
  208. package/dist/sources/ship-source.d.ts +67 -0
  209. package/dist/sources/ship-source.d.ts.map +1 -0
  210. package/dist/sources/ship-source.js +135 -0
  211. package/dist/sources/ship-source.js.map +1 -0
  212. package/dist/sources/test-case-source.d.ts +30 -0
  213. package/dist/sources/test-case-source.d.ts.map +1 -0
  214. package/dist/sources/test-case-source.js +206 -0
  215. package/dist/sources/test-case-source.js.map +1 -0
  216. package/dist/sources/wiki-source.d.ts +34 -0
  217. package/dist/sources/wiki-source.d.ts.map +1 -0
  218. package/dist/sources/wiki-source.js +136 -0
  219. package/dist/sources/wiki-source.js.map +1 -0
  220. package/dist/sources/work-item-source.d.ts +33 -0
  221. package/dist/sources/work-item-source.d.ts.map +1 -0
  222. package/dist/sources/work-item-source.js +159 -0
  223. package/dist/sources/work-item-source.js.map +1 -0
  224. package/dist/sources/write-source.d.ts +461 -0
  225. package/dist/sources/write-source.d.ts.map +1 -0
  226. package/dist/sources/write-source.js +174 -0
  227. package/dist/sources/write-source.js.map +1 -0
  228. package/dist/transports/bearer-auth.d.ts +20 -0
  229. package/dist/transports/bearer-auth.d.ts.map +1 -0
  230. package/dist/transports/bearer-auth.js +79 -0
  231. package/dist/transports/bearer-auth.js.map +1 -0
  232. package/dist/transports/http.d.ts +11 -0
  233. package/dist/transports/http.d.ts.map +1 -0
  234. package/dist/transports/http.js +203 -0
  235. package/dist/transports/http.js.map +1 -0
  236. package/dist/transports/metrics-auth.d.ts +3 -0
  237. package/dist/transports/metrics-auth.d.ts.map +1 -0
  238. package/dist/transports/metrics-auth.js +22 -0
  239. package/dist/transports/metrics-auth.js.map +1 -0
  240. package/dist/transports/stdio.d.ts +5 -0
  241. package/dist/transports/stdio.d.ts.map +1 -0
  242. package/dist/transports/stdio.js +11 -0
  243. package/dist/transports/stdio.js.map +1 -0
  244. package/dist/uat/run-label.d.ts +2 -0
  245. package/dist/uat/run-label.d.ts.map +1 -0
  246. package/dist/uat/run-label.js +12 -0
  247. package/dist/uat/run-label.js.map +1 -0
  248. package/dist/verify.d.ts +3 -0
  249. package/dist/verify.d.ts.map +1 -0
  250. package/dist/verify.js +59 -0
  251. package/dist/verify.js.map +1 -0
  252. package/dist/write/approval.d.ts +35 -0
  253. package/dist/write/approval.d.ts.map +1 -0
  254. package/dist/write/approval.js +66 -0
  255. package/dist/write/approval.js.map +1 -0
  256. package/dist/write/plan.d.ts +2 -0
  257. package/dist/write/plan.d.ts.map +1 -0
  258. package/dist/write/plan.js +17 -0
  259. package/dist/write/plan.js.map +1 -0
  260. package/dist/write/runtime.d.ts +90 -0
  261. package/dist/write/runtime.d.ts.map +1 -0
  262. package/dist/write/runtime.js +244 -0
  263. package/dist/write/runtime.js.map +1 -0
  264. package/dist/write/store.d.ts +101 -0
  265. package/dist/write/store.d.ts.map +1 -0
  266. package/dist/write/store.js +201 -0
  267. package/dist/write/store.js.map +1 -0
  268. package/package.json +58 -0
@@ -0,0 +1,461 @@
1
+ import type { PingCodeWriteClientLike } from "../pingcode/client.js";
2
+ import { testCaseSchema } from "../pingcode/schemas.js";
3
+ export interface TaskWriteFields {
4
+ projectId?: string;
5
+ typeId?: string;
6
+ title?: string;
7
+ description?: string;
8
+ startAt?: number;
9
+ endAt?: number;
10
+ priorityId?: string;
11
+ stateId?: string;
12
+ assigneeId?: string;
13
+ parentId?: string;
14
+ sprintId?: string;
15
+ versionId?: string;
16
+ versionIds?: string[];
17
+ boardId?: string;
18
+ entryId?: string;
19
+ swimlaneId?: string;
20
+ phaseId?: string;
21
+ storyPoints?: number;
22
+ estimatedWorkload?: number;
23
+ remainingWorkload?: number;
24
+ properties?: Record<string, unknown>;
25
+ participantIds?: string[];
26
+ }
27
+ export interface TestCaseStepWriteFields {
28
+ stepId?: string;
29
+ description: string;
30
+ expectedValue?: string;
31
+ isGroup?: boolean;
32
+ groupId?: string;
33
+ }
34
+ export interface TestCaseWriteFields {
35
+ testLibraryId?: string;
36
+ title?: string;
37
+ suiteId?: string;
38
+ stateId?: string;
39
+ typeId?: string;
40
+ importantLevel?: string;
41
+ importantLevelId?: string;
42
+ maintenanceId?: string;
43
+ participantIds?: string[];
44
+ properties?: Record<string, unknown>;
45
+ description?: string;
46
+ precondition?: string;
47
+ steps?: TestCaseStepWriteFields[];
48
+ }
49
+ export interface BulkTestCaseCreateResult {
50
+ state: string;
51
+ case?: ReturnType<typeof testCaseSchema.parse>;
52
+ error?: unknown;
53
+ }
54
+ export interface ProjectMemberWriteField {
55
+ id: string;
56
+ type: "user" | "user_group";
57
+ }
58
+ export interface ProjectCreateFields {
59
+ name: string;
60
+ identifier: string;
61
+ type: "scrum" | "kanban" | "waterfall" | "hybrid";
62
+ visibility?: "public" | "private";
63
+ description?: string;
64
+ assigneeId: string;
65
+ scopeType?: "organization" | "user_group";
66
+ scopeId?: string;
67
+ members?: ProjectMemberWriteField[];
68
+ }
69
+ export interface TestLibraryCreateFields {
70
+ name: string;
71
+ identifier: string;
72
+ description?: string;
73
+ memberIds?: string[];
74
+ }
75
+ export declare class PingCodeWriteSource {
76
+ private readonly client;
77
+ constructor(client: PingCodeWriteClientLike);
78
+ createTask(fields: TaskWriteFields): Promise<{
79
+ [x: string]: unknown;
80
+ id: string;
81
+ url: string;
82
+ project: {
83
+ [x: string]: unknown;
84
+ id: string;
85
+ url: string;
86
+ identifier: string;
87
+ name: string;
88
+ type: string;
89
+ };
90
+ identifier: string;
91
+ title: string;
92
+ type: string;
93
+ short_id?: string | undefined;
94
+ html_url?: string | undefined;
95
+ start_at?: number | null | undefined;
96
+ end_at?: number | null | undefined;
97
+ completed_at?: number | null | undefined;
98
+ parent_id?: string | null | undefined;
99
+ parent?: {
100
+ [x: string]: unknown;
101
+ id: string;
102
+ url: string;
103
+ identifier: string;
104
+ title: string;
105
+ type: string;
106
+ short_id?: string | undefined;
107
+ html_url?: string | undefined;
108
+ parent_id?: string | null | undefined;
109
+ } | null | undefined;
110
+ assignee?: {
111
+ [x: string]: unknown;
112
+ id: string;
113
+ url?: string | undefined;
114
+ name?: string | undefined;
115
+ display_name?: string | undefined;
116
+ } | null | undefined;
117
+ state?: {
118
+ [x: string]: unknown;
119
+ id: string;
120
+ name: string;
121
+ type: string;
122
+ url?: string | undefined;
123
+ color?: string | undefined;
124
+ } | null | undefined;
125
+ priority?: {
126
+ [x: string]: unknown;
127
+ id: string;
128
+ name: string;
129
+ url?: string | undefined;
130
+ } | null | undefined;
131
+ sprint?: {
132
+ [x: string]: unknown;
133
+ id: string;
134
+ name: string;
135
+ url?: string | undefined;
136
+ start_at?: number | null | undefined;
137
+ end_at?: number | null | undefined;
138
+ status?: string | undefined;
139
+ } | null | undefined;
140
+ version?: {
141
+ [x: string]: unknown;
142
+ id: string;
143
+ name: string;
144
+ url?: string | undefined;
145
+ start_at?: number | null | undefined;
146
+ end_at?: number | null | undefined;
147
+ status?: string | undefined;
148
+ } | null | undefined;
149
+ description?: string | null | undefined;
150
+ properties?: Record<string, unknown> | undefined;
151
+ tags?: {
152
+ [x: string]: unknown;
153
+ id: string;
154
+ name: string;
155
+ url?: string | undefined;
156
+ }[] | undefined;
157
+ created_at?: number | undefined;
158
+ updated_at?: number | undefined;
159
+ is_archived?: number | boolean | undefined;
160
+ is_deleted?: number | boolean | undefined;
161
+ }>;
162
+ updateTask(taskId: string, fields: TaskWriteFields): Promise<{
163
+ [x: string]: unknown;
164
+ id: string;
165
+ url: string;
166
+ project: {
167
+ [x: string]: unknown;
168
+ id: string;
169
+ url: string;
170
+ identifier: string;
171
+ name: string;
172
+ type: string;
173
+ };
174
+ identifier: string;
175
+ title: string;
176
+ type: string;
177
+ short_id?: string | undefined;
178
+ html_url?: string | undefined;
179
+ start_at?: number | null | undefined;
180
+ end_at?: number | null | undefined;
181
+ completed_at?: number | null | undefined;
182
+ parent_id?: string | null | undefined;
183
+ parent?: {
184
+ [x: string]: unknown;
185
+ id: string;
186
+ url: string;
187
+ identifier: string;
188
+ title: string;
189
+ type: string;
190
+ short_id?: string | undefined;
191
+ html_url?: string | undefined;
192
+ parent_id?: string | null | undefined;
193
+ } | null | undefined;
194
+ assignee?: {
195
+ [x: string]: unknown;
196
+ id: string;
197
+ url?: string | undefined;
198
+ name?: string | undefined;
199
+ display_name?: string | undefined;
200
+ } | null | undefined;
201
+ state?: {
202
+ [x: string]: unknown;
203
+ id: string;
204
+ name: string;
205
+ type: string;
206
+ url?: string | undefined;
207
+ color?: string | undefined;
208
+ } | null | undefined;
209
+ priority?: {
210
+ [x: string]: unknown;
211
+ id: string;
212
+ name: string;
213
+ url?: string | undefined;
214
+ } | null | undefined;
215
+ sprint?: {
216
+ [x: string]: unknown;
217
+ id: string;
218
+ name: string;
219
+ url?: string | undefined;
220
+ start_at?: number | null | undefined;
221
+ end_at?: number | null | undefined;
222
+ status?: string | undefined;
223
+ } | null | undefined;
224
+ version?: {
225
+ [x: string]: unknown;
226
+ id: string;
227
+ name: string;
228
+ url?: string | undefined;
229
+ start_at?: number | null | undefined;
230
+ end_at?: number | null | undefined;
231
+ status?: string | undefined;
232
+ } | null | undefined;
233
+ description?: string | null | undefined;
234
+ properties?: Record<string, unknown> | undefined;
235
+ tags?: {
236
+ [x: string]: unknown;
237
+ id: string;
238
+ name: string;
239
+ url?: string | undefined;
240
+ }[] | undefined;
241
+ created_at?: number | undefined;
242
+ updated_at?: number | undefined;
243
+ is_archived?: number | boolean | undefined;
244
+ is_deleted?: number | boolean | undefined;
245
+ }>;
246
+ createTestCase(fields: TestCaseWriteFields): Promise<{
247
+ [x: string]: unknown;
248
+ id: string;
249
+ url: string;
250
+ library: {
251
+ [x: string]: unknown;
252
+ id: string;
253
+ identifier: string;
254
+ name: string;
255
+ url?: string | undefined;
256
+ };
257
+ identifier: string;
258
+ title: string;
259
+ short_id?: string | undefined;
260
+ html_url?: string | undefined;
261
+ level?: string | null | undefined;
262
+ important_level?: {
263
+ [x: string]: unknown;
264
+ id: string;
265
+ name: string;
266
+ url?: string | undefined;
267
+ } | null | undefined;
268
+ suite?: {
269
+ [x: string]: unknown;
270
+ id: string;
271
+ name: string;
272
+ url?: string | undefined;
273
+ paths?: string | undefined;
274
+ } | null | undefined;
275
+ state?: {
276
+ [x: string]: unknown;
277
+ id: string;
278
+ name: string;
279
+ url?: string | undefined;
280
+ type?: string | undefined;
281
+ } | null | undefined;
282
+ type?: {
283
+ [x: string]: unknown;
284
+ id: string;
285
+ name: string;
286
+ url?: string | undefined;
287
+ } | null | undefined;
288
+ maintenance?: {
289
+ [x: string]: unknown;
290
+ id: string;
291
+ url?: string | undefined;
292
+ name?: string | undefined;
293
+ display_name?: string | undefined;
294
+ } | null | undefined;
295
+ test_type?: string | null | undefined;
296
+ description?: string | null | undefined;
297
+ precondition?: string | null | undefined;
298
+ properties?: Record<string, unknown> | undefined;
299
+ steps?: {
300
+ [x: string]: unknown;
301
+ description: string;
302
+ step_id?: string | undefined;
303
+ expected_value?: string | null | undefined;
304
+ is_group?: boolean | undefined;
305
+ group_id?: string | null | undefined;
306
+ }[] | undefined;
307
+ created_at?: number | undefined;
308
+ updated_at?: number | undefined;
309
+ is_archived?: number | boolean | undefined;
310
+ is_deleted?: number | boolean | undefined;
311
+ }>;
312
+ createTestCasesBulk(fields: TestCaseWriteFields[]): Promise<BulkTestCaseCreateResult[]>;
313
+ updateTestCase(caseId: string, fields: TestCaseWriteFields): Promise<{
314
+ [x: string]: unknown;
315
+ id: string;
316
+ url: string;
317
+ library: {
318
+ [x: string]: unknown;
319
+ id: string;
320
+ identifier: string;
321
+ name: string;
322
+ url?: string | undefined;
323
+ };
324
+ identifier: string;
325
+ title: string;
326
+ short_id?: string | undefined;
327
+ html_url?: string | undefined;
328
+ level?: string | null | undefined;
329
+ important_level?: {
330
+ [x: string]: unknown;
331
+ id: string;
332
+ name: string;
333
+ url?: string | undefined;
334
+ } | null | undefined;
335
+ suite?: {
336
+ [x: string]: unknown;
337
+ id: string;
338
+ name: string;
339
+ url?: string | undefined;
340
+ paths?: string | undefined;
341
+ } | null | undefined;
342
+ state?: {
343
+ [x: string]: unknown;
344
+ id: string;
345
+ name: string;
346
+ url?: string | undefined;
347
+ type?: string | undefined;
348
+ } | null | undefined;
349
+ type?: {
350
+ [x: string]: unknown;
351
+ id: string;
352
+ name: string;
353
+ url?: string | undefined;
354
+ } | null | undefined;
355
+ maintenance?: {
356
+ [x: string]: unknown;
357
+ id: string;
358
+ url?: string | undefined;
359
+ name?: string | undefined;
360
+ display_name?: string | undefined;
361
+ } | null | undefined;
362
+ test_type?: string | null | undefined;
363
+ description?: string | null | undefined;
364
+ precondition?: string | null | undefined;
365
+ properties?: Record<string, unknown> | undefined;
366
+ steps?: {
367
+ [x: string]: unknown;
368
+ description: string;
369
+ step_id?: string | undefined;
370
+ expected_value?: string | null | undefined;
371
+ is_group?: boolean | undefined;
372
+ group_id?: string | null | undefined;
373
+ }[] | undefined;
374
+ created_at?: number | undefined;
375
+ updated_at?: number | undefined;
376
+ is_archived?: number | boolean | undefined;
377
+ is_deleted?: number | boolean | undefined;
378
+ }>;
379
+ deleteTestCase(caseId: string): Promise<void>;
380
+ relateTestCaseToWorkItem(testCaseId: string, workItemId: string): Promise<{
381
+ [x: string]: unknown;
382
+ id: string;
383
+ url: string;
384
+ principal_type: string;
385
+ target_type: string;
386
+ principal_id?: string | undefined;
387
+ principal?: {
388
+ [x: string]: unknown;
389
+ id: string;
390
+ } | undefined;
391
+ target_id?: string | undefined;
392
+ target?: {
393
+ [x: string]: unknown;
394
+ id: string;
395
+ } | undefined;
396
+ }>;
397
+ createProject(fields: ProjectCreateFields): Promise<{
398
+ [x: string]: unknown;
399
+ id: string;
400
+ identifier: string;
401
+ name: string;
402
+ type: string;
403
+ url?: string | null | undefined;
404
+ visibility?: string | null | undefined;
405
+ scope_type?: string | null | undefined;
406
+ scope_id?: string | null | undefined;
407
+ is_archived?: number | boolean | null | undefined;
408
+ is_deleted?: number | boolean | null | undefined;
409
+ members?: ({
410
+ [x: string]: unknown;
411
+ id: string;
412
+ type: "user" | "user_group";
413
+ role_id?: string | null | undefined;
414
+ } | {
415
+ [x: string]: unknown;
416
+ id: string;
417
+ user: {
418
+ [x: string]: unknown;
419
+ id: string;
420
+ };
421
+ role_id?: string | null | undefined;
422
+ } | {
423
+ [x: string]: unknown;
424
+ id: string;
425
+ user_group: {
426
+ [x: string]: unknown;
427
+ id: string;
428
+ };
429
+ role_id?: string | null | undefined;
430
+ })[] | null | undefined;
431
+ }>;
432
+ createTestLibrary(fields: TestLibraryCreateFields): Promise<{
433
+ [x: string]: unknown;
434
+ id: string;
435
+ identifier: string;
436
+ name: string;
437
+ url?: string | null | undefined;
438
+ description?: string | null | undefined;
439
+ color?: string | null | undefined;
440
+ members?: {
441
+ [x: string]: unknown;
442
+ id?: string | undefined;
443
+ url?: string | undefined;
444
+ user?: {
445
+ [x: string]: unknown;
446
+ id: string;
447
+ } | undefined;
448
+ role_id?: string | null | undefined;
449
+ }[] | null | undefined;
450
+ is_archived?: number | boolean | null | undefined;
451
+ is_deleted?: number | boolean | null | undefined;
452
+ }>;
453
+ addProjectMember(projectId: string, member: ProjectMemberWriteField): Promise<{
454
+ [x: string]: unknown;
455
+ id: string;
456
+ type: "user" | "user_group";
457
+ }>;
458
+ updateProjectMemberRole(projectId: string, memberId: string, roleId: string): Promise<void>;
459
+ updateTestLibraryMemberRole(libraryId: string, memberId: string, roleId: string): Promise<void>;
460
+ }
461
+ //# sourceMappingURL=write-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-source.d.ts","sourceRoot":"","sources":["../../src/sources/write-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,174 @@
1
+ import { z } from "zod";
2
+ import { PingCodeError } from "../pingcode/errors.js";
3
+ import { projectMetadataSchema, projectMemberSchema, relationSchema, testLibraryMetadataSchema, testCaseSchema, workItemSchema, } from "../pingcode/schemas.js";
4
+ import { extractWriteResourceId, unknownWriteResponse, unwrapWriteResponse } from "../pingcode/write-response.js";
5
+ export class PingCodeWriteSource {
6
+ client;
7
+ constructor(client) {
8
+ this.client = client;
9
+ }
10
+ async createTask(fields) {
11
+ return workItemSchema.parse(await this.client.post("/v1/pjm/work_items", mapTaskFields(fields)));
12
+ }
13
+ async updateTask(taskId, fields) {
14
+ return workItemSchema.parse(await this.client.patch(`/v1/pjm/work_items/${encodeURIComponent(taskId)}`, mapTaskFields(fields)));
15
+ }
16
+ async createTestCase(fields) {
17
+ return testCaseSchema.parse(await this.client.post("/v1/testhub/cases", mapTestCaseFields(fields)));
18
+ }
19
+ async createTestCasesBulk(fields) {
20
+ const response = await this.client.post("/v1/testhub/cases/bulk", {
21
+ cases: fields.map(mapTestCaseFields),
22
+ });
23
+ const parsed = z
24
+ .array(z
25
+ .object({
26
+ state: z.string(),
27
+ case: testCaseSchema.optional(),
28
+ error: z.unknown().optional(),
29
+ })
30
+ .passthrough())
31
+ .safeParse(response);
32
+ if (!parsed.success) {
33
+ throw new PingCodeError("PingCode 已接受批量 Test Case 创建请求,但返回内容无法确认各项结果;请求可能已经部分或全部写入。请先使用 pingcode_test_case_list/pingcode_test_case_get 回读,禁止更换幂等键重试", "WRITE_OUTCOME_UNKNOWN", { cause: parsed.error });
34
+ }
35
+ return parsed.data;
36
+ }
37
+ async updateTestCase(caseId, fields) {
38
+ return testCaseSchema.parse(await this.client.patch(`/v1/testhub/cases/${encodeURIComponent(caseId)}`, mapTestCaseFields(fields)));
39
+ }
40
+ async deleteTestCase(caseId) {
41
+ if (!this.client.delete) {
42
+ throw new PingCodeError("当前 PingCode Client 不支持 Test Case 删除请求", "NOT_CONFIGURED");
43
+ }
44
+ await this.client.delete(`/v1/testhub/cases/${encodeURIComponent(caseId)}`);
45
+ }
46
+ async relateTestCaseToWorkItem(testCaseId, workItemId) {
47
+ return relationSchema.parse(await this.client.post("/v1/relations", {
48
+ principal_type: "test_case",
49
+ principal_id: testCaseId,
50
+ target_type: "work_item",
51
+ target_id: workItemId,
52
+ }));
53
+ }
54
+ async createProject(fields) {
55
+ const raw = unwrapWriteResponse(await this.client.post("/v1/project/projects", mapProjectFields(fields)));
56
+ const id = extractWriteResourceId(raw);
57
+ if (id === undefined)
58
+ throw unknownWriteResponse("项目创建", raw);
59
+ try {
60
+ return projectMetadataSchema.parse({
61
+ ...raw,
62
+ id,
63
+ identifier: typeof raw.identifier === "string" ? raw.identifier : fields.identifier,
64
+ name: typeof raw.name === "string" ? raw.name : fields.name,
65
+ type: typeof raw.type === "string" ? raw.type : fields.type,
66
+ });
67
+ }
68
+ catch (error) {
69
+ throw unknownWriteResponse("项目创建", error);
70
+ }
71
+ }
72
+ async createTestLibrary(fields) {
73
+ const response = unwrapWriteResponse(await this.client.post("/v1/testhub/libraries", mapTestLibraryFields(fields)));
74
+ const id = extractWriteResourceId(response);
75
+ if (id === undefined)
76
+ throw unknownWriteResponse("测试库创建", response);
77
+ try {
78
+ return testLibraryMetadataSchema.parse({
79
+ ...response,
80
+ id,
81
+ identifier: typeof response.identifier === "string" ? response.identifier : fields.identifier,
82
+ name: typeof response.name === "string" ? response.name : fields.name,
83
+ description: response.description ?? fields.description,
84
+ });
85
+ }
86
+ catch (error) {
87
+ throw unknownWriteResponse(`测试库创建(identifier '${fields.identifier}')`, error);
88
+ }
89
+ }
90
+ async addProjectMember(projectId, member) {
91
+ const response = await this.client.post(`/v1/project/projects/${encodeURIComponent(projectId)}/members`, { member });
92
+ const wrapped = z.object({ member: projectMemberSchema }).passthrough().safeParse(response);
93
+ return wrapped.success ? wrapped.data.member : projectMemberSchema.parse(response);
94
+ }
95
+ async updateProjectMemberRole(projectId, memberId, roleId) {
96
+ await this.client.patch(`/v1/project/projects/${encodeURIComponent(projectId)}/members/${encodeURIComponent(memberId)}`, { role_id: roleId });
97
+ }
98
+ async updateTestLibraryMemberRole(libraryId, memberId, roleId) {
99
+ await this.client.patch(`/v1/testhub/libraries/${encodeURIComponent(libraryId)}/members/${encodeURIComponent(memberId)}`, { role_id: roleId });
100
+ }
101
+ }
102
+ function mapTaskFields(fields) {
103
+ return compact({
104
+ project_id: fields.projectId,
105
+ type_id: fields.typeId,
106
+ title: fields.title,
107
+ description: fields.description,
108
+ start_at: fields.startAt,
109
+ end_at: fields.endAt,
110
+ priority_id: fields.priorityId,
111
+ state_id: fields.stateId,
112
+ assignee_id: fields.assigneeId,
113
+ parent_id: fields.parentId,
114
+ sprint_id: fields.sprintId,
115
+ version_ids: fields.versionIds ?? (fields.versionId === undefined ? undefined : [fields.versionId]),
116
+ board_id: fields.boardId,
117
+ entry_id: fields.entryId,
118
+ swimlane_id: fields.swimlaneId,
119
+ phase_id: fields.phaseId,
120
+ story_points: fields.storyPoints,
121
+ estimated_workload: fields.estimatedWorkload,
122
+ remaining_workload: fields.remainingWorkload,
123
+ properties: fields.properties,
124
+ participant_ids: fields.participantIds,
125
+ });
126
+ }
127
+ function mapTestCaseFields(fields) {
128
+ return compact({
129
+ test_library_id: fields.testLibraryId,
130
+ title: fields.title,
131
+ suite_id: fields.suiteId,
132
+ state_id: fields.stateId,
133
+ type_id: fields.typeId,
134
+ important_level: fields.importantLevel,
135
+ important_level_id: fields.importantLevelId,
136
+ maintenance_id: fields.maintenanceId,
137
+ participant_ids: fields.participantIds,
138
+ properties: fields.properties,
139
+ description: fields.description,
140
+ precondition: fields.precondition,
141
+ steps: fields.steps?.map((step) => compact({
142
+ step_id: step.stepId,
143
+ description: step.description,
144
+ expected_value: step.expectedValue,
145
+ is_group: step.isGroup,
146
+ group_id: step.groupId,
147
+ })),
148
+ });
149
+ }
150
+ function mapProjectFields(fields) {
151
+ return compact({
152
+ name: fields.name,
153
+ identifier: fields.identifier,
154
+ type: fields.type,
155
+ visibility: fields.visibility,
156
+ description: fields.description,
157
+ assignee_id: fields.assigneeId,
158
+ scope_type: fields.scopeType,
159
+ scope_id: fields.scopeId,
160
+ members: fields.members,
161
+ });
162
+ }
163
+ function mapTestLibraryFields(fields) {
164
+ return compact({
165
+ name: fields.name,
166
+ identifier: fields.identifier,
167
+ description: fields.description,
168
+ member_ids: fields.memberIds,
169
+ });
170
+ }
171
+ function compact(value) {
172
+ return Object.fromEntries(Object.entries(value).filter(([, nested]) => nested !== undefined));
173
+ }
174
+ //# sourceMappingURL=write-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write-source.js","sourceRoot":"","sources":["../../src/sources/write-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { RequestHandler } from "express";
2
+ import type { OAuthTokenVerifier } from "@modelcontextprotocol/sdk/server/auth/provider.js";
3
+ import type { AuthInfo } from "@modelcontextprotocol/sdk/server/auth/types.js";
4
+ declare module "express-serve-static-core" {
5
+ interface Request {
6
+ auth?: AuthInfo;
7
+ }
8
+ }
9
+ interface SafeBearerAuthOptions {
10
+ verifier: OAuthTokenVerifier;
11
+ requiredScopes?: string[];
12
+ resourceMetadataUrl?: string;
13
+ }
14
+ /**
15
+ * SDK 的預設 Bearer middleware 會把中文 OAuth 錯誤訊息直接放進 Header,
16
+ * Node.js 會因此拒絕非 Latin-1 字元。這裡保留中文 JSON 錯誤,Header 使用固定 ASCII 描述。
17
+ */
18
+ export declare function requireSafeBearerAuth({ verifier, requiredScopes, resourceMetadataUrl, }: SafeBearerAuthOptions): RequestHandler;
19
+ export {};
20
+ //# sourceMappingURL=bearer-auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bearer-auth.d.ts","sourceRoot":"","sources":["../../src/transports/bearer-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAO9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AAC5F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAE/E,OAAO,QAAQ,2BAA2B,CAAC;IACzC,UAAU,OAAO;QACf,IAAI,CAAC,EAAE,QAAQ,CAAC;KACjB;CACF;AAED,UAAU,qBAAqB;IAC7B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,cAAmB,EACnB,mBAAmB,GACpB,EAAE,qBAAqB,GAAG,cAAc,CAsDxC"}