starta.microservice 0.1.2209

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 (94) hide show
  1. package/lib/Exception.d.ts +21 -0
  2. package/lib/Exception.js +56 -0
  3. package/lib/Exception.js.map +1 -0
  4. package/lib/adapters/aws/index.d.ts +5 -0
  5. package/lib/adapters/aws/index.js +15 -0
  6. package/lib/adapters/aws/index.js.map +1 -0
  7. package/lib/adapters/database/DBScripts/BaseMigration.d.ts +11 -0
  8. package/lib/adapters/database/DBScripts/BaseMigration.js +12 -0
  9. package/lib/adapters/database/DBScripts/BaseMigration.js.map +1 -0
  10. package/lib/adapters/database/DBScripts/DBInitialise.d.ts +4 -0
  11. package/lib/adapters/database/DBScripts/DBInitialise.js +22 -0
  12. package/lib/adapters/database/DBScripts/DBInitialise.js.map +1 -0
  13. package/lib/adapters/database/index.d.ts +25 -0
  14. package/lib/adapters/database/index.js +88 -0
  15. package/lib/adapters/database/index.js.map +1 -0
  16. package/lib/adapters/logger/index.d.ts +14 -0
  17. package/lib/adapters/logger/index.js +113 -0
  18. package/lib/adapters/logger/index.js.map +1 -0
  19. package/lib/adapters/rabbitmq/index.d.ts +17 -0
  20. package/lib/adapters/rabbitmq/index.js +145 -0
  21. package/lib/adapters/rabbitmq/index.js.map +1 -0
  22. package/lib/adapters/redisService/Listener.d.ts +10 -0
  23. package/lib/adapters/redisService/Listener.js +35 -0
  24. package/lib/adapters/redisService/Listener.js.map +1 -0
  25. package/lib/adapters/redisService/Publisher.d.ts +7 -0
  26. package/lib/adapters/redisService/Publisher.js +38 -0
  27. package/lib/adapters/redisService/Publisher.js.map +1 -0
  28. package/lib/adapters/redisService/RedisAdapter.d.ts +29 -0
  29. package/lib/adapters/redisService/RedisAdapter.js +161 -0
  30. package/lib/adapters/redisService/RedisAdapter.js.map +1 -0
  31. package/lib/adapters/redisService/index.d.ts +71 -0
  32. package/lib/adapters/redisService/index.js +337 -0
  33. package/lib/adapters/redisService/index.js.map +1 -0
  34. package/lib/adapters/redisService/types.d.ts +14 -0
  35. package/lib/adapters/redisService/types.js +3 -0
  36. package/lib/adapters/redisService/types.js.map +1 -0
  37. package/lib/config.d.ts +103 -0
  38. package/lib/config.js +126 -0
  39. package/lib/config.js.map +1 -0
  40. package/lib/entities/Account.d.ts +191 -0
  41. package/lib/entities/Account.js +62 -0
  42. package/lib/entities/Account.js.map +1 -0
  43. package/lib/entities/Base.d.ts +29 -0
  44. package/lib/entities/Base.js +62 -0
  45. package/lib/entities/Base.js.map +1 -0
  46. package/lib/entities/Version.d.ts +6 -0
  47. package/lib/entities/Version.js +10 -0
  48. package/lib/entities/Version.js.map +1 -0
  49. package/lib/entities/types/index.d.ts +108 -0
  50. package/lib/entities/types/index.js +3 -0
  51. package/lib/entities/types/index.js.map +1 -0
  52. package/lib/helpers/index.d.ts +24 -0
  53. package/lib/helpers/index.js +151 -0
  54. package/lib/helpers/index.js.map +1 -0
  55. package/lib/repositories/Repository.d.ts +39 -0
  56. package/lib/repositories/Repository.js +403 -0
  57. package/lib/repositories/Repository.js.map +1 -0
  58. package/lib/repositories/index.d.ts +6 -0
  59. package/lib/repositories/index.js +16 -0
  60. package/lib/repositories/index.js.map +1 -0
  61. package/lib/repositories/types/AggregateOptions.d.ts +4 -0
  62. package/lib/repositories/types/AggregateOptions.js +6 -0
  63. package/lib/repositories/types/AggregateOptions.js.map +1 -0
  64. package/lib/repositories/types/FindOptions.d.ts +16 -0
  65. package/lib/repositories/types/FindOptions.js +6 -0
  66. package/lib/repositories/types/FindOptions.js.map +1 -0
  67. package/lib/repositories/types/IQuery.d.ts +4 -0
  68. package/lib/repositories/types/IQuery.js +3 -0
  69. package/lib/repositories/types/IQuery.js.map +1 -0
  70. package/lib/repositories/types/JoinOptions.d.ts +8 -0
  71. package/lib/repositories/types/JoinOptions.js +6 -0
  72. package/lib/repositories/types/JoinOptions.js.map +1 -0
  73. package/lib/services/ServiceExecutor.d.ts +16 -0
  74. package/lib/services/ServiceExecutor.js +169 -0
  75. package/lib/services/ServiceExecutor.js.map +1 -0
  76. package/lib/services/ServiceExecutorHandler.d.ts +13 -0
  77. package/lib/services/ServiceExecutorHandler.js +323 -0
  78. package/lib/services/ServiceExecutorHandler.js.map +1 -0
  79. package/lib/services/ServiceFactoryBase.d.ts +15 -0
  80. package/lib/services/ServiceFactoryBase.js +11 -0
  81. package/lib/services/ServiceFactoryBase.js.map +1 -0
  82. package/lib/services/ServiceHandlerBase.d.ts +30 -0
  83. package/lib/services/ServiceHandlerBase.js +113 -0
  84. package/lib/services/ServiceHandlerBase.js.map +1 -0
  85. package/lib/services/dataSelectors.d.ts +38 -0
  86. package/lib/services/dataSelectors.js +60 -0
  87. package/lib/services/dataSelectors.js.map +1 -0
  88. package/lib/timeProvider.d.ts +14 -0
  89. package/lib/timeProvider.js +37 -0
  90. package/lib/timeProvider.js.map +1 -0
  91. package/lib/types/index.d.ts +72 -0
  92. package/lib/types/index.js +14 -0
  93. package/lib/types/index.js.map +1 -0
  94. package/package.json +51 -0
@@ -0,0 +1,169 @@
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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
12
+ if (kind === "m") throw new TypeError("Private method is not writable");
13
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
14
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
15
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
16
+ };
17
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
18
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
19
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
20
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ var _ServiceExecutor_redis, _ServiceExecutor_logger, _ServiceExecutor_rabbit;
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ const cors_1 = __importDefault(require("cors"));
28
+ const multer_1 = __importDefault(require("multer"));
29
+ const multer_s3_1 = __importDefault(require("multer-s3"));
30
+ const config_1 = __importDefault(require("../config"));
31
+ const body_parser_1 = __importDefault(require("body-parser"));
32
+ const aws_1 = __importDefault(require("../adapters/aws"));
33
+ const dataSelectors_1 = __importDefault(require("./dataSelectors"));
34
+ const ServiceExecutorHandler_1 = __importDefault(require("./ServiceExecutorHandler"));
35
+ const upload = (0, multer_1.default)({
36
+ storage: (0, multer_s3_1.default)({
37
+ s3: aws_1.default.getS3(),
38
+ bucket: config_1.default.aws.bucketname,
39
+ metadata: function (req, file, cb) {
40
+ cb(null, file);
41
+ },
42
+ key: function (req, file, cb) {
43
+ const { _login } = req.params;
44
+ cb(null, `uploads/${_login}/${Date.now().toString()}`);
45
+ }
46
+ }),
47
+ limits: {
48
+ fileSize: 25 * 1024 * 1024 * 1024,
49
+ }
50
+ });
51
+ class ServiceExecutor {
52
+ constructor(redis, logger, rabbit, servicesList) {
53
+ _ServiceExecutor_redis.set(this, void 0);
54
+ _ServiceExecutor_logger.set(this, void 0);
55
+ _ServiceExecutor_rabbit.set(this, void 0);
56
+ __classPrivateFieldSet(this, _ServiceExecutor_redis, redis, "f");
57
+ __classPrivateFieldSet(this, _ServiceExecutor_logger, logger, "f");
58
+ __classPrivateFieldSet(this, _ServiceExecutor_rabbit, rabbit, "f");
59
+ this.serviceFactoriesMap = servicesList.serviceFactories;
60
+ this.serviceEventNames = servicesList.serviceEventNames;
61
+ }
62
+ createExchanges() {
63
+ return __awaiter(this, void 0, void 0, function* () {
64
+ const exchanges = Object.keys(this.serviceEventNames)
65
+ .reduce((result, current) => [...result, ...this.serviceEventNames[current]], []);
66
+ yield __classPrivateFieldGet(this, _ServiceExecutor_rabbit, "f").createExchanges(exchanges);
67
+ });
68
+ }
69
+ createHandlers(app, rootUri) {
70
+ Object.keys(this.serviceFactoriesMap).forEach(serviceFolder => {
71
+ Object.keys(this.serviceFactoriesMap[serviceFolder]).forEach(serviceName => {
72
+ const serviceFactory = this.serviceFactoriesMap[serviceFolder][serviceName];
73
+ const serviceDescription = serviceFactory.getServiceDescription();
74
+ if (serviceDescription.getRequestMethod() === undefined) {
75
+ return;
76
+ }
77
+ const requestUri = rootUri + serviceDescription.getRequestPathTemplate();
78
+ const pipeline = [requestUri];
79
+ if (config_1.default.blockAccess) {
80
+ pipeline.push((request, response, next) => __awaiter(this, void 0, void 0, function* () {
81
+ if (request.originalRequest.path === '/api/healthcheck' || (yield __classPrivateFieldGet(this, _ServiceExecutor_redis, "f").isAccessForIpEnabled(dataSelectors_1.default.selectClientIp(request).clientIp))) {
82
+ next();
83
+ }
84
+ else {
85
+ response.status(403).send("Ask Eugene. If you don't know Eugene - then you are not allowed to open this website");
86
+ }
87
+ }));
88
+ }
89
+ if (serviceDescription.getBodyParser && serviceDescription.getBodyParser() === 'raw') {
90
+ pipeline.push(body_parser_1.default.raw({ type: 'application/json' }));
91
+ }
92
+ else {
93
+ pipeline.push(body_parser_1.default.json({ limit: '10mb' }));
94
+ }
95
+ pipeline.push(body_parser_1.default.urlencoded({
96
+ extended: true,
97
+ limit: '10mb',
98
+ }));
99
+ if (serviceDescription.allowCors && serviceDescription.allowCors()) {
100
+ pipeline.push((0, cors_1.default)());
101
+ }
102
+ if (serviceDescription.getFileUploadSettings) {
103
+ const multerSettings = serviceDescription.getFileUploadSettings();
104
+ if (multerSettings.type === "single") {
105
+ pipeline.push(upload.single(multerSettings.fieldName));
106
+ }
107
+ }
108
+ pipeline.push(this.createRequestHandler(serviceFactory));
109
+ app[serviceDescription.getRequestMethod()].apply(app, pipeline);
110
+ });
111
+ });
112
+ app.get(rootUri + '_schema', (request, response) => {
113
+ if (request.host !== 'localhost') {
114
+ __classPrivateFieldGet(this, _ServiceExecutor_logger, "f").generic.error(`Somebody tries to get the schema. Url: ${request.url}, Method: ${request.method}`);
115
+ response.status(404).send();
116
+ }
117
+ const controllers = [];
118
+ Object.keys(this.serviceFactoriesMap).forEach(serviceFolder => {
119
+ const controller = {
120
+ name: serviceFolder,
121
+ services: [],
122
+ };
123
+ controllers.push(controller);
124
+ Object.keys(this.serviceFactoriesMap[serviceFolder]).forEach(serviceName => {
125
+ const serviceFactory = this.serviceFactoriesMap[serviceFolder][serviceName];
126
+ const serviceDescription = serviceFactory.getServiceDescription();
127
+ if (serviceDescription.getRequestMethod() === undefined) {
128
+ return;
129
+ }
130
+ const service = {
131
+ name: serviceName,
132
+ url: rootUri + serviceDescription.getRequestPathTemplate(),
133
+ method: serviceDescription.getRequestMethod(),
134
+ allowAnonymous: serviceDescription.allowAnonymous(),
135
+ isAuthorized: serviceDescription.isAuthorized(),
136
+ validationRules: (serviceDescription.getValidationRules || serviceDescription.getValidationRulesPerContext || (() => null))(),
137
+ endpointContext: serviceDescription.getEndpointContext(),
138
+ requiredPermissionsSchemas: serviceDescription.getRequiredPermissions(),
139
+ fileUploadSettings: serviceDescription.getFileUploadSettings && serviceDescription.getFileUploadSettings(),
140
+ allowCors: serviceDescription.allowCors && serviceDescription.allowCors(),
141
+ };
142
+ controller.services.push(service);
143
+ });
144
+ });
145
+ return response
146
+ .status(request.method === 'POST' ? 201 : 200)
147
+ .send(controllers);
148
+ });
149
+ app.all(rootUri + '*', (request, response) => {
150
+ __classPrivateFieldGet(this, _ServiceExecutor_logger, "f").generic.warn(`Call to not found route. Url: ${request.url}, Method: ${request.method}`);
151
+ response.status(404).send();
152
+ });
153
+ }
154
+ executeService(serviceFolder, serviceName, requestData, request, permissions) {
155
+ return __awaiter(this, void 0, void 0, function* () {
156
+ const serviceFactory = this.serviceFactoriesMap[serviceFolder][serviceName];
157
+ return yield new ServiceExecutorHandler_1.default(__classPrivateFieldGet(this, _ServiceExecutor_redis, "f"), __classPrivateFieldGet(this, _ServiceExecutor_logger, "f"), serviceFactory.getServiceDescription(), serviceFactory, this).executeRequest(request, requestData, permissions);
158
+ });
159
+ }
160
+ createRequestHandler(serviceFactory) {
161
+ const serviceDescription = serviceFactory.getServiceDescription();
162
+ return (request, response) => __awaiter(this, void 0, void 0, function* () {
163
+ return yield new ServiceExecutorHandler_1.default(__classPrivateFieldGet(this, _ServiceExecutor_redis, "f"), __classPrivateFieldGet(this, _ServiceExecutor_logger, "f"), serviceDescription, serviceFactory, this).execute(request, response);
164
+ });
165
+ }
166
+ }
167
+ _ServiceExecutor_redis = new WeakMap(), _ServiceExecutor_logger = new WeakMap(), _ServiceExecutor_rabbit = new WeakMap();
168
+ exports.default = ServiceExecutor;
169
+ //# sourceMappingURL=ServiceExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceExecutor.js","sourceRoot":"","sources":["../../src/services/ServiceExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { Response, Request } from 'express';
2
+ import BusinessLogger from '../adapters/logger';
3
+ import Redis from '../adapters/redisService';
4
+ import { IAuthorizedRequest, IServiceFactory, IServiceDescription, IServiceExecutor, PermissionsMap } from '../types';
5
+ declare class ServiceExecutorHandler {
6
+ #private;
7
+ constructor(redis: Redis, logger: BusinessLogger, serviceDescription: IServiceDescription, serviceFactory: IServiceFactory, serviceExecutor: IServiceExecutor);
8
+ execute(originalRequest: Request, response: Response): Promise<any>;
9
+ private checkPermissions;
10
+ private checkAuth;
11
+ executeRequest(request?: IAuthorizedRequest, requestData?: any, permissions?: PermissionsMap): Promise<any>;
12
+ }
13
+ export default ServiceExecutorHandler;
@@ -0,0 +1,323 @@
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 __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
35
+ if (kind === "m") throw new TypeError("Private method is not writable");
36
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
37
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
38
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
39
+ };
40
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
41
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
42
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
43
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
44
+ };
45
+ var __importDefault = (this && this.__importDefault) || function (mod) {
46
+ return (mod && mod.__esModule) ? mod : { "default": mod };
47
+ };
48
+ var _ServiceExecutorHandler_redis, _ServiceExecutorHandler_logger, _ServiceExecutorHandler_serviceDescription, _ServiceExecutorHandler_serviceFactory, _ServiceExecutorHandler_serviceExecutor;
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ const authorization = __importStar(require("auth-header"));
51
+ const covalidation = __importStar(require("co.validation"));
52
+ const path = __importStar(require("path"));
53
+ const helpers_1 = __importDefault(require("../helpers"));
54
+ const Exception_1 = __importDefault(require("../Exception"));
55
+ const timeProvider_1 = __importDefault(require("../timeProvider"));
56
+ const Account_1 = __importDefault(require("../entities/Account"));
57
+ const config_1 = __importDefault(require("../config"));
58
+ const aws_1 = __importDefault(require("../adapters/aws"));
59
+ const dataSelectors_1 = __importDefault(require("./dataSelectors"));
60
+ class ServiceExecutorHandler {
61
+ constructor(redis, logger, serviceDescription, serviceFactory, serviceExecutor) {
62
+ _ServiceExecutorHandler_redis.set(this, void 0);
63
+ _ServiceExecutorHandler_logger.set(this, void 0);
64
+ _ServiceExecutorHandler_serviceDescription.set(this, void 0);
65
+ _ServiceExecutorHandler_serviceFactory.set(this, void 0);
66
+ _ServiceExecutorHandler_serviceExecutor.set(this, void 0);
67
+ __classPrivateFieldSet(this, _ServiceExecutorHandler_logger, logger, "f");
68
+ __classPrivateFieldSet(this, _ServiceExecutorHandler_redis, redis, "f");
69
+ __classPrivateFieldSet(this, _ServiceExecutorHandler_serviceDescription, serviceDescription, "f");
70
+ __classPrivateFieldSet(this, _ServiceExecutorHandler_serviceExecutor, serviceExecutor, "f");
71
+ __classPrivateFieldSet(this, _ServiceExecutorHandler_serviceFactory, serviceFactory, "f");
72
+ }
73
+ execute(originalRequest, response) {
74
+ var _a, _b, _c, _d;
75
+ return __awaiter(this, void 0, void 0, function* () {
76
+ const request = {
77
+ originalRequest,
78
+ contextType: '',
79
+ currentOrgPermissions: {},
80
+ session: null
81
+ };
82
+ __classPrivateFieldSet(this, _ServiceExecutorHandler_logger, __classPrivateFieldGet(this, _ServiceExecutorHandler_logger, "f").withParams({
83
+ clientIp: (_a = dataSelectors_1.default.selectClientIp(request)) === null || _a === void 0 ? void 0 : _a.clientIp,
84
+ clientCountry: (_b = dataSelectors_1.default.selectClientCountry(request)) === null || _b === void 0 ? void 0 : _b.clientCountry,
85
+ clientUA: (_c = dataSelectors_1.default.selectUserAgent(request)) === null || _c === void 0 ? void 0 : _c.userAgent,
86
+ request: {
87
+ url: request.originalRequest.url,
88
+ method: request.originalRequest.method,
89
+ }
90
+ }), "f");
91
+ try {
92
+ if (__classPrivateFieldGet(this, _ServiceExecutorHandler_serviceDescription, "f").isAuthorized()) {
93
+ yield this.checkAuth(request, response, __classPrivateFieldGet(this, _ServiceExecutorHandler_serviceDescription, "f").allowAnonymous());
94
+ }
95
+ if (request.originalRequest.method !== 'GET' && (__classPrivateFieldGet(this, _ServiceExecutorHandler_serviceDescription, "f").getBodyParser && __classPrivateFieldGet(this, _ServiceExecutorHandler_serviceDescription, "f").getBodyParser()) !== 'raw') {
96
+ request.originalRequest.body.createdAt = timeProvider_1.default.jsDate();
97
+ request.originalRequest.body.createdBy = ((_d = request.session) === null || _d === void 0 ? void 0 : _d.account.login) || '%anonymous';
98
+ }
99
+ if (request.session) {
100
+ yield this.checkPermissions(request);
101
+ }
102
+ const executionResult = yield this.executeRequest(request);
103
+ if (executionResult === null || executionResult === void 0 ? void 0 : executionResult._cookies) {
104
+ executionResult._cookies.forEach(cookie => response.cookie(cookie.name, cookie.value, cookie.options));
105
+ delete executionResult._cookies;
106
+ }
107
+ if (executionResult === null || executionResult === void 0 ? void 0 : executionResult._clearCookies) {
108
+ executionResult._clearCookies.forEach(cookie => response.clearCookie(cookie.name, cookie.options));
109
+ delete executionResult._clearCookies;
110
+ }
111
+ if ((executionResult === null || executionResult === void 0 ? void 0 : executionResult._filePath) && executionResult._filePathToReplace) {
112
+ return response.download(path.resolve(executionResult._filePath), executionResult._filePathToReplace);
113
+ }
114
+ if (executionResult === null || executionResult === void 0 ? void 0 : executionResult._filePath) {
115
+ const s3 = aws_1.default.getS3();
116
+ var options = {
117
+ Bucket: config_1.default.aws.bucketname,
118
+ Key: executionResult === null || executionResult === void 0 ? void 0 : executionResult._filePath,
119
+ };
120
+ try {
121
+ yield s3.headObject(options).promise();
122
+ response.set('Cache-control', 'public, max-age=100000');
123
+ response.attachment(executionResult === null || executionResult === void 0 ? void 0 : executionResult._filePath);
124
+ var fileStream = s3.getObject(options).createReadStream();
125
+ return fileStream.pipe(response);
126
+ }
127
+ catch (error) {
128
+ return response
129
+ .status(404)
130
+ .send(null);
131
+ }
132
+ }
133
+ if (executionResult === null || executionResult === void 0 ? void 0 : executionResult._fileStream) {
134
+ return executionResult._fileStream.pipe(response);
135
+ }
136
+ return response
137
+ .status(request.originalRequest.method === 'POST' ? 201 : 200)
138
+ .send(executionResult);
139
+ }
140
+ catch (err) {
141
+ if (err instanceof Exception_1.default) {
142
+ __classPrivateFieldGet(this, _ServiceExecutorHandler_logger, "f").badRequest(err, request);
143
+ const errorHash = err.toHash();
144
+ delete errorHash.statusCode;
145
+ response.status(err.statusCode || 400).send(errorHash);
146
+ }
147
+ else {
148
+ __classPrivateFieldGet(this, _ServiceExecutorHandler_logger, "f").internalServerError(err, request);
149
+ response.status(500).send(err);
150
+ }
151
+ }
152
+ });
153
+ }
154
+ checkPermissions(request) {
155
+ var _a;
156
+ return __awaiter(this, void 0, void 0, function* () {
157
+ const requestedAccountLogin = request.originalRequest.params._login;
158
+ request.contextType = requestedAccountLogin && (yield __classPrivateFieldGet(this, _ServiceExecutorHandler_redis, "f").getAccountType(requestedAccountLogin));
159
+ const endpointContext = __classPrivateFieldGet(this, _ServiceExecutorHandler_serviceDescription, "f").getEndpointContext();
160
+ if (requestedAccountLogin && !request.contextType) {
161
+ throw new Exception_1.default({
162
+ code: 'NOT_FOUND',
163
+ statusCode: 404,
164
+ });
165
+ }
166
+ if (endpointContext !== 'any' && endpointContext !== request.contextType) {
167
+ throw new Exception_1.default({
168
+ code: 'NOT_FOUND',
169
+ statusCode: 404,
170
+ });
171
+ }
172
+ if (request.contextType == "organization") {
173
+ request.currentOrgPermissions = yield __classPrivateFieldGet(this, _ServiceExecutorHandler_redis, "f").getOrganizationMemberPermissions(requestedAccountLogin, request.session.account.login);
174
+ }
175
+ const requiredPermissionsSchemas = __classPrivateFieldGet(this, _ServiceExecutorHandler_serviceDescription, "f").getRequiredPermissions();
176
+ if (!requiredPermissionsSchemas) {
177
+ return;
178
+ }
179
+ let hasPermissions = false;
180
+ if (requiredPermissionsSchemas.adminonly) {
181
+ hasPermissions = request.session.account.login === 'admin' || !!(yield __classPrivateFieldGet(this, _ServiceExecutorHandler_redis, "f").getAdminPermissions(request.session.account.login));
182
+ }
183
+ else if (request.contextType == "user") {
184
+ if ((_a = requiredPermissionsSchemas.user) === null || _a === void 0 ? void 0 : _a.myaccount) {
185
+ if (request.session.account.login === requestedAccountLogin) {
186
+ hasPermissions = true;
187
+ }
188
+ }
189
+ else {
190
+ hasPermissions = true;
191
+ }
192
+ }
193
+ else if (request.contextType == "organization") {
194
+ if (!requiredPermissionsSchemas.organization) {
195
+ hasPermissions = true;
196
+ }
197
+ else {
198
+ if (request.currentOrgPermissions) {
199
+ let missingPermission = false;
200
+ requiredPermissionsSchemas.organization.forEach(permission => {
201
+ if (!request.currentOrgPermissions[permission]) {
202
+ missingPermission = true;
203
+ }
204
+ });
205
+ hasPermissions = !missingPermission;
206
+ }
207
+ }
208
+ }
209
+ if (!hasPermissions) {
210
+ throw new Exception_1.default({
211
+ code: 'FORBIDDEN',
212
+ statusCode: 403,
213
+ });
214
+ }
215
+ });
216
+ }
217
+ checkAuth(request, response, allowAnonymous) {
218
+ return __awaiter(this, void 0, void 0, function* () {
219
+ const unauthorized = function (e) {
220
+ if (!allowAnonymous) {
221
+ e = e || new Exception_1.default({
222
+ code: 'UNAUTHORIZED',
223
+ statusCode: 401,
224
+ fields: {
225
+ scheme: 'BAD_SCHEME',
226
+ },
227
+ });
228
+ throw e;
229
+ }
230
+ };
231
+ let auth = null;
232
+ if (request.originalRequest.get('authorization')) {
233
+ try {
234
+ auth = authorization.parse(request.originalRequest.get('authorization'));
235
+ }
236
+ catch (e) {
237
+ return unauthorized();
238
+ }
239
+ if (auth.scheme !== 'Basic') {
240
+ return unauthorized();
241
+ }
242
+ }
243
+ if (!auth && request.originalRequest.cookies && request.originalRequest.cookies.Authorization) {
244
+ auth = { token: request.originalRequest.cookies.Authorization };
245
+ }
246
+ if (!auth) {
247
+ return unauthorized();
248
+ }
249
+ const [sessionId] = helpers_1.default.getSessionId(auth.token);
250
+ const sessionData = yield __classPrivateFieldGet(this, _ServiceExecutorHandler_redis, "f").getSession(sessionId);
251
+ if (!sessionData) {
252
+ return unauthorized(new Exception_1.default({
253
+ code: 'UNAUTHORIZED',
254
+ statusCode: 401,
255
+ fields: {
256
+ token: 'BAD_TOKEN',
257
+ },
258
+ }));
259
+ }
260
+ if (sessionData.clientIp !== request.originalRequest.connection.remoteAddress) {
261
+ //this.#logger.generic.warn('WRONG_CLIENT_IP_ADDRESS %s %s', sessionData.clientIp, request.connection.remoteAddress);
262
+ // return Promise.reject(new Exception({
263
+ // code: 'WRONG_CLIENT_IP_ADDRESS',
264
+ // statusCode: 400,
265
+ // fields: {
266
+ // remoteAddress: 'BAD_IP',
267
+ // },
268
+ // }));
269
+ }
270
+ request.session = {
271
+ sessionId,
272
+ account: new Account_1.default(sessionData.account),
273
+ date: timeProvider_1.default.jsDate(),
274
+ };
275
+ if (sessionData.account) {
276
+ response.cookie('Authorization', auth.token, { httpOnly: true, maxAge: sessionData.expirationTime * 1000, domain: new URL(config_1.default.siteUrl).hostname });
277
+ yield __classPrivateFieldGet(this, _ServiceExecutorHandler_redis, "f").resetSessionExpireTimeout(sessionId, sessionData.expirationTime);
278
+ }
279
+ __classPrivateFieldSet(this, _ServiceExecutorHandler_logger, __classPrivateFieldGet(this, _ServiceExecutorHandler_logger, "f").withParams({
280
+ login: request.session.account.login
281
+ }), "f");
282
+ });
283
+ }
284
+ executeRequest(request, requestData = undefined, permissions) {
285
+ return __awaiter(this, void 0, void 0, function* () {
286
+ const serviceHandler = __classPrivateFieldGet(this, _ServiceExecutorHandler_serviceFactory, "f").createHandler(__classPrivateFieldGet(this, _ServiceExecutorHandler_serviceExecutor, "f"), request, __classPrivateFieldGet(this, _ServiceExecutorHandler_logger, "f"));
287
+ if (permissions) {
288
+ serviceHandler.Permissions = permissions;
289
+ }
290
+ if (request) {
291
+ requestData = serviceHandler.selectData();
292
+ }
293
+ let objectRules = null;
294
+ if (__classPrivateFieldGet(this, _ServiceExecutorHandler_serviceDescription, "f").getValidationRules) {
295
+ objectRules = __classPrivateFieldGet(this, _ServiceExecutorHandler_serviceDescription, "f").getValidationRules(request);
296
+ }
297
+ else if (__classPrivateFieldGet(this, _ServiceExecutorHandler_serviceDescription, "f").getValidationRulesPerContext && (request === null || request === void 0 ? void 0 : request.contextType)) {
298
+ objectRules = __classPrivateFieldGet(this, _ServiceExecutorHandler_serviceDescription, "f").getValidationRulesPerContext(request)[request.contextType];
299
+ }
300
+ if (objectRules) {
301
+ const rules = {
302
+ type: 'object',
303
+ rules: objectRules,
304
+ };
305
+ const validationResult = covalidation.createValidation(rules)(requestData);
306
+ if (validationResult.errors) {
307
+ throw new Exception_1.default({
308
+ code: 'FORMAT_ERROR',
309
+ fields: validationResult.errors,
310
+ });
311
+ }
312
+ requestData = validationResult.data;
313
+ }
314
+ //refactor
315
+ serviceHandler.requestData = requestData;
316
+ const executionResult = yield serviceHandler.execute(requestData);
317
+ return executionResult;
318
+ });
319
+ }
320
+ }
321
+ _ServiceExecutorHandler_redis = new WeakMap(), _ServiceExecutorHandler_logger = new WeakMap(), _ServiceExecutorHandler_serviceDescription = new WeakMap(), _ServiceExecutorHandler_serviceFactory = new WeakMap(), _ServiceExecutorHandler_serviceExecutor = new WeakMap();
322
+ exports.default = ServiceExecutorHandler;
323
+ //# sourceMappingURL=ServiceExecutorHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceExecutorHandler.js","sourceRoot":"","sources":["../../src/services/ServiceExecutorHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import Redis from '../adapters/redisService';
2
+ import EntityBase from '../entities/Base';
3
+ import { IServiceDescription, IAuthorizedRequest, IServiceHandler, IServiceFactory, IServiceExecutor } from '../types';
4
+ import ServerLogger from '../adapters/logger';
5
+ import Rabbitmq from '../adapters/rabbitmq';
6
+ import Repositories from '../repositories';
7
+ declare abstract class ServiceFactory<R extends Repositories, T extends EntityBase> implements IServiceFactory {
8
+ protected repositories: R;
9
+ protected redis: Redis;
10
+ protected rabbit: Rabbitmq;
11
+ constructor(repositories: R, redis: Redis, rabbit: Rabbitmq);
12
+ abstract getServiceDescription(): IServiceDescription;
13
+ abstract createHandler(serviceExecutor: IServiceExecutor, request: IAuthorizedRequest, logger: ServerLogger): IServiceHandler;
14
+ }
15
+ export default ServiceFactory;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class ServiceFactory {
4
+ constructor(repositories, redis, rabbit) {
5
+ this.repositories = repositories;
6
+ this.redis = redis;
7
+ this.rabbit = rabbit;
8
+ }
9
+ }
10
+ exports.default = ServiceFactory;
11
+ //# sourceMappingURL=ServiceFactoryBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceFactoryBase.js","sourceRoot":"","sources":["../../src/services/ServiceFactoryBase.ts"],"names":[],"mappings":";;AAQA,MAAe,cAAc;IAK3B,YAAY,YAAe,EAAE,KAAY,EAAE,MAAgB;QACzD,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CAKF;AAED,kBAAe,cAAc,CAAC"}
@@ -0,0 +1,30 @@
1
+ import Repositories from '../repositories';
2
+ import Redis from '../adapters/redisService';
3
+ import EntityBase from '../entities/Base';
4
+ import { IAuthorizedRequest, IServiceHandler, IServiceExecutor, PermissionsMap } from '../types';
5
+ import Rabbitmq from '../adapters/rabbitmq';
6
+ import ServerLogger from '../adapters/logger';
7
+ declare abstract class ServiceHandlerBase<R extends Repositories, T extends EntityBase> implements IServiceHandler {
8
+ protected repositories: R;
9
+ protected redis: Redis;
10
+ protected rabbit: Rabbitmq;
11
+ protected logger: ServerLogger;
12
+ protected request?: IAuthorizedRequest;
13
+ protected serviceExecutor: IServiceExecutor;
14
+ protected permissions?: PermissionsMap;
15
+ constructor(repositories: R, redis: Redis, rabbit: Rabbitmq, serviceExecutor: IServiceExecutor, logger: ServerLogger, request?: IAuthorizedRequest, permissions?: PermissionsMap);
16
+ requestData: any;
17
+ get Permissions(): PermissionsMap;
18
+ set Permissions(permissions: PermissionsMap);
19
+ abstract selectData(): Object;
20
+ abstract execute(data: any): Promise<any>;
21
+ protected simpleHandleRevisions(entityClone: any, entity: any): any;
22
+ protected handleRevisions(entityClone: any, entity: any, options: any): any;
23
+ private _emitEvent;
24
+ protected _insert(entityToInsert: any): Promise<T>;
25
+ protected abstract getEntityName(): string;
26
+ protected abstract getMainRepository(): string;
27
+ protected _update(entityUnique: any, update: (input: T) => Promise<void>, options?: any): Promise<T>;
28
+ protected _updateMulti(entityUniques: any, update: (input: T) => Promise<void>, options?: any): Promise<T[]>;
29
+ }
30
+ export default ServiceHandlerBase;