@crypto512/jicon-mcp 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/README.md +288 -1
  2. package/TOOL_LIST.md +390 -87
  3. package/dist/config/constants.d.ts +12 -0
  4. package/dist/config/constants.d.ts.map +1 -1
  5. package/dist/config/constants.js +13 -0
  6. package/dist/config/constants.js.map +1 -1
  7. package/dist/config/loader.d.ts +8 -0
  8. package/dist/config/loader.d.ts.map +1 -1
  9. package/dist/config/loader.js +27 -1
  10. package/dist/config/loader.js.map +1 -1
  11. package/dist/config/types.d.ts +93 -0
  12. package/dist/config/types.d.ts.map +1 -1
  13. package/dist/config/types.js +26 -0
  14. package/dist/config/types.js.map +1 -1
  15. package/dist/confluence/tools.d.ts +8 -1
  16. package/dist/confluence/tools.d.ts.map +1 -1
  17. package/dist/confluence/tools.js +61 -51
  18. package/dist/confluence/tools.js.map +1 -1
  19. package/dist/credentials/client-factory.d.ts +64 -0
  20. package/dist/credentials/client-factory.d.ts.map +1 -0
  21. package/dist/credentials/client-factory.js +110 -0
  22. package/dist/credentials/client-factory.js.map +1 -0
  23. package/dist/credentials/context.d.ts +25 -0
  24. package/dist/credentials/context.d.ts.map +1 -0
  25. package/dist/credentials/context.js +35 -0
  26. package/dist/credentials/context.js.map +1 -0
  27. package/dist/credentials/extractor.d.ts +21 -0
  28. package/dist/credentials/extractor.d.ts.map +1 -0
  29. package/dist/credentials/extractor.js +46 -0
  30. package/dist/credentials/extractor.js.map +1 -0
  31. package/dist/credentials/index.d.ts +9 -0
  32. package/dist/credentials/index.d.ts.map +1 -0
  33. package/dist/credentials/index.js +8 -0
  34. package/dist/credentials/index.js.map +1 -0
  35. package/dist/credentials/types.d.ts +21 -0
  36. package/dist/credentials/types.d.ts.map +1 -0
  37. package/dist/credentials/types.js +13 -0
  38. package/dist/credentials/types.js.map +1 -0
  39. package/dist/index.js +98 -75
  40. package/dist/index.js.map +1 -1
  41. package/dist/jira/activity-tools.d.ts +54 -1
  42. package/dist/jira/activity-tools.d.ts.map +1 -1
  43. package/dist/jira/activity-tools.js +737 -79
  44. package/dist/jira/activity-tools.js.map +1 -1
  45. package/dist/jira/client.d.ts +34 -2
  46. package/dist/jira/client.d.ts.map +1 -1
  47. package/dist/jira/client.js +119 -63
  48. package/dist/jira/client.js.map +1 -1
  49. package/dist/jira/tools.d.ts +58 -1
  50. package/dist/jira/tools.d.ts.map +1 -1
  51. package/dist/jira/tools.js +226 -27
  52. package/dist/jira/tools.js.map +1 -1
  53. package/dist/jira/types.d.ts +22 -0
  54. package/dist/jira/types.d.ts.map +1 -1
  55. package/dist/permissions/tool-registry.d.ts +10 -10
  56. package/dist/permissions/tool-registry.d.ts.map +1 -1
  57. package/dist/permissions/tool-registry.js +8 -4
  58. package/dist/permissions/tool-registry.js.map +1 -1
  59. package/dist/tempo/tools.d.ts +33 -1
  60. package/dist/tempo/tools.d.ts.map +1 -1
  61. package/dist/tempo/tools.js +141 -17
  62. package/dist/tempo/tools.js.map +1 -1
  63. package/dist/transport/http.d.ts +18 -0
  64. package/dist/transport/http.d.ts.map +1 -0
  65. package/dist/transport/http.js +66 -0
  66. package/dist/transport/http.js.map +1 -0
  67. package/dist/transport/index.d.ts +17 -0
  68. package/dist/transport/index.d.ts.map +1 -0
  69. package/dist/transport/index.js +32 -0
  70. package/dist/transport/index.js.map +1 -0
  71. package/dist/transport/types.d.ts +15 -0
  72. package/dist/transport/types.d.ts.map +1 -0
  73. package/dist/transport/types.js +12 -0
  74. package/dist/transport/types.js.map +1 -0
  75. package/dist/types.d.ts +10 -0
  76. package/dist/types.d.ts.map +1 -1
  77. package/dist/types.js +0 -1
  78. package/dist/types.js.map +1 -1
  79. package/dist/utils/buffer-pipeline/index.js +2 -2
  80. package/dist/utils/buffer-pipeline/index.js.map +1 -1
  81. package/dist/utils/buffer-pipeline/schema.d.ts +99 -99
  82. package/dist/utils/buffer-pipeline/schema.d.ts.map +1 -1
  83. package/dist/utils/buffer-tools.d.ts +91 -83
  84. package/dist/utils/buffer-tools.d.ts.map +1 -1
  85. package/dist/utils/buffer-tools.js +312 -139
  86. package/dist/utils/buffer-tools.js.map +1 -1
  87. package/dist/utils/jicon-help.d.ts +3 -3
  88. package/dist/utils/jicon-help.d.ts.map +1 -1
  89. package/dist/utils/jicon-help.js +141 -10
  90. package/dist/utils/jicon-help.js.map +1 -1
  91. package/dist/utils/json-structure.d.ts +11 -0
  92. package/dist/utils/json-structure.d.ts.map +1 -1
  93. package/dist/utils/json-structure.js +61 -0
  94. package/dist/utils/json-structure.js.map +1 -1
  95. package/dist/utils/plantuml/tools.d.ts +4 -4
  96. package/dist/utils/plantuml/tools.d.ts.map +1 -1
  97. package/dist/utils/plantuml/tools.js +29 -8
  98. package/dist/utils/plantuml/tools.js.map +1 -1
  99. package/dist/utils/plantuml/types.d.ts +4 -4
  100. package/dist/utils/response-formatter.d.ts.map +1 -1
  101. package/dist/utils/response-formatter.js +8 -4
  102. package/dist/utils/response-formatter.js.map +1 -1
  103. package/package.json +5 -2
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Client factory for creating API clients with per-request or default credentials
3
+ */
4
+ import { JiraClient } from "../jira/client.js";
5
+ import { ConfluenceClient } from "../confluence/client.js";
6
+ import { TempoClient } from "../tempo/client.js";
7
+ import type { ApiConfig } from "../types.js";
8
+ export interface Clients {
9
+ jira: JiraClient | null;
10
+ confluence: ConfluenceClient | null;
11
+ tempo: TempoClient | null;
12
+ }
13
+ export interface ClientFactoryConfig {
14
+ defaultJiraConfig: ApiConfig | null;
15
+ defaultConfluenceConfig: ApiConfig | null;
16
+ }
17
+ /**
18
+ * Factory for creating API clients
19
+ *
20
+ * - Checks AsyncLocalStorage for per-request credentials
21
+ * - Falls back to default credentials from environment
22
+ * - Caches default clients for reuse (when no per-request credentials)
23
+ */
24
+ export declare class ClientFactory {
25
+ private defaultClients;
26
+ private config;
27
+ constructor(config: ClientFactoryConfig);
28
+ /**
29
+ * Get Jira client for current request
30
+ *
31
+ * Checks for per-request credentials in AsyncLocalStorage context,
32
+ * falls back to default client if none provided.
33
+ */
34
+ getJiraClient(): JiraClient | null;
35
+ /**
36
+ * Get Confluence client for current request
37
+ */
38
+ getConfluenceClient(): ConfluenceClient | null;
39
+ /**
40
+ * Get Tempo client for current request (uses Jira credentials)
41
+ */
42
+ getTempoClient(): TempoClient | null;
43
+ /**
44
+ * Get all clients for current request
45
+ */
46
+ getClients(): Clients;
47
+ /**
48
+ * Get default clients (ignores per-request credentials)
49
+ */
50
+ getDefaultClients(): Clients;
51
+ /**
52
+ * Check if Jira is configured (either default or per-request)
53
+ */
54
+ hasJira(): boolean;
55
+ /**
56
+ * Check if Confluence is configured (either default or per-request)
57
+ */
58
+ hasConfluence(): boolean;
59
+ /**
60
+ * Convert service credentials to ApiConfig
61
+ */
62
+ private toApiConfig;
63
+ }
64
+ //# sourceMappingURL=client-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-factory.d.ts","sourceRoot":"","sources":["../../src/credentials/client-factory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACpC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,iBAAiB,EAAE,SAAS,GAAG,IAAI,CAAC;IACpC,uBAAuB,EAAE,SAAS,GAAG,IAAI,CAAC;CAC3C;AAED;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,EAAE,mBAAmB;IAavC;;;;;OAKG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IAYlC;;OAEG;IACH,mBAAmB,IAAI,gBAAgB,GAAG,IAAI;IAY9C;;OAEG;IACH,cAAc,IAAI,WAAW,GAAG,IAAI;IAYpC;;OAEG;IACH,UAAU,IAAI,OAAO;IAQrB;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;OAEG;IACH,OAAO,IAAI,OAAO;IAKlB;;OAEG;IACH,aAAa,IAAI,OAAO;IAKxB;;OAEG;IACH,OAAO,CAAC,WAAW;CAQpB"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Client factory for creating API clients with per-request or default credentials
3
+ */
4
+ import { JiraClient } from "../jira/client.js";
5
+ import { ConfluenceClient } from "../confluence/client.js";
6
+ import { TempoClient } from "../tempo/client.js";
7
+ import { getRequestCredentials } from "./context.js";
8
+ /**
9
+ * Factory for creating API clients
10
+ *
11
+ * - Checks AsyncLocalStorage for per-request credentials
12
+ * - Falls back to default credentials from environment
13
+ * - Caches default clients for reuse (when no per-request credentials)
14
+ */
15
+ export class ClientFactory {
16
+ defaultClients;
17
+ config;
18
+ constructor(config) {
19
+ this.config = config;
20
+ // Create default clients from environment credentials
21
+ this.defaultClients = {
22
+ jira: config.defaultJiraConfig ? new JiraClient(config.defaultJiraConfig) : null,
23
+ confluence: config.defaultConfluenceConfig
24
+ ? new ConfluenceClient(config.defaultConfluenceConfig)
25
+ : null,
26
+ tempo: config.defaultJiraConfig ? new TempoClient(config.defaultJiraConfig) : null,
27
+ };
28
+ }
29
+ /**
30
+ * Get Jira client for current request
31
+ *
32
+ * Checks for per-request credentials in AsyncLocalStorage context,
33
+ * falls back to default client if none provided.
34
+ */
35
+ getJiraClient() {
36
+ const requestCreds = getRequestCredentials();
37
+ if (requestCreds?.jira) {
38
+ // Create client with per-request credentials
39
+ return new JiraClient(this.toApiConfig(requestCreds.jira));
40
+ }
41
+ // Use default client
42
+ return this.defaultClients.jira;
43
+ }
44
+ /**
45
+ * Get Confluence client for current request
46
+ */
47
+ getConfluenceClient() {
48
+ const requestCreds = getRequestCredentials();
49
+ if (requestCreds?.confluence) {
50
+ // Create client with per-request credentials
51
+ return new ConfluenceClient(this.toApiConfig(requestCreds.confluence));
52
+ }
53
+ // Use default client
54
+ return this.defaultClients.confluence;
55
+ }
56
+ /**
57
+ * Get Tempo client for current request (uses Jira credentials)
58
+ */
59
+ getTempoClient() {
60
+ const requestCreds = getRequestCredentials();
61
+ if (requestCreds?.jira) {
62
+ // Create client with per-request Jira credentials
63
+ return new TempoClient(this.toApiConfig(requestCreds.jira));
64
+ }
65
+ // Use default client
66
+ return this.defaultClients.tempo;
67
+ }
68
+ /**
69
+ * Get all clients for current request
70
+ */
71
+ getClients() {
72
+ return {
73
+ jira: this.getJiraClient(),
74
+ confluence: this.getConfluenceClient(),
75
+ tempo: this.getTempoClient(),
76
+ };
77
+ }
78
+ /**
79
+ * Get default clients (ignores per-request credentials)
80
+ */
81
+ getDefaultClients() {
82
+ return this.defaultClients;
83
+ }
84
+ /**
85
+ * Check if Jira is configured (either default or per-request)
86
+ */
87
+ hasJira() {
88
+ const requestCreds = getRequestCredentials();
89
+ return !!(requestCreds?.jira || this.config.defaultJiraConfig);
90
+ }
91
+ /**
92
+ * Check if Confluence is configured (either default or per-request)
93
+ */
94
+ hasConfluence() {
95
+ const requestCreds = getRequestCredentials();
96
+ return !!(requestCreds?.confluence || this.config.defaultConfluenceConfig);
97
+ }
98
+ /**
99
+ * Convert service credentials to ApiConfig
100
+ */
101
+ toApiConfig(creds) {
102
+ return {
103
+ url: creds.url,
104
+ token: creds.token,
105
+ // Per-request credentials use bearer auth (PAT style)
106
+ authType: "bearer",
107
+ };
108
+ }
109
+ }
110
+ //# sourceMappingURL=client-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-factory.js","sourceRoot":"","sources":["../../src/credentials/client-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Request context for per-user credentials using AsyncLocalStorage
3
+ *
4
+ * This allows tool handlers to access per-request credentials without
5
+ * needing to modify their function signatures.
6
+ */
7
+ import type { RequestCredentials } from "./types.js";
8
+ /**
9
+ * Run a function with per-request credentials in context
10
+ *
11
+ * @param credentials - Per-request credentials from HTTP headers
12
+ * @param fn - Function to run with credentials in context
13
+ */
14
+ export declare function runWithCredentials<T>(credentials: RequestCredentials, fn: () => T | Promise<T>): T | Promise<T>;
15
+ /**
16
+ * Get credentials from the current request context
17
+ *
18
+ * @returns Per-request credentials if available, undefined otherwise
19
+ */
20
+ export declare function getRequestCredentials(): RequestCredentials | undefined;
21
+ /**
22
+ * Check if we're running in a request context with credentials
23
+ */
24
+ export declare function hasRequestContext(): boolean;
25
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/credentials/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAOrD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,WAAW,EAAE,kBAAkB,EAC/B,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEhB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,kBAAkB,GAAG,SAAS,CAEtE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Request context for per-user credentials using AsyncLocalStorage
3
+ *
4
+ * This allows tool handlers to access per-request credentials without
5
+ * needing to modify their function signatures.
6
+ */
7
+ import { AsyncLocalStorage } from "node:async_hooks";
8
+ /**
9
+ * AsyncLocalStorage instance for request credentials
10
+ */
11
+ const credentialStorage = new AsyncLocalStorage();
12
+ /**
13
+ * Run a function with per-request credentials in context
14
+ *
15
+ * @param credentials - Per-request credentials from HTTP headers
16
+ * @param fn - Function to run with credentials in context
17
+ */
18
+ export function runWithCredentials(credentials, fn) {
19
+ return credentialStorage.run(credentials, fn);
20
+ }
21
+ /**
22
+ * Get credentials from the current request context
23
+ *
24
+ * @returns Per-request credentials if available, undefined otherwise
25
+ */
26
+ export function getRequestCredentials() {
27
+ return credentialStorage.getStore();
28
+ }
29
+ /**
30
+ * Check if we're running in a request context with credentials
31
+ */
32
+ export function hasRequestContext() {
33
+ return credentialStorage.getStore() !== undefined;
34
+ }
35
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/credentials/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD;;GAEG;AACH,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAsB,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAA+B,EAC/B,EAAwB;IAExB,OAAO,iBAAiB,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,iBAAiB,CAAC,QAAQ,EAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,iBAAiB,CAAC,QAAQ,EAAE,KAAK,SAAS,CAAC;AACpD,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Extract per-user credentials from HTTP headers
3
+ */
4
+ import type { RequestCredentials } from "./types.js";
5
+ /**
6
+ * MCP SDK's IsomorphicHeaders type
7
+ * Headers are stored as Record<string, string | string[] | undefined>
8
+ */
9
+ type IsomorphicHeaders = Record<string, string | string[] | undefined>;
10
+ /**
11
+ * Extract credentials from HTTP request headers
12
+ *
13
+ * Headers are case-insensitive per HTTP spec
14
+ */
15
+ export declare function extractCredentials(headers?: IsomorphicHeaders): RequestCredentials;
16
+ /**
17
+ * Check if request has any per-user credentials
18
+ */
19
+ export declare function hasCredentials(credentials: RequestCredentials): boolean;
20
+ export {};
21
+ //# sourceMappingURL=extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../src/credentials/extractor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD;;;GAGG;AACH,KAAK,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;AAcvE;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,kBAAkB,CAwBlF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,kBAAkB,GAAG,OAAO,CAEvE"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Extract per-user credentials from HTTP headers
3
+ */
4
+ import { CREDENTIAL_HEADERS } from "./types.js";
5
+ /**
6
+ * Get a header value as a string (handles arrays and normalizes to lowercase keys)
7
+ */
8
+ function getHeader(headers, name) {
9
+ // Headers are case-insensitive, try both exact and lowercase
10
+ const value = headers[name] ?? headers[name.toLowerCase()];
11
+ if (Array.isArray(value)) {
12
+ return value[0];
13
+ }
14
+ return value;
15
+ }
16
+ /**
17
+ * Extract credentials from HTTP request headers
18
+ *
19
+ * Headers are case-insensitive per HTTP spec
20
+ */
21
+ export function extractCredentials(headers) {
22
+ if (!headers) {
23
+ return {};
24
+ }
25
+ const credentials = {};
26
+ // Extract Jira credentials
27
+ const jiraUrl = getHeader(headers, CREDENTIAL_HEADERS.JIRA_URL);
28
+ const jiraToken = getHeader(headers, CREDENTIAL_HEADERS.JIRA_TOKEN);
29
+ if (jiraUrl && jiraToken) {
30
+ credentials.jira = { url: jiraUrl, token: jiraToken };
31
+ }
32
+ // Extract Confluence credentials
33
+ const confluenceUrl = getHeader(headers, CREDENTIAL_HEADERS.CONFLUENCE_URL);
34
+ const confluenceToken = getHeader(headers, CREDENTIAL_HEADERS.CONFLUENCE_TOKEN);
35
+ if (confluenceUrl && confluenceToken) {
36
+ credentials.confluence = { url: confluenceUrl, token: confluenceToken };
37
+ }
38
+ return credentials;
39
+ }
40
+ /**
41
+ * Check if request has any per-user credentials
42
+ */
43
+ export function hasCredentials(credentials) {
44
+ return !!(credentials.jira || credentials.confluence);
45
+ }
46
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/credentials/extractor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQhD;;GAEG;AACH,SAAS,SAAS,CAAC,OAA0B,EAAE,IAAY;IACzD,6DAA6D;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAA2B;IAC5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,WAAW,GAAuB,EAAE,CAAC;IAE3C,2BAA2B;IAC3B,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAChE,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAEpE,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QACzB,WAAW,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACxD,CAAC;IAED,iCAAiC;IACjC,MAAM,aAAa,GAAG,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAC5E,MAAM,eAAe,GAAG,SAAS,CAAC,OAAO,EAAE,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAEhF,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;QACrC,WAAW,CAAC,UAAU,GAAG,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IAC1E,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,WAA+B;IAC5D,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;AACxD,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Credentials module for per-user authentication
3
+ */
4
+ export type { RequestCredentials, ServiceCredentials } from "./types.js";
5
+ export { CREDENTIAL_HEADERS } from "./types.js";
6
+ export { extractCredentials, hasCredentials } from "./extractor.js";
7
+ export { ClientFactory, type Clients, type ClientFactoryConfig } from "./client-factory.js";
8
+ export { runWithCredentials, getRequestCredentials, hasRequestContext } from "./context.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Credentials module for per-user authentication
3
+ */
4
+ export { CREDENTIAL_HEADERS } from "./types.js";
5
+ export { extractCredentials, hasCredentials } from "./extractor.js";
6
+ export { ClientFactory } from "./client-factory.js";
7
+ export { runWithCredentials, getRequestCredentials, hasRequestContext } from "./context.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/credentials/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,aAAa,EAA0C,MAAM,qBAAqB,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Per-request credential types
3
+ */
4
+ export interface ServiceCredentials {
5
+ url: string;
6
+ token: string;
7
+ }
8
+ export interface RequestCredentials {
9
+ jira?: ServiceCredentials;
10
+ confluence?: ServiceCredentials;
11
+ }
12
+ /**
13
+ * HTTP header names for per-user credentials
14
+ */
15
+ export declare const CREDENTIAL_HEADERS: {
16
+ readonly JIRA_URL: "x-jira-url";
17
+ readonly JIRA_TOKEN: "x-jira-token";
18
+ readonly CONFLUENCE_URL: "x-confluence-url";
19
+ readonly CONFLUENCE_TOKEN: "x-confluence-token";
20
+ };
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/credentials/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Per-request credential types
3
+ */
4
+ /**
5
+ * HTTP header names for per-user credentials
6
+ */
7
+ export const CREDENTIAL_HEADERS = {
8
+ JIRA_URL: "x-jira-url",
9
+ JIRA_TOKEN: "x-jira-token",
10
+ CONFLUENCE_URL: "x-confluence-url",
11
+ CONFLUENCE_TOKEN: "x-confluence-token",
12
+ };
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/credentials/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,QAAQ,EAAE,YAAY;IACtB,UAAU,EAAE,cAAc;IAC1B,cAAc,EAAE,kBAAkB;IAClC,gBAAgB,EAAE,oBAAoB;CAC9B,CAAC"}