1 |
|
2 |
|
3 | import type { RequestorInterface } from 'subrequests/types/Requestor';
|
4 |
|
5 | const ExpressRequestor = require('./ExpressRequestor');
|
6 | const subrequests = require('subrequests');
|
7 | const util = require('util');
|
8 |
|
9 | type enhancedRequest = express$Request & {
|
10 | subrequestsResponseMerger: any,
|
11 | subrequestsRequestor: ?RequestorInterface,
|
12 | };
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | module.exports = (
|
28 | blueprint: string,
|
29 | req: enhancedRequest,
|
30 | res: express$Response
|
31 | ): Promise<void> => subrequests
|
32 | .request(
|
33 | blueprint,
|
34 | req.subrequestsRequestor || new ExpressRequestor(req),
|
35 | req.subrequestsResponseMerger
|
36 | )
|
37 | .then((response) => {
|
38 |
|
39 | const headers = [...response.headers].reduce((heads, keyval) => {
|
40 | heads[keyval[0]] = keyval[1];
|
41 | return heads;
|
42 | }, {});
|
43 | res
|
44 | .set(headers)
|
45 | .status(parseInt(response.headers.get('Status') || '207', 10))
|
46 | .send(response.body);
|
47 | })
|
48 | .catch((e) => {
|
49 | res
|
50 | .status(500)
|
51 | .set('Content-Type', 'text/plain')
|
52 | .send(util.inspect(e, { depth: null }));
|
53 | });
|