@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,24 @@
1
+ import { App } from './app';
2
+ import { IFunctionContext } from './contexts';
3
+ import * as manifest from './manifest';
4
+ /**
5
+ * add/update a function that can be called remotely
6
+ * @param name The unique function name
7
+ * @param cb The callback to handle the function
8
+ */
9
+ export declare function func<TData>(this: App, name: string, cb: (context: IFunctionContext<TData>) => any | Promise<any>): App;
10
+ /**
11
+ * add/update a static tab.
12
+ * the tab will be hosted at
13
+ * `http://localhost:{{PORT}}/tabs/{{name}}` or `https://{{BOT_DOMAIN}}/tabs/{{name}}`
14
+ * @remark scopes default to `personal`
15
+ * @param name A unique identifier for the entity which the tab displays.
16
+ * @param path The path to the web `dist` folder.
17
+ */
18
+ export declare function tab(this: App, name: string, path: string, options?: Partial<Omit<manifest.StaticTab, 'contentUrl' | 'entityId'>>): App;
19
+ /**
20
+ * add a configurable tab
21
+ * @remark scopes defaults to `team`
22
+ * @param url The url to use when configuring the tab.
23
+ */
24
+ export declare function configTab(this: App, url: string, options?: Partial<Omit<manifest.ConfigurableTab, 'configurationUrl'>>): App;
@@ -0,0 +1,83 @@
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.func = func;
7
+ exports.tab = tab;
8
+ exports.configTab = configTab;
9
+ const path_1 = __importDefault(require("path"));
10
+ const middleware_1 = require("./middleware");
11
+ /**
12
+ * add/update a function that can be called remotely
13
+ * @param name The unique function name
14
+ * @param cb The callback to handle the function
15
+ */
16
+ function func(name, cb) {
17
+ const log = this.log.child('functions').child(name);
18
+ this.http.post(`/api/functions/${name}`, (0, middleware_1.withClientAuth)({
19
+ logger: log,
20
+ entraTokenValidator: this.entraTokenValidator,
21
+ ...this.credentials,
22
+ }), async (req, res) => {
23
+ if (!req.context) {
24
+ throw new Error('expected client context');
25
+ }
26
+ const data = await cb({
27
+ ...req.context,
28
+ log,
29
+ api: this.api,
30
+ data: req.body,
31
+ });
32
+ res.send(data);
33
+ });
34
+ return this;
35
+ }
36
+ /**
37
+ * add/update a static tab.
38
+ * the tab will be hosted at
39
+ * `http://localhost:{{PORT}}/tabs/{{name}}` or `https://{{BOT_DOMAIN}}/tabs/{{name}}`
40
+ * @remark scopes default to `personal`
41
+ * @param name A unique identifier for the entity which the tab displays.
42
+ * @param path The path to the web `dist` folder.
43
+ */
44
+ function tab(name, path, options) {
45
+ if (!this._manifest.staticTabs) {
46
+ this._manifest.staticTabs = [];
47
+ }
48
+ const i = this._manifest.staticTabs.findIndex((t) => t.entityId === name);
49
+ const tab = {
50
+ entityId: name,
51
+ contentUrl: `https://\${{BOT_DOMAIN}}/tabs/${name}`,
52
+ scopes: ['personal'],
53
+ ...options,
54
+ };
55
+ if (i > -1) {
56
+ this._manifest.staticTabs[i] = tab;
57
+ }
58
+ else {
59
+ this._manifest.staticTabs.push(tab);
60
+ }
61
+ this.http.static(`/tabs/${name}`, path);
62
+ this.http.use(`/tabs/${name}*`, async (_, res) => {
63
+ res.sendFile(path_1.default.join(path, 'index.html'));
64
+ });
65
+ return this;
66
+ }
67
+ /**
68
+ * add a configurable tab
69
+ * @remark scopes defaults to `team`
70
+ * @param url The url to use when configuring the tab.
71
+ */
72
+ function configTab(url, options) {
73
+ if (!this._manifest.configurableTabs) {
74
+ this._manifest.configurableTabs = [];
75
+ }
76
+ this._manifest.configurableTabs.push({
77
+ configurationUrl: url,
78
+ scopes: ['team'],
79
+ ...options,
80
+ });
81
+ return this;
82
+ }
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmVtYmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC5lbWJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVlBLG9CQThCQztBQVVELGtCQThCQztBQU9ELDhCQWdCQztBQXpHRCxnREFBeUI7QUFJekIsNkNBQWlFO0FBR2pFOzs7O0dBSUc7QUFDSCxTQUFnQixJQUFJLENBRWxCLElBQVksRUFDWixFQUE0RDtJQUU1RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ1osa0JBQWtCLElBQUksRUFBRSxFQUN4QixJQUFBLDJCQUFjLEVBQUM7UUFDYixNQUFNLEVBQUUsR0FBRztRQUNYLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7UUFDN0MsR0FBRyxJQUFJLENBQUMsV0FBVztLQUNwQixDQUFDLEVBQ0YsS0FBSyxFQUFFLEdBQXNCLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELE1BQU0sSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLEdBQUcsR0FBRyxDQUFDLE9BQU87WUFDZCxHQUFHO1lBQ0gsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHO1lBQ2IsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQixDQUFDLENBQ0YsQ0FBQztJQUVGLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixHQUFHLENBRWpCLElBQVksRUFDWixJQUFZLEVBQ1osT0FBc0U7SUFFdEUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLENBQUM7SUFDMUUsTUFBTSxHQUFHLEdBQXVCO1FBQzlCLFFBQVEsRUFBRSxJQUFJO1FBQ2QsVUFBVSxFQUFFLGlDQUFpQyxJQUFJLEVBQUU7UUFDbkQsTUFBTSxFQUFFLENBQUMsVUFBVSxDQUFDO1FBQ3BCLEdBQUcsT0FBTztLQUNYLENBQUM7SUFFRixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ3JDLENBQUM7U0FBTSxDQUFDO1FBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUMvQyxHQUFHLENBQUMsUUFBUSxDQUFDLGNBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsU0FBUyxDQUV2QixHQUFXLEVBQ1gsT0FBcUU7SUFFckUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7UUFDbkMsZ0JBQWdCLEVBQUUsR0FBRztRQUNyQixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDaEIsR0FBRyxPQUFPO0tBQ1gsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIn0=
@@ -0,0 +1,14 @@
1
+ import { EventHandler } from '@microsoft/teams.common';
2
+ import { App } from './app';
3
+ import { ISender } from './types';
4
+ import { IActivityEvent, IActivityResponseEvent, IActivitySentEvent, IErrorEvent, IEvents } from './events';
5
+ /**
6
+ * subscribe to an event
7
+ * @param name the event to subscribe to
8
+ * @param cb the callback to invoke
9
+ */
10
+ export declare function event<Name extends keyof IEvents>(this: App, name: Name, cb: EventHandler<IEvents[Name]>): App;
11
+ export declare function onError(this: App, event: IErrorEvent): Promise<void>;
12
+ export declare function onActivity(this: App, sender: ISender, event: IActivityEvent): Promise<void>;
13
+ export declare function onActivitySent(this: App, sender: ISender, event: IActivitySentEvent): Promise<void>;
14
+ export declare function onActivityResponse(this: App, sender: ISender, event: IActivityResponseEvent): Promise<void>;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.event = event;
4
+ exports.onError = onError;
5
+ exports.onActivity = onActivity;
6
+ exports.onActivitySent = onActivitySent;
7
+ exports.onActivityResponse = onActivityResponse;
8
+ /**
9
+ * subscribe to an event
10
+ * @param name the event to subscribe to
11
+ * @param cb the callback to invoke
12
+ */
13
+ function event(name, cb) {
14
+ this.events.on(name, cb);
15
+ return this;
16
+ }
17
+ async function onError(event) {
18
+ for (const plugin of this.plugins) {
19
+ if (plugin.onError) {
20
+ await plugin.onError(event);
21
+ }
22
+ }
23
+ this.events.emit('error', event);
24
+ }
25
+ async function onActivity(sender, event) {
26
+ this.events.emit('activity', event);
27
+ await this.process(sender, { ...event, sender });
28
+ }
29
+ async function onActivitySent(sender, event) {
30
+ for (const plugin of this.plugins) {
31
+ if (plugin.onActivitySent) {
32
+ await plugin.onActivitySent({
33
+ ...event,
34
+ sender,
35
+ });
36
+ }
37
+ }
38
+ this.events.emit('activity.sent', { ...event, sender });
39
+ }
40
+ async function onActivityResponse(sender, event) {
41
+ for (const plugin of this.plugins) {
42
+ if (plugin.onActivityResponse) {
43
+ await plugin.onActivityResponse({
44
+ ...event,
45
+ sender,
46
+ });
47
+ }
48
+ }
49
+ this.events.emit('activity.response', { ...event, sender });
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmV2ZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHAuZXZlbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaUJBLHNCQU9DO0FBRUQsMEJBUUM7QUFFRCxnQ0FHQztBQUVELHdDQVdDO0FBRUQsZ0RBZUM7QUF6REQ7Ozs7R0FJRztBQUNILFNBQWdCLEtBQUssQ0FFbkIsSUFBVSxFQUNWLEVBQStCO0lBRS9CLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6QixPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFTSxLQUFLLFVBQVUsT0FBTyxDQUFZLEtBQWtCO0lBQ3pELEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRU0sS0FBSyxVQUFVLFVBQVUsQ0FBWSxNQUFlLEVBQUUsS0FBcUI7SUFDaEYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFTSxLQUFLLFVBQVUsY0FBYyxDQUFZLE1BQWUsRUFBRSxLQUF5QjtJQUN4RixLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMxQixNQUFNLE1BQU0sQ0FBQyxjQUFjLENBQUM7Z0JBQzFCLEdBQUcsS0FBSztnQkFDUixNQUFNO2FBQ1AsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFTSxLQUFLLFVBQVUsa0JBQWtCLENBRXRDLE1BQWUsRUFDZixLQUE2QjtJQUU3QixLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzlCLE1BQU0sTUFBTSxDQUFDLGtCQUFrQixDQUFDO2dCQUM5QixHQUFHLEtBQUs7Z0JBQ1IsTUFBTTthQUNQLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzlELENBQUMifQ==
package/dist/app.js ADDED
@@ -0,0 +1,411 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.App = exports.REFRESH_TOKEN_BUFFER_MS = void 0;
40
+ const events_1 = require("@microsoft/teams.common/events");
41
+ const http = __importStar(require("@microsoft/teams.common/http"));
42
+ const logging_1 = require("@microsoft/teams.common/logging");
43
+ const storage_1 = require("@microsoft/teams.common/storage");
44
+ const axios_1 = require("axios");
45
+ const teams_api_1 = require("@microsoft/teams.api");
46
+ const package_json_1 = __importDefault(require("../package.json"));
47
+ const api_1 = require("./api");
48
+ const middleware = __importStar(require("./middleware"));
49
+ const oauth_1 = require("./oauth");
50
+ const plugins_1 = require("./plugins");
51
+ const router_1 = require("./router");
52
+ const app_embed_1 = require("./app.embed");
53
+ const app_events_1 = require("./app.events");
54
+ const app_oauth_1 = require("./app.oauth");
55
+ const app_plugins_1 = require("./app.plugins");
56
+ const app_process_1 = require("./app.process");
57
+ const app_routing_1 = require("./app.routing");
58
+ const container_1 = require("./container");
59
+ exports.REFRESH_TOKEN_BUFFER_MS = 1000 * 60 * 5; // 5 minutes
60
+ /**
61
+ * The orchestrator for receiving/sending activities
62
+ */
63
+ class App {
64
+ options;
65
+ api;
66
+ log;
67
+ http;
68
+ client;
69
+ storage;
70
+ credentials;
71
+ entraTokenValidator;
72
+ /**
73
+ * the apps id
74
+ */
75
+ get id() {
76
+ return this.tokens.bot?.appId || this.tokens.graph?.appId;
77
+ }
78
+ /**
79
+ * the apps name
80
+ */
81
+ get name() {
82
+ return this.tokens.bot?.appDisplayName || this.tokens.graph?.appDisplayName;
83
+ }
84
+ get oauth() {
85
+ return {
86
+ ...this.options.oauth,
87
+ ...oauth_1.DEFAULT_OAUTH_SETTINGS,
88
+ };
89
+ }
90
+ /**
91
+ * the apps manifest
92
+ */
93
+ get manifest() {
94
+ return {
95
+ id: this.id,
96
+ name: {
97
+ short: this.name || '??',
98
+ full: this.name || '??',
99
+ ...this._manifest.name,
100
+ },
101
+ bots: [
102
+ {
103
+ botId: this.id || '??',
104
+ scopes: ['personal'],
105
+ },
106
+ ],
107
+ webApplicationInfo: {
108
+ id: this.credentials?.clientId || '??',
109
+ resource: `api://\${{BOT_DOMAIN}}/${this.credentials?.clientId || '??'}`,
110
+ ...this._manifest.webApplicationInfo,
111
+ },
112
+ ...this._manifest,
113
+ };
114
+ }
115
+ _manifest;
116
+ /**
117
+ * the apps auth tokens
118
+ */
119
+ get tokens() {
120
+ return this._tokens;
121
+ }
122
+ _tokens = {};
123
+ container = new container_1.Container();
124
+ plugins = [];
125
+ router = new router_1.Router();
126
+ tenantTokens = new storage_1.LocalStorage({}, { max: 20000 });
127
+ events = new events_1.EventEmitter();
128
+ startedAt;
129
+ port;
130
+ _userAgent = `teams[apps]/${package_json_1.default.version}`;
131
+ constructor(options = {}) {
132
+ this.options = options;
133
+ this.log = this.options.logger || new logging_1.ConsoleLogger('@teams/app');
134
+ this.storage = this.options.storage || new storage_1.LocalStorage();
135
+ this._manifest = this.options.manifest || {};
136
+ if (!options.client) {
137
+ this.client = new http.Client({
138
+ headers: {
139
+ 'User-Agent': this._userAgent,
140
+ },
141
+ });
142
+ }
143
+ else if (typeof options.client === 'function') {
144
+ this.client = options.client().clone({
145
+ headers: {
146
+ 'User-Agent': this._userAgent,
147
+ },
148
+ });
149
+ }
150
+ else if ('request' in options.client) {
151
+ this.client = options.client.clone({
152
+ headers: {
153
+ 'User-Agent': this._userAgent,
154
+ },
155
+ });
156
+ }
157
+ else {
158
+ this.client = new http.Client({
159
+ ...options.client,
160
+ headers: {
161
+ ...options.client.headers,
162
+ 'User-Agent': this._userAgent,
163
+ },
164
+ });
165
+ }
166
+ this.api = new api_1.AppClient('https://smba.trafficmanager.net/teams', this.client.clone({ token: () => this._tokens.bot }), this.client.clone({ token: () => this._tokens.graph }));
167
+ // initialize credentials
168
+ const clientId = this.options.clientId || process.env.CLIENT_ID;
169
+ const clientSecret = ('clientSecret' in this.options ? this.options.clientSecret : undefined) ||
170
+ process.env.CLIENT_SECRET;
171
+ const tenantId = ('tenantId' in this.options ? this.options.tenantId : undefined) || process.env.TENANT_ID;
172
+ const token = 'token' in this.options ? this.options.token : undefined;
173
+ if (clientId && clientSecret) {
174
+ this.credentials = {
175
+ clientId,
176
+ clientSecret,
177
+ tenantId,
178
+ };
179
+ }
180
+ if (clientId && token) {
181
+ this.credentials = {
182
+ clientId,
183
+ tenantId,
184
+ token,
185
+ };
186
+ }
187
+ if (clientId) {
188
+ this.entraTokenValidator = new middleware.EntraTokenValidator({
189
+ clientId,
190
+ tenantId: tenantId || 'common',
191
+ });
192
+ }
193
+ // add/validate plugins
194
+ const plugins = this.options.plugins || [];
195
+ let httpPlugin = plugins.find((p) => {
196
+ const meta = (0, app_plugins_1.getMetadata)(p);
197
+ return meta.name === 'http';
198
+ });
199
+ if (!httpPlugin) {
200
+ httpPlugin = new plugins_1.HttpPlugin();
201
+ plugins.unshift(httpPlugin);
202
+ }
203
+ this.http = httpPlugin;
204
+ // add injectable items to container
205
+ this.container.register('id', { useValue: this.id });
206
+ this.container.register('name', { useValue: this.name });
207
+ this.container.register('manifest', { useValue: this.manifest });
208
+ this.container.register('credentials', { useValue: this.credentials });
209
+ this.container.register('botToken', { useFactory: () => this.tokens.bot });
210
+ this.container.register('graphToken', { useFactory: () => this.tokens.graph });
211
+ this.container.register('ILogger', { useValue: this.log });
212
+ this.container.register('IStorage', { useValue: this.storage });
213
+ this.container.register(this.client.constructor.name, { useFactory: () => this.client });
214
+ for (const plugin of plugins) {
215
+ this.plugin(plugin);
216
+ }
217
+ if (this.options.activity?.mentions?.stripText) {
218
+ const options = this.options.activity?.mentions?.stripText;
219
+ this.use(middleware.stripMentionsText(typeof options === 'boolean' ? {} : options));
220
+ }
221
+ // default event handlers
222
+ this.on('signin.token-exchange', this.onTokenExchange.bind(this));
223
+ this.on('signin.verify-state', this.onVerifyState.bind(this));
224
+ this.event('error', ({ error }) => {
225
+ this.log.error(error.message);
226
+ if (error instanceof axios_1.AxiosError) {
227
+ this.log.error(error.request.path);
228
+ this.log.error(error.response?.data);
229
+ }
230
+ });
231
+ }
232
+ /**
233
+ * start the app
234
+ * @param port port to listen on
235
+ */
236
+ async start(port) {
237
+ this.port = +(port || process.env.PORT || 3000);
238
+ try {
239
+ await this.refreshTokens();
240
+ // initialize plugins
241
+ for (const plugin of this.plugins) {
242
+ // inject dependencies
243
+ this.inject(plugin);
244
+ if (plugin.onInit) {
245
+ plugin.onInit();
246
+ }
247
+ }
248
+ // start plugins
249
+ for (const plugin of this.plugins) {
250
+ if (plugin.onStart) {
251
+ await plugin.onStart({ port: this.port });
252
+ }
253
+ }
254
+ this.events.emit('start', this.log);
255
+ this.startedAt = new Date();
256
+ }
257
+ catch (error) {
258
+ this.onError({ error });
259
+ }
260
+ }
261
+ /**
262
+ * stop the app
263
+ */
264
+ async stop() {
265
+ try {
266
+ for (const plugin of this.plugins) {
267
+ if (plugin.onStop) {
268
+ await plugin.onStop();
269
+ }
270
+ }
271
+ }
272
+ catch (error) {
273
+ this.onError({ error });
274
+ }
275
+ }
276
+ /**
277
+ * send an activity proactively
278
+ * @param conversationId the conversation to send to
279
+ * @param activity the activity to send
280
+ */
281
+ async send(conversationId, activity) {
282
+ if (!this.id || !this.name) {
283
+ throw new Error('app not started');
284
+ }
285
+ const ref = {
286
+ channelId: 'msteams',
287
+ serviceUrl: this.api.serviceUrl,
288
+ bot: {
289
+ id: this.id,
290
+ name: this.name,
291
+ role: 'bot',
292
+ },
293
+ conversation: {
294
+ id: conversationId,
295
+ conversationType: 'personal',
296
+ },
297
+ };
298
+ const res = await this.http.send((0, teams_api_1.toActivityParams)(activity), ref);
299
+ return res;
300
+ }
301
+ /**
302
+ * subscribe to an event
303
+ * @param name event to subscribe to
304
+ * @param cb callback to invoke
305
+ */
306
+ on = app_routing_1.on;
307
+ /**
308
+ * subscribe to a message event for a specific pattern
309
+ * @param pattern pattern to match against message text
310
+ * @param cb callback to invoke
311
+ */
312
+ message = app_routing_1.message;
313
+ /**
314
+ * register a middleware
315
+ * @param cb callback to invoke
316
+ */
317
+ use = app_routing_1.use;
318
+ /**
319
+ * subscribe to an event
320
+ * @param name the event to subscribe to
321
+ * @param cb the callback to invoke
322
+ */
323
+ event = app_events_1.event;
324
+ /**
325
+ * add a plugin
326
+ * @param plugin plugin to add
327
+ */
328
+ plugin = app_plugins_1.plugin;
329
+ /**
330
+ * get a plugin
331
+ */
332
+ getPlugin = app_plugins_1.getPlugin;
333
+ /**
334
+ * add/update a function that can be called remotely
335
+ * @param name The unique function name
336
+ * @param cb The callback to handle the function
337
+ */
338
+ function = app_embed_1.func;
339
+ /**
340
+ * add/update a static tab.
341
+ * the tab will be hosted at
342
+ * `http://localhost:{{PORT}}/tabs/{{name}}` or `https://{{BOT_DOMAIN}}/tabs/{{name}}`
343
+ * @remark scopes default to `personal`
344
+ * @param name A unique identifier for the entity which the tab displays.
345
+ * @param path The path to the web `dist` folder.
346
+ */
347
+ tab = app_embed_1.tab;
348
+ /**
349
+ * add a configurable tab
350
+ * @remark scopes defaults to `team`
351
+ * @param url The url to use when configuring the tab.
352
+ */
353
+ configTab = app_embed_1.configTab;
354
+ /**
355
+ * activity handler called when an inbound activity is received
356
+ * @param sender the plugin to use for sending activities
357
+ * @param event the received activity event
358
+ */
359
+ process = app_process_1.$process;
360
+ ///
361
+ /// OAuth
362
+ ///
363
+ onTokenExchange = app_oauth_1.onTokenExchange;
364
+ onVerifyState = app_oauth_1.onVerifyState;
365
+ ///
366
+ /// Events
367
+ ///
368
+ inject = app_plugins_1.inject;
369
+ onError = app_events_1.onError;
370
+ onActivity = app_events_1.onActivity;
371
+ onActivitySent = app_events_1.onActivitySent;
372
+ onActivityResponse = app_events_1.onActivityResponse;
373
+ ///
374
+ /// Token
375
+ ///
376
+ /**
377
+ * Refresh the tokens for the app
378
+ */
379
+ async refreshTokens() {
380
+ await this.refreshBotToken();
381
+ await this.refreshGraphToken();
382
+ }
383
+ async refreshBotToken(force = false) {
384
+ if (this.credentials) {
385
+ // Only do it if the token isn't there, or if it's expired, or if force is true
386
+ if (!this._tokens.bot ||
387
+ (this._tokens.bot.expiration != null &&
388
+ this._tokens.bot.expiration < Date.now() + exports.REFRESH_TOKEN_BUFFER_MS) ||
389
+ force) {
390
+ this.log.debug('Refreshing bot token');
391
+ const botResponse = await this.api.bots.token.get(this.credentials);
392
+ this._tokens.bot = new teams_api_1.JsonWebToken(botResponse.access_token);
393
+ }
394
+ }
395
+ }
396
+ async refreshGraphToken(force = false) {
397
+ if (this.credentials) {
398
+ // Only do it if the token isn't there, or if it's expired, or if force is true
399
+ if (!this._tokens.graph ||
400
+ (this._tokens.graph.expiration != null &&
401
+ this._tokens.graph.expiration < Date.now() + exports.REFRESH_TOKEN_BUFFER_MS) ||
402
+ force) {
403
+ this.log.debug('Refreshing graph token');
404
+ const graphResponse = await this.api.bots.token.getGraph(this.credentials);
405
+ this._tokens.graph = new teams_api_1.JsonWebToken(graphResponse.access_token);
406
+ }
407
+ }
408
+ }
409
+ }
410
+ exports.App = App;
411
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyREFBOEQ7QUFDOUQsbUVBQXFEO0FBQ3JELDZEQUF5RTtBQUN6RSw2REFBeUU7QUFDekUsaUNBQW1DO0FBRW5DLG9EQVE4QjtBQUU5QixtRUFBa0M7QUFFbEMsK0JBQWtDO0FBR2xDLHlEQUEyQztBQUMzQyxtQ0FBZ0U7QUFDaEUsdUNBQXVDO0FBQ3ZDLHFDQUFrQztBQUdsQywyQ0FBbUQ7QUFDbkQsNkNBQThGO0FBQzlGLDJDQUE2RDtBQUM3RCwrQ0FBdUU7QUFDdkUsK0NBQXlDO0FBQ3pDLCtDQUFpRDtBQUNqRCwyQ0FBd0M7QUFFM0IsUUFBQSx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFlBQVk7QUFnRWxFOztHQUVHO0FBQ0gsTUFBYSxHQUFHO0lBMkVPO0lBMUVaLEdBQUcsQ0FBWTtJQUNmLEdBQUcsQ0FBVTtJQUNiLElBQUksQ0FBYTtJQUNqQixNQUFNLENBQWM7SUFDcEIsT0FBTyxDQUFXO0lBQ2xCLFdBQVcsQ0FBZTtJQUMxQixtQkFBbUIsQ0FBa0M7SUFFOUQ7O09BRUc7SUFDSCxJQUFJLEVBQUU7UUFDSixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxjQUFjLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDO0lBQzlFLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPO1lBQ0wsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFD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QUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN2RSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFekYsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUMvQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDO1lBQzNELElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFFRCx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxFQUFFLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFOUIsSUFBSSxLQUFLLFlBQVksa0JBQVUsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQXNCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQztRQUVoRCxJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUUzQixxQkFBcUI7WUFDckIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xDLHNCQUFzQjtnQkFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFcEIsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2xCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEIsQ0FBQztZQUNILENBQUM7WUFFRCxnQkFBZ0I7WUFDaEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzVDLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDMUIsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDO1lBQ0gsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2xDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNsQixNQUFNLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQXNCLEVBQUUsUUFBc0I7UUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBMEI7WUFDakMsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVTtZQUMvQixHQUFHLEVBQUU7Z0JBQ0gsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixJQUFJLEVBQUUsS0FBSzthQUNaO1lBQ0QsWUFBWSxFQUFFO2dCQUNaLEVBQUUsRUFBRSxjQUFjO2dCQUNsQixnQkFBZ0IsRUFBRSxVQUFVO2FBQzdCO1NBQ0YsQ0FBQztRQUVGLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBQSw0QkFBZ0IsRUFBQyxRQUFRLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsRSxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsRUFBRSxHQUFHLGdCQUFFLENBQUM7SUFFUjs7OztPQUlHO0lBQ0gsT0FBTyxHQUFHLHFCQUFPLENBQUM7SUFFbEI7OztPQUdHO0lBQ0gsR0FBRyxHQUFHLGlCQUFHLENBQUM7SUFFVjs7OztPQUlHO0lBQ0gsS0FBSyxHQUFHLGtCQUFLLENBQUM7SUFFZDs7O09BR0c7SUFDSCxNQUFNLEdBQUcsb0JBQU0sQ0FBQztJQUVoQjs7T0FFRztJQUNILFNBQVMsR0FBRyx1QkFBUyxDQUFDO0lBRXRCOzs7O09BSUc7SUFDSCxRQUFRLEdBQUcsZ0JBQUksQ0FBQztJQUVoQjs7Ozs7OztPQU9HO0lBQ0gsR0FBRyxHQUFHLGVBQUcsQ0FBQztJQUVWOzs7O09BSUc7SUFDSCxTQUFTLEdBQUcscUJBQVMsQ0FBQztJQUV0Qjs7OztPQUlHO0lBQ0gsT0FBTyxHQUFHLHNCQUFRLENBQUM7SUFFbkIsR0FBRztJQUNILFNBQVM7SUFDVCxHQUFHO0lBRU8sZUFBZSxHQUFHLDJCQUFlLENBQUM7SUFDbEMsYUFBYSxHQUFHLHlCQUFhLENBQUM7SUFFeEMsR0FBRztJQUNILFVBQVU7SUFDVixHQUFHO0lBRU8sTUFBTSxHQUFHLG9CQUFNLENBQUM7SUFDaEIsT0FBTyxHQUFHLG9CQUFPLENBQUM7SUFDbEIsVUFBVSxHQUFHLHVCQUFVLENBQUM7SUFDeEIsY0FBYyxHQUFHLDJCQUFjLENBQUM7SUFDaEMsa0JBQWtCLEdBQUcsK0JBQWtCLENBQUM7SUFFbEQsR0FBRztJQUNILFNBQVM7SUFDVCxHQUFHO0lBQ0g7O09BRUc7SUFDTyxLQUFLLENBQUMsYUFBYTtRQUMzQixNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFTyxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQUssR0FBRyxLQUFLO1FBQ3pDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLCtFQUErRTtZQUMvRSxJQUNFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHO2dCQUNqQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxJQUFJO29CQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLCtCQUF1QixDQUFDO2dCQUNyRSxLQUFLLEVBQ0wsQ0FBQztnQkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNwRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLHdCQUFZLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hFLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEdBQUcsS0FBSztRQUMzQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQiwrRUFBK0U7WUFDL0UsSUFDRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztnQkFDbkIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksSUFBSTtvQkFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRywrQkFBdUIsQ0FBQztnQkFDdkUsS0FBSyxFQUNMLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztnQkFDekMsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDM0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSx3QkFBWSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNwRSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7Q0FDRjtBQTdZRCxrQkE2WUMifQ==
@@ -0,0 +1,13 @@
1
+ import { ISignInTokenExchangeInvokeActivity, ISignInVerifyStateInvokeActivity, TokenExchangeInvokeResponse } from '@microsoft/teams.api';
2
+ import { App } from './app';
3
+ import * as contexts from './contexts';
4
+ export declare function onTokenExchange(this: App, ctx: contexts.IActivityContext<ISignInTokenExchangeInvokeActivity>): Promise<{
5
+ status: number;
6
+ body?: undefined;
7
+ } | {
8
+ status: number;
9
+ body: TokenExchangeInvokeResponse;
10
+ }>;
11
+ export declare function onVerifyState(this: App, ctx: contexts.IActivityContext<ISignInVerifyStateInvokeActivity>): Promise<{
12
+ status: number;
13
+ }>;