@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
package/src/member.ts ADDED
@@ -0,0 +1,495 @@
1
+ import { Wallet } from '@ethereumjs/wallet';
2
+ import { Constants, ECIES } from './constants';
3
+ import { EmailString } from './email-string';
4
+ import MemberErrorType from './enumerations/member-error-type';
5
+ import MemberType from './enumerations/member-type';
6
+ import { MemberError } from './errors/member';
7
+ import { IECIESConstants } from './interfaces/ecies-consts';
8
+ import { IEncryptedChunk } from './interfaces/encrypted-chunk';
9
+ import { IFrontendMemberOperational } from './interfaces/frontend-member-operational';
10
+ import { IMember } from './interfaces/member';
11
+ import { IMemberStorageData } from './interfaces/member-storage';
12
+ import { IMemberWithMnemonic } from './interfaces/member-with-mnemonic';
13
+ import { SecureBuffer } from './secure-buffer';
14
+ import { SecureString } from './secure-string';
15
+ import { ECIESService } from './services/ecies/service';
16
+ import { EncryptionStream } from './services/encryption-stream';
17
+ import { SignatureUint8Array } from './types';
18
+ import {
19
+ base64ToUint8Array,
20
+ uint8ArrayToBase64,
21
+ uint8ArrayToHex,
22
+ } from './utils';
23
+
24
+ /**
25
+ * Represents a member with cryptographic capabilities.
26
+ * This class provides methods for signing, verifying, encrypting, and decrypting data.
27
+ * It also manages the member's keys and wallet.
28
+ */
29
+ export class Member implements IMember, IFrontendMemberOperational<Uint8Array> {
30
+ private readonly _eciesService: ECIESService;
31
+ private readonly _id: Uint8Array;
32
+ private readonly _type: MemberType;
33
+ private readonly _name: string;
34
+ private readonly _email: EmailString;
35
+ private readonly _publicKey: Uint8Array;
36
+ private readonly _creatorId: Uint8Array;
37
+ private readonly _dateCreated: Date;
38
+ private readonly _dateUpdated: Date;
39
+ private _privateKey?: SecureBuffer;
40
+ private _wallet?: Wallet;
41
+
42
+ constructor(
43
+ // Add injected services as parameters
44
+ eciesService: ECIESService,
45
+ // Original parameters
46
+ type: MemberType,
47
+ name: string,
48
+ email: EmailString,
49
+ publicKey: Uint8Array,
50
+ privateKey?: SecureBuffer,
51
+ wallet?: Wallet,
52
+ id?: Uint8Array,
53
+ dateCreated?: Date,
54
+ dateUpdated?: Date,
55
+ creatorId?: Uint8Array,
56
+ ) {
57
+ // Assign injected services
58
+ this._eciesService = eciesService;
59
+ // Assign original parameters
60
+ this._type = type;
61
+ this._id = id ?? Constants.idProvider.generate();
62
+ this._name = name;
63
+ if (!this._name || this._name.length == 0) {
64
+ throw new MemberError(MemberErrorType.MissingMemberName);
65
+ }
66
+ if (this._name.trim() != this._name) {
67
+ throw new MemberError(MemberErrorType.InvalidMemberNameWhitespace);
68
+ }
69
+ this._email = email;
70
+ this._publicKey = publicKey;
71
+ this._privateKey = privateKey;
72
+ this._wallet = wallet;
73
+
74
+ // don't create a new date object with nearly identical values to the existing one
75
+ let _now: null | Date = null;
76
+ const now = function () {
77
+ if (!_now) {
78
+ _now = new Date();
79
+ }
80
+ return _now;
81
+ };
82
+ this._dateCreated = dateCreated ?? now();
83
+ this._dateUpdated = dateUpdated ?? now();
84
+ this._creatorId = creatorId ?? this._id;
85
+ }
86
+
87
+ // Required getters
88
+ public get id(): Uint8Array {
89
+ return this._id;
90
+ }
91
+ public get type(): MemberType {
92
+ return this._type;
93
+ }
94
+ public get name(): string {
95
+ return this._name;
96
+ }
97
+ public get email(): EmailString {
98
+ return this._email;
99
+ }
100
+ public get publicKey(): Uint8Array {
101
+ return this._publicKey;
102
+ }
103
+ public get creatorId(): Uint8Array {
104
+ return this._creatorId;
105
+ }
106
+ public get dateCreated(): Date {
107
+ return this._dateCreated;
108
+ }
109
+ public get dateUpdated(): Date {
110
+ return this._dateUpdated;
111
+ }
112
+
113
+ // Optional private data getters
114
+ public get privateKey(): SecureBuffer | undefined {
115
+ return this._privateKey;
116
+ }
117
+ public get wallet(): Wallet {
118
+ if (!this._wallet) {
119
+ throw new MemberError(MemberErrorType.NoWallet);
120
+ }
121
+ return this._wallet;
122
+ }
123
+
124
+ // State getters
125
+ public get hasPrivateKey(): boolean {
126
+ return this._privateKey !== undefined;
127
+ }
128
+
129
+ public unloadPrivateKey(): void {
130
+ // Do not dispose here; tests expect the same SecureBuffer instance to remain usable
131
+ // when reloaded into another member in the same process.
132
+ this._privateKey = undefined;
133
+ }
134
+
135
+ public unloadWallet(): void {
136
+ this._wallet = undefined;
137
+ }
138
+
139
+ public unloadWalletAndPrivateKey(): void {
140
+ this.unloadWallet();
141
+ this.unloadPrivateKey();
142
+ }
143
+
144
+ public loadWallet(
145
+ mnemonic: SecureString,
146
+ eciesParams?: IECIESConstants,
147
+ ): void {
148
+ if (this._wallet) {
149
+ throw new MemberError(MemberErrorType.WalletAlreadyLoaded);
150
+ }
151
+ const eciesConsts = eciesParams ?? ECIES;
152
+ const { wallet } = this._eciesService.walletAndSeedFromMnemonic(mnemonic);
153
+ const privateKey = wallet.getPrivateKey();
154
+ // Use service to get compressed public key
155
+ const publicKey = this._eciesService.getPublicKey(privateKey);
156
+
157
+ if (uint8ArrayToHex(publicKey) !== uint8ArrayToHex(this._publicKey)) {
158
+ throw new MemberError(MemberErrorType.InvalidMnemonic);
159
+ }
160
+ this._wallet = wallet;
161
+ this._privateKey?.dispose();
162
+ this._privateKey = new SecureBuffer(privateKey);
163
+ }
164
+
165
+ /**
166
+ * Loads the private key and optionally the voting private key.
167
+ *
168
+ * @param privateKey The private key to load.
169
+ * @param votingPrivateKey The voting private key to load.
170
+ */
171
+ public loadPrivateKey(privateKey: SecureBuffer): void {
172
+ this._privateKey = privateKey;
173
+ }
174
+
175
+ public sign(data: Uint8Array): SignatureUint8Array {
176
+ if (!this._privateKey) {
177
+ throw new MemberError(MemberErrorType.MissingPrivateKey);
178
+ }
179
+ return this._eciesService.signMessage(this._privateKey.value, data);
180
+ }
181
+
182
+ public signData(data: Uint8Array): SignatureUint8Array {
183
+ if (!this._privateKey) {
184
+ throw new MemberError(MemberErrorType.MissingPrivateKey);
185
+ }
186
+ return this._eciesService.signMessage(
187
+ new Uint8Array(this._privateKey.value),
188
+ data,
189
+ );
190
+ }
191
+
192
+ public verify(signature: SignatureUint8Array, data: Uint8Array): boolean {
193
+ return this._eciesService.verifyMessage(this._publicKey, data, signature);
194
+ }
195
+
196
+ public verifySignature(
197
+ data: Uint8Array,
198
+ signature: Uint8Array,
199
+ publicKey: Uint8Array,
200
+ ): boolean {
201
+ return this._eciesService.verifyMessage(
202
+ publicKey,
203
+ data,
204
+ signature as SignatureUint8Array,
205
+ );
206
+ }
207
+
208
+ private static readonly MAX_ENCRYPTION_SIZE = 1024 * 1024 * 10; // 10MB limit
209
+ private static readonly VALID_STRING_REGEX = /^[\x20-\x7E\n\r\t]*$/; // Printable ASCII + common whitespace
210
+
211
+ /**
212
+ * Encrypt data stream (for large data)
213
+ */
214
+ async *encryptDataStream(
215
+ source: AsyncIterable<Uint8Array> | ReadableStream<Uint8Array>,
216
+ options?: {
217
+ recipientPublicKey?: Uint8Array;
218
+ onProgress?: (progress: {
219
+ bytesProcessed: number;
220
+ chunksProcessed: number;
221
+ }) => void;
222
+ signal?: AbortSignal;
223
+ },
224
+ ): AsyncGenerator<IEncryptedChunk, void, unknown> {
225
+ if (!this._privateKey && !options?.recipientPublicKey) {
226
+ throw new MemberError(MemberErrorType.MissingPrivateKey);
227
+ }
228
+
229
+ const targetPublicKey = options?.recipientPublicKey || this._publicKey;
230
+ const stream = new EncryptionStream(this._eciesService);
231
+
232
+ // Convert ReadableStream to AsyncIterable if needed
233
+ const asyncSource =
234
+ 'getReader' in source
235
+ ? this.readableStreamToAsyncIterable(
236
+ source as ReadableStream<Uint8Array>,
237
+ )
238
+ : (source as AsyncIterable<Uint8Array>);
239
+
240
+ let bytesProcessed = 0;
241
+ let chunksProcessed = 0;
242
+
243
+ for await (const chunk of stream.encryptStream(
244
+ asyncSource,
245
+ targetPublicKey,
246
+ {
247
+ signal: options?.signal,
248
+ },
249
+ )) {
250
+ bytesProcessed += chunk.metadata?.originalSize || 0;
251
+ chunksProcessed++;
252
+
253
+ if (options?.onProgress) {
254
+ options.onProgress({ bytesProcessed, chunksProcessed });
255
+ }
256
+
257
+ yield chunk;
258
+ }
259
+ }
260
+
261
+ /**
262
+ * Decrypt data stream (for large data)
263
+ */
264
+ async *decryptDataStream(
265
+ source: AsyncIterable<Uint8Array> | ReadableStream<Uint8Array>,
266
+ options?: {
267
+ onProgress?: (progress: {
268
+ bytesProcessed: number;
269
+ chunksProcessed: number;
270
+ }) => void;
271
+ signal?: AbortSignal;
272
+ },
273
+ ): AsyncGenerator<Uint8Array, void, unknown> {
274
+ if (!this._privateKey) {
275
+ throw new MemberError(MemberErrorType.MissingPrivateKey);
276
+ }
277
+
278
+ const stream = new EncryptionStream(this._eciesService);
279
+
280
+ // Convert ReadableStream to AsyncIterable if needed
281
+ const asyncSource =
282
+ 'getReader' in source
283
+ ? this.readableStreamToAsyncIterable(
284
+ source as ReadableStream<Uint8Array>,
285
+ )
286
+ : (source as AsyncIterable<Uint8Array>);
287
+
288
+ let bytesProcessed = 0;
289
+ let chunksProcessed = 0;
290
+
291
+ for await (const chunk of stream.decryptStream(
292
+ asyncSource,
293
+ new Uint8Array(this._privateKey.value),
294
+ { signal: options?.signal },
295
+ )) {
296
+ bytesProcessed += chunk.length;
297
+ chunksProcessed++;
298
+
299
+ if (options?.onProgress) {
300
+ options.onProgress({ bytesProcessed, chunksProcessed });
301
+ }
302
+
303
+ yield chunk;
304
+ }
305
+ }
306
+
307
+ /**
308
+ * Convert ReadableStream to AsyncIterable
309
+ */
310
+ private async *readableStreamToAsyncIterable(
311
+ stream: ReadableStream<Uint8Array>,
312
+ ): AsyncIterable<Uint8Array> {
313
+ const reader = stream.getReader();
314
+ try {
315
+ while (true) {
316
+ const { done, value } = await reader.read();
317
+ if (done) break;
318
+ yield value;
319
+ }
320
+ } finally {
321
+ reader.releaseLock();
322
+ }
323
+ }
324
+
325
+ public async encryptData(
326
+ data: string | Uint8Array,
327
+ recipientPublicKey?: Uint8Array,
328
+ ): Promise<Uint8Array> {
329
+ // Validate input
330
+ if (!data) {
331
+ throw new MemberError(MemberErrorType.MissingEncryptionData);
332
+ }
333
+
334
+ // Check size limit
335
+ const arr: Uint8Array =
336
+ data instanceof Uint8Array ? data : new TextEncoder().encode(data);
337
+ if (arr.length > Member.MAX_ENCRYPTION_SIZE) {
338
+ throw new MemberError(MemberErrorType.EncryptionDataTooLarge);
339
+ }
340
+
341
+ // Use recipient public key or self public key
342
+ const targetPublicKey = recipientPublicKey || this._publicKey;
343
+
344
+ return await this._eciesService.encryptSimpleOrSingle(
345
+ false,
346
+ targetPublicKey,
347
+ arr,
348
+ );
349
+ }
350
+
351
+ public async decryptData(encryptedData: Uint8Array): Promise<Uint8Array> {
352
+ if (!this._privateKey) {
353
+ throw new MemberError(MemberErrorType.MissingPrivateKey);
354
+ }
355
+ // decryptSingleWithHeader now returns the Uint8Array directly
356
+ return await this._eciesService.decryptSimpleOrSingleWithHeader(
357
+ false,
358
+ new Uint8Array(this._privateKey.value),
359
+ encryptedData,
360
+ );
361
+ }
362
+
363
+ public toJson(): string {
364
+ const storage: IMemberStorageData = {
365
+ id: Constants.idProvider.serialize(this._id),
366
+ type: this._type,
367
+ name: this._name,
368
+ email: this._email.toString(),
369
+ publicKey: uint8ArrayToBase64(this._publicKey),
370
+ creatorId: Constants.idProvider.serialize(this._creatorId),
371
+ dateCreated: this._dateCreated.toISOString(),
372
+ dateUpdated: this._dateUpdated.toISOString(),
373
+ };
374
+ return JSON.stringify(storage);
375
+ }
376
+
377
+ public dispose(): void {
378
+ // Ensure secret material is zeroized when disposing
379
+ try {
380
+ this._privateKey?.dispose();
381
+ } finally {
382
+ this.unloadWalletAndPrivateKey();
383
+ }
384
+ }
385
+
386
+ public static fromJson(
387
+ json: string,
388
+ // Add injected services as parameters
389
+ eciesService: ECIESService,
390
+ ): Member {
391
+ let storage: IMemberStorageData;
392
+ try {
393
+ storage = JSON.parse(json);
394
+ } catch (error) {
395
+ throw new MemberError(MemberErrorType.InvalidMemberData);
396
+ }
397
+ const email = new EmailString(storage.email);
398
+
399
+ // Pass injected services to constructor
400
+ const dateCreated = new Date(storage.dateCreated);
401
+ return new Member(
402
+ eciesService,
403
+ storage.type,
404
+ storage.name,
405
+ email,
406
+ base64ToUint8Array(storage.publicKey),
407
+ undefined,
408
+ undefined,
409
+ Constants.idProvider.deserialize(storage.id),
410
+ dateCreated,
411
+ new Date(storage.dateUpdated),
412
+ Constants.idProvider.deserialize(storage.creatorId),
413
+ );
414
+ }
415
+
416
+ public static fromMnemonic(
417
+ mnemonic: SecureString,
418
+ eciesService: ECIESService,
419
+ eciesParams?: IECIESConstants,
420
+ name = 'Test User',
421
+ email = new EmailString('test@example.com'),
422
+ ): Member {
423
+ const eciesConsts = eciesParams ?? ECIES;
424
+ const { wallet } = eciesService.walletAndSeedFromMnemonic(mnemonic);
425
+ const privateKey = wallet.getPrivateKey();
426
+ // Use service to get compressed public key
427
+ const publicKey = eciesService.getPublicKey(privateKey);
428
+
429
+ return new Member(
430
+ eciesService,
431
+ MemberType.User,
432
+ name,
433
+ email,
434
+ publicKey,
435
+ new SecureBuffer(privateKey),
436
+ wallet,
437
+ );
438
+ }
439
+
440
+ public static newMember(
441
+ // Add injected services as parameters
442
+ eciesService: ECIESService,
443
+ // Original parameters
444
+ type: MemberType,
445
+ name: string,
446
+ email: EmailString,
447
+ forceMnemonic?: SecureString,
448
+ createdBy?: Uint8Array,
449
+ eciesParams?: IECIESConstants,
450
+ ): IMemberWithMnemonic {
451
+ // Validate inputs first
452
+ if (!name || name.length == 0) {
453
+ throw new MemberError(MemberErrorType.MissingMemberName);
454
+ }
455
+ if (name.trim() != name) {
456
+ throw new MemberError(MemberErrorType.InvalidMemberNameWhitespace);
457
+ }
458
+ if (!email || email.toString().length == 0) {
459
+ throw new MemberError(MemberErrorType.MissingEmail);
460
+ }
461
+ if (email.toString().trim() != email.toString()) {
462
+ throw new MemberError(MemberErrorType.InvalidEmailWhitespace);
463
+ }
464
+
465
+ const eciesConsts = eciesParams ?? ECIES;
466
+ // Use injected services
467
+ const mnemonic = forceMnemonic ?? eciesService.generateNewMnemonic();
468
+ const { wallet } = eciesService.walletAndSeedFromMnemonic(mnemonic);
469
+
470
+ // Get private key from wallet
471
+ const privateKey = wallet.getPrivateKey();
472
+ // Get compressed public key
473
+ const publicKey = eciesService.getPublicKey(privateKey);
474
+
475
+ const newId = Constants.idProvider.generate();
476
+ const dateCreated = new Date();
477
+ return {
478
+ // Pass injected services to constructor
479
+ member: new Member(
480
+ eciesService,
481
+ type,
482
+ name,
483
+ email,
484
+ publicKey,
485
+ new SecureBuffer(privateKey),
486
+ wallet,
487
+ newId,
488
+ dateCreated,
489
+ dateCreated,
490
+ createdBy ?? newId,
491
+ ),
492
+ mnemonic,
493
+ };
494
+ }
495
+ }
@@ -1,6 +1,6 @@
1
1
  import { Pbkdf2ProfileEnum } from './enumerations/pbkdf2-profile';
2
2
  import { IPbkdf2Config } from './interfaces/pbkdf2-config';
3
+
3
4
  export type Pbkdf2Profiles = {
4
- [key in Pbkdf2ProfileEnum]: IPbkdf2Config;
5
+ [key in Pbkdf2ProfileEnum]: IPbkdf2Config;
5
6
  };
6
- //# sourceMappingURL=pbkdf2-profiles.d.ts.map
@@ -0,0 +1,18 @@
1
+ import { EciesStringKey } from './enumerations';
2
+ import { EciesComponentId, getEciesI18nEngine } from './i18n-setup';
3
+ import { PhoneNumberRegex } from './regexes';
4
+
5
+ export class PhoneNumber {
6
+ private readonly _number: string;
7
+ constructor(number: string) {
8
+ // make sure the phone number fits the regex
9
+ if (!PhoneNumberRegex.test(number)) {
10
+ const engine = getEciesI18nEngine();
11
+ throw new Error(engine.translate(EciesComponentId, EciesStringKey.Error_PhoneNumber_InvalidTemplate, { phoneNumber: number }));
12
+ }
13
+ this._number = number;
14
+ }
15
+ public get number(): string {
16
+ return this._number;
17
+ }
18
+ }
package/src/regexes.ts ADDED
@@ -0,0 +1,10 @@
1
+ export const PASSWORD_REGEX =
2
+ /^(?=.*[A-Za-z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?])[A-Za-z\d!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?]{8,}$/;
3
+
4
+ export const MNEMONIC_REGEX =
5
+ /^(?:\w+\s){11}\w+$|^(?:\w+\s){14}\w+$|^(?:\w+\s){17}\w+$|^(?:\w+\s){20}\w+$|^(?:\w+\s){23}\w+$/i;
6
+
7
+ /**
8
+ * Phone number regex to validate phone numbers
9
+ */
10
+ export const PhoneNumberRegex = /^(\+\d{1,3}[- ]?)?\d{10}$/; // Matches international phone numbers with optional country code