@microsoft/agents-a365-observability-hosting 0.1.0-preview.95 → 0.2.0-preview.1
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/dist/cjs/caching/AgenticTokenCache.d.ts +38 -1
- package/dist/cjs/caching/AgenticTokenCache.d.ts.map +1 -1
- package/dist/cjs/caching/AgenticTokenCache.js +48 -5
- package/dist/cjs/caching/AgenticTokenCache.js.map +1 -1
- package/dist/cjs/index.d.ts +5 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +10 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/middleware/BaggageMiddleware.d.ts +9 -0
- package/dist/cjs/middleware/BaggageMiddleware.d.ts.map +1 -0
- package/dist/cjs/middleware/BaggageMiddleware.js +34 -0
- package/dist/cjs/middleware/BaggageMiddleware.js.map +1 -0
- package/dist/cjs/middleware/ObservabilityHostingManager.d.ts +30 -0
- package/dist/cjs/middleware/ObservabilityHostingManager.d.ts.map +1 -0
- package/dist/cjs/middleware/ObservabilityHostingManager.js +46 -0
- package/dist/cjs/middleware/ObservabilityHostingManager.js.map +1 -0
- package/dist/cjs/middleware/OutputLoggingMiddleware.d.ts +34 -0
- package/dist/cjs/middleware/OutputLoggingMiddleware.d.ts.map +1 -0
- package/dist/cjs/middleware/OutputLoggingMiddleware.js +95 -0
- package/dist/cjs/middleware/OutputLoggingMiddleware.js.map +1 -0
- package/dist/cjs/utils/BaggageBuilderUtils.d.ts +2 -9
- package/dist/cjs/utils/BaggageBuilderUtils.d.ts.map +1 -1
- package/dist/cjs/utils/BaggageBuilderUtils.js +4 -15
- package/dist/cjs/utils/BaggageBuilderUtils.js.map +1 -1
- package/dist/cjs/utils/ScopeUtils.d.ts +39 -26
- package/dist/cjs/utils/ScopeUtils.d.ts.map +1 -1
- package/dist/cjs/utils/ScopeUtils.js +96 -71
- package/dist/cjs/utils/ScopeUtils.js.map +1 -1
- package/dist/cjs/utils/TurnContextUtils.d.ts +18 -10
- package/dist/cjs/utils/TurnContextUtils.d.ts.map +1 -1
- package/dist/cjs/utils/TurnContextUtils.js +33 -53
- package/dist/cjs/utils/TurnContextUtils.js.map +1 -1
- package/dist/esm/caching/AgenticTokenCache.d.ts +38 -1
- package/dist/esm/caching/AgenticTokenCache.d.ts.map +1 -1
- package/dist/esm/caching/AgenticTokenCache.js +48 -6
- package/dist/esm/caching/AgenticTokenCache.js.map +1 -1
- package/dist/esm/index.d.ts +5 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +4 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/middleware/BaggageMiddleware.d.ts +9 -0
- package/dist/esm/middleware/BaggageMiddleware.d.ts.map +1 -0
- package/dist/esm/middleware/BaggageMiddleware.js +30 -0
- package/dist/esm/middleware/BaggageMiddleware.js.map +1 -0
- package/dist/esm/middleware/ObservabilityHostingManager.d.ts +30 -0
- package/dist/esm/middleware/ObservabilityHostingManager.d.ts.map +1 -0
- package/dist/esm/middleware/ObservabilityHostingManager.js +42 -0
- package/dist/esm/middleware/ObservabilityHostingManager.js.map +1 -0
- package/dist/esm/middleware/OutputLoggingMiddleware.d.ts +34 -0
- package/dist/esm/middleware/OutputLoggingMiddleware.d.ts.map +1 -0
- package/dist/esm/middleware/OutputLoggingMiddleware.js +91 -0
- package/dist/esm/middleware/OutputLoggingMiddleware.js.map +1 -0
- package/dist/esm/utils/BaggageBuilderUtils.d.ts +2 -9
- package/dist/esm/utils/BaggageBuilderUtils.d.ts.map +1 -1
- package/dist/esm/utils/BaggageBuilderUtils.js +5 -16
- package/dist/esm/utils/BaggageBuilderUtils.js.map +1 -1
- package/dist/esm/utils/ScopeUtils.d.ts +39 -26
- package/dist/esm/utils/ScopeUtils.d.ts.map +1 -1
- package/dist/esm/utils/ScopeUtils.js +98 -73
- package/dist/esm/utils/ScopeUtils.js.map +1 -1
- package/dist/esm/utils/TurnContextUtils.d.ts +18 -10
- package/dist/esm/utils/TurnContextUtils.d.ts.map +1 -1
- package/dist/esm/utils/TurnContextUtils.js +32 -52
- package/dist/esm/utils/TurnContextUtils.js.map +1 -1
- package/package.json +5 -4
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
// ------------------------------------------------------------------------------
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.getCallerBaggagePairs = getCallerBaggagePairs;
|
|
8
|
-
exports.
|
|
8
|
+
exports.resolveEmbodiedAgentIds = resolveEmbodiedAgentIds;
|
|
9
9
|
exports.getTargetAgentBaggagePairs = getTargetAgentBaggagePairs;
|
|
10
10
|
exports.getTenantIdPair = getTenantIdPair;
|
|
11
|
-
exports.
|
|
11
|
+
exports.getChannelBaggagePairs = getChannelBaggagePairs;
|
|
12
12
|
exports.getConversationIdAndItemLinkPairs = getConversationIdAndItemLinkPairs;
|
|
13
13
|
const agents_a365_observability_1 = require("@microsoft/agents-a365-observability");
|
|
14
|
-
const
|
|
14
|
+
const agents_a365_runtime_1 = require("@microsoft/agents-a365-runtime");
|
|
15
15
|
/**
|
|
16
16
|
* TurnContext utility methods.
|
|
17
17
|
*/
|
|
@@ -23,7 +23,7 @@ function normalizePairs(pairs) {
|
|
|
23
23
|
/**
|
|
24
24
|
* Extracts caller-related OpenTelemetry baggage pairs from the TurnContext.
|
|
25
25
|
* @param turnContext The current TurnContext (activity context)
|
|
26
|
-
* @returns Array of [key, value] pairs for caller identity
|
|
26
|
+
* @returns Array of [key, value] pairs for caller identity
|
|
27
27
|
*/
|
|
28
28
|
function getCallerBaggagePairs(turnContext) {
|
|
29
29
|
if (!turnContext || !turnContext.activity?.from) {
|
|
@@ -32,48 +32,43 @@ function getCallerBaggagePairs(turnContext) {
|
|
|
32
32
|
const from = turnContext.activity.from;
|
|
33
33
|
const upn = from.agenticUserId;
|
|
34
34
|
const pairs = [
|
|
35
|
-
[agents_a365_observability_1.OpenTelemetryConstants.
|
|
36
|
-
[agents_a365_observability_1.OpenTelemetryConstants.
|
|
37
|
-
[agents_a365_observability_1.OpenTelemetryConstants.
|
|
38
|
-
[agents_a365_observability_1.OpenTelemetryConstants.
|
|
39
|
-
[agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_AGENT_BLUEPRINT_ID_KEY, from.agenticAppBlueprintId]
|
|
35
|
+
[agents_a365_observability_1.OpenTelemetryConstants.USER_ID_KEY, from.aadObjectId],
|
|
36
|
+
[agents_a365_observability_1.OpenTelemetryConstants.USER_NAME_KEY, from.name],
|
|
37
|
+
[agents_a365_observability_1.OpenTelemetryConstants.USER_EMAIL_KEY, upn],
|
|
38
|
+
[agents_a365_observability_1.OpenTelemetryConstants.GEN_AI_CALLER_AGENT_APPLICATION_ID_KEY, from.agenticAppBlueprintId]
|
|
40
39
|
];
|
|
41
40
|
return normalizePairs(pairs);
|
|
42
41
|
}
|
|
43
42
|
/**
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
43
|
+
* Resolves the agent instance ID and blueprint ID for embodied (agentic) agents only.
|
|
44
|
+
* For the non-embodied agent case, we cannot reliably determine whether the token contains an app ID,
|
|
45
|
+
* or whether the app ID present in the token claims actually corresponds to this agent. Therefore,
|
|
46
|
+
* we only set agentId and agentBlueprintId for embodied (agentic) agents.
|
|
47
|
+
* @param turnContext Activity context
|
|
48
|
+
* @param authToken Auth token for resolving blueprint ID from token claims.
|
|
49
|
+
* @returns Object with agentId and agentBlueprintId, both undefined for non-embodied agents.
|
|
47
50
|
*/
|
|
48
|
-
function
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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]];
|
|
51
|
+
function resolveEmbodiedAgentIds(turnContext, authToken) {
|
|
52
|
+
const isAgentic = turnContext?.activity?.isAgenticRequest?.();
|
|
53
|
+
const rawAgentId = isAgentic ? turnContext.activity.getAgenticInstanceId?.() : undefined;
|
|
54
|
+
const rawBlueprintId = isAgentic ? agents_a365_runtime_1.Utility.getAgentIdFromToken(authToken) : undefined;
|
|
55
|
+
return {
|
|
56
|
+
agentId: rawAgentId || undefined,
|
|
57
|
+
agentBlueprintId: rawBlueprintId || undefined,
|
|
58
|
+
};
|
|
65
59
|
}
|
|
66
60
|
/**
|
|
67
61
|
* Extracts agent/recipient-related OpenTelemetry baggage pairs from the TurnContext.
|
|
68
62
|
* @param turnContext The current TurnContext (activity context)
|
|
63
|
+
* @param authToken Optional auth token for resolving agent blueprint ID from token claims.
|
|
69
64
|
* @returns Array of [key, value] pairs for agent identity and description
|
|
70
65
|
*/
|
|
71
|
-
function getTargetAgentBaggagePairs(turnContext) {
|
|
66
|
+
function getTargetAgentBaggagePairs(turnContext, authToken) {
|
|
72
67
|
if (!turnContext || !turnContext.activity?.recipient) {
|
|
73
68
|
return [];
|
|
74
69
|
}
|
|
75
70
|
const recipient = turnContext.activity.recipient;
|
|
76
|
-
const agentId =
|
|
71
|
+
const { agentId } = authToken ? resolveEmbodiedAgentIds(turnContext, authToken) : { agentId: turnContext.activity?.isAgenticRequest?.() ? turnContext.activity.getAgenticInstanceId?.() : undefined };
|
|
77
72
|
const agentName = recipient.name;
|
|
78
73
|
const aadObjectId = recipient.aadObjectId;
|
|
79
74
|
const agentDescription = recipient.role;
|
|
@@ -86,41 +81,26 @@ function getTargetAgentBaggagePairs(turnContext) {
|
|
|
86
81
|
return normalizePairs(pairs);
|
|
87
82
|
}
|
|
88
83
|
/**
|
|
89
|
-
* Extracts the tenant ID baggage key-value pair
|
|
84
|
+
* Extracts the tenant ID baggage key-value pair using the Activity's getAgenticTenantId() helper.
|
|
90
85
|
* @param turnContext The current TurnContext (activity context)
|
|
91
86
|
* @returns Array of [key, value] for tenant ID
|
|
92
87
|
*/
|
|
93
88
|
function getTenantIdPair(turnContext) {
|
|
94
|
-
|
|
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
|
-
}
|
|
89
|
+
const tenantId = turnContext.activity?.getAgenticTenantId?.();
|
|
110
90
|
return tenantId ? [[agents_a365_observability_1.OpenTelemetryConstants.TENANT_ID_KEY, tenantId]] : [];
|
|
111
91
|
}
|
|
112
92
|
/**
|
|
113
|
-
* Extracts
|
|
93
|
+
* Extracts channel baggage pairs from the TurnContext.
|
|
114
94
|
* @param turnContext The current TurnContext (activity context)
|
|
115
|
-
* @returns Array of [key, value] pairs for channel name and
|
|
95
|
+
* @returns Array of [key, value] pairs for channel name and subchannel description
|
|
116
96
|
*/
|
|
117
|
-
function
|
|
97
|
+
function getChannelBaggagePairs(turnContext) {
|
|
118
98
|
if (!turnContext) {
|
|
119
99
|
return [];
|
|
120
100
|
}
|
|
121
101
|
const pairs = [
|
|
122
|
-
[agents_a365_observability_1.OpenTelemetryConstants.
|
|
123
|
-
[agents_a365_observability_1.OpenTelemetryConstants.
|
|
102
|
+
[agents_a365_observability_1.OpenTelemetryConstants.CHANNEL_NAME_KEY, turnContext.activity?.channelId],
|
|
103
|
+
[agents_a365_observability_1.OpenTelemetryConstants.CHANNEL_LINK_KEY, turnContext.activity?.channelIdSubChannel]
|
|
124
104
|
];
|
|
125
105
|
return normalizePairs(pairs);
|
|
126
106
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TurnContextUtils.js","sourceRoot":"","sources":["../../../src/utils/TurnContextUtils.ts"],"names":[],"mappings":";AAAA,iFAAiF;AACjF,uCAAuC;AACvC,kCAAkC;AAClC,iFAAiF;;AAqBjF,
|
|
1
|
+
{"version":3,"file":"TurnContextUtils.js","sourceRoot":"","sources":["../../../src/utils/TurnContextUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,30 @@
|
|
|
1
1
|
import { TurnContext, Authorization } from '@microsoft/agents-hosting';
|
|
2
|
-
|
|
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 {
|
|
3
16
|
private readonly _map;
|
|
4
17
|
private readonly _defaultRefreshSkewMs;
|
|
5
18
|
private readonly _defaultMaxTokenAgeMs;
|
|
19
|
+
private readonly _maxCacheSize;
|
|
20
|
+
private readonly _maxExpSeconds;
|
|
6
21
|
private readonly _keyLocks;
|
|
22
|
+
private readonly _configProvider;
|
|
23
|
+
/**
|
|
24
|
+
* Construct an AgenticTokenCache.
|
|
25
|
+
* @param configProvider Optional configuration provider. Defaults to defaultObservabilityConfigurationProvider if not specified.
|
|
26
|
+
*/
|
|
27
|
+
constructor(configProvider?: IConfigurationProvider<ObservabilityConfiguration>);
|
|
7
28
|
static makeKey(agentId: string, tenantId: string): string;
|
|
8
29
|
getObservabilityToken(agentId: string, tenantId: string): string | null;
|
|
9
30
|
RefreshObservabilityToken(agentId: string, tenantId: string, turnContext: TurnContext, authorization: Authorization, scopes: string[]): Promise<void>;
|
|
@@ -15,6 +36,22 @@ declare class AgenticTokenCache {
|
|
|
15
36
|
private sleep;
|
|
16
37
|
private withKeyLock;
|
|
17
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Default singleton instance of AgenticTokenCache using the default configuration provider.
|
|
41
|
+
*
|
|
42
|
+
* This instance uses `defaultObservabilityConfigurationProvider` which reads from
|
|
43
|
+
* environment variables. It is suitable for:
|
|
44
|
+
* - Single-tenant deployments
|
|
45
|
+
* - Multi-tenant deployments using dynamic override functions in the configuration
|
|
46
|
+
*
|
|
47
|
+
* **For custom configuration:** Create a new `AgenticTokenCache` instance with your
|
|
48
|
+
* own `IConfigurationProvider<ObservabilityConfiguration>`:
|
|
49
|
+
* ```typescript
|
|
50
|
+
* import { AgenticTokenCache } from '@microsoft/agents-a365-observability-hosting';
|
|
51
|
+
*
|
|
52
|
+
* const customCache = new AgenticTokenCache(myCustomConfigProvider);
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
18
55
|
export declare const AgenticTokenCacheInstance: AgenticTokenCache;
|
|
19
56
|
export default AgenticTokenCacheInstance;
|
|
20
57
|
//# sourceMappingURL=AgenticTokenCache.d.ts.map
|
|
@@ -1 +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;
|
|
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,aAAa,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,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;IAuET,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAQxD,aAAa,IAAI,IAAI;IAI5B,OAAO,CAAC,SAAS;IAoBjB,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"}
|
|
@@ -2,14 +2,31 @@
|
|
|
2
2
|
// Copyright (c) Microsoft Corporation.
|
|
3
3
|
// Licensed under the MIT License.
|
|
4
4
|
// ------------------------------------------------------------------------------
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
import { logger, formatError, defaultObservabilityConfigurationProvider } from '@microsoft/agents-a365-observability';
|
|
6
|
+
/**
|
|
7
|
+
* Cache for agentic authentication tokens used by observability services.
|
|
8
|
+
*
|
|
9
|
+
* For custom configuration, create a new instance with your own configuration provider:
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const customCache = new AgenticTokenCache(myConfigProvider);
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* For default configuration using environment variables, use the exported
|
|
15
|
+
* `AgenticTokenCacheInstance` singleton.
|
|
16
|
+
*/
|
|
17
|
+
export class AgenticTokenCache {
|
|
18
|
+
/**
|
|
19
|
+
* Construct an AgenticTokenCache.
|
|
20
|
+
* @param configProvider Optional configuration provider. Defaults to defaultObservabilityConfigurationProvider if not specified.
|
|
21
|
+
*/
|
|
22
|
+
constructor(configProvider) {
|
|
9
23
|
this._map = new Map();
|
|
10
24
|
this._defaultRefreshSkewMs = 60000;
|
|
11
25
|
this._defaultMaxTokenAgeMs = 3600000;
|
|
26
|
+
this._maxCacheSize = 10000;
|
|
27
|
+
this._maxExpSeconds = 86400; // 24 hours
|
|
12
28
|
this._keyLocks = new Map();
|
|
29
|
+
this._configProvider = configProvider ?? defaultObservabilityConfigurationProvider;
|
|
13
30
|
}
|
|
14
31
|
static makeKey(agentId, tenantId) {
|
|
15
32
|
return `${agentId}:${tenantId}`;
|
|
@@ -42,12 +59,18 @@ class AgenticTokenCache {
|
|
|
42
59
|
return this.withKeyLock(key, async () => {
|
|
43
60
|
let entry = this._map.get(key);
|
|
44
61
|
if (!entry) {
|
|
45
|
-
const effectiveScopes = (scopes && scopes.length > 0) ? scopes :
|
|
62
|
+
const effectiveScopes = (scopes && scopes.length > 0) ? scopes : [...this._configProvider.getConfiguration().observabilityAuthenticationScopes];
|
|
46
63
|
if (!Array.isArray(effectiveScopes) || effectiveScopes.length === 0) {
|
|
47
64
|
logger.error('[AgenticTokenCache] No valid scopes');
|
|
48
65
|
return;
|
|
49
66
|
}
|
|
50
67
|
entry = { scopes: effectiveScopes };
|
|
68
|
+
if (this._map.size >= this._maxCacheSize) {
|
|
69
|
+
const oldest = this._map.keys().next().value;
|
|
70
|
+
if (oldest !== undefined) {
|
|
71
|
+
this._map.delete(oldest);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
51
74
|
this._map.set(key, entry);
|
|
52
75
|
}
|
|
53
76
|
if (!Array.isArray(entry.scopes) || entry.scopes.length === 0) {
|
|
@@ -117,7 +140,10 @@ class AgenticTokenCache {
|
|
|
117
140
|
const payloadSegment = parts[1];
|
|
118
141
|
const padded = payloadSegment + '='.repeat((4 - (payloadSegment.length % 4)) % 4);
|
|
119
142
|
const json = JSON.parse(Buffer.from(padded, 'base64').toString('utf8'));
|
|
120
|
-
|
|
143
|
+
if (typeof json.exp !== 'number')
|
|
144
|
+
return undefined;
|
|
145
|
+
const maxExp = Math.floor(Date.now() / 1000) + this._maxExpSeconds;
|
|
146
|
+
return Math.min(json.exp, maxExp);
|
|
121
147
|
}
|
|
122
148
|
catch {
|
|
123
149
|
return undefined;
|
|
@@ -174,6 +200,22 @@ class AgenticTokenCache {
|
|
|
174
200
|
return currentPromise;
|
|
175
201
|
}
|
|
176
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Default singleton instance of AgenticTokenCache using the default configuration provider.
|
|
205
|
+
*
|
|
206
|
+
* This instance uses `defaultObservabilityConfigurationProvider` which reads from
|
|
207
|
+
* environment variables. It is suitable for:
|
|
208
|
+
* - Single-tenant deployments
|
|
209
|
+
* - Multi-tenant deployments using dynamic override functions in the configuration
|
|
210
|
+
*
|
|
211
|
+
* **For custom configuration:** Create a new `AgenticTokenCache` instance with your
|
|
212
|
+
* own `IConfigurationProvider<ObservabilityConfiguration>`:
|
|
213
|
+
* ```typescript
|
|
214
|
+
* import { AgenticTokenCache } from '@microsoft/agents-a365-observability-hosting';
|
|
215
|
+
*
|
|
216
|
+
* const customCache = new AgenticTokenCache(myCustomConfigProvider);
|
|
217
|
+
* ```
|
|
218
|
+
*/
|
|
177
219
|
export const AgenticTokenCacheInstance = new AgenticTokenCache();
|
|
178
220
|
export default AgenticTokenCacheInstance;
|
|
179
221
|
//# sourceMappingURL=AgenticTokenCache.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgenticTokenCache.js","sourceRoot":"","sources":["../../../src/caching/AgenticTokenCache.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,uCAAuC;AACvC,kCAAkC;AAClC,iFAAiF;AAGjF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"AgenticTokenCache.js","sourceRoot":"","sources":["../../../src/caching/AgenticTokenCache.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
export * from './utils/BaggageBuilderUtils';
|
|
2
2
|
export * from './utils/ScopeUtils';
|
|
3
3
|
export * from './utils/TurnContextUtils';
|
|
4
|
-
export { AgenticTokenCacheInstance } from './caching/AgenticTokenCache';
|
|
4
|
+
export { AgenticTokenCache, AgenticTokenCacheInstance } from './caching/AgenticTokenCache';
|
|
5
|
+
export { BaggageMiddleware } from './middleware/BaggageMiddleware';
|
|
6
|
+
export { OutputLoggingMiddleware, A365_PARENT_SPAN_KEY, A365_AUTH_TOKEN_KEY } from './middleware/OutputLoggingMiddleware';
|
|
7
|
+
export { ObservabilityHostingManager } from './middleware/ObservabilityHostingManager';
|
|
8
|
+
export type { ObservabilityHostingOptions } from './middleware/ObservabilityHostingManager';
|
|
5
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC1H,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC;AACvF,YAAY,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -5,5 +5,8 @@
|
|
|
5
5
|
export * from './utils/BaggageBuilderUtils';
|
|
6
6
|
export * from './utils/ScopeUtils';
|
|
7
7
|
export * from './utils/TurnContextUtils';
|
|
8
|
-
export { AgenticTokenCacheInstance } from './caching/AgenticTokenCache';
|
|
8
|
+
export { AgenticTokenCache, AgenticTokenCacheInstance } from './caching/AgenticTokenCache';
|
|
9
|
+
export { BaggageMiddleware } from './middleware/BaggageMiddleware';
|
|
10
|
+
export { OutputLoggingMiddleware, A365_PARENT_SPAN_KEY, A365_AUTH_TOKEN_KEY } from './middleware/OutputLoggingMiddleware';
|
|
11
|
+
export { ObservabilityHostingManager } from './middleware/ObservabilityHostingManager';
|
|
9
12
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,uCAAuC;AACvC,kCAAkC;AAClC,iFAAiF;AAEjF,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,uCAAuC;AACvC,kCAAkC;AAClC,iFAAiF;AAEjF,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAC1H,OAAO,EAAE,2BAA2B,EAAE,MAAM,0CAA0C,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { TurnContext, Middleware } from '@microsoft/agents-hosting';
|
|
2
|
+
/**
|
|
3
|
+
* Middleware that propagates OpenTelemetry baggage context derived from TurnContext.
|
|
4
|
+
* Async replies (ContinueConversation) are passed through without baggage setup.
|
|
5
|
+
*/
|
|
6
|
+
export declare class BaggageMiddleware implements Middleware {
|
|
7
|
+
onTurn(context: TurnContext, next: () => Promise<void>): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=BaggageMiddleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaggageMiddleware.d.ts","sourceRoot":"","sources":["../../../src/middleware/BaggageMiddleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAWpE;;;GAGG;AACH,qBAAa,iBAAkB,YAAW,UAAU;IAE5C,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;CAsB7E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { ActivityTypes, ActivityEventNames } from '@microsoft/agents-activity';
|
|
4
|
+
import { BaggageBuilder } from '@microsoft/agents-a365-observability';
|
|
5
|
+
import { getCallerBaggagePairs, getTargetAgentBaggagePairs, getTenantIdPair, getChannelBaggagePairs, getConversationIdAndItemLinkPairs, } from '../utils/TurnContextUtils';
|
|
6
|
+
/**
|
|
7
|
+
* Middleware that propagates OpenTelemetry baggage context derived from TurnContext.
|
|
8
|
+
* Async replies (ContinueConversation) are passed through without baggage setup.
|
|
9
|
+
*/
|
|
10
|
+
export class BaggageMiddleware {
|
|
11
|
+
async onTurn(context, next) {
|
|
12
|
+
const isAsyncReply = context.activity?.type === ActivityTypes.Event &&
|
|
13
|
+
context.activity?.name === ActivityEventNames.ContinueConversation;
|
|
14
|
+
if (isAsyncReply) {
|
|
15
|
+
await next();
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const baggageScope = new BaggageBuilder()
|
|
19
|
+
.setPairs(getCallerBaggagePairs(context))
|
|
20
|
+
.setPairs(getTargetAgentBaggagePairs(context))
|
|
21
|
+
.setPairs(getTenantIdPair(context))
|
|
22
|
+
.setPairs(getChannelBaggagePairs(context))
|
|
23
|
+
.setPairs(getConversationIdAndItemLinkPairs(context))
|
|
24
|
+
.build();
|
|
25
|
+
await baggageScope.run(async () => {
|
|
26
|
+
await next();
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=BaggageMiddleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaggageMiddleware.js","sourceRoot":"","sources":["../../../src/middleware/BaggageMiddleware.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAC/E,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,eAAe,EACf,sBAAsB,EACtB,iCAAiC,GAClC,MAAM,2BAA2B,CAAC;AAEnC;;;GAGG;AACH,MAAM,OAAO,iBAAiB;IAE5B,KAAK,CAAC,MAAM,CAAC,OAAoB,EAAE,IAAyB;QAC1D,MAAM,YAAY,GAChB,OAAO,CAAC,QAAQ,EAAE,IAAI,KAAK,aAAa,CAAC,KAAK;YAC9C,OAAO,CAAC,QAAQ,EAAE,IAAI,KAAK,kBAAkB,CAAC,oBAAoB,CAAC;QAErE,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,cAAc,EAAE;aACtC,QAAQ,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;aACxC,QAAQ,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC;aAC7C,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;aAClC,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;aACzC,QAAQ,CAAC,iCAAiC,CAAC,OAAO,CAAC,CAAC;aACpD,KAAK,EAAE,CAAC;QAEX,MAAM,YAAY,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YAChC,MAAM,IAAI,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Middleware } from '@microsoft/agents-hosting';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration options for the hosting observability layer.
|
|
4
|
+
*/
|
|
5
|
+
export interface ObservabilityHostingOptions {
|
|
6
|
+
/** Enable baggage propagation middleware. Defaults to false. */
|
|
7
|
+
enableBaggage?: boolean;
|
|
8
|
+
/** Enable output logging middleware for tracing outgoing messages. Defaults to false. */
|
|
9
|
+
enableOutputLogging?: boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Manager for configuring hosting-layer observability middleware.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const manager = new ObservabilityHostingManager();
|
|
17
|
+
* manager.configure(adapter, { enableOutputLogging: true });
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare class ObservabilityHostingManager {
|
|
21
|
+
private _configured;
|
|
22
|
+
/**
|
|
23
|
+
* Registers observability middleware on the adapter.
|
|
24
|
+
* Subsequent calls are ignored.
|
|
25
|
+
*/
|
|
26
|
+
configure(adapter: {
|
|
27
|
+
use(...middlewares: Array<Middleware>): void;
|
|
28
|
+
}, options: ObservabilityHostingOptions): void;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=ObservabilityHostingManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservabilityHostingManager.d.ts","sourceRoot":"","sources":["../../../src/middleware/ObservabilityHostingManager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAKvD;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,gEAAgE;IAChE,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,yFAAyF;IACzF,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,qBAAa,2BAA2B;IACtC,OAAO,CAAC,WAAW,CAAS;IAE5B;;;OAGG;IACH,SAAS,CACP,OAAO,EAAE;QAAE,GAAG,CAAC,GAAG,WAAW,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,IAAI,CAAA;KAAE,EACzD,OAAO,EAAE,2BAA2B,GACnC,IAAI;CAqBR"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { logger } from '@microsoft/agents-a365-observability';
|
|
4
|
+
import { BaggageMiddleware } from './BaggageMiddleware';
|
|
5
|
+
import { OutputLoggingMiddleware } from './OutputLoggingMiddleware';
|
|
6
|
+
/**
|
|
7
|
+
* Manager for configuring hosting-layer observability middleware.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* const manager = new ObservabilityHostingManager();
|
|
12
|
+
* manager.configure(adapter, { enableOutputLogging: true });
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export class ObservabilityHostingManager {
|
|
16
|
+
constructor() {
|
|
17
|
+
this._configured = false;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Registers observability middleware on the adapter.
|
|
21
|
+
* Subsequent calls are ignored.
|
|
22
|
+
*/
|
|
23
|
+
configure(adapter, options) {
|
|
24
|
+
if (this._configured) {
|
|
25
|
+
logger.warn('[ObservabilityHostingManager] Already configured. Subsequent configure() calls are ignored.');
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const enableBaggage = options.enableBaggage === true;
|
|
29
|
+
const enableOutputLogging = options.enableOutputLogging === true;
|
|
30
|
+
if (enableBaggage) {
|
|
31
|
+
adapter.use(new BaggageMiddleware());
|
|
32
|
+
logger.info('[ObservabilityHostingManager] BaggageMiddleware registered.');
|
|
33
|
+
}
|
|
34
|
+
if (enableOutputLogging) {
|
|
35
|
+
adapter.use(new OutputLoggingMiddleware());
|
|
36
|
+
logger.info('[ObservabilityHostingManager] OutputLoggingMiddleware registered.');
|
|
37
|
+
}
|
|
38
|
+
logger.info(`[ObservabilityHostingManager] Configured. Baggage: ${enableBaggage}, OutputLogging: ${enableOutputLogging}.`);
|
|
39
|
+
this._configured = true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=ObservabilityHostingManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ObservabilityHostingManager.js","sourceRoot":"","sources":["../../../src/middleware/ObservabilityHostingManager.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAapE;;;;;;;;GAQG;AACH,MAAM,OAAO,2BAA2B;IAAxC;QACU,gBAAW,GAAG,KAAK,CAAC;IA8B9B,CAAC;IA5BC;;;OAGG;IACH,SAAS,CACP,OAAyD,EACzD,OAAoC;QAEpC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,6FAA6F,CAAC,CAAC;YAC3G,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,IAAI,CAAC;QACrD,MAAM,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,KAAK,IAAI,CAAC;QAEjE,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC7E,CAAC;QACD,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,sDAAsD,aAAa,oBAAoB,mBAAmB,GAAG,CAAC,CAAC;QAC3H,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { TurnContext, Middleware } from '@microsoft/agents-hosting';
|
|
2
|
+
/**
|
|
3
|
+
* TurnState key for the parent span reference.
|
|
4
|
+
* Set this in `turnState` to link OutputScope spans as children of an InvokeAgentScope.
|
|
5
|
+
*/
|
|
6
|
+
export declare const A365_PARENT_SPAN_KEY = "A365ParentSpanId";
|
|
7
|
+
/**
|
|
8
|
+
* TurnState key for the auth token.
|
|
9
|
+
* Set this in `turnState` so middleware can resolve the agent blueprint ID
|
|
10
|
+
* from token claims (used for embodied/agentic requests).
|
|
11
|
+
*/
|
|
12
|
+
export declare const A365_AUTH_TOKEN_KEY = "A365AuthToken";
|
|
13
|
+
/**
|
|
14
|
+
* Middleware that creates {@link OutputScope} spans for outgoing messages.
|
|
15
|
+
* Links to a parent span when {@link A365_PARENT_SPAN_KEY} is set in turnState.
|
|
16
|
+
*
|
|
17
|
+
* **Privacy note:** Outgoing message content is captured verbatim
|
|
18
|
+
* as span attributes and exported to the configured telemetry backend.
|
|
19
|
+
*/
|
|
20
|
+
export declare class OutputLoggingMiddleware implements Middleware {
|
|
21
|
+
onTurn(context: TurnContext, next: () => Promise<void>): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Resolve the auth token for agent identity resolution.
|
|
24
|
+
* When per-request export is enabled, reads from turnState.
|
|
25
|
+
* Otherwise, reads from the cached observability token.
|
|
26
|
+
*/
|
|
27
|
+
private resolveAuthToken;
|
|
28
|
+
/**
|
|
29
|
+
* Creates a send handler that wraps outgoing messages in OutputScope spans.
|
|
30
|
+
* Reads parent span ref lazily so the agent handler can set it during `next()`.
|
|
31
|
+
*/
|
|
32
|
+
private _createSendHandler;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=OutputLoggingMiddleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OutputLoggingMiddleware.d.ts","sourceRoot":"","sources":["../../../src/middleware/OutputLoggingMiddleware.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAyB,MAAM,2BAA2B,CAAC;AAc3F;;;GAGG;AACH,eAAO,MAAM,oBAAoB,qBAAqB,CAAC;AAEvD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AAEnD;;;;;;GAMG;AACH,qBAAa,uBAAwB,YAAW,UAAU;IAElD,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB5E;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAYxB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CA6C3B"}
|