@microsoft/agents-hosting 1.9.1 → 1.10.0-beta.14.ge6d1defc27
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.
- package/README.md +83 -7
- package/dist/package.json +4 -4
- package/dist/src/activityHandler.js +6 -3
- package/dist/src/activityHandler.js.map +1 -1
- package/dist/src/agent-client/agentResponseHandler.d.ts +7 -0
- package/dist/src/agent-client/agentResponseHandler.js.map +1 -1
- package/dist/src/agent-client/createAgentResponseHandler.d.ts +2 -0
- package/dist/src/agent-client/createAgentResponseHandler.js.map +1 -1
- package/dist/src/app/adaptiveCards/adaptiveCardsActions.d.ts +1 -0
- package/dist/src/app/adaptiveCards/adaptiveCardsActions.js +1 -0
- package/dist/src/app/adaptiveCards/adaptiveCardsActions.js.map +1 -1
- package/dist/src/app/attachmentDownloadHttpClient.d.ts +13 -0
- package/dist/src/app/attachmentDownloadHttpClient.js +80 -0
- package/dist/src/app/attachmentDownloadHttpClient.js.map +1 -0
- package/dist/src/app/attachmentDownloader.d.ts +2 -0
- package/dist/src/app/attachmentDownloader.js +6 -11
- package/dist/src/app/attachmentDownloader.js.map +1 -1
- package/dist/src/app/auth/authorization.d.ts +58 -0
- package/dist/src/app/auth/authorization.js.map +1 -1
- package/dist/src/app/proactive/conversation.d.ts +18 -0
- package/dist/src/app/proactive/conversation.js +6 -0
- package/dist/src/app/proactive/conversation.js.map +1 -1
- package/dist/src/app/proactive/conversationBuilder.js +2 -1
- package/dist/src/app/proactive/conversationBuilder.js.map +1 -1
- package/dist/src/app/proactive/conversationReferenceBuilder.js +8 -4
- package/dist/src/app/proactive/conversationReferenceBuilder.js.map +1 -1
- package/dist/src/app/proactive/createConversationOptionsBuilder.d.ts +1 -0
- package/dist/src/app/proactive/createConversationOptionsBuilder.js +2 -1
- package/dist/src/app/proactive/createConversationOptionsBuilder.js.map +1 -1
- package/dist/src/app/proactive/proactive.d.ts +6 -0
- package/dist/src/app/proactive/proactive.js +32 -1
- package/dist/src/app/proactive/proactive.js.map +1 -1
- package/dist/src/app/routeList.d.ts +21 -0
- package/dist/src/app/routeList.js +27 -3
- package/dist/src/app/routeList.js.map +1 -1
- package/dist/src/app/teamsAttachmentDownloader.d.ts +8 -0
- package/dist/src/app/teamsAttachmentDownloader.js +17 -12
- package/dist/src/app/teamsAttachmentDownloader.js.map +1 -1
- package/dist/src/auth/authConfiguration.d.ts +1 -0
- package/dist/src/auth/authConfiguration.js.map +1 -1
- package/dist/src/auth/authConstants.d.ts +7 -0
- package/dist/src/auth/authConstants.js +7 -0
- package/dist/src/auth/authConstants.js.map +1 -1
- package/dist/src/auth/authProvider.d.ts +36 -0
- package/dist/src/auth/connectionManager.js +2 -1
- package/dist/src/auth/connectionManager.js.map +1 -1
- package/dist/src/auth/connections.d.ts +1 -0
- package/dist/src/auth/msal/msalConnectionManager.d.ts +7 -0
- package/dist/src/auth/msal/msalConnectionManager.js +7 -0
- package/dist/src/auth/msal/msalConnectionManager.js.map +1 -1
- package/dist/src/auth/msal/msalTokenProvider.d.ts +44 -0
- package/dist/src/auth/msal/msalTokenProvider.js +43 -0
- package/dist/src/auth/msal/msalTokenProvider.js.map +1 -1
- package/dist/src/auth/settings.d.ts +28 -0
- package/dist/src/auth/settings.js +23 -0
- package/dist/src/auth/settings.js.map +1 -1
- package/dist/src/auth/sidecar/sidecarAuthProvider.d.ts +3 -0
- package/dist/src/auth/sidecar/sidecarAuthProvider.js.map +1 -1
- package/dist/src/auth/sidecar/sidecarHttpClient.d.ts +1 -9
- package/dist/src/auth/sidecar/sidecarHttpClient.js +3 -69
- package/dist/src/auth/sidecar/sidecarHttpClient.js.map +1 -1
- package/dist/src/baseAdapter.d.ts +6 -0
- package/dist/src/baseAdapter.js.map +1 -1
- package/dist/src/cards/taskModuleAction.d.ts +6 -0
- package/dist/src/cards/taskModuleAction.js +6 -0
- package/dist/src/cards/taskModuleAction.js.map +1 -1
- package/dist/src/cloudAdapter.d.ts +29 -0
- package/dist/src/cloudAdapter.js +45 -8
- package/dist/src/cloudAdapter.js.map +1 -1
- package/dist/src/configuration/configuration.d.ts +1 -0
- package/dist/src/configuration/configuration.js +2 -1
- package/dist/src/configuration/configuration.js.map +1 -1
- package/dist/src/configuration/environmentConfiguration.js +1 -1
- package/dist/src/configuration/environmentConfiguration.js.map +1 -1
- package/dist/src/connector-client/connectorClient.d.ts +8 -0
- package/dist/src/connector-client/connectorClient.js +8 -0
- package/dist/src/connector-client/connectorClient.js.map +1 -1
- package/dist/src/createCloudAdapter.d.ts +2 -0
- package/dist/src/createCloudAdapter.js.map +1 -1
- package/dist/src/errorHelper.d.ts +1 -0
- package/dist/src/errorHelper.js +9 -0
- package/dist/src/errorHelper.js.map +1 -1
- package/dist/src/headerPropagation.d.ts +38 -0
- package/dist/src/headerPropagation.js +33 -0
- package/dist/src/headerPropagation.js.map +1 -1
- package/dist/src/httpClient.d.ts +58 -0
- package/dist/src/httpClient.js +40 -0
- package/dist/src/httpClient.js.map +1 -1
- package/dist/src/interfaces/webResponse.d.ts +7 -0
- package/dist/src/middlewareSet.d.ts +6 -0
- package/dist/src/middlewareSet.js.map +1 -1
- package/dist/src/oauth/userTokenClient.d.ts +6 -0
- package/dist/src/oauth/userTokenClient.js +12 -0
- package/dist/src/oauth/userTokenClient.js.map +1 -1
- package/dist/src/outboundHostValidator.d.ts +33 -1
- package/dist/src/outboundHostValidator.js +60 -25
- package/dist/src/outboundHostValidator.js.map +1 -1
- package/dist/src/storage/fileStorage.d.ts +26 -0
- package/dist/src/storage/fileStorage.js +35 -6
- package/dist/src/storage/fileStorage.js.map +1 -1
- package/dist/src/storage/memoryStorage.d.ts +34 -0
- package/dist/src/storage/memoryStorage.js +41 -4
- package/dist/src/storage/memoryStorage.js.map +1 -1
- package/dist/src/storage/storage.d.ts +20 -0
- package/dist/src/storage/storage.js +7 -0
- package/dist/src/storage/storage.js.map +1 -1
- package/dist/src/storage/storageCompatibility.js +12 -6
- package/dist/src/storage/storageCompatibility.js.map +1 -1
- package/dist/src/storage/storageExpiry.d.ts +7 -0
- package/dist/src/storage/storageExpiry.js +7 -0
- package/dist/src/storage/storageExpiry.js.map +1 -1
- package/dist/src/turnContext.d.ts +10 -0
- package/dist/src/turnContext.js +5 -0
- package/dist/src/turnContext.js.map +1 -1
- package/dist/src/utils/env.js +22 -11
- package/dist/src/utils/env.js.map +1 -1
- package/dist/src/utils/ipAddress.d.ts +6 -0
- package/dist/src/utils/ipAddress.js +64 -0
- package/dist/src/utils/ipAddress.js.map +1 -0
- package/dist/src/utils/outboundUrl.d.ts +7 -0
- package/dist/src/utils/outboundUrl.js +52 -0
- package/dist/src/utils/outboundUrl.js.map +1 -0
- package/dist/src/utils.js +2 -1
- package/dist/src/utils.js.map +1 -1
- package/package.json +4 -4
- package/src/activityHandler.ts +9 -3
- package/src/agent-client/agentResponseHandler.ts +7 -0
- package/src/agent-client/createAgentResponseHandler.ts +2 -0
- package/src/app/adaptiveCards/adaptiveCardsActions.ts +1 -0
- package/src/app/attachmentDownloadHttpClient.ts +80 -0
- package/src/app/attachmentDownloader.ts +6 -9
- package/src/app/auth/authorization.ts +58 -0
- package/src/app/proactive/conversation.ts +24 -0
- package/src/app/proactive/conversationBuilder.ts +3 -1
- package/src/app/proactive/conversationReferenceBuilder.ts +12 -4
- package/src/app/proactive/createConversationOptionsBuilder.ts +5 -1
- package/src/app/proactive/proactive.ts +33 -1
- package/src/app/routeList.ts +30 -3
- package/src/app/teamsAttachmentDownloader.ts +17 -10
- package/src/auth/authConfiguration.ts +1 -0
- package/src/auth/authConstants.ts +7 -0
- package/src/auth/authProvider.ts +36 -0
- package/src/auth/connectionManager.ts +3 -1
- package/src/auth/connections.ts +1 -0
- package/src/auth/msal/msalConnectionManager.ts +7 -0
- package/src/auth/msal/msalTokenProvider.ts +59 -0
- package/src/auth/settings.ts +28 -0
- package/src/auth/sidecar/sidecarAuthProvider.ts +4 -0
- package/src/auth/sidecar/sidecarHttpClient.ts +3 -63
- package/src/baseAdapter.ts +6 -0
- package/src/cards/taskModuleAction.ts +6 -0
- package/src/cloudAdapter.ts +59 -10
- package/src/configuration/configuration.ts +4 -2
- package/src/configuration/environmentConfiguration.ts +7 -1
- package/src/connector-client/connectorClient.ts +8 -0
- package/src/createCloudAdapter.ts +2 -0
- package/src/errorHelper.ts +11 -0
- package/src/headerPropagation.ts +38 -0
- package/src/httpClient.ts +58 -0
- package/src/interfaces/webResponse.ts +7 -0
- package/src/middlewareSet.ts +6 -0
- package/src/oauth/userTokenClient.ts +13 -0
- package/src/outboundHostValidator.ts +84 -23
- package/src/storage/fileStorage.ts +46 -6
- package/src/storage/memoryStorage.ts +45 -4
- package/src/storage/storage.ts +20 -0
- package/src/storage/storageCompatibility.ts +18 -6
- package/src/storage/storageExpiry.ts +7 -0
- package/src/turnContext.ts +11 -0
- package/src/utils/env.ts +33 -11
- package/src/utils/ipAddress.ts +63 -0
- package/src/utils/outboundUrl.ts +50 -0
- package/src/utils.ts +3 -1
|
@@ -71,8 +71,14 @@ export declare class TurnContext {
|
|
|
71
71
|
*
|
|
72
72
|
* @param adapterOrContext The adapter that created this context, or another TurnContext to clone
|
|
73
73
|
* @param request The activity for the turn (required when first parameter is an adapter)
|
|
74
|
+
* @param identity The authenticated identity for the turn.
|
|
74
75
|
*/
|
|
75
76
|
constructor(adapterOrContext: BaseAdapter, request: Activity, identity?: JwtPayload);
|
|
77
|
+
/**
|
|
78
|
+
* Creates a context by copying another turn context.
|
|
79
|
+
*
|
|
80
|
+
* @param adapterOrContext The turn context to copy.
|
|
81
|
+
*/
|
|
76
82
|
constructor(adapterOrContext: TurnContext);
|
|
77
83
|
/**
|
|
78
84
|
* A list of reply activities that are buffered until the end of the turn.
|
|
@@ -215,6 +221,7 @@ export declare class TurnContext {
|
|
|
215
221
|
* and triggered the creation of this context.
|
|
216
222
|
*/
|
|
217
223
|
get activity(): Activity;
|
|
224
|
+
/** Gets the authenticated identity for the turn. */
|
|
218
225
|
get identity(): JwtPayload;
|
|
219
226
|
/**
|
|
220
227
|
* Gets or sets whether the turn has sent a response to the user.
|
|
@@ -224,6 +231,7 @@ export declare class TurnContext {
|
|
|
224
231
|
* activity. Once set to true, it cannot be set back to false.
|
|
225
232
|
*/
|
|
226
233
|
get responded(): boolean;
|
|
234
|
+
/** Marks the turn as having sent a response. */
|
|
227
235
|
set responded(value: boolean);
|
|
228
236
|
/**
|
|
229
237
|
* Gets or sets the locale for the turn.
|
|
@@ -233,6 +241,7 @@ export declare class TurnContext {
|
|
|
233
241
|
* formatting dates or numbers.
|
|
234
242
|
*/
|
|
235
243
|
get locale(): string | undefined;
|
|
244
|
+
/** Sets the locale stored in the turn state. */
|
|
236
245
|
set locale(value: string | undefined);
|
|
237
246
|
/**
|
|
238
247
|
* Gets the turn state collection for storing data during the turn.
|
|
@@ -243,6 +252,7 @@ export declare class TurnContext {
|
|
|
243
252
|
* the processing of the current turn.
|
|
244
253
|
*/
|
|
245
254
|
get turnState(): TurnContextStateCollection;
|
|
255
|
+
/** Gets the streaming response associated with this context. */
|
|
246
256
|
get streamingResponse(): StreamingResponse;
|
|
247
257
|
/**
|
|
248
258
|
* Emits events to registered middleware handlers.
|
package/dist/src/turnContext.js
CHANGED
|
@@ -31,6 +31,7 @@ exports.AgentCallbackHandlerKey = 'agentCallbackHandler';
|
|
|
31
31
|
* This class follows the builder pattern for registering middleware handlers.
|
|
32
32
|
*/
|
|
33
33
|
class TurnContext {
|
|
34
|
+
/** Implements the adapter and copy constructor overloads. */
|
|
34
35
|
constructor(adapterOrContext, request, identity) {
|
|
35
36
|
this._respondedRef = { responded: false };
|
|
36
37
|
this._turnState = new turnContextStateCollection_1.TurnContextStateCollection();
|
|
@@ -306,6 +307,7 @@ class TurnContext {
|
|
|
306
307
|
get activity() {
|
|
307
308
|
return this._activity;
|
|
308
309
|
}
|
|
310
|
+
/** Gets the authenticated identity for the turn. */
|
|
309
311
|
get identity() {
|
|
310
312
|
return this._identity;
|
|
311
313
|
}
|
|
@@ -319,6 +321,7 @@ class TurnContext {
|
|
|
319
321
|
get responded() {
|
|
320
322
|
return this._respondedRef.responded;
|
|
321
323
|
}
|
|
324
|
+
/** Marks the turn as having sent a response. */
|
|
322
325
|
set responded(value) {
|
|
323
326
|
if (!value) {
|
|
324
327
|
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.CannotSetRespondedToFalse);
|
|
@@ -339,6 +342,7 @@ class TurnContext {
|
|
|
339
342
|
}
|
|
340
343
|
return undefined;
|
|
341
344
|
}
|
|
345
|
+
/** Sets the locale stored in the turn state. */
|
|
342
346
|
set locale(value) {
|
|
343
347
|
let turnObj = this._turnState.get(this._turn);
|
|
344
348
|
if (turnObj) {
|
|
@@ -360,6 +364,7 @@ class TurnContext {
|
|
|
360
364
|
get turnState() {
|
|
361
365
|
return this._turnState;
|
|
362
366
|
}
|
|
367
|
+
/** Gets the streaming response associated with this context. */
|
|
363
368
|
get streamingResponse() {
|
|
364
369
|
return this._streamingResponse;
|
|
365
370
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turnContext.js","sourceRoot":"","sources":["../../src/turnContext.ts"],"names":[],"mappings":";;;AAAA,oGAAoG;AACpG,uDAAuD;AAEvD,gEAAuI;AAEvI,6EAAyE;AAGzE,yEAAqE;AAErE,kEAAmD;AACnD,mDAA6D;AAC7D,+CAAsC;AAgCtC;;GAEG;AACU,QAAA,uBAAuB,GAAG,sBAAsB,CAAA;AAE7D;;;;;;;;;;;;;;;;GAgBG;AACH;
|
|
1
|
+
{"version":3,"file":"turnContext.js","sourceRoot":"","sources":["../../src/turnContext.ts"],"names":[],"mappings":"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"}
|
package/dist/src/utils/env.js
CHANGED
|
@@ -63,15 +63,19 @@ exports.envParserUtils = {
|
|
|
63
63
|
* unrecognized.
|
|
64
64
|
*/
|
|
65
65
|
function parseBooleanEnv(value) {
|
|
66
|
-
if (value === undefined)
|
|
66
|
+
if (value === undefined) {
|
|
67
67
|
return undefined;
|
|
68
|
+
}
|
|
68
69
|
const v = value.trim().toLowerCase();
|
|
69
|
-
if (v === 'true' || v === '1')
|
|
70
|
+
if (v === 'true' || v === '1') {
|
|
70
71
|
return true;
|
|
71
|
-
|
|
72
|
+
}
|
|
73
|
+
if (v === '') {
|
|
72
74
|
return undefined;
|
|
73
|
-
|
|
75
|
+
}
|
|
76
|
+
if (v === 'false' || v === '0') {
|
|
74
77
|
return false;
|
|
78
|
+
}
|
|
75
79
|
return undefined;
|
|
76
80
|
}
|
|
77
81
|
/**
|
|
@@ -83,8 +87,9 @@ function parseBooleanEnv(value) {
|
|
|
83
87
|
* @returns A finite integer, or `fallback` when the input cannot be parsed.
|
|
84
88
|
*/
|
|
85
89
|
function parseIntEnv(value, fallback) {
|
|
86
|
-
if (value === undefined || value.trim() === '')
|
|
90
|
+
if (value === undefined || value.trim() === '') {
|
|
87
91
|
return fallback;
|
|
92
|
+
}
|
|
88
93
|
const parsed = parseInt(value, 10);
|
|
89
94
|
return Number.isNaN(parsed) ? fallback : parsed;
|
|
90
95
|
}
|
|
@@ -107,8 +112,9 @@ function parseIntEnv(value, fallback) {
|
|
|
107
112
|
* @param maxDistance - Maximum edit distance to consider a match (default 2).
|
|
108
113
|
*/
|
|
109
114
|
function suggestClosest(input, candidates, maxDistance = 2) {
|
|
110
|
-
if (!input)
|
|
115
|
+
if (!input) {
|
|
111
116
|
return undefined;
|
|
117
|
+
}
|
|
112
118
|
const a = input.toLowerCase();
|
|
113
119
|
const cutoff = Math.min(maxDistance, Math.max(1, Math.ceil(a.length / 2)));
|
|
114
120
|
let best;
|
|
@@ -116,23 +122,28 @@ function suggestClosest(input, candidates, maxDistance = 2) {
|
|
|
116
122
|
const d = levenshtein(a, candidate.toLowerCase());
|
|
117
123
|
if (d <= cutoff && (!best || d < best.distance)) {
|
|
118
124
|
best = { name: candidate, distance: d };
|
|
119
|
-
if (d === 0)
|
|
125
|
+
if (d === 0) {
|
|
120
126
|
break;
|
|
127
|
+
}
|
|
121
128
|
}
|
|
122
129
|
}
|
|
123
130
|
return best === null || best === void 0 ? void 0 : best.name;
|
|
124
131
|
}
|
|
125
132
|
/** Standard Levenshtein edit distance using a single-row dynamic-programming table. */
|
|
126
133
|
function levenshtein(a, b) {
|
|
127
|
-
if (a === b)
|
|
134
|
+
if (a === b) {
|
|
128
135
|
return 0;
|
|
129
|
-
|
|
136
|
+
}
|
|
137
|
+
if (a.length === 0) {
|
|
130
138
|
return b.length;
|
|
131
|
-
|
|
139
|
+
}
|
|
140
|
+
if (b.length === 0) {
|
|
132
141
|
return a.length;
|
|
142
|
+
}
|
|
133
143
|
const row = new Array(b.length + 1);
|
|
134
|
-
for (let j = 0; j <= b.length; j++)
|
|
144
|
+
for (let j = 0; j <= b.length; j++) {
|
|
135
145
|
row[j] = j;
|
|
146
|
+
}
|
|
136
147
|
for (let i = 1; i <= a.length; i++) {
|
|
137
148
|
let prev = i - 1;
|
|
138
149
|
row[0] = i;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/utils/env.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kCAAkC;;;;;;;;AAmBlC;;;GAGG;AACH,yBACE,QAA8C,EAC9C,WAAW,GAAsB,OAAO,CAAC,GAAG;IAE5C,MAAM,GAAG,GAAY,EAAE,CAAA;IACvB,KAAK,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7D,IAAI,EAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,EAAE,CAAA,EAAE,CAAC;YACtB,SAAQ;QACV,CAAC;QAED,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;QAC5D,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;GAEG;AACH,mBACE,QAAyD;IAEzD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAQ,CAAA;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACzC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,GAAG,CAAA;QAC5B,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,EAAuB,CAAC,CAAA;IAE3B,OAAO;QACL,IAAI;QACJ,KAAK,CAAE,GAAM,EAAE,KAAa;;YAC1B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;YAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,CAAA;YACX,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAA;YACrC,OAAO,EAAE,GAAG,QAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,GAAG,mCAAI,KAAK,EAAE,KAAK,EAAE,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,KAAK,EAAE,CAAA;QAC5D,CAAC;KACF,CAAA;AACH,CAAC;AAEY,QAAA,cAAc,GAAG;IAC5B,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;IACtC,QAAQ,EAAE,CACR,MAAc,EACd,GAAmC,EACnC,EAAE,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC;CACjD,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,yBAAiC,KAAyB;IACxD,IAAI,KAAK,KAAK,SAAS;
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/utils/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.isPrivateOrLoopbackAddress = isPrivateOrLoopbackAddress;
|
|
8
|
+
exports.isBlockedOutboundAddress = isBlockedOutboundAddress;
|
|
9
|
+
const node_net_1 = require("node:net");
|
|
10
|
+
function normalizeAddress(address) {
|
|
11
|
+
const unwrapped = address.startsWith('[') && address.endsWith(']') ? address.slice(1, -1) : address;
|
|
12
|
+
const version = (0, node_net_1.isIP)(unwrapped);
|
|
13
|
+
if (version === 0) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
return version === 6 ? new URL(`http://[${unwrapped}]`).hostname.slice(1, -1) : unwrapped;
|
|
17
|
+
}
|
|
18
|
+
function mappedIPv4(address) {
|
|
19
|
+
const match = address.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/);
|
|
20
|
+
if (!match) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
const high = parseInt(match[1], 16);
|
|
24
|
+
const low = parseInt(match[2], 16);
|
|
25
|
+
return `${high >> 8}.${high & 0xff}.${low >> 8}.${low & 0xff}`;
|
|
26
|
+
}
|
|
27
|
+
function isPrivateOrLoopbackAddress(address) {
|
|
28
|
+
var _a;
|
|
29
|
+
const normalized = normalizeAddress(address);
|
|
30
|
+
if (!normalized) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
const ipv4 = (_a = mappedIPv4(normalized)) !== null && _a !== void 0 ? _a : normalized;
|
|
34
|
+
if ((0, node_net_1.isIP)(ipv4) === 4) {
|
|
35
|
+
const bytes = ipv4.split('.').map(Number);
|
|
36
|
+
return bytes[0] === 127 ||
|
|
37
|
+
bytes[0] === 10 ||
|
|
38
|
+
(bytes[0] === 172 && bytes[1] >= 16 && bytes[1] <= 31) ||
|
|
39
|
+
(bytes[0] === 192 && bytes[1] === 168) ||
|
|
40
|
+
(bytes[0] === 169 && bytes[1] === 254);
|
|
41
|
+
}
|
|
42
|
+
if (normalized === '::1') {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
const firstHextet = parseInt(normalized.split(':')[0], 16);
|
|
46
|
+
return (firstHextet & 0xfe00) === 0xfc00 ||
|
|
47
|
+
(firstHextet & 0xffc0) === 0xfe80 ||
|
|
48
|
+
(firstHextet & 0xffc0) === 0xfec0;
|
|
49
|
+
}
|
|
50
|
+
function isBlockedOutboundAddress(address) {
|
|
51
|
+
var _a;
|
|
52
|
+
const normalized = normalizeAddress(address);
|
|
53
|
+
if (!normalized) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
const ipv4 = (_a = mappedIPv4(normalized)) !== null && _a !== void 0 ? _a : normalized;
|
|
57
|
+
const [first, second] = ipv4.split('.').map(Number);
|
|
58
|
+
// RFC 6598 shared space is outbound-only; it must not become trusted sidecar space.
|
|
59
|
+
return normalized === '::' ||
|
|
60
|
+
ipv4 === '0.0.0.0' ||
|
|
61
|
+
(first === 100 && second >= 64 && second <= 127) ||
|
|
62
|
+
isPrivateOrLoopbackAddress(normalized);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=ipAddress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ipAddress.js","sourceRoot":"","sources":["../../../src/utils/ipAddress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
export declare function getHttpsUrl(input: string | URL | null | undefined): URL | undefined;
|
|
6
|
+
export declare function isLocalOrBlockedHost(host: string): boolean;
|
|
7
|
+
export declare function hasAllowedOutboundAddresses(url: URL, allowPrivateNetworkAddresses?: boolean): Promise<boolean>;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.getHttpsUrl = getHttpsUrl;
|
|
8
|
+
exports.isLocalOrBlockedHost = isLocalOrBlockedHost;
|
|
9
|
+
exports.hasAllowedOutboundAddresses = hasAllowedOutboundAddresses;
|
|
10
|
+
const node_dns_1 = require("node:dns");
|
|
11
|
+
const node_net_1 = require("node:net");
|
|
12
|
+
const agents_telemetry_1 = require("@microsoft/agents-telemetry");
|
|
13
|
+
const ipAddress_1 = require("./ipAddress");
|
|
14
|
+
const logger = (0, agents_telemetry_1.debug)('agents:outboundHostValidator');
|
|
15
|
+
function getHttpsUrl(input) {
|
|
16
|
+
if (!input) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const url = input instanceof URL ? input : new URL(input);
|
|
21
|
+
return url.protocol === 'https:' && !url.username && !url.password ? url : undefined;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function isLocalOrBlockedHost(host) {
|
|
28
|
+
const unwrapped = host.startsWith('[') && host.endsWith(']') ? host.slice(1, -1) : host;
|
|
29
|
+
return host === 'localhost' || host.endsWith('.localhost') ||
|
|
30
|
+
((0, node_net_1.isIP)(unwrapped) !== 0 && (0, ipAddress_1.isBlockedOutboundAddress)(unwrapped));
|
|
31
|
+
}
|
|
32
|
+
async function hasAllowedOutboundAddresses(url, allowPrivateNetworkAddresses = false) {
|
|
33
|
+
if (allowPrivateNetworkAddresses) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
const host = url.hostname.replace(/^\[|\]$/g, '').replace(/\.$/, '');
|
|
37
|
+
if (isLocalOrBlockedHost(host)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
if ((0, node_net_1.isIP)(host) !== 0) {
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
const addresses = await node_dns_1.promises.lookup(host, { all: true });
|
|
45
|
+
return addresses.length > 0 && addresses.every(({ address }) => !(0, ipAddress_1.isBlockedOutboundAddress)(address));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
logger.warn(`Attachment destination DNS lookup failed. Host='${host}'`);
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=outboundUrl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outboundUrl.js","sourceRoot":"","sources":["../../../src/utils/outboundUrl.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAEH,uCAA0C;AAC1C,uCAA+B;AAC/B,kEAAmD;AACnD,2CAAsD;AAEtD,MAAM,MAAM,GAAG,IAAA,wBAAK,EAAC,8BAA8B,CAAC,CAAA;AAEpD,qBAA6B,KAAsC;IACjE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAA;QACzD,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;IACtF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,8BAAsC,IAAY;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACvF,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxD,CAAC,IAAA,eAAI,EAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAA,oCAAwB,EAAC,SAAS,CAAC,CAAC,CAAA;AAClE,CAAC;AAEM,KAAK,sCAAuC,GAAQ,EAAE,4BAA4B,GAAG,KAAK;IAC/F,IAAI,4BAA4B,EAAE,CAAC;QACjC,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACpE,IAAI,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAA;IACd,CAAC;IACD,IAAI,IAAA,eAAI,EAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,mBAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAA;QACvD,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,IAAA,oCAAwB,EAAC,OAAO,CAAC,CAAC,CAAA;IACrG,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,mDAAmD,IAAI,GAAG,CAAC,CAAA;QACvE,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
|
package/dist/src/utils.js
CHANGED
package/dist/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;;GAIG;AACI,MAAM,KAAK,GAAG,CAAgC,GAAM,EAAE,EAAE;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;IAC9E,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAM,CAAA;AACzC,CAAC,CAAA;AAHY,QAAA,KAAK,GAAL,KAAK,CAGjB;AAEM,MAAM,YAAY,GAAG,CAC1B,GAAG,MAA2C,EAC3C,EAAE;IACL,MAAM,MAAM,GAAe,EAAE,CAAA;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;;GAIG;AACI,MAAM,KAAK,GAAG,CAAgC,GAAM,EAAE,EAAE;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;IAC9E,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAM,CAAA;AACzC,CAAC,CAAA;AAHY,QAAA,KAAK,GAAL,KAAK,CAGjB;AAEM,MAAM,YAAY,GAAG,CAC1B,GAAG,MAA2C,EAC3C,EAAE;IACL,MAAM,MAAM,GAAe,EAAE,CAAA;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAA,QAAA,KAAK,EAAC,KAAK,CAAC,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IACD,OAAO,MAAW,CAAA;AACpB,CAAC,CAAA;AAVY,QAAA,YAAY,GAAZ,YAAY,CAUxB"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@microsoft/agents-hosting",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.10.0-beta.14.ge6d1defc27",
|
|
5
5
|
"homepage": "https://github.com/microsoft/Agents-for-js",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@azure/core-auth": "1.10.1",
|
|
23
23
|
"@azure/msal-node": "5.6.0",
|
|
24
|
-
"@microsoft/agents-activity": "1.
|
|
25
|
-
"@microsoft/agents-telemetry": "1.
|
|
24
|
+
"@microsoft/agents-activity": "1.10.0-beta.14.ge6d1defc27",
|
|
25
|
+
"@microsoft/agents-telemetry": "1.10.0-beta.14.ge6d1defc27",
|
|
26
26
|
"jsonwebtoken": "9.0.3",
|
|
27
27
|
"jwks-rsa": "4.0.1",
|
|
28
28
|
"zod": "3.25.75"
|
|
@@ -43,6 +43,6 @@
|
|
|
43
43
|
"./package.json": "./package.json"
|
|
44
44
|
},
|
|
45
45
|
"engines": {
|
|
46
|
-
"node": ">=
|
|
46
|
+
"node": ">=22.0.0"
|
|
47
47
|
}
|
|
48
48
|
}
|
package/src/activityHandler.ts
CHANGED
|
@@ -255,9 +255,15 @@ export class ActivityHandler {
|
|
|
255
255
|
* @throws Error if context is missing, activity is missing, or activity type is missing
|
|
256
256
|
*/
|
|
257
257
|
async run (context: TurnContext): Promise<void> {
|
|
258
|
-
if (!context)
|
|
259
|
-
|
|
260
|
-
|
|
258
|
+
if (!context) {
|
|
259
|
+
throw ExceptionHelper.generateException(Error, Errors.MissingTurnContext)
|
|
260
|
+
}
|
|
261
|
+
if (!context.activity) {
|
|
262
|
+
throw ExceptionHelper.generateException(Error, Errors.TurnContextMissingActivity)
|
|
263
|
+
}
|
|
264
|
+
if (!context.activity.type) {
|
|
265
|
+
throw ExceptionHelper.generateException(Error, Errors.ActivityMissingType)
|
|
266
|
+
}
|
|
261
267
|
|
|
262
268
|
await this.handle(context, 'Turn', async () => {
|
|
263
269
|
await this.onTurnActivity(context)
|
|
@@ -24,6 +24,13 @@ import { AGENT_RESPONSE_ROUTE_PATH, createAgentResponseHandler } from './createA
|
|
|
24
24
|
* `post(path, handler)` method structurally matches satisfies it.
|
|
25
25
|
*/
|
|
26
26
|
export interface WebApp {
|
|
27
|
+
/**
|
|
28
|
+
* Registers a handler for HTTP POST requests at the specified path.
|
|
29
|
+
*
|
|
30
|
+
* @param path - Route path to register.
|
|
31
|
+
* @param handler - Request handler invoked for matching requests.
|
|
32
|
+
* @returns A framework-specific registration result.
|
|
33
|
+
*/
|
|
27
34
|
post (
|
|
28
35
|
path: string,
|
|
29
36
|
handler: (req: any, res: any) => unknown | Promise<unknown>
|
|
@@ -33,7 +33,9 @@ interface DelegatedConversationState {
|
|
|
33
33
|
* the framework's URL path parser.
|
|
34
34
|
*/
|
|
35
35
|
export interface AgentResponseHandlerParams {
|
|
36
|
+
/** ID of the conversation receiving the callback activity. */
|
|
36
37
|
conversationId: string
|
|
38
|
+
/** ID to assign to the callback activity. */
|
|
37
39
|
activityId: string
|
|
38
40
|
}
|
|
39
41
|
|
|
@@ -13,6 +13,7 @@ import { AdaptiveCard } from '../../cards/adaptiveCard'
|
|
|
13
13
|
import { Query } from './query'
|
|
14
14
|
import { Errors } from '../../errorHelper'
|
|
15
15
|
|
|
16
|
+
/** Invoke activity name used for Adaptive Card actions. */
|
|
16
17
|
export const ACTION_INVOKE_NAME = 'adaptiveCard/action'
|
|
17
18
|
const ACTION_EXECUTE_TYPE = 'Action.Execute'
|
|
18
19
|
const DEFAULT_ACTION_SUBMIT_FILTER = 'verb'
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { ExceptionHelper } from '@microsoft/agents-activity'
|
|
7
|
+
import { debug } from '@microsoft/agents-telemetry'
|
|
8
|
+
import { Errors } from '../errorHelper'
|
|
9
|
+
import { HttpClient, HttpError, HttpResponse } from '../httpClient'
|
|
10
|
+
import { OutboundHostValidator, OutboundUrlPolicy } from '../outboundHostValidator'
|
|
11
|
+
import { getHttpsUrl, hasAllowedOutboundAddresses } from '../utils/outboundUrl'
|
|
12
|
+
|
|
13
|
+
const logger = debug('agents:attachmentDownloader')
|
|
14
|
+
const REDIRECT_STATUSES = new Set([300, 301, 302, 303, 307, 308])
|
|
15
|
+
const MAX_REDIRECTS = 50
|
|
16
|
+
|
|
17
|
+
export class AttachmentDownloadHttpClient {
|
|
18
|
+
public constructor (
|
|
19
|
+
private readonly httpClient: HttpClient,
|
|
20
|
+
private readonly hostValidator: OutboundUrlPolicy
|
|
21
|
+
) {}
|
|
22
|
+
|
|
23
|
+
public async get (url: string, headers: Record<string, string> = {}): Promise<HttpResponse<ArrayBuffer> | undefined> {
|
|
24
|
+
if (!this.hostValidator.enabled) {
|
|
25
|
+
if (!this.hostValidator.isAllowed(url)) {
|
|
26
|
+
return this.blocked(url)
|
|
27
|
+
}
|
|
28
|
+
return this.httpClient.get<ArrayBuffer>(url, { headers, responseType: 'arraybuffer' })
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
let currentUrl = url
|
|
32
|
+
for (let redirects = 0; ; redirects++) {
|
|
33
|
+
const parsed = getHttpsUrl(currentUrl)
|
|
34
|
+
const allowed = parsed && (this.hostValidator instanceof OutboundHostValidator
|
|
35
|
+
? await this.hostValidator.isAllowedAsync(parsed)
|
|
36
|
+
: this.hostValidator.isAllowed(currentUrl) && await hasAllowedOutboundAddresses(parsed))
|
|
37
|
+
if (!allowed) {
|
|
38
|
+
return this.blocked(currentUrl)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const requestHeaders = new Headers(redirects === 0 ? headers : undefined)
|
|
42
|
+
const response = await fetch(currentUrl, { method: 'GET', headers: requestHeaders, redirect: 'manual' })
|
|
43
|
+
const location = response.headers.get('location')
|
|
44
|
+
if (REDIRECT_STATUSES.has(response.status) && location) {
|
|
45
|
+
await response.body?.cancel()
|
|
46
|
+
if (redirects >= MAX_REDIRECTS) {
|
|
47
|
+
throw ExceptionHelper.generateException(Error, Errors.AttachmentDownloadRedirectLimit)
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
currentUrl = new URL(location, currentUrl).href
|
|
51
|
+
} catch {
|
|
52
|
+
throw ExceptionHelper.generateException(Error, Errors.AttachmentDownloadInvalidRedirect)
|
|
53
|
+
}
|
|
54
|
+
continue
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const config = { method: 'get', url: currentUrl, responseType: 'arraybuffer' as const }
|
|
58
|
+
const result: HttpResponse<ArrayBuffer> = {
|
|
59
|
+
data: await response.arrayBuffer(),
|
|
60
|
+
status: response.status,
|
|
61
|
+
statusText: response.statusText,
|
|
62
|
+
headers: response.headers,
|
|
63
|
+
config
|
|
64
|
+
}
|
|
65
|
+
if (!response.ok) {
|
|
66
|
+
throw new HttpError(`Request failed with status ${response.status}`, result, config)
|
|
67
|
+
}
|
|
68
|
+
return result
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
private blocked (input: string): undefined {
|
|
73
|
+
let host = '[invalid-url]'
|
|
74
|
+
try {
|
|
75
|
+
host = new URL(input).hostname
|
|
76
|
+
} catch { /* Invalid URLs have no safe host to log. */ }
|
|
77
|
+
logger.warn(`Attachment destination blocked by outbound policy or address validation. Host='${host}'`)
|
|
78
|
+
return undefined
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -13,6 +13,7 @@ import { debug } from '@microsoft/agents-telemetry'
|
|
|
13
13
|
import { loadAuthConfigFromEnv, MsalTokenProvider } from '../auth'
|
|
14
14
|
import { createOutboundHostValidator, OutboundUrlPolicy } from '../outboundHostValidator'
|
|
15
15
|
import { Connections } from '../auth/connections'
|
|
16
|
+
import { AttachmentDownloadHttpClient } from './attachmentDownloadHttpClient'
|
|
16
17
|
|
|
17
18
|
const logger = debug('agents:attachmentDownloader')
|
|
18
19
|
|
|
@@ -24,6 +25,8 @@ const logger = debug('agents:attachmentDownloader')
|
|
|
24
25
|
* @remarks
|
|
25
26
|
* This class provides functionality to filter and download attachments from a turn context,
|
|
26
27
|
* supporting various content types and handling authentication for secure URLs.
|
|
28
|
+
* Enabled outbound validation requires HTTPS and validates addresses at every redirect.
|
|
29
|
+
* Initial request credentials are not forwarded to redirects when validation is enabled.
|
|
27
30
|
*
|
|
28
31
|
*/
|
|
29
32
|
export class AttachmentDownloader<TState extends TurnState = TurnState> implements InputFileDownloader<TState> {
|
|
@@ -103,18 +106,12 @@ export class AttachmentDownloader<TState extends TurnState = TurnState> implemen
|
|
|
103
106
|
if (accessToken.length > 0) {
|
|
104
107
|
headers.Authorization = `Bearer ${accessToken}`
|
|
105
108
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
logger.warn(`Attachment contentUrl host is not in the configured allowed hosts. Host='${host}'`)
|
|
109
|
+
const response = await new AttachmentDownloadHttpClient(this._httpClient, this._hostValidator)
|
|
110
|
+
.get(attachment.contentUrl, headers)
|
|
111
|
+
if (!response) {
|
|
110
112
|
return undefined
|
|
111
113
|
}
|
|
112
114
|
|
|
113
|
-
const response = await this._httpClient.get(attachment.contentUrl, {
|
|
114
|
-
headers,
|
|
115
|
-
responseType: 'arraybuffer'
|
|
116
|
-
})
|
|
117
|
-
|
|
118
115
|
const content = Buffer.from(response.data as ArrayBuffer)
|
|
119
116
|
|
|
120
117
|
let contentType = attachment.contentType
|