@microsoft/teams.apps 0.2.7
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 +35 -0
- package/dist/api.d.ts +21 -0
- package/dist/api.js +66 -0
- package/dist/app.d.ts +1137 -0
- package/dist/app.embed.d.ts +24 -0
- package/dist/app.embed.js +83 -0
- package/dist/app.events.d.ts +14 -0
- package/dist/app.events.js +51 -0
- package/dist/app.js +411 -0
- package/dist/app.oauth.d.ts +13 -0
- package/dist/app.oauth.js +106 -0
- package/dist/app.plugins.d.ts +24 -0
- package/dist/app.plugins.js +96 -0
- package/dist/app.process.d.ts +11 -0
- package/dist/app.process.js +141 -0
- package/dist/app.routing.d.ts +22 -0
- package/dist/app.routing.js +40 -0
- package/dist/container/container.d.ts +37 -0
- package/dist/container/container.js +46 -0
- package/dist/container/index.d.ts +2 -0
- package/dist/container/index.js +19 -0
- package/dist/container/provider.d.ts +9 -0
- package/dist/container/provider.js +11 -0
- package/dist/contexts/activity-error.d.ts +8 -0
- package/dist/contexts/activity-error.js +3 -0
- package/dist/contexts/activity-signin.d.ts +8 -0
- package/dist/contexts/activity-signin.js +3 -0
- package/dist/contexts/activity.d.ts +117 -0
- package/dist/contexts/activity.js +133 -0
- package/dist/contexts/client.d.ts +53 -0
- package/dist/contexts/client.js +3 -0
- package/dist/contexts/function.d.ts +17 -0
- package/dist/contexts/function.js +3 -0
- package/dist/contexts/index.d.ts +5 -0
- package/dist/contexts/index.js +22 -0
- package/dist/events/activity-response.d.ts +16 -0
- package/dist/events/activity-response.js +3 -0
- package/dist/events/activity-sent.d.ts +16 -0
- package/dist/events/activity-sent.js +3 -0
- package/dist/events/activity.d.ts +20 -0
- package/dist/events/activity.js +3 -0
- package/dist/events/error.d.ts +16 -0
- package/dist/events/error.js +3 -0
- package/dist/events/index.d.ts +18 -0
- package/dist/events/index.js +21 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +47 -0
- package/dist/manifest.d.ts +1241 -0
- package/dist/manifest.js +3 -0
- package/dist/middleware/entra-token-validator.d.ts +75 -0
- package/dist/middleware/entra-token-validator.js +169 -0
- package/dist/middleware/index.d.ts +3 -0
- package/dist/middleware/index.js +22 -0
- package/dist/middleware/strip-mentions-text.d.ts +3 -0
- package/dist/middleware/strip-mentions-text.js +48 -0
- package/dist/middleware/with-client-auth.d.ts +13 -0
- package/dist/middleware/with-client-auth.js +40 -0
- package/dist/oauth.d.ts +9 -0
- package/dist/oauth.js +7 -0
- package/dist/plugins/http/index.d.ts +2 -0
- package/dist/plugins/http/index.js +19 -0
- package/dist/plugins/http/plugin.d.ts +986 -0
- package/dist/plugins/http/plugin.js +238 -0
- package/dist/plugins/http/stream.d.ts +956 -0
- package/dist/plugins/http/stream.js +128 -0
- package/dist/plugins/index.d.ts +1 -0
- package/dist/plugins/index.js +18 -0
- package/dist/router.d.ts +34 -0
- package/dist/router.js +91 -0
- package/dist/routes/activity.d.ts +8 -0
- package/dist/routes/activity.js +3 -0
- package/dist/routes/conversation-update.d.ts +6 -0
- package/dist/routes/conversation-update.js +3 -0
- package/dist/routes/event.d.ts +17 -0
- package/dist/routes/event.js +11 -0
- package/dist/routes/index.d.ts +20 -0
- package/dist/routes/index.js +24 -0
- package/dist/routes/install.d.ts +8 -0
- package/dist/routes/install.js +3 -0
- package/dist/routes/invoke/file-consent.d.ts +6 -0
- package/dist/routes/invoke/file-consent.js +3 -0
- package/dist/routes/invoke/index.d.ts +39 -0
- package/dist/routes/invoke/index.js +45 -0
- package/dist/routes/invoke/message-extension-submit.d.ts +6 -0
- package/dist/routes/invoke/message-extension-submit.js +3 -0
- package/dist/routes/invoke/message-submit.d.ts +10 -0
- package/dist/routes/invoke/message-submit.js +3 -0
- package/dist/routes/message-delete.d.ts +6 -0
- package/dist/routes/message-delete.js +3 -0
- package/dist/routes/message-update.d.ts +6 -0
- package/dist/routes/message-update.js +3 -0
- package/dist/types/constructor.d.ts +7 -0
- package/dist/types/constructor.js +3 -0
- package/dist/types/event-handler.d.ts +1 -0
- package/dist/types/event-handler.js +3 -0
- package/dist/types/event.d.ts +11 -0
- package/dist/types/event.js +3 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.js +24 -0
- package/dist/types/plugin/decorators/dependency.d.ts +135 -0
- package/dist/types/plugin/decorators/dependency.js +49 -0
- package/dist/types/plugin/decorators/event.d.ts +18 -0
- package/dist/types/plugin/decorators/event.js +24 -0
- package/dist/types/plugin/decorators/index.d.ts +3 -0
- package/dist/types/plugin/decorators/index.js +12 -0
- package/dist/types/plugin/decorators/plugin.d.ts +25 -0
- package/dist/types/plugin/decorators/plugin.js +23 -0
- package/dist/types/plugin/index.d.ts +8 -0
- package/dist/types/plugin/index.js +25 -0
- package/dist/types/plugin/plugin-activity-event.d.ts +20 -0
- package/dist/types/plugin/plugin-activity-event.js +3 -0
- package/dist/types/plugin/plugin-activity-response-event.d.ts +20 -0
- package/dist/types/plugin/plugin-activity-response-event.js +3 -0
- package/dist/types/plugin/plugin-activity-sent-event.d.ts +16 -0
- package/dist/types/plugin/plugin-activity-sent-event.js +3 -0
- package/dist/types/plugin/plugin-error-event.d.ts +20 -0
- package/dist/types/plugin/plugin-error-event.js +3 -0
- package/dist/types/plugin/plugin-start-event.d.ts +11 -0
- package/dist/types/plugin/plugin-start-event.js +3 -0
- package/dist/types/plugin/plugin.d.ts +74 -0
- package/dist/types/plugin/plugin.js +3 -0
- package/dist/types/plugin/sender.d.ts +18 -0
- package/dist/types/plugin/sender.js +3 -0
- package/dist/types/prefixed.d.ts +3 -0
- package/dist/types/prefixed.js +3 -0
- package/dist/types/route-handler.d.ts +2 -0
- package/dist/types/route-handler.js +3 -0
- package/dist/types/streamer.d.ts +31 -0
- package/dist/types/streamer.js +3 -0
- package/dist/types/suffixed.d.ts +3 -0
- package/dist/types/suffixed.js +3 -0
- package/package.json +70 -0
package/dist/manifest.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import jwt, { type JwtPayload } from 'jsonwebtoken';
|
|
2
|
+
import jwksClient, { JwksClient } from 'jwks-rsa';
|
|
3
|
+
import { ILogger } from '@microsoft/teams.common';
|
|
4
|
+
/**
|
|
5
|
+
* Entra token validator parameters
|
|
6
|
+
*/
|
|
7
|
+
type EntraTokenValidatorParams = {
|
|
8
|
+
/**
|
|
9
|
+
* App tenant ID. Used to find public keys to validate token signature, and to validate issuer for single-tenant apps.
|
|
10
|
+
* This can be 'common', 'organization', or 'consumers' for a multi-tenant app, or a specific tenant ID for a single-tenant app.
|
|
11
|
+
*/
|
|
12
|
+
tenantId: string;
|
|
13
|
+
/** App client ID. Used to validate token audience. */
|
|
14
|
+
clientId: string;
|
|
15
|
+
options?: {
|
|
16
|
+
/**
|
|
17
|
+
* For multi-tenant apps that only allows sign-in from specific tenants, this is the list of allowed tenant IDs.
|
|
18
|
+
* If empty or not provided, any tenant is considered valid.
|
|
19
|
+
* This is ignored for single-tenant apps.
|
|
20
|
+
*/
|
|
21
|
+
allowedTenantIds?: string[];
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export declare const getJwksClient: (options: jwksClient.Options) => JwksClient;
|
|
25
|
+
/**
|
|
26
|
+
* And Entra token validator that can validate access tokens issued by Microsoft Entra for app specific use.
|
|
27
|
+
*/
|
|
28
|
+
export declare class EntraTokenValidator {
|
|
29
|
+
readonly tenantId: string;
|
|
30
|
+
readonly clientId: string;
|
|
31
|
+
readonly validIssuerTenantIds: string[];
|
|
32
|
+
private keyClient;
|
|
33
|
+
constructor({ tenantId, clientId, options }: EntraTokenValidatorParams);
|
|
34
|
+
/**
|
|
35
|
+
* Validates a JWT access token
|
|
36
|
+
* @param {ILogger} logger The logger to use.
|
|
37
|
+
* @param {string} rawAccessToken The access token as a string.
|
|
38
|
+
* @param { string | undefined } requiredScope If provided, the token will only be considered valid if issued for this scope.
|
|
39
|
+
* @returns {Promise<jwt.Jwt | null>} The validated token if the signature is valid and the claims are valid.
|
|
40
|
+
*/
|
|
41
|
+
validateAccessToken(logger: ILogger, rawAccessToken: string, requiredScope?: string): Promise<jwt.Jwt | null>;
|
|
42
|
+
getTokenPayload(token: jwt.Jwt): JwtPayload | null;
|
|
43
|
+
/**
|
|
44
|
+
* Validates the token claims: that it's valid for the intended purpose, it's not expired, it has the right audience & issuer,
|
|
45
|
+
* it's issued for the requisite scope.
|
|
46
|
+
* @param {ILogger} logger The logger to use.
|
|
47
|
+
* @param {jwt.Jwt} token The token to validate.
|
|
48
|
+
* @param { string | undefined } requiredScope If provided, the token will only be considered valid if issued for this scope.
|
|
49
|
+
* @returns {boolean} True if the claims validation passed.
|
|
50
|
+
*/
|
|
51
|
+
private validateAccessTokenClaims;
|
|
52
|
+
/**
|
|
53
|
+
* Decodes an access token without verifying if the signature is valid.
|
|
54
|
+
* @param {ILogger} logger The logger to use.
|
|
55
|
+
* @param {string} rawAccessToken the raw access token.
|
|
56
|
+
* @returns {jwt.JWT | null} A decoded token if the raw access token is well formed.
|
|
57
|
+
*/
|
|
58
|
+
private decodeToken;
|
|
59
|
+
/**
|
|
60
|
+
* Gets the public key from the key identifier in a token header
|
|
61
|
+
* @param {ILogger} logger The logger to use.
|
|
62
|
+
* @param {jwt.JwtHeader} header the token header
|
|
63
|
+
* @returns {Promise<string | undefined>} the public key corresponding to the header key identifier, if available
|
|
64
|
+
*/
|
|
65
|
+
private getPublicKey;
|
|
66
|
+
/**
|
|
67
|
+
* Decodes the access token and verifies it against the public key
|
|
68
|
+
* @param {ILogger} logger The logger to use.
|
|
69
|
+
* @param {string} rawAccessToken the raw access token.
|
|
70
|
+
* @param {string} publicKey the public key to verify signature against.
|
|
71
|
+
* @returns {Promise<jwt.JWT | null>} A decoded token if the raw token is well formed and the signature is valid.
|
|
72
|
+
*/
|
|
73
|
+
private validateTokenSignature;
|
|
74
|
+
}
|
|
75
|
+
export {};
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.EntraTokenValidator = exports.getJwksClient = void 0;
|
|
7
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
8
|
+
const jwks_rsa_1 = __importDefault(require("jwks-rsa"));
|
|
9
|
+
const getJwksClient = (options) => (0, jwks_rsa_1.default)(options);
|
|
10
|
+
exports.getJwksClient = getJwksClient;
|
|
11
|
+
/**
|
|
12
|
+
* And Entra token validator that can validate access tokens issued by Microsoft Entra for app specific use.
|
|
13
|
+
*/
|
|
14
|
+
class EntraTokenValidator {
|
|
15
|
+
tenantId;
|
|
16
|
+
clientId;
|
|
17
|
+
validIssuerTenantIds;
|
|
18
|
+
keyClient;
|
|
19
|
+
constructor({ tenantId, clientId, options }) {
|
|
20
|
+
this.tenantId = tenantId;
|
|
21
|
+
this.clientId = clientId;
|
|
22
|
+
// single-tenant applications only allow tokens issued by this app's tenant
|
|
23
|
+
// multi tenant applications allow tokens issued by any tenant, unless the
|
|
24
|
+
// allowedTenantIds option is provided to limit the set of allowed issuers.
|
|
25
|
+
const isMultiTenant = ['common', 'organizations', 'consumers'].some((val) => tenantId === val);
|
|
26
|
+
this.validIssuerTenantIds = isMultiTenant ? (options?.allowedTenantIds ?? []) : [this.tenantId];
|
|
27
|
+
this.keyClient = (0, exports.getJwksClient)({
|
|
28
|
+
jwksUri: `https://login.microsoftonline.com/${tenantId}/discovery/v2.0/keys`,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Validates a JWT access token
|
|
33
|
+
* @param {ILogger} logger The logger to use.
|
|
34
|
+
* @param {string} rawAccessToken The access token as a string.
|
|
35
|
+
* @param { string | undefined } requiredScope If provided, the token will only be considered valid if issued for this scope.
|
|
36
|
+
* @returns {Promise<jwt.Jwt | null>} The validated token if the signature is valid and the claims are valid.
|
|
37
|
+
*/
|
|
38
|
+
async validateAccessToken(logger, rawAccessToken, requiredScope) {
|
|
39
|
+
if (!rawAccessToken) {
|
|
40
|
+
logger.error('No token provided');
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const token = this.decodeToken(logger, rawAccessToken);
|
|
44
|
+
if (!token) {
|
|
45
|
+
logger.error('Failed to decode the access token');
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
const publicKey = await this.getPublicKey(logger, token.header);
|
|
49
|
+
if (!publicKey) {
|
|
50
|
+
logger.error(`Failed to find public key for the key identifier "${token.header.kid}"`);
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const validatedToken = this.validateTokenSignature(logger, rawAccessToken, publicKey);
|
|
54
|
+
if (!validatedToken) {
|
|
55
|
+
logger.error('Failed to validate the token signature');
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
if (!this.validateAccessTokenClaims(logger, validatedToken, requiredScope)) {
|
|
59
|
+
logger.error('Failed to validate the access token claims');
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return validatedToken;
|
|
63
|
+
}
|
|
64
|
+
getTokenPayload(token) {
|
|
65
|
+
return token.payload instanceof Object ? token.payload : null;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Validates the token claims: that it's valid for the intended purpose, it's not expired, it has the right audience & issuer,
|
|
69
|
+
* it's issued for the requisite scope.
|
|
70
|
+
* @param {ILogger} logger The logger to use.
|
|
71
|
+
* @param {jwt.Jwt} token The token to validate.
|
|
72
|
+
* @param { string | undefined } requiredScope If provided, the token will only be considered valid if issued for this scope.
|
|
73
|
+
* @returns {boolean} True if the claims validation passed.
|
|
74
|
+
*/
|
|
75
|
+
validateAccessTokenClaims(logger, token, requiredScope) {
|
|
76
|
+
const payload = this.getTokenPayload(token);
|
|
77
|
+
if (!payload) {
|
|
78
|
+
logger.error('Invalid token payload.');
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
// validate iat (issued at) and exp (expiration) fields.
|
|
82
|
+
// these are expressed as number of seconds since Unix epoch.
|
|
83
|
+
const now = Math.round(new Date().getTime() / 1000.0);
|
|
84
|
+
const checkTimestamp = payload.iat && payload.iat <= now && payload.exp && payload.exp >= now;
|
|
85
|
+
if (!checkTimestamp) {
|
|
86
|
+
logger.error('The token is expired or not yet valid.');
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
// validate audience
|
|
90
|
+
const checkAudience = payload.aud === this.clientId || payload.aud === `api://${this.clientId}`;
|
|
91
|
+
if (!checkAudience) {
|
|
92
|
+
logger.error('The token is not issued for the expected audience.');
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
const tokenIssuer = payload.iss;
|
|
96
|
+
if (!tokenIssuer) {
|
|
97
|
+
logger.error('Invalid token issuer.');
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
// validate token issuer
|
|
101
|
+
// - if this is a single-tenant application, validate that the token is issued by the expected tenant
|
|
102
|
+
// - if this is a multi-tenant application that only allows sign-in from specific tenants, validate that
|
|
103
|
+
// the token is issued by one of those
|
|
104
|
+
// - if this is a multi-tenant that does not limit sign-in to specific tenants, any issuer is considered valid.
|
|
105
|
+
const checkIssuer = !this.validIssuerTenantIds.length ||
|
|
106
|
+
this.validIssuerTenantIds.some((tenantId) => tokenIssuer.startsWith(`https://login.microsoftonline.com/${tenantId}/`));
|
|
107
|
+
if (!checkIssuer) {
|
|
108
|
+
logger.error(`The token is issued by unexpected tenant: ${payload.iss}`);
|
|
109
|
+
return false;
|
|
110
|
+
}
|
|
111
|
+
// validate that the token is issued for the required scope
|
|
112
|
+
const checkRequiredScope = !requiredScope || payload.scp?.includes(requiredScope);
|
|
113
|
+
if (!checkRequiredScope) {
|
|
114
|
+
logger.error(`The token is not issued for the required scope: ${requiredScope}`);
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
// all checks passed
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Decodes an access token without verifying if the signature is valid.
|
|
122
|
+
* @param {ILogger} logger The logger to use.
|
|
123
|
+
* @param {string} rawAccessToken the raw access token.
|
|
124
|
+
* @returns {jwt.JWT | null} A decoded token if the raw access token is well formed.
|
|
125
|
+
*/
|
|
126
|
+
decodeToken(logger, rawAccessToken) {
|
|
127
|
+
try {
|
|
128
|
+
return jsonwebtoken_1.default.decode(rawAccessToken, { complete: true });
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
logger.error(error);
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Gets the public key from the key identifier in a token header
|
|
137
|
+
* @param {ILogger} logger The logger to use.
|
|
138
|
+
* @param {jwt.JwtHeader} header the token header
|
|
139
|
+
* @returns {Promise<string | undefined>} the public key corresponding to the header key identifier, if available
|
|
140
|
+
*/
|
|
141
|
+
async getPublicKey(logger, header) {
|
|
142
|
+
try {
|
|
143
|
+
const signingKey = await this.keyClient.getSigningKey(header.kid);
|
|
144
|
+
return signingKey.getPublicKey() ?? null;
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
logger.error(error);
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Decodes the access token and verifies it against the public key
|
|
153
|
+
* @param {ILogger} logger The logger to use.
|
|
154
|
+
* @param {string} rawAccessToken the raw access token.
|
|
155
|
+
* @param {string} publicKey the public key to verify signature against.
|
|
156
|
+
* @returns {Promise<jwt.JWT | null>} A decoded token if the raw token is well formed and the signature is valid.
|
|
157
|
+
*/
|
|
158
|
+
validateTokenSignature(logger, rawAccessToken, publicKey) {
|
|
159
|
+
try {
|
|
160
|
+
return jsonwebtoken_1.default.verify(rawAccessToken, publicKey, { complete: true });
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
logger.error(error);
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
exports.EntraTokenValidator = EntraTokenValidator;
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cmEtdG9rZW4tdmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZGRsZXdhcmUvZW50cmEtdG9rZW4tdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGdFQUFvRDtBQUNwRCx3REFBa0Q7QUF5QjNDLE1BQU0sYUFBYSxHQUFHLENBQUMsT0FBMkIsRUFBYyxFQUFFLENBQUMsSUFBQSxrQkFBVSxFQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQWpGLFFBQUEsYUFBYSxpQkFBb0U7QUFFOUY7O0dBRUc7QUFDSCxNQUFhLG1CQUFtQjtJQUNyQixRQUFRLENBQVM7SUFDakIsUUFBUSxDQUFTO0lBQ2pCLG9CQUFvQixDQUFXO0lBQ2hDLFNBQVMsQ0FBYTtJQUU5QixZQUFZLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQTZCO1FBQ3BFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLDJFQUEyRTtRQUMzRSwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLE1BQU0sYUFBYSxHQUFHLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFFBQVEsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFaEcsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFBLHFCQUFhLEVBQUM7WUFDN0IsT0FBTyxFQUFFLHFDQUFxQyxRQUFRLHNCQUFzQjtTQUM3RSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7OztPQU1H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
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
exports.EntraTokenValidator = void 0;
|
|
18
|
+
var entra_token_validator_1 = require("./entra-token-validator");
|
|
19
|
+
Object.defineProperty(exports, "EntraTokenValidator", { enumerable: true, get: function () { return entra_token_validator_1.EntraTokenValidator; } });
|
|
20
|
+
__exportStar(require("./strip-mentions-text"), exports);
|
|
21
|
+
__exportStar(require("./with-client-auth"), exports);
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbWlkZGxld2FyZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlFQUE4RDtBQUFyRCw0SEFBQSxtQkFBbUIsT0FBQTtBQUM1Qix3REFBc0M7QUFDdEMscURBQW1DIn0=
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import * as api from '@microsoft/teams.api';
|
|
2
|
+
import { IActivityContext } from '../contexts';
|
|
3
|
+
export declare function stripMentionsText(options?: api.StripMentionsTextOptions): ({ activity, next }: IActivityContext) => void | api.InvokeResponse | Promise<void | api.InvokeResponse>;
|
|
@@ -0,0 +1,48 @@
|
|
|
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.stripMentionsText = stripMentionsText;
|
|
37
|
+
const api = __importStar(require("@microsoft/teams.api"));
|
|
38
|
+
function stripMentionsText(options) {
|
|
39
|
+
return ({ activity, next }) => {
|
|
40
|
+
if (activity.type === 'message' ||
|
|
41
|
+
activity.type === 'messageUpdate' ||
|
|
42
|
+
activity.type === 'typing') {
|
|
43
|
+
activity.text = api.stripMentionsText(activity, options);
|
|
44
|
+
}
|
|
45
|
+
return next();
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaXAtbWVudGlvbnMtdGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL3N0cmlwLW1lbnRpb25zLXRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJQSw4Q0FZQztBQWhCRCwwREFBNEM7QUFJNUMsU0FBZ0IsaUJBQWlCLENBQUMsT0FBc0M7SUFDdEUsT0FBTyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBb0IsRUFBRSxFQUFFO1FBQzlDLElBQ0UsUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTO1lBQzNCLFFBQVEsQ0FBQyxJQUFJLEtBQUssZUFBZTtZQUNqQyxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFDMUIsQ0FBQztZQUNELFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRCxDQUFDO1FBRUQsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDLENBQUM7QUFDSixDQUFDIn0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import { ILogger } from '@microsoft/teams.common';
|
|
3
|
+
import { Credentials } from '@microsoft/teams.api';
|
|
4
|
+
import { IClientContext } from '../contexts';
|
|
5
|
+
import { EntraTokenValidator } from './entra-token-validator';
|
|
6
|
+
export type WithClientAuthParams = Partial<Credentials> & {
|
|
7
|
+
entraTokenValidator?: Pick<EntraTokenValidator, 'validateAccessToken' | 'getTokenPayload'>;
|
|
8
|
+
readonly logger: ILogger;
|
|
9
|
+
};
|
|
10
|
+
export type ClientAuthRequest = express.Request & {
|
|
11
|
+
context?: IClientContext;
|
|
12
|
+
};
|
|
13
|
+
export declare function withClientAuth(params: WithClientAuthParams): (req: ClientAuthRequest, res: express.Response, next: express.NextFunction) => Promise<void>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.withClientAuth = withClientAuth;
|
|
4
|
+
function withClientAuth(params) {
|
|
5
|
+
const entraTokenValidator = params.entraTokenValidator;
|
|
6
|
+
const log = params.logger;
|
|
7
|
+
return async (req, res, next) => {
|
|
8
|
+
const appSessionId = req.header('X-Teams-App-Session-Id');
|
|
9
|
+
const pageId = req.header('X-Teams-Page-Id');
|
|
10
|
+
const authorization = req.header('Authorization')?.split(' ');
|
|
11
|
+
const authToken = authorization?.length === 2 && authorization[0].toLowerCase() === 'bearer'
|
|
12
|
+
? authorization[1]
|
|
13
|
+
: '';
|
|
14
|
+
const validatedToken = !entraTokenValidator
|
|
15
|
+
? null
|
|
16
|
+
: await entraTokenValidator.validateAccessToken(log, authToken);
|
|
17
|
+
if (!pageId || !appSessionId || !validatedToken || !entraTokenValidator) {
|
|
18
|
+
log.debug('unauthorized');
|
|
19
|
+
res.status(401).send('unauthorized');
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const tokenPayload = entraTokenValidator.getTokenPayload(validatedToken);
|
|
23
|
+
req.context = {
|
|
24
|
+
appId: tokenPayload?.['appId'],
|
|
25
|
+
appSessionId,
|
|
26
|
+
authToken,
|
|
27
|
+
channelId: req.header('X-Teams-Channel-Id'),
|
|
28
|
+
chatId: req.header('X-Teams-Chat-Id'),
|
|
29
|
+
meetingId: req.header('X-Teams-Meeting-Id'),
|
|
30
|
+
messageId: req.header('X-Teams-Message-Id'),
|
|
31
|
+
pageId,
|
|
32
|
+
subPageId: req.header('X-Teams-Sub-Page-Id'),
|
|
33
|
+
teamId: req.header('X-Teams-Team-Id'),
|
|
34
|
+
tenantId: tokenPayload?.['tid'],
|
|
35
|
+
userId: tokenPayload?.['oid'],
|
|
36
|
+
};
|
|
37
|
+
next();
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1jbGllbnQtYXV0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWRkbGV3YXJlL3dpdGgtY2xpZW50LWF1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpQkEsd0NBMENDO0FBMUNELFNBQWdCLGNBQWMsQ0FBQyxNQUE0QjtJQUN6RCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztJQUN2RCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBRTFCLE9BQU8sS0FBSyxFQUFFLEdBQXNCLEVBQUUsR0FBcUIsRUFBRSxJQUEwQixFQUFFLEVBQUU7UUFDekYsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQzFELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM3QyxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5RCxNQUFNLFNBQVMsR0FDYixhQUFhLEVBQUUsTUFBTSxLQUFLLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEtBQUssUUFBUTtZQUN4RSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztZQUNsQixDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxtQkFBbUI7WUFDekMsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsTUFBTSxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFbEUsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDeEUsR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUMxQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNyQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLG1CQUFtQixDQUFDLGVBQWUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV6RSxHQUFHLENBQUMsT0FBTyxHQUFHO1lBQ1osS0FBSyxFQUFFLFlBQVksRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUM5QixZQUFZO1lBQ1osU0FBUztZQUNULFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDO1lBQzNDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO1lBQ3JDLFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDO1lBQzNDLFNBQVMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDO1lBQzNDLE1BQU07WUFDTixTQUFTLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztZQUM1QyxNQUFNLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztZQUNyQyxRQUFRLEVBQUUsWUFBWSxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQy9CLE1BQU0sRUFBRSxZQUFZLEVBQUUsQ0FBQyxLQUFLLENBQUM7U0FDOUIsQ0FBQztRQUVGLElBQUksRUFBRSxDQUFDO0lBQ1QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyJ9
|
package/dist/oauth.d.ts
ADDED
package/dist/oauth.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_OAUTH_SETTINGS = void 0;
|
|
4
|
+
exports.DEFAULT_OAUTH_SETTINGS = {
|
|
5
|
+
defaultConnectionName: 'graph',
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2F1dGguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvb2F1dGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBU2EsUUFBQSxzQkFBc0IsR0FBNEI7SUFDN0QscUJBQXFCLEVBQUUsT0FBTztDQUMvQixDQUFDIn0=
|
|
@@ -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("./plugin"), exports);
|
|
18
|
+
__exportStar(require("./stream"), exports);
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcGx1Z2lucy9odHRwL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FBeUI7QUFDekIsMkNBQXlCIn0=
|