@microsoft/agents-hosting 1.8.1 → 1.9.0-beta.18.g6b8111bba5
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 +179 -9
- package/dist/package.json +4 -4
- package/dist/src/app/agentApplication.d.ts +3 -3
- package/dist/src/app/agentApplication.js +6 -16
- package/dist/src/app/agentApplication.js.map +1 -1
- package/dist/src/app/agentApplicationOptions.d.ts +6 -0
- package/dist/src/app/auth/authorization.d.ts +54 -0
- package/dist/src/app/auth/authorization.js +63 -2
- package/dist/src/app/auth/authorization.js.map +1 -1
- package/dist/src/app/auth/authorizationManager.d.ts +0 -8
- package/dist/src/app/auth/authorizationManager.js +104 -178
- package/dist/src/app/auth/authorizationManager.js.map +1 -1
- package/dist/src/auth/authConfiguration.d.ts +10 -3
- package/dist/src/auth/authConfiguration.js +292 -259
- package/dist/src/auth/authConfiguration.js.map +1 -1
- package/dist/src/auth/delegatedTokenCredential.d.ts +29 -0
- package/dist/src/auth/delegatedTokenCredential.js +49 -0
- package/dist/src/auth/delegatedTokenCredential.js.map +1 -0
- package/dist/src/auth/msal/msalTokenCredential.js +1 -1
- package/dist/src/auth/msal/msalTokenCredential.js.map +1 -1
- package/dist/src/auth/settings.d.ts +8 -70
- package/dist/src/auth/settings.js +5 -67
- package/dist/src/auth/settings.js.map +1 -1
- package/dist/src/cloudAdapter.d.ts +5 -0
- package/dist/src/cloudAdapter.js +13 -103
- package/dist/src/cloudAdapter.js.map +1 -1
- package/dist/src/configuration/botFrameworkEnvironmentCompatibility.d.ts +23 -0
- package/dist/src/configuration/botFrameworkEnvironmentCompatibility.js +183 -0
- package/dist/src/configuration/botFrameworkEnvironmentCompatibility.js.map +1 -0
- package/dist/src/configuration/configuration.d.ts +83 -0
- package/dist/src/configuration/configuration.js +836 -0
- package/dist/src/configuration/configuration.js.map +1 -0
- package/dist/src/configuration/configurationSource.d.ts +57 -0
- package/dist/src/configuration/configurationSource.js +7 -0
- package/dist/src/configuration/configurationSource.js.map +1 -0
- package/dist/src/configuration/environmentConfiguration.d.ts +14 -0
- package/dist/src/configuration/environmentConfiguration.js +271 -0
- package/dist/src/configuration/environmentConfiguration.js.map +1 -0
- package/dist/src/configuration/index.d.ts +7 -0
- package/dist/src/configuration/index.js +14 -0
- package/dist/src/configuration/index.js.map +1 -0
- package/dist/src/configuration/jsonFileConfigurationSource.d.ts +15 -0
- package/dist/src/configuration/jsonFileConfigurationSource.js +58 -0
- package/dist/src/configuration/jsonFileConfigurationSource.js.map +1 -0
- package/dist/src/createCloudAdapter.d.ts +30 -5
- package/dist/src/createCloudAdapter.js +17 -10
- package/dist/src/createCloudAdapter.js.map +1 -1
- package/dist/src/errorHelper.js +90 -2
- package/dist/src/errorHelper.js.map +1 -1
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/outboundHostValidator.d.ts +4 -1
- package/dist/src/outboundHostValidator.js +25 -48
- package/dist/src/outboundHostValidator.js.map +1 -1
- package/dist/src/storage/fileStorage.d.ts +5 -2
- package/dist/src/storage/fileStorage.js +41 -3
- package/dist/src/storage/fileStorage.js.map +1 -1
- package/dist/src/storage/index.d.ts +1 -0
- package/dist/src/storage/index.js +1 -0
- package/dist/src/storage/index.js.map +1 -1
- package/dist/src/storage/memoryStorage.d.ts +4 -2
- package/dist/src/storage/memoryStorage.js +32 -6
- package/dist/src/storage/memoryStorage.js.map +1 -1
- package/dist/src/storage/storage.d.ts +14 -1
- package/dist/src/storage/storageExpiry.d.ts +6 -0
- package/dist/src/storage/storageExpiry.js +20 -0
- package/dist/src/storage/storageExpiry.js.map +1 -0
- package/dist/src/utils/env.d.ts +43 -0
- package/dist/src/utils/env.js +42 -6
- package/dist/src/utils/env.js.map +1 -1
- package/dist/src/utils.d.ts +1 -0
- package/dist/src/utils.js +10 -1
- package/dist/src/utils.js.map +1 -1
- package/package.json +4 -4
- package/src/app/agentApplication.ts +11 -14
- package/src/app/agentApplicationOptions.ts +7 -0
- package/src/app/auth/authorization.ts +67 -2
- package/src/app/auth/authorizationManager.ts +126 -204
- package/src/auth/authConfiguration.ts +415 -260
- package/src/auth/delegatedTokenCredential.ts +49 -0
- package/src/auth/msal/msalTokenCredential.ts +1 -1
- package/src/auth/settings.ts +5 -82
- package/src/cloudAdapter.ts +38 -113
- package/src/configuration/botFrameworkEnvironmentCompatibility.ts +245 -0
- package/src/configuration/configuration.ts +1076 -0
- package/src/configuration/configurationSource.ts +76 -0
- package/src/configuration/environmentConfiguration.ts +377 -0
- package/src/configuration/index.ts +19 -0
- package/src/configuration/jsonFileConfigurationSource.ts +74 -0
- package/src/createCloudAdapter.ts +52 -9
- package/src/errorHelper.ts +110 -2
- package/src/index.ts +1 -0
- package/src/outboundHostValidator.ts +37 -44
- package/src/storage/fileStorage.ts +43 -5
- package/src/storage/index.ts +1 -0
- package/src/storage/memoryStorage.ts +34 -8
- package/src/storage/storage.ts +15 -1
- package/src/storage/storageExpiry.ts +21 -0
- package/src/utils/env.ts +63 -0
- package/src/utils.ts +10 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
import { Storage, StoreItem } from './storage';
|
|
5
|
+
import { Storage, StoreItem, StorageWriteOptions } from './storage';
|
|
6
6
|
/**
|
|
7
7
|
* A simple in-memory storage provider that implements the Storage interface.
|
|
8
8
|
*
|
|
@@ -20,6 +20,7 @@ import { Storage, StoreItem } from './storage';
|
|
|
20
20
|
export declare class MemoryStorage implements Storage {
|
|
21
21
|
private memory;
|
|
22
22
|
private static instance;
|
|
23
|
+
private expirations;
|
|
23
24
|
/**
|
|
24
25
|
* Counter used to generate unique eTags for stored items
|
|
25
26
|
*/
|
|
@@ -64,7 +65,7 @@ export declare class MemoryStorage implements Storage {
|
|
|
64
65
|
* has the same eTag. If an item has an eTag of '*' or no eTag, it will
|
|
65
66
|
* always be written regardless of the current state.
|
|
66
67
|
*/
|
|
67
|
-
write(changes: StoreItem): Promise<void>;
|
|
68
|
+
write(changes: StoreItem, options?: StorageWriteOptions): Promise<void>;
|
|
68
69
|
/**
|
|
69
70
|
* Deletes storage items from memory.
|
|
70
71
|
*
|
|
@@ -87,4 +88,5 @@ export declare class MemoryStorage implements Storage {
|
|
|
87
88
|
* @private
|
|
88
89
|
*/
|
|
89
90
|
private saveItem;
|
|
91
|
+
private isExpired;
|
|
90
92
|
}
|
|
@@ -8,6 +8,7 @@ exports.MemoryStorage = void 0;
|
|
|
8
8
|
const agents_telemetry_1 = require("@microsoft/agents-telemetry");
|
|
9
9
|
const agents_activity_1 = require("@microsoft/agents-activity");
|
|
10
10
|
const observability_1 = require("../observability");
|
|
11
|
+
const storageExpiry_1 = require("./storageExpiry");
|
|
11
12
|
const agents_telemetry_2 = require("@microsoft/agents-telemetry");
|
|
12
13
|
const errorHelper_1 = require("../errorHelper");
|
|
13
14
|
const logger = (0, agents_telemetry_2.debug)('agents:memory-storage');
|
|
@@ -33,6 +34,7 @@ class MemoryStorage {
|
|
|
33
34
|
*/
|
|
34
35
|
constructor(memory = {}) {
|
|
35
36
|
this.memory = memory;
|
|
37
|
+
this.expirations = {};
|
|
36
38
|
/**
|
|
37
39
|
* Counter used to generate unique eTags for stored items
|
|
38
40
|
*/
|
|
@@ -70,6 +72,12 @@ class MemoryStorage {
|
|
|
70
72
|
const data = {};
|
|
71
73
|
for (const key of keys) {
|
|
72
74
|
logger.debug(`Reading key: ${key}`);
|
|
75
|
+
if (this.isExpired(key)) {
|
|
76
|
+
logger.info('Item expired, deleting from memory', { key: (0, agents_telemetry_1.redactString)(key, true) });
|
|
77
|
+
delete this.memory[key];
|
|
78
|
+
delete this.expirations[key];
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
73
81
|
const item = this.memory[key];
|
|
74
82
|
if (item) {
|
|
75
83
|
data[key] = JSON.parse(item);
|
|
@@ -91,22 +99,29 @@ class MemoryStorage {
|
|
|
91
99
|
* has the same eTag. If an item has an eTag of '*' or no eTag, it will
|
|
92
100
|
* always be written regardless of the current state.
|
|
93
101
|
*/
|
|
94
|
-
async write(changes) {
|
|
102
|
+
async write(changes, options) {
|
|
95
103
|
return (0, agents_telemetry_1.trace)(observability_1.StorageTraceDefinitions.write, async ({ record }) => {
|
|
96
|
-
|
|
104
|
+
const keys = changes ? Object.keys(changes) : [];
|
|
105
|
+
if (!changes || keys.length === 0) {
|
|
97
106
|
throw agents_activity_1.ExceptionHelper.generateException(ReferenceError, errorHelper_1.Errors.StorageWriteChangesRequired);
|
|
98
107
|
}
|
|
99
|
-
|
|
108
|
+
const expiresAt = (0, storageExpiry_1.getStorageWriteExpiry)(options);
|
|
109
|
+
record({ keyCount: keys.length });
|
|
100
110
|
for (const [key, newItem] of Object.entries(changes)) {
|
|
101
111
|
logger.debug(`Writing key: ${key}`);
|
|
112
|
+
if (this.isExpired(key)) {
|
|
113
|
+
logger.info('Item expired, deleting from memory', { key: (0, agents_telemetry_1.redactString)(key, true) });
|
|
114
|
+
delete this.memory[key];
|
|
115
|
+
delete this.expirations[key];
|
|
116
|
+
}
|
|
102
117
|
const oldItemStr = this.memory[key];
|
|
103
118
|
if (!oldItemStr || newItem.eTag === '*' || !newItem.eTag) {
|
|
104
|
-
this.saveItem(key, newItem);
|
|
119
|
+
this.saveItem(key, newItem, expiresAt);
|
|
105
120
|
}
|
|
106
121
|
else {
|
|
107
122
|
const oldItem = JSON.parse(oldItemStr);
|
|
108
123
|
if (newItem.eTag === oldItem.eTag) {
|
|
109
|
-
this.saveItem(key, newItem);
|
|
124
|
+
this.saveItem(key, newItem, expiresAt);
|
|
110
125
|
}
|
|
111
126
|
else {
|
|
112
127
|
throw agents_activity_1.ExceptionHelper.generateException(Error, errorHelper_1.Errors.StorageETagConflict, undefined, { key });
|
|
@@ -127,6 +142,7 @@ class MemoryStorage {
|
|
|
127
142
|
logger.debug(`Deleting keys: ${keys.join(', ')}`);
|
|
128
143
|
for (const key of keys) {
|
|
129
144
|
delete this.memory[key];
|
|
145
|
+
delete this.expirations[key];
|
|
130
146
|
}
|
|
131
147
|
});
|
|
132
148
|
}
|
|
@@ -144,9 +160,19 @@ class MemoryStorage {
|
|
|
144
160
|
*
|
|
145
161
|
* @private
|
|
146
162
|
*/
|
|
147
|
-
saveItem(key, item) {
|
|
163
|
+
saveItem(key, item, expiresAt) {
|
|
148
164
|
const clone = Object.assign({}, item, { eTag: (this.etag++).toString() });
|
|
149
165
|
this.memory[key] = JSON.stringify(clone);
|
|
166
|
+
if (expiresAt === undefined) {
|
|
167
|
+
delete this.expirations[key];
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.expirations[key] = expiresAt;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
isExpired(key) {
|
|
174
|
+
const expiresAt = this.expirations[key];
|
|
175
|
+
return expiresAt !== undefined && expiresAt <= Date.now();
|
|
150
176
|
}
|
|
151
177
|
}
|
|
152
178
|
exports.MemoryStorage = MemoryStorage;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoryStorage.js","sourceRoot":"","sources":["../../../src/storage/memoryStorage.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,
|
|
1
|
+
{"version":3,"file":"memoryStorage.js","sourceRoot":"","sources":["../../../src/storage/memoryStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -45,6 +45,19 @@ export interface StoreItems {
|
|
|
45
45
|
*/
|
|
46
46
|
[key: string]: any;
|
|
47
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Options for writing items to storage.
|
|
50
|
+
*/
|
|
51
|
+
export interface StorageWriteOptions {
|
|
52
|
+
/**
|
|
53
|
+
* Optional time to live, in seconds, for written items.
|
|
54
|
+
*
|
|
55
|
+
* @remarks
|
|
56
|
+
* When set, storage providers should stop returning the written items after
|
|
57
|
+
* this duration has elapsed. Values must be finite numbers greater than zero.
|
|
58
|
+
*/
|
|
59
|
+
ttl?: number;
|
|
60
|
+
}
|
|
48
61
|
/**
|
|
49
62
|
* A factory function to generate storage keys based on the conversation context.
|
|
50
63
|
*
|
|
@@ -84,7 +97,7 @@ export interface Storage {
|
|
|
84
97
|
* @returns A promise that resolves when the write operation is complete
|
|
85
98
|
* @throws If the changes object is empty or undefined, or if an eTag conflict occurs and optimistic concurrency is enabled
|
|
86
99
|
*/
|
|
87
|
-
write: (changes: StoreItem) => Promise<void>;
|
|
100
|
+
write: (changes: StoreItem, options?: StorageWriteOptions) => Promise<void>;
|
|
88
101
|
/**
|
|
89
102
|
* Deletes store items from storage.
|
|
90
103
|
*
|
|
@@ -0,0 +1,20 @@
|
|
|
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.getStorageWriteExpiry = getStorageWriteExpiry;
|
|
8
|
+
const agents_activity_1 = require("@microsoft/agents-activity");
|
|
9
|
+
const errorHelper_1 = require("../errorHelper");
|
|
10
|
+
function getStorageWriteExpiry(options) {
|
|
11
|
+
const ttl = options === null || options === void 0 ? void 0 : options.ttl;
|
|
12
|
+
if (ttl === undefined) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
if (!Number.isFinite(ttl) || ttl <= 0) {
|
|
16
|
+
throw agents_activity_1.ExceptionHelper.generateException(RangeError, errorHelper_1.Errors.InvalidStorageTtl);
|
|
17
|
+
}
|
|
18
|
+
return Date.now() + ttl * 1000;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=storageExpiry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storageExpiry.js","sourceRoot":"","sources":["../../../src/storage/storageExpiry.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,gEAA4D;AAC5D,gDAAuC;AAEvC,+BAAuC,OAA6B;IAClE,MAAM,GAAG,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,GAAG,CAAA;IACxB,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,iCAAe,CAAC,iBAAiB,CAAC,UAAU,EAAE,oBAAM,CAAC,iBAAiB,CAAC,CAAA;IAC/E,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI,CAAA;AAChC,CAAC"}
|
package/dist/src/utils/env.d.ts
CHANGED
|
@@ -6,6 +6,48 @@
|
|
|
6
6
|
* authentication, and connector-client modules. Keeping them internal lets us
|
|
7
7
|
* normalize behavior across the package without growing the public API.
|
|
8
8
|
*/
|
|
9
|
+
export interface LoadEnv {
|
|
10
|
+
[upperKey: string]: {
|
|
11
|
+
key: string;
|
|
12
|
+
value: any;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
type ParserSettings<K extends string> = {
|
|
16
|
+
[key in K]: (value: string) => {
|
|
17
|
+
key?: string;
|
|
18
|
+
value?: any;
|
|
19
|
+
} | undefined;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Indexes non-empty environment values case-insensitively while preserving
|
|
23
|
+
* their original key spelling.
|
|
24
|
+
*/
|
|
25
|
+
export declare function loadEnvSettings(callback: (key: string, value: string) => void, environment?: NodeJS.ProcessEnv): LoadEnv;
|
|
26
|
+
/**
|
|
27
|
+
* Creates a case-insensitive parser for a fixed set of environment keys.
|
|
28
|
+
*/
|
|
29
|
+
export declare function envParser<K extends string>(settings: ParserSettings<K> & ThisType<ParserSettings<K>>): {
|
|
30
|
+
keys: K[];
|
|
31
|
+
parse(key: K, value: string): {
|
|
32
|
+
key?: undefined;
|
|
33
|
+
value?: undefined;
|
|
34
|
+
} | {
|
|
35
|
+
key: string;
|
|
36
|
+
value: any;
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
export declare const envParserUtils: {
|
|
40
|
+
bypass: (value: string) => {
|
|
41
|
+
value: string;
|
|
42
|
+
};
|
|
43
|
+
redirect: <Parser extends ReturnType<typeof envParser>>(parser: Parser, key: Parameters<Parser['parse']>[0]) => (value: string) => {
|
|
44
|
+
key?: undefined;
|
|
45
|
+
value?: undefined;
|
|
46
|
+
} | {
|
|
47
|
+
key: string;
|
|
48
|
+
value: any;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
9
51
|
/**
|
|
10
52
|
* Parses an environment-variable string into a boolean.
|
|
11
53
|
*
|
|
@@ -48,3 +90,4 @@ export declare function parseIntEnv(value: string | undefined, fallback: number)
|
|
|
48
90
|
* @param maxDistance - Maximum edit distance to consider a match (default 2).
|
|
49
91
|
*/
|
|
50
92
|
export declare function suggestClosest(input: string, candidates: readonly string[], maxDistance?: number): string | undefined;
|
|
93
|
+
export {};
|
package/dist/src/utils/env.js
CHANGED
|
@@ -2,17 +2,53 @@
|
|
|
2
2
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
3
|
// Licensed under the MIT License.
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.envParserUtils = void 0;
|
|
6
|
+
exports.loadEnvSettings = loadEnvSettings;
|
|
7
|
+
exports.envParser = envParser;
|
|
5
8
|
exports.parseBooleanEnv = parseBooleanEnv;
|
|
6
9
|
exports.parseIntEnv = parseIntEnv;
|
|
7
10
|
exports.suggestClosest = suggestClosest;
|
|
8
11
|
/**
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
* Indexes non-empty environment values case-insensitively while preserving
|
|
13
|
+
* their original key spelling.
|
|
14
|
+
*/
|
|
15
|
+
function loadEnvSettings(callback, environment = process.env) {
|
|
16
|
+
const env = {};
|
|
17
|
+
for (const [envKey, envValue] of Object.entries(environment)) {
|
|
18
|
+
if (!(envValue === null || envValue === void 0 ? void 0 : envValue.trim())) {
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
env[envKey.toUpperCase()] = { key: envKey, value: envValue };
|
|
22
|
+
callback(envKey, envValue);
|
|
23
|
+
}
|
|
24
|
+
return env;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Creates a case-insensitive parser for a fixed set of environment keys.
|
|
15
28
|
*/
|
|
29
|
+
function envParser(settings) {
|
|
30
|
+
const keys = Object.keys(settings);
|
|
31
|
+
const upperKeys = keys.reduce((acc, key) => {
|
|
32
|
+
acc[key.toUpperCase()] = key;
|
|
33
|
+
return acc;
|
|
34
|
+
}, {});
|
|
35
|
+
return {
|
|
36
|
+
keys,
|
|
37
|
+
parse(key, value) {
|
|
38
|
+
var _a;
|
|
39
|
+
const match = upperKeys[key.toUpperCase()];
|
|
40
|
+
if (!match) {
|
|
41
|
+
return {};
|
|
42
|
+
}
|
|
43
|
+
const result = settings[match](value);
|
|
44
|
+
return { key: (_a = result === null || result === void 0 ? void 0 : result.key) !== null && _a !== void 0 ? _a : match, value: result === null || result === void 0 ? void 0 : result.value };
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
exports.envParserUtils = {
|
|
49
|
+
bypass: (value) => ({ value }),
|
|
50
|
+
redirect: (parser, key) => (value) => parser.parse(key, value)
|
|
51
|
+
};
|
|
16
52
|
/**
|
|
17
53
|
* Parses an environment-variable string into a boolean.
|
|
18
54
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/utils/env.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kCAAkC
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/utils/env.ts"],"names":[],"mappings":"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"}
|
package/dist/src/utils.d.ts
CHANGED
package/dist/src/utils.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.prune = void 0;
|
|
7
|
+
exports.mergeDefined = exports.prune = void 0;
|
|
8
8
|
/**
|
|
9
9
|
* Utility function to prune undefined values from an object. This is useful for cleaning up configuration objects before logging or processing, ensuring that only defined values are included.
|
|
10
10
|
* @param obj The object to prune
|
|
@@ -15,4 +15,13 @@ const prune = (obj) => {
|
|
|
15
15
|
return Object.fromEntries(entries);
|
|
16
16
|
};
|
|
17
17
|
exports.prune = prune;
|
|
18
|
+
const mergeDefined = (...layers) => {
|
|
19
|
+
const result = {};
|
|
20
|
+
for (const layer of layers) {
|
|
21
|
+
if (layer)
|
|
22
|
+
Object.assign(result, (0, exports.prune)(layer));
|
|
23
|
+
}
|
|
24
|
+
return result;
|
|
25
|
+
};
|
|
26
|
+
exports.mergeDefined = mergeDefined;
|
|
18
27
|
//# sourceMappingURL=utils.js.map
|
package/dist/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;;GAIG;AACI,MAAM,KAAK,GAAG,CAAgC,GAAM,EAAE,EAAE;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;IAC9E,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAM,CAAA;AACzC,CAAC,CAAA;AAHY,QAAA,KAAK,GAAL,KAAK,CAGjB"}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;;GAIG;AACI,MAAM,KAAK,GAAG,CAAgC,GAAM,EAAE,EAAE;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;IAC9E,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAM,CAAA;AACzC,CAAC,CAAA;AAHY,QAAA,KAAK,GAAL,KAAK,CAGjB;AAEM,MAAM,YAAY,GAAG,CAC1B,GAAG,MAA2C,EAC3C,EAAE;IACL,MAAM,MAAM,GAAe,EAAE,CAAA;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK;YAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAA,QAAA,KAAK,EAAC,KAAK,CAAC,CAAC,CAAA;IAChD,CAAC;IACD,OAAO,MAAW,CAAA;AACpB,CAAC,CAAA;AARY,QAAA,YAAY,GAAZ,YAAY,CAQxB"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@microsoft/agents-hosting",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.9.0-beta.18.g6b8111bba5",
|
|
5
5
|
"homepage": "https://github.com/microsoft/Agents-for-js",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
"types": "dist/src/index.d.ts",
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@azure/core-auth": "1.10.1",
|
|
23
|
-
"@azure/msal-node": "5.
|
|
24
|
-
"@microsoft/agents-activity": "1.
|
|
25
|
-
"@microsoft/agents-telemetry": "1.
|
|
23
|
+
"@azure/msal-node": "5.6.0",
|
|
24
|
+
"@microsoft/agents-activity": "1.9.0-beta.18.g6b8111bba5",
|
|
25
|
+
"@microsoft/agents-telemetry": "1.9.0-beta.18.g6b8111bba5",
|
|
26
26
|
"jsonwebtoken": "9.0.3",
|
|
27
27
|
"jwks-rsa": "4.0.1",
|
|
28
28
|
"zod": "3.25.75"
|
|
@@ -148,7 +148,12 @@ export class AgentApplication<TState extends TurnState> {
|
|
|
148
148
|
if (this._options.adapter) {
|
|
149
149
|
this._adapter = this._options.adapter
|
|
150
150
|
} else {
|
|
151
|
-
this._adapter = new CloudAdapter(
|
|
151
|
+
this._adapter = new CloudAdapter(
|
|
152
|
+
undefined,
|
|
153
|
+
undefined,
|
|
154
|
+
undefined,
|
|
155
|
+
{ configurationContext: this._options.configurationContext }
|
|
156
|
+
)
|
|
152
157
|
}
|
|
153
158
|
|
|
154
159
|
this._adapter.setAgentName(this._options.agentName)
|
|
@@ -208,7 +213,7 @@ export class AgentApplication<TState extends TurnState> {
|
|
|
208
213
|
* Gets the authorization instance for the application.
|
|
209
214
|
*
|
|
210
215
|
* @returns The authorization instance.
|
|
211
|
-
* @throws Error if no
|
|
216
|
+
* @throws Error if no authorization handlers were resolved.
|
|
212
217
|
*/
|
|
213
218
|
public get authorization (): Authorization {
|
|
214
219
|
if (this._authorizationManager.handlers.length === 0) {
|
|
@@ -495,7 +500,7 @@ export class AgentApplication<TState extends TurnState> {
|
|
|
495
500
|
*
|
|
496
501
|
* @param handler - The handler function to be called after successful sign-in.
|
|
497
502
|
* @returns The current instance of the application.
|
|
498
|
-
* @throws Error if
|
|
503
|
+
* @throws Error if no authorization handlers were resolved.
|
|
499
504
|
*
|
|
500
505
|
* @remarks
|
|
501
506
|
* This method allows you to perform actions after a user has successfully authenticated.
|
|
@@ -510,11 +515,7 @@ export class AgentApplication<TState extends TurnState> {
|
|
|
510
515
|
*
|
|
511
516
|
*/
|
|
512
517
|
public onSignInSuccess (handler: (context: TurnContext, state: TurnState, id?: string) => Promise<void>): this {
|
|
513
|
-
|
|
514
|
-
this.authorization.onSignInSuccess(handler)
|
|
515
|
-
} else {
|
|
516
|
-
throw ExceptionHelper.generateException(Error, Errors.AuthorizationOptionNotAvailable)
|
|
517
|
-
}
|
|
518
|
+
this.authorization.onSignInSuccess(handler)
|
|
518
519
|
return this
|
|
519
520
|
}
|
|
520
521
|
|
|
@@ -523,7 +524,7 @@ export class AgentApplication<TState extends TurnState> {
|
|
|
523
524
|
*
|
|
524
525
|
* @param handler - The handler function to be called after a failed sign-in attempt.
|
|
525
526
|
* @returns The current instance of the application.
|
|
526
|
-
* @throws Error if
|
|
527
|
+
* @throws Error if no authorization handlers were resolved.
|
|
527
528
|
*
|
|
528
529
|
* @remarks
|
|
529
530
|
* This method allows you to handle cases where a user fails to authenticate,
|
|
@@ -538,11 +539,7 @@ export class AgentApplication<TState extends TurnState> {
|
|
|
538
539
|
*
|
|
539
540
|
*/
|
|
540
541
|
public onSignInFailure (handler: (context: TurnContext, state: TurnState, id?: string) => Promise<void>): this {
|
|
541
|
-
|
|
542
|
-
this.authorization.onSignInFailure(handler)
|
|
543
|
-
} else {
|
|
544
|
-
throw ExceptionHelper.generateException(Error, Errors.AuthorizationOptionNotAvailable)
|
|
545
|
-
}
|
|
542
|
+
this.authorization.onSignInFailure(handler)
|
|
546
543
|
return this
|
|
547
544
|
}
|
|
548
545
|
|
|
@@ -13,6 +13,7 @@ import { HeaderPropagationDefinition } from '../headerPropagation'
|
|
|
13
13
|
import { AuthorizationOptions } from './auth/types'
|
|
14
14
|
import { Connections } from '../auth/connections'
|
|
15
15
|
import { ProactiveOptions } from './proactive'
|
|
16
|
+
import { ConfigurationContext } from '../configuration/configuration'
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* Typing timer settings for a specific channel or the global default.
|
|
@@ -52,6 +53,12 @@ export interface TypingOptions extends TypingTimingOptions {
|
|
|
52
53
|
* custom state management specific to your agent's needs.
|
|
53
54
|
*/
|
|
54
55
|
export interface AgentApplicationOptions<TState extends TurnState> {
|
|
56
|
+
/**
|
|
57
|
+
* Optional host-scoped external configuration used by the application's
|
|
58
|
+
* default adapter and authorization handlers.
|
|
59
|
+
*/
|
|
60
|
+
configurationContext?: ConfigurationContext;
|
|
61
|
+
|
|
55
62
|
/**
|
|
56
63
|
* The adapter used for handling bot interactions with various messaging platforms.
|
|
57
64
|
* This adapter manages the communication layer between your agent and the Bot Framework.
|
|
@@ -3,21 +3,25 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { TokenCredential } from '@azure/core-auth'
|
|
7
7
|
import { ExceptionHelper } from '@microsoft/agents-activity'
|
|
8
|
+
import { debug } from '@microsoft/agents-telemetry'
|
|
9
|
+
import { DelegatedTokenCredential } from '../../auth/delegatedTokenCredential'
|
|
10
|
+
import { Errors } from '../../errorHelper'
|
|
8
11
|
import { TokenResponse } from '../../oauth'
|
|
9
12
|
import { TurnContext } from '../../turnContext'
|
|
10
13
|
import { TurnState } from '../turnState'
|
|
11
14
|
import { AuthorizationManager } from './authorizationManager'
|
|
12
15
|
import { AuthorizationHandlerTokenOptions } from './types'
|
|
13
|
-
import { Errors } from '../../errorHelper'
|
|
14
16
|
|
|
15
17
|
const logger = debug('agents:authorization')
|
|
16
18
|
|
|
17
19
|
export interface Authorization {
|
|
18
20
|
getToken(context: TurnContext, authHandlerId: string): Promise<TokenResponse>
|
|
21
|
+
getTokenAsTokenCredential?(context: TurnContext, authHandlerId: string): TokenCredential
|
|
19
22
|
exchangeToken(context: TurnContext, scopes: string[], authHandlerId: string): Promise<TokenResponse>
|
|
20
23
|
exchangeToken(context: TurnContext, authHandlerId: string, options?: AuthorizationHandlerTokenOptions): Promise<TokenResponse>
|
|
24
|
+
exchangeTokenAsTokenCredential?(context: TurnContext, authHandlerId: string, options?: AuthorizationHandlerTokenOptions): TokenCredential
|
|
21
25
|
signOut(context: TurnContext, state: TurnState, authHandlerId?: string): Promise<void>
|
|
22
26
|
onSignInSuccess(handler: (context: TurnContext, state: TurnState, authHandlerId?: string) => Promise<void>): void
|
|
23
27
|
onSignInFailure(handler: (context: TurnContext, state: TurnState, authHandlerId?: string, errorMessage?: string) => Promise<void>): void
|
|
@@ -75,6 +79,31 @@ export class UserAuthorization implements Authorization {
|
|
|
75
79
|
return { token }
|
|
76
80
|
}
|
|
77
81
|
|
|
82
|
+
/**
|
|
83
|
+
* Creates a token credential backed by the current turn's user token.
|
|
84
|
+
*
|
|
85
|
+
* @param context - The context object for the current turn.
|
|
86
|
+
* @param authHandlerId - ID of the auth handler to use.
|
|
87
|
+
* @returns A {@link TokenCredential} that resolves to the current turn's user token.
|
|
88
|
+
* @throws {Error} If the auth handler is not configured.
|
|
89
|
+
*
|
|
90
|
+
* @remarks
|
|
91
|
+
* The returned credential is scoped to this `context` and should only be used during the
|
|
92
|
+
* current turn. Do not cache it or pass it to a client that outlives the turn; create a new
|
|
93
|
+
* credential in each turn instead.
|
|
94
|
+
*
|
|
95
|
+
* @example
|
|
96
|
+
* ```typescript
|
|
97
|
+
* const credential = auth.getTokenAsTokenCredential(context, 'microsoft');
|
|
98
|
+
* const client = new SomeAzureClient(endpoint, credential);
|
|
99
|
+
* ```
|
|
100
|
+
*
|
|
101
|
+
* @public
|
|
102
|
+
*/
|
|
103
|
+
public getTokenAsTokenCredential (context: TurnContext, authHandlerId: string): TokenCredential {
|
|
104
|
+
return new DelegatedTokenCredential(async () => await this.getToken(context, authHandlerId))
|
|
105
|
+
}
|
|
106
|
+
|
|
78
107
|
/**
|
|
79
108
|
* @deprecated
|
|
80
109
|
* Exchanges a token for a new token with different scopes.
|
|
@@ -153,6 +182,42 @@ export class UserAuthorization implements Authorization {
|
|
|
153
182
|
throw ExceptionHelper.generateException(Error, Errors.InvalidExchangeTokenParameters)
|
|
154
183
|
}
|
|
155
184
|
|
|
185
|
+
/**
|
|
186
|
+
* Creates a token credential that exchanges the user token for requested scopes during the current turn.
|
|
187
|
+
*
|
|
188
|
+
* @param context - The context object for the current turn.
|
|
189
|
+
* @param authHandlerId - ID of the auth handler to use.
|
|
190
|
+
* @param options - Optional token options. If `connection` and `scopes` are NOT provided, the auth handler's
|
|
191
|
+
* configured `obo` options are used. Provide `options` only to override them for a specific credential.
|
|
192
|
+
* @returns A {@link TokenCredential} that exchanges the current turn's user token for the requested scopes.
|
|
193
|
+
* @throws {Error} If the auth handler is not configured.
|
|
194
|
+
*
|
|
195
|
+
* @remarks
|
|
196
|
+
* The returned credential is scoped to this `context` and should only be used during the current turn.
|
|
197
|
+
* Do not cache it or pass it to a client that outlives the turn; create a new credential in each turn instead.
|
|
198
|
+
* Scopes requested from the credential (via `TokenCredential.getToken`) are combined with `options.scopes`,
|
|
199
|
+
* and duplicate scopes are removed.
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* ```typescript
|
|
203
|
+
* const credential = auth.exchangeTokenAsTokenCredential(
|
|
204
|
+
* context,
|
|
205
|
+
* 'microsoft',
|
|
206
|
+
* { connection: 'oboConnection', scopes: ['https://graph.microsoft.com/.default'] }
|
|
207
|
+
* );
|
|
208
|
+
* const client = new SomeAzureClient(endpoint, credential);
|
|
209
|
+
* ```
|
|
210
|
+
*
|
|
211
|
+
* @public
|
|
212
|
+
*/
|
|
213
|
+
public exchangeTokenAsTokenCredential (context: TurnContext, authHandlerId: string, options?: AuthorizationHandlerTokenOptions): TokenCredential {
|
|
214
|
+
return new DelegatedTokenCredential(async (scopes) => {
|
|
215
|
+
const scopeSet = new Set([...scopes, ...(options?.scopes ?? [])])
|
|
216
|
+
const mergedScopes = Array.from(scopeSet)
|
|
217
|
+
return await this.exchangeToken(context, authHandlerId, { connection: options?.connection, scopes: mergedScopes })
|
|
218
|
+
})
|
|
219
|
+
}
|
|
220
|
+
|
|
156
221
|
/**
|
|
157
222
|
* Signs out the current user.
|
|
158
223
|
*
|