@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.
Files changed (119) hide show
  1. package/README.md +1 -0
  2. package/README.md.old +45 -0
  3. package/build/app.d.ts +0 -0
  4. package/build/app.js +1 -0
  5. package/build/aws/aws-cluster-manager.d.ts +28 -0
  6. package/build/aws/aws-cluster-manager.js +105 -0
  7. package/build/aws/aws-email-manager.d.ts +24 -0
  8. package/build/aws/aws-email-manager.js +57 -0
  9. package/build/aws/aws-queue-manager.d.ts +37 -0
  10. package/build/aws/aws-queue-manager.js +100 -0
  11. package/build/aws/aws.interfaces.d.ts +39 -0
  12. package/build/aws/aws.interfaces.js +2 -0
  13. package/build/aws/index.d.ts +4 -0
  14. package/build/aws/index.js +20 -0
  15. package/build/common/base/__test__/base.model.test.d.ts +1 -0
  16. package/build/common/base/__test__/base.model.test.js +283 -0
  17. package/build/common/base/base.controller.d.ts +124 -0
  18. package/build/common/base/base.controller.js +134 -0
  19. package/build/common/base/base.interfaces.d.ts +81 -0
  20. package/build/common/base/base.interfaces.js +2 -0
  21. package/build/common/base/base.model.d.ts +384 -0
  22. package/build/common/base/base.model.js +730 -0
  23. package/build/common/base/folded.model.d.ts +41 -0
  24. package/build/common/base/folded.model.js +215 -0
  25. package/build/common/base/mongo-utils.d.ts +122 -0
  26. package/build/common/base/mongo-utils.js +242 -0
  27. package/build/common/base/mongo.types.d.ts +20 -0
  28. package/build/common/base/mongo.types.js +2 -0
  29. package/build/common/base/sql-utils.d.ts +20 -0
  30. package/build/common/base/sql-utils.js +69 -0
  31. package/build/common/constants.d.ts +27 -0
  32. package/build/common/constants.js +70 -0
  33. package/build/common/crypto/crypto.classes.d.ts +100 -0
  34. package/build/common/crypto/crypto.classes.js +146 -0
  35. package/build/common/crypto/crypto.constants.d.ts +68 -0
  36. package/build/common/crypto/crypto.constants.js +57 -0
  37. package/build/common/crypto/crypto.error.d.ts +4 -0
  38. package/build/common/crypto/crypto.error.js +10 -0
  39. package/build/common/crypto/crypto.interfaces.d.ts +46 -0
  40. package/build/common/crypto/crypto.interfaces.js +2 -0
  41. package/build/common/crypto/crypto.utils.d.ts +139 -0
  42. package/build/common/crypto/crypto.utils.js +380 -0
  43. package/build/common/crypto/index.d.ts +3 -0
  44. package/build/common/crypto/index.js +19 -0
  45. package/build/common/enums.d.ts +61 -0
  46. package/build/common/enums.js +75 -0
  47. package/build/common/errors.d.ts +13 -0
  48. package/build/common/errors.js +24 -0
  49. package/build/common/express/express.interfaces.d.ts +20 -0
  50. package/build/common/express/express.interfaces.js +2 -0
  51. package/build/common/express/express.utils.d.ts +31 -0
  52. package/build/common/express/express.utils.js +85 -0
  53. package/build/common/express/index.d.ts +2 -0
  54. package/build/common/express/index.js +18 -0
  55. package/build/common/graphql/__test__/generator.schema.test.d.ts +1 -0
  56. package/build/common/graphql/__test__/generator.schema.test.js +391 -0
  57. package/build/common/graphql/directives.d.ts +18 -0
  58. package/build/common/graphql/directives.js +56 -0
  59. package/build/common/graphql/generator copy.d.ts +41 -0
  60. package/build/common/graphql/generator copy.js +385 -0
  61. package/build/common/graphql/generator.d.ts +42 -0
  62. package/build/common/graphql/generator.js +385 -0
  63. package/build/common/graphql/index.d.ts +4 -0
  64. package/build/common/graphql/index.js +21 -0
  65. package/build/common/graphql/interfaces.d.ts +67 -0
  66. package/build/common/graphql/interfaces.js +2 -0
  67. package/build/common/graphql/loader.d.ts +22 -0
  68. package/build/common/graphql/loader.js +186 -0
  69. package/build/common/graphql/scalars/index.d.ts +10 -0
  70. package/build/common/graphql/scalars/index.js +6 -0
  71. package/build/common/graphql/scalars/resolvers.d.ts +8 -0
  72. package/build/common/graphql/scalars/resolvers.js +71 -0
  73. package/build/common/graphql/scalars/schema.d.ts +1 -0
  74. package/build/common/graphql/scalars/schema.js +12 -0
  75. package/build/common/graphql/types/index.d.ts +3 -0
  76. package/build/common/graphql/types/index.js +6 -0
  77. package/build/common/graphql/types/schema.d.ts +1 -0
  78. package/build/common/graphql/types/schema.js +98 -0
  79. package/build/common/graphql/utils.d.ts +18 -0
  80. package/build/common/graphql/utils.js +40 -0
  81. package/build/common/grid-fs/gridfs-base.model.d.ts +53 -0
  82. package/build/common/grid-fs/gridfs-base.model.js +95 -0
  83. package/build/common/grid-fs/gridfs.interfaces.d.ts +41 -0
  84. package/build/common/grid-fs/gridfs.interfaces.js +2 -0
  85. package/build/common/index.d.ts +10 -0
  86. package/build/common/index.js +32 -0
  87. package/build/common/interfaces.d.ts +26 -0
  88. package/build/common/interfaces.js +10 -0
  89. package/build/common/manager/bulk-manager.d.ts +59 -0
  90. package/build/common/manager/bulk-manager.js +103 -0
  91. package/build/common/manager/crypto-manager.d.ts +88 -0
  92. package/build/common/manager/crypto-manager.js +200 -0
  93. package/build/common/manager/index.d.ts +5 -0
  94. package/build/common/manager/index.js +21 -0
  95. package/build/common/manager/pubsub-manager.d.ts +20 -0
  96. package/build/common/manager/pubsub-manager.js +38 -0
  97. package/build/common/manager/shutdown-manager.d.ts +27 -0
  98. package/build/common/manager/shutdown-manager.js +118 -0
  99. package/build/common/manager/socket-io-cli-manager.d.ts +53 -0
  100. package/build/common/manager/socket-io-cli-manager.js +91 -0
  101. package/build/common/manager/tunnel-manager.d.ts +28 -0
  102. package/build/common/manager/tunnel-manager.js +49 -0
  103. package/build/common/models/coded-entity.controller.d.ts +5 -0
  104. package/build/common/models/coded-entity.controller.js +9 -0
  105. package/build/common/models/coded-entity.model.d.ts +25 -0
  106. package/build/common/models/coded-entity.model.js +51 -0
  107. package/build/common/models/user.model.d.ts +56 -0
  108. package/build/common/models/user.model.js +72 -0
  109. package/build/common/types.d.ts +136 -0
  110. package/build/common/types.js +16 -0
  111. package/build/common/utils.d.ts +552 -0
  112. package/build/common/utils.js +1100 -0
  113. package/build/index.d.ts +2 -0
  114. package/build/index.js +18 -0
  115. package/build/test/env.d.ts +0 -0
  116. package/build/test/env.js +5 -0
  117. package/build/test/setup.d.ts +6 -0
  118. package/build/test/setup.js +59 -0
  119. package/package.json +90 -0
@@ -0,0 +1,139 @@
1
+ /// <reference types="node" />
2
+ import { Stream } from 'stream';
3
+ import { NxObject } from '../interfaces';
4
+ import { BlindIndexOptions } from './crypto.interfaces';
5
+ import { SymmetricKey, AsymmetricKeyPair } from './crypto.classes';
6
+ export declare class CryptoUtils {
7
+ logger: any;
8
+ constructor();
9
+ /**
10
+ * Generate a random Symmetric key based on AES bit size specified
11
+ *
12
+ * @param { number } aesBitSize bit size used by AES algorithm (128/192/256)
13
+ * @returns { Promise<SymmetricKey> } Promise that resolve SymmetricKey
14
+ */
15
+ generateRndSymKey(aesBitSize: number): Promise<SymmetricKey>;
16
+ /**
17
+ * Generate Asymmetric keys (public/private) based on RSA algorithm modulus bit size
18
+ *
19
+ * @param { number } modLength bit size of modulus used by RSA algorithm (1024/2048/4096)
20
+ * @returns { Promise<AsymmetricKeyPair> } Promise that resolve KeyPairKeyObjectResult
21
+ */
22
+ generateAsymKeys(modLength: number): Promise<AsymmetricKeyPair>;
23
+ /**
24
+ * Cypher data by AES algorithm using given SymmetricKey object
25
+ *
26
+ * @param { SymmetricKey } keyObj
27
+ * @param { Stream | string } data
28
+ * @returns { Promise< Stream | string > } Promise that resolve Stream or string of cyphered data (Based on given Type of data )
29
+ */
30
+ cypherSym(keyObj: SymmetricKey, data: Stream | string): Promise<Stream | string>;
31
+ /**
32
+ * Decypher encripted data by AES algorithm using given SymmetricKey object
33
+ *
34
+ * @param { SymmetricKey } keyObj
35
+ * @param { Stream | string } encData
36
+ * @returns { Promise< Stream | string > } Promise that resolve Stream or string of decyphered data (Based on given Type of data)
37
+ */
38
+ decypherSym(keyObj: SymmetricKey, encData: Stream | string): Promise<Stream | string>;
39
+ /**
40
+ * Cypher data by RSA algorithm using public key string
41
+ *
42
+ * @param { string } publicKey
43
+ * @param { string } data
44
+ * @returns { Promise<string> } Promise that resolve string of publicKey cyphered data
45
+ */
46
+ cypherAsym(publicKey: string, data: string): Promise<string>;
47
+ /**
48
+ * Decypher encrypted (public key) data by RSA algorithm using private key string
49
+ *
50
+ * @param { string } privateKey
51
+ * @param {*} encData
52
+ * @returns { Promise<string> } Promise that resolve string of privateKey decyphered data
53
+ */
54
+ decypherAsym(privateKey: string, encData: string): Promise<string>;
55
+ /**
56
+ * Decrypt AES encrypted string using CryptoJs
57
+ *
58
+ * @param { string } text AES encrypted string to be decrypted
59
+ * @param { string } secret Secret string to decrypt value
60
+ * @returns { string } Decrypted value
61
+ */
62
+ decryptText(text: string, secret: string): string;
63
+ /**
64
+ * Encrypt plain text string to AES using CryptoJS
65
+ *
66
+ * @param { string } text Plain text string to be AES encrypted
67
+ * @param { string } secret Secret string to encrypt value
68
+ * @returns { string } Encrypted value
69
+ */
70
+ encryptText(text: string, secret: string): string;
71
+ /**
72
+ * Generate an md5 hash from given string
73
+ *
74
+ * @param {string} text
75
+ */
76
+ md5(text: string): string;
77
+ /**
78
+ *
79
+ * @param {*} text
80
+ * @returns
81
+ */
82
+ sha256(text: string): string;
83
+ /**
84
+ *
85
+ * @param {*} text
86
+ * @returns
87
+ */
88
+ sha512(text: string): string;
89
+ /**
90
+ * Encrypt a text to PBKDF2 derivation function using given salt and keysize
91
+ *
92
+ * @param { string } text
93
+ * @param { string } salt
94
+ * @param { number} keySize default 256
95
+ * @return { string } Hashed value
96
+ */
97
+ pbkdf2(text: string, salt: string, keySize?: number, hasher?: any, iterations?: number): string;
98
+ /**
99
+ * Encrypt a text to PBKDF2 derivation function using given salt and keysize
100
+ *
101
+ * @param { string } text
102
+ * @param { string } salt
103
+ * @param { number} keylen default 8
104
+ * @param { number} iterations default 10000
105
+ * @param { string} digest default sha256
106
+ * @return { string } Hashed value
107
+ */
108
+ pbkdf2Node(text: string, salt: string, keylen?: number, iterations?: number, digest?: string): string;
109
+ /**
110
+ *
111
+ * @param {*} item
112
+ * @param {*} keys
113
+ */
114
+ encryptSearchableFields(item: NxObject | undefined, keys: string[] | undefined, salts: string[], secret: string, opts: BlindIndexOptions): void;
115
+ /**
116
+ *
117
+ * @param {*} item
118
+ * @param {*} key
119
+ */
120
+ encryptSearchableField(item: NxObject, key: string, salt: string, secret: string, opts: BlindIndexOptions): void;
121
+ /**
122
+ *
123
+ * @param {*} item
124
+ * @param {*} keys
125
+ */
126
+ createBlindIndexes(item: NxObject | undefined, keys: string[] | undefined, secret: string, opts?: BlindIndexOptions): void;
127
+ /**
128
+ *
129
+ * @param {*} item
130
+ * @param {*} key
131
+ */
132
+ createBlindIndex(item: NxObject, key: string, salt: string, { hasher, iterations, keySize, normalize }?: BlindIndexOptions): void;
133
+ /**
134
+ *
135
+ * @param {*} item
136
+ * @param {*} key
137
+ */
138
+ getBlindIndex(item: NxObject, key: string): string;
139
+ }
@@ -0,0 +1,380 @@
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.CryptoUtils = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const crypto_js_1 = __importDefault(require("crypto-js"));
9
+ const stream_1 = require("stream");
10
+ const constants_1 = require("../constants");
11
+ const utils_1 = require("../utils");
12
+ const utils_2 = require("../utils");
13
+ const crypto_constants_1 = require("./crypto.constants");
14
+ const crypto_constants_2 = require("./crypto.constants");
15
+ const crypto_constants_3 = require("./crypto.constants");
16
+ const crypto_constants_4 = require("./crypto.constants");
17
+ const crypto_constants_5 = require("./crypto.constants");
18
+ const crypto_classes_1 = require("./crypto.classes");
19
+ class CryptoUtils {
20
+ constructor() {
21
+ this.logger = constants_1.APP.logger;
22
+ }
23
+ /**
24
+ * Generate a random Symmetric key based on AES bit size specified
25
+ *
26
+ * @param { number } aesBitSize bit size used by AES algorithm (128/192/256)
27
+ * @returns { Promise<SymmetricKey> } Promise that resolve SymmetricKey
28
+ */
29
+ generateRndSymKey(aesBitSize) {
30
+ const logCtx = (0, utils_1.logClassCtx)(this, 'generateRndSymKey');
31
+ return new Promise((resolve, reject) => {
32
+ try {
33
+ if (!crypto_constants_1.CRYPTO_SYM_BITSIZE_MAP[aesBitSize]) {
34
+ // TODO
35
+ const error = crypto_constants_5.CRYPTO_ERRORS.SYM_BITSIZE;
36
+ this.logger.error(`[${error.code}] ${error.message}`, logCtx);
37
+ reject(error);
38
+ }
39
+ const { keySize, ivSize, saltSize, phraseSize } = crypto_constants_1.CRYPTO_SYM_BITSIZE_MAP[aesBitSize];
40
+ const ivBuffer = (0, utils_2.generateRandomBuffer)(ivSize);
41
+ const salt = (0, utils_2.generateRandomBuffer)(saltSize).toString('hex');
42
+ const phrase = (0, utils_2.generateRandomBuffer)(phraseSize).toString('hex');
43
+ const keySizeBytes = keySize / 8;
44
+ const keyBuffer = crypto_1.default.scryptSync(phrase, salt, keySizeBytes);
45
+ const symKey = new crypto_classes_1.SymmetricKey({ key: keyBuffer.toString('base64'), iv: ivBuffer.toString('base64'), size: aesBitSize });
46
+ resolve(symKey);
47
+ }
48
+ catch (err) {
49
+ const error = { message: err, code: crypto_constants_5.CRYPTO_ERR_CODES.SYM_KEYGEN };
50
+ this.logger.error(`[${error.code}] ${error.message}`, logCtx);
51
+ reject(error);
52
+ }
53
+ });
54
+ }
55
+ /**
56
+ * Generate Asymmetric keys (public/private) based on RSA algorithm modulus bit size
57
+ *
58
+ * @param { number } modLength bit size of modulus used by RSA algorithm (1024/2048/4096)
59
+ * @returns { Promise<AsymmetricKeyPair> } Promise that resolve KeyPairKeyObjectResult
60
+ */
61
+ generateAsymKeys(modLength) {
62
+ const logCtx = (0, utils_1.logClassCtx)(this, 'generateAsymKeys');
63
+ return new Promise((resolve, reject) => {
64
+ try {
65
+ if (!(crypto_constants_4.CRYPTO_ASYM_BITSIZE_LIST.includes(modLength))) {
66
+ const error = crypto_constants_5.CRYPTO_ERRORS.ASYM_BITSIZE;
67
+ this.logger.error(`[${error.code}] ${error.message}`, logCtx);
68
+ reject(error);
69
+ }
70
+ const options = { modulusLength: modLength, publicKeyEncoding: crypto_constants_2.CRYPTO_PUB_KEY_ENCODING, privateKeyEncoding: crypto_constants_3.CRYPTO_PRIV_KEY_ENCODING };
71
+ const { publicKey, privateKey } = crypto_1.default.generateKeyPairSync('rsa', options);
72
+ const keyPair = new crypto_classes_1.AsymmetricKeyPair({ publicKey, privateKey });
73
+ resolve(keyPair);
74
+ }
75
+ catch (err) {
76
+ const error = { message: err, code: crypto_constants_5.CRYPTO_ERR_CODES.ASYM_KEYGEN };
77
+ this.logger.error(`[${error.code}] ${error.message}`, logCtx);
78
+ reject(error);
79
+ }
80
+ });
81
+ }
82
+ /**
83
+ * Cypher data by AES algorithm using given SymmetricKey object
84
+ *
85
+ * @param { SymmetricKey } keyObj
86
+ * @param { Stream | string } data
87
+ * @returns { Promise< Stream | string > } Promise that resolve Stream or string of cyphered data (Based on given Type of data )
88
+ */
89
+ cypherSym(keyObj, data) {
90
+ const logCtx = (0, utils_1.logClassCtx)(this, 'cypherSym');
91
+ return new Promise((resolve, reject) => {
92
+ try {
93
+ const key = Buffer.from(keyObj.key, 'base64');
94
+ const iv = Buffer.from(keyObj.iv, 'base64');
95
+ const algorithm = `aes${keyObj.size}`;
96
+ const cypher = crypto_1.default.createCipheriv(algorithm, key, iv);
97
+ if (data instanceof stream_1.Stream)
98
+ resolve(data.pipe(cypher));
99
+ else if ((0, utils_2.isString)(data)) {
100
+ let encrypted = cypher.update(data, 'utf8', 'hex');
101
+ encrypted += cypher.final('hex');
102
+ resolve(encrypted);
103
+ }
104
+ else {
105
+ const error = crypto_constants_5.CRYPTO_ERRORS.SYM_DATA_TYPE;
106
+ this.logger.error(`[${error.code}] ${error.message}`, logCtx);
107
+ reject(error);
108
+ }
109
+ }
110
+ catch (err) {
111
+ const error = { message: err, code: crypto_constants_5.CRYPTO_ERR_CODES.SYM_ENC };
112
+ this.logger.error(`[${error.code}] ${error.message}`, logCtx);
113
+ reject(error);
114
+ }
115
+ });
116
+ }
117
+ /**
118
+ * Decypher encripted data by AES algorithm using given SymmetricKey object
119
+ *
120
+ * @param { SymmetricKey } keyObj
121
+ * @param { Stream | string } encData
122
+ * @returns { Promise< Stream | string > } Promise that resolve Stream or string of decyphered data (Based on given Type of data)
123
+ */
124
+ decypherSym(keyObj, encData) {
125
+ const logCtx = (0, utils_1.logClassCtx)(this, 'decypherSym');
126
+ return new Promise((resolve, reject) => {
127
+ try {
128
+ const key = Buffer.from(keyObj.key, 'base64');
129
+ const iv = Buffer.from(keyObj.iv, 'base64');
130
+ const algorithm = `aes${keyObj.size}`;
131
+ const decypher = crypto_1.default.createDecipheriv(algorithm, key, iv);
132
+ if (encData instanceof stream_1.Stream)
133
+ resolve(encData.pipe(decypher));
134
+ else if ((0, utils_2.isString)(encData)) {
135
+ let decrypted = decypher.update(encData, 'hex', 'utf8');
136
+ decrypted += decypher.final('utf8');
137
+ resolve(decrypted);
138
+ }
139
+ else {
140
+ const error = crypto_constants_5.CRYPTO_ERRORS.SYM_DATA_TYPE;
141
+ this.logger.error(`[${error.code}] ${error.message}`, logCtx);
142
+ reject(error);
143
+ }
144
+ }
145
+ catch (err) {
146
+ const error = { message: err, code: crypto_constants_5.CRYPTO_ERR_CODES.SYM_DEC };
147
+ this.logger.error(`[${error.code}] ${error.message}`, logCtx);
148
+ reject(error);
149
+ }
150
+ });
151
+ }
152
+ /**
153
+ * Cypher data by RSA algorithm using public key string
154
+ *
155
+ * @param { string } publicKey
156
+ * @param { string } data
157
+ * @returns { Promise<string> } Promise that resolve string of publicKey cyphered data
158
+ */
159
+ cypherAsym(publicKey, data) {
160
+ const logCtx = (0, utils_1.logClassCtx)(this, 'cypherAsym');
161
+ return new Promise((resolve, reject) => {
162
+ try {
163
+ if (!publicKey || !data) {
164
+ const error = crypto_constants_5.CRYPTO_ERRORS.ASYM_PUB_ARGS;
165
+ this.logger.error(`[${error.code}] ${error.message}`, logCtx);
166
+ reject(error);
167
+ }
168
+ const pubEncrypted = crypto_1.default.publicEncrypt(publicKey, Buffer.from(data)).toString('base64');
169
+ resolve(pubEncrypted);
170
+ }
171
+ catch (err) {
172
+ const error = { message: err, code: crypto_constants_5.CRYPTO_ERR_CODES.ASYM_ENC };
173
+ this.logger.error(`[${error.code}] ${error.message}`, logCtx);
174
+ reject(error);
175
+ }
176
+ });
177
+ }
178
+ /**
179
+ * Decypher encrypted (public key) data by RSA algorithm using private key string
180
+ *
181
+ * @param { string } privateKey
182
+ * @param {*} encData
183
+ * @returns { Promise<string> } Promise that resolve string of privateKey decyphered data
184
+ */
185
+ decypherAsym(privateKey, encData) {
186
+ const logCtx = (0, utils_1.logClassCtx)(this, 'decypherAsym');
187
+ return new Promise((resolve, reject) => {
188
+ try {
189
+ if (!privateKey || !encData) {
190
+ const error = crypto_constants_5.CRYPTO_ERRORS.ASYM_PRIV_ARGS;
191
+ this.logger.error(`[${error.code}] ${error.message}`, logCtx);
192
+ reject(error);
193
+ }
194
+ const privDecrypted = crypto_1.default.privateDecrypt(privateKey, Buffer.from(encData, 'base64')).toString();
195
+ resolve(privDecrypted);
196
+ }
197
+ catch (err) {
198
+ const error = { message: err, code: crypto_constants_5.CRYPTO_ERR_CODES.ASYM_DEC };
199
+ this.logger.error(`[${error.code}] ${error.message}`, logCtx);
200
+ reject(error);
201
+ }
202
+ });
203
+ }
204
+ // --------------------------------------------------------- CRYPTO-JS METHODS ---------------------------------------------------------------------------
205
+ /**
206
+ * Decrypt AES encrypted string using CryptoJs
207
+ *
208
+ * @param { string } text AES encrypted string to be decrypted
209
+ * @param { string } secret Secret string to decrypt value
210
+ * @returns { string } Decrypted value
211
+ */
212
+ decryptText(text, secret) {
213
+ if (!text || !secret)
214
+ return '';
215
+ return crypto_js_1.default.AES.decrypt(text, secret).toString(crypto_js_1.default.enc.Utf8);
216
+ }
217
+ /**
218
+ * Encrypt plain text string to AES using CryptoJS
219
+ *
220
+ * @param { string } text Plain text string to be AES encrypted
221
+ * @param { string } secret Secret string to encrypt value
222
+ * @returns { string } Encrypted value
223
+ */
224
+ encryptText(text, secret) {
225
+ if (!text || !secret)
226
+ return '';
227
+ return crypto_js_1.default.AES.encrypt(text, secret).toString();
228
+ }
229
+ /**
230
+ * Generate an md5 hash from given string
231
+ *
232
+ * @param {string} text
233
+ */
234
+ md5(text) {
235
+ if (!text)
236
+ return '';
237
+ return crypto_js_1.default.MD5(text).toString();
238
+ }
239
+ /**
240
+ *
241
+ * @param {*} text
242
+ * @returns
243
+ */
244
+ sha256(text) {
245
+ if (!text)
246
+ return '';
247
+ return crypto_js_1.default.SHA256(text).toString();
248
+ }
249
+ /**
250
+ *
251
+ * @param {*} text
252
+ * @returns
253
+ */
254
+ sha512(text) {
255
+ if (!text)
256
+ return '';
257
+ return crypto_js_1.default.SHA512(text).toString();
258
+ }
259
+ /**
260
+ * Encrypt a text to PBKDF2 derivation function using given salt and keysize
261
+ *
262
+ * @param { string } text
263
+ * @param { string } salt
264
+ * @param { number} keySize default 256
265
+ * @return { string } Hashed value
266
+ */
267
+ pbkdf2(text, salt, keySize = 256, hasher = crypto_js_1.default.algo.SHA256, iterations = 10000) {
268
+ if (!text || !salt)
269
+ return '';
270
+ return crypto_js_1.default.PBKDF2(text, salt, { keySize: keySize / 32, hasher, iterations }).toString();
271
+ }
272
+ /**
273
+ * Encrypt a text to PBKDF2 derivation function using given salt and keysize
274
+ *
275
+ * @param { string } text
276
+ * @param { string } salt
277
+ * @param { number} keylen default 8
278
+ * @param { number} iterations default 10000
279
+ * @param { string} digest default sha256
280
+ * @return { string } Hashed value
281
+ */
282
+ pbkdf2Node(text, salt, keylen = 8, iterations = 10000, digest = 'sha256') {
283
+ if (!text || !salt)
284
+ return '';
285
+ return crypto_1.default.pbkdf2Sync(text, salt, iterations, keylen, digest).toString('hex');
286
+ }
287
+ /**
288
+ *
289
+ * @param {*} item
290
+ * @param {*} keys
291
+ */
292
+ encryptSearchableFields(item = {}, keys = [], salts, secret, opts) {
293
+ keys.forEach((k, index) => this.encryptSearchableField(item, k, salts && salts[index], secret, opts));
294
+ }
295
+ /**
296
+ *
297
+ * @param {*} item
298
+ * @param {*} key
299
+ */
300
+ encryptSearchableField(item, key, salt, secret, opts) {
301
+ if (!item || !key)
302
+ return;
303
+ let value = (0, utils_1.getAttr)(item, key);
304
+ if (!value)
305
+ return;
306
+ this.createBlindIndex(item, key, salt, opts);
307
+ (0, utils_1.setAttr)(item, key, this.encryptText(value, secret).toString());
308
+ }
309
+ /**
310
+ *
311
+ * @param {*} item
312
+ * @param {*} keys
313
+ */
314
+ createBlindIndexes(item = {}, keys = [], secret, opts = {}) {
315
+ keys.forEach(k => this.createBlindIndex(item, k, secret, opts));
316
+ }
317
+ /**
318
+ *
319
+ * @param {*} item
320
+ * @param {*} key
321
+ */
322
+ createBlindIndex(item, key, salt, { hasher, iterations, keySize, normalize } = {}) {
323
+ let value = (0, utils_1.getAttr)(item, key);
324
+ if (!value)
325
+ return;
326
+ if (normalize)
327
+ value = `${value}`.toUpperCase();
328
+ (0, utils_1.setAttr)(item, `${key}_bidx`, this.pbkdf2(value, salt || key, keySize, hasher, iterations));
329
+ }
330
+ /**
331
+ *
332
+ * @param {*} item
333
+ * @param {*} key
334
+ */
335
+ getBlindIndex(item, key) {
336
+ return (0, utils_1.getAttr)(item, `${key}_bidx`);
337
+ }
338
+ }
339
+ exports.CryptoUtils = CryptoUtils;
340
+ //export const cryptoUtils = new CryptoUtils();
341
+ // FOR TESTING PURPOSE ONLY
342
+ /* (function () {
343
+ function error(err) {
344
+ debugger;
345
+ return this.logger.error(err);
346
+ }
347
+ debugger;
348
+ cryptoUtils.generateRndSymKey().catch(err => {
349
+
350
+
351
+ this.logger.warn('-------------START-CRYPTO_UTILS-ERROR-TESTING--------------');
352
+ this.logger.info('----------- generateRndSymKey ------------------');
353
+ error(err);
354
+ })
355
+ .finally(() => {
356
+ this.logger.info('----------- generateAsymKeys ------------------');
357
+ cryptoUtils.generateAsymKeys().catch(error)
358
+ .finally(() => {
359
+ this.logger.info('----------- cypherSym ------------------');
360
+ const salt = generateRandomBuffer(32).toString('hex');
361
+ const phrase = generateRandomBuffer(128).toString('hex');
362
+
363
+ const key = { key: crypto.scryptSync(phrase, salt, 256), size:256, iv: generateRandomBuffer(162)};
364
+ cryptoUtils.cypherSym(key, new Stream('asd')).catch(error)
365
+ .finally(() => {
366
+ this.logger.info('----------- decypherSym ------------------');
367
+ cryptoUtils.decypherSym({}, new Stream('asd')).catch(error)
368
+ .finally(() => {
369
+ this.logger.info('----------- cypherAsym ------------------');
370
+ cryptoUtils.cypherAsym('', 'asdasdasddas').catch(error)
371
+ .finally(() => {
372
+ this.logger.info('----------- cypherAsym ------------------');
373
+ cryptoUtils.decypherAsym(' ', 'asdasdasdas').catch(error)
374
+ .finally(() => this.logger.warn('-------------END-CRYPTO_UTILS-ERROR-TESTING--------------'))
375
+ })
376
+ })
377
+ })
378
+ })
379
+ })
380
+ })(); */
@@ -0,0 +1,3 @@
1
+ export * from './crypto.interfaces';
2
+ export * from './crypto.classes';
3
+ export * from './crypto.utils';
@@ -0,0 +1,19 @@
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("./crypto.interfaces"), exports);
18
+ __exportStar(require("./crypto.classes"), exports);
19
+ __exportStar(require("./crypto.utils"), exports);
@@ -0,0 +1,61 @@
1
+ export declare enum AppMode {
2
+ DEV = "development",
3
+ PROD = "production"
4
+ }
5
+ export declare enum AppStatus {
6
+ INIT = "INIT",
7
+ OK = "OK"
8
+ }
9
+ export declare enum ModelCrudEventType {
10
+ create = "create",
11
+ update = "update",
12
+ remove = "remove",
13
+ addArrayItem = "addArrayItem",
14
+ updateArrayItem = "updateArrayItem",
15
+ removeArrayItem = "removeArrayItem"
16
+ }
17
+ export declare enum DatePeriod {
18
+ WEEK = "week",
19
+ MONTH = "month",
20
+ QUARTER_1 = "quarter1",
21
+ QUARTER_2 = "quarter2",
22
+ QUARTER_3 = "quarter3",
23
+ QUARTER_4 = "quarter4",
24
+ SEMESTER_1 = "semester1",
25
+ SEMESTER_2 = "semester2",
26
+ YEAR = "year",
27
+ CURR_WEEK = "currweek",
28
+ CURR_MONTH = "currmonth",
29
+ CURR_QUARTER = "currquarter",
30
+ CURR_SEMESTER = "currsemester",
31
+ CURR_YEAR = "curryear",
32
+ LAST_WEEK = "lastweek",
33
+ LAST_MONTH = "lastmonth",
34
+ LAST_QUARTER = "lastquarter",
35
+ LAST_SEMESTER = "lastsemester",
36
+ LAST_YEAR = "lastyear"
37
+ }
38
+ export declare enum ValueType {
39
+ BADGE = "badge",
40
+ CURRENCY = "currency",
41
+ DATE = "date",
42
+ DATETIME = "datetime",
43
+ DECIMAL = "decimal",
44
+ EMAIL = "email",
45
+ FILESIZE = "filesize",
46
+ HTML = "html",
47
+ ICON = "icon",
48
+ LINK = "link",
49
+ NUMBER = "number",
50
+ PERCENTAGE = "percentage",
51
+ PROGRESS = "progress",
52
+ SELECT = "select",
53
+ STRING = "string",
54
+ STRING_WRAP = "stringwrap",
55
+ SWITCH = "switch",
56
+ BOOLEAN = "boolean"
57
+ }
58
+ export declare enum AuthIssuer {
59
+ USER = "user",
60
+ DEVICE = "device"
61
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthIssuer = exports.ValueType = exports.DatePeriod = exports.ModelCrudEventType = exports.AppStatus = exports.AppMode = void 0;
4
+ var AppMode;
5
+ (function (AppMode) {
6
+ AppMode["DEV"] = "development";
7
+ AppMode["PROD"] = "production";
8
+ })(AppMode || (exports.AppMode = AppMode = {}));
9
+ ;
10
+ var AppStatus;
11
+ (function (AppStatus) {
12
+ AppStatus["INIT"] = "INIT";
13
+ AppStatus["OK"] = "OK";
14
+ })(AppStatus || (exports.AppStatus = AppStatus = {}));
15
+ ;
16
+ var ModelCrudEventType;
17
+ (function (ModelCrudEventType) {
18
+ ModelCrudEventType["create"] = "create";
19
+ ModelCrudEventType["update"] = "update";
20
+ ModelCrudEventType["remove"] = "remove";
21
+ ModelCrudEventType["addArrayItem"] = "addArrayItem";
22
+ ModelCrudEventType["updateArrayItem"] = "updateArrayItem";
23
+ ModelCrudEventType["removeArrayItem"] = "removeArrayItem";
24
+ })(ModelCrudEventType || (exports.ModelCrudEventType = ModelCrudEventType = {}));
25
+ ;
26
+ var DatePeriod;
27
+ (function (DatePeriod) {
28
+ DatePeriod["WEEK"] = "week";
29
+ DatePeriod["MONTH"] = "month";
30
+ DatePeriod["QUARTER_1"] = "quarter1";
31
+ DatePeriod["QUARTER_2"] = "quarter2";
32
+ DatePeriod["QUARTER_3"] = "quarter3";
33
+ DatePeriod["QUARTER_4"] = "quarter4";
34
+ DatePeriod["SEMESTER_1"] = "semester1";
35
+ DatePeriod["SEMESTER_2"] = "semester2";
36
+ DatePeriod["YEAR"] = "year";
37
+ DatePeriod["CURR_WEEK"] = "currweek";
38
+ DatePeriod["CURR_MONTH"] = "currmonth";
39
+ DatePeriod["CURR_QUARTER"] = "currquarter";
40
+ DatePeriod["CURR_SEMESTER"] = "currsemester";
41
+ DatePeriod["CURR_YEAR"] = "curryear";
42
+ DatePeriod["LAST_WEEK"] = "lastweek";
43
+ DatePeriod["LAST_MONTH"] = "lastmonth";
44
+ DatePeriod["LAST_QUARTER"] = "lastquarter";
45
+ DatePeriod["LAST_SEMESTER"] = "lastsemester";
46
+ DatePeriod["LAST_YEAR"] = "lastyear";
47
+ })(DatePeriod || (exports.DatePeriod = DatePeriod = {}));
48
+ ;
49
+ var ValueType;
50
+ (function (ValueType) {
51
+ ValueType["BADGE"] = "badge";
52
+ ValueType["CURRENCY"] = "currency";
53
+ ValueType["DATE"] = "date";
54
+ ValueType["DATETIME"] = "datetime";
55
+ ValueType["DECIMAL"] = "decimal";
56
+ ValueType["EMAIL"] = "email";
57
+ ValueType["FILESIZE"] = "filesize";
58
+ ValueType["HTML"] = "html";
59
+ ValueType["ICON"] = "icon";
60
+ ValueType["LINK"] = "link";
61
+ ValueType["NUMBER"] = "number";
62
+ ValueType["PERCENTAGE"] = "percentage";
63
+ ValueType["PROGRESS"] = "progress";
64
+ ValueType["SELECT"] = "select";
65
+ ValueType["STRING"] = "string";
66
+ ValueType["STRING_WRAP"] = "stringwrap";
67
+ ValueType["SWITCH"] = "switch";
68
+ ValueType["BOOLEAN"] = "boolean";
69
+ })(ValueType || (exports.ValueType = ValueType = {}));
70
+ ;
71
+ var AuthIssuer;
72
+ (function (AuthIssuer) {
73
+ AuthIssuer["USER"] = "user";
74
+ AuthIssuer["DEVICE"] = "device";
75
+ })(AuthIssuer || (exports.AuthIssuer = AuthIssuer = {}));