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