@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.
Files changed (132) hide show
  1. package/README.md +35 -0
  2. package/dist/api.d.ts +21 -0
  3. package/dist/api.js +66 -0
  4. package/dist/app.d.ts +1137 -0
  5. package/dist/app.embed.d.ts +24 -0
  6. package/dist/app.embed.js +83 -0
  7. package/dist/app.events.d.ts +14 -0
  8. package/dist/app.events.js +51 -0
  9. package/dist/app.js +411 -0
  10. package/dist/app.oauth.d.ts +13 -0
  11. package/dist/app.oauth.js +106 -0
  12. package/dist/app.plugins.d.ts +24 -0
  13. package/dist/app.plugins.js +96 -0
  14. package/dist/app.process.d.ts +11 -0
  15. package/dist/app.process.js +141 -0
  16. package/dist/app.routing.d.ts +22 -0
  17. package/dist/app.routing.js +40 -0
  18. package/dist/container/container.d.ts +37 -0
  19. package/dist/container/container.js +46 -0
  20. package/dist/container/index.d.ts +2 -0
  21. package/dist/container/index.js +19 -0
  22. package/dist/container/provider.d.ts +9 -0
  23. package/dist/container/provider.js +11 -0
  24. package/dist/contexts/activity-error.d.ts +8 -0
  25. package/dist/contexts/activity-error.js +3 -0
  26. package/dist/contexts/activity-signin.d.ts +8 -0
  27. package/dist/contexts/activity-signin.js +3 -0
  28. package/dist/contexts/activity.d.ts +117 -0
  29. package/dist/contexts/activity.js +133 -0
  30. package/dist/contexts/client.d.ts +53 -0
  31. package/dist/contexts/client.js +3 -0
  32. package/dist/contexts/function.d.ts +17 -0
  33. package/dist/contexts/function.js +3 -0
  34. package/dist/contexts/index.d.ts +5 -0
  35. package/dist/contexts/index.js +22 -0
  36. package/dist/events/activity-response.d.ts +16 -0
  37. package/dist/events/activity-response.js +3 -0
  38. package/dist/events/activity-sent.d.ts +16 -0
  39. package/dist/events/activity-sent.js +3 -0
  40. package/dist/events/activity.d.ts +20 -0
  41. package/dist/events/activity.js +3 -0
  42. package/dist/events/error.d.ts +16 -0
  43. package/dist/events/error.js +3 -0
  44. package/dist/events/index.d.ts +18 -0
  45. package/dist/events/index.js +21 -0
  46. package/dist/index.d.ts +7 -0
  47. package/dist/index.js +47 -0
  48. package/dist/manifest.d.ts +1241 -0
  49. package/dist/manifest.js +3 -0
  50. package/dist/middleware/entra-token-validator.d.ts +75 -0
  51. package/dist/middleware/entra-token-validator.js +169 -0
  52. package/dist/middleware/index.d.ts +3 -0
  53. package/dist/middleware/index.js +22 -0
  54. package/dist/middleware/strip-mentions-text.d.ts +3 -0
  55. package/dist/middleware/strip-mentions-text.js +48 -0
  56. package/dist/middleware/with-client-auth.d.ts +13 -0
  57. package/dist/middleware/with-client-auth.js +40 -0
  58. package/dist/oauth.d.ts +9 -0
  59. package/dist/oauth.js +7 -0
  60. package/dist/plugins/http/index.d.ts +2 -0
  61. package/dist/plugins/http/index.js +19 -0
  62. package/dist/plugins/http/plugin.d.ts +986 -0
  63. package/dist/plugins/http/plugin.js +238 -0
  64. package/dist/plugins/http/stream.d.ts +956 -0
  65. package/dist/plugins/http/stream.js +128 -0
  66. package/dist/plugins/index.d.ts +1 -0
  67. package/dist/plugins/index.js +18 -0
  68. package/dist/router.d.ts +34 -0
  69. package/dist/router.js +91 -0
  70. package/dist/routes/activity.d.ts +8 -0
  71. package/dist/routes/activity.js +3 -0
  72. package/dist/routes/conversation-update.d.ts +6 -0
  73. package/dist/routes/conversation-update.js +3 -0
  74. package/dist/routes/event.d.ts +17 -0
  75. package/dist/routes/event.js +11 -0
  76. package/dist/routes/index.d.ts +20 -0
  77. package/dist/routes/index.js +24 -0
  78. package/dist/routes/install.d.ts +8 -0
  79. package/dist/routes/install.js +3 -0
  80. package/dist/routes/invoke/file-consent.d.ts +6 -0
  81. package/dist/routes/invoke/file-consent.js +3 -0
  82. package/dist/routes/invoke/index.d.ts +39 -0
  83. package/dist/routes/invoke/index.js +45 -0
  84. package/dist/routes/invoke/message-extension-submit.d.ts +6 -0
  85. package/dist/routes/invoke/message-extension-submit.js +3 -0
  86. package/dist/routes/invoke/message-submit.d.ts +10 -0
  87. package/dist/routes/invoke/message-submit.js +3 -0
  88. package/dist/routes/message-delete.d.ts +6 -0
  89. package/dist/routes/message-delete.js +3 -0
  90. package/dist/routes/message-update.d.ts +6 -0
  91. package/dist/routes/message-update.js +3 -0
  92. package/dist/types/constructor.d.ts +7 -0
  93. package/dist/types/constructor.js +3 -0
  94. package/dist/types/event-handler.d.ts +1 -0
  95. package/dist/types/event-handler.js +3 -0
  96. package/dist/types/event.d.ts +11 -0
  97. package/dist/types/event.js +3 -0
  98. package/dist/types/index.d.ts +7 -0
  99. package/dist/types/index.js +24 -0
  100. package/dist/types/plugin/decorators/dependency.d.ts +135 -0
  101. package/dist/types/plugin/decorators/dependency.js +49 -0
  102. package/dist/types/plugin/decorators/event.d.ts +18 -0
  103. package/dist/types/plugin/decorators/event.js +24 -0
  104. package/dist/types/plugin/decorators/index.d.ts +3 -0
  105. package/dist/types/plugin/decorators/index.js +12 -0
  106. package/dist/types/plugin/decorators/plugin.d.ts +25 -0
  107. package/dist/types/plugin/decorators/plugin.js +23 -0
  108. package/dist/types/plugin/index.d.ts +8 -0
  109. package/dist/types/plugin/index.js +25 -0
  110. package/dist/types/plugin/plugin-activity-event.d.ts +20 -0
  111. package/dist/types/plugin/plugin-activity-event.js +3 -0
  112. package/dist/types/plugin/plugin-activity-response-event.d.ts +20 -0
  113. package/dist/types/plugin/plugin-activity-response-event.js +3 -0
  114. package/dist/types/plugin/plugin-activity-sent-event.d.ts +16 -0
  115. package/dist/types/plugin/plugin-activity-sent-event.js +3 -0
  116. package/dist/types/plugin/plugin-error-event.d.ts +20 -0
  117. package/dist/types/plugin/plugin-error-event.js +3 -0
  118. package/dist/types/plugin/plugin-start-event.d.ts +11 -0
  119. package/dist/types/plugin/plugin-start-event.js +3 -0
  120. package/dist/types/plugin/plugin.d.ts +74 -0
  121. package/dist/types/plugin/plugin.js +3 -0
  122. package/dist/types/plugin/sender.d.ts +18 -0
  123. package/dist/types/plugin/sender.js +3 -0
  124. package/dist/types/prefixed.d.ts +3 -0
  125. package/dist/types/prefixed.js +3 -0
  126. package/dist/types/route-handler.d.ts +2 -0
  127. package/dist/types/route-handler.js +3 -0
  128. package/dist/types/streamer.d.ts +31 -0
  129. package/dist/types/streamer.js +3 -0
  130. package/dist/types/suffixed.d.ts +3 -0
  131. package/dist/types/suffixed.js +3 -0
  132. package/package.json +70 -0
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuaWZlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWFuaWZlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -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,3 @@
1
+ export { EntraTokenValidator } from './entra-token-validator';
2
+ export * from './strip-mentions-text';
3
+ export * from './with-client-auth';
@@ -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
@@ -0,0 +1,9 @@
1
+ export type OAuthSettings = {
2
+ /**
3
+ * the OAuth connection name to use for
4
+ * authentication
5
+ * @default `graph`
6
+ */
7
+ readonly defaultConnectionName?: string;
8
+ };
9
+ export declare const DEFAULT_OAUTH_SETTINGS: Required<OAuthSettings>;
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,2 @@
1
+ export * from './plugin';
2
+ export * from './stream';
@@ -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=