http-request-manager 0.0.1 → 0.0.20
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 +262 -13
- package/esm2022/http-request-manager.mjs +5 -0
- package/esm2022/lib/interceptors/credentials.interceptor.mjs +14 -0
- package/esm2022/lib/interceptors/index.mjs +5 -0
- package/esm2022/lib/interceptors/models/error-settings.model.mjs +10 -0
- package/esm2022/lib/interceptors/request-error.interceptor.mjs +49 -0
- package/esm2022/lib/interceptors/request-header.interceptor.mjs +41 -0
- package/esm2022/lib/models/data-type.enum.mjs +7 -0
- package/esm2022/lib/models/database-storage.model.mjs +10 -0
- package/esm2022/lib/models/index.mjs +4 -0
- package/esm2022/lib/models/retry-options.model.mjs +10 -0
- package/esm2022/lib/services/index.mjs +6 -0
- package/esm2022/lib/services/local-storage-manager-service/index.mjs +3 -0
- package/esm2022/lib/services/local-storage-manager-service/local-storage-manager.service.mjs +275 -0
- package/esm2022/lib/services/local-storage-manager-service/models/global-store-options.model.mjs +13 -0
- package/esm2022/lib/services/local-storage-manager-service/models/index.mjs +7 -0
- package/esm2022/lib/services/local-storage-manager-service/models/setting-options.model.mjs +13 -0
- package/esm2022/lib/services/local-storage-manager-service/models/storage-data.model.mjs +10 -0
- package/esm2022/lib/services/local-storage-manager-service/models/storage-option-settings.model.mjs +13 -0
- package/esm2022/lib/services/local-storage-manager-service/models/storage-option.model.mjs +12 -0
- package/esm2022/lib/services/local-storage-manager-service/models/storage-type.enum.mjs +7 -0
- package/esm2022/lib/services/request-manager-services/http-manager.service.mjs +172 -0
- package/esm2022/lib/services/request-manager-services/index.mjs +5 -0
- package/esm2022/lib/services/request-manager-services/request.service.mjs +159 -0
- package/esm2022/lib/services/request-manager-services/rxjs-operators/countdown.mjs +9 -0
- package/esm2022/lib/services/request-manager-services/rxjs-operators/delay-retry.mjs +8 -0
- package/esm2022/lib/services/request-manager-services/rxjs-operators/index.mjs +5 -0
- package/esm2022/lib/services/request-manager-services/rxjs-operators/request-polling.mjs +14 -0
- package/esm2022/lib/services/request-manager-services/rxjs-operators/request-streaming.mjs +19 -0
- package/esm2022/lib/services/request-manager-state-service/http-manager-state.store.mjs +299 -0
- package/esm2022/lib/services/request-manager-state-service/index.mjs +3 -0
- package/esm2022/lib/services/request-manager-state-service/models/api-request.model.mjs +20 -0
- package/esm2022/lib/services/request-manager-state-service/models/index.mjs +3 -0
- package/esm2022/lib/services/request-manager-state-service/models/request-options.model.mjs +10 -0
- package/esm2022/lib/services/utils/app.service.mjs +20 -0
- package/esm2022/lib/services/utils/encryption/asymmetrical-encryption.service.mjs +186 -0
- package/esm2022/lib/services/utils/encryption/encryption-test.service.mjs +35 -0
- package/esm2022/lib/services/utils/encryption/index.mjs +4 -0
- package/esm2022/lib/services/utils/encryption/random.mjs +52 -0
- package/esm2022/lib/services/utils/encryption/symmetrical-encryption.service.mjs +77 -0
- package/esm2022/lib/services/utils/headers.service.mjs +21 -0
- package/esm2022/lib/services/utils/index.mjs +6 -0
- package/esm2022/lib/services/utils/path-query.service.mjs +53 -0
- package/esm2022/lib/services/utils/utils.service.mjs +134 -0
- package/esm2022/public-api.mjs +7 -0
- package/fesm2022/http-request-manager.mjs +1715 -0
- package/fesm2022/http-request-manager.mjs.map +1 -0
- package/http-request-manager-0.0.20.tgz +0 -0
- package/index.d.ts +5 -0
- package/lib/interceptors/credentials.interceptor.d.ts +8 -0
- package/lib/interceptors/index.d.ts +4 -0
- package/lib/interceptors/models/error-settings.model.d.ts +10 -0
- package/lib/interceptors/request-error.interceptor.d.ts +10 -0
- package/lib/interceptors/request-header.interceptor.d.ts +15 -0
- package/lib/models/data-type.enum.d.ts +5 -0
- package/lib/models/database-storage.model.d.ts +10 -0
- package/lib/models/index.d.ts +3 -0
- package/lib/models/retry-options.model.d.ts +10 -0
- package/lib/services/index.d.ts +4 -0
- package/lib/services/local-storage-manager-service/index.d.ts +2 -0
- package/lib/services/local-storage-manager-service/local-storage-manager.service.d.ts +81 -0
- package/lib/services/local-storage-manager-service/models/global-store-options.model.d.ts +15 -0
- package/lib/services/local-storage-manager-service/models/index.d.ts +6 -0
- package/lib/services/local-storage-manager-service/models/setting-options.model.d.ts +15 -0
- package/lib/services/local-storage-manager-service/models/storage-data.model.d.ts +10 -0
- package/lib/services/local-storage-manager-service/models/storage-option-settings.model.d.ts +15 -0
- package/lib/services/local-storage-manager-service/models/storage-option.model.d.ts +13 -0
- package/lib/services/local-storage-manager-service/models/storage-type.enum.d.ts +5 -0
- package/lib/services/request-manager-services/http-manager.service.d.ts +35 -0
- package/lib/services/request-manager-services/index.d.ts +3 -0
- package/lib/services/request-manager-services/request.service.d.ts +27 -0
- package/lib/services/request-manager-services/rxjs-operators/countdown.d.ts +2 -0
- package/lib/services/request-manager-services/rxjs-operators/delay-retry.d.ts +2 -0
- package/lib/services/request-manager-services/rxjs-operators/index.d.ts +4 -0
- package/lib/services/request-manager-services/rxjs-operators/request-polling.d.ts +7 -0
- package/lib/services/request-manager-services/rxjs-operators/request-streaming.d.ts +2 -0
- package/lib/services/request-manager-state-service/http-manager-state.store.d.ts +55 -0
- package/lib/services/request-manager-state-service/index.d.ts +2 -0
- package/lib/services/request-manager-state-service/models/api-request.model.d.ts +25 -0
- package/lib/services/request-manager-state-service/models/index.d.ts +2 -0
- package/lib/services/request-manager-state-service/models/request-options.model.d.ts +10 -0
- package/lib/services/utils/app.service.d.ts +8 -0
- package/lib/services/utils/encryption/asymmetrical-encryption.service.d.ts +17 -0
- package/lib/services/utils/encryption/encryption-test.service.d.ts +10 -0
- package/lib/services/utils/encryption/index.d.ts +3 -0
- package/lib/services/utils/encryption/random.d.ts +7 -0
- package/lib/services/utils/encryption/symmetrical-encryption.service.d.ts +14 -0
- package/lib/services/utils/headers.service.d.ts +10 -0
- package/lib/services/utils/index.d.ts +5 -0
- package/lib/services/utils/path-query.service.d.ts +11 -0
- package/lib/services/utils/utils.service.d.ts +24 -0
- package/package.json +24 -10
- package/public-api.d.ts +3 -0
- package/ng-package.json +0 -7
- package/src/lib/http-request-manager.component.spec.ts +0 -21
- package/src/lib/http-request-manager.component.ts +0 -15
- package/src/lib/http-request-manager.module.ts +0 -16
- package/src/lib/http-request-manager.service.spec.ts +0 -16
- package/src/lib/http-request-manager.service.ts +0 -9
- package/src/public-api.ts +0 -7
- package/tsconfig.lib.json +0 -14
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject, EMPTY, from } from 'rxjs';
|
|
3
|
+
import { map, catchError } from 'rxjs/operators';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class AsymmetricalEncryptionService {
|
|
6
|
+
constructor() { }
|
|
7
|
+
generateKeyPair(modulusLength = 2048) {
|
|
8
|
+
// modulusLength - 1024, 2048, 4096
|
|
9
|
+
// hash - SHA-256
|
|
10
|
+
return from(crypto.subtle.generateKey({
|
|
11
|
+
name: "RSA-OAEP",
|
|
12
|
+
modulusLength,
|
|
13
|
+
publicExponent: new Uint8Array([1, 0, 1]),
|
|
14
|
+
hash: { name: "SHA-256" }
|
|
15
|
+
}, true, // Extractable keys
|
|
16
|
+
["encrypt", "decrypt"]));
|
|
17
|
+
}
|
|
18
|
+
encryptData(publicKey, data) {
|
|
19
|
+
const encodedData = new TextEncoder().encode(data);
|
|
20
|
+
return from(crypto.subtle.encrypt({
|
|
21
|
+
name: "RSA-OAEP"
|
|
22
|
+
}, publicKey, encodedData)).pipe(map(enc => this.arrayBufferToBase64(enc)));
|
|
23
|
+
}
|
|
24
|
+
decryptData(privateKey, encryptedData) {
|
|
25
|
+
const encStr = this.base64ToArrayBuffer(encryptedData);
|
|
26
|
+
return from(crypto.subtle.decrypt({
|
|
27
|
+
name: "RSA-OAEP"
|
|
28
|
+
}, privateKey, encStr).then(decryptedData => {
|
|
29
|
+
return new TextDecoder().decode(decryptedData);
|
|
30
|
+
}));
|
|
31
|
+
}
|
|
32
|
+
pemToArrayBuffer(pem) {
|
|
33
|
+
const b64 = pem.replace(/(-----BEGIN (RSA )?(PRIVATE|PUBLIC) KEY-----|-----END (RSA )?(PRIVATE|PUBLIC) KEY-----|\n)/g, '');
|
|
34
|
+
const binaryString = atob(b64);
|
|
35
|
+
const len = binaryString.length;
|
|
36
|
+
const buffer = new ArrayBuffer(len);
|
|
37
|
+
const view = new Uint8Array(buffer);
|
|
38
|
+
for (let i = 0; i < len; i++) {
|
|
39
|
+
view[i] = binaryString.charCodeAt(i);
|
|
40
|
+
}
|
|
41
|
+
return buffer;
|
|
42
|
+
}
|
|
43
|
+
base64ToArrayBuffer(base64) {
|
|
44
|
+
const binaryString = atob(base64);
|
|
45
|
+
const len = binaryString.length;
|
|
46
|
+
const buffer = new ArrayBuffer(len);
|
|
47
|
+
const view = new Uint8Array(buffer);
|
|
48
|
+
for (let i = 0; i < len; i++) {
|
|
49
|
+
view[i] = binaryString.charCodeAt(i);
|
|
50
|
+
}
|
|
51
|
+
return buffer;
|
|
52
|
+
}
|
|
53
|
+
arrayBufferToBase64(buffer) {
|
|
54
|
+
let binary = '';
|
|
55
|
+
const bytes = new Uint8Array(buffer);
|
|
56
|
+
const len = bytes.byteLength;
|
|
57
|
+
for (let i = 0; i < len; i++) {
|
|
58
|
+
binary += String.fromCharCode(bytes[i]);
|
|
59
|
+
}
|
|
60
|
+
return window.btoa(binary);
|
|
61
|
+
}
|
|
62
|
+
base64ToPEM(base64Key, publicKey = true) {
|
|
63
|
+
const keyType = (publicKey) ? 'PUBLIC' : 'PRIVATE';
|
|
64
|
+
const header = `-----BEGIN ${keyType} KEY-----\n`;
|
|
65
|
+
const footer = `\n-----END ${keyType} KEY-----`;
|
|
66
|
+
const keyBody = base64Key.match(/.{1,64}/g)?.join("\n") || "";
|
|
67
|
+
return header + keyBody + footer;
|
|
68
|
+
}
|
|
69
|
+
pemToCryptoKey(pem, algorithm, extractable, keyUsages, format = "pkcs8" //"raw" | "pkcs8" | "spki"
|
|
70
|
+
) {
|
|
71
|
+
const buffer = this.pemToArrayBuffer(pem);
|
|
72
|
+
console.log('buffer found ', buffer);
|
|
73
|
+
return from(crypto.subtle.importKey(format, buffer, algorithm, extractable, keyUsages));
|
|
74
|
+
}
|
|
75
|
+
// TESTING
|
|
76
|
+
testGenerateKeys() {
|
|
77
|
+
const testSequence = new BehaviorSubject("");
|
|
78
|
+
const testSequence$ = testSequence.asObservable();
|
|
79
|
+
testSequence.next("Test Generating Keys");
|
|
80
|
+
// GENERATE KEYS
|
|
81
|
+
this.generateKeyPair().subscribe((data) => {
|
|
82
|
+
console.log("GEN-GENERATED KEYS: ", data);
|
|
83
|
+
crypto.subtle.exportKey('spki', data.publicKey)
|
|
84
|
+
.then(key => {
|
|
85
|
+
const publicKeyBase64 = this.arrayBufferToBase64(key);
|
|
86
|
+
console.log("GEN-EXPORT PUBLIC KEY: ", this.base64ToPEM(publicKeyBase64, true));
|
|
87
|
+
});
|
|
88
|
+
crypto.subtle.exportKey('pkcs8', data.privateKey)
|
|
89
|
+
.then(key => {
|
|
90
|
+
const privateKeyBase64 = this.arrayBufferToBase64(key);
|
|
91
|
+
console.log("GEN-EXPORT PRIVATE KEY: ", this.base64ToPEM(privateKeyBase64, false));
|
|
92
|
+
});
|
|
93
|
+
// TEST WITH GENERATED KEYS
|
|
94
|
+
this.encryptData(data.publicKey, "Sample Data here - Mike Bonifacio")
|
|
95
|
+
.subscribe((enc) => {
|
|
96
|
+
console.log("GEN-ENCRYPT==>: ", enc);
|
|
97
|
+
this.decryptData(data.privateKey, enc).subscribe((dec) => {
|
|
98
|
+
testSequence.next('Test Passed');
|
|
99
|
+
testSequence.complete();
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
return testSequence$;
|
|
104
|
+
}
|
|
105
|
+
testDecryptionWithKeys() {
|
|
106
|
+
const testSequence = new BehaviorSubject("");
|
|
107
|
+
const testSequence$ = testSequence.asObservable();
|
|
108
|
+
testSequence.next("Test Generating Keys");
|
|
109
|
+
const privateKey = `-----BEGIN PRIVATE KEY-----
|
|
110
|
+
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDKVBkCWNb9eHVF
|
|
111
|
+
twAA5mdAyvXFix3WavdrsoYRkvtCl8ogDBQf8f6N0bRkDF1zcVHRrNAEyozXDtuD
|
|
112
|
+
kFgSiivBFREI7fiS3sOvduq6FaGXzX0IY6oaVMu8oOPgDvC0yvoohR+0Qxq2d6lP
|
|
113
|
+
SPyHeKQaxP4KxzCJJzB1XAcbd2eFzUUDv25mNlwdVkmW8FI/sAxnJLgPTW78dzfX
|
|
114
|
+
Ddfk+nxdIqxVKSLATnL0kMN7aGJx24UozioAIpzvvvF5/+7HTd1gi6NeCqrAYr3g
|
|
115
|
+
iP364AE26CFwFvHnafO9uNQhlQ+uiNnOoInXByfFGVP+RidSpfLzaxDjs6RDwpol
|
|
116
|
+
h098btONAgMBAAECggEAAVhHM2OD5IkUtuowwcKNaCTKGmrClRE3gMuzJeBsSJEy
|
|
117
|
+
uAReUFILZylcnhegDytSti2vDA9T7xqtO6CU0p3V8LpU89JMOPRb/deirI4UXSpx
|
|
118
|
+
xbNyjirOO6bnrNlOWfKexdQQsikYPzF2iM1Scpr1u9ZDCHZOl1ZYSrkve5My4coP
|
|
119
|
+
3Gx6tTBqL0jQBfcpf4ES8BH3JSawR/MgqzDS74+bI2VH+kvuPAC1L4fBgaV3VUv0
|
|
120
|
+
nFzim5A3s5VaXPgJbEIghP9BkYGFkeT9ma3nliEZWc96AzsmowFn1ayCvrNVPo9R
|
|
121
|
+
ECD2NnttBiCJZt3H93sR9+OTeA8Bls+aZGlKd5mLAQKBgQDpf8nIYUm/Zmls7/lQ
|
|
122
|
+
QBUSGHEYrbjNsEejQsPgNDtg2EVSxdUkvTn7Wb+HExTk09Z5bNvhaO2532/FH9y8
|
|
123
|
+
ahSXafiMXpfR2olwXdOB9yXXl4F5C0LGnmzGim4OSeWzAX0JCL470KaS0QN3EmoG
|
|
124
|
+
9F0YCfMnZXNTweSSx4xvlO6ggQKBgQDd01uIolm7z1DIWCwNERAXP2GDwcvxyzYK
|
|
125
|
+
YqJfKDeHt2t6yIzZMMotnPDy+OlcdGspIIHkB5a+SZN5Nt7DUKg/MnyOZ3KbVq41
|
|
126
|
+
k7dR4Ka3LRnGkesy7lSr7ef1rfquyR75OXJQcPWvkFcLu0TMiQhvptatZ8VN+F4n
|
|
127
|
+
fDQELRotDQKBgQCgN+AUT7VT0QjcCBnRV/ddUEoiPenFsYSmYMSYzh5ESIHg1wB2
|
|
128
|
+
0iS79Iw4Of6nOTg8X1bM57vfQ5Kk90T2P+/bKYqzfqC8DTErWiYsUpKzyTC9Bt4N
|
|
129
|
+
/Vz0Kr5zrX8ggg/yp/4oevYhXav8AzWfigNq4EDpMnKc8TlPAf+5/L50gQKBgQC2
|
|
130
|
+
mLPhPhr1gUszD3l7bA89w7uGlLFHoQoj9FtKTzWervp3QLzIT+QtNeIVb5XQuDg5
|
|
131
|
+
y3uAdEq+6pvNjMBEMJG+K9Xh9v+dJPYUPjsJ2A4D/MkZ7qWX8B2cxSJK1uLim8W2
|
|
132
|
+
S3ZxBvsGgJ9WldmlMCvUlJZkeWYtr4P5psC+q02/xQKBgQCDII/jcV2+lRM2iNTe
|
|
133
|
+
vBijZSaNMEWOK/Y+/HFK8GYKXnB+xNWhrm8rKgWGzpDJAUPMh9Tt+leW9LKEBuzF
|
|
134
|
+
Y1bGblmGm1zsPWpIx05Fdtv9eOJmFnXbGzIsYyhadZnPcQOWhqxtpVxSuul0Jc7Q
|
|
135
|
+
XNq4qPaPXhbQAshgtyBt75DMkw==
|
|
136
|
+
-----END PRIVATE KEY-----`;
|
|
137
|
+
const pubKey = `-----BEGIN PUBLIC KEY-----
|
|
138
|
+
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylQZAljW/Xh1RbcAAOZn
|
|
139
|
+
QMr1xYsd1mr3a7KGEZL7QpfKIAwUH/H+jdG0ZAxdc3FR0azQBMqM1w7bg5BYEoor
|
|
140
|
+
wRURCO34kt7Dr3bquhWhl819CGOqGlTLvKDj4A7wtMr6KIUftEMatnepT0j8h3ik
|
|
141
|
+
GsT+CscwiScwdVwHG3dnhc1FA79uZjZcHVZJlvBSP7AMZyS4D01u/Hc31w3X5Pp8
|
|
142
|
+
XSKsVSkiwE5y9JDDe2hicduFKM4qACKc777xef/ux03dYIujXgqqwGK94Ij9+uAB
|
|
143
|
+
NughcBbx52nzvbjUIZUProjZzqCJ1wcnxRlT/kYnUqXy82sQ47OkQ8KaJYdPfG7T
|
|
144
|
+
jQIDAQAB
|
|
145
|
+
-----END PUBLIC KEY-----`;
|
|
146
|
+
const algorithm = {
|
|
147
|
+
name: "RSA-OAEP",
|
|
148
|
+
modulusLength: 2048,
|
|
149
|
+
publicExponent: new Uint8Array([1, 0, 1]),
|
|
150
|
+
hash: "SHA-256"
|
|
151
|
+
};
|
|
152
|
+
// ENCRYPT
|
|
153
|
+
this.pemToCryptoKey(pubKey, algorithm, true, ["encrypt"], "spki").subscribe((keyPublic) => {
|
|
154
|
+
// console.log("PUBLIC KEY: ", keyPublic)
|
|
155
|
+
this.encryptData(keyPublic, "Sample Data here - Mike Bonifacio")
|
|
156
|
+
.subscribe((str) => {
|
|
157
|
+
console.log("ENCRYPTED STRING: ", str);
|
|
158
|
+
testSequence.next('encrypted string success');
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
const enc = "r7UOuEGBZ6jbVTOIBuv9jFOEtRiedmS27hfW40k7XKCTsQ5VhWup0qu2BA2ANZaGKii/uehJ/RSPiyfGbJ6leJrat0mA1hPqH/XodaBzLMDigvdYM1NSXFZMDa40OpLUIXbPlAvybjcGu7Bal+LMA8htHrFu/OmM/fHI66xOzzpuXSYx0OkWjtY81rUQ1FFkvrkx2jGFPZ0p+Nw/v3Q4cJnet6V63vCueFlD749VMcVXo7pvz4AIPpB+IOy3kbxaYTPakLVioJERU6GFMXWkECuRvohhS9CETcORZtRVRkvhcHk3lxgIhfqojUKYgD6K5dDELDPsWIS+iTG1XIQIlg==";
|
|
162
|
+
// DECRYPTION
|
|
163
|
+
this.pemToCryptoKey(privateKey, algorithm, false, ["decrypt"], "pkcs8").subscribe((key) => {
|
|
164
|
+
// console.log("DECRYPT ===", key)
|
|
165
|
+
this.decryptData(key, enc)
|
|
166
|
+
.pipe(catchError(err => {
|
|
167
|
+
console.log("ERROR: ", err);
|
|
168
|
+
return EMPTY;
|
|
169
|
+
})).subscribe((str) => {
|
|
170
|
+
console.log("DECRYPTED STRING: ", str);
|
|
171
|
+
testSequence.next('decrypted string success');
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
return testSequence$;
|
|
175
|
+
}
|
|
176
|
+
;
|
|
177
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AsymmetricalEncryptionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
178
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AsymmetricalEncryptionService, providedIn: 'root' }); }
|
|
179
|
+
}
|
|
180
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AsymmetricalEncryptionService, decorators: [{
|
|
181
|
+
type: Injectable,
|
|
182
|
+
args: [{
|
|
183
|
+
providedIn: 'root'
|
|
184
|
+
}]
|
|
185
|
+
}], ctorParameters: function () { return []; } });
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bW1ldHJpY2FsLWVuY3J5cHRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHAtcmVxdWVzdC1tYW5hZ2VyL3NyYy9saWIvc2VydmljZXMvdXRpbHMvZW5jcnlwdGlvbi9hc3ltbWV0cmljYWwtZW5jcnlwdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsSUFBSSxFQUFNLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBS2pELE1BQU0sT0FBTyw2QkFBNkI7SUFFeEMsZ0JBQWUsQ0FBQztJQUVoQixlQUFlLENBQUMsYUFBYSxHQUFHLElBQUk7UUFFbEMsbUNBQW1DO1FBQ25DLGlCQUFpQjtRQUVsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDbEM7WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixhQUFhO1lBQ2IsY0FBYyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1NBQzFCLEVBQ0QsSUFBSSxFQUFFLG1CQUFtQjtRQUN6QixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FDdkIsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUVELFdBQVcsQ0FBQyxTQUFvQixFQUFFLElBQVk7UUFFNUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFbEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxP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QUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFFbEIsa0NBQWtDO1lBRWxDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztpQkFDekIsSUFBSSxDQUNILFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxLQUFLLENBQUE7WUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxZQUFZLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDLENBQUE7UUFFSixDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFBQSxDQUFDOytHQWhSUyw2QkFBNkI7bUhBQTdCLDZCQUE2QixjQUY1QixNQUFNOzs0RkFFUCw2QkFBNkI7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBPYnNlcnZhYmxlLCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBc3ltbWV0cmljYWxFbmNyeXB0aW9uU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGdlbmVyYXRlS2V5UGFpcihtb2R1bHVzTGVuZ3RoID0gMjA0OCk6IE9ic2VydmFibGU8Q3J5cHRvS2V5UGFpcj4ge1xuICBcbiAgICAvLyBtb2R1bHVzTGVuZ3RoIC0gMTAyNCwgMjA0OCwgNDA5NlxuICAgIC8vIGhhc2ggLSBTSEEtMjU2XG5cbiAgIHJldHVybiBmcm9tKGNyeXB0by5zdWJ0bGUuZ2VuZXJhdGVLZXkoXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiUlNBLU9BRVBcIixcbiAgICAgICAgbW9kdWx1c0xlbmd0aCxcbiAgICAgICAgcHVibGljRXhwb25lbnQ6IG5ldyBVaW50OEFycmF5KFsxLCAwLCAxXSksIC8vIDY1NTM3XG4gICAgICAgIGhhc2g6IHsgbmFtZTogXCJTSEEtMjU2XCIgfVxuICAgICAgfSxcbiAgICAgIHRydWUsIC8vIEV4dHJhY3RhYmxlIGtleXNcbiAgICAgIFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCJdXG4gICAgKSlcblxuICB9XG5cbiAgZW5jcnlwdERhdGEocHVibGljS2V5OiBDcnlwdG9LZXksIGRhdGE6IHN0cmluZykge1xuXG4gICAgY29uc3QgZW5jb2RlZERhdGEgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZGF0YSlcblxuICAgIHJldHVybiBmcm9tKGNyeXB0by5zdWJ0bGUuZW5jcnlwdChcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJSU0EtT0FFUFwiXG4gICAgICB9LFxuICAgICAgcHVibGljS2V5LFxuICAgICAgZW5jb2RlZERhdGFcbiAgICApKS5waXBlKFxuICAgICAgbWFwKGVuYyA9PiB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjQoZW5jKSlcbiAgICApXG5cbiAgfVxuXG4gIGRlY3J5cHREYXRhKHByaXZhdGVLZXk6IENyeXB0b0tleSwgZW5jcnlwdGVkRGF0YTogc3RyaW5nKSB7XG5cbiAgICBjb25zdCBlbmNTdHIgPSB0aGlzLmJhc2U2NFRvQXJyYXlCdWZmZXIoZW5jcnlwdGVkRGF0YSlcblxuICAgIHJldHVybiBmcm9tKGNyeXB0by5zdWJ0bGUuZGVjcnlwdChcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJSU0EtT0FFUFwiXG4gICAgICB9LFxuICAgICAgcHJpdmF0ZUtleSxcbiAgICAgIGVuY1N0clxuICAgICkudGhlbihkZWNyeXB0ZWREYXRhID0+IHtcbiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGVjcnlwdGVkRGF0YSlcbiAgICB9KSlcblxuICB9XG5cbiAgcGVtVG9BcnJheUJ1ZmZlcihwZW06IHN0cmluZyk6IEFycmF5QnVmZmVyIHtcblxuICAgIGNvbnN0IGI2NCA9IHBlbS5yZXBsYWNlKC8oLS0tLS1CRUdJTiAoUlNBICk/KFBSSVZBVEV8UFVCTElDKSBLRVktLS0tLXwtLS0tLUVORCAoUlNBICk/KFBSSVZBVEV8UFVCTElDKSBLRVktLS0tLXxcXG4pL2csICcnKVxuICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IGF0b2IoYjY0KVxuICAgIGNvbnN0IGxlbiA9IGJpbmFyeVN0cmluZy5sZW5ndGhcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIobGVuKVxuICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2aWV3W2ldID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSlcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyXG5cbiAgfVxuXG4gIGJhc2U2NFRvQXJyYXlCdWZmZXIoYmFzZTY0OiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG4gICAgXG4gICAgY29uc3QgYmluYXJ5U3RyaW5nID0gYXRvYihiYXNlNjQpO1xuICAgIGNvbnN0IGxlbiA9IGJpbmFyeVN0cmluZy5sZW5ndGg7XG4gICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGxlbik7XG4gICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZpZXdbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgYXJyYXlCdWZmZXJUb0Jhc2U2NChidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcblxuICAgIGxldCBiaW5hcnkgPSAnJztcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgY29uc3QgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2luZG93LmJ0b2EoYmluYXJ5KVxuXG4gIH1cblxuICBiYXNlNjRUb1BFTShiYXNlNjRLZXk6IHN0cmluZywgcHVibGljS2V5ID0gdHJ1ZSkge1xuXG4gICAgY29uc3Qga2V5VHlwZSA9IChwdWJsaWNLZXkpID8gJ1BVQkxJQycgOiAnUFJJVkFURSdcblxuICAgIGNvbnN0IGhlYWRlciA9IGAtLS0tLUJFR0lOICR7a2V5VHlwZX0gS0VZLS0tLS1cXG5gXG4gICAgY29uc3QgZm9vdGVyID0gYFxcbi0tLS0tRU5EICR7a2V5VHlwZX0gS0VZLS0tLS1gXG5cbiAgICBjb25zdCBrZXlCb2R5ID0gYmFzZTY0S2V5Lm1hdGNoKC8uezEsNjR9L2cpPy5qb2luKFwiXFxuXCIpIHx8IFwiXCJcblxuICAgIHJldHVybiBoZWFkZXIgKyBrZXlCb2R5ICsgZm9vdGVyXG5cbiAgfVxuXG4gIHBlbVRvQ3J5cHRvS2V5KFxuICAgIHBlbTogc3RyaW5nLCBcbiAgICBhbGdvcml0aG06IFJzYUhhc2hlZEtleUdlblBhcmFtcywgXG4gICAgZXh0cmFjdGFibGU6IGJvb2xlYW4sIFxuICAgIGtleVVzYWdlczogS2V5VXNhZ2VbXSxcbiAgICBmb3JtYXQ6IGFueSA9IFwicGtjczhcIiAvL1wicmF3XCIgfCBcInBrY3M4XCIgfCBcInNwa2lcIlxuICAgICkge1xuICAgIFxuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMucGVtVG9BcnJheUJ1ZmZlcihwZW0pO1xuXG4gICAgY29uc29sZS5sb2coJ2J1ZmZlciBmb3VuZCAnLCBidWZmZXIpO1xuICAgIFxuICAgIHJldHVybiBmcm9tKGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICAgZm9ybWF0LFxuICAgICAgYnVmZmVyLFxuICAgICAgYWxnb3JpdGhtLFxuICAgICAgZXh0cmFjdGFibGUsXG4gICAgICBrZXlVc2FnZXNcbiAgICApKVxuXG4gIH1cbiAgXG4gIC8vIFRFU1RJTkdcblxuICB0ZXN0R2VuZXJhdGVLZXlzKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgdGVzdFNlcXVlbmNlOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcIlwiKTtcbiAgICBjb25zdCB0ZXN0U2VxdWVuY2UkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0ZXN0U2VxdWVuY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGVzdFNlcXVlbmNlLm5leHQoXCJUZXN0IEdlbmVyYXRpbmcgS2V5c1wiKTtcblxuICAgIC8vIEdFTkVSQVRFIEtFWVNcbiAgICB0aGlzLmdlbmVyYXRlS2V5UGFpcigpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuXG4gICAgICBjb25zb2xlLmxvZyhcIkdFTi1HRU5FUkFURUQgS0VZUzogXCIsIGRhdGEpXG5cbiAgICAgIGNyeXB0by5zdWJ0bGUuZXhwb3J0S2V5KCdzcGtpJywgZGF0YS5wdWJsaWNLZXkpXG4gICAgICAudGhlbihrZXkgPT4ge1xuICAgICAgICBjb25zdCBwdWJsaWNLZXlCYXNlNjQgPSB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjQoa2V5KTtcbiAgICAgICAgY29uc29sZS5sb2coXCJHRU4tRVhQT1JUIFBVQkxJQyBLRVk6IFwiLCB0aGlzLmJhc2U2NFRvUEVNKHB1YmxpY0tleUJhc2U2NCwgdHJ1ZSkpO1xuICAgICAgfSlcblxuICAgICAgY3J5cHRvLnN1YnRsZS5leHBvcnRLZXkoJ3BrY3M4JywgZGF0YS5wcml2YXRlS2V5KVxuICAgICAgLnRoZW4oa2V5ID0+IHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleUJhc2U2NCA9IHRoaXMuYXJyYXlCdWZmZXJUb0Jhc2U2NChrZXkpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIkdFTi1FWFBPUlQgUFJJVkFURSBLRVk6IFwiLCB0aGlzLmJhc2U2NFRvUEVNKHByaXZhdGVLZXlCYXNlNjQsIGZhbHNlKSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gVEVTVCBXSVRIIEdFTkVSQVRFRCBLRVlTXG4gICAgICB0aGlzLmVuY3J5cHREYXRhKGRhdGEucHVibGljS2V5LCBcIlNhbXBsZSBEYXRhIGhlcmUgLSBNaWtlIEJvbmlmYWNpb1wiKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKGVuYykgPT4ge1xuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkdFTi1FTkNSWVBUPT0+OiBcIiwgZW5jKVxuXG4gICAgICAgICAgICB0aGlzLmRlY3J5cHREYXRhKGRhdGEucHJpdmF0ZUtleSwgZW5jKS5zdWJzY3JpYmUoKGRlYykgPT4ge1xuICAgICAgICAgICAgICB0ZXN0U2VxdWVuY2UubmV4dCgnVGVzdCBQYXNzZWQnKTtcbiAgICAgICAgICAgICAgdGVzdFNlcXVlbmNlLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgfSlcblxuICAgIH0pXG4gICAgcmV0dXJuIHRlc3RTZXF1ZW5jZSQ7XG5cbiAgfVxuXG4gIHRlc3REZWNyeXB0aW9uV2l0aEtleXMoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0ZXN0U2VxdWVuY2U6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KFwiXCIpO1xuICAgIGNvbnN0IHRlc3RTZXF1ZW5jZSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRlc3RTZXF1ZW5jZS5hc09ic2VydmFibGUoKTtcbiAgICB0ZXN0U2VxdWVuY2UubmV4dChcIlRlc3QgR2VuZXJhdGluZyBLZXlzXCIpO1xuXG4gICAgY29uc3QgcHJpdmF0ZUtleSA9IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cbiAgICBNSUlFdndJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0JLa3dnZ1NsQWdFQUFvSUJBUURLVkJrQ1dOYjllSFZGXG4gICAgdHdBQTVtZEF5dlhGaXgzV2F2ZHJzb1lSa3Z0Q2w4b2dEQlFmOGY2TjBiUmtERjF6Y1ZIUnJOQUV5b3pYRHR1RFxuICAgIGtGZ1NpaXZCRlJFSTdmaVMzc092ZHVxNkZhR1h6WDBJWTZvYVZNdThvT1BnRHZDMHl2b29oUiswUXhxMmQ2bFBcbiAgICBTUHlIZUtRYXhQNEt4ekNKSnpCMVhBY2JkMmVGelVVRHYyNW1ObHdkVmttVzhGSS9zQXhuSkxnUFRXNzhkemZYXG4gICAgRGRmaytueGRJcXhWS1NMQVRuTDBrTU43YUdKeDI0VW96aW9BSXB6dnZ2RjUvKzdIVGQxZ2k2TmVDcXJBWXIzZ1xuICAgIGlQMzY0QUUyNkNGd0Z2SG5hZk85dU5RaGxRK3VpTm5Pb0luWEJ5ZkZHVlArUmlkU3BmTHpheERqczZSRHdwb2xcbiAgICBoMDk4YnRPTkFnTUJBQUVDZ2dFQUFWaEhNMk9ENUlrVXR1b3d3Y0tOYUNUS0dtckNsUkUzZ011ekplQnNTSkV5XG4gICAgdUFSZVVGSUxaeWxjbmhlZ0R5dFN0aTJ2REE5VDd4cXRPNkNVMHAzVjhMcFU4OUpNT1BSYi9kZWlySTRVWFNweFxuICAgIHhiTnlqaXJPTzZibnJObE9XZktleGRRUXNpa1lQekYyaU0xU2NwcjF1OVpEQ0haT2wxWllTcmt2ZTVNeTRjb1BcbiAgICAzR3g2dFRCcUwwalFCZmNwZjRFUzhCSDNKU2F3Ui9NZ3F6RFM3NCtiSTJWSCtrdnVQQUMxTDRmQmdhVjNWVXYwXG4gICAgbkZ6aW01QTNzNVZhWFBnSmJFSWdoUDlCa1lHRmtlVDltYTNubGlFWldjOTZBenNtb3dGbjFheUN2ck5WUG85UlxuICAgIEVDRDJObnR0QmlDSlp0M0g5M3NSOStPVGVBOEJscythWkdsS2Q1bUxBUUtCZ1FEcGY4bklZVW0vWm1sczcvbFFcbiAgICBRQlVTR0hFWXJiak5zRWVqUXNQZ05EdGcyRVZTeGRVa3ZUbjdXYitIRXhUazA5WjViTnZoYU8yNTMyL0ZIOXk4XG4gICAgYWhTWGFmaU1YcGZSMm9sd1hkT0I5eVhYbDRGNUMwTEdubXpHaW00T1NlV3pBWDBKQ0w0NzBLYVMwUU4zRW1vR1xuICAgIDlGMFlDZk1uWlhOVHdlU1N4NHh2bE82Z2dRS0JnUURkMDF1SW9sbTd6MURJV0N3TkVSQVhQMkdEd2N2eHl6WUtcbiAgICBZcUpmS0RlSHQydDZ5SXpaTU1vdG5QRHkrT2xjZEdzcElJSGtCNWErU1pONU50N0RVS2cvTW55T1ozS2JWcTQxXG4gICAgazdkUjRLYTNMUm5Ha2VzeTdsU3I3ZWYxcmZxdXlSNzVPWEpRY1BXdmtGY0x1MFRNaVFodnB0YXRaOFZOK0Y0blxuICAgIGZEUUVMUm90RFFLQmdRQ2dOK0FVVDdWVDBRamNDQm5SVi9kZFVFb2lQZW5Gc1lTbVlNU1l6aDVFU0lIZzF3QjJcbiAgICAwaVM3OUl3NE9mNm5PVGc4WDFiTTU3dmZRNUtrOTBUMlArL2JLWXF6ZnFDOERURXJXaVlzVXBLenlUQzlCdDROXG4gICAgL1Z6MEtyNXpyWDhnZ2cveXAvNG9ldlloWGF2OEF6V2ZpZ05xNEVEcE1uS2M4VGxQQWYrNS9MNTBnUUtCZ1FDMlxuICAgIG1MUGhQaHIxZ1VzekQzbDdiQTg5dzd1R2xMRkhvUW9qOUZ0S1R6V2VydnAzUUx6SVQrUXROZUlWYjVYUXVEZzVcbiAgICB5M3VBZEVxKzZwdk5qTUJFTUpHK0s5WGg5ditkSlBZVVBqc0oyQTREL01rWjdxV1g4QjJjeFNKSzF1TGltOFcyXG4gICAgUzNaeEJ2c0dnSjlXbGRtbE1DdlVsSlprZVdZdHI0UDVwc0MrcTAyL3hRS0JnUUNESUkvamNWMitsUk0yaU5UZVxuICAgIHZCaWpaU2FOTUVXT0svWSsvSEZLOEdZS1huQit4Tldocm04cktnV0d6cERKQVVQTWg5VHQrbGVXOUxLRUJ1ekZcbiAgICBZMWJHYmxtR20xenNQV3BJeDA1RmR0djllT0ptRm5YYkd6SXNZeWhhZFpuUGNRT1docXh0cFZ4U3V1bDBKYzdRXG4gICAgWE5xNHFQYVBYaGJRQXNoZ3R5QnQ3NURNa3c9PVxuICAgIC0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gXG4gICAgXG4gICAgICAgIGNvbnN0IHB1YktleSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuICAgIE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeWxRWkFsalcvWGgxUmJjQUFPWm5cbiAgICBRTXIxeFlzZDFtcjNhN0tHRVpMN1FwZktJQXdVSC9IK2pkRzBaQXhkYzNGUjBhelFCTXFNMXc3Ymc1QllFb29yXG4gICAgd1JVUkNPMzRrdDdEcjNicXVoV2hsODE5Q0dPcUdsVEx2S0RqNEE3d3RNcjZLSVVmdEVNYXRuZXBUMGo4aDNpa1xuICAgIEdzVCtDc2N3aVNjd2RWd0hHM2RuaGMxRkE3OXVaalpjSFZaSmx2QlNQN0FNWnlTNEQwMXUvSGMzMXczWDVQcDhcbiAgICBYU0tzVlNraXdFNXk5SkREZTJoaWNkdUZLTTRxQUNLYzc3N3hlZi91eDAzZFlJdWpYZ3Fxd0dLOTRJajkrdUFCXG4gICAgTnVnaGNCYng1Mm56dmJqVUlaVVByb2paenFDSjF3Y254UmxUL2tZblVxWHk4MnNRNDdPa1E4S2FKWWRQZkc3VFxuICAgIGpRSURBUUFCXG4gICAgLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYFxuXG4gICAgY29uc3QgYWxnb3JpdGhtOiBSc2FIYXNoZWRLZXlHZW5QYXJhbXMgPSB7XG4gICAgICBuYW1lOiBcIlJTQS1PQUVQXCIsXG4gICAgICBtb2R1bHVzTGVuZ3RoOiAyMDQ4LFxuICAgICAgcHVibGljRXhwb25lbnQ6IG5ldyBVaW50OEFycmF5KFsxLCAwLCAxXSksXG4gICAgICBoYXNoOiBcIlNIQS0yNTZcIlxuICAgIH07XG5cbiAgICAvLyBFTkNSWVBUXG4gICAgdGhpcy5wZW1Ub0NyeXB0b0tleShcbiAgICAgIHB1YktleSxcbiAgICAgIGFsZ29yaXRobSxcbiAgICAgIHRydWUsXG4gICAgICBbXCJlbmNyeXB0XCJdLFxuICAgICAgXCJzcGtpXCJcbiAgICApLnN1YnNjcmliZSgoa2V5UHVibGljKSA9PiB7XG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiUFVCTElDIEtFWTogXCIsIGtleVB1YmxpYylcblxuICAgICAgdGhpcy5lbmNyeXB0RGF0YShrZXlQdWJsaWMsIFwiU2FtcGxlIERhdGEgaGVyZSAtIE1pa2UgQm9uaWZhY2lvXCIpXG4gICAgICAuc3Vic2NyaWJlKChzdHIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJFTkNSWVBURUQgU1RSSU5HOiBcIiwgc3RyKTtcbiAgICAgICAgdGVzdFNlcXVlbmNlLm5leHQoJ2VuY3J5cHRlZCBzdHJpbmcgc3VjY2VzcycpO1xuICAgICAgfSlcblxuICAgIH0pXG5cbiAgICBjb25zdCBlbmMgPSBcInI3VU91RUdCWjZqYlZUT0lCdXY5akZPRXRSaWVkbVMyN2hmVzQwazdYS0NUc1E1VmhXdXAwcXUyQkEyQU5aYUdLaWkvdWVoSi9SU1BpeWZHYko2bGVKcmF0MG1BMWhQcUgvWG9kYUJ6TE1EaWd2ZFlNMU5TWEZaTURhNDBPcExVSVhiUGxBdnliamNHdTdCYWwrTE1BOGh0SHJGdS9PbU0vZkhJNjZ4T3p6cHVYU1l4ME9rV2p0WTgxclVRMUZGa3Zya3gyakdGUFowcCtOdy92M1E0Y0puZXQ2VjYzdkN1ZUZsRDc0OVZNY1ZYbzdwdno0QUlQcEIrSU95M2tieGFZVFBha0xWaW9KRVJVNkdGTVhXa0VDdVJ2b2hoUzlDRVRjT1JadFJWUmt2aGNIazNseGdJaGZxb2pVS1lnRDZLNWRERUxEUHNXSVMraVRHMVhJUUlsZz09XCI7XG5cbiAgICAvLyBERUNSWVBUSU9OXG4gICAgdGhpcy5wZW1Ub0NyeXB0b0tleShcbiAgICAgIHByaXZhdGVLZXksXG4gICAgICBhbGdvcml0aG0sXG4gICAgICBmYWxzZSxcbiAgICAgIFtcImRlY3J5cHRcIl0sXG4gICAgICBcInBrY3M4XCJcbiAgICApLnN1YnNjcmliZSgoa2V5KSA9PiB7XG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiREVDUllQVCA9PT1cIiwga2V5KVxuXG4gICAgICB0aGlzLmRlY3J5cHREYXRhKGtleSwgZW5jKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkVSUk9SOiBcIiwgZXJyKTtcbiAgICAgICAgICByZXR1cm4gRU1QVFlcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKChzdHIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJERUNSWVBURUQgU1RSSU5HOiBcIiwgc3RyKTtcbiAgICAgICAgdGVzdFNlcXVlbmNlLm5leHQoJ2RlY3J5cHRlZCBzdHJpbmcgc3VjY2VzcycpO1xuICAgICAgfSlcblxuICAgIH0pXG5cbiAgICByZXR1cm4gdGVzdFNlcXVlbmNlJDtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class EncryptionTestService {
|
|
4
|
+
constructor() { }
|
|
5
|
+
isBase64(str) {
|
|
6
|
+
const base64Pattern = /^(?:[A-Z0-9+/]{4})*(?:[A-Z0-9+/]{2}==|[A-Z0-9+/]{3}=)?$/i;
|
|
7
|
+
return base64Pattern.test(str);
|
|
8
|
+
}
|
|
9
|
+
isHexadecimal(str) {
|
|
10
|
+
const hexPattern = /^[0-9a-fA-F]+$/;
|
|
11
|
+
return hexPattern.test(str) && (str.length % 2 === 0);
|
|
12
|
+
}
|
|
13
|
+
hasHighEntropy(str) {
|
|
14
|
+
const uniqueChars = new Set(str).size;
|
|
15
|
+
return uniqueChars > str.length * 0.6;
|
|
16
|
+
}
|
|
17
|
+
isEncrypted(str) {
|
|
18
|
+
if (typeof str !== 'string') {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
if (this.isBase64(str) || this.isHexadecimal(str)) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
return this.hasHighEntropy(str);
|
|
25
|
+
}
|
|
26
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EncryptionTestService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
27
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EncryptionTestService, providedIn: 'root' }); }
|
|
28
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: EncryptionTestService, decorators: [{
|
|
30
|
+
type: Injectable,
|
|
31
|
+
args: [{
|
|
32
|
+
providedIn: 'root'
|
|
33
|
+
}]
|
|
34
|
+
}], ctorParameters: function () { return []; } });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jcnlwdGlvbi10ZXN0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3V0aWxzL2VuY3J5cHRpb24vZW5jcnlwdGlvbi10ZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLHFCQUFxQjtJQUVoQyxnQkFBZ0IsQ0FBQztJQUVULFFBQVEsQ0FBQyxHQUFXO1FBQzFCLE1BQU0sYUFBYSxHQUFHLDBEQUEwRCxDQUFDO1FBQ2pGLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sYUFBYSxDQUFDLEdBQVc7UUFDL0IsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUM7UUFDcEMsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFXO1FBQ2hDLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUN0QyxPQUFPLFdBQVcsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUN4QyxDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVc7UUFFckIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDM0IsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFFRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFbEMsQ0FBQzsrR0EvQlUscUJBQXFCO21IQUFyQixxQkFBcUIsY0FGcEIsTUFBTTs7NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRW5jcnlwdGlvblRlc3RTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIHByaXZhdGUgaXNCYXNlNjQoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBiYXNlNjRQYXR0ZXJuID0gL14oPzpbQS1aMC05Ky9dezR9KSooPzpbQS1aMC05Ky9dezJ9PT18W0EtWjAtOSsvXXszfT0pPyQvaTtcbiAgICByZXR1cm4gYmFzZTY0UGF0dGVybi50ZXN0KHN0cik7XG4gIH1cblxuICBwcml2YXRlIGlzSGV4YWRlY2ltYWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBoZXhQYXR0ZXJuID0gL15bMC05YS1mQS1GXSskLztcbiAgICByZXR1cm4gaGV4UGF0dGVybi50ZXN0KHN0cikgJiYgKHN0ci5sZW5ndGggJSAyID09PSAwKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzSGlnaEVudHJvcHkoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB1bmlxdWVDaGFycyA9IG5ldyBTZXQoc3RyKS5zaXplO1xuICAgIHJldHVybiB1bmlxdWVDaGFycyA+IHN0ci5sZW5ndGggKiAwLjY7XG4gIH1cblxuICBpc0VuY3J5cHRlZChzdHI6IHN0cmluZyk6IGJvb2xlYW4ge1xuXG4gICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNCYXNlNjQoc3RyKSB8fCB0aGlzLmlzSGV4YWRlY2ltYWwoc3RyKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaGFzSGlnaEVudHJvcHkoc3RyKTtcblxuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from "./asymmetrical-encryption.service";
|
|
2
|
+
export * from './symmetrical-encryption.service';
|
|
3
|
+
export * from './random';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3V0aWxzL2VuY3J5cHRpb24vaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGtDQUFrQyxDQUFDO0FBRWpELGNBQWMsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vYXN5bW1ldHJpY2FsLWVuY3J5cHRpb24uc2VydmljZVwiO1xuZXhwb3J0ICogZnJvbSAnLi9zeW1tZXRyaWNhbC1lbmNyeXB0aW9uLnNlcnZpY2UnO1xuXG5leHBvcnQgKiBmcm9tICcuL3JhbmRvbSc7XG5cbiJdfQ==
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export const Random = () => {
|
|
2
|
+
const typedArray = new Uint8Array(1);
|
|
3
|
+
const randomValue = crypto.getRandomValues(typedArray)[0];
|
|
4
|
+
const randomFloat = randomValue / Math.pow(2, 8);
|
|
5
|
+
return randomFloat;
|
|
6
|
+
};
|
|
7
|
+
export const RandomNumber = (min, max) => {
|
|
8
|
+
return Math.floor(Random() * max) + min;
|
|
9
|
+
};
|
|
10
|
+
export const RandomNumbers = (min, max, length) => {
|
|
11
|
+
const numbers = [];
|
|
12
|
+
for (let i = 0; i < length; i++)
|
|
13
|
+
numbers.push(Math.floor(Random() * max) + min);
|
|
14
|
+
return numbers;
|
|
15
|
+
};
|
|
16
|
+
export const RandomNumbersUnique = (min, max, length) => {
|
|
17
|
+
let count = 0;
|
|
18
|
+
// Adjust the length if it exceeds the number of unique numbers possible in the range
|
|
19
|
+
if (length > (max - min + 1)) {
|
|
20
|
+
console.error('error encountered');
|
|
21
|
+
length = max - min + 1;
|
|
22
|
+
}
|
|
23
|
+
console.log('length', length);
|
|
24
|
+
const numbers = [];
|
|
25
|
+
const maxAttempts = length * 100; // Safeguard to prevent infinite loops
|
|
26
|
+
while (numbers.length < length && count < maxAttempts) {
|
|
27
|
+
const num = Math.floor(Random() * max) + min;
|
|
28
|
+
if (!numbers.includes(num)) {
|
|
29
|
+
numbers.push(num);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (count >= maxAttempts) {
|
|
33
|
+
throw new Error('Maximum attempts exceeded while generating unique numbers');
|
|
34
|
+
}
|
|
35
|
+
return numbers;
|
|
36
|
+
};
|
|
37
|
+
export const RandomStr = () => {
|
|
38
|
+
const typedArray = new Uint8Array(8);
|
|
39
|
+
const array = new Uint32Array(1);
|
|
40
|
+
crypto.getRandomValues(array);
|
|
41
|
+
return array[0].toString(36);
|
|
42
|
+
};
|
|
43
|
+
export const RandomSignature = () => {
|
|
44
|
+
const typedArray = new Uint8Array(8);
|
|
45
|
+
const array = new Uint32Array(1);
|
|
46
|
+
crypto.getRandomValues(array);
|
|
47
|
+
return array[0];
|
|
48
|
+
};
|
|
49
|
+
export const UUID = () => {
|
|
50
|
+
return self.crypto.randomUUID();
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy91dGlscy9lbmNyeXB0aW9uL3JhbmRvbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFO0lBQ3pCLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekQsTUFBTSxXQUFXLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ2hELE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQVcsRUFBRSxHQUFXLEVBQUUsRUFBRTtJQUN2RCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFBO0FBQ3pDLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQVcsRUFBRSxHQUFXLEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFDeEUsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFBO0lBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFO1FBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFBO0lBQy9FLE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsR0FBVyxFQUFFLEdBQVcsRUFBRSxNQUFjLEVBQUUsRUFBRTtJQUM5RSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFZCxxRkFBcUY7SUFDckYsSUFBSSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFO1FBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNuQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDeEI7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7SUFDN0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxHQUFHLEdBQUcsQ0FBRSxDQUFDLHNDQUFzQztJQUV6RSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEtBQUssR0FBRyxXQUFXLEVBQUU7UUFFckQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7UUFFN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDMUIsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNuQjtLQUNGO0lBRUQsSUFBSSxLQUFLLElBQUksV0FBVyxFQUFFO1FBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsMkRBQTJELENBQUMsQ0FBQztLQUM5RTtJQUVELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7SUFFNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDcEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM3QixPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUE7QUFFOUIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsRUFBRTtJQUVsQyxNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNwQyxNQUFNLEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNoQyxNQUFNLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzdCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBRWpCLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7SUFDdkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFBO0FBQ2pDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBSYW5kb20gPSAoKSA9PiB7XG4gIGNvbnN0IHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSgxKVxuICBjb25zdCByYW5kb21WYWx1ZSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXModHlwZWRBcnJheSlbMF1cbiAgY29uc3QgcmFuZG9tRmxvYXQgPSByYW5kb21WYWx1ZSAvIE1hdGgucG93KDIsIDgpXG4gIHJldHVybiByYW5kb21GbG9hdFxufVxuXG5leHBvcnQgY29uc3QgUmFuZG9tTnVtYmVyID0gKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikgPT4ge1xuICByZXR1cm4gTWF0aC5mbG9vcihSYW5kb20oKSAqIG1heCkgKyBtaW5cbn1cblxuZXhwb3J0IGNvbnN0IFJhbmRvbU51bWJlcnMgPSAobWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcikgPT4ge1xuICBjb25zdCBudW1iZXJzOiBudW1iZXJbXSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIG51bWJlcnMucHVzaChNYXRoLmZsb29yKFJhbmRvbSgpICogbWF4KSArIG1pbilcbiAgcmV0dXJuIG51bWJlcnNcbn1cblxuZXhwb3J0IGNvbnN0IFJhbmRvbU51bWJlcnNVbmlxdWUgPSAobWluOiBudW1iZXIsIG1heDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcikgPT4ge1xuICBsZXQgY291bnQgPSAwO1xuXG4gIC8vIEFkanVzdCB0aGUgbGVuZ3RoIGlmIGl0IGV4Y2VlZHMgdGhlIG51bWJlciBvZiB1bmlxdWUgbnVtYmVycyBwb3NzaWJsZSBpbiB0aGUgcmFuZ2VcbiAgaWYgKGxlbmd0aCA+IChtYXggLSBtaW4gKyAxKSkge1xuICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yIGVuY291bnRlcmVkJyk7XG4gICAgbGVuZ3RoID0gbWF4IC0gbWluICsgMTtcbiAgfVxuXG4gIGNvbnNvbGUubG9nKCdsZW5ndGgnLCBsZW5ndGgpO1xuICBjb25zdCBudW1iZXJzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBtYXhBdHRlbXB0cyA9IGxlbmd0aCAqIDEwMCA7IC8vIFNhZmVndWFyZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG5cbiAgd2hpbGUgKG51bWJlcnMubGVuZ3RoIDwgbGVuZ3RoICYmIGNvdW50IDwgbWF4QXR0ZW1wdHMpIHtcblxuICAgIGNvbnN0IG51bSA9IE1hdGguZmxvb3IoUmFuZG9tKCkgKiBtYXgpICsgbWluO1xuXG4gICAgaWYgKCFudW1iZXJzLmluY2x1ZGVzKG51bSkpIHtcbiAgICAgIG51bWJlcnMucHVzaChudW0pO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb3VudCA+PSBtYXhBdHRlbXB0cykge1xuICAgIHRocm93IG5ldyBFcnJvcignTWF4aW11bSBhdHRlbXB0cyBleGNlZWRlZCB3aGlsZSBnZW5lcmF0aW5nIHVuaXF1ZSBudW1iZXJzJyk7XG4gIH1cblxuICByZXR1cm4gbnVtYmVycztcbn07XG5cbmV4cG9ydCBjb25zdCBSYW5kb21TdHIgPSAoKSA9PiB7XG5cbiAgY29uc3QgdHlwZWRBcnJheSA9IG5ldyBVaW50OEFycmF5KDgpXG4gIGNvbnN0IGFycmF5ID0gbmV3IFVpbnQzMkFycmF5KDEpXG4gIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyYXkpXG4gIHJldHVybiBhcnJheVswXS50b1N0cmluZygzNilcblxufVxuXG5leHBvcnQgY29uc3QgUmFuZG9tU2lnbmF0dXJlID0gKCkgPT4ge1xuXG4gIGNvbnN0IHR5cGVkQXJyYXkgPSBuZXcgVWludDhBcnJheSg4KVxuICBjb25zdCBhcnJheSA9IG5ldyBVaW50MzJBcnJheSgxKVxuICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KVxuICByZXR1cm4gYXJyYXlbMF1cblxufVxuXG5leHBvcnQgY29uc3QgVVVJRCA9ICgpID0+IHtcbiAgcmV0dXJuIHNlbGYuY3J5cHRvLnJhbmRvbVVVSUQoKVxufVxuXG5cbiJdfQ==
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Injectable, inject } from '@angular/core';
|
|
2
|
+
import * as CryptoJS from 'crypto-js';
|
|
3
|
+
import { RandomSignature } from './random';
|
|
4
|
+
import { AppService } from '../app.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export class SymmetricalEncryptionService {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.appService = inject(AppService);
|
|
9
|
+
// TODO: The APP ID is not a string, it is a function
|
|
10
|
+
this.appID = (this.appService.appID) ? this.appService.appID : '';
|
|
11
|
+
if (this.appID === '')
|
|
12
|
+
console.warn('No App Key has been define');
|
|
13
|
+
}
|
|
14
|
+
generateCipherKey() {
|
|
15
|
+
return (RandomSignature().toString() + RandomSignature().toString()).substring(0, 8);
|
|
16
|
+
}
|
|
17
|
+
encrypt(str, key = this.appID) {
|
|
18
|
+
if (!str || key === '')
|
|
19
|
+
return '';
|
|
20
|
+
let _key = CryptoJS.enc.Utf8.parse(key);
|
|
21
|
+
let _iv = CryptoJS.enc.Utf8.parse(key);
|
|
22
|
+
try {
|
|
23
|
+
const encrypted = CryptoJS.AES.encrypt(JSON.stringify(str), _key, {
|
|
24
|
+
keySize: 16,
|
|
25
|
+
iv: _iv,
|
|
26
|
+
mode: CryptoJS.mode.ECB,
|
|
27
|
+
padding: CryptoJS.pad.Pkcs7
|
|
28
|
+
});
|
|
29
|
+
return encrypted.toString();
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
console.log(error);
|
|
33
|
+
}
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
decrypt(str, key = this.appID) {
|
|
37
|
+
if (!str || key === '')
|
|
38
|
+
return;
|
|
39
|
+
let _key = CryptoJS.enc.Utf8.parse(key);
|
|
40
|
+
let _iv = CryptoJS.enc.Utf8.parse(key);
|
|
41
|
+
try {
|
|
42
|
+
return CryptoJS.AES.decrypt(str, _key, {
|
|
43
|
+
keySize: 16,
|
|
44
|
+
iv: _iv,
|
|
45
|
+
mode: CryptoJS.mode.ECB,
|
|
46
|
+
padding: CryptoJS.pad.Pkcs7
|
|
47
|
+
}).toString(CryptoJS.enc.Utf8);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.log(error);
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
createSignature(url, len = 16) {
|
|
55
|
+
const sig = CryptoJS.SHA256(url).toString(CryptoJS.enc.Hex);
|
|
56
|
+
return sig.substring(0, len).toUpperCase();
|
|
57
|
+
}
|
|
58
|
+
normalizeURL(url) {
|
|
59
|
+
const normalizedURL = url.replace(/(https?:\/\/)?(www\.)?/, '').replace(/\/+$/, '');
|
|
60
|
+
return normalizedURL;
|
|
61
|
+
}
|
|
62
|
+
generateSignature(url) {
|
|
63
|
+
const normalizedURL = this.normalizeURL(url);
|
|
64
|
+
const hash = CryptoJS.SHA256(normalizedURL);
|
|
65
|
+
const signature = hash.toString(CryptoJS.enc.Hex);
|
|
66
|
+
return signature;
|
|
67
|
+
}
|
|
68
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SymmetricalEncryptionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
69
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SymmetricalEncryptionService, providedIn: 'root' }); }
|
|
70
|
+
}
|
|
71
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SymmetricalEncryptionService, decorators: [{
|
|
72
|
+
type: Injectable,
|
|
73
|
+
args: [{
|
|
74
|
+
providedIn: 'root'
|
|
75
|
+
}]
|
|
76
|
+
}], ctorParameters: function () { return []; } });
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltbWV0cmljYWwtZW5jcnlwdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy91dGlscy9lbmNyeXB0aW9uL3N5bW1ldHJpY2FsLWVuY3J5cHRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLNUMsTUFBTSxPQUFPLDRCQUE0QjtJQU12QztRQUZRLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7UUFHckMscURBQXFEO1FBQ3JELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ2pFLElBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLENBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3RGLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBUSxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSztRQUVoQyxJQUFHLENBQUMs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QWpGVSw0QkFBNEI7bUhBQTVCLDRCQUE0QixjQUYzQixNQUFNOzs0RkFFUCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tICdjcnlwdG8tanMnO1xuXG5pbXBvcnQgeyBSYW5kb21TaWduYXR1cmUgfSBmcm9tICcuL3JhbmRvbSc7XG5pbXBvcnQgeyBBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTeW1tZXRyaWNhbEVuY3J5cHRpb25TZXJ2aWNlIHtcblxuICBhcHBJRDogc3RyaW5nOyAvLyBBUFAgU0VSVklDRSBUTyBNQU5BR0VSIEVOQ1JZUFRJT04gS0VZXG5cbiAgcHJpdmF0ZSBhcHBTZXJ2aWNlID0gaW5qZWN0KEFwcFNlcnZpY2UpXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gVE9ETzogVGhlIEFQUCBJRCBpcyBub3QgYSBzdHJpbmcsIGl0IGlzIGEgZnVuY3Rpb25cbiAgICB0aGlzLmFwcElEID0gKHRoaXMuYXBwU2VydmljZS5hcHBJRCkgPyB0aGlzLmFwcFNlcnZpY2UuYXBwSUQgOiAnJ1xuICAgIGlmKHRoaXMuYXBwSUQgPT09ICcnKSBjb25zb2xlLndhcm4oJ05vIEFwcCBLZXkgaGFzIGJlZW4gZGVmaW5lJylcbiAgfVxuXG4gIGdlbmVyYXRlQ2lwaGVyS2V5KCkge1xuICAgIHJldHVybiAoUmFuZG9tU2lnbmF0dXJlKCkudG9TdHJpbmcoKSArIFJhbmRvbVNpZ25hdHVyZSgpLnRvU3RyaW5nKCkpLnN1YnN0cmluZygwLCA4KVxuICB9XG5cbiAgZW5jcnlwdChzdHI6IGFueSwga2V5ID0gdGhpcy5hcHBJRCkge1xuXG4gICAgaWYoIXN0ciB8fCBrZXkgPT09ICcnKSByZXR1cm4gJydcblxuICAgIGxldCBfa2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KVxuICAgIGxldCBfaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShrZXkpXG5cbiAgICB0cnkge1xuXG4gICAgY29uc3QgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQoXG4gICAgICBKU09OLnN0cmluZ2lmeShzdHIpLCBfa2V5LCB7XG4gICAgICAgIGtleVNpemU6IDE2LFxuICAgICAgICBpdjogX2l2LFxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkVDQixcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGVuY3J5cHRlZC50b1N0cmluZygpXG5cbiAgICB9IGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgZGVjcnlwdChzdHI6IHN0cmluZywga2V5ID0gdGhpcy5hcHBJRCkge1xuXG4gICAgaWYoIXN0ciB8fCBrZXkgPT09ICcnKSByZXR1cm5cblxuICAgIGxldCBfa2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KVxuICAgIGxldCBfaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShrZXkpXG5cbiAgICB0cnkge1xuXG4gICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KFxuICAgICAgc3RyLCBfa2V5LCB7XG4gICAgICAgIGtleVNpemU6IDE2LFxuICAgICAgICBpdjogX2l2LFxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkVDQixcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XG4gICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XG5cbiAgICB9IGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgY3JlYXRlU2lnbmF0dXJlKHVybDogc3RyaW5nLCBsZW4gPSAxNikge1xuICAgIGNvbnN0IHNpZyA9IENyeXB0b0pTLlNIQTI1Nih1cmwpLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpXG4gICAgcmV0dXJuIHNpZy5zdWJzdHJpbmcoMCwgbGVuKS50b1VwcGVyQ2FzZSgpXG4gIH1cblxuICBub3JtYWxpemVVUkwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3JtYWxpemVkVVJMID0gdXJsLnJlcGxhY2UoLyhodHRwcz86XFwvXFwvKT8od3d3XFwuKT8vLCAnJykucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRVUkw7XG4gIH1cblxuICBnZW5lcmF0ZVNpZ25hdHVyZSh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRVUkwgPSB0aGlzLm5vcm1hbGl6ZVVSTCh1cmwpXG4gICAgY29uc3QgaGFzaCA9IENyeXB0b0pTLlNIQTI1Nihub3JtYWxpemVkVVJMKVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGhhc2gudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleClcbiAgICByZXR1cm4gc2lnbmF0dXJlO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { HttpHeaders } from '@angular/common/http';
|
|
2
|
+
import { Injectable } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class HeadersService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.headers = {};
|
|
7
|
+
}
|
|
8
|
+
generateHeaders(headers) {
|
|
9
|
+
const allHeaders = headers ? { ...this.headers, ...headers } : {};
|
|
10
|
+
return { headers: new HttpHeaders(allHeaders) };
|
|
11
|
+
}
|
|
12
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HeadersService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
13
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HeadersService, providedIn: 'root' }); }
|
|
14
|
+
}
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: HeadersService, decorators: [{
|
|
16
|
+
type: Injectable,
|
|
17
|
+
args: [{
|
|
18
|
+
providedIn: 'root'
|
|
19
|
+
}]
|
|
20
|
+
}] });
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVycy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy91dGlscy9oZWFkZXJzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxjQUFjO0lBSDNCO1FBS0UsWUFBTyxHQUFHLEVBQUUsQ0FBQTtLQVNiO0lBUEMsZUFBZSxDQUFDLE9BQWdDO1FBRTlDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQTtJQUVqRCxDQUFDOytHQVRVLGNBQWM7bUhBQWQsY0FBYyxjQUZiLE1BQU07OzRGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEhlYWRlcnNTZXJ2aWNlIHtcblxuICBoZWFkZXJzID0ge31cblxuICBnZW5lcmF0ZUhlYWRlcnMoaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiB7IGhlYWRlcnM6IEh0dHBIZWFkZXJzIH0ge1xuXG4gICAgY29uc3QgYWxsSGVhZGVycyA9IGhlYWRlcnMgPyB7IC4uLnRoaXMuaGVhZGVycywgLi4uaGVhZGVycyB9IDoge31cbiAgICByZXR1cm4geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoYWxsSGVhZGVycykgfVxuXG4gIH1cblxufVxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './app.service';
|
|
2
|
+
export * from './headers.service';
|
|
3
|
+
export * from './path-query.service';
|
|
4
|
+
export * from './utils.service';
|
|
5
|
+
export * from './encryption/index';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9odHRwLXJlcXVlc3QtbWFuYWdlci9zcmMvbGliL3NlcnZpY2VzL3V0aWxzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGlCQUFpQixDQUFDO0FBRWhDLGNBQWMsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FwcC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vaGVhZGVycy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcGF0aC1xdWVyeS5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdXRpbHMuc2VydmljZSc7XG5cbmV4cG9ydCAqIGZyb20gJy4vZW5jcnlwdGlvbi9pbmRleCc7XG5cbiJdfQ==
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class PathQueryService {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.removeEmptyParams = (obj) => Object.fromEntries(Object.entries(obj)
|
|
6
|
+
.map(([key, value]) => [key, value && typeof value === 'object' ? this.removeEmptyParams(value) : value])
|
|
7
|
+
.filter(([_, value]) => value !== undefined && value !== ""));
|
|
8
|
+
}
|
|
9
|
+
buildAPIPath(server, params) {
|
|
10
|
+
server = (Array.isArray(server)) ? server.join('/') : server;
|
|
11
|
+
const pathObjects = (params) ? params.filter((path) => (!this.isObject(path))) : [];
|
|
12
|
+
const queryObjects = (params) ? params.filter((path) => (this.isObject(path))) : [];
|
|
13
|
+
const query = this.removeEmptyParams(queryObjects.reduce((r, c) => {
|
|
14
|
+
Object.entries(c).forEach(([key, value]) => {
|
|
15
|
+
r[key] = Array.isArray(value) ? value.join(',') : value;
|
|
16
|
+
});
|
|
17
|
+
return r;
|
|
18
|
+
}, {}));
|
|
19
|
+
let path = this.buildRestPath(server, pathObjects);
|
|
20
|
+
return (Object.keys(query).length > 0) ? path + '?' + this.buildQueryPath(query) : path;
|
|
21
|
+
}
|
|
22
|
+
buildRestPath(server, params) {
|
|
23
|
+
server = (server.charAt(0) === '/') ? server.substring(1) : server;
|
|
24
|
+
return this.cleanUrlPath(server + '/' + params.join('/'));
|
|
25
|
+
}
|
|
26
|
+
buildQueryPath(params) {
|
|
27
|
+
const searchParams = new URLSearchParams();
|
|
28
|
+
for (const key in params) {
|
|
29
|
+
if (Array.isArray(params[key])) {
|
|
30
|
+
params[key].forEach((value) => searchParams.append(key, value));
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
searchParams.append(key, params[key]);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return searchParams.toString();
|
|
37
|
+
}
|
|
38
|
+
cleanUrlPath(str) {
|
|
39
|
+
return str.replace(/([^:]\/)\/+/g, "$1").replace(/\/$/, '');
|
|
40
|
+
}
|
|
41
|
+
isObject(val) {
|
|
42
|
+
return (val === null) ? false : ((typeof val === 'function') || (typeof val === 'object'));
|
|
43
|
+
}
|
|
44
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PathQueryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
45
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PathQueryService, providedIn: 'root' }); }
|
|
46
|
+
}
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PathQueryService, decorators: [{
|
|
48
|
+
type: Injectable,
|
|
49
|
+
args: [{
|
|
50
|
+
providedIn: 'root'
|
|
51
|
+
}]
|
|
52
|
+
}] });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC1xdWVyeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy91dGlscy9wYXRoLXF1ZXJ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUg3QjtRQXdEVSxzQkFBaUIsR0FBRyxDQUFDLEdBQVEsRUFBdUIsRUFBRSxDQUM1RCxNQUFNLENBQUMsV0FBVyxDQUNoQixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQzthQUNoQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQ3BCLENBQUMsR0FBRyxFQUFFLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQ2xGO2FBQ0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUMvRCxDQUFBO0tBRUo7SUE1REMsWUFBWSxDQUFDLE1BQXVCLEVBQUUsTUFBa0I7UUFFdEQsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUE7UUFFNUQsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVEsRUFB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QVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUUsQ0FBQTtJQUM5RixDQUFDOytHQW5EVSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQUZmLE1BQU07OzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBhdGhRdWVyeVNlcnZpY2Uge1xuXG4gIGJ1aWxkQVBJUGF0aChzZXJ2ZXI6IHN0cmluZ3xzdHJpbmdbXSwgcGFyYW1zPzogYW55W118YW55KSB7XG5cbiAgICBzZXJ2ZXIgPSAoQXJyYXkuaXNBcnJheShzZXJ2ZXIpKSA/IHNlcnZlci5qb2luKCcvJykgOiBzZXJ2ZXJcblxuICAgIGNvbnN0IHBhdGhPYmplY3RzID0gKHBhcmFtcykgPyBwYXJhbXMuZmlsdGVyKChwYXRoOmFueSkgPT4gKCF0aGlzLmlzT2JqZWN0KHBhdGgpKSkgOiBbXVxuICAgIGNvbnN0IHF1ZXJ5T2JqZWN0cyA9IChwYXJhbXMpID8gcGFyYW1zLmZpbHRlcigocGF0aDphbnkpID0+ICh0aGlzLmlzT2JqZWN0KHBhdGgpKSkgOiBbXVxuXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnJlbW92ZUVtcHR5UGFyYW1zKHF1ZXJ5T2JqZWN0cy5yZWR1Y2UoKHI6IGFueSwgYzogYW55KSA9PiB7XG4gICAgICBPYmplY3QuZW50cmllcyhjKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgcltrZXldID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5qb2luKCcsJykgOiB2YWx1ZVxuICAgICAgfSlcbiAgICAgIHJldHVybiByXG4gICAgfSwge30pKVxuXG4gICAgbGV0IHBhdGggPSB0aGlzLmJ1aWxkUmVzdFBhdGgoc2VydmVyLCBwYXRoT2JqZWN0cylcblxuICAgIHJldHVybihPYmplY3Qua2V5cyhxdWVyeSkubGVuZ3RoID4gMCkgPyBwYXRoICsgJz8nICsgdGhpcy5idWlsZFF1ZXJ5UGF0aChxdWVyeSkgOiBwYXRoXG5cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRSZXN0UGF0aChzZXJ2ZXI6IHN0cmluZywgcGFyYW1zOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgc2VydmVyID0gKHNlcnZlci5jaGFyQXQoMCkgPT09ICcvJykgPyBzZXJ2ZXIuc3Vic3RyaW5nKDEpIDogc2VydmVyXG4gICAgcmV0dXJuIHRoaXMuY2xlYW5VcmxQYXRoKHNlcnZlciArJy8nKyBwYXJhbXMuam9pbignLycpKVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFF1ZXJ5UGF0aChwYXJhbXM6IGFueSk6IHN0cmluZyB7XG5cbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcblxuICAgIGZvciAoY29uc3Qga2V5IGluIHBhcmFtcykge1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJhbXNba2V5XSkpIHtcbiAgICAgICAgcGFyYW1zW2tleV0uZm9yRWFjaCgodmFsdWU6IGFueSkgPT4gc2VhcmNoUGFyYW1zLmFwcGVuZChrZXksIHZhbHVlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgcGFyYW1zW2tleV0pO1xuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlYXJjaFBhcmFtcy50b1N0cmluZygpXG5cbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcmxQYXRoKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW146XVxcLylcXC8rL2csIFwiJDFcIikucmVwbGFjZSgvXFwvJC8sJycpXG4gIH1cblxuICBwcml2YXRlIGlzT2JqZWN0KHZhbDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh2YWwgPT09IG51bGwpID8gZmFsc2UgOiAoICh0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nKSB8fCAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIClcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlRW1wdHlQYXJhbXMgPSAob2JqOiBhbnkpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0+XG4gICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgT2JqZWN0LmVudHJpZXMob2JqKVxuICAgICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+XG4gICAgICAgICAgW2tleSwgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHRoaXMucmVtb3ZlRW1wdHlQYXJhbXModmFsdWUpIDogdmFsdWVdXG4gICAgICAgIClcbiAgICAgICAgLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gXCJcIilcbiAgICApXG5cbn1cbiJdfQ==
|