@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
|
@@ -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,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 = {}));
|