UNPKG

10.2 kBJavaScriptView Raw
1"use strict";
2var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3 return new (P || (P = Promise))(function (resolve, reject) {
4 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
7 step((generator = generator.apply(thisArg, _arguments || [])).next());
8 });
9};
10Object.defineProperty(exports, "__esModule", { value: true });
11const bodyParser = require("body-parser");
12const express = require("express");
13const tools_1 = require("./tools");
14exports.checkRequiredParams = (r) => {
15 try {
16 if (r.required && r.required.length) {
17 const _body = Object.keys(r.req.body), _params = Object.keys(r.req.params);
18 if (_body.length && _params.length) {
19 for (let i = 0; i < r.required.length; i++) {
20 if (_body.indexOf(r.required[i]) < 0) {
21 if (_params.indexOf(r.required[i]) > -1) {
22 continue;
23 }
24 return tools_1.response(false, `${r.context} '${r.required[i]}' is required`);
25 }
26 }
27 return tools_1.response(true, null, true);
28 }
29 else {
30 const p = _body.length ? _body : (_params.length ? _params : null);
31 if (p && p.length) {
32 for (let i = 0; i < r.required.length; i++) {
33 if (p.indexOf(r.required[i]) < 0) {
34 return tools_1.response(false, `${r.context} '${r.required[i]}' is required`);
35 }
36 }
37 return tools_1.response(true, null, true);
38 }
39 }
40 return tools_1.response(false, 'Required parameters do not match requirements!', null);
41 }
42 }
43 catch (error) {
44 console.log(65, error);
45 }
46};
47class Api {
48 constructor(dependencies) {
49 if (dependencies) {
50 this.dependencies = dependencies;
51 }
52 const app = express();
53 process.setMaxListeners(Infinity);
54 app.use(bodyParser.json({ strict: false }));
55 app.use(function (req, res, next) {
56 res
57 .set('Access-Control-Allow-Origin', '*')
58 .set('Access-Control-Allow-Methods', 'GET, POST, DELETE, PUT')
59 .set('Access-Control-Allow-Credentials', true)
60 .set('Access-Control-Allow-Headers', 'Origin, Accept, Content-Type, X-Requested-With, X-Merchant-Id');
61 process.on('unhandledRejection', (reason, p) => {
62 console.log('Unhandled Rejection at: Promise', p, 'reason:', reason);
63 });
64 next();
65 });
66 app.disable('x-powered-by');
67 this.app = app;
68 }
69 get(dependencyName) {
70 if (this.dependencies[dependencyName]) {
71 return this.dependencies[dependencyName];
72 }
73 return null;
74 }
75 routes(params) {
76 for (let i = 0; i < params.length; i++) {
77 let route = params[i].route.toString().trim(), method, swaggerFilePath = params[i].swaggerFilePath || '../../swagger';
78 if (route.indexOf(' ') > -1) {
79 [method, route] = params[i].route.split(' ');
80 }
81 else {
82 route = params[i].route;
83 method = (params[i].method === undefined) ? 'get' : params[i].method.toString();
84 }
85 method = method.toLowerCase();
86 const _params = params[i], that = this;
87 this.app[method](route, function (req, res) {
88 if (_params.allowCors === undefined) {
89 _params.allowCors = true;
90 }
91 res
92 .set('Access-Control-Allow-Origin', '*')
93 .set('Access-Control-Allow-Methods', 'GET, POST, DELETE, PUT')
94 .set('Access-Control-Allow-Credentials', true)
95 .set('Access-Control-Allow-Headers', 'Origin, Accept, Content-Type, X-Requested-With, X-Merchant-Id');
96 if (route.indexOf('_swagger') > -1) {
97 return res.json(require(swaggerFilePath));
98 }
99 else {
100 if (_params.required && _params.required.length) {
101 const __response = exports.checkRequiredParams({ req, required: _params.required, context: _params.context });
102 if (!__response.success) {
103 return res.status(400).json(__response);
104 }
105 }
106 const p = {
107 res,
108 req,
109 method,
110 instance: that,
111 context: _params.context,
112 execute: _params['execute'],
113 allowCors: _params.allowCors
114 };
115 that.app.res = res;
116 that.app.req = req;
117 if (_params.executeFirst) {
118 p['executeFirst'] = _params['executeFirst'];
119 }
120 that.executeRoute(p);
121 }
122 });
123 }
124 }
125 getSourceIp() {
126 return __awaiter(this, void 0, void 0, function* () {
127 try {
128 if (!this.app || !this.app.req) {
129 return tools_1.response(false, 'Not SourceIp Address found.');
130 }
131 const sourceIp = (this.app.req.headers['x-forwarded-for'] ||
132 this.app.req.connection.remoteAddress ||
133 this.app.req.socket.remoteAddress ||
134 this.app.req.connection.socket.remoteAddress).split(",")[0] || '';
135 if (sourceIp) {
136 return tools_1.response(true, null, { sourceIp: sourceIp });
137 }
138 else {
139 return tools_1.response(false, 'Not SourceIp Address found.');
140 }
141 }
142 catch (error) {
143 console.log(78, error);
144 return tools_1.response(false, error);
145 }
146 });
147 }
148 executeRoute(params) {
149 return __awaiter(this, void 0, void 0, function* () {
150 const execute = params.execute, executeFirst = params.executeFirst, instance = params.instance;
151 let res = params.res, req = params.req;
152 try {
153 if (executeFirst) {
154 const [obj, meth] = params['executeFirst'].split('.');
155 const awResult = yield instance['dependencies'][obj][meth](params.method === 'get' ? params.req.params : params.req.body, params.method !== 'get' ? params.req.params : instance, params.method !== 'get' ? instance : null);
156 if (awResult) {
157 if (awResult.success) {
158 const [obj, meth] = params['execute'].split('.');
159 const _response = yield instance['dependencies'][obj][meth](params.method === 'get' ? params.req.params : params.req.body, params.method !== 'get' ? params.req.params : instance, params.method !== 'get' ? instance : null);
160 if (_response) {
161 if (_response.success && _response.data) {
162 if (Array.isArray(_response.data.Items)) {
163 return res.status(_response.data.Items.length ? 200 : 404).json(tools_1.response(true, false, _response.data.Items.length > 1 ? _response.data.Items : _response.data.Items[0]));
164 }
165 else {
166 res.status(200);
167 }
168 }
169 else {
170 res.status(400);
171 }
172 }
173 else {
174 res.status(500);
175 }
176 }
177 else {
178 res.status(400);
179 }
180 }
181 else {
182 res.status(500);
183 }
184 res.json(awResult);
185 }
186 else {
187 const [obj, meth] = params['execute'].split('.');
188 const _response = yield instance['dependencies'][obj][meth](params.method === 'get' ? params.req.params : params.req.body, params.method !== 'get' ? params.req.params : instance, params.method !== 'get' ? instance : null);
189 if (_response) {
190 if (_response.success && _response.data) {
191 if (Array.isArray(_response.data.Items)) {
192 return res.status(_response.data.Items.length ? 200 : 404).json(tools_1.response(true, false, _response.data.Items.length > 1 ? _response.data.Items : _response.data.Items[0]));
193 }
194 else {
195 res.status(200);
196 }
197 }
198 else {
199 res.status(400);
200 }
201 }
202 else {
203 res.status(500);
204 }
205 res.json(_response);
206 }
207 }
208 catch (error) {
209 console.log('[api()] error:', error);
210 return res.status(500).json(tools_1.response(false, error.message));
211 }
212 });
213 }
214}
215exports.Api = Api;
216//# sourceMappingURL=tools.api.js.map
\No newline at end of file