@microsoft/agents-a365-observability-hosting 0.1.0-preview.103

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/LICENSE.md +21 -0
  2. package/dist/cjs/caching/AgenticTokenCache.d.ts +55 -0
  3. package/dist/cjs/caching/AgenticTokenCache.d.ts.map +1 -0
  4. package/dist/cjs/caching/AgenticTokenCache.js +214 -0
  5. package/dist/cjs/caching/AgenticTokenCache.js.map +1 -0
  6. package/dist/cjs/index.d.ts +5 -0
  7. package/dist/cjs/index.d.ts.map +1 -0
  8. package/dist/cjs/index.js +28 -0
  9. package/dist/cjs/index.js.map +1 -0
  10. package/dist/cjs/utils/BaggageBuilderUtils.d.ts +57 -0
  11. package/dist/cjs/utils/BaggageBuilderUtils.d.ts.map +1 -0
  12. package/dist/cjs/utils/BaggageBuilderUtils.js +93 -0
  13. package/dist/cjs/utils/BaggageBuilderUtils.js.map +1 -0
  14. package/dist/cjs/utils/ScopeUtils.d.ts +83 -0
  15. package/dist/cjs/utils/ScopeUtils.d.ts.map +1 -0
  16. package/dist/cjs/utils/ScopeUtils.js +198 -0
  17. package/dist/cjs/utils/ScopeUtils.js.map +1 -0
  18. package/dist/cjs/utils/TurnContextUtils.d.ts +38 -0
  19. package/dist/cjs/utils/TurnContextUtils.d.ts.map +1 -0
  20. package/dist/cjs/utils/TurnContextUtils.js +144 -0
  21. package/dist/cjs/utils/TurnContextUtils.js.map +1 -0
  22. package/dist/esm/caching/AgenticTokenCache.d.ts +55 -0
  23. package/dist/esm/caching/AgenticTokenCache.d.ts.map +1 -0
  24. package/dist/esm/caching/AgenticTokenCache.js +210 -0
  25. package/dist/esm/caching/AgenticTokenCache.js.map +1 -0
  26. package/dist/esm/index.d.ts +5 -0
  27. package/dist/esm/index.d.ts.map +1 -0
  28. package/dist/esm/index.js +9 -0
  29. package/dist/esm/index.js.map +1 -0
  30. package/dist/esm/utils/BaggageBuilderUtils.d.ts +57 -0
  31. package/dist/esm/utils/BaggageBuilderUtils.d.ts.map +1 -0
  32. package/dist/esm/utils/BaggageBuilderUtils.js +89 -0
  33. package/dist/esm/utils/BaggageBuilderUtils.js.map +1 -0
  34. package/dist/esm/utils/ScopeUtils.d.ts +83 -0
  35. package/dist/esm/utils/ScopeUtils.d.ts.map +1 -0
  36. package/dist/esm/utils/ScopeUtils.js +194 -0
  37. package/dist/esm/utils/ScopeUtils.js.map +1 -0
  38. package/dist/esm/utils/TurnContextUtils.d.ts +38 -0
  39. package/dist/esm/utils/TurnContextUtils.d.ts.map +1 -0
  40. package/dist/esm/utils/TurnContextUtils.js +136 -0
  41. package/dist/esm/utils/TurnContextUtils.js.map +1 -0
  42. package/package.json +65 -0
@@ -0,0 +1,198 @@
1
+ "use strict";
2
+ // ------------------------------------------------------------------------------
3
+ // Copyright (c) Microsoft Corporation.
4
+ // Licensed under the MIT License.
5
+ // ------------------------------------------------------------------------------
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.ScopeUtils = void 0;
8
+ const agents_a365_observability_1 = require("@microsoft/agents-a365-observability");
9
+ const TurnContextUtils_1 = require("./TurnContextUtils");
10
+ /**
11
+ * Unified utilities to populate scope tags from a TurnContext.
12
+ * Provides common tag population and scope-specific helpers.
13
+ */
14
+ class ScopeUtils {
15
+ static setInputMessageTags(scope, turnContext) {
16
+ if (turnContext?.activity?.text) {
17
+ scope.recordInputMessages([turnContext.activity.text]);
18
+ }
19
+ return scope;
20
+ }
21
+ // ----------------------
22
+ // Context-derived helpers
23
+ // ----------------------
24
+ /**
25
+ * Derive tenant details from the TurnContext.
26
+ * @param turnContext Activity context
27
+ * @returns Tenant details if a recipient tenant id is present; otherwise undefined.
28
+ */
29
+ static deriveTenantDetails(turnContext) {
30
+ const tenantId = turnContext?.activity?.recipient?.tenantId;
31
+ return tenantId ? { tenantId } : undefined;
32
+ }
33
+ /**
34
+ * Derive target agent details from the activity recipient.
35
+ * @param turnContext Activity context
36
+ * @returns Agent details built from recipient properties; otherwise undefined.
37
+ */
38
+ static deriveAgentDetails(turnContext) {
39
+ const recipient = turnContext?.activity?.recipient;
40
+ if (!recipient)
41
+ return undefined;
42
+ return {
43
+ agentId: recipient.agenticAppId,
44
+ agentName: recipient.name,
45
+ agentAUID: recipient.aadObjectId,
46
+ agentDescription: recipient.role,
47
+ tenantId: recipient.tenantId
48
+ };
49
+ }
50
+ /**
51
+ * Derive caller agent details from the activity from.
52
+ * @param turnContext Activity context
53
+ * @returns Agent details built from caller (from) properties; otherwise undefined.
54
+ */
55
+ static deriveCallerAgent(turnContext) {
56
+ const from = turnContext?.activity?.from;
57
+ if (!from)
58
+ return undefined;
59
+ return {
60
+ agentBlueprintId: from.agenticAppBlueprintId,
61
+ agentName: from.name,
62
+ agentAUID: from.aadObjectId,
63
+ agentDescription: from.role,
64
+ tenantId: from.tenantId,
65
+ agentId: from.agenticAppId
66
+ };
67
+ }
68
+ /**
69
+ * Derive caller identity details (id, upn, name, tenant, client ip) from the activity from.
70
+ * @param turnContext Activity context
71
+ * @returns Caller details when available; otherwise undefined.
72
+ */
73
+ static deriveCallerDetails(turnContext) {
74
+ const from = turnContext?.activity?.from;
75
+ if (!from)
76
+ return undefined;
77
+ return {
78
+ callerId: from.aadObjectId,
79
+ callerUpn: from.agenticUserId,
80
+ callerName: from.name,
81
+ tenantId: from.tenantId,
82
+ };
83
+ }
84
+ /**
85
+ * Derive conversation id from the TurnContext.
86
+ * @param turnContext Activity context
87
+ * @returns Conversation id when present; otherwise undefined.
88
+ */
89
+ static deriveConversationId(turnContext) {
90
+ return turnContext?.activity?.conversation?.id;
91
+ }
92
+ /**
93
+ * Derive source metadata (channel name and description/link) from the TurnContext.
94
+ * @param turnContext Activity context
95
+ * @returns Object with optional name and description fields.
96
+ */
97
+ static deriveSourceMetadataObject(turnContext) {
98
+ return {
99
+ name: turnContext?.activity?.channelId,
100
+ description: turnContext?.activity?.channelIdSubChannel
101
+ };
102
+ }
103
+ /**
104
+ * Create an `InferenceScope` using `details` and values derived from the provided `TurnContext`.
105
+ * Derives `agentDetails`, `tenantDetails`, `conversationId`, and `sourceMetadata` (channel name/link) from context.
106
+ * Also records input messages from the context if present.
107
+ * @param details The inference call details (model, provider, tokens, etc.).
108
+ * @param turnContext The current activity context to derive scope parameters from.
109
+ * @returns A started `InferenceScope` enriched with context-derived parameters.
110
+ */
111
+ static populateInferenceScopeFromTurnContext(details, turnContext) {
112
+ const agent = ScopeUtils.deriveAgentDetails(turnContext);
113
+ const tenant = ScopeUtils.deriveTenantDetails(turnContext);
114
+ const conversationId = ScopeUtils.deriveConversationId(turnContext);
115
+ const sourceMetadata = ScopeUtils.deriveSourceMetadataObject(turnContext);
116
+ if (!agent) {
117
+ throw new Error('populateInferenceScopeFromTurnContext: Missing agent details on TurnContext (recipient)');
118
+ }
119
+ if (!tenant) {
120
+ throw new Error('populateInferenceScopeFromTurnContext: Missing tenant details on TurnContext (recipient)');
121
+ }
122
+ const scope = agents_a365_observability_1.InferenceScope.start(details, agent, tenant, conversationId, sourceMetadata);
123
+ this.setInputMessageTags(scope, turnContext);
124
+ return scope;
125
+ }
126
+ /**
127
+ * Create an `InvokeAgentScope` using `details` and values derived from the provided `TurnContext`.
128
+ * Populates `conversationId` and `request.sourceMetadata` (channel name/link) in `details` from the `TurnContext`, overriding any existing values.
129
+ * Derives `tenantDetails`, `callerAgentDetails` (from caller), and `callerDetails` (from user).
130
+ * Also sets execution type and input messages from the context if present.
131
+ * @param details The invoke-agent call details to be augmented and used for the scope.
132
+ * @param turnContext The current activity context to derive scope parameters from.
133
+ * @returns A started `InvokeAgentScope` enriched with context-derived parameters.
134
+ */
135
+ static populateInvokeAgentScopeFromTurnContext(details, turnContext) {
136
+ const tenant = ScopeUtils.deriveTenantDetails(turnContext);
137
+ const callerAgent = ScopeUtils.deriveCallerAgent(turnContext);
138
+ const caller = ScopeUtils.deriveCallerDetails(turnContext);
139
+ const invokeAgentDetails = ScopeUtils.buildInvokeAgentDetails(details, turnContext);
140
+ if (!tenant) {
141
+ throw new Error('populateInvokeAgentScopeFromTurnContext: Missing tenant details on TurnContext (recipient)');
142
+ }
143
+ const scope = agents_a365_observability_1.InvokeAgentScope.start(invokeAgentDetails, tenant, callerAgent, caller);
144
+ this.setInputMessageTags(scope, turnContext);
145
+ return scope;
146
+ }
147
+ /**
148
+ * Build InvokeAgentDetails by merging provided details with agent info, conversation id and source metadata from the TurnContext.
149
+ * @param details Base invoke-agent details to augment
150
+ * @param turnContext Activity context
151
+ * @returns New InvokeAgentDetails suitable for starting an InvokeAgentScope.
152
+ */
153
+ static buildInvokeAgentDetails(details, turnContext) {
154
+ const agent = ScopeUtils.deriveAgentDetails(turnContext);
155
+ const srcMetaFromContext = ScopeUtils.deriveSourceMetadataObject(turnContext);
156
+ const executionTypePair = (0, TurnContextUtils_1.getExecutionTypePair)(turnContext);
157
+ const baseRequest = details.request ?? {};
158
+ const baseSource = baseRequest.sourceMetadata ?? {};
159
+ const mergedSourceMetadata = {
160
+ ...baseSource,
161
+ ...(srcMetaFromContext.name !== undefined ? { name: srcMetaFromContext.name } : {}),
162
+ ...(srcMetaFromContext.description !== undefined ? { description: srcMetaFromContext.description } : {}),
163
+ };
164
+ return {
165
+ ...details,
166
+ ...agent,
167
+ conversationId: ScopeUtils.deriveConversationId(turnContext),
168
+ request: {
169
+ ...baseRequest,
170
+ executionType: executionTypePair.length > 0 ? executionTypePair[0][1] : baseRequest.executionType,
171
+ sourceMetadata: mergedSourceMetadata
172
+ }
173
+ };
174
+ }
175
+ /**
176
+ * Create an `ExecuteToolScope` using `details` and values derived from the provided `TurnContext`.
177
+ * Derives `agentDetails`, `tenantDetails`, `conversationId`, and `sourceMetadata` (channel name/link) from context.
178
+ * @param details The tool call details (name, type, args, call id, etc.).
179
+ * @param turnContext The current activity context to derive scope parameters from.
180
+ * @returns A started `ExecuteToolScope` enriched with context-derived parameters.
181
+ */
182
+ static populateExecuteToolScopeFromTurnContext(details, turnContext) {
183
+ const agent = ScopeUtils.deriveAgentDetails(turnContext);
184
+ const tenant = ScopeUtils.deriveTenantDetails(turnContext);
185
+ const conversationId = ScopeUtils.deriveConversationId(turnContext);
186
+ const sourceMetadata = ScopeUtils.deriveSourceMetadataObject(turnContext);
187
+ if (!agent) {
188
+ throw new Error('populateExecuteToolScopeFromTurnContext: Missing agent details on TurnContext (recipient)');
189
+ }
190
+ if (!tenant) {
191
+ throw new Error('populateExecuteToolScopeFromTurnContext: Missing tenant details on TurnContext (recipient)');
192
+ }
193
+ const scope = agents_a365_observability_1.ExecuteToolScope.start(details, agent, tenant, conversationId, sourceMetadata);
194
+ return scope;
195
+ }
196
+ }
197
+ exports.ScopeUtils = ScopeUtils;
198
+ //# sourceMappingURL=ScopeUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScopeUtils.js","sourceRoot":"","sources":["../../../src/utils/ScopeUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ import { TurnContext } from '@microsoft/agents-hosting';
2
+ /**
3
+ * Extracts caller-related OpenTelemetry baggage pairs from the TurnContext.
4
+ * @param turnContext The current TurnContext (activity context)
5
+ * @returns Array of [key, value] pairs for caller identity and tenant
6
+ */
7
+ export declare function getCallerBaggagePairs(turnContext: TurnContext): Array<[string, string]>;
8
+ /**
9
+ * Extracts the execution type baggage key-value pair based on caller and recipient agentic status.
10
+ * @param turnContext The current TurnContext (activity context)
11
+ * @returns Array of [key, value] for execution type
12
+ */
13
+ export declare function getExecutionTypePair(turnContext: TurnContext): Array<[string, string]>;
14
+ /**
15
+ * Extracts agent/recipient-related OpenTelemetry baggage pairs from the TurnContext.
16
+ * @param turnContext The current TurnContext (activity context)
17
+ * @returns Array of [key, value] pairs for agent identity and description
18
+ */
19
+ export declare function getTargetAgentBaggagePairs(turnContext: TurnContext): Array<[string, string]>;
20
+ /**
21
+ * Extracts the tenant ID baggage key-value pair, attempting to retrieve from ChannelData if necessary.
22
+ * @param turnContext The current TurnContext (activity context)
23
+ * @returns Array of [key, value] for tenant ID
24
+ */
25
+ export declare function getTenantIdPair(turnContext: TurnContext): Array<[string, string]>;
26
+ /**
27
+ * Extracts source metadata baggage pairs from the TurnContext.
28
+ * @param turnContext The current TurnContext (activity context)
29
+ * @returns Array of [key, value] pairs for channel name and link
30
+ */
31
+ export declare function getSourceMetadataBaggagePairs(turnContext: TurnContext): Array<[string, string]>;
32
+ /**
33
+ * Extracts conversation ID and item link baggage key-value pairs from the provided turn context.
34
+ * @param turnContext The current TurnContext (activity context)
35
+ * @returns Array of [key, value] pairs for conversation ID and item link
36
+ */
37
+ export declare function getConversationIdAndItemLinkPairs(turnContext: TurnContext): Array<[string, string]>;
38
+ //# sourceMappingURL=TurnContextUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TurnContextUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/TurnContextUtils.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAcxD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAevF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkBtF;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgB5F;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAoBjF;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,WAAW,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAS/F;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAWnG"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ // ------------------------------------------------------------------------------
3
+ // Copyright (c) Microsoft Corporation.
4
+ // Licensed under the MIT License.
5
+ // ------------------------------------------------------------------------------
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getCallerBaggagePairs = getCallerBaggagePairs;
8
+ exports.getExecutionTypePair = getExecutionTypePair;
9
+ exports.getTargetAgentBaggagePairs = getTargetAgentBaggagePairs;
10
+ exports.getTenantIdPair = getTenantIdPair;
11
+ exports.getSourceMetadataBaggagePairs = getSourceMetadataBaggagePairs;
12
+ exports.getConversationIdAndItemLinkPairs = getConversationIdAndItemLinkPairs;
13
+ const agents_a365_observability_1 = require("@microsoft/agents-a365-observability");
14
+ const agents_activity_1 = require("@microsoft/agents-activity");
15
+ /**
16
+ * TurnContext utility methods.
17
+ */
18
+ function normalizePairs(pairs) {
19
+ return pairs
20
+ .filter(([, v]) => v != null && String(v).trim() !== '')
21
+ .map(([k, v]) => [k, String(v)]);
22
+ }
23
+ /**
24
+ * Extracts caller-related OpenTelemetry baggage pairs from the TurnContext.
25
+ * @param turnContext The current TurnContext (activity context)
26
+ * @returns Array of [key, value] pairs for caller identity and tenant
27
+ */
28
+ function getCallerBaggagePairs(turnContext) {
29
+ if (!turnContext || !turnContext.activity?.from) {
30
+ return [];
31
+ }
32
+ const from = turnContext.activity.from;
33
+ const upn = from.agenticUserId;
34
+ const pairs = [
35
+ [agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_CALLER_ID_KEY, from.aadObjectId],
36
+ [agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_CALLER_NAME_KEY, from.name],
37
+ [agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_CALLER_UPN_KEY, upn],
38
+ [agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_CALLER_TENANT_ID_KEY, from.tenantId],
39
+ [agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_AGENT_BLUEPRINT_ID_KEY, from.agenticAppBlueprintId]
40
+ ];
41
+ return normalizePairs(pairs);
42
+ }
43
+ /**
44
+ * Extracts the execution type baggage key-value pair based on caller and recipient agentic status.
45
+ * @param turnContext The current TurnContext (activity context)
46
+ * @returns Array of [key, value] for execution type
47
+ */
48
+ function getExecutionTypePair(turnContext) {
49
+ if (!turnContext || !turnContext.activity?.from || !turnContext.activity?.recipient) {
50
+ return [];
51
+ }
52
+ const from = turnContext.activity.from;
53
+ let executionType = agents_a365_observability_1.ExecutionType.HumanToAgent;
54
+ if (from.role) {
55
+ switch (from.role) {
56
+ case agents_activity_1.RoleTypes.AgenticUser:
57
+ executionType = agents_a365_observability_1.ExecutionType.Agent2Agent;
58
+ break;
59
+ case agents_activity_1.RoleTypes.User:
60
+ executionType = agents_a365_observability_1.ExecutionType.HumanToAgent;
61
+ break;
62
+ }
63
+ }
64
+ return [[agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_EXECUTION_TYPE_KEY, executionType]];
65
+ }
66
+ /**
67
+ * Extracts agent/recipient-related OpenTelemetry baggage pairs from the TurnContext.
68
+ * @param turnContext The current TurnContext (activity context)
69
+ * @returns Array of [key, value] pairs for agent identity and description
70
+ */
71
+ function getTargetAgentBaggagePairs(turnContext) {
72
+ if (!turnContext || !turnContext.activity?.recipient) {
73
+ return [];
74
+ }
75
+ const recipient = turnContext.activity.recipient;
76
+ const agentId = recipient.agenticAppId;
77
+ const agentName = recipient.name;
78
+ const aadObjectId = recipient.aadObjectId;
79
+ const agentDescription = recipient.role;
80
+ const pairs = [
81
+ [agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_AGENT_ID_KEY, agentId],
82
+ [agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_AGENT_NAME_KEY, agentName],
83
+ [agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_AGENT_DESCRIPTION_KEY, agentDescription],
84
+ [agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_AGENT_AUID_KEY, aadObjectId],
85
+ ];
86
+ return normalizePairs(pairs);
87
+ }
88
+ /**
89
+ * Extracts the tenant ID baggage key-value pair, attempting to retrieve from ChannelData if necessary.
90
+ * @param turnContext The current TurnContext (activity context)
91
+ * @returns Array of [key, value] for tenant ID
92
+ */
93
+ function getTenantIdPair(turnContext) {
94
+ let tenantId = turnContext.activity?.recipient?.tenantId;
95
+ // If not found, try to extract from channelData. Accepts both object and JSON string.
96
+ if (!tenantId && turnContext.activity?.channelData) {
97
+ try {
98
+ let channelData = turnContext.activity.channelData;
99
+ if (typeof channelData === 'string') {
100
+ channelData = JSON.parse(channelData);
101
+ }
102
+ if (typeof channelData === 'object' && channelData !== null) {
103
+ tenantId = channelData?.tenant?.id;
104
+ }
105
+ }
106
+ catch (_err) {
107
+ // ignore JSON parse errors
108
+ }
109
+ }
110
+ return tenantId ? [[agents_a365_observability_1.OpenTelemetryConstants.TENANT_ID_KEY, tenantId]] : [];
111
+ }
112
+ /**
113
+ * Extracts source metadata baggage pairs from the TurnContext.
114
+ * @param turnContext The current TurnContext (activity context)
115
+ * @returns Array of [key, value] pairs for channel name and link
116
+ */
117
+ function getSourceMetadataBaggagePairs(turnContext) {
118
+ if (!turnContext) {
119
+ return [];
120
+ }
121
+ const pairs = [
122
+ [agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_EXECUTION_SOURCE_NAME_KEY, turnContext.activity?.channelId],
123
+ [agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_EXECUTION_SOURCE_DESCRIPTION_KEY, turnContext.activity?.channelIdSubChannel]
124
+ ];
125
+ return normalizePairs(pairs);
126
+ }
127
+ /**
128
+ * Extracts conversation ID and item link baggage key-value pairs from the provided turn context.
129
+ * @param turnContext The current TurnContext (activity context)
130
+ * @returns Array of [key, value] pairs for conversation ID and item link
131
+ */
132
+ function getConversationIdAndItemLinkPairs(turnContext) {
133
+ if (!turnContext) {
134
+ return [];
135
+ }
136
+ const conversationId = turnContext.activity?.conversation?.id;
137
+ const itemLink = turnContext.activity?.serviceUrl;
138
+ const pairs = [
139
+ [agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_CONVERSATION_ID_KEY, conversationId],
140
+ [agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_CONVERSATION_ITEM_LINK_KEY, itemLink]
141
+ ];
142
+ return normalizePairs(pairs);
143
+ }
144
+ //# sourceMappingURL=TurnContextUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TurnContextUtils.js","sourceRoot":"","sources":["../../../src/utils/TurnContextUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { TurnContext, Authorization } from '@microsoft/agents-hosting';
2
+ import { ObservabilityConfiguration } from '@microsoft/agents-a365-observability';
3
+ import { IConfigurationProvider } from '@microsoft/agents-a365-runtime';
4
+ /**
5
+ * Cache for agentic authentication tokens used by observability services.
6
+ *
7
+ * For custom configuration, create a new instance with your own configuration provider:
8
+ * ```typescript
9
+ * const customCache = new AgenticTokenCache(myConfigProvider);
10
+ * ```
11
+ *
12
+ * For default configuration using environment variables, use the exported
13
+ * `AgenticTokenCacheInstance` singleton.
14
+ */
15
+ export declare class AgenticTokenCache {
16
+ private readonly _map;
17
+ private readonly _defaultRefreshSkewMs;
18
+ private readonly _defaultMaxTokenAgeMs;
19
+ private readonly _keyLocks;
20
+ private readonly _configProvider;
21
+ /**
22
+ * Construct an AgenticTokenCache.
23
+ * @param configProvider Optional configuration provider. Defaults to defaultObservabilityConfigurationProvider if not specified.
24
+ */
25
+ constructor(configProvider?: IConfigurationProvider<ObservabilityConfiguration>);
26
+ static makeKey(agentId: string, tenantId: string): string;
27
+ getObservabilityToken(agentId: string, tenantId: string): string | null;
28
+ RefreshObservabilityToken(agentId: string, tenantId: string, turnContext: TurnContext, authorization: Authorization, scopes: string[]): Promise<void>;
29
+ invalidateToken(agentId: string, tenantId: string): void;
30
+ invalidateAll(): void;
31
+ private decodeExp;
32
+ private isExpired;
33
+ private isRetriableError;
34
+ private sleep;
35
+ private withKeyLock;
36
+ }
37
+ /**
38
+ * Default singleton instance of AgenticTokenCache using the default configuration provider.
39
+ *
40
+ * This instance uses `defaultObservabilityConfigurationProvider` which reads from
41
+ * environment variables. It is suitable for:
42
+ * - Single-tenant deployments
43
+ * - Multi-tenant deployments using dynamic override functions in the configuration
44
+ *
45
+ * **For custom configuration:** Create a new `AgenticTokenCache` instance with your
46
+ * own `IConfigurationProvider<ObservabilityConfiguration>`:
47
+ * ```typescript
48
+ * import { AgenticTokenCache } from '@microsoft/agents-a365-observability-hosting';
49
+ *
50
+ * const customCache = new AgenticTokenCache(myCustomConfigProvider);
51
+ * ```
52
+ */
53
+ export declare const AgenticTokenCacheInstance: AgenticTokenCache;
54
+ export default AgenticTokenCacheInstance;
55
+ //# sourceMappingURL=AgenticTokenCache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgenticTokenCache.d.ts","sourceRoot":"","sources":["../../../src/caching/AgenticTokenCache.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAuB,0BAA0B,EAA6C,MAAM,sCAAsC,CAAC;AAClJ,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AASxE;;;;;;;;;;GAUG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAiC;IACtD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAU;IAChD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAa;IACnD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IACjE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAqD;IAErF;;;OAGG;gBACS,cAAc,CAAC,EAAE,sBAAsB,CAAC,0BAA0B,CAAC;WAIjE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIzD,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkBjE,yBAAyB,CAClC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC;IAiET,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQxD,aAAa,IAAI,IAAI;IAI5B,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,KAAK;YAIC,WAAW;CAiB5B;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,yBAAyB,mBAA0B,CAAC;AACjE,eAAe,yBAAyB,CAAC"}