@digitaldefiance/ecies-lib 4.4.1 → 4.4.3

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 (590) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +4 -0
  3. package/package.json +10 -7
  4. package/src/builders/ecies-builder.ts +39 -0
  5. package/src/builders/{index.js → index.ts} +1 -1
  6. package/src/builders/member-builder.ts +155 -0
  7. package/src/constants.ts +609 -0
  8. package/src/core/errors/crypto-error.ts +78 -0
  9. package/src/core/{index.js → index.ts} +1 -1
  10. package/src/core/types/result.ts +19 -0
  11. package/src/email-string.ts +82 -0
  12. package/src/enumerations/disposed-error-type.ts +11 -0
  13. package/src/enumerations/ecies-cipher-suite.ts +4 -0
  14. package/src/enumerations/ecies-encryption-type.ts +41 -0
  15. package/src/enumerations/ecies-error-type.ts +43 -0
  16. package/src/enumerations/ecies-string-key.ts +205 -0
  17. package/src/enumerations/ecies-version.ts +3 -0
  18. package/src/enumerations/guid-brand-type.ts +26 -0
  19. package/src/enumerations/guid-error-type.ts +6 -0
  20. package/src/enumerations/id-provider-error-type.ts +50 -0
  21. package/src/enumerations/{index.js → index.ts} +0 -1
  22. package/src/enumerations/invalid-email-type.ts +5 -0
  23. package/src/enumerations/length-encoding-type.ts +6 -0
  24. package/src/enumerations/length-error-type.ts +5 -0
  25. package/src/enumerations/member-error-type.ts +106 -0
  26. package/src/enumerations/{member-type.d.ts → member-type.ts} +7 -6
  27. package/src/enumerations/password-login-error-type.ts +4 -0
  28. package/src/enumerations/pbkdf2-error-type.ts +5 -0
  29. package/src/enumerations/pbkdf2-profile.ts +5 -0
  30. package/src/enumerations/secure-storage-error-type.ts +5 -0
  31. package/src/errors/disposed.ts +36 -0
  32. package/src/errors/ecies.ts +153 -0
  33. package/src/errors/guid.ts +130 -0
  34. package/src/errors/id-provider.ts +40 -0
  35. package/src/errors/{index.d.ts → index.ts} +0 -1
  36. package/src/errors/invalid-email.ts +23 -0
  37. package/src/errors/length.ts +19 -0
  38. package/src/errors/member.ts +20 -0
  39. package/src/errors/pbkdf2.ts +20 -0
  40. package/src/errors/secure-storage.ts +17 -0
  41. package/src/errors/simple-ecies.ts +21 -0
  42. package/src/errors/simple-test-error.ts +6 -0
  43. package/src/i18n-setup.ts +130 -0
  44. package/src/{index.js → index.ts} +64 -7
  45. package/src/interfaces/checksum-config.ts +4 -0
  46. package/src/interfaces/checksum-consts.ts +13 -0
  47. package/src/interfaces/configuration-provenance.ts +54 -0
  48. package/src/interfaces/constants.ts +75 -0
  49. package/src/interfaces/ecies-config.ts +8 -0
  50. package/src/interfaces/ecies-consts.ts +74 -0
  51. package/src/interfaces/ecies-file-service.ts +6 -0
  52. package/src/interfaces/encrypted-chunk.ts +64 -0
  53. package/src/interfaces/encryption-state.ts +19 -0
  54. package/src/interfaces/frontend-member-operational.ts +77 -0
  55. package/src/interfaces/guid.ts +86 -0
  56. package/src/interfaces/id-provider.ts +152 -0
  57. package/src/interfaces/{index.d.ts → index.ts} +0 -1
  58. package/src/interfaces/invariant.ts +60 -0
  59. package/src/interfaces/library-error.ts +23 -0
  60. package/src/interfaces/{member-storage.d.ts → member-storage.ts} +11 -10
  61. package/src/interfaces/{member-with-mnemonic.d.ts → member-with-mnemonic.ts} +3 -3
  62. package/src/interfaces/member.ts +84 -0
  63. package/src/interfaces/multi-recipient-chunk.ts +61 -0
  64. package/src/interfaces/pbkdf2-config.ts +6 -0
  65. package/src/interfaces/pbkdf2-consts.ts +10 -0
  66. package/src/interfaces/pbkdf2-result.ts +5 -0
  67. package/src/interfaces/stream-config.ts +17 -0
  68. package/src/interfaces/stream-header.ts +34 -0
  69. package/src/interfaces/stream-progress.ts +31 -0
  70. package/src/lib/configuration-provenance-utils.ts +26 -0
  71. package/src/lib/crypto-container.ts +64 -0
  72. package/src/lib/guid.ts +1097 -0
  73. package/src/lib/id-providers/custom-provider.ts +109 -0
  74. package/src/lib/id-providers/guidv4-provider.ts +141 -0
  75. package/src/lib/id-providers/{index.d.ts → index.ts} +6 -5
  76. package/src/lib/id-providers/objectid-provider.ts +125 -0
  77. package/src/lib/id-providers/uuid-provider.ts +133 -0
  78. package/src/lib/{index.js → index.ts} +2 -2
  79. package/src/lib/invariant-validator.ts +133 -0
  80. package/src/lib/invariants/encryption-algorithm-consistency.ts +73 -0
  81. package/src/lib/invariants/{index.js → index.ts} +0 -1
  82. package/src/lib/invariants/pbkdf2-profiles-validity.ts +78 -0
  83. package/src/lib/invariants/recipient-id-consistency.ts +46 -0
  84. package/src/lib/multi-recipient-chunk-utils.ts +63 -0
  85. package/src/member.ts +495 -0
  86. package/src/{pbkdf2-profiles.d.ts → pbkdf2-profiles.ts} +2 -2
  87. package/src/phone-number.ts +18 -0
  88. package/src/regexes.ts +10 -0
  89. package/src/secure-buffer.ts +226 -0
  90. package/src/secure-string.ts +244 -0
  91. package/src/services/aes-gcm.ts +220 -0
  92. package/src/services/chunk-processor.ts +188 -0
  93. package/src/services/ecies/README.md +147 -0
  94. package/src/services/ecies/crypto-core.ts +292 -0
  95. package/src/services/ecies/example.ts +185 -0
  96. package/src/services/ecies/file.ts +167 -0
  97. package/src/services/ecies/{index.js → index.ts} +2 -1
  98. package/src/services/ecies/integration.ts +241 -0
  99. package/src/services/ecies/interfaces.ts +62 -0
  100. package/src/services/ecies/manual-test.ts +219 -0
  101. package/src/services/ecies/multi-recipient.ts +545 -0
  102. package/src/services/ecies/service.ts +370 -0
  103. package/src/services/ecies/signature.ts +93 -0
  104. package/src/services/ecies/single-recipient.ts +476 -0
  105. package/src/services/encryption-stream.ts +435 -0
  106. package/src/services/{index.js → index.ts} +0 -1
  107. package/src/services/multi-recipient-processor.ts +377 -0
  108. package/src/services/password-login.ts +226 -0
  109. package/src/services/pbkdf2.ts +169 -0
  110. package/src/services/progress-tracker.ts +128 -0
  111. package/src/services/resumable-encryption.ts +135 -0
  112. package/src/services/xor.ts +65 -0
  113. package/src/test-mocks/index.ts +1 -0
  114. package/src/test-mocks/mock-frontend-member.ts +276 -0
  115. package/src/{testing.js → testing.ts} +0 -1
  116. package/src/translations/{de.js → de.ts} +112 -56
  117. package/src/translations/{en-US.js → en-US.ts} +116 -58
  118. package/src/translations/{es.js → es.ts} +134 -67
  119. package/src/translations/{fr.js → fr.ts} +129 -64
  120. package/src/translations/{ja.js → ja.ts} +111 -55
  121. package/src/translations/{uk.js → uk.ts} +132 -67
  122. package/src/translations/{zh-cn.js → zh-cn.ts} +60 -29
  123. package/src/types/deep-partial.ts +11 -0
  124. package/src/{types.d.ts → types.ts} +15 -7
  125. package/src/utils/encryption-type-utils.ts +76 -0
  126. package/src/utils.ts +329 -0
  127. package/src/builders/ecies-builder.d.ts +0 -18
  128. package/src/builders/ecies-builder.d.ts.map +0 -1
  129. package/src/builders/ecies-builder.js +0 -30
  130. package/src/builders/ecies-builder.js.map +0 -1
  131. package/src/builders/index.d.ts +0 -6
  132. package/src/builders/index.d.ts.map +0 -1
  133. package/src/builders/index.js.map +0 -1
  134. package/src/builders/member-builder.d.ts +0 -51
  135. package/src/builders/member-builder.d.ts.map +0 -1
  136. package/src/builders/member-builder.js +0 -97
  137. package/src/builders/member-builder.js.map +0 -1
  138. package/src/constants.d.ts +0 -60
  139. package/src/constants.d.ts.map +0 -1
  140. package/src/constants.js +0 -446
  141. package/src/constants.js.map +0 -1
  142. package/src/core/errors/crypto-error.d.ts +0 -34
  143. package/src/core/errors/crypto-error.d.ts.map +0 -1
  144. package/src/core/errors/crypto-error.js +0 -56
  145. package/src/core/errors/crypto-error.js.map +0 -1
  146. package/src/core/index.d.ts +0 -6
  147. package/src/core/index.d.ts.map +0 -1
  148. package/src/core/index.js.map +0 -1
  149. package/src/core/types/result.d.ts +0 -16
  150. package/src/core/types/result.d.ts.map +0 -1
  151. package/src/core/types/result.js +0 -12
  152. package/src/core/types/result.js.map +0 -1
  153. package/src/email-string.d.ts +0 -42
  154. package/src/email-string.d.ts.map +0 -1
  155. package/src/email-string.js +0 -67
  156. package/src/email-string.js.map +0 -1
  157. package/src/enumerations/disposed-error-type.d.ts +0 -12
  158. package/src/enumerations/disposed-error-type.d.ts.map +0 -1
  159. package/src/enumerations/disposed-error-type.js +0 -13
  160. package/src/enumerations/disposed-error-type.js.map +0 -1
  161. package/src/enumerations/ecies-cipher-suite.d.ts +0 -4
  162. package/src/enumerations/ecies-cipher-suite.d.ts.map +0 -1
  163. package/src/enumerations/ecies-cipher-suite.js +0 -6
  164. package/src/enumerations/ecies-cipher-suite.js.map +0 -1
  165. package/src/enumerations/ecies-encryption-type.d.ts +0 -11
  166. package/src/enumerations/ecies-encryption-type.d.ts.map +0 -1
  167. package/src/enumerations/ecies-encryption-type.js +0 -27
  168. package/src/enumerations/ecies-encryption-type.js.map +0 -1
  169. package/src/enumerations/ecies-error-type.d.ts +0 -44
  170. package/src/enumerations/ecies-error-type.d.ts.map +0 -1
  171. package/src/enumerations/ecies-error-type.js +0 -45
  172. package/src/enumerations/ecies-error-type.js.map +0 -1
  173. package/src/enumerations/ecies-string-key.d.ts +0 -192
  174. package/src/enumerations/ecies-string-key.d.ts.map +0 -1
  175. package/src/enumerations/ecies-string-key.js +0 -199
  176. package/src/enumerations/ecies-string-key.js.map +0 -1
  177. package/src/enumerations/ecies-version.d.ts +0 -4
  178. package/src/enumerations/ecies-version.d.ts.map +0 -1
  179. package/src/enumerations/ecies-version.js +0 -5
  180. package/src/enumerations/ecies-version.js.map +0 -1
  181. package/src/enumerations/guid-brand-type.d.ts +0 -27
  182. package/src/enumerations/guid-brand-type.d.ts.map +0 -1
  183. package/src/enumerations/guid-brand-type.js +0 -28
  184. package/src/enumerations/guid-brand-type.js.map +0 -1
  185. package/src/enumerations/guid-error-type.d.ts +0 -7
  186. package/src/enumerations/guid-error-type.d.ts.map +0 -1
  187. package/src/enumerations/guid-error-type.js +0 -8
  188. package/src/enumerations/guid-error-type.js.map +0 -1
  189. package/src/enumerations/id-provider-error-type.d.ts +0 -43
  190. package/src/enumerations/id-provider-error-type.d.ts.map +0 -1
  191. package/src/enumerations/id-provider-error-type.js +0 -44
  192. package/src/enumerations/id-provider-error-type.js.map +0 -1
  193. package/src/enumerations/index.d.ts +0 -18
  194. package/src/enumerations/index.d.ts.map +0 -1
  195. package/src/enumerations/index.js.map +0 -1
  196. package/src/enumerations/invalid-email-type.d.ts +0 -6
  197. package/src/enumerations/invalid-email-type.d.ts.map +0 -1
  198. package/src/enumerations/invalid-email-type.js +0 -7
  199. package/src/enumerations/invalid-email-type.js.map +0 -1
  200. package/src/enumerations/length-encoding-type.d.ts +0 -7
  201. package/src/enumerations/length-encoding-type.d.ts.map +0 -1
  202. package/src/enumerations/length-encoding-type.js +0 -8
  203. package/src/enumerations/length-encoding-type.js.map +0 -1
  204. package/src/enumerations/length-error-type.d.ts +0 -6
  205. package/src/enumerations/length-error-type.d.ts.map +0 -1
  206. package/src/enumerations/length-error-type.js +0 -7
  207. package/src/enumerations/length-error-type.js.map +0 -1
  208. package/src/enumerations/member-error-type.d.ts +0 -87
  209. package/src/enumerations/member-error-type.d.ts.map +0 -1
  210. package/src/enumerations/member-error-type.js +0 -88
  211. package/src/enumerations/member-error-type.js.map +0 -1
  212. package/src/enumerations/member-type.d.ts.map +0 -1
  213. package/src/enumerations/member-type.js +0 -16
  214. package/src/enumerations/member-type.js.map +0 -1
  215. package/src/enumerations/password-login-error-type.d.ts +0 -5
  216. package/src/enumerations/password-login-error-type.d.ts.map +0 -1
  217. package/src/enumerations/password-login-error-type.js +0 -6
  218. package/src/enumerations/password-login-error-type.js.map +0 -1
  219. package/src/enumerations/pbkdf2-error-type.d.ts +0 -6
  220. package/src/enumerations/pbkdf2-error-type.d.ts.map +0 -1
  221. package/src/enumerations/pbkdf2-error-type.js +0 -7
  222. package/src/enumerations/pbkdf2-error-type.js.map +0 -1
  223. package/src/enumerations/pbkdf2-profile.d.ts +0 -6
  224. package/src/enumerations/pbkdf2-profile.d.ts.map +0 -1
  225. package/src/enumerations/pbkdf2-profile.js +0 -7
  226. package/src/enumerations/pbkdf2-profile.js.map +0 -1
  227. package/src/enumerations/secure-storage-error-type.d.ts +0 -6
  228. package/src/enumerations/secure-storage-error-type.d.ts.map +0 -1
  229. package/src/enumerations/secure-storage-error-type.js +0 -7
  230. package/src/enumerations/secure-storage-error-type.js.map +0 -1
  231. package/src/errors/disposed.d.ts +0 -22
  232. package/src/errors/disposed.d.ts.map +0 -1
  233. package/src/errors/disposed.js +0 -28
  234. package/src/errors/disposed.js.map +0 -1
  235. package/src/errors/ecies.d.ts +0 -52
  236. package/src/errors/ecies.d.ts.map +0 -1
  237. package/src/errors/ecies.js +0 -78
  238. package/src/errors/ecies.js.map +0 -1
  239. package/src/errors/guid.d.ts +0 -49
  240. package/src/errors/guid.d.ts.map +0 -1
  241. package/src/errors/guid.js +0 -96
  242. package/src/errors/guid.js.map +0 -1
  243. package/src/errors/id-provider.d.ts +0 -23
  244. package/src/errors/id-provider.d.ts.map +0 -1
  245. package/src/errors/id-provider.js +0 -29
  246. package/src/errors/id-provider.js.map +0 -1
  247. package/src/errors/index.d.ts.map +0 -1
  248. package/src/errors/index.js +0 -10
  249. package/src/errors/index.js.map +0 -1
  250. package/src/errors/invalid-email.d.ts +0 -8
  251. package/src/errors/invalid-email.d.ts.map +0 -1
  252. package/src/errors/invalid-email.js +0 -15
  253. package/src/errors/invalid-email.js.map +0 -1
  254. package/src/errors/length.d.ts +0 -7
  255. package/src/errors/length.d.ts.map +0 -1
  256. package/src/errors/length.js +0 -11
  257. package/src/errors/length.js.map +0 -1
  258. package/src/errors/member.d.ts +0 -7
  259. package/src/errors/member.d.ts.map +0 -1
  260. package/src/errors/member.js +0 -11
  261. package/src/errors/member.js.map +0 -1
  262. package/src/errors/pbkdf2.d.ts +0 -7
  263. package/src/errors/pbkdf2.d.ts.map +0 -1
  264. package/src/errors/pbkdf2.js +0 -11
  265. package/src/errors/pbkdf2.js.map +0 -1
  266. package/src/errors/secure-storage.d.ts +0 -7
  267. package/src/errors/secure-storage.d.ts.map +0 -1
  268. package/src/errors/secure-storage.js +0 -12
  269. package/src/errors/secure-storage.js.map +0 -1
  270. package/src/errors/simple-ecies.d.ts +0 -6
  271. package/src/errors/simple-ecies.d.ts.map +0 -1
  272. package/src/errors/simple-ecies.js +0 -12
  273. package/src/errors/simple-ecies.js.map +0 -1
  274. package/src/errors/simple-test-error.d.ts +0 -4
  275. package/src/errors/simple-test-error.d.ts.map +0 -1
  276. package/src/errors/simple-test-error.js +0 -7
  277. package/src/errors/simple-test-error.js.map +0 -1
  278. package/src/i18n-setup.d.ts +0 -32
  279. package/src/i18n-setup.d.ts.map +0 -1
  280. package/src/i18n-setup.js +0 -101
  281. package/src/i18n-setup.js.map +0 -1
  282. package/src/index.d.ts +0 -80
  283. package/src/index.d.ts.map +0 -1
  284. package/src/index.js.map +0 -1
  285. package/src/interfaces/checksum-config.d.ts +0 -5
  286. package/src/interfaces/checksum-config.d.ts.map +0 -1
  287. package/src/interfaces/checksum-config.js +0 -2
  288. package/src/interfaces/checksum-config.js.map +0 -1
  289. package/src/interfaces/checksum-consts.d.ts +0 -11
  290. package/src/interfaces/checksum-consts.d.ts.map +0 -1
  291. package/src/interfaces/checksum-consts.js +0 -2
  292. package/src/interfaces/checksum-consts.js.map +0 -1
  293. package/src/interfaces/configuration-provenance.d.ts +0 -43
  294. package/src/interfaces/configuration-provenance.d.ts.map +0 -1
  295. package/src/interfaces/configuration-provenance.js +0 -3
  296. package/src/interfaces/configuration-provenance.js.map +0 -1
  297. package/src/interfaces/constants.d.ts +0 -70
  298. package/src/interfaces/constants.d.ts.map +0 -1
  299. package/src/interfaces/constants.js +0 -2
  300. package/src/interfaces/constants.js.map +0 -1
  301. package/src/interfaces/ecies-config.d.ts +0 -9
  302. package/src/interfaces/ecies-config.d.ts.map +0 -1
  303. package/src/interfaces/ecies-config.js +0 -2
  304. package/src/interfaces/ecies-config.js.map +0 -1
  305. package/src/interfaces/ecies-consts.d.ts +0 -61
  306. package/src/interfaces/ecies-consts.d.ts.map +0 -1
  307. package/src/interfaces/ecies-consts.js +0 -2
  308. package/src/interfaces/ecies-consts.js.map +0 -1
  309. package/src/interfaces/ecies-file-service.d.ts +0 -7
  310. package/src/interfaces/ecies-file-service.d.ts.map +0 -1
  311. package/src/interfaces/ecies-file-service.js +0 -2
  312. package/src/interfaces/ecies-file-service.js.map +0 -1
  313. package/src/interfaces/encrypted-chunk.d.ts +0 -55
  314. package/src/interfaces/encrypted-chunk.d.ts.map +0 -1
  315. package/src/interfaces/encrypted-chunk.js +0 -12
  316. package/src/interfaces/encrypted-chunk.js.map +0 -1
  317. package/src/interfaces/encryption-state.d.ts +0 -18
  318. package/src/interfaces/encryption-state.d.ts.map +0 -1
  319. package/src/interfaces/encryption-state.js +0 -2
  320. package/src/interfaces/encryption-state.js.map +0 -1
  321. package/src/interfaces/frontend-member-operational.d.ts +0 -51
  322. package/src/interfaces/frontend-member-operational.d.ts.map +0 -1
  323. package/src/interfaces/frontend-member-operational.js +0 -2
  324. package/src/interfaces/frontend-member-operational.js.map +0 -1
  325. package/src/interfaces/guid.d.ts +0 -78
  326. package/src/interfaces/guid.d.ts.map +0 -1
  327. package/src/interfaces/guid.js +0 -2
  328. package/src/interfaces/guid.js.map +0 -1
  329. package/src/interfaces/id-provider.d.ts +0 -107
  330. package/src/interfaces/id-provider.d.ts.map +0 -1
  331. package/src/interfaces/id-provider.js +0 -52
  332. package/src/interfaces/id-provider.js.map +0 -1
  333. package/src/interfaces/index.d.ts.map +0 -1
  334. package/src/interfaces/index.js +0 -13
  335. package/src/interfaces/index.js.map +0 -1
  336. package/src/interfaces/invariant.d.ts +0 -46
  337. package/src/interfaces/invariant.d.ts.map +0 -1
  338. package/src/interfaces/invariant.js +0 -18
  339. package/src/interfaces/invariant.js.map +0 -1
  340. package/src/interfaces/library-error.d.ts +0 -23
  341. package/src/interfaces/library-error.d.ts.map +0 -1
  342. package/src/interfaces/library-error.js +0 -2
  343. package/src/interfaces/library-error.js.map +0 -1
  344. package/src/interfaces/member-storage.d.ts.map +0 -1
  345. package/src/interfaces/member-storage.js +0 -2
  346. package/src/interfaces/member-storage.js.map +0 -1
  347. package/src/interfaces/member-with-mnemonic.d.ts.map +0 -1
  348. package/src/interfaces/member-with-mnemonic.js +0 -2
  349. package/src/interfaces/member-with-mnemonic.js.map +0 -1
  350. package/src/interfaces/member.d.ts +0 -55
  351. package/src/interfaces/member.d.ts.map +0 -1
  352. package/src/interfaces/member.js +0 -2
  353. package/src/interfaces/member.js.map +0 -1
  354. package/src/interfaces/multi-recipient-chunk.d.ts +0 -54
  355. package/src/interfaces/multi-recipient-chunk.d.ts.map +0 -1
  356. package/src/interfaces/multi-recipient-chunk.js +0 -11
  357. package/src/interfaces/multi-recipient-chunk.js.map +0 -1
  358. package/src/interfaces/pbkdf2-config.d.ts +0 -7
  359. package/src/interfaces/pbkdf2-config.d.ts.map +0 -1
  360. package/src/interfaces/pbkdf2-config.js +0 -2
  361. package/src/interfaces/pbkdf2-config.js.map +0 -1
  362. package/src/interfaces/pbkdf2-consts.d.ts +0 -9
  363. package/src/interfaces/pbkdf2-consts.d.ts.map +0 -1
  364. package/src/interfaces/pbkdf2-consts.js +0 -2
  365. package/src/interfaces/pbkdf2-consts.js.map +0 -1
  366. package/src/interfaces/pbkdf2-result.d.ts +0 -6
  367. package/src/interfaces/pbkdf2-result.d.ts.map +0 -1
  368. package/src/interfaces/pbkdf2-result.js +0 -2
  369. package/src/interfaces/pbkdf2-result.js.map +0 -1
  370. package/src/interfaces/stream-config.d.ts +0 -14
  371. package/src/interfaces/stream-config.d.ts.map +0 -1
  372. package/src/interfaces/stream-config.js +0 -8
  373. package/src/interfaces/stream-config.js.map +0 -1
  374. package/src/interfaces/stream-header.d.ts +0 -29
  375. package/src/interfaces/stream-header.d.ts.map +0 -1
  376. package/src/interfaces/stream-header.js +0 -9
  377. package/src/interfaces/stream-header.js.map +0 -1
  378. package/src/interfaces/stream-progress.d.ts +0 -33
  379. package/src/interfaces/stream-progress.d.ts.map +0 -1
  380. package/src/interfaces/stream-progress.js +0 -2
  381. package/src/interfaces/stream-progress.js.map +0 -1
  382. package/src/lib/configuration-provenance-utils.d.ts +0 -11
  383. package/src/lib/configuration-provenance-utils.d.ts.map +0 -1
  384. package/src/lib/configuration-provenance-utils.js +0 -23
  385. package/src/lib/configuration-provenance-utils.js.map +0 -1
  386. package/src/lib/crypto-container.d.ts +0 -25
  387. package/src/lib/crypto-container.d.ts.map +0 -1
  388. package/src/lib/crypto-container.js +0 -46
  389. package/src/lib/crypto-container.js.map +0 -1
  390. package/src/lib/guid.d.ts +0 -344
  391. package/src/lib/guid.d.ts.map +0 -1
  392. package/src/lib/guid.js +0 -914
  393. package/src/lib/guid.js.map +0 -1
  394. package/src/lib/id-providers/custom-provider.d.ts +0 -46
  395. package/src/lib/id-providers/custom-provider.d.ts.map +0 -1
  396. package/src/lib/id-providers/custom-provider.js +0 -85
  397. package/src/lib/id-providers/custom-provider.js.map +0 -1
  398. package/src/lib/id-providers/guidv4-provider.d.ts +0 -56
  399. package/src/lib/id-providers/guidv4-provider.d.ts.map +0 -1
  400. package/src/lib/id-providers/guidv4-provider.js +0 -122
  401. package/src/lib/id-providers/guidv4-provider.js.map +0 -1
  402. package/src/lib/id-providers/index.d.ts.map +0 -1
  403. package/src/lib/id-providers/index.js +0 -29
  404. package/src/lib/id-providers/index.js.map +0 -1
  405. package/src/lib/id-providers/objectid-provider.d.ts +0 -43
  406. package/src/lib/id-providers/objectid-provider.d.ts.map +0 -1
  407. package/src/lib/id-providers/objectid-provider.js +0 -104
  408. package/src/lib/id-providers/objectid-provider.js.map +0 -1
  409. package/src/lib/id-providers/uuid-provider.d.ts +0 -52
  410. package/src/lib/id-providers/uuid-provider.d.ts.map +0 -1
  411. package/src/lib/id-providers/uuid-provider.js +0 -110
  412. package/src/lib/id-providers/uuid-provider.js.map +0 -1
  413. package/src/lib/index.d.ts +0 -6
  414. package/src/lib/index.d.ts.map +0 -1
  415. package/src/lib/index.js.map +0 -1
  416. package/src/lib/invariant-validator.d.ts +0 -59
  417. package/src/lib/invariant-validator.d.ts.map +0 -1
  418. package/src/lib/invariant-validator.js +0 -97
  419. package/src/lib/invariant-validator.js.map +0 -1
  420. package/src/lib/invariants/encryption-algorithm-consistency.d.ts +0 -17
  421. package/src/lib/invariants/encryption-algorithm-consistency.d.ts.map +0 -1
  422. package/src/lib/invariants/encryption-algorithm-consistency.js +0 -49
  423. package/src/lib/invariants/encryption-algorithm-consistency.js.map +0 -1
  424. package/src/lib/invariants/index.d.ts +0 -4
  425. package/src/lib/invariants/index.d.ts.map +0 -1
  426. package/src/lib/invariants/index.js.map +0 -1
  427. package/src/lib/invariants/pbkdf2-profiles-validity.d.ts +0 -16
  428. package/src/lib/invariants/pbkdf2-profiles-validity.d.ts.map +0 -1
  429. package/src/lib/invariants/pbkdf2-profiles-validity.js +0 -58
  430. package/src/lib/invariants/pbkdf2-profiles-validity.js.map +0 -1
  431. package/src/lib/invariants/recipient-id-consistency.d.ts +0 -18
  432. package/src/lib/invariants/recipient-id-consistency.d.ts.map +0 -1
  433. package/src/lib/invariants/recipient-id-consistency.js +0 -31
  434. package/src/lib/invariants/recipient-id-consistency.js.map +0 -1
  435. package/src/lib/multi-recipient-chunk-utils.d.ts +0 -38
  436. package/src/lib/multi-recipient-chunk-utils.d.ts.map +0 -1
  437. package/src/lib/multi-recipient-chunk-utils.js +0 -41
  438. package/src/lib/multi-recipient-chunk-utils.js.map +0 -1
  439. package/src/member.d.ts +0 -92
  440. package/src/member.d.ts.map +0 -1
  441. package/src/member.js +0 -322
  442. package/src/member.js.map +0 -1
  443. package/src/pbkdf2-profiles.d.ts.map +0 -1
  444. package/src/pbkdf2-profiles.js +0 -2
  445. package/src/pbkdf2-profiles.js.map +0 -1
  446. package/src/phone-number.d.ts +0 -6
  447. package/src/phone-number.d.ts.map +0 -1
  448. package/src/phone-number.js +0 -18
  449. package/src/phone-number.js.map +0 -1
  450. package/src/regexes.d.ts +0 -7
  451. package/src/regexes.d.ts.map +0 -1
  452. package/src/regexes.js +0 -7
  453. package/src/regexes.js.map +0 -1
  454. package/src/secure-buffer.d.ts +0 -61
  455. package/src/secure-buffer.d.ts.map +0 -1
  456. package/src/secure-buffer.js +0 -201
  457. package/src/secure-buffer.js.map +0 -1
  458. package/src/secure-string.d.ts +0 -46
  459. package/src/secure-string.d.ts.map +0 -1
  460. package/src/secure-string.js +0 -206
  461. package/src/secure-string.js.map +0 -1
  462. package/src/services/aes-gcm.d.ts +0 -57
  463. package/src/services/aes-gcm.d.ts.map +0 -1
  464. package/src/services/aes-gcm.js +0 -142
  465. package/src/services/aes-gcm.js.map +0 -1
  466. package/src/services/chunk-processor.d.ts +0 -31
  467. package/src/services/chunk-processor.d.ts.map +0 -1
  468. package/src/services/chunk-processor.js +0 -145
  469. package/src/services/chunk-processor.js.map +0 -1
  470. package/src/services/ecies/crypto-core.d.ts +0 -72
  471. package/src/services/ecies/crypto-core.d.ts.map +0 -1
  472. package/src/services/ecies/crypto-core.js +0 -205
  473. package/src/services/ecies/crypto-core.js.map +0 -1
  474. package/src/services/ecies/example.d.ts +0 -25
  475. package/src/services/ecies/example.d.ts.map +0 -1
  476. package/src/services/ecies/example.js +0 -121
  477. package/src/services/ecies/example.js.map +0 -1
  478. package/src/services/ecies/file.d.ts +0 -18
  479. package/src/services/ecies/file.d.ts.map +0 -1
  480. package/src/services/ecies/file.js +0 -106
  481. package/src/services/ecies/file.js.map +0 -1
  482. package/src/services/ecies/index.d.ts +0 -38
  483. package/src/services/ecies/index.d.ts.map +0 -1
  484. package/src/services/ecies/index.js.map +0 -1
  485. package/src/services/ecies/integration.d.ts +0 -59
  486. package/src/services/ecies/integration.d.ts.map +0 -1
  487. package/src/services/ecies/integration.js +0 -167
  488. package/src/services/ecies/integration.js.map +0 -1
  489. package/src/services/ecies/interfaces.d.ts +0 -54
  490. package/src/services/ecies/interfaces.d.ts.map +0 -1
  491. package/src/services/ecies/interfaces.js +0 -5
  492. package/src/services/ecies/interfaces.js.map +0 -1
  493. package/src/services/ecies/manual-test.d.ts +0 -29
  494. package/src/services/ecies/manual-test.d.ts.map +0 -1
  495. package/src/services/ecies/manual-test.js +0 -163
  496. package/src/services/ecies/manual-test.js.map +0 -1
  497. package/src/services/ecies/multi-recipient.d.ts +0 -56
  498. package/src/services/ecies/multi-recipient.d.ts.map +0 -1
  499. package/src/services/ecies/multi-recipient.js +0 -344
  500. package/src/services/ecies/multi-recipient.js.map +0 -1
  501. package/src/services/ecies/service.d.ts +0 -120
  502. package/src/services/ecies/service.d.ts.map +0 -1
  503. package/src/services/ecies/service.js +0 -210
  504. package/src/services/ecies/service.js.map +0 -1
  505. package/src/services/ecies/signature.d.ts +0 -27
  506. package/src/services/ecies/signature.d.ts.map +0 -1
  507. package/src/services/ecies/signature.js +0 -72
  508. package/src/services/ecies/signature.js.map +0 -1
  509. package/src/services/ecies/single-recipient.d.ts +0 -46
  510. package/src/services/ecies/single-recipient.d.ts.map +0 -1
  511. package/src/services/ecies/single-recipient.js +0 -322
  512. package/src/services/ecies/single-recipient.js.map +0 -1
  513. package/src/services/encryption-stream.d.ts +0 -71
  514. package/src/services/encryption-stream.d.ts.map +0 -1
  515. package/src/services/encryption-stream.js +0 -295
  516. package/src/services/encryption-stream.js.map +0 -1
  517. package/src/services/index.d.ts +0 -11
  518. package/src/services/index.d.ts.map +0 -1
  519. package/src/services/index.js.map +0 -1
  520. package/src/services/multi-recipient-processor.d.ts +0 -35
  521. package/src/services/multi-recipient-processor.d.ts.map +0 -1
  522. package/src/services/multi-recipient-processor.js +0 -289
  523. package/src/services/multi-recipient-processor.js.map +0 -1
  524. package/src/services/password-login.d.ts +0 -47
  525. package/src/services/password-login.d.ts.map +0 -1
  526. package/src/services/password-login.js +0 -115
  527. package/src/services/password-login.js.map +0 -1
  528. package/src/services/pbkdf2.d.ts +0 -54
  529. package/src/services/pbkdf2.d.ts.map +0 -1
  530. package/src/services/pbkdf2.js +0 -108
  531. package/src/services/pbkdf2.js.map +0 -1
  532. package/src/services/progress-tracker.d.ts +0 -23
  533. package/src/services/progress-tracker.d.ts.map +0 -1
  534. package/src/services/progress-tracker.js +0 -103
  535. package/src/services/progress-tracker.js.map +0 -1
  536. package/src/services/resumable-encryption.d.ts +0 -19
  537. package/src/services/resumable-encryption.d.ts.map +0 -1
  538. package/src/services/resumable-encryption.js +0 -105
  539. package/src/services/resumable-encryption.js.map +0 -1
  540. package/src/services/xor.d.ts +0 -37
  541. package/src/services/xor.d.ts.map +0 -1
  542. package/src/services/xor.js +0 -63
  543. package/src/services/xor.js.map +0 -1
  544. package/src/test-mocks/index.d.ts +0 -2
  545. package/src/test-mocks/index.d.ts.map +0 -1
  546. package/src/test-mocks/index.js +0 -2
  547. package/src/test-mocks/index.js.map +0 -1
  548. package/src/test-mocks/mock-frontend-member.d.ts +0 -85
  549. package/src/test-mocks/mock-frontend-member.d.ts.map +0 -1
  550. package/src/test-mocks/mock-frontend-member.js +0 -190
  551. package/src/test-mocks/mock-frontend-member.js.map +0 -1
  552. package/src/testing.d.ts +0 -2
  553. package/src/testing.d.ts.map +0 -1
  554. package/src/testing.js.map +0 -1
  555. package/src/translations/de.d.ts +0 -4
  556. package/src/translations/de.d.ts.map +0 -1
  557. package/src/translations/de.js.map +0 -1
  558. package/src/translations/en-US.d.ts +0 -4
  559. package/src/translations/en-US.d.ts.map +0 -1
  560. package/src/translations/en-US.js.map +0 -1
  561. package/src/translations/es.d.ts +0 -4
  562. package/src/translations/es.d.ts.map +0 -1
  563. package/src/translations/es.js.map +0 -1
  564. package/src/translations/fr.d.ts +0 -4
  565. package/src/translations/fr.d.ts.map +0 -1
  566. package/src/translations/fr.js.map +0 -1
  567. package/src/translations/ja.d.ts +0 -4
  568. package/src/translations/ja.d.ts.map +0 -1
  569. package/src/translations/ja.js.map +0 -1
  570. package/src/translations/uk.d.ts +0 -4
  571. package/src/translations/uk.d.ts.map +0 -1
  572. package/src/translations/uk.js.map +0 -1
  573. package/src/translations/zh-cn.d.ts +0 -4
  574. package/src/translations/zh-cn.d.ts.map +0 -1
  575. package/src/translations/zh-cn.js.map +0 -1
  576. package/src/types/deep-partial.d.ts +0 -4
  577. package/src/types/deep-partial.d.ts.map +0 -1
  578. package/src/types/deep-partial.js +0 -2
  579. package/src/types/deep-partial.js.map +0 -1
  580. package/src/types.d.ts.map +0 -1
  581. package/src/types.js +0 -2
  582. package/src/types.js.map +0 -1
  583. package/src/utils/encryption-type-utils.d.ts +0 -29
  584. package/src/utils/encryption-type-utils.d.ts.map +0 -1
  585. package/src/utils/encryption-type-utils.js +0 -61
  586. package/src/utils/encryption-type-utils.js.map +0 -1
  587. package/src/utils.d.ts +0 -68
  588. package/src/utils.d.ts.map +0 -1
  589. package/src/utils.js +0 -273
  590. 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