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,113 @@
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
+ const helpers_1 = __importDefault(require("../helpers"));
16
+ const Exception_1 = __importDefault(require("../Exception"));
17
+ const timeProvider_1 = __importDefault(require("../timeProvider"));
18
+ const uniquify = helpers_1.default.uniquify;
19
+ const clone = helpers_1.default.clone;
20
+ const diffPatcher = helpers_1.default.diffPatcher();
21
+ const actions = {
22
+ created: 'CREATED',
23
+ updated: 'UPDATED',
24
+ };
25
+ class ServiceHandlerBase {
26
+ constructor(repositories, redis, rabbit, serviceExecutor, logger, request, permissions) {
27
+ this.repositories = repositories;
28
+ this.request = request;
29
+ this.logger = logger;
30
+ this.redis = redis;
31
+ this.serviceExecutor = serviceExecutor;
32
+ this.rabbit = rabbit;
33
+ }
34
+ get Permissions() {
35
+ var _a;
36
+ return this.permissions || ((_a = this.request) === null || _a === void 0 ? void 0 : _a.currentOrgPermissions);
37
+ }
38
+ set Permissions(permissions) {
39
+ this.permissions = permissions;
40
+ }
41
+ simpleHandleRevisions(entityClone, entity) {
42
+ var _a, _b, _c, _d, _e, _f, _g;
43
+ const entityReference = entity;
44
+ if (entity.revisions) {
45
+ entityReference.createdAt = ((_b = (_a = this.request) === null || _a === void 0 ? void 0 : _a.session) === null || _b === void 0 ? void 0 : _b.date) || ((_c = this.requestData) === null || _c === void 0 ? void 0 : _c.createdAt) || timeProvider_1.default.jsDate();
46
+ entityReference.createdBy = ((_f = (_e = (_d = this.request) === null || _d === void 0 ? void 0 : _d.session) === null || _e === void 0 ? void 0 : _e.account) === null || _f === void 0 ? void 0 : _f.login) || ((_g = this.requestData) === null || _g === void 0 ? void 0 : _g.createdBy) || '%system';
47
+ }
48
+ const delta = diffPatcher.diff(entityClone, entity);
49
+ if (!entityClone.originalRevision && entity.revisions) {
50
+ entityReference.originalRevision = entityClone;
51
+ }
52
+ if (entity.revisions) {
53
+ entity.revisions.push(delta);
54
+ }
55
+ return delta;
56
+ }
57
+ handleRevisions(entityClone, entity, options) {
58
+ return this.simpleHandleRevisions(entityClone, entity);
59
+ }
60
+ _emitEvent(eventType, eventData) {
61
+ return this.rabbit.emitEvent(eventType, eventData);
62
+ }
63
+ _insert(entityToInsert) {
64
+ return __awaiter(this, void 0, void 0, function* () {
65
+ const createdEntity = yield this.repositories.getRepository(this.getMainRepository())._insert(entityToInsert);
66
+ this._emitEvent(`ENTITY:${this.getEntityName()}:${actions.created}`, {
67
+ entity: createdEntity,
68
+ });
69
+ return createdEntity;
70
+ });
71
+ }
72
+ _update(entityUnique, update, options = null) {
73
+ return __awaiter(this, void 0, void 0, function* () {
74
+ const multiResult = yield this._updateMulti([entityUnique], update, options);
75
+ return multiResult[0];
76
+ });
77
+ }
78
+ _updateMulti(entityUniques, update, options) {
79
+ return __awaiter(this, void 0, void 0, function* () {
80
+ const repository = this.repositories.getRepository(this.getMainRepository());
81
+ const resourceIds = entityUniques.map(entityUnique => repository.entityUniqueToString(entityUnique)).sort();
82
+ if (uniquify(resourceIds).length !== resourceIds.length) {
83
+ return Promise.reject(new Exception_1.default({
84
+ code: 'UNALBE_TO_UPDATE_ONE_OBJECT_AT_THE_SAME_TIME',
85
+ }));
86
+ }
87
+ const result = yield this.redis.getLocker().using(resourceIds, 10000, () => __awaiter(this, void 0, void 0, function* () {
88
+ const entities = yield repository.findByUniqueKeys(entityUniques);
89
+ if (entities.length !== entityUniques.length) {
90
+ throw new Exception_1.default({
91
+ code: 'NOT_FOUND',
92
+ });
93
+ }
94
+ const clones = entities.map(clone);
95
+ const sortedEntityUniques = clones.map(e => repository.getUniqueValue(e));
96
+ yield Promise.all(entities.map(e => update(e)));
97
+ const resultArray = [];
98
+ yield Promise.all(entities.map((entity, index) => __awaiter(this, void 0, void 0, function* () {
99
+ const delta = this.handleRevisions(clones[index], entity, options);
100
+ const result = yield repository._update(entity, sortedEntityUniques[index]);
101
+ if (result) {
102
+ resultArray.push(entity);
103
+ this._emitEvent(`ENTITY:${this.getEntityName()}:${actions.updated}`, { entity, delta });
104
+ }
105
+ })));
106
+ return entities;
107
+ }));
108
+ return result;
109
+ });
110
+ }
111
+ }
112
+ exports.default = ServiceHandlerBase;
113
+ //# sourceMappingURL=ServiceHandlerBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ServiceHandlerBase.js","sourceRoot":"","sources":["../../src/services/ServiceHandlerBase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /// <reference types="multer" />
2
+ import { IAuthorizedRequest } from '../types';
3
+ declare const _default: {
4
+ selectBody: (req: IAuthorizedRequest) => any;
5
+ selectLanguageCookie: (req: IAuthorizedRequest) => {
6
+ language?: string;
7
+ };
8
+ selectBodyAsProp: (req: IAuthorizedRequest) => {
9
+ body: any;
10
+ };
11
+ selectFileAsProp: (req: IAuthorizedRequest) => {
12
+ file: Express.Multer.File;
13
+ };
14
+ selectFile: (req: IAuthorizedRequest) => Express.Multer.File;
15
+ selectStripeSignature: (req: IAuthorizedRequest) => {
16
+ stripeSignature: string | string[];
17
+ };
18
+ selectClientIp: (req: IAuthorizedRequest) => {
19
+ clientIp: string | string[];
20
+ };
21
+ selectUserAgent: (req: IAuthorizedRequest) => {
22
+ userAgent: string;
23
+ };
24
+ selectClientCountry: (req: IAuthorizedRequest) => {
25
+ clientCountry: string | string[];
26
+ };
27
+ selectQuery: (req: IAuthorizedRequest) => {};
28
+ selectLoginFromSession: (req: IAuthorizedRequest) => {
29
+ login: string;
30
+ };
31
+ selectParams: (req: IAuthorizedRequest) => import("express-serve-static-core").ParamsDictionary;
32
+ selectSession: (req: IAuthorizedRequest) => import("../types").ISessionData;
33
+ selectRemarketingUrls: (req: IAuthorizedRequest) => {
34
+ remarketingUrls: any;
35
+ };
36
+ composeSelectors(...args: any[]): any;
37
+ };
38
+ export default _default;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = {
4
+ selectBody: (req) => req.originalRequest.body,
5
+ selectLanguageCookie: (req) => ({ language: req.originalRequest.cookies.language }),
6
+ selectBodyAsProp: (req) => ({ body: req.originalRequest.body }),
7
+ selectFileAsProp: (req) => ({ file: req.originalRequest.file }),
8
+ selectFile: (req) => req.originalRequest.file,
9
+ selectStripeSignature: (req) => ({ stripeSignature: req.originalRequest.headers['stripe-signature'] }),
10
+ selectClientIp: (req) => ({ clientIp: req.originalRequest.headers['cf-connecting-ip'] || req.originalRequest.connection.remoteAddress }),
11
+ selectUserAgent: (req) => ({ userAgent: req.originalRequest.headers['user-agent'] }),
12
+ selectClientCountry: (req) => {
13
+ const country = req.originalRequest.headers['CF-IPCountry'] || req.originalRequest.headers['cf-ipcountry'];
14
+ return ({ clientCountry: country || 'UA' });
15
+ },
16
+ selectQuery: (req) => {
17
+ if (!req.originalRequest.query) {
18
+ return null;
19
+ }
20
+ const recomposedQuery = Object.keys(req.originalRequest.query).reduce((result, key) => {
21
+ if (key.indexOf('.') !== -1) {
22
+ const keyPath = key.split('.');
23
+ let currentNode = result;
24
+ keyPath.forEach((keyPathItem, index) => {
25
+ if (!currentNode[keyPathItem]) {
26
+ currentNode[keyPathItem] = keyPath.length - 1 === index
27
+ ? req.originalRequest.query[key]
28
+ : {};
29
+ }
30
+ currentNode = currentNode[keyPathItem];
31
+ });
32
+ }
33
+ else {
34
+ result[key] = req.originalRequest.query[key];
35
+ }
36
+ return result;
37
+ }, {});
38
+ return recomposedQuery;
39
+ },
40
+ selectLoginFromSession: (req) => ({ login: req.session.account.login }),
41
+ selectParams: (req) => req.originalRequest.params,
42
+ selectSession: (req) => req.session,
43
+ selectRemarketingUrls: (req) => ({
44
+ remarketingUrls: req.originalRequest.cookies['remarketing_urls'] && JSON.parse(req.originalRequest.cookies['remarketing_urls']),
45
+ }),
46
+ composeSelectors(...args) {
47
+ const selectors = args;
48
+ return (req) => {
49
+ const result = {};
50
+ Object.keys(selectors).forEach((selectorName) => {
51
+ const subResult = selectors[selectorName](req);
52
+ Object.keys(subResult).forEach((key) => {
53
+ result[key] = subResult[key];
54
+ });
55
+ });
56
+ return result;
57
+ };
58
+ },
59
+ };
60
+ //# sourceMappingURL=dataSelectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataSelectors.js","sourceRoot":"","sources":["../../src/services/dataSelectors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import moment from 'moment';
2
+ declare class TimeProvider {
3
+ private timeOffset;
4
+ constructor();
5
+ moment(date?: string): moment.Moment;
6
+ jsDate(date?: string): Date;
7
+ addDays(offset: number): void;
8
+ addHours(offset: number): void;
9
+ resetTimeOffset(): void;
10
+ isDateSameOrBefore(beforeDate: Date | moment.Moment | number, date: Date | moment.Moment | number): boolean;
11
+ add(date: any, measurement: any, value: any): any;
12
+ }
13
+ declare const _default: TimeProvider;
14
+ export default _default;
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const moment_1 = __importDefault(require("moment"));
7
+ class TimeProvider {
8
+ constructor() {
9
+ this.timeOffset = 0;
10
+ }
11
+ moment(date) {
12
+ if (date) {
13
+ return (0, moment_1.default)(date);
14
+ }
15
+ return (0, moment_1.default)().add(this.timeOffset, 'ms');
16
+ }
17
+ jsDate(date) {
18
+ return this.moment(date).toDate();
19
+ }
20
+ addDays(offset) {
21
+ this.timeOffset += offset * 1000 * 3600 * 24;
22
+ }
23
+ addHours(offset) {
24
+ this.timeOffset += offset * 1000 * 3600;
25
+ }
26
+ resetTimeOffset() {
27
+ this.timeOffset = 0;
28
+ }
29
+ isDateSameOrBefore(beforeDate, date) {
30
+ return (0, moment_1.default)(beforeDate).isSameOrBefore(date);
31
+ }
32
+ add(date, measurement, value) {
33
+ return date.add(value, measurement);
34
+ }
35
+ }
36
+ exports.default = new TimeProvider();
37
+ //# sourceMappingURL=timeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeProvider.js","sourceRoot":"","sources":["../src/timeProvider.ts"],"names":[],"mappings":";;;;;AAAA,oDAA4B;AAE5B,MAAM,YAAY;IAEhB;QACE,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,IAAa;QAClB,IAAI,IAAI,EAAE;YACR,OAAO,IAAA,gBAAM,EAAC,IAAI,CAAC,CAAC;SACrB;QAED,OAAO,IAAA,gBAAM,GAAE,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,IAAa;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;IACpC,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,IAAI,CAAC,UAAU,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;IAC/C,CAAC;IAED,QAAQ,CAAC,MAAc;QACrB,IAAI,CAAC,UAAU,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1C,CAAC;IAED,eAAe;QACb,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,kBAAkB,CAAC,UAAyC,EAAE,IAAmC;QAC/F,OAAO,IAAA,gBAAM,EAAC,UAAU,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK;QAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACtC,CAAC;CACF;AAED,kBAAe,IAAI,YAAY,EAAE,CAAC"}
@@ -0,0 +1,72 @@
1
+ export type AccountType = "organization" | "user";
2
+ export type PermissionsMap = {
3
+ [Key: string]: true;
4
+ };
5
+ import { Request } from 'express';
6
+ import Account from '../entities/Account';
7
+ import ServiceHandlerBase from '../services/ServiceHandlerBase';
8
+ import ServerLogger from '../adapters/logger';
9
+ import ServiceFactoryBase from '../services/ServiceFactoryBase';
10
+ export { ServiceFactoryBase, ServiceHandlerBase, };
11
+ export interface IServiceExecutor {
12
+ executeService(serviceFolder: string, serviceName: string, requestData: any, request?: IAuthorizedRequest, permissions?: PermissionsMap): Promise<any>;
13
+ }
14
+ export interface ISessionData {
15
+ sessionId: string;
16
+ account: Account;
17
+ date: Date;
18
+ }
19
+ export interface IServiceHandler {
20
+ requestData: any;
21
+ selectData(): Object;
22
+ execute(data: any): Promise<any>;
23
+ Permissions: PermissionsMap;
24
+ }
25
+ export interface IServiceFactory {
26
+ getServiceDescription(): IServiceDescription;
27
+ createHandler(serviceExecutor: IServiceExecutor, request: IAuthorizedRequest, logger: ServerLogger): IServiceHandler;
28
+ }
29
+ export declare class IAuthorizedRequest {
30
+ session: ISessionData;
31
+ contextType: '' | 'user' | 'organization';
32
+ currentOrgPermissions: PermissionsMap;
33
+ originalRequest: Request;
34
+ }
35
+ export type RequestMethod = 'post' | 'get' | 'put' | 'delete' | 'options' | 'patch';
36
+ export type MulterSettings = {
37
+ type: 'single';
38
+ fieldName: string;
39
+ };
40
+ type EndpointContext = 'user' | 'organization' | 'any';
41
+ export interface IServiceDescription {
42
+ getBodyParser?: () => 'raw' | 'json';
43
+ getValidationRules?: (request?: IAuthorizedRequest) => Object;
44
+ getValidationRulesPerContext?: (request?: IAuthorizedRequest) => {
45
+ user: Object;
46
+ organization: Object;
47
+ };
48
+ getRequestMethod(): RequestMethod;
49
+ getRequestPathTemplate(): string;
50
+ isAuthorized(): boolean;
51
+ allowAnonymous(): boolean;
52
+ allowCors?: () => boolean;
53
+ getRequiredPermissions(): {
54
+ 'user'?: {
55
+ myaccount: boolean;
56
+ };
57
+ 'organization'?: string[];
58
+ 'adminonly'?: boolean;
59
+ };
60
+ getEndpointContext(): EndpointContext;
61
+ getFileUploadSettings?: () => MulterSettings;
62
+ }
63
+ export type ServiceFactoriesMap = {
64
+ [Key: string]: Record<string, IServiceFactory>;
65
+ };
66
+ export type ServiceEventNames = {
67
+ [key: string]: string[];
68
+ };
69
+ export type ServicesList = {
70
+ serviceFactories: ServiceFactoriesMap;
71
+ serviceEventNames: ServiceEventNames;
72
+ };
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.IAuthorizedRequest = exports.ServiceHandlerBase = exports.ServiceFactoryBase = void 0;
7
+ const ServiceHandlerBase_1 = __importDefault(require("../services/ServiceHandlerBase"));
8
+ exports.ServiceHandlerBase = ServiceHandlerBase_1.default;
9
+ const ServiceFactoryBase_1 = __importDefault(require("../services/ServiceFactoryBase"));
10
+ exports.ServiceFactoryBase = ServiceFactoryBase_1.default;
11
+ class IAuthorizedRequest {
12
+ }
13
+ exports.IAuthorizedRequest = IAuthorizedRequest;
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":";;;;;;AAOA,wFAAgE;AAM9D,6BANK,4BAAkB,CAML;AAJpB,wFAAgE;AAG9D,6BAHK,4BAAkB,CAGL;AA8BpB,MAAa,kBAAkB;CAK9B;AALD,gDAKC"}
package/package.json ADDED
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "starta.microservice",
3
+ "version": "0.1.2209",
4
+ "main": "./lib/index.js",
5
+ "description": "Core library for Starta.one microservice",
6
+ "author": "Collaboracia OÜ",
7
+ "license": "ISC",
8
+ "scripts": {
9
+ "build": "tsc",
10
+ "tsw": "tsc -w",
11
+ "format": "prettier --write \"src/**/*.ts\" \"src/**/*.js\"",
12
+ "lint": "tslint -p tsconfig.json",
13
+ "prepare": "npm run build"
14
+ },
15
+ "files": [
16
+ "lib/**/*"
17
+ ],
18
+ "dependencies": {
19
+ "@types/aws-sdk": "^2.7.0",
20
+ "@types/multer": "^1.4.7",
21
+ "amqplib": "^0.10.3",
22
+ "auth-header": "^1.0.0",
23
+ "aws-sdk": "^2.1185.0",
24
+ "axios": "^0.24.0",
25
+ "co.validation": "^2.2.1",
26
+ "cors": "^2.8.5",
27
+ "crypto": "^1.0.1",
28
+ "express": "^4.18.2",
29
+ "express-session": "^1.17.3",
30
+ "extend": "^3.0.2",
31
+ "ioredis": "^5.2.4",
32
+ "jsondiffpatch": "0.1.43",
33
+ "language": "^0.4.0",
34
+ "mongodb": "^4.13.0",
35
+ "multer": "^1.4.2",
36
+ "multer-s3": "^2.10.0",
37
+ "path": "^0.12.7",
38
+ "redis-healthcheck": "^0.1.1",
39
+ "redlock": "^5.0.0-beta.2",
40
+ "winston": "^3.8.2",
41
+ "winston-daily-rotate-file": "^4.7.1"
42
+ },
43
+ "devDependencies": {
44
+ "@types/multer": "^1.4.4",
45
+ "@types/express": "^4.17.15",
46
+ "prettier": "^2.5.1",
47
+ "tslint": "^6.1.3",
48
+ "tslint-config-prettier": "^1.18.0",
49
+ "typescript": "^4.9.4"
50
+ }
51
+ }