@microsoft/agents-hosting 1.7.0-beta.1.g8bcd4f11a7 → 1.7.0-beta.11.gb5d3e8c751
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 +25 -0
- package/dist/package.json +3 -3
- package/dist/src/agent-client/agentClient.d.ts +4 -0
- package/dist/src/agent-client/agentClient.js +32 -18
- package/dist/src/agent-client/agentClient.js.map +1 -1
- package/dist/src/agent-client/agentResponseHandler.d.ts +27 -6
- package/dist/src/agent-client/agentResponseHandler.js +18 -55
- package/dist/src/agent-client/agentResponseHandler.js.map +1 -1
- package/dist/src/agent-client/createAgentResponseHandler.d.ts +48 -0
- package/dist/src/agent-client/createAgentResponseHandler.js +134 -0
- package/dist/src/agent-client/createAgentResponseHandler.js.map +1 -0
- package/dist/src/agent-client/index.d.ts +1 -0
- package/dist/src/agent-client/index.js +1 -0
- package/dist/src/agent-client/index.js.map +1 -1
- package/dist/src/app/adaptiveCards/activityValueParsers.js +2 -2
- package/dist/src/app/adaptiveCards/activityValueParsers.js.map +1 -1
- package/dist/src/app/adaptiveCards/adaptiveCardsActions.js +13 -12
- package/dist/src/app/adaptiveCards/adaptiveCardsActions.js.map +1 -1
- package/dist/src/app/agentApplication.d.ts +4 -0
- package/dist/src/app/agentApplication.js +20 -8
- package/dist/src/app/agentApplication.js.map +1 -1
- package/dist/src/app/streaming/streamingResponse.js +2 -2
- package/dist/src/app/streaming/streamingResponse.js.map +1 -1
- package/dist/src/app/turnState.d.ts +0 -1
- package/dist/src/app/turnState.js +15 -14
- package/dist/src/app/turnState.js.map +1 -1
- package/dist/src/app/turnStateProperty.js +4 -2
- package/dist/src/app/turnStateProperty.js.map +1 -1
- package/dist/src/auth/authConfiguration.js +5 -3
- package/dist/src/auth/authConfiguration.js.map +1 -1
- package/dist/src/auth/index.d.ts +1 -0
- package/dist/src/auth/index.js +1 -0
- package/dist/src/auth/index.js.map +1 -1
- package/dist/src/auth/jwt-middleware.d.ts +8 -2
- package/dist/src/auth/jwt-middleware.js +112 -14
- package/dist/src/auth/jwt-middleware.js.map +1 -1
- package/dist/src/auth/msal/msalTokenProvider.js +16 -16
- package/dist/src/auth/msal/msalTokenProvider.js.map +1 -1
- package/dist/src/baseAdapter.js +3 -1
- package/dist/src/baseAdapter.js.map +1 -1
- package/dist/src/cloudAdapter.d.ts +15 -2
- package/dist/src/cloudAdapter.js +28 -10
- package/dist/src/cloudAdapter.js.map +1 -1
- package/dist/src/createCloudAdapter.d.ts +40 -0
- package/dist/src/createCloudAdapter.js +44 -0
- package/dist/src/createCloudAdapter.js.map +1 -0
- package/dist/src/errorHelper.js +206 -79
- package/dist/src/errorHelper.js.map +1 -1
- package/dist/src/headerPropagation.js +3 -1
- package/dist/src/headerPropagation.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/interfaces/index.d.ts +5 -0
- package/dist/src/interfaces/index.js +22 -0
- package/dist/src/interfaces/index.js.map +1 -0
- package/dist/src/interfaces/webResponse.d.ts +41 -0
- package/dist/src/interfaces/webResponse.js +7 -0
- package/dist/src/interfaces/webResponse.js.map +1 -0
- package/dist/src/middlewareSet.d.ts +0 -1
- package/dist/src/middlewareSet.js +4 -1
- package/dist/src/middlewareSet.js.map +1 -1
- package/dist/src/oauth/userTokenClient.js +2 -1
- package/dist/src/oauth/userTokenClient.js.map +1 -1
- package/dist/src/state/conversationState.js +4 -2
- package/dist/src/state/conversationState.js.map +1 -1
- package/dist/src/state/userState.js +4 -2
- package/dist/src/state/userState.js.map +1 -1
- package/dist/src/storage/memoryStorage.js +5 -3
- package/dist/src/storage/memoryStorage.js.map +1 -1
- package/dist/src/transcript/consoleTranscriptLogger.js +3 -1
- package/dist/src/transcript/consoleTranscriptLogger.js.map +1 -1
- package/dist/src/transcript/fileTranscriptLogger.js +5 -4
- package/dist/src/transcript/fileTranscriptLogger.js.map +1 -1
- package/dist/src/transcript/transcriptLoggerMiddleware.js +2 -1
- package/dist/src/transcript/transcriptLoggerMiddleware.js.map +1 -1
- package/dist/src/turnContext.js +2 -1
- package/dist/src/turnContext.js.map +1 -1
- package/package.json +3 -3
- package/src/agent-client/agentClient.ts +37 -21
- package/src/agent-client/agentResponseHandler.ts +45 -67
- package/src/agent-client/createAgentResponseHandler.ts +189 -0
- package/src/agent-client/index.ts +1 -0
- package/src/app/adaptiveCards/activityValueParsers.ts +3 -3
- package/src/app/adaptiveCards/adaptiveCardsActions.ts +5 -5
- package/src/app/agentApplication.ts +23 -16
- package/src/app/streaming/streamingResponse.ts +2 -2
- package/src/app/turnState.ts +15 -14
- package/src/app/turnStateProperty.ts +4 -2
- package/src/auth/authConfiguration.ts +5 -3
- package/src/auth/index.ts +1 -0
- package/src/auth/jwt-middleware.ts +127 -17
- package/src/auth/msal/msalTokenProvider.ts +16 -16
- package/src/baseAdapter.ts +3 -2
- package/src/cloudAdapter.ts +33 -12
- package/src/createCloudAdapter.ts +56 -0
- package/src/errorHelper.ts +244 -89
- package/src/headerPropagation.ts +4 -1
- package/src/index.ts +2 -0
- package/src/interfaces/index.ts +6 -0
- package/src/interfaces/webResponse.ts +44 -0
- package/src/middlewareSet.ts +3 -1
- package/src/oauth/userTokenClient.ts +3 -2
- package/src/state/conversationState.ts +4 -3
- package/src/state/userState.ts +4 -3
- package/src/storage/memoryStorage.ts +5 -3
- package/src/transcript/consoleTranscriptLogger.ts +3 -2
- package/src/transcript/fileTranscriptLogger.ts +6 -5
- package/src/transcript/transcriptLoggerMiddleware.ts +3 -2
- package/src/turnContext.ts +3 -2
package/README.md
CHANGED
|
@@ -12,6 +12,31 @@ To install the package:
|
|
|
12
12
|
npm install @microsoft/agents-hosting
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
+
## Hosting integration APIs
|
|
16
|
+
|
|
17
|
+
To make hosting an agent independent of any single web framework, this package
|
|
18
|
+
exposes framework-agnostic primitives that the
|
|
19
|
+
[`@microsoft/agents-hosting-express`](../agents-hosting-express) and
|
|
20
|
+
[`@microsoft/agents-hosting-fastify`](../agents-hosting-fastify) packages build on:
|
|
21
|
+
|
|
22
|
+
- `createCloudAdapter(agent, authConfig)` — returns `{ adapter, headerPropagation }` for processing incoming activities. Use this from any web framework.
|
|
23
|
+
- `CloudAdapterResult` — return type of `createCloudAdapter`.
|
|
24
|
+
- `createAgentResponseHandler(adapter, agent, conversationState)` — framework-agnostic handler `(req, res, params) => Promise<void>` for the agent-to-agent response route.
|
|
25
|
+
- `AgentResponseHandler`, `AgentResponseHandlerParams`, `AGENT_RESPONSE_ROUTE_PATH` — supporting types and the canonical route path.
|
|
26
|
+
- `WebResponse`, `NextFunction`, `WebRequestParamsCarrier` — minimal structural interfaces (no Express/Fastify imports) used by the cross-framework helpers above.
|
|
27
|
+
|
|
28
|
+
Most consumers should keep using `startServer`/`createAgentRequestHandler` from the
|
|
29
|
+
Express or Fastify packages; reach for these APIs when adapting another framework.
|
|
30
|
+
|
|
31
|
+
The agent-response handler authenticates requests once through the supplied
|
|
32
|
+
`CloudAdapter`. That boundary validates the token for any configured host connection;
|
|
33
|
+
the handler then verifies that the caller application matches the delegated agent
|
|
34
|
+
recorded for that conversation. Existing route-level `authorizeJWT` middleware is
|
|
35
|
+
redundant but remains compatible. Anonymous callbacks are supported only outside
|
|
36
|
+
production and emit a registration warning because peer ownership cannot be verified.
|
|
37
|
+
Missing, malformed, or pre-upgrade delegated state fails closed. Pre-upgrade
|
|
38
|
+
conversations must be restarted.
|
|
39
|
+
|
|
15
40
|
## Example Usage based on the AgentApplication object
|
|
16
41
|
|
|
17
42
|
```ts
|
package/dist/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.7.0-beta.
|
|
4
|
+
"version": "1.7.0-beta.11.gb5d3e8c751",
|
|
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.1.5",
|
|
24
|
-
"@microsoft/agents-activity": "1.7.0-beta.
|
|
25
|
-
"@microsoft/agents-telemetry": "1.7.0-beta.
|
|
24
|
+
"@microsoft/agents-activity": "1.7.0-beta.11.gb5d3e8c751",
|
|
25
|
+
"@microsoft/agents-telemetry": "1.7.0-beta.11.gb5d3e8c751",
|
|
26
26
|
"jsonwebtoken": "9.0.3",
|
|
27
27
|
"jwks-rsa": "4.0.1",
|
|
28
28
|
"zod": "3.25.75"
|
|
@@ -31,6 +31,10 @@ export interface ConversationData {
|
|
|
31
31
|
* Reference to the conversation for maintaining context across interactions
|
|
32
32
|
*/
|
|
33
33
|
conversationReference: ConversationReference;
|
|
34
|
+
/**
|
|
35
|
+
* Client ID of the delegated agent allowed to send responses for this conversation.
|
|
36
|
+
*/
|
|
37
|
+
expectedAgentClientId?: string;
|
|
34
38
|
}
|
|
35
39
|
/**
|
|
36
40
|
* Client for communicating with other agents through HTTP requests.
|
|
@@ -5,8 +5,10 @@ const auth_1 = require("../auth");
|
|
|
5
5
|
const agents_activity_1 = require("@microsoft/agents-activity");
|
|
6
6
|
const crypto_1 = require("crypto");
|
|
7
7
|
const agents_telemetry_1 = require("@microsoft/agents-telemetry");
|
|
8
|
+
const turnContext_1 = require("../turnContext");
|
|
8
9
|
const agents_telemetry_2 = require("@microsoft/agents-telemetry");
|
|
9
10
|
const observability_1 = require("../observability");
|
|
11
|
+
const errorHelper_1 = require("../errorHelper");
|
|
10
12
|
const logger = (0, agents_telemetry_1.debug)('agents:agent-client');
|
|
11
13
|
/**
|
|
12
14
|
* Client for communicating with other agents through HTTP requests.
|
|
@@ -52,31 +54,43 @@ class AgentClient {
|
|
|
52
54
|
}
|
|
53
55
|
};
|
|
54
56
|
activityCopy.conversation.id = (0, crypto_1.randomUUID)();
|
|
57
|
+
const delegatedContext = new turnContext_1.TurnContext(context.adapter, activityCopy, context.identity);
|
|
58
|
+
const delegatedStateKey = { channelId: activityCopy.channelId, conversationId: activityCopy.conversation.id };
|
|
55
59
|
const conversationDataAccessor = conversationState.createProperty(activityCopy.conversation.id);
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
await conversationDataAccessor.set(delegatedContext, {
|
|
61
|
+
conversationReference: activity.getConversationReference(),
|
|
62
|
+
nameRequested: false,
|
|
63
|
+
expectedAgentClientId: this.agentClientConfig.clientId
|
|
64
|
+
}, delegatedStateKey);
|
|
65
|
+
logger.debug('stored delegated conversation state');
|
|
59
66
|
const authProvider = new auth_1.MsalTokenProvider(authConfig);
|
|
60
67
|
const token = await authProvider.getAccessToken(this.agentClientConfig.clientId);
|
|
61
|
-
logger.debug('
|
|
68
|
+
logger.debug('sending activity to delegated agent');
|
|
62
69
|
let authHeader = ''; // Allow anonymous auth.
|
|
63
70
|
if (token.trim().length > 0) {
|
|
64
71
|
authHeader = `Bearer ${token}`;
|
|
65
72
|
}
|
|
66
|
-
await conversationState.saveChanges(
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
await conversationState.saveChanges(delegatedContext, false, delegatedStateKey);
|
|
74
|
+
let response;
|
|
75
|
+
try {
|
|
76
|
+
response = await fetch(this.agentClientConfig.endPoint, {
|
|
77
|
+
method: 'POST',
|
|
78
|
+
headers: {
|
|
79
|
+
'Content-Type': 'application/json',
|
|
80
|
+
Authorization: authHeader,
|
|
81
|
+
'x-ms-conversation-id': activityCopy.conversation.id
|
|
82
|
+
},
|
|
83
|
+
body: JSON.stringify(activityCopy)
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
await conversationState.delete(delegatedContext, delegatedStateKey);
|
|
88
|
+
throw error;
|
|
89
|
+
}
|
|
76
90
|
record({ httpStatusCode: response.status.toString() });
|
|
77
91
|
if (!response.ok) {
|
|
78
|
-
await
|
|
79
|
-
throw
|
|
92
|
+
await conversationState.delete(delegatedContext, delegatedStateKey);
|
|
93
|
+
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.FailedToPostActivityToAgent, undefined, { statusText: response.statusText });
|
|
80
94
|
}
|
|
81
95
|
return response.statusText;
|
|
82
96
|
});
|
|
@@ -101,11 +115,11 @@ class AgentClient {
|
|
|
101
115
|
};
|
|
102
116
|
}
|
|
103
117
|
else {
|
|
104
|
-
throw
|
|
118
|
+
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.MissingAgentClientConfig, undefined, { agentName });
|
|
105
119
|
}
|
|
106
120
|
}
|
|
107
121
|
else {
|
|
108
|
-
throw
|
|
122
|
+
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.AgentNameRequired);
|
|
109
123
|
}
|
|
110
124
|
}
|
|
111
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentClient.js","sourceRoot":"","sources":["../../../src/agent-client/agentClient.ts"],"names":[],"mappings":";;;AAAA,kCAA8D;AAC9D,
|
|
1
|
+
{"version":3,"file":"agentClient.js","sourceRoot":"","sources":["../../../src/agent-client/agentClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
1
5
|
import { ActivityHandler } from '../activityHandler';
|
|
2
6
|
import { CloudAdapter } from '../cloudAdapter';
|
|
3
|
-
import { Application } from 'express';
|
|
4
7
|
import { ConversationState } from '../state';
|
|
8
|
+
/**
|
|
9
|
+
* Minimal application surface needed by {@link configureResponseController} to
|
|
10
|
+
* register the agent-to-agent response POST route. Express's `Application`
|
|
11
|
+
* structurally satisfies this; frameworks that do not (e.g., Fastify) should
|
|
12
|
+
* call {@link createAgentResponseHandler} directly and register the route
|
|
13
|
+
* themselves rather than passing a synthetic `WebApp`.
|
|
14
|
+
*
|
|
15
|
+
* `WebApp` is a minimal structural shape rather than a richer, named
|
|
16
|
+
* route-registrar contract. It is exported so it has a stable name in the
|
|
17
|
+
* generated type declarations and API report (it appears in the exported
|
|
18
|
+
* {@link configureResponseController} signature). Any framework `app` whose
|
|
19
|
+
* `post(path, handler)` method structurally matches satisfies it.
|
|
20
|
+
*/
|
|
21
|
+
export interface WebApp {
|
|
22
|
+
post(path: string, handler: (req: any, res: any) => unknown | Promise<unknown>): unknown;
|
|
23
|
+
}
|
|
5
24
|
/**
|
|
6
25
|
* To enable Agent to Agent communication, configures the agent response controller endpoint for handling incoming activities from external services.
|
|
7
26
|
*
|
|
@@ -15,16 +34,18 @@ import { ConversationState } from '../state';
|
|
|
15
34
|
* `POST /api/agentresponse/v3/conversations/{conversationId}/activities/{activityId}`
|
|
16
35
|
*
|
|
17
36
|
* The function handles:
|
|
37
|
+
* - Authenticating callers with JWT validation
|
|
38
|
+
* - Verifying that the authenticated caller owns the delegated conversation
|
|
18
39
|
* - Normalizing incoming activity data from the request body
|
|
19
40
|
* - Retrieving conversation references from conversation state
|
|
20
41
|
* - Continuing conversations using the stored conversation reference
|
|
21
42
|
* - Processing EndOfConversation activities by cleaning up conversation state
|
|
22
43
|
* - Sending activities through the turn context and returning responses
|
|
23
44
|
*
|
|
24
|
-
* @param app - The
|
|
25
|
-
* @param adapter - The CloudAdapter instance used for processing bot framework activities and managing conversations
|
|
26
|
-
* @param agent - The ActivityHandler instance that contains the bot's logic for processing different types of activities
|
|
27
|
-
* @param conversationState - The ConversationState instance used for managing conversation-specific state and conversation references
|
|
45
|
+
* @param app - The application instance (Express `Application` or any framework that satisfies {@link WebApp}) to configure the route on.
|
|
46
|
+
* @param adapter - The CloudAdapter instance used for processing bot framework activities and managing conversations.
|
|
47
|
+
* @param agent - The ActivityHandler instance that contains the bot's logic for processing different types of activities.
|
|
48
|
+
* @param conversationState - The ConversationState instance used for managing conversation-specific state and conversation references.
|
|
28
49
|
*
|
|
29
50
|
* @example
|
|
30
51
|
* ```typescript
|
|
@@ -36,4 +57,4 @@ import { ConversationState } from '../state';
|
|
|
36
57
|
* configureResponseController(app, adapter, agent, conversationState);
|
|
37
58
|
* ```
|
|
38
59
|
*/
|
|
39
|
-
export declare const configureResponseController: (app:
|
|
60
|
+
export declare const configureResponseController: (app: WebApp, adapter: CloudAdapter, agent: ActivityHandler, conversationState: ConversationState) => void;
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
2
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
7
|
exports.configureResponseController = void 0;
|
|
4
|
-
const
|
|
5
|
-
const cloudAdapter_1 = require("../cloudAdapter");
|
|
6
|
-
const turnContext_1 = require("../turnContext");
|
|
7
|
-
const crypto_1 = require("crypto");
|
|
8
|
-
const activityWireCompat_1 = require("../activityWireCompat");
|
|
9
|
-
const agents_telemetry_1 = require("@microsoft/agents-telemetry");
|
|
10
|
-
const logger = (0, agents_telemetry_1.debug)('agents:agent-client');
|
|
8
|
+
const createAgentResponseHandler_1 = require("./createAgentResponseHandler");
|
|
11
9
|
/**
|
|
12
10
|
* To enable Agent to Agent communication, configures the agent response controller endpoint for handling incoming activities from external services.
|
|
13
11
|
*
|
|
@@ -21,16 +19,18 @@ const logger = (0, agents_telemetry_1.debug)('agents:agent-client');
|
|
|
21
19
|
* `POST /api/agentresponse/v3/conversations/{conversationId}/activities/{activityId}`
|
|
22
20
|
*
|
|
23
21
|
* The function handles:
|
|
22
|
+
* - Authenticating callers with JWT validation
|
|
23
|
+
* - Verifying that the authenticated caller owns the delegated conversation
|
|
24
24
|
* - Normalizing incoming activity data from the request body
|
|
25
25
|
* - Retrieving conversation references from conversation state
|
|
26
26
|
* - Continuing conversations using the stored conversation reference
|
|
27
27
|
* - Processing EndOfConversation activities by cleaning up conversation state
|
|
28
28
|
* - Sending activities through the turn context and returning responses
|
|
29
29
|
*
|
|
30
|
-
* @param app - The
|
|
31
|
-
* @param adapter - The CloudAdapter instance used for processing bot framework activities and managing conversations
|
|
32
|
-
* @param agent - The ActivityHandler instance that contains the bot's logic for processing different types of activities
|
|
33
|
-
* @param conversationState - The ConversationState instance used for managing conversation-specific state and conversation references
|
|
30
|
+
* @param app - The application instance (Express `Application` or any framework that satisfies {@link WebApp}) to configure the route on.
|
|
31
|
+
* @param adapter - The CloudAdapter instance used for processing bot framework activities and managing conversations.
|
|
32
|
+
* @param agent - The ActivityHandler instance that contains the bot's logic for processing different types of activities.
|
|
33
|
+
* @param conversationState - The ConversationState instance used for managing conversation-specific state and conversation references.
|
|
34
34
|
*
|
|
35
35
|
* @example
|
|
36
36
|
* ```typescript
|
|
@@ -43,50 +43,13 @@ const logger = (0, agents_telemetry_1.debug)('agents:agent-client');
|
|
|
43
43
|
* ```
|
|
44
44
|
*/
|
|
45
45
|
const configureResponseController = (app, adapter, agent, conversationState) => {
|
|
46
|
-
|
|
46
|
+
const handler = (0, createAgentResponseHandler_1.createAgentResponseHandler)(adapter, agent, conversationState);
|
|
47
|
+
app.post(createAgentResponseHandler_1.AGENT_RESPONSE_ROUTE_PATH, async (req, res) => {
|
|
48
|
+
await handler(req, res, {
|
|
49
|
+
conversationId: req.params.conversationId,
|
|
50
|
+
activityId: req.params.activityId
|
|
51
|
+
});
|
|
52
|
+
});
|
|
47
53
|
};
|
|
48
54
|
exports.configureResponseController = configureResponseController;
|
|
49
|
-
const handleResponse = (adapter, handler, conversationState) => async (req, res) => {
|
|
50
|
-
var _a, _b;
|
|
51
|
-
const incoming = (0, activityWireCompat_1.normalizeIncomingActivity)(req.body);
|
|
52
|
-
const activity = agents_activity_1.Activity.fromObject(incoming);
|
|
53
|
-
logger.debug('received response: ', activity);
|
|
54
|
-
const connection = adapter.connectionManager.getDefaultConnection();
|
|
55
|
-
const appId = (_b = (_a = connection === null || connection === void 0 ? void 0 : connection.connectionSettings) === null || _a === void 0 ? void 0 : _a.clientId) !== null && _b !== void 0 ? _b : '';
|
|
56
|
-
const myTurnContext = new turnContext_1.TurnContext(adapter, activity, cloudAdapter_1.CloudAdapter.createIdentity(appId));
|
|
57
|
-
const conversationDataAccessor = conversationState.createProperty(req.params.conversationId);
|
|
58
|
-
const conversationRefState = await conversationDataAccessor.get(myTurnContext, undefined, { channelId: activity.channelId, conversationId: req.params.conversationId });
|
|
59
|
-
const conversationRef = JSON.stringify(conversationRefState.conversationReference);
|
|
60
|
-
console.log('conversationRef', conversationRef);
|
|
61
|
-
const callback = async (turnContext) => {
|
|
62
|
-
activity.applyConversationReference(conversationRefState.conversationReference);
|
|
63
|
-
turnContext.activity.id = req.params.activityId;
|
|
64
|
-
let response;
|
|
65
|
-
if (activity.type === agents_activity_1.ActivityTypes.EndOfConversation) {
|
|
66
|
-
await conversationDataAccessor.delete(turnContext, { channelId: activity.channelId, conversationId: activity.conversation.id });
|
|
67
|
-
applyActivityToTurnContext(turnContext, activity);
|
|
68
|
-
await handler.run(turnContext);
|
|
69
|
-
response = (0, crypto_1.randomUUID)().replace(/-/g, '');
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
response = await turnContext.sendActivity(activity);
|
|
73
|
-
}
|
|
74
|
-
res.status(200).send(response);
|
|
75
|
-
};
|
|
76
|
-
await adapter.continueConversation(myTurnContext.identity, conversationRefState.conversationReference, callback);
|
|
77
|
-
};
|
|
78
|
-
const applyActivityToTurnContext = (turnContext, activity) => {
|
|
79
|
-
turnContext.activity.channelData = activity.channelData;
|
|
80
|
-
turnContext.activity.code = activity.code;
|
|
81
|
-
turnContext.activity.entities = activity.entities;
|
|
82
|
-
turnContext.activity.locale = activity.locale;
|
|
83
|
-
turnContext.activity.localTimestamp = activity.localTimestamp;
|
|
84
|
-
turnContext.activity.name = activity.name;
|
|
85
|
-
turnContext.activity.relatesTo = activity.relatesTo;
|
|
86
|
-
turnContext.activity.replyToId = activity.replyToId;
|
|
87
|
-
turnContext.activity.timestamp = activity.timestamp;
|
|
88
|
-
turnContext.activity.text = activity.text;
|
|
89
|
-
turnContext.activity.type = activity.type;
|
|
90
|
-
turnContext.activity.value = activity.value;
|
|
91
|
-
};
|
|
92
55
|
//# sourceMappingURL=agentResponseHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agentResponseHandler.js","sourceRoot":"","sources":["../../../src/agent-client/agentResponseHandler.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"agentResponseHandler.js","sourceRoot":"","sources":["../../../src/agent-client/agentResponseHandler.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAOH,6EAAoG;AAsBpG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACI,MAAM,2BAA2B,GAAG,CACzC,GAAW,EACX,OAAqB,EACrB,KAAsB,EACtB,iBAAoC,EACpC,EAAE;IACF,MAAM,OAAO,GAAG,IAAA,uDAA0B,EAAC,OAAO,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAA;IAC7E,GAAG,CAAC,IAAI,CAAC,sDAAyB,EAAE,KAAK,EAAE,GAAsC,EAAE,GAAgB,EAAE,EAAE;QACrG,MAAM,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE;YACtB,cAAc,EAAE,GAAG,CAAC,MAAO,CAAC,cAAwB;YACpD,UAAU,EAAE,GAAG,CAAC,MAAO,CAAC,UAAoB;SAC7C,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAbY,QAAA,2BAA2B,+BAavC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { ActivityHandler } from '../activityHandler';
|
|
6
|
+
import { CloudAdapter } from '../cloudAdapter';
|
|
7
|
+
import { Request } from '../auth/request';
|
|
8
|
+
import { WebResponse } from '../interfaces/webResponse';
|
|
9
|
+
import { ConversationState } from '../state';
|
|
10
|
+
/**
|
|
11
|
+
* Route parameters supplied to {@link AgentResponseHandler} — typically pulled from
|
|
12
|
+
* the framework's URL path parser.
|
|
13
|
+
*/
|
|
14
|
+
export interface AgentResponseHandlerParams {
|
|
15
|
+
conversationId: string;
|
|
16
|
+
activityId: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Framework-agnostic handler signature for the agent response controller endpoint.
|
|
20
|
+
*
|
|
21
|
+
* @remarks
|
|
22
|
+
* The handler is intended to be invoked by a thin framework-specific wrapper (such
|
|
23
|
+
* as Express's `configureResponseController(app, ...)`) that extracts the path
|
|
24
|
+
* parameters and forwards a parsed `req.body` plus an {@link WebResponse}.
|
|
25
|
+
*/
|
|
26
|
+
export type AgentResponseHandler = (req: Request, res: WebResponse, params: AgentResponseHandlerParams) => Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Creates a framework-agnostic handler for the agent response controller endpoint.
|
|
29
|
+
*
|
|
30
|
+
* This is the core, Express-free implementation used by:
|
|
31
|
+
* - `configureResponseController` in `@microsoft/agents-hosting-express`
|
|
32
|
+
* - `configureResponseController` in `@microsoft/agents-hosting-fastify`
|
|
33
|
+
*
|
|
34
|
+
* Both wrappers register the canonical route
|
|
35
|
+
* `POST /api/agentresponse/v3/conversations/:conversationId/activities/:activityId`
|
|
36
|
+
* and forward the parsed body + path parameters to the handler returned here.
|
|
37
|
+
*
|
|
38
|
+
* @param adapter - The CloudAdapter used for processing activities and managing conversations.
|
|
39
|
+
* @param agent - The ActivityHandler containing the agent logic.
|
|
40
|
+
* @param conversationState - The ConversationState used to look up the stored conversation reference.
|
|
41
|
+
* @returns A handler `(req, res, params) => Promise<void>`.
|
|
42
|
+
*/
|
|
43
|
+
export declare const createAgentResponseHandler: (adapter: CloudAdapter, agent: ActivityHandler, conversationState: ConversationState) => AgentResponseHandler;
|
|
44
|
+
/**
|
|
45
|
+
* Canonical route path for the agent response controller endpoint.
|
|
46
|
+
* Both Express and Fastify wrappers should register on this path.
|
|
47
|
+
*/
|
|
48
|
+
export declare const AGENT_RESPONSE_ROUTE_PATH = "/api/agentresponse/v3/conversations/:conversationId/activities/:activityId";
|
|
@@ -0,0 +1,134 @@
|
|
|
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.AGENT_RESPONSE_ROUTE_PATH = exports.createAgentResponseHandler = void 0;
|
|
8
|
+
const agents_activity_1 = require("@microsoft/agents-activity");
|
|
9
|
+
const cloudAdapter_1 = require("../cloudAdapter");
|
|
10
|
+
const turnContext_1 = require("../turnContext");
|
|
11
|
+
const crypto_1 = require("crypto");
|
|
12
|
+
const activityWireCompat_1 = require("../activityWireCompat");
|
|
13
|
+
const errorHelper_1 = require("../errorHelper");
|
|
14
|
+
const agents_telemetry_1 = require("@microsoft/agents-telemetry");
|
|
15
|
+
const jwt_middleware_1 = require("../auth/jwt-middleware");
|
|
16
|
+
const logger = (0, agents_telemetry_1.debug)('agents:agent-client');
|
|
17
|
+
/**
|
|
18
|
+
* Creates a framework-agnostic handler for the agent response controller endpoint.
|
|
19
|
+
*
|
|
20
|
+
* This is the core, Express-free implementation used by:
|
|
21
|
+
* - `configureResponseController` in `@microsoft/agents-hosting-express`
|
|
22
|
+
* - `configureResponseController` in `@microsoft/agents-hosting-fastify`
|
|
23
|
+
*
|
|
24
|
+
* Both wrappers register the canonical route
|
|
25
|
+
* `POST /api/agentresponse/v3/conversations/:conversationId/activities/:activityId`
|
|
26
|
+
* and forward the parsed body + path parameters to the handler returned here.
|
|
27
|
+
*
|
|
28
|
+
* @param adapter - The CloudAdapter used for processing activities and managing conversations.
|
|
29
|
+
* @param agent - The ActivityHandler containing the agent logic.
|
|
30
|
+
* @param conversationState - The ConversationState used to look up the stored conversation reference.
|
|
31
|
+
* @returns A handler `(req, res, params) => Promise<void>`.
|
|
32
|
+
*/
|
|
33
|
+
const createAgentResponseHandler = (adapter, agent, conversationState) => {
|
|
34
|
+
var _a;
|
|
35
|
+
const appId = (_a = adapter.getClientId()) !== null && _a !== void 0 ? _a : '';
|
|
36
|
+
const anonymousDevelopment = appId.length === 0 && process.env.NODE_ENV !== 'production';
|
|
37
|
+
if (anonymousDevelopment) {
|
|
38
|
+
emitAgentResponseWarning('The agent-response endpoint is using anonymous authentication outside production. Callback ownership cannot be cryptographically verified; configure a client ID before deployment.');
|
|
39
|
+
}
|
|
40
|
+
return async (req, res, params) => {
|
|
41
|
+
var _a, _b, _c, _d, _e;
|
|
42
|
+
let middlewareError;
|
|
43
|
+
let nextCalled = false;
|
|
44
|
+
await adapter.authorizeRequest(req, res, (err) => {
|
|
45
|
+
nextCalled = true;
|
|
46
|
+
middlewareError = err;
|
|
47
|
+
});
|
|
48
|
+
if (middlewareError) {
|
|
49
|
+
throw middlewareError;
|
|
50
|
+
}
|
|
51
|
+
if (!nextCalled || res.headersSent) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
if (!req.body) {
|
|
55
|
+
throw agents_activity_1.ExceptionHelper.generateException(TypeError, errorHelper_1.Errors.MissingRequestBody);
|
|
56
|
+
}
|
|
57
|
+
const incoming = (0, activityWireCompat_1.normalizeIncomingActivity)(req.body);
|
|
58
|
+
const activity = agents_activity_1.Activity.fromObject(incoming);
|
|
59
|
+
logger.debug('received delegated agent response');
|
|
60
|
+
const continuationAudience = (_a = (0, jwt_middleware_1.getAuthorizedAudience)(req)) !== null && _a !== void 0 ? _a : appId;
|
|
61
|
+
const myTurnContext = new turnContext_1.TurnContext(adapter, activity, cloudAdapter_1.CloudAdapter.createIdentity(continuationAudience));
|
|
62
|
+
const conversationDataAccessor = conversationState.createProperty(params.conversationId);
|
|
63
|
+
const incomingChannelId = activity.channelId;
|
|
64
|
+
const conversationRefState = await conversationDataAccessor.get(myTurnContext, undefined, { channelId: incomingChannelId, conversationId: params.conversationId });
|
|
65
|
+
if (!isDelegatedConversationState(conversationRefState)) {
|
|
66
|
+
res.status(403).send({ 'agent-response-auth-error': 'caller is not authorized for this conversation' });
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const callerClientId = (_c = (_b = req.user) === null || _b === void 0 ? void 0 : _b.azp) !== null && _c !== void 0 ? _c : (_d = req.user) === null || _d === void 0 ? void 0 : _d.appid;
|
|
70
|
+
const anonymousCaller = anonymousDevelopment && ((_e = req.user) === null || _e === void 0 ? void 0 : _e.name) === 'anonymous';
|
|
71
|
+
const delegatedAgentMatches = anonymousCaller || (typeof callerClientId === 'string' &&
|
|
72
|
+
callerClientId.length > 0 &&
|
|
73
|
+
callerClientId.toLowerCase() === conversationRefState.expectedAgentClientId.toLowerCase());
|
|
74
|
+
if (!delegatedAgentMatches) {
|
|
75
|
+
res.status(403).send({ 'agent-response-auth-error': 'caller is not authorized for this conversation' });
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const callback = async (turnContext) => {
|
|
79
|
+
activity.applyConversationReference(conversationRefState.conversationReference);
|
|
80
|
+
turnContext.activity.id = params.activityId;
|
|
81
|
+
let response;
|
|
82
|
+
let responseContentType;
|
|
83
|
+
if (activity.type === agents_activity_1.ActivityTypes.EndOfConversation) {
|
|
84
|
+
await conversationState.delete(myTurnContext, { channelId: incomingChannelId, conversationId: params.conversationId });
|
|
85
|
+
applyActivityToTurnContext(turnContext, activity);
|
|
86
|
+
await agent.run(turnContext);
|
|
87
|
+
response = (0, crypto_1.randomUUID)().replace(/-/g, '');
|
|
88
|
+
// Explicitly set the content-type so Express and Fastify both emit the same
|
|
89
|
+
// value for this raw-string body (Express defaults to text/html, Fastify to
|
|
90
|
+
// text/plain when the framework auto-detects).
|
|
91
|
+
responseContentType = 'text/plain; charset=utf-8';
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
response = await turnContext.sendActivity(activity);
|
|
95
|
+
}
|
|
96
|
+
if (responseContentType !== undefined) {
|
|
97
|
+
res.setHeader('content-type', responseContentType);
|
|
98
|
+
}
|
|
99
|
+
res.status(200).send(response);
|
|
100
|
+
};
|
|
101
|
+
await adapter.continueConversation(myTurnContext.identity, conversationRefState.conversationReference, callback);
|
|
102
|
+
};
|
|
103
|
+
};
|
|
104
|
+
exports.createAgentResponseHandler = createAgentResponseHandler;
|
|
105
|
+
function isDelegatedConversationState(state) {
|
|
106
|
+
return typeof (state === null || state === void 0 ? void 0 : state.conversationReference) === 'object' &&
|
|
107
|
+
state.conversationReference !== null &&
|
|
108
|
+
typeof state.expectedAgentClientId === 'string' &&
|
|
109
|
+
state.expectedAgentClientId.trim().length > 0;
|
|
110
|
+
}
|
|
111
|
+
function emitAgentResponseWarning(message) {
|
|
112
|
+
console.warn(`[agents:agent-client] ${message}`);
|
|
113
|
+
logger.warn(message);
|
|
114
|
+
}
|
|
115
|
+
const applyActivityToTurnContext = (turnContext, activity) => {
|
|
116
|
+
turnContext.activity.channelData = activity.channelData;
|
|
117
|
+
turnContext.activity.code = activity.code;
|
|
118
|
+
turnContext.activity.entities = activity.entities;
|
|
119
|
+
turnContext.activity.locale = activity.locale;
|
|
120
|
+
turnContext.activity.localTimestamp = activity.localTimestamp;
|
|
121
|
+
turnContext.activity.name = activity.name;
|
|
122
|
+
turnContext.activity.relatesTo = activity.relatesTo;
|
|
123
|
+
turnContext.activity.replyToId = activity.replyToId;
|
|
124
|
+
turnContext.activity.timestamp = activity.timestamp;
|
|
125
|
+
turnContext.activity.text = activity.text;
|
|
126
|
+
turnContext.activity.type = activity.type;
|
|
127
|
+
turnContext.activity.value = activity.value;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Canonical route path for the agent response controller endpoint.
|
|
131
|
+
* Both Express and Fastify wrappers should register on this path.
|
|
132
|
+
*/
|
|
133
|
+
exports.AGENT_RESPONSE_ROUTE_PATH = '/api/agentresponse/v3/conversations/:conversationId/activities/:activityId';
|
|
134
|
+
//# sourceMappingURL=createAgentResponseHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAgentResponseHandler.js","sourceRoot":"","sources":["../../../src/agent-client/createAgentResponseHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./agentClient"), exports);
|
|
18
18
|
__exportStar(require("./agentResponseHandler"), exports);
|
|
19
|
+
__exportStar(require("./createAgentResponseHandler"), exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent-client/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B;AAC7B,yDAAsC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent-client/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA6B;AAC7B,yDAAsC;AACtC,+DAA4C"}
|
|
@@ -18,8 +18,8 @@ exports.parseValueAgentActivityPreview = parseValueAgentActivityPreview;
|
|
|
18
18
|
exports.parseValueCommandId = parseValueCommandId;
|
|
19
19
|
const zod_1 = require("zod");
|
|
20
20
|
const agents_activity_1 = require("@microsoft/agents-activity");
|
|
21
|
-
// import { MessagingExtensionQuery, messagingExtensionQueryZodSchema } from '../messageExtension/messagingExtensionQuery'
|
|
22
21
|
const adaptiveCardsSearchParams_1 = require("./adaptiveCardsSearchParams");
|
|
22
|
+
const errorHelper_1 = require("../../errorHelper");
|
|
23
23
|
/**
|
|
24
24
|
* Parses the given value as a value action.
|
|
25
25
|
*
|
|
@@ -78,7 +78,7 @@ function parseValueActionExecuteSelector(value) {
|
|
|
78
78
|
});
|
|
79
79
|
const safeParsedValue = actionValueExecuteSelector.passthrough().safeParse(value);
|
|
80
80
|
if (!safeParsedValue.success) {
|
|
81
|
-
throw
|
|
81
|
+
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.InvalidActionValue, undefined, { error: String(safeParsedValue.error) });
|
|
82
82
|
}
|
|
83
83
|
const parsedValue = safeParsedValue.data;
|
|
84
84
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activityValueParsers.js","sourceRoot":"","sources":["../../../../src/app/adaptiveCards/activityValueParsers.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAaH,4CAMC;AAQD,oDAMC;AAQD,wDAMC;AAeD,0EAsBC;AAQD,8CAaC;AAQD,4EAmBC;AAQD,sEAGC;AAQD,sDAwBC;AAQD,0CAUC;AAQD,kFAUC;AAQD,wEAQC;AAQD,kDAUC;AAnPD,6BAAuB;AACvB,
|
|
1
|
+
{"version":3,"file":"activityValueParsers.js","sourceRoot":"","sources":["../../../../src/app/adaptiveCards/activityValueParsers.ts"],"names":[],"mappings":"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"}
|