chyz 2.0.0-rc.4 → 2.0.0-rc.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/BaseChyz.d.ts +62 -60
  2. package/BaseChyz.d.ts.map +1 -1
  3. package/BaseChyz.js +507 -379
  4. package/base/ActionFilter.d.ts +32 -32
  5. package/base/ActionFilter.d.ts.map +1 -1
  6. package/base/ActionFilter.js +82 -85
  7. package/base/BadRequestHttpException.d.ts +6 -0
  8. package/base/BadRequestHttpException.d.ts.map +1 -0
  9. package/base/BadRequestHttpException.js +17 -0
  10. package/base/BaseError.d.ts +43 -10
  11. package/base/BaseError.d.ts.map +1 -1
  12. package/base/BaseError.js +58 -29
  13. package/base/Behavior.d.ts +3 -3
  14. package/base/Behavior.js +7 -7
  15. package/base/CBaseObject.d.ts +4 -4
  16. package/base/CBaseObject.d.ts.map +1 -1
  17. package/base/CBaseObject.js +16 -16
  18. package/base/CEvents.d.ts +13 -0
  19. package/base/CEvents.d.ts.map +1 -0
  20. package/base/CEvents.js +24 -0
  21. package/base/CRequest.d.ts +2 -0
  22. package/base/CRequest.d.ts.map +1 -0
  23. package/base/CRequest.js +10 -0
  24. package/base/CWebController.d.ts +43 -43
  25. package/base/CWebController.d.ts.map +1 -1
  26. package/base/CWebController.js +81 -74
  27. package/base/Component.d.ts +20 -20
  28. package/base/Component.d.ts.map +1 -1
  29. package/base/Component.js +57 -60
  30. package/base/Configurable.d.ts +2 -2
  31. package/base/Configurable.js +8 -8
  32. package/base/DataErrorDbException.d.ts +5 -5
  33. package/base/DataErrorDbException.d.ts.map +1 -1
  34. package/base/DataErrorDbException.js +17 -17
  35. package/base/DbConnection.d.ts +12 -12
  36. package/base/DbConnection.js +53 -53
  37. package/base/ForbiddenHttpException.d.ts +4 -4
  38. package/base/ForbiddenHttpException.d.ts.map +1 -1
  39. package/base/ForbiddenHttpException.js +16 -16
  40. package/base/InvalidArgumentException.d.ts +5 -5
  41. package/base/InvalidArgumentException.d.ts.map +1 -1
  42. package/base/InvalidArgumentException.js +17 -17
  43. package/base/InvalidConfigException.d.ts +5 -5
  44. package/base/InvalidConfigException.d.ts.map +1 -1
  45. package/base/InvalidConfigException.js +17 -17
  46. package/base/Logs.d.ts +22 -0
  47. package/base/Logs.d.ts.map +1 -0
  48. package/base/Logs.js +57 -0
  49. package/base/Model.d.ts +301 -298
  50. package/base/Model.d.ts.map +1 -1
  51. package/base/Model.js +545 -507
  52. package/base/ModelManager.d.ts +1 -1
  53. package/base/ModelManager.js +19 -19
  54. package/base/NotFoundHttpException.d.ts +5 -5
  55. package/base/NotFoundHttpException.d.ts.map +1 -1
  56. package/base/NotFoundHttpException.js +17 -17
  57. package/base/RestClient.d.ts +6 -8
  58. package/base/RestClient.d.ts.map +1 -1
  59. package/base/RestClient.js +25 -26
  60. package/base/UnauthorizedHttpException.d.ts +5 -5
  61. package/base/UnauthorizedHttpException.d.ts.map +1 -1
  62. package/base/UnauthorizedHttpException.js +17 -17
  63. package/base/ValidationHttpException.d.ts +5 -5
  64. package/base/ValidationHttpException.d.ts.map +1 -1
  65. package/base/ValidationHttpException.js +17 -17
  66. package/base/db/Exception.d.ts +6 -6
  67. package/base/db/Exception.js +15 -15
  68. package/base/index.d.ts +19 -17
  69. package/base/index.d.ts.map +1 -1
  70. package/base/index.js +41 -37
  71. package/decorator/Middleware.d.ts +3 -3
  72. package/decorator/Middleware.js +11 -11
  73. package/decorator/controller.d.ts +2 -2
  74. package/decorator/controller.js +24 -24
  75. package/decorator/delete.d.ts +3 -0
  76. package/decorator/delete.d.ts.map +1 -0
  77. package/decorator/delete.js +36 -0
  78. package/decorator/enums/ControllerDecoratorParams.d.ts +5 -5
  79. package/decorator/enums/ControllerDecoratorParams.js +9 -9
  80. package/decorator/get.d.ts +2 -2
  81. package/decorator/get.js +36 -36
  82. package/decorator/index.d.ts +5 -3
  83. package/decorator/index.d.ts.map +1 -1
  84. package/decorator/index.js +13 -9
  85. package/decorator/post.d.ts +2 -2
  86. package/decorator/post.js +36 -36
  87. package/decorator/put.d.ts +3 -0
  88. package/decorator/put.d.ts.map +1 -0
  89. package/decorator/put.js +36 -0
  90. package/filters/AccessControl.d.ts +12 -12
  91. package/filters/AccessControl.d.ts.map +1 -1
  92. package/filters/AccessControl.js +83 -86
  93. package/filters/AccessRule.d.ts +82 -82
  94. package/filters/AccessRule.d.ts.map +1 -1
  95. package/filters/AccessRule.js +136 -140
  96. package/filters/auth/AuthInterface.d.ts +25 -25
  97. package/filters/auth/AuthInterface.js +2 -2
  98. package/filters/auth/AuthMethod.d.ts +37 -37
  99. package/filters/auth/AuthMethod.js +82 -82
  100. package/filters/auth/HttpBasicAuth.d.ts +23 -22
  101. package/filters/auth/HttpBasicAuth.d.ts.map +1 -1
  102. package/filters/auth/HttpBasicAuth.js +78 -72
  103. package/filters/auth/HttpBearerAuth.d.ts +17 -17
  104. package/filters/auth/HttpBearerAuth.js +32 -32
  105. package/filters/auth/HttpHeaderAuth.d.ts +14 -14
  106. package/filters/auth/HttpHeaderAuth.js +57 -60
  107. package/filters/auth/JwtHttpBearerAuth.d.ts +20 -20
  108. package/filters/auth/JwtHttpBearerAuth.d.ts.map +1 -1
  109. package/filters/auth/JwtHttpBearerAuth.js +87 -81
  110. package/filters/auth/KeyCloakHttpBearerAuth.d.ts +22 -22
  111. package/filters/auth/KeyCloakHttpBearerAuth.js +116 -116
  112. package/filters/auth/index.d.ts +4 -4
  113. package/filters/auth/index.js +11 -11
  114. package/filters/index.d.ts +2 -2
  115. package/filters/index.js +7 -7
  116. package/index.d.ts +27 -16
  117. package/index.d.ts.map +1 -1
  118. package/index.js +70 -71
  119. package/model/RouteDefinition.d.ts +6 -6
  120. package/model/RouteDefinition.js +8 -8
  121. package/package.json +22 -26
  122. package/rbac/AuthAssignment.d.ts +18 -18
  123. package/rbac/AuthAssignment.js +44 -44
  124. package/rbac/AuthItem.d.ts +26 -26
  125. package/rbac/AuthItem.js +51 -51
  126. package/rbac/AuthItemChild.d.ts +18 -18
  127. package/rbac/AuthItemChild.js +43 -43
  128. package/rbac/AuthManager.d.ts +111 -111
  129. package/rbac/AuthManager.d.ts.map +1 -1
  130. package/rbac/AuthManager.js +357 -358
  131. package/rbac/index.d.ts +5 -0
  132. package/rbac/index.d.ts.map +1 -0
  133. package/rbac/index.js +28 -0
  134. package/requiments/Glob.d.ts +2 -2
  135. package/requiments/Glob.js +10 -10
  136. package/requiments/ReflectUtil.js +24 -24
  137. package/requiments/Utils.d.ts +1 -2
  138. package/requiments/Utils.d.ts.map +1 -1
  139. package/requiments/Utils.js +115 -110
  140. package/validators/BooleanValidator.js +1 -1
  141. package/validators/CompareValidator.js +1 -1
  142. package/validators/DateValidator.js +1 -1
  143. package/validators/EmailValidator.js +1 -1
  144. package/validators/Validator.d.ts +17 -17
  145. package/validators/Validator.js +27 -27
  146. package/web/IdentityInterface.d.ts +55 -54
  147. package/web/IdentityInterface.d.ts.map +1 -1
  148. package/web/IdentityInterface.js +8 -8
  149. package/web/WebUser.d.ts +71 -71
  150. package/web/WebUser.js +165 -165
  151. package/base/Logger.d.ts +0 -18
  152. package/base/Logger.d.ts.map +0 -1
  153. package/base/Logger.js +0 -49
package/BaseChyz.js CHANGED
@@ -1,379 +1,507 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __importDefault = (this && this.__importDefault) || function (mod) {
12
- return (mod && mod.__esModule) ? mod : { "default": mod };
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- require("reflect-metadata");
16
- const base_1 = require("./base");
17
- const Utils_1 = __importDefault(require("./requiments/Utils"));
18
- const Logger_1 = require("./base/Logger");
19
- const https = require('https');
20
- const express = require("express");
21
- const compression = require('compression');
22
- const log4js = require("log4js");
23
- const fs = require('fs');
24
- const validate = require('validate.js');
25
- /**
26
- * Use
27
- * selectedBox: {
28
- * array: {
29
- * id: {
30
- * numericality: {
31
- * onlyInteger: true,
32
- * greaterThan: 0
33
- * }
34
- * }
35
- * }
36
- * },
37
- * @param arrayItems
38
- * @param itemConstraints
39
- */
40
- validate.validators.array = (arrayItems, itemConstraints) => {
41
- const arrayItemErrors = arrayItems.reduce((errors, item, index) => {
42
- const error = validate(item, itemConstraints);
43
- if (error)
44
- errors[index] = { error: error };
45
- return errors;
46
- }, {});
47
- return Utils_1.default.isEmpty(arrayItemErrors) ? null : { errors: arrayItemErrors };
48
- };
49
- validate.validators.tokenString = (items, itemConstraints) => {
50
- let arrayItems = items.split(",");
51
- const arrayItemErrors = arrayItems.reduce((errors, item, index) => {
52
- const error = validate(item, itemConstraints);
53
- if (error)
54
- errors[index] = { error: error };
55
- return errors;
56
- }, {});
57
- return Utils_1.default.isEmpty(arrayItemErrors) ? null : { errors: arrayItemErrors };
58
- };
59
- var ip = require('ip');
60
- var bodyParser = require('body-parser');
61
- var methodOverride = require('method-override');
62
- class BaseChyz {
63
- constructor() {
64
- this._port = 3001;
65
- this._controllerpath = "Controllers";
66
- }
67
- get controllerpath() {
68
- return this._controllerpath;
69
- }
70
- set controllerpath(value) {
71
- this._controllerpath = value;
72
- }
73
- init() {
74
- if (this.config.logger instanceof Logger_1.Logger)
75
- BaseChyz.logger = this.config.logger;
76
- /**
77
- * set request id
78
- */
79
- Object.defineProperty(BaseChyz.express.request, 'reqId', {
80
- configurable: true,
81
- enumerable: true,
82
- writable: true
83
- });
84
- Object.defineProperty(BaseChyz.express.request, 'user', {
85
- configurable: true,
86
- enumerable: true,
87
- writable: true
88
- });
89
- Object.defineProperty(BaseChyz.express.request, 'identity', {
90
- configurable: true,
91
- enumerable: true,
92
- writable: true
93
- });
94
- /**
95
- * server port setting
96
- */
97
- if (this.config.hasOwnProperty("port"))
98
- this.port = this.config.port;
99
- /**
100
- * controller path
101
- */
102
- if (this.config.controllerpath) {
103
- this.controllerpath = this.config.controllerpath;
104
- }
105
- /**
106
- * Model Register
107
- */
108
- this.loadModels();
109
- /**
110
- * Express Server
111
- */
112
- this.middleware();
113
- /**
114
- * Load Controller
115
- */
116
- this.loadController();
117
- }
118
- /**
119
- * Listen port number
120
- * Server port number get
121
- */
122
- get port() {
123
- return this._port;
124
- }
125
- /**
126
- * Listen port number
127
- * Server port number setting
128
- * @param value
129
- */
130
- set port(value) {
131
- this._port = value;
132
- }
133
- static get validate() {
134
- return this._validate;
135
- }
136
- static set validate(value) {
137
- this._validate = value;
138
- }
139
- app(config = {}) {
140
- var _a;
141
- /**
142
- * Config set
143
- */
144
- this.config = config;
145
- // logger setting
146
- // this.logProvider().level = log4js.levels.ALL;
147
- // this.logProvider().configure(this._logConfig);
148
- let components = Utils_1.default.findKeyValue(config, "components");
149
- if (components) {
150
- for (const componentsKey in components) {
151
- let comp = components[componentsKey];
152
- BaseChyz.debug("Create Component ", componentsKey);
153
- try {
154
- BaseChyz.components[componentsKey] = Utils_1.default.createObject(new comp.class, comp);
155
- (_a = BaseChyz.components[componentsKey]) === null || _a === void 0 ? void 0 : _a.init();
156
- }
157
- catch (e) {
158
- BaseChyz.error("Create Component Error", e);
159
- }
160
- }
161
- }
162
- let middlewares = Utils_1.default.findKeyValue(config, "middlewares");
163
- if (middlewares) {
164
- for (const middlewareKey in middlewares) {
165
- let middleware1 = middlewares[middlewareKey];
166
- BaseChyz.logs().debug("Create middlewares ", middlewareKey);
167
- BaseChyz.middlewares[middlewareKey] = middleware1;
168
- // BaseChyz.middlewares[middlewareKey] = Utils.createObject(new middleware1.class, middleware1);
169
- }
170
- }
171
- this.init();
172
- return this;
173
- }
174
- logProvider() {
175
- return log4js;
176
- }
177
- getLogger() {
178
- return this.logProvider().getLogger(this.constructor.name);
179
- }
180
- static logs(...args) {
181
- return log4js.getLogger(this.name);
182
- }
183
- static trace(...args) {
184
- BaseChyz.logs().fatal(...arguments);
185
- }
186
- static debug(...args) {
187
- BaseChyz.logs().debug(...arguments);
188
- }
189
- static info(...args) {
190
- BaseChyz.logs().info(...arguments);
191
- }
192
- static warn(...args) {
193
- BaseChyz.logs().warn(...arguments);
194
- }
195
- static error(...args) {
196
- BaseChyz.logs().error(...arguments);
197
- }
198
- static fatal(...args) {
199
- BaseChyz.logs().fatal(...arguments);
200
- }
201
- static warning(...args) {
202
- BaseChyz.logs().warn(...arguments);
203
- }
204
- static t(text) {
205
- return text;
206
- }
207
- errorLogger(error, req, res, next) {
208
- BaseChyz.error(error);
209
- next(error); // forward to next middleware
210
- }
211
- errorResponder(error, req, res, next) {
212
- if (error.type == 'redirect')
213
- res.redirect('/error');
214
- else if (error.type == 'time-out') // arbitrary condition check
215
- res.status(408).json(error);
216
- else
217
- next(error); // forwarding exceptional case to fail-safe middleware
218
- }
219
- errorHandler(err, req, res, next) {
220
- if (res.headersSent) {
221
- return next(err);
222
- }
223
- res.status(500).json({ error: err });
224
- }
225
- static getComponent(key) {
226
- var _a;
227
- return (_a = BaseChyz.components[key]) !== null && _a !== void 0 ? _a : null;
228
- }
229
- static getMiddlewares(key) {
230
- var _a;
231
- return (_a = BaseChyz.middlewares[key]) !== null && _a !== void 0 ? _a : null;
232
- }
233
- /**
234
- * load model
235
- */
236
- loadModels() {
237
- return __awaiter(this, void 0, void 0, function* () {
238
- let models = {};
239
- let path = `${this._controllerpath}/../Models`;
240
- fs.readdirSync(path).forEach((file) => {
241
- if (file !== "index.ts") {
242
- let model = require(`${path}/${file}`);
243
- // @ts-ignore
244
- let className = file.split(".")[0] + "Class";
245
- if (model[className])
246
- models[className.replace("Class", "")] = new model[className];
247
- }
248
- });
249
- base_1.ModelManager._register(models);
250
- for (const key of Object.keys(base_1.ModelManager)) {
251
- if (key != "_register") {
252
- base_1.ModelManager[key].init();
253
- }
254
- }
255
- });
256
- }
257
- /**
258
- * load contoller
259
- */
260
- loadController() {
261
- return __awaiter(this, void 0, void 0, function* () {
262
- // let articlesEndpoints: string[] = [];
263
- for (const file of fs.readdirSync(`${this._controllerpath}/`)) {
264
- let controller = require(`${this._controllerpath}/${file}`);
265
- // let controller = await import(`${this._controllerpath}/${file}`);
266
- // This is our instantiated class
267
- const instance = new controller();
268
- BaseChyz.controllers.push(instance);
269
- // The prefix saved to our controller
270
- // @ts-ignore
271
- const prefix = Reflect.getMetadata('prefix', controller);
272
- // Our `routes` array containing all our routes for this controller
273
- // @ts-ignore
274
- const routes = Reflect.getMetadata('routes', controller);
275
- BaseChyz.logs().debug("Controller load ", controller.name, `(${prefix})`);
276
- if (routes) {
277
- routes.forEach(route => {
278
- let actionId = route.path == "/" || route.path == "" ? instance.defaultAction : route.path;
279
- route.id = actionId;
280
- BaseChyz.logs().debug("Controller route Path", prefix + (route.path.startsWith("/") ? route.path : `/${route.path}`));
281
- BaseChyz.express[route.requestMethod](prefix + (route.path.startsWith("/") ? route.path : `/${route.path}`), (req, res, next) => __awaiter(this, void 0, void 0, function* () {
282
- try {
283
- BaseChyz.debug(`Call Request id ${instance.id}`);
284
- yield instance.beforeAction(route, req, res);
285
- next();
286
- }
287
- catch (e) {
288
- BaseChyz.error(e);
289
- res.status(e.statusCode || 500);
290
- res.json({ error: { code: e.statusCode || 500, name: e.name, message: e.message } });
291
- // next(e)
292
- }
293
- }), (req, res, next) => __awaiter(this, void 0, void 0, function* () {
294
- try {
295
- // @ts-ignore
296
- BaseChyz.debug("Request ID ", req.reqId);
297
- // @ts-ignore
298
- yield instance[route.methodName](req, res, next);
299
- instance.afterAction(route, req, res);
300
- }
301
- catch (e) {
302
- if (e instanceof Error) {
303
- BaseChyz.error(e);
304
- // @ts-ignore
305
- res.status(e.statusCode || 500);
306
- // @ts-ignore
307
- res.json({ error: { code: e.statusCode || 500, name: e.name, message: e.message } });
308
- }
309
- else {
310
- res.json(e);
311
- }
312
- }
313
- }));
314
- });
315
- }
316
- }
317
- });
318
- }
319
- middleware() {
320
- BaseChyz.express.use(bodyParser.json({ limit: '1mb' }));
321
- BaseChyz.express.use(bodyParser.urlencoded({ limit: '1mb', extended: true })); // support encoded bodies
322
- BaseChyz.express.use(methodOverride());
323
- BaseChyz.express.use(methodOverride());
324
- // CORS
325
- BaseChyz.express.use(function (req, res, next) {
326
- // @ts-ignore
327
- req.reqId = Utils_1.default.uniqueId("chyzzzz_");
328
- res.setHeader('Content-Type', 'application/json');
329
- res.setHeader("Access-Control-Allow-Origin", "*");
330
- res.setHeader("Access-Control-Allow-Credentials", "true");
331
- res.setHeader("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
332
- res.setHeader("Access-Control-Allow-Headers", "Access-Control-Allow-Origin,Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers,Authorization");
333
- next();
334
- });
335
- // compress all responses
336
- BaseChyz.express.use(compression());
337
- //Middlewares
338
- for (const middleware1 of Object.keys(BaseChyz.middlewares)) {
339
- if (!Utils_1.default.isFunction(middleware1)) {
340
- let keycloak = BaseChyz.middlewares[middleware1].keycloak;
341
- BaseChyz.express.use(keycloak.middleware(BaseChyz.middlewares[middleware1].config));
342
- }
343
- else {
344
- BaseChyz.express.use(BaseChyz.middlewares[middleware1]);
345
- }
346
- }
347
- BaseChyz.express.use(this.errorResponder);
348
- BaseChyz.express.use(this.errorHandler);
349
- }
350
- Start() {
351
- var _a, _b;
352
- BaseChyz.info("Express Server Starting");
353
- if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.ssl) {
354
- BaseChyz.httpServer = https.createServer((_b = this.config) === null || _b === void 0 ? void 0 : _b.ssl, BaseChyz.express);
355
- BaseChyz.httpServer.listen(this._port, () => {
356
- BaseChyz.info("Express Server Start ");
357
- BaseChyz.info(`Liten Port ${this._port}`);
358
- BaseChyz.info(`https://localhost:${this._port}`);
359
- BaseChyz.info(`https://${ip.address()}:${this._port}`);
360
- });
361
- }
362
- else {
363
- BaseChyz.httpServer = BaseChyz.express.listen(this._port, () => {
364
- BaseChyz.info("Express Server Start ");
365
- BaseChyz.info(`Liten Port ${this._port}`);
366
- BaseChyz.info(`http://localhost:${this._port}`);
367
- BaseChyz.info(`http://${ip.address()}:${this._port}`);
368
- });
369
- }
370
- return this;
371
- }
372
- }
373
- exports.default = BaseChyz;
374
- BaseChyz.express = express();
375
- BaseChyz.logger = new Logger_1.Logger();
376
- BaseChyz._validate = validate;
377
- BaseChyz.controllers = [];
378
- BaseChyz.components = {};
379
- BaseChyz.middlewares = {};
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ /**
39
+ * https server
40
+ */
41
+ const express_1 = __importDefault(require("express"));
42
+ const bodyParser = require("body-parser");
43
+ const https_1 = require("https");
44
+ const http_1 = require("http");
45
+ const fs = require("fs");
46
+ /**
47
+ * Freamwork
48
+ */
49
+ const base_1 = require("./base");
50
+ const Utils_1 = require("./requiments/Utils");
51
+ const Logs_1 = require("./base/Logs");
52
+ const CEvents_1 = require("./base/CEvents");
53
+ const http_request = require('debug')('http:request');
54
+ const http_request_body = http_request.extend('body');
55
+ const http_request_headers = http_request.extend('headers');
56
+ const compression = require('compression');
57
+ // const fs = require('fs');
58
+ const ip = require('ip');
59
+ const methodOverride = require('method-override');
60
+ const Server = (0, express_1.default)();
61
+ const cors = require('cors');
62
+ const emitter = require('events').EventEmitter;
63
+ const em = new emitter();
64
+ /**
65
+ * set request id
66
+ */
67
+ Object.defineProperty(Server.request, 'reqId', {
68
+ configurable: true,
69
+ enumerable: true,
70
+ writable: true
71
+ });
72
+ Object.defineProperty(Server.request, 'user', {
73
+ configurable: true,
74
+ enumerable: true,
75
+ writable: true
76
+ });
77
+ Object.defineProperty(Server.request, 'identity', {
78
+ configurable: true,
79
+ enumerable: true,
80
+ writable: true
81
+ });
82
+ const validate = require('validate.js');
83
+ const dayjs = require('dayjs');
84
+ const utc = require('dayjs/plugin/utc');
85
+ const relative = require('dayjs/plugin/relativeTime');
86
+ const calendar_1 = __importDefault(require("dayjs/plugin/calendar"));
87
+ const weekOfYear_1 = __importDefault(require("dayjs/plugin/weekOfYear"));
88
+ const isTomorrow_1 = __importDefault(require("dayjs/plugin/isTomorrow"));
89
+ dayjs.extend(utc);
90
+ dayjs.extend(relative);
91
+ dayjs.extend(isTomorrow_1.default);
92
+ dayjs.extend(calendar_1.default);
93
+ dayjs.extend(weekOfYear_1.default);
94
+ /**
95
+ * Use
96
+ * selectedBox: {
97
+ * array: {
98
+ * id: {
99
+ * numericality: {
100
+ * onlyInteger: true,
101
+ * greaterThan: 0
102
+ * }
103
+ * }
104
+ * }
105
+ * },
106
+ * @param arrayItems
107
+ * @param itemConstraints
108
+ */
109
+ validate.validators.array = (arrayItems, itemConstraints) => {
110
+ if (!Utils_1.Utils.isArray(arrayItems))
111
+ return { errors: [{ error: 'in not array' }] };
112
+ const arrayItemErrors = arrayItems.reduce((errors, item, index) => {
113
+ const error = validate(item, itemConstraints);
114
+ if (error)
115
+ errors[index] = { error: error };
116
+ return errors;
117
+ }, {});
118
+ return Utils_1.Utils.isEmpty(arrayItemErrors) ? null : { errors: arrayItemErrors };
119
+ };
120
+ validate.validators.tokenString = (items, itemConstraints) => {
121
+ let arrayItems = items.split(",");
122
+ const arrayItemErrors = arrayItems.reduce((errors, item, index) => {
123
+ const error = validate(item, itemConstraints);
124
+ if (error)
125
+ errors[index] = { error: error };
126
+ return errors;
127
+ }, {});
128
+ return Utils_1.Utils.isEmpty(arrayItemErrors) ? null : { errors: arrayItemErrors };
129
+ };
130
+ validate.extend(validate.validators.datetime, {
131
+ // The value is guaranteed not to be null or undefined but otherwise it
132
+ // could be anything.
133
+ parse: function (value, options) {
134
+ return +dayjs().utc(value);
135
+ },
136
+ // Input is a unix timestamp
137
+ format: function (value, options) {
138
+ var format = options.dateOnly ? "YYYY-MM-DD" : "YYYY-MM-DD hh:mm:ss";
139
+ return dayjs().utc(value).format(format);
140
+ }
141
+ });
142
+ class BaseChyz {
143
+ constructor() {
144
+ this._port = 3001;
145
+ this._controllerpath = "Controllers";
146
+ }
147
+ static get EventEmitter() {
148
+ return this._EventEmitter;
149
+ }
150
+ static set EventEmitter(value) {
151
+ this._EventEmitter = value;
152
+ }
153
+ get controllerpath() {
154
+ return this._controllerpath;
155
+ }
156
+ set controllerpath(value) {
157
+ this._controllerpath = value;
158
+ }
159
+ /**
160
+ *
161
+ */
162
+ init() {
163
+ /**
164
+ * server port setting
165
+ */
166
+ if (this.config.hasOwnProperty("port"))
167
+ this.port = this.config.port;
168
+ /**
169
+ * controller path
170
+ */
171
+ if (this.config.controllerpath) {
172
+ this.controllerpath = this.config.controllerpath;
173
+ }
174
+ /**
175
+ * Model Register
176
+ */
177
+ this.loadModels();
178
+ /**
179
+ * Express Server
180
+ */
181
+ this.middleware();
182
+ /**
183
+ * Load Controller
184
+ */
185
+ this.loadController();
186
+ }
187
+ /**
188
+ * Listen port number
189
+ * Server port number get
190
+ */
191
+ get port() {
192
+ return this._port;
193
+ }
194
+ /**
195
+ * Listen port number
196
+ * Server port number setting
197
+ * @param value
198
+ */
199
+ set port(value) {
200
+ this._port = value;
201
+ }
202
+ static get validate() {
203
+ return this._validate;
204
+ }
205
+ static set validate(value) {
206
+ this._validate = value;
207
+ }
208
+ app(config = {}) {
209
+ var _a, _b;
210
+ BaseChyz.EventEmitter.emit(CEvents_1.CEvents.ON_INIT_BEFORE, this, config);
211
+ /**
212
+ * Config set
213
+ */
214
+ this.config = config;
215
+ /**
216
+ * log setting
217
+ */
218
+ if (this.config.logs instanceof Logs_1.Logs) {
219
+ BaseChyz.logs = this.config.logs;
220
+ }
221
+ else if (!this.config.hasOwnProperty('logs')) {
222
+ BaseChyz.logs = new Logs_1.Logs();
223
+ }
224
+ let components = Utils_1.Utils.findKeyValue(config, "components");
225
+ if (components) {
226
+ /**
227
+ * first initial database component
228
+ */
229
+ if (components.db) {
230
+ let comp = components['db'];
231
+ BaseChyz.debug("First initial database component ", "db");
232
+ try {
233
+ BaseChyz.components["db"] = Utils_1.Utils.createObject(new comp.class, comp);
234
+ (_a = BaseChyz.components["db"]) === null || _a === void 0 ? void 0 : _a.init();
235
+ delete components.db;
236
+ }
237
+ catch (e) {
238
+ BaseChyz.error("Create Component Error", e);
239
+ }
240
+ }
241
+ for (const componentsKey in components) {
242
+ let comp = components[componentsKey];
243
+ BaseChyz.debug("Create Component ", componentsKey);
244
+ try {
245
+ BaseChyz.components[componentsKey] = Utils_1.Utils.createObject(new comp.class, comp);
246
+ (_b = BaseChyz.components[componentsKey]) === null || _b === void 0 ? void 0 : _b.init();
247
+ }
248
+ catch (e) {
249
+ BaseChyz.error("Create Component Error", e);
250
+ }
251
+ }
252
+ }
253
+ let middlewares = Utils_1.Utils.findKeyValue(config, "middlewares");
254
+ if (middlewares) {
255
+ for (const middlewareKey in middlewares) {
256
+ let middleware1 = middlewares[middlewareKey];
257
+ BaseChyz.debug("Create middlewares ", middlewareKey);
258
+ BaseChyz.middlewares[middlewareKey] = middleware1;
259
+ // BaseChyz.middlewares[middlewareKey] = Utils.createObject(new middleware1.class, middleware1);
260
+ }
261
+ }
262
+ this.init();
263
+ BaseChyz.EventEmitter.emit(CEvents_1.CEvents.ON_INIT_AFTER, this, config);
264
+ return this;
265
+ }
266
+ static trace(...args) {
267
+ BaseChyz.logs.fatal(...arguments);
268
+ }
269
+ static debug(...args) {
270
+ BaseChyz.logs.debug(...arguments);
271
+ }
272
+ static info(...args) {
273
+ BaseChyz.logs.info(...arguments);
274
+ }
275
+ static warn(...args) {
276
+ BaseChyz.logs.warn(...arguments);
277
+ }
278
+ static error(...args) {
279
+ BaseChyz.logs.error(...arguments);
280
+ }
281
+ static fatal(...args) {
282
+ BaseChyz.logs.fatal(...arguments);
283
+ }
284
+ static warning(...args) {
285
+ BaseChyz.logs.warn(...arguments);
286
+ }
287
+ static t(text, params) {
288
+ if (text == "")
289
+ return;
290
+ // let lang = require("@root/locales/tr/translation.json");
291
+ let lang = {};
292
+ if (lang.hasOwnProperty(text)) {
293
+ text = lang[text];
294
+ }
295
+ return text.tokenReplace(params);
296
+ }
297
+ errorLogger(error, req, res, next) {
298
+ BaseChyz.error(error);
299
+ next(error); // forward to next middleware
300
+ }
301
+ errorResponder(error, req, res, next) {
302
+ if (error.type == 'redirect')
303
+ res.redirect('/error');
304
+ else if (error.type == 'time-out') // arbitrary condition check
305
+ res.status(408).json(error);
306
+ else
307
+ next(error); // forwarding exceptional case to fail-safe middleware
308
+ }
309
+ errorHandler(err, req, res, next) {
310
+ if (res.headersSent) {
311
+ return next(err);
312
+ }
313
+ res.status(500).json({ error: err });
314
+ }
315
+ static getComponent(key) {
316
+ var _a;
317
+ return (_a = BaseChyz.components[key]) !== null && _a !== void 0 ? _a : null;
318
+ }
319
+ static getMiddlewares(key) {
320
+ var _a;
321
+ return (_a = BaseChyz.middlewares[key]) !== null && _a !== void 0 ? _a : null;
322
+ }
323
+ /**
324
+ * load model
325
+ */
326
+ loadModels() {
327
+ return __awaiter(this, void 0, void 0, function* () {
328
+ let models = {};
329
+ let path = `${this._controllerpath}/../Models`;
330
+ fs.readdirSync(path).forEach((file) => {
331
+ if (file !== "index.ts") {
332
+ let model = require(`${path}/${file}`);
333
+ // @ts-ignore
334
+ let className = file.split(".")[0] + "Class";
335
+ if (model[className])
336
+ models[className.replace("Class", "")] = new model[className];
337
+ }
338
+ });
339
+ /**
340
+ *
341
+ */
342
+ base_1.ModelManager._register(models);
343
+ for (const key of Object.keys(base_1.ModelManager)) {
344
+ if (key != "_register") {
345
+ base_1.ModelManager[key].init();
346
+ }
347
+ }
348
+ });
349
+ }
350
+ /**
351
+ * load contoller
352
+ */
353
+ loadController() {
354
+ return __awaiter(this, void 0, void 0, function* () {
355
+ // let articlesEndpoints: string[] = [];
356
+ for (const file of fs.readdirSync(`${this._controllerpath}/`)) {
357
+ // let controller = require(`${this._controllerpath}/${file}`);
358
+ let controller = (yield Promise.resolve(`${`${this._controllerpath}/${file}`}`).then(s => __importStar(require(s))));
359
+ if (controller[file.replace(".ts", "")]) {
360
+ controller = controller[file.replace(".ts", "")];
361
+ }
362
+ else if (controller.default) {
363
+ controller = controller.default;
364
+ }
365
+ else {
366
+ throw new base_1.InvalidConfigException(BaseChyz.t("Invalid Controller"));
367
+ }
368
+ // This is our instantiated class
369
+ const instance = new controller();
370
+ BaseChyz.controllers.push(instance);
371
+ // The prefix saved to our controller
372
+ const prefix = Reflect.getMetadata('prefix', controller);
373
+ // Our `routes` array containing all our routes for this controller
374
+ const routes = Reflect.getMetadata('routes', controller);
375
+ BaseChyz.debug("Controller load ", controller.name, `(${prefix})`);
376
+ if (routes) {
377
+ routes.forEach(route => {
378
+ let actionId = (route.path == "/" || route.path == "") ? instance.defaultAction : route.path;
379
+ route.id = actionId;
380
+ BaseChyz.debug("Controller route Path", prefix + (route.path.startsWith("/") ? route.path : `/${route.path}`));
381
+ BaseChyz.propvider[route.requestMethod](prefix + (route.path.startsWith("/") ? route.path : `/${route.path}`), (req, res, next) => __awaiter(this, void 0, void 0, function* () {
382
+ try {
383
+ BaseChyz.debug(`Call Request id ${actionId}`);
384
+ http_request_body("Request body " + JSON.stringify(req.body));
385
+ http_request_headers("Request header " + JSON.stringify(req.headers));
386
+ yield instance.beforeAction(route, req, res);
387
+ next();
388
+ }
389
+ catch (e) {
390
+ BaseChyz.error(e);
391
+ if (e instanceof base_1.BaseError) {
392
+ res.status((e === null || e === void 0 ? void 0 : e.statusCode) || 500);
393
+ res.json(e.toJSON());
394
+ }
395
+ else {
396
+ res.json(e);
397
+ }
398
+ // next(e)
399
+ }
400
+ }), (req, res, next) => __awaiter(this, void 0, void 0, function* () {
401
+ try {
402
+ // @ts-ignore
403
+ BaseChyz.debug("Request ID ", req.reqId);
404
+ // @ts-ignore
405
+ yield instance[route.methodName](req, res, next);
406
+ instance.afterAction(route, req, res);
407
+ }
408
+ catch (e) {
409
+ BaseChyz.error(e);
410
+ if (e instanceof base_1.BaseError) {
411
+ res.status(e.statusCode || 500);
412
+ res.json(e.toJSON());
413
+ }
414
+ else {
415
+ res.json(e);
416
+ }
417
+ }
418
+ }));
419
+ });
420
+ }
421
+ }
422
+ });
423
+ }
424
+ middleware() {
425
+ var _a;
426
+ BaseChyz.propvider.use(bodyParser.json({ limit: '1mb' }));
427
+ BaseChyz.propvider.use(bodyParser.urlencoded({ limit: '1mb', extended: true })); // support encoded bodies
428
+ BaseChyz.propvider.use(methodOverride());
429
+ BaseChyz.propvider.use(cors());
430
+ //
431
+ // // CORS
432
+ // BaseChyz.express.use(function (req: any, res: Response, next: any) {
433
+ // // @ts-ignore
434
+ // req.reqId = Utils.uniqueId("chyzzzz_")
435
+ // res.setHeader('Content-Type', 'application/json');
436
+ // res.setHeader("Access-Control-Allow-Origin", "*");
437
+ // res.setHeader("Access-Control-Allow-Credentials", "true");
438
+ // res.setHeader("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT");
439
+ // res.setHeader("Access-Control-Allow-Headers", "Access-Control-Allow-Origin,Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers,Authorization");
440
+ // next();
441
+ // });
442
+ //
443
+ // compress all responses
444
+ const shouldCompress = (req, res) => {
445
+ // don't compress responses explicitly asking not
446
+ if (req.headers["x-no-compression"] || res.getHeader('Content-Type') === 'text/event-stream') {
447
+ return false;
448
+ }
449
+ // use compression filter function
450
+ return compression.filter(req, res);
451
+ };
452
+ BaseChyz.propvider.use(compression({ filter: shouldCompress }));
453
+ //
454
+ // //static file path
455
+ if (this.config.staticFilePath) {
456
+ BaseChyz.info('Static file path', this.config.staticFilePath);
457
+ BaseChyz.propvider.use(express_1.default.static(this.config.staticFilePath));
458
+ }
459
+ //Middlewares
460
+ for (const middleware1 of Object.keys(BaseChyz.middlewares)) {
461
+ if ((_a = BaseChyz.middlewares[middleware1]) === null || _a === void 0 ? void 0 : _a.keycloak) {
462
+ let keycloak = BaseChyz.middlewares[middleware1].keycloak;
463
+ BaseChyz.propvider.use(keycloak.middleware(BaseChyz.middlewares[middleware1].config));
464
+ }
465
+ else {
466
+ BaseChyz.propvider.use(BaseChyz.middlewares[middleware1]);
467
+ }
468
+ }
469
+ BaseChyz.propvider.use(this.errorResponder);
470
+ BaseChyz.propvider.use(this.errorHandler);
471
+ BaseChyz.EventEmitter.emit(CEvents_1.CEvents.ON_MIDDLEWARE, this);
472
+ }
473
+ Start() {
474
+ var _a, _b;
475
+ BaseChyz.info("Express Server Starting");
476
+ BaseChyz.EventEmitter.emit(CEvents_1.CEvents.ON_BEFORE_START, this);
477
+ if ((_a = this.config) === null || _a === void 0 ? void 0 : _a.ssl) {
478
+ BaseChyz.httpServer = (0, https_1.createServer)((_b = this.config) === null || _b === void 0 ? void 0 : _b.ssl, BaseChyz.propvider);
479
+ BaseChyz.httpServer.listen(this._port, () => {
480
+ BaseChyz.info("Express Server Start ");
481
+ BaseChyz.info(`Liten Port ${this._port}`);
482
+ BaseChyz.info(`https://localhost:${this._port}`);
483
+ BaseChyz.info(`https://${ip.address()}:${this._port}`);
484
+ BaseChyz.EventEmitter.emit(CEvents_1.CEvents.ON_START, this);
485
+ });
486
+ }
487
+ else {
488
+ BaseChyz.httpServer = (0, http_1.createServer)(BaseChyz.propvider);
489
+ BaseChyz.propvider.listen(this._port, () => {
490
+ BaseChyz.info("Express Server Start ");
491
+ BaseChyz.info(`Liten Port ${this._port}`);
492
+ BaseChyz.info(`http://localhost:${this._port}`);
493
+ BaseChyz.info(`http://${ip.address()}:${this._port}`);
494
+ BaseChyz.EventEmitter.emit(CEvents_1.CEvents.ON_START, this);
495
+ });
496
+ }
497
+ return this;
498
+ }
499
+ }
500
+ BaseChyz.propvider = Server;
501
+ BaseChyz.date = dayjs;
502
+ BaseChyz._validate = validate;
503
+ BaseChyz.controllers = [];
504
+ BaseChyz.components = {};
505
+ BaseChyz.middlewares = {};
506
+ BaseChyz._EventEmitter = em;
507
+ exports.default = BaseChyz;