@nextage/nx-frame-be 1.0.1
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.
- package/README.md +1 -0
- package/README.md.old +45 -0
- package/build/app.d.ts +0 -0
- package/build/app.js +1 -0
- package/build/aws/aws-cluster-manager.d.ts +28 -0
- package/build/aws/aws-cluster-manager.js +105 -0
- package/build/aws/aws-email-manager.d.ts +24 -0
- package/build/aws/aws-email-manager.js +57 -0
- package/build/aws/aws-queue-manager.d.ts +37 -0
- package/build/aws/aws-queue-manager.js +100 -0
- package/build/aws/aws.interfaces.d.ts +39 -0
- package/build/aws/aws.interfaces.js +2 -0
- package/build/aws/index.d.ts +4 -0
- package/build/aws/index.js +20 -0
- package/build/common/base/__test__/base.model.test.d.ts +1 -0
- package/build/common/base/__test__/base.model.test.js +283 -0
- package/build/common/base/base.controller.d.ts +124 -0
- package/build/common/base/base.controller.js +134 -0
- package/build/common/base/base.interfaces.d.ts +81 -0
- package/build/common/base/base.interfaces.js +2 -0
- package/build/common/base/base.model.d.ts +384 -0
- package/build/common/base/base.model.js +730 -0
- package/build/common/base/folded.model.d.ts +41 -0
- package/build/common/base/folded.model.js +215 -0
- package/build/common/base/mongo-utils.d.ts +122 -0
- package/build/common/base/mongo-utils.js +242 -0
- package/build/common/base/mongo.types.d.ts +20 -0
- package/build/common/base/mongo.types.js +2 -0
- package/build/common/base/sql-utils.d.ts +20 -0
- package/build/common/base/sql-utils.js +69 -0
- package/build/common/constants.d.ts +27 -0
- package/build/common/constants.js +70 -0
- package/build/common/crypto/crypto.classes.d.ts +100 -0
- package/build/common/crypto/crypto.classes.js +146 -0
- package/build/common/crypto/crypto.constants.d.ts +68 -0
- package/build/common/crypto/crypto.constants.js +57 -0
- package/build/common/crypto/crypto.error.d.ts +4 -0
- package/build/common/crypto/crypto.error.js +10 -0
- package/build/common/crypto/crypto.interfaces.d.ts +46 -0
- package/build/common/crypto/crypto.interfaces.js +2 -0
- package/build/common/crypto/crypto.utils.d.ts +139 -0
- package/build/common/crypto/crypto.utils.js +380 -0
- package/build/common/crypto/index.d.ts +3 -0
- package/build/common/crypto/index.js +19 -0
- package/build/common/enums.d.ts +61 -0
- package/build/common/enums.js +75 -0
- package/build/common/errors.d.ts +13 -0
- package/build/common/errors.js +24 -0
- package/build/common/express/express.interfaces.d.ts +20 -0
- package/build/common/express/express.interfaces.js +2 -0
- package/build/common/express/express.utils.d.ts +31 -0
- package/build/common/express/express.utils.js +85 -0
- package/build/common/express/index.d.ts +2 -0
- package/build/common/express/index.js +18 -0
- package/build/common/graphql/__test__/generator.schema.test.d.ts +1 -0
- package/build/common/graphql/__test__/generator.schema.test.js +391 -0
- package/build/common/graphql/directives.d.ts +18 -0
- package/build/common/graphql/directives.js +56 -0
- package/build/common/graphql/generator copy.d.ts +41 -0
- package/build/common/graphql/generator copy.js +385 -0
- package/build/common/graphql/generator.d.ts +42 -0
- package/build/common/graphql/generator.js +385 -0
- package/build/common/graphql/index.d.ts +4 -0
- package/build/common/graphql/index.js +21 -0
- package/build/common/graphql/interfaces.d.ts +67 -0
- package/build/common/graphql/interfaces.js +2 -0
- package/build/common/graphql/loader.d.ts +22 -0
- package/build/common/graphql/loader.js +186 -0
- package/build/common/graphql/scalars/index.d.ts +10 -0
- package/build/common/graphql/scalars/index.js +6 -0
- package/build/common/graphql/scalars/resolvers.d.ts +8 -0
- package/build/common/graphql/scalars/resolvers.js +71 -0
- package/build/common/graphql/scalars/schema.d.ts +1 -0
- package/build/common/graphql/scalars/schema.js +12 -0
- package/build/common/graphql/types/index.d.ts +3 -0
- package/build/common/graphql/types/index.js +6 -0
- package/build/common/graphql/types/schema.d.ts +1 -0
- package/build/common/graphql/types/schema.js +98 -0
- package/build/common/graphql/utils.d.ts +18 -0
- package/build/common/graphql/utils.js +40 -0
- package/build/common/grid-fs/gridfs-base.model.d.ts +53 -0
- package/build/common/grid-fs/gridfs-base.model.js +95 -0
- package/build/common/grid-fs/gridfs.interfaces.d.ts +41 -0
- package/build/common/grid-fs/gridfs.interfaces.js +2 -0
- package/build/common/index.d.ts +10 -0
- package/build/common/index.js +32 -0
- package/build/common/interfaces.d.ts +26 -0
- package/build/common/interfaces.js +10 -0
- package/build/common/manager/bulk-manager.d.ts +59 -0
- package/build/common/manager/bulk-manager.js +103 -0
- package/build/common/manager/crypto-manager.d.ts +88 -0
- package/build/common/manager/crypto-manager.js +200 -0
- package/build/common/manager/index.d.ts +5 -0
- package/build/common/manager/index.js +21 -0
- package/build/common/manager/pubsub-manager.d.ts +20 -0
- package/build/common/manager/pubsub-manager.js +38 -0
- package/build/common/manager/shutdown-manager.d.ts +27 -0
- package/build/common/manager/shutdown-manager.js +118 -0
- package/build/common/manager/socket-io-cli-manager.d.ts +53 -0
- package/build/common/manager/socket-io-cli-manager.js +91 -0
- package/build/common/manager/tunnel-manager.d.ts +28 -0
- package/build/common/manager/tunnel-manager.js +49 -0
- package/build/common/models/coded-entity.controller.d.ts +5 -0
- package/build/common/models/coded-entity.controller.js +9 -0
- package/build/common/models/coded-entity.model.d.ts +25 -0
- package/build/common/models/coded-entity.model.js +51 -0
- package/build/common/models/user.model.d.ts +56 -0
- package/build/common/models/user.model.js +72 -0
- package/build/common/types.d.ts +136 -0
- package/build/common/types.js +16 -0
- package/build/common/utils.d.ts +552 -0
- package/build/common/utils.js +1100 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +18 -0
- package/build/test/env.d.ts +0 -0
- package/build/test/env.js +5 -0
- package/build/test/setup.d.ts +6 -0
- package/build/test/setup.js +59 -0
- package/package.json +90 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
### NxFrameBe Library
|
package/README.md.old
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
isUndefined -> isNil
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
npm init -y
|
|
5
|
+
npm install typescript ts-node-dev express @types/express
|
|
6
|
+
|
|
7
|
+
tsc init
|
|
8
|
+
node_modules/typescript/bin/tsc --init
|
|
9
|
+
|
|
10
|
+
npm install --save-dev @types/jest @types/supertest jest ts-jest supertest mongodb-memory-server
|
|
11
|
+
|
|
12
|
+
npm install express express-validator cookie session jsonwebtoken @types/cookie-session @types/express @types/jsonwebtoken
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
npm install crypto-js @types/crypto-js
|
|
16
|
+
npm install lodash @types/lodash
|
|
17
|
+
|
|
18
|
+
npm install async @types/async
|
|
19
|
+
npm install graphql @types/graphql
|
|
20
|
+
npm install lodash @types/lodash
|
|
21
|
+
npm install jszip @types/jszip
|
|
22
|
+
npm install node-schedule @types/node-schedule
|
|
23
|
+
npm install ua-parser-js @types/ua-parser-js
|
|
24
|
+
npm install uuid @types/uuid
|
|
25
|
+
npm install moment @types/moment
|
|
26
|
+
npm install jzip @types/jszip
|
|
27
|
+
npm install jszip @types/jszip
|
|
28
|
+
npm install @types/jszip
|
|
29
|
+
|
|
30
|
+
npm install mongoose @types/mongoose
|
|
31
|
+
npm install sequelize @types/sequelize
|
|
32
|
+
npm install updateIfCurrentPlugin
|
|
33
|
+
npm install mongoose-update-if-current
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
npm install graphql-constraint-directive
|
|
38
|
+
npm install graphql-subscriptions graphql-type-json graphql-ws @types/graphql-type-json
|
|
39
|
+
npm install @apollo/server @apollo/server-plugin-landing-page-graphql-playground
|
|
40
|
+
npm install socket.io-client @types/socket.io @types/socket.io-client
|
|
41
|
+
npm install tunnel-ssh @types/tunnel-ssh
|
|
42
|
+
npm install @aws-sdk/client-ecs @aws-sdk/client-ses @aws-sdk/client-sqs sqs-consumer @types/sqs-consumer
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
npm install --save-dev @types/node
|
package/build/app.d.ts
ADDED
|
File without changes
|
package/build/app.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AWSBaseConfig, AWSClusterConfig } from './aws.interfaces';
|
|
2
|
+
import { AWSServiceDesiredCountOptions } from './aws.interfaces';
|
|
3
|
+
export declare class AWSClusterManager {
|
|
4
|
+
private config;
|
|
5
|
+
private cluster;
|
|
6
|
+
private desiredCount;
|
|
7
|
+
private maxCount;
|
|
8
|
+
private workerJobs;
|
|
9
|
+
private currentJobs;
|
|
10
|
+
constructor({ cluster, desiredCount, maxCount, workerJobs }: AWSClusterConfig | undefined, config: AWSBaseConfig);
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* @param {*} service
|
|
14
|
+
* @returns
|
|
15
|
+
*/
|
|
16
|
+
getRunningTasks(serviceName: string): Promise<number>;
|
|
17
|
+
/**
|
|
18
|
+
*
|
|
19
|
+
* @returns
|
|
20
|
+
*/
|
|
21
|
+
updateDesiredCount(service: string, { upscale, downscale }?: AWSServiceDesiredCountOptions): Promise<boolean>;
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* @param {*} param0
|
|
25
|
+
* @returns
|
|
26
|
+
*/
|
|
27
|
+
scaleECSService(service: string, desiredCount?: number): Promise<boolean>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AWSClusterManager = void 0;
|
|
13
|
+
const client_ecs_1 = require("@aws-sdk/client-ecs");
|
|
14
|
+
const common_1 = require("../common");
|
|
15
|
+
class AWSClusterManager {
|
|
16
|
+
constructor({ cluster, desiredCount, maxCount, workerJobs } = { cluster: '' }, config) {
|
|
17
|
+
this.currentJobs = { pending: 0, running: 0 };
|
|
18
|
+
this.config = config || { region: 'eu-south-1' };
|
|
19
|
+
this.cluster = cluster;
|
|
20
|
+
this.desiredCount = desiredCount || 1;
|
|
21
|
+
this.maxCount = maxCount || 10;
|
|
22
|
+
this.workerJobs = workerJobs || 2;
|
|
23
|
+
common_1.APP.logger.info(`ECS manager init [cluster: ${this.cluster}]`);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
* @param {*} service
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
getRunningTasks(serviceName) {
|
|
31
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
32
|
+
if (!serviceName) {
|
|
33
|
+
common_1.APP.logger.error(`Missing service parameter to get running tasks`);
|
|
34
|
+
return 0;
|
|
35
|
+
}
|
|
36
|
+
if (!this.cluster || !serviceName) {
|
|
37
|
+
common_1.APP.logger.error(`Missing parameter to update service - cluster <${this.cluster}>, service <${serviceName}>`);
|
|
38
|
+
return 0;
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const ecs = new client_ecs_1.ECS(this.config);
|
|
42
|
+
const params = { cluster: this.cluster, serviceName };
|
|
43
|
+
const tasks = yield ecs.listTasks(params);
|
|
44
|
+
return (tasks.taskArns || []).length;
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
common_1.APP.logger.error('Cannot get tasks list %o %o', err, err.stack);
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
*
|
|
54
|
+
* @returns
|
|
55
|
+
*/
|
|
56
|
+
updateDesiredCount(service_1) {
|
|
57
|
+
return __awaiter(this, arguments, void 0, function* (service, { upscale, downscale } = { upscale: true, downscale: true }) {
|
|
58
|
+
if (!service) {
|
|
59
|
+
common_1.APP.logger.error(`Missing service to be updated`);
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
const pending = this.currentJobs.pending;
|
|
63
|
+
let desiredCount = 1;
|
|
64
|
+
const taskCount = yield this.getRunningTasks(service);
|
|
65
|
+
common_1.APP.logger.info(`There are <${taskCount}> running tasks for service <${service}>`);
|
|
66
|
+
this.desiredCount = taskCount;
|
|
67
|
+
if (pending > this.workerJobs)
|
|
68
|
+
desiredCount = Math.floor(pending / this.workerJobs);
|
|
69
|
+
if ((desiredCount === this.desiredCount) ||
|
|
70
|
+
!downscale && desiredCount < this.desiredCount ||
|
|
71
|
+
!upscale && desiredCount > this.desiredCount) {
|
|
72
|
+
common_1.APP.logger.info(`Scaling service <${service}> not needed`);
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return this.scaleECSService(service, desiredCount);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
*
|
|
80
|
+
* @param {*} param0
|
|
81
|
+
* @returns
|
|
82
|
+
*/
|
|
83
|
+
scaleECSService(service_1) {
|
|
84
|
+
return __awaiter(this, arguments, void 0, function* (service, desiredCount = 1) {
|
|
85
|
+
if (!this.cluster || !service) {
|
|
86
|
+
common_1.APP.logger.error(`Missing parameter to update service - cluster <${this.cluster}>, service <${service}>`);
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
common_1.APP.logger.info(`Scaling service <${service}> to desired count <${desiredCount}>`);
|
|
90
|
+
try {
|
|
91
|
+
const ecs = new client_ecs_1.ECS(this.config);
|
|
92
|
+
const params = { cluster: this.cluster, service, desiredCount: desiredCount || this.desiredCount || 1 };
|
|
93
|
+
const data = yield ecs.updateService(params);
|
|
94
|
+
this.desiredCount = desiredCount;
|
|
95
|
+
common_1.APP.logger.info(`Service <${service}> scaled to desired count <${desiredCount}>`);
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
common_1.APP.logger.error('Cannot update service %o %o', err, err.stack);
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.AWSClusterManager = AWSClusterManager;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SendEmailCommandOutput } from '@aws-sdk/client-ses';
|
|
2
|
+
import { AWSBaseConfig, AWSEmailConfig } from './aws.interfaces';
|
|
3
|
+
import { AWSEmailContent, AWSEmailRecipient } from './aws.interfaces';
|
|
4
|
+
export declare class AWSEmailManager {
|
|
5
|
+
private config;
|
|
6
|
+
private ses;
|
|
7
|
+
private domain?;
|
|
8
|
+
private charset;
|
|
9
|
+
constructor({ domain, charset }: AWSEmailConfig | undefined, config: AWSBaseConfig);
|
|
10
|
+
/**
|
|
11
|
+
*
|
|
12
|
+
* @param {*} source
|
|
13
|
+
* @param {*} addresses
|
|
14
|
+
* @param {*} emaildata
|
|
15
|
+
* @returns
|
|
16
|
+
*/
|
|
17
|
+
sendMail(source: string, { to, cc, ccn }: AWSEmailRecipient, { body, plain, subject, charset, replyTo }: AWSEmailContent): Promise<SendEmailCommandOutput | null>;
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* @param {*} values
|
|
21
|
+
* @returns
|
|
22
|
+
*/
|
|
23
|
+
checkAddresses(values: string | string[]): string[];
|
|
24
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AWSEmailManager = void 0;
|
|
13
|
+
const client_ses_1 = require("@aws-sdk/client-ses");
|
|
14
|
+
const common_1 = require("../common");
|
|
15
|
+
class AWSEmailManager {
|
|
16
|
+
constructor({ domain, charset } = {}, config) {
|
|
17
|
+
this.config = config || { region: 'eu-south-1' };
|
|
18
|
+
this.ses = new client_ses_1.SESClient(this.config);
|
|
19
|
+
this.domain = domain;
|
|
20
|
+
this.charset = charset || 'UTF-8';
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
*
|
|
24
|
+
* @param {*} source
|
|
25
|
+
* @param {*} addresses
|
|
26
|
+
* @param {*} emaildata
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
29
|
+
sendMail(source_1, _a, _b) {
|
|
30
|
+
return __awaiter(this, arguments, void 0, function* (source, { to, cc, ccn }, { body, plain, subject, charset, replyTo = [] }) {
|
|
31
|
+
if (!(0, common_1.isEmail)(source) || !to || !body || !subject) {
|
|
32
|
+
common_1.APP.logger.error(`Missing or wrong parameter to send email - source <${source}>, to <${to}>, body <${body}>, subject <${subject}>`);
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const Charset = charset || this.charset;
|
|
36
|
+
const params = {
|
|
37
|
+
Destination: { ToAddresses: this.checkAddresses(to), CcAddresses: this.checkAddresses(cc || []) },
|
|
38
|
+
Message: { Body: {}, Subject: { Charset, Data: subject } },
|
|
39
|
+
Source: source,
|
|
40
|
+
ReplyToAddresses: this.checkAddresses(replyTo)
|
|
41
|
+
};
|
|
42
|
+
params.Message.Body[plain ? 'Text' : 'Html'] = { Charset, Data: body };
|
|
43
|
+
return this.ses.send(new client_ses_1.SendEmailCommand(params));
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
*
|
|
48
|
+
* @param {*} values
|
|
49
|
+
* @returns
|
|
50
|
+
*/
|
|
51
|
+
checkAddresses(values) {
|
|
52
|
+
if (!Array.isArray(values))
|
|
53
|
+
values = [values];
|
|
54
|
+
return values.filter(a => (0, common_1.isEmail)(a));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.AWSEmailManager = AWSEmailManager;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Message } from '@aws-sdk/client-sqs';
|
|
2
|
+
import { AWSBaseConfig, AWSQueueConfig } from './aws.interfaces';
|
|
3
|
+
export declare class AWSQueueManager {
|
|
4
|
+
private config;
|
|
5
|
+
private sqs;
|
|
6
|
+
private name;
|
|
7
|
+
private queueUrl;
|
|
8
|
+
private visibilityTimeout?;
|
|
9
|
+
private heartbeatInterval?;
|
|
10
|
+
private consumer?;
|
|
11
|
+
constructor({ name, queueUrl, visibilityTimeout, heartbeatInterval }: AWSQueueConfig, config: AWSBaseConfig);
|
|
12
|
+
/**
|
|
13
|
+
*
|
|
14
|
+
* @param messageAttributeNames
|
|
15
|
+
* @param method
|
|
16
|
+
*/
|
|
17
|
+
initConsumer(messageAttributeNames?: string[], method?: Function): void;
|
|
18
|
+
/**
|
|
19
|
+
*
|
|
20
|
+
* @param {*} messageAttributeNames
|
|
21
|
+
* @param {*} method
|
|
22
|
+
* @returns
|
|
23
|
+
*/
|
|
24
|
+
startConsumer(messageAttributeNames?: string[], method?: Function): void;
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
* @param {*} message
|
|
28
|
+
* @param {*} method
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
processMessage(message: Message, method?: Function): Promise<any>;
|
|
32
|
+
/**
|
|
33
|
+
*
|
|
34
|
+
* @param {*} message
|
|
35
|
+
*/
|
|
36
|
+
deleteMessage(message: Message): Promise<boolean>;
|
|
37
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.AWSQueueManager = void 0;
|
|
13
|
+
const sqs_consumer_1 = require("sqs-consumer");
|
|
14
|
+
const client_sqs_1 = require("@aws-sdk/client-sqs");
|
|
15
|
+
const common_1 = require("../common");
|
|
16
|
+
class AWSQueueManager {
|
|
17
|
+
constructor({ name, queueUrl, visibilityTimeout, heartbeatInterval }, config) {
|
|
18
|
+
// this.region = region;
|
|
19
|
+
this.config = config || { region: 'eu-south-1' };
|
|
20
|
+
this.sqs = new client_sqs_1.SQS(this.config);
|
|
21
|
+
this.name = name;
|
|
22
|
+
this.queueUrl = queueUrl;
|
|
23
|
+
this.visibilityTimeout = visibilityTimeout;
|
|
24
|
+
this.heartbeatInterval = heartbeatInterval;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
* @param messageAttributeNames
|
|
29
|
+
* @param method
|
|
30
|
+
*/
|
|
31
|
+
initConsumer(messageAttributeNames = [], method = () => { }) {
|
|
32
|
+
var _a;
|
|
33
|
+
common_1.APP.logger.info(`SQS ${this.name} consumer init`);
|
|
34
|
+
(_a = this.consumer) === null || _a === void 0 ? void 0 : _a.stop();
|
|
35
|
+
this.consumer = sqs_consumer_1.Consumer.create({
|
|
36
|
+
queueUrl: this.queueUrl,
|
|
37
|
+
messageAttributeNames,
|
|
38
|
+
visibilityTimeout: this.visibilityTimeout,
|
|
39
|
+
heartbeatInterval: this.heartbeatInterval,
|
|
40
|
+
terminateVisibilityTimeout: true,
|
|
41
|
+
shouldDeleteMessages: false, // Boolean - Default to true, if you don't want the package to delete messages from sqs set this to false
|
|
42
|
+
handleMessage: (message) => this.processMessage(message, method),
|
|
43
|
+
sqs: new client_sqs_1.SQS({ region: this.config.region })
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
*
|
|
48
|
+
* @param {*} messageAttributeNames
|
|
49
|
+
* @param {*} method
|
|
50
|
+
* @returns
|
|
51
|
+
*/
|
|
52
|
+
startConsumer(messageAttributeNames = [], method = () => { }) {
|
|
53
|
+
var _a;
|
|
54
|
+
this.initConsumer(messageAttributeNames, method);
|
|
55
|
+
(_a = this.consumer) === null || _a === void 0 ? void 0 : _a.start();
|
|
56
|
+
common_1.APP.logger.info(`SQS ${this.name} consumer started`);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
*
|
|
60
|
+
* @param {*} message
|
|
61
|
+
* @param {*} method
|
|
62
|
+
* @returns
|
|
63
|
+
*/
|
|
64
|
+
processMessage(message_1) {
|
|
65
|
+
return __awaiter(this, arguments, void 0, function* (message, method = (message) => { return Promise.resolve(message); }) {
|
|
66
|
+
common_1.APP.logger.info(`SQS ${this.name} message ${message} received`);
|
|
67
|
+
try {
|
|
68
|
+
const res = yield method(message);
|
|
69
|
+
// if method returns a truely value then delete message from queue
|
|
70
|
+
return res ? this.deleteMessage(message) : res;
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
common_1.APP.logger.error(`SQS ${this.name} message ${message} error: %o`, err);
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
*
|
|
80
|
+
* @param {*} message
|
|
81
|
+
*/
|
|
82
|
+
deleteMessage(message) {
|
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
try {
|
|
85
|
+
const deleteParams = {
|
|
86
|
+
QueueUrl: this.queueUrl,
|
|
87
|
+
ReceiptHandle: message.ReceiptHandle
|
|
88
|
+
};
|
|
89
|
+
yield this.sqs.deleteMessage(deleteParams);
|
|
90
|
+
common_1.APP.logger.info(`SQS ${this.name} message ${message} deleted`);
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
common_1.APP.logger.info(`SQS ${this.name} message ${message} delete error ${err}`);
|
|
95
|
+
throw err;
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.AWSQueueManager = AWSQueueManager;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface AWSBaseConfig {
|
|
2
|
+
region?: string;
|
|
3
|
+
}
|
|
4
|
+
export interface AWSClusterConfig {
|
|
5
|
+
cluster: string;
|
|
6
|
+
desiredCount?: number;
|
|
7
|
+
maxCount?: number;
|
|
8
|
+
workerJobs?: number;
|
|
9
|
+
}
|
|
10
|
+
export interface AWSJobsData {
|
|
11
|
+
pending: number;
|
|
12
|
+
running: number;
|
|
13
|
+
}
|
|
14
|
+
export interface AWSServiceDesiredCountOptions {
|
|
15
|
+
upscale: boolean;
|
|
16
|
+
downscale: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface AWSEmailConfig {
|
|
19
|
+
domain?: string;
|
|
20
|
+
charset?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface AWSEmailRecipient {
|
|
23
|
+
to: string | string[];
|
|
24
|
+
cc?: string | string[];
|
|
25
|
+
ccn?: string | string[];
|
|
26
|
+
}
|
|
27
|
+
export interface AWSEmailContent {
|
|
28
|
+
body: string;
|
|
29
|
+
subject: string;
|
|
30
|
+
plain?: boolean;
|
|
31
|
+
charset?: string;
|
|
32
|
+
replyTo?: string[];
|
|
33
|
+
}
|
|
34
|
+
export interface AWSQueueConfig {
|
|
35
|
+
name: string;
|
|
36
|
+
queueUrl: string;
|
|
37
|
+
visibilityTimeout?: number;
|
|
38
|
+
heartbeatInterval?: number;
|
|
39
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./aws.interfaces"), exports);
|
|
18
|
+
__exportStar(require("./aws-cluster-manager"), exports);
|
|
19
|
+
__exportStar(require("./aws-email-manager"), exports);
|
|
20
|
+
__exportStar(require("./aws-queue-manager"), exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|