@microsoft/agents-hosting 1.6.1 → 1.7.0-beta.1.g8bcd4f11a7

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 (87) hide show
  1. package/dist/package.json +3 -3
  2. package/dist/src/app/streaming/streamingResponse.d.ts +11 -0
  3. package/dist/src/app/streaming/streamingResponse.js +21 -0
  4. package/dist/src/app/streaming/streamingResponse.js.map +1 -1
  5. package/dist/src/auth/MemoryCache.d.ts +2 -1
  6. package/dist/src/auth/MemoryCache.js +7 -1
  7. package/dist/src/auth/MemoryCache.js.map +1 -1
  8. package/dist/src/auth/authConfiguration.d.ts +1 -1
  9. package/dist/src/auth/authConfiguration.js +36 -1
  10. package/dist/src/auth/authConfiguration.js.map +1 -1
  11. package/dist/src/auth/authConstants.d.ts +7 -7
  12. package/dist/src/auth/authConstants.js.map +1 -1
  13. package/dist/src/auth/connectionManager.d.ts +92 -0
  14. package/dist/src/auth/{msalConnectionManager.js → connectionManager.js} +50 -48
  15. package/dist/src/auth/connectionManager.js.map +1 -0
  16. package/dist/src/auth/index.d.ts +5 -3
  17. package/dist/src/auth/index.js +5 -3
  18. package/dist/src/auth/index.js.map +1 -1
  19. package/dist/src/auth/jwt-middleware.d.ts +6 -0
  20. package/dist/src/auth/jwt-middleware.js +32 -1
  21. package/dist/src/auth/jwt-middleware.js.map +1 -1
  22. package/dist/src/auth/msal/msalConnectionManager.d.ts +17 -0
  23. package/dist/src/auth/msal/msalConnectionManager.js +50 -0
  24. package/dist/src/auth/msal/msalConnectionManager.js.map +1 -0
  25. package/dist/src/auth/msal/msalConnectionSettings.d.ts +68 -0
  26. package/dist/src/auth/msal/msalConnectionSettings.js +7 -0
  27. package/dist/src/auth/msal/msalConnectionSettings.js.map +1 -0
  28. package/dist/src/auth/{msalTokenCredential.d.ts → msal/msalTokenCredential.d.ts} +1 -1
  29. package/dist/src/auth/{msalTokenCredential.js → msal/msalTokenCredential.js} +2 -2
  30. package/dist/src/auth/msal/msalTokenCredential.js.map +1 -0
  31. package/dist/src/auth/{msalTokenProvider.d.ts → msal/msalTokenProvider.d.ts} +23 -3
  32. package/dist/src/auth/{msalTokenProvider.js → msal/msalTokenProvider.js} +264 -160
  33. package/dist/src/auth/msal/msalTokenProvider.js.map +1 -0
  34. package/dist/src/auth/settings.d.ts +142 -133
  35. package/dist/src/auth/settings.js +49 -5
  36. package/dist/src/auth/settings.js.map +1 -1
  37. package/dist/src/auth/sidecar/sidecarAuthProvider.d.ts +74 -0
  38. package/dist/src/auth/sidecar/sidecarAuthProvider.js +181 -0
  39. package/dist/src/auth/sidecar/sidecarAuthProvider.js.map +1 -0
  40. package/dist/src/auth/sidecar/sidecarConnectionSettings.d.ts +65 -0
  41. package/dist/src/auth/sidecar/sidecarConnectionSettings.js +7 -0
  42. package/dist/src/auth/sidecar/sidecarConnectionSettings.js.map +1 -0
  43. package/dist/src/auth/sidecar/sidecarHttpClient.d.ts +95 -0
  44. package/dist/src/auth/sidecar/sidecarHttpClient.js +406 -0
  45. package/dist/src/auth/sidecar/sidecarHttpClient.js.map +1 -0
  46. package/dist/src/auth/sidecar/sidecarModels.d.ts +110 -0
  47. package/dist/src/auth/sidecar/sidecarModels.js +48 -0
  48. package/dist/src/auth/sidecar/sidecarModels.js.map +1 -0
  49. package/dist/src/auth/sidecar/sidecarTokenExpiry.d.ts +13 -0
  50. package/dist/src/auth/sidecar/sidecarTokenExpiry.js +39 -0
  51. package/dist/src/auth/sidecar/sidecarTokenExpiry.js.map +1 -0
  52. package/dist/src/cloudAdapter.js +1 -1
  53. package/dist/src/cloudAdapter.js.map +1 -1
  54. package/dist/src/errorHelper.js +96 -0
  55. package/dist/src/errorHelper.js.map +1 -1
  56. package/dist/src/index.d.ts +1 -1
  57. package/dist/src/index.js +2 -1
  58. package/dist/src/index.js.map +1 -1
  59. package/dist/src/oauth/userTokenClient.d.ts +12 -0
  60. package/dist/src/oauth/userTokenClient.js +28 -8
  61. package/dist/src/oauth/userTokenClient.js.map +1 -1
  62. package/package.json +3 -3
  63. package/src/app/streaming/streamingResponse.ts +24 -1
  64. package/src/auth/MemoryCache.ts +7 -1
  65. package/src/auth/authConfiguration.ts +36 -3
  66. package/src/auth/authConstants.ts +7 -7
  67. package/src/auth/{msalConnectionManager.ts → connectionManager.ts} +65 -61
  68. package/src/auth/index.ts +5 -3
  69. package/src/auth/jwt-middleware.ts +31 -1
  70. package/src/auth/msal/msalConnectionManager.ts +55 -0
  71. package/src/auth/msal/msalConnectionSettings.ts +79 -0
  72. package/src/auth/{msalTokenCredential.ts → msal/msalTokenCredential.ts} +2 -1
  73. package/src/auth/{msalTokenProvider.ts → msal/msalTokenProvider.ts} +337 -156
  74. package/src/auth/settings.ts +131 -76
  75. package/src/auth/sidecar/sidecarAuthProvider.ts +234 -0
  76. package/src/auth/sidecar/sidecarConnectionSettings.ts +72 -0
  77. package/src/auth/sidecar/sidecarHttpClient.ts +443 -0
  78. package/src/auth/sidecar/sidecarModels.ts +153 -0
  79. package/src/auth/sidecar/sidecarTokenExpiry.ts +35 -0
  80. package/src/cloudAdapter.ts +1 -1
  81. package/src/errorHelper.ts +110 -0
  82. package/src/index.ts +1 -1
  83. package/src/oauth/userTokenClient.ts +43 -9
  84. package/dist/src/auth/msalConnectionManager.d.ts +0 -64
  85. package/dist/src/auth/msalConnectionManager.js.map +0 -1
  86. package/dist/src/auth/msalTokenCredential.js.map +0 -1
  87. package/dist/src/auth/msalTokenProvider.js.map +0 -1
@@ -9,16 +9,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.MsalTokenProvider = void 0;
11
11
  const msal_node_1 = require("@azure/msal-node");
12
- const authConfiguration_1 = require("./authConfiguration");
12
+ const authConfiguration_1 = require("../authConfiguration");
13
13
  const agents_telemetry_1 = require("@microsoft/agents-telemetry");
14
14
  const crypto_1 = require("crypto");
15
- const MemoryCache_1 = require("./MemoryCache");
15
+ const MemoryCache_1 = require("../MemoryCache");
16
16
  const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
17
17
  const fs_1 = __importDefault(require("fs"));
18
18
  const crypto_2 = __importDefault(require("crypto"));
19
- const observability_1 = require("../observability");
19
+ const observability_1 = require("../../observability");
20
20
  const agents_activity_1 = require("@microsoft/agents-activity");
21
- const errorHelper_1 = require("../errorHelper");
21
+ const errorHelper_1 = require("../../errorHelper");
22
22
  const audience = 'api://AzureADTokenExchange';
23
23
  const logger = (0, agents_telemetry_1.debug)('agents:msal');
24
24
  const agenticTokenRequestTimeoutMs = 30000;
@@ -59,9 +59,171 @@ class MsalTokenProvider {
59
59
  piiLoggingEnabled: false
60
60
  }
61
61
  };
62
- this._agenticTokenCache = new MemoryCache_1.MemoryCache();
63
62
  this.connectionSettings = connectionSettings;
64
63
  }
64
+ /**
65
+ * Clears process-wide auth caches.
66
+ */
67
+ static clearSharedCaches() {
68
+ MsalTokenProvider._accessTokenCache.clear();
69
+ MsalTokenProvider._agenticTokenCache.clear();
70
+ MsalTokenProvider._confidentialClients.clear();
71
+ }
72
+ static cacheKey(...parts) {
73
+ return JSON.stringify(parts.map(part => part !== null && part !== void 0 ? part : ''));
74
+ }
75
+ static digest(value) {
76
+ return value ? crypto_2.default.createHash('sha256').update(value).digest('base64url') : '';
77
+ }
78
+ getOrCreateConfidentialClient(cacheKey, createClient) {
79
+ const existing = MsalTokenProvider._confidentialClients.get(cacheKey);
80
+ if (existing) {
81
+ MsalTokenProvider._confidentialClients.delete(cacheKey);
82
+ MsalTokenProvider._confidentialClients.set(cacheKey, existing);
83
+ return existing;
84
+ }
85
+ const created = createClient();
86
+ MsalTokenProvider._confidentialClients.set(cacheKey, created);
87
+ while (MsalTokenProvider._confidentialClients.size > MsalTokenProvider._maxConfidentialClients) {
88
+ const oldestKey = MsalTokenProvider._confidentialClients.keys().next().value;
89
+ if (oldestKey === undefined) {
90
+ break;
91
+ }
92
+ MsalTokenProvider._confidentialClients.delete(oldestKey);
93
+ }
94
+ return created;
95
+ }
96
+ getFileCacheIdentity(path) {
97
+ if (!path) {
98
+ return '';
99
+ }
100
+ try {
101
+ const stat = fs_1.default.statSync(path);
102
+ return `${path}:${stat.size}:${stat.mtimeMs}`;
103
+ }
104
+ catch {
105
+ return path;
106
+ }
107
+ }
108
+ getAccessTokenCacheKey(authConfig, scope) {
109
+ var _a, _b, _c, _d, _e;
110
+ const authType = (0, authConfiguration_1.resolveAuthType)(authConfig);
111
+ let authority = (0, authConfiguration_1.resolveAuthority)((_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority, authConfig.tenantId);
112
+ let credentialIdentity = '';
113
+ switch (authType) {
114
+ case authConfiguration_1.AuthType.ClientSecret:
115
+ credentialIdentity = MsalTokenProvider.digest(authConfig.clientSecret);
116
+ break;
117
+ case authConfiguration_1.AuthType.Certificate:
118
+ case authConfiguration_1.AuthType.CertificateSubjectName:
119
+ credentialIdentity = MsalTokenProvider.cacheKey(this.getFileCacheIdentity(authConfig.certPemFile), this.getFileCacheIdentity(authConfig.certKeyFile), authConfig.sendX5C);
120
+ break;
121
+ case authConfiguration_1.AuthType.WorkloadIdentity:
122
+ authority = `https://login.microsoftonline.com/${authConfig.tenantId}`;
123
+ credentialIdentity = this.getFileCacheIdentity((_b = authConfig.federatedTokenFile) !== null && _b !== void 0 ? _b : authConfig.WIDAssertionFile);
124
+ break;
125
+ case authConfiguration_1.AuthType.FederatedCredentials:
126
+ credentialIdentity = (_d = (_c = authConfig.federatedClientId) !== null && _c !== void 0 ? _c : authConfig.FICClientId) !== null && _d !== void 0 ? _d : '';
127
+ break;
128
+ case authConfiguration_1.AuthType.UserManagedIdentity:
129
+ authority = 'managed-identity';
130
+ credentialIdentity = (_e = authConfig.clientId) !== null && _e !== void 0 ? _e : '';
131
+ break;
132
+ case authConfiguration_1.AuthType.SystemManagedIdentity:
133
+ authority = 'managed-identity';
134
+ credentialIdentity = 'system';
135
+ break;
136
+ default:
137
+ credentialIdentity = 'unknown';
138
+ }
139
+ return MsalTokenProvider.cacheKey('access-token', authType, authority, authConfig.clientId, scope, authConfig.azureRegion, credentialIdentity);
140
+ }
141
+ cacheAccessToken(cacheKey, token, expiresOn) {
142
+ const ttlSeconds = this.getTokenCacheTtlSeconds(token, expiresOn);
143
+ if (ttlSeconds > 0) {
144
+ MsalTokenProvider._accessTokenCache.set(cacheKey, token, ttlSeconds);
145
+ }
146
+ }
147
+ cacheAgenticToken(cacheKey, token, ttlSeconds) {
148
+ const safeTtlSeconds = Math.floor(ttlSeconds) - 300;
149
+ if (safeTtlSeconds > 0) {
150
+ MsalTokenProvider._agenticTokenCache.set(cacheKey, token, safeTtlSeconds);
151
+ }
152
+ }
153
+ cacheAgenticAuthenticationResult(cacheKey, token) {
154
+ const ttlSeconds = this.getTokenCacheTtlSeconds(token.accessToken, token.expiresOn);
155
+ if (ttlSeconds > 0) {
156
+ MsalTokenProvider._agenticTokenCache.set(cacheKey, token.accessToken, ttlSeconds);
157
+ }
158
+ }
159
+ getAgenticTokenCacheKey(tenantId, clientId, scopes, tokenBodyParameters) {
160
+ const bodyKey = Object.keys(tokenBodyParameters)
161
+ .sort()
162
+ .filter(key => key !== 'user_federated_identity_credential')
163
+ .map(key => `${key}=${MsalTokenProvider.digest(String(tokenBodyParameters[key]))}`)
164
+ .join('&');
165
+ return MsalTokenProvider.cacheKey('agentic-token', this.resolveAuthority(tenantId), clientId, scopes.join(' '), bodyKey);
166
+ }
167
+ getTokenCacheTtlSeconds(token, expiresOn) {
168
+ var _a;
169
+ const expiresAtMs = (_a = expiresOn === null || expiresOn === void 0 ? void 0 : expiresOn.getTime()) !== null && _a !== void 0 ? _a : this.getJwtExpiresAtMs(token);
170
+ if (!expiresAtMs) {
171
+ return 0;
172
+ }
173
+ return Math.floor((expiresAtMs - Date.now()) / 1000) - 300;
174
+ }
175
+ getJwtExpiresAtMs(token) {
176
+ const payload = jsonwebtoken_1.default.decode(token);
177
+ if (!payload || typeof payload === 'string' || typeof payload.exp !== 'number') {
178
+ return undefined;
179
+ }
180
+ return payload.exp * 1000;
181
+ }
182
+ getClientSecretClient(authConfig) {
183
+ var _a;
184
+ const cacheKey = MsalTokenProvider.cacheKey('confidential-client', authConfiguration_1.AuthType.ClientSecret, authConfig.clientId, (0, authConfiguration_1.resolveAuthority)((_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority, authConfig.tenantId), MsalTokenProvider.digest(authConfig.clientSecret));
185
+ return this.getOrCreateConfidentialClient(cacheKey, () => {
186
+ var _a;
187
+ return new msal_node_1.ConfidentialClientApplication({
188
+ auth: {
189
+ clientId: authConfig.clientId,
190
+ authority: (0, authConfiguration_1.resolveAuthority)((_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority, authConfig.tenantId),
191
+ clientSecret: authConfig.clientSecret
192
+ },
193
+ system: this.sysOptions
194
+ });
195
+ });
196
+ }
197
+ getCertificateClient(authConfig) {
198
+ var _a, _b;
199
+ const cacheKey = MsalTokenProvider.cacheKey('confidential-client', (_a = authConfig.authType) !== null && _a !== void 0 ? _a : authConfiguration_1.AuthType.Certificate, authConfig.clientId, (0, authConfiguration_1.resolveAuthority)((_b = authConfig.authorityEndpoint) !== null && _b !== void 0 ? _b : authConfig.authority, authConfig.tenantId), this.getFileCacheIdentity(authConfig.certPemFile), this.getFileCacheIdentity(authConfig.certKeyFile), authConfig.sendX5C);
200
+ return this.getOrCreateConfidentialClient(cacheKey, () => {
201
+ var _a;
202
+ const privateKeySource = fs_1.default.readFileSync(authConfig.certKeyFile);
203
+ const privateKeyObject = crypto_2.default.createPrivateKey({
204
+ key: privateKeySource,
205
+ format: 'pem'
206
+ });
207
+ const privateKey = privateKeyObject.export({
208
+ format: 'pem',
209
+ type: 'pkcs8'
210
+ });
211
+ const pemFile = fs_1.default.readFileSync(authConfig.certPemFile);
212
+ const pubKeyObject = new crypto_2.default.X509Certificate(pemFile);
213
+ return new msal_node_1.ConfidentialClientApplication({
214
+ auth: {
215
+ clientId: authConfig.clientId || '',
216
+ authority: (0, authConfiguration_1.resolveAuthority)((_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority, authConfig.tenantId),
217
+ clientCertificate: {
218
+ privateKey: privateKey,
219
+ thumbprint: pubKeyObject.fingerprint.replaceAll(':', ''),
220
+ x5c: pemFile.toString()
221
+ }
222
+ },
223
+ system: this.sysOptions
224
+ });
225
+ });
226
+ }
65
227
  async getAccessToken(authConfigOrScope, scope) {
66
228
  return (0, agents_telemetry_1.trace)(observability_1.AuthenticationTraceDefinitions.getAccessToken, async ({ record }) => {
67
229
  var _a;
@@ -85,91 +247,65 @@ class MsalTokenProvider {
85
247
  record({ method: 'unknown' });
86
248
  return '';
87
249
  }
250
+ const accessTokenCacheKey = this.getAccessTokenCacheKey(authConfig, actualScope);
251
+ const cachedAccessToken = MsalTokenProvider._accessTokenCache.get(accessTokenCacheKey);
252
+ if (cachedAccessToken) {
253
+ logger.debug('getAccessToken cache hit clientId=%s scope=%s', authConfig.clientId, actualScope);
254
+ return cachedAccessToken;
255
+ }
88
256
  let token;
89
- if (authConfig.authType) {
90
- record({ method: authConfig.authType });
91
- logger.debug(`getAccessToken via ${authConfig.authType} clientId=${authConfig.clientId} scope=${actualScope}`);
92
- switch (authConfig.authType) {
93
- case authConfiguration_1.AuthType.WorkloadIdentity: {
94
- const tokenFilePath = (_a = authConfig.federatedTokenFile) !== null && _a !== void 0 ? _a : authConfig.WIDAssertionFile;
95
- if (!tokenFilePath) {
96
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.WorkloadIdentityTokenFileRequired);
97
- }
98
- token = await this.acquireAccessTokenViaWID(authConfig, actualScope);
99
- break;
257
+ const authType = (0, authConfiguration_1.resolveAuthType)(authConfig);
258
+ record({ method: authType });
259
+ logger.debug('getAccessToken via method=%s clientId=%s scope=%s', authType, authConfig.clientId, actualScope);
260
+ switch (authType) {
261
+ case authConfiguration_1.AuthType.WorkloadIdentity: {
262
+ const tokenFilePath = (_a = authConfig.federatedTokenFile) !== null && _a !== void 0 ? _a : authConfig.WIDAssertionFile;
263
+ if (!tokenFilePath) {
264
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.WorkloadIdentityTokenFileRequired);
100
265
  }
101
- case authConfiguration_1.AuthType.FederatedCredentials:
102
- if (!authConfig.federatedClientId && !authConfig.FICClientId) {
103
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.FICClientIdRequired);
104
- }
105
- token = await this.acquireAccessTokenViaFIC(authConfig, actualScope);
106
- break;
107
- case authConfiguration_1.AuthType.ClientSecret:
108
- if (!authConfig.clientSecret) {
109
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.ClientSecretRequired);
110
- }
111
- token = await this.acquireAccessTokenViaSecret(authConfig, actualScope);
112
- break;
113
- case authConfiguration_1.AuthType.Certificate:
114
- case authConfiguration_1.AuthType.CertificateSubjectName:
115
- if (!authConfig.certPemFile || !authConfig.certKeyFile) {
116
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.CertificateFilesRequired);
117
- }
118
- token = await this.acquireTokenWithCertificate(authConfig, actualScope);
119
- break;
120
- case authConfiguration_1.AuthType.UserManagedIdentity:
121
- if (!authConfig.clientId) {
122
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.ClientIdRequiredForUserManagedIdentity);
123
- }
124
- token = await this.acquireTokenWithUserAssignedIdentity(authConfig, actualScope);
125
- break;
126
- case authConfiguration_1.AuthType.SystemManagedIdentity:
127
- token = await this.acquireTokenWithSystemAssignedIdentity(authConfig, actualScope);
128
- break;
129
- default:
130
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.UnsupportedAuthType, undefined, { authType: authConfig.authType });
266
+ token = await this.acquireAccessTokenViaWID(authConfig, actualScope);
267
+ break;
131
268
  }
132
- }
133
- else if (authConfig.WIDAssertionFile !== undefined) {
134
- record({ method: authConfiguration_1.AuthType.WorkloadIdentity });
135
- logger.debug('getAccessToken via method=%s clientId=%s scope=%s', authConfiguration_1.AuthType.WorkloadIdentity, authConfig.clientId, actualScope);
136
- token = await this.acquireAccessTokenViaWID(authConfig, actualScope);
137
- }
138
- else if (authConfig.federatedClientId !== undefined || authConfig.FICClientId !== undefined) {
139
- record({ method: authConfiguration_1.AuthType.FederatedCredentials });
140
- logger.debug('getAccessToken via method=%s clientId=%s scope=%s', authConfiguration_1.AuthType.FederatedCredentials, authConfig.clientId, actualScope);
141
- token = await this.acquireAccessTokenViaFIC(authConfig, actualScope);
142
- }
143
- else if (authConfig.clientSecret !== undefined) {
144
- record({ method: authConfiguration_1.AuthType.ClientSecret });
145
- logger.debug('getAccessToken via method=%s clientId=%s scope=%s', authConfiguration_1.AuthType.ClientSecret, authConfig.clientId, actualScope);
146
- token = await this.acquireAccessTokenViaSecret(authConfig, actualScope);
147
- }
148
- else if (authConfig.certPemFile !== undefined &&
149
- authConfig.certKeyFile !== undefined) {
150
- record({ method: authConfiguration_1.AuthType.Certificate });
151
- logger.debug('getAccessToken via method=%s clientId=%s scope=%s', authConfiguration_1.AuthType.Certificate, authConfig.clientId, actualScope);
152
- token = await this.acquireTokenWithCertificate(authConfig, actualScope);
153
- }
154
- else if (authConfig.clientSecret === undefined &&
155
- authConfig.certPemFile === undefined &&
156
- authConfig.certKeyFile === undefined) {
157
- record({ method: authConfiguration_1.AuthType.UserManagedIdentity });
158
- logger.debug('getAccessToken via method=%s clientId=%s scope=%s', authConfiguration_1.AuthType.UserManagedIdentity, authConfig.clientId, actualScope);
159
- token = await this.acquireTokenWithUserAssignedIdentity(authConfig, actualScope);
160
- }
161
- else {
162
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.InvalidAuthConfig);
269
+ case authConfiguration_1.AuthType.FederatedCredentials:
270
+ if (!authConfig.federatedClientId && !authConfig.FICClientId) {
271
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.FICClientIdRequired);
272
+ }
273
+ token = await this.acquireAccessTokenViaFIC(authConfig, actualScope);
274
+ break;
275
+ case authConfiguration_1.AuthType.ClientSecret:
276
+ if (!authConfig.clientSecret) {
277
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.ClientSecretRequired);
278
+ }
279
+ token = await this.acquireAccessTokenViaSecret(authConfig, actualScope);
280
+ break;
281
+ case authConfiguration_1.AuthType.Certificate:
282
+ case authConfiguration_1.AuthType.CertificateSubjectName:
283
+ if (!authConfig.certPemFile || !authConfig.certKeyFile) {
284
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.CertificateFilesRequired);
285
+ }
286
+ token = await this.acquireTokenWithCertificate(authConfig, actualScope);
287
+ break;
288
+ case authConfiguration_1.AuthType.UserManagedIdentity:
289
+ if (!authConfig.clientId) {
290
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.ClientIdRequiredForUserManagedIdentity);
291
+ }
292
+ token = await this.acquireTokenWithUserAssignedIdentity(authConfig, actualScope);
293
+ break;
294
+ case authConfiguration_1.AuthType.SystemManagedIdentity:
295
+ token = await this.acquireTokenWithSystemAssignedIdentity(authConfig, actualScope);
296
+ break;
297
+ default:
298
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.UnsupportedAuthType, undefined, { authType });
163
299
  }
164
300
  if (token === undefined) {
165
301
  throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.FailedToAcquireToken);
166
302
  }
303
+ this.cacheAccessToken(accessTokenCacheKey, token);
167
304
  return token;
168
305
  });
169
306
  }
170
307
  async acquireTokenOnBehalfOf(authConfigOrScopes, scopesOrOboAssertion, oboAssertion) {
171
308
  return (0, agents_telemetry_1.trace)(observability_1.AuthenticationTraceDefinitions.acquireTokenOnBehalfOf, async ({ record }) => {
172
- var _a;
173
309
  let authConfig;
174
310
  let actualScopes;
175
311
  let actualOboAssertion;
@@ -190,14 +326,7 @@ class MsalTokenProvider {
190
326
  }
191
327
  record({ scopes: actualScopes });
192
328
  logger.debug('acquireTokenOnBehalfOf clientId=%s scopes=%o', authConfig.clientId, actualScopes);
193
- const cca = new msal_node_1.ConfidentialClientApplication({
194
- auth: {
195
- clientId: authConfig.clientId,
196
- authority: `${(_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority}/${authConfig.tenantId || 'botframework.com'}`,
197
- clientSecret: authConfig.clientSecret
198
- },
199
- system: this.sysOptions
200
- });
329
+ const cca = this.getClientSecretClient(authConfig);
201
330
  const token = await cca.acquireTokenOnBehalfOf({
202
331
  oboAssertion: actualOboAssertion,
203
332
  scopes: actualScopes
@@ -216,6 +345,11 @@ class MsalTokenProvider {
216
345
  if (!this.connectionSettings) {
217
346
  throw new Error('Connection settings must be provided when calling getAgenticInstanceToken');
218
347
  }
348
+ const instanceTokenCacheKey = MsalTokenProvider.cacheKey('agentic-instance-token', this.resolveAuthority(tenantId), agentAppInstanceId, this.connectionSettings.clientId, this.connectionSettings.azureRegion);
349
+ const cachedInstanceToken = MsalTokenProvider._agenticTokenCache.get(instanceTokenCacheKey);
350
+ if (cachedInstanceToken) {
351
+ return cachedInstanceToken;
352
+ }
219
353
  const appToken = await this.getAgenticApplicationToken(tenantId, agentAppInstanceId);
220
354
  const cca = new msal_node_1.ConfidentialClientApplication({
221
355
  auth: {
@@ -233,6 +367,7 @@ class MsalTokenProvider {
233
367
  if (!(token === null || token === void 0 ? void 0 : token.accessToken)) {
234
368
  throw new Error(`Failed to acquire instance token for agent instance: ${agentAppInstanceId}`);
235
369
  }
370
+ this.cacheAgenticAuthenticationResult(instanceTokenCacheKey, token);
236
371
  return token.accessToken;
237
372
  });
238
373
  }
@@ -275,9 +410,9 @@ class MsalTokenProvider {
275
410
  }
276
411
  logger.debug('acquireTokenForAgenticScenarios clientId=%s tenantId=%s scopes=%o grant_type=%s', clientId, tenantId, scopes, tokenBodyParameters.grant_type);
277
412
  // Check cache first
278
- const cacheKey = `${clientId}/${Object.keys(tokenBodyParameters).map(key => key !== 'user_federated_identity_credential' ? `${key}=${tokenBodyParameters[key]}` : '').join('&')}/${scopes.join(';')}`;
279
- if (this._agenticTokenCache.get(cacheKey)) {
280
- return this._agenticTokenCache.get(cacheKey);
413
+ const cacheKey = this.getAgenticTokenCacheKey(tenantId, clientId, scopes, tokenBodyParameters);
414
+ if (MsalTokenProvider._agenticTokenCache.get(cacheKey)) {
415
+ return MsalTokenProvider._agenticTokenCache.get(cacheKey);
281
416
  }
282
417
  const url = `${this.resolveAuthority(tenantId)}/oauth2/v2.0/token`;
283
418
  const data = {
@@ -324,19 +459,27 @@ class MsalTokenProvider {
324
459
  clearTimeout(timeoutId);
325
460
  });
326
461
  // capture token, expire local cache 5 minutes early
327
- this._agenticTokenCache.set(cacheKey, token.access_token, token.expires_in - 300);
462
+ this.cacheAgenticToken(cacheKey, token.access_token, token.expires_in);
328
463
  return token.access_token;
329
464
  }
330
465
  async getAgenticUserToken(tenantId, agentAppInstanceId, agenticUserId, scopes) {
331
466
  return (0, agents_telemetry_1.trace)(observability_1.AuthenticationTraceDefinitions.getAgenticUserToken, async ({ record }) => {
332
467
  logger.debug('getAgenticUserToken tenantId=%s agentAppInstanceId=%s scopes=%o', tenantId, agentAppInstanceId, scopes);
333
468
  record({ agenticInstanceId: agentAppInstanceId, agenticUserId, scopes });
469
+ const userTokenParameters = {
470
+ user_id: agenticUserId,
471
+ grant_type: 'user_fic',
472
+ };
473
+ const userTokenCacheKey = this.getAgenticTokenCacheKey(tenantId, agentAppInstanceId, scopes, userTokenParameters);
474
+ const cachedUserToken = MsalTokenProvider._agenticTokenCache.get(userTokenCacheKey);
475
+ if (cachedUserToken) {
476
+ return cachedUserToken;
477
+ }
334
478
  const agentToken = await this.getAgenticApplicationToken(tenantId, agentAppInstanceId);
335
479
  const instanceToken = await this.getAgenticInstanceToken(tenantId, agentAppInstanceId);
336
480
  const token = await this.acquireTokenForAgenticScenarios(tenantId, agentAppInstanceId, agentToken, scopes, {
337
- user_id: agenticUserId,
481
+ ...userTokenParameters,
338
482
  user_federated_identity_credential: instanceToken,
339
- grant_type: 'user_fic',
340
483
  });
341
484
  if (!token) {
342
485
  throw new Error(`Failed to acquire instance token for user token: ${agentAppInstanceId}`);
@@ -345,12 +488,13 @@ class MsalTokenProvider {
345
488
  });
346
489
  }
347
490
  async getAgenticApplicationToken(tenantId, agentAppInstanceId) {
348
- var _a, _b, _c;
491
+ var _a, _b;
349
492
  if (!((_a = this.connectionSettings) === null || _a === void 0 ? void 0 : _a.clientId)) {
350
493
  throw new Error('Connection settings must be provided when calling getAgenticApplicationToken');
351
494
  }
352
495
  logger.debug('getAgenticApplicationToken clientId=%s tenantId=%s agentAppInstanceId=%s', this.connectionSettings.clientId, tenantId, agentAppInstanceId);
353
- if (this.connectionSettings.authType === authConfiguration_1.AuthType.IdentityProxyManager) {
496
+ const authType = (0, authConfiguration_1.resolveAuthType)(this.connectionSettings);
497
+ if (authType === authConfiguration_1.AuthType.IdentityProxyManager) {
354
498
  let resource;
355
499
  if (!this.connectionSettings.idpmResource) {
356
500
  resource = 'api://AzureAdTokenExchange/.default';
@@ -375,41 +519,28 @@ class MsalTokenProvider {
375
519
  return tokenResult.accessToken;
376
520
  }
377
521
  let clientAssertion;
378
- if (this.connectionSettings.authType) {
379
- switch (this.connectionSettings.authType) {
380
- case authConfiguration_1.AuthType.WorkloadIdentity: {
381
- const tokenFilePath = (_b = this.connectionSettings.federatedTokenFile) !== null && _b !== void 0 ? _b : this.connectionSettings.WIDAssertionFile;
382
- if (tokenFilePath === undefined) {
383
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.WorkloadIdentityTokenFileRequired);
384
- }
385
- clientAssertion = fs_1.default.readFileSync(tokenFilePath, 'utf8');
386
- break;
522
+ switch (authType) {
523
+ case authConfiguration_1.AuthType.WorkloadIdentity: {
524
+ const tokenFilePath = (_b = this.connectionSettings.federatedTokenFile) !== null && _b !== void 0 ? _b : this.connectionSettings.WIDAssertionFile;
525
+ if (tokenFilePath === undefined) {
526
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.WorkloadIdentityTokenFileRequired);
387
527
  }
388
- case authConfiguration_1.AuthType.FederatedCredentials:
389
- if (!this.connectionSettings.federatedClientId && !this.connectionSettings.FICClientId) {
390
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.FICClientIdRequired);
391
- }
392
- clientAssertion = await this.fetchExternalToken(this.connectionSettings.federatedClientId || this.connectionSettings.FICClientId);
393
- break;
394
- case authConfiguration_1.AuthType.Certificate:
395
- case authConfiguration_1.AuthType.CertificateSubjectName:
396
- if (!this.connectionSettings.certPemFile || !this.connectionSettings.certKeyFile) {
397
- throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.CertificateFilesRequired);
398
- }
399
- clientAssertion = this.getAssertionFromCert(this.connectionSettings);
400
- break;
528
+ clientAssertion = fs_1.default.readFileSync(tokenFilePath, 'utf8');
529
+ break;
401
530
  }
402
- }
403
- else if (this.connectionSettings.WIDAssertionFile !== undefined) {
404
- const tokenFilePath = (_c = this.connectionSettings.federatedTokenFile) !== null && _c !== void 0 ? _c : this.connectionSettings.WIDAssertionFile;
405
- clientAssertion = fs_1.default.readFileSync(tokenFilePath, 'utf8');
406
- }
407
- else if (this.connectionSettings.federatedClientId !== undefined || this.connectionSettings.FICClientId !== undefined) {
408
- clientAssertion = await this.fetchExternalToken(this.connectionSettings.federatedClientId || this.connectionSettings.FICClientId);
409
- }
410
- else if (this.connectionSettings.certPemFile !== undefined &&
411
- this.connectionSettings.certKeyFile !== undefined) {
412
- clientAssertion = this.getAssertionFromCert(this.connectionSettings);
531
+ case authConfiguration_1.AuthType.FederatedCredentials:
532
+ if (!this.connectionSettings.federatedClientId && !this.connectionSettings.FICClientId) {
533
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.FICClientIdRequired);
534
+ }
535
+ clientAssertion = await this.fetchExternalToken(this.connectionSettings.federatedClientId || this.connectionSettings.FICClientId);
536
+ break;
537
+ case authConfiguration_1.AuthType.Certificate:
538
+ case authConfiguration_1.AuthType.CertificateSubjectName:
539
+ if (!this.connectionSettings.certPemFile || !this.connectionSettings.certKeyFile) {
540
+ throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.CertificateFilesRequired);
541
+ }
542
+ clientAssertion = this.getAssertionFromCert(this.connectionSettings);
543
+ break;
413
544
  }
414
545
  const token = await this.acquireTokenForAgenticScenarios(tenantId, this.connectionSettings.clientId, clientAssertion, ['api://AzureAdTokenExchange/.default'], {
415
546
  grant_type: 'client_credentials',
@@ -491,30 +622,7 @@ class MsalTokenProvider {
491
622
  * @returns A promise that resolves to the access token.
492
623
  */
493
624
  async acquireTokenWithCertificate(authConfig, scope) {
494
- var _a;
495
- const privateKeySource = fs_1.default.readFileSync(authConfig.certKeyFile);
496
- const privateKeyObject = crypto_2.default.createPrivateKey({
497
- key: privateKeySource,
498
- format: 'pem'
499
- });
500
- const privateKey = privateKeyObject.export({
501
- format: 'pem',
502
- type: 'pkcs8'
503
- });
504
- const pemFile = fs_1.default.readFileSync(authConfig.certPemFile);
505
- const pubKeyObject = new crypto_2.default.X509Certificate(pemFile);
506
- const cca = new msal_node_1.ConfidentialClientApplication({
507
- auth: {
508
- clientId: authConfig.clientId || '',
509
- authority: `${(_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority}/${authConfig.tenantId || 'botframework.com'}`,
510
- clientCertificate: {
511
- privateKey: privateKey,
512
- thumbprint: pubKeyObject.fingerprint.replaceAll(':', ''),
513
- x5c: pemFile.toString()
514
- }
515
- },
516
- system: this.sysOptions
517
- });
625
+ const cca = this.getCertificateClient(authConfig);
518
626
  const token = await cca.acquireTokenByClientCredential({
519
627
  scopes: [`${scope}/.default`],
520
628
  correlationId: (0, crypto_1.randomUUID)(),
@@ -532,15 +640,7 @@ class MsalTokenProvider {
532
640
  * @returns A promise that resolves to the access token.
533
641
  */
534
642
  async acquireAccessTokenViaSecret(authConfig, scope) {
535
- var _a;
536
- const cca = new msal_node_1.ConfidentialClientApplication({
537
- auth: {
538
- clientId: authConfig.clientId,
539
- authority: `${(_a = authConfig.authorityEndpoint) !== null && _a !== void 0 ? _a : authConfig.authority}/${authConfig.tenantId || 'botframework.com'}`,
540
- clientSecret: authConfig.clientSecret
541
- },
542
- system: this.sysOptions
543
- });
643
+ const cca = this.getClientSecretClient(authConfig);
544
644
  const token = await cca.acquireTokenByClientCredential({
545
645
  scopes: [`${scope}/.default`],
546
646
  correlationId: (0, crypto_1.randomUUID)(),
@@ -626,4 +726,8 @@ class MsalTokenProvider {
626
726
  }
627
727
  }
628
728
  exports.MsalTokenProvider = MsalTokenProvider;
729
+ MsalTokenProvider._accessTokenCache = new MemoryCache_1.MemoryCache();
730
+ MsalTokenProvider._agenticTokenCache = new MemoryCache_1.MemoryCache();
731
+ MsalTokenProvider._confidentialClients = new Map();
732
+ MsalTokenProvider._maxConfidentialClients = 100;
629
733
  //# sourceMappingURL=msalTokenProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"msalTokenProvider.js","sourceRoot":"","sources":["../../../../src/auth/msal/msalTokenProvider.ts"],"names":[],"mappings":"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"}