@digitaldefiance/ecies-lib 3.0.8 → 3.7.2

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 (303) hide show
  1. package/README.md +4 -0
  2. package/package.json +4 -3
  3. package/src/builders/ecies-builder.js +5 -9
  4. package/src/builders/ecies-builder.js.map +1 -1
  5. package/src/builders/index.js +2 -5
  6. package/src/builders/index.js.map +1 -1
  7. package/src/builders/member-builder.js +12 -16
  8. package/src/builders/member-builder.js.map +1 -1
  9. package/src/constants.d.ts +14 -0
  10. package/src/constants.d.ts.map +1 -1
  11. package/src/constants.js +150 -74
  12. package/src/constants.js.map +1 -1
  13. package/src/core/errors/crypto-error.js +10 -14
  14. package/src/core/errors/crypto-error.js.map +1 -1
  15. package/src/core/index.js +2 -5
  16. package/src/core/index.js.map +1 -1
  17. package/src/core/types/result.js +1 -5
  18. package/src/core/types/result.js.map +1 -1
  19. package/src/email-string.js +8 -13
  20. package/src/email-string.js.map +1 -1
  21. package/src/enumerations/disposed-error-type.d.ts +12 -0
  22. package/src/enumerations/disposed-error-type.d.ts.map +1 -0
  23. package/src/enumerations/disposed-error-type.js +13 -0
  24. package/src/enumerations/disposed-error-type.js.map +1 -0
  25. package/src/enumerations/ecies-encryption-type.js +20 -27
  26. package/src/enumerations/ecies-encryption-type.js.map +1 -1
  27. package/src/enumerations/ecies-error-type.js +2 -5
  28. package/src/enumerations/ecies-error-type.js.map +1 -1
  29. package/src/enumerations/ecies-string-key.d.ts +19 -1
  30. package/src/enumerations/ecies-string-key.d.ts.map +1 -1
  31. package/src/enumerations/ecies-string-key.js +21 -5
  32. package/src/enumerations/ecies-string-key.js.map +1 -1
  33. package/src/enumerations/guid-brand-type.d.ts +27 -0
  34. package/src/enumerations/guid-brand-type.d.ts.map +1 -0
  35. package/src/enumerations/guid-brand-type.js +28 -0
  36. package/src/enumerations/guid-brand-type.js.map +1 -0
  37. package/src/enumerations/guid-error-type.d.ts +7 -0
  38. package/src/enumerations/guid-error-type.d.ts.map +1 -0
  39. package/src/enumerations/guid-error-type.js +8 -0
  40. package/src/enumerations/guid-error-type.js.map +1 -0
  41. package/src/enumerations/id-provider-error-type.d.ts +43 -0
  42. package/src/enumerations/id-provider-error-type.d.ts.map +1 -0
  43. package/src/enumerations/id-provider-error-type.js +44 -0
  44. package/src/enumerations/id-provider-error-type.js.map +1 -0
  45. package/src/enumerations/index.d.ts +3 -0
  46. package/src/enumerations/index.d.ts.map +1 -1
  47. package/src/enumerations/index.js +15 -15
  48. package/src/enumerations/index.js.map +1 -1
  49. package/src/enumerations/invalid-email-type.js +2 -5
  50. package/src/enumerations/invalid-email-type.js.map +1 -1
  51. package/src/enumerations/length-encoding-type.js +2 -5
  52. package/src/enumerations/length-encoding-type.js.map +1 -1
  53. package/src/enumerations/length-error-type.js +2 -5
  54. package/src/enumerations/length-error-type.js.map +1 -1
  55. package/src/enumerations/member-error-type.js +3 -6
  56. package/src/enumerations/member-error-type.js.map +1 -1
  57. package/src/enumerations/member-type.js +3 -6
  58. package/src/enumerations/member-type.js.map +1 -1
  59. package/src/enumerations/password-login-error-type.js +2 -5
  60. package/src/enumerations/password-login-error-type.js.map +1 -1
  61. package/src/enumerations/pbkdf2-error-type.js +2 -5
  62. package/src/enumerations/pbkdf2-error-type.js.map +1 -1
  63. package/src/enumerations/pbkdf2-profile.js +2 -5
  64. package/src/enumerations/pbkdf2-profile.js.map +1 -1
  65. package/src/enumerations/secure-storage-error-type.js +2 -5
  66. package/src/enumerations/secure-storage-error-type.js.map +1 -1
  67. package/src/errors/disposed.d.ts +20 -2
  68. package/src/errors/disposed.d.ts.map +1 -1
  69. package/src/errors/disposed.js +24 -17
  70. package/src/errors/disposed.js.map +1 -1
  71. package/src/errors/ecies.d.ts +46 -1
  72. package/src/errors/ecies.d.ts.map +1 -1
  73. package/src/errors/ecies.js +65 -10
  74. package/src/errors/ecies.js.map +1 -1
  75. package/src/errors/guid.d.ts +44 -0
  76. package/src/errors/guid.d.ts.map +1 -0
  77. package/src/errors/guid.js +81 -0
  78. package/src/errors/guid.js.map +1 -0
  79. package/src/errors/id-provider.d.ts +23 -0
  80. package/src/errors/id-provider.d.ts.map +1 -0
  81. package/src/errors/id-provider.js +29 -0
  82. package/src/errors/id-provider.js.map +1 -0
  83. package/src/errors/index.d.ts +3 -0
  84. package/src/errors/index.d.ts.map +1 -1
  85. package/src/errors/index.js +9 -10
  86. package/src/errors/index.js.map +1 -1
  87. package/src/errors/invalid-email.js +5 -9
  88. package/src/errors/invalid-email.js.map +1 -1
  89. package/src/errors/length.js +5 -9
  90. package/src/errors/length.js.map +1 -1
  91. package/src/errors/member.js +5 -9
  92. package/src/errors/member.js.map +1 -1
  93. package/src/errors/pbkdf2.js +5 -9
  94. package/src/errors/pbkdf2.js.map +1 -1
  95. package/src/errors/secure-storage.js +6 -10
  96. package/src/errors/secure-storage.js.map +1 -1
  97. package/src/errors/simple-ecies.js +6 -10
  98. package/src/errors/simple-ecies.js.map +1 -1
  99. package/src/errors/simple-test-error.js +1 -5
  100. package/src/errors/simple-test-error.js.map +1 -1
  101. package/src/i18n-setup.js +29 -37
  102. package/src/i18n-setup.js.map +1 -1
  103. package/src/index.d.ts +10 -0
  104. package/src/index.d.ts.map +1 -1
  105. package/src/index.js +44 -57
  106. package/src/index.js.map +1 -1
  107. package/src/interfaces/checksum-config.js +1 -2
  108. package/src/interfaces/checksum-consts.js +1 -2
  109. package/src/interfaces/configuration-provenance.d.ts +51 -0
  110. package/src/interfaces/configuration-provenance.d.ts.map +1 -0
  111. package/src/interfaces/configuration-provenance.js +23 -0
  112. package/src/interfaces/configuration-provenance.js.map +1 -0
  113. package/src/interfaces/constants.d.ts +27 -1
  114. package/src/interfaces/constants.d.ts.map +1 -1
  115. package/src/interfaces/constants.js +1 -2
  116. package/src/interfaces/ecies-config.js +1 -2
  117. package/src/interfaces/ecies-consts.js +1 -2
  118. package/src/interfaces/ecies-file-service.js +1 -2
  119. package/src/interfaces/encrypted-chunk.js +1 -4
  120. package/src/interfaces/encrypted-chunk.js.map +1 -1
  121. package/src/interfaces/encryption-state.js +1 -4
  122. package/src/interfaces/encryption-state.js.map +1 -1
  123. package/src/interfaces/frontend-member-operational.js +1 -2
  124. package/src/interfaces/guid.d.ts +78 -0
  125. package/src/interfaces/guid.d.ts.map +1 -0
  126. package/src/interfaces/guid.js +2 -0
  127. package/src/interfaces/guid.js.map +1 -0
  128. package/src/interfaces/id-provider.d.ts +83 -0
  129. package/src/interfaces/id-provider.d.ts.map +1 -0
  130. package/src/interfaces/id-provider.js +35 -0
  131. package/src/interfaces/id-provider.js.map +1 -0
  132. package/src/interfaces/index.d.ts +1 -0
  133. package/src/interfaces/index.d.ts.map +1 -1
  134. package/src/interfaces/index.js +13 -15
  135. package/src/interfaces/index.js.map +1 -1
  136. package/src/interfaces/invariant.d.ts +46 -0
  137. package/src/interfaces/invariant.d.ts.map +1 -0
  138. package/src/interfaces/invariant.js +18 -0
  139. package/src/interfaces/invariant.js.map +1 -0
  140. package/src/interfaces/library-error.js +1 -2
  141. package/src/interfaces/member-storage.js +1 -2
  142. package/src/interfaces/member-with-mnemonic.js +1 -2
  143. package/src/interfaces/multi-recipient-chunk.d.ts +36 -12
  144. package/src/interfaces/multi-recipient-chunk.d.ts.map +1 -1
  145. package/src/interfaces/multi-recipient-chunk.js +36 -14
  146. package/src/interfaces/multi-recipient-chunk.js.map +1 -1
  147. package/src/interfaces/pbkdf2-config.js +1 -2
  148. package/src/interfaces/pbkdf2-consts.js +1 -2
  149. package/src/interfaces/pbkdf2-result.js +1 -2
  150. package/src/interfaces/stream-config.js +1 -4
  151. package/src/interfaces/stream-config.js.map +1 -1
  152. package/src/interfaces/stream-header.js +1 -4
  153. package/src/interfaces/stream-header.js.map +1 -1
  154. package/src/interfaces/stream-progress.js +1 -2
  155. package/src/lib/crypto-container.js +9 -13
  156. package/src/lib/crypto-container.js.map +1 -1
  157. package/src/lib/guid.d.ts +344 -0
  158. package/src/lib/guid.d.ts.map +1 -0
  159. package/src/lib/guid.js +914 -0
  160. package/src/lib/guid.js.map +1 -0
  161. package/src/lib/id-providers/custom-provider.d.ts +69 -0
  162. package/src/lib/id-providers/custom-provider.d.ts.map +1 -0
  163. package/src/lib/id-providers/custom-provider.js +128 -0
  164. package/src/lib/id-providers/custom-provider.js.map +1 -0
  165. package/src/lib/id-providers/guidv4-provider.d.ts +46 -0
  166. package/src/lib/id-providers/guidv4-provider.d.ts.map +1 -0
  167. package/src/lib/id-providers/guidv4-provider.js +105 -0
  168. package/src/lib/id-providers/guidv4-provider.js.map +1 -0
  169. package/src/lib/id-providers/index.d.ts +30 -0
  170. package/src/lib/id-providers/index.d.ts.map +1 -0
  171. package/src/lib/id-providers/index.js +29 -0
  172. package/src/lib/id-providers/index.js.map +1 -0
  173. package/src/lib/id-providers/objectid-provider.d.ts +33 -0
  174. package/src/lib/id-providers/objectid-provider.d.ts.map +1 -0
  175. package/src/lib/id-providers/objectid-provider.js +79 -0
  176. package/src/lib/id-providers/objectid-provider.js.map +1 -0
  177. package/src/lib/id-providers/uuid-provider.d.ts +42 -0
  178. package/src/lib/id-providers/uuid-provider.d.ts.map +1 -0
  179. package/src/lib/id-providers/uuid-provider.js +96 -0
  180. package/src/lib/id-providers/uuid-provider.js.map +1 -0
  181. package/src/lib/index.d.ts +1 -0
  182. package/src/lib/index.d.ts.map +1 -1
  183. package/src/lib/index.js +2 -4
  184. package/src/lib/index.js.map +1 -1
  185. package/src/lib/invariant-validator.d.ts +59 -0
  186. package/src/lib/invariant-validator.d.ts.map +1 -0
  187. package/src/lib/invariant-validator.js +97 -0
  188. package/src/lib/invariant-validator.js.map +1 -0
  189. package/src/lib/invariants/encryption-algorithm-consistency.d.ts +17 -0
  190. package/src/lib/invariants/encryption-algorithm-consistency.d.ts.map +1 -0
  191. package/src/lib/invariants/encryption-algorithm-consistency.js +49 -0
  192. package/src/lib/invariants/encryption-algorithm-consistency.js.map +1 -0
  193. package/src/lib/invariants/index.d.ts +4 -0
  194. package/src/lib/invariants/index.d.ts.map +1 -0
  195. package/src/lib/invariants/index.js +4 -0
  196. package/src/lib/invariants/index.js.map +1 -0
  197. package/src/lib/invariants/pbkdf2-profiles-validity.d.ts +16 -0
  198. package/src/lib/invariants/pbkdf2-profiles-validity.d.ts.map +1 -0
  199. package/src/lib/invariants/pbkdf2-profiles-validity.js +58 -0
  200. package/src/lib/invariants/pbkdf2-profiles-validity.js.map +1 -0
  201. package/src/lib/invariants/recipient-id-consistency.d.ts +18 -0
  202. package/src/lib/invariants/recipient-id-consistency.d.ts.map +1 -0
  203. package/src/lib/invariants/recipient-id-consistency.js +31 -0
  204. package/src/lib/invariants/recipient-id-consistency.js.map +1 -0
  205. package/src/member.js +43 -48
  206. package/src/member.js.map +1 -1
  207. package/src/pbkdf2-profiles.js +1 -2
  208. package/src/phone-number.js +7 -11
  209. package/src/phone-number.js.map +1 -1
  210. package/src/regexes.js +3 -6
  211. package/src/regexes.js.map +1 -1
  212. package/src/secure-buffer.d.ts +17 -1
  213. package/src/secure-buffer.d.ts.map +1 -1
  214. package/src/secure-buffer.js +40 -22
  215. package/src/secure-buffer.js.map +1 -1
  216. package/src/secure-string.js +20 -24
  217. package/src/secure-string.js.map +1 -1
  218. package/src/services/aes-gcm.js +21 -25
  219. package/src/services/aes-gcm.js.map +1 -1
  220. package/src/services/chunk-processor.js +32 -36
  221. package/src/services/chunk-processor.js.map +1 -1
  222. package/src/services/ecies/crypto-core.js +33 -37
  223. package/src/services/ecies/crypto-core.js.map +1 -1
  224. package/src/services/ecies/example.js +37 -44
  225. package/src/services/ecies/example.js.map +1 -1
  226. package/src/services/ecies/file.js +1 -5
  227. package/src/services/ecies/file.js.map +1 -1
  228. package/src/services/ecies/index.js +10 -15
  229. package/src/services/ecies/index.js.map +1 -1
  230. package/src/services/ecies/integration.js +23 -28
  231. package/src/services/ecies/integration.js.map +1 -1
  232. package/src/services/ecies/interfaces.js +1 -2
  233. package/src/services/ecies/interfaces.js.map +1 -1
  234. package/src/services/ecies/manual-test.js +26 -34
  235. package/src/services/ecies/manual-test.js.map +1 -1
  236. package/src/services/ecies/multi-recipient.js +47 -51
  237. package/src/services/ecies/multi-recipient.js.map +1 -1
  238. package/src/services/ecies/service.js +27 -31
  239. package/src/services/ecies/service.js.map +1 -1
  240. package/src/services/ecies/signature.js +9 -13
  241. package/src/services/ecies/signature.js.map +1 -1
  242. package/src/services/ecies/single-recipient.js +42 -46
  243. package/src/services/ecies/single-recipient.js.map +1 -1
  244. package/src/services/encryption-stream.d.ts +3 -1
  245. package/src/services/encryption-stream.d.ts.map +1 -1
  246. package/src/services/encryption-stream.js +46 -48
  247. package/src/services/encryption-stream.js.map +1 -1
  248. package/src/services/index.js +5 -8
  249. package/src/services/index.js.map +1 -1
  250. package/src/services/multi-recipient-processor.d.ts +12 -2
  251. package/src/services/multi-recipient-processor.d.ts.map +1 -1
  252. package/src/services/multi-recipient-processor.js +65 -56
  253. package/src/services/multi-recipient-processor.js.map +1 -1
  254. package/src/services/password-login.js +33 -37
  255. package/src/services/password-login.js.map +1 -1
  256. package/src/services/pbkdf2.js +8 -12
  257. package/src/services/pbkdf2.js.map +1 -1
  258. package/src/services/progress-tracker.js +5 -9
  259. package/src/services/progress-tracker.js.map +1 -1
  260. package/src/services/resumable-encryption.js +24 -28
  261. package/src/services/resumable-encryption.js.map +1 -1
  262. package/src/services/xor.js +1 -5
  263. package/src/services/xor.js.map +1 -1
  264. package/src/test-mocks/index.js +1 -4
  265. package/src/test-mocks/index.js.map +1 -1
  266. package/src/test-mocks/mock-frontend-member.js +20 -24
  267. package/src/test-mocks/mock-frontend-member.js.map +1 -1
  268. package/src/testing.js +1 -4
  269. package/src/testing.js.map +1 -1
  270. package/src/translations/de.d.ts +2 -1
  271. package/src/translations/de.d.ts.map +1 -1
  272. package/src/translations/de.js +190 -170
  273. package/src/translations/de.js.map +1 -1
  274. package/src/translations/en-US.d.ts +2 -1
  275. package/src/translations/en-US.d.ts.map +1 -1
  276. package/src/translations/en-US.js +190 -170
  277. package/src/translations/en-US.js.map +1 -1
  278. package/src/translations/es.d.ts +2 -1
  279. package/src/translations/es.d.ts.map +1 -1
  280. package/src/translations/es.js +190 -170
  281. package/src/translations/es.js.map +1 -1
  282. package/src/translations/fr.d.ts +2 -1
  283. package/src/translations/fr.d.ts.map +1 -1
  284. package/src/translations/fr.js +190 -170
  285. package/src/translations/fr.js.map +1 -1
  286. package/src/translations/ja.d.ts +2 -1
  287. package/src/translations/ja.d.ts.map +1 -1
  288. package/src/translations/ja.js +189 -170
  289. package/src/translations/ja.js.map +1 -1
  290. package/src/translations/uk.d.ts +2 -1
  291. package/src/translations/uk.d.ts.map +1 -1
  292. package/src/translations/uk.js +192 -170
  293. package/src/translations/uk.js.map +1 -1
  294. package/src/translations/zh-cn.d.ts +2 -1
  295. package/src/translations/zh-cn.d.ts.map +1 -1
  296. package/src/translations/zh-cn.js +189 -170
  297. package/src/translations/zh-cn.js.map +1 -1
  298. package/src/types/deep-partial.js +1 -2
  299. package/src/types.d.ts +31 -0
  300. package/src/types.d.ts.map +1 -1
  301. package/src/types.js +1 -2
  302. package/src/utils.js +59 -77
  303. package/src/utils.js.map +1 -1
@@ -0,0 +1,46 @@
1
+ import { IConstants } from './constants';
2
+ /**
3
+ * An invariant is a relationship between configuration values that must always hold true.
4
+ * Unlike simple property validation, invariants check consistency across multiple related values.
5
+ *
6
+ * Example: MEMBER_ID_LENGTH must equal idProvider.byteLength
7
+ *
8
+ * Invariants help catch configuration errors that simple property validation would miss,
9
+ * such as the 12 vs 32 byte discrepancy we encountered.
10
+ */
11
+ export interface IInvariant {
12
+ /**
13
+ * Unique name for this invariant (used in error messages)
14
+ */
15
+ readonly name: string;
16
+ /**
17
+ * Human-readable description of what this invariant validates
18
+ */
19
+ readonly description: string;
20
+ /**
21
+ * Check if the invariant holds for the given configuration
22
+ * @returns true if invariant is satisfied, false otherwise
23
+ */
24
+ check(config: IConstants): boolean;
25
+ /**
26
+ * Generate a detailed error message explaining why the invariant failed
27
+ * @param config The configuration that failed validation
28
+ * @returns Error message with actual vs expected values
29
+ */
30
+ errorMessage(config: IConstants): string;
31
+ }
32
+ /**
33
+ * Base class for invariants with common utilities
34
+ */
35
+ export declare abstract class BaseInvariant implements IInvariant {
36
+ readonly name: string;
37
+ readonly description: string;
38
+ constructor(name: string, description: string);
39
+ abstract check(config: IConstants): boolean;
40
+ abstract errorMessage(config: IConstants): string;
41
+ /**
42
+ * Helper to format error messages consistently
43
+ */
44
+ protected formatError(property1: string, value1: unknown, property2: string, value2: unknown): string;
45
+ }
46
+ //# sourceMappingURL=invariant.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Base class for invariants with common utilities
3
+ */
4
+ export class BaseInvariant {
5
+ name;
6
+ description;
7
+ constructor(name, description) {
8
+ this.name = name;
9
+ this.description = description;
10
+ }
11
+ /**
12
+ * Helper to format error messages consistently
13
+ */
14
+ formatError(property1, value1, property2, value2) {
15
+ return `Invariant '${this.name}' failed: ${property1} (${value1}) must equal ${property2} (${value2})`;
16
+ }
17
+ }
18
+ //# sourceMappingURL=invariant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invariant.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/invariant.ts"],"names":[],"mappings":"AAoCA;;GAEG;AACH,MAAM,OAAgB,aAAa;IAEf;IACA;IAFlB,YACkB,IAAY,EACZ,WAAmB;QADnB,SAAI,GAAJ,IAAI,CAAQ;QACZ,gBAAW,GAAX,WAAW,CAAQ;IAClC,CAAC;IAKJ;;OAEG;IACO,WAAW,CACnB,SAAiB,EACjB,MAAe,EACf,SAAiB,EACjB,MAAe;QAEf,OAAO,cAAc,IAAI,CAAC,IAAI,aAAa,SAAS,KAAK,MAAM,gBAAgB,SAAS,KAAK,MAAM,GAAG,CAAC;IACzG,CAAC;CACF"}
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=library-error.js.map
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=member-storage.js.map
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=member-with-mnemonic.js.map
@@ -29,7 +29,7 @@ export interface IMultiRecipientChunkHeader {
29
29
  * Recipient header (variable size)
30
30
  */
31
31
  export interface IRecipientHeader {
32
- /** Recipient ID (32 bytes) */
32
+ /** Recipient ID (size determined by ID provider) */
33
33
  id: Uint8Array;
34
34
  /** Encrypted symmetric key size (2 bytes) */
35
35
  keySize: number;
@@ -50,16 +50,40 @@ export interface IMultiRecipientChunk {
50
50
  recipientCount: number;
51
51
  }
52
52
  /**
53
- * Constants for multi-recipient format
53
+ * Multi-recipient format constants structure
54
54
  */
55
- export declare const MULTI_RECIPIENT_CONSTANTS: {
56
- readonly MAGIC: 1297237315;
57
- readonly VERSION: 1;
58
- readonly HEADER_SIZE: 32;
59
- readonly RECIPIENT_ID_SIZE: 32;
60
- readonly KEY_SIZE_BYTES: 2;
61
- readonly FLAG_IS_LAST: 1;
62
- readonly FLAG_HAS_CHECKSUM: 2;
63
- readonly MAX_RECIPIENTS: 65535;
64
- };
55
+ export interface IMultiRecipientConstants {
56
+ readonly MAGIC: number;
57
+ readonly VERSION: number;
58
+ readonly HEADER_SIZE: number;
59
+ readonly RECIPIENT_ID_SIZE: number;
60
+ readonly KEY_SIZE_BYTES: number;
61
+ readonly FLAG_IS_LAST: number;
62
+ readonly FLAG_HAS_CHECKSUM: number;
63
+ readonly MAX_RECIPIENTS: number;
64
+ }
65
+ /**
66
+ * Get multi-recipient constants for a specific recipient ID size.
67
+ * This allows the format to adapt to different ID providers.
68
+ *
69
+ * @param recipientIdSize - The byte length of recipient IDs (from ID provider)
70
+ * @returns Frozen constants object for the multi-recipient format
71
+ *
72
+ * @example
73
+ * ```typescript
74
+ * // For ObjectID (12 bytes)
75
+ * const constants = getMultiRecipientConstants(12);
76
+ *
77
+ * // For GUID (16 bytes)
78
+ * const constants = getMultiRecipientConstants(16);
79
+ * ```
80
+ */
81
+ export declare function getMultiRecipientConstants(recipientIdSize: number): IMultiRecipientConstants;
82
+ /**
83
+ * Default multi-recipient constants using ObjectID size (12 bytes).
84
+ *
85
+ * @deprecated Use getMultiRecipientConstants(config.idProvider.byteLength) instead
86
+ * for dynamic ID size support. This constant is provided for backward compatibility only.
87
+ */
88
+ export declare const MULTI_RECIPIENT_CONSTANTS: IMultiRecipientConstants;
65
89
  //# sourceMappingURL=multi-recipient-chunk.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"multi-recipient-chunk.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/multi-recipient-chunk.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,EAAE,EAAE,UAAU,CAAC;IACf,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,YAAY,EAAE,UAAU,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,IAAI,EAAE,UAAU,CAAC;IACjB,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;CAS5B,CAAC"}
1
+ {"version":3,"file":"multi-recipient-chunk.d.ts","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/multi-recipient-chunk.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,0BAA0B;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oDAAoD;IACpD,EAAE,EAAE,UAAU,CAAC;IACf,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,YAAY,EAAE,UAAU,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,IAAI,EAAE,UAAU,CAAC;IACjB,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,MAAM,GACtB,wBAAwB,CAiB1B;AAED;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,0BAAiC,CAAC"}
@@ -1,4 +1,3 @@
1
- "use strict";
2
1
  /**
3
2
  * Multi-recipient encrypted chunk format
4
3
  *
@@ -7,19 +6,42 @@
7
6
  * - Recipient headers (variable): encrypted symmetric keys for each recipient
8
7
  * - Encrypted data (variable): data encrypted with symmetric key
9
8
  */
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.MULTI_RECIPIENT_CONSTANTS = void 0;
12
9
  /**
13
- * Constants for multi-recipient format
10
+ * Get multi-recipient constants for a specific recipient ID size.
11
+ * This allows the format to adapt to different ID providers.
12
+ *
13
+ * @param recipientIdSize - The byte length of recipient IDs (from ID provider)
14
+ * @returns Frozen constants object for the multi-recipient format
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * // For ObjectID (12 bytes)
19
+ * const constants = getMultiRecipientConstants(12);
20
+ *
21
+ * // For GUID (16 bytes)
22
+ * const constants = getMultiRecipientConstants(16);
23
+ * ```
24
+ */
25
+ export function getMultiRecipientConstants(recipientIdSize) {
26
+ if (!Number.isInteger(recipientIdSize) || recipientIdSize < 1 || recipientIdSize > 255) {
27
+ throw new Error(`Invalid recipientIdSize: ${recipientIdSize}. Must be an integer between 1 and 255.`);
28
+ }
29
+ return Object.freeze({
30
+ MAGIC: 0x4D524543, // "MREC"
31
+ VERSION: 0x0001,
32
+ HEADER_SIZE: 32,
33
+ RECIPIENT_ID_SIZE: recipientIdSize,
34
+ KEY_SIZE_BYTES: 2,
35
+ FLAG_IS_LAST: 0x01,
36
+ FLAG_HAS_CHECKSUM: 0x02,
37
+ MAX_RECIPIENTS: 65535,
38
+ });
39
+ }
40
+ /**
41
+ * Default multi-recipient constants using ObjectID size (12 bytes).
42
+ *
43
+ * @deprecated Use getMultiRecipientConstants(config.idProvider.byteLength) instead
44
+ * for dynamic ID size support. This constant is provided for backward compatibility only.
14
45
  */
15
- exports.MULTI_RECIPIENT_CONSTANTS = {
16
- MAGIC: 0x4D524543, // "MREC"
17
- VERSION: 0x0001,
18
- HEADER_SIZE: 32,
19
- RECIPIENT_ID_SIZE: 32,
20
- KEY_SIZE_BYTES: 2,
21
- FLAG_IS_LAST: 0x01,
22
- FLAG_HAS_CHECKSUM: 0x02,
23
- MAX_RECIPIENTS: 65535,
24
- };
46
+ export const MULTI_RECIPIENT_CONSTANTS = getMultiRecipientConstants(12);
25
47
  //# sourceMappingURL=multi-recipient-chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"multi-recipient-chunk.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/multi-recipient-chunk.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAgDH;;GAEG;AACU,QAAA,yBAAyB,GAAG;IACvC,KAAK,EAAE,UAAU,EAAE,SAAS;IAC5B,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,EAAE;IACf,iBAAiB,EAAE,EAAE;IACrB,cAAc,EAAE,CAAC;IACjB,YAAY,EAAE,IAAI;IAClB,iBAAiB,EAAE,IAAI;IACvB,cAAc,EAAE,KAAK;CACb,CAAC"}
1
+ {"version":3,"file":"multi-recipient-chunk.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/multi-recipient-chunk.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA8DH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,0BAA0B,CACxC,eAAuB;IAEvB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,eAAe,GAAG,CAAC,IAAI,eAAe,GAAG,GAAG,EAAE,CAAC;QACvF,MAAM,IAAI,KAAK,CACb,4BAA4B,eAAe,yCAAyC,CACrF,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,KAAK,EAAE,UAAU,EAAE,SAAS;QAC5B,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,EAAE;QACf,iBAAiB,EAAE,eAAe;QAClC,cAAc,EAAE,CAAC;QACjB,YAAY,EAAE,IAAI;QAClB,iBAAiB,EAAE,IAAI;QACvB,cAAc,EAAE,KAAK;KACtB,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,0BAA0B,CAAC,EAAE,CAAC,CAAC"}
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=pbkdf2-config.js.map
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=pbkdf2-consts.js.map
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=pbkdf2-result.js.map
@@ -1,10 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_STREAM_CONFIG = void 0;
4
1
  /**
5
2
  * Default streaming configuration
6
3
  */
7
- exports.DEFAULT_STREAM_CONFIG = {
4
+ export const DEFAULT_STREAM_CONFIG = {
8
5
  chunkSize: 1024 * 1024, // 1MB
9
6
  includeChecksums: false,
10
7
  };
@@ -1 +1 @@
1
- {"version":3,"file":"stream-config.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/stream-config.ts"],"names":[],"mappings":";;;AAUA;;GAEG;AACU,QAAA,qBAAqB,GAAkB;IAClD,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM;IAC9B,gBAAgB,EAAE,KAAK;CACxB,CAAC"}
1
+ {"version":3,"file":"stream-config.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/stream-config.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAkB;IAClD,SAAS,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM;IAC9B,gBAAgB,EAAE,KAAK;CACxB,CAAC"}
@@ -1,10 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.STREAM_HEADER_CONSTANTS = void 0;
4
1
  /**
5
2
  * Constants for stream header format
6
3
  */
7
- exports.STREAM_HEADER_CONSTANTS = {
4
+ export const STREAM_HEADER_CONSTANTS = {
8
5
  MAGIC: 0x45435354, // "ECST"
9
6
  VERSION: 0x0001,
10
7
  HEADER_SIZE: 128,
@@ -1 +1 @@
1
- {"version":3,"file":"stream-header.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/stream-header.ts"],"names":[],"mappings":";;;AAsBA;;GAEG;AACU,QAAA,uBAAuB,GAAG;IACrC,KAAK,EAAE,UAAU,EAAE,SAAS;IAC5B,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,GAAG;CACR,CAAC"}
1
+ {"version":3,"file":"stream-header.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/interfaces/stream-header.ts"],"names":[],"mappings":"AAsBA;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,KAAK,EAAE,UAAU,EAAE,SAAS;IAC5B,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,GAAG;CACR,CAAC"}
@@ -1,3 +1,2 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ export {};
3
2
  //# sourceMappingURL=stream-progress.js.map
@@ -1,13 +1,10 @@
1
- "use strict";
2
1
  /**
3
2
  * Service Container for dependency injection
4
3
  */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.CryptoContainer = exports.CryptoServiceKey = void 0;
7
- const constants_1 = require("../constants");
8
- const i18n_setup_1 = require("../i18n-setup");
9
- const ecies_string_key_1 = require("../enumerations/ecies-string-key");
10
- var CryptoServiceKey;
4
+ import { Constants } from '../constants';
5
+ import { getEciesI18nEngine, EciesComponentId } from '../i18n-setup';
6
+ import { EciesStringKey } from '../enumerations/ecies-string-key';
7
+ export var CryptoServiceKey;
11
8
  (function (CryptoServiceKey) {
12
9
  CryptoServiceKey["ECIES"] = "ecies";
13
10
  CryptoServiceKey["PBKDF2"] = "pbkdf2";
@@ -15,8 +12,8 @@ var CryptoServiceKey;
15
12
  CryptoServiceKey["PASSWORD_LOGIN"] = "password-login";
16
13
  CryptoServiceKey["FILE"] = "file";
17
14
  CryptoServiceKey["XOR"] = "xor";
18
- })(CryptoServiceKey || (exports.CryptoServiceKey = CryptoServiceKey = {}));
19
- class CryptoContainer {
15
+ })(CryptoServiceKey || (CryptoServiceKey = {}));
16
+ export class CryptoContainer {
20
17
  services = new Map();
21
18
  config;
22
19
  i18n;
@@ -25,13 +22,13 @@ class CryptoContainer {
25
22
  this.i18n = i18n;
26
23
  this.initServices();
27
24
  }
28
- static create(config = constants_1.Constants, i18n) {
29
- return new CryptoContainer(config, i18n || (0, i18n_setup_1.getEciesI18nEngine)());
25
+ static create(config = Constants, i18n) {
26
+ return new CryptoContainer(config, i18n || getEciesI18nEngine());
30
27
  }
31
28
  get(key) {
32
29
  const service = this.services.get(key);
33
30
  if (!service) {
34
- throw new Error(this.i18n.translate(i18n_setup_1.EciesComponentId, ecies_string_key_1.EciesStringKey.Error_Container_ServiceNotFoundTemplate, { service: key }));
31
+ throw new Error(this.i18n.translate(EciesComponentId, EciesStringKey.Error_Container_ServiceNotFoundTemplate, { service: key }));
35
32
  }
36
33
  return service;
37
34
  }
@@ -46,5 +43,4 @@ class CryptoContainer {
46
43
  return this.i18n;
47
44
  }
48
45
  }
49
- exports.CryptoContainer = CryptoContainer;
50
46
  //# sourceMappingURL=crypto-container.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"crypto-container.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/lib/crypto-container.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAIH,4CAAyC;AACzC,8CAAqE;AACrE,uEAAkE;AAElE,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IAC1B,mCAAe,CAAA;IACf,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;IACnB,qDAAiC,CAAA;IACjC,iCAAa,CAAA;IACb,+BAAW,CAAA;AACb,CAAC,EAPW,gBAAgB,gCAAhB,gBAAgB,QAO3B;AAED,MAAa,eAAe;IAClB,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IAChD,MAAM,CAAa;IACnB,IAAI,CAAa;IAEzB,YAAoB,MAAkB,EAAE,IAAgB;QACtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,SAAqB,qBAAS,EAAE,IAAiB;QAC7D,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE,IAAI,IAAI,IAAA,+BAAkB,GAAE,CAAC,CAAC;IACnE,CAAC;IAED,GAAG,CAAI,GAAqB;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,6BAAgB,EAAE,iCAAc,CAAC,uCAAuC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACnI,CAAC;QACD,OAAO,OAAY,CAAC;IACtB,CAAC;IAEO,YAAY;QAClB,gEAAgE;QAChE,wDAAwD;IAC1D,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF;AAnCD,0CAmCC"}
1
+ {"version":3,"file":"crypto-container.js","sourceRoot":"","sources":["../../../../../packages/digitaldefiance-ecies-lib/src/lib/crypto-container.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,CAAN,IAAY,gBAOX;AAPD,WAAY,gBAAgB;IAC1B,mCAAe,CAAA;IACf,qCAAiB,CAAA;IACjB,uCAAmB,CAAA;IACnB,qDAAiC,CAAA;IACjC,iCAAa,CAAA;IACb,+BAAW,CAAA;AACb,CAAC,EAPW,gBAAgB,KAAhB,gBAAgB,QAO3B;AAED,MAAM,OAAO,eAAe;IAClB,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;IAChD,MAAM,CAAa;IACnB,IAAI,CAAa;IAEzB,YAAoB,MAAkB,EAAE,IAAgB;QACtD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,SAAqB,SAAS,EAAE,IAAiB;QAC7D,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE,IAAI,IAAI,kBAAkB,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,GAAG,CAAI,GAAqB;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,cAAc,CAAC,uCAAuC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACnI,CAAC;QACD,OAAO,OAAY,CAAC;IACtB,CAAC;IAEO,YAAY;QAClB,gEAAgE;QAChE,wDAAwD;IAC1D,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;CACF"}