@ggakila/agentx-framework 0.1.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 (228) hide show
  1. package/CHANGELOG.md +107 -0
  2. package/LICENSE +21 -0
  3. package/README.md +335 -0
  4. package/dist/agent/Agent.d.ts +110 -0
  5. package/dist/agent/Agent.d.ts.map +1 -0
  6. package/dist/agent/Agent.js +291 -0
  7. package/dist/agent/Agent.js.map +1 -0
  8. package/dist/agent/index.d.ts +5 -0
  9. package/dist/agent/index.d.ts.map +1 -0
  10. package/dist/agent/index.js +11 -0
  11. package/dist/agent/index.js.map +1 -0
  12. package/dist/cli/CLI.d.ts +74 -0
  13. package/dist/cli/CLI.d.ts.map +1 -0
  14. package/dist/cli/CLI.js +255 -0
  15. package/dist/cli/CLI.js.map +1 -0
  16. package/dist/cli/InteractiveSetup.d.ts +104 -0
  17. package/dist/cli/InteractiveSetup.d.ts.map +1 -0
  18. package/dist/cli/InteractiveSetup.js +2225 -0
  19. package/dist/cli/InteractiveSetup.js.map +1 -0
  20. package/dist/cli/bin.d.ts +7 -0
  21. package/dist/cli/bin.d.ts.map +1 -0
  22. package/dist/cli/bin.js +35 -0
  23. package/dist/cli/bin.js.map +1 -0
  24. package/dist/cli/commands/ProjectCommands.d.ts +23 -0
  25. package/dist/cli/commands/ProjectCommands.d.ts.map +1 -0
  26. package/dist/cli/commands/ProjectCommands.js +504 -0
  27. package/dist/cli/commands/ProjectCommands.js.map +1 -0
  28. package/dist/cli/index.d.ts +7 -0
  29. package/dist/cli/index.d.ts.map +1 -0
  30. package/dist/cli/index.js +21 -0
  31. package/dist/cli/index.js.map +1 -0
  32. package/dist/credential/CredentialManager.d.ts +112 -0
  33. package/dist/credential/CredentialManager.d.ts.map +1 -0
  34. package/dist/credential/CredentialManager.js +343 -0
  35. package/dist/credential/CredentialManager.js.map +1 -0
  36. package/dist/credential/OAuth2Manager.d.ts +206 -0
  37. package/dist/credential/OAuth2Manager.d.ts.map +1 -0
  38. package/dist/credential/OAuth2Manager.js +463 -0
  39. package/dist/credential/OAuth2Manager.js.map +1 -0
  40. package/dist/credential/index.d.ts +6 -0
  41. package/dist/credential/index.d.ts.map +1 -0
  42. package/dist/credential/index.js +16 -0
  43. package/dist/credential/index.js.map +1 -0
  44. package/dist/error/ErrorHandler.d.ts +74 -0
  45. package/dist/error/ErrorHandler.d.ts.map +1 -0
  46. package/dist/error/ErrorHandler.js +279 -0
  47. package/dist/error/ErrorHandler.js.map +1 -0
  48. package/dist/index.d.ts +30 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +100 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/integrations/DatabaseTool.d.ts +149 -0
  53. package/dist/integrations/DatabaseTool.d.ts.map +1 -0
  54. package/dist/integrations/DatabaseTool.js +900 -0
  55. package/dist/integrations/DatabaseTool.js.map +1 -0
  56. package/dist/integrations/EmailTool.d.ts +142 -0
  57. package/dist/integrations/EmailTool.d.ts.map +1 -0
  58. package/dist/integrations/EmailTool.js +259 -0
  59. package/dist/integrations/EmailTool.js.map +1 -0
  60. package/dist/integrations/FileSystemTool.d.ts +153 -0
  61. package/dist/integrations/FileSystemTool.d.ts.map +1 -0
  62. package/dist/integrations/FileSystemTool.js +835 -0
  63. package/dist/integrations/FileSystemTool.js.map +1 -0
  64. package/dist/integrations/GoogleWorkspaceTool.d.ts +125 -0
  65. package/dist/integrations/GoogleWorkspaceTool.d.ts.map +1 -0
  66. package/dist/integrations/GoogleWorkspaceTool.js +765 -0
  67. package/dist/integrations/GoogleWorkspaceTool.js.map +1 -0
  68. package/dist/integrations/HttpTool.d.ts +55 -0
  69. package/dist/integrations/HttpTool.d.ts.map +1 -0
  70. package/dist/integrations/HttpTool.js +209 -0
  71. package/dist/integrations/HttpTool.js.map +1 -0
  72. package/dist/integrations/MessagingTool.d.ts +136 -0
  73. package/dist/integrations/MessagingTool.d.ts.map +1 -0
  74. package/dist/integrations/MessagingTool.js +503 -0
  75. package/dist/integrations/MessagingTool.js.map +1 -0
  76. package/dist/integrations/SchedulerTool.d.ts +147 -0
  77. package/dist/integrations/SchedulerTool.d.ts.map +1 -0
  78. package/dist/integrations/SchedulerTool.js +471 -0
  79. package/dist/integrations/SchedulerTool.js.map +1 -0
  80. package/dist/integrations/WebhookTool.d.ts +97 -0
  81. package/dist/integrations/WebhookTool.d.ts.map +1 -0
  82. package/dist/integrations/WebhookTool.js +351 -0
  83. package/dist/integrations/WebhookTool.js.map +1 -0
  84. package/dist/integrations/index.d.ts +13 -0
  85. package/dist/integrations/index.d.ts.map +1 -0
  86. package/dist/integrations/index.js +60 -0
  87. package/dist/integrations/index.js.map +1 -0
  88. package/dist/llm/LLMProvider.d.ts +83 -0
  89. package/dist/llm/LLMProvider.d.ts.map +1 -0
  90. package/dist/llm/LLMProvider.js +370 -0
  91. package/dist/llm/LLMProvider.js.map +1 -0
  92. package/dist/llm/index.d.ts +5 -0
  93. package/dist/llm/index.d.ts.map +1 -0
  94. package/dist/llm/index.js +14 -0
  95. package/dist/llm/index.js.map +1 -0
  96. package/dist/payment/PaymentProvider.d.ts +157 -0
  97. package/dist/payment/PaymentProvider.d.ts.map +1 -0
  98. package/dist/payment/PaymentProvider.js +525 -0
  99. package/dist/payment/PaymentProvider.js.map +1 -0
  100. package/dist/payment/index.d.ts +5 -0
  101. package/dist/payment/index.d.ts.map +1 -0
  102. package/dist/payment/index.js +16 -0
  103. package/dist/payment/index.js.map +1 -0
  104. package/dist/plugin/PluginManager.d.ts +156 -0
  105. package/dist/plugin/PluginManager.d.ts.map +1 -0
  106. package/dist/plugin/PluginManager.js +288 -0
  107. package/dist/plugin/PluginManager.js.map +1 -0
  108. package/dist/plugin/index.d.ts +5 -0
  109. package/dist/plugin/index.d.ts.map +1 -0
  110. package/dist/plugin/index.js +10 -0
  111. package/dist/plugin/index.js.map +1 -0
  112. package/dist/runtime/AgentXRuntime.d.ts +90 -0
  113. package/dist/runtime/AgentXRuntime.d.ts.map +1 -0
  114. package/dist/runtime/AgentXRuntime.js +469 -0
  115. package/dist/runtime/AgentXRuntime.js.map +1 -0
  116. package/dist/security/SecurityManager.d.ts +245 -0
  117. package/dist/security/SecurityManager.d.ts.map +1 -0
  118. package/dist/security/SecurityManager.js +512 -0
  119. package/dist/security/SecurityManager.js.map +1 -0
  120. package/dist/security/index.d.ts +5 -0
  121. package/dist/security/index.d.ts.map +1 -0
  122. package/dist/security/index.js +14 -0
  123. package/dist/security/index.js.map +1 -0
  124. package/dist/tool/ToolRegistry.d.ts +58 -0
  125. package/dist/tool/ToolRegistry.d.ts.map +1 -0
  126. package/dist/tool/ToolRegistry.js +173 -0
  127. package/dist/tool/ToolRegistry.js.map +1 -0
  128. package/dist/tool/ToolValidator.d.ts +41 -0
  129. package/dist/tool/ToolValidator.d.ts.map +1 -0
  130. package/dist/tool/ToolValidator.js +158 -0
  131. package/dist/tool/ToolValidator.js.map +1 -0
  132. package/dist/tool/index.d.ts +6 -0
  133. package/dist/tool/index.d.ts.map +1 -0
  134. package/dist/tool/index.js +11 -0
  135. package/dist/tool/index.js.map +1 -0
  136. package/dist/transport/BaseTransport.d.ts +66 -0
  137. package/dist/transport/BaseTransport.d.ts.map +1 -0
  138. package/dist/transport/BaseTransport.js +103 -0
  139. package/dist/transport/BaseTransport.js.map +1 -0
  140. package/dist/transport/HttpTransport.d.ts +41 -0
  141. package/dist/transport/HttpTransport.d.ts.map +1 -0
  142. package/dist/transport/HttpTransport.js +160 -0
  143. package/dist/transport/HttpTransport.js.map +1 -0
  144. package/dist/transport/LocalTransport.d.ts +40 -0
  145. package/dist/transport/LocalTransport.d.ts.map +1 -0
  146. package/dist/transport/LocalTransport.js +157 -0
  147. package/dist/transport/LocalTransport.js.map +1 -0
  148. package/dist/transport/QueueTransport.d.ts +63 -0
  149. package/dist/transport/QueueTransport.d.ts.map +1 -0
  150. package/dist/transport/QueueTransport.js +194 -0
  151. package/dist/transport/QueueTransport.js.map +1 -0
  152. package/dist/transport/StdioTransport.d.ts +51 -0
  153. package/dist/transport/StdioTransport.d.ts.map +1 -0
  154. package/dist/transport/StdioTransport.js +216 -0
  155. package/dist/transport/StdioTransport.js.map +1 -0
  156. package/dist/transport/TransportFactory.d.ts +35 -0
  157. package/dist/transport/TransportFactory.d.ts.map +1 -0
  158. package/dist/transport/TransportFactory.js +100 -0
  159. package/dist/transport/TransportFactory.js.map +1 -0
  160. package/dist/transport/index.d.ts +10 -0
  161. package/dist/transport/index.d.ts.map +1 -0
  162. package/dist/transport/index.js +19 -0
  163. package/dist/transport/index.js.map +1 -0
  164. package/dist/types/agent.d.ts +66 -0
  165. package/dist/types/agent.d.ts.map +1 -0
  166. package/dist/types/agent.js +3 -0
  167. package/dist/types/agent.js.map +1 -0
  168. package/dist/types/config.d.ts +60 -0
  169. package/dist/types/config.d.ts.map +1 -0
  170. package/dist/types/config.js +6 -0
  171. package/dist/types/config.js.map +1 -0
  172. package/dist/types/credential.d.ts +38 -0
  173. package/dist/types/credential.d.ts.map +1 -0
  174. package/dist/types/credential.js +3 -0
  175. package/dist/types/credential.js.map +1 -0
  176. package/dist/types/error.d.ts +136 -0
  177. package/dist/types/error.d.ts.map +1 -0
  178. package/dist/types/error.js +223 -0
  179. package/dist/types/error.js.map +1 -0
  180. package/dist/types/index.d.ts +10 -0
  181. package/dist/types/index.d.ts.map +1 -0
  182. package/dist/types/index.js +27 -0
  183. package/dist/types/index.js.map +1 -0
  184. package/dist/types/llm.d.ts +43 -0
  185. package/dist/types/llm.d.ts.map +1 -0
  186. package/dist/types/llm.js +3 -0
  187. package/dist/types/llm.js.map +1 -0
  188. package/dist/types/payment.d.ts +129 -0
  189. package/dist/types/payment.d.ts.map +1 -0
  190. package/dist/types/payment.js +6 -0
  191. package/dist/types/payment.js.map +1 -0
  192. package/dist/types/runtime.d.ts +31 -0
  193. package/dist/types/runtime.d.ts.map +1 -0
  194. package/dist/types/runtime.js +3 -0
  195. package/dist/types/runtime.js.map +1 -0
  196. package/dist/types/tool.d.ts +72 -0
  197. package/dist/types/tool.d.ts.map +1 -0
  198. package/dist/types/tool.js +3 -0
  199. package/dist/types/tool.js.map +1 -0
  200. package/dist/types/transport.d.ts +53 -0
  201. package/dist/types/transport.d.ts.map +1 -0
  202. package/dist/types/transport.js +3 -0
  203. package/dist/types/transport.js.map +1 -0
  204. package/dist/types/workflow.d.ts +72 -0
  205. package/dist/types/workflow.d.ts.map +1 -0
  206. package/dist/types/workflow.js +6 -0
  207. package/dist/types/workflow.js.map +1 -0
  208. package/dist/utils/factory.d.ts +14 -0
  209. package/dist/utils/factory.d.ts.map +1 -0
  210. package/dist/utils/factory.js +146 -0
  211. package/dist/utils/factory.js.map +1 -0
  212. package/dist/workflow/StateManager.d.ts +93 -0
  213. package/dist/workflow/StateManager.d.ts.map +1 -0
  214. package/dist/workflow/StateManager.js +223 -0
  215. package/dist/workflow/StateManager.js.map +1 -0
  216. package/dist/workflow/WorkflowDefinition.d.ts +49 -0
  217. package/dist/workflow/WorkflowDefinition.d.ts.map +1 -0
  218. package/dist/workflow/WorkflowDefinition.js +264 -0
  219. package/dist/workflow/WorkflowDefinition.js.map +1 -0
  220. package/dist/workflow/WorkflowExecutor.d.ts +42 -0
  221. package/dist/workflow/WorkflowExecutor.d.ts.map +1 -0
  222. package/dist/workflow/WorkflowExecutor.js +372 -0
  223. package/dist/workflow/WorkflowExecutor.js.map +1 -0
  224. package/dist/workflow/index.d.ts +7 -0
  225. package/dist/workflow/index.d.ts.map +1 -0
  226. package/dist/workflow/index.js +17 -0
  227. package/dist/workflow/index.js.map +1 -0
  228. package/package.json +122 -0
@@ -0,0 +1,343 @@
1
+ "use strict";
2
+ /**
3
+ * Credential Management System
4
+ * Provides secure credential storage, encryption, and OAuth2 support
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.CredentialScopeResolver = exports.CredentialManager = exports.InMemoryCredentialStore = void 0;
8
+ const crypto_1 = require("crypto");
9
+ const error_1 = require("../types/error");
10
+ class InMemoryCredentialStore {
11
+ store = new Map();
12
+ async save(key, data) {
13
+ this.store.set(key, data);
14
+ }
15
+ async load(key) {
16
+ return this.store.get(key) || null;
17
+ }
18
+ async delete(key) {
19
+ this.store.delete(key);
20
+ }
21
+ async list() {
22
+ return Array.from(this.store.keys());
23
+ }
24
+ clear() {
25
+ this.store.clear();
26
+ }
27
+ }
28
+ exports.InMemoryCredentialStore = InMemoryCredentialStore;
29
+ class CredentialManager {
30
+ store;
31
+ logger;
32
+ encryptionKey;
33
+ algorithm = 'aes-256-gcm';
34
+ oauth2Manager;
35
+ constructor(config) {
36
+ this.store = config.store;
37
+ this.logger = config.logger;
38
+ this.oauth2Manager = config.oauth2Manager;
39
+ // Derive a 32-byte key from the provided encryption key
40
+ this.encryptionKey = (0, crypto_1.scryptSync)(config.encryptionKey, 'agentx-salt', 32);
41
+ }
42
+ /**
43
+ * Set the OAuth2 manager for token refresh support
44
+ */
45
+ setOAuth2Manager(manager) {
46
+ this.oauth2Manager = manager;
47
+ }
48
+ /**
49
+ * Get the OAuth2 manager
50
+ */
51
+ getOAuth2Manager() {
52
+ return this.oauth2Manager;
53
+ }
54
+ /**
55
+ * Store a credential with encryption
56
+ */
57
+ async setCredential(scope, credential) {
58
+ this.validateCredential(credential);
59
+ this.validateScope(scope);
60
+ const key = this.getScopeKey(scope);
61
+ const encrypted = this.encrypt(JSON.stringify(credential));
62
+ await this.store.save(key, encrypted);
63
+ this.logger.info(`Credential stored for scope: ${scope}`, { type: credential.type });
64
+ }
65
+ /**
66
+ * Retrieve and decrypt a credential
67
+ */
68
+ async getCredential(scope) {
69
+ this.validateScope(scope);
70
+ const key = this.getScopeKey(scope);
71
+ const encrypted = await this.store.load(key);
72
+ if (!encrypted) {
73
+ return null;
74
+ }
75
+ try {
76
+ const decrypted = this.decrypt(encrypted);
77
+ const credential = JSON.parse(decrypted);
78
+ // Check expiration
79
+ if (credential.expiresAt && new Date(credential.expiresAt) < new Date()) {
80
+ this.logger.warn(`Credential expired for scope: ${scope}`);
81
+ // For OAuth2, try to refresh
82
+ if (credential.type === 'oauth2') {
83
+ return this.handleExpiredOAuth2(scope, credential);
84
+ }
85
+ return null;
86
+ }
87
+ return credential;
88
+ }
89
+ catch (error) {
90
+ this.logger.error(`Failed to decrypt credential for scope: ${scope}`, error);
91
+ throw new error_1.SecurityError('Failed to decrypt credential', error_1.ErrorCodes.INVALID_CREDENTIALS);
92
+ }
93
+ }
94
+ /**
95
+ * Delete a credential
96
+ */
97
+ async deleteCredential(scope) {
98
+ this.validateScope(scope);
99
+ const key = this.getScopeKey(scope);
100
+ await this.store.delete(key);
101
+ this.logger.info(`Credential deleted for scope: ${scope}`);
102
+ }
103
+ /**
104
+ * List all credential scopes
105
+ */
106
+ async listCredentials() {
107
+ const keys = await this.store.list();
108
+ return keys
109
+ .filter(k => k.startsWith('credential:'))
110
+ .map(k => k.replace('credential:', ''));
111
+ }
112
+ /**
113
+ * Inject credentials for a tool context
114
+ */
115
+ async injectCredentials(scope) {
116
+ const credential = await this.getCredential(scope);
117
+ if (!credential) {
118
+ return {};
119
+ }
120
+ // Return only the data needed for the tool, not the full credential
121
+ return this.extractCredentialData(credential);
122
+ }
123
+ /**
124
+ * Check if a credential exists and is valid
125
+ */
126
+ async hasValidCredential(scope) {
127
+ const credential = await this.getCredential(scope);
128
+ return credential !== null;
129
+ }
130
+ /**
131
+ * Refresh an OAuth2 token
132
+ */
133
+ async refreshOAuth2Token(scope, providerName) {
134
+ const credential = await this.getCredential(scope);
135
+ if (!credential || credential.type !== 'oauth2') {
136
+ return null;
137
+ }
138
+ const oauth2 = credential;
139
+ if (!oauth2.data.refreshToken) {
140
+ this.logger.warn(`No refresh token available for scope: ${scope}`);
141
+ return null;
142
+ }
143
+ // If we have an OAuth2Manager and provider name, use it for refresh
144
+ if (this.oauth2Manager && providerName) {
145
+ try {
146
+ const refreshed = await this.oauth2Manager.refreshToken(providerName, oauth2);
147
+ // Store the refreshed credential
148
+ await this.setCredential(scope, refreshed);
149
+ this.logger.info(`OAuth2 token refreshed for scope: ${scope}`);
150
+ return refreshed;
151
+ }
152
+ catch (error) {
153
+ this.logger.error(`OAuth2 token refresh failed for scope: ${scope}`, error);
154
+ throw error;
155
+ }
156
+ }
157
+ // Fallback: return existing credential if no OAuth2Manager
158
+ this.logger.debug(`OAuth2 token refresh requested for scope: ${scope} (no OAuth2Manager configured)`);
159
+ return oauth2;
160
+ }
161
+ /**
162
+ * Initiate OAuth2 authorization flow
163
+ */
164
+ initiateOAuth2Flow(providerName, scopes) {
165
+ if (!this.oauth2Manager) {
166
+ throw new error_1.ValidationError('OAuth2Manager not configured', error_1.ErrorCodes.MISSING_CONFIG);
167
+ }
168
+ return this.oauth2Manager.initiateFlow(providerName, scopes);
169
+ }
170
+ /**
171
+ * Complete OAuth2 authorization flow
172
+ */
173
+ async completeOAuth2Flow(code, state, scope) {
174
+ if (!this.oauth2Manager) {
175
+ throw new error_1.ValidationError('OAuth2Manager not configured', error_1.ErrorCodes.MISSING_CONFIG);
176
+ }
177
+ const credential = await this.oauth2Manager.completeFlow(code, state);
178
+ // Store the credential
179
+ await this.setCredential(scope, credential);
180
+ return credential;
181
+ }
182
+ /**
183
+ * Register an OAuth2 provider
184
+ */
185
+ registerOAuth2Provider(config) {
186
+ if (!this.oauth2Manager) {
187
+ throw new error_1.ValidationError('OAuth2Manager not configured', error_1.ErrorCodes.MISSING_CONFIG);
188
+ }
189
+ this.oauth2Manager.registerProvider(config);
190
+ }
191
+ // Private methods
192
+ encrypt(plaintext) {
193
+ const iv = (0, crypto_1.randomBytes)(16);
194
+ const cipher = (0, crypto_1.createCipheriv)(this.algorithm, this.encryptionKey, iv);
195
+ let encrypted = cipher.update(plaintext, 'utf8', 'hex');
196
+ encrypted += cipher.final('hex');
197
+ const authTag = cipher.getAuthTag();
198
+ // Combine IV + authTag + encrypted data
199
+ return iv.toString('hex') + ':' + authTag.toString('hex') + ':' + encrypted;
200
+ }
201
+ decrypt(ciphertext) {
202
+ const parts = ciphertext.split(':');
203
+ if (parts.length !== 3) {
204
+ throw new error_1.SecurityError('Invalid encrypted data format', error_1.ErrorCodes.INVALID_CREDENTIALS);
205
+ }
206
+ const iv = Buffer.from(parts[0], 'hex');
207
+ const authTag = Buffer.from(parts[1], 'hex');
208
+ const encrypted = parts[2];
209
+ const decipher = (0, crypto_1.createDecipheriv)(this.algorithm, this.encryptionKey, iv);
210
+ decipher.setAuthTag(authTag);
211
+ let decrypted = decipher.update(encrypted, 'hex', 'utf8');
212
+ decrypted += decipher.final('utf8');
213
+ return decrypted;
214
+ }
215
+ validateCredential(credential) {
216
+ if (!credential.type) {
217
+ throw new error_1.ValidationError('Credential type is required', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
218
+ }
219
+ const validTypes = ['api_key', 'oauth2', 'basic_auth', 'custom'];
220
+ if (!validTypes.includes(credential.type)) {
221
+ throw new error_1.ValidationError(`Invalid credential type: ${credential.type}`, error_1.ErrorCodes.INVALID_FORMAT);
222
+ }
223
+ if (!credential.data || typeof credential.data !== 'object') {
224
+ throw new error_1.ValidationError('Credential data is required', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
225
+ }
226
+ // Type-specific validation
227
+ switch (credential.type) {
228
+ case 'api_key':
229
+ if (!credential.data.key) {
230
+ throw new error_1.ValidationError('API key credential requires key field', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
231
+ }
232
+ break;
233
+ case 'oauth2':
234
+ if (!credential.data.accessToken) {
235
+ throw new error_1.ValidationError('OAuth2 credential requires accessToken', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
236
+ }
237
+ break;
238
+ case 'basic_auth':
239
+ if (!credential.data.username || !credential.data.password) {
240
+ throw new error_1.ValidationError('Basic auth requires username and password', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
241
+ }
242
+ break;
243
+ }
244
+ }
245
+ validateScope(scope) {
246
+ if (!scope || typeof scope !== 'string') {
247
+ throw new error_1.ValidationError('Scope is required', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
248
+ }
249
+ // Scope format: provider:resource or provider:resource:action
250
+ if (!/^[a-zA-Z][a-zA-Z0-9_-]*(:[a-zA-Z][a-zA-Z0-9_-]*)*$/.test(scope)) {
251
+ throw new error_1.ValidationError('Invalid scope format. Use format: provider:resource[:action]', error_1.ErrorCodes.INVALID_FORMAT);
252
+ }
253
+ }
254
+ getScopeKey(scope) {
255
+ return `credential:${scope}`;
256
+ }
257
+ extractCredentialData(credential) {
258
+ switch (credential.type) {
259
+ case 'api_key':
260
+ return { apiKey: credential.data.key };
261
+ case 'oauth2':
262
+ return {
263
+ accessToken: credential.data.accessToken,
264
+ tokenType: credential.data.tokenType || 'Bearer',
265
+ };
266
+ case 'basic_auth':
267
+ return {
268
+ username: credential.data.username,
269
+ password: credential.data.password,
270
+ };
271
+ case 'custom':
272
+ return credential.data;
273
+ default:
274
+ return {};
275
+ }
276
+ }
277
+ async handleExpiredOAuth2(scope, credential) {
278
+ if (!credential.data.refreshToken) {
279
+ await this.deleteCredential(scope);
280
+ return null;
281
+ }
282
+ // Extract provider name from scope if possible (format: provider:resource)
283
+ const parts = scope.split(':');
284
+ const providerName = parts[0];
285
+ // Attempt refresh
286
+ try {
287
+ const refreshed = await this.refreshOAuth2Token(scope, providerName);
288
+ return refreshed;
289
+ }
290
+ catch (error) {
291
+ this.logger.error(`Failed to refresh expired OAuth2 token for scope: ${scope}`, error);
292
+ await this.deleteCredential(scope);
293
+ return null;
294
+ }
295
+ }
296
+ }
297
+ exports.CredentialManager = CredentialManager;
298
+ /**
299
+ * Credential scoping utility
300
+ */
301
+ class CredentialScopeResolver {
302
+ /**
303
+ * Check if a scope matches a pattern
304
+ */
305
+ static matches(scope, pattern) {
306
+ // Exact match
307
+ if (scope === pattern)
308
+ return true;
309
+ // Wildcard match
310
+ if (pattern.endsWith(':*')) {
311
+ const prefix = pattern.slice(0, -2);
312
+ return scope.startsWith(prefix + ':') || scope === prefix;
313
+ }
314
+ return false;
315
+ }
316
+ /**
317
+ * Get the most specific matching scope from a list
318
+ */
319
+ static findBestMatch(scope, availableScopes) {
320
+ // First try exact match
321
+ if (availableScopes.includes(scope)) {
322
+ return scope;
323
+ }
324
+ // Then try wildcard matches, preferring more specific ones
325
+ const matches = availableScopes
326
+ .filter(s => this.matches(scope, s))
327
+ .sort((a, b) => b.length - a.length);
328
+ return matches[0] || null;
329
+ }
330
+ /**
331
+ * Parse a scope into its components
332
+ */
333
+ static parse(scope) {
334
+ const parts = scope.split(':');
335
+ return {
336
+ provider: parts[0],
337
+ resource: parts[1],
338
+ action: parts[2],
339
+ };
340
+ }
341
+ }
342
+ exports.CredentialScopeResolver = CredentialScopeResolver;
343
+ //# sourceMappingURL=CredentialManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CredentialManager.js","sourceRoot":"","sources":["../../src/credential/CredentialManager.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,mCAA2G;AAG3G,0CAA4E;AAiB5E,MAAa,uBAAuB;IAC1B,KAAK,GAAwB,IAAI,GAAG,EAAE,CAAC;IAE/C,KAAK,CAAC,IAAI,CAAC,GAAW,EAAE,IAAY;QAClC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,IAAI;QACR,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;CACF;AAtBD,0DAsBC;AAED,MAAa,iBAAiB;IACpB,KAAK,CAAkB;IACvB,MAAM,CAAS;IACf,aAAa,CAAS;IACtB,SAAS,GAAG,aAAa,CAAC;IAC1B,aAAa,CAAiB;IAEtC,YAAY,MAA+B;QACzC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;QAC1C,wDAAwD;QACxD,IAAI,CAAC,aAAa,GAAG,IAAA,mBAAU,EAAC,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,OAAsB;QACrC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,UAAsB;QACvD,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE1B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QAE3D,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACvF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,KAAa;QAC/B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAE1B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE7C,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAe,CAAC;YAEvD,mBAAmB;YACnB,IAAI,UAAU,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;gBACxE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;gBAC3D,6BAA6B;gBAC7B,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACjC,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,UAA8B,CAAC,CAAC;gBACzE,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,KAAK,EAAE,EAAE,KAAc,CAAC,CAAC;YACtF,MAAM,IAAI,qBAAa,CAAC,8BAA8B,EAAE,kBAAU,CAAC,mBAAmB,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,KAAa;QAClC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe;QACnB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACrC,OAAO,IAAI;aACR,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;aACxC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,KAAa;QACnC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEnD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,oEAAoE;QACpE,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,KAAa;QACpC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACnD,OAAO,UAAU,KAAK,IAAI,CAAC;IAC7B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,KAAa,EAAE,YAAqB;QAC3D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAEnD,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,UAA8B,CAAC;QAE9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,KAAK,EAAE,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,oEAAoE;QACpE,IAAI,IAAI,CAAC,aAAa,IAAI,YAAY,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBAC9E,iCAAiC;gBACjC,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,qCAAqC,KAAK,EAAE,CAAC,CAAC;gBAC/D,OAAO,SAAS,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0CAA0C,KAAK,EAAE,EAAE,KAAc,CAAC,CAAC;gBACrF,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,KAAK,gCAAgC,CAAC,CAAC;QACtG,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,YAAoB,EAAE,MAAiB;QACxD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,uBAAe,CACvB,8BAA8B,EAC9B,kBAAU,CAAC,cAAc,CAC1B,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CAAC,IAAY,EAAE,KAAa,EAAE,KAAa;QACjE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,uBAAe,CACvB,8BAA8B,EAC9B,kBAAU,CAAC,cAAc,CAC1B,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEtE,uBAAuB;QACvB,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAE5C,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,sBAAsB,CAAC,MAA4B;QACjD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,uBAAe,CACvB,8BAA8B,EAC9B,kBAAU,CAAC,cAAc,CAC1B,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAED,kBAAkB;IAEV,OAAO,CAAC,SAAiB;QAC/B,MAAM,EAAE,GAAG,IAAA,oBAAW,EAAC,EAAE,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,IAAA,uBAAc,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAc,CAAC;QAEnF,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACxD,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEjC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAEpC,wCAAwC;QACxC,OAAO,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,SAAS,CAAC;IAC9E,CAAC;IAEO,OAAO,CAAC,UAAkB;QAChC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,qBAAa,CAAC,+BAA+B,EAAE,kBAAU,CAAC,mBAAmB,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAE3B,MAAM,QAAQ,GAAG,IAAA,yBAAgB,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAgB,CAAC;QACzF,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1D,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEpC,OAAO,SAAS,CAAC;IACnB,CAAC;IAEO,kBAAkB,CAAC,UAAsB;QAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,uBAAe,CAAC,6BAA6B,EAAE,kBAAU,CAAC,sBAAsB,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,uBAAe,CAAC,4BAA4B,UAAU,CAAC,IAAI,EAAE,EAAE,kBAAU,CAAC,cAAc,CAAC,CAAC;QACtG,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5D,MAAM,IAAI,uBAAe,CAAC,6BAA6B,EAAE,kBAAU,CAAC,sBAAsB,CAAC,CAAC;QAC9F,CAAC;QAED,2BAA2B;QAC3B,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,SAAS;gBACZ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBACzB,MAAM,IAAI,uBAAe,CAAC,uCAAuC,EAAE,kBAAU,CAAC,sBAAsB,CAAC,CAAC;gBACxG,CAAC;gBACD,MAAM;YACR,KAAK,QAAQ;gBACX,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjC,MAAM,IAAI,uBAAe,CAAC,wCAAwC,EAAE,kBAAU,CAAC,sBAAsB,CAAC,CAAC;gBACzG,CAAC;gBACD,MAAM;YACR,KAAK,YAAY;gBACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC3D,MAAM,IAAI,uBAAe,CAAC,2CAA2C,EAAE,kBAAU,CAAC,sBAAsB,CAAC,CAAC;gBAC5G,CAAC;gBACD,MAAM;QACV,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,KAAa;QACjC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACxC,MAAM,IAAI,uBAAe,CAAC,mBAAmB,EAAE,kBAAU,CAAC,sBAAsB,CAAC,CAAC;QACpF,CAAC;QAED,8DAA8D;QAC9D,IAAI,CAAC,oDAAoD,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,uBAAe,CACvB,8DAA8D,EAC9D,kBAAU,CAAC,cAAc,CAC1B,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,KAAa;QAC/B,OAAO,cAAc,KAAK,EAAE,CAAC;IAC/B,CAAC;IAEO,qBAAqB,CAAC,UAAsB;QAClD,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;YACxB,KAAK,SAAS;gBACZ,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACzC,KAAK,QAAQ;gBACX,OAAO;oBACL,WAAW,EAAE,UAAU,CAAC,IAAI,CAAC,WAAW;oBACxC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,IAAI,QAAQ;iBACjD,CAAC;YACJ,KAAK,YAAY;gBACf,OAAO;oBACL,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ;oBAClC,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,QAAQ;iBACnC,CAAC;YACJ,KAAK,QAAQ;gBACX,OAAO,UAAU,CAAC,IAAI,CAAC;YACzB;gBACE,OAAO,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,KAAa,EACb,UAA4B;QAE5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,2EAA2E;QAC3E,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAE9B,kBAAkB;QAClB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACrE,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,qDAAqD,KAAK,EAAE,EAAE,KAAc,CAAC,CAAC;YAChG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;CACF;AA1UD,8CA0UC;AAED;;GAEG;AACH,MAAa,uBAAuB;IAClC;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAa,EAAE,OAAe;QAC3C,cAAc;QACd,IAAI,KAAK,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC;QAEnC,iBAAiB;QACjB,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpC,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,KAAK,MAAM,CAAC;QAC5D,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,KAAa,EAAE,eAAyB;QAC3D,wBAAwB;QACxB,IAAI,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,2DAA2D;QAC3D,MAAM,OAAO,GAAG,eAAe;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aACnC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;QAEvC,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,KAAa;QACxB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO;YACL,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAClB,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;SACjB,CAAC;IACJ,CAAC;CACF;AA7CD,0DA6CC"}
@@ -0,0 +1,206 @@
1
+ /**
2
+ * OAuth2 Flow and Token Management
3
+ * Provides OAuth2 authorization flow handling and automatic token refresh
4
+ */
5
+ import { OAuth2Credential } from '../types/credential';
6
+ import { Logger } from '../types/tool';
7
+ /**
8
+ * OAuth2 Provider Configuration
9
+ */
10
+ export interface OAuth2ProviderConfig {
11
+ name: string;
12
+ authorizationUrl: string;
13
+ tokenUrl: string;
14
+ clientId: string;
15
+ clientSecret: string;
16
+ redirectUri: string;
17
+ scopes?: string[];
18
+ additionalParams?: Record<string, string>;
19
+ refreshThresholdSeconds?: number;
20
+ usesPKCE?: boolean;
21
+ }
22
+ /**
23
+ * OAuth2 Token Response from provider
24
+ */
25
+ export interface OAuth2TokenResponse {
26
+ access_token: string;
27
+ token_type: string;
28
+ expires_in?: number;
29
+ refresh_token?: string;
30
+ scope?: string;
31
+ }
32
+ /**
33
+ * OAuth2 State for tracking authorization flows
34
+ */
35
+ export interface OAuth2State {
36
+ provider: string;
37
+ scopes: string[];
38
+ redirectUri: string;
39
+ codeVerifier?: string;
40
+ createdAt: Date;
41
+ expiresAt: Date;
42
+ }
43
+ /**
44
+ * HTTP Client interface for OAuth2 requests
45
+ */
46
+ export interface OAuth2HttpClient {
47
+ post(url: string, data: Record<string, string>, headers?: Record<string, string>): Promise<OAuth2TokenResponse>;
48
+ }
49
+ /**
50
+ * Default HTTP client using fetch
51
+ */
52
+ export declare class DefaultOAuth2HttpClient implements OAuth2HttpClient {
53
+ post(url: string, data: Record<string, string>, headers?: Record<string, string>): Promise<OAuth2TokenResponse>;
54
+ }
55
+ /**
56
+ * OAuth2 Manager Configuration
57
+ */
58
+ export interface OAuth2ManagerConfig {
59
+ logger: Logger;
60
+ httpClient?: OAuth2HttpClient;
61
+ stateExpirationMinutes?: number;
62
+ }
63
+ /**
64
+ * OAuth2 Manager
65
+ * Handles OAuth2 authorization flows and token management
66
+ */
67
+ export declare class OAuth2Manager {
68
+ private providers;
69
+ private pendingStates;
70
+ private logger;
71
+ private httpClient;
72
+ private stateExpirationMinutes;
73
+ constructor(config: OAuth2ManagerConfig);
74
+ /**
75
+ * Register an OAuth2 provider
76
+ */
77
+ registerProvider(config: OAuth2ProviderConfig): void;
78
+ /**
79
+ * Unregister an OAuth2 provider
80
+ */
81
+ unregisterProvider(name: string): void;
82
+ /**
83
+ * Get a registered provider
84
+ */
85
+ getProvider(name: string): OAuth2ProviderConfig | undefined;
86
+ /**
87
+ * List all registered providers
88
+ */
89
+ listProviders(): string[];
90
+ /**
91
+ * Initiate OAuth2 authorization flow
92
+ * Returns the authorization URL to redirect the user to
93
+ */
94
+ initiateFlow(providerName: string, scopes?: string[]): string;
95
+ /**
96
+ * Complete OAuth2 authorization flow
97
+ * Exchange authorization code for tokens
98
+ */
99
+ completeFlow(code: string, state: string): Promise<OAuth2Credential>;
100
+ /**
101
+ * Refresh an OAuth2 token
102
+ */
103
+ refreshToken(providerName: string, credential: OAuth2Credential): Promise<OAuth2Credential>;
104
+ /**
105
+ * Check if a token needs refresh
106
+ */
107
+ needsRefresh(credential: OAuth2Credential, thresholdSeconds?: number): boolean;
108
+ /**
109
+ * Check if a token is expired
110
+ */
111
+ isExpired(credential: OAuth2Credential): boolean;
112
+ /**
113
+ * Get pending state data (for testing/debugging)
114
+ */
115
+ getPendingState(state: string): OAuth2State | undefined;
116
+ /**
117
+ * Clean up expired states
118
+ */
119
+ cleanupExpiredStates(): number;
120
+ private validateProviderConfig;
121
+ private generateState;
122
+ private generateCodeVerifier;
123
+ private generateCodeChallenge;
124
+ private buildCredential;
125
+ }
126
+ /**
127
+ * Common OAuth2 Provider Presets
128
+ * Pre-configured settings for popular OAuth2 providers
129
+ */
130
+ export declare const OAuth2Providers: {
131
+ /**
132
+ * Google OAuth2 configuration
133
+ */
134
+ google: (config: {
135
+ clientId: string;
136
+ clientSecret: string;
137
+ redirectUri: string;
138
+ scopes?: string[];
139
+ }) => OAuth2ProviderConfig;
140
+ /**
141
+ * GitHub OAuth2 configuration
142
+ */
143
+ github: (config: {
144
+ clientId: string;
145
+ clientSecret: string;
146
+ redirectUri: string;
147
+ scopes?: string[];
148
+ }) => OAuth2ProviderConfig;
149
+ /**
150
+ * Microsoft/Azure AD OAuth2 configuration
151
+ */
152
+ microsoft: (config: {
153
+ clientId: string;
154
+ clientSecret: string;
155
+ redirectUri: string;
156
+ tenantId?: string;
157
+ scopes?: string[];
158
+ }) => OAuth2ProviderConfig;
159
+ /**
160
+ * Slack OAuth2 configuration
161
+ */
162
+ slack: (config: {
163
+ clientId: string;
164
+ clientSecret: string;
165
+ redirectUri: string;
166
+ scopes?: string[];
167
+ }) => OAuth2ProviderConfig;
168
+ /**
169
+ * Salesforce OAuth2 configuration
170
+ */
171
+ salesforce: (config: {
172
+ clientId: string;
173
+ clientSecret: string;
174
+ redirectUri: string;
175
+ instanceUrl?: string;
176
+ scopes?: string[];
177
+ }) => OAuth2ProviderConfig;
178
+ /**
179
+ * Custom OAuth2 provider configuration
180
+ */
181
+ custom: (config: OAuth2ProviderConfig) => OAuth2ProviderConfig;
182
+ };
183
+ /**
184
+ * Auto-refresh wrapper for OAuth2 credentials
185
+ * Automatically refreshes tokens before they expire
186
+ */
187
+ export declare class OAuth2AutoRefresher {
188
+ private oauth2Manager;
189
+ private refreshCallbacks;
190
+ private refreshTimers;
191
+ private logger;
192
+ constructor(oauth2Manager: OAuth2Manager, logger: Logger);
193
+ /**
194
+ * Start auto-refresh for a credential
195
+ */
196
+ startAutoRefresh(key: string, providerName: string, credential: OAuth2Credential, onRefresh: (credential: OAuth2Credential) => Promise<void>, thresholdSeconds?: number): void;
197
+ /**
198
+ * Stop auto-refresh for a credential
199
+ */
200
+ stopAutoRefresh(key: string): void;
201
+ /**
202
+ * Stop all auto-refresh timers
203
+ */
204
+ stopAll(): void;
205
+ }
206
+ //# sourceMappingURL=OAuth2Manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuth2Manager.d.ts","sourceRoot":"","sources":["../../src/credential/OAuth2Manager.ts"],"names":[],"mappings":"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"}