@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,463 @@
1
+ "use strict";
2
+ /**
3
+ * OAuth2 Flow and Token Management
4
+ * Provides OAuth2 authorization flow handling and automatic token refresh
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.OAuth2AutoRefresher = exports.OAuth2Providers = exports.OAuth2Manager = exports.DefaultOAuth2HttpClient = void 0;
8
+ const error_1 = require("../types/error");
9
+ const crypto_1 = require("crypto");
10
+ /**
11
+ * Default HTTP client using fetch
12
+ */
13
+ class DefaultOAuth2HttpClient {
14
+ async post(url, data, headers) {
15
+ const body = new URLSearchParams(data).toString();
16
+ const response = await fetch(url, {
17
+ method: 'POST',
18
+ headers: {
19
+ 'Content-Type': 'application/x-www-form-urlencoded',
20
+ ...headers,
21
+ },
22
+ body,
23
+ });
24
+ if (!response.ok) {
25
+ const errorText = await response.text();
26
+ throw new error_1.SecurityError(`OAuth2 token request failed: ${response.status} ${errorText}`, error_1.ErrorCodes.OAUTH2_ERROR);
27
+ }
28
+ return response.json();
29
+ }
30
+ }
31
+ exports.DefaultOAuth2HttpClient = DefaultOAuth2HttpClient;
32
+ /**
33
+ * OAuth2 Manager
34
+ * Handles OAuth2 authorization flows and token management
35
+ */
36
+ class OAuth2Manager {
37
+ providers = new Map();
38
+ pendingStates = new Map();
39
+ logger;
40
+ httpClient;
41
+ stateExpirationMinutes;
42
+ constructor(config) {
43
+ this.logger = config.logger;
44
+ this.httpClient = config.httpClient || new DefaultOAuth2HttpClient();
45
+ this.stateExpirationMinutes = config.stateExpirationMinutes || 10;
46
+ }
47
+ /**
48
+ * Register an OAuth2 provider
49
+ */
50
+ registerProvider(config) {
51
+ this.validateProviderConfig(config);
52
+ this.providers.set(config.name, config);
53
+ this.logger.info(`OAuth2 provider registered: ${config.name}`);
54
+ }
55
+ /**
56
+ * Unregister an OAuth2 provider
57
+ */
58
+ unregisterProvider(name) {
59
+ this.providers.delete(name);
60
+ this.logger.info(`OAuth2 provider unregistered: ${name}`);
61
+ }
62
+ /**
63
+ * Get a registered provider
64
+ */
65
+ getProvider(name) {
66
+ return this.providers.get(name);
67
+ }
68
+ /**
69
+ * List all registered providers
70
+ */
71
+ listProviders() {
72
+ return Array.from(this.providers.keys());
73
+ }
74
+ /**
75
+ * Initiate OAuth2 authorization flow
76
+ * Returns the authorization URL to redirect the user to
77
+ */
78
+ initiateFlow(providerName, scopes) {
79
+ const provider = this.providers.get(providerName);
80
+ if (!provider) {
81
+ throw new error_1.ValidationError(`OAuth2 provider not found: ${providerName}`, error_1.ErrorCodes.PROVIDER_NOT_FOUND);
82
+ }
83
+ // Generate state token
84
+ const state = this.generateState();
85
+ // Generate PKCE code verifier and challenge if supported
86
+ let codeVerifier;
87
+ let codeChallenge;
88
+ if (provider.usesPKCE) {
89
+ codeVerifier = this.generateCodeVerifier();
90
+ codeChallenge = this.generateCodeChallenge(codeVerifier);
91
+ }
92
+ // Store state for verification
93
+ const flowScopes = scopes || provider.scopes || [];
94
+ const stateData = {
95
+ provider: providerName,
96
+ scopes: flowScopes,
97
+ redirectUri: provider.redirectUri,
98
+ codeVerifier,
99
+ createdAt: new Date(),
100
+ expiresAt: new Date(Date.now() + this.stateExpirationMinutes * 60 * 1000),
101
+ };
102
+ this.pendingStates.set(state, stateData);
103
+ // Build authorization URL
104
+ const params = new URLSearchParams({
105
+ client_id: provider.clientId,
106
+ redirect_uri: provider.redirectUri,
107
+ response_type: 'code',
108
+ state,
109
+ scope: flowScopes.join(' '),
110
+ ...provider.additionalParams,
111
+ });
112
+ if (codeChallenge) {
113
+ params.set('code_challenge', codeChallenge);
114
+ params.set('code_challenge_method', 'S256');
115
+ }
116
+ const authUrl = `${provider.authorizationUrl}?${params.toString()}`;
117
+ this.logger.debug(`OAuth2 flow initiated for provider: ${providerName}`, { state });
118
+ return authUrl;
119
+ }
120
+ /**
121
+ * Complete OAuth2 authorization flow
122
+ * Exchange authorization code for tokens
123
+ */
124
+ async completeFlow(code, state) {
125
+ // Validate state
126
+ const stateData = this.pendingStates.get(state);
127
+ if (!stateData) {
128
+ throw new error_1.SecurityError('Invalid or expired OAuth2 state', error_1.ErrorCodes.INVALID_STATE);
129
+ }
130
+ // Check expiration
131
+ if (new Date() > stateData.expiresAt) {
132
+ this.pendingStates.delete(state);
133
+ throw new error_1.SecurityError('OAuth2 state has expired', error_1.ErrorCodes.STATE_EXPIRED);
134
+ }
135
+ // Get provider config
136
+ const provider = this.providers.get(stateData.provider);
137
+ if (!provider) {
138
+ this.pendingStates.delete(state);
139
+ throw new error_1.ValidationError(`OAuth2 provider not found: ${stateData.provider}`, error_1.ErrorCodes.PROVIDER_NOT_FOUND);
140
+ }
141
+ // Exchange code for tokens
142
+ const tokenData = {
143
+ grant_type: 'authorization_code',
144
+ code,
145
+ redirect_uri: stateData.redirectUri,
146
+ client_id: provider.clientId,
147
+ client_secret: provider.clientSecret,
148
+ };
149
+ // Add PKCE code verifier if present
150
+ if (stateData.codeVerifier) {
151
+ tokenData.code_verifier = stateData.codeVerifier;
152
+ }
153
+ try {
154
+ const response = await this.httpClient.post(provider.tokenUrl, tokenData);
155
+ // Clean up state
156
+ this.pendingStates.delete(state);
157
+ // Build credential
158
+ const credential = this.buildCredential(response, stateData.scopes);
159
+ this.logger.info(`OAuth2 flow completed for provider: ${stateData.provider}`);
160
+ return credential;
161
+ }
162
+ catch (error) {
163
+ this.pendingStates.delete(state);
164
+ this.logger.error(`OAuth2 token exchange failed for provider: ${stateData.provider}`, error);
165
+ throw error;
166
+ }
167
+ }
168
+ /**
169
+ * Refresh an OAuth2 token
170
+ */
171
+ async refreshToken(providerName, credential) {
172
+ const provider = this.providers.get(providerName);
173
+ if (!provider) {
174
+ throw new error_1.ValidationError(`OAuth2 provider not found: ${providerName}`, error_1.ErrorCodes.PROVIDER_NOT_FOUND);
175
+ }
176
+ if (!credential.data.refreshToken) {
177
+ throw new error_1.SecurityError('No refresh token available', error_1.ErrorCodes.NO_REFRESH_TOKEN);
178
+ }
179
+ const tokenData = {
180
+ grant_type: 'refresh_token',
181
+ refresh_token: credential.data.refreshToken,
182
+ client_id: provider.clientId,
183
+ client_secret: provider.clientSecret,
184
+ };
185
+ try {
186
+ const response = await this.httpClient.post(provider.tokenUrl, tokenData);
187
+ // Build new credential, preserving refresh token if not returned
188
+ const newCredential = this.buildCredential(response, credential.scopes || [], credential.data.refreshToken);
189
+ this.logger.info(`OAuth2 token refreshed for provider: ${providerName}`);
190
+ return newCredential;
191
+ }
192
+ catch (error) {
193
+ this.logger.error(`OAuth2 token refresh failed for provider: ${providerName}`, error);
194
+ throw error;
195
+ }
196
+ }
197
+ /**
198
+ * Check if a token needs refresh
199
+ */
200
+ needsRefresh(credential, thresholdSeconds) {
201
+ if (!credential.expiresAt) {
202
+ return false;
203
+ }
204
+ const threshold = thresholdSeconds || 300; // Default 5 minutes
205
+ const expiresAt = new Date(credential.expiresAt);
206
+ const refreshTime = new Date(expiresAt.getTime() - threshold * 1000);
207
+ return new Date() >= refreshTime;
208
+ }
209
+ /**
210
+ * Check if a token is expired
211
+ */
212
+ isExpired(credential) {
213
+ if (!credential.expiresAt) {
214
+ return false;
215
+ }
216
+ return new Date() >= new Date(credential.expiresAt);
217
+ }
218
+ /**
219
+ * Get pending state data (for testing/debugging)
220
+ */
221
+ getPendingState(state) {
222
+ return this.pendingStates.get(state);
223
+ }
224
+ /**
225
+ * Clean up expired states
226
+ */
227
+ cleanupExpiredStates() {
228
+ const now = new Date();
229
+ let cleaned = 0;
230
+ for (const [state, data] of this.pendingStates.entries()) {
231
+ if (now > data.expiresAt) {
232
+ this.pendingStates.delete(state);
233
+ cleaned++;
234
+ }
235
+ }
236
+ if (cleaned > 0) {
237
+ this.logger.debug(`Cleaned up ${cleaned} expired OAuth2 states`);
238
+ }
239
+ return cleaned;
240
+ }
241
+ // Private methods
242
+ validateProviderConfig(config) {
243
+ if (!config.name) {
244
+ throw new error_1.ValidationError('Provider name is required', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
245
+ }
246
+ if (!config.authorizationUrl) {
247
+ throw new error_1.ValidationError('Authorization URL is required', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
248
+ }
249
+ if (!config.tokenUrl) {
250
+ throw new error_1.ValidationError('Token URL is required', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
251
+ }
252
+ if (!config.clientId) {
253
+ throw new error_1.ValidationError('Client ID is required', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
254
+ }
255
+ if (!config.clientSecret) {
256
+ throw new error_1.ValidationError('Client secret is required', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
257
+ }
258
+ if (!config.redirectUri) {
259
+ throw new error_1.ValidationError('Redirect URI is required', error_1.ErrorCodes.MISSING_REQUIRED_FIELD);
260
+ }
261
+ // Validate URLs
262
+ try {
263
+ new URL(config.authorizationUrl);
264
+ }
265
+ catch {
266
+ throw new error_1.ValidationError('Invalid authorization URL', error_1.ErrorCodes.INVALID_FORMAT);
267
+ }
268
+ try {
269
+ new URL(config.tokenUrl);
270
+ }
271
+ catch {
272
+ throw new error_1.ValidationError('Invalid token URL', error_1.ErrorCodes.INVALID_FORMAT);
273
+ }
274
+ try {
275
+ new URL(config.redirectUri);
276
+ }
277
+ catch {
278
+ throw new error_1.ValidationError('Invalid redirect URI', error_1.ErrorCodes.INVALID_FORMAT);
279
+ }
280
+ }
281
+ generateState() {
282
+ return (0, crypto_1.randomBytes)(32).toString('base64url');
283
+ }
284
+ generateCodeVerifier() {
285
+ return (0, crypto_1.randomBytes)(32).toString('base64url');
286
+ }
287
+ generateCodeChallenge(verifier) {
288
+ return (0, crypto_1.createHash)('sha256')
289
+ .update(verifier)
290
+ .digest('base64url');
291
+ }
292
+ buildCredential(response, scopes, fallbackRefreshToken) {
293
+ const expiresAt = response.expires_in
294
+ ? new Date(Date.now() + response.expires_in * 1000)
295
+ : undefined;
296
+ return {
297
+ type: 'oauth2',
298
+ data: {
299
+ accessToken: response.access_token,
300
+ refreshToken: response.refresh_token || fallbackRefreshToken,
301
+ tokenType: response.token_type || 'Bearer',
302
+ expiresIn: response.expires_in,
303
+ },
304
+ expiresAt,
305
+ scopes: response.scope ? response.scope.split(' ') : scopes,
306
+ };
307
+ }
308
+ }
309
+ exports.OAuth2Manager = OAuth2Manager;
310
+ /**
311
+ * Common OAuth2 Provider Presets
312
+ * Pre-configured settings for popular OAuth2 providers
313
+ */
314
+ exports.OAuth2Providers = {
315
+ /**
316
+ * Google OAuth2 configuration
317
+ */
318
+ google: (config) => ({
319
+ name: 'google',
320
+ authorizationUrl: 'https://accounts.google.com/o/oauth2/v2/auth',
321
+ tokenUrl: 'https://oauth2.googleapis.com/token',
322
+ clientId: config.clientId,
323
+ clientSecret: config.clientSecret,
324
+ redirectUri: config.redirectUri,
325
+ scopes: config.scopes || ['openid', 'email', 'profile'],
326
+ additionalParams: {
327
+ access_type: 'offline',
328
+ prompt: 'consent',
329
+ },
330
+ }),
331
+ /**
332
+ * GitHub OAuth2 configuration
333
+ */
334
+ github: (config) => ({
335
+ name: 'github',
336
+ authorizationUrl: 'https://github.com/login/oauth/authorize',
337
+ tokenUrl: 'https://github.com/login/oauth/access_token',
338
+ clientId: config.clientId,
339
+ clientSecret: config.clientSecret,
340
+ redirectUri: config.redirectUri,
341
+ scopes: config.scopes || ['read:user', 'user:email'],
342
+ }),
343
+ /**
344
+ * Microsoft/Azure AD OAuth2 configuration
345
+ */
346
+ microsoft: (config) => {
347
+ const tenant = config.tenantId || 'common';
348
+ return {
349
+ name: 'microsoft',
350
+ authorizationUrl: `https://login.microsoftonline.com/${tenant}/oauth2/v2.0/authorize`,
351
+ tokenUrl: `https://login.microsoftonline.com/${tenant}/oauth2/v2.0/token`,
352
+ clientId: config.clientId,
353
+ clientSecret: config.clientSecret,
354
+ redirectUri: config.redirectUri,
355
+ scopes: config.scopes || ['openid', 'email', 'profile', 'offline_access'],
356
+ };
357
+ },
358
+ /**
359
+ * Slack OAuth2 configuration
360
+ */
361
+ slack: (config) => ({
362
+ name: 'slack',
363
+ authorizationUrl: 'https://slack.com/oauth/v2/authorize',
364
+ tokenUrl: 'https://slack.com/api/oauth.v2.access',
365
+ clientId: config.clientId,
366
+ clientSecret: config.clientSecret,
367
+ redirectUri: config.redirectUri,
368
+ scopes: config.scopes || ['channels:read', 'chat:write'],
369
+ }),
370
+ /**
371
+ * Salesforce OAuth2 configuration
372
+ */
373
+ salesforce: (config) => {
374
+ const baseUrl = config.instanceUrl || 'https://login.salesforce.com';
375
+ return {
376
+ name: 'salesforce',
377
+ authorizationUrl: `${baseUrl}/services/oauth2/authorize`,
378
+ tokenUrl: `${baseUrl}/services/oauth2/token`,
379
+ clientId: config.clientId,
380
+ clientSecret: config.clientSecret,
381
+ redirectUri: config.redirectUri,
382
+ scopes: config.scopes || ['api', 'refresh_token'],
383
+ };
384
+ },
385
+ /**
386
+ * Custom OAuth2 provider configuration
387
+ */
388
+ custom: (config) => config,
389
+ };
390
+ /**
391
+ * Auto-refresh wrapper for OAuth2 credentials
392
+ * Automatically refreshes tokens before they expire
393
+ */
394
+ class OAuth2AutoRefresher {
395
+ oauth2Manager;
396
+ refreshCallbacks = new Map();
397
+ refreshTimers = new Map();
398
+ logger;
399
+ constructor(oauth2Manager, logger) {
400
+ this.oauth2Manager = oauth2Manager;
401
+ this.logger = logger;
402
+ }
403
+ /**
404
+ * Start auto-refresh for a credential
405
+ */
406
+ startAutoRefresh(key, providerName, credential, onRefresh, thresholdSeconds = 300) {
407
+ // Clear any existing timer
408
+ this.stopAutoRefresh(key);
409
+ if (!credential.data.refreshToken) {
410
+ this.logger.warn(`Cannot auto-refresh credential ${key}: no refresh token`);
411
+ return;
412
+ }
413
+ if (!credential.expiresAt) {
414
+ this.logger.warn(`Cannot auto-refresh credential ${key}: no expiration time`);
415
+ return;
416
+ }
417
+ this.refreshCallbacks.set(key, onRefresh);
418
+ // Calculate when to refresh
419
+ const expiresAt = new Date(credential.expiresAt);
420
+ const refreshAt = new Date(expiresAt.getTime() - thresholdSeconds * 1000);
421
+ const delay = Math.max(0, refreshAt.getTime() - Date.now());
422
+ this.logger.debug(`Scheduling auto-refresh for ${key} in ${Math.round(delay / 1000)}s`);
423
+ const timer = setTimeout(async () => {
424
+ try {
425
+ const newCredential = await this.oauth2Manager.refreshToken(providerName, credential);
426
+ const callback = this.refreshCallbacks.get(key);
427
+ if (callback) {
428
+ await callback(newCredential);
429
+ }
430
+ // Schedule next refresh
431
+ this.startAutoRefresh(key, providerName, newCredential, onRefresh, thresholdSeconds);
432
+ }
433
+ catch (error) {
434
+ this.logger.error(`Auto-refresh failed for ${key}`, error);
435
+ this.stopAutoRefresh(key);
436
+ }
437
+ }, delay);
438
+ this.refreshTimers.set(key, timer);
439
+ }
440
+ /**
441
+ * Stop auto-refresh for a credential
442
+ */
443
+ stopAutoRefresh(key) {
444
+ const timer = this.refreshTimers.get(key);
445
+ if (timer) {
446
+ clearTimeout(timer);
447
+ this.refreshTimers.delete(key);
448
+ }
449
+ this.refreshCallbacks.delete(key);
450
+ }
451
+ /**
452
+ * Stop all auto-refresh timers
453
+ */
454
+ stopAll() {
455
+ for (const timer of this.refreshTimers.values()) {
456
+ clearTimeout(timer);
457
+ }
458
+ this.refreshTimers.clear();
459
+ this.refreshCallbacks.clear();
460
+ }
461
+ }
462
+ exports.OAuth2AutoRefresher = OAuth2AutoRefresher;
463
+ //# sourceMappingURL=OAuth2Manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OAuth2Manager.js","sourceRoot":"","sources":["../../src/credential/OAuth2Manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Credential Module Exports
3
+ */
4
+ export { CredentialManager, CredentialStore, InMemoryCredentialStore, CredentialManagerConfig, CredentialScopeResolver } from './CredentialManager';
5
+ export { OAuth2Manager, OAuth2ManagerConfig, OAuth2ProviderConfig, OAuth2TokenResponse, OAuth2State, OAuth2HttpClient, DefaultOAuth2HttpClient, OAuth2Providers, OAuth2AutoRefresher, } from './OAuth2Manager';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/credential/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,GACpB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ /**
3
+ * Credential Module Exports
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.OAuth2AutoRefresher = exports.OAuth2Providers = exports.DefaultOAuth2HttpClient = exports.OAuth2Manager = exports.CredentialScopeResolver = exports.InMemoryCredentialStore = exports.CredentialManager = void 0;
7
+ var CredentialManager_1 = require("./CredentialManager");
8
+ Object.defineProperty(exports, "CredentialManager", { enumerable: true, get: function () { return CredentialManager_1.CredentialManager; } });
9
+ Object.defineProperty(exports, "InMemoryCredentialStore", { enumerable: true, get: function () { return CredentialManager_1.InMemoryCredentialStore; } });
10
+ Object.defineProperty(exports, "CredentialScopeResolver", { enumerable: true, get: function () { return CredentialManager_1.CredentialScopeResolver; } });
11
+ var OAuth2Manager_1 = require("./OAuth2Manager");
12
+ Object.defineProperty(exports, "OAuth2Manager", { enumerable: true, get: function () { return OAuth2Manager_1.OAuth2Manager; } });
13
+ Object.defineProperty(exports, "DefaultOAuth2HttpClient", { enumerable: true, get: function () { return OAuth2Manager_1.DefaultOAuth2HttpClient; } });
14
+ Object.defineProperty(exports, "OAuth2Providers", { enumerable: true, get: function () { return OAuth2Manager_1.OAuth2Providers; } });
15
+ Object.defineProperty(exports, "OAuth2AutoRefresher", { enumerable: true, get: function () { return OAuth2Manager_1.OAuth2AutoRefresher; } });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/credential/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,yDAM6B;AAL3B,sHAAA,iBAAiB,OAAA;AAEjB,4HAAA,uBAAuB,OAAA;AAEvB,4HAAA,uBAAuB,OAAA;AAGzB,iDAUyB;AATvB,8GAAA,aAAa,OAAA;AAMb,wHAAA,uBAAuB,OAAA;AACvB,gHAAA,eAAe,OAAA;AACf,oHAAA,mBAAmB,OAAA"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Error Handling and Recovery System
3
+ */
4
+ import { AgentXError, ErrorContext } from '../types/error';
5
+ import { Logger, MetricsCollector } from '../types/tool';
6
+ import { RetryPolicy } from '../types/config';
7
+ /**
8
+ * Central error handler for the AgentX framework
9
+ */
10
+ export declare class ErrorHandler {
11
+ private readonly logger;
12
+ private readonly metrics;
13
+ private readonly retryPolicy;
14
+ constructor(logger: Logger, metrics: MetricsCollector, retryPolicy: RetryPolicy);
15
+ /**
16
+ * Handle an error with appropriate recovery strategy
17
+ */
18
+ handleError(error: Error | AgentXError, context: ErrorContext, operation?: () => Promise<any>): Promise<{
19
+ success: boolean;
20
+ result?: any;
21
+ error?: Error;
22
+ }>;
23
+ /**
24
+ * Normalize any error to AgentXError
25
+ */
26
+ private normalizeError;
27
+ /**
28
+ * Determine the appropriate recovery strategy for an error
29
+ */
30
+ private getRecoveryStrategy;
31
+ /**
32
+ * Retry an operation with exponential backoff
33
+ */
34
+ private retryOperation;
35
+ /**
36
+ * Handle graceful degradation
37
+ */
38
+ private handleGracefulDegradation;
39
+ /**
40
+ * Calculate retry delay with exponential backoff
41
+ */
42
+ private calculateDelay;
43
+ /**
44
+ * Log error with appropriate level and context
45
+ */
46
+ private logError;
47
+ /**
48
+ * Update error metrics
49
+ */
50
+ private updateErrorMetrics;
51
+ /**
52
+ * Sleep for specified milliseconds
53
+ */
54
+ private sleep;
55
+ }
56
+ /**
57
+ * Circuit breaker for preventing cascading failures
58
+ */
59
+ export declare class CircuitBreaker {
60
+ private readonly threshold;
61
+ private readonly timeout;
62
+ private readonly logger;
63
+ private readonly metrics;
64
+ private failures;
65
+ private lastFailureTime;
66
+ private state;
67
+ constructor(threshold: number | undefined, timeout: number | undefined, // 1 minute
68
+ logger: Logger, metrics: MetricsCollector);
69
+ execute<T>(operation: () => Promise<T>, operationName: string): Promise<T>;
70
+ private recordFailure;
71
+ private reset;
72
+ getState(): 'closed' | 'open' | 'half-open';
73
+ }
74
+ //# sourceMappingURL=ErrorHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorHandler.d.ts","sourceRoot":"","sources":["../../src/error/ErrorHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,WAAW,EAEX,YAAY,EAMb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;gBAE9B,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW;IAM/E;;OAEG;IACG,WAAW,CACf,KAAK,EAAE,KAAK,GAAG,WAAW,EAC1B,OAAO,EAAE,YAAY,EACrB,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAC7B,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,GAAG,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,CAAC;IA8B7D;;OAEG;IACH,OAAO,CAAC,cAAc;IA0BtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAwB3B;;OAEG;YACW,cAAc;IA2D5B;;OAEG;YACW,yBAAyB;IAqBvC;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,QAAQ;IA6BhB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd;AAED;;GAEG;AACH,qBAAa,cAAc;IAMvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAR1B,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,KAAK,CAA6C;gBAGvC,SAAS,EAAE,MAAM,YAAI,EACrB,OAAO,EAAE,MAAM,YAAQ,EAAE,WAAW;IACpC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,gBAAgB;IAGtC,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IA2BhF,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,KAAK;IAKb,QAAQ,IAAI,QAAQ,GAAG,MAAM,GAAG,WAAW;CAG5C"}