@microsoft/agents-copilotstudio-client 0.6.1 → 0.6.11

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.
@@ -4,6 +4,10 @@
4
4
  */
5
5
  import { ConnectionSettings } from './connectionSettings';
6
6
  import { Activity } from '@microsoft/agents-activity';
7
+ /**
8
+ * Client for interacting with Microsoft Copilot Studio services.
9
+ * Provides functionality to start conversations and send messages to Copilot Studio bots.
10
+ */
7
11
  export declare class CopilotStudioClient {
8
12
  /** Header key for conversation ID. */
9
13
  private static readonly conversationIdHeaderKey;
@@ -15,11 +19,11 @@ export declare class CopilotStudioClient {
15
19
  private readonly settings;
16
20
  /** The Axios instance used for HTTP requests. */
17
21
  private readonly client;
18
- /** The logger for debugging. */
19
- private readonly logger;
20
22
  /**
21
- * Returns the Scope URL needed to connect to Copilot Studio from the Connection Settings.
22
- * @param settings Copilot Studio Connection Settings.
23
+ * Returns the scope URL needed to connect to Copilot Studio from the connection settings.
24
+ * This is used for authentication token audience configuration.
25
+ * @param settings Copilot Studio connection settings.
26
+ * @returns The scope URL for token audience.
23
27
  */
24
28
  static scopeFromSettings: (settings: ConnectionSettings) => string;
25
29
  /**
@@ -12,9 +12,14 @@ const axios_1 = __importDefault(require("axios"));
12
12
  const powerPlatformEnvironment_1 = require("./powerPlatformEnvironment");
13
13
  const agents_activity_1 = require("@microsoft/agents-activity");
14
14
  const executeTurnRequest_1 = require("./executeTurnRequest");
15
- const debug_1 = __importDefault(require("debug"));
15
+ const logger_1 = require("@microsoft/agents-activity/src/logger");
16
16
  const package_json_1 = __importDefault(require("@microsoft/agents-copilotstudio-client/package.json"));
17
17
  const os_1 = __importDefault(require("os"));
18
+ const logger = (0, logger_1.debug)('copilot-studio:client');
19
+ /**
20
+ * Client for interacting with Microsoft Copilot Studio services.
21
+ * Provides functionality to start conversations and send messages to Copilot Studio bots.
22
+ */
18
23
  class CopilotStudioClient {
19
24
  /**
20
25
  * Creates an instance of CopilotStudioClient.
@@ -28,39 +33,39 @@ class CopilotStudioClient {
28
33
  this.client = axios_1.default.create();
29
34
  this.client.defaults.headers.common.Authorization = `Bearer ${token}`;
30
35
  this.client.defaults.headers.common['User-Agent'] = CopilotStudioClient.getProductInfo();
31
- this.logger = (0, debug_1.default)('copilot-studio-client');
32
36
  }
33
37
  async postRequestAsync(axiosConfig) {
34
38
  var _a, _b, _c, _d;
35
39
  const activities = [];
36
- this.logger(`>>> SEND TO ${axiosConfig.url}`);
40
+ logger.debug(`>>> SEND TO ${axiosConfig.url}`);
37
41
  const response = await this.client(axiosConfig);
38
42
  if (this.settings.useExperimentalEndpoint && !((_a = this.settings.directConnectUrl) === null || _a === void 0 ? void 0 : _a.trim())) {
39
43
  const islandExperimentalUrl = (_b = response.headers) === null || _b === void 0 ? void 0 : _b[CopilotStudioClient.islandExperimentalUrlHeaderKey];
40
44
  if (islandExperimentalUrl) {
41
45
  this.settings.directConnectUrl = islandExperimentalUrl;
42
- this.logger(`Island Experimental URL: ${islandExperimentalUrl}`);
46
+ logger.debug(`Island Experimental URL: ${islandExperimentalUrl}`);
43
47
  }
44
48
  }
45
49
  this.conversationId = (_d = (_c = response.headers) === null || _c === void 0 ? void 0 : _c[CopilotStudioClient.conversationIdHeaderKey]) !== null && _d !== void 0 ? _d : '';
46
50
  if (this.conversationId) {
47
- this.logger(`Conversation ID: ${this.conversationId}`);
51
+ logger.debug(`Conversation ID: ${this.conversationId}`);
48
52
  }
49
- this.logger('=====================================================');
50
- this.logger(`Headers: ${JSON.stringify(response.headers, null, 2)}`);
51
- this.logger('=====================================================');
53
+ const sanitizedHeaders = { ...response.headers };
54
+ delete sanitizedHeaders['Authorization'];
55
+ delete sanitizedHeaders[CopilotStudioClient.conversationIdHeaderKey];
56
+ logger.debug('Headers received:', sanitizedHeaders);
52
57
  const stream = response.data;
53
58
  const reader = stream.pipeThrough(new TextDecoderStream()).getReader();
54
59
  let result = '';
55
60
  const results = [];
56
61
  const processEvents = async ({ done, value }) => {
57
62
  if (done) {
58
- this.logger('Stream complete');
63
+ logger.debug('Stream complete');
59
64
  result += value;
60
65
  results.push(result);
61
66
  return results;
62
67
  }
63
- this.logger('Agent is typing...');
68
+ logger.info('Agent is typing ...');
64
69
  result += value;
65
70
  return await processEvents(await reader.read());
66
71
  };
@@ -77,15 +82,15 @@ class CopilotStudioClient {
77
82
  if (!this.conversationId.trim()) {
78
83
  // Did not get it from the header.
79
84
  this.conversationId = (_b = (_a = act.conversation) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : '';
80
- this.logger(`Conversation ID: ${this.conversationId}`);
85
+ logger.debug(`Conversation ID: ${this.conversationId}`);
81
86
  }
82
87
  }
83
88
  else {
84
- this.logger('Activity type: ', act.type);
89
+ logger.debug(`Activity type: ${act.type}`);
85
90
  }
86
91
  }
87
92
  catch (e) {
88
- this.logger('Error: ', e);
93
+ logger.error('Error: ', e);
89
94
  throw e;
90
95
  }
91
96
  });
@@ -100,10 +105,15 @@ class CopilotStudioClient {
100
105
  */
101
106
  static getProductInfo() {
102
107
  const version = `CopilotStudioClient.agents-sdk-js/${package_json_1.default.version}`;
108
+ let userAgent;
103
109
  if (typeof window !== 'undefined' && window.navigator) {
104
- return `${version} ${navigator.userAgent}`;
110
+ userAgent = `${version} ${navigator.userAgent}`;
111
+ }
112
+ else {
113
+ userAgent = `${version} nodejs/${process.version} ${os_1.default.platform()}-${os_1.default.arch()}/${os_1.default.release()}`;
105
114
  }
106
- return `${version} nodejs/${process.version} ${os_1.default.platform()}-${os_1.default.arch()}/${os_1.default.release()}`;
115
+ logger.debug(`User-Agent: ${userAgent}`);
116
+ return userAgent;
107
117
  }
108
118
  /**
109
119
  * Starts a new conversation with the Copilot Studio service.
@@ -111,6 +121,7 @@ class CopilotStudioClient {
111
121
  * @returns A promise that resolves to the initial activity of the conversation.
112
122
  */
113
123
  async startConversationAsync(emitStartConversationEvent = true) {
124
+ var _a;
114
125
  const uriStart = (0, powerPlatformEnvironment_1.getCopilotStudioConnectionUrl)(this.settings);
115
126
  const body = { emitStartConversationEvent };
116
127
  const config = {
@@ -124,8 +135,10 @@ class CopilotStudioClient {
124
135
  responseType: 'stream',
125
136
  adapter: 'fetch'
126
137
  };
138
+ logger.info('Starting conversation ...');
127
139
  const values = await this.postRequestAsync(config);
128
140
  const act = values[0];
141
+ logger.info(`Conversation '${(_a = act.conversation) === null || _a === void 0 ? void 0 : _a.id}' started. Received ${values.length} activities.`, values);
129
142
  return act;
130
143
  }
131
144
  /**
@@ -159,7 +172,9 @@ class CopilotStudioClient {
159
172
  responseType: 'stream',
160
173
  adapter: 'fetch'
161
174
  };
175
+ logger.info(`Asking question: ${question} ...`);
162
176
  const values = await this.postRequestAsync(config);
177
+ logger.info(`Received ${values.length} activities.`, values);
163
178
  return values;
164
179
  }
165
180
  }
@@ -169,8 +184,10 @@ CopilotStudioClient.conversationIdHeaderKey = 'x-ms-conversationid';
169
184
  /** Island Header key */
170
185
  CopilotStudioClient.islandExperimentalUrlHeaderKey = 'x-ms-d2e-experimental';
171
186
  /**
172
- * Returns the Scope URL needed to connect to Copilot Studio from the Connection Settings.
173
- * @param settings Copilot Studio Connection Settings.
187
+ * Returns the scope URL needed to connect to Copilot Studio from the connection settings.
188
+ * This is used for authentication token audience configuration.
189
+ * @param settings Copilot Studio connection settings.
190
+ * @returns The scope URL for token audience.
174
191
  */
175
192
  CopilotStudioClient.scopeFromSettings = powerPlatformEnvironment_1.getTokenAudience;
176
193
  //# sourceMappingURL=copilotStudioClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"copilotStudioClient.js","sourceRoot":"","sources":["../../src/copilotStudioClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"copilotStudioClient.js","sourceRoot":"","sources":["../../src/copilotStudioClient.ts"],"names":[],"mappings":"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"}
@@ -5,61 +5,179 @@
5
5
  import { Activity } from '@microsoft/agents-activity';
6
6
  import { Observable, BehaviorSubject } from 'rxjs';
7
7
  import { CopilotStudioClient } from './copilotStudioClient';
8
+ /**
9
+ * Configuration settings for the Copilot Studio WebChat connection.
10
+ * These settings control the behavior and appearance of the WebChat interface
11
+ * when connected to the Copilot Studio service.
12
+ */
8
13
  export interface CopilotStudioWebChatSettings {
9
14
  /**
10
- * Whether to show typing indicators in the WebChat.
11
- * Defaults to false.
15
+ * Whether to show typing indicators in the WebChat when the agent is processing a response.
16
+ * When enabled, users will see a typing indicator while waiting for the agent's reply,
17
+ * providing visual feedback that their message is being processed.
18
+ * @default false
12
19
  */
13
20
  showTyping?: boolean;
14
21
  }
22
+ /**
23
+ * Represents a connection interface for integrating Copilot Studio with WebChat.
24
+ * This interface provides the necessary methods and observables to facilitate
25
+ * bidirectional communication between a WebChat client and the Copilot Studio service.
26
+ *
27
+ * The connection follows the DirectLine protocol pattern, making it compatible with
28
+ * Microsoft Bot Framework WebChat components.
29
+ */
15
30
  export interface CopilotStudioWebChatConnection {
16
31
  /**
17
- * An observable that emits the connection status.
18
- * 0 - Disconnected
19
- * 1 - Connecting
20
- * 2 - Connected
21
- */
32
+ * An observable that emits the current connection status as numeric values.
33
+ * This allows WebChat clients to monitor and react to connection state changes.
34
+ *
35
+ * Connection status values:
36
+ * - 0: Disconnected - No active connection to the service
37
+ * - 1: Connecting - Attempting to establish connection
38
+ * - 2: Connected - Successfully connected and ready for communication
39
+ */
22
40
  connectionStatus$: BehaviorSubject<number>;
23
41
  /**
24
- * An observable that emits incoming activities.
25
- * The emitted activities will have a 'webchat:sequence-id' in their channelData.
42
+ * An observable stream that emits incoming activities from the Copilot Studio service.
43
+ * Each activity represents a message, card, or other interactive element sent by the agent.
44
+ *
45
+ * All emitted activities include:
46
+ * - A timestamp indicating when the activity was received
47
+ * - A 'webchat:sequence-id' in their channelData for proper message ordering
48
+ * - Standard Bot Framework Activity properties (type, text, attachments, etc.)
26
49
  */
27
50
  activity$: Observable<Partial<Activity>>;
28
51
  /**
29
- * Posts an activity to the Copilot Studio service.
30
- * The activity must have a non-empty text field.
31
- * Returns an observable that emits the activity ID once the activity is posted.
52
+ * Posts a user activity to the Copilot Studio service and returns an observable
53
+ * that emits the activity ID once the message is successfully sent.
54
+ *
55
+ * The method validates that the activity contains meaningful content and handles
56
+ * the complete message flow including optional typing indicators.
32
57
  *
33
- * @param activity - The activity to post.
34
- * @returns An observable that emits the activity ID.
58
+ * @param activity - The user activity to send. Must contain a non-empty text field.
59
+ * @returns An observable that emits the unique activity ID upon successful posting.
60
+ * @throws Error if the activity text is empty or if the connection is not properly initialized.
35
61
  */
36
62
  postActivity(activity: Activity): Observable<string>;
37
63
  /**
38
- * Ends the connection.
39
- * This will complete the connectionStatus$ and activity$ observables.
64
+ * Gracefully terminates the connection to the Copilot Studio service.
65
+ * This method ensures proper cleanup by completing all active observables
66
+ * and releasing associated resources.
67
+ *
68
+ * After calling this method:
69
+ * - The connectionStatus$ observable will be completed
70
+ * - The activity$ observable will stop emitting new activities
71
+ * - No further activities can be posted through this connection
40
72
  */
41
73
  end(): void;
42
74
  }
43
75
  /**
44
- * This class is intended to be used in WebChat applications to connect to the Copilot Studio service.
76
+ * A utility class that provides WebChat integration capabilities for Copilot Studio services.
77
+ * This class acts as a bridge between Microsoft Bot Framework WebChat and Copilot Studio,
78
+ * enabling seamless communication through a DirectLine-compatible interface.
79
+ *
80
+ * ## Key Features:
81
+ * - DirectLine protocol compatibility for easy WebChat integration
82
+ * - Real-time bidirectional messaging with Copilot Studio agents
83
+ * - Automatic conversation management and message sequencing
84
+ * - Optional typing indicators for enhanced user experience
85
+ * - Observable-based architecture for reactive programming patterns
86
+ *
87
+ * ## Usage Scenarios:
88
+ * - Embedding Copilot Studio agents in web applications
89
+ * - Creating custom chat interfaces with WebChat components
90
+ * - Building conversational AI experiences with Microsoft's bot ecosystem
91
+ *
92
+ * @example Basic WebChat Integration
93
+ * ```typescript
94
+ * import { CopilotStudioClient } from '@microsoft/agents-copilotstudio-client';
95
+ * import { CopilotStudioWebChat } from '@microsoft/agents-copilotstudio-client';
96
+ *
97
+ * // Initialize the Copilot Studio client
98
+ * const client = new CopilotStudioClient({
99
+ * botId: 'your-bot-id',
100
+ * tenantId: 'your-tenant-id'
101
+ * });
45
102
  *
46
- * example usage:
47
- * ```javascript
48
- * const client = new CopilotStudioClient(...)
103
+ * // Create a WebChat-compatible connection
104
+ * const directLine = CopilotStudioWebChat.createConnection(client, {
105
+ * showTyping: true
106
+ * });
107
+ *
108
+ * // Integrate with WebChat
49
109
  * window.WebChat.renderWebChat({
50
- * directLine: CopilotStudioWebChat.createConnection(client)
51
- * })
110
+ * directLine: directLine,
111
+ * // ... other WebChat options
112
+ * }, document.getElementById('webchat'));
113
+ * ```
114
+ *
115
+ * @example Advanced Usage with Connection Monitoring
116
+ * ```typescript
117
+ * const connection = CopilotStudioWebChat.createConnection(client);
118
+ *
119
+ * // Monitor connection status
120
+ * connection.connectionStatus$.subscribe(status => {
121
+ * switch (status) {
122
+ * case 0: console.log('Disconnected'); break;
123
+ * case 1: console.log('Connecting...'); break;
124
+ * case 2: console.log('Connected and ready'); break;
125
+ * }
126
+ * });
127
+ *
128
+ * // Listen for incoming activities
129
+ * connection.activity$.subscribe(activity => {
130
+ * console.log('Received activity:', activity);
131
+ * });
52
132
  * ```
53
133
  */
54
134
  export declare class CopilotStudioWebChat {
55
135
  /**
56
- * Creates a new DirectLine-Like connection to WebChat.
57
- * When an activity is posted in WebChat, the connection will send it to the Copilot Studio service, awaiting response.
58
- * After a response is received, it will emit the incoming activity back to WebChat.
136
+ * Creates a DirectLine-compatible connection for integrating Copilot Studio with WebChat.
137
+ *
138
+ * This method establishes a real-time communication channel between WebChat and the
139
+ * Copilot Studio service. The returned connection object implements the DirectLine
140
+ * protocol, making it fully compatible with Microsoft Bot Framework WebChat components.
141
+ *
142
+ * ## Connection Lifecycle:
143
+ * 1. **Initialization**: Creates observables for connection status and activity streaming
144
+ * 2. **Conversation Start**: Automatically initiates conversation when first activity is posted
145
+ * 3. **Message Flow**: Handles bidirectional message exchange with proper sequencing
146
+ * 4. **Cleanup**: Provides graceful connection termination
147
+ *
148
+ * ## Message Processing:
149
+ * - User messages are validated and sent to Copilot Studio
150
+ * - Agent responses are received and formatted for WebChat
151
+ * - All activities include timestamps and sequence IDs for proper ordering
152
+ * - Optional typing indicators provide visual feedback during processing
153
+ *
154
+ * @param client - A configured CopilotStudioClient instance that handles the underlying
155
+ * communication with the Copilot Studio service. This client should be
156
+ * properly authenticated and configured with the target bot details.
157
+ *
158
+ * @param settings - Optional configuration settings that control the behavior of the
159
+ * WebChat connection. These settings allow customization of features
160
+ * like typing indicators and other user experience enhancements.
161
+ *
162
+ * @returns A new CopilotStudioWebChatConnection instance that can be passed directly
163
+ * to WebChat's renderWebChat function as the directLine parameter. The
164
+ * connection is immediately ready for use and will automatically manage
165
+ * the conversation lifecycle.
166
+ *
167
+ * @throws Error if the provided client is not properly configured or if there are
168
+ * issues establishing the initial connection to the Copilot Studio service.
169
+ *
170
+ * @example
171
+ * ```typescript
172
+ * const connection = CopilotStudioWebChat.createConnection(client, {
173
+ * showTyping: true
174
+ * });
59
175
  *
60
- * @param client - The Copilot Studio client instance.
61
- * @param settings - Optional settings for the WebChat connection.
62
- * @returns A new instance of CopilotStudioWebChatConnection.
176
+ * // Use with WebChat
177
+ * window.WebChat.renderWebChat({
178
+ * directLine: connection
179
+ * }, document.getElementById('webchat'));
180
+ * ```
63
181
  */
64
182
  static createConnection(client: CopilotStudioClient, settings?: CopilotStudioWebChatSettings): CopilotStudioWebChatConnection;
65
183
  }
@@ -7,38 +7,128 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.CopilotStudioWebChat = void 0;
8
8
  const uuid_1 = require("uuid");
9
9
  const rxjs_1 = require("rxjs");
10
+ const logger_1 = require("@microsoft/agents-activity/src/logger");
11
+ const logger = (0, logger_1.debug)('copilot-studio:webchat');
10
12
  /**
11
- * This class is intended to be used in WebChat applications to connect to the Copilot Studio service.
13
+ * A utility class that provides WebChat integration capabilities for Copilot Studio services.
14
+ * This class acts as a bridge between Microsoft Bot Framework WebChat and Copilot Studio,
15
+ * enabling seamless communication through a DirectLine-compatible interface.
12
16
  *
13
- * example usage:
14
- * ```javascript
15
- * const client = new CopilotStudioClient(...)
17
+ * ## Key Features:
18
+ * - DirectLine protocol compatibility for easy WebChat integration
19
+ * - Real-time bidirectional messaging with Copilot Studio agents
20
+ * - Automatic conversation management and message sequencing
21
+ * - Optional typing indicators for enhanced user experience
22
+ * - Observable-based architecture for reactive programming patterns
23
+ *
24
+ * ## Usage Scenarios:
25
+ * - Embedding Copilot Studio agents in web applications
26
+ * - Creating custom chat interfaces with WebChat components
27
+ * - Building conversational AI experiences with Microsoft's bot ecosystem
28
+ *
29
+ * @example Basic WebChat Integration
30
+ * ```typescript
31
+ * import { CopilotStudioClient } from '@microsoft/agents-copilotstudio-client';
32
+ * import { CopilotStudioWebChat } from '@microsoft/agents-copilotstudio-client';
33
+ *
34
+ * // Initialize the Copilot Studio client
35
+ * const client = new CopilotStudioClient({
36
+ * botId: 'your-bot-id',
37
+ * tenantId: 'your-tenant-id'
38
+ * });
39
+ *
40
+ * // Create a WebChat-compatible connection
41
+ * const directLine = CopilotStudioWebChat.createConnection(client, {
42
+ * showTyping: true
43
+ * });
44
+ *
45
+ * // Integrate with WebChat
16
46
  * window.WebChat.renderWebChat({
17
- * directLine: CopilotStudioWebChat.createConnection(client)
18
- * })
47
+ * directLine: directLine,
48
+ * // ... other WebChat options
49
+ * }, document.getElementById('webchat'));
50
+ * ```
51
+ *
52
+ * @example Advanced Usage with Connection Monitoring
53
+ * ```typescript
54
+ * const connection = CopilotStudioWebChat.createConnection(client);
55
+ *
56
+ * // Monitor connection status
57
+ * connection.connectionStatus$.subscribe(status => {
58
+ * switch (status) {
59
+ * case 0: console.log('Disconnected'); break;
60
+ * case 1: console.log('Connecting...'); break;
61
+ * case 2: console.log('Connected and ready'); break;
62
+ * }
63
+ * });
64
+ *
65
+ * // Listen for incoming activities
66
+ * connection.activity$.subscribe(activity => {
67
+ * console.log('Received activity:', activity);
68
+ * });
19
69
  * ```
20
70
  */
21
71
  class CopilotStudioWebChat {
22
72
  /**
23
- * Creates a new DirectLine-Like connection to WebChat.
24
- * When an activity is posted in WebChat, the connection will send it to the Copilot Studio service, awaiting response.
25
- * After a response is received, it will emit the incoming activity back to WebChat.
73
+ * Creates a DirectLine-compatible connection for integrating Copilot Studio with WebChat.
74
+ *
75
+ * This method establishes a real-time communication channel between WebChat and the
76
+ * Copilot Studio service. The returned connection object implements the DirectLine
77
+ * protocol, making it fully compatible with Microsoft Bot Framework WebChat components.
78
+ *
79
+ * ## Connection Lifecycle:
80
+ * 1. **Initialization**: Creates observables for connection status and activity streaming
81
+ * 2. **Conversation Start**: Automatically initiates conversation when first activity is posted
82
+ * 3. **Message Flow**: Handles bidirectional message exchange with proper sequencing
83
+ * 4. **Cleanup**: Provides graceful connection termination
84
+ *
85
+ * ## Message Processing:
86
+ * - User messages are validated and sent to Copilot Studio
87
+ * - Agent responses are received and formatted for WebChat
88
+ * - All activities include timestamps and sequence IDs for proper ordering
89
+ * - Optional typing indicators provide visual feedback during processing
90
+ *
91
+ * @param client - A configured CopilotStudioClient instance that handles the underlying
92
+ * communication with the Copilot Studio service. This client should be
93
+ * properly authenticated and configured with the target bot details.
26
94
  *
27
- * @param client - The Copilot Studio client instance.
28
- * @param settings - Optional settings for the WebChat connection.
29
- * @returns A new instance of CopilotStudioWebChatConnection.
95
+ * @param settings - Optional configuration settings that control the behavior of the
96
+ * WebChat connection. These settings allow customization of features
97
+ * like typing indicators and other user experience enhancements.
98
+ *
99
+ * @returns A new CopilotStudioWebChatConnection instance that can be passed directly
100
+ * to WebChat's renderWebChat function as the directLine parameter. The
101
+ * connection is immediately ready for use and will automatically manage
102
+ * the conversation lifecycle.
103
+ *
104
+ * @throws Error if the provided client is not properly configured or if there are
105
+ * issues establishing the initial connection to the Copilot Studio service.
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * const connection = CopilotStudioWebChat.createConnection(client, {
110
+ * showTyping: true
111
+ * });
112
+ *
113
+ * // Use with WebChat
114
+ * window.WebChat.renderWebChat({
115
+ * directLine: connection
116
+ * }, document.getElementById('webchat'));
117
+ * ```
30
118
  */
31
119
  static createConnection(client, settings) {
120
+ logger.info('--> Creating connection between Copilot Studio and WebChat ...');
32
121
  let sequence = 0;
33
- let activityObserver;
122
+ let activitySubscriber;
34
123
  let conversation;
35
124
  const connectionStatus$ = new rxjs_1.BehaviorSubject(0);
36
- const activity$ = rxjs_1.Observable.create(async (observer) => {
37
- activityObserver = observer;
125
+ const activity$ = createObservable(async (subscriber) => {
126
+ activitySubscriber = subscriber;
38
127
  if (connectionStatus$.value < 2) {
39
128
  connectionStatus$.next(2);
40
129
  return;
41
130
  }
131
+ logger.debug('--> Connection established.');
42
132
  notifyTyping();
43
133
  const activity = await client.startConversationAsync();
44
134
  conversation = activity.conversation;
@@ -46,14 +136,16 @@ class CopilotStudioWebChat {
46
136
  notifyActivity(activity);
47
137
  });
48
138
  const notifyActivity = (activity) => {
49
- activityObserver === null || activityObserver === void 0 ? void 0 : activityObserver.next({
139
+ const newActivity = {
50
140
  ...activity,
51
141
  timestamp: new Date().toISOString(),
52
142
  channelData: {
53
143
  ...activity.channelData,
54
144
  'webchat:sequence-id': sequence++,
55
145
  },
56
- });
146
+ };
147
+ logger.debug(`Notify '${newActivity.type}' activity to WebChat:`, newActivity);
148
+ activitySubscriber === null || activitySubscriber === void 0 ? void 0 : activitySubscriber.next(newActivity);
57
149
  };
58
150
  const notifyTyping = () => {
59
151
  if (!(settings === null || settings === void 0 ? void 0 : settings.showTyping)) {
@@ -69,39 +161,77 @@ class CopilotStudioWebChat {
69
161
  activity$,
70
162
  postActivity(activity) {
71
163
  var _a;
164
+ logger.info('--> Preparing to send activity to Copilot Studio ...');
72
165
  if (!((_a = activity.text) === null || _a === void 0 ? void 0 : _a.trim())) {
73
166
  throw new Error('Activity text cannot be empty.');
74
167
  }
75
- if (!activityObserver) {
76
- throw new Error('Activity observer is not initialized.');
168
+ if (!activitySubscriber) {
169
+ throw new Error('Activity subscriber is not initialized.');
77
170
  }
78
- return rxjs_1.Observable.create(async (observer) => {
171
+ return createObservable(async (subscriber) => {
79
172
  try {
80
173
  const id = (0, uuid_1.v4)();
174
+ logger.info('--> Sending activity to Copilot Studio ...');
81
175
  notifyActivity({ ...activity, id });
82
176
  notifyTyping();
83
177
  const activities = await client.askQuestionAsync(activity.text);
84
178
  for (const responseActivity of activities) {
85
179
  notifyActivity(responseActivity);
86
180
  }
87
- observer.next(id);
88
- observer.complete();
181
+ subscriber.next(id);
182
+ subscriber.complete();
183
+ logger.info('--> Activity received correctly from Copilot Studio.');
89
184
  }
90
185
  catch (error) {
91
- observer.error(error);
186
+ logger.error('Error sending Activity to Copilot Studio:', error);
187
+ subscriber.error(error);
92
188
  }
93
189
  });
94
190
  },
95
191
  end() {
192
+ logger.info('--> Ending connection between Copilot Studio and WebChat ...');
96
193
  connectionStatus$.complete();
97
- activity$.complete();
98
- if (activityObserver) {
99
- activityObserver.complete();
100
- activityObserver = undefined;
194
+ if (activitySubscriber) {
195
+ activitySubscriber.complete();
196
+ activitySubscriber = undefined;
101
197
  }
102
198
  },
103
199
  };
104
200
  }
105
201
  }
106
202
  exports.CopilotStudioWebChat = CopilotStudioWebChat;
203
+ /**
204
+ * Creates an RxJS Observable that wraps an asynchronous function execution.
205
+ *
206
+ * This utility function provides a clean way to convert async/await patterns
207
+ * into Observable streams, enabling integration with reactive programming patterns
208
+ * used throughout the WebChat connection implementation.
209
+ *
210
+ * The created Observable handles promise resolution and rejection automatically,
211
+ * converting them to appropriate next/error signals for subscribers.
212
+ *
213
+ * @template T - The type of value that the observable will emit
214
+ * @param fn - An asynchronous function that receives a Subscriber and performs
215
+ * the desired async operation. The function should call subscriber.next()
216
+ * with results and subscriber.complete() when finished.
217
+ * @returns A new Observable that executes the provided function and emits its results
218
+ *
219
+ * @example
220
+ * ```typescript
221
+ * const dataObservable = createObservable<string>(async (subscriber) => {
222
+ * try {
223
+ * const result = await fetchData();
224
+ * subscriber.next(result);
225
+ * subscriber.complete();
226
+ * } catch (error) {
227
+ * subscriber.error(error);
228
+ * }
229
+ * });
230
+ * ```
231
+ */
232
+ function createObservable(fn) {
233
+ return new rxjs_1.Observable((subscriber) => {
234
+ Promise.resolve(fn(subscriber)).catch((error) => subscriber.error(error));
235
+ });
236
+ }
107
237
  //# sourceMappingURL=copilotStudioWebChat.js.map