@microsoft/agents-hosting 1.1.0-alpha.9.g154c2c8a32 → 1.1.4-g8d884129e7
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/package.json +10 -6
- package/dist/src/activityWireCompat.d.ts +1 -1
- package/dist/src/activityWireCompat.js +11 -3
- package/dist/src/activityWireCompat.js.map +1 -1
- package/dist/src/agent-client/agentClient.js +7 -3
- package/dist/src/agent-client/agentClient.js.map +1 -1
- package/dist/src/agent-client/agentResponseHandler.js +6 -2
- package/dist/src/agent-client/agentResponseHandler.js.map +1 -1
- package/dist/src/app/agentApplication.d.ts +26 -11
- package/dist/src/app/agentApplication.js +90 -79
- package/dist/src/app/agentApplication.js.map +1 -1
- package/dist/src/app/agentApplicationBuilder.d.ts +2 -2
- package/dist/src/app/agentApplicationBuilder.js.map +1 -1
- package/dist/src/app/agentApplicationOptions.d.ts +9 -2
- package/dist/src/app/appRoute.d.ts +7 -0
- package/dist/src/app/{authorization.d.ts → auth/authorization.d.ts} +41 -139
- package/dist/src/app/auth/authorization.js +188 -0
- package/dist/src/app/auth/authorization.js.map +1 -0
- package/dist/src/app/auth/authorizationManager.d.ts +71 -0
- package/dist/src/app/auth/authorizationManager.js +170 -0
- package/dist/src/app/auth/authorizationManager.js.map +1 -0
- package/dist/src/app/auth/handlerStorage.d.ts +36 -0
- package/dist/src/app/auth/handlerStorage.js +62 -0
- package/dist/src/app/auth/handlerStorage.js.map +1 -0
- package/dist/src/app/auth/handlers/agenticAuthorization.d.ts +93 -0
- package/dist/src/app/auth/handlers/agenticAuthorization.js +134 -0
- package/dist/src/app/auth/handlers/agenticAuthorization.js.map +1 -0
- package/dist/src/app/auth/handlers/azureBotAuthorization.d.ts +226 -0
- package/dist/src/app/auth/handlers/azureBotAuthorization.js +429 -0
- package/dist/src/app/auth/handlers/azureBotAuthorization.js.map +1 -0
- package/dist/src/app/auth/handlers/index.d.ts +2 -0
- package/dist/src/app/auth/handlers/index.js +19 -0
- package/dist/src/app/auth/handlers/index.js.map +1 -0
- package/dist/src/app/auth/index.d.ts +2 -0
- package/dist/src/app/auth/index.js +19 -0
- package/dist/src/app/auth/index.js.map +1 -0
- package/dist/src/app/auth/types.d.ts +104 -0
- package/dist/src/app/auth/types.js +24 -0
- package/dist/src/app/auth/types.js.map +1 -0
- package/dist/src/app/index.d.ts +3 -3
- package/dist/src/app/index.js +2 -3
- package/dist/src/app/index.js.map +1 -1
- package/dist/src/app/routeList.d.ts +1 -1
- package/dist/src/app/routeList.js +22 -5
- package/dist/src/app/routeList.js.map +1 -1
- package/dist/src/app/streaming/streamingResponse.js +2 -1
- package/dist/src/app/streaming/streamingResponse.js.map +1 -1
- package/dist/src/auth/MemoryCache.d.ts +16 -0
- package/dist/src/auth/MemoryCache.js +58 -0
- package/dist/src/auth/MemoryCache.js.map +1 -0
- package/dist/src/auth/authConfiguration.d.ts +44 -2
- package/dist/src/auth/authConfiguration.js +209 -53
- package/dist/src/auth/authConfiguration.js.map +1 -1
- package/dist/src/auth/authConstants.d.ts +11 -0
- package/dist/src/auth/authConstants.js +15 -0
- package/dist/src/auth/authConstants.js.map +1 -0
- package/dist/src/auth/authProvider.d.ts +26 -0
- package/dist/src/auth/connections.d.ts +41 -0
- package/dist/src/auth/connections.js +7 -0
- package/dist/src/auth/connections.js.map +1 -0
- package/dist/src/auth/index.d.ts +2 -0
- package/dist/src/auth/index.js +2 -0
- package/dist/src/auth/index.js.map +1 -1
- package/dist/src/auth/jwt-middleware.js +31 -18
- package/dist/src/auth/jwt-middleware.js.map +1 -1
- package/dist/src/auth/msalConnectionManager.d.ts +64 -0
- package/dist/src/auth/msalConnectionManager.js +148 -0
- package/dist/src/auth/msalConnectionManager.js.map +1 -0
- package/dist/src/auth/msalTokenProvider.d.ts +38 -0
- package/dist/src/auth/msalTokenProvider.js +189 -16
- package/dist/src/auth/msalTokenProvider.js.map +1 -1
- package/dist/src/baseAdapter.d.ts +10 -25
- package/dist/src/baseAdapter.js +2 -15
- package/dist/src/baseAdapter.js.map +1 -1
- package/dist/src/cards/cardFactory.d.ts +2 -1
- package/dist/src/cards/cardFactory.js +3 -2
- package/dist/src/cards/cardFactory.js.map +1 -1
- package/dist/src/cloudAdapter.d.ts +40 -23
- package/dist/src/cloudAdapter.js +143 -63
- package/dist/src/cloudAdapter.js.map +1 -1
- package/dist/src/connector-client/connectorClient.d.ts +15 -0
- package/dist/src/connector-client/connectorClient.js +49 -15
- package/dist/src/connector-client/connectorClient.js.map +1 -1
- package/dist/src/index.d.ts +0 -1
- package/dist/src/index.js +0 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/oauth/customUserTokenAPI.d.ts +1 -0
- package/dist/src/oauth/customUserTokenAPI.js +11 -0
- package/dist/src/oauth/customUserTokenAPI.js.map +1 -0
- package/dist/src/oauth/index.d.ts +0 -1
- package/dist/src/oauth/index.js +0 -1
- package/dist/src/oauth/index.js.map +1 -1
- package/dist/src/oauth/userTokenClient.d.ts +30 -13
- package/dist/src/oauth/userTokenClient.js +62 -26
- package/dist/src/oauth/userTokenClient.js.map +1 -1
- package/dist/src/oauth/userTokenClient.types.d.ts +19 -6
- package/dist/src/transcript/fileTranscriptLogger.d.ts +109 -0
- package/dist/src/transcript/fileTranscriptLogger.js +398 -0
- package/dist/src/transcript/fileTranscriptLogger.js.map +1 -0
- package/dist/src/turnContext.d.ts +7 -1
- package/dist/src/turnContext.js +11 -4
- package/dist/src/turnContext.js.map +1 -1
- package/package.json +10 -6
- package/src/activityWireCompat.ts +12 -4
- package/src/agent-client/agentClient.ts +9 -3
- package/src/agent-client/agentResponseHandler.ts +5 -2
- package/src/app/agentApplication.ts +95 -74
- package/src/app/agentApplicationBuilder.ts +2 -2
- package/src/app/agentApplicationOptions.ts +10 -2
- package/src/app/appRoute.ts +8 -0
- package/src/app/auth/authorization.ts +261 -0
- package/src/app/auth/authorizationManager.ts +213 -0
- package/src/app/auth/handlerStorage.ts +61 -0
- package/src/app/auth/handlers/agenticAuthorization.ts +183 -0
- package/src/app/auth/handlers/azureBotAuthorization.ts +606 -0
- package/src/app/auth/handlers/index.ts +2 -0
- package/src/app/auth/index.ts +2 -0
- package/src/app/auth/types.ts +111 -0
- package/src/app/index.ts +3 -3
- package/src/app/routeList.ts +24 -5
- package/src/app/streaming/streamingResponse.ts +2 -1
- package/src/auth/MemoryCache.ts +59 -0
- package/src/auth/authConfiguration.ts +245 -52
- package/src/auth/authConstants.ts +11 -0
- package/src/auth/authProvider.ts +34 -0
- package/src/auth/connections.ts +47 -0
- package/src/auth/index.ts +2 -0
- package/src/auth/jwt-middleware.ts +38 -21
- package/src/auth/msalConnectionManager.ts +175 -0
- package/src/auth/msalTokenProvider.ts +231 -9
- package/src/baseAdapter.ts +10 -29
- package/src/cards/cardFactory.ts +3 -2
- package/src/cloudAdapter.ts +207 -72
- package/src/connector-client/connectorClient.ts +59 -15
- package/src/index.ts +0 -1
- package/src/oauth/customUserTokenAPI.ts +5 -0
- package/src/oauth/index.ts +0 -1
- package/src/oauth/userTokenClient.ts +76 -22
- package/src/oauth/userTokenClient.types.ts +20 -8
- package/src/transcript/fileTranscriptLogger.ts +409 -0
- package/src/turnContext.ts +16 -5
- package/dist/src/app/authorization.js +0 -387
- package/dist/src/app/authorization.js.map +0 -1
- package/dist/src/claimsIdentity.d.ts +0 -35
- package/dist/src/claimsIdentity.js +0 -43
- package/dist/src/claimsIdentity.js.map +0 -1
- package/dist/src/oauth/oAuthFlow.d.ts +0 -119
- package/dist/src/oauth/oAuthFlow.js +0 -316
- package/dist/src/oauth/oAuthFlow.js.map +0 -1
- package/src/app/authorization.ts +0 -432
- package/src/claimsIdentity.ts +0 -47
- package/src/oauth/oAuthFlow.ts +0 -378
|
@@ -0,0 +1,429 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
4
|
+
* Licensed under the MIT License.
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.AzureBotAuthorization = void 0;
|
|
11
|
+
const logger_1 = require("@microsoft/agents-activity/logger");
|
|
12
|
+
const types_1 = require("../types");
|
|
13
|
+
const messageFactory_1 = require("../../../messageFactory");
|
|
14
|
+
const cards_1 = require("../../../cards");
|
|
15
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
16
|
+
const handlerStorage_1 = require("../handlerStorage");
|
|
17
|
+
const agents_activity_1 = require("@microsoft/agents-activity");
|
|
18
|
+
const logger = (0, logger_1.debug)('agents:authorization:azurebot');
|
|
19
|
+
const DEFAULT_SIGN_IN_ATTEMPTS = 2;
|
|
20
|
+
var Category;
|
|
21
|
+
(function (Category) {
|
|
22
|
+
Category["SIGNIN"] = "signin";
|
|
23
|
+
Category["UNKNOWN"] = "unknown";
|
|
24
|
+
})(Category || (Category = {}));
|
|
25
|
+
/**
|
|
26
|
+
* Default implementation of an authorization handler using Azure Bot Service.
|
|
27
|
+
*/
|
|
28
|
+
class AzureBotAuthorization {
|
|
29
|
+
/**
|
|
30
|
+
* Creates an instance of the AzureBotAuthorization.
|
|
31
|
+
* @param id The unique identifier for the handler.
|
|
32
|
+
* @param options The settings for the handler.
|
|
33
|
+
* @param app The agent application instance.
|
|
34
|
+
*/
|
|
35
|
+
constructor(id, options, settings) {
|
|
36
|
+
this.id = id;
|
|
37
|
+
this.settings = settings;
|
|
38
|
+
this._key = `${AzureBotAuthorization.name}/${this.id}`;
|
|
39
|
+
/**
|
|
40
|
+
* Predefined messages with dynamic placeholders.
|
|
41
|
+
*/
|
|
42
|
+
this.messages = {
|
|
43
|
+
invalidCode: (code) => {
|
|
44
|
+
var _a, _b;
|
|
45
|
+
const message = (_b = (_a = this._options.messages) === null || _a === void 0 ? void 0 : _a.invalidCode) !== null && _b !== void 0 ? _b : 'Invalid **{code}** code entered. Please try again with a new sign-in request.';
|
|
46
|
+
return message.replaceAll('{code}', code);
|
|
47
|
+
},
|
|
48
|
+
invalidCodeFormat: (attemptsLeft) => {
|
|
49
|
+
var _a, _b;
|
|
50
|
+
const message = (_b = (_a = this._options.messages) === null || _a === void 0 ? void 0 : _a.invalidCodeFormat) !== null && _b !== void 0 ? _b : 'Please enter a valid **6-digit** code format (_e.g. 123456_).\r\n**{attemptsLeft} attempt(s) left...**';
|
|
51
|
+
return message.replaceAll('{attemptsLeft}', attemptsLeft.toString());
|
|
52
|
+
},
|
|
53
|
+
maxAttemptsExceeded: (maxAttempts) => {
|
|
54
|
+
var _a, _b;
|
|
55
|
+
const message = (_b = (_a = this._options.messages) === null || _a === void 0 ? void 0 : _a.maxAttemptsExceeded) !== null && _b !== void 0 ? _b : 'You have exceeded the maximum number of sign-in attempts ({maxAttempts}). Please try again with a new sign-in request.';
|
|
56
|
+
return message.replaceAll('{maxAttempts}', maxAttempts.toString());
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
if (!this.settings.storage) {
|
|
60
|
+
throw new Error(this.prefix('The \'storage\' option is not available in the app options. Ensure that the app is properly configured.'));
|
|
61
|
+
}
|
|
62
|
+
if (!this.settings.connections) {
|
|
63
|
+
throw new Error(this.prefix('The \'connections\' option is not available in the app options. Ensure that the app is properly configured.'));
|
|
64
|
+
}
|
|
65
|
+
this._options = this.loadOptions(options);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Loads and validates the authorization handler options.
|
|
69
|
+
*/
|
|
70
|
+
loadOptions(settings) {
|
|
71
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
72
|
+
const result = {
|
|
73
|
+
name: (_a = settings.name) !== null && _a !== void 0 ? _a : (process.env[`${this.id}_connectionName`]),
|
|
74
|
+
title: (_c = (_b = settings.title) !== null && _b !== void 0 ? _b : (process.env[`${this.id}_connectionTitle`])) !== null && _c !== void 0 ? _c : 'Sign-in',
|
|
75
|
+
text: (_e = (_d = settings.text) !== null && _d !== void 0 ? _d : (process.env[`${this.id}_connectionText`])) !== null && _e !== void 0 ? _e : 'Please sign-in to continue',
|
|
76
|
+
maxAttempts: (_f = settings.maxAttempts) !== null && _f !== void 0 ? _f : parseInt(process.env[`${this.id}_maxAttempts`]),
|
|
77
|
+
messages: {
|
|
78
|
+
invalidCode: (_h = (_g = settings.messages) === null || _g === void 0 ? void 0 : _g.invalidCode) !== null && _h !== void 0 ? _h : process.env[`${this.id}_messages_invalidCode`],
|
|
79
|
+
invalidCodeFormat: (_k = (_j = settings.messages) === null || _j === void 0 ? void 0 : _j.invalidCodeFormat) !== null && _k !== void 0 ? _k : process.env[`${this.id}_messages_invalidCodeFormat`],
|
|
80
|
+
maxAttemptsExceeded: (_m = (_l = settings.messages) === null || _l === void 0 ? void 0 : _l.maxAttemptsExceeded) !== null && _m !== void 0 ? _m : process.env[`${this.id}_messages_maxAttemptsExceeded`],
|
|
81
|
+
},
|
|
82
|
+
obo: {
|
|
83
|
+
connection: (_p = (_o = settings.obo) === null || _o === void 0 ? void 0 : _o.connection) !== null && _p !== void 0 ? _p : process.env[`${this.id}_obo_connection`],
|
|
84
|
+
scopes: (_r = (_q = settings.obo) === null || _q === void 0 ? void 0 : _q.scopes) !== null && _r !== void 0 ? _r : this.loadScopes(process.env[`${this.id}_obo_scopes`]),
|
|
85
|
+
},
|
|
86
|
+
enableSso: process.env[`${this.id}_enableSso`] !== 'false' // default value is true
|
|
87
|
+
};
|
|
88
|
+
if (!result.name) {
|
|
89
|
+
throw new Error(this.prefix(`The 'name' property or '${this.id}_connectionName' env variable is required to initialize the handler.`));
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Maximum number of attempts for magic code entry.
|
|
95
|
+
*/
|
|
96
|
+
get maxAttempts() {
|
|
97
|
+
const attempts = this._options.maxAttempts;
|
|
98
|
+
const result = typeof attempts === 'number' && Number.isFinite(attempts) ? Math.round(attempts) : NaN;
|
|
99
|
+
return result > 0 ? result : DEFAULT_SIGN_IN_ATTEMPTS;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Sets a handler to be called when a user successfully signs in.
|
|
103
|
+
* @param callback The callback function to be invoked on successful sign-in.
|
|
104
|
+
*/
|
|
105
|
+
onSuccess(callback) {
|
|
106
|
+
this._onSuccess = callback;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Sets a handler to be called when a user fails to sign in.
|
|
110
|
+
* @param callback The callback function to be invoked on sign-in failure.
|
|
111
|
+
*/
|
|
112
|
+
onFailure(callback) {
|
|
113
|
+
this._onFailure = callback;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Retrieves the token for the user, optionally using on-behalf-of flow for specified scopes.
|
|
117
|
+
* @param context The turn context.
|
|
118
|
+
* @param options Optional options for token acquisition, including connection and scopes for on-behalf-of flow.
|
|
119
|
+
* @returns The token response containing the token or undefined if not available.
|
|
120
|
+
*/
|
|
121
|
+
async token(context, options) {
|
|
122
|
+
var _a;
|
|
123
|
+
let { token } = this.getContext(context);
|
|
124
|
+
if (!(token === null || token === void 0 ? void 0 : token.trim())) {
|
|
125
|
+
const { activity } = context;
|
|
126
|
+
const userTokenClient = await this.getUserTokenClient(context);
|
|
127
|
+
// Using getTokenOrSignInResource instead of getUserToken to avoid HTTP 404 errors.
|
|
128
|
+
const { tokenResponse } = await userTokenClient.getTokenOrSignInResource((_a = activity.from) === null || _a === void 0 ? void 0 : _a.id, this._options.name, activity.channelId, activity.getConversationReference(), activity.relatesTo, '');
|
|
129
|
+
token = tokenResponse === null || tokenResponse === void 0 ? void 0 : tokenResponse.token;
|
|
130
|
+
}
|
|
131
|
+
if (!(token === null || token === void 0 ? void 0 : token.trim())) {
|
|
132
|
+
return { token: undefined };
|
|
133
|
+
}
|
|
134
|
+
return await this.handleOBO(token, options);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Signs out the user from the service.
|
|
138
|
+
* @param context The turn context.
|
|
139
|
+
* @returns True if the signout was successful, false otherwise.
|
|
140
|
+
*/
|
|
141
|
+
async signout(context) {
|
|
142
|
+
var _a;
|
|
143
|
+
const user = (_a = context.activity.from) === null || _a === void 0 ? void 0 : _a.id;
|
|
144
|
+
const channel = context.activity.channelId;
|
|
145
|
+
const connection = this._options.name;
|
|
146
|
+
if (!channel || !user) {
|
|
147
|
+
throw new Error(this.prefix('Both \'activity.channelId\' and \'activity.from.id\' are required to perform signout.'));
|
|
148
|
+
}
|
|
149
|
+
logger.debug(this.prefix(`Signing out User '${user}' from => Channel: '${channel}', Connection: '${connection}'`), context.activity);
|
|
150
|
+
const userTokenClient = await this.getUserTokenClient(context);
|
|
151
|
+
await userTokenClient.signOut(user, connection, channel);
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Initiates the sign-in process for the handler.
|
|
156
|
+
* @param context The turn context.
|
|
157
|
+
* @param active Optional active handler data.
|
|
158
|
+
* @returns The status of the sign-in attempt.
|
|
159
|
+
*/
|
|
160
|
+
async signin(context, active) {
|
|
161
|
+
var _a, _b, _c, _d, _e;
|
|
162
|
+
const { activity } = context;
|
|
163
|
+
const [category] = (_b = (_a = activity.name) === null || _a === void 0 ? void 0 : _a.split('/')) !== null && _b !== void 0 ? _b : [Category.UNKNOWN];
|
|
164
|
+
const storage = new handlerStorage_1.HandlerStorage(this.settings.storage, context);
|
|
165
|
+
if (!active) {
|
|
166
|
+
return this.setToken(storage, context);
|
|
167
|
+
}
|
|
168
|
+
logger.debug(this.prefix('Sign-in active session detected'), active.activity);
|
|
169
|
+
if (((_c = active.activity.conversation) === null || _c === void 0 ? void 0 : _c.id) !== ((_d = activity.conversation) === null || _d === void 0 ? void 0 : _d.id)) {
|
|
170
|
+
await this.sendInvokeResponse(context, { status: 400 });
|
|
171
|
+
logger.warn(this.prefix('Discarding the active session due to the conversation has changed during an active sign-in process'), activity);
|
|
172
|
+
return types_1.AuthorizationHandlerStatus.IGNORED;
|
|
173
|
+
}
|
|
174
|
+
if (active.attemptsLeft <= 0) {
|
|
175
|
+
logger.warn(this.prefix('Maximum sign-in attempts exceeded'), activity);
|
|
176
|
+
await context.sendActivity(messageFactory_1.MessageFactory.text(this.messages.maxAttemptsExceeded(this.maxAttempts)));
|
|
177
|
+
return types_1.AuthorizationHandlerStatus.REJECTED;
|
|
178
|
+
}
|
|
179
|
+
if (category === Category.SIGNIN) {
|
|
180
|
+
await storage.write({ ...active, category });
|
|
181
|
+
const status = await this.handleSignInActivities(context);
|
|
182
|
+
if (status !== types_1.AuthorizationHandlerStatus.IGNORED) {
|
|
183
|
+
return status;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else if (active.category === Category.SIGNIN) {
|
|
187
|
+
// This is only for safety in case of unexpected behaviors during the MS Teams sign-in process,
|
|
188
|
+
// e.g., user interrupts the flow by clicking the Consent Cancel button.
|
|
189
|
+
logger.warn(this.prefix('The incoming activity will be revalidated due to a change in the sign-in flow'), activity);
|
|
190
|
+
return types_1.AuthorizationHandlerStatus.REVALIDATE;
|
|
191
|
+
}
|
|
192
|
+
const { status, code } = await this.codeVerification(storage, context, active);
|
|
193
|
+
if (status !== types_1.AuthorizationHandlerStatus.APPROVED) {
|
|
194
|
+
return status;
|
|
195
|
+
}
|
|
196
|
+
try {
|
|
197
|
+
const result = await this.setToken(storage, context, active, code);
|
|
198
|
+
if (result !== types_1.AuthorizationHandlerStatus.APPROVED) {
|
|
199
|
+
await this.sendInvokeResponse(context, { status: 404 });
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
await this.sendInvokeResponse(context, { status: 200 });
|
|
203
|
+
await ((_e = this._onSuccess) === null || _e === void 0 ? void 0 : _e.call(this, context));
|
|
204
|
+
return result;
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
await this.sendInvokeResponse(context, { status: 500 });
|
|
208
|
+
if (error instanceof Error) {
|
|
209
|
+
error.message = this.prefix(error.message);
|
|
210
|
+
}
|
|
211
|
+
throw error;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Handles on-behalf-of token acquisition.
|
|
216
|
+
*/
|
|
217
|
+
async handleOBO(token, options) {
|
|
218
|
+
var _a, _b, _c;
|
|
219
|
+
const oboConnection = (_a = options === null || options === void 0 ? void 0 : options.connection) !== null && _a !== void 0 ? _a : (_b = this._options.obo) === null || _b === void 0 ? void 0 : _b.connection;
|
|
220
|
+
const oboScopes = (options === null || options === void 0 ? void 0 : options.scopes) && options.scopes.length > 0 ? options.scopes : (_c = this._options.obo) === null || _c === void 0 ? void 0 : _c.scopes;
|
|
221
|
+
if (!oboScopes || oboScopes.length === 0) {
|
|
222
|
+
return { token };
|
|
223
|
+
}
|
|
224
|
+
if (!this.isExchangeable(token)) {
|
|
225
|
+
throw new Error(this.prefix('The current token is not exchangeable for an on-behalf-of flow. Ensure the token audience starts with \'api://\'.'));
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
const provider = oboConnection ? this.settings.connections.getConnection(oboConnection) : this.settings.connections.getDefaultConnection();
|
|
229
|
+
const newToken = await provider.acquireTokenOnBehalfOf(oboScopes, token);
|
|
230
|
+
logger.debug(this.prefix('Successfully acquired on-behalf-of token'), { connection: oboConnection, scopes: oboScopes });
|
|
231
|
+
return { token: newToken };
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
logger.error(this.prefix('Failed to exchange on-behalf-of token'), { connection: oboConnection, scopes: oboScopes }, error);
|
|
235
|
+
return { token: undefined };
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Checks if a token is exchangeable for an on-behalf-of flow.
|
|
240
|
+
*/
|
|
241
|
+
isExchangeable(token) {
|
|
242
|
+
if (!token || typeof token !== 'string') {
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
const payload = jsonwebtoken_1.default.decode(token);
|
|
246
|
+
const audiences = Array.isArray(payload.aud) ? payload.aud : [payload.aud];
|
|
247
|
+
return audiences.some(aud => typeof aud === 'string' && aud.startsWith('api://'));
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Sets the token from the token response or initiates the sign-in flow.
|
|
251
|
+
*/
|
|
252
|
+
async setToken(storage, context, active, code) {
|
|
253
|
+
var _a;
|
|
254
|
+
const { activity } = context;
|
|
255
|
+
const userTokenClient = await this.getUserTokenClient(context);
|
|
256
|
+
const { tokenResponse, signInResource } = await userTokenClient.getTokenOrSignInResource((_a = activity.from) === null || _a === void 0 ? void 0 : _a.id, this._options.name, activity.channelId, activity.getConversationReference(), activity.relatesTo, code !== null && code !== void 0 ? code : '');
|
|
257
|
+
if (!tokenResponse && active) {
|
|
258
|
+
logger.warn(this.prefix('Invalid code entered. Restarting sign-in flow'), activity);
|
|
259
|
+
await context.sendActivity(messageFactory_1.MessageFactory.text(this.messages.invalidCode(code !== null && code !== void 0 ? code : '')));
|
|
260
|
+
return types_1.AuthorizationHandlerStatus.REJECTED;
|
|
261
|
+
}
|
|
262
|
+
if (!tokenResponse) {
|
|
263
|
+
logger.debug(this.prefix('Cannot find token. Sending sign-in card'), activity);
|
|
264
|
+
const oCard = cards_1.CardFactory.oauthCard(this._options.name, this._options.title, this._options.text, signInResource, this._options.enableSso);
|
|
265
|
+
await context.sendActivity(messageFactory_1.MessageFactory.attachment(oCard));
|
|
266
|
+
await storage.write({ activity, id: this.id, ...(active !== null && active !== void 0 ? active : {}), attemptsLeft: this.maxAttempts });
|
|
267
|
+
return types_1.AuthorizationHandlerStatus.PENDING;
|
|
268
|
+
}
|
|
269
|
+
logger.debug(this.prefix('Successfully acquired token'), activity);
|
|
270
|
+
this.setContext(context, { token: tokenResponse.token });
|
|
271
|
+
return types_1.AuthorizationHandlerStatus.APPROVED;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Handles sign-in related activities.
|
|
275
|
+
*/
|
|
276
|
+
async handleSignInActivities(context) {
|
|
277
|
+
var _a, _b, _c, _d;
|
|
278
|
+
const { activity } = context;
|
|
279
|
+
// Ignore signin/verifyState here (handled in codeVerification).
|
|
280
|
+
if (activity.name === 'signin/verifyState') {
|
|
281
|
+
return types_1.AuthorizationHandlerStatus.IGNORED;
|
|
282
|
+
}
|
|
283
|
+
const userTokenClient = await this.getUserTokenClient(context);
|
|
284
|
+
if (activity.name === 'signin/tokenExchange') {
|
|
285
|
+
const tokenExchangeInvokeRequest = activity.value;
|
|
286
|
+
const tokenExchangeRequest = { token: tokenExchangeInvokeRequest.token };
|
|
287
|
+
if (!(tokenExchangeRequest === null || tokenExchangeRequest === void 0 ? void 0 : tokenExchangeRequest.token)) {
|
|
288
|
+
const reason = 'The Agent received an InvokeActivity that is missing a TokenExchangeInvokeRequest value. This is required to be sent with the InvokeActivity.';
|
|
289
|
+
await this.sendInvokeResponse(context, {
|
|
290
|
+
status: 400,
|
|
291
|
+
body: { connectionName: this._options.name, failureDetail: reason }
|
|
292
|
+
});
|
|
293
|
+
logger.error(this.prefix(reason));
|
|
294
|
+
await ((_a = this._onFailure) === null || _a === void 0 ? void 0 : _a.call(this, context, reason));
|
|
295
|
+
return types_1.AuthorizationHandlerStatus.REJECTED;
|
|
296
|
+
}
|
|
297
|
+
if (tokenExchangeInvokeRequest.connectionName !== this._options.name) {
|
|
298
|
+
const reason = `The Agent received an InvokeActivity with a TokenExchangeInvokeRequest for a different connection name ('${tokenExchangeInvokeRequest.connectionName}') than expected ('${this._options.name}').`;
|
|
299
|
+
await this.sendInvokeResponse(context, {
|
|
300
|
+
status: 400,
|
|
301
|
+
body: { id: tokenExchangeInvokeRequest.id, connectionName: this._options.name, failureDetail: reason }
|
|
302
|
+
});
|
|
303
|
+
logger.error(this.prefix(reason));
|
|
304
|
+
await ((_b = this._onFailure) === null || _b === void 0 ? void 0 : _b.call(this, context, reason));
|
|
305
|
+
return types_1.AuthorizationHandlerStatus.REJECTED;
|
|
306
|
+
}
|
|
307
|
+
const { token } = await userTokenClient.exchangeTokenAsync((_c = activity.from) === null || _c === void 0 ? void 0 : _c.id, this._options.name, activity.channelId, tokenExchangeRequest);
|
|
308
|
+
if (!token) {
|
|
309
|
+
const reason = 'The MS Teams token service didn\'t send back the exchanged token. Waiting for MS Teams to send another signin/tokenExchange request. After multiple failed attempts, the user will be asked to enter the magic code.';
|
|
310
|
+
await this.sendInvokeResponse(context, {
|
|
311
|
+
status: 412,
|
|
312
|
+
body: { id: tokenExchangeInvokeRequest.id, connectionName: this._options.name, failureDetail: reason }
|
|
313
|
+
});
|
|
314
|
+
logger.debug(this.prefix(reason));
|
|
315
|
+
return types_1.AuthorizationHandlerStatus.PENDING;
|
|
316
|
+
}
|
|
317
|
+
await this.sendInvokeResponse(context, {
|
|
318
|
+
status: 200,
|
|
319
|
+
body: { id: tokenExchangeInvokeRequest.id, connectionName: this._options.name }
|
|
320
|
+
});
|
|
321
|
+
logger.debug(this.prefix('Successfully exchanged token'));
|
|
322
|
+
this.setContext(context, { token });
|
|
323
|
+
await ((_d = this._onSuccess) === null || _d === void 0 ? void 0 : _d.call(this, context));
|
|
324
|
+
return types_1.AuthorizationHandlerStatus.APPROVED;
|
|
325
|
+
}
|
|
326
|
+
if (activity.name === 'signin/failure') {
|
|
327
|
+
await this.sendInvokeResponse(context, { status: 200 });
|
|
328
|
+
const reason = 'Failed to sign-in';
|
|
329
|
+
const value = activity.value;
|
|
330
|
+
logger.error(this.prefix(reason), value, activity);
|
|
331
|
+
if (this._onFailure) {
|
|
332
|
+
await this._onFailure(context, value.message || reason);
|
|
333
|
+
}
|
|
334
|
+
else {
|
|
335
|
+
await context.sendActivity(messageFactory_1.MessageFactory.text(`${reason}. Please try again.`));
|
|
336
|
+
}
|
|
337
|
+
return types_1.AuthorizationHandlerStatus.REJECTED;
|
|
338
|
+
}
|
|
339
|
+
logger.error(this.prefix(`Unknown sign-in activity name: ${activity.name}`), activity);
|
|
340
|
+
return types_1.AuthorizationHandlerStatus.REJECTED;
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Verifies the magic code provided by the user.
|
|
344
|
+
*/
|
|
345
|
+
async codeVerification(storage, context, active) {
|
|
346
|
+
if (!active) {
|
|
347
|
+
logger.debug(this.prefix('No active session found. Skipping code verification.'), context.activity);
|
|
348
|
+
return { status: types_1.AuthorizationHandlerStatus.IGNORED };
|
|
349
|
+
}
|
|
350
|
+
const { activity } = context;
|
|
351
|
+
let state = activity.text;
|
|
352
|
+
if (activity.name === 'signin/verifyState') {
|
|
353
|
+
logger.debug(this.prefix('Getting code from activity.value'), activity);
|
|
354
|
+
const { state: teamsState } = activity.value;
|
|
355
|
+
state = teamsState;
|
|
356
|
+
}
|
|
357
|
+
if (state === 'CancelledByUser') {
|
|
358
|
+
await this.sendInvokeResponse(context, { status: 200 });
|
|
359
|
+
logger.warn(this.prefix('Sign-in process was cancelled by the user'), activity);
|
|
360
|
+
return { status: types_1.AuthorizationHandlerStatus.REJECTED };
|
|
361
|
+
}
|
|
362
|
+
if (!(state === null || state === void 0 ? void 0 : state.match(/^\d{6}$/))) {
|
|
363
|
+
logger.warn(this.prefix(`Invalid magic code entered. Attempts left: ${active.attemptsLeft}`), activity);
|
|
364
|
+
await context.sendActivity(messageFactory_1.MessageFactory.text(this.messages.invalidCodeFormat(active.attemptsLeft)));
|
|
365
|
+
await storage.write({ ...active, attemptsLeft: active.attemptsLeft - 1 });
|
|
366
|
+
return { status: types_1.AuthorizationHandlerStatus.PENDING };
|
|
367
|
+
}
|
|
368
|
+
await this.sendInvokeResponse(context, { status: 200 });
|
|
369
|
+
logger.debug(this.prefix('Code verification successful'), activity);
|
|
370
|
+
return { status: types_1.AuthorizationHandlerStatus.APPROVED, code: state };
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Sets the authorization context in the turn state.
|
|
374
|
+
*/
|
|
375
|
+
setContext(context, data) {
|
|
376
|
+
return context.turnState.set(this._key, () => data);
|
|
377
|
+
}
|
|
378
|
+
/**
|
|
379
|
+
* Gets the authorization context from the turn state.
|
|
380
|
+
*/
|
|
381
|
+
getContext(context) {
|
|
382
|
+
var _a;
|
|
383
|
+
const result = context.turnState.get(this._key);
|
|
384
|
+
return (_a = result === null || result === void 0 ? void 0 : result()) !== null && _a !== void 0 ? _a : { token: undefined };
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Gets the user token client from the turn context.
|
|
388
|
+
*/
|
|
389
|
+
async getUserTokenClient(context) {
|
|
390
|
+
const userTokenClient = context.turnState.get(context.adapter.UserTokenClientKey);
|
|
391
|
+
if (!userTokenClient) {
|
|
392
|
+
throw new Error(this.prefix('The \'userTokenClient\' is not available in the adapter. Ensure that the adapter supports user token operations.'));
|
|
393
|
+
}
|
|
394
|
+
return userTokenClient;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Sends an InvokeResponse activity if the channel is Microsoft Teams.
|
|
398
|
+
*/
|
|
399
|
+
sendInvokeResponse(context, response) {
|
|
400
|
+
if (context.activity.channelId !== agents_activity_1.Channels.Msteams) {
|
|
401
|
+
return Promise.resolve();
|
|
402
|
+
}
|
|
403
|
+
return context.sendActivity(agents_activity_1.Activity.fromObject({
|
|
404
|
+
type: agents_activity_1.ActivityTypes.InvokeResponse,
|
|
405
|
+
value: response
|
|
406
|
+
}));
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* Prefixes a message with the handler ID.
|
|
410
|
+
*/
|
|
411
|
+
prefix(message) {
|
|
412
|
+
return `[handler:${this.id}] ${message}`;
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Loads the OAuth scopes from the environment variables.
|
|
416
|
+
*/
|
|
417
|
+
loadScopes(value) {
|
|
418
|
+
var _a;
|
|
419
|
+
return (_a = value === null || value === void 0 ? void 0 : value.split(',').reduce((acc, scope) => {
|
|
420
|
+
const trimmed = scope.trim();
|
|
421
|
+
if (trimmed) {
|
|
422
|
+
acc.push(trimmed);
|
|
423
|
+
}
|
|
424
|
+
return acc;
|
|
425
|
+
}, [])) !== null && _a !== void 0 ? _a : [];
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
exports.AzureBotAuthorization = AzureBotAuthorization;
|
|
429
|
+
//# sourceMappingURL=azureBotAuthorization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azureBotAuthorization.js","sourceRoot":"","sources":["../../../../../src/app/auth/handlers/azureBotAuthorization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./azureBotAuthorization"), exports);
|
|
18
|
+
__exportStar(require("./agenticAuthorization"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/app/auth/handlers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAuC;AACvC,yDAAsC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./authorization"), exports);
|
|
18
|
+
__exportStar(require("./authorizationManager"), exports);
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/app/auth/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAA+B;AAC/B,yDAAsC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
import { Activity } from '@microsoft/agents-activity';
|
|
6
|
+
import { Storage, StoreItem } from '../../storage';
|
|
7
|
+
import { TurnContext } from '../../turnContext';
|
|
8
|
+
import { AgenticAuthorizationOptions, AzureBotAuthorizationOptions } from './handlers';
|
|
9
|
+
import { TokenResponse } from '../../oauth';
|
|
10
|
+
import { Connections } from '../../auth/connections';
|
|
11
|
+
/**
|
|
12
|
+
* Authorization configuration options.
|
|
13
|
+
*/
|
|
14
|
+
export type AuthorizationOptions = Record<string, AzureBotAuthorizationOptions | AgenticAuthorizationOptions>;
|
|
15
|
+
/**
|
|
16
|
+
* Represents the status of a handler registration attempt.
|
|
17
|
+
*/
|
|
18
|
+
export declare enum AuthorizationHandlerStatus {
|
|
19
|
+
/** The handler has approved the request - validation passed */
|
|
20
|
+
APPROVED = "approved",
|
|
21
|
+
/** The handler registration is pending further action */
|
|
22
|
+
PENDING = "pending",
|
|
23
|
+
/** The handler has rejected the request - validation failed */
|
|
24
|
+
REJECTED = "rejected",
|
|
25
|
+
/** The handler has ignored the request - no action taken */
|
|
26
|
+
IGNORED = "ignored",
|
|
27
|
+
/** The handler requires revalidation */
|
|
28
|
+
REVALIDATE = "revalidate"
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Active handler manager information.
|
|
32
|
+
*/
|
|
33
|
+
export interface ActiveAuthorizationHandler extends StoreItem {
|
|
34
|
+
/**
|
|
35
|
+
* Unique identifier for the handler.
|
|
36
|
+
*/
|
|
37
|
+
readonly id: string;
|
|
38
|
+
/**
|
|
39
|
+
* The current activity associated with the handler.
|
|
40
|
+
*/
|
|
41
|
+
activity: Activity;
|
|
42
|
+
}
|
|
43
|
+
export interface AuthorizationHandler {
|
|
44
|
+
/**
|
|
45
|
+
* Unique identifier for the handler.
|
|
46
|
+
*/
|
|
47
|
+
readonly id: string;
|
|
48
|
+
/**
|
|
49
|
+
* Initiates the sign-in process for the handler.
|
|
50
|
+
* @param context The turn context.
|
|
51
|
+
* @param active Optional active handler data.
|
|
52
|
+
* @returns The status of the sign-in attempt.
|
|
53
|
+
*/
|
|
54
|
+
signin(context: TurnContext, active?: ActiveAuthorizationHandler): Promise<AuthorizationHandlerStatus>;
|
|
55
|
+
/**
|
|
56
|
+
* Initiates the sign-out process for the handler.
|
|
57
|
+
* @param context The turn context.
|
|
58
|
+
* @returns A promise that resolves to a boolean indicating the success of the sign-out attempt.
|
|
59
|
+
*/
|
|
60
|
+
signout(context: TurnContext): Promise<boolean>;
|
|
61
|
+
/**
|
|
62
|
+
* Retrieves an access token for the specified scopes.
|
|
63
|
+
* @param context The turn context.
|
|
64
|
+
* @param options Optional token request options.
|
|
65
|
+
* @returns The access token response.
|
|
66
|
+
*/
|
|
67
|
+
token(context: TurnContext, options?: AuthorizationHandlerTokenOptions): Promise<TokenResponse>;
|
|
68
|
+
/**
|
|
69
|
+
* Registers a callback to be invoked when the sign-in process is successful.
|
|
70
|
+
* @param callback The callback to invoke on success.
|
|
71
|
+
*/
|
|
72
|
+
onSuccess(callback: (context: TurnContext) => Promise<void> | void): void;
|
|
73
|
+
/**
|
|
74
|
+
* Registers a callback to be invoked when the sign-in process fails.
|
|
75
|
+
* @param callback The callback to invoke on failure.
|
|
76
|
+
*/
|
|
77
|
+
onFailure(callback: (context: TurnContext, reason?: string) => Promise<void> | void): void;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Common settings required by authorization handlers.
|
|
81
|
+
*/
|
|
82
|
+
export interface AuthorizationHandlerSettings {
|
|
83
|
+
/**
|
|
84
|
+
* Storage instance for persisting handler state.
|
|
85
|
+
*/
|
|
86
|
+
storage: Storage;
|
|
87
|
+
/**
|
|
88
|
+
* Connections instance for managing authentication connections.
|
|
89
|
+
*/
|
|
90
|
+
connections: Connections;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Options for token requests in authorization handlers.
|
|
94
|
+
*/
|
|
95
|
+
export interface AuthorizationHandlerTokenOptions {
|
|
96
|
+
/**
|
|
97
|
+
* Optional name of the connection to use for the token request. Usually used for OBO flows.
|
|
98
|
+
*/
|
|
99
|
+
connection?: string;
|
|
100
|
+
/**
|
|
101
|
+
* Optional scopes to request in the token. Usually used for OBO flows.
|
|
102
|
+
*/
|
|
103
|
+
scopes?: string[];
|
|
104
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
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.AuthorizationHandlerStatus = void 0;
|
|
8
|
+
/**
|
|
9
|
+
* Represents the status of a handler registration attempt.
|
|
10
|
+
*/
|
|
11
|
+
var AuthorizationHandlerStatus;
|
|
12
|
+
(function (AuthorizationHandlerStatus) {
|
|
13
|
+
/** The handler has approved the request - validation passed */
|
|
14
|
+
AuthorizationHandlerStatus["APPROVED"] = "approved";
|
|
15
|
+
/** The handler registration is pending further action */
|
|
16
|
+
AuthorizationHandlerStatus["PENDING"] = "pending";
|
|
17
|
+
/** The handler has rejected the request - validation failed */
|
|
18
|
+
AuthorizationHandlerStatus["REJECTED"] = "rejected";
|
|
19
|
+
/** The handler has ignored the request - no action taken */
|
|
20
|
+
AuthorizationHandlerStatus["IGNORED"] = "ignored";
|
|
21
|
+
/** The handler requires revalidation */
|
|
22
|
+
AuthorizationHandlerStatus["REVALIDATE"] = "revalidate";
|
|
23
|
+
})(AuthorizationHandlerStatus || (exports.AuthorizationHandlerStatus = AuthorizationHandlerStatus = {}));
|
|
24
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/app/auth/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAcH;;GAEG;AACH,IAAY,0BAWX;AAXD,WAAY,0BAA0B;IACpC,+DAA+D;IAC/D,mDAAqB,CAAA;IACrB,yDAAyD;IACzD,iDAAmB,CAAA;IACnB,+DAA+D;IAC/D,mDAAqB,CAAA;IACrB,4DAA4D;IAC5D,iDAAmB,CAAA;IACnB,wCAAwC;IACxC,uDAAyB,CAAA;AAC3B,CAAC,EAXW,0BAA0B,0CAA1B,0BAA0B,QAWrC"}
|