1 | "use strict";
|
2 | var __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 | };
|
10 | Object.defineProperty(exports, "__esModule", { value: true });
|
11 | const bodyParser = require("body-parser");
|
12 | const express = require("express");
|
13 | const tools_1 = require("./tools");
|
14 | exports.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 | };
|
47 | class 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 | }
|
215 | exports.Api = Api;
|
216 |
|
\ | No newline at end of file |