@syn7xx/testops-mcp-server 0.1.2 → 0.1.5
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.
- package/CHANGELOG.md +55 -0
- package/README.md +147 -89
- package/dist/args.d.ts +2 -3
- package/dist/args.d.ts.map +1 -1
- package/dist/args.js +57 -19
- package/dist/args.js.map +1 -1
- package/dist/domain/project/service.d.ts.map +1 -1
- package/dist/domain/project/service.js +1 -1
- package/dist/domain/project/service.js.map +1 -1
- package/dist/domain/project/types.d.ts.map +1 -1
- package/dist/domain/test-case/service.d.ts +13 -1
- package/dist/domain/test-case/service.d.ts.map +1 -1
- package/dist/domain/test-case/service.js +22 -6
- package/dist/domain/test-case/service.js.map +1 -1
- package/dist/domain/test-case/types.d.ts +17 -0
- package/dist/domain/test-case/types.d.ts.map +1 -1
- package/dist/domain/test-plan/service.d.ts.map +1 -1
- package/dist/domain/test-plan/service.js +1 -1
- package/dist/domain/test-plan/service.js.map +1 -1
- package/dist/domain/test-plan/types.d.ts.map +1 -1
- package/dist/presentation/project/tools.d.ts +2 -1
- package/dist/presentation/project/tools.d.ts.map +1 -1
- package/dist/presentation/project/tools.js +30 -8
- package/dist/presentation/project/tools.js.map +1 -1
- package/dist/presentation/test-case/tools.d.ts +2 -1
- package/dist/presentation/test-case/tools.d.ts.map +1 -1
- package/dist/presentation/test-case/tools.js +138 -32
- package/dist/presentation/test-case/tools.js.map +1 -1
- package/dist/presentation/test-plan/tools.d.ts +2 -1
- package/dist/presentation/test-plan/tools.d.ts.map +1 -1
- package/dist/presentation/test-plan/tools.js +17 -5
- package/dist/presentation/test-plan/tools.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +8 -5
- package/dist/server.js.map +1 -1
- package/dist/shared/api.d.ts +2 -4
- package/dist/shared/api.d.ts.map +1 -1
- package/dist/shared/api.js +34 -31
- package/dist/shared/api.js.map +1 -1
- package/dist/shared/pagination.d.ts.map +1 -1
- package/dist/shared/pagination.js.map +1 -1
- package/dist/shared/result.d.ts.map +1 -1
- package/dist/shared/result.js +7 -4
- package/dist/shared/result.js.map +1 -1
- package/package.json +18 -4
- package/dist/services/config.d.ts +0 -43
- package/dist/services/config.d.ts.map +0 -1
- package/dist/services/config.js +0 -99
- package/dist/services/config.js.map +0 -1
- package/dist/services/index.d.ts +0 -8
- package/dist/services/index.d.ts.map +0 -1
- package/dist/services/index.js +0 -8
- package/dist/services/index.js.map +0 -1
- package/dist/services/project.d.ts +0 -17
- package/dist/services/project.d.ts.map +0 -1
- package/dist/services/project.js +0 -27
- package/dist/services/project.js.map +0 -1
- package/dist/services/test-case.d.ts +0 -59
- package/dist/services/test-case.d.ts.map +0 -1
- package/dist/services/test-case.js +0 -138
- package/dist/services/test-case.js.map +0 -1
- package/dist/services/test-plan.d.ts +0 -20
- package/dist/services/test-plan.d.ts.map +0 -1
- package/dist/services/test-plan.js +0 -18
- package/dist/services/test-plan.js.map +0 -1
- package/dist/services/testops-client.d.ts +0 -96
- package/dist/services/testops-client.d.ts.map +0 -1
- package/dist/services/testops-client.js +0 -392
- package/dist/services/testops-client.js.map +0 -1
- package/dist/services/testops-types.d.ts +0 -62
- package/dist/services/testops-types.d.ts.map +0 -1
- package/dist/services/testops-types.js +0 -3
- package/dist/services/testops-types.js.map +0 -1
- package/dist/tools/index.d.ts +0 -8
- package/dist/tools/index.d.ts.map +0 -1
- package/dist/tools/index.js +0 -8
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/project.d.ts +0 -5
- package/dist/tools/project.d.ts.map +0 -1
- package/dist/tools/project.js +0 -62
- package/dist/tools/project.js.map +0 -1
- package/dist/tools/test-case.d.ts +0 -5
- package/dist/tools/test-case.d.ts.map +0 -1
- package/dist/tools/test-case.js +0 -185
- package/dist/tools/test-case.js.map +0 -1
- package/dist/tools/test-plan.d.ts +0 -5
- package/dist/tools/test-plan.d.ts.map +0 -1
- package/dist/tools/test-plan.js +0 -57
- package/dist/tools/test-plan.js.map +0 -1
- package/dist/tools/testops.d.ts +0 -6
- package/dist/tools/testops.d.ts.map +0 -1
- package/dist/tools/testops.js +0 -302
- package/dist/tools/testops.js.map +0 -1
package/dist/shared/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/shared/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,+CAA+C;AAC/C,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7D,0CAA0C;AAC1C,MAAM,WAAW,aAAa;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/shared/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,+CAA+C;AAC/C,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE7D,0CAA0C;AAC1C,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAKD;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,IAG1D,CAAC;AAWF,4DAA4D;AAC5D,eAAO,MAAM,aAAa,QAAO,IAEhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,MAAM,QAAa,OAAO,CAAC,MAAM,CA2B7C,CAAC;AA4CF;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAU,CAAC,GAAG,OAAO,EACxC,UAAU,MAAM,EAChB,QAAQ,aAAa,KACpB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAE1B,CAAC;AAEF,yBAAyB;AACzB,eAAO,MAAM,MAAM,GAAI,CAAC,GAAG,OAAO,EAChC,UAAU,MAAM,EAChB,cAAc,aAAa,CAAC,aAAa,CAAC,KACzC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAC4B,CAAC;AAExD,0BAA0B;AAC1B,eAAO,MAAM,OAAO,GAAI,CAAC,GAAG,OAAO,EACjC,UAAU,MAAM,EAChB,OAAO,OAAO,EACd,cAAc,aAAa,CAAC,aAAa,CAAC,KACzC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CACmC,CAAC;AAE/D,2BAA2B;AAC3B,eAAO,MAAM,QAAQ,GAAI,CAAC,GAAG,OAAO,EAClC,UAAU,MAAM,EAChB,OAAO,OAAO,EACd,cAAc,aAAa,CAAC,aAAa,CAAC,KACzC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CACoC,CAAC;AAEhE,4BAA4B;AAC5B,eAAO,MAAM,SAAS,GAAI,CAAC,GAAG,OAAO,EACnC,UAAU,MAAM,EAChB,cAAc,aAAa,CAAC,aAAa,CAAC,KACzC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAC+B,CAAC"}
|
package/dist/shared/api.js
CHANGED
|
@@ -45,43 +45,46 @@ export const getJwt = async () => {
|
|
|
45
45
|
if (!response.ok) {
|
|
46
46
|
throw new Error(`Auth failed: ${response.status} ${response.statusText}`);
|
|
47
47
|
}
|
|
48
|
-
const data = await response.json();
|
|
48
|
+
const data = (await response.json());
|
|
49
49
|
jwtToken = data.access_token;
|
|
50
50
|
return jwtToken;
|
|
51
51
|
};
|
|
52
|
+
async function executeRequest(endpoint, config, retryOnUnauthorized) {
|
|
53
|
+
const { baseUrl: root } = getConfig();
|
|
54
|
+
const jwt = await getJwt();
|
|
55
|
+
const url = new URL(`${root}${endpoint}`);
|
|
56
|
+
if (config.queryParams) {
|
|
57
|
+
Object.entries(config.queryParams).forEach(([key, value]) => {
|
|
58
|
+
if (value !== undefined) {
|
|
59
|
+
url.searchParams.set(key, String(value));
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
const response = await fetch(url.toString(), {
|
|
64
|
+
method: config.method,
|
|
65
|
+
headers: {
|
|
66
|
+
Accept: 'application/json',
|
|
67
|
+
'Content-Type': 'application/json',
|
|
68
|
+
Authorization: `Bearer ${jwt}`,
|
|
69
|
+
...config.headers,
|
|
70
|
+
},
|
|
71
|
+
body: config.body ? JSON.stringify(config.body) : undefined,
|
|
72
|
+
});
|
|
73
|
+
if (response.status === 401 && retryOnUnauthorized) {
|
|
74
|
+
clearJwtCache();
|
|
75
|
+
return executeRequest(endpoint, config, false);
|
|
76
|
+
}
|
|
77
|
+
if (!response.ok) {
|
|
78
|
+
throw new Error(`${config.method} ${endpoint} failed: ${response.status} ${response.statusText}`);
|
|
79
|
+
}
|
|
80
|
+
return response.json();
|
|
81
|
+
}
|
|
52
82
|
/**
|
|
53
|
-
* Base HTTP client with automatic JWT auth
|
|
54
|
-
*
|
|
55
|
-
* @param config - Request configuration
|
|
56
|
-
* @returns Result containing response data or error
|
|
83
|
+
* Base HTTP client with automatic JWT auth.
|
|
84
|
+
* On HTTP 401, clears the cached JWT and retries the request once (e.g. expired access token).
|
|
57
85
|
*/
|
|
58
86
|
export const apiFetch = async (endpoint, config) => {
|
|
59
|
-
return tryCatch(async () =>
|
|
60
|
-
const { baseUrl: root } = getConfig();
|
|
61
|
-
const token = await getJwt();
|
|
62
|
-
const url = new URL(`${root}${endpoint}`);
|
|
63
|
-
if (config.queryParams) {
|
|
64
|
-
Object.entries(config.queryParams).forEach(([key, value]) => {
|
|
65
|
-
if (value !== undefined) {
|
|
66
|
-
url.searchParams.set(key, String(value));
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
const response = await fetch(url.toString(), {
|
|
71
|
-
method: config.method,
|
|
72
|
-
headers: {
|
|
73
|
-
Accept: 'application/json',
|
|
74
|
-
'Content-Type': 'application/json',
|
|
75
|
-
Authorization: `Bearer ${token}`,
|
|
76
|
-
...config.headers,
|
|
77
|
-
},
|
|
78
|
-
body: config.body ? JSON.stringify(config.body) : undefined,
|
|
79
|
-
});
|
|
80
|
-
if (!response.ok) {
|
|
81
|
-
throw new Error(`${config.method} ${endpoint} failed: ${response.status}`);
|
|
82
|
-
}
|
|
83
|
-
return response.json();
|
|
84
|
-
});
|
|
87
|
+
return tryCatch(async () => executeRequest(endpoint, config, true));
|
|
85
88
|
};
|
|
86
89
|
/** GET request helper */
|
|
87
90
|
export const apiGet = (endpoint, queryParams) => apiFetch(endpoint, { method: 'GET', queryParams });
|
package/dist/shared/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/shared/api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAavC,IAAI,OAAO,GAAG,EAAE,CAAC;AACjB,IAAI,SAAS,GAAG,EAAE,CAAC;AAEnB;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,KAAa,EAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/shared/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/shared/pagination.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,MAAM,WAAW,UAAU;
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/shared/pagination.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,mCAAmC;AACnC,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,gCAAgC;AAChC,eAAO,MAAM,YAAY,IAAI,CAAC;AAC9B,eAAO,MAAM,YAAY,KAAK,CAAC;AAC/B,eAAO,MAAM,QAAQ,MAAM,CAAC;AAE5B;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAC9B,SAAS,UAAU,KAClB,QAAQ,CAAC,UAAU,CAIpB,CAAC;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,EAC/B,OAAO,CAAC,EAAE,EACV,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,gBAAgB,MAAM,KACrB,SAAS,CAAC,CAAC,CAab,CAAC;AAEF,8CAA8C;AAC9C,eAAO,MAAM,aAAa,GAAI,CAAC,EAC7B,OAAO,CAAC,EAAE,EACV,MAAM,MAAM,EACZ,MAAM,MAAM,KACX,CAAC,EAGH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/shared/pagination.ts"],"names":[],"mappings":"AAkBA,gCAAgC;AAChC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5B;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/shared/pagination.ts"],"names":[],"mappings":"AAkBA,gCAAgC;AAChC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAC9B,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AAC/B,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAE5B;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAmB,EACG,EAAE,CAAC,CAAC;IAC1B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,YAAY,CAAC;IAC/C,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,IAAI,YAAY,CAAC,CAAC;IACnE,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,SAAS;CAChC,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,KAAU,EACV,IAAY,EACZ,IAAY,EACZ,aAAsB,EACR,EAAE;IAChB,MAAM,KAAK,GAAG,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAE3C,OAAO;QACL,KAAK;QACL,IAAI;QACJ,IAAI;QACJ,aAAa,EAAE,KAAK;QACpB,UAAU;QACV,OAAO,EAAE,IAAI,GAAG,UAAU,GAAG,CAAC;QAC9B,WAAW,EAAE,IAAI,GAAG,CAAC;KACtB,CAAC;AACJ,CAAC,CAAC;AAEF,8CAA8C;AAC9C,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,KAAU,EACV,IAAY,EACZ,IAAY,EACP,EAAE;IACP,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,CAAC;AAC1C,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/shared/result.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/shared/result.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,IAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAE5B,kCAAkC;AAClC,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAA0B,CAAC;AAEhF,8BAA8B;AAC9B,eAAO,MAAM,OAAO,GAAI,CAAC,GAAG,KAAK,EAAE,OAAO,CAAC,KAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAG3D,CAAC;AAEH,kDAAkD;AAClD,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,CAAC,EAC5B,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KACnB,MAAM,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAwB,CAAC;AAE1D,8CAA8C;AAC9C,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,CAAC,EAC5B,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KACnB,MAAM,IAAI;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAyB,CAAC;AAE5D,6CAA6C;AAC7C,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAKnD,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,CAAC,KAAG,CACvB,CAAC;AAElD,mCAAmC;AACnC,eAAO,MAAM,GAAG,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EACzB,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,KAClB,MAAM,CAAC,CAAC,EAAE,CAAC,CAA6D,CAAC;AAE5E,iCAAiC;AACjC,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC9B,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,KAClB,MAAM,CAAC,CAAC,EAAE,CAAC,CAA6D,CAAC;AAE5E,0DAA0D;AAC1D,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7B,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EACpB,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAC7B,MAAM,CAAC,CAAC,EAAE,CAAC,CAAoD,CAAC;AAEnE,gEAAgE;AAChE,eAAO,MAAM,QAAQ,GAAU,CAAC,EAC9B,IAAI,MAAM,OAAO,CAAC,CAAC,CAAC,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAO1B,CAAC"}
|
package/dist/shared/result.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/** Creates a successful Result */
|
|
2
2
|
export const success = (value) => ({ ok: true, value });
|
|
3
3
|
/** Creates a failed Result */
|
|
4
|
-
export const failure = (error) => ({
|
|
4
|
+
export const failure = (error) => ({
|
|
5
|
+
ok: false,
|
|
6
|
+
error,
|
|
7
|
+
});
|
|
5
8
|
/** Type guard to check if Result is successful */
|
|
6
9
|
export const isSuccess = (result) => result.ok === true;
|
|
7
10
|
/** Type guard to check if Result is failed */
|
|
@@ -16,11 +19,11 @@ export const unwrap = (result) => {
|
|
|
16
19
|
/** Returns value if success, otherwise returns defaultValue */
|
|
17
20
|
export const getOrElse = (result, defaultValue) => isSuccess(result) ? result.value : defaultValue;
|
|
18
21
|
/** Transforms the success value */
|
|
19
|
-
export const map = (result, fn) => isSuccess(result) ? success(fn(result.value)) : result;
|
|
22
|
+
export const map = (result, fn) => (isSuccess(result) ? success(fn(result.value)) : result);
|
|
20
23
|
/** Transforms the error value */
|
|
21
|
-
export const mapError = (result, fn) => isFailure(result) ? failure(fn(result.error)) : result;
|
|
24
|
+
export const mapError = (result, fn) => (isFailure(result) ? failure(fn(result.error)) : result);
|
|
22
25
|
/** Chains Result-returning functions - flatMap pattern */
|
|
23
|
-
export const flatMap = (result, fn) => isSuccess(result) ? fn(result.value) : result;
|
|
26
|
+
export const flatMap = (result, fn) => (isSuccess(result) ? fn(result.value) : result);
|
|
24
27
|
/** Wraps async function to return Result instead of throwing */
|
|
25
28
|
export const tryCatch = async (fn) => {
|
|
26
29
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/shared/result.ts"],"names":[],"mappings":"AASA,kCAAkC;AAClC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,KAAQ,EAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAEhF,8BAA8B;AAC9B,MAAM,CAAC,MAAM,OAAO,GAAG,CAAY,KAAQ,EAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/shared/result.ts"],"names":[],"mappings":"AASA,kCAAkC;AAClC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAI,KAAQ,EAAoB,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAEhF,8BAA8B;AAC9B,MAAM,CAAC,MAAM,OAAO,GAAG,CAAY,KAAQ,EAAoB,EAAE,CAAC,CAAC;IACjE,EAAE,EAAE,KAAK;IACT,KAAK;CACN,CAAC,CAAC;AAEH,kDAAkD;AAClD,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,MAAoB,EACc,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC;AAE1D,8CAA8C;AAC9C,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,MAAoB,EACe,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC;AAE5D,6CAA6C;AAC7C,MAAM,CAAC,MAAM,MAAM,GAAG,CAAO,MAAoB,EAAK,EAAE;IACtD,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,MAAM,MAAM,CAAC,KAAK,CAAC;AACrB,CAAC,CAAC;AAEF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAO,MAAoB,EAAE,YAAe,EAAK,EAAE,CAC1E,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC;AAElD,mCAAmC;AACnC,MAAM,CAAC,MAAM,GAAG,GAAG,CACjB,MAAoB,EACpB,EAAmB,EACL,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,iCAAiC;AACjC,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,MAAoB,EACpB,EAAmB,EACL,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5E,0DAA0D;AAC1D,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,MAAoB,EACpB,EAA8B,EAChB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,gEAAgE;AAChE,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,EAAoB,EACO,EAAE;IAC7B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,EAAE,EAAE,CAAC;QACzB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,OAAO,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,22 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syn7xx/testops-mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "TestOps MCP Server - Model Context Protocol server for test operations",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"files": [
|
|
9
|
-
"dist"
|
|
9
|
+
"dist",
|
|
10
|
+
"CHANGELOG.md"
|
|
10
11
|
],
|
|
11
12
|
"bin": {
|
|
12
13
|
"testops-mcp-server": "dist/index.js"
|
|
13
14
|
},
|
|
14
15
|
"scripts": {
|
|
16
|
+
"prepublishOnly": "npm run build",
|
|
15
17
|
"build": "tsc --project tsconfig.json",
|
|
16
18
|
"start": "node dist/index.js",
|
|
17
19
|
"dev": "tsc --watch",
|
|
18
20
|
"lint": "eslint 'src/**/*.ts'",
|
|
19
|
-
"lint:fix": "eslint 'src/**/*.ts' --fix"
|
|
21
|
+
"lint:fix": "eslint 'src/**/*.ts' --fix",
|
|
22
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
23
|
+
"format:check": "prettier --check \"src/**/*.ts\"",
|
|
24
|
+
"release": "release-it",
|
|
25
|
+
"release:dry": "release-it --dry-run",
|
|
26
|
+
"release:patch": "release-it patch",
|
|
27
|
+
"release:minor": "release-it minor",
|
|
28
|
+
"release:major": "release-it major"
|
|
20
29
|
},
|
|
21
30
|
"keywords": [
|
|
22
31
|
"mcp",
|
|
@@ -30,6 +39,9 @@
|
|
|
30
39
|
"type": "git",
|
|
31
40
|
"url": "https://github.com/syn7xx/testops-mcp-server.git"
|
|
32
41
|
},
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public"
|
|
44
|
+
},
|
|
33
45
|
"dependencies": {
|
|
34
46
|
"@cfworker/json-schema": "^4.1.1",
|
|
35
47
|
"@modelcontextprotocol/server": "2.0.0-alpha.2",
|
|
@@ -41,9 +53,11 @@
|
|
|
41
53
|
"eslint": "^9.0.0",
|
|
42
54
|
"eslint-config-prettier": "^9.1.0",
|
|
43
55
|
"eslint-plugin-prettier": "^5.1.3",
|
|
56
|
+
"globals": "^17.4.0",
|
|
44
57
|
"prettier": "^3.2.0",
|
|
45
58
|
"release-it": "^19.2.4",
|
|
46
|
-
"typescript": "^5.3.3"
|
|
59
|
+
"typescript": "^5.3.3",
|
|
60
|
+
"typescript-eslint": "^8.58.0"
|
|
47
61
|
},
|
|
48
62
|
"engines": {
|
|
49
63
|
"node": ">=20.0.0"
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TestOps Client Configuration
|
|
3
|
-
*/
|
|
4
|
-
/**
|
|
5
|
-
* Sets the TestOps base URL and API token (from MCP process args).
|
|
6
|
-
*/
|
|
7
|
-
export declare function configureTestOpsClient(options: {
|
|
8
|
-
baseUrl: string;
|
|
9
|
-
token: string;
|
|
10
|
-
}): void;
|
|
11
|
-
export declare function requireClientConfig(): {
|
|
12
|
-
baseUrl: string;
|
|
13
|
-
token: string;
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* Clears cached JWT (useful for re-authentication).
|
|
17
|
-
*/
|
|
18
|
-
export declare function clearJwtToken(): void;
|
|
19
|
-
/**
|
|
20
|
-
* Exchanges the API token for a JWT used on subsequent requests.
|
|
21
|
-
*/
|
|
22
|
-
export declare function getJwtToken(): Promise<string>;
|
|
23
|
-
/**
|
|
24
|
-
* Simplified HTTP client wrapper around fetch.
|
|
25
|
-
*/
|
|
26
|
-
export declare function testopsFetch<T = any>(endpoint: string, options?: {
|
|
27
|
-
method?: 'GET' | 'POST' | 'PATCH' | 'DELETE';
|
|
28
|
-
queryParams?: Record<string, string | number | boolean | undefined>;
|
|
29
|
-
body?: any;
|
|
30
|
-
}): Promise<T>;
|
|
31
|
-
/**
|
|
32
|
-
* GET request helper.
|
|
33
|
-
*/
|
|
34
|
-
export declare function testopsGet<T = any>(endpoint: string, queryParams?: Record<string, string | number | boolean | undefined>): Promise<T>;
|
|
35
|
-
/**
|
|
36
|
-
* POST request helper.
|
|
37
|
-
*/
|
|
38
|
-
export declare function testopsPost<T = any>(endpoint: string, body?: any, queryParams?: Record<string, string | number | boolean | undefined>): Promise<T>;
|
|
39
|
-
/**
|
|
40
|
-
* PATCH request helper.
|
|
41
|
-
*/
|
|
42
|
-
export declare function testopsPatch<T = any>(endpoint: string, body?: any, queryParams?: Record<string, string | number | boolean | undefined>): Promise<T>;
|
|
43
|
-
//# sourceMappingURL=config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAGxF;AAED,wBAAgB,mBAAmB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAOxE;AAID;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CA2BnD;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,GAAG,GAAG,EACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE;IACL,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IACpE,IAAI,CAAC,EAAE,GAAG,CAAC;CACT,GACP,OAAO,CAAC,CAAC,CAAC,CA4BZ;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,CAAC,GAAG,GAAG,EACpC,QAAQ,EAAE,MAAM,EAChB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GACpE,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,CAAC,GAAG,GAAG,EACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,GAAG,EACV,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GACpE,OAAO,CAAC,CAAC,CAAC,CAEZ;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,CAAC,GAAG,GAAG,EACtC,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,GAAG,EACV,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GACpE,OAAO,CAAC,CAAC,CAAC,CAEZ"}
|
package/dist/services/config.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TestOps Client Configuration
|
|
3
|
-
*/
|
|
4
|
-
let baseUrl = '';
|
|
5
|
-
let apiToken = '';
|
|
6
|
-
/**
|
|
7
|
-
* Sets the TestOps base URL and API token (from MCP process args).
|
|
8
|
-
*/
|
|
9
|
-
export function configureTestOpsClient(options) {
|
|
10
|
-
baseUrl = options.baseUrl.replace(/\/+$/, '');
|
|
11
|
-
apiToken = options.token;
|
|
12
|
-
}
|
|
13
|
-
export function requireClientConfig() {
|
|
14
|
-
if (!baseUrl || !apiToken) {
|
|
15
|
-
throw new Error('TestOps client is not configured: pass --url and --token when starting the server');
|
|
16
|
-
}
|
|
17
|
-
return { baseUrl, token: apiToken };
|
|
18
|
-
}
|
|
19
|
-
let jwtToken = null;
|
|
20
|
-
/**
|
|
21
|
-
* Clears cached JWT (useful for re-authentication).
|
|
22
|
-
*/
|
|
23
|
-
export function clearJwtToken() {
|
|
24
|
-
jwtToken = null;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Exchanges the API token for a JWT used on subsequent requests.
|
|
28
|
-
*/
|
|
29
|
-
export async function getJwtToken() {
|
|
30
|
-
if (jwtToken) {
|
|
31
|
-
return jwtToken;
|
|
32
|
-
}
|
|
33
|
-
const { baseUrl: root, token: userToken } = requireClientConfig();
|
|
34
|
-
const response = await fetch(`${root}/api/uaa/oauth/token`, {
|
|
35
|
-
method: 'POST',
|
|
36
|
-
headers: {
|
|
37
|
-
Accept: 'application/json',
|
|
38
|
-
'Content-Type': 'application/x-www-form-urlencoded',
|
|
39
|
-
},
|
|
40
|
-
body: new URLSearchParams({
|
|
41
|
-
grant_type: 'apitoken',
|
|
42
|
-
scope: 'openid',
|
|
43
|
-
token: userToken,
|
|
44
|
-
}),
|
|
45
|
-
});
|
|
46
|
-
if (!response.ok) {
|
|
47
|
-
throw new Error(`Failed to obtain JWT: ${response.status} ${response.statusText}`);
|
|
48
|
-
}
|
|
49
|
-
const data = await response.json();
|
|
50
|
-
jwtToken = data.access_token;
|
|
51
|
-
return jwtToken;
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Simplified HTTP client wrapper around fetch.
|
|
55
|
-
*/
|
|
56
|
-
export async function testopsFetch(endpoint, options = {}) {
|
|
57
|
-
const { baseUrl: root } = requireClientConfig();
|
|
58
|
-
const token = await getJwtToken();
|
|
59
|
-
const url = new URL(`${root}${endpoint}`);
|
|
60
|
-
if (options.queryParams) {
|
|
61
|
-
Object.entries(options.queryParams).forEach(([key, value]) => {
|
|
62
|
-
if (value !== undefined) {
|
|
63
|
-
url.searchParams.set(key, String(value));
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
const response = await fetch(url.toString(), {
|
|
68
|
-
method: options.method ?? 'GET',
|
|
69
|
-
headers: {
|
|
70
|
-
Accept: 'application/json',
|
|
71
|
-
'Content-Type': 'application/json',
|
|
72
|
-
Authorization: `Bearer ${token}`,
|
|
73
|
-
},
|
|
74
|
-
body: options.body ? JSON.stringify(options.body) : undefined,
|
|
75
|
-
});
|
|
76
|
-
if (!response.ok) {
|
|
77
|
-
throw new Error(`${options.method ?? 'GET'} ${endpoint} failed: ${response.status} ${response.statusText}`);
|
|
78
|
-
}
|
|
79
|
-
return response.json();
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* GET request helper.
|
|
83
|
-
*/
|
|
84
|
-
export async function testopsGet(endpoint, queryParams) {
|
|
85
|
-
return testopsFetch(endpoint, { method: 'GET', queryParams });
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* POST request helper.
|
|
89
|
-
*/
|
|
90
|
-
export async function testopsPost(endpoint, body, queryParams) {
|
|
91
|
-
return testopsFetch(endpoint, { method: 'POST', body, queryParams });
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* PATCH request helper.
|
|
95
|
-
*/
|
|
96
|
-
export async function testopsPatch(endpoint, body, queryParams) {
|
|
97
|
-
return testopsFetch(endpoint, { method: 'PATCH', body, queryParams });
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/services/config.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TestOps Services
|
|
3
|
-
*/
|
|
4
|
-
export { configureTestOpsClient, getJwtToken, clearJwtToken, testopsFetch, testopsGet, testopsPost, testopsPatch } from './config.js';
|
|
5
|
-
export * from './project.js';
|
|
6
|
-
export * from './test-plan.js';
|
|
7
|
-
export * from './test-case.js';
|
|
8
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtI,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
package/dist/services/index.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TestOps Services
|
|
3
|
-
*/
|
|
4
|
-
export { configureTestOpsClient, getJwtToken, clearJwtToken, testopsFetch, testopsGet, testopsPost, testopsPatch } from './config.js';
|
|
5
|
-
export * from './project.js';
|
|
6
|
-
export * from './test-plan.js';
|
|
7
|
-
export * from './test-case.js';
|
|
8
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACtI,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TestOps Project Service
|
|
3
|
-
*/
|
|
4
|
-
import { TestOpsProject } from './testops-types.js';
|
|
5
|
-
/**
|
|
6
|
-
* Lists projects visible to the authenticated user.
|
|
7
|
-
*/
|
|
8
|
-
export declare function getTestOpsProjects(options?: {
|
|
9
|
-
page?: number;
|
|
10
|
-
size?: number;
|
|
11
|
-
sort?: string;
|
|
12
|
-
}): Promise<TestOpsProject[]>;
|
|
13
|
-
/**
|
|
14
|
-
* Finds a project by name using the suggest endpoint.
|
|
15
|
-
*/
|
|
16
|
-
export declare function getTestOpsProjectByName(projectName: string): Promise<TestOpsProject | null>;
|
|
17
|
-
//# sourceMappingURL=project.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/services/project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,cAAc,EAAuB,MAAM,oBAAoB,CAAC;AAOzE;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,CAAC,EAAE;IAC/C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAM5B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAuBjG"}
|
package/dist/services/project.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TestOps Project Service
|
|
3
|
-
*/
|
|
4
|
-
import { testopsGet } from './config.js';
|
|
5
|
-
/**
|
|
6
|
-
* Lists projects visible to the authenticated user.
|
|
7
|
-
*/
|
|
8
|
-
export async function getTestOpsProjects(options) {
|
|
9
|
-
const data = await testopsGet('/api/project', { page: options?.page ?? 0, size: options?.size ?? 50, sort: options?.sort ?? 'name,ASC' });
|
|
10
|
-
return data.content || [];
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Finds a project by name using the suggest endpoint.
|
|
14
|
-
*/
|
|
15
|
-
export async function getTestOpsProjectByName(projectName) {
|
|
16
|
-
const data = await testopsGet('/api/project/suggest', { query: projectName, size: 10 });
|
|
17
|
-
if (!data.content?.length) {
|
|
18
|
-
return null;
|
|
19
|
-
}
|
|
20
|
-
const exactMatch = data.content.find((p) => p.name.toLowerCase() === projectName.toLowerCase());
|
|
21
|
-
if (exactMatch) {
|
|
22
|
-
return { id: exactMatch.id, name: exactMatch.name };
|
|
23
|
-
}
|
|
24
|
-
const partialMatch = data.content.find((p) => p.name.toLowerCase().includes(projectName.toLowerCase()));
|
|
25
|
-
return partialMatch ? { id: partialMatch.id, name: partialMatch.name } : null;
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=project.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/services/project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAQzC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,OAIxC;IACG,MAAM,IAAI,GAAG,MAAM,UAAU,CACzB,cAAc,EACd,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,CAC7F,CAAC;IACF,OAAO,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,WAAmB;IAC7D,MAAM,IAAI,GAAG,MAAM,UAAU,CACzB,sBAAsB,EACtB,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,CACnC,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAChC,CAAC,CAAoB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAC/E,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC;IACxD,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAoB,EAAE,EAAE,CAC5D,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,CAC3D,CAAC;IAEF,OAAO,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAClF,CAAC"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* TestOps Test Case Service
|
|
3
|
-
*/
|
|
4
|
-
import { TestOpsNormalizedScenario, TestOpsCustomFieldWithValues, TestOpsTestCase } from './testops-types.js';
|
|
5
|
-
/**
|
|
6
|
-
* Returns test case metadata plus flattened steps and custom fields when available.
|
|
7
|
-
*/
|
|
8
|
-
export declare function getTestOpsTestCaseDetail(testCaseId: number): Promise<{
|
|
9
|
-
id: any;
|
|
10
|
-
name: any;
|
|
11
|
-
steps: string[];
|
|
12
|
-
customFields: Record<string, string>;
|
|
13
|
-
tags: any;
|
|
14
|
-
owner: any;
|
|
15
|
-
}>;
|
|
16
|
-
/**
|
|
17
|
-
* Fetches scenario (steps + expected results) for a test case.
|
|
18
|
-
*/
|
|
19
|
-
export declare function getTestOpsTestCaseScenario(testCaseId: number): Promise<TestOpsNormalizedScenario>;
|
|
20
|
-
/**
|
|
21
|
-
* Updates a step (including expected result) for a test case.
|
|
22
|
-
*/
|
|
23
|
-
export declare function patchTestOpsScenarioStep(testCaseId: number, stepId: number, stepData: {
|
|
24
|
-
body?: string;
|
|
25
|
-
expectedResult?: string;
|
|
26
|
-
}): Promise<TestOpsNormalizedScenario>;
|
|
27
|
-
/**
|
|
28
|
-
* Sets the entire scenario (all steps) for a test case.
|
|
29
|
-
*/
|
|
30
|
-
export declare function setTestOpsTestCaseScenario(testCaseId: number, steps: Array<{
|
|
31
|
-
action: string;
|
|
32
|
-
expectedResult?: string;
|
|
33
|
-
}>): Promise<TestOpsNormalizedScenario>;
|
|
34
|
-
/**
|
|
35
|
-
* Fetches custom field values for a test case.
|
|
36
|
-
*/
|
|
37
|
-
export declare function getTestOpsTestCaseCustomFields(testCaseId: number): Promise<TestOpsCustomFieldWithValues[]>;
|
|
38
|
-
/**
|
|
39
|
-
* Updates custom field values for a test case.
|
|
40
|
-
*/
|
|
41
|
-
export declare function updateTestOpsTestCaseCustomFields(testCaseId: number, customFields: Array<{
|
|
42
|
-
customFieldId: number;
|
|
43
|
-
valueIds: number[];
|
|
44
|
-
}>): Promise<void>;
|
|
45
|
-
/**
|
|
46
|
-
* Searches test cases using AQL (Advanced Query Language).
|
|
47
|
-
*/
|
|
48
|
-
export declare function searchTestCasesByAQL(projectId: number, rql: string, options?: {
|
|
49
|
-
deleted?: boolean;
|
|
50
|
-
page?: number;
|
|
51
|
-
size?: number;
|
|
52
|
-
sort?: string;
|
|
53
|
-
}): Promise<{
|
|
54
|
-
testCases: TestOpsTestCase[];
|
|
55
|
-
total: number;
|
|
56
|
-
page: number;
|
|
57
|
-
size: number;
|
|
58
|
-
}>;
|
|
59
|
-
//# sourceMappingURL=test-case.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"test-case.d.ts","sourceRoot":"","sources":["../../src/services/test-case.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAGH,yBAAyB,EACzB,4BAA4B,EAC5B,eAAe,EAElB,MAAM,oBAAoB,CAAC;AAiD5B;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,UAAU,EAAE,MAAM;;;;;;;GAuChE;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC5C,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,yBAAyB,CAAC,CAEpC;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC1C,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE;IACN,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B,GACF,OAAO,CAAC,yBAAyB,CAAC,CAUpC;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC5C,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,KAAK,CAAC;IACT,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC,GACH,OAAO,CAAC,yBAAyB,CAAC,CAYpC;AAED;;GAEG;AACH,wBAAsB,8BAA8B,CAChD,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,4BAA4B,EAAE,CAAC,CAEzC;AAED;;GAEG;AACH,wBAAsB,iCAAiC,CACnD,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,KAAK,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC,GACH,OAAO,CAAC,IAAI,CAAC,CAEf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACtC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IACN,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB,GACF,OAAO,CAAC;IAAE,SAAS,EAAE,eAAe,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAmBtF"}
|