@digitaldefiance/ecies-lib 4.2.7 → 4.2.8

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 CHANGED
@@ -63,6 +63,74 @@ yarn add @digitaldefiance/ecies-lib
63
63
 
64
64
  ## Architecture & Protocol
65
65
 
66
+ ### Module Dependency Architecture
67
+
68
+ The library follows a strict hierarchical module dependency structure to prevent circular dependencies and ensure reliable initialization:
69
+
70
+ ```mermaid
71
+ graph TD
72
+ A[Level 1: Enumerations] --> B[Level 2: Translations]
73
+ B --> C[Level 3: i18n Setup]
74
+ C --> D[Level 4: Errors & Utils]
75
+ D --> E[Level 5: Constants & Services]
76
+
77
+ A1[ecies-string-key.ts] -.-> A
78
+ A2[ecies-error-type.ts] -.-> A
79
+ A3[ecies-encryption-type.ts] -.-> A
80
+
81
+ B1[en-US.ts] -.-> B
82
+ B2[fr.ts] -.-> B
83
+ B3[es.ts] -.-> B
84
+
85
+ C1[i18n-setup.ts] -.-> C
86
+
87
+ D1[errors/ecies.ts] -.-> D
88
+ D2[utils/encryption-type-utils.ts] -.-> D
89
+
90
+ E1[constants.ts] -.-> E
91
+ E2[services/ecies/service.ts] -.-> E
92
+
93
+ style A fill:#e1f5e1
94
+ style B fill:#e3f2fd
95
+ style C fill:#fff3e0
96
+ style D fill:#fce4ec
97
+ style E fill:#f3e5f5
98
+ ```
99
+
100
+ **Dependency Levels:**
101
+
102
+ 1. **Level 1 - Enumerations** (Pure, no dependencies)
103
+ - Contains only TypeScript enums and type definitions
104
+ - No imports from other project modules
105
+ - Examples: `EciesStringKey`, `EciesErrorType`, `EciesEncryptionType`
106
+
107
+ 2. **Level 2 - Translations** (Depends only on Level 1)
108
+ - Translation objects mapping enum keys to localized strings
109
+ - Only imports enumerations
110
+ - Examples: `en-US.ts`, `fr.ts`, `es.ts`
111
+
112
+ 3. **Level 3 - i18n Setup** (Depends on Levels 1-2)
113
+ - Initializes the internationalization engine
114
+ - Imports enumerations and translations
115
+ - Example: `i18n-setup.ts`
116
+
117
+ 4. **Level 4 - Errors & Utilities** (Depends on Levels 1-3)
118
+ - Error classes with lazy i18n initialization
119
+ - Utility functions that may throw errors
120
+ - Examples: `errors/ecies.ts`, `utils/encryption-type-utils.ts`
121
+
122
+ 5. **Level 5 - Constants & Services** (Depends on Levels 1-4)
123
+ - Configuration constants and validation
124
+ - Business logic and cryptographic services
125
+ - Examples: `constants.ts`, `services/ecies/service.ts`
126
+
127
+ **Key Principles:**
128
+
129
+ - **Enumerations are pure**: No imports except TypeScript types
130
+ - **Translations are data-only**: Only import enumerations
131
+ - **Errors use lazy i18n**: Translation lookup deferred until message access
132
+ - **Constants validate safely**: Early errors use basic Error class with fallback messages
133
+
66
134
  ### ECIES v4.0 Protocol Flow
67
135
 
68
136
  The library implements a robust ECIES variant designed for security and efficiency.
@@ -228,8 +296,186 @@ const encrypted = await member.encryptData('My Secrets');
228
296
  - `dispose()` method to explicitly zero out memory.
229
297
  - Prevents accidental leakage via `console.log` or serialization.
230
298
 
299
+ ## Documentation
300
+
301
+ ### Architecture & Design
302
+
303
+ - **[ECIES V4 Architecture](docs/ECIES_V4_ARCHITECTURE.md)** - Protocol specification and cryptographic design
304
+ - **[Streaming Encryption Architecture](docs/STREAMING_ENCRYPTION_ARCHITECTURE.md)** - Memory-efficient streaming design
305
+ - **[Circular Dependency Prevention](docs/CIRCULAR_DEPENDENCY_PREVENTION.md)** - Module dependency architecture
306
+
307
+ ### Developer Guides
308
+
309
+ - **[Contributing Guide](docs/CONTRIBUTING.md)** - How to contribute to the project
310
+ - **[Module Import Rules](docs/MODULE_IMPORT_RULES.md)** - Quick reference for import rules
311
+ - **[Migration Guide v3.7](docs/MIGRATION_GUIDE_v3.7.md)** - Upgrading from v3.x to v4.x
312
+
313
+ ### Quick References
314
+
315
+ - **[Streaming API Quickstart](docs/STREAMING_API_QUICKSTART.md)** - Get started with streaming encryption
316
+ - **[V2 Quickstart](docs/V2_QUICKSTART.md)** - Quick start guide for v2.x architecture
317
+
231
318
  ## Development
232
319
 
320
+ ### Avoiding Circular Dependencies
321
+
322
+ This library maintains a strict module hierarchy to prevent circular dependencies. When contributing, follow these rules:
323
+
324
+ #### Import Rules by Module Type
325
+
326
+ **Enumerations** (`src/enumerations/*.ts`):
327
+ - ✅ **CAN** import: TypeScript types only
328
+ - ❌ **CANNOT** import: Translations, i18n, errors, constants, services, utilities
329
+
330
+ **Translations** (`src/translations/*.ts`):
331
+ - ✅ **CAN** import: Enumerations, external libraries
332
+ - ❌ **CANNOT** import: i18n setup, errors, constants, services
333
+
334
+ **i18n Setup** (`src/i18n-setup.ts`):
335
+ - ✅ **CAN** import: Enumerations, translations, external libraries
336
+ - ❌ **CANNOT** import: Errors, constants, services
337
+
338
+ **Errors** (`src/errors/*.ts`):
339
+ - ✅ **CAN** import: Enumerations, i18n setup, external libraries
340
+ - ❌ **CANNOT** import: Constants, services (except as lazy imports)
341
+ - ⚠️ **MUST** use lazy i18n initialization (translation lookup on message access, not in constructor)
342
+
343
+ **Utilities** (`src/utils/*.ts`):
344
+ - ✅ **CAN** import: Enumerations, i18n setup, errors, external libraries
345
+ - ❌ **CANNOT** import: Constants, services (except as lazy imports)
346
+
347
+ **Constants** (`src/constants.ts`):
348
+ - ✅ **CAN** import: Enumerations, errors, utilities, external libraries
349
+ - ❌ **CANNOT** import: Services
350
+ - ⚠️ **MUST** handle early initialization errors gracefully (use fallback messages)
351
+
352
+ **Services** (`src/services/**/*.ts`):
353
+ - ✅ **CAN** import: All of the above
354
+ - ⚠️ **SHOULD** avoid circular dependencies with other services
355
+
356
+ #### Detecting Circular Dependencies
357
+
358
+ The project uses `madge` to detect circular dependencies. Run these commands to check:
359
+
360
+ ```bash
361
+ # Check for circular dependencies in the entire project
362
+ npx madge --circular --extensions ts src/index.ts
363
+
364
+ # Check a specific module
365
+ npx madge --circular --extensions ts src/enumerations/index.ts
366
+
367
+ # Generate a visual dependency graph
368
+ npx madge --image graph.svg --extensions ts src/index.ts
369
+ ```
370
+
371
+ #### Common Patterns to Avoid
372
+
373
+ **❌ Bad: Enumeration importing error class**
374
+ ```typescript
375
+ // src/enumerations/ecies-encryption-type.ts
376
+ import { ECIESError } from '../errors/ecies'; // Creates circular dependency!
377
+
378
+ export function validateType(type: EciesEncryptionTypeEnum): void {
379
+ if (!isValid(type)) {
380
+ throw new ECIESError(ECIESErrorTypeEnum.InvalidEncryptionType);
381
+ }
382
+ }
383
+ ```
384
+
385
+ **✅ Good: Move validation to utility module**
386
+ ```typescript
387
+ // src/enumerations/ecies-encryption-type.ts
388
+ export enum EciesEncryptionTypeEnum {
389
+ Simple = 33,
390
+ Single = 66,
391
+ Multiple = 99,
392
+ }
393
+
394
+ // src/utils/encryption-type-utils.ts
395
+ import { ECIESError } from '../errors/ecies';
396
+ import { EciesEncryptionTypeEnum } from '../enumerations/ecies-encryption-type';
397
+
398
+ export function validateType(type: EciesEncryptionTypeEnum): void {
399
+ if (!isValid(type)) {
400
+ throw new ECIESError(ECIESErrorTypeEnum.InvalidEncryptionType);
401
+ }
402
+ }
403
+ ```
404
+
405
+ **❌ Bad: Error class with eager i18n initialization**
406
+ ```typescript
407
+ // src/errors/ecies.ts
408
+ export class ECIESError extends Error {
409
+ constructor(type: ECIESErrorTypeEnum) {
410
+ const engine = getEciesI18nEngine(); // May not be initialized yet!
411
+ super(engine.translate(EciesComponentId, getKeyForType(type)));
412
+ }
413
+ }
414
+ ```
415
+
416
+ **✅ Good: Error class with lazy i18n initialization**
417
+ ```typescript
418
+ // src/errors/ecies.ts
419
+ export class ECIESError extends TypedHandleableError {
420
+ constructor(type: ECIESErrorTypeEnum) {
421
+ super(type); // Don't access i18n in constructor
422
+ }
423
+
424
+ // Message is accessed lazily via getter when needed
425
+ get message(): string {
426
+ const engine = getEciesI18nEngine();
427
+ return engine.translate(EciesComponentId, getKeyForType(this.type));
428
+ }
429
+ }
430
+ ```
431
+
432
+ **❌ Bad: Constants validation with hard i18n dependency**
433
+ ```typescript
434
+ // src/constants.ts
435
+ function validateConstants(config: IConstants): void {
436
+ const engine = getEciesI18nEngine(); // May fail during module init!
437
+ if (config.CHECKSUM.SHA3_BUFFER_LENGTH !== 32) {
438
+ throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_InvalidChecksum));
439
+ }
440
+ }
441
+ ```
442
+
443
+ **✅ Good: Constants validation with fallback**
444
+ ```typescript
445
+ // src/constants.ts
446
+ function safeTranslate(key: EciesStringKey, fallback: string): string {
447
+ try {
448
+ const engine = getEciesI18nEngine();
449
+ return engine.translate(EciesComponentId, key);
450
+ } catch {
451
+ return fallback; // Use fallback during early initialization
452
+ }
453
+ }
454
+
455
+ function validateConstants(config: IConstants): void {
456
+ if (config.CHECKSUM.SHA3_BUFFER_LENGTH !== 32) {
457
+ throw new Error(safeTranslate(
458
+ EciesStringKey.Error_InvalidChecksum,
459
+ 'Invalid checksum constants'
460
+ ));
461
+ }
462
+ }
463
+ ```
464
+
465
+ #### Pre-commit Checks
466
+
467
+ Consider adding a pre-commit hook to catch circular dependencies early:
468
+
469
+ ```bash
470
+ # .husky/pre-commit
471
+ #!/bin/sh
472
+ npx madge --circular --extensions ts src/index.ts
473
+ if [ $? -ne 0 ]; then
474
+ echo "❌ Circular dependencies detected! Please fix before committing."
475
+ exit 1
476
+ fi
477
+ ```
478
+
233
479
  ### Commands
234
480
 
235
481
  ```bash
@@ -251,6 +497,10 @@ The library maintains **100% test coverage** with over 1,200 tests, including:
251
497
 
252
498
  ## ChangeLog
253
499
 
500
+ ### v4.2.8
501
+
502
+ - Improve type safety/circular dependency protection
503
+
254
504
  ### v4.2.5
255
505
 
256
506
  #### Changed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digitaldefiance/ecies-lib",
3
- "version": "4.2.7",
3
+ "version": "4.2.8",
4
4
  "description": "Digital Defiance ECIES Library",
5
5
  "main": "src/index.js",
6
6
  "types": "src/index.d.ts",
@@ -1,5 +1,5 @@
1
- import { IConstants } from './constants';
2
- import { DeepPartial } from '../types/deep-partial';
1
+ import type { DeepPartial } from '../types/deep-partial';
2
+ import type { IConstants } from './constants';
3
3
  /**
4
4
  * Provenance information for a configuration.
5
5
  * Tracks who created it, when, and what modifications were made.
@@ -1 +1 @@
1
- {"version":3,"file":"configuration-provenance.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/configuration-provenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAGpD;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAE5C;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IAEzB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAElD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAKlE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAO7C"}
1
+ {"version":3,"file":"configuration-provenance.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/configuration-provenance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;GAGG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC,UAAU,CAAC,CAAC;IAE5C;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IAEzB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IAElD;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAE9B;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAMlE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAO7C"}
@@ -5,7 +5,7 @@ import { createHash } from 'crypto';
5
5
  */
6
6
  export function calculateConfigChecksum(config) {
7
7
  // Create a stable JSON representation with BigInt support
8
- const replacer = (key, value) => (typeof value === 'bigint' ? value.toString() : value);
8
+ const replacer = (key, value) => typeof value === 'bigint' ? value.toString() : value;
9
9
  const stable = JSON.stringify(config, replacer);
10
10
  return createHash('sha256').update(stable).digest('hex');
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"configuration-provenance.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/configuration-provenance.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAgDpC;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAkB;IACxD,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACrG,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,OAAO,mBAAmB,CAAC;IAEvC,+DAA+D;IAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"configuration-provenance.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/configuration-provenance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAkDpC;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAkB;IACxD,0DAA0D;IAC1D,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,KAAU,EAAE,EAAE,CAC3C,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,KAAK,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,OAAO,mBAAmB,CAAC;IAEvC,+DAA+D;IAC/D,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1,8 +1,8 @@
1
- import { Pbkdf2Profiles } from '../pbkdf2-profiles';
2
- import { IChecksumConsts } from './checksum-consts';
3
- import { IECIESConstants } from './ecies-consts';
4
- import { IPBkdf2Consts } from './pbkdf2-consts';
5
- import { IIdProvider } from './id-provider';
1
+ import type { Pbkdf2Profiles } from '../pbkdf2-profiles';
2
+ import type { IChecksumConsts } from './checksum-consts';
3
+ import type { IECIESConstants } from './ecies-consts';
4
+ import type { IIdProvider } from './id-provider';
5
+ import type { IPBkdf2Consts } from './pbkdf2-consts';
6
6
  export interface IConstants {
7
7
  UINT8_SIZE: number;
8
8
  UINT16_SIZE: number;
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;;;;;;;;;;;;;OAeG;IACH,UAAU,EAAE,WAAW,CAAC;IAExB,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,cAAc,CAAC;IAEhC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC3B"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;;OAIG;IACH,gBAAgB,EAAE,MAAM,CAAC;IAEzB;;;;;;;;;;;;;;;OAeG;IACH,UAAU,EAAE,WAAW,CAAC;IAExB,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,eAAe,CAAC;IACvB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,cAAc,CAAC;IAEhC;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,iBAAiB,EAAE,MAAM,CAAC;CAC3B"}
@@ -1,4 +1,4 @@
1
- import { EciesEncryptionTypeEnum } from '../enumerations/ecies-encryption-type';
1
+ import type { EciesEncryptionTypeEnum } from '../enumerations/ecies-encryption-type';
2
2
  /**
3
3
  * Serializable encryption state for resumption
4
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"encryption-state.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/encryption-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,uBAAuB,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,wBAAwB,IAAI,CAAC"}
1
+ {"version":3,"file":"encryption-state.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/encryption-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,uBAAuB,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,wBAAwB,IAAI,CAAC"}
@@ -1,12 +1,12 @@
1
- import { Wallet } from '@ethereumjs/wallet';
2
- import { EmailString } from '../email-string';
3
- import MemberType from '../enumerations/member-type';
4
- import { SecureBuffer } from '../secure-buffer';
5
- import { SecureString } from '../secure-string';
6
- import { SignatureUint8Array } from '../types';
7
- import { IECIESConstants } from './ecies-consts';
8
- import { IEncryptedChunk } from './encrypted-chunk';
9
- import { ProgressCallback } from './stream-progress';
1
+ import type { Wallet } from '@ethereumjs/wallet';
2
+ import type { EmailString } from '../email-string';
3
+ import type MemberType from '../enumerations/member-type';
4
+ import type { SecureBuffer } from '../secure-buffer';
5
+ import type { SecureString } from '../secure-string';
6
+ import type { SignatureUint8Array } from '../types';
7
+ import type { IECIESConstants } from './ecies-consts';
8
+ import type { IEncryptedChunk } from './encrypted-chunk';
9
+ import type { ProgressCallback } from './stream-progress';
10
10
  /**
11
11
  * Operational interface for member - defines getters and methods
12
12
  */
@@ -1 +1 @@
1
- {"version":3,"file":"frontend-member-operational.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/frontend-member-operational.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,UAAU,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,0BAA0B,CACzC,GAAG,GAAG,UAAU,EAChB,KAAK,GAAG,UAAU,EAClB,UAAU,GAAG,mBAAmB;IAGhC,IAAI,EAAE,IAAI,GAAG,CAAC;IACd,IAAI,IAAI,IAAI,UAAU,CAAC;IACvB,IAAI,IAAI,IAAI,MAAM,CAAC;IACnB,IAAI,KAAK,IAAI,WAAW,CAAC;IACzB,IAAI,SAAS,IAAI,UAAU,CAAC;IAC5B,IAAI,SAAS,IAAI,GAAG,CAAC;IACrB,IAAI,WAAW,IAAI,IAAI,CAAC;IACxB,IAAI,WAAW,IAAI,IAAI,CAAC;IAGxB,IAAI,UAAU,IAAI,YAAY,GAAG,SAAS,CAAC;IAC3C,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAAC;IAGjC,IAAI,aAAa,IAAI,OAAO,CAAC;IAG7B,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;IAC9B,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IACpD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,kBAAkB,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACnF,WAAW,CAAC,aAAa,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,IAAI,MAAM,CAAC;IACjB,OAAO,IAAI,IAAI,CAAC;IAGhB,iBAAiB,CACf,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,EAC9D,OAAO,CAAC,EAAE;QACR,kBAAkB,CAAC,EAAE,UAAU,CAAC;QAChC,UAAU,CAAC,EAAE,gBAAgB,CAAC;QAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GACA,cAAc,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAElD,iBAAiB,CACf,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,EAC9D,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,gBAAgB,CAAC;QAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GACA,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAG7C,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACxE,gBAAgB,IAAI,IAAI,CAAC;IACzB,YAAY,IAAI,IAAI,CAAC;IACrB,yBAAyB,IAAI,IAAI,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACxE,IAAI,QAAQ,IAAI,YAAY,GAAG,SAAS,CAAC;CAC1C"}
1
+ {"version":3,"file":"frontend-member-operational.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/frontend-member-operational.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,0BAA0B,CACzC,GAAG,GAAG,UAAU,EAChB,KAAK,GAAG,UAAU,EAClB,UAAU,GAAG,mBAAmB;IAGhC,IAAI,EAAE,IAAI,GAAG,CAAC;IACd,IAAI,IAAI,IAAI,UAAU,CAAC;IACvB,IAAI,IAAI,IAAI,MAAM,CAAC;IACnB,IAAI,KAAK,IAAI,WAAW,CAAC;IACzB,IAAI,SAAS,IAAI,UAAU,CAAC;IAC5B,IAAI,SAAS,IAAI,GAAG,CAAC;IACrB,IAAI,WAAW,IAAI,IAAI,CAAC;IACxB,IAAI,WAAW,IAAI,IAAI,CAAC;IAGxB,IAAI,UAAU,IAAI,YAAY,GAAG,SAAS,CAAC;IAC3C,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAAC;IAGjC,IAAI,aAAa,IAAI,OAAO,CAAC;IAG7B,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;IAC9B,MAAM,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;IACpD,WAAW,CACT,IAAI,EAAE,MAAM,GAAG,KAAK,EACpB,kBAAkB,CAAC,EAAE,UAAU,GAC9B,OAAO,CAAC,KAAK,CAAC,CAAC;IAClB,WAAW,CAAC,aAAa,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,IAAI,MAAM,CAAC;IACjB,OAAO,IAAI,IAAI,CAAC;IAGhB,iBAAiB,CACf,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,EAC9D,OAAO,CAAC,EAAE;QACR,kBAAkB,CAAC,EAAE,UAAU,CAAC;QAChC,UAAU,CAAC,EAAE,gBAAgB,CAAC;QAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GACA,cAAc,CAAC,eAAe,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAElD,iBAAiB,CACf,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,EAC9D,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,gBAAgB,CAAC;QAC9B,MAAM,CAAC,EAAE,WAAW,CAAC;KACtB,GACA,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAG7C,UAAU,CAAC,QAAQ,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IACxE,gBAAgB,IAAI,IAAI,CAAC;IACzB,YAAY,IAAI,IAAI,CAAC;IACrB,yBAAyB,IAAI,IAAI,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACxE,IAAI,QAAQ,IAAI,YAAY,GAAG,SAAS,CAAC;CAC1C"}
@@ -1,4 +1,4 @@
1
- import { IConstants } from './constants';
1
+ import type { IConstants } from './constants';
2
2
  /**
3
3
  * An invariant is a relationship between configuration values that must always hold true.
4
4
  * Unlike simple property validation, invariants check consistency across multiple related values.
@@ -1 +1 @@
1
- {"version":3,"file":"invariant.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/invariant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IAEnC;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;CAC1C;AAED;;GAEG;AACH,8BAAsB,aAAc,YAAW,UAAU;aAErC,IAAI,EAAE,MAAM;aACZ,WAAW,EAAE,MAAM;gBADnB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM;IAGrC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAC3C,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAEjD;;OAEG;IACH,SAAS,CAAC,WAAW,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,GACd,MAAM;CAGV"}
1
+ {"version":3,"file":"invariant.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/invariant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;GAQG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC;IAEnC;;;;OAIG;IACH,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;CAC1C;AAED;;GAEG;AACH,8BAAsB,aAAc,YAAW,UAAU;aAErC,IAAI,EAAE,MAAM;aACZ,WAAW,EAAE,MAAM;gBADnB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM;IAGrC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;IAC3C,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAEjD;;OAEG;IACH,SAAS,CAAC,WAAW,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,OAAO,GACd,MAAM;CAGV"}
@@ -1,4 +1,4 @@
1
- import { MemberType } from '../enumerations/member-type';
1
+ import type { MemberType } from '../enumerations/member-type';
2
2
  /**
3
3
  * Storage format for member data - all serializable types
4
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"member-storage.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/member-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,kBAAkB;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"member-storage.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/member-storage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAE9D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,kBAAkB;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -1,5 +1,5 @@
1
- import { Member } from '../member';
2
- import { SecureString } from '../secure-string';
1
+ import type { Member } from '../member';
2
+ import type { SecureString } from '../secure-string';
3
3
  export interface IMemberWithMnemonic {
4
4
  member: Member;
5
5
  mnemonic: SecureString;
@@ -1 +1 @@
1
- {"version":3,"file":"member-with-mnemonic.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/member-with-mnemonic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;CACxB"}
1
+ {"version":3,"file":"member-with-mnemonic.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/member-with-mnemonic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;CACxB"}
@@ -1,4 +1,4 @@
1
- import { EciesEncryptionTypeEnum } from '../enumerations/ecies-encryption-type';
1
+ import type { EciesEncryptionTypeEnum } from '../enumerations/ecies-encryption-type';
2
2
  /**
3
3
  * Stream header structure (128 bytes fixed)
4
4
  */
@@ -1 +1 @@
1
- {"version":3,"file":"stream-header.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/stream-header.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAEhF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,cAAc,EAAE,uBAAuB,CAAC;IACxC,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC"}
1
+ {"version":3,"file":"stream-header.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/stream-header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,cAAc,EAAE,uBAAuB,CAAC;IACxC,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB;;;;CAI1B,CAAC"}