@microsoft/teams.apps 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +35 -0
- package/dist/api.d.ts +21 -0
- package/dist/api.js +66 -0
- package/dist/app.d.ts +1137 -0
- package/dist/app.embed.d.ts +24 -0
- package/dist/app.embed.js +83 -0
- package/dist/app.events.d.ts +14 -0
- package/dist/app.events.js +51 -0
- package/dist/app.js +411 -0
- package/dist/app.oauth.d.ts +13 -0
- package/dist/app.oauth.js +106 -0
- package/dist/app.plugins.d.ts +24 -0
- package/dist/app.plugins.js +96 -0
- package/dist/app.process.d.ts +11 -0
- package/dist/app.process.js +141 -0
- package/dist/app.routing.d.ts +22 -0
- package/dist/app.routing.js +40 -0
- package/dist/container/container.d.ts +37 -0
- package/dist/container/container.js +46 -0
- package/dist/container/index.d.ts +2 -0
- package/dist/container/index.js +19 -0
- package/dist/container/provider.d.ts +9 -0
- package/dist/container/provider.js +11 -0
- package/dist/contexts/activity-error.d.ts +8 -0
- package/dist/contexts/activity-error.js +3 -0
- package/dist/contexts/activity-signin.d.ts +8 -0
- package/dist/contexts/activity-signin.js +3 -0
- package/dist/contexts/activity.d.ts +117 -0
- package/dist/contexts/activity.js +133 -0
- package/dist/contexts/client.d.ts +53 -0
- package/dist/contexts/client.js +3 -0
- package/dist/contexts/function.d.ts +17 -0
- package/dist/contexts/function.js +3 -0
- package/dist/contexts/index.d.ts +5 -0
- package/dist/contexts/index.js +22 -0
- package/dist/events/activity-response.d.ts +16 -0
- package/dist/events/activity-response.js +3 -0
- package/dist/events/activity-sent.d.ts +16 -0
- package/dist/events/activity-sent.js +3 -0
- package/dist/events/activity.d.ts +20 -0
- package/dist/events/activity.js +3 -0
- package/dist/events/error.d.ts +16 -0
- package/dist/events/error.js +3 -0
- package/dist/events/index.d.ts +18 -0
- package/dist/events/index.js +21 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +47 -0
- package/dist/manifest.d.ts +1241 -0
- package/dist/manifest.js +3 -0
- package/dist/middleware/entra-token-validator.d.ts +75 -0
- package/dist/middleware/entra-token-validator.js +169 -0
- package/dist/middleware/index.d.ts +3 -0
- package/dist/middleware/index.js +22 -0
- package/dist/middleware/strip-mentions-text.d.ts +3 -0
- package/dist/middleware/strip-mentions-text.js +48 -0
- package/dist/middleware/with-client-auth.d.ts +13 -0
- package/dist/middleware/with-client-auth.js +40 -0
- package/dist/oauth.d.ts +9 -0
- package/dist/oauth.js +7 -0
- package/dist/plugins/http/index.d.ts +2 -0
- package/dist/plugins/http/index.js +19 -0
- package/dist/plugins/http/plugin.d.ts +986 -0
- package/dist/plugins/http/plugin.js +238 -0
- package/dist/plugins/http/stream.d.ts +956 -0
- package/dist/plugins/http/stream.js +128 -0
- package/dist/plugins/index.d.ts +1 -0
- package/dist/plugins/index.js +18 -0
- package/dist/router.d.ts +34 -0
- package/dist/router.js +91 -0
- package/dist/routes/activity.d.ts +8 -0
- package/dist/routes/activity.js +3 -0
- package/dist/routes/conversation-update.d.ts +6 -0
- package/dist/routes/conversation-update.js +3 -0
- package/dist/routes/event.d.ts +17 -0
- package/dist/routes/event.js +11 -0
- package/dist/routes/index.d.ts +20 -0
- package/dist/routes/index.js +24 -0
- package/dist/routes/install.d.ts +8 -0
- package/dist/routes/install.js +3 -0
- package/dist/routes/invoke/file-consent.d.ts +6 -0
- package/dist/routes/invoke/file-consent.js +3 -0
- package/dist/routes/invoke/index.d.ts +39 -0
- package/dist/routes/invoke/index.js +45 -0
- package/dist/routes/invoke/message-extension-submit.d.ts +6 -0
- package/dist/routes/invoke/message-extension-submit.js +3 -0
- package/dist/routes/invoke/message-submit.d.ts +10 -0
- package/dist/routes/invoke/message-submit.js +3 -0
- package/dist/routes/message-delete.d.ts +6 -0
- package/dist/routes/message-delete.js +3 -0
- package/dist/routes/message-update.d.ts +6 -0
- package/dist/routes/message-update.js +3 -0
- package/dist/types/constructor.d.ts +7 -0
- package/dist/types/constructor.js +3 -0
- package/dist/types/event-handler.d.ts +1 -0
- package/dist/types/event-handler.js +3 -0
- package/dist/types/event.d.ts +11 -0
- package/dist/types/event.js +3 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.js +24 -0
- package/dist/types/plugin/decorators/dependency.d.ts +135 -0
- package/dist/types/plugin/decorators/dependency.js +49 -0
- package/dist/types/plugin/decorators/event.d.ts +18 -0
- package/dist/types/plugin/decorators/event.js +24 -0
- package/dist/types/plugin/decorators/index.d.ts +3 -0
- package/dist/types/plugin/decorators/index.js +12 -0
- package/dist/types/plugin/decorators/plugin.d.ts +25 -0
- package/dist/types/plugin/decorators/plugin.js +23 -0
- package/dist/types/plugin/index.d.ts +8 -0
- package/dist/types/plugin/index.js +25 -0
- package/dist/types/plugin/plugin-activity-event.d.ts +20 -0
- package/dist/types/plugin/plugin-activity-event.js +3 -0
- package/dist/types/plugin/plugin-activity-response-event.d.ts +20 -0
- package/dist/types/plugin/plugin-activity-response-event.js +3 -0
- package/dist/types/plugin/plugin-activity-sent-event.d.ts +16 -0
- package/dist/types/plugin/plugin-activity-sent-event.js +3 -0
- package/dist/types/plugin/plugin-error-event.d.ts +20 -0
- package/dist/types/plugin/plugin-error-event.js +3 -0
- package/dist/types/plugin/plugin-start-event.d.ts +11 -0
- package/dist/types/plugin/plugin-start-event.js +3 -0
- package/dist/types/plugin/plugin.d.ts +74 -0
- package/dist/types/plugin/plugin.js +3 -0
- package/dist/types/plugin/sender.d.ts +18 -0
- package/dist/types/plugin/sender.js +3 -0
- package/dist/types/prefixed.d.ts +3 -0
- package/dist/types/prefixed.js +3 -0
- package/dist/types/route-handler.d.ts +2 -0
- package/dist/types/route-handler.js +3 -0
- package/dist/types/streamer.d.ts +31 -0
- package/dist/types/streamer.js +3 -0
- package/dist/types/suffixed.d.ts +3 -0
- package/dist/types/suffixed.js +3 -0
- package/package.json +70 -0
|
@@ -0,0 +1,238 @@
|
|
|
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 __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
42
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
43
|
+
};
|
|
44
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
45
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.HttpPlugin = void 0;
|
|
49
|
+
const http_1 = __importDefault(require("http"));
|
|
50
|
+
const express_1 = __importDefault(require("express"));
|
|
51
|
+
const cors_1 = __importDefault(require("cors"));
|
|
52
|
+
const $http = __importStar(require("@microsoft/teams.common/http"));
|
|
53
|
+
const teams_api_1 = require("@microsoft/teams.api");
|
|
54
|
+
const types_1 = require("../../types");
|
|
55
|
+
const package_json_1 = __importDefault(require("../../../package.json"));
|
|
56
|
+
const stream_1 = require("./stream");
|
|
57
|
+
/**
|
|
58
|
+
* Can send/receive activities via http
|
|
59
|
+
*/
|
|
60
|
+
let HttpPlugin = class HttpPlugin {
|
|
61
|
+
logger;
|
|
62
|
+
client;
|
|
63
|
+
manifest;
|
|
64
|
+
botToken;
|
|
65
|
+
graphToken;
|
|
66
|
+
$onError;
|
|
67
|
+
$onActivity;
|
|
68
|
+
get;
|
|
69
|
+
post;
|
|
70
|
+
patch;
|
|
71
|
+
put;
|
|
72
|
+
delete;
|
|
73
|
+
route;
|
|
74
|
+
use;
|
|
75
|
+
get server() {
|
|
76
|
+
return this._server;
|
|
77
|
+
}
|
|
78
|
+
_server;
|
|
79
|
+
get port() {
|
|
80
|
+
return this._port;
|
|
81
|
+
}
|
|
82
|
+
_port;
|
|
83
|
+
express;
|
|
84
|
+
pending = {};
|
|
85
|
+
constructor() {
|
|
86
|
+
this.express = (0, express_1.default)();
|
|
87
|
+
this._server = http_1.default.createServer(this.express);
|
|
88
|
+
this.get = this.express.get.bind(this.express);
|
|
89
|
+
this.post = this.express.post.bind(this.express);
|
|
90
|
+
this.patch = this.express.patch.bind(this.express);
|
|
91
|
+
this.put = this.express.put.bind(this.express);
|
|
92
|
+
this.delete = this.express.delete.bind(this.express);
|
|
93
|
+
this.route = this.express.route.bind(this.express);
|
|
94
|
+
this.use = this.express.use.bind(this.express);
|
|
95
|
+
this.express.use((0, cors_1.default)());
|
|
96
|
+
this.express.use('/api*', express_1.default.json());
|
|
97
|
+
this.express.post('/api/messages', this.onRequest.bind(this));
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* serve static files
|
|
101
|
+
* @param path the url path to serve
|
|
102
|
+
* @param dist the dist file path to serve
|
|
103
|
+
*/
|
|
104
|
+
static(path, dist) {
|
|
105
|
+
this.express.use(path, express_1.default.static(dist));
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
async onStart({ port }) {
|
|
109
|
+
this._port = port;
|
|
110
|
+
this.express.get('/', (_, res) => {
|
|
111
|
+
res.send(this.manifest);
|
|
112
|
+
});
|
|
113
|
+
return await new Promise((resolve, reject) => {
|
|
114
|
+
this._server = this.express.listen(port, async (err) => {
|
|
115
|
+
if (err) {
|
|
116
|
+
this.$onError({ error: err });
|
|
117
|
+
reject(err);
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
this.logger.info(`listening on port ${port} 🚀`);
|
|
121
|
+
resolve();
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
onStop() {
|
|
126
|
+
this._server.close();
|
|
127
|
+
}
|
|
128
|
+
onError({ error, activity }) {
|
|
129
|
+
if (!activity)
|
|
130
|
+
return;
|
|
131
|
+
const res = this.pending[activity.id];
|
|
132
|
+
if (!res) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
if (!res.headersSent) {
|
|
136
|
+
res.status(500).send(error.message);
|
|
137
|
+
}
|
|
138
|
+
delete this.pending[activity.id];
|
|
139
|
+
}
|
|
140
|
+
onActivityResponse({ response, activity }) {
|
|
141
|
+
const res = this.pending[activity.id];
|
|
142
|
+
if (!res) {
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (!res.headersSent) {
|
|
146
|
+
res.status(response.status || 200).send(JSON.stringify(response.body || null));
|
|
147
|
+
}
|
|
148
|
+
delete this.pending[activity.id];
|
|
149
|
+
}
|
|
150
|
+
async send(activity, ref) {
|
|
151
|
+
const api = new teams_api_1.Client(ref.serviceUrl, this.client.clone({
|
|
152
|
+
token: () => this.botToken,
|
|
153
|
+
}));
|
|
154
|
+
activity = {
|
|
155
|
+
...activity,
|
|
156
|
+
from: ref.bot,
|
|
157
|
+
conversation: ref.conversation,
|
|
158
|
+
};
|
|
159
|
+
if (activity.id) {
|
|
160
|
+
const res = await api.conversations
|
|
161
|
+
.activities(ref.conversation.id)
|
|
162
|
+
.update(activity.id, activity);
|
|
163
|
+
return { ...activity, ...res };
|
|
164
|
+
}
|
|
165
|
+
const res = await api.conversations.activities(ref.conversation.id).create(activity);
|
|
166
|
+
return { ...activity, ...res };
|
|
167
|
+
}
|
|
168
|
+
createStream(ref) {
|
|
169
|
+
return new stream_1.HttpStream(new teams_api_1.Client(ref.serviceUrl, this.client.clone({
|
|
170
|
+
token: () => this.botToken,
|
|
171
|
+
})), ref);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* validates an incoming http request
|
|
175
|
+
* @param req the incoming http request
|
|
176
|
+
* @param res the http response
|
|
177
|
+
*/
|
|
178
|
+
async onRequest(req, res, _next) {
|
|
179
|
+
const authorization = req.headers.authorization?.replace('Bearer ', '');
|
|
180
|
+
if (!authorization && process.env.NODE_ENV !== 'local') {
|
|
181
|
+
res.status(401).send('unauthorized');
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const activity = req.body;
|
|
185
|
+
const token = authorization
|
|
186
|
+
? new teams_api_1.JsonWebToken(authorization)
|
|
187
|
+
: {
|
|
188
|
+
appId: '',
|
|
189
|
+
from: 'azure',
|
|
190
|
+
fromId: '',
|
|
191
|
+
serviceUrl: activity.serviceUrl || '',
|
|
192
|
+
};
|
|
193
|
+
this.pending[activity.id] = res;
|
|
194
|
+
this.$onActivity({
|
|
195
|
+
sender: this,
|
|
196
|
+
activity,
|
|
197
|
+
token,
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
exports.HttpPlugin = HttpPlugin;
|
|
202
|
+
__decorate([
|
|
203
|
+
(0, types_1.Logger)(),
|
|
204
|
+
__metadata("design:type", Object)
|
|
205
|
+
], HttpPlugin.prototype, "logger", void 0);
|
|
206
|
+
__decorate([
|
|
207
|
+
(0, types_1.Dependency)(),
|
|
208
|
+
__metadata("design:type", $http.Client)
|
|
209
|
+
], HttpPlugin.prototype, "client", void 0);
|
|
210
|
+
__decorate([
|
|
211
|
+
(0, types_1.Dependency)(),
|
|
212
|
+
__metadata("design:type", Object)
|
|
213
|
+
], HttpPlugin.prototype, "manifest", void 0);
|
|
214
|
+
__decorate([
|
|
215
|
+
(0, types_1.Dependency)({ optional: true }),
|
|
216
|
+
__metadata("design:type", Object)
|
|
217
|
+
], HttpPlugin.prototype, "botToken", void 0);
|
|
218
|
+
__decorate([
|
|
219
|
+
(0, types_1.Dependency)({ optional: true }),
|
|
220
|
+
__metadata("design:type", Object)
|
|
221
|
+
], HttpPlugin.prototype, "graphToken", void 0);
|
|
222
|
+
__decorate([
|
|
223
|
+
(0, types_1.Event)('error'),
|
|
224
|
+
__metadata("design:type", Function)
|
|
225
|
+
], HttpPlugin.prototype, "$onError", void 0);
|
|
226
|
+
__decorate([
|
|
227
|
+
(0, types_1.Event)('activity'),
|
|
228
|
+
__metadata("design:type", Function)
|
|
229
|
+
], HttpPlugin.prototype, "$onActivity", void 0);
|
|
230
|
+
exports.HttpPlugin = HttpPlugin = __decorate([
|
|
231
|
+
(0, types_1.Plugin)({
|
|
232
|
+
name: 'http',
|
|
233
|
+
version: package_json_1.default.version,
|
|
234
|
+
description: 'the default plugin for sending/receiving activities',
|
|
235
|
+
}),
|
|
236
|
+
__metadata("design:paramtypes", [])
|
|
237
|
+
], HttpPlugin);
|
|
238
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BsdWdpbnMvaHR0cC9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQXdCO0FBQ3hCLHNEQUE4QjtBQUM5QixnREFBd0I7QUFHeEIsb0VBQXNEO0FBRXRELG9EQU84QjtBQUU5Qix1Q0FVcUI7QUFFckIseUVBQXdDO0FBR3hDLHFDQUFzQztBQUV0Qzs7R0FFRztBQU1JLElBQU0sVUFBVSxHQUFoQixNQUFNLFVBQVU7SUFFWixNQUFNLENBQVc7SUFHakIsTUFBTSxDQUFnQjtJQUd0QixRQUFRLENBQXFCO0lBRzdCLFFBQVEsQ0FBVTtJQUdsQixVQUFVLENBQVU7SUFHcEIsUUFBUSxDQUFnQztJQUd4QyxXQUFXLENBQW1DO0lBRTlDLEdBQUcsQ0FBNkI7SUFDaEMsSUFBSSxDQUE4QjtJQUNsQyxLQUFLLENBQStCO0lBQ3BDLEdBQUcsQ0FBNkI7SUFDaEMsTUFBTSxDQUFnQztJQUN0QyxLQUFLLENBQStCO0lBQ3BDLEdBQUcsQ0FBNkI7SUFFekMsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFDUyxPQUFPLENBQWM7SUFFL0IsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFDUyxLQUFLLENBQVU7SUFFZixPQUFPLENBQXNCO0lBQzdCLE9BQU8sR0FBcUMsRUFBRSxDQUFDO0lBRXpEO1FBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFBLGlCQUFPLEdBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsT0FBTyxHQUFHLGNBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8s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
|