@inkeep/agents-core 0.0.0-dev-20250910233133

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 (263) hide show
  1. package/LICENSE.md +56 -0
  2. package/README.md +464 -0
  3. package/dist/__tests__/integration/helpers.d.ts +5 -0
  4. package/dist/__tests__/integration/helpers.d.ts.map +1 -0
  5. package/dist/__tests__/integration/helpers.js +37 -0
  6. package/dist/__tests__/integration/helpers.js.map +1 -0
  7. package/dist/__tests__/setup.d.ts +3 -0
  8. package/dist/__tests__/setup.d.ts.map +1 -0
  9. package/dist/__tests__/setup.js +29 -0
  10. package/dist/__tests__/setup.js.map +1 -0
  11. package/dist/client-exports.d.ts +299 -0
  12. package/dist/client-exports.d.ts.map +1 -0
  13. package/dist/client-exports.js +252 -0
  14. package/dist/client-exports.js.map +1 -0
  15. package/dist/context/ContextConfig.d.ts +54 -0
  16. package/dist/context/ContextConfig.d.ts.map +1 -0
  17. package/dist/context/ContextConfig.js +302 -0
  18. package/dist/context/ContextConfig.js.map +1 -0
  19. package/dist/context/ContextFetcher.d.ts +64 -0
  20. package/dist/context/ContextFetcher.d.ts.map +1 -0
  21. package/dist/context/ContextFetcher.js +325 -0
  22. package/dist/context/ContextFetcher.js.map +1 -0
  23. package/dist/context/ContextResolver.d.ts +52 -0
  24. package/dist/context/ContextResolver.d.ts.map +1 -0
  25. package/dist/context/ContextResolver.js +298 -0
  26. package/dist/context/ContextResolver.js.map +1 -0
  27. package/dist/context/TemplateEngine.d.ts +46 -0
  28. package/dist/context/TemplateEngine.d.ts.map +1 -0
  29. package/dist/context/TemplateEngine.js +175 -0
  30. package/dist/context/TemplateEngine.js.map +1 -0
  31. package/dist/context/context.d.ts +8 -0
  32. package/dist/context/context.d.ts.map +1 -0
  33. package/dist/context/context.js +157 -0
  34. package/dist/context/context.js.map +1 -0
  35. package/dist/context/contextCache.d.ts +50 -0
  36. package/dist/context/contextCache.d.ts.map +1 -0
  37. package/dist/context/contextCache.js +175 -0
  38. package/dist/context/contextCache.js.map +1 -0
  39. package/dist/context/index.d.ts +11 -0
  40. package/dist/context/index.d.ts.map +1 -0
  41. package/dist/context/index.js +8 -0
  42. package/dist/context/index.js.map +1 -0
  43. package/dist/credential-stores/CredentialStoreRegistry.d.ts +39 -0
  44. package/dist/credential-stores/CredentialStoreRegistry.d.ts.map +1 -0
  45. package/dist/credential-stores/CredentialStoreRegistry.js +65 -0
  46. package/dist/credential-stores/CredentialStoreRegistry.js.map +1 -0
  47. package/dist/credential-stores/defaults.d.ts +6 -0
  48. package/dist/credential-stores/defaults.d.ts.map +1 -0
  49. package/dist/credential-stores/defaults.js +22 -0
  50. package/dist/credential-stores/defaults.js.map +1 -0
  51. package/dist/credential-stores/index.d.ts +6 -0
  52. package/dist/credential-stores/index.d.ts.map +1 -0
  53. package/dist/credential-stores/index.js +6 -0
  54. package/dist/credential-stores/index.js.map +1 -0
  55. package/dist/credential-stores/keychain-store.d.ts +100 -0
  56. package/dist/credential-stores/keychain-store.d.ts.map +1 -0
  57. package/dist/credential-stores/keychain-store.js +225 -0
  58. package/dist/credential-stores/keychain-store.js.map +1 -0
  59. package/dist/credential-stores/memory-store.d.ts +39 -0
  60. package/dist/credential-stores/memory-store.d.ts.map +1 -0
  61. package/dist/credential-stores/memory-store.js +58 -0
  62. package/dist/credential-stores/memory-store.js.map +1 -0
  63. package/dist/credential-stores/nango-store.d.ts +59 -0
  64. package/dist/credential-stores/nango-store.d.ts.map +1 -0
  65. package/dist/credential-stores/nango-store.js +264 -0
  66. package/dist/credential-stores/nango-store.js.map +1 -0
  67. package/dist/credential-stuffer/CredentialStuffer.d.ts +80 -0
  68. package/dist/credential-stuffer/CredentialStuffer.d.ts.map +1 -0
  69. package/dist/credential-stuffer/CredentialStuffer.js +186 -0
  70. package/dist/credential-stuffer/CredentialStuffer.js.map +1 -0
  71. package/dist/credential-stuffer/index.d.ts +2 -0
  72. package/dist/credential-stuffer/index.d.ts.map +1 -0
  73. package/dist/credential-stuffer/index.js +2 -0
  74. package/dist/credential-stuffer/index.js.map +1 -0
  75. package/dist/data-access/agentDataComponents.d.ts +1 -0
  76. package/dist/data-access/agentDataComponents.d.ts.map +1 -0
  77. package/dist/data-access/agentDataComponents.js +2 -0
  78. package/dist/data-access/agentDataComponents.js.map +1 -0
  79. package/dist/data-access/agentGraphs.d.ts +399 -0
  80. package/dist/data-access/agentGraphs.d.ts.map +1 -0
  81. package/dist/data-access/agentGraphs.js +551 -0
  82. package/dist/data-access/agentGraphs.js.map +1 -0
  83. package/dist/data-access/agentRelations.d.ts +456 -0
  84. package/dist/data-access/agentRelations.d.ts.map +1 -0
  85. package/dist/data-access/agentRelations.js +471 -0
  86. package/dist/data-access/agentRelations.js.map +1 -0
  87. package/dist/data-access/agents.d.ts +218 -0
  88. package/dist/data-access/agents.d.ts.map +1 -0
  89. package/dist/data-access/agents.js +130 -0
  90. package/dist/data-access/agents.js.map +1 -0
  91. package/dist/data-access/apiKeys.d.ts +114 -0
  92. package/dist/data-access/apiKeys.d.ts.map +1 -0
  93. package/dist/data-access/apiKeys.js +185 -0
  94. package/dist/data-access/apiKeys.js.map +1 -0
  95. package/dist/data-access/artifactComponents.d.ts +152 -0
  96. package/dist/data-access/artifactComponents.d.ts.map +1 -0
  97. package/dist/data-access/artifactComponents.js +214 -0
  98. package/dist/data-access/artifactComponents.js.map +1 -0
  99. package/dist/data-access/contextCache.d.ts +68 -0
  100. package/dist/data-access/contextCache.d.ts.map +1 -0
  101. package/dist/data-access/contextCache.js +135 -0
  102. package/dist/data-access/contextCache.js.map +1 -0
  103. package/dist/data-access/contextConfigs.d.ts +110 -0
  104. package/dist/data-access/contextConfigs.d.ts.map +1 -0
  105. package/dist/data-access/contextConfigs.js +156 -0
  106. package/dist/data-access/contextConfigs.js.map +1 -0
  107. package/dist/data-access/conversations.d.ts +125 -0
  108. package/dist/data-access/conversations.d.ts.map +1 -0
  109. package/dist/data-access/conversations.js +244 -0
  110. package/dist/data-access/conversations.js.map +1 -0
  111. package/dist/data-access/credentialReferences.d.ts +86 -0
  112. package/dist/data-access/credentialReferences.d.ts.map +1 -0
  113. package/dist/data-access/credentialReferences.js +175 -0
  114. package/dist/data-access/credentialReferences.js.map +1 -0
  115. package/dist/data-access/dataComponents.d.ts +129 -0
  116. package/dist/data-access/dataComponents.d.ts.map +1 -0
  117. package/dist/data-access/dataComponents.js +213 -0
  118. package/dist/data-access/dataComponents.js.map +1 -0
  119. package/dist/data-access/externalAgents.d.ts +83 -0
  120. package/dist/data-access/externalAgents.d.ts.map +1 -0
  121. package/dist/data-access/externalAgents.js +163 -0
  122. package/dist/data-access/externalAgents.js.map +1 -0
  123. package/dist/data-access/graphFull.d.ts +32 -0
  124. package/dist/data-access/graphFull.d.ts.map +1 -0
  125. package/dist/data-access/graphFull.js +996 -0
  126. package/dist/data-access/graphFull.js.map +1 -0
  127. package/dist/data-access/index.d.ts +21 -0
  128. package/dist/data-access/index.d.ts.map +1 -0
  129. package/dist/data-access/index.js +22 -0
  130. package/dist/data-access/index.js.map +1 -0
  131. package/dist/data-access/ledgerArtifacts.d.ts +49 -0
  132. package/dist/data-access/ledgerArtifacts.d.ts.map +1 -0
  133. package/dist/data-access/ledgerArtifacts.js +112 -0
  134. package/dist/data-access/ledgerArtifacts.js.map +1 -0
  135. package/dist/data-access/messages.d.ts +209 -0
  136. package/dist/data-access/messages.d.ts.map +1 -0
  137. package/dist/data-access/messages.js +100 -0
  138. package/dist/data-access/messages.js.map +1 -0
  139. package/dist/data-access/projects.d.ts +67 -0
  140. package/dist/data-access/projects.d.ts.map +1 -0
  141. package/dist/data-access/projects.js +337 -0
  142. package/dist/data-access/projects.js.map +1 -0
  143. package/dist/data-access/tasks.d.ts +37 -0
  144. package/dist/data-access/tasks.d.ts.map +1 -0
  145. package/dist/data-access/tasks.js +40 -0
  146. package/dist/data-access/tasks.js.map +1 -0
  147. package/dist/data-access/tools.d.ts +277 -0
  148. package/dist/data-access/tools.d.ts.map +1 -0
  149. package/dist/data-access/tools.js +183 -0
  150. package/dist/data-access/tools.js.map +1 -0
  151. package/dist/data-access/validation.d.ts +17 -0
  152. package/dist/data-access/validation.d.ts.map +1 -0
  153. package/dist/data-access/validation.js +52 -0
  154. package/dist/data-access/validation.js.map +1 -0
  155. package/dist/db/clean.d.ts +6 -0
  156. package/dist/db/clean.d.ts.map +1 -0
  157. package/dist/db/clean.js +81 -0
  158. package/dist/db/clean.js.map +1 -0
  159. package/dist/db/client.d.ts +19 -0
  160. package/dist/db/client.d.ts.map +1 -0
  161. package/dist/db/client.js +24 -0
  162. package/dist/db/client.js.map +1 -0
  163. package/dist/db/schema.d.ts +4335 -0
  164. package/dist/db/schema.d.ts.map +1 -0
  165. package/dist/db/schema.js +696 -0
  166. package/dist/db/schema.js.map +1 -0
  167. package/dist/db/test-client.d.ts +25 -0
  168. package/dist/db/test-client.d.ts.map +1 -0
  169. package/dist/db/test-client.js +136 -0
  170. package/dist/db/test-client.js.map +1 -0
  171. package/dist/env.d.ts +19 -0
  172. package/dist/env.d.ts.map +1 -0
  173. package/dist/env.js +49 -0
  174. package/dist/env.js.map +1 -0
  175. package/dist/index.d.ts +12 -0
  176. package/dist/index.d.ts.map +1 -0
  177. package/dist/index.js +13 -0
  178. package/dist/index.js.map +1 -0
  179. package/dist/middleware/contextValidation.d.ts +49 -0
  180. package/dist/middleware/contextValidation.d.ts.map +1 -0
  181. package/dist/middleware/contextValidation.js +473 -0
  182. package/dist/middleware/contextValidation.js.map +1 -0
  183. package/dist/middleware/index.d.ts +2 -0
  184. package/dist/middleware/index.d.ts.map +1 -0
  185. package/dist/middleware/index.js +2 -0
  186. package/dist/middleware/index.js.map +1 -0
  187. package/dist/types/a2a.d.ts +373 -0
  188. package/dist/types/a2a.d.ts.map +1 -0
  189. package/dist/types/a2a.js +14 -0
  190. package/dist/types/a2a.js.map +1 -0
  191. package/dist/types/entities.d.ts +147 -0
  192. package/dist/types/entities.d.ts.map +1 -0
  193. package/dist/types/entities.js +2 -0
  194. package/dist/types/entities.js.map +1 -0
  195. package/dist/types/index.d.ts +5 -0
  196. package/dist/types/index.d.ts.map +1 -0
  197. package/dist/types/index.js +6 -0
  198. package/dist/types/index.js.map +1 -0
  199. package/dist/types/server.d.ts +116 -0
  200. package/dist/types/server.d.ts.map +1 -0
  201. package/dist/types/server.js +2 -0
  202. package/dist/types/server.js.map +1 -0
  203. package/dist/types/utility.d.ts +213 -0
  204. package/dist/types/utility.d.ts.map +1 -0
  205. package/dist/types/utility.js +9 -0
  206. package/dist/types/utility.js.map +1 -0
  207. package/dist/utils/apiKeys.d.ts +32 -0
  208. package/dist/utils/apiKeys.d.ts.map +1 -0
  209. package/dist/utils/apiKeys.js +117 -0
  210. package/dist/utils/apiKeys.js.map +1 -0
  211. package/dist/utils/auth-detection.d.ts +23 -0
  212. package/dist/utils/auth-detection.d.ts.map +1 -0
  213. package/dist/utils/auth-detection.js +148 -0
  214. package/dist/utils/auth-detection.js.map +1 -0
  215. package/dist/utils/credential-store-utils.d.ts +11 -0
  216. package/dist/utils/credential-store-utils.d.ts.map +1 -0
  217. package/dist/utils/credential-store-utils.js +19 -0
  218. package/dist/utils/credential-store-utils.js.map +1 -0
  219. package/dist/utils/error.d.ts +526 -0
  220. package/dist/utils/error.d.ts.map +1 -0
  221. package/dist/utils/error.js +282 -0
  222. package/dist/utils/error.js.map +1 -0
  223. package/dist/utils/execution.d.ts +18 -0
  224. package/dist/utils/execution.d.ts.map +1 -0
  225. package/dist/utils/execution.js +25 -0
  226. package/dist/utils/execution.js.map +1 -0
  227. package/dist/utils/index.d.ts +9 -0
  228. package/dist/utils/index.d.ts.map +1 -0
  229. package/dist/utils/index.js +9 -0
  230. package/dist/utils/index.js.map +1 -0
  231. package/dist/utils/logger.d.ts +79 -0
  232. package/dist/utils/logger.d.ts.map +1 -0
  233. package/dist/utils/logger.js +102 -0
  234. package/dist/utils/logger.js.map +1 -0
  235. package/dist/utils/logging.d.ts +11 -0
  236. package/dist/utils/logging.d.ts.map +1 -0
  237. package/dist/utils/logging.js +6 -0
  238. package/dist/utils/logging.js.map +1 -0
  239. package/dist/utils/mcp-client.d.ts +48 -0
  240. package/dist/utils/mcp-client.d.ts.map +1 -0
  241. package/dist/utils/mcp-client.js +174 -0
  242. package/dist/utils/mcp-client.js.map +1 -0
  243. package/dist/utils/tracer.d.ts +24 -0
  244. package/dist/utils/tracer.d.ts.map +1 -0
  245. package/dist/utils/tracer.js +110 -0
  246. package/dist/utils/tracer.js.map +1 -0
  247. package/dist/validation/graphFull.d.ts +36 -0
  248. package/dist/validation/graphFull.d.ts.map +1 -0
  249. package/dist/validation/graphFull.js +128 -0
  250. package/dist/validation/graphFull.js.map +1 -0
  251. package/dist/validation/id-validation.d.ts +38 -0
  252. package/dist/validation/id-validation.d.ts.map +1 -0
  253. package/dist/validation/id-validation.js +60 -0
  254. package/dist/validation/id-validation.js.map +1 -0
  255. package/dist/validation/index.d.ts +4 -0
  256. package/dist/validation/index.d.ts.map +1 -0
  257. package/dist/validation/index.js +5 -0
  258. package/dist/validation/index.js.map +1 -0
  259. package/dist/validation/schemas.d.ts +7213 -0
  260. package/dist/validation/schemas.d.ts.map +1 -0
  261. package/dist/validation/schemas.js +576 -0
  262. package/dist/validation/schemas.js.map +1 -0
  263. package/package.json +95 -0
@@ -0,0 +1,264 @@
1
+ import { Nango } from '@nangohq/node';
2
+ import { z } from 'zod';
3
+ import { getLogger } from '../utils/logger';
4
+ const logger = getLogger('nango-credential-store');
5
+ // Schema for validating credential key structure
6
+ const CredentialKeySchema = z.object({
7
+ connectionId: z.string().min(1, 'connectionId must be a non-empty string'),
8
+ providerConfigKey: z.string().min(1, 'providerConfigKey must be a non-empty string'),
9
+ });
10
+ const SUPPORTED_AUTH_MODES = [
11
+ 'APP',
12
+ 'API_KEY',
13
+ 'BASIC',
14
+ 'CUSTOM',
15
+ 'JWT',
16
+ 'NONE',
17
+ 'OAUTH1',
18
+ 'OAUTH2',
19
+ 'OAUTH2_CC',
20
+ 'TBA',
21
+ ];
22
+ function isSupportedAuthMode(mode) {
23
+ return SUPPORTED_AUTH_MODES.includes(mode);
24
+ }
25
+ /**
26
+ * Nango-based CredentialStore that fetches OAuth credentials from Nango API
27
+ * Uses connectionId and providerConfigKey from metadata to fetch live credentials
28
+ */
29
+ export class NangoCredentialStore {
30
+ id;
31
+ type = 'nango';
32
+ nangoConfig;
33
+ nangoClient;
34
+ constructor(id, config) {
35
+ this.id = id;
36
+ this.nangoConfig = config;
37
+ this.nangoClient = new Nango({
38
+ secretKey: this.nangoConfig.secretKey,
39
+ host: this.nangoConfig.apiUrl,
40
+ });
41
+ }
42
+ getAccessToken(credentials) {
43
+ const { type } = credentials;
44
+ if (!isSupportedAuthMode(type)) {
45
+ return null;
46
+ }
47
+ switch (type) {
48
+ case 'API_KEY':
49
+ return {
50
+ token: credentials.apiKey,
51
+ };
52
+ case 'APP':
53
+ return {
54
+ token: credentials.access_token,
55
+ };
56
+ case 'BASIC':
57
+ return {
58
+ username: credentials.username,
59
+ token: credentials.password,
60
+ };
61
+ case 'CUSTOM':
62
+ return credentials.raw;
63
+ case 'JWT':
64
+ return {
65
+ token: credentials.token,
66
+ };
67
+ case 'OAUTH1':
68
+ return {
69
+ token: credentials.oauth_token,
70
+ token_secret: credentials.oauth_token_secret,
71
+ };
72
+ case 'OAUTH2':
73
+ return {
74
+ token: credentials.access_token,
75
+ refresh_token: credentials.refresh_token,
76
+ };
77
+ case 'OAUTH2_CC':
78
+ return {
79
+ token: credentials.token,
80
+ client_certificate: credentials.client_certificate,
81
+ client_id: credentials.client_id,
82
+ client_private_key: credentials.client_private_key,
83
+ client_secret: credentials.client_secret,
84
+ };
85
+ case 'TBA':
86
+ return {
87
+ token: credentials.token_id,
88
+ token_secret: credentials.token_secret,
89
+ };
90
+ default:
91
+ return null;
92
+ }
93
+ }
94
+ sanitizeMetadata(metadata) {
95
+ if (!metadata || typeof metadata !== 'object')
96
+ return {};
97
+ const result = {};
98
+ for (const [key, value] of Object.entries(metadata)) {
99
+ if (typeof key !== 'string')
100
+ continue;
101
+ if (typeof value === 'string') {
102
+ result[key] = value;
103
+ }
104
+ }
105
+ return result;
106
+ }
107
+ /**
108
+ * Fetch credentials from Nango API using connection information
109
+ * @param connectionId - The connection ID for the Nango connection
110
+ * @param providerConfigKey - The provider config key for the Nango connection
111
+ * @returns The credential data or null if the credentials are not found
112
+ */
113
+ async fetchCredentialsFromNango({ connectionId, providerConfigKey, }) {
114
+ try {
115
+ const nangoConnection = await this.nangoClient.getConnection(providerConfigKey, connectionId);
116
+ const tokenAndCredentials = this.getAccessToken(nangoConnection.credentials) ?? {};
117
+ // Return credential data with Nango MCP server headers
118
+ const credentialData = {
119
+ ...tokenAndCredentials,
120
+ connectionId,
121
+ providerConfigKey,
122
+ provider: nangoConnection.provider || 'unknown',
123
+ secretKey: this.nangoConfig.secretKey,
124
+ metadata: this.sanitizeMetadata(nangoConnection.metadata ?? {}),
125
+ };
126
+ return credentialData;
127
+ }
128
+ catch (error) {
129
+ logger.error({
130
+ error: error instanceof Error ? error.message : 'Unknown error',
131
+ connectionId,
132
+ providerConfigKey,
133
+ }, 'Error fetching credentials from Nango');
134
+ return null;
135
+ }
136
+ }
137
+ /**
138
+ * Get credentials by key - implements CredentialStore interface
139
+ * Key format: JSON string with connectionId and providerConfigKey
140
+ */
141
+ async get(key) {
142
+ try {
143
+ // Parse and validate the JSON key structure
144
+ let parsedKey;
145
+ try {
146
+ parsedKey = JSON.parse(key);
147
+ }
148
+ catch (parseError) {
149
+ logger.warn({
150
+ storeId: this.id,
151
+ key: key.substring(0, 50), // Log only first 100 chars to avoid log pollution
152
+ error: parseError instanceof Error ? parseError.message : 'Unknown parsing error',
153
+ }, 'Invalid JSON format in credential key');
154
+ return null;
155
+ }
156
+ // Validate the parsed key structure using Zod
157
+ const validationResult = CredentialKeySchema.safeParse(parsedKey);
158
+ if (!validationResult.success) {
159
+ logger.warn({
160
+ storeId: this.id,
161
+ key: key.substring(0, 100),
162
+ validationErrors: validationResult.error.issues,
163
+ }, 'Invalid credential key structure');
164
+ return null;
165
+ }
166
+ const { connectionId, providerConfigKey } = validationResult.data;
167
+ const credentials = await this.fetchCredentialsFromNango({ connectionId, providerConfigKey });
168
+ if (!credentials) {
169
+ return null;
170
+ }
171
+ const credentialString = JSON.stringify(credentials);
172
+ return credentialString;
173
+ }
174
+ catch (error) {
175
+ logger.error({
176
+ storeId: this.id,
177
+ key: key.substring(0, 100),
178
+ error: error instanceof Error ? error.message : 'Unknown error',
179
+ }, 'Error getting credentials from Nango');
180
+ return null;
181
+ }
182
+ }
183
+ /**
184
+ * Set credentials - not supported for Nango (OAuth flow handles this)
185
+ */
186
+ async set(_key, _value) {
187
+ throw new Error('Setting credentials not supported for Nango store - use OAuth flow instead');
188
+ }
189
+ /**
190
+ * Check if credentials exist by attempting to fetch them
191
+ */
192
+ async has(key) {
193
+ try {
194
+ const credentials = await this.get(key);
195
+ return credentials !== null;
196
+ }
197
+ catch (error) {
198
+ logger.error({
199
+ error: error instanceof Error ? error.message : 'Unknown error',
200
+ key,
201
+ }, 'Error checking credentials existence');
202
+ return false;
203
+ }
204
+ }
205
+ /**
206
+ * Delete credentials - not supported for Nango (revoke through Nango dashboard)
207
+ */
208
+ async delete(key) {
209
+ try {
210
+ // Parse and validate the JSON key structure
211
+ let parsedKey;
212
+ try {
213
+ parsedKey = JSON.parse(key);
214
+ }
215
+ catch (parseError) {
216
+ logger.warn({
217
+ storeId: this.id,
218
+ key: key.substring(0, 50), // Log only first 100 chars to avoid log pollution
219
+ error: parseError instanceof Error ? parseError.message : 'Unknown parsing error',
220
+ }, 'Invalid JSON format in credential key');
221
+ return false;
222
+ }
223
+ // Validate the parsed key structure using Zod
224
+ const validationResult = CredentialKeySchema.safeParse(parsedKey);
225
+ if (!validationResult.success) {
226
+ logger.warn({
227
+ storeId: this.id,
228
+ key: key.substring(0, 100),
229
+ validationErrors: validationResult.error.issues,
230
+ }, 'Invalid credential key structure');
231
+ return false;
232
+ }
233
+ const { connectionId, providerConfigKey } = validationResult.data;
234
+ await this.nangoClient.deleteConnection(providerConfigKey, connectionId);
235
+ return true;
236
+ }
237
+ catch (error) {
238
+ logger.error({
239
+ storeId: this.id,
240
+ key: key.substring(0, 100),
241
+ error: error instanceof Error ? error.message : 'Unknown error',
242
+ }, 'Error deleting credentials from Nango');
243
+ return false;
244
+ }
245
+ }
246
+ }
247
+ /**
248
+ * Factory function to create NangoCredentialStore
249
+ * Automatically reads NANGO_SECRET_KEY from environment and validates it
250
+ */
251
+ export function createNangoCredentialStore(id, config) {
252
+ const nangoSecretKey = config?.secretKey || process.env.NANGO_SECRET_KEY;
253
+ if (!nangoSecretKey ||
254
+ nangoSecretKey === 'your_nango_secret_key' ||
255
+ nangoSecretKey.includes('mock')) {
256
+ throw new Error('NANGO_SECRET_KEY environment variable is required and must be a real Nango secret key (not mock/placeholder)');
257
+ }
258
+ return new NangoCredentialStore(id, {
259
+ apiUrl: 'https://api.nango.dev',
260
+ ...config,
261
+ secretKey: nangoSecretKey,
262
+ });
263
+ }
264
+ //# sourceMappingURL=nango-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nango-store.js","sourceRoot":"","sources":["../../src/credential-stores/nango-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ import type { CredentialStoreRegistry } from '../credential-stores/CredentialStoreRegistry';
2
+ import type { MCPToolConfig } from '../types/index';
3
+ import { type Logger } from '../utils/logger';
4
+ import type { McpServerConfig } from '../utils/mcp-client';
5
+ /**
6
+ * Context object for credential operations
7
+ */
8
+ export interface CredentialContext {
9
+ /** Tenant identifier */
10
+ tenantId: string;
11
+ /** Project identifier */
12
+ projectId: string;
13
+ /** Conversation identifier */
14
+ conversationId?: string;
15
+ /** Context configuration identifier */
16
+ contextConfigId?: string;
17
+ /** Additional context data */
18
+ metadata?: Record<string, unknown>;
19
+ }
20
+ /**
21
+ * Base credential data structure containing headers and metadata
22
+ */
23
+ export interface CredentialData {
24
+ /** HTTP headers for authentication */
25
+ headers: Record<string, string>;
26
+ /** Additional metadata for the credentials */
27
+ metadata?: Record<string, any>;
28
+ }
29
+ /**
30
+ * Credential store reference for lookups
31
+ */
32
+ export interface CredentialStoreReference {
33
+ /** Framework credential store ID */
34
+ credentialStoreId: string;
35
+ /** Configuration parameters for credential retrieval */
36
+ retrievalParams: Record<string, unknown>;
37
+ }
38
+ export interface CredentialResolverInput {
39
+ context: CredentialContext;
40
+ mcpType?: MCPToolConfig['mcpType'];
41
+ storeReference?: CredentialStoreReference;
42
+ headers?: Record<string, string>;
43
+ }
44
+ /**
45
+ * Interface for context resolver (optional)
46
+ */
47
+ export interface ContextResolverInterface {
48
+ resolveRequestContext(conversationId: string, contextConfigId: string): Promise<Record<string, unknown>>;
49
+ }
50
+ /**
51
+ * Manages credential retrieval and injection for MCP tools
52
+ * Uses CredentialStoreRegistry for credential store management
53
+ */
54
+ export declare class CredentialStuffer {
55
+ private credentialStoreRegistry;
56
+ private contextResolver?;
57
+ private readonly logger;
58
+ constructor(credentialStoreRegistry: CredentialStoreRegistry, contextResolver?: ContextResolverInterface | undefined, logger?: Logger);
59
+ /**
60
+ * Retrieve credentials from credential store registry
61
+ */
62
+ getCredentials(context: CredentialContext, storeReference: CredentialStoreReference, mcpType?: MCPToolConfig['mcpType']): Promise<CredentialData | null>;
63
+ /**
64
+ * Generate credential lookup key based on store type
65
+ */
66
+ private generateCredentialKey;
67
+ /**
68
+ * Get credentials from request context
69
+ */
70
+ getCredentialsFromRequestContext(credentialContext: CredentialContext, headers: Record<string, string>): Promise<CredentialData | null>;
71
+ /**
72
+ * Get credential headers for MCP server configuration
73
+ */
74
+ getCredentialHeaders({ context, mcpType, storeReference, headers, }: CredentialResolverInput): Promise<Record<string, string>>;
75
+ /**
76
+ * Build MCP server configuration with credentials
77
+ */
78
+ buildMcpServerConfig(context: CredentialContext, tool: MCPToolConfig, storeReference?: CredentialStoreReference): Promise<McpServerConfig>;
79
+ }
80
+ //# sourceMappingURL=CredentialStuffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CredentialStuffer.d.ts","sourceRoot":"","sources":["../../src/credential-stuffer/CredentialStuffer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAE5F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD,OAAO,EAAa,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IAEjB,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAElB,8BAA8B;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,sCAAsC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,oCAAoC;IACpC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACnC,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,qBAAqB,CACnB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,uBAAuB;IAC/B,OAAO,CAAC,eAAe,CAAC;IAJ1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAGtB,uBAAuB,EAAE,uBAAuB,EAChD,eAAe,CAAC,EAAE,wBAAwB,YAAA,EAClD,MAAM,CAAC,EAAE,MAAM;IAKjB;;OAEG;IACG,cAAc,CAClB,OAAO,EAAE,iBAAiB,EAC1B,cAAc,EAAE,wBAAwB,EACxC,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,GACjC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IA2FjC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;OAEG;IACG,gCAAgC,CACpC,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IA8BjC;;OAEG;IACG,oBAAoB,CAAC,EACzB,OAAO,EACP,OAAO,EACP,cAAc,EACd,OAAO,GACR,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA4B5D;;OAEG;IACG,oBAAoB,CACxB,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,aAAa,EACnB,cAAc,CAAC,EAAE,wBAAwB,GACxC,OAAO,CAAC,eAAe,CAAC;CAmC5B"}
@@ -0,0 +1,186 @@
1
+ import { TemplateEngine } from '../context/TemplateEngine';
2
+ import { getCredentialStoreLookupKeyFromRetrievalParams } from '../utils/credential-store-utils';
3
+ import { getLogger } from '../utils/logger';
4
+ /**
5
+ * Manages credential retrieval and injection for MCP tools
6
+ * Uses CredentialStoreRegistry for credential store management
7
+ */
8
+ export class CredentialStuffer {
9
+ credentialStoreRegistry;
10
+ contextResolver;
11
+ logger;
12
+ constructor(credentialStoreRegistry, contextResolver, logger) {
13
+ this.credentialStoreRegistry = credentialStoreRegistry;
14
+ this.contextResolver = contextResolver;
15
+ this.logger = logger || getLogger('credential-stuffer');
16
+ }
17
+ /**
18
+ * Retrieve credentials from credential store registry
19
+ */
20
+ async getCredentials(context, storeReference, mcpType) {
21
+ // Get the credential store from registry
22
+ const credentialStore = this.credentialStoreRegistry.get(storeReference.credentialStoreId);
23
+ if (!credentialStore) {
24
+ this.logger.warn({
25
+ tenantId: context.tenantId,
26
+ credentialStoreId: storeReference.credentialStoreId,
27
+ availableStores: this.credentialStoreRegistry.getIds(),
28
+ }, 'Credential store not found in registry');
29
+ return null;
30
+ }
31
+ const key = this.generateCredentialKey(context, storeReference, credentialStore.type);
32
+ const credentialDataString = await credentialStore.get(key);
33
+ if (!credentialDataString) {
34
+ this.logger.warn({
35
+ tenantId: context.tenantId,
36
+ credentialStoreId: storeReference.credentialStoreId,
37
+ lookupKey: key,
38
+ }, 'No credential data found for key');
39
+ return null;
40
+ }
41
+ if (credentialStore.type === 'nango') {
42
+ try {
43
+ const nangoCredentialData = JSON.parse(credentialDataString);
44
+ if (mcpType === 'nango') {
45
+ return {
46
+ headers: {
47
+ // For Nango MCP, authenticate with the Nango secret key
48
+ Authorization: `Bearer ${nangoCredentialData.secretKey}`,
49
+ 'provider-config-key': nangoCredentialData.providerConfigKey,
50
+ 'connection-id': nangoCredentialData.connectionId,
51
+ },
52
+ metadata: nangoCredentialData.metadata,
53
+ };
54
+ }
55
+ const headers = {};
56
+ if (nangoCredentialData.token) {
57
+ headers.Authorization = `Bearer ${nangoCredentialData.token}`;
58
+ }
59
+ return {
60
+ headers,
61
+ metadata: nangoCredentialData.metadata,
62
+ };
63
+ }
64
+ catch (parseError) {
65
+ this.logger.error({
66
+ tenantId: context.tenantId,
67
+ credentialStoreId: storeReference.credentialStoreId,
68
+ parseError: parseError instanceof Error ? parseError.message : 'Unknown error',
69
+ }, 'Failed to parse credential data JSON');
70
+ return null;
71
+ }
72
+ }
73
+ if (credentialStore.type === 'keychain') {
74
+ try {
75
+ const oauthTokens = JSON.parse(credentialDataString);
76
+ if (oauthTokens.access_token) {
77
+ return {
78
+ headers: {
79
+ Authorization: `Bearer ${oauthTokens.access_token}`,
80
+ },
81
+ metadata: {},
82
+ };
83
+ }
84
+ }
85
+ catch {
86
+ // Not JSON or invalid JSON - fall through to treat as simple token
87
+ }
88
+ }
89
+ return {
90
+ headers: {
91
+ Authorization: `Bearer ${credentialDataString}`,
92
+ },
93
+ };
94
+ }
95
+ /**
96
+ * Generate credential lookup key based on store type
97
+ */
98
+ generateCredentialKey(context, storeReference, credentialStoreType) {
99
+ return (getCredentialStoreLookupKeyFromRetrievalParams({
100
+ retrievalParams: storeReference.retrievalParams,
101
+ credentialStoreType,
102
+ }) || context.tenantId);
103
+ }
104
+ /**
105
+ * Get credentials from request context
106
+ */
107
+ async getCredentialsFromRequestContext(credentialContext, headers) {
108
+ const contextConfigId = credentialContext.contextConfigId;
109
+ const conversationId = credentialContext.conversationId;
110
+ if (!contextConfigId || !conversationId || !this.contextResolver) {
111
+ return null;
112
+ }
113
+ // Resolve the request context
114
+ const requestContext = await this.contextResolver.resolveRequestContext(conversationId, contextConfigId);
115
+ // Render any template variables in dynamic header values
116
+ const resolvedHeaders = {};
117
+ for (const [key, value] of Object.entries(headers)) {
118
+ resolvedHeaders[key] = TemplateEngine.render(value, { requestContext: requestContext }, { strict: true });
119
+ }
120
+ return {
121
+ headers: resolvedHeaders,
122
+ metadata: {},
123
+ };
124
+ }
125
+ /**
126
+ * Get credential headers for MCP server configuration
127
+ */
128
+ async getCredentialHeaders({ context, mcpType, storeReference, headers, }) {
129
+ let credentialsFromRequestContext = null;
130
+ // Resolve headers from request context if we have metadata to fetch context and headers to resolve
131
+ if (context.contextConfigId && context.conversationId && headers) {
132
+ credentialsFromRequestContext = await this.getCredentialsFromRequestContext(context, headers);
133
+ }
134
+ // Resolve headers from credential store if we have a store reference
135
+ let credentialStoreHeaders = null;
136
+ if (storeReference) {
137
+ credentialStoreHeaders = await this.getCredentials(context, storeReference, mcpType);
138
+ }
139
+ // If we have no credential store headers, return the headers from the request context
140
+ if (!credentialStoreHeaders) {
141
+ return credentialsFromRequestContext ? credentialsFromRequestContext.headers : {};
142
+ }
143
+ // Combine results from both sources
144
+ const combinedHeaders = {
145
+ ...credentialStoreHeaders.headers,
146
+ ...credentialStoreHeaders.metadata,
147
+ ...credentialsFromRequestContext?.headers,
148
+ };
149
+ return combinedHeaders;
150
+ }
151
+ /**
152
+ * Build MCP server configuration with credentials
153
+ */
154
+ async buildMcpServerConfig(context, tool, storeReference) {
155
+ // Get credential headers if available
156
+ let credentialHeaders = {};
157
+ if (storeReference || tool.headers) {
158
+ credentialHeaders = await this.getCredentialHeaders({
159
+ context: context,
160
+ mcpType: tool.mcpType,
161
+ storeReference,
162
+ headers: tool.headers || {},
163
+ });
164
+ }
165
+ // Build base configuration
166
+ const baseConfig = {
167
+ type: tool.transport?.type || 'streamable_http',
168
+ url: tool.serverUrl,
169
+ activeTools: tool.activeTools,
170
+ };
171
+ // Add configuration based on transport type
172
+ if (baseConfig.type === 'streamable_http' || baseConfig.type === 'sse') {
173
+ const httpConfig = {
174
+ ...baseConfig,
175
+ url: tool.serverUrl,
176
+ headers: {
177
+ ...tool.headers,
178
+ ...credentialHeaders,
179
+ },
180
+ };
181
+ return httpConfig;
182
+ }
183
+ return baseConfig;
184
+ }
185
+ }
186
+ //# sourceMappingURL=CredentialStuffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CredentialStuffer.js","sourceRoot":"","sources":["../../src/credential-stuffer/CredentialStuffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './CredentialStuffer';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/credential-stuffer/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './CredentialStuffer';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/credential-stuffer/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=agentDataComponents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentDataComponents.d.ts","sourceRoot":"","sources":["../../src/data-access/agentDataComponents.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=agentDataComponents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agentDataComponents.js","sourceRoot":"","sources":["../../src/data-access/agentDataComponents.ts"],"names":[],"mappings":""}