@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,106 @@
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.onTokenExchange = onTokenExchange;
37
+ exports.onVerifyState = onVerifyState;
38
+ const graph = __importStar(require("@microsoft/teams.graph"));
39
+ const axios_1 = require("axios");
40
+ async function onTokenExchange(ctx) {
41
+ const { api, activity, log } = ctx;
42
+ if (this.oauth.defaultConnectionName !== activity.value.connectionName) {
43
+ log.warn(`default connection name "${this.oauth.defaultConnectionName}" does not match activity connection name "${activity.value.connectionName}"`);
44
+ }
45
+ try {
46
+ const token = await api.users.token.exchange({
47
+ channelId: activity.channelId,
48
+ userId: activity.from.id,
49
+ connectionName: activity.value.connectionName,
50
+ exchangeRequest: {
51
+ token: activity.value.token,
52
+ },
53
+ });
54
+ ctx.api.user = new graph.Client(this.client.clone({
55
+ token: token.token,
56
+ }));
57
+ this.events.emit('signin', { ...ctx, token });
58
+ return { status: 200 };
59
+ }
60
+ catch (error) {
61
+ if (error instanceof axios_1.AxiosError) {
62
+ if (error.status !== 404 && error.status !== 400 && error.status !== 412) {
63
+ this.events.emit('error', { error, activity });
64
+ return { status: error.status || 500 };
65
+ }
66
+ }
67
+ return {
68
+ status: 412,
69
+ body: {
70
+ id: activity.value.id,
71
+ connectionName: activity.value.connectionName,
72
+ failureDetail: 'unable to exchange token...',
73
+ },
74
+ };
75
+ }
76
+ }
77
+ async function onVerifyState(ctx) {
78
+ const { log, api, activity } = ctx;
79
+ try {
80
+ if (!activity.value.state) {
81
+ log.warn(`auth state not found for conversation "${activity.conversation.id}" and user "${activity.from.id}"`);
82
+ return { status: 404 };
83
+ }
84
+ const token = await api.users.token.get({
85
+ channelId: activity.channelId,
86
+ userId: activity.from.id,
87
+ connectionName: this.oauth.defaultConnectionName,
88
+ code: activity.value.state,
89
+ });
90
+ ctx.api.user = new graph.Client(this.client.clone({
91
+ token: token.token,
92
+ }));
93
+ this.events.emit('signin', { ...ctx, token });
94
+ return { status: 200 };
95
+ }
96
+ catch (error) {
97
+ if (error instanceof axios_1.AxiosError) {
98
+ if (error.status !== 404 && error.status !== 400 && error.status !== 412) {
99
+ this.events.emit('error', { error, activity });
100
+ return { status: error.status || 500 };
101
+ }
102
+ }
103
+ return { status: 412 };
104
+ }
105
+ }
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLm9hdXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC5vYXV0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVVBLDBDQStDQztBQUVELHNDQXVDQztBQTdGRCw4REFBZ0Q7QUFDaEQsaUNBQW1DO0FBSTVCLEtBQUssVUFBVSxlQUFlLENBRW5DLEdBQWtFO0lBRWxFLE1BQU0sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUVuQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLEtBQUssUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2RSxHQUFHLENBQUMsSUFBSSxDQUNOLDRCQUE0QixJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQiw4Q0FBOEMsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsQ0FDM0ksQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUMzQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7WUFDN0IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QixjQUFjLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxjQUFjO1lBQzdDLGVBQWUsRUFBRTtnQkFDZixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLO2FBQzVCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNoQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7U0FDbkIsQ0FBQyxDQUNILENBQUM7UUFF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
@@ -0,0 +1,24 @@
1
+ import { App } from './app';
2
+ import { IPlugin, PluginName } from './types';
3
+ import { DependencyMetadata } from './types/plugin/decorators/dependency';
4
+ import { EventMetadata } from './types/plugin/decorators/event';
5
+ /**
6
+ * add a plugin
7
+ * @param plugin plugin to add
8
+ */
9
+ export declare function plugin(this: App, plugin: IPlugin): App;
10
+ /**
11
+ * get a plugin
12
+ */
13
+ export declare function getPlugin(this: App, name: PluginName): IPlugin | undefined;
14
+ /**
15
+ * inject fields/events into a plugin
16
+ */
17
+ export declare function inject(this: App, plugin: IPlugin): void;
18
+ export declare function getMetadata(plugin: IPlugin): {
19
+ dependencies: DependencyMetadata[];
20
+ events: EventMetadata[];
21
+ name: string;
22
+ version: string;
23
+ description?: string;
24
+ };
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.plugin = plugin;
4
+ exports.getPlugin = getPlugin;
5
+ exports.inject = inject;
6
+ exports.getMetadata = getMetadata;
7
+ const dependency_1 = require("./types/plugin/decorators/dependency");
8
+ const plugin_1 = require("./types/plugin/decorators/plugin");
9
+ const event_1 = require("./types/plugin/decorators/event");
10
+ /**
11
+ * add a plugin
12
+ * @param plugin plugin to add
13
+ */
14
+ function plugin(plugin) {
15
+ const { name } = getMetadata(plugin);
16
+ if (this.getPlugin(name)) {
17
+ throw new Error(`duplicate plugin "${name}" found`);
18
+ }
19
+ this.plugins.push(plugin);
20
+ this.container.register(name, { useValue: plugin });
21
+ this.container.register(plugin.constructor.name, { useValue: plugin });
22
+ return this;
23
+ }
24
+ /**
25
+ * get a plugin
26
+ */
27
+ function getPlugin(name) {
28
+ return this.plugins.find((plugin) => {
29
+ const metadata = getMetadata(plugin);
30
+ return metadata.name === name;
31
+ });
32
+ }
33
+ /**
34
+ * inject fields/events into a plugin
35
+ */
36
+ function inject(plugin) {
37
+ const { name, dependencies, events } = getMetadata(plugin);
38
+ // inject dependencies
39
+ for (const { key, type, optional } of dependencies) {
40
+ let dependency = this.container.resolve(type);
41
+ if (!dependency) {
42
+ dependency = this.container.resolve(key);
43
+ }
44
+ if (!dependency) {
45
+ if (optional)
46
+ continue;
47
+ throw new Error(`dependency "${type}" of property "${key}" not found, but plugin "${name}" depends on it`);
48
+ }
49
+ if (type === 'ILogger') {
50
+ dependency = dependency.child(name);
51
+ }
52
+ Object.defineProperty(plugin, key, {
53
+ value: dependency,
54
+ writable: true,
55
+ enumerable: false,
56
+ configurable: false,
57
+ });
58
+ }
59
+ // inject event handlers
60
+ for (const { key, name } of events) {
61
+ let handler = (..._) => { };
62
+ if (name === 'error') {
63
+ handler = (event) => {
64
+ this.onError({ ...event, sender: plugin });
65
+ };
66
+ }
67
+ else if (name === 'activity') {
68
+ handler = (event) => {
69
+ this.onActivity(plugin, event);
70
+ };
71
+ }
72
+ Object.defineProperty(plugin, key, {
73
+ value: handler,
74
+ writable: false,
75
+ enumerable: false,
76
+ configurable: false,
77
+ });
78
+ }
79
+ }
80
+ //
81
+ // PLUGIN HELPERS
82
+ //
83
+ function getMetadata(plugin) {
84
+ if (!Reflect.hasMetadata(plugin_1.PLUGIN_METADATA_KEY, plugin.constructor)) {
85
+ throw new Error(`type "${plugin.constructor.name}" is not a valid plugin`);
86
+ }
87
+ const metadata = Reflect.getMetadata(plugin_1.PLUGIN_METADATA_KEY, plugin.constructor);
88
+ const dependencies = Reflect.getMetadata(dependency_1.PLUGIN_DEPENDENCIES_METADATA_KEY, plugin.constructor) || [];
89
+ const events = Reflect.getMetadata(event_1.PLUGIN_EVENTS_METADATA_KEY, plugin.constructor) || [];
90
+ return {
91
+ ...metadata,
92
+ dependencies,
93
+ events,
94
+ };
95
+ }
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXBwLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSx3QkFXQztBQUtELDhCQUtDO0FBS0Qsd0JBbURDO0FBTUQsa0NBZ0JDO0FBOUdELHFFQUc4QztBQUM5Qyw2REFBc0Y7QUFDdEYsMkRBQTRGO0FBRTVGOzs7R0FHRztBQUNILFNBQWdCLE1BQU0sQ0FBWSxNQUFlO0lBQy9DLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFckMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN2RSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFNBQVMsQ0FBWSxJQUFnQjtJQUNuRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDbEMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUM7SUFDaEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7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
@@ -0,0 +1,11 @@
1
+ import { App } from './app';
2
+ import { IActivityEvent } from './events';
3
+ import { ISender } from './types';
4
+ /**
5
+ * activity handler called when an inbound activity is received
6
+ * @param sender the plugin to use for sending activities
7
+ * @param event the received activity event
8
+ */
9
+ export declare function $process(this: App, sender: ISender, event: IActivityEvent): Promise<{
10
+ status: number;
11
+ } | undefined>;
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.$process = $process;
4
+ const teams_api_1 = require("@microsoft/teams.api");
5
+ const api_1 = require("./api");
6
+ const contexts_1 = require("./contexts");
7
+ /**
8
+ * activity handler called when an inbound activity is received
9
+ * @param sender the plugin to use for sending activities
10
+ * @param event the received activity event
11
+ */
12
+ async function $process(sender, event) {
13
+ const { token, activity } = event;
14
+ this.log.debug(`activity/${activity.type}${activity.type === 'invoke' ? `/${activity.name}` : ''}`);
15
+ let serviceUrl = activity.serviceUrl || token.serviceUrl;
16
+ if (serviceUrl.endsWith('/')) {
17
+ serviceUrl = serviceUrl.slice(0, serviceUrl.length - 1);
18
+ }
19
+ await this.refreshTokens();
20
+ let userToken;
21
+ let appToken = this.tenantTokens.get(token.tenantId || 'common') || this._tokens.graph?.toString();
22
+ try {
23
+ const res = await this.api.users.token.get({
24
+ channelId: activity.channelId,
25
+ userId: activity.from.id,
26
+ connectionName: this.oauth.defaultConnectionName,
27
+ });
28
+ userToken = res.token;
29
+ if (this.credentials && !appToken) {
30
+ const { access_token } = await this.api.bots.token.getGraph({
31
+ ...this.credentials,
32
+ tenantId: event.token.tenantId,
33
+ });
34
+ appToken = access_token;
35
+ this.tenantTokens.set(token.tenantId || 'common', access_token);
36
+ }
37
+ }
38
+ catch (err) {
39
+ // noop
40
+ }
41
+ const client = this.client.clone();
42
+ const api = new api_1.ApiClient(serviceUrl, client.clone({ token: () => this.tokens.bot }), client.clone({ token: () => appToken }), client.clone({ token: () => userToken }));
43
+ const ref = {
44
+ serviceUrl,
45
+ activityId: activity.id,
46
+ bot: activity.recipient,
47
+ channelId: activity.channelId,
48
+ conversation: activity.conversation,
49
+ locale: activity.locale,
50
+ user: activity.from,
51
+ };
52
+ const routes = this.router.select(activity);
53
+ for (let i = this.plugins.length - 1; i > -1; i--) {
54
+ const plugin = this.plugins[i];
55
+ if (plugin.onActivity) {
56
+ routes.unshift(({ next }) => {
57
+ plugin.onActivity({
58
+ ...ref,
59
+ sender: sender,
60
+ activity,
61
+ token,
62
+ });
63
+ return next();
64
+ });
65
+ }
66
+ }
67
+ let i = -1;
68
+ let data = undefined;
69
+ const next = async (ctx) => {
70
+ if (i === routes.length - 1)
71
+ return data;
72
+ i++;
73
+ const res = await routes[i](ctx || context.toInterface());
74
+ if (res) {
75
+ data = res;
76
+ }
77
+ return data;
78
+ };
79
+ const context = new contexts_1.ActivityContext(sender, {
80
+ ...event,
81
+ next,
82
+ api,
83
+ appId: this.id || '',
84
+ log: this.log,
85
+ tokens: this.tokens,
86
+ ref,
87
+ storage: this.storage,
88
+ isSignedIn: !!userToken,
89
+ connectionName: this.oauth.defaultConnectionName,
90
+ });
91
+ if (routes.length === 0) {
92
+ return { status: 200 };
93
+ }
94
+ const send = context.send.bind(context);
95
+ context.send = async (activity) => {
96
+ const res = await send(activity);
97
+ this.onActivitySent(sender, {
98
+ ...ref,
99
+ sender,
100
+ activity: res,
101
+ });
102
+ return res;
103
+ };
104
+ context.stream.events.on('chunk', (activity) => {
105
+ this.onActivitySent(sender, {
106
+ ...ref,
107
+ sender,
108
+ activity,
109
+ });
110
+ });
111
+ context.stream.events.once('close', (activity) => {
112
+ this.onActivitySent(sender, {
113
+ ...ref,
114
+ sender,
115
+ activity,
116
+ });
117
+ });
118
+ try {
119
+ let res = await next();
120
+ if (!res || !(0, teams_api_1.isInvokeResponse)(res)) {
121
+ res = { status: 200, body: res };
122
+ }
123
+ await context.stream.close();
124
+ this.onActivityResponse(sender, {
125
+ ...ref,
126
+ sender,
127
+ activity,
128
+ response: res,
129
+ });
130
+ }
131
+ catch (error) {
132
+ this.onError({ error, activity, sender });
133
+ this.onActivityResponse(sender, {
134
+ ...ref,
135
+ sender,
136
+ activity,
137
+ response: { status: 500 },
138
+ });
139
+ }
140
+ }
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnByb2Nlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXBwLnByb2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFhQSw0QkFtS0M7QUFoTEQsb0RBQTZGO0FBRTdGLCtCQUFrQztBQUVsQyx5Q0FBK0Q7QUFJL0Q7Ozs7R0FJRztBQUNJLEtBQUssVUFBVSxRQUFRLENBQVksTUFBZSxFQUFFLEtBQXFCO0lBQzlFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRWxDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUNaLFlBQVksUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNwRixDQUFDO0lBRUYsSUFBSSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBRXpELElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzdCLFVBQVUsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUUzQixJQUFJLFNBQTZCLENBQUM7SUFDbEMsSUFBSSxRQUFRLEdBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUV0RixJQUFJLENBQUM7UUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUss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
@@ -0,0 +1,22 @@
1
+ import { InvokeResponse } from '@microsoft/teams.api';
2
+ import { App } from './app';
3
+ import { IActivityContext } from './contexts';
4
+ import { IRoutes } from './routes';
5
+ import { RouteHandler } from './types';
6
+ /**
7
+ * subscribe to an event
8
+ * @param name event to subscribe to
9
+ * @param cb callback to invoke
10
+ */
11
+ export declare function on<Name extends keyof IRoutes>(this: App, name: Name, cb: Exclude<IRoutes[Name], undefined>): App;
12
+ /**
13
+ * subscribe to a message event for a specific pattern
14
+ * @param pattern pattern to match against message text
15
+ * @param cb callback to invoke
16
+ */
17
+ export declare function message(this: App, pattern: string | RegExp, cb: Exclude<IRoutes['message'], undefined>): App;
18
+ /**
19
+ * register a middleware
20
+ * @param cb callback to invoke
21
+ */
22
+ export declare function use(this: App, cb: RouteHandler<IActivityContext, void | InvokeResponse>): App;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.on = on;
4
+ exports.message = message;
5
+ exports.use = use;
6
+ /**
7
+ * subscribe to an event
8
+ * @param name event to subscribe to
9
+ * @param cb callback to invoke
10
+ */
11
+ function on(name, cb) {
12
+ this.router.on(name, cb);
13
+ return this;
14
+ }
15
+ /**
16
+ * subscribe to a message event for a specific pattern
17
+ * @param pattern pattern to match against message text
18
+ * @param cb callback to invoke
19
+ */
20
+ function message(pattern, cb) {
21
+ this.router.register({
22
+ select: (activity) => {
23
+ if (activity.type !== 'message') {
24
+ return false;
25
+ }
26
+ return new RegExp(pattern).test(activity.text);
27
+ },
28
+ callback: cb,
29
+ });
30
+ return this;
31
+ }
32
+ /**
33
+ * register a middleware
34
+ * @param cb callback to invoke
35
+ */
36
+ function use(cb) {
37
+ this.router.use(cb);
38
+ return this;
39
+ }
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnJvdXRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXBwLnJvdXRpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFZQSxnQkFPQztBQU9ELDBCQWlCQztBQU1ELGtCQUdDO0FBN0NEOzs7O0dBSUc7QUFDSCxTQUFnQixFQUFFLENBRWhCLElBQVUsRUFDVixFQUFxQztJQUVyQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLE9BQU8sQ0FFckIsT0FBd0IsRUFDeEIsRUFBMEM7SUFFMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQVk7UUFDOUIsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDbkIsSUFBSSxRQUFRLENBQUMsSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUNoQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFFRCxPQUFPLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELFFBQVEsRUFBRSxFQUFFO0tBQ2IsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsR0FBRyxDQUFZLEVBQXlEO0lBQ3RGLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3BCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyJ9
@@ -0,0 +1,37 @@
1
+ import 'reflect-metadata';
2
+ import { Provider } from './provider';
3
+ /**
4
+ * @private
5
+ * any singleton registry
6
+ */
7
+ export interface IContainer {
8
+ /**
9
+ * does the container have the
10
+ * provided key
11
+ * @param key the singleton key
12
+ */
13
+ has(key: string): boolean;
14
+ /**
15
+ * register a singleton
16
+ * @param key the singleton key
17
+ * @param value the singleton value
18
+ */
19
+ register<T = any>(key: string, provider: Provider<T>): void;
20
+ /**
21
+ * resolve a singleton
22
+ * @param key the singleton key
23
+ */
24
+ resolve<T = any>(key: string): T | undefined;
25
+ }
26
+ /**
27
+ * @private
28
+ * a singleton container
29
+ */
30
+ export declare class Container implements IContainer {
31
+ protected readonly values: Map<string, any>;
32
+ protected readonly providers: Map<string, Provider<any>>;
33
+ has(key: string): boolean;
34
+ register<T = any>(key: string, provider: Provider<T>): void;
35
+ resolve<T = any>(key: string): T | undefined;
36
+ toString(): string;
37
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Container = void 0;
4
+ require("reflect-metadata");
5
+ const provider_1 = require("./provider");
6
+ /**
7
+ * @private
8
+ * a singleton container
9
+ */
10
+ class Container {
11
+ values = new Map();
12
+ providers = new Map();
13
+ has(key) {
14
+ return this.providers.has(key);
15
+ }
16
+ register(key, provider) {
17
+ if (this.providers.has(key)) {
18
+ throw new Error(`key "${key}" already exists`);
19
+ }
20
+ this.providers.set(key, provider);
21
+ }
22
+ resolve(key) {
23
+ let value = this.values.get(key);
24
+ if (value) {
25
+ return value;
26
+ }
27
+ const provider = this.providers.get(key);
28
+ if (!provider)
29
+ return;
30
+ if ((0, provider_1.isFactoryProvider)(provider)) {
31
+ value = provider.useFactory();
32
+ }
33
+ else {
34
+ value = provider.useValue;
35
+ }
36
+ this.values.set(key, value);
37
+ return value;
38
+ }
39
+ toString() {
40
+ return Object.entries(this.values)
41
+ .map(([key, value]) => `${key} => ${value}`)
42
+ .join('\n');
43
+ }
44
+ }
45
+ exports.Container = Container;
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRhaW5lci9jb250YWluZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNEJBQTBCO0FBRTFCLHlDQUF5RDtBQTRCekQ7OztHQUdHO0FBQ0gsTUFBYSxTQUFTO0lBQ0QsTUFBTSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFDaEMsU0FBUyxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO0lBRWhFLEdBQUcsQ0FBQyxHQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsUUFBUSxDQUFVLEdBQVcsRUFBRSxRQUFxQjtRQUNsRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxPQUFPLENBQVUsR0FBVztRQUMxQixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqQyxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1YsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRXRCLElBQUksSUFBQSw0QkFBaUIsRUFBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQ2hDLEtBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEMsQ0FBQzthQUFNLENBQUM7WUFDTixLQUFLLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzVCLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUMvQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE9BQU8sS0FBSyxFQUFFLENBQUM7YUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQTFDRCw4QkEwQ0MifQ==
@@ -0,0 +1,2 @@
1
+ export * from './container';
2
+ export * from './provider';
@@ -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("./container"), exports);
18
+ __exportStar(require("./provider"), exports);
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udGFpbmVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw4Q0FBNEI7QUFDNUIsNkNBQTJCIn0=
@@ -0,0 +1,9 @@
1
+ export type Provider<T = any> = ValueProvider<T> | FactoryProvider<T>;
2
+ export type ValueProvider<T = any> = {
3
+ useValue: T;
4
+ };
5
+ export declare function isValueProvider<T = any>(provider: Provider<T>): provider is ValueProvider<T>;
6
+ export type FactoryProvider<T = any> = {
7
+ useFactory: () => T;
8
+ };
9
+ export declare function isFactoryProvider<T = any>(provider: Provider<T>): provider is FactoryProvider<T>;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isValueProvider = isValueProvider;
4
+ exports.isFactoryProvider = isFactoryProvider;
5
+ function isValueProvider(provider) {
6
+ return !!provider.useValue;
7
+ }
8
+ function isFactoryProvider(provider) {
9
+ return !!provider.useFactory;
10
+ }
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udGFpbmVyL3Byb3ZpZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsMENBRUM7QUFNRCw4Q0FFQztBQVZELFNBQWdCLGVBQWUsQ0FBVSxRQUFxQjtJQUM1RCxPQUFPLENBQUMsQ0FBRSxRQUEwQixDQUFDLFFBQVEsQ0FBQztBQUNoRCxDQUFDO0FBTUQsU0FBZ0IsaUJBQWlCLENBQVUsUUFBcUI7SUFDOUQsT0FBTyxDQUFDLENBQUUsUUFBNEIsQ0FBQyxVQUFVLENBQUM7QUFDcEQsQ0FBQyJ9
@@ -0,0 +1,8 @@
1
+ import { Activity } from '@microsoft/teams.api';
2
+ import { IActivityContext } from './activity';
3
+ export interface IActivityErrorContext<T extends Activity = Activity> extends IActivityContext<T> {
4
+ /**
5
+ * the error
6
+ */
7
+ err: Error;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udGV4dHMvYWN0aXZpdHktZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,8 @@
1
+ import { ISignInTokenExchangeInvokeActivity, ISignInVerifyStateInvokeActivity, TokenResponse } from '@microsoft/teams.api';
2
+ import { IActivityContext } from './activity';
3
+ export interface IActivitySignInContext extends IActivityContext<ISignInTokenExchangeInvokeActivity | ISignInVerifyStateInvokeActivity> {
4
+ /**
5
+ * the token response of the signin request
6
+ */
7
+ token: TokenResponse;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZpdHktc2lnbmluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRleHRzL2FjdGl2aXR5LXNpZ25pbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=