@digitaldefiance/ecies-lib 4.4.2 → 4.4.4

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 (589) hide show
  1. package/LICENSE +21 -0
  2. package/package.json +9 -6
  3. package/src/builders/ecies-builder.ts +39 -0
  4. package/src/builders/{index.js → index.ts} +1 -1
  5. package/src/builders/member-builder.ts +155 -0
  6. package/src/constants.ts +609 -0
  7. package/src/core/errors/crypto-error.ts +78 -0
  8. package/src/core/{index.js → index.ts} +1 -1
  9. package/src/core/types/result.ts +19 -0
  10. package/src/email-string.ts +82 -0
  11. package/src/enumerations/disposed-error-type.ts +11 -0
  12. package/src/enumerations/ecies-cipher-suite.ts +4 -0
  13. package/src/enumerations/ecies-encryption-type.ts +41 -0
  14. package/src/enumerations/ecies-error-type.ts +43 -0
  15. package/src/enumerations/ecies-string-key.ts +205 -0
  16. package/src/enumerations/ecies-version.ts +3 -0
  17. package/src/enumerations/guid-brand-type.ts +26 -0
  18. package/src/enumerations/guid-error-type.ts +6 -0
  19. package/src/enumerations/id-provider-error-type.ts +50 -0
  20. package/src/enumerations/{index.js → index.ts} +0 -1
  21. package/src/enumerations/invalid-email-type.ts +5 -0
  22. package/src/enumerations/length-encoding-type.ts +6 -0
  23. package/src/enumerations/length-error-type.ts +5 -0
  24. package/src/enumerations/member-error-type.ts +106 -0
  25. package/src/enumerations/{member-type.d.ts → member-type.ts} +7 -6
  26. package/src/enumerations/password-login-error-type.ts +4 -0
  27. package/src/enumerations/pbkdf2-error-type.ts +5 -0
  28. package/src/enumerations/pbkdf2-profile.ts +5 -0
  29. package/src/enumerations/secure-storage-error-type.ts +5 -0
  30. package/src/errors/disposed.ts +36 -0
  31. package/src/errors/ecies.ts +153 -0
  32. package/src/errors/guid.ts +130 -0
  33. package/src/errors/id-provider.ts +40 -0
  34. package/src/errors/{index.d.ts → index.ts} +0 -1
  35. package/src/errors/invalid-email.ts +23 -0
  36. package/src/errors/length.ts +19 -0
  37. package/src/errors/member.ts +20 -0
  38. package/src/errors/pbkdf2.ts +20 -0
  39. package/src/errors/secure-storage.ts +17 -0
  40. package/src/errors/simple-ecies.ts +21 -0
  41. package/src/errors/simple-test-error.ts +6 -0
  42. package/src/i18n-setup.ts +130 -0
  43. package/src/{index.js → index.ts} +64 -7
  44. package/src/interfaces/checksum-config.ts +4 -0
  45. package/src/interfaces/checksum-consts.ts +13 -0
  46. package/src/interfaces/configuration-provenance.ts +54 -0
  47. package/src/interfaces/constants.ts +75 -0
  48. package/src/interfaces/ecies-config.ts +8 -0
  49. package/src/interfaces/ecies-consts.ts +74 -0
  50. package/src/interfaces/ecies-file-service.ts +6 -0
  51. package/src/interfaces/encrypted-chunk.ts +64 -0
  52. package/src/interfaces/encryption-state.ts +19 -0
  53. package/src/interfaces/frontend-member-operational.ts +77 -0
  54. package/src/interfaces/guid.ts +86 -0
  55. package/src/interfaces/id-provider.ts +152 -0
  56. package/src/interfaces/{index.d.ts → index.ts} +0 -1
  57. package/src/interfaces/invariant.ts +60 -0
  58. package/src/interfaces/library-error.ts +23 -0
  59. package/src/interfaces/{member-storage.d.ts → member-storage.ts} +11 -10
  60. package/src/interfaces/{member-with-mnemonic.d.ts → member-with-mnemonic.ts} +3 -3
  61. package/src/interfaces/member.ts +84 -0
  62. package/src/interfaces/multi-recipient-chunk.ts +61 -0
  63. package/src/interfaces/pbkdf2-config.ts +6 -0
  64. package/src/interfaces/pbkdf2-consts.ts +10 -0
  65. package/src/interfaces/pbkdf2-result.ts +5 -0
  66. package/src/interfaces/stream-config.ts +17 -0
  67. package/src/interfaces/stream-header.ts +34 -0
  68. package/src/interfaces/stream-progress.ts +31 -0
  69. package/src/lib/configuration-provenance-utils.ts +26 -0
  70. package/src/lib/crypto-container.ts +64 -0
  71. package/src/lib/guid.ts +1097 -0
  72. package/src/lib/id-providers/custom-provider.ts +109 -0
  73. package/src/lib/id-providers/guidv4-provider.ts +141 -0
  74. package/src/lib/id-providers/{index.d.ts → index.ts} +6 -5
  75. package/src/lib/id-providers/objectid-provider.ts +125 -0
  76. package/src/lib/id-providers/uuid-provider.ts +133 -0
  77. package/src/lib/{index.js → index.ts} +2 -2
  78. package/src/lib/invariant-validator.ts +133 -0
  79. package/src/lib/invariants/encryption-algorithm-consistency.ts +73 -0
  80. package/src/lib/invariants/{index.js → index.ts} +0 -1
  81. package/src/lib/invariants/pbkdf2-profiles-validity.ts +78 -0
  82. package/src/lib/invariants/recipient-id-consistency.ts +46 -0
  83. package/src/lib/multi-recipient-chunk-utils.ts +63 -0
  84. package/src/member.ts +495 -0
  85. package/src/{pbkdf2-profiles.d.ts → pbkdf2-profiles.ts} +2 -2
  86. package/src/phone-number.ts +18 -0
  87. package/src/regexes.ts +10 -0
  88. package/src/secure-buffer.ts +226 -0
  89. package/src/secure-string.ts +244 -0
  90. package/src/services/aes-gcm.ts +220 -0
  91. package/src/services/chunk-processor.ts +188 -0
  92. package/src/services/ecies/README.md +147 -0
  93. package/src/services/ecies/crypto-core.ts +292 -0
  94. package/src/services/ecies/example.ts +185 -0
  95. package/src/services/ecies/file.ts +167 -0
  96. package/src/services/ecies/{index.js → index.ts} +2 -1
  97. package/src/services/ecies/integration.ts +241 -0
  98. package/src/services/ecies/interfaces.ts +62 -0
  99. package/src/services/ecies/manual-test.ts +219 -0
  100. package/src/services/ecies/multi-recipient.ts +545 -0
  101. package/src/services/ecies/service.ts +370 -0
  102. package/src/services/ecies/signature.ts +93 -0
  103. package/src/services/ecies/single-recipient.ts +476 -0
  104. package/src/services/encryption-stream.ts +435 -0
  105. package/src/services/{index.js → index.ts} +0 -1
  106. package/src/services/multi-recipient-processor.ts +377 -0
  107. package/src/services/password-login.ts +226 -0
  108. package/src/services/pbkdf2.ts +169 -0
  109. package/src/services/progress-tracker.ts +128 -0
  110. package/src/services/resumable-encryption.ts +135 -0
  111. package/src/services/xor.ts +65 -0
  112. package/src/test-mocks/index.ts +1 -0
  113. package/src/test-mocks/mock-frontend-member.ts +276 -0
  114. package/src/{testing.js → testing.ts} +0 -1
  115. package/src/translations/{de.js → de.ts} +112 -56
  116. package/src/translations/{en-US.js → en-US.ts} +116 -58
  117. package/src/translations/{es.js → es.ts} +134 -67
  118. package/src/translations/{fr.js → fr.ts} +129 -64
  119. package/src/translations/{ja.js → ja.ts} +111 -55
  120. package/src/translations/{uk.js → uk.ts} +132 -67
  121. package/src/translations/{zh-cn.js → zh-cn.ts} +60 -29
  122. package/src/types/deep-partial.ts +11 -0
  123. package/src/{types.d.ts → types.ts} +15 -7
  124. package/src/utils/encryption-type-utils.ts +76 -0
  125. package/src/utils.ts +329 -0
  126. package/src/builders/ecies-builder.d.ts +0 -18
  127. package/src/builders/ecies-builder.d.ts.map +0 -1
  128. package/src/builders/ecies-builder.js +0 -30
  129. package/src/builders/ecies-builder.js.map +0 -1
  130. package/src/builders/index.d.ts +0 -6
  131. package/src/builders/index.d.ts.map +0 -1
  132. package/src/builders/index.js.map +0 -1
  133. package/src/builders/member-builder.d.ts +0 -51
  134. package/src/builders/member-builder.d.ts.map +0 -1
  135. package/src/builders/member-builder.js +0 -97
  136. package/src/builders/member-builder.js.map +0 -1
  137. package/src/constants.d.ts +0 -60
  138. package/src/constants.d.ts.map +0 -1
  139. package/src/constants.js +0 -446
  140. package/src/constants.js.map +0 -1
  141. package/src/core/errors/crypto-error.d.ts +0 -34
  142. package/src/core/errors/crypto-error.d.ts.map +0 -1
  143. package/src/core/errors/crypto-error.js +0 -56
  144. package/src/core/errors/crypto-error.js.map +0 -1
  145. package/src/core/index.d.ts +0 -6
  146. package/src/core/index.d.ts.map +0 -1
  147. package/src/core/index.js.map +0 -1
  148. package/src/core/types/result.d.ts +0 -16
  149. package/src/core/types/result.d.ts.map +0 -1
  150. package/src/core/types/result.js +0 -12
  151. package/src/core/types/result.js.map +0 -1
  152. package/src/email-string.d.ts +0 -42
  153. package/src/email-string.d.ts.map +0 -1
  154. package/src/email-string.js +0 -67
  155. package/src/email-string.js.map +0 -1
  156. package/src/enumerations/disposed-error-type.d.ts +0 -12
  157. package/src/enumerations/disposed-error-type.d.ts.map +0 -1
  158. package/src/enumerations/disposed-error-type.js +0 -13
  159. package/src/enumerations/disposed-error-type.js.map +0 -1
  160. package/src/enumerations/ecies-cipher-suite.d.ts +0 -4
  161. package/src/enumerations/ecies-cipher-suite.d.ts.map +0 -1
  162. package/src/enumerations/ecies-cipher-suite.js +0 -6
  163. package/src/enumerations/ecies-cipher-suite.js.map +0 -1
  164. package/src/enumerations/ecies-encryption-type.d.ts +0 -11
  165. package/src/enumerations/ecies-encryption-type.d.ts.map +0 -1
  166. package/src/enumerations/ecies-encryption-type.js +0 -27
  167. package/src/enumerations/ecies-encryption-type.js.map +0 -1
  168. package/src/enumerations/ecies-error-type.d.ts +0 -44
  169. package/src/enumerations/ecies-error-type.d.ts.map +0 -1
  170. package/src/enumerations/ecies-error-type.js +0 -45
  171. package/src/enumerations/ecies-error-type.js.map +0 -1
  172. package/src/enumerations/ecies-string-key.d.ts +0 -192
  173. package/src/enumerations/ecies-string-key.d.ts.map +0 -1
  174. package/src/enumerations/ecies-string-key.js +0 -199
  175. package/src/enumerations/ecies-string-key.js.map +0 -1
  176. package/src/enumerations/ecies-version.d.ts +0 -4
  177. package/src/enumerations/ecies-version.d.ts.map +0 -1
  178. package/src/enumerations/ecies-version.js +0 -5
  179. package/src/enumerations/ecies-version.js.map +0 -1
  180. package/src/enumerations/guid-brand-type.d.ts +0 -27
  181. package/src/enumerations/guid-brand-type.d.ts.map +0 -1
  182. package/src/enumerations/guid-brand-type.js +0 -28
  183. package/src/enumerations/guid-brand-type.js.map +0 -1
  184. package/src/enumerations/guid-error-type.d.ts +0 -7
  185. package/src/enumerations/guid-error-type.d.ts.map +0 -1
  186. package/src/enumerations/guid-error-type.js +0 -8
  187. package/src/enumerations/guid-error-type.js.map +0 -1
  188. package/src/enumerations/id-provider-error-type.d.ts +0 -43
  189. package/src/enumerations/id-provider-error-type.d.ts.map +0 -1
  190. package/src/enumerations/id-provider-error-type.js +0 -44
  191. package/src/enumerations/id-provider-error-type.js.map +0 -1
  192. package/src/enumerations/index.d.ts +0 -18
  193. package/src/enumerations/index.d.ts.map +0 -1
  194. package/src/enumerations/index.js.map +0 -1
  195. package/src/enumerations/invalid-email-type.d.ts +0 -6
  196. package/src/enumerations/invalid-email-type.d.ts.map +0 -1
  197. package/src/enumerations/invalid-email-type.js +0 -7
  198. package/src/enumerations/invalid-email-type.js.map +0 -1
  199. package/src/enumerations/length-encoding-type.d.ts +0 -7
  200. package/src/enumerations/length-encoding-type.d.ts.map +0 -1
  201. package/src/enumerations/length-encoding-type.js +0 -8
  202. package/src/enumerations/length-encoding-type.js.map +0 -1
  203. package/src/enumerations/length-error-type.d.ts +0 -6
  204. package/src/enumerations/length-error-type.d.ts.map +0 -1
  205. package/src/enumerations/length-error-type.js +0 -7
  206. package/src/enumerations/length-error-type.js.map +0 -1
  207. package/src/enumerations/member-error-type.d.ts +0 -87
  208. package/src/enumerations/member-error-type.d.ts.map +0 -1
  209. package/src/enumerations/member-error-type.js +0 -88
  210. package/src/enumerations/member-error-type.js.map +0 -1
  211. package/src/enumerations/member-type.d.ts.map +0 -1
  212. package/src/enumerations/member-type.js +0 -16
  213. package/src/enumerations/member-type.js.map +0 -1
  214. package/src/enumerations/password-login-error-type.d.ts +0 -5
  215. package/src/enumerations/password-login-error-type.d.ts.map +0 -1
  216. package/src/enumerations/password-login-error-type.js +0 -6
  217. package/src/enumerations/password-login-error-type.js.map +0 -1
  218. package/src/enumerations/pbkdf2-error-type.d.ts +0 -6
  219. package/src/enumerations/pbkdf2-error-type.d.ts.map +0 -1
  220. package/src/enumerations/pbkdf2-error-type.js +0 -7
  221. package/src/enumerations/pbkdf2-error-type.js.map +0 -1
  222. package/src/enumerations/pbkdf2-profile.d.ts +0 -6
  223. package/src/enumerations/pbkdf2-profile.d.ts.map +0 -1
  224. package/src/enumerations/pbkdf2-profile.js +0 -7
  225. package/src/enumerations/pbkdf2-profile.js.map +0 -1
  226. package/src/enumerations/secure-storage-error-type.d.ts +0 -6
  227. package/src/enumerations/secure-storage-error-type.d.ts.map +0 -1
  228. package/src/enumerations/secure-storage-error-type.js +0 -7
  229. package/src/enumerations/secure-storage-error-type.js.map +0 -1
  230. package/src/errors/disposed.d.ts +0 -22
  231. package/src/errors/disposed.d.ts.map +0 -1
  232. package/src/errors/disposed.js +0 -28
  233. package/src/errors/disposed.js.map +0 -1
  234. package/src/errors/ecies.d.ts +0 -52
  235. package/src/errors/ecies.d.ts.map +0 -1
  236. package/src/errors/ecies.js +0 -78
  237. package/src/errors/ecies.js.map +0 -1
  238. package/src/errors/guid.d.ts +0 -49
  239. package/src/errors/guid.d.ts.map +0 -1
  240. package/src/errors/guid.js +0 -96
  241. package/src/errors/guid.js.map +0 -1
  242. package/src/errors/id-provider.d.ts +0 -23
  243. package/src/errors/id-provider.d.ts.map +0 -1
  244. package/src/errors/id-provider.js +0 -29
  245. package/src/errors/id-provider.js.map +0 -1
  246. package/src/errors/index.d.ts.map +0 -1
  247. package/src/errors/index.js +0 -10
  248. package/src/errors/index.js.map +0 -1
  249. package/src/errors/invalid-email.d.ts +0 -8
  250. package/src/errors/invalid-email.d.ts.map +0 -1
  251. package/src/errors/invalid-email.js +0 -15
  252. package/src/errors/invalid-email.js.map +0 -1
  253. package/src/errors/length.d.ts +0 -7
  254. package/src/errors/length.d.ts.map +0 -1
  255. package/src/errors/length.js +0 -11
  256. package/src/errors/length.js.map +0 -1
  257. package/src/errors/member.d.ts +0 -7
  258. package/src/errors/member.d.ts.map +0 -1
  259. package/src/errors/member.js +0 -11
  260. package/src/errors/member.js.map +0 -1
  261. package/src/errors/pbkdf2.d.ts +0 -7
  262. package/src/errors/pbkdf2.d.ts.map +0 -1
  263. package/src/errors/pbkdf2.js +0 -11
  264. package/src/errors/pbkdf2.js.map +0 -1
  265. package/src/errors/secure-storage.d.ts +0 -7
  266. package/src/errors/secure-storage.d.ts.map +0 -1
  267. package/src/errors/secure-storage.js +0 -12
  268. package/src/errors/secure-storage.js.map +0 -1
  269. package/src/errors/simple-ecies.d.ts +0 -6
  270. package/src/errors/simple-ecies.d.ts.map +0 -1
  271. package/src/errors/simple-ecies.js +0 -12
  272. package/src/errors/simple-ecies.js.map +0 -1
  273. package/src/errors/simple-test-error.d.ts +0 -4
  274. package/src/errors/simple-test-error.d.ts.map +0 -1
  275. package/src/errors/simple-test-error.js +0 -7
  276. package/src/errors/simple-test-error.js.map +0 -1
  277. package/src/i18n-setup.d.ts +0 -32
  278. package/src/i18n-setup.d.ts.map +0 -1
  279. package/src/i18n-setup.js +0 -101
  280. package/src/i18n-setup.js.map +0 -1
  281. package/src/index.d.ts +0 -80
  282. package/src/index.d.ts.map +0 -1
  283. package/src/index.js.map +0 -1
  284. package/src/interfaces/checksum-config.d.ts +0 -5
  285. package/src/interfaces/checksum-config.d.ts.map +0 -1
  286. package/src/interfaces/checksum-config.js +0 -2
  287. package/src/interfaces/checksum-config.js.map +0 -1
  288. package/src/interfaces/checksum-consts.d.ts +0 -11
  289. package/src/interfaces/checksum-consts.d.ts.map +0 -1
  290. package/src/interfaces/checksum-consts.js +0 -2
  291. package/src/interfaces/checksum-consts.js.map +0 -1
  292. package/src/interfaces/configuration-provenance.d.ts +0 -43
  293. package/src/interfaces/configuration-provenance.d.ts.map +0 -1
  294. package/src/interfaces/configuration-provenance.js +0 -3
  295. package/src/interfaces/configuration-provenance.js.map +0 -1
  296. package/src/interfaces/constants.d.ts +0 -70
  297. package/src/interfaces/constants.d.ts.map +0 -1
  298. package/src/interfaces/constants.js +0 -2
  299. package/src/interfaces/constants.js.map +0 -1
  300. package/src/interfaces/ecies-config.d.ts +0 -9
  301. package/src/interfaces/ecies-config.d.ts.map +0 -1
  302. package/src/interfaces/ecies-config.js +0 -2
  303. package/src/interfaces/ecies-config.js.map +0 -1
  304. package/src/interfaces/ecies-consts.d.ts +0 -61
  305. package/src/interfaces/ecies-consts.d.ts.map +0 -1
  306. package/src/interfaces/ecies-consts.js +0 -2
  307. package/src/interfaces/ecies-consts.js.map +0 -1
  308. package/src/interfaces/ecies-file-service.d.ts +0 -7
  309. package/src/interfaces/ecies-file-service.d.ts.map +0 -1
  310. package/src/interfaces/ecies-file-service.js +0 -2
  311. package/src/interfaces/ecies-file-service.js.map +0 -1
  312. package/src/interfaces/encrypted-chunk.d.ts +0 -55
  313. package/src/interfaces/encrypted-chunk.d.ts.map +0 -1
  314. package/src/interfaces/encrypted-chunk.js +0 -12
  315. package/src/interfaces/encrypted-chunk.js.map +0 -1
  316. package/src/interfaces/encryption-state.d.ts +0 -18
  317. package/src/interfaces/encryption-state.d.ts.map +0 -1
  318. package/src/interfaces/encryption-state.js +0 -2
  319. package/src/interfaces/encryption-state.js.map +0 -1
  320. package/src/interfaces/frontend-member-operational.d.ts +0 -51
  321. package/src/interfaces/frontend-member-operational.d.ts.map +0 -1
  322. package/src/interfaces/frontend-member-operational.js +0 -2
  323. package/src/interfaces/frontend-member-operational.js.map +0 -1
  324. package/src/interfaces/guid.d.ts +0 -78
  325. package/src/interfaces/guid.d.ts.map +0 -1
  326. package/src/interfaces/guid.js +0 -2
  327. package/src/interfaces/guid.js.map +0 -1
  328. package/src/interfaces/id-provider.d.ts +0 -107
  329. package/src/interfaces/id-provider.d.ts.map +0 -1
  330. package/src/interfaces/id-provider.js +0 -52
  331. package/src/interfaces/id-provider.js.map +0 -1
  332. package/src/interfaces/index.d.ts.map +0 -1
  333. package/src/interfaces/index.js +0 -13
  334. package/src/interfaces/index.js.map +0 -1
  335. package/src/interfaces/invariant.d.ts +0 -46
  336. package/src/interfaces/invariant.d.ts.map +0 -1
  337. package/src/interfaces/invariant.js +0 -18
  338. package/src/interfaces/invariant.js.map +0 -1
  339. package/src/interfaces/library-error.d.ts +0 -23
  340. package/src/interfaces/library-error.d.ts.map +0 -1
  341. package/src/interfaces/library-error.js +0 -2
  342. package/src/interfaces/library-error.js.map +0 -1
  343. package/src/interfaces/member-storage.d.ts.map +0 -1
  344. package/src/interfaces/member-storage.js +0 -2
  345. package/src/interfaces/member-storage.js.map +0 -1
  346. package/src/interfaces/member-with-mnemonic.d.ts.map +0 -1
  347. package/src/interfaces/member-with-mnemonic.js +0 -2
  348. package/src/interfaces/member-with-mnemonic.js.map +0 -1
  349. package/src/interfaces/member.d.ts +0 -55
  350. package/src/interfaces/member.d.ts.map +0 -1
  351. package/src/interfaces/member.js +0 -2
  352. package/src/interfaces/member.js.map +0 -1
  353. package/src/interfaces/multi-recipient-chunk.d.ts +0 -54
  354. package/src/interfaces/multi-recipient-chunk.d.ts.map +0 -1
  355. package/src/interfaces/multi-recipient-chunk.js +0 -11
  356. package/src/interfaces/multi-recipient-chunk.js.map +0 -1
  357. package/src/interfaces/pbkdf2-config.d.ts +0 -7
  358. package/src/interfaces/pbkdf2-config.d.ts.map +0 -1
  359. package/src/interfaces/pbkdf2-config.js +0 -2
  360. package/src/interfaces/pbkdf2-config.js.map +0 -1
  361. package/src/interfaces/pbkdf2-consts.d.ts +0 -9
  362. package/src/interfaces/pbkdf2-consts.d.ts.map +0 -1
  363. package/src/interfaces/pbkdf2-consts.js +0 -2
  364. package/src/interfaces/pbkdf2-consts.js.map +0 -1
  365. package/src/interfaces/pbkdf2-result.d.ts +0 -6
  366. package/src/interfaces/pbkdf2-result.d.ts.map +0 -1
  367. package/src/interfaces/pbkdf2-result.js +0 -2
  368. package/src/interfaces/pbkdf2-result.js.map +0 -1
  369. package/src/interfaces/stream-config.d.ts +0 -14
  370. package/src/interfaces/stream-config.d.ts.map +0 -1
  371. package/src/interfaces/stream-config.js +0 -8
  372. package/src/interfaces/stream-config.js.map +0 -1
  373. package/src/interfaces/stream-header.d.ts +0 -29
  374. package/src/interfaces/stream-header.d.ts.map +0 -1
  375. package/src/interfaces/stream-header.js +0 -9
  376. package/src/interfaces/stream-header.js.map +0 -1
  377. package/src/interfaces/stream-progress.d.ts +0 -33
  378. package/src/interfaces/stream-progress.d.ts.map +0 -1
  379. package/src/interfaces/stream-progress.js +0 -2
  380. package/src/interfaces/stream-progress.js.map +0 -1
  381. package/src/lib/configuration-provenance-utils.d.ts +0 -11
  382. package/src/lib/configuration-provenance-utils.d.ts.map +0 -1
  383. package/src/lib/configuration-provenance-utils.js +0 -23
  384. package/src/lib/configuration-provenance-utils.js.map +0 -1
  385. package/src/lib/crypto-container.d.ts +0 -25
  386. package/src/lib/crypto-container.d.ts.map +0 -1
  387. package/src/lib/crypto-container.js +0 -46
  388. package/src/lib/crypto-container.js.map +0 -1
  389. package/src/lib/guid.d.ts +0 -344
  390. package/src/lib/guid.d.ts.map +0 -1
  391. package/src/lib/guid.js +0 -914
  392. package/src/lib/guid.js.map +0 -1
  393. package/src/lib/id-providers/custom-provider.d.ts +0 -46
  394. package/src/lib/id-providers/custom-provider.d.ts.map +0 -1
  395. package/src/lib/id-providers/custom-provider.js +0 -85
  396. package/src/lib/id-providers/custom-provider.js.map +0 -1
  397. package/src/lib/id-providers/guidv4-provider.d.ts +0 -56
  398. package/src/lib/id-providers/guidv4-provider.d.ts.map +0 -1
  399. package/src/lib/id-providers/guidv4-provider.js +0 -122
  400. package/src/lib/id-providers/guidv4-provider.js.map +0 -1
  401. package/src/lib/id-providers/index.d.ts.map +0 -1
  402. package/src/lib/id-providers/index.js +0 -29
  403. package/src/lib/id-providers/index.js.map +0 -1
  404. package/src/lib/id-providers/objectid-provider.d.ts +0 -43
  405. package/src/lib/id-providers/objectid-provider.d.ts.map +0 -1
  406. package/src/lib/id-providers/objectid-provider.js +0 -104
  407. package/src/lib/id-providers/objectid-provider.js.map +0 -1
  408. package/src/lib/id-providers/uuid-provider.d.ts +0 -52
  409. package/src/lib/id-providers/uuid-provider.d.ts.map +0 -1
  410. package/src/lib/id-providers/uuid-provider.js +0 -110
  411. package/src/lib/id-providers/uuid-provider.js.map +0 -1
  412. package/src/lib/index.d.ts +0 -6
  413. package/src/lib/index.d.ts.map +0 -1
  414. package/src/lib/index.js.map +0 -1
  415. package/src/lib/invariant-validator.d.ts +0 -59
  416. package/src/lib/invariant-validator.d.ts.map +0 -1
  417. package/src/lib/invariant-validator.js +0 -97
  418. package/src/lib/invariant-validator.js.map +0 -1
  419. package/src/lib/invariants/encryption-algorithm-consistency.d.ts +0 -17
  420. package/src/lib/invariants/encryption-algorithm-consistency.d.ts.map +0 -1
  421. package/src/lib/invariants/encryption-algorithm-consistency.js +0 -49
  422. package/src/lib/invariants/encryption-algorithm-consistency.js.map +0 -1
  423. package/src/lib/invariants/index.d.ts +0 -4
  424. package/src/lib/invariants/index.d.ts.map +0 -1
  425. package/src/lib/invariants/index.js.map +0 -1
  426. package/src/lib/invariants/pbkdf2-profiles-validity.d.ts +0 -16
  427. package/src/lib/invariants/pbkdf2-profiles-validity.d.ts.map +0 -1
  428. package/src/lib/invariants/pbkdf2-profiles-validity.js +0 -58
  429. package/src/lib/invariants/pbkdf2-profiles-validity.js.map +0 -1
  430. package/src/lib/invariants/recipient-id-consistency.d.ts +0 -18
  431. package/src/lib/invariants/recipient-id-consistency.d.ts.map +0 -1
  432. package/src/lib/invariants/recipient-id-consistency.js +0 -31
  433. package/src/lib/invariants/recipient-id-consistency.js.map +0 -1
  434. package/src/lib/multi-recipient-chunk-utils.d.ts +0 -38
  435. package/src/lib/multi-recipient-chunk-utils.d.ts.map +0 -1
  436. package/src/lib/multi-recipient-chunk-utils.js +0 -41
  437. package/src/lib/multi-recipient-chunk-utils.js.map +0 -1
  438. package/src/member.d.ts +0 -92
  439. package/src/member.d.ts.map +0 -1
  440. package/src/member.js +0 -322
  441. package/src/member.js.map +0 -1
  442. package/src/pbkdf2-profiles.d.ts.map +0 -1
  443. package/src/pbkdf2-profiles.js +0 -2
  444. package/src/pbkdf2-profiles.js.map +0 -1
  445. package/src/phone-number.d.ts +0 -6
  446. package/src/phone-number.d.ts.map +0 -1
  447. package/src/phone-number.js +0 -18
  448. package/src/phone-number.js.map +0 -1
  449. package/src/regexes.d.ts +0 -7
  450. package/src/regexes.d.ts.map +0 -1
  451. package/src/regexes.js +0 -7
  452. package/src/regexes.js.map +0 -1
  453. package/src/secure-buffer.d.ts +0 -61
  454. package/src/secure-buffer.d.ts.map +0 -1
  455. package/src/secure-buffer.js +0 -201
  456. package/src/secure-buffer.js.map +0 -1
  457. package/src/secure-string.d.ts +0 -46
  458. package/src/secure-string.d.ts.map +0 -1
  459. package/src/secure-string.js +0 -206
  460. package/src/secure-string.js.map +0 -1
  461. package/src/services/aes-gcm.d.ts +0 -57
  462. package/src/services/aes-gcm.d.ts.map +0 -1
  463. package/src/services/aes-gcm.js +0 -142
  464. package/src/services/aes-gcm.js.map +0 -1
  465. package/src/services/chunk-processor.d.ts +0 -31
  466. package/src/services/chunk-processor.d.ts.map +0 -1
  467. package/src/services/chunk-processor.js +0 -145
  468. package/src/services/chunk-processor.js.map +0 -1
  469. package/src/services/ecies/crypto-core.d.ts +0 -72
  470. package/src/services/ecies/crypto-core.d.ts.map +0 -1
  471. package/src/services/ecies/crypto-core.js +0 -205
  472. package/src/services/ecies/crypto-core.js.map +0 -1
  473. package/src/services/ecies/example.d.ts +0 -25
  474. package/src/services/ecies/example.d.ts.map +0 -1
  475. package/src/services/ecies/example.js +0 -121
  476. package/src/services/ecies/example.js.map +0 -1
  477. package/src/services/ecies/file.d.ts +0 -18
  478. package/src/services/ecies/file.d.ts.map +0 -1
  479. package/src/services/ecies/file.js +0 -106
  480. package/src/services/ecies/file.js.map +0 -1
  481. package/src/services/ecies/index.d.ts +0 -38
  482. package/src/services/ecies/index.d.ts.map +0 -1
  483. package/src/services/ecies/index.js.map +0 -1
  484. package/src/services/ecies/integration.d.ts +0 -59
  485. package/src/services/ecies/integration.d.ts.map +0 -1
  486. package/src/services/ecies/integration.js +0 -167
  487. package/src/services/ecies/integration.js.map +0 -1
  488. package/src/services/ecies/interfaces.d.ts +0 -54
  489. package/src/services/ecies/interfaces.d.ts.map +0 -1
  490. package/src/services/ecies/interfaces.js +0 -5
  491. package/src/services/ecies/interfaces.js.map +0 -1
  492. package/src/services/ecies/manual-test.d.ts +0 -29
  493. package/src/services/ecies/manual-test.d.ts.map +0 -1
  494. package/src/services/ecies/manual-test.js +0 -163
  495. package/src/services/ecies/manual-test.js.map +0 -1
  496. package/src/services/ecies/multi-recipient.d.ts +0 -56
  497. package/src/services/ecies/multi-recipient.d.ts.map +0 -1
  498. package/src/services/ecies/multi-recipient.js +0 -344
  499. package/src/services/ecies/multi-recipient.js.map +0 -1
  500. package/src/services/ecies/service.d.ts +0 -120
  501. package/src/services/ecies/service.d.ts.map +0 -1
  502. package/src/services/ecies/service.js +0 -210
  503. package/src/services/ecies/service.js.map +0 -1
  504. package/src/services/ecies/signature.d.ts +0 -27
  505. package/src/services/ecies/signature.d.ts.map +0 -1
  506. package/src/services/ecies/signature.js +0 -72
  507. package/src/services/ecies/signature.js.map +0 -1
  508. package/src/services/ecies/single-recipient.d.ts +0 -46
  509. package/src/services/ecies/single-recipient.d.ts.map +0 -1
  510. package/src/services/ecies/single-recipient.js +0 -322
  511. package/src/services/ecies/single-recipient.js.map +0 -1
  512. package/src/services/encryption-stream.d.ts +0 -71
  513. package/src/services/encryption-stream.d.ts.map +0 -1
  514. package/src/services/encryption-stream.js +0 -295
  515. package/src/services/encryption-stream.js.map +0 -1
  516. package/src/services/index.d.ts +0 -11
  517. package/src/services/index.d.ts.map +0 -1
  518. package/src/services/index.js.map +0 -1
  519. package/src/services/multi-recipient-processor.d.ts +0 -35
  520. package/src/services/multi-recipient-processor.d.ts.map +0 -1
  521. package/src/services/multi-recipient-processor.js +0 -289
  522. package/src/services/multi-recipient-processor.js.map +0 -1
  523. package/src/services/password-login.d.ts +0 -47
  524. package/src/services/password-login.d.ts.map +0 -1
  525. package/src/services/password-login.js +0 -115
  526. package/src/services/password-login.js.map +0 -1
  527. package/src/services/pbkdf2.d.ts +0 -54
  528. package/src/services/pbkdf2.d.ts.map +0 -1
  529. package/src/services/pbkdf2.js +0 -108
  530. package/src/services/pbkdf2.js.map +0 -1
  531. package/src/services/progress-tracker.d.ts +0 -23
  532. package/src/services/progress-tracker.d.ts.map +0 -1
  533. package/src/services/progress-tracker.js +0 -103
  534. package/src/services/progress-tracker.js.map +0 -1
  535. package/src/services/resumable-encryption.d.ts +0 -19
  536. package/src/services/resumable-encryption.d.ts.map +0 -1
  537. package/src/services/resumable-encryption.js +0 -105
  538. package/src/services/resumable-encryption.js.map +0 -1
  539. package/src/services/xor.d.ts +0 -37
  540. package/src/services/xor.d.ts.map +0 -1
  541. package/src/services/xor.js +0 -63
  542. package/src/services/xor.js.map +0 -1
  543. package/src/test-mocks/index.d.ts +0 -2
  544. package/src/test-mocks/index.d.ts.map +0 -1
  545. package/src/test-mocks/index.js +0 -2
  546. package/src/test-mocks/index.js.map +0 -1
  547. package/src/test-mocks/mock-frontend-member.d.ts +0 -85
  548. package/src/test-mocks/mock-frontend-member.d.ts.map +0 -1
  549. package/src/test-mocks/mock-frontend-member.js +0 -190
  550. package/src/test-mocks/mock-frontend-member.js.map +0 -1
  551. package/src/testing.d.ts +0 -2
  552. package/src/testing.d.ts.map +0 -1
  553. package/src/testing.js.map +0 -1
  554. package/src/translations/de.d.ts +0 -4
  555. package/src/translations/de.d.ts.map +0 -1
  556. package/src/translations/de.js.map +0 -1
  557. package/src/translations/en-US.d.ts +0 -4
  558. package/src/translations/en-US.d.ts.map +0 -1
  559. package/src/translations/en-US.js.map +0 -1
  560. package/src/translations/es.d.ts +0 -4
  561. package/src/translations/es.d.ts.map +0 -1
  562. package/src/translations/es.js.map +0 -1
  563. package/src/translations/fr.d.ts +0 -4
  564. package/src/translations/fr.d.ts.map +0 -1
  565. package/src/translations/fr.js.map +0 -1
  566. package/src/translations/ja.d.ts +0 -4
  567. package/src/translations/ja.d.ts.map +0 -1
  568. package/src/translations/ja.js.map +0 -1
  569. package/src/translations/uk.d.ts +0 -4
  570. package/src/translations/uk.d.ts.map +0 -1
  571. package/src/translations/uk.js.map +0 -1
  572. package/src/translations/zh-cn.d.ts +0 -4
  573. package/src/translations/zh-cn.d.ts.map +0 -1
  574. package/src/translations/zh-cn.js.map +0 -1
  575. package/src/types/deep-partial.d.ts +0 -4
  576. package/src/types/deep-partial.d.ts.map +0 -1
  577. package/src/types/deep-partial.js +0 -2
  578. package/src/types/deep-partial.js.map +0 -1
  579. package/src/types.d.ts.map +0 -1
  580. package/src/types.js +0 -2
  581. package/src/types.js.map +0 -1
  582. package/src/utils/encryption-type-utils.d.ts +0 -29
  583. package/src/utils/encryption-type-utils.d.ts.map +0 -1
  584. package/src/utils/encryption-type-utils.js +0 -61
  585. package/src/utils/encryption-type-utils.js.map +0 -1
  586. package/src/utils.d.ts +0 -68
  587. package/src/utils.d.ts.map +0 -1
  588. package/src/utils.js +0 -273
  589. package/src/utils.js.map +0 -1
@@ -0,0 +1,109 @@
1
+ import { BaseIdProvider } from '../../interfaces/id-provider';
2
+ import { randomBytes } from 'crypto';
3
+ import { IdProviderError } from '../../errors/id-provider';
4
+ import { IdProviderErrorType } from '../../enumerations/id-provider-error-type';
5
+
6
+ /**
7
+ * Custom ID provider that accepts any fixed byte length.
8
+ *
9
+ * Use this when you need a non-standard ID size or custom validation logic.
10
+ * For standard formats, prefer ObjectIdProvider, GuidV4Provider, or UuidProvider.
11
+ *
12
+ * Example:
13
+ * ```typescript
14
+ * // 20-byte SHA-1 hash as recipient ID
15
+ * const provider = new CustomIdProvider(20, 'SHA1Hash');
16
+ * ```
17
+ */
18
+ export class CustomIdProvider extends BaseIdProvider {
19
+ readonly byteLength: number;
20
+ readonly name: string;
21
+
22
+ constructor(byteLength: number, name = 'Custom') {
23
+ super();
24
+
25
+ if (!Number.isInteger(byteLength) || byteLength < 1 || byteLength > 255) {
26
+ throw new IdProviderError(
27
+ IdProviderErrorType.InvalidByteLengthParameter,
28
+ undefined,
29
+ undefined,
30
+ { value: byteLength }
31
+ );
32
+ }
33
+
34
+ this.byteLength = byteLength;
35
+ this.name = name;
36
+ }
37
+
38
+ /**
39
+ * Generate a new random ID of the specified byte length.
40
+ */
41
+ generate(): Uint8Array {
42
+ return randomBytes(this.byteLength);
43
+ }
44
+
45
+ /**
46
+ * Validate an ID buffer.
47
+ * Only checks length - override this method for custom validation.
48
+ */
49
+ validate(id: Uint8Array): boolean {
50
+ return id.length === this.byteLength;
51
+ }
52
+
53
+ /**
54
+ * Serialize to hexadecimal string.
55
+ */
56
+ serialize(id: Uint8Array): string {
57
+ this.validateLength(id, `${this.name}.serialize`);
58
+
59
+ return Array.from(id)
60
+ .map(b => b.toString(16).padStart(2, '0'))
61
+ .join('');
62
+ }
63
+
64
+ /**
65
+ * Deserialize a hexadecimal string to buffer.
66
+ */
67
+ deserialize(str: string): Uint8Array {
68
+ if (typeof str !== 'string') {
69
+ throw new IdProviderError(IdProviderErrorType.InputMustBeString);
70
+ }
71
+
72
+ const expectedLength = this.byteLength * 2;
73
+ if (str.length !== expectedLength) {
74
+ throw new IdProviderError(
75
+ IdProviderErrorType.InvalidStringLength,
76
+ undefined,
77
+ undefined,
78
+ { expected: expectedLength, actual: str.length }
79
+ );
80
+ }
81
+
82
+ if (!/^[0-9a-fA-F]+$/.test(str)) {
83
+ throw new IdProviderError(IdProviderErrorType.InvalidCharacters);
84
+ }
85
+
86
+ const buffer = new Uint8Array(this.byteLength);
87
+ for (let i = 0; i < this.byteLength; i++) {
88
+ buffer[i] = parseInt(str.substr(i * 2, 2), 16);
89
+ }
90
+
91
+ return buffer;
92
+ }
93
+
94
+ /**
95
+ * Convert an ID of unknown type to a string representation.
96
+ * Delegates to base implementation.
97
+ */
98
+ override idToString(id: unknown): string {
99
+ return super.idToString(id);
100
+ }
101
+
102
+ /**
103
+ * Convert a string representation of an ID back to an ID buffer.
104
+ * Delegates to deserialize.
105
+ */
106
+ override idFromString(str: string): Uint8Array {
107
+ return this.deserialize(str);
108
+ }
109
+ }
@@ -0,0 +1,141 @@
1
+ import { BaseIdProvider } from '../../interfaces/id-provider';
2
+ import { GuidV4 } from '../guid';
3
+ import { IdProviderError } from '../../errors/id-provider';
4
+ import { IdProviderErrorType } from '../../enumerations/id-provider-error-type';
5
+
6
+ /**
7
+ * ID provider for GUIDv4 (16 bytes raw, 24 bytes base64).
8
+ *
9
+ * Uses the GuidV4 class which provides RFC 4122 compliant v4 GUIDs.
10
+ * The raw binary representation is 16 bytes (128 bits).
11
+ *
12
+ * Serialization uses base64 for compactness (24 characters vs 36 for hex with dashes).
13
+ */
14
+ export class GuidV4Provider extends BaseIdProvider {
15
+ readonly byteLength = 16;
16
+ readonly name = 'GUIDv4';
17
+
18
+ /**
19
+ * Generate a new random GUIDv4.
20
+ */
21
+ generate(): Uint8Array {
22
+ const guid = GuidV4.generate();
23
+ return guid.asRawGuidBufferUnsafe;
24
+ }
25
+
26
+ /**
27
+ * Validate a GUID buffer.
28
+ * Checks length and RFC 4122 v4 compliance.
29
+ */
30
+ validate(id: Uint8Array): boolean {
31
+ if (id.length !== this.byteLength) {
32
+ return false;
33
+ }
34
+
35
+ try {
36
+ // Convert to GuidV4 and validate
37
+ const guid = new GuidV4(Buffer.from(id));
38
+ return guid.isValidV4();
39
+ } catch {
40
+ return false;
41
+ }
42
+ }
43
+
44
+ /**
45
+ * Serialize GUID to base64 string (24 characters).
46
+ */
47
+ serialize(id: Uint8Array): string {
48
+ this.validateLength(id, 'GuidV4Provider.serialize');
49
+
50
+ try {
51
+ const guid = new GuidV4(Buffer.from(id));
52
+ return guid.asBase64Guid;
53
+ } catch (error) {
54
+ throw new IdProviderError(
55
+ IdProviderErrorType.InvalidGuidBuffer,
56
+ { cause: error instanceof Error ? error : undefined },
57
+ undefined,
58
+ { message: error instanceof Error ? error.message : String(error) }
59
+ );
60
+ }
61
+ }
62
+
63
+ /**
64
+ * Deserialize a base64 or hex GUID string to buffer.
65
+ * Accepts multiple formats: base64 (24 chars), short hex (32 chars), full hex (36 chars).
66
+ */
67
+ deserialize(str: string): Uint8Array {
68
+ if (typeof str !== 'string') {
69
+ throw new IdProviderError(IdProviderErrorType.InputMustBeString);
70
+ }
71
+
72
+ try {
73
+ const guid = GuidV4.parse(str);
74
+ return guid.asRawGuidBufferUnsafe;
75
+ } catch (error) {
76
+ throw new IdProviderError(
77
+ IdProviderErrorType.ParseFailed,
78
+ { cause: error instanceof Error ? error : undefined },
79
+ undefined,
80
+ { input: str, message: error instanceof Error ? error.message : String(error) }
81
+ );
82
+ }
83
+ }
84
+
85
+ /**
86
+ * Create a GUID from a namespace and name (v5 - SHA-1 based).
87
+ * Useful for deterministic GUIDs.
88
+ */
89
+ fromNamespace(namespace: string, name: string): Uint8Array {
90
+ const guid = GuidV4.v5(name, namespace);
91
+ return guid.asRawGuidBufferUnsafe;
92
+ }
93
+
94
+ /**
95
+ * Get the GUID version from a buffer.
96
+ * Should return 4 for valid v4 GUIDs.
97
+ */
98
+ getVersion(id: Uint8Array): number | undefined {
99
+ this.validateLength(id, 'GuidV4Provider.getVersion');
100
+
101
+ try {
102
+ const guid = new GuidV4(Buffer.from(id));
103
+ return guid.getVersion();
104
+ } catch {
105
+ return undefined;
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Check if a GUID is the empty/nil GUID (all zeros).
111
+ */
112
+ isEmpty(id: Uint8Array): boolean {
113
+ this.validateLength(id, 'GuidV4Provider.isEmpty');
114
+
115
+ try {
116
+ const guid = new GuidV4(Buffer.from(id));
117
+ return guid.isEmpty();
118
+ } catch {
119
+ return false;
120
+ }
121
+ }
122
+
123
+ /**
124
+ * Convert an ID of unknown type to a string representation.
125
+ * Handles Uint8Array, GuidV4 instances, and falls back to String().
126
+ */
127
+ override idToString(id: unknown): string {
128
+ if (id instanceof GuidV4) {
129
+ return id.asBase64Guid;
130
+ }
131
+ return super.idToString(id);
132
+ }
133
+
134
+ /**
135
+ * Convert a string representation of an ID back to an ID buffer.
136
+ * Delegates to deserialize.
137
+ */
138
+ override idFromString(str: string): Uint8Array {
139
+ return this.deserialize(str);
140
+ }
141
+ }
@@ -1,30 +1,31 @@
1
1
  /**
2
2
  * ID Providers for recipient identification in multi-recipient encryption.
3
- *
3
+ *
4
4
  * The library supports multiple ID formats to accommodate different use cases:
5
5
  * - ObjectID: MongoDB/BSON ObjectID (12 bytes)
6
6
  * - GUIDv4: RFC 4122 v4 GUID (16 bytes, base64 serialization)
7
7
  * - UUID: RFC 4122 v4 UUID (16 bytes, standard format with dashes)
8
8
  * - Legacy32Byte: Backward compatible 32-byte IDs (deprecated)
9
9
  * - Custom: User-defined byte length and validation
10
- *
10
+ *
11
11
  * @example
12
12
  * ```typescript
13
13
  * import { ObjectIdProvider, GuidV4Provider } from './lib/id-providers';
14
- *
14
+ *
15
15
  * // Use MongoDB ObjectIDs (12 bytes)
16
16
  * const objectIdProvider = new ObjectIdProvider();
17
17
  * const id = objectIdProvider.generate();
18
- *
18
+ *
19
19
  * // Use GUIDs (16 bytes)
20
20
  * const guidProvider = new GuidV4Provider();
21
21
  * const guid = guidProvider.generate();
22
22
  * ```
23
23
  */
24
+
24
25
  export { ObjectIdProvider } from './objectid-provider';
25
26
  export { GuidV4Provider } from './guidv4-provider';
26
27
  export { UuidProvider } from './uuid-provider';
27
28
  export { CustomIdProvider } from './custom-provider';
29
+
28
30
  export type { IIdProvider } from '../../interfaces/id-provider';
29
31
  export { BaseIdProvider } from '../../interfaces/id-provider';
30
- //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,125 @@
1
+ import { BaseIdProvider } from '../../interfaces/id-provider';
2
+ import { ObjectId } from 'bson';
3
+ import { IdProviderError } from '../../errors/id-provider';
4
+ import { IdProviderErrorType } from '../../enumerations/id-provider-error-type';
5
+
6
+ /**
7
+ * ID provider for MongoDB/BSON ObjectIDs (12 bytes).
8
+ *
9
+ * Format: 4-byte timestamp + 5-byte random + 3-byte counter
10
+ * This matches the MongoDB ObjectID specification.
11
+ *
12
+ * @see https://docs.mongodb.com/manual/reference/method/ObjectId/
13
+ */
14
+ export class ObjectIdProvider extends BaseIdProvider {
15
+ readonly byteLength = 12;
16
+ readonly name = 'ObjectID';
17
+
18
+ constructor() {
19
+ super();
20
+ }
21
+
22
+ /**
23
+ * Generate a new MongoDB-style ObjectID.
24
+ * Format: [timestamp:4][random:5][counter:3]
25
+ */
26
+ generate(): Uint8Array {
27
+ const buffer = new Uint8Array(12);
28
+ const objectId = new ObjectId();
29
+
30
+ if (typeof objectId.id === 'string') {
31
+ const hex = objectId.id as string;
32
+ for (let i = 0; i < 12; i++) {
33
+ buffer[i] = parseInt(hex.substring(i * 2, (i * 2) + 2), 16);
34
+ }
35
+ } else {
36
+ buffer.set(objectId.id, 0);
37
+ }
38
+
39
+ return buffer;
40
+ }
41
+
42
+ /**
43
+ * Validate an ObjectID buffer.
44
+ * Checks length and ensures it's not all zeros (invalid ObjectID).
45
+ */
46
+ validate(id: Uint8Array): boolean {
47
+ if (id.length !== this.byteLength) {
48
+ return false;
49
+ }
50
+
51
+ // Check if all bytes are zero (invalid ObjectID)
52
+ let allZeros = true;
53
+ for (let i = 0; i < id.length; i++) {
54
+ if (id[i] !== 0) {
55
+ allZeros = false;
56
+ break;
57
+ }
58
+ }
59
+
60
+ return !allZeros;
61
+ }
62
+
63
+ /**
64
+ * Serialize ObjectID to 24-character hex string (MongoDB standard).
65
+ */
66
+ serialize(id: Uint8Array): string {
67
+ this.validateLength(id, 'ObjectIdProvider.serialize');
68
+
69
+ return Array.from(id)
70
+ .map(b => b.toString(16).padStart(2, '0'))
71
+ .join('');
72
+ }
73
+
74
+ /**
75
+ * Deserialize a 24-character hex string to ObjectID buffer.
76
+ */
77
+ deserialize(str: string): Uint8Array {
78
+ if (typeof str !== 'string') {
79
+ throw new IdProviderError(IdProviderErrorType.InputMustBeString);
80
+ }
81
+
82
+ if (str.length !== 24) {
83
+ throw new IdProviderError(
84
+ IdProviderErrorType.InvalidStringLength,
85
+ undefined,
86
+ undefined,
87
+ { expected: 24, actual: str.length }
88
+ );
89
+ }
90
+
91
+ if (!/^[0-9a-fA-F]{24}$/.test(str)) {
92
+ throw new IdProviderError(IdProviderErrorType.InvalidCharacters);
93
+ }
94
+
95
+ const buffer = new Uint8Array(12);
96
+ for (let i = 0; i < 12; i++) {
97
+ buffer[i] = parseInt(str.substr(i * 2, 2), 16);
98
+ }
99
+
100
+ if (!this.validate(buffer)) {
101
+ throw new IdProviderError(IdProviderErrorType.InvalidDeserializedId);
102
+ }
103
+
104
+ return buffer;
105
+ }
106
+
107
+ /**
108
+ * Convert an ID of unknown type to a string representation.
109
+ * Handles Uint8Array, ObjectId instances, and falls back to String().
110
+ */
111
+ override idToString(id: unknown): string {
112
+ if (id instanceof ObjectId) {
113
+ return id.toHexString();
114
+ }
115
+ return super.idToString(id);
116
+ }
117
+
118
+ /**
119
+ * Convert a string representation of an ID back to an ID buffer.
120
+ * Delegates to deserialize.
121
+ */
122
+ override idFromString(str: string): Uint8Array {
123
+ return this.deserialize(str);
124
+ }
125
+ }
@@ -0,0 +1,133 @@
1
+ import { BaseIdProvider } from '../../interfaces/id-provider';
2
+ import { v4 as uuidv4, validate as uuidValidate, parse as uuidParse } from 'uuid';
3
+ import { IdProviderError } from '../../errors/id-provider';
4
+ import { IdProviderErrorType } from '../../enumerations/id-provider-error-type';
5
+
6
+ /**
7
+ * ID provider for standard RFC 4122 UUIDs (16 bytes).
8
+ *
9
+ * Uses the 'uuid' npm package for UUID generation and validation.
10
+ * Serialization uses the standard UUID format with dashes (36 characters).
11
+ *
12
+ * This is functionally similar to GuidV4Provider but uses standard UUID
13
+ * string formatting (with dashes) instead of base64.
14
+ */
15
+ export class UuidProvider extends BaseIdProvider {
16
+ readonly byteLength = 16;
17
+ readonly name = 'UUID';
18
+
19
+ /**
20
+ * Generate a new random UUIDv4.
21
+ */
22
+ generate(): Uint8Array {
23
+ const buffer = new Uint8Array(16);
24
+ uuidv4(undefined, buffer);
25
+ return buffer;
26
+ }
27
+
28
+ /**
29
+ * Validate a UUID buffer.
30
+ * Checks length and RFC 4122 compliance.
31
+ */
32
+ validate(id: Uint8Array): boolean {
33
+ if (id.length !== this.byteLength) {
34
+ return false;
35
+ }
36
+
37
+ try {
38
+ // Convert to string and validate
39
+ const str = this.serialize(id);
40
+ return uuidValidate(str);
41
+ } catch {
42
+ return false;
43
+ }
44
+ }
45
+
46
+ /**
47
+ * Serialize UUID to standard format with dashes (36 characters).
48
+ * Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
49
+ */
50
+ serialize(id: Uint8Array): string {
51
+ this.validateLength(id, 'UuidProvider.serialize');
52
+
53
+ const hex = Array.from(id)
54
+ .map(b => b.toString(16).padStart(2, '0'))
55
+ .join('');
56
+
57
+ // Insert dashes at proper positions
58
+ return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
59
+ }
60
+
61
+ /**
62
+ * Deserialize a UUID string (with or without dashes) to buffer.
63
+ */
64
+ deserialize(str: string): Uint8Array {
65
+ if (typeof str !== 'string') {
66
+ throw new IdProviderError(IdProviderErrorType.InputMustBeString);
67
+ }
68
+
69
+ // Validate format
70
+ if (!uuidValidate(str)) {
71
+ throw new IdProviderError(
72
+ IdProviderErrorType.InvalidUuidFormat,
73
+ undefined,
74
+ undefined,
75
+ { input: str }
76
+ );
77
+ }
78
+
79
+ try {
80
+ const buffer = uuidParse(str);
81
+ return buffer;
82
+ } catch (error) {
83
+ throw new IdProviderError(
84
+ IdProviderErrorType.ParseFailed,
85
+ { cause: error instanceof Error ? error : undefined },
86
+ undefined,
87
+ { input: str, message: error instanceof Error ? error.message : String(error) }
88
+ );
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Extract the version from a UUID buffer.
94
+ * Should return 4 for v4 UUIDs.
95
+ */
96
+ getVersion(id: Uint8Array): number | undefined {
97
+ this.validateLength(id, 'UuidProvider.getVersion');
98
+
99
+ // Version is in the most significant 4 bits of byte 6
100
+ const versionByte = id[6];
101
+ return (versionByte >> 4) & 0x0F;
102
+ }
103
+
104
+ /**
105
+ * Check if a UUID is the nil UUID (all zeros).
106
+ */
107
+ isNil(id: Uint8Array): boolean {
108
+ this.validateLength(id, 'UuidProvider.isNil');
109
+
110
+ for (let i = 0; i < id.length; i++) {
111
+ if (id[i] !== 0) {
112
+ return false;
113
+ }
114
+ }
115
+ return true;
116
+ }
117
+
118
+ /**
119
+ * Convert an ID of unknown type to a string representation.
120
+ * Delegates to base implementation.
121
+ */
122
+ override idToString(id: unknown): string {
123
+ return super.idToString(id);
124
+ }
125
+
126
+ /**
127
+ * Convert a string representation of an ID back to an ID buffer.
128
+ * Delegates to deserialize.
129
+ */
130
+ override idFromString(str: string): Uint8Array {
131
+ return this.deserialize(str);
132
+ }
133
+ }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Library exports for v2 architecture
3
3
  */
4
+
4
5
  export * from './crypto-container';
5
- export * from './guid';
6
- //# sourceMappingURL=index.js.map
6
+ export * from './guid';
@@ -0,0 +1,133 @@
1
+ import { IConstants } from '../interfaces/constants';
2
+ import { IInvariant } from '../interfaces/invariant';
3
+ import {
4
+ RecipientIdConsistencyInvariant,
5
+ Pbkdf2ProfilesValidityInvariant,
6
+ EncryptionAlgorithmConsistencyInvariant,
7
+ } from './invariants';
8
+ import { EciesComponentId, getEciesI18nEngine } from '../i18n-setup';
9
+ import { EciesStringKey } from '../enumerations/ecies-string-key';
10
+ import { TranslatableGenericError } from '@digitaldefiance/i18n-lib';
11
+
12
+ /**
13
+ * Validates all configuration invariants.
14
+ *
15
+ * This class maintains a registry of all invariants and validates them
16
+ * whenever a configuration is created or modified.
17
+ *
18
+ * Adding new invariants is easy - just:
19
+ * 1. Create a class implementing IInvariant
20
+ * 2. Add it to the DEFAULT_INVARIANTS array
21
+ * 3. Tests will automatically validate it
22
+ */
23
+ export class InvariantValidator {
24
+ /**
25
+ * Default invariants that are always checked
26
+ */
27
+ private static readonly DEFAULT_INVARIANTS: IInvariant[] = [
28
+ new RecipientIdConsistencyInvariant(),
29
+ new Pbkdf2ProfilesValidityInvariant(),
30
+ new EncryptionAlgorithmConsistencyInvariant(),
31
+ ];
32
+
33
+ /**
34
+ * Custom invariants registered at runtime
35
+ */
36
+ private static customInvariants: IInvariant[] = [];
37
+
38
+ /**
39
+ * Register a custom invariant to be checked alongside default invariants
40
+ */
41
+ static registerInvariant(invariant: IInvariant): void {
42
+ this.customInvariants.push(invariant);
43
+ }
44
+
45
+ /**
46
+ * Clear all custom invariants (useful for testing)
47
+ */
48
+ static clearCustomInvariants(): void {
49
+ this.customInvariants = [];
50
+ }
51
+
52
+ /**
53
+ * Get all invariants (default + custom)
54
+ */
55
+ static getAllInvariants(): readonly IInvariant[] {
56
+ return [...this.DEFAULT_INVARIANTS, ...this.customInvariants];
57
+ }
58
+
59
+ /**
60
+ * Validate all invariants for a given configuration
61
+ *
62
+ * @param config The configuration to validate
63
+ * @throws Error if any invariant fails
64
+ */
65
+ static validateAll(config: IConstants): void {
66
+ const allInvariants = this.getAllInvariants();
67
+ const failures: string[] = [];
68
+
69
+ for (const invariant of allInvariants) {
70
+ if (!invariant.check(config)) {
71
+ failures.push(invariant.errorMessage(config));
72
+ }
73
+ }
74
+
75
+ if (failures.length > 0) {
76
+ const engine = getEciesI18nEngine();
77
+ throw TranslatableGenericError.withEngine(
78
+ engine,
79
+ EciesComponentId,
80
+ EciesStringKey.Error_Invariant_ConfigurationValidationFailedMultipleTemplate,
81
+ { count: failures.length, failures: failures.join('\n\n') },
82
+ undefined,
83
+ { invariantCount: failures.length }
84
+ );
85
+ }
86
+ }
87
+
88
+ /**
89
+ * Check a single invariant
90
+ *
91
+ * @param config The configuration to validate
92
+ * @param invariantName Name of the invariant to check
93
+ * @returns true if invariant passes, false otherwise
94
+ */
95
+ static checkInvariant(config: IConstants, invariantName: string): boolean {
96
+ const invariant = this.getAllInvariants().find(i => i.name === invariantName);
97
+ if (!invariant) {
98
+ const engine = getEciesI18nEngine();
99
+ throw TranslatableGenericError.withEngine(
100
+ engine,
101
+ EciesComponentId,
102
+ EciesStringKey.Error_Invariant_UnknownInvariantTemplate,
103
+ { name: invariantName },
104
+ undefined,
105
+ { invariantName }
106
+ );
107
+ }
108
+ return invariant.check(config);
109
+ }
110
+
111
+ /**
112
+ * Get failure details for a specific invariant
113
+ *
114
+ * @param config The configuration to validate
115
+ * @param invariantName Name of the invariant to check
116
+ * @returns Error message if invariant fails, null if it passes
117
+ */
118
+ static getFailureDetails(config: IConstants, invariantName: string): string | null {
119
+ const invariant = this.getAllInvariants().find(i => i.name === invariantName);
120
+ if (!invariant) {
121
+ const engine = getEciesI18nEngine();
122
+ throw TranslatableGenericError.withEngine(
123
+ engine,
124
+ EciesComponentId,
125
+ EciesStringKey.Error_Invariant_UnknownInvariantTemplate,
126
+ { name: invariantName },
127
+ undefined,
128
+ { invariantName }
129
+ );
130
+ }
131
+ return invariant.check(config) ? null : invariant.errorMessage(config);
132
+ }
133
+ }