@konplit-services/common 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/build/Schema/CFLESCHEMA.d.ts +138 -0
- package/build/Schema/CFLESCHEMA.js +144 -0
- package/build/errors/axios-request-error.d.ts +17 -0
- package/build/errors/axios-request-error.js +32 -0
- package/build/errors/bad-request-error.d.ts +17 -0
- package/build/errors/bad-request-error.js +28 -0
- package/build/errors/custom-error.d.ts +15 -0
- package/build/errors/custom-error.js +11 -0
- package/build/errors/database-error.d.ts +17 -0
- package/build/errors/database-error.js +28 -0
- package/build/errors/error.interface.d.ts +4 -0
- package/build/errors/error.interface.js +2 -0
- package/build/errors/forbidden-error.d.ts +17 -0
- package/build/errors/forbidden-error.js +28 -0
- package/build/errors/invalid-input-error.d.ts +19 -0
- package/build/errors/invalid-input-error.js +31 -0
- package/build/errors/mongoose-validation-error.d.ts +17 -0
- package/build/errors/mongoose-validation-error.js +28 -0
- package/build/errors/not-found.d.ts +17 -0
- package/build/errors/not-found.js +28 -0
- package/build/errors/notAuthorized.d.ts +17 -0
- package/build/errors/notAuthorized.js +28 -0
- package/build/errors/request-validation-error.d.ts +17 -0
- package/build/errors/request-validation-error.js +28 -0
- package/build/errors/service-not-available.d.ts +17 -0
- package/build/errors/service-not-available.js +28 -0
- package/build/events/accounts-events/interfaces/account-created.interface.d.ts +11 -0
- package/build/events/accounts-events/interfaces/account-created.interface.js +2 -0
- package/build/events/accounts-events/interfaces/account-updated.interface.d.ts +0 -0
- package/build/events/accounts-events/interfaces/account-updated.interface.js +1 -0
- package/build/events/accounts-events/interfaces/permission-created.interface.d.ts +12 -0
- package/build/events/accounts-events/interfaces/permission-created.interface.js +2 -0
- package/build/events/accounts-events/interfaces/permission-removed.interface.d.ts +12 -0
- package/build/events/accounts-events/interfaces/permission-removed.interface.js +2 -0
- package/build/events/base-events/base-events.listener.d.ts +103 -0
- package/build/events/base-events/base-events.listener.js +164 -0
- package/build/events/base-events/base-events.publisher.d.ts +75 -0
- package/build/events/base-events/base-events.publisher.js +110 -0
- package/build/events/logs-events/interfaces/admins-logs.created.interface.d.ts +15 -0
- package/build/events/logs-events/interfaces/admins-logs.created.interface.js +2 -0
- package/build/events/logs-events/interfaces/merchants-logs-created.interface.d.ts +15 -0
- package/build/events/logs-events/interfaces/merchants-logs-created.interface.js +2 -0
- package/build/events/subjects.d.ts +26 -0
- package/build/events/subjects.js +37 -0
- package/build/events/types/order-statu.types.d.ts +22 -0
- package/build/events/types/order-statu.types.js +26 -0
- package/build/helper/Two-fa-type.d.ts +7 -0
- package/build/helper/Two-fa-type.js +11 -0
- package/build/helper/account-balance-types.d.ts +4 -0
- package/build/helper/account-balance-types.js +8 -0
- package/build/helper/account-status.d.ts +4 -0
- package/build/helper/account-status.js +8 -0
- package/build/helper/bank-code.d.ts +1 -0
- package/build/helper/bank-code.js +16 -0
- package/build/helper/business-category.d.ts +12 -0
- package/build/helper/business-category.js +17 -0
- package/build/helper/bvn-validation-type.d.ts +4 -0
- package/build/helper/bvn-validation-type.js +8 -0
- package/build/helper/card-types.d.ts +10 -0
- package/build/helper/card-types.js +14 -0
- package/build/helper/card_auth_type.d.ts +5 -0
- package/build/helper/card_auth_type.js +9 -0
- package/build/helper/chargeback.d.ts +7 -0
- package/build/helper/chargeback.js +11 -0
- package/build/helper/charges.d.ts +7 -0
- package/build/helper/charges.js +11 -0
- package/build/helper/currency-types.d.ts +4 -0
- package/build/helper/currency-types.js +8 -0
- package/build/helper/custom-paginate.d.ts +19 -0
- package/build/helper/custom-paginate.js +50 -0
- package/build/helper/email-types.d.ts +22 -0
- package/build/helper/email-types.js +26 -0
- package/build/helper/errorCodes/error-codes.d.ts +92 -0
- package/build/helper/errorCodes/error-codes.js +99 -0
- package/build/helper/extract-card-details.d.ts +4 -0
- package/build/helper/extract-card-details.js +20 -0
- package/build/helper/invoice.d.ts +19 -0
- package/build/helper/invoice.js +26 -0
- package/build/helper/lang/email.d.ts +12 -0
- package/build/helper/lang/email.js +19 -0
- package/build/helper/lang/error-text.d.ts +32 -0
- package/build/helper/lang/error-text.js +35 -0
- package/build/helper/lang/error.d.ts +0 -0
- package/build/helper/lang/error.js +1 -0
- package/build/helper/lang/language.d.ts +113 -0
- package/build/helper/lang/language.js +146 -0
- package/build/helper/last-three.d.ts +1 -0
- package/build/helper/last-three.js +8 -0
- package/build/helper/location.d.ts +2 -0
- package/build/helper/location.js +20 -0
- package/build/helper/media-types.d.ts +6 -0
- package/build/helper/media-types.js +10 -0
- package/build/helper/nibss-scopes.d.ts +9 -0
- package/build/helper/nibss-scopes.js +13 -0
- package/build/helper/payment-options.d.ts +7 -0
- package/build/helper/payment-options.js +11 -0
- package/build/helper/pdf-generator.d.ts +9 -0
- package/build/helper/pdf-generator.js +73 -0
- package/build/helper/permistions.d.ts +126 -0
- package/build/helper/permistions.js +129 -0
- package/build/helper/plan-types.d.ts +9 -0
- package/build/helper/plan-types.js +13 -0
- package/build/helper/query/query-option.d.ts +23 -0
- package/build/helper/query/query-option.js +40 -0
- package/build/helper/refund.d.ts +21 -0
- package/build/helper/refund.js +28 -0
- package/build/helper/roles.d.ts +15 -0
- package/build/helper/roles.js +19 -0
- package/build/helper/settlement.d.ts +14 -0
- package/build/helper/settlement.js +20 -0
- package/build/helper/status.d.ts +15 -0
- package/build/helper/status.js +19 -0
- package/build/helper/subscriptions-types.d.ts +16 -0
- package/build/helper/subscriptions-types.js +22 -0
- package/build/helper/success-response.d.ts +9 -0
- package/build/helper/success-response.js +13 -0
- package/build/helper/transaction-authentication-type.d.ts +5 -0
- package/build/helper/transaction-authentication-type.js +9 -0
- package/build/helper/transaction-type.d.ts +15 -0
- package/build/helper/transaction-type.js +20 -0
- package/build/helper/transfer.d.ts +9 -0
- package/build/helper/transfer.js +13 -0
- package/build/helper/user-types.d.ts +4 -0
- package/build/helper/user-types.js +8 -0
- package/build/helper/util/gender.d.ts +4 -0
- package/build/helper/util/gender.js +8 -0
- package/build/helper/util/get-transaction-id.d.ts +9 -0
- package/build/helper/util/get-transaction-id.js +17 -0
- package/build/helper/util/getobject-keys.d.ts +10 -0
- package/build/helper/util/getobject-keys.js +22 -0
- package/build/helper/util/pagination.d.ts +25 -0
- package/build/helper/util/pagination.js +19 -0
- package/build/helper/util/remove-transactionId.d.ts +14 -0
- package/build/helper/util/remove-transactionId.js +16 -0
- package/build/helper/util/sort-by.d.ts +8 -0
- package/build/helper/util/sort-by.js +11 -0
- package/build/helper/validateParams.d.ts +7 -0
- package/build/helper/validateParams.js +13 -0
- package/build/helper/worker-task-types.d.ts +8 -0
- package/build/helper/worker-task-types.js +12 -0
- package/build/index.d.ts +79 -0
- package/build/index.js +103 -0
- package/build/log-activities/actions.d.ts +17 -0
- package/build/log-activities/actions.js +25 -0
- package/build/middlewares/check-inputs.d.ts +2 -0
- package/build/middlewares/check-inputs.js +24 -0
- package/build/middlewares/current-user.d.ts +10 -0
- package/build/middlewares/current-user.js +41 -0
- package/build/middlewares/error-handler.d.ts +3 -0
- package/build/middlewares/error-handler.js +61 -0
- package/build/middlewares/permission.d.ts +10 -0
- package/build/middlewares/permission.js +46 -0
- package/build/middlewares/require-auth.d.ts +2 -0
- package/build/middlewares/require-auth.js +13 -0
- package/build/middlewares/validate-request.d.ts +2 -0
- package/build/middlewares/validate-request.js +13 -0
- package/build/redis/base/index.d.ts +13 -0
- package/build/redis/base/index.js +104 -0
- package/build/redis/constants/index.d.ts +5 -0
- package/build/redis/constants/index.js +12 -0
- package/build/repository/interface/baseRepository.d.ts +9 -0
- package/build/repository/interface/baseRepository.js +8 -0
- package/build/repository/interface/based.d.ts +9 -0
- package/build/repository/interface/based.js +2 -0
- package/build/services/Jwt.d.ts +17 -0
- package/build/services/Jwt.js +44 -0
- package/build/services/base.service.d.ts +14 -0
- package/build/services/base.service.js +20 -0
- package/build/services/mailersend.d.ts +25 -0
- package/build/services/mailersend.js +56 -0
- package/build/util/jwt.validation.d.ts +1 -0
- package/build/util/jwt.validation.js +27 -0
- package/build/util/lib/nats/nat-error-codes.d.ts +4 -0
- package/build/util/lib/nats/nat-error-codes.js +7 -0
- package/build/util/parse-query-string.d.ts +4 -0
- package/build/util/parse-query-string.js +22 -0
- package/package.json +46 -0
|
@@ -0,0 +1,46 @@
|
|
|
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.hasPermission = void 0;
|
|
13
|
+
const forbidden_error_1 = require("../errors/forbidden-error");
|
|
14
|
+
const notAuthorized_1 = require("../errors/notAuthorized");
|
|
15
|
+
const error_codes_1 = require("../helper/errorCodes/error-codes");
|
|
16
|
+
const language_1 = require("../helper/lang/language");
|
|
17
|
+
const base_1 = require("../redis/base");
|
|
18
|
+
const constants_1 = require("../redis/constants");
|
|
19
|
+
const hasPermission = (permissionCode) => {
|
|
20
|
+
return (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
21
|
+
//comment
|
|
22
|
+
if (!req.currentUser) {
|
|
23
|
+
throw new notAuthorized_1.NotAuthorizedError(language_1.lang.not_authorized, error_codes_1.error_codes.INVALID_AUTHORIZATION);
|
|
24
|
+
}
|
|
25
|
+
const user = req.currentUser;
|
|
26
|
+
try {
|
|
27
|
+
let permissions = [];
|
|
28
|
+
const perm = yield base_1.redisWrapper.get((0, constants_1.getPermissions)(user.id));
|
|
29
|
+
if (!perm) {
|
|
30
|
+
throw new notAuthorized_1.NotAuthorizedError(language_1.lang.not_authorized, error_codes_1.error_codes.INVALID_AUTHORIZATION);
|
|
31
|
+
}
|
|
32
|
+
permissions = JSON.parse(perm);
|
|
33
|
+
if (!permissions.includes(permissionCode)) {
|
|
34
|
+
throw new forbidden_error_1.ForbiddenError(language_1.lang.forbidden, error_codes_1.error_codes.INVALID_FORBIDDEN);
|
|
35
|
+
}
|
|
36
|
+
return next();
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.log("====================================");
|
|
40
|
+
console.log("From Permission Authorization", error);
|
|
41
|
+
console.log("====================================");
|
|
42
|
+
throw new notAuthorized_1.NotAuthorizedError(language_1.lang.not_authorized, error_codes_1.error_codes.INVALID_AUTHORIZATION);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
exports.hasPermission = hasPermission;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requireAuth = void 0;
|
|
4
|
+
const notAuthorized_1 = require("../errors/notAuthorized");
|
|
5
|
+
const language_1 = require("../helper/lang/language");
|
|
6
|
+
const error_codes_1 = require("../helper/errorCodes/error-codes");
|
|
7
|
+
const requireAuth = (req, res, next) => {
|
|
8
|
+
if (!req.currentUser) {
|
|
9
|
+
throw new notAuthorized_1.NotAuthorizedError(language_1.lang.not_authorized, error_codes_1.error_codes.INVALID_AUTHORIZATION);
|
|
10
|
+
}
|
|
11
|
+
next();
|
|
12
|
+
};
|
|
13
|
+
exports.requireAuth = requireAuth;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateRequest = void 0;
|
|
4
|
+
const express_validator_1 = require("express-validator");
|
|
5
|
+
const request_validation_error_1 = require("../errors/request-validation-error");
|
|
6
|
+
const validateRequest = (req, res, next) => {
|
|
7
|
+
const errros = (0, express_validator_1.validationResult)(req);
|
|
8
|
+
if (!errros.isEmpty()) {
|
|
9
|
+
throw new request_validation_error_1.RequestValidationError(errros.array());
|
|
10
|
+
}
|
|
11
|
+
next();
|
|
12
|
+
};
|
|
13
|
+
exports.validateRequest = validateRequest;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Redis from "ioredis";
|
|
2
|
+
declare class RedisWrapper {
|
|
3
|
+
private _client?;
|
|
4
|
+
get client(): Redis;
|
|
5
|
+
connect(host: string, port: number, username?: string, password?: string): Promise<void>;
|
|
6
|
+
set(key: string, value: string, expiryInSeconds?: number): Promise<void>;
|
|
7
|
+
get(key: string): Promise<string | null>;
|
|
8
|
+
revokeToken(token: string, expiryTime: number): Promise<void>;
|
|
9
|
+
isTokenRevoked(token: string): Promise<boolean>;
|
|
10
|
+
del(key: string): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
declare const redisWrapper: RedisWrapper;
|
|
13
|
+
export { redisWrapper };
|
|
@@ -0,0 +1,104 @@
|
|
|
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
|
+
exports.redisWrapper = void 0;
|
|
16
|
+
const ioredis_1 = __importDefault(require("ioredis"));
|
|
17
|
+
class RedisWrapper {
|
|
18
|
+
get client() {
|
|
19
|
+
if (!this._client) {
|
|
20
|
+
throw new Error("You have to initialize Redis first");
|
|
21
|
+
}
|
|
22
|
+
return this._client;
|
|
23
|
+
}
|
|
24
|
+
connect(host, port, username, password) {
|
|
25
|
+
const options = {
|
|
26
|
+
host,
|
|
27
|
+
port,
|
|
28
|
+
username,
|
|
29
|
+
password,
|
|
30
|
+
};
|
|
31
|
+
this._client = new ioredis_1.default(options);
|
|
32
|
+
return new Promise((resolve, reject) => {
|
|
33
|
+
this._client.on("connect", () => {
|
|
34
|
+
console.log("Successfully connected to Redis");
|
|
35
|
+
resolve();
|
|
36
|
+
});
|
|
37
|
+
this._client.on("error", (err) => {
|
|
38
|
+
console.error("Error connecting to Redis", err);
|
|
39
|
+
reject(err);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
set(key, value, expiryInSeconds) {
|
|
44
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
45
|
+
return new Promise((resolve, reject) => {
|
|
46
|
+
this.client.set(key, value, (err) => {
|
|
47
|
+
if (err) {
|
|
48
|
+
return reject(err);
|
|
49
|
+
}
|
|
50
|
+
if (expiryInSeconds) {
|
|
51
|
+
this.client.expire(key, expiryInSeconds, (expireErr) => {
|
|
52
|
+
if (expireErr) {
|
|
53
|
+
return reject(expireErr);
|
|
54
|
+
}
|
|
55
|
+
resolve();
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
resolve();
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
get(key) {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
67
|
+
return new Promise((resolve, reject) => {
|
|
68
|
+
this.client.get(key, (err, data) => {
|
|
69
|
+
if (err) {
|
|
70
|
+
return reject(err);
|
|
71
|
+
}
|
|
72
|
+
resolve(data !== null && data !== void 0 ? data : null); // Ensure resolve gets string or null
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
revokeToken(token, expiryTime) {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
79
|
+
yield this.set(token, "revoked", expiryTime);
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
isTokenRevoked(token) {
|
|
83
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
84
|
+
const value = yield this.get(token);
|
|
85
|
+
return value === "revoked";
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
del(key) {
|
|
89
|
+
var _a;
|
|
90
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
91
|
+
(_a = this._client) === null || _a === void 0 ? void 0 : _a.sendCommand;
|
|
92
|
+
return new Promise((resolve, reject) => {
|
|
93
|
+
this.client.del(key, (err) => {
|
|
94
|
+
if (err) {
|
|
95
|
+
return reject(err);
|
|
96
|
+
}
|
|
97
|
+
resolve();
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const redisWrapper = new RedisWrapper();
|
|
104
|
+
exports.redisWrapper = redisWrapper;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const REDIS_REPOSITORY = "RedisRepository";
|
|
2
|
+
export declare const getPermissions: (id: string) => string;
|
|
3
|
+
export declare const setPermissions: (id: string) => string;
|
|
4
|
+
export declare const checkRevokedToken: (id: string, token: string) => string;
|
|
5
|
+
export declare const setsetRevokedToken: (id: string, token: string) => string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setsetRevokedToken = exports.checkRevokedToken = exports.setPermissions = exports.getPermissions = exports.REDIS_REPOSITORY = void 0;
|
|
4
|
+
exports.REDIS_REPOSITORY = "RedisRepository";
|
|
5
|
+
const getPermissions = (id) => `${id}-permission`;
|
|
6
|
+
exports.getPermissions = getPermissions;
|
|
7
|
+
const setPermissions = (id) => `${id}-permission`;
|
|
8
|
+
exports.setPermissions = setPermissions;
|
|
9
|
+
const checkRevokedToken = (id, token) => `${id}-{token}`;
|
|
10
|
+
exports.checkRevokedToken = checkRevokedToken;
|
|
11
|
+
const setsetRevokedToken = (id, token) => `${id}-{token}`;
|
|
12
|
+
exports.setsetRevokedToken = setsetRevokedToken;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IRepository interface extends the IWrite and IRead interfaces, providing a combined set of methods for CRUD operations on a data source.
|
|
3
|
+
* This interface serves as a unified contract for interacting with repositories.
|
|
4
|
+
*
|
|
5
|
+
* @template T The type of data managed by repositories implementing this interface.
|
|
6
|
+
*/
|
|
7
|
+
import { IWrite, IRead } from "./based";
|
|
8
|
+
export interface IRepository<T> extends IWrite<T>, IRead<T> {
|
|
9
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IRepository interface extends the IWrite and IRead interfaces, providing a combined set of methods for CRUD operations on a data source.
|
|
4
|
+
* This interface serves as a unified contract for interacting with repositories.
|
|
5
|
+
*
|
|
6
|
+
* @template T The type of data managed by repositories implementing this interface.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface IWrite<T> {
|
|
2
|
+
create(item: T, session?: any): Promise<T>;
|
|
3
|
+
update(id: string, item: T, filter?: any, session?: any): Promise<T | null>;
|
|
4
|
+
delete(id: string, filter?: any, session?: any): Promise<T | boolean | null>;
|
|
5
|
+
}
|
|
6
|
+
export interface IRead<T> {
|
|
7
|
+
find(item: T, filter?: any, session?: any): Promise<T[]>;
|
|
8
|
+
findOne(id: string, filter?: any, session?: any): Promise<T | null>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare enum JWTType {
|
|
2
|
+
REFRESH = "REFRESH",
|
|
3
|
+
ACCESS = "ACCESS"
|
|
4
|
+
}
|
|
5
|
+
export interface JWT_Data {
|
|
6
|
+
id: string;
|
|
7
|
+
email: string;
|
|
8
|
+
role: string;
|
|
9
|
+
type: JWTType;
|
|
10
|
+
accountId?: string;
|
|
11
|
+
iat?: string;
|
|
12
|
+
exp?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class JWT {
|
|
15
|
+
static getToken(data: JWT_Data): Promise<string>;
|
|
16
|
+
static verifyToken(token: string): Promise<JWT_Data>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
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
|
+
exports.JWT = exports.JWTType = void 0;
|
|
16
|
+
const util_1 = require("util");
|
|
17
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
18
|
+
const signAsync = (0, util_1.promisify)(jsonwebtoken_1.default.sign);
|
|
19
|
+
var JWTType;
|
|
20
|
+
(function (JWTType) {
|
|
21
|
+
JWTType["REFRESH"] = "REFRESH";
|
|
22
|
+
JWTType["ACCESS"] = "ACCESS";
|
|
23
|
+
})(JWTType = exports.JWTType || (exports.JWTType = {}));
|
|
24
|
+
const secret = process.env.JWT_KEY;
|
|
25
|
+
class JWT {
|
|
26
|
+
static getToken(data) {
|
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
const token = (yield signAsync(data, secret));
|
|
29
|
+
return token;
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
static verifyToken(token) {
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
return new Promise((resolve, reject) => {
|
|
35
|
+
jsonwebtoken_1.default.verify(token, secret, function (err, decoded) {
|
|
36
|
+
if (err)
|
|
37
|
+
reject(err);
|
|
38
|
+
resolve(decoded);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.JWT = JWT;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { NotFoundError } from "../errors/not-found";
|
|
2
|
+
import { ServiceNotAvailableError } from "../errors/service-not-available";
|
|
3
|
+
import { BadRequestError } from "../errors/bad-request-error";
|
|
4
|
+
import { ForbiddenError } from "../errors/forbidden-error";
|
|
5
|
+
import { NotAuthorizedError } from "../errors/notAuthorized";
|
|
6
|
+
import { AxiosRequestError } from "../errors/axios-request-error";
|
|
7
|
+
export declare class Service {
|
|
8
|
+
protected NotFoundError: typeof NotFoundError;
|
|
9
|
+
protected BadRequestError: typeof BadRequestError;
|
|
10
|
+
protected ForbiddenError: typeof ForbiddenError;
|
|
11
|
+
protected NotAuthorizedError: typeof NotAuthorizedError;
|
|
12
|
+
protected ServiceNotAvailableError: typeof ServiceNotAvailableError;
|
|
13
|
+
protected AxiosRequestError: typeof AxiosRequestError;
|
|
14
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Service = void 0;
|
|
4
|
+
const not_found_1 = require("../errors/not-found");
|
|
5
|
+
const service_not_available_1 = require("../errors/service-not-available");
|
|
6
|
+
const bad_request_error_1 = require("../errors/bad-request-error");
|
|
7
|
+
const forbidden_error_1 = require("../errors/forbidden-error");
|
|
8
|
+
const notAuthorized_1 = require("../errors/notAuthorized");
|
|
9
|
+
const axios_request_error_1 = require("../errors/axios-request-error");
|
|
10
|
+
class Service {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.NotFoundError = not_found_1.NotFoundError;
|
|
13
|
+
this.BadRequestError = bad_request_error_1.BadRequestError;
|
|
14
|
+
this.ForbiddenError = forbidden_error_1.ForbiddenError;
|
|
15
|
+
this.NotAuthorizedError = notAuthorized_1.NotAuthorizedError;
|
|
16
|
+
this.ServiceNotAvailableError = service_not_available_1.ServiceNotAvailableError;
|
|
17
|
+
this.AxiosRequestError = axios_request_error_1.AxiosRequestError;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.Service = Service;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
export interface PersonalizationEntry {
|
|
3
|
+
email: string;
|
|
4
|
+
data: Record<string, any>;
|
|
5
|
+
}
|
|
6
|
+
export interface EmailData {
|
|
7
|
+
to: string;
|
|
8
|
+
subject: string;
|
|
9
|
+
templateId?: string;
|
|
10
|
+
personalization?: PersonalizationEntry[];
|
|
11
|
+
pdf?: {
|
|
12
|
+
file: Buffer;
|
|
13
|
+
fileName: string;
|
|
14
|
+
};
|
|
15
|
+
sendAt?: number;
|
|
16
|
+
}
|
|
17
|
+
export declare class EmailService {
|
|
18
|
+
private mailerSend;
|
|
19
|
+
constructor(apiKey: string);
|
|
20
|
+
/**
|
|
21
|
+
*
|
|
22
|
+
* @param data the send mail data
|
|
23
|
+
*/
|
|
24
|
+
sendEmail(data: EmailData, send_email: string, sender_name: string, recipient_name?: string): Promise<void>;
|
|
25
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
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.EmailService = void 0;
|
|
13
|
+
const mailersend_1 = require("mailersend");
|
|
14
|
+
class EmailService {
|
|
15
|
+
constructor(apiKey) {
|
|
16
|
+
this.mailerSend = new mailersend_1.MailerSend({
|
|
17
|
+
apiKey,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
*
|
|
22
|
+
* @param data the send mail data
|
|
23
|
+
*/
|
|
24
|
+
sendEmail(data, send_email, sender_name, recipient_name = "") {
|
|
25
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
26
|
+
const sentFrom = new mailersend_1.Sender(send_email, sender_name);
|
|
27
|
+
const recipients = [new mailersend_1.Recipient(data.to, recipient_name)];
|
|
28
|
+
const emailParams = new mailersend_1.EmailParams()
|
|
29
|
+
.setFrom(sentFrom)
|
|
30
|
+
.setTo(recipients)
|
|
31
|
+
.setReplyTo(sentFrom)
|
|
32
|
+
.setSubject(data.subject);
|
|
33
|
+
if (data.templateId) {
|
|
34
|
+
emailParams.setTemplateId(data.templateId);
|
|
35
|
+
if (data.personalization) {
|
|
36
|
+
const personalizationArray = data.personalization.map(entry => ({
|
|
37
|
+
email: entry.email,
|
|
38
|
+
data: entry.data,
|
|
39
|
+
}));
|
|
40
|
+
emailParams.setPersonalization(personalizationArray);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (data.pdf) {
|
|
44
|
+
const pdfAttachment = [
|
|
45
|
+
new mailersend_1.Attachment(data.pdf.file.toString('base64'), data.pdf.fileName, "attachment")
|
|
46
|
+
];
|
|
47
|
+
emailParams.setAttachments(pdfAttachment);
|
|
48
|
+
}
|
|
49
|
+
if (data.sendAt) {
|
|
50
|
+
emailParams.setSendAt(new Date(data.sendAt * 1000).getTime());
|
|
51
|
+
}
|
|
52
|
+
yield this.mailerSend.email.send(emailParams);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.EmailService = EmailService;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const isJwt: (token: string) => boolean;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isJwt = void 0;
|
|
4
|
+
function isBase64Url(str) {
|
|
5
|
+
const base64urlRegex = /^[A-Za-z0-9_-]+$/;
|
|
6
|
+
return base64urlRegex.test(str);
|
|
7
|
+
}
|
|
8
|
+
const isJwt = (token) => {
|
|
9
|
+
const parts = token.split(".");
|
|
10
|
+
if (parts.length !== 3) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
const [header, payload, signature] = parts;
|
|
14
|
+
if (!isBase64Url(header) ||
|
|
15
|
+
!isBase64Url(payload) ||
|
|
16
|
+
!isBase64Url(signature)) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const decodedHeader = JSON.parse(Buffer.from(header, "base64url").toString("utf8"));
|
|
21
|
+
return decodedHeader.typ === "JWT";
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
exports.isJwt = isJwt;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseQueryToStrings = void 0;
|
|
4
|
+
const parseQueryToStrings = (query) => {
|
|
5
|
+
const parsedQuery = {};
|
|
6
|
+
for (const key in query) {
|
|
7
|
+
if (query.hasOwnProperty(key)) {
|
|
8
|
+
const value = query[key];
|
|
9
|
+
if (typeof value === "string") {
|
|
10
|
+
parsedQuery[key] = value;
|
|
11
|
+
}
|
|
12
|
+
else if (Array.isArray(value)) {
|
|
13
|
+
parsedQuery[key] = value.join(",");
|
|
14
|
+
}
|
|
15
|
+
else if (value !== undefined) {
|
|
16
|
+
parsedQuery[key] = String(value);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return parsedQuery;
|
|
21
|
+
};
|
|
22
|
+
exports.parseQueryToStrings = parseQueryToStrings;
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@konplit-services/common",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "./build/index.js",
|
|
6
|
+
"types": "./build/index.d.ts",
|
|
7
|
+
"private": false,
|
|
8
|
+
"files": [
|
|
9
|
+
"build/**/*"
|
|
10
|
+
],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc",
|
|
13
|
+
"pub": "git add . && git commit -m \"updates\" && npm version patch && npm run build && npm publish --access public"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [],
|
|
16
|
+
"author": "",
|
|
17
|
+
"license": "ISC",
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"trash-cli": "^5.0.0",
|
|
20
|
+
"typescript": "^4.7.4"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@types/cookie-session": "^2.0.45",
|
|
24
|
+
"@types/express": "^4.17.13",
|
|
25
|
+
"@types/jsonwebtoken": "^8.5.8",
|
|
26
|
+
"@types/node": "^18.6.1",
|
|
27
|
+
"@types/pug": "^2.0.7",
|
|
28
|
+
"cookie-session": "^2.0.0",
|
|
29
|
+
"express": "^4.18.1",
|
|
30
|
+
"express-validator": "^6.14.2",
|
|
31
|
+
"ioredis": "^5.4.1",
|
|
32
|
+
"jsonwebtoken": "^8.5.1",
|
|
33
|
+
"mailersend": "^2.0.5",
|
|
34
|
+
"mongoose": "^6.9.2",
|
|
35
|
+
"nats": "^2.25.0",
|
|
36
|
+
"node-ipinfo": "^3.5.0",
|
|
37
|
+
"pug": "^3.0.2",
|
|
38
|
+
"puppeteer": "^21.3.6",
|
|
39
|
+
"ts-node-dev": "^2.0.0",
|
|
40
|
+
"typescript": "^4.8.4"
|
|
41
|
+
},
|
|
42
|
+
"engines": {
|
|
43
|
+
"node": "v18.20.1",
|
|
44
|
+
"npm": "8.1.0"
|
|
45
|
+
}
|
|
46
|
+
}
|