@digitaldefiance/node-ecies-lib 2.1.40 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.md +175 -10
  2. package/package.json +4 -4
  3. package/src/builders/ecies-builder.d.ts +5 -3
  4. package/src/builders/ecies-builder.d.ts.map +1 -1
  5. package/src/builders/ecies-builder.js +10 -4
  6. package/src/builders/ecies-builder.js.map +1 -1
  7. package/src/builders/member-builder.d.ts +9 -3
  8. package/src/builders/member-builder.d.ts.map +1 -1
  9. package/src/builders/member-builder.js +29 -6
  10. package/src/builders/member-builder.js.map +1 -1
  11. package/src/i18n/ecies-i18n-factory.d.ts +20 -1
  12. package/src/i18n/ecies-i18n-factory.d.ts.map +1 -1
  13. package/src/i18n/ecies-i18n-factory.js +34 -241
  14. package/src/i18n/ecies-i18n-factory.js.map +1 -1
  15. package/src/i18n/node-ecies-i18n-setup.d.ts.map +1 -1
  16. package/src/i18n/node-ecies-i18n-setup.js +26 -7
  17. package/src/i18n/node-ecies-i18n-setup.js.map +1 -1
  18. package/src/i18n/translations/de.d.ts +3 -0
  19. package/src/i18n/translations/de.d.ts.map +1 -0
  20. package/src/i18n/translations/de.js +52 -0
  21. package/src/i18n/translations/de.js.map +1 -0
  22. package/src/i18n/translations/en-GB.d.ts +3 -0
  23. package/src/i18n/translations/en-GB.d.ts.map +1 -0
  24. package/src/i18n/translations/en-GB.js +56 -0
  25. package/src/i18n/translations/en-GB.js.map +1 -0
  26. package/src/i18n/translations/en-US.d.ts +6 -0
  27. package/src/i18n/translations/en-US.d.ts.map +1 -0
  28. package/src/i18n/translations/en-US.js +59 -0
  29. package/src/i18n/translations/en-US.js.map +1 -0
  30. package/src/i18n/translations/es.d.ts +3 -0
  31. package/src/i18n/translations/es.d.ts.map +1 -0
  32. package/src/i18n/translations/es.js +52 -0
  33. package/src/i18n/translations/es.js.map +1 -0
  34. package/src/i18n/translations/fr.d.ts +3 -0
  35. package/src/i18n/translations/fr.d.ts.map +1 -0
  36. package/src/i18n/translations/fr.js +52 -0
  37. package/src/i18n/translations/fr.js.map +1 -0
  38. package/src/i18n/translations/index.d.ts +7 -0
  39. package/src/i18n/translations/index.d.ts.map +1 -0
  40. package/src/i18n/translations/index.js +16 -0
  41. package/src/i18n/translations/index.js.map +1 -0
  42. package/src/i18n/translations/ja.d.ts +3 -0
  43. package/src/i18n/translations/ja.d.ts.map +1 -0
  44. package/src/i18n/translations/ja.js +52 -0
  45. package/src/i18n/translations/ja.js.map +1 -0
  46. package/src/i18n/translations/uk.d.ts +3 -0
  47. package/src/i18n/translations/uk.d.ts.map +1 -0
  48. package/src/i18n/translations/uk.js +52 -0
  49. package/src/i18n/translations/uk.js.map +1 -0
  50. package/src/i18n/translations/zh-cn.d.ts +3 -0
  51. package/src/i18n/translations/zh-cn.d.ts.map +1 -0
  52. package/src/i18n/translations/zh-cn.js +52 -0
  53. package/src/i18n/translations/zh-cn.js.map +1 -0
  54. package/src/index.d.ts +7 -1
  55. package/src/index.d.ts.map +1 -1
  56. package/src/index.js +15 -1
  57. package/src/index.js.map +1 -1
  58. package/src/interfaces/backend-member-operational.d.ts +11 -0
  59. package/src/interfaces/backend-member-operational.d.ts.map +1 -1
  60. package/src/interfaces/encrypted-chunk.d.ts +12 -0
  61. package/src/interfaces/encrypted-chunk.d.ts.map +1 -0
  62. package/src/interfaces/encrypted-chunk.js +3 -0
  63. package/src/interfaces/encrypted-chunk.js.map +1 -0
  64. package/src/interfaces/index.d.ts +4 -0
  65. package/src/interfaces/index.d.ts.map +1 -1
  66. package/src/interfaces/index.js +4 -0
  67. package/src/interfaces/index.js.map +1 -1
  68. package/src/interfaces/multi-recipient-chunk.d.ts +10 -0
  69. package/src/interfaces/multi-recipient-chunk.d.ts.map +1 -0
  70. package/src/interfaces/multi-recipient-chunk.js +3 -0
  71. package/src/interfaces/multi-recipient-chunk.js.map +1 -0
  72. package/src/interfaces/stream-config.d.ts +6 -0
  73. package/src/interfaces/stream-config.d.ts.map +1 -0
  74. package/src/interfaces/stream-config.js +8 -0
  75. package/src/interfaces/stream-config.js.map +1 -0
  76. package/src/interfaces/stream-progress.d.ts +8 -0
  77. package/src/interfaces/stream-progress.d.ts.map +1 -0
  78. package/src/interfaces/stream-progress.js +3 -0
  79. package/src/interfaces/stream-progress.js.map +1 -0
  80. package/src/member.d.ts +11 -0
  81. package/src/member.d.ts.map +1 -1
  82. package/src/member.js +23 -0
  83. package/src/member.js.map +1 -1
  84. package/src/services/aes-gcm.d.ts.map +1 -1
  85. package/src/services/aes-gcm.js +36 -0
  86. package/src/services/aes-gcm.js.map +1 -1
  87. package/src/services/chunk-processor.d.ts +15 -0
  88. package/src/services/chunk-processor.d.ts.map +1 -0
  89. package/src/services/chunk-processor.js +36 -0
  90. package/src/services/chunk-processor.js.map +1 -0
  91. package/src/services/ecies/crypto-core.d.ts.map +1 -1
  92. package/src/services/ecies/crypto-core.js +17 -2
  93. package/src/services/ecies/crypto-core.js.map +1 -1
  94. package/src/services/ecies/service.d.ts +3 -2
  95. package/src/services/ecies/service.d.ts.map +1 -1
  96. package/src/services/ecies/service.js +10 -19
  97. package/src/services/ecies/service.js.map +1 -1
  98. package/src/services/ecies/single-recipient.d.ts.map +1 -1
  99. package/src/services/ecies/single-recipient.js +29 -12
  100. package/src/services/ecies/single-recipient.js.map +1 -1
  101. package/src/services/encryption-stream.d.ts +31 -0
  102. package/src/services/encryption-stream.d.ts.map +1 -0
  103. package/src/services/encryption-stream.js +201 -0
  104. package/src/services/encryption-stream.js.map +1 -0
  105. package/src/services/index.d.ts +4 -0
  106. package/src/services/index.d.ts.map +1 -1
  107. package/src/services/index.js +4 -0
  108. package/src/services/index.js.map +1 -1
  109. package/src/services/multi-recipient-processor.d.ts +37 -0
  110. package/src/services/multi-recipient-processor.d.ts.map +1 -0
  111. package/src/services/multi-recipient-processor.js +223 -0
  112. package/src/services/multi-recipient-processor.js.map +1 -0
  113. package/src/services/pbkdf2.d.ts.map +1 -1
  114. package/src/services/pbkdf2.js.map +1 -1
  115. package/src/services/progress-tracker.d.ts +9 -0
  116. package/src/services/progress-tracker.d.ts.map +1 -0
  117. package/src/services/progress-tracker.js +41 -0
  118. package/src/services/progress-tracker.js.map +1 -0
  119. package/src/test-mocks/mock-backend-member.d.ts +2 -0
  120. package/src/test-mocks/mock-backend-member.d.ts.map +1 -1
  121. package/src/test-mocks/mock-backend-member.js +6 -0
  122. package/src/test-mocks/mock-backend-member.js.map +1 -1
package/README.md CHANGED
@@ -7,12 +7,15 @@ Part of [Express Suite](https://github.com/Digital-Defiance/express-suite)
7
7
  ## Features
8
8
 
9
9
  - **ECIES Encryption/Decryption**: Secure elliptic curve integrated encryption scheme using Node.js crypto primitives.
10
+ - **Streaming Encryption**: Memory-efficient encryption for large files (<10MB RAM for any size) ✨ NEW in v3.0
10
11
  - **Multi-recipient Encryption**: Encrypt data for multiple recipients simultaneously with efficient handling.
12
+ - **Multi-recipient Streaming**: Encrypt once for up to 65,535 recipients with shared symmetric key ✨ NEW in v3.0
11
13
  - **PBKDF2 Key Derivation**: Password-based key derivation with multiple configurable security profiles.
12
14
  - **Digital Signatures**: Sign and verify data using elliptic curve cryptography.
13
15
  - **Secure Memory Management**: Uses `SecureBuffer` and `SecureString` for sensitive data to ensure zeroization and protection.
14
16
  - **Runtime Configuration Registry**: Centralized, immutable constants with runtime override capabilities for advanced customization.
15
17
  - **Plugin-Based Internationalization (i18n)**: Full support for multi-language translations with type-safe, plugin-based architecture.
18
+ - **Security Hardening**: 16 comprehensive security validations across all layers ✨ NEW in v3.0
16
19
 
17
20
  ## Binary Compatibility
18
21
 
@@ -30,6 +33,35 @@ npm install @digitaldefiance/node-ecies-lib
30
33
 
31
34
  ## Quick Start
32
35
 
36
+ ### v3.0 Streaming Encryption (NEW)
37
+
38
+ ```typescript
39
+ import { ECIESService, Member, MemberType, EmailString } from '@digitaldefiance/node-ecies-lib';
40
+ import { createReadStream } from 'fs';
41
+
42
+ const eciesService = new ECIESService();
43
+ const { member, mnemonic } = Member.newMember(
44
+ eciesService,
45
+ MemberType.User,
46
+ 'Alice',
47
+ new EmailString('alice@example.com')
48
+ );
49
+
50
+ // Stream encrypt large file with <10MB RAM
51
+ const fileStream = createReadStream('large-file.bin');
52
+ const chunks: Buffer[] = [];
53
+
54
+ for await (const chunk of member.encryptDataStream(fileStream)) {
55
+ chunks.push(chunk.data);
56
+ }
57
+
58
+ // Stream decrypt
59
+ const decryptedChunks: Buffer[] = [];
60
+ for await (const chunk of member.decryptDataStream(chunks)) {
61
+ decryptedChunks.push(chunk);
62
+ }
63
+ ```
64
+
33
65
  ### v2.0 Simplified API
34
66
 
35
67
  ```typescript
@@ -60,16 +92,28 @@ console.log(decrypted.toString()); // "Hello, secure world!"
60
92
  ```typescript
61
93
  import { ECIESBuilder, MemberBuilder, MemberType } from '@digitaldefiance/node-ecies-lib';
62
94
 
63
- // Build service with custom configuration
64
- const eciesService = new ECIESBuilder()
65
- .withConstants(customConstants)
95
+ // Build service with custom configuration and constants
96
+ const eciesService = ECIESBuilder.create()
97
+ .withServiceConfig({ /* optional config */ })
98
+ .withConstants({ /* optional constants */ })
66
99
  .build();
67
100
 
68
101
  // Build member with fluent API
69
- const { member, mnemonic } = new MemberBuilder(eciesService)
102
+ const { member, mnemonic } = MemberBuilder.create()
103
+ .withEciesService(eciesService)
70
104
  .withType(MemberType.User)
71
105
  .withName('Alice')
72
106
  .withEmail('alice@example.com')
107
+ .generateMnemonic() // Optional: auto-generate mnemonic
108
+ .build();
109
+
110
+ // Or provide your own mnemonic
111
+ const { member: member2, mnemonic: mnemonic2 } = MemberBuilder.create()
112
+ .withEciesService(eciesService)
113
+ .withType(MemberType.User)
114
+ .withName('Bob')
115
+ .withEmail('bob@example.com')
116
+ .withMnemonic(existingMnemonic)
73
117
  .build();
74
118
  ```
75
119
 
@@ -251,7 +295,7 @@ Test categories:
251
295
 
252
296
  ### Test Utilities
253
297
 
254
- Test mocks are available via a separate entry point:
298
+ Test mocks are available via the `/testing` entry point:
255
299
 
256
300
  ```typescript
257
301
  import { mockBackendMember } from '@digitaldefiance/node-ecies-lib/testing';
@@ -260,7 +304,7 @@ import { mockBackendMember } from '@digitaldefiance/node-ecies-lib/testing';
260
304
  const member = mockBackendMember();
261
305
  ```
262
306
 
263
- **Note:** Test utilities require `@faker-js/faker` as a peer dependency:
307
+ **Note:** The `/testing` entry point requires `@faker-js/faker` as a peer dependency:
264
308
 
265
309
  ```bash
266
310
  npm install -D @faker-js/faker
@@ -372,14 +416,17 @@ const singleRecipient = new EciesSingleRecipientCore(config);
372
416
  ```typescript
373
417
  import { ECIESBuilder, MemberBuilder } from '@digitaldefiance/node-ecies-lib';
374
418
 
375
- const service = new ECIESBuilder()
376
- .withConstants(customConstants)
419
+ const service = ECIESBuilder.create()
420
+ .withServiceConfig({ /* optional config */ })
421
+ .withConstants({ /* optional constants */ })
377
422
  .build();
378
423
 
379
- const { member } = new MemberBuilder(service)
424
+ const { member } = MemberBuilder.create()
425
+ .withEciesService(service)
380
426
  .withType(MemberType.User)
381
427
  .withName('Alice')
382
428
  .withEmail('alice@example.com')
429
+ .generateMnemonic() // Auto-generate mnemonic
383
430
  .build();
384
431
  ```
385
432
 
@@ -435,7 +482,125 @@ No performance regression in v2.0:
435
482
 
436
483
  ## ChangeLog
437
484
 
438
- ## Version 2.1.33
485
+ ### Version 3.0.1
486
+
487
+ **Builder Improvements:**
488
+ - **ECIESBuilder**: Separated `serviceConfig` (IECIESConfig) from `eciesConsts` (IECIESConstants)
489
+ - Added `withServiceConfig()` method for runtime configuration
490
+ - Renamed internal property from `eciesParams` to `eciesConsts` for clarity
491
+ - Improved constant merging with proper defaults
492
+ - **MemberBuilder**: Enhanced with new methods
493
+ - Renamed `withECIES()` to `withEciesService()` for consistency
494
+ - Added `generateMnemonic()` method for auto-generation
495
+ - Added `withMnemonic()` method to provide custom mnemonics
496
+ - Added `withCreatedBy()` method for tracking member creation
497
+
498
+ **Internationalization:**
499
+ - Added 13 new i18n string keys (3 builder errors, 10 streaming errors)
500
+ - Translations provided in 8 languages: EN-US, EN-GB, FR, ES, DE, JA, UK, ZH-CN
501
+ - Replaced all hardcoded error strings with i18n translations
502
+ - Fixed circular dependency in i18n imports
503
+
504
+ **Service Improvements:**
505
+ - Added `mnemonicToSimpleKeyPair()` alias method for backward compatibility
506
+ - Clarified `ECIESService.encryptMultiple()` signature (takes single Member, not array)
507
+ - Enhanced error handling in multi-recipient processor
508
+
509
+ **Test Improvements:**
510
+ - Fixed encryption type byte expectations (Simple=33, Single=66, Multiple=99)
511
+ - Fixed recipient ID sizes to use correct constant (12 bytes for ObjectID)
512
+ - Added comprehensive binary compatibility tests for streaming/chunking
513
+ - Updated service coverage tests to match actual API signatures
514
+ - All 459 tests passing
515
+
516
+ **Binary Compatibility:**
517
+ - ✅ 100% compatible with browser @digitaldefiance/ecies-lib
518
+ - ✅ Chunk header format verified (4-byte big-endian index + 1-byte flags)
519
+ - ✅ Multi-recipient header format verified (big-endian byte order)
520
+ - ✅ Buffer/Uint8Array interoperability confirmed
521
+
522
+ ### Version 3.0.0 - Streaming Encryption & Security Hardening
523
+
524
+ **Major Features**:
525
+
526
+ - ✨ **Streaming Encryption**: Memory-efficient encryption for large files (<10MB RAM for any size)
527
+ - 🔐 **Multi-Recipient Streaming**: Encrypt once for up to 65,535 recipients with shared symmetric key
528
+ - 📊 **Progress Tracking**: Real-time throughput, ETA, and completion percentage
529
+ - 🔒 **Security Hardening**: 16 comprehensive security validations across all layers
530
+ - ✅ **Binary Compatible**: 100% compatible with browser @digitaldefiance/ecies-lib v2.2.0
531
+
532
+ **New APIs**:
533
+
534
+ **Member Streaming Methods**:
535
+ - `member.encryptDataStream(source, options?)` - Stream encryption with progress tracking
536
+ - `member.decryptDataStream(source, options?)` - Stream decryption with progress tracking
537
+
538
+ **EncryptionStream Service**:
539
+ - `encryptStream(source, publicKey, options?)` - Single-recipient streaming
540
+ - `encryptStreamMultiple(source, recipients, options?)` - Multi-recipient streaming
541
+ - `decryptStream(source, privateKey, options?)` - Single-recipient decryption
542
+ - `decryptStreamMultiple(source, recipientId, privateKey, options?)` - Multi-recipient decryption
543
+
544
+ **Security Enhancements (16 validations)**:
545
+
546
+ **Base ECIES Layer (8 fixes)**:
547
+ - Public key all-zeros validation
548
+ - Private key all-zeros validation
549
+ - Shared secret all-zeros validation
550
+ - Message size validation (max 2GB)
551
+ - Encrypted size bounds checking
552
+ - Minimum encrypted data size validation
553
+ - Component extraction validation
554
+ - Decrypted data validation
555
+
556
+ **AES-GCM Layer (5 fixes)**:
557
+ - Key length validation (16/24/32 bytes only)
558
+ - IV length validation (16 bytes)
559
+ - Null/undefined data rejection
560
+ - Data size validation (max 2GB)
561
+ - Comprehensive decrypt input validation
562
+
563
+ **Multi-Recipient Layer (3 fixes)**:
564
+ - Chunk index bounds checking (uint32 range)
565
+ - Data size validation (max 2GB)
566
+ - Safe accumulation with overflow detection
567
+
568
+ **New Services**:
569
+ - `EncryptionStream` - High-level streaming API
570
+ - `ChunkProcessor` - Single-recipient chunk processing
571
+ - `MultiRecipientProcessor` - Multi-recipient chunk processing
572
+ - `ProgressTracker` - Real-time progress tracking
573
+
574
+ **New Interfaces**:
575
+ - `IEncryptedChunk` - Encrypted chunk with metadata
576
+ - `IMultiRecipientChunk` - Multi-recipient chunk format
577
+ - `IStreamProgress` - Progress tracking information
578
+ - `IStreamConfig` - Stream configuration options
579
+
580
+ **Performance**:
581
+ - 99% memory reduction (1GB file: 1GB RAM → <10MB RAM)
582
+ - < 0.1% overhead from security validations
583
+ - Single-recipient: ~50-100 MB/s throughput
584
+ - Multi-recipient: ~40-80 MB/s throughput
585
+
586
+ **Binary Compatibility**:
587
+ - ✅ 100% compatible with @digitaldefiance/ecies-lib v2.2.0
588
+ - ✅ Cross-platform encrypt/decrypt verified
589
+ - ✅ All existing encryption formats unchanged
590
+
591
+ ### Version 2.1.42
592
+
593
+ - Upgrade ecies
594
+
595
+ ### Version 2.1.40
596
+
597
+ - Alignment with Express Suite packages
598
+ - All packages updated to v2.1.40 (i18n, ecies-lib, node-ecies-lib, suite-core-lib, node-express-suite, express-suite-react-components)
599
+ - Test utilities remain at v1.0.7
600
+ - `/testing` entry point exports test mocks (mockBackendMember)
601
+ - Requires `@faker-js/faker` as dev dependency for test utilities
602
+
603
+ ### Version 2.1.33
439
604
 
440
605
  - Expose config on one more endpoint
441
606
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitaldefiance/node-ecies-lib",
3
- "version": "2.1.40",
3
+ "version": "3.0.1",
4
4
  "description": "Digital Defiance Node ECIES Library",
5
5
  "main": "src/index.js",
6
6
  "types": "src/index.d.ts",
@@ -45,8 +45,8 @@
45
45
  "license": "MIT",
46
46
  "packageManager": "yarn@4.10.3",
47
47
  "dependencies": {
48
- "@digitaldefiance/ecies-lib": "2.1.40",
49
- "@digitaldefiance/i18n-lib": "2.1.40",
48
+ "@digitaldefiance/ecies-lib": "3.0.1",
49
+ "@digitaldefiance/i18n-lib": "3.6.0",
50
50
  "@ethereumjs/wallet": "^10.0.0",
51
51
  "@noble/curves": "^2.0.1",
52
52
  "@noble/hashes": "^2.0.1",
@@ -56,7 +56,7 @@
56
56
  "ts-brand": "^0.2.0"
57
57
  },
58
58
  "devDependencies": {
59
- "@digitaldefiance/express-suite-test-utils": "1.0.7"
59
+ "@digitaldefiance/express-suite-test-utils": "1.0.9"
60
60
  },
61
61
  "type": "commonjs"
62
62
  }
@@ -1,9 +1,11 @@
1
1
  import { ECIESService } from '../services/ecies';
2
- import { IECIESConstants } from '@digitaldefiance/ecies-lib';
2
+ import { IECIESConstants, IECIESConfig } from '@digitaldefiance/ecies-lib';
3
3
  export declare class ECIESBuilder {
4
- private eciesParams;
4
+ private serviceConfig;
5
+ private eciesConsts;
5
6
  static create(): ECIESBuilder;
6
- withConstants(params: IECIESConstants): this;
7
+ withServiceConfig(config: Partial<IECIESConfig>): this;
8
+ withConstants(constants: Partial<IECIESConstants>): this;
7
9
  build(): ECIESService;
8
10
  }
9
11
  //# sourceMappingURL=ecies-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ecies-builder.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/builders/ecies-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAG7D,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAoC;IAEvD,MAAM,CAAC,MAAM,IAAI,YAAY;IAI7B,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAK5C,KAAK,IAAI,YAAY;CAGtB"}
1
+ {"version":3,"file":"ecies-builder.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/builders/ecies-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAG3E,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,WAAW,CAAgC;IAEnD,MAAM,CAAC,MAAM,IAAI,YAAY;IAI7B,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAKtD,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAKxD,KAAK,IAAI,YAAY;CAItB"}
@@ -4,16 +4,22 @@ exports.ECIESBuilder = void 0;
4
4
  const ecies_1 = require("../services/ecies");
5
5
  const constants_1 = require("../constants");
6
6
  class ECIESBuilder {
7
- eciesParams = constants_1.Constants.ECIES;
7
+ serviceConfig = {};
8
+ eciesConsts = {};
8
9
  static create() {
9
10
  return new ECIESBuilder();
10
11
  }
11
- withConstants(params) {
12
- this.eciesParams = params;
12
+ withServiceConfig(config) {
13
+ this.serviceConfig = { ...this.serviceConfig, ...config };
14
+ return this;
15
+ }
16
+ withConstants(constants) {
17
+ this.eciesConsts = { ...this.eciesConsts, ...constants };
13
18
  return this;
14
19
  }
15
20
  build() {
16
- return new ecies_1.ECIESService(undefined, this.eciesParams);
21
+ const finalConstants = { ...constants_1.Constants.ECIES, ...this.eciesConsts };
22
+ return new ecies_1.ECIESService(this.serviceConfig, finalConstants);
17
23
  }
18
24
  }
19
25
  exports.ECIESBuilder = ECIESBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"ecies-builder.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/builders/ecies-builder.ts"],"names":[],"mappings":";;;AAAA,6CAAiD;AAEjD,4CAAyC;AAEzC,MAAa,YAAY;IACf,WAAW,GAAoB,qBAAS,CAAC,KAAK,CAAC;IAEvD,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED,aAAa,CAAC,MAAuB;QACnC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,OAAO,IAAI,oBAAY,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IACvD,CAAC;CACF;AAfD,oCAeC"}
1
+ {"version":3,"file":"ecies-builder.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/builders/ecies-builder.ts"],"names":[],"mappings":";;;AAAA,6CAAiD;AAEjD,4CAAyC;AAEzC,MAAa,YAAY;IACf,aAAa,GAA0B,EAAE,CAAC;IAC1C,WAAW,GAA6B,EAAE,CAAC;IAEnD,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,YAAY,EAAE,CAAC;IAC5B,CAAC;IAED,iBAAiB,CAAC,MAA6B;QAC7C,IAAI,CAAC,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,MAAM,EAAE,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,SAAmC;QAC/C,IAAI,CAAC,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,SAAS,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,MAAM,cAAc,GAAG,EAAE,GAAG,qBAAS,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnE,OAAO,IAAI,oBAAY,CAAC,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAC9D,CAAC;CACF;AAtBD,oCAsBC"}
@@ -1,16 +1,22 @@
1
- import { MemberType, EmailString } from '@digitaldefiance/ecies-lib';
1
+ import { MemberType, EmailString, SecureString } from '@digitaldefiance/ecies-lib';
2
2
  import { ECIESService } from '../services/ecies';
3
3
  import { IBackendMemberWithMnemonic } from '../interfaces/member-with-mnemonic';
4
+ import { ObjectId } from 'bson';
4
5
  export declare class MemberBuilder {
6
+ private eciesService?;
5
7
  private type?;
6
8
  private name?;
7
9
  private email?;
8
- private ecies?;
10
+ private mnemonic?;
11
+ private createdBy?;
9
12
  static create(): MemberBuilder;
13
+ withEciesService(service: ECIESService): this;
10
14
  withType(type: MemberType): this;
11
15
  withName(name: string): this;
12
16
  withEmail(email: string | EmailString): this;
13
- withECIES(ecies: ECIESService): this;
17
+ withMnemonic(mnemonic: SecureString): this;
18
+ withCreatedBy(creatorId: ObjectId): this;
19
+ generateMnemonic(): this;
14
20
  build(): IBackendMemberWithMnemonic;
15
21
  }
16
22
  //# sourceMappingURL=member-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"member-builder.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/builders/member-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAC,CAAa;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,KAAK,CAAC,CAAc;IAC5B,OAAO,CAAC,KAAK,CAAC,CAAe;IAE7B,MAAM,CAAC,MAAM,IAAI,aAAa;IAI9B,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAKhC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK5B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAK5C,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAKpC,KAAK,IAAI,0BAA0B;CAWpC"}
1
+ {"version":3,"file":"member-builder.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/builders/member-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAIhC,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,IAAI,CAAC,CAAa;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAS;IACtB,OAAO,CAAC,KAAK,CAAC,CAAc;IAC5B,OAAO,CAAC,QAAQ,CAAC,CAAe;IAChC,OAAO,CAAC,SAAS,CAAC,CAAW;IAE7B,MAAM,CAAC,MAAM,IAAI,aAAa;IAI9B,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAK7C,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAKhC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK5B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAK5C,YAAY,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAK1C,aAAa,CAAC,SAAS,EAAE,QAAQ,GAAG,IAAI;IAKxC,gBAAgB,IAAI,IAAI;IASxB,KAAK,IAAI,0BAA0B;CAkBpC"}
@@ -3,15 +3,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MemberBuilder = void 0;
4
4
  const member_1 = require("../member");
5
5
  const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
6
- const ecies_1 = require("../services/ecies");
6
+ const node_ecies_i18n_setup_1 = require("../i18n/node-ecies-i18n-setup");
7
+ const ecies_i18n_factory_1 = require("../i18n/ecies-i18n-factory");
7
8
  class MemberBuilder {
9
+ eciesService;
8
10
  type;
9
11
  name;
10
12
  email;
11
- ecies;
13
+ mnemonic;
14
+ createdBy;
12
15
  static create() {
13
16
  return new MemberBuilder();
14
17
  }
18
+ withEciesService(service) {
19
+ this.eciesService = service;
20
+ return this;
21
+ }
15
22
  withType(type) {
16
23
  this.type = type;
17
24
  return this;
@@ -24,15 +31,31 @@ class MemberBuilder {
24
31
  this.email = typeof email === 'string' ? new ecies_lib_1.EmailString(email) : email;
25
32
  return this;
26
33
  }
27
- withECIES(ecies) {
28
- this.ecies = ecies;
34
+ withMnemonic(mnemonic) {
35
+ this.mnemonic = mnemonic;
36
+ return this;
37
+ }
38
+ withCreatedBy(creatorId) {
39
+ this.createdBy = creatorId;
40
+ return this;
41
+ }
42
+ generateMnemonic() {
43
+ if (!this.eciesService) {
44
+ const engine = (0, node_ecies_i18n_setup_1.getNodeEciesI18nEngine)();
45
+ throw new Error(engine.translate(ecies_i18n_factory_1.NodeEciesComponentId, ecies_i18n_factory_1.NodeEciesStringKey.Error_Builder_ECIESServiceMustBeSetBeforeGeneratingMnemonic));
46
+ }
47
+ this.mnemonic = this.eciesService.generateNewMnemonic();
29
48
  return this;
30
49
  }
31
50
  build() {
51
+ const engine = (0, node_ecies_i18n_setup_1.getNodeEciesI18nEngine)();
52
+ if (!this.eciesService) {
53
+ throw new Error(engine.translate(ecies_i18n_factory_1.NodeEciesComponentId, ecies_i18n_factory_1.NodeEciesStringKey.Error_Builder_ECIESServiceIsRequired));
54
+ }
32
55
  if (!this.type || !this.name || !this.email) {
33
- throw new Error('Member requires type, name, and email');
56
+ throw new Error(engine.translate(ecies_i18n_factory_1.NodeEciesComponentId, ecies_i18n_factory_1.NodeEciesStringKey.Error_Builder_TypeNameAndEmailAreRequired));
34
57
  }
35
- return member_1.Member.newMember(this.ecies || new ecies_1.ECIESService(), this.type, this.name, this.email);
58
+ return member_1.Member.newMember(this.eciesService, this.type, this.name, this.email, this.mnemonic, this.createdBy);
36
59
  }
37
60
  }
38
61
  exports.MemberBuilder = MemberBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"member-builder.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/builders/member-builder.ts"],"names":[],"mappings":";;;AAAA,sCAAmC;AACnC,0DAAqE;AACrE,6CAAiD;AAGjD,MAAa,aAAa;IAChB,IAAI,CAAc;IAClB,IAAI,CAAU;IACd,KAAK,CAAe;IACpB,KAAK,CAAgB;IAE7B,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,QAAQ,CAAC,IAAgB;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,KAA2B;QACnC,IAAI,CAAC,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,uBAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,KAAmB;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,eAAM,CAAC,SAAS,CACrB,IAAI,CAAC,KAAK,IAAI,IAAI,oBAAY,EAAE,EAChC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,CACX,CAAC;IACJ,CAAC;CACF;AAzCD,sCAyCC"}
1
+ {"version":3,"file":"member-builder.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/builders/member-builder.ts"],"names":[],"mappings":";;;AAAA,sCAAmC;AACnC,0DAAmF;AAInF,yEAAuE;AACvE,mEAAsF;AAEtF,MAAa,aAAa;IAChB,YAAY,CAAgB;IAC5B,IAAI,CAAc;IAClB,IAAI,CAAU;IACd,KAAK,CAAe;IACpB,QAAQ,CAAgB;IACxB,SAAS,CAAY;IAE7B,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,aAAa,EAAE,CAAC;IAC7B,CAAC;IAED,gBAAgB,CAAC,OAAqB;QACpC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,IAAgB;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,CAAC,KAA2B;QACnC,IAAI,CAAC,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,uBAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,QAAsB;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,SAAmB;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,IAAA,8CAAsB,GAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,yCAAoB,EAAE,uCAAkB,CAAC,2DAA2D,CAAC,CAAC,CAAC;QAC1I,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,MAAM,MAAM,GAAG,IAAA,8CAAsB,GAAE,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,yCAAoB,EAAE,uCAAkB,CAAC,oCAAoC,CAAC,CAAC,CAAC;QACnH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,yCAAoB,EAAE,uCAAkB,CAAC,yCAAyC,CAAC,CAAC,CAAC;QACxH,CAAC;QAED,OAAO,eAAM,CAAC,SAAS,CACrB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;CACF;AArED,sCAqEC"}
@@ -27,8 +27,27 @@ declare enum NodeEciesStringKey {
27
27
  Error_LengthExceedsMaximumSafeInteger = "error_lengthExceedsMaximumSafeInteger",
28
28
  Error_BufferIsTooShortForDeclaredDataLength = "error_bufferIsTooShortForDeclaredDataLength",
29
29
  Error_InvalidChecksumConstants = "error_invalidChecksumConstants",
30
+ Error_InvalidAESKeyLength = "error_invalidAESKeyLength",
31
+ Error_CannotEncryptEmptyData = "error_cannotEncryptEmptyData",
32
+ Error_CannotDecryptEmptyData = "error_cannotDecryptEmptyData",
33
+ Error_InvalidIVLength = "error_invalidIVLength",
34
+ Error_MessageTooLarge = "error_messageTooLarge",
35
+ Error_EncryptedSizeExceedsExpected = "error_encryptedSizeExceedsExpected",
30
36
  Error_Pbkdf2_InvalidSaltLength = "error_pbkdf2_invalid_salt_length",
31
- Error_Pbkdf2_InvalidHashLength = "error_pbkdf2_invalid_hash_length"
37
+ Error_Pbkdf2_InvalidHashLength = "error_pbkdf2_invalid_hash_length",
38
+ Error_Builder_ECIESServiceMustBeSetBeforeGeneratingMnemonic = "error_builder_ecies_service_must_be_set_before_generating_mnemonic",
39
+ Error_Builder_ECIESServiceIsRequired = "error_builder_ecies_service_is_required",
40
+ Error_Builder_TypeNameAndEmailAreRequired = "error_builder_type_name_and_email_are_required",
41
+ Error_Stream_InvalidPublicKeyLength = "error_stream_invalid_public_key_length",
42
+ Error_Stream_EncryptionCancelled = "error_stream_encryption_cancelled",
43
+ Error_Stream_BufferOverflow = "error_stream_buffer_overflow",
44
+ Error_Stream_AtLeastOneRecipientRequired = "error_stream_at_least_one_recipient_required",
45
+ Error_Stream_MaxRecipientsExceeded = "error_stream_max_recipients_exceeded",
46
+ Error_Stream_InvalidRecipientPublicKeyLength = "error_stream_invalid_recipient_public_key_length",
47
+ Error_Stream_InvalidRecipientIdLength = "error_stream_invalid_recipient_id_length",
48
+ Error_Stream_InvalidPrivateKeyLength = "error_stream_invalid_private_key_length",
49
+ Error_Stream_DecryptionCancelled = "error_stream_decryption_cancelled",
50
+ Error_Stream_ChunkSequenceError = "error_stream_chunk_sequence_error"
32
51
  }
33
52
  export declare const NodeEciesComponentId = "node-ecies";
34
53
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ecies-i18n-factory.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/i18n/ecies-i18n-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EAErB,gBAAgB,EAEhB,gBAAgB,EAChB,cAAc,EACd,YAAY,EACb,MAAM,2BAA2B,CAAC;AAGnC;;GAEG;AACH,aAAK,kBAAkB;IACrB,qCAAqC,8CAA8C;IAGnF,8BAA8B,qCAAqC;IACnE,wCAAwC,gDAAgD;IACxF,qBAAqB,2BAA2B;IAChD,gCAAgC,uCAAuC;IACvE,4BAA4B,kCAAkC;IAC9D,8BAA8B,qCAAqC;IACnE,kCAAkC,yCAAyC;IAC3E,mCAAmC,2CAA2C;IAC9E,yBAAyB,+BAA+B;IACxD,mCAAmC,0CAA0C;IAC7E,sBAAsB,2BAA2B;IACjD,4BAA4B,iCAAiC;IAC7D,4CAA4C,iDAAiD;IAC7F,+CAA+C,oDAAoD;IACnG,iCAAiC,sCAAsC;IACvE,sCAAsC,2CAA2C;IACjF,0BAA0B,+BAA+B;IACzD,0BAA0B,+BAA+B;IACzD,sBAAsB,2BAA2B;IACjD,2CAA2C,gDAAgD;IAC3F,qCAAqC,0CAA0C;IAC/E,2CAA2C,gDAAgD;IAC3F,8BAA8B,mCAAmC;IAGjE,8BAA8B,qCAAqC;IACnE,8BAA8B,qCAAqC;CACpE;AACD,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAEjD;;GAEG;AACH,wBAAgB,kCAAkC,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,CAO5F;AAED,wBAAgB,oCAAoC,IAAI,qBAAqB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAyaxG;AAOD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAkBrH;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,kBAAkB,EACvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAC3C,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,MAAM,CAKR;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,GAAG,CAEvE;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
1
+ {"version":3,"file":"ecies-i18n-factory.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-node-ecies-lib/src/i18n/ecies-i18n-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EAErB,gBAAgB,EAEhB,gBAAgB,EAChB,cAAc,EACd,YAAY,EACb,MAAM,2BAA2B,CAAC;AAGnC;;GAEG;AACH,aAAK,kBAAkB;IACrB,qCAAqC,8CAA8C;IAGnF,8BAA8B,qCAAqC;IACnE,wCAAwC,gDAAgD;IACxF,qBAAqB,2BAA2B;IAChD,gCAAgC,uCAAuC;IACvE,4BAA4B,kCAAkC;IAC9D,8BAA8B,qCAAqC;IACnE,kCAAkC,yCAAyC;IAC3E,mCAAmC,2CAA2C;IAC9E,yBAAyB,+BAA+B;IACxD,mCAAmC,0CAA0C;IAC7E,sBAAsB,2BAA2B;IACjD,4BAA4B,iCAAiC;IAC7D,4CAA4C,iDAAiD;IAC7F,+CAA+C,oDAAoD;IACnG,iCAAiC,sCAAsC;IACvE,sCAAsC,2CAA2C;IACjF,0BAA0B,+BAA+B;IACzD,0BAA0B,+BAA+B;IACzD,sBAAsB,2BAA2B;IACjD,2CAA2C,gDAAgD;IAC3F,qCAAqC,0CAA0C;IAC/E,2CAA2C,gDAAgD;IAC3F,8BAA8B,mCAAmC;IAGjE,yBAAyB,8BAA8B;IACvD,4BAA4B,iCAAiC;IAC7D,4BAA4B,iCAAiC;IAC7D,qBAAqB,0BAA0B;IAC/C,qBAAqB,0BAA0B;IAC/C,kCAAkC,uCAAuC;IAGzE,8BAA8B,qCAAqC;IACnE,8BAA8B,qCAAqC;IAGnE,2DAA2D,uEAAuE;IAClI,oCAAoC,4CAA4C;IAChF,yCAAyC,mDAAmD;IAG5F,mCAAmC,2CAA2C;IAC9E,gCAAgC,sCAAsC;IACtE,2BAA2B,iCAAiC;IAC5D,wCAAwC,iDAAiD;IACzF,kCAAkC,yCAAyC;IAC3E,4CAA4C,qDAAqD;IACjG,qCAAqC,6CAA6C;IAClF,oCAAoC,4CAA4C;IAChF,gCAAgC,sCAAsC;IACtE,+BAA+B,sCAAsC;CACtE;AACD,eAAO,MAAM,oBAAoB,eAAe,CAAC;AAOjD;;GAEG;AACH,wBAAgB,kCAAkC,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,CAO5F;AAED,wBAAgB,oCAAoC,IAAI,qBAAqB,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAgBxG;AAOD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,gBAAgB,CAAC,gBAAgB,CAAC,CAkBrH;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,kBAAkB,EACvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EAC3C,QAAQ,CAAC,EAAE,gBAAgB,GAC1B,MAAM,CAKR;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,GAAG,CAEvE;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAC"}