@futdevpro/fsm-dynamo 1.14.20 → 1.14.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/build/_modules/crypto/_collections/crypto.util.d.ts.map +1 -1
  2. package/build/_modules/crypto/_collections/crypto.util.edge.spec.d.ts +2 -0
  3. package/build/_modules/crypto/_collections/crypto.util.edge.spec.d.ts.map +1 -0
  4. package/build/_modules/crypto/_collections/crypto.util.edge.spec.js +551 -0
  5. package/build/_modules/crypto/_collections/crypto.util.edge.spec.js.map +1 -0
  6. package/build/_modules/crypto/_collections/crypto.util.extra.spec.d.ts +2 -0
  7. package/build/_modules/crypto/_collections/crypto.util.extra.spec.d.ts.map +1 -0
  8. package/build/_modules/crypto/_collections/crypto.util.extra.spec.js +555 -0
  9. package/build/_modules/crypto/_collections/crypto.util.extra.spec.js.map +1 -0
  10. package/build/_modules/crypto/_collections/crypto.util.js +42 -3
  11. package/build/_modules/crypto/_collections/crypto.util.js.map +1 -1
  12. package/build/_modules/crypto/_collections/crypto.util.simple.spec.d.ts +2 -0
  13. package/build/_modules/crypto/_collections/crypto.util.simple.spec.d.ts.map +1 -0
  14. package/build/_modules/crypto/_collections/crypto.util.simple.spec.js +429 -0
  15. package/build/_modules/crypto/_collections/crypto.util.simple.spec.js.map +1 -0
  16. package/futdevpro-fsm-dynamo-01.14.22.tgz +0 -0
  17. package/package.json +2 -2
  18. package/src/_modules/crypto/_collections/crypto.util.edge.spec.ts +606 -0
  19. package/src/_modules/crypto/_collections/crypto.util.extra.spec.ts +643 -0
  20. package/src/_modules/crypto/_collections/crypto.util.simple.spec.ts +513 -0
  21. package/src/_modules/crypto/_collections/crypto.util.ts +93 -48
  22. package/build/_modules/crypto/_collections/crypto.util.spec.d.ts +0 -2
  23. package/build/_modules/crypto/_collections/crypto.util.spec.d.ts.map +0 -1
  24. package/build/_modules/crypto/_collections/crypto.util.spec.js +0 -1180
  25. package/build/_modules/crypto/_collections/crypto.util.spec.js.map +0 -1
  26. package/futdevpro-fsm-dynamo-01.14.20.tgz +0 -0
  27. package/src/_modules/crypto/_collections/crypto.util.spec.ts +0 -1370
@@ -1 +1 @@
1
- {"version":3,"file":"crypto.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAS;IAC/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAKpC;IACF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAEY;IAEvD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAuC5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA8BlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAmDlC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAazB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAa3B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAOtC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAOxB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAc5B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAwCrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAmD9B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM;IAsCtE;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,CAAC;IA+F/E;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,GAAE,MAAW,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IAiBrE;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAO3D;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,OAAO,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB;IAgDD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;CAwBvC"}
1
+ {"version":3,"file":"crypto.util.d.ts","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;;;;;;;;;;;;GAaG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAiB;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAKpC;IACF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAEY;IAEvD;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAuC5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA8BlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAmDlC;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAazB;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAa3B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAOtC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAOxB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAc5B;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAwCrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAmD9B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM;IAsCtE;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,CAAC;IAgI/E;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,GAAE,MAAW,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IAiBrE;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAO3D;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG;QAClD,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,OAAO,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB;IAgDD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,uBAAuB;CAkCvC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=crypto.util.edge.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.util.edge.spec.d.ts","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.edge.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,551 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const crypto_util_1 = require("./crypto.util");
4
+ describe('| DyFM_Crypto edge cases', () => {
5
+ const testKey = 'test-secret-key-123';
6
+ const testData = { id: 1, name: 'test' };
7
+ describe('| edge cases', () => {
8
+ describe('| empty and null values', () => {
9
+ it('| should handle empty objects', () => {
10
+ const emptyObj = {};
11
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(emptyObj, testKey);
12
+ const decrypted = crypto_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
13
+ expect(decrypted).toEqual(emptyObj);
14
+ });
15
+ it('| should handle empty arrays', () => {
16
+ const emptyArr = [];
17
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(emptyArr, testKey);
18
+ const decrypted = crypto_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
19
+ expect(decrypted).toEqual(emptyArr);
20
+ });
21
+ it('| should handle null values in objects', () => {
22
+ const dataWithNull = {
23
+ id: 1,
24
+ name: null,
25
+ nested: { value: null }
26
+ };
27
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(dataWithNull, testKey);
28
+ const decrypted = crypto_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
29
+ expect(decrypted).toEqual(dataWithNull);
30
+ });
31
+ it('| should handle undefined values in objects', () => {
32
+ const dataWithUndefined = {
33
+ id: 1,
34
+ name: undefined,
35
+ nested: { value: undefined }
36
+ };
37
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(dataWithUndefined, testKey);
38
+ const decrypted = crypto_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
39
+ expect(decrypted).toEqual({ id: 1, nested: {} });
40
+ });
41
+ });
42
+ describe('| key edge cases', () => {
43
+ it('| should handle very long keys', () => {
44
+ const longKey = 'a'.repeat(1000);
45
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(testData, longKey);
46
+ const decrypted = crypto_util_1.DyFM_Crypto.decrypt(encrypted, longKey);
47
+ expect(decrypted).toEqual(testData);
48
+ });
49
+ it('| should handle empty key', () => {
50
+ expect(() => crypto_util_1.DyFM_Crypto.encrypt(testData, '')).toThrow();
51
+ });
52
+ it('| should handle whitespace-only keys', () => {
53
+ expect(() => crypto_util_1.DyFM_Crypto.encrypt(testData, ' ')).toThrow();
54
+ });
55
+ });
56
+ describe('| encrypted data manipulation', () => {
57
+ it('| should detect when encrypted data is truncated', () => {
58
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(testData, testKey);
59
+ const truncated = encrypted.slice(0, -10);
60
+ expect(() => crypto_util_1.DyFM_Crypto.decrypt(truncated, testKey)).toThrow();
61
+ });
62
+ it('| should detect when encrypted data is extended', () => {
63
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(testData, testKey);
64
+ const extended = encrypted + 'A'.repeat(10);
65
+ expect(() => crypto_util_1.DyFM_Crypto.decrypt(extended, testKey)).toThrow();
66
+ });
67
+ it('| should detect when encrypted data is modified in the middle', () => {
68
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(testData, testKey);
69
+ const midPoint = Math.floor(encrypted.length / 2);
70
+ const modified = encrypted.slice(0, midPoint) + 'X' + encrypted.slice(midPoint + 1);
71
+ expect(() => crypto_util_1.DyFM_Crypto.decrypt(modified, testKey)).toThrow();
72
+ });
73
+ });
74
+ describe('| JSON handling edge cases', () => {
75
+ it('| should handle double-stringified JSON data correctly', () => {
76
+ const testData = {
77
+ username: 'Itharen',
78
+ password: 'asdasd',
79
+ roles: [],
80
+ permissions: [],
81
+ activeSubscriptions: [],
82
+ clientUserIds: {},
83
+ oauth2Data: {}
84
+ };
85
+ // Simulate double stringification
86
+ const doubleStringified = JSON.stringify(JSON.stringify(testData));
87
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(doubleStringified, testKey);
88
+ const decrypted = crypto_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
89
+ // The crypto utility should automatically handle double-stringified JSON
90
+ // and return the original object directly
91
+ expect(decrypted).toEqual(testData);
92
+ });
93
+ it('| should handle character-by-character JSON data correctly', () => {
94
+ // Create a character-by-character object like in the example
95
+ const charByCharData = {
96
+ '0': '{',
97
+ '1': '"',
98
+ '2': '_',
99
+ '3': '_',
100
+ '4': 'c',
101
+ '5': 'r',
102
+ '6': 'e',
103
+ '7': 'a',
104
+ '8': 't',
105
+ '9': 'e',
106
+ '10': 'd',
107
+ '11': '"',
108
+ '12': ':',
109
+ '13': '"',
110
+ '14': '2',
111
+ '15': '0',
112
+ '16': '2',
113
+ '17': '5',
114
+ '18': '-',
115
+ '19': '0',
116
+ '20': '5',
117
+ '21': '-',
118
+ '22': '1',
119
+ '23': '3',
120
+ '24': 'T',
121
+ '25': '1',
122
+ '26': '0',
123
+ '27': ':',
124
+ '28': '4',
125
+ '29': '0',
126
+ '30': ':',
127
+ '31': '4',
128
+ '32': '4',
129
+ '33': '.',
130
+ '34': '7',
131
+ '35': '6',
132
+ '36': '0',
133
+ '37': 'Z',
134
+ '38': '"',
135
+ '39': ',',
136
+ '40': '"',
137
+ '41': '_',
138
+ '42': '_',
139
+ '43': 'l',
140
+ '44': 'a',
141
+ '45': 's',
142
+ '46': 't',
143
+ '47': 'M',
144
+ '48': 'o',
145
+ '49': 'd',
146
+ '50': 'i',
147
+ '51': 'f',
148
+ '52': 'i',
149
+ '53': 'e',
150
+ '54': 'd',
151
+ '55': '"',
152
+ '56': ':',
153
+ '57': '"',
154
+ '58': '2',
155
+ '59': '0',
156
+ '60': '2',
157
+ '61': '5',
158
+ '62': '-',
159
+ '63': '0',
160
+ '64': '5',
161
+ '65': '-',
162
+ '66': '1',
163
+ '67': '3',
164
+ '68': 'T',
165
+ '69': '1',
166
+ '70': '0',
167
+ '71': ':',
168
+ '72': '4',
169
+ '73': '0',
170
+ '74': ':',
171
+ '75': '4',
172
+ '76': '4',
173
+ '77': '.',
174
+ '78': '7',
175
+ '79': '6',
176
+ '80': '0',
177
+ '81': 'Z',
178
+ '82': '"',
179
+ '83': ',',
180
+ '84': '"',
181
+ '85': '_',
182
+ '86': '_',
183
+ '87': 'v',
184
+ '88': '"',
185
+ '89': ':',
186
+ '90': '0',
187
+ '91': ',',
188
+ '92': '"',
189
+ '93': 'u',
190
+ '94': 's',
191
+ '95': 'e',
192
+ '96': 'r',
193
+ '97': 'n',
194
+ '98': 'a',
195
+ '99': 'm',
196
+ '100': 'e',
197
+ '101': '"',
198
+ '102': ':',
199
+ '103': '"',
200
+ '104': 'I',
201
+ '105': 't',
202
+ '106': 'h',
203
+ '107': 'a',
204
+ '108': 'r',
205
+ '109': 'e',
206
+ '110': 'n',
207
+ '111': '"',
208
+ '112': ',',
209
+ '113': '"',
210
+ '114': 'p',
211
+ '115': 'r',
212
+ '116': 'e',
213
+ '117': 'v',
214
+ '118': 'i',
215
+ '119': 'o',
216
+ '120': 'u',
217
+ '121': 's',
218
+ '122': 'E',
219
+ '123': 'm',
220
+ '124': 'a',
221
+ '125': 'i',
222
+ '126': 'l',
223
+ '127': 's',
224
+ '128': '"',
225
+ '129': ':',
226
+ '130': '[',
227
+ '131': ']',
228
+ '132': ',',
229
+ '133': '"',
230
+ '134': 'p',
231
+ '135': 'a',
232
+ '136': 's',
233
+ '137': 's',
234
+ '138': 'w',
235
+ '139': 'o',
236
+ '140': 'r',
237
+ '141': 'd',
238
+ '142': '"',
239
+ '143': ':',
240
+ '144': '"',
241
+ '145': 'a',
242
+ '146': 's',
243
+ '147': 'd',
244
+ '148': 'a',
245
+ '149': 's',
246
+ '150': 'd',
247
+ '151': '"',
248
+ '152': ',',
249
+ '153': '"',
250
+ '154': 'r',
251
+ '155': 'o',
252
+ '156': 'l',
253
+ '157': 'e',
254
+ '158': 's',
255
+ '159': '"',
256
+ '160': ':',
257
+ '161': '[',
258
+ '162': ']',
259
+ '163': ',',
260
+ '164': '"',
261
+ '165': 'p',
262
+ '166': 'e',
263
+ '167': 'r',
264
+ '168': 'm',
265
+ '169': 'i',
266
+ '170': 's',
267
+ '171': 's',
268
+ '172': 'i',
269
+ '173': 'o',
270
+ '174': 'n',
271
+ '175': 's',
272
+ '176': '"',
273
+ '177': ':',
274
+ '178': '[',
275
+ '179': ']',
276
+ '180': ',',
277
+ '181': '"',
278
+ '182': 'a',
279
+ '183': 'c',
280
+ '184': 't',
281
+ '185': 'i',
282
+ '186': 'v',
283
+ '187': 'e',
284
+ '188': 'S',
285
+ '189': 'u',
286
+ '190': 'b',
287
+ '191': 's',
288
+ '192': 'c',
289
+ '193': 'r',
290
+ '194': 'i',
291
+ '195': 'p',
292
+ '196': 't',
293
+ '197': 'i',
294
+ '198': 'o',
295
+ '199': 'n',
296
+ '200': 's',
297
+ '201': '"',
298
+ '202': ':',
299
+ '203': '[',
300
+ '204': ']',
301
+ '205': ',',
302
+ '206': '"',
303
+ '207': 'c',
304
+ '208': 'l',
305
+ '209': 'i',
306
+ '210': 'e',
307
+ '211': 'n',
308
+ '212': 't',
309
+ '213': 'U',
310
+ '214': 's',
311
+ '215': 'e',
312
+ '216': 'r',
313
+ '217': 'I',
314
+ '218': 'd',
315
+ '219': 's',
316
+ '220': '"',
317
+ '221': ':',
318
+ '222': '{',
319
+ '223': '}',
320
+ '224': ',',
321
+ '225': '"',
322
+ '226': 'o',
323
+ '227': 'a',
324
+ '228': 'u',
325
+ '229': 't',
326
+ '230': 'h',
327
+ '231': '2',
328
+ '232': 'D',
329
+ '233': 'a',
330
+ '234': 't',
331
+ '235': 'a',
332
+ '236': '"',
333
+ '237': ':',
334
+ '238': '{',
335
+ '239': '}',
336
+ '240': '}'
337
+ };
338
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(charByCharData, testKey);
339
+ const decrypted = crypto_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
340
+ // Should be able to parse the decrypted data back to the original object
341
+ expect(decrypted).toEqual(charByCharData);
342
+ });
343
+ });
344
+ describe('| cross-environment consistency', () => {
345
+ it('| should produce same encrypted output for same input across different environments', () => {
346
+ const testData = {
347
+ id: 1,
348
+ name: 'test',
349
+ timestamp: '2024-03-20T10:00:00Z'
350
+ };
351
+ const key = 'test-secret-key-123';
352
+ // Simulate different environments by creating new instances
353
+ const encrypted1 = crypto_util_1.DyFM_Crypto.encrypt(testData, key);
354
+ const encrypted2 = crypto_util_1.DyFM_Crypto.encrypt(testData, key);
355
+ expect(encrypted1).toBe(encrypted2);
356
+ expect(crypto_util_1.DyFM_Crypto.decrypt(encrypted1, key)).toEqual(testData);
357
+ expect(crypto_util_1.DyFM_Crypto.decrypt(encrypted2, key)).toEqual(testData);
358
+ });
359
+ it('| should maintain encryption consistency with different data types', () => {
360
+ const testCases = [
361
+ { data: { id: 1 }, key: 'key1' },
362
+ { data: 'string data', key: 'key2' },
363
+ { data: [1, 2, 3], key: 'key3' },
364
+ { data: { nested: { value: true } }, key: 'key4' }
365
+ ];
366
+ testCases.forEach(({ data, key }) => {
367
+ const encrypted1 = crypto_util_1.DyFM_Crypto.encrypt(data, key);
368
+ const encrypted2 = crypto_util_1.DyFM_Crypto.encrypt(data, key);
369
+ expect(encrypted1).toBe(encrypted2);
370
+ });
371
+ });
372
+ });
373
+ describe('| database persistence', () => {
374
+ it('| should successfully encrypt and decrypt data after database storage simulation', () => {
375
+ const originalData = {
376
+ id: 1,
377
+ name: 'test user',
378
+ email: 'test@example.com',
379
+ settings: {
380
+ theme: 'dark',
381
+ notifications: true
382
+ }
383
+ };
384
+ const key = 'db-storage-key';
385
+ // Simulate database storage and retrieval
386
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(originalData, key);
387
+ const storedData = encrypted; // Simulating database storage
388
+ const retrievedData = storedData; // Simulating database retrieval
389
+ const decrypted = crypto_util_1.DyFM_Crypto.decrypt(retrievedData, key);
390
+ expect(decrypted).toEqual(originalData);
391
+ });
392
+ it('| should handle multiple encryption/decryption cycles for database operations', () => {
393
+ const userData = {
394
+ id: 1,
395
+ name: 'test user',
396
+ lastLogin: '2024-01-01T10:00:00.000Z',
397
+ preferences: {
398
+ language: 'en',
399
+ timezone: 'UTC'
400
+ }
401
+ };
402
+ const key = 'persistent-key';
403
+ // Simulate multiple database operations
404
+ const encrypted1 = crypto_util_1.DyFM_Crypto.encrypt(userData, key);
405
+ const decrypted1 = crypto_util_1.DyFM_Crypto.decrypt(encrypted1, key);
406
+ // Simulate data update with a different timestamp
407
+ const updatedData = {
408
+ ...decrypted1,
409
+ lastLogin: '2024-01-02T15:30:00.000Z'
410
+ };
411
+ const encrypted2 = crypto_util_1.DyFM_Crypto.encrypt(updatedData, key);
412
+ const decrypted2 = crypto_util_1.DyFM_Crypto.decrypt(encrypted2, key);
413
+ expect(decrypted1).toEqual(userData);
414
+ expect(decrypted2).toEqual(updatedData);
415
+ expect(decrypted2.lastLogin).not.toBe(userData.lastLogin);
416
+ });
417
+ it('| should maintain data integrity through multiple database operations', () => {
418
+ const sensitiveData = {
419
+ id: 1,
420
+ password: 'hashed-password-123',
421
+ securityQuestions: [
422
+ { question: 'What is your pet name?', answer: 'Fluffy' },
423
+ { question: 'Where were you born?', answer: 'New York' }
424
+ ]
425
+ };
426
+ const key = 'sensitive-data-key';
427
+ // Simulate multiple database operations with the same data
428
+ const encrypted1 = crypto_util_1.DyFM_Crypto.encrypt(sensitiveData, key);
429
+ const decrypted1 = crypto_util_1.DyFM_Crypto.decrypt(encrypted1, key);
430
+ const encrypted2 = crypto_util_1.DyFM_Crypto.encrypt(decrypted1, key);
431
+ const decrypted2 = crypto_util_1.DyFM_Crypto.decrypt(encrypted2, key);
432
+ expect(decrypted1).toEqual(sensitiveData);
433
+ expect(decrypted2).toEqual(sensitiveData);
434
+ expect(encrypted1).toBe(encrypted2); // Different encryption instances
435
+ });
436
+ });
437
+ describe('| special characters', () => {
438
+ it('| should handle Unicode characters', () => {
439
+ const unicodeData = {
440
+ text: 'Hello 世界! 🌍',
441
+ emoji: '👋',
442
+ special: '!!!@@@###$$$%%%^^^&&&***((()))___+++---===[[[]]]{{{}}}|||;;;:::,,,...<<<>>>' +
443
+ 'ĐĐĐđđđßßߤ¤¤×××÷÷÷¨¨¨¨~~~ˇˇˇ^^^˘˘˘°°°˛˛˛```˙˙˙´´´˝˝˝˝¸¸¸§§§' +
444
+ '???ééééáááűűűúúúőőőóóóüüüöööíííÉÉÉÁÁÁŰŰŰÚÚÚŐŐŐÓÓÓÜÖÖÖÍÍÍ'
445
+ };
446
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(unicodeData, testKey);
447
+ const decrypted = crypto_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
448
+ expect(decrypted).toEqual(unicodeData);
449
+ });
450
+ it('| should handle special characters in object keys', () => {
451
+ const specialKeyData = {
452
+ 'key-with-spaces': 'value',
453
+ 'key.with.dots': 'value',
454
+ 'key-with-special-chars!@#': 'value',
455
+ 'key-with-unicode-世界': 'value'
456
+ };
457
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(specialKeyData, testKey);
458
+ const decrypted = crypto_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
459
+ expect(decrypted).toEqual(specialKeyData);
460
+ });
461
+ it('| should handle special characters in nested objects', () => {
462
+ const nestedData = {
463
+ level1: {
464
+ 'special-key!@#': {
465
+ 'nested-key-世界': 'value with special chars!@#'
466
+ }
467
+ }
468
+ };
469
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(nestedData, testKey);
470
+ const decrypted = crypto_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
471
+ expect(decrypted).toEqual(nestedData);
472
+ });
473
+ it('| should handle special characters in arrays', () => {
474
+ const arrayData = [
475
+ 'Hello 世界!',
476
+ { 'special-key': 'value with !@#' },
477
+ ['nested', 'array', 'with', 'special', 'chars!@#']
478
+ ];
479
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(arrayData, testKey);
480
+ const decrypted = crypto_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
481
+ expect(decrypted).toEqual(arrayData);
482
+ });
483
+ });
484
+ describe('| base64 padding and parsing edge cases', () => {
485
+ it('| should handle encrypted data missing 1 padding character', () => {
486
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(testData, testKey);
487
+ // Remove last character (which might be padding)
488
+ const withoutPadding = encrypted.slice(0, -1);
489
+ expect(() => crypto_util_1.DyFM_Crypto.decrypt(withoutPadding, testKey)).toThrow();
490
+ });
491
+ it('| should handle encrypted data missing 2 padding characters', () => {
492
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(testData, testKey);
493
+ // Remove last 2 characters
494
+ const withoutPadding = encrypted.slice(0, -2);
495
+ expect(() => crypto_util_1.DyFM_Crypto.decrypt(withoutPadding, testKey)).toThrow();
496
+ });
497
+ it('| should handle encrypted data missing 3 padding characters', () => {
498
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(testData, testKey);
499
+ // Remove last 3 characters
500
+ const withoutPadding = encrypted.slice(0, -3);
501
+ expect(() => crypto_util_1.DyFM_Crypto.decrypt(withoutPadding, testKey)).toThrow();
502
+ });
503
+ it('| should detect base64 strings that are too short to be valid (less than 48 bytes)', () => {
504
+ // Create a minimal base64 string that parses to less than 48 bytes
505
+ // 18 bytes = 24 base64 characters (18 * 4/3 = 24)
506
+ const shortBase64 = 'ABCDEFGHIJKLMNOPQRSTUVW'; // 24 chars = 18 bytes when parsed
507
+ expect(() => crypto_util_1.DyFM_Crypto.decrypt(shortBase64, testKey)).toThrow();
508
+ });
509
+ it('| should handle base64 strings with incorrect padding', () => {
510
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(testData, testKey);
511
+ // Add incorrect padding characters
512
+ const withIncorrectPadding = encrypted + '====';
513
+ expect(() => crypto_util_1.DyFM_Crypto.decrypt(withIncorrectPadding, testKey)).toThrow();
514
+ });
515
+ it('| should handle URL-safe base64 strings ending with dash', () => {
516
+ // Create a base64 string ending with '-' (which becomes '+' in regular base64)
517
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(testData, testKey);
518
+ // Replace last character with dash if it's not already
519
+ const withDash = encrypted.slice(0, -1) + '-';
520
+ expect(() => crypto_util_1.DyFM_Crypto.decrypt(withDash, testKey)).toThrow();
521
+ });
522
+ it('| should handle URL-safe base64 strings ending with underscore', () => {
523
+ // Create a base64 string ending with '_' (which becomes '/' in regular base64)
524
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(testData, testKey);
525
+ // Replace last character with underscore if it's not already
526
+ const withUnderscore = encrypted.slice(0, -1) + '_';
527
+ expect(() => crypto_util_1.DyFM_Crypto.decrypt(withUnderscore, testKey)).toThrow();
528
+ });
529
+ it('| should handle URL-safe base64 strings with no padding characters', () => {
530
+ const encrypted = crypto_util_1.DyFM_Crypto.encrypt(testData, testKey);
531
+ // Encrypted data should already have no padding (removed in encrypt method)
532
+ // This test verifies that decryption works without padding
533
+ expect(() => crypto_util_1.DyFM_Crypto.decrypt(encrypted, testKey)).not.toThrow();
534
+ const decrypted = crypto_util_1.DyFM_Crypto.decrypt(encrypted, testKey);
535
+ expect(decrypted).toEqual(testData);
536
+ });
537
+ it('| should handle very short base64 strings that parse to exactly 18 bytes', () => {
538
+ // Create a base64 string that parses to exactly 18 bytes
539
+ // 18 bytes = 24 base64 characters
540
+ const exactly18Bytes = 'ABCDEFGHIJKLMNOPQRSTUVWX'; // 24 chars
541
+ expect(() => crypto_util_1.DyFM_Crypto.decrypt(exactly18Bytes, testKey)).toThrow();
542
+ });
543
+ it('| should handle base64 strings that are valid format but too short after parsing', () => {
544
+ // Create a valid URL-safe base64 string that's too short
545
+ const validButShort = 'ABCDEFGHIJKLMNOPQRSTUVWXY'; // 25 chars, valid format
546
+ expect(() => crypto_util_1.DyFM_Crypto.decrypt(validButShort, testKey)).toThrow();
547
+ });
548
+ });
549
+ });
550
+ });
551
+ //# sourceMappingURL=crypto.util.edge.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.util.edge.spec.js","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.edge.spec.ts"],"names":[],"mappings":"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T,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,GAAG;oBACT,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EAAE,GAAG;oBACV,KAAK,EA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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=crypto.util.extra.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.util.extra.spec.d.ts","sourceRoot":"","sources":["../../../../src/_modules/crypto/_collections/crypto.util.extra.spec.ts"],"names":[],"mappings":""}