1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _regenerator = require('babel-runtime/regenerator');
|
8 |
|
9 | var _regenerator2 = _interopRequireDefault(_regenerator);
|
10 |
|
11 | var _extends2 = require('babel-runtime/helpers/extends');
|
12 |
|
13 | var _extends3 = _interopRequireDefault(_extends2);
|
14 |
|
15 | var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
|
16 |
|
17 | var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
|
18 |
|
19 | var _handleAsync = require('handle-async');
|
20 |
|
21 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
22 |
|
23 | var process = function () {
|
24 | var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(endpoint, req, res) {
|
25 | var opt, authorized, err, rawData, resultData;
|
26 | return _regenerator2.default.wrap(function _callee$(_context) {
|
27 | while (1) {
|
28 | switch (_context.prev = _context.next) {
|
29 | case 0:
|
30 | opt = (0, _extends3.default)({}, req.params, {
|
31 | ip: req.ip,
|
32 | url: req.url,
|
33 | protocol: req.protocol,
|
34 | method: req.method,
|
35 | subdomains: req.subdomains,
|
36 | path: req.path,
|
37 | cookies: req.cookies,
|
38 | user: req.user,
|
39 | data: req.body,
|
40 | options: req.query,
|
41 | session: req.session,
|
42 | _req: req,
|
43 | _res: res
|
44 | });
|
45 |
|
46 |
|
47 |
|
48 | _context.t0 = !endpoint.isAuthorized;
|
49 |
|
50 | if (_context.t0) {
|
51 | _context.next = 6;
|
52 | break;
|
53 | }
|
54 |
|
55 | _context.next = 5;
|
56 | return (0, _handleAsync.promisify)(endpoint.isAuthorized.bind(null, opt));
|
57 |
|
58 | case 5:
|
59 | _context.t0 = _context.sent;
|
60 |
|
61 | case 6:
|
62 | authorized = _context.t0;
|
63 |
|
64 | if (!(authorized !== true)) {
|
65 | _context.next = 11;
|
66 | break;
|
67 | }
|
68 |
|
69 | err = new Error('Unauthorized');
|
70 |
|
71 | err.status = 401;
|
72 | throw err;
|
73 |
|
74 | case 11:
|
75 | if (!endpoint.process) {
|
76 | _context.next = 17;
|
77 | break;
|
78 | }
|
79 |
|
80 | _context.next = 14;
|
81 | return (0, _handleAsync.promisify)(endpoint.process.bind(null, opt));
|
82 |
|
83 | case 14:
|
84 | _context.t1 = _context.sent;
|
85 | _context.next = 18;
|
86 | break;
|
87 |
|
88 | case 17:
|
89 | _context.t1 = null;
|
90 |
|
91 | case 18:
|
92 | rawData = _context.t1;
|
93 |
|
94 | if (!endpoint.format) {
|
95 | _context.next = 25;
|
96 | break;
|
97 | }
|
98 |
|
99 | _context.next = 22;
|
100 | return (0, _handleAsync.promisify)(endpoint.format.bind(null, opt, rawData));
|
101 |
|
102 | case 22:
|
103 | _context.t2 = _context.sent;
|
104 | _context.next = 26;
|
105 | break;
|
106 |
|
107 | case 25:
|
108 | _context.t2 = rawData;
|
109 |
|
110 | case 26:
|
111 | resultData = _context.t2;
|
112 |
|
113 | if (!(resultData == null)) {
|
114 | _context.next = 33;
|
115 | break;
|
116 | }
|
117 |
|
118 | if (!(req.method === 'POST')) {
|
119 | _context.next = 30;
|
120 | break;
|
121 | }
|
122 |
|
123 | return _context.abrupt('return', res.status(201).end());
|
124 |
|
125 | case 30:
|
126 | if (!(req.method === 'GET')) {
|
127 | _context.next = 32;
|
128 | break;
|
129 | }
|
130 |
|
131 | return _context.abrupt('return', res.status(404).end());
|
132 |
|
133 | case 32:
|
134 | return _context.abrupt('return', res.status(204).end());
|
135 |
|
136 | case 33:
|
137 |
|
138 |
|
139 | res.status(req.method === 'POST' ? 201 : 200);
|
140 |
|
141 |
|
142 |
|
143 | if (!(resultData.pipe && resultData.on)) {
|
144 | _context.next = 37;
|
145 | break;
|
146 | }
|
147 |
|
148 | resultData.pipe(res);
|
149 | return _context.abrupt('return');
|
150 |
|
151 | case 37:
|
152 |
|
153 |
|
154 | res.json(resultData).end();
|
155 |
|
156 | case 38:
|
157 | case 'end':
|
158 | return _context.stop();
|
159 | }
|
160 | }
|
161 | }, _callee, undefined);
|
162 | }));
|
163 |
|
164 | return function process(_x, _x2, _x3) {
|
165 | return _ref.apply(this, arguments);
|
166 | };
|
167 | }();
|
168 |
|
169 | exports.default = function (endpoint) {
|
170 | if (typeof endpoint === 'function') endpoint = { process: endpoint };
|
171 | return function (req, res, next) {
|
172 | return process(endpoint, req, res).catch(next);
|
173 | };
|
174 | };
|
175 |
|
176 | module.exports = exports['default']; |
\ | No newline at end of file |