argustack 0.1.19 → 0.1.20
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/dist/adapters/jira/provider.d.ts +3 -1
- package/dist/adapters/jira/provider.d.ts.map +1 -1
- package/dist/adapters/jira/provider.js +16 -9
- package/dist/adapters/jira/provider.js.map +1 -1
- package/dist/adapters/jira-proxy/client.d.ts +11 -0
- package/dist/adapters/jira-proxy/client.d.ts.map +1 -0
- package/dist/adapters/jira-proxy/client.js +87 -0
- package/dist/adapters/jira-proxy/client.js.map +1 -0
- package/dist/adapters/jira-proxy/config-loader.d.ts +5 -0
- package/dist/adapters/jira-proxy/config-loader.d.ts.map +1 -0
- package/dist/adapters/jira-proxy/config-loader.js +133 -0
- package/dist/adapters/jira-proxy/config-loader.js.map +1 -0
- package/dist/adapters/jira-proxy/index.d.ts +5 -0
- package/dist/adapters/jira-proxy/index.d.ts.map +1 -0
- package/dist/adapters/jira-proxy/index.js +5 -0
- package/dist/adapters/jira-proxy/index.js.map +1 -0
- package/dist/adapters/jira-proxy/mapper.d.ts +5 -0
- package/dist/adapters/jira-proxy/mapper.d.ts.map +1 -0
- package/dist/adapters/jira-proxy/mapper.js +115 -0
- package/dist/adapters/jira-proxy/mapper.js.map +1 -0
- package/dist/adapters/jira-proxy/provider.d.ts +16 -0
- package/dist/adapters/jira-proxy/provider.d.ts.map +1 -0
- package/dist/adapters/jira-proxy/provider.js +147 -0
- package/dist/adapters/jira-proxy/provider.js.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/generators.d.ts +4 -4
- package/dist/cli/init/generators.d.ts.map +1 -1
- package/dist/cli/init/generators.js +26 -9
- package/dist/cli/init/generators.js.map +1 -1
- package/dist/cli/init/index.d.ts.map +1 -1
- package/dist/cli/init/index.js +13 -9
- package/dist/cli/init/index.js.map +1 -1
- package/dist/cli/init/setup-jira.d.ts +6 -2
- package/dist/cli/init/setup-jira.d.ts.map +1 -1
- package/dist/cli/init/setup-jira.js +188 -3
- package/dist/cli/init/setup-jira.js.map +1 -1
- package/dist/cli/init/types.d.ts +9 -0
- package/dist/cli/init/types.d.ts.map +1 -1
- package/dist/cli/init/types.js.map +1 -1
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +26 -12
- package/dist/cli/sync.js.map +1 -1
- package/dist/cli/workspaces.d.ts +3 -0
- package/dist/cli/workspaces.d.ts.map +1 -0
- package/dist/cli/workspaces.js +34 -0
- package/dist/cli/workspaces.js.map +1 -0
- package/dist/core/types/config.d.ts +1 -0
- package/dist/core/types/config.d.ts.map +1 -1
- package/dist/core/types/config.js.map +1 -1
- package/dist/core/types/index.d.ts +1 -0
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/proxy-config.d.ts +28 -0
- package/dist/core/types/proxy-config.d.ts.map +1 -0
- package/dist/core/types/proxy-config.js +2 -0
- package/dist/core/types/proxy-config.js.map +1 -0
- package/dist/mcp/helpers.d.ts.map +1 -1
- package/dist/mcp/helpers.js +32 -7
- package/dist/mcp/helpers.js.map +1 -1
- package/dist/mcp/tools/workspace.d.ts.map +1 -1
- package/dist/mcp/tools/workspace.js +9 -4
- package/dist/mcp/tools/workspace.js.map +1 -1
- package/dist/workspace/registry.d.ts +11 -0
- package/dist/workspace/registry.d.ts.map +1 -0
- package/dist/workspace/registry.js +80 -0
- package/dist/workspace/registry.js.map +1 -0
- package/package.json +1 -1
- package/templates/env.example +3 -0
- package/templates/proxy-config-example.json +61 -0
|
@@ -13,7 +13,9 @@ import { type JiraCredentials } from './client.js';
|
|
|
13
13
|
export declare class JiraProvider implements ISourceProvider {
|
|
14
14
|
readonly name = "Jira";
|
|
15
15
|
private readonly client;
|
|
16
|
-
|
|
16
|
+
private readonly issueTypes;
|
|
17
|
+
constructor(creds: JiraCredentials, issueTypes?: string[]);
|
|
18
|
+
private buildJqlFilter;
|
|
17
19
|
getProjects(): Promise<Project[]>;
|
|
18
20
|
createIssue(issue: Issue): Promise<string>;
|
|
19
21
|
getIssueCount(projectKey: string, since?: string): Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/adapters/jira/provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAWrE;;;;;;;;GAQG;AACH,qBAAa,YAAa,YAAW,eAAe;IAClD,QAAQ,CAAC,IAAI,UAAU;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/adapters/jira/provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAWrE;;;;;;;;GAQG;AACH,qBAAa,YAAa,YAAW,eAAe;IAClD,QAAQ,CAAC,IAAI,UAAU;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAE1B,KAAK,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE;IAKzD,OAAO,CAAC,cAAc;IAYhB,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IASjC,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;IAoB1C,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAMjE,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC;CA6ClF"}
|
|
@@ -13,8 +13,21 @@ const PAGE_SIZE = 50;
|
|
|
13
13
|
export class JiraProvider {
|
|
14
14
|
name = 'Jira';
|
|
15
15
|
client;
|
|
16
|
-
|
|
16
|
+
issueTypes;
|
|
17
|
+
constructor(creds, issueTypes) {
|
|
17
18
|
this.client = createJiraClient(creds);
|
|
19
|
+
this.issueTypes = issueTypes ?? [];
|
|
20
|
+
}
|
|
21
|
+
buildJqlFilter(projectKey, since) {
|
|
22
|
+
let jql = `project = "${projectKey}"`;
|
|
23
|
+
if (this.issueTypes.length > 0) {
|
|
24
|
+
const types = this.issueTypes.map((t) => `"${t}"`).join(', ');
|
|
25
|
+
jql += ` AND issuetype in (${types})`;
|
|
26
|
+
}
|
|
27
|
+
if (since) {
|
|
28
|
+
jql += ` AND updated >= "${since}"`;
|
|
29
|
+
}
|
|
30
|
+
return jql;
|
|
18
31
|
}
|
|
19
32
|
async getProjects() {
|
|
20
33
|
const result = await this.client.projects.searchProjects({ maxResults: 200 });
|
|
@@ -44,18 +57,12 @@ export class JiraProvider {
|
|
|
44
57
|
return result.key;
|
|
45
58
|
}
|
|
46
59
|
async getIssueCount(projectKey, since) {
|
|
47
|
-
|
|
48
|
-
if (since) {
|
|
49
|
-
jql += ` AND updated >= "${since}"`;
|
|
50
|
-
}
|
|
60
|
+
const jql = this.buildJqlFilter(projectKey, since);
|
|
51
61
|
const result = await this.client.issueSearch.countIssues({ jql });
|
|
52
62
|
return result.count ?? 0;
|
|
53
63
|
}
|
|
54
64
|
async *pullIssues(projectKey, since) {
|
|
55
|
-
|
|
56
|
-
if (since) {
|
|
57
|
-
jql = `project = "${projectKey}" AND updated >= "${since}" ORDER BY updated ASC`;
|
|
58
|
-
}
|
|
65
|
+
const jql = `${this.buildJqlFilter(projectKey, since)} ORDER BY updated ASC`;
|
|
59
66
|
let pageToken = undefined;
|
|
60
67
|
do {
|
|
61
68
|
const searchParams = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/adapters/jira/provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAwB,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB;;;;;;;;GAQG;AACH,MAAM,OAAO,YAAY;IACd,IAAI,GAAG,MAAM,CAAC;IACN,MAAM,CAAiB;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/adapters/jira/provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ProxyConfig } from '../../core/types/proxy-config.js';
|
|
2
|
+
export declare class ProxyClient {
|
|
3
|
+
private readonly config;
|
|
4
|
+
private accessToken;
|
|
5
|
+
private tokenExpiresAt;
|
|
6
|
+
constructor(config: ProxyConfig);
|
|
7
|
+
fetch(endpointPath: string, params?: Record<string, string>): Promise<unknown>;
|
|
8
|
+
authenticate(): Promise<string>;
|
|
9
|
+
private buildUrl;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/adapters/jira-proxy/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAK;gBAEf,MAAM,EAAE,WAAW;IAIzB,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAoC9E,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAkDrC,OAAO,CAAC,QAAQ;CAQjB"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export class ProxyClient {
|
|
2
|
+
config;
|
|
3
|
+
accessToken = null;
|
|
4
|
+
tokenExpiresAt = 0;
|
|
5
|
+
constructor(config) {
|
|
6
|
+
this.config = config;
|
|
7
|
+
}
|
|
8
|
+
async fetch(endpointPath, params) {
|
|
9
|
+
const token = await this.authenticate();
|
|
10
|
+
const url = this.buildUrl(endpointPath, params);
|
|
11
|
+
const headers = {
|
|
12
|
+
'Authorization': `Bearer ${token}`,
|
|
13
|
+
'Accept': 'application/json',
|
|
14
|
+
...this.config.headers,
|
|
15
|
+
};
|
|
16
|
+
const response = await globalThis.fetch(url, {
|
|
17
|
+
method: 'GET',
|
|
18
|
+
headers,
|
|
19
|
+
});
|
|
20
|
+
if (response.status === 401) {
|
|
21
|
+
this.accessToken = null;
|
|
22
|
+
this.tokenExpiresAt = 0;
|
|
23
|
+
const retryToken = await this.authenticate();
|
|
24
|
+
const retryResponse = await globalThis.fetch(url, {
|
|
25
|
+
method: 'GET',
|
|
26
|
+
headers: { ...headers, 'Authorization': `Bearer ${retryToken}` },
|
|
27
|
+
});
|
|
28
|
+
if (!retryResponse.ok) {
|
|
29
|
+
throw new Error(`Proxy request failed after re-auth: ${String(retryResponse.status)} ${retryResponse.statusText}`);
|
|
30
|
+
}
|
|
31
|
+
return retryResponse.json();
|
|
32
|
+
}
|
|
33
|
+
if (!response.ok) {
|
|
34
|
+
throw new Error(`Proxy request failed: ${String(response.status)} ${response.statusText} — ${url}`);
|
|
35
|
+
}
|
|
36
|
+
return response.json();
|
|
37
|
+
}
|
|
38
|
+
async authenticate() {
|
|
39
|
+
if (this.accessToken && Date.now() < this.tokenExpiresAt) {
|
|
40
|
+
return this.accessToken;
|
|
41
|
+
}
|
|
42
|
+
const serviceToken = process.env[this.config.auth.service_token_env] ?? '';
|
|
43
|
+
if (serviceToken.length === 0) {
|
|
44
|
+
throw new Error(`Environment variable ${this.config.auth.service_token_env} is not set`);
|
|
45
|
+
}
|
|
46
|
+
if (this.config.auth.type === 'bearer') {
|
|
47
|
+
this.accessToken = serviceToken;
|
|
48
|
+
this.tokenExpiresAt = Number.MAX_SAFE_INTEGER;
|
|
49
|
+
return serviceToken;
|
|
50
|
+
}
|
|
51
|
+
const tokenEndpoint = this.config.auth.token_endpoint;
|
|
52
|
+
if (!tokenEndpoint) {
|
|
53
|
+
throw new Error('Token endpoint is required for bearer_exchange auth');
|
|
54
|
+
}
|
|
55
|
+
const origin = new URL(this.config.base_url).origin;
|
|
56
|
+
const exchangeUrl = `${origin}${tokenEndpoint}`;
|
|
57
|
+
const response = await globalThis.fetch(exchangeUrl, {
|
|
58
|
+
method: 'POST',
|
|
59
|
+
headers: {
|
|
60
|
+
'Authorization': `Bearer ${serviceToken}`,
|
|
61
|
+
'Accept': 'application/json',
|
|
62
|
+
...this.config.headers,
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
if (!response.ok) {
|
|
66
|
+
throw new Error(`Token exchange failed at ${tokenEndpoint}: ${String(response.status)} ${response.statusText}. Check ${this.config.auth.service_token_env}.`);
|
|
67
|
+
}
|
|
68
|
+
const body = await response.json();
|
|
69
|
+
const token = (body['access_token'] ?? body['token'] ?? body['accessToken']);
|
|
70
|
+
if (!token) {
|
|
71
|
+
throw new Error('Token exchange response missing access_token field');
|
|
72
|
+
}
|
|
73
|
+
this.accessToken = token;
|
|
74
|
+
const ttlMs = (this.config.auth.ttl_minutes ?? 15) * 60 * 1000;
|
|
75
|
+
this.tokenExpiresAt = Date.now() + ttlMs - 30_000;
|
|
76
|
+
return token;
|
|
77
|
+
}
|
|
78
|
+
buildUrl(endpointPath, params) {
|
|
79
|
+
const base = `${this.config.base_url}${endpointPath}`;
|
|
80
|
+
if (!params || Object.keys(params).length === 0) {
|
|
81
|
+
return base;
|
|
82
|
+
}
|
|
83
|
+
const searchParams = new URLSearchParams(params);
|
|
84
|
+
return `${base}?${searchParams.toString()}`;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/adapters/jira-proxy/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ProxyConfig } from '../../core/types/proxy-config.js';
|
|
2
|
+
export declare function proxyConfigExists(workspaceRoot: string): boolean;
|
|
3
|
+
export declare function loadProxyConfig(workspaceRoot: string): ProxyConfig;
|
|
4
|
+
export declare function buildDefaultProxyConfig(baseUrl: string, serviceTokenEnv?: string): ProxyConfig;
|
|
5
|
+
//# sourceMappingURL=config-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../../src/adapters/jira-proxy/config-loader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAIpE,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAEhE;AAED,wBAAgB,eAAe,CAAC,aAAa,EAAE,MAAM,GAAG,WAAW,CAsBlE;AA4FD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,SAAqB,GAAG,WAAW,CAiB1G"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
const PROXY_CONFIG_PATH = '.argustack/proxy.json';
|
|
4
|
+
export function proxyConfigExists(workspaceRoot) {
|
|
5
|
+
return existsSync(join(workspaceRoot, PROXY_CONFIG_PATH));
|
|
6
|
+
}
|
|
7
|
+
export function loadProxyConfig(workspaceRoot) {
|
|
8
|
+
const filePath = join(workspaceRoot, PROXY_CONFIG_PATH);
|
|
9
|
+
if (!existsSync(filePath)) {
|
|
10
|
+
throw new Error(`Proxy config not found: ${filePath}`);
|
|
11
|
+
}
|
|
12
|
+
let raw;
|
|
13
|
+
try {
|
|
14
|
+
raw = readFileSync(filePath, 'utf-8');
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
throw new Error(`Failed to read proxy config: ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
18
|
+
}
|
|
19
|
+
let parsed;
|
|
20
|
+
try {
|
|
21
|
+
parsed = JSON.parse(raw);
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
throw new Error(`Invalid JSON in proxy config (${filePath}): ${err instanceof Error ? err.message : String(err)}`, { cause: err });
|
|
25
|
+
}
|
|
26
|
+
return validateProxyConfig(parsed);
|
|
27
|
+
}
|
|
28
|
+
function validateProxyConfig(raw) {
|
|
29
|
+
if (typeof raw !== 'object' || raw === null) {
|
|
30
|
+
throw new Error('Proxy config must be a JSON object');
|
|
31
|
+
}
|
|
32
|
+
const obj = raw;
|
|
33
|
+
if (typeof obj['base_url'] !== 'string' || obj['base_url'].length === 0) {
|
|
34
|
+
throw new Error('Proxy config: "base_url" is required (non-empty string)');
|
|
35
|
+
}
|
|
36
|
+
if (typeof obj['auth'] !== 'object' || obj['auth'] === null) {
|
|
37
|
+
throw new Error('Proxy config: "auth" section is required');
|
|
38
|
+
}
|
|
39
|
+
const auth = obj['auth'];
|
|
40
|
+
if (auth['type'] !== 'bearer' && auth['type'] !== 'bearer_exchange') {
|
|
41
|
+
throw new Error('Proxy config: auth.type must be "bearer" or "bearer_exchange"');
|
|
42
|
+
}
|
|
43
|
+
if (typeof auth['service_token_env'] !== 'string' || auth['service_token_env'].length === 0) {
|
|
44
|
+
throw new Error('Proxy config: auth.service_token_env is required');
|
|
45
|
+
}
|
|
46
|
+
if (auth['type'] === 'bearer_exchange') {
|
|
47
|
+
if (typeof auth['token_endpoint'] !== 'string' || auth['token_endpoint'].length === 0) {
|
|
48
|
+
throw new Error('Proxy config: auth.token_endpoint is required for bearer_exchange');
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
if (typeof obj['endpoints'] !== 'object' || obj['endpoints'] === null) {
|
|
52
|
+
throw new Error('Proxy config: "endpoints" section is required');
|
|
53
|
+
}
|
|
54
|
+
const endpoints = obj['endpoints'];
|
|
55
|
+
for (const key of ['search', 'issue', 'projects', 'fields']) {
|
|
56
|
+
const ep = endpoints[key];
|
|
57
|
+
if (typeof ep !== 'object' || ep === null) {
|
|
58
|
+
throw new Error(`Proxy config: endpoints.${key} is required`);
|
|
59
|
+
}
|
|
60
|
+
const epObj = ep;
|
|
61
|
+
if (typeof epObj['path'] !== 'string') {
|
|
62
|
+
throw new Error(`Proxy config: endpoints.${key}.path is required`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const config = {
|
|
66
|
+
name: typeof obj['name'] === 'string' ? obj['name'] : 'Proxy',
|
|
67
|
+
base_url: obj['base_url'],
|
|
68
|
+
auth: {
|
|
69
|
+
type: auth['type'],
|
|
70
|
+
service_token_env: auth['service_token_env'],
|
|
71
|
+
...(typeof auth['token_endpoint'] === 'string' ? { token_endpoint: auth['token_endpoint'] } : {}),
|
|
72
|
+
...(typeof auth['ttl_minutes'] === 'number' ? { ttl_minutes: auth['ttl_minutes'] } : {}),
|
|
73
|
+
},
|
|
74
|
+
endpoints: {
|
|
75
|
+
search: parseEndpoint(endpoints['search']),
|
|
76
|
+
issue: parseEndpoint(endpoints['issue']),
|
|
77
|
+
projects: parseEndpoint(endpoints['projects']),
|
|
78
|
+
fields: parseEndpoint(endpoints['fields']),
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
if (typeof obj['description'] === 'string') {
|
|
82
|
+
config.description = obj['description'];
|
|
83
|
+
}
|
|
84
|
+
if (typeof obj['response_mapping'] === 'object' && obj['response_mapping'] !== null) {
|
|
85
|
+
const mapping = {};
|
|
86
|
+
for (const [k, v] of Object.entries(obj['response_mapping'])) {
|
|
87
|
+
if (typeof v === 'string') {
|
|
88
|
+
mapping[k] = v;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
config.response_mapping = mapping;
|
|
92
|
+
}
|
|
93
|
+
if (typeof obj['headers'] === 'object' && obj['headers'] !== null) {
|
|
94
|
+
const headers = {};
|
|
95
|
+
for (const [k, v] of Object.entries(obj['headers'])) {
|
|
96
|
+
if (typeof v === 'string') {
|
|
97
|
+
headers[k] = v;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
config.headers = headers;
|
|
101
|
+
}
|
|
102
|
+
return config;
|
|
103
|
+
}
|
|
104
|
+
export function buildDefaultProxyConfig(baseUrl, serviceTokenEnv = 'JIRA_PROXY_TOKEN') {
|
|
105
|
+
return {
|
|
106
|
+
name: 'Jira Proxy',
|
|
107
|
+
base_url: baseUrl.replace(/\/+$/, ''),
|
|
108
|
+
auth: {
|
|
109
|
+
type: 'bearer_exchange',
|
|
110
|
+
token_endpoint: '/service/auth/exchange',
|
|
111
|
+
service_token_env: serviceTokenEnv,
|
|
112
|
+
ttl_minutes: 15,
|
|
113
|
+
},
|
|
114
|
+
endpoints: {
|
|
115
|
+
search: { path: '/search', method: 'GET', params: ['jql', 'fields', 'maxResults', 'startAt'] },
|
|
116
|
+
issue: { path: '/issue/{key}', method: 'GET' },
|
|
117
|
+
projects: { path: '/project/search', method: 'GET', params: ['maxResults', 'startAt', 'query'] },
|
|
118
|
+
fields: { path: '/field', method: 'GET' },
|
|
119
|
+
},
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
function parseEndpoint(raw) {
|
|
123
|
+
const method = raw['method'] === 'POST' ? 'POST' : 'GET';
|
|
124
|
+
const result = {
|
|
125
|
+
path: raw['path'],
|
|
126
|
+
method,
|
|
127
|
+
};
|
|
128
|
+
if (Array.isArray(raw['params'])) {
|
|
129
|
+
result.params = raw['params'].filter((p) => typeof p === 'string');
|
|
130
|
+
}
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=config-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../../src/adapters/jira-proxy/config-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { ProxyClient } from './client.js';
|
|
2
|
+
export { ProxyJiraProvider } from './provider.js';
|
|
3
|
+
export { mapProxyIssue, resolvePath } from './mapper.js';
|
|
4
|
+
export { loadProxyConfig, proxyConfigExists, buildDefaultProxyConfig } from './config-loader.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/jira-proxy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { ProxyClient } from './client.js';
|
|
2
|
+
export { ProxyJiraProvider } from './provider.js';
|
|
3
|
+
export { mapProxyIssue, resolvePath } from './mapper.js';
|
|
4
|
+
export { loadProxyConfig, proxyConfigExists, buildDefaultProxyConfig } from './config-loader.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/jira-proxy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Issue } from '../../core/types/issue.js';
|
|
2
|
+
import type { ProxyFieldMapping } from '../../core/types/proxy-config.js';
|
|
3
|
+
export declare function mapProxyIssue(raw: Record<string, unknown>, mapping?: ProxyFieldMapping): Issue;
|
|
4
|
+
export declare function resolvePath(obj: unknown, path: string): unknown;
|
|
5
|
+
//# sourceMappingURL=mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.d.ts","sourceRoot":"","sources":["../../../src/adapters/jira-proxy/mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AA2B1E,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,KAAK,CAsC9F;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA8B/D"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
const DEFAULT_MAPPING = {
|
|
2
|
+
issue_key: 'key',
|
|
3
|
+
summary: 'fields.summary',
|
|
4
|
+
description: 'fields.description',
|
|
5
|
+
status: 'fields.status.name',
|
|
6
|
+
status_category: 'fields.status.statusCategory.name',
|
|
7
|
+
issue_type: 'fields.issuetype.name',
|
|
8
|
+
priority: 'fields.priority.name',
|
|
9
|
+
resolution: 'fields.resolution.name',
|
|
10
|
+
assignee: 'fields.assignee.displayName',
|
|
11
|
+
assignee_id: 'fields.assignee.accountId',
|
|
12
|
+
reporter: 'fields.reporter.displayName',
|
|
13
|
+
reporter_id: 'fields.reporter.accountId',
|
|
14
|
+
created: 'fields.created',
|
|
15
|
+
updated: 'fields.updated',
|
|
16
|
+
resolved: 'fields.resolutiondate',
|
|
17
|
+
due_date: 'fields.duedate',
|
|
18
|
+
labels: 'fields.labels',
|
|
19
|
+
components: 'fields.components[].name',
|
|
20
|
+
fix_versions: 'fields.fixVersions[].name',
|
|
21
|
+
parent_key: 'fields.parent.key',
|
|
22
|
+
sprint: 'fields.sprint.name',
|
|
23
|
+
story_points: 'fields.story_points',
|
|
24
|
+
};
|
|
25
|
+
export function mapProxyIssue(raw, mapping) {
|
|
26
|
+
const m = mapping ?? DEFAULT_MAPPING;
|
|
27
|
+
const issueKey = resolveString(raw, m['issue_key'] ?? 'key') ?? '';
|
|
28
|
+
const projectKey = issueKey.split('-')[0] ?? '';
|
|
29
|
+
return {
|
|
30
|
+
key: issueKey,
|
|
31
|
+
id: resolveString(raw, 'id') ?? '',
|
|
32
|
+
projectKey,
|
|
33
|
+
summary: resolveString(raw, m['summary'] ?? 'fields.summary') ?? '',
|
|
34
|
+
description: resolveString(raw, m['description'] ?? 'fields.description'),
|
|
35
|
+
issueType: resolveString(raw, m['issue_type'] ?? 'fields.issuetype.name'),
|
|
36
|
+
status: resolveString(raw, m['status'] ?? 'fields.status.name'),
|
|
37
|
+
statusCategory: resolveString(raw, m['status_category'] ?? 'fields.status.statusCategory.name'),
|
|
38
|
+
priority: resolveString(raw, m['priority'] ?? 'fields.priority.name'),
|
|
39
|
+
resolution: resolveString(raw, m['resolution'] ?? 'fields.resolution.name'),
|
|
40
|
+
assignee: resolveString(raw, m['assignee'] ?? 'fields.assignee.displayName'),
|
|
41
|
+
assigneeId: resolveString(raw, m['assignee_id'] ?? 'fields.assignee.accountId'),
|
|
42
|
+
reporter: resolveString(raw, m['reporter'] ?? 'fields.reporter.displayName'),
|
|
43
|
+
reporterId: resolveString(raw, m['reporter_id'] ?? 'fields.reporter.accountId'),
|
|
44
|
+
created: resolveString(raw, m['created'] ?? 'fields.created'),
|
|
45
|
+
updated: resolveString(raw, m['updated'] ?? 'fields.updated'),
|
|
46
|
+
resolved: resolveString(raw, m['resolved'] ?? 'fields.resolutiondate'),
|
|
47
|
+
dueDate: resolveString(raw, m['due_date'] ?? 'fields.duedate'),
|
|
48
|
+
labels: resolveStringArray(raw, m['labels'] ?? 'fields.labels'),
|
|
49
|
+
components: resolveStringArray(raw, m['components'] ?? 'fields.components[].name'),
|
|
50
|
+
fixVersions: resolveStringArray(raw, m['fix_versions'] ?? 'fields.fixVersions[].name'),
|
|
51
|
+
parentKey: resolveString(raw, m['parent_key'] ?? 'fields.parent.key'),
|
|
52
|
+
sprint: resolveString(raw, m['sprint'] ?? 'fields.sprint.name'),
|
|
53
|
+
storyPoints: resolveNumber(raw, m['story_points'] ?? 'fields.story_points'),
|
|
54
|
+
originalEstimate: null,
|
|
55
|
+
remainingEstimate: null,
|
|
56
|
+
timeSpent: null,
|
|
57
|
+
customFields: {},
|
|
58
|
+
rawJson: raw,
|
|
59
|
+
source: 'jira',
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
export function resolvePath(obj, path) {
|
|
63
|
+
if (!path || obj === null || obj === undefined) {
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
const parts = path.split('.');
|
|
67
|
+
let current = obj;
|
|
68
|
+
for (const part of parts) {
|
|
69
|
+
if (current === null || current === undefined) {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
if (part.endsWith('[]')) {
|
|
73
|
+
const arrayKey = part.slice(0, -2);
|
|
74
|
+
const arr = current[arrayKey];
|
|
75
|
+
if (!Array.isArray(arr)) {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
const remaining = parts.slice(parts.indexOf(part) + 1).join('.');
|
|
79
|
+
if (remaining) {
|
|
80
|
+
return arr.map((item) => resolvePath(item, remaining)).filter((v) => v !== undefined);
|
|
81
|
+
}
|
|
82
|
+
return arr;
|
|
83
|
+
}
|
|
84
|
+
current = current[part];
|
|
85
|
+
}
|
|
86
|
+
return current;
|
|
87
|
+
}
|
|
88
|
+
function resolveString(obj, path) {
|
|
89
|
+
const value = resolvePath(obj, path);
|
|
90
|
+
if (value === null || value === undefined) {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
if (typeof value === 'string') {
|
|
94
|
+
return value;
|
|
95
|
+
}
|
|
96
|
+
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
97
|
+
return String(value);
|
|
98
|
+
}
|
|
99
|
+
return JSON.stringify(value);
|
|
100
|
+
}
|
|
101
|
+
function resolveNumber(obj, path) {
|
|
102
|
+
const value = resolvePath(obj, path);
|
|
103
|
+
if (typeof value === 'number') {
|
|
104
|
+
return value;
|
|
105
|
+
}
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
function resolveStringArray(obj, path) {
|
|
109
|
+
const value = resolvePath(obj, path);
|
|
110
|
+
if (Array.isArray(value)) {
|
|
111
|
+
return value.filter((v) => typeof v === 'string');
|
|
112
|
+
}
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../../src/adapters/jira-proxy/mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ISourceProvider } from '../../core/ports/source-provider.js';
|
|
2
|
+
import type { IssueBatch, Project } from '../../core/types/index.js';
|
|
3
|
+
import type { ProxyConfig } from '../../core/types/proxy-config.js';
|
|
4
|
+
export declare class ProxyJiraProvider implements ISourceProvider {
|
|
5
|
+
readonly name = "Jira (Proxy)";
|
|
6
|
+
private readonly client;
|
|
7
|
+
private readonly config;
|
|
8
|
+
private readonly issueTypes;
|
|
9
|
+
constructor(config: ProxyConfig, issueTypes?: string[]);
|
|
10
|
+
private buildJqlFilter;
|
|
11
|
+
getProjects(): Promise<Project[]>;
|
|
12
|
+
getIssueCount(projectKey: string, since?: string): Promise<number>;
|
|
13
|
+
pullIssues(projectKey: string, since?: string): AsyncGenerator<IssueBatch>;
|
|
14
|
+
private enrichDescriptions;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/adapters/jira-proxy/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,KAAK,EAAS,UAAU,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAUpE,qBAAa,iBAAkB,YAAW,eAAe;IACvD,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;gBAE1B,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE;IAMtD,OAAO,CAAC,cAAc;IAYhB,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAqBjC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBjE,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC;YA4DnE,kBAAkB;CA2CjC"}
|