@atlassian-dc-mcp/common 0.17.0 → 0.18.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.
- package/CHANGELOG.md +23 -0
- package/build/__tests__/describe-error.test.d.ts +2 -0
- package/build/__tests__/describe-error.test.d.ts.map +1 -0
- package/build/__tests__/describe-error.test.js +54 -0
- package/build/__tests__/describe-error.test.js.map +1 -0
- package/build/__tests__/setup-cli.test.js +151 -44
- package/build/__tests__/setup-cli.test.js.map +1 -1
- package/build/config/__tests__/resolve-base.test.d.ts +2 -0
- package/build/config/__tests__/resolve-base.test.d.ts.map +1 -0
- package/build/config/__tests__/resolve-base.test.js +89 -0
- package/build/config/__tests__/resolve-base.test.js.map +1 -0
- package/build/config/index.d.ts +1 -0
- package/build/config/index.d.ts.map +1 -1
- package/build/config/index.js +1 -0
- package/build/config/index.js.map +1 -1
- package/build/config/resolve-base.d.ts +8 -0
- package/build/config/resolve-base.d.ts.map +1 -0
- package/build/config/resolve-base.js +31 -0
- package/build/config/resolve-base.js.map +1 -0
- package/build/config/source.d.ts +1 -0
- package/build/config/source.d.ts.map +1 -1
- package/build/config/source.js.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/build/setup/describe-error.d.ts +2 -0
- package/build/setup/describe-error.d.ts.map +1 -0
- package/build/setup/describe-error.js +50 -0
- package/build/setup/describe-error.js.map +1 -0
- package/build/setup/value-validator.d.ts +8 -0
- package/build/setup/value-validator.d.ts.map +1 -0
- package/build/setup/value-validator.js +57 -0
- package/build/setup/value-validator.js.map +1 -0
- package/build/setup-cli.d.ts +15 -0
- package/build/setup-cli.d.ts.map +1 -1
- package/build/setup-cli.js +140 -27
- package/build/setup-cli.js.map +1 -1
- package/jest.config.js +1 -0
- package/package.json +2 -2
- package/src/__tests__/describe-error.test.ts +70 -0
- package/src/__tests__/setup-cli.test.ts +181 -38
- package/src/config/__tests__/resolve-base.test.ts +101 -0
- package/src/config/index.ts +1 -0
- package/src/config/resolve-base.ts +43 -0
- package/src/config/source.ts +1 -0
- package/src/index.ts +1 -0
- package/src/setup/describe-error.ts +67 -0
- package/src/setup/value-validator.ts +59 -0
- package/src/setup-cli.ts +191 -30
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const NETWORK_CODE_HINTS = {
|
|
2
|
+
ENOTFOUND: 'could not resolve host',
|
|
3
|
+
EAI_AGAIN: 'DNS lookup temporarily failed',
|
|
4
|
+
ECONNREFUSED: 'connection refused',
|
|
5
|
+
ECONNRESET: 'connection reset by peer',
|
|
6
|
+
ETIMEDOUT: 'connection timed out',
|
|
7
|
+
ECONNABORTED: 'connection aborted',
|
|
8
|
+
EHOSTUNREACH: 'host is unreachable',
|
|
9
|
+
ENETUNREACH: 'network is unreachable',
|
|
10
|
+
EPROTO: 'TLS protocol error',
|
|
11
|
+
CERT_HAS_EXPIRED: 'server TLS certificate has expired',
|
|
12
|
+
DEPTH_ZERO_SELF_SIGNED_CERT: 'server uses a self-signed TLS certificate',
|
|
13
|
+
SELF_SIGNED_CERT_IN_CHAIN: 'server TLS certificate chain is self-signed',
|
|
14
|
+
UNABLE_TO_VERIFY_LEAF_SIGNATURE: 'server TLS certificate could not be verified',
|
|
15
|
+
ERR_TLS_CERT_ALTNAME_INVALID: 'server TLS certificate does not match the host name',
|
|
16
|
+
};
|
|
17
|
+
export function describeValidationError(error) {
|
|
18
|
+
if (isApiLikeError(error)) {
|
|
19
|
+
return formatApiError(error);
|
|
20
|
+
}
|
|
21
|
+
if (isAbortError(error)) {
|
|
22
|
+
return 'request was aborted (possibly timed out)';
|
|
23
|
+
}
|
|
24
|
+
const err = error;
|
|
25
|
+
const cause = err?.cause;
|
|
26
|
+
if (cause?.code) {
|
|
27
|
+
const hint = NETWORK_CODE_HINTS[cause.code] ?? 'network error';
|
|
28
|
+
const detail = cause.message ?? err?.message ?? 'unknown';
|
|
29
|
+
return `${hint} (${cause.code}: ${detail})`;
|
|
30
|
+
}
|
|
31
|
+
return err?.message ?? String(error);
|
|
32
|
+
}
|
|
33
|
+
function formatApiError(error) {
|
|
34
|
+
const status = `${error.status}${error.statusText ? ` ${error.statusText}` : ''}`.trim();
|
|
35
|
+
const url = error.url ? `${error.url} ` : '';
|
|
36
|
+
const hint = status.startsWith('401') || status.startsWith('403')
|
|
37
|
+
? ' Check the host, API base path, and API token.'
|
|
38
|
+
: '';
|
|
39
|
+
return `${url}returned ${status}.${hint}`.trim();
|
|
40
|
+
}
|
|
41
|
+
function isApiLikeError(error) {
|
|
42
|
+
return Boolean(error)
|
|
43
|
+
&& typeof error === 'object'
|
|
44
|
+
&& 'status' in error
|
|
45
|
+
&& typeof error.status === 'number';
|
|
46
|
+
}
|
|
47
|
+
function isAbortError(error) {
|
|
48
|
+
return Boolean(error && typeof error === 'object' && error.name === 'AbortError');
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=describe-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"describe-error.js","sourceRoot":"","sources":["../../src/setup/describe-error.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAA2B;IACjD,SAAS,EAAE,wBAAwB;IACnC,SAAS,EAAE,+BAA+B;IAC1C,YAAY,EAAE,oBAAoB;IAClC,UAAU,EAAE,0BAA0B;IACtC,SAAS,EAAE,sBAAsB;IACjC,YAAY,EAAE,oBAAoB;IAClC,YAAY,EAAE,qBAAqB;IACnC,WAAW,EAAE,wBAAwB;IACrC,MAAM,EAAE,oBAAoB;IAC5B,gBAAgB,EAAE,oCAAoC;IACtD,2BAA2B,EAAE,2CAA2C;IACxE,yBAAyB,EAAE,6CAA6C;IACxE,+BAA+B,EAAE,8CAA8C;IAC/E,4BAA4B,EAAE,qDAAqD;CACpF,CAAC;AAcF,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,0CAA0C,CAAC;IACpD,CAAC;IAED,MAAM,GAAG,GAAG,KAAiE,CAAC;IAC9E,MAAM,KAAK,GAAG,GAAG,EAAE,KAAK,CAAC;IACzB,IAAI,KAAK,EAAE,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC;QAC/D,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,IAAI,GAAG,EAAE,OAAO,IAAI,SAAS,CAAC;QAC1D,OAAO,GAAG,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM,GAAG,CAAC;IAC9C,CAAC;IAED,OAAO,GAAG,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,cAAc,CAAC,KAAmB;IACzC,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;IACzF,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAC/D,CAAC,CAAC,gDAAgD;QAClD,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,GAAG,GAAG,YAAY,MAAM,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,OAAO,CAAC,KAAK,CAAC;WAChB,OAAO,KAAK,KAAK,QAAQ;WACzB,QAAQ,IAAK,KAAgB;WAC7B,OAAQ,KAAsB,CAAC,MAAM,KAAK,QAAQ,CAAC;AAC1D,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,KAA2B,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;AAC3G,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type ValidationResult = true | string;
|
|
2
|
+
export declare class SetupValueValidator {
|
|
3
|
+
static host(raw: string): ValidationResult;
|
|
4
|
+
static apiBasePath(raw: string): ValidationResult;
|
|
5
|
+
static token(raw: string): ValidationResult;
|
|
6
|
+
static pageSize(raw: string): ValidationResult;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=value-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-validator.d.ts","sourceRoot":"","sources":["../../src/setup/value-validator.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,MAAM,CAAC;AAE7C,qBAAa,mBAAmB;IAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB;IAsB1C,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB;IAmBjD,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB;IAQ3C,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB;CAM/C"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export class SetupValueValidator {
|
|
2
|
+
static host(raw) {
|
|
3
|
+
const value = raw.trim();
|
|
4
|
+
if (value.length === 0) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
if (/\s/.test(value)) {
|
|
8
|
+
return 'must not contain whitespace';
|
|
9
|
+
}
|
|
10
|
+
try {
|
|
11
|
+
const url = new URL(/^https?:\/\//i.test(value) ? value : `https://${value}`);
|
|
12
|
+
if (!url.hostname) {
|
|
13
|
+
return 'must include a host name';
|
|
14
|
+
}
|
|
15
|
+
if (url.protocol !== 'http:' && url.protocol !== 'https:') {
|
|
16
|
+
return 'must use http or https';
|
|
17
|
+
}
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return 'enter a host name or http(s) URL';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
static apiBasePath(raw) {
|
|
25
|
+
const value = raw.trim();
|
|
26
|
+
if (value.length === 0) {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
if (/\s/.test(value)) {
|
|
30
|
+
return 'must not contain whitespace';
|
|
31
|
+
}
|
|
32
|
+
if (/^https?:\/\//i.test(value)) {
|
|
33
|
+
try {
|
|
34
|
+
new URL(value);
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return 'enter a valid http(s) URL';
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return value.startsWith('/') ? true : 'enter a path starting with / or a full http(s) URL';
|
|
42
|
+
}
|
|
43
|
+
static token(raw) {
|
|
44
|
+
const value = raw.trim();
|
|
45
|
+
if (value.length === 0) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
return /\s/.test(value) ? 'must not contain whitespace' : true;
|
|
49
|
+
}
|
|
50
|
+
static pageSize(raw) {
|
|
51
|
+
const trimmed = raw.trim();
|
|
52
|
+
return /^\d+$/.test(trimmed) && Number.parseInt(trimmed, 10) > 0
|
|
53
|
+
? true
|
|
54
|
+
: 'enter a positive integer';
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=value-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"value-validator.js","sourceRoot":"","sources":["../../src/setup/value-validator.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,mBAAmB;IAC9B,MAAM,CAAC,IAAI,CAAC,GAAW;QACrB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,6BAA6B,CAAC;QACvC,CAAC;QACD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;YAC9E,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAClB,OAAO,0BAA0B,CAAC;YACpC,CAAC;YACD,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC1D,OAAO,wBAAwB,CAAC;YAClC,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,kCAAkC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,GAAW;QAC5B,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,6BAA6B,CAAC;QACvC,CAAC;QACD,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;gBACf,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,2BAA2B,CAAC;YACrC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,oDAAoD,CAAC;IAC7F,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,GAAW;QACtB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,IAAI,CAAC;IACjE,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,GAAW;QACzB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC;YAC9D,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,0BAA0B,CAAC;IACjC,CAAC;CACF"}
|
package/build/setup-cli.d.ts
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
import { type ConfigRegistry } from './config/registry.js';
|
|
2
2
|
import type { ProductDefinition } from './config/source.js';
|
|
3
|
+
export type CredentialValidationContext = {
|
|
4
|
+
host: string;
|
|
5
|
+
apiBasePath: string;
|
|
6
|
+
token: string;
|
|
7
|
+
};
|
|
8
|
+
export type CredentialValidationResult = {
|
|
9
|
+
ok: true;
|
|
10
|
+
detail?: string;
|
|
11
|
+
} | {
|
|
12
|
+
ok: false;
|
|
13
|
+
message: string;
|
|
14
|
+
};
|
|
15
|
+
export type ValidateCredentials = (context: CredentialValidationContext) => Promise<CredentialValidationResult>;
|
|
3
16
|
export type SetupPrompts = {
|
|
4
17
|
input: (opts: {
|
|
5
18
|
message: string;
|
|
@@ -9,6 +22,7 @@ export type SetupPrompts = {
|
|
|
9
22
|
password: (opts: {
|
|
10
23
|
message: string;
|
|
11
24
|
mask?: string;
|
|
25
|
+
validate?: (raw: string) => true | string;
|
|
12
26
|
}) => Promise<string>;
|
|
13
27
|
confirm: (opts: {
|
|
14
28
|
message: string;
|
|
@@ -20,6 +34,7 @@ export type SetupDeps = {
|
|
|
20
34
|
log?: (message: string) => void;
|
|
21
35
|
exit?: (code: number) => void;
|
|
22
36
|
prompts?: SetupPrompts;
|
|
37
|
+
validateCredentials?: ValidateCredentials;
|
|
23
38
|
};
|
|
24
39
|
export declare function runSetup(product: ProductDefinition, deps?: SetupDeps): Promise<void>;
|
|
25
40
|
//# sourceMappingURL=setup-cli.d.ts.map
|
package/build/setup-cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-cli.d.ts","sourceRoot":"","sources":["../src/setup-cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEjF,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"setup-cli.d.ts","sourceRoot":"","sources":["../src/setup-cli.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEjF,OAAO,KAAK,EAEV,iBAAiB,EAElB,MAAM,oBAAoB,CAAC;AAyB5B,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAClC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC,MAAM,MAAM,mBAAmB,GAAG,CAChC,OAAO,EAAE,2BAA2B,KACjC,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAEzC,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnH,QAAQ,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnH,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC7E,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C,CAAC;AAQF,wBAAsB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,GAAE,SAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB9F"}
|
package/build/setup-cli.js
CHANGED
|
@@ -3,7 +3,9 @@ import { buildDefaultRegistry } from './config/registry.js';
|
|
|
3
3
|
import { getProductRuntimeConfig } from './config/runtime-config.js';
|
|
4
4
|
import { HomeFileSource, getHomeFilePath } from './config/sources/home-file.js';
|
|
5
5
|
import { MacosKeychainSource } from './config/sources/macos-keychain.js';
|
|
6
|
+
import { SetupValueValidator } from './setup/value-validator.js';
|
|
6
7
|
const FALLBACK_PAGE_SIZE = 25;
|
|
8
|
+
const MAX_VALIDATION_ATTEMPTS = 3;
|
|
7
9
|
const DEFAULT_PROMPTS = {
|
|
8
10
|
input: (opts) => inquirerInput(opts),
|
|
9
11
|
password: (opts) => inquirerPassword(opts),
|
|
@@ -19,22 +21,92 @@ export async function runSetup(product, deps = {}) {
|
|
|
19
21
|
log('');
|
|
20
22
|
const current = getProductRuntimeConfig(product);
|
|
21
23
|
printCurrent(log, registry, product, current);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
catch (error) {
|
|
27
|
-
if (isUserCancel(error)) {
|
|
28
|
-
exit(130);
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
throw error;
|
|
24
|
+
const answers = await collectAnswersWithValidation(product, deps, prompts, current, log, exit);
|
|
25
|
+
if (!answers) {
|
|
26
|
+
return;
|
|
32
27
|
}
|
|
33
28
|
const homeFile = requireHomeFile(registry);
|
|
34
29
|
writeNonSecretFields(registry, product, answers, homeFile, log);
|
|
35
|
-
const tokenWriter = await writeToken(registry, product, answers.
|
|
30
|
+
const tokenWriter = await writeToken(registry, product, answers.tokenToWrite, homeFile, log, prompts);
|
|
36
31
|
printSummary(log, product, answers, tokenWriter);
|
|
37
32
|
}
|
|
33
|
+
async function collectAnswersWithValidation(product, deps, prompts, current, log, exit) {
|
|
34
|
+
let defaults = current;
|
|
35
|
+
for (let attempt = 1;; attempt++) {
|
|
36
|
+
let answers;
|
|
37
|
+
try {
|
|
38
|
+
answers = await promptForValues(prompts, product, defaults);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
if (isUserCancel(error)) {
|
|
42
|
+
exit(130);
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
throw error;
|
|
46
|
+
}
|
|
47
|
+
const answerErrors = validateAnswers(product, answers);
|
|
48
|
+
if (answerErrors.length > 0) {
|
|
49
|
+
for (const message of answerErrors) {
|
|
50
|
+
log(`Validation failed: ${message}`);
|
|
51
|
+
}
|
|
52
|
+
const retry = await confirmRetry(prompts, 'Try again?');
|
|
53
|
+
if (retry) {
|
|
54
|
+
defaults = answersAsDefaults(answers);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
exit(1);
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
if (!deps.validateCredentials || !answers.tokenForValidation) {
|
|
61
|
+
return answers;
|
|
62
|
+
}
|
|
63
|
+
const result = await deps.validateCredentials({
|
|
64
|
+
host: answers.host,
|
|
65
|
+
apiBasePath: answers.apiBasePath,
|
|
66
|
+
token: answers.tokenForValidation,
|
|
67
|
+
});
|
|
68
|
+
if (result.ok) {
|
|
69
|
+
log(result.detail ? `Validation succeeded: ${result.detail}` : 'Validation succeeded.');
|
|
70
|
+
return answers;
|
|
71
|
+
}
|
|
72
|
+
log(`Validation failed: ${result.message}`);
|
|
73
|
+
const outcome = await offerRetryAfterFailure(prompts, attempt);
|
|
74
|
+
if (outcome === 'retry') {
|
|
75
|
+
defaults = answersAsDefaults(answers);
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (outcome === 'save-anyway') {
|
|
79
|
+
return answers;
|
|
80
|
+
}
|
|
81
|
+
exit(1);
|
|
82
|
+
return undefined;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function answersAsDefaults(answers) {
|
|
86
|
+
const pageSize = Number.parseInt(answers.defaultPageSize, 10);
|
|
87
|
+
return {
|
|
88
|
+
host: answers.host,
|
|
89
|
+
apiBasePath: answers.apiBasePath,
|
|
90
|
+
token: answers.tokenForValidation,
|
|
91
|
+
defaultPageSize: Number.isFinite(pageSize) && pageSize > 0 ? pageSize : undefined,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
async function confirmRetry(prompts, message) {
|
|
95
|
+
return prompts.confirm({ message, default: true });
|
|
96
|
+
}
|
|
97
|
+
async function offerRetryAfterFailure(prompts, attempt) {
|
|
98
|
+
if (attempt < MAX_VALIDATION_ATTEMPTS) {
|
|
99
|
+
const retry = await confirmRetry(prompts, 'Try again with different values?');
|
|
100
|
+
if (retry) {
|
|
101
|
+
return 'retry';
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const saveAnyway = await prompts.confirm({
|
|
105
|
+
message: 'Save configuration anyway?',
|
|
106
|
+
default: false,
|
|
107
|
+
});
|
|
108
|
+
return saveAnyway ? 'save-anyway' : 'abort';
|
|
109
|
+
}
|
|
38
110
|
function requireHomeFile(registry) {
|
|
39
111
|
const homeFile = registry.getWritableSource((s) => s instanceof HomeFileSource);
|
|
40
112
|
if (!homeFile) {
|
|
@@ -53,36 +125,74 @@ function printCurrent(log, registry, product, current) {
|
|
|
53
125
|
}
|
|
54
126
|
log('');
|
|
55
127
|
}
|
|
56
|
-
async function promptForValues(prompts, product,
|
|
128
|
+
async function promptForValues(prompts, product, defaults) {
|
|
57
129
|
const host = await prompts.input({
|
|
58
130
|
message: 'Host (e.g. jira.example.com):',
|
|
59
|
-
default:
|
|
131
|
+
default: defaults.host ?? '',
|
|
132
|
+
validate: SetupValueValidator.host,
|
|
60
133
|
});
|
|
61
134
|
const apiBasePath = await prompts.input({
|
|
62
135
|
message: 'API base path:',
|
|
63
|
-
default:
|
|
136
|
+
default: defaults.apiBasePath ?? product.defaultApiBasePath ?? '',
|
|
137
|
+
validate: SetupValueValidator.apiBasePath,
|
|
64
138
|
});
|
|
65
139
|
const defaultPageSize = await prompts.input({
|
|
66
140
|
message: 'Default page size:',
|
|
67
|
-
default: String(
|
|
68
|
-
validate:
|
|
69
|
-
? true
|
|
70
|
-
: 'Enter a positive integer',
|
|
141
|
+
default: String(defaults.defaultPageSize ?? FALLBACK_PAGE_SIZE),
|
|
142
|
+
validate: SetupValueValidator.pageSize,
|
|
71
143
|
});
|
|
72
|
-
const token = await promptForToken(prompts,
|
|
73
|
-
return {
|
|
144
|
+
const token = await promptForToken(prompts, defaults.token);
|
|
145
|
+
return {
|
|
146
|
+
host: host.trim(),
|
|
147
|
+
apiBasePath: apiBasePath.trim(),
|
|
148
|
+
defaultPageSize: defaultPageSize.trim(),
|
|
149
|
+
...token,
|
|
150
|
+
};
|
|
74
151
|
}
|
|
75
152
|
async function promptForToken(prompts, existing) {
|
|
76
|
-
const entered = await prompts.password({
|
|
153
|
+
const entered = await prompts.password({
|
|
154
|
+
message: 'API token:',
|
|
155
|
+
mask: '*',
|
|
156
|
+
validate: SetupValueValidator.token,
|
|
157
|
+
});
|
|
77
158
|
const trimmed = entered.trim();
|
|
78
159
|
if (trimmed.length > 0) {
|
|
79
|
-
return trimmed;
|
|
160
|
+
return { tokenToWrite: trimmed, tokenForValidation: trimmed };
|
|
80
161
|
}
|
|
81
162
|
if (!existing) {
|
|
82
|
-
return undefined;
|
|
163
|
+
return { tokenToWrite: undefined, tokenForValidation: undefined };
|
|
164
|
+
}
|
|
165
|
+
const keepExisting = await prompts.confirm({ message: 'Keep existing token?', default: true });
|
|
166
|
+
return {
|
|
167
|
+
tokenToWrite: undefined,
|
|
168
|
+
tokenForValidation: keepExisting ? existing : undefined,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function validateAnswers(product, answers) {
|
|
172
|
+
const errors = [];
|
|
173
|
+
for (const [label, value, validator] of [
|
|
174
|
+
['host', answers.host, SetupValueValidator.host],
|
|
175
|
+
['API base path', answers.apiBasePath, SetupValueValidator.apiBasePath],
|
|
176
|
+
['API token', answers.tokenForValidation ?? '', SetupValueValidator.token],
|
|
177
|
+
]) {
|
|
178
|
+
const result = validator(value);
|
|
179
|
+
if (result !== true) {
|
|
180
|
+
errors.push(`${label}: ${result}`);
|
|
181
|
+
}
|
|
83
182
|
}
|
|
84
|
-
|
|
85
|
-
|
|
183
|
+
const pageSize = SetupValueValidator.pageSize(answers.defaultPageSize);
|
|
184
|
+
if (pageSize !== true) {
|
|
185
|
+
errors.push(`default page size: ${pageSize}`);
|
|
186
|
+
}
|
|
187
|
+
if (!answers.tokenForValidation) {
|
|
188
|
+
errors.push(`API token is required (${product.envVars.token}).`);
|
|
189
|
+
}
|
|
190
|
+
const hasHost = answers.host.length > 0;
|
|
191
|
+
const hasFullApiBasePath = /^https?:\/\//i.test(answers.apiBasePath);
|
|
192
|
+
if (!hasHost && !hasFullApiBasePath) {
|
|
193
|
+
errors.push(`Enter ${product.envVars.host}, or enter a full URL for ${product.envVars.apiBasePath}.`);
|
|
194
|
+
}
|
|
195
|
+
return errors;
|
|
86
196
|
}
|
|
87
197
|
function writeNonSecretFields(registry, product, answers, homeFile, log) {
|
|
88
198
|
for (const key of ['host', 'apiBasePath', 'defaultPageSize']) {
|
|
@@ -131,7 +241,10 @@ async function tryWrite(writer, product, token, log, prompts) {
|
|
|
131
241
|
message: 'Fall back to plaintext home file with mode 0600?',
|
|
132
242
|
default: false,
|
|
133
243
|
});
|
|
134
|
-
|
|
244
|
+
if (fallback) {
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
247
|
+
throw new Error('Token was not saved because keychain write failed and plaintext fallback was declined');
|
|
135
248
|
}
|
|
136
249
|
return false;
|
|
137
250
|
}
|
|
@@ -164,7 +277,7 @@ function printSummary(log, product, answers, tokenWriter) {
|
|
|
164
277
|
log(` apiBasePath: ${answers.apiBasePath || '(unchanged)'}`);
|
|
165
278
|
log(` defaultPageSize: ${answers.defaultPageSize || '(unchanged)'}`);
|
|
166
279
|
if (tokenWriter) {
|
|
167
|
-
log(` token: ${maskToken(answers.
|
|
280
|
+
log(` token: ${maskToken(answers.tokenToWrite)} (stored in ${describeWriter(tokenWriter, product)})`);
|
|
168
281
|
}
|
|
169
282
|
else {
|
|
170
283
|
log(' token: (unchanged)');
|
package/build/setup-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-cli.js","sourceRoot":"","sources":["../src/setup-cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"setup-cli.js","sourceRoot":"","sources":["../src/setup-cli.ts"],"names":[],"mappings":"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"}
|
package/jest.config.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlassian-dc-mcp/common",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"main": "build/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"publishConfig": {
|
|
40
40
|
"access": "public"
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "69b3068c96667bf755394cff3de1e40211ed8ea8"
|
|
43
43
|
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { describeValidationError } from '../setup/describe-error.js';
|
|
2
|
+
|
|
3
|
+
describe('describeValidationError', () => {
|
|
4
|
+
it('formats HTTP errors with status, URL, and a 401 hint', () => {
|
|
5
|
+
const apiError = {
|
|
6
|
+
name: 'ApiError',
|
|
7
|
+
status: 401,
|
|
8
|
+
statusText: 'Unauthorized',
|
|
9
|
+
url: 'https://jira.example.com/rest/api/2/myself',
|
|
10
|
+
body: {},
|
|
11
|
+
};
|
|
12
|
+
expect(describeValidationError(apiError)).toBe(
|
|
13
|
+
'https://jira.example.com/rest/api/2/myself returned 401 Unauthorized. Check the host, API base path, and API token.',
|
|
14
|
+
);
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('formats non-auth HTTP errors without the auth hint', () => {
|
|
18
|
+
const apiError = {
|
|
19
|
+
name: 'ApiError',
|
|
20
|
+
status: 500,
|
|
21
|
+
statusText: 'Internal Server Error',
|
|
22
|
+
url: 'https://jira.example.com/rest/api/2/myself',
|
|
23
|
+
};
|
|
24
|
+
expect(describeValidationError(apiError)).toBe(
|
|
25
|
+
'https://jira.example.com/rest/api/2/myself returned 500 Internal Server Error.',
|
|
26
|
+
);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('unwraps Node fetch TypeErrors with ECONNREFUSED via cause', () => {
|
|
30
|
+
const error = Object.assign(new TypeError('fetch failed'), {
|
|
31
|
+
cause: Object.assign(new Error('connect ECONNREFUSED 127.0.0.1:443'), {
|
|
32
|
+
code: 'ECONNREFUSED',
|
|
33
|
+
}),
|
|
34
|
+
});
|
|
35
|
+
expect(describeValidationError(error)).toBe(
|
|
36
|
+
'connection refused (ECONNREFUSED: connect ECONNREFUSED 127.0.0.1:443)',
|
|
37
|
+
);
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
it('unwraps DNS failures as ENOTFOUND', () => {
|
|
41
|
+
const error = Object.assign(new TypeError('fetch failed'), {
|
|
42
|
+
cause: Object.assign(new Error('getaddrinfo ENOTFOUND jira.nope'), {
|
|
43
|
+
code: 'ENOTFOUND',
|
|
44
|
+
}),
|
|
45
|
+
});
|
|
46
|
+
expect(describeValidationError(error)).toBe(
|
|
47
|
+
'could not resolve host (ENOTFOUND: getaddrinfo ENOTFOUND jira.nope)',
|
|
48
|
+
);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('recognises self-signed certificate errors', () => {
|
|
52
|
+
const error = Object.assign(new TypeError('fetch failed'), {
|
|
53
|
+
cause: Object.assign(new Error('self-signed certificate'), {
|
|
54
|
+
code: 'DEPTH_ZERO_SELF_SIGNED_CERT',
|
|
55
|
+
}),
|
|
56
|
+
});
|
|
57
|
+
expect(describeValidationError(error)).toBe(
|
|
58
|
+
'server uses a self-signed TLS certificate (DEPTH_ZERO_SELF_SIGNED_CERT: self-signed certificate)',
|
|
59
|
+
);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('describes aborted requests', () => {
|
|
63
|
+
const error = Object.assign(new Error('aborted'), { name: 'AbortError' });
|
|
64
|
+
expect(describeValidationError(error)).toBe('request was aborted (possibly timed out)');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
it('falls back to the raw message when nothing else matches', () => {
|
|
68
|
+
expect(describeValidationError(new Error('something weird'))).toBe('something weird');
|
|
69
|
+
});
|
|
70
|
+
});
|