@copado/agentia-cli 0.29.0-alpha.0 → 0.33.0-alpha.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 (117) hide show
  1. package/README.md +1015 -54
  2. package/dist/commands/auth/get.d.ts +2 -0
  3. package/dist/commands/auth/get.js +13 -2
  4. package/dist/commands/auth/get.js.map +1 -1
  5. package/dist/commands/auth/set.d.ts +6 -0
  6. package/dist/commands/auth/set.js +44 -4
  7. package/dist/commands/auth/set.js.map +1 -1
  8. package/dist/commands/testing/build/list.d.ts +16 -0
  9. package/dist/commands/testing/build/list.js +47 -0
  10. package/dist/commands/testing/build/list.js.map +1 -0
  11. package/dist/commands/testing/build/logs.d.ts +21 -0
  12. package/dist/commands/testing/build/logs.js +42 -0
  13. package/dist/commands/testing/build/logs.js.map +1 -0
  14. package/dist/commands/testing/build/run.d.ts +19 -0
  15. package/dist/commands/testing/build/run.js +39 -0
  16. package/dist/commands/testing/build/run.js.map +1 -0
  17. package/dist/commands/testing/create.d.ts +18 -0
  18. package/dist/commands/testing/create.js +46 -0
  19. package/dist/commands/testing/create.js.map +1 -0
  20. package/dist/commands/testing/job/create.d.ts +18 -0
  21. package/dist/commands/testing/job/create.js +46 -0
  22. package/dist/commands/testing/job/create.js.map +1 -0
  23. package/dist/commands/testing/job/download.d.ts +22 -0
  24. package/dist/commands/testing/job/download.js +56 -0
  25. package/dist/commands/testing/job/download.js.map +1 -0
  26. package/dist/commands/testing/job/files.d.ts +19 -0
  27. package/dist/commands/testing/job/files.js +35 -0
  28. package/dist/commands/testing/job/files.js.map +1 -0
  29. package/dist/commands/testing/job/get.d.ts +16 -0
  30. package/dist/commands/testing/job/get.js +31 -0
  31. package/dist/commands/testing/job/get.js.map +1 -0
  32. package/dist/commands/testing/job/list.d.ts +14 -0
  33. package/dist/commands/testing/job/list.js +32 -0
  34. package/dist/commands/testing/job/list.js.map +1 -0
  35. package/dist/commands/testing/job/upload.d.ts +29 -0
  36. package/dist/commands/testing/job/upload.js +57 -0
  37. package/dist/commands/testing/job/upload.js.map +1 -0
  38. package/dist/commands/testing/logs.d.ts +21 -0
  39. package/dist/commands/testing/logs.js +42 -0
  40. package/dist/commands/testing/logs.js.map +1 -0
  41. package/dist/commands/testing/project/create.d.ts +14 -0
  42. package/dist/commands/testing/project/create.js +36 -0
  43. package/dist/commands/testing/project/create.js.map +1 -0
  44. package/dist/commands/testing/project/get.d.ts +15 -0
  45. package/dist/commands/testing/project/get.js +30 -0
  46. package/dist/commands/testing/project/get.js.map +1 -0
  47. package/dist/commands/testing/project/list.d.ts +13 -0
  48. package/dist/commands/testing/project/list.js +31 -0
  49. package/dist/commands/testing/project/list.js.map +1 -0
  50. package/dist/commands/testing/robot/create.d.ts +19 -0
  51. package/dist/commands/testing/robot/create.js +60 -0
  52. package/dist/commands/testing/robot/create.js.map +1 -0
  53. package/dist/commands/testing/robot/get.d.ts +16 -0
  54. package/dist/commands/testing/robot/get.js +31 -0
  55. package/dist/commands/testing/robot/get.js.map +1 -0
  56. package/dist/commands/testing/robot/list.d.ts +13 -0
  57. package/dist/commands/testing/robot/list.js +28 -0
  58. package/dist/commands/testing/robot/list.js.map +1 -0
  59. package/dist/commands/testing/run.d.ts +19 -0
  60. package/dist/commands/testing/run.js +32 -0
  61. package/dist/commands/testing/run.js.map +1 -0
  62. package/dist/commands/testing/status.d.ts +16 -0
  63. package/dist/commands/testing/status.js +47 -0
  64. package/dist/commands/testing/status.js.map +1 -0
  65. package/dist/commands/testing/test/create.d.ts +1 -0
  66. package/dist/commands/testing/test/create.js +2 -0
  67. package/dist/commands/testing/test/create.js.map +1 -0
  68. package/dist/commands/testing/test/logs.d.ts +1 -0
  69. package/dist/commands/testing/test/logs.js +2 -0
  70. package/dist/commands/testing/test/logs.js.map +1 -0
  71. package/dist/commands/testing/test/run.d.ts +1 -0
  72. package/dist/commands/testing/test/run.js +2 -0
  73. package/dist/commands/testing/test/run.js.map +1 -0
  74. package/dist/commands/testing/test/status.d.ts +1 -0
  75. package/dist/commands/testing/test/status.js +2 -0
  76. package/dist/commands/testing/test/status.js.map +1 -0
  77. package/dist/commands/testing/test/update.d.ts +1 -0
  78. package/dist/commands/testing/test/update.js +2 -0
  79. package/dist/commands/testing/test/update.js.map +1 -0
  80. package/dist/commands/testing/update.d.ts +29 -0
  81. package/dist/commands/testing/update.js +57 -0
  82. package/dist/commands/testing/update.js.map +1 -0
  83. package/dist/commands/testing/variable/create.d.ts +20 -0
  84. package/dist/commands/testing/variable/create.js +65 -0
  85. package/dist/commands/testing/variable/create.js.map +1 -0
  86. package/dist/commands/testing/variable/delete.d.ts +19 -0
  87. package/dist/commands/testing/variable/delete.js +30 -0
  88. package/dist/commands/testing/variable/delete.js.map +1 -0
  89. package/dist/commands/testing/variable/list.d.ts +15 -0
  90. package/dist/commands/testing/variable/list.js +40 -0
  91. package/dist/commands/testing/variable/list.js.map +1 -0
  92. package/dist/lib/credential-store.d.ts +4 -0
  93. package/dist/lib/credential-store.js +14 -0
  94. package/dist/lib/credential-store.js.map +1 -1
  95. package/dist/lib/mcp/testing-tools.d.ts +162 -0
  96. package/dist/lib/mcp/testing-tools.js +401 -0
  97. package/dist/lib/mcp/testing-tools.js.map +1 -0
  98. package/dist/lib/mcp/tools.d.ts +299 -0
  99. package/dist/lib/mcp/tools.js +3 -0
  100. package/dist/lib/mcp/tools.js.map +1 -1
  101. package/dist/lib/testing-config.d.ts +17 -0
  102. package/dist/lib/testing-config.js +68 -0
  103. package/dist/lib/testing-config.js.map +1 -0
  104. package/dist/lib/testing-flags.d.ts +33 -0
  105. package/dist/lib/testing-flags.js +70 -0
  106. package/dist/lib/testing-flags.js.map +1 -0
  107. package/dist/lib/testing-gateway.d.ts +33 -0
  108. package/dist/lib/testing-gateway.js +161 -0
  109. package/dist/lib/testing-gateway.js.map +1 -0
  110. package/dist/lib/testing-operations.d.ts +110 -0
  111. package/dist/lib/testing-operations.js +284 -0
  112. package/dist/lib/testing-operations.js.map +1 -0
  113. package/dist/lib/testing-types.d.ts +138 -0
  114. package/dist/lib/testing-types.js +190 -0
  115. package/dist/lib/testing-types.js.map +1 -0
  116. package/oclif.manifest.json +3239 -799
  117. package/package.json +4 -1
@@ -0,0 +1,68 @@
1
+ import { getCredential, getCrtDomain, getCrtOrgId } from './credential-store.js';
2
+ import { loadEnvFile } from './env-file.js';
3
+ export const CRT_ALLOWED_DOMAINS = [
4
+ 'dev-robotic.copado.com',
5
+ 'qa.robotic.copado.com',
6
+ 'au-robotic.copado.com',
7
+ 'ca-robotic.copado.com',
8
+ 'eu-robotic.copado.com',
9
+ 'gb-robotic.copado.com',
10
+ 'in-robotic.copado.com',
11
+ 'jp-robotic.copado.com',
12
+ 'sg-robotic.copado.com',
13
+ 'robotic.copado.com',
14
+ ];
15
+ export function normalizeCrtDomain(value) {
16
+ const trimmed = value.trim().replace(/^https?:\/\//u, '').replace(/\/+$/u, '');
17
+ if (!CRT_ALLOWED_DOMAINS.includes(trimmed)) {
18
+ throw new Error(`CRT domain must be one of: ${CRT_ALLOWED_DOMAINS.join(', ')}.`);
19
+ }
20
+ return trimmed;
21
+ }
22
+ export function normalizeCrtOrgId(value) {
23
+ const raw = typeof value === 'number' ? value.toString() : value.trim();
24
+ if (!/^\d+$/u.test(raw)) {
25
+ throw new Error('CRT organization ID must be a positive integer.');
26
+ }
27
+ const parsed = Number.parseInt(raw, 10);
28
+ if (!Number.isSafeInteger(parsed) || parsed <= 0) {
29
+ throw new Error('CRT organization ID must be a positive integer.');
30
+ }
31
+ return parsed;
32
+ }
33
+ function envValue(...keys) {
34
+ for (const key of keys) {
35
+ const value = process.env[key]?.trim();
36
+ if (value !== undefined && value.length > 0) {
37
+ return value;
38
+ }
39
+ }
40
+ return undefined;
41
+ }
42
+ export function resolveTestingCredentials(overrides = {}) {
43
+ loadEnvFile();
44
+ const domain = overrides.domain ?? envValue('COPADO_ROBOTIC_DOMAIN', 'CRT_DOMAIN') ?? getCrtDomain();
45
+ const org = overrides.org ?? envValue('COPADO_ROBOTIC_ORG_ID', 'CRT_ORG') ?? getCrtOrgId();
46
+ const pat = overrides.pat ?? envValue('COPADO_ROBOTIC_API_KEY', 'CRT_AI_KEY') ?? getCredential('crt');
47
+ if (domain === undefined || domain === null || domain.trim().length === 0) {
48
+ throw new Error('CRT domain is not configured. Run `agentia auth set --crt-domain <domain>` or set COPADO_ROBOTIC_DOMAIN.');
49
+ }
50
+ if (org === undefined || org === null || org.toString().trim().length === 0) {
51
+ throw new Error('CRT organization ID is not configured. Run `agentia auth set --crt-org <org-id>` or set COPADO_ROBOTIC_ORG_ID.');
52
+ }
53
+ if (pat === null || pat === undefined || pat.trim().length === 0) {
54
+ throw new Error('CRT PAT token is not configured. Run `agentia auth set --crt <pat-token>` or set COPADO_ROBOTIC_API_KEY.');
55
+ }
56
+ return {
57
+ domain: normalizeCrtDomain(domain),
58
+ orgId: normalizeCrtOrgId(org),
59
+ pat,
60
+ };
61
+ }
62
+ export function platformBaseUrl(domain) {
63
+ return `https://platform.${domain}`;
64
+ }
65
+ export function paceBaseUrl(domain) {
66
+ return `https://api.${domain}`;
67
+ }
68
+ //# sourceMappingURL=testing-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-config.js","sourceRoot":"","sources":["../../src/lib/testing-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,YAAY,EAAE,WAAW,EAAC,MAAM,uBAAuB,CAAA;AAC9E,OAAO,EAAC,WAAW,EAAC,MAAM,eAAe,CAAA;AAEzC,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,wBAAwB;IACxB,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,uBAAuB;IACvB,oBAAoB;CACZ,CAAA;AAgBV,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IAE9E,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAA2B,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,8BAA8B,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClF,CAAC;IAED,OAAO,OAA2B,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAsB;IACtD,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IAEvE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IACvC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,GAAG,IAAc;IACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAA;QACtC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,YAAwC,EAAE;IAClF,WAAW,EAAE,CAAA;IAEb,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,IAAI,QAAQ,CAAC,uBAAuB,EAAE,YAAY,CAAC,IAAI,YAAY,EAAE,CAAA;IACpG,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,QAAQ,CAAC,uBAAuB,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE,CAAA;IAC1F,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,QAAQ,CAAC,wBAAwB,EAAE,YAAY,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAA;IAErG,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1E,MAAM,IAAI,KAAK,CAAC,0GAA0G,CAAC,CAAA;IAC7H,CAAC;IAED,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,gHAAgH,CAAC,CAAA;IACnI,CAAC;IAED,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,0GAA0G,CAAC,CAAA;IAC7H,CAAC;IAED,OAAO;QACL,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC;QAClC,KAAK,EAAE,iBAAiB,CAAC,GAAG,CAAC;QAC7B,GAAG;KACJ,CAAA;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,oBAAoB,MAAM,EAAE,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAc;IACxC,OAAO,eAAe,MAAM,EAAE,CAAA;AAChC,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { type TestingConnectionOptions } from './testing-operations.js';
2
+ export declare const testingConnectionFlags: {
3
+ domain: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
4
+ org: import("@oclif/core/interfaces").OptionFlag<number | undefined, import("@oclif/core/interfaces").CustomOptions>;
5
+ pat: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
6
+ };
7
+ export declare const testingProjectFlag: {
8
+ project: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
9
+ };
10
+ export declare const testingJobFlag: {
11
+ job: import("@oclif/core/interfaces").OptionFlag<number, import("@oclif/core/interfaces").CustomOptions>;
12
+ };
13
+ export declare const testingBranchFlag: {
14
+ branch: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
15
+ };
16
+ export declare const testingOutputFlags: {
17
+ output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
18
+ };
19
+ export declare const testingFileInputFlags: {
20
+ dir: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
21
+ file: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
22
+ };
23
+ export declare const testingUploadOperationFlags: {
24
+ add: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
25
+ remove: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
26
+ replace: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
27
+ };
28
+ export type TestingConnectionFlagValues = {
29
+ domain?: string;
30
+ org?: number;
31
+ pat?: string;
32
+ };
33
+ export declare function testingConnectionOptions(flags: TestingConnectionFlagValues): TestingConnectionOptions;
@@ -0,0 +1,70 @@
1
+ import { Flags } from '@oclif/core';
2
+ export const testingConnectionFlags = {
3
+ domain: Flags.string({
4
+ description: 'CRT domain hostname. Defaults to COPADO_ROBOTIC_DOMAIN, CRT_DOMAIN, or stored auth config.',
5
+ }),
6
+ org: Flags.integer({
7
+ description: 'CRT organization ID. Defaults to COPADO_ROBOTIC_ORG_ID, CRT_ORG, or stored auth config.',
8
+ }),
9
+ pat: Flags.string({
10
+ description: 'CRT PAT token override. Prefer auth set --crt or COPADO_ROBOTIC_API_KEY for regular use.',
11
+ }),
12
+ };
13
+ export const testingProjectFlag = {
14
+ project: Flags.integer({
15
+ char: 'p',
16
+ description: 'CRT project ID.',
17
+ required: true,
18
+ }),
19
+ };
20
+ export const testingJobFlag = {
21
+ job: Flags.integer({
22
+ char: 'j',
23
+ description: 'CRT job/test ID.',
24
+ required: true,
25
+ }),
26
+ };
27
+ export const testingBranchFlag = {
28
+ branch: Flags.string({
29
+ description: 'Optional CRT branch name for file operations.',
30
+ }),
31
+ };
32
+ export const testingOutputFlags = {
33
+ output: Flags.string({
34
+ char: 'o',
35
+ description: 'Write raw output to this file path.',
36
+ }),
37
+ };
38
+ export const testingFileInputFlags = {
39
+ dir: Flags.string({
40
+ description: 'Directory containing Robot Framework files to upload. Can be provided multiple times.',
41
+ multiple: true,
42
+ }),
43
+ file: Flags.string({
44
+ char: 'f',
45
+ description: 'Robot Framework file to upload. Can be provided multiple times.',
46
+ multiple: true,
47
+ }),
48
+ };
49
+ export const testingUploadOperationFlags = {
50
+ add: Flags.string({
51
+ description: 'Add a file using local[:remote] syntax. Can be provided multiple times.',
52
+ multiple: true,
53
+ }),
54
+ remove: Flags.string({
55
+ description: 'Remove a remote CRT file path. Can be provided multiple times.',
56
+ multiple: true,
57
+ }),
58
+ replace: Flags.string({
59
+ description: 'Replace a file using local[:remote] syntax. Can be provided multiple times.',
60
+ multiple: true,
61
+ }),
62
+ };
63
+ export function testingConnectionOptions(flags) {
64
+ return {
65
+ domain: flags.domain,
66
+ org: flags.org,
67
+ pat: flags.pat,
68
+ };
69
+ }
70
+ //# sourceMappingURL=testing-flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-flags.js","sourceRoot":"","sources":["../../src/lib/testing-flags.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AAIjC,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,4FAA4F;KAC1G,CAAC;IACF,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;QACjB,WAAW,EAAE,yFAAyF;KACvG,CAAC;IACF,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,0FAA0F;KACxG,CAAC;CACH,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;QACrB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,iBAAiB;QAC9B,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC;QACjB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,kBAAkB;QAC/B,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,+CAA+C;KAC7D,CAAC;CACH,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,qCAAqC;KACnD,CAAC;CACH,CAAA;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,uFAAuF;QACpG,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC;QACjB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,iEAAiE;QAC9E,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAA;AAED,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;QAChB,WAAW,EAAE,yEAAyE;QACtF,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;QACnB,WAAW,EAAE,gEAAgE;QAC7E,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;QACpB,WAAW,EAAE,6EAA6E;QAC1F,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAA;AAQD,MAAM,UAAU,wBAAwB,CAAC,KAAkC;IACzE,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAA;AACH,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { URL } from 'node:url';
2
+ import { type TestingConnectionOverrides } from './testing-config.js';
3
+ export declare const TESTING_DEFAULT_TIMEOUT_MS = 45000;
4
+ export type TestingRequest = {
5
+ body?: unknown;
6
+ endpoint: string;
7
+ method: 'DELETE' | 'GET' | 'PATCH' | 'POST' | 'PUT';
8
+ responseType?: 'json' | 'text';
9
+ service: 'pace' | 'platform';
10
+ };
11
+ export type TestingHttpRequestFn = (url: URL, method: string, headers: Record<string, string>, body: unknown, timeoutMs: number) => Promise<string>;
12
+ export type TestingGatewayCallOptions = TestingConnectionOverrides & {
13
+ timeoutMs?: number;
14
+ };
15
+ export declare class TestingGatewayError extends Error {
16
+ readonly requestMethod?: string;
17
+ readonly requestUrl?: string;
18
+ readonly retryAfterSeconds?: number;
19
+ readonly statusCode?: number;
20
+ constructor(message: string, options?: {
21
+ request?: {
22
+ method?: string;
23
+ url?: string;
24
+ };
25
+ retryAfterSeconds?: number;
26
+ statusCode?: number;
27
+ });
28
+ }
29
+ export declare class TestingGateway {
30
+ static call<T = unknown>(request: TestingRequest, options?: TestingGatewayCallOptions): Promise<T>;
31
+ }
32
+ export declare function setTestingHttpRequestForTests(requestFn: TestingHttpRequestFn): void;
33
+ export declare function resetTestingHttpRequestForTests(): void;
@@ -0,0 +1,161 @@
1
+ import * as http from 'node:http';
2
+ import * as https from 'node:https';
3
+ import { createRequire } from 'node:module';
4
+ import { URL } from 'node:url';
5
+ import { createTransactionId, getGatewayTransactionId } from './cicd-gateway.js';
6
+ import { paceBaseUrl, platformBaseUrl, resolveTestingCredentials, } from './testing-config.js';
7
+ const require = createRequire(import.meta.url);
8
+ const packageJson = require('../../package.json');
9
+ export const TESTING_DEFAULT_TIMEOUT_MS = 45_000;
10
+ export class TestingGatewayError extends Error {
11
+ requestMethod;
12
+ requestUrl;
13
+ retryAfterSeconds;
14
+ statusCode;
15
+ constructor(message, options = {}) {
16
+ super(message);
17
+ this.name = 'TestingGatewayError';
18
+ this.requestMethod = options.request?.method;
19
+ this.requestUrl = options.request?.url;
20
+ this.retryAfterSeconds = options.retryAfterSeconds;
21
+ this.statusCode = options.statusCode;
22
+ }
23
+ }
24
+ function userAgent() {
25
+ return `agentia-cli/${packageJson.version}`;
26
+ }
27
+ function transactionIdForRequest() {
28
+ return getGatewayTransactionId() ?? createTransactionId();
29
+ }
30
+ function parseRetryAfterHeader(value) {
31
+ if (value === undefined)
32
+ return undefined;
33
+ const raw = Array.isArray(value) ? value[0] : value;
34
+ if (raw === undefined)
35
+ return undefined;
36
+ if (typeof raw === 'number')
37
+ return Number.isFinite(raw) && raw >= 0 ? Math.ceil(raw) : undefined;
38
+ const trimmed = raw.trim();
39
+ if (/^\d+$/u.test(trimmed))
40
+ return Number.parseInt(trimmed, 10);
41
+ const dateMs = Date.parse(trimmed);
42
+ return Number.isNaN(dateMs) ? undefined : Math.max(0, Math.ceil((dateMs - Date.now()) / 1000));
43
+ }
44
+ function extractErrorMessage(raw) {
45
+ try {
46
+ const parsed = JSON.parse(raw);
47
+ for (const value of [parsed.message, parsed.error, parsed.title]) {
48
+ if (typeof value === 'string' && value.trim().length > 0)
49
+ return value.trim();
50
+ }
51
+ }
52
+ catch {
53
+ return raw.trim().length > 0 ? raw.trim() : undefined;
54
+ }
55
+ return undefined;
56
+ }
57
+ function defaultHttpsRequest(url, method, headers, body, timeoutMs) {
58
+ const hasBody = body !== undefined;
59
+ const payload = hasBody ? JSON.stringify(body) : '';
60
+ const requestHeaders = {
61
+ Accept: 'application/json',
62
+ ...headers,
63
+ };
64
+ if (hasBody) {
65
+ requestHeaders['Content-Type'] = requestHeaders['Content-Type'] ?? 'application/json';
66
+ requestHeaders['Content-Length'] = Buffer.byteLength(payload).toString();
67
+ }
68
+ const transport = url.protocol === 'http:' ? http : https;
69
+ return new Promise((resolve, reject) => {
70
+ const req = transport.request({
71
+ headers: requestHeaders,
72
+ hostname: url.hostname,
73
+ method,
74
+ path: `${url.pathname}${url.search}`,
75
+ port: url.port.length > 0 ? Number(url.port) : undefined,
76
+ timeout: timeoutMs,
77
+ }, (res) => {
78
+ const chunks = [];
79
+ res.on('data', (chunk) => chunks.push(chunk));
80
+ res.on('end', () => {
81
+ const raw = Buffer.concat(chunks).toString('utf8');
82
+ const status = res.statusCode ?? 0;
83
+ if (status >= 400) {
84
+ const message = extractErrorMessage(raw) ?? `CRT request failed (${status}).`;
85
+ reject(new TestingGatewayError(message, {
86
+ retryAfterSeconds: status === 429 ? parseRetryAfterHeader(res.headers['retry-after']) : undefined,
87
+ statusCode: status,
88
+ }));
89
+ return;
90
+ }
91
+ resolve(raw);
92
+ });
93
+ });
94
+ req.on('error', (error) => reject(error));
95
+ req.on('timeout', () => {
96
+ req.destroy(new Error(`CRT request timed out after ${Math.ceil(timeoutMs / 1000)} seconds.`));
97
+ });
98
+ if (hasBody)
99
+ req.write(payload);
100
+ req.end();
101
+ });
102
+ }
103
+ let httpRequestFn = defaultHttpsRequest;
104
+ function requestUrl(request, domain) {
105
+ const baseUrl = request.service === 'platform' ? platformBaseUrl(domain) : paceBaseUrl(domain);
106
+ return new URL(request.endpoint, `${baseUrl}/`);
107
+ }
108
+ function withRequestSuffix(message, request) {
109
+ const suffix = request.url === undefined ? '' : ` Request: ${request.method ?? ''} ${request.url}`.trimEnd();
110
+ if (suffix.length === 0)
111
+ return message;
112
+ return message.endsWith('.') ? `${message} ${suffix}` : `${message}. ${suffix}`;
113
+ }
114
+ async function executeTestingRequest(request, options = {}) {
115
+ const credentials = resolveTestingCredentials(options);
116
+ const url = requestUrl(request, credentials.domain);
117
+ const requestInfo = { method: request.method, url: url.toString() };
118
+ const headers = {
119
+ 'User-Agent': userAgent(),
120
+ 'X-Authorization': credentials.pat,
121
+ 'x-transaction-id': transactionIdForRequest(),
122
+ };
123
+ let raw;
124
+ try {
125
+ raw = await httpRequestFn(url, request.method, headers, request.body, options.timeoutMs ?? TESTING_DEFAULT_TIMEOUT_MS);
126
+ }
127
+ catch (error) {
128
+ if (error instanceof TestingGatewayError) {
129
+ throw new TestingGatewayError(withRequestSuffix(error.message, requestInfo), {
130
+ request: requestInfo,
131
+ retryAfterSeconds: error.retryAfterSeconds,
132
+ statusCode: error.statusCode,
133
+ });
134
+ }
135
+ throw error;
136
+ }
137
+ if (raw.trim().length === 0)
138
+ return undefined;
139
+ if (request.responseType === 'text')
140
+ return raw;
141
+ try {
142
+ return JSON.parse(raw);
143
+ }
144
+ catch {
145
+ throw new TestingGatewayError(withRequestSuffix(`CRT API returned non-JSON response: ${raw}`, requestInfo), {
146
+ request: requestInfo,
147
+ });
148
+ }
149
+ }
150
+ export class TestingGateway {
151
+ static async call(request, options = {}) {
152
+ return executeTestingRequest(request, options);
153
+ }
154
+ }
155
+ export function setTestingHttpRequestForTests(requestFn) {
156
+ httpRequestFn = requestFn;
157
+ }
158
+ export function resetTestingHttpRequestForTests() {
159
+ httpRequestFn = defaultHttpsRequest;
160
+ }
161
+ //# sourceMappingURL=testing-gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"testing-gateway.js","sourceRoot":"","sources":["../../src/lib/testing-gateway.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import { type TestingGatewayCallOptions } from './testing-gateway.js';
2
+ import { type TestingAuthor, type TestingBuild, type TestingBuildRunResult, type TestingBuildStatus, type TestingCreateVariableRequest, type TestingDownloadResult, type TestingFileEntry, type TestingFileOperation, type TestingJob, type TestingJobCreateResult, type TestingLogResult, type TestingProject, type TestingRecord, type TestingRobot, type TestingVariable } from './testing-types.js';
3
+ export declare const DEFAULT_TESTING_AUTHOR: TestingAuthor;
4
+ export type TestingFileCollectionInput = {
5
+ dirs?: string[];
6
+ files?: string[];
7
+ };
8
+ export type TestingConnectionOptions = TestingGatewayCallOptions;
9
+ export type TestingCreateJobOptions = TestingConnectionOptions & {
10
+ description?: string;
11
+ fileInput?: TestingFileCollectionInput;
12
+ name: string;
13
+ projectId: number;
14
+ robotId: number | string;
15
+ };
16
+ export type TestingUploadOptions = TestingConnectionOptions & {
17
+ author?: TestingAuthor;
18
+ branch?: string;
19
+ jobId: number;
20
+ operations: TestingFileOperation[];
21
+ projectId: number;
22
+ };
23
+ export type TestingDownloadOptions = TestingConnectionOptions & {
24
+ branch?: string;
25
+ files: string[];
26
+ jobId: number;
27
+ outputDir?: string;
28
+ projectId: number;
29
+ };
30
+ export declare function listTestingProjects(options?: TestingConnectionOptions & {
31
+ name?: string;
32
+ }): Promise<TestingProject[]>;
33
+ export declare function createTestingProject(options: TestingConnectionOptions & {
34
+ description?: string;
35
+ name: string;
36
+ }): Promise<TestingProject>;
37
+ export declare function getTestingProject(options: TestingConnectionOptions & {
38
+ projectId: number | string;
39
+ }): Promise<TestingProject>;
40
+ export declare function listTestingRobots(options: TestingConnectionOptions & {
41
+ projectId: number;
42
+ }): Promise<TestingRobot[]>;
43
+ export declare function createTestingRobot(options: TestingConnectionOptions & {
44
+ description?: string;
45
+ fwVersion?: string;
46
+ kind?: 'cloud' | 'QConnect';
47
+ name: string;
48
+ os?: string;
49
+ projectId: number;
50
+ robotType?: string;
51
+ }): Promise<TestingRobot>;
52
+ export declare function getTestingRobot(options: TestingConnectionOptions & {
53
+ projectId: number;
54
+ robotId: number | string;
55
+ }): Promise<TestingRobot>;
56
+ export declare function listTestingJobs(options: TestingConnectionOptions & {
57
+ name?: string;
58
+ projectId: number;
59
+ }): Promise<TestingJob[]>;
60
+ export declare function getTestingJob(options: TestingConnectionOptions & {
61
+ jobId: number | string;
62
+ projectId: number;
63
+ }): Promise<TestingJob>;
64
+ export declare function createTestingJob(options: TestingCreateJobOptions): Promise<TestingJobCreateResult>;
65
+ export declare function listTestingJobFiles(options: TestingConnectionOptions & {
66
+ jobId: number;
67
+ projectId: number;
68
+ }): Promise<TestingFileEntry[]>;
69
+ export declare function uploadTestingJobFiles(options: TestingUploadOptions): Promise<{
70
+ operations: TestingFileOperation[];
71
+ response: TestingRecord;
72
+ }>;
73
+ export declare function downloadTestingJobFiles(options: TestingDownloadOptions): Promise<TestingDownloadResult>;
74
+ export declare function runTestingBuild(options: TestingConnectionOptions & {
75
+ jobId: number;
76
+ projectId: number;
77
+ }): Promise<TestingBuildRunResult>;
78
+ export declare function listTestingBuilds(options: TestingConnectionOptions & {
79
+ jobId?: number;
80
+ projectId: number;
81
+ resultSize?: 'compact';
82
+ status?: TestingBuildStatus;
83
+ }): Promise<TestingBuild[]>;
84
+ export declare function getTestingBuildLogs(options: TestingConnectionOptions & {
85
+ buildId: number;
86
+ jobId: number;
87
+ output?: string;
88
+ projectId: number;
89
+ }): Promise<TestingLogResult>;
90
+ export declare function listTestingVariables(options: TestingConnectionOptions & {
91
+ jobId?: number;
92
+ projectId: number;
93
+ robotId?: number;
94
+ }): Promise<TestingVariable[]>;
95
+ export declare function createTestingVariable(options: TestingConnectionOptions & TestingCreateVariableRequest & {
96
+ projectId: number;
97
+ }): Promise<unknown>;
98
+ export declare function deleteTestingVariable(options: TestingConnectionOptions & {
99
+ projectId: number;
100
+ variableId: string;
101
+ }): Promise<{
102
+ projectId: number;
103
+ variableId: string;
104
+ }>;
105
+ export declare function buildFileAddOperations(input: TestingFileCollectionInput): TestingFileOperation[];
106
+ export declare function buildFileOperationsFromSpecs(specs: {
107
+ add?: string[];
108
+ remove?: string[];
109
+ replace?: string[];
110
+ }): TestingFileOperation[];