@atlassian-dc-mcp/common 0.16.0 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/build/__tests__/runtime-config.test.js +65 -14
  3. package/build/__tests__/runtime-config.test.js.map +1 -1
  4. package/build/__tests__/setup-cli.test.d.ts +2 -0
  5. package/build/__tests__/setup-cli.test.d.ts.map +1 -0
  6. package/build/__tests__/setup-cli.test.js +166 -0
  7. package/build/__tests__/setup-cli.test.js.map +1 -0
  8. package/build/config/__tests__/registry.test.d.ts +2 -0
  9. package/build/config/__tests__/registry.test.d.ts.map +1 -0
  10. package/build/config/__tests__/registry.test.js +105 -0
  11. package/build/config/__tests__/registry.test.js.map +1 -0
  12. package/build/config/__tests__/resolve-base.test.d.ts +2 -0
  13. package/build/config/__tests__/resolve-base.test.d.ts.map +1 -0
  14. package/build/config/__tests__/resolve-base.test.js +89 -0
  15. package/build/config/__tests__/resolve-base.test.js.map +1 -0
  16. package/build/config/__tests__/sources/env-file.test.d.ts +2 -0
  17. package/build/config/__tests__/sources/env-file.test.d.ts.map +1 -0
  18. package/build/config/__tests__/sources/env-file.test.js +93 -0
  19. package/build/config/__tests__/sources/env-file.test.js.map +1 -0
  20. package/build/config/__tests__/sources/home-file.test.d.ts +2 -0
  21. package/build/config/__tests__/sources/home-file.test.d.ts.map +1 -0
  22. package/build/config/__tests__/sources/home-file.test.js +114 -0
  23. package/build/config/__tests__/sources/home-file.test.js.map +1 -0
  24. package/build/config/__tests__/sources/macos-keychain.test.d.ts +2 -0
  25. package/build/config/__tests__/sources/macos-keychain.test.d.ts.map +1 -0
  26. package/build/config/__tests__/sources/macos-keychain.test.js +109 -0
  27. package/build/config/__tests__/sources/macos-keychain.test.js.map +1 -0
  28. package/build/config/__tests__/sources/process-env.test.d.ts +2 -0
  29. package/build/config/__tests__/sources/process-env.test.d.ts.map +1 -0
  30. package/build/config/__tests__/sources/process-env.test.js +51 -0
  31. package/build/config/__tests__/sources/process-env.test.js.map +1 -0
  32. package/build/config/index.d.ts +9 -0
  33. package/build/config/index.d.ts.map +1 -0
  34. package/build/config/index.js +9 -0
  35. package/build/config/index.js.map +1 -0
  36. package/build/config/registry.d.ts +26 -0
  37. package/build/config/registry.d.ts.map +1 -0
  38. package/build/config/registry.js +51 -0
  39. package/build/config/registry.js.map +1 -0
  40. package/build/config/resolve-base.d.ts +8 -0
  41. package/build/config/resolve-base.d.ts.map +1 -0
  42. package/build/config/resolve-base.js +31 -0
  43. package/build/config/resolve-base.js.map +1 -0
  44. package/build/config/runtime-config.d.ts +14 -0
  45. package/build/config/runtime-config.d.ts.map +1 -0
  46. package/build/config/runtime-config.js +41 -0
  47. package/build/config/runtime-config.js.map +1 -0
  48. package/build/config/source.d.ts +28 -0
  49. package/build/config/source.d.ts.map +1 -0
  50. package/build/config/source.js +11 -0
  51. package/build/config/source.js.map +1 -0
  52. package/build/config/sources/dotenv-file-cache.d.ts +12 -0
  53. package/build/config/sources/dotenv-file-cache.d.ts.map +1 -0
  54. package/build/config/sources/dotenv-file-cache.js +41 -0
  55. package/build/config/sources/dotenv-file-cache.js.map +1 -0
  56. package/build/config/sources/env-file.d.ts +16 -0
  57. package/build/config/sources/env-file.d.ts.map +1 -0
  58. package/build/config/sources/env-file.js +48 -0
  59. package/build/config/sources/env-file.js.map +1 -0
  60. package/build/config/sources/home-file.d.ts +19 -0
  61. package/build/config/sources/home-file.d.ts.map +1 -0
  62. package/build/config/sources/home-file.js +102 -0
  63. package/build/config/sources/home-file.js.map +1 -0
  64. package/build/config/sources/macos-keychain.d.ts +26 -0
  65. package/build/config/sources/macos-keychain.d.ts.map +1 -0
  66. package/build/config/sources/macos-keychain.js +88 -0
  67. package/build/config/sources/macos-keychain.js.map +1 -0
  68. package/build/config/sources/process-env.d.ts +8 -0
  69. package/build/config/sources/process-env.d.ts.map +1 -0
  70. package/build/config/sources/process-env.js +12 -0
  71. package/build/config/sources/process-env.js.map +1 -0
  72. package/build/index.d.ts +2 -1
  73. package/build/index.d.ts.map +1 -1
  74. package/build/index.js +2 -1
  75. package/build/index.js.map +1 -1
  76. package/build/setup-cli.d.ts +25 -0
  77. package/build/setup-cli.d.ts.map +1 -0
  78. package/build/setup-cli.js +215 -0
  79. package/build/setup-cli.js.map +1 -0
  80. package/package.json +5 -4
  81. package/src/__tests__/runtime-config.test.ts +75 -27
  82. package/src/__tests__/setup-cli.test.ts +175 -0
  83. package/src/config/__tests__/registry.test.ts +118 -0
  84. package/src/config/__tests__/resolve-base.test.ts +101 -0
  85. package/src/config/__tests__/sources/env-file.test.ts +113 -0
  86. package/src/config/__tests__/sources/home-file.test.ts +129 -0
  87. package/src/config/__tests__/sources/macos-keychain.test.ts +136 -0
  88. package/src/config/__tests__/sources/process-env.test.ts +59 -0
  89. package/src/config/index.ts +8 -0
  90. package/src/config/registry.ts +79 -0
  91. package/src/config/resolve-base.ts +43 -0
  92. package/src/config/runtime-config.ts +60 -0
  93. package/src/config/source.ts +37 -0
  94. package/src/config/sources/dotenv-file-cache.ts +54 -0
  95. package/src/config/sources/env-file.ts +61 -0
  96. package/src/config/sources/home-file.ts +121 -0
  97. package/src/config/sources/macos-keychain.ts +117 -0
  98. package/src/config/sources/process-env.ts +15 -0
  99. package/src/index.ts +2 -1
  100. package/src/setup-cli.ts +308 -0
  101. package/tsconfig.tsbuildinfo +1 -1
  102. package/build/runtime-config.d.ts +0 -14
  103. package/build/runtime-config.d.ts.map +0 -1
  104. package/build/runtime-config.js +0 -123
  105. package/build/runtime-config.js.map +0 -1
  106. package/src/runtime-config.ts +0 -176
@@ -0,0 +1,41 @@
1
+ import { buildDefaultRegistry } from './registry.js';
2
+ const FALLBACK_PAGE_SIZE = 25;
3
+ export { ATLASSIAN_DC_MCP_CONFIG_FILE_ENV_VAR } from './sources/env-file.js';
4
+ let registry = buildDefaultRegistry();
5
+ export function initializeRuntimeConfig(options) {
6
+ registry.initialize(options);
7
+ }
8
+ function resolveString(product, key) {
9
+ return registry.resolve(product, key).value;
10
+ }
11
+ function parsePositiveInteger(value) {
12
+ if (!value) {
13
+ return undefined;
14
+ }
15
+ const trimmed = value.trim();
16
+ if (!/^\d+$/.test(trimmed)) {
17
+ return undefined;
18
+ }
19
+ const parsed = Number.parseInt(trimmed, 10);
20
+ return parsed > 0 ? parsed : undefined;
21
+ }
22
+ export function getProductRuntimeConfig(product) {
23
+ return {
24
+ host: resolveString(product, 'host'),
25
+ apiBasePath: resolveString(product, 'apiBasePath'),
26
+ token: resolveString(product, 'token'),
27
+ defaultPageSize: parsePositiveInteger(resolveString(product, 'defaultPageSize')) ?? FALLBACK_PAGE_SIZE,
28
+ };
29
+ }
30
+ export function validateProductRuntimeConfig(product) {
31
+ const config = getProductRuntimeConfig(product);
32
+ const missing = [];
33
+ if (!config.token) {
34
+ missing.push(product.envVars.token);
35
+ }
36
+ if (!config.host && !config.apiBasePath) {
37
+ missing.push(`${product.envVars.host} or ${product.envVars.apiBasePath}`);
38
+ }
39
+ return missing;
40
+ }
41
+ //# sourceMappingURL=runtime-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-config.js","sourceRoot":"","sources":["../../src/config/runtime-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAuB,MAAM,eAAe,CAAC;AAG1E,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAS9B,OAAO,EAAE,oCAAoC,EAAE,MAAM,uBAAuB,CAAC;AAE7E,IAAI,QAAQ,GAAmB,oBAAoB,EAAE,CAAC;AAEtD,MAAM,UAAU,uBAAuB,CAAC,OAA0B;IAChE,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,aAAa,CAAC,OAA0B,EAAE,GAAc;IAC/D,OAAO,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC;AAC9C,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAyB;IACrD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5C,OAAO,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAA0B;IAChE,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC;QACpC,WAAW,EAAE,aAAa,CAAC,OAAO,EAAE,aAAa,CAAC;QAClD,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC;QACtC,eAAe,EACb,oBAAoB,CAAC,aAAa,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,IAAI,kBAAkB;KACxF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,OAA0B;IACrE,MAAM,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,28 @@
1
+ export type ConfigKey = 'host' | 'apiBasePath' | 'token' | 'defaultPageSize';
2
+ export type SourceId = 'process-env' | 'env-file' | 'home-file' | 'macos-keychain';
3
+ export type SourceLocation = {
4
+ sourceId: SourceId;
5
+ detail?: string;
6
+ };
7
+ export interface ProductDefinition {
8
+ readonly id: string;
9
+ readonly envVars: Record<ConfigKey, string>;
10
+ readonly defaultApiBasePath?: string;
11
+ }
12
+ export interface ReadableSource {
13
+ readonly id: SourceId;
14
+ readonly priority: number;
15
+ read(product: ProductDefinition, key: ConfigKey): string | undefined;
16
+ initialize?(options?: {
17
+ cwd?: string;
18
+ }): void;
19
+ describe(): string;
20
+ }
21
+ export interface WritableSource extends ReadableSource {
22
+ isAvailable(): boolean;
23
+ write(product: ProductDefinition, key: ConfigKey, value: string): void;
24
+ clear(product: ProductDefinition, key: ConfigKey): void;
25
+ }
26
+ export declare function isWritableSource(source: ReadableSource): source is WritableSource;
27
+ export declare function getNonEmptyValue(value: string | undefined): string | undefined;
28
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/config/source.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,iBAAiB,CAAC;AAE7E,MAAM,MAAM,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,gBAAgB,CAAC;AAEnF,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACrE,UAAU,CAAC,CAAC,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC9C,QAAQ,IAAI,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,WAAW,IAAI,OAAO,CAAC;IACvB,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACvE,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI,CAAC;CACzD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,IAAI,cAAc,CAEjF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAM9E"}
@@ -0,0 +1,11 @@
1
+ export function isWritableSource(source) {
2
+ return typeof source.write === 'function';
3
+ }
4
+ export function getNonEmptyValue(value) {
5
+ if (!value) {
6
+ return undefined;
7
+ }
8
+ const trimmed = value.trim();
9
+ return trimmed.length > 0 ? trimmed : undefined;
10
+ }
11
+ //# sourceMappingURL=source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/config/source.ts"],"names":[],"mappings":"AA0BA,MAAM,UAAU,gBAAgB,CAAC,MAAsB;IACrD,OAAO,OAAQ,MAAyB,CAAC,KAAK,KAAK,UAAU,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAyB;IACxD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC"}
@@ -0,0 +1,12 @@
1
+ export type ParsedEnvironment = Record<string, string>;
2
+ export declare class DotenvFileNotFoundError extends Error {
3
+ readonly filePath: string;
4
+ constructor(filePath: string);
5
+ }
6
+ export declare class DotenvFileCache {
7
+ private entry?;
8
+ get filePath(): string | undefined;
9
+ load(filePath: string): ParsedEnvironment;
10
+ invalidate(): void;
11
+ }
12
+ //# sourceMappingURL=dotenv-file-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dotenv-file-cache.d.ts","sourceRoot":"","sources":["../../../src/config/sources/dotenv-file-cache.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAQvD,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;gBACd,QAAQ,EAAE,MAAM;CAK7B;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAC,CAAa;IAE3B,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,iBAAiB;IAuBzC,UAAU,IAAI,IAAI;CAGnB"}
@@ -0,0 +1,41 @@
1
+ import fs from 'node:fs';
2
+ import dotenv from 'dotenv';
3
+ export class DotenvFileNotFoundError extends Error {
4
+ filePath;
5
+ constructor(filePath) {
6
+ super(`Dotenv file not found: ${filePath}`);
7
+ this.name = 'DotenvFileNotFoundError';
8
+ this.filePath = filePath;
9
+ }
10
+ }
11
+ export class DotenvFileCache {
12
+ entry;
13
+ get filePath() {
14
+ return this.entry?.filePath;
15
+ }
16
+ load(filePath) {
17
+ let stats;
18
+ try {
19
+ stats = fs.statSync(filePath);
20
+ }
21
+ catch (error) {
22
+ if (error.code === 'ENOENT') {
23
+ if (this.entry?.filePath === filePath) {
24
+ this.entry = undefined;
25
+ }
26
+ throw new DotenvFileNotFoundError(filePath);
27
+ }
28
+ throw error;
29
+ }
30
+ if (this.entry && this.entry.filePath === filePath && this.entry.mtimeMs === stats.mtimeMs) {
31
+ return this.entry.values;
32
+ }
33
+ const values = dotenv.parse(fs.readFileSync(filePath));
34
+ this.entry = { filePath, mtimeMs: stats.mtimeMs, values };
35
+ return values;
36
+ }
37
+ invalidate() {
38
+ this.entry = undefined;
39
+ }
40
+ }
41
+ //# sourceMappingURL=dotenv-file-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dotenv-file-cache.js","sourceRoot":"","sources":["../../../src/config/sources/dotenv-file-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAU5B,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACvC,QAAQ,CAAS;IAC1B,YAAY,QAAgB;QAC1B,KAAK,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,eAAe;IAClB,KAAK,CAAc;IAE3B,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC;IAC9B,CAAC;IAED,IAAI,CAAC,QAAgB;QACnB,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACH,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,KAAK,QAAQ,EAAE,CAAC;oBACtC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;gBACzB,CAAC;gBACD,MAAM,IAAI,uBAAuB,CAAC,QAAQ,CAAC,CAAC;YAC9C,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;YAC3F,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC3B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,KAAK,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,UAAU;QACR,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import type { ConfigKey, ProductDefinition, ReadableSource, SourceId } from '../source.js';
2
+ export declare const ATLASSIAN_DC_MCP_CONFIG_FILE_ENV_VAR = "ATLASSIAN_DC_MCP_CONFIG_FILE";
3
+ export declare class EnvFileSource implements ReadableSource {
4
+ readonly id: SourceId;
5
+ readonly priority = 80;
6
+ private cwd;
7
+ private cache;
8
+ initialize(options?: {
9
+ cwd?: string;
10
+ }): void;
11
+ read(product: ProductDefinition, key: ConfigKey): string | undefined;
12
+ describe(): string;
13
+ private getExplicitFilePath;
14
+ private loadFile;
15
+ }
16
+ //# sourceMappingURL=env-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-file.d.ts","sourceRoot":"","sources":["../../../src/config/sources/env-file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAQ3F,eAAO,MAAM,oCAAoC,iCAAiC,CAAC;AAEnF,qBAAa,aAAc,YAAW,cAAc;IAClD,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAc;IACnC,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,GAAG,CAAyB;IACpC,OAAO,CAAC,KAAK,CAAyB;IAEtC,UAAU,CAAC,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAK5C,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAKpE,QAAQ,IAAI,MAAM;IAIlB,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,QAAQ;CAiBjB"}
@@ -0,0 +1,48 @@
1
+ import path from 'node:path';
2
+ import { getNonEmptyValue } from '../source.js';
3
+ import { DotenvFileCache, DotenvFileNotFoundError, } from './dotenv-file-cache.js';
4
+ export const ATLASSIAN_DC_MCP_CONFIG_FILE_ENV_VAR = 'ATLASSIAN_DC_MCP_CONFIG_FILE';
5
+ export class EnvFileSource {
6
+ id = 'env-file';
7
+ priority = 80;
8
+ cwd = process.cwd();
9
+ cache = new DotenvFileCache();
10
+ initialize(options) {
11
+ this.cwd = options?.cwd ?? process.cwd();
12
+ this.loadFile();
13
+ }
14
+ read(product, key) {
15
+ const values = this.loadFile();
16
+ return getNonEmptyValue(values[product.envVars[key]]);
17
+ }
18
+ describe() {
19
+ return this.cache.filePath ? `env-file (${this.cache.filePath})` : 'env-file';
20
+ }
21
+ getExplicitFilePath() {
22
+ const filePath = getNonEmptyValue(process.env[ATLASSIAN_DC_MCP_CONFIG_FILE_ENV_VAR]);
23
+ if (!filePath) {
24
+ return undefined;
25
+ }
26
+ if (!path.isAbsolute(filePath)) {
27
+ throw new Error(`${ATLASSIAN_DC_MCP_CONFIG_FILE_ENV_VAR} must be an absolute path: ${filePath}`);
28
+ }
29
+ return filePath;
30
+ }
31
+ loadFile() {
32
+ const explicitFilePath = this.getExplicitFilePath();
33
+ const filePath = explicitFilePath ?? path.join(this.cwd, '.env');
34
+ try {
35
+ return this.cache.load(filePath);
36
+ }
37
+ catch (error) {
38
+ if (error instanceof DotenvFileNotFoundError) {
39
+ if (explicitFilePath) {
40
+ throw new Error(`${ATLASSIAN_DC_MCP_CONFIG_FILE_ENV_VAR} points to a missing file: ${error.filePath}`);
41
+ }
42
+ return {};
43
+ }
44
+ throw error;
45
+ }
46
+ }
47
+ }
48
+ //# sourceMappingURL=env-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-file.js","sourceRoot":"","sources":["../../../src/config/sources/env-file.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EACL,eAAe,EACf,uBAAuB,GAExB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,CAAC,MAAM,oCAAoC,GAAG,8BAA8B,CAAC;AAEnF,MAAM,OAAO,aAAa;IACf,EAAE,GAAa,UAAU,CAAC;IAC1B,QAAQ,GAAG,EAAE,CAAC;IAEf,GAAG,GAAW,OAAO,CAAC,GAAG,EAAE,CAAC;IAC5B,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IAEtC,UAAU,CAAC,OAA0B;QACnC,IAAI,CAAC,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACzC,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,OAA0B,EAAE,GAAc;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC/B,OAAO,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC;IAChF,CAAC;IAEO,mBAAmB;QACzB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,GAAG,oCAAoC,8BAA8B,QAAQ,EAAE,CAAC,CAAC;QACnG,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,QAAQ;QACd,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,gBAAgB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,uBAAuB,EAAE,CAAC;gBAC7C,IAAI,gBAAgB,EAAE,CAAC;oBACrB,MAAM,IAAI,KAAK,CACb,GAAG,oCAAoC,8BAA8B,KAAK,CAAC,QAAQ,EAAE,CACtF,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import type { ConfigKey, ProductDefinition, SourceId, WritableSource } from '../source.js';
2
+ declare const HOME_DIR_NAME = ".atlassian-dc-mcp";
3
+ declare function getHomeFilePath(product: ProductDefinition | string): string;
4
+ export declare class HomeFileSource implements WritableSource {
5
+ readonly id: SourceId;
6
+ readonly priority = 60;
7
+ private cache;
8
+ isAvailable(): boolean;
9
+ read(product: ProductDefinition, key: ConfigKey): string | undefined;
10
+ describe(): string;
11
+ describeForProduct(product: ProductDefinition): string;
12
+ write(product: ProductDefinition, key: ConfigKey, value: string): void;
13
+ clear(product: ProductDefinition, key: ConfigKey): void;
14
+ private loadFile;
15
+ private readFileIgnoringErrors;
16
+ private persist;
17
+ }
18
+ export { getHomeFilePath, HOME_DIR_NAME };
19
+ //# sourceMappingURL=home-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home-file.d.ts","sourceRoot":"","sources":["../../../src/config/sources/home-file.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAQ3F,QAAA,MAAM,aAAa,sBAAsB,CAAC;AAE1C,iBAAS,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM,GAAG,MAAM,CAGpE;AAqBD,qBAAa,cAAe,YAAW,cAAc;IACnD,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAe;IACpC,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,KAAK,CAAyB;IAEtC,WAAW,IAAI,OAAO;IAItB,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAKpE,QAAQ,IAAI,MAAM;IAIlB,kBAAkB,CAAC,OAAO,EAAE,iBAAiB,GAAG,MAAM;IAItD,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAOtE,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI;IAUvD,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,OAAO;CAoBhB;AAED,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC"}
@@ -0,0 +1,102 @@
1
+ import crypto from 'node:crypto';
2
+ import fs from 'node:fs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { getNonEmptyValue } from '../source.js';
6
+ import { DotenvFileCache, DotenvFileNotFoundError, } from './dotenv-file-cache.js';
7
+ const HOME_DIR_NAME = '.atlassian-dc-mcp';
8
+ function getHomeFilePath(product) {
9
+ const id = typeof product === 'string' ? product : product.id;
10
+ return path.join(os.homedir(), HOME_DIR_NAME, `${id}.env`);
11
+ }
12
+ function needsQuoting(value) {
13
+ return /[\s#'"]/.test(value);
14
+ }
15
+ function serializeValue(value) {
16
+ if (!needsQuoting(value)) {
17
+ return value;
18
+ }
19
+ return `"${value.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
20
+ }
21
+ function serialize(values) {
22
+ const lines = [];
23
+ for (const [key, raw] of Object.entries(values)) {
24
+ lines.push(`${key}=${serializeValue(raw)}`);
25
+ }
26
+ return lines.length > 0 ? `${lines.join('\n')}\n` : '';
27
+ }
28
+ export class HomeFileSource {
29
+ id = 'home-file';
30
+ priority = 60;
31
+ cache = new DotenvFileCache();
32
+ isAvailable() {
33
+ return true;
34
+ }
35
+ read(product, key) {
36
+ const values = this.loadFile(product);
37
+ return getNonEmptyValue(values[product.envVars[key]]);
38
+ }
39
+ describe() {
40
+ return `home-file (~/${HOME_DIR_NAME}/<product>.env)`;
41
+ }
42
+ describeForProduct(product) {
43
+ return `home-file (${getHomeFilePath(product)})`;
44
+ }
45
+ write(product, key, value) {
46
+ const envVar = product.envVars[key];
47
+ const existing = this.readFileIgnoringErrors(product);
48
+ existing[envVar] = value;
49
+ this.persist(product, existing);
50
+ }
51
+ clear(product, key) {
52
+ const envVar = product.envVars[key];
53
+ const existing = this.readFileIgnoringErrors(product);
54
+ if (!(envVar in existing)) {
55
+ return;
56
+ }
57
+ delete existing[envVar];
58
+ this.persist(product, existing);
59
+ }
60
+ loadFile(product) {
61
+ const filePath = getHomeFilePath(product);
62
+ try {
63
+ return this.cache.load(filePath);
64
+ }
65
+ catch (error) {
66
+ if (error instanceof DotenvFileNotFoundError) {
67
+ return {};
68
+ }
69
+ throw error;
70
+ }
71
+ }
72
+ readFileIgnoringErrors(product) {
73
+ try {
74
+ return { ...this.loadFile(product) };
75
+ }
76
+ catch {
77
+ return {};
78
+ }
79
+ }
80
+ persist(product, values) {
81
+ const filePath = getHomeFilePath(product);
82
+ const dir = path.dirname(filePath);
83
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
84
+ const tmpPath = `${filePath}.tmp-${process.pid}-${crypto.randomBytes(4).toString('hex')}`;
85
+ try {
86
+ fs.writeFileSync(tmpPath, serialize(values), { mode: 0o600 });
87
+ fs.renameSync(tmpPath, filePath);
88
+ }
89
+ catch (error) {
90
+ try {
91
+ fs.unlinkSync(tmpPath);
92
+ }
93
+ catch {
94
+ // best-effort cleanup
95
+ }
96
+ throw error;
97
+ }
98
+ this.cache.invalidate();
99
+ }
100
+ }
101
+ export { getHomeFilePath, HOME_DIR_NAME };
102
+ //# sourceMappingURL=home-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"home-file.js","sourceRoot":"","sources":["../../../src/config/sources/home-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { execFileSync as nodeExecFileSync } from 'node:child_process';
2
+ import { existsSync as nodeExistsSync } from 'node:fs';
3
+ import type { ConfigKey, ProductDefinition, SourceId, WritableSource } from '../source.js';
4
+ export declare const SECURITY_BINARY = "/usr/bin/security";
5
+ export declare const KEYCHAIN_SERVICE = "atlassian-dc-mcp";
6
+ export declare const NOT_FOUND_STATUS = 44;
7
+ export type KeychainDeps = {
8
+ execFileSync: typeof nodeExecFileSync;
9
+ existsSync: typeof nodeExistsSync;
10
+ getPlatform: () => NodeJS.Platform;
11
+ };
12
+ export declare class MacosKeychainSource implements WritableSource {
13
+ readonly id: SourceId;
14
+ readonly priority = 40;
15
+ private cache;
16
+ private cacheWarmed;
17
+ private readonly deps;
18
+ constructor(deps?: Partial<KeychainDeps>);
19
+ isAvailable(): boolean;
20
+ read(product: ProductDefinition, key: ConfigKey): string | undefined;
21
+ describe(): string;
22
+ write(product: ProductDefinition, key: ConfigKey, value: string): void;
23
+ clear(product: ProductDefinition, key: ConfigKey): void;
24
+ private findPassword;
25
+ }
26
+ //# sourceMappingURL=macos-keychain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"macos-keychain.d.ts","sourceRoot":"","sources":["../../../src/config/sources/macos-keychain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAO3F,eAAO,MAAM,eAAe,sBAAsB,CAAC;AACnD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AAEnD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,OAAO,gBAAgB,CAAC;IACtC,UAAU,EAAE,OAAO,cAAc,CAAC;IAClC,WAAW,EAAE,MAAM,MAAM,CAAC,QAAQ,CAAC;CACpC,CAAC;AAYF,qBAAa,mBAAoB,YAAW,cAAc;IACxD,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAoB;IACzC,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;gBAExB,IAAI,GAAE,OAAO,CAAC,YAAY,CAAM;IAI5C,WAAW,IAAI,OAAO;IAItB,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAapE,QAAQ,IAAI,MAAM;IAIlB,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAsBtE,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,GAAG,IAAI;IAiBvD,OAAO,CAAC,YAAY;CAcrB"}
@@ -0,0 +1,88 @@
1
+ import { execFileSync as nodeExecFileSync } from 'node:child_process';
2
+ import { existsSync as nodeExistsSync } from 'node:fs';
3
+ // We pass the token via `-w <value>` on write. `security add-generic-password`
4
+ // has no stdin-password mode, so the token is visible in argv to same-user
5
+ // processes. A same-user attacker already has keychain access via `security`
6
+ // itself; this does not widen the attack surface.
7
+ export const SECURITY_BINARY = '/usr/bin/security';
8
+ export const KEYCHAIN_SERVICE = 'atlassian-dc-mcp';
9
+ const KEYCHAIN_TIMEOUT_MS = 5000;
10
+ export const NOT_FOUND_STATUS = 44;
11
+ function accountFor(product) {
12
+ return `${product.id}-token`;
13
+ }
14
+ const DEFAULT_DEPS = {
15
+ execFileSync: nodeExecFileSync,
16
+ existsSync: nodeExistsSync,
17
+ getPlatform: () => process.platform,
18
+ };
19
+ export class MacosKeychainSource {
20
+ id = 'macos-keychain';
21
+ priority = 40;
22
+ cache = new Map();
23
+ cacheWarmed = new Set();
24
+ deps;
25
+ constructor(deps = {}) {
26
+ this.deps = { ...DEFAULT_DEPS, ...deps };
27
+ }
28
+ isAvailable() {
29
+ return this.deps.getPlatform() === 'darwin' && this.deps.existsSync(SECURITY_BINARY);
30
+ }
31
+ read(product, key) {
32
+ if (key !== 'token' || !this.isAvailable()) {
33
+ return undefined;
34
+ }
35
+ if (this.cacheWarmed.has(product.id)) {
36
+ return this.cache.get(product.id);
37
+ }
38
+ const value = this.findPassword(product);
39
+ this.cache.set(product.id, value);
40
+ this.cacheWarmed.add(product.id);
41
+ return value;
42
+ }
43
+ describe() {
44
+ return 'macOS Keychain';
45
+ }
46
+ write(product, key, value) {
47
+ if (key !== 'token') {
48
+ throw new Error('macOS Keychain only stores the token key');
49
+ }
50
+ if (!this.isAvailable()) {
51
+ throw new Error('macOS Keychain is not available on this platform');
52
+ }
53
+ this.deps.execFileSync(SECURITY_BINARY, [
54
+ 'add-generic-password',
55
+ '-U',
56
+ '-s', KEYCHAIN_SERVICE,
57
+ '-a', accountFor(product),
58
+ '-w', value,
59
+ ], { stdio: ['ignore', 'pipe', 'pipe'], encoding: 'utf8', timeout: KEYCHAIN_TIMEOUT_MS });
60
+ this.cache.set(product.id, value);
61
+ this.cacheWarmed.add(product.id);
62
+ }
63
+ clear(product, key) {
64
+ if (key !== 'token' || !this.isAvailable()) {
65
+ return;
66
+ }
67
+ try {
68
+ this.deps.execFileSync(SECURITY_BINARY, ['delete-generic-password', '-s', KEYCHAIN_SERVICE, '-a', accountFor(product)], { stdio: ['ignore', 'pipe', 'pipe'], encoding: 'utf8', timeout: KEYCHAIN_TIMEOUT_MS });
69
+ }
70
+ catch {
71
+ // absent / already cleared — non-fatal
72
+ }
73
+ this.cache.set(product.id, undefined);
74
+ this.cacheWarmed.add(product.id);
75
+ }
76
+ findPassword(product) {
77
+ try {
78
+ const stdout = this.deps.execFileSync(SECURITY_BINARY, ['find-generic-password', '-s', KEYCHAIN_SERVICE, '-a', accountFor(product), '-w'], { stdio: ['ignore', 'pipe', 'pipe'], encoding: 'utf8', timeout: KEYCHAIN_TIMEOUT_MS });
79
+ return String(stdout).replace(/\n$/, '');
80
+ }
81
+ catch {
82
+ // exit 44 = not found; any other failure (locked keychain, etc.) is
83
+ // treated as absent so the resolver continues down the chain.
84
+ return undefined;
85
+ }
86
+ }
87
+ }
88
+ //# sourceMappingURL=macos-keychain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"macos-keychain.js","sourceRoot":"","sources":["../../../src/config/sources/macos-keychain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { ConfigKey, ProductDefinition, ReadableSource, SourceId } from '../source.js';
2
+ export declare class ProcessEnvSource implements ReadableSource {
3
+ readonly id: SourceId;
4
+ readonly priority = 100;
5
+ read(product: ProductDefinition, key: ConfigKey): string | undefined;
6
+ describe(): string;
7
+ }
8
+ //# sourceMappingURL=process-env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-env.d.ts","sourceRoot":"","sources":["../../../src/config/sources/process-env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG3F,qBAAa,gBAAiB,YAAW,cAAc;IACrD,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAiB;IACtC,QAAQ,CAAC,QAAQ,OAAO;IAExB,IAAI,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAIpE,QAAQ,IAAI,MAAM;CAGnB"}
@@ -0,0 +1,12 @@
1
+ import { getNonEmptyValue } from '../source.js';
2
+ export class ProcessEnvSource {
3
+ id = 'process-env';
4
+ priority = 100;
5
+ read(product, key) {
6
+ return getNonEmptyValue(process.env[product.envVars[key]]);
7
+ }
8
+ describe() {
9
+ return 'process env';
10
+ }
11
+ }
12
+ //# sourceMappingURL=process-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-env.js","sourceRoot":"","sources":["../../../src/config/sources/process-env.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,OAAO,gBAAgB;IAClB,EAAE,GAAa,aAAa,CAAC;IAC7B,QAAQ,GAAG,GAAG,CAAC;IAExB,IAAI,CAAC,OAA0B,EAAE,GAAc;QAC7C,OAAO,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,QAAQ;QACN,OAAO,aAAa,CAAC;IACvB,CAAC;CACF"}
package/build/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  export * from './api-error-handler.js';
3
- export * from './runtime-config.js';
3
+ export * from './config/index.js';
4
+ export { runSetup } from './setup-cli.js';
4
5
  export declare const formatToolResponse: (result: unknown) => {
5
6
  content: {
6
7
  type: "text";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAC;AAGpC,eAAO,MAAM,kBAAkB,GAAI,QAAQ,OAAO;;;;;CAKhD,CAAC;AAGH,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,UAGvC,CAAC;AAGF,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,aAKA;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,SAAS,sBAkCpD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1C,eAAO,MAAM,kBAAkB,GAAI,QAAQ,OAAO;;;;;CAKhD,CAAC;AAGH,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,UAGvC,CAAC;AAGF,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,aAKA;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,SAAS,sBAkCpD"}
package/build/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
3
  export * from './api-error-handler.js';
4
- export * from './runtime-config.js';
4
+ export * from './config/index.js';
5
+ export { runSetup } from './setup-cli.js';
5
6
  // Helper function to format tool responses
6
7
  export const formatToolResponse = (result) => ({
7
8
  content: [{
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,cAAc,wBAAwB,CAAA;AACtC,cAAc,qBAAqB,CAAC;AAEpC,2CAA2C;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAe,EAAE,EAAE,CAAC,CAAC;IACtD,OAAO,EAAE,CAAC;YACR,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC;CACH,CAAC,CAAC;AAEH,uBAAuB;AACvB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,sCAAsC;AACtC,MAAM,UAAU,eAAe,CAAC,OAG/B;IACC,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAiB;IACnD,0DAA0D;IAC1D,yBAAyB;IACzB,iDAAiD;IACjD,EAAE;IACF,wCAAwC;IACxC,0DAA0D;IAC1D,qCAAqC;IACrC,MAAM;IACN,EAAE;IACF,8CAA8C;IAC9C,kDAAkD;IAClD,MAAM;IACN,EAAE;IACF,mDAAmD;IACnD,sCAAsC;IACtC,2CAA2C;IAC3C,kDAAkD;IAClD,2CAA2C;IAC3C,4CAA4C;IAC5C,mBAAmB;IACnB,uBAAuB;IACvB,gBAAgB;IAChB,QAAQ;IACR,EAAE;IACF,uDAAuD;IACvD,qBAAqB;IACrB,QAAQ;IACR,MAAM;IAGN,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,2CAA2C;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAe,EAAE,EAAE,CAAC,CAAC;IACtD,OAAO,EAAE,CAAC;YACR,IAAI,EAAE,MAAe;YACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC7B,CAAC;CACH,CAAC,CAAC;AAEH,uBAAuB;AACvB,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAY,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC;AAEF,sCAAsC;AACtC,MAAM,UAAU,eAAe,CAAC,OAG/B;IACC,OAAO,IAAI,SAAS,CAAC;QACnB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAiB;IACnD,0DAA0D;IAC1D,yBAAyB;IACzB,iDAAiD;IACjD,EAAE;IACF,wCAAwC;IACxC,0DAA0D;IAC1D,qCAAqC;IACrC,MAAM;IACN,EAAE;IACF,8CAA8C;IAC9C,kDAAkD;IAClD,MAAM;IACN,EAAE;IACF,mDAAmD;IACnD,sCAAsC;IACtC,2CAA2C;IAC3C,kDAAkD;IAClD,2CAA2C;IAC3C,4CAA4C;IAC5C,mBAAmB;IACnB,uBAAuB;IACvB,gBAAgB;IAChB,QAAQ;IACR,EAAE;IACF,uDAAuD;IACvD,qBAAqB;IACrB,QAAQ;IACR,MAAM;IAGN,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { type ConfigRegistry } from './config/registry.js';
2
+ import type { ProductDefinition } from './config/source.js';
3
+ export type SetupPrompts = {
4
+ input: (opts: {
5
+ message: string;
6
+ default?: string;
7
+ validate?: (raw: string) => true | string;
8
+ }) => Promise<string>;
9
+ password: (opts: {
10
+ message: string;
11
+ mask?: string;
12
+ }) => Promise<string>;
13
+ confirm: (opts: {
14
+ message: string;
15
+ default?: boolean;
16
+ }) => Promise<boolean>;
17
+ };
18
+ export type SetupDeps = {
19
+ registry?: ConfigRegistry;
20
+ log?: (message: string) => void;
21
+ exit?: (code: number) => void;
22
+ prompts?: SetupPrompts;
23
+ };
24
+ export declare function runSetup(product: ProductDefinition, deps?: SetupDeps): Promise<void>;
25
+ //# sourceMappingURL=setup-cli.d.ts.map
@@ -0,0 +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;AAa5B,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,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACxE,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;CACxB,CAAC;AAQF,wBAAsB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,EAAE,IAAI,GAAE,SAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B9F"}