UNPKG

4.5 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _regenerator = require('babel-runtime/regenerator');
8
9var _regenerator2 = _interopRequireDefault(_regenerator);
10
11var _extends2 = require('babel-runtime/helpers/extends');
12
13var _extends3 = _interopRequireDefault(_extends2);
14
15var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
16
17var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
18
19var _handleAsync = require('handle-async');
20
21var _errors = require('./errors');
22
23function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
25var 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 // check isAuthorized
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 // some data, status code for it
141 res.status(req.method === 'POST' ? 201 : 200);
142
143 // stream response
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 // json obj response
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
171exports.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
178module.exports = exports['default'];
\No newline at end of file