@digitaldefiance/ecies-lib 4.4.2 → 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.
- package/LICENSE +21 -0
- package/package.json +9 -6
- package/src/builders/ecies-builder.ts +39 -0
- package/src/builders/{index.js → index.ts} +1 -1
- package/src/builders/member-builder.ts +155 -0
- package/src/constants.ts +609 -0
- package/src/core/errors/crypto-error.ts +78 -0
- package/src/core/{index.js → index.ts} +1 -1
- package/src/core/types/result.ts +19 -0
- package/src/email-string.ts +82 -0
- package/src/enumerations/disposed-error-type.ts +11 -0
- package/src/enumerations/ecies-cipher-suite.ts +4 -0
- package/src/enumerations/ecies-encryption-type.ts +41 -0
- package/src/enumerations/ecies-error-type.ts +43 -0
- package/src/enumerations/ecies-string-key.ts +205 -0
- package/src/enumerations/ecies-version.ts +3 -0
- package/src/enumerations/guid-brand-type.ts +26 -0
- package/src/enumerations/guid-error-type.ts +6 -0
- package/src/enumerations/id-provider-error-type.ts +50 -0
- package/src/enumerations/{index.js → index.ts} +0 -1
- package/src/enumerations/invalid-email-type.ts +5 -0
- package/src/enumerations/length-encoding-type.ts +6 -0
- package/src/enumerations/length-error-type.ts +5 -0
- package/src/enumerations/member-error-type.ts +106 -0
- package/src/enumerations/{member-type.d.ts → member-type.ts} +7 -6
- package/src/enumerations/password-login-error-type.ts +4 -0
- package/src/enumerations/pbkdf2-error-type.ts +5 -0
- package/src/enumerations/pbkdf2-profile.ts +5 -0
- package/src/enumerations/secure-storage-error-type.ts +5 -0
- package/src/errors/disposed.ts +36 -0
- package/src/errors/ecies.ts +153 -0
- package/src/errors/guid.ts +130 -0
- package/src/errors/id-provider.ts +40 -0
- package/src/errors/{index.d.ts → index.ts} +0 -1
- package/src/errors/invalid-email.ts +23 -0
- package/src/errors/length.ts +19 -0
- package/src/errors/member.ts +20 -0
- package/src/errors/pbkdf2.ts +20 -0
- package/src/errors/secure-storage.ts +17 -0
- package/src/errors/simple-ecies.ts +21 -0
- package/src/errors/simple-test-error.ts +6 -0
- package/src/i18n-setup.ts +130 -0
- package/src/{index.js → index.ts} +64 -7
- package/src/interfaces/checksum-config.ts +4 -0
- package/src/interfaces/checksum-consts.ts +13 -0
- package/src/interfaces/configuration-provenance.ts +54 -0
- package/src/interfaces/constants.ts +75 -0
- package/src/interfaces/ecies-config.ts +8 -0
- package/src/interfaces/ecies-consts.ts +74 -0
- package/src/interfaces/ecies-file-service.ts +6 -0
- package/src/interfaces/encrypted-chunk.ts +64 -0
- package/src/interfaces/encryption-state.ts +19 -0
- package/src/interfaces/frontend-member-operational.ts +77 -0
- package/src/interfaces/guid.ts +86 -0
- package/src/interfaces/id-provider.ts +152 -0
- package/src/interfaces/{index.d.ts → index.ts} +0 -1
- package/src/interfaces/invariant.ts +60 -0
- package/src/interfaces/library-error.ts +23 -0
- package/src/interfaces/{member-storage.d.ts → member-storage.ts} +11 -10
- package/src/interfaces/{member-with-mnemonic.d.ts → member-with-mnemonic.ts} +3 -3
- package/src/interfaces/member.ts +84 -0
- package/src/interfaces/multi-recipient-chunk.ts +61 -0
- package/src/interfaces/pbkdf2-config.ts +6 -0
- package/src/interfaces/pbkdf2-consts.ts +10 -0
- package/src/interfaces/pbkdf2-result.ts +5 -0
- package/src/interfaces/stream-config.ts +17 -0
- package/src/interfaces/stream-header.ts +34 -0
- package/src/interfaces/stream-progress.ts +31 -0
- package/src/lib/configuration-provenance-utils.ts +26 -0
- package/src/lib/crypto-container.ts +64 -0
- package/src/lib/guid.ts +1097 -0
- package/src/lib/id-providers/custom-provider.ts +109 -0
- package/src/lib/id-providers/guidv4-provider.ts +141 -0
- package/src/lib/id-providers/{index.d.ts → index.ts} +6 -5
- package/src/lib/id-providers/objectid-provider.ts +125 -0
- package/src/lib/id-providers/uuid-provider.ts +133 -0
- package/src/lib/{index.js → index.ts} +2 -2
- package/src/lib/invariant-validator.ts +133 -0
- package/src/lib/invariants/encryption-algorithm-consistency.ts +73 -0
- package/src/lib/invariants/{index.js → index.ts} +0 -1
- package/src/lib/invariants/pbkdf2-profiles-validity.ts +78 -0
- package/src/lib/invariants/recipient-id-consistency.ts +46 -0
- package/src/lib/multi-recipient-chunk-utils.ts +63 -0
- package/src/member.ts +495 -0
- package/src/{pbkdf2-profiles.d.ts → pbkdf2-profiles.ts} +2 -2
- package/src/phone-number.ts +18 -0
- package/src/regexes.ts +10 -0
- package/src/secure-buffer.ts +226 -0
- package/src/secure-string.ts +244 -0
- package/src/services/aes-gcm.ts +220 -0
- package/src/services/chunk-processor.ts +188 -0
- package/src/services/ecies/README.md +147 -0
- package/src/services/ecies/crypto-core.ts +292 -0
- package/src/services/ecies/example.ts +185 -0
- package/src/services/ecies/file.ts +167 -0
- package/src/services/ecies/{index.js → index.ts} +2 -1
- package/src/services/ecies/integration.ts +241 -0
- package/src/services/ecies/interfaces.ts +62 -0
- package/src/services/ecies/manual-test.ts +219 -0
- package/src/services/ecies/multi-recipient.ts +545 -0
- package/src/services/ecies/service.ts +370 -0
- package/src/services/ecies/signature.ts +93 -0
- package/src/services/ecies/single-recipient.ts +476 -0
- package/src/services/encryption-stream.ts +435 -0
- package/src/services/{index.js → index.ts} +0 -1
- package/src/services/multi-recipient-processor.ts +377 -0
- package/src/services/password-login.ts +226 -0
- package/src/services/pbkdf2.ts +169 -0
- package/src/services/progress-tracker.ts +128 -0
- package/src/services/resumable-encryption.ts +135 -0
- package/src/services/xor.ts +65 -0
- package/src/test-mocks/index.ts +1 -0
- package/src/test-mocks/mock-frontend-member.ts +276 -0
- package/src/{testing.js → testing.ts} +0 -1
- package/src/translations/{de.js → de.ts} +112 -56
- package/src/translations/{en-US.js → en-US.ts} +116 -58
- package/src/translations/{es.js → es.ts} +134 -67
- package/src/translations/{fr.js → fr.ts} +129 -64
- package/src/translations/{ja.js → ja.ts} +111 -55
- package/src/translations/{uk.js → uk.ts} +132 -67
- package/src/translations/{zh-cn.js → zh-cn.ts} +60 -29
- package/src/types/deep-partial.ts +11 -0
- package/src/{types.d.ts → types.ts} +15 -7
- package/src/utils/encryption-type-utils.ts +76 -0
- package/src/utils.ts +329 -0
- package/src/builders/ecies-builder.d.ts +0 -18
- package/src/builders/ecies-builder.d.ts.map +0 -1
- package/src/builders/ecies-builder.js +0 -30
- package/src/builders/ecies-builder.js.map +0 -1
- package/src/builders/index.d.ts +0 -6
- package/src/builders/index.d.ts.map +0 -1
- package/src/builders/index.js.map +0 -1
- package/src/builders/member-builder.d.ts +0 -51
- package/src/builders/member-builder.d.ts.map +0 -1
- package/src/builders/member-builder.js +0 -97
- package/src/builders/member-builder.js.map +0 -1
- package/src/constants.d.ts +0 -60
- package/src/constants.d.ts.map +0 -1
- package/src/constants.js +0 -446
- package/src/constants.js.map +0 -1
- package/src/core/errors/crypto-error.d.ts +0 -34
- package/src/core/errors/crypto-error.d.ts.map +0 -1
- package/src/core/errors/crypto-error.js +0 -56
- package/src/core/errors/crypto-error.js.map +0 -1
- package/src/core/index.d.ts +0 -6
- package/src/core/index.d.ts.map +0 -1
- package/src/core/index.js.map +0 -1
- package/src/core/types/result.d.ts +0 -16
- package/src/core/types/result.d.ts.map +0 -1
- package/src/core/types/result.js +0 -12
- package/src/core/types/result.js.map +0 -1
- package/src/email-string.d.ts +0 -42
- package/src/email-string.d.ts.map +0 -1
- package/src/email-string.js +0 -67
- package/src/email-string.js.map +0 -1
- package/src/enumerations/disposed-error-type.d.ts +0 -12
- package/src/enumerations/disposed-error-type.d.ts.map +0 -1
- package/src/enumerations/disposed-error-type.js +0 -13
- package/src/enumerations/disposed-error-type.js.map +0 -1
- package/src/enumerations/ecies-cipher-suite.d.ts +0 -4
- package/src/enumerations/ecies-cipher-suite.d.ts.map +0 -1
- package/src/enumerations/ecies-cipher-suite.js +0 -6
- package/src/enumerations/ecies-cipher-suite.js.map +0 -1
- package/src/enumerations/ecies-encryption-type.d.ts +0 -11
- package/src/enumerations/ecies-encryption-type.d.ts.map +0 -1
- package/src/enumerations/ecies-encryption-type.js +0 -27
- package/src/enumerations/ecies-encryption-type.js.map +0 -1
- package/src/enumerations/ecies-error-type.d.ts +0 -44
- package/src/enumerations/ecies-error-type.d.ts.map +0 -1
- package/src/enumerations/ecies-error-type.js +0 -45
- package/src/enumerations/ecies-error-type.js.map +0 -1
- package/src/enumerations/ecies-string-key.d.ts +0 -192
- package/src/enumerations/ecies-string-key.d.ts.map +0 -1
- package/src/enumerations/ecies-string-key.js +0 -199
- package/src/enumerations/ecies-string-key.js.map +0 -1
- package/src/enumerations/ecies-version.d.ts +0 -4
- package/src/enumerations/ecies-version.d.ts.map +0 -1
- package/src/enumerations/ecies-version.js +0 -5
- package/src/enumerations/ecies-version.js.map +0 -1
- package/src/enumerations/guid-brand-type.d.ts +0 -27
- package/src/enumerations/guid-brand-type.d.ts.map +0 -1
- package/src/enumerations/guid-brand-type.js +0 -28
- package/src/enumerations/guid-brand-type.js.map +0 -1
- package/src/enumerations/guid-error-type.d.ts +0 -7
- package/src/enumerations/guid-error-type.d.ts.map +0 -1
- package/src/enumerations/guid-error-type.js +0 -8
- package/src/enumerations/guid-error-type.js.map +0 -1
- package/src/enumerations/id-provider-error-type.d.ts +0 -43
- package/src/enumerations/id-provider-error-type.d.ts.map +0 -1
- package/src/enumerations/id-provider-error-type.js +0 -44
- package/src/enumerations/id-provider-error-type.js.map +0 -1
- package/src/enumerations/index.d.ts +0 -18
- package/src/enumerations/index.d.ts.map +0 -1
- package/src/enumerations/index.js.map +0 -1
- package/src/enumerations/invalid-email-type.d.ts +0 -6
- package/src/enumerations/invalid-email-type.d.ts.map +0 -1
- package/src/enumerations/invalid-email-type.js +0 -7
- package/src/enumerations/invalid-email-type.js.map +0 -1
- package/src/enumerations/length-encoding-type.d.ts +0 -7
- package/src/enumerations/length-encoding-type.d.ts.map +0 -1
- package/src/enumerations/length-encoding-type.js +0 -8
- package/src/enumerations/length-encoding-type.js.map +0 -1
- package/src/enumerations/length-error-type.d.ts +0 -6
- package/src/enumerations/length-error-type.d.ts.map +0 -1
- package/src/enumerations/length-error-type.js +0 -7
- package/src/enumerations/length-error-type.js.map +0 -1
- package/src/enumerations/member-error-type.d.ts +0 -87
- package/src/enumerations/member-error-type.d.ts.map +0 -1
- package/src/enumerations/member-error-type.js +0 -88
- package/src/enumerations/member-error-type.js.map +0 -1
- package/src/enumerations/member-type.d.ts.map +0 -1
- package/src/enumerations/member-type.js +0 -16
- package/src/enumerations/member-type.js.map +0 -1
- package/src/enumerations/password-login-error-type.d.ts +0 -5
- package/src/enumerations/password-login-error-type.d.ts.map +0 -1
- package/src/enumerations/password-login-error-type.js +0 -6
- package/src/enumerations/password-login-error-type.js.map +0 -1
- package/src/enumerations/pbkdf2-error-type.d.ts +0 -6
- package/src/enumerations/pbkdf2-error-type.d.ts.map +0 -1
- package/src/enumerations/pbkdf2-error-type.js +0 -7
- package/src/enumerations/pbkdf2-error-type.js.map +0 -1
- package/src/enumerations/pbkdf2-profile.d.ts +0 -6
- package/src/enumerations/pbkdf2-profile.d.ts.map +0 -1
- package/src/enumerations/pbkdf2-profile.js +0 -7
- package/src/enumerations/pbkdf2-profile.js.map +0 -1
- package/src/enumerations/secure-storage-error-type.d.ts +0 -6
- package/src/enumerations/secure-storage-error-type.d.ts.map +0 -1
- package/src/enumerations/secure-storage-error-type.js +0 -7
- package/src/enumerations/secure-storage-error-type.js.map +0 -1
- package/src/errors/disposed.d.ts +0 -22
- package/src/errors/disposed.d.ts.map +0 -1
- package/src/errors/disposed.js +0 -28
- package/src/errors/disposed.js.map +0 -1
- package/src/errors/ecies.d.ts +0 -52
- package/src/errors/ecies.d.ts.map +0 -1
- package/src/errors/ecies.js +0 -78
- package/src/errors/ecies.js.map +0 -1
- package/src/errors/guid.d.ts +0 -49
- package/src/errors/guid.d.ts.map +0 -1
- package/src/errors/guid.js +0 -96
- package/src/errors/guid.js.map +0 -1
- package/src/errors/id-provider.d.ts +0 -23
- package/src/errors/id-provider.d.ts.map +0 -1
- package/src/errors/id-provider.js +0 -29
- package/src/errors/id-provider.js.map +0 -1
- package/src/errors/index.d.ts.map +0 -1
- package/src/errors/index.js +0 -10
- package/src/errors/index.js.map +0 -1
- package/src/errors/invalid-email.d.ts +0 -8
- package/src/errors/invalid-email.d.ts.map +0 -1
- package/src/errors/invalid-email.js +0 -15
- package/src/errors/invalid-email.js.map +0 -1
- package/src/errors/length.d.ts +0 -7
- package/src/errors/length.d.ts.map +0 -1
- package/src/errors/length.js +0 -11
- package/src/errors/length.js.map +0 -1
- package/src/errors/member.d.ts +0 -7
- package/src/errors/member.d.ts.map +0 -1
- package/src/errors/member.js +0 -11
- package/src/errors/member.js.map +0 -1
- package/src/errors/pbkdf2.d.ts +0 -7
- package/src/errors/pbkdf2.d.ts.map +0 -1
- package/src/errors/pbkdf2.js +0 -11
- package/src/errors/pbkdf2.js.map +0 -1
- package/src/errors/secure-storage.d.ts +0 -7
- package/src/errors/secure-storage.d.ts.map +0 -1
- package/src/errors/secure-storage.js +0 -12
- package/src/errors/secure-storage.js.map +0 -1
- package/src/errors/simple-ecies.d.ts +0 -6
- package/src/errors/simple-ecies.d.ts.map +0 -1
- package/src/errors/simple-ecies.js +0 -12
- package/src/errors/simple-ecies.js.map +0 -1
- package/src/errors/simple-test-error.d.ts +0 -4
- package/src/errors/simple-test-error.d.ts.map +0 -1
- package/src/errors/simple-test-error.js +0 -7
- package/src/errors/simple-test-error.js.map +0 -1
- package/src/i18n-setup.d.ts +0 -32
- package/src/i18n-setup.d.ts.map +0 -1
- package/src/i18n-setup.js +0 -101
- package/src/i18n-setup.js.map +0 -1
- package/src/index.d.ts +0 -80
- package/src/index.d.ts.map +0 -1
- package/src/index.js.map +0 -1
- package/src/interfaces/checksum-config.d.ts +0 -5
- package/src/interfaces/checksum-config.d.ts.map +0 -1
- package/src/interfaces/checksum-config.js +0 -2
- package/src/interfaces/checksum-config.js.map +0 -1
- package/src/interfaces/checksum-consts.d.ts +0 -11
- package/src/interfaces/checksum-consts.d.ts.map +0 -1
- package/src/interfaces/checksum-consts.js +0 -2
- package/src/interfaces/checksum-consts.js.map +0 -1
- package/src/interfaces/configuration-provenance.d.ts +0 -43
- package/src/interfaces/configuration-provenance.d.ts.map +0 -1
- package/src/interfaces/configuration-provenance.js +0 -3
- package/src/interfaces/configuration-provenance.js.map +0 -1
- package/src/interfaces/constants.d.ts +0 -70
- package/src/interfaces/constants.d.ts.map +0 -1
- package/src/interfaces/constants.js +0 -2
- package/src/interfaces/constants.js.map +0 -1
- package/src/interfaces/ecies-config.d.ts +0 -9
- package/src/interfaces/ecies-config.d.ts.map +0 -1
- package/src/interfaces/ecies-config.js +0 -2
- package/src/interfaces/ecies-config.js.map +0 -1
- package/src/interfaces/ecies-consts.d.ts +0 -61
- package/src/interfaces/ecies-consts.d.ts.map +0 -1
- package/src/interfaces/ecies-consts.js +0 -2
- package/src/interfaces/ecies-consts.js.map +0 -1
- package/src/interfaces/ecies-file-service.d.ts +0 -7
- package/src/interfaces/ecies-file-service.d.ts.map +0 -1
- package/src/interfaces/ecies-file-service.js +0 -2
- package/src/interfaces/ecies-file-service.js.map +0 -1
- package/src/interfaces/encrypted-chunk.d.ts +0 -55
- package/src/interfaces/encrypted-chunk.d.ts.map +0 -1
- package/src/interfaces/encrypted-chunk.js +0 -12
- package/src/interfaces/encrypted-chunk.js.map +0 -1
- package/src/interfaces/encryption-state.d.ts +0 -18
- package/src/interfaces/encryption-state.d.ts.map +0 -1
- package/src/interfaces/encryption-state.js +0 -2
- package/src/interfaces/encryption-state.js.map +0 -1
- package/src/interfaces/frontend-member-operational.d.ts +0 -51
- package/src/interfaces/frontend-member-operational.d.ts.map +0 -1
- package/src/interfaces/frontend-member-operational.js +0 -2
- package/src/interfaces/frontend-member-operational.js.map +0 -1
- package/src/interfaces/guid.d.ts +0 -78
- package/src/interfaces/guid.d.ts.map +0 -1
- package/src/interfaces/guid.js +0 -2
- package/src/interfaces/guid.js.map +0 -1
- package/src/interfaces/id-provider.d.ts +0 -107
- package/src/interfaces/id-provider.d.ts.map +0 -1
- package/src/interfaces/id-provider.js +0 -52
- package/src/interfaces/id-provider.js.map +0 -1
- package/src/interfaces/index.d.ts.map +0 -1
- package/src/interfaces/index.js +0 -13
- package/src/interfaces/index.js.map +0 -1
- package/src/interfaces/invariant.d.ts +0 -46
- package/src/interfaces/invariant.d.ts.map +0 -1
- package/src/interfaces/invariant.js +0 -18
- package/src/interfaces/invariant.js.map +0 -1
- package/src/interfaces/library-error.d.ts +0 -23
- package/src/interfaces/library-error.d.ts.map +0 -1
- package/src/interfaces/library-error.js +0 -2
- package/src/interfaces/library-error.js.map +0 -1
- package/src/interfaces/member-storage.d.ts.map +0 -1
- package/src/interfaces/member-storage.js +0 -2
- package/src/interfaces/member-storage.js.map +0 -1
- package/src/interfaces/member-with-mnemonic.d.ts.map +0 -1
- package/src/interfaces/member-with-mnemonic.js +0 -2
- package/src/interfaces/member-with-mnemonic.js.map +0 -1
- package/src/interfaces/member.d.ts +0 -55
- package/src/interfaces/member.d.ts.map +0 -1
- package/src/interfaces/member.js +0 -2
- package/src/interfaces/member.js.map +0 -1
- package/src/interfaces/multi-recipient-chunk.d.ts +0 -54
- package/src/interfaces/multi-recipient-chunk.d.ts.map +0 -1
- package/src/interfaces/multi-recipient-chunk.js +0 -11
- package/src/interfaces/multi-recipient-chunk.js.map +0 -1
- package/src/interfaces/pbkdf2-config.d.ts +0 -7
- package/src/interfaces/pbkdf2-config.d.ts.map +0 -1
- package/src/interfaces/pbkdf2-config.js +0 -2
- package/src/interfaces/pbkdf2-config.js.map +0 -1
- package/src/interfaces/pbkdf2-consts.d.ts +0 -9
- package/src/interfaces/pbkdf2-consts.d.ts.map +0 -1
- package/src/interfaces/pbkdf2-consts.js +0 -2
- package/src/interfaces/pbkdf2-consts.js.map +0 -1
- package/src/interfaces/pbkdf2-result.d.ts +0 -6
- package/src/interfaces/pbkdf2-result.d.ts.map +0 -1
- package/src/interfaces/pbkdf2-result.js +0 -2
- package/src/interfaces/pbkdf2-result.js.map +0 -1
- package/src/interfaces/stream-config.d.ts +0 -14
- package/src/interfaces/stream-config.d.ts.map +0 -1
- package/src/interfaces/stream-config.js +0 -8
- package/src/interfaces/stream-config.js.map +0 -1
- package/src/interfaces/stream-header.d.ts +0 -29
- package/src/interfaces/stream-header.d.ts.map +0 -1
- package/src/interfaces/stream-header.js +0 -9
- package/src/interfaces/stream-header.js.map +0 -1
- package/src/interfaces/stream-progress.d.ts +0 -33
- package/src/interfaces/stream-progress.d.ts.map +0 -1
- package/src/interfaces/stream-progress.js +0 -2
- package/src/interfaces/stream-progress.js.map +0 -1
- package/src/lib/configuration-provenance-utils.d.ts +0 -11
- package/src/lib/configuration-provenance-utils.d.ts.map +0 -1
- package/src/lib/configuration-provenance-utils.js +0 -23
- package/src/lib/configuration-provenance-utils.js.map +0 -1
- package/src/lib/crypto-container.d.ts +0 -25
- package/src/lib/crypto-container.d.ts.map +0 -1
- package/src/lib/crypto-container.js +0 -46
- package/src/lib/crypto-container.js.map +0 -1
- package/src/lib/guid.d.ts +0 -344
- package/src/lib/guid.d.ts.map +0 -1
- package/src/lib/guid.js +0 -914
- package/src/lib/guid.js.map +0 -1
- package/src/lib/id-providers/custom-provider.d.ts +0 -46
- package/src/lib/id-providers/custom-provider.d.ts.map +0 -1
- package/src/lib/id-providers/custom-provider.js +0 -85
- package/src/lib/id-providers/custom-provider.js.map +0 -1
- package/src/lib/id-providers/guidv4-provider.d.ts +0 -56
- package/src/lib/id-providers/guidv4-provider.d.ts.map +0 -1
- package/src/lib/id-providers/guidv4-provider.js +0 -122
- package/src/lib/id-providers/guidv4-provider.js.map +0 -1
- package/src/lib/id-providers/index.d.ts.map +0 -1
- package/src/lib/id-providers/index.js +0 -29
- package/src/lib/id-providers/index.js.map +0 -1
- package/src/lib/id-providers/objectid-provider.d.ts +0 -43
- package/src/lib/id-providers/objectid-provider.d.ts.map +0 -1
- package/src/lib/id-providers/objectid-provider.js +0 -104
- package/src/lib/id-providers/objectid-provider.js.map +0 -1
- package/src/lib/id-providers/uuid-provider.d.ts +0 -52
- package/src/lib/id-providers/uuid-provider.d.ts.map +0 -1
- package/src/lib/id-providers/uuid-provider.js +0 -110
- package/src/lib/id-providers/uuid-provider.js.map +0 -1
- package/src/lib/index.d.ts +0 -6
- package/src/lib/index.d.ts.map +0 -1
- package/src/lib/index.js.map +0 -1
- package/src/lib/invariant-validator.d.ts +0 -59
- package/src/lib/invariant-validator.d.ts.map +0 -1
- package/src/lib/invariant-validator.js +0 -97
- package/src/lib/invariant-validator.js.map +0 -1
- package/src/lib/invariants/encryption-algorithm-consistency.d.ts +0 -17
- package/src/lib/invariants/encryption-algorithm-consistency.d.ts.map +0 -1
- package/src/lib/invariants/encryption-algorithm-consistency.js +0 -49
- package/src/lib/invariants/encryption-algorithm-consistency.js.map +0 -1
- package/src/lib/invariants/index.d.ts +0 -4
- package/src/lib/invariants/index.d.ts.map +0 -1
- package/src/lib/invariants/index.js.map +0 -1
- package/src/lib/invariants/pbkdf2-profiles-validity.d.ts +0 -16
- package/src/lib/invariants/pbkdf2-profiles-validity.d.ts.map +0 -1
- package/src/lib/invariants/pbkdf2-profiles-validity.js +0 -58
- package/src/lib/invariants/pbkdf2-profiles-validity.js.map +0 -1
- package/src/lib/invariants/recipient-id-consistency.d.ts +0 -18
- package/src/lib/invariants/recipient-id-consistency.d.ts.map +0 -1
- package/src/lib/invariants/recipient-id-consistency.js +0 -31
- package/src/lib/invariants/recipient-id-consistency.js.map +0 -1
- package/src/lib/multi-recipient-chunk-utils.d.ts +0 -38
- package/src/lib/multi-recipient-chunk-utils.d.ts.map +0 -1
- package/src/lib/multi-recipient-chunk-utils.js +0 -41
- package/src/lib/multi-recipient-chunk-utils.js.map +0 -1
- package/src/member.d.ts +0 -92
- package/src/member.d.ts.map +0 -1
- package/src/member.js +0 -322
- package/src/member.js.map +0 -1
- package/src/pbkdf2-profiles.d.ts.map +0 -1
- package/src/pbkdf2-profiles.js +0 -2
- package/src/pbkdf2-profiles.js.map +0 -1
- package/src/phone-number.d.ts +0 -6
- package/src/phone-number.d.ts.map +0 -1
- package/src/phone-number.js +0 -18
- package/src/phone-number.js.map +0 -1
- package/src/regexes.d.ts +0 -7
- package/src/regexes.d.ts.map +0 -1
- package/src/regexes.js +0 -7
- package/src/regexes.js.map +0 -1
- package/src/secure-buffer.d.ts +0 -61
- package/src/secure-buffer.d.ts.map +0 -1
- package/src/secure-buffer.js +0 -201
- package/src/secure-buffer.js.map +0 -1
- package/src/secure-string.d.ts +0 -46
- package/src/secure-string.d.ts.map +0 -1
- package/src/secure-string.js +0 -206
- package/src/secure-string.js.map +0 -1
- package/src/services/aes-gcm.d.ts +0 -57
- package/src/services/aes-gcm.d.ts.map +0 -1
- package/src/services/aes-gcm.js +0 -142
- package/src/services/aes-gcm.js.map +0 -1
- package/src/services/chunk-processor.d.ts +0 -31
- package/src/services/chunk-processor.d.ts.map +0 -1
- package/src/services/chunk-processor.js +0 -145
- package/src/services/chunk-processor.js.map +0 -1
- package/src/services/ecies/crypto-core.d.ts +0 -72
- package/src/services/ecies/crypto-core.d.ts.map +0 -1
- package/src/services/ecies/crypto-core.js +0 -205
- package/src/services/ecies/crypto-core.js.map +0 -1
- package/src/services/ecies/example.d.ts +0 -25
- package/src/services/ecies/example.d.ts.map +0 -1
- package/src/services/ecies/example.js +0 -121
- package/src/services/ecies/example.js.map +0 -1
- package/src/services/ecies/file.d.ts +0 -18
- package/src/services/ecies/file.d.ts.map +0 -1
- package/src/services/ecies/file.js +0 -106
- package/src/services/ecies/file.js.map +0 -1
- package/src/services/ecies/index.d.ts +0 -38
- package/src/services/ecies/index.d.ts.map +0 -1
- package/src/services/ecies/index.js.map +0 -1
- package/src/services/ecies/integration.d.ts +0 -59
- package/src/services/ecies/integration.d.ts.map +0 -1
- package/src/services/ecies/integration.js +0 -167
- package/src/services/ecies/integration.js.map +0 -1
- package/src/services/ecies/interfaces.d.ts +0 -54
- package/src/services/ecies/interfaces.d.ts.map +0 -1
- package/src/services/ecies/interfaces.js +0 -5
- package/src/services/ecies/interfaces.js.map +0 -1
- package/src/services/ecies/manual-test.d.ts +0 -29
- package/src/services/ecies/manual-test.d.ts.map +0 -1
- package/src/services/ecies/manual-test.js +0 -163
- package/src/services/ecies/manual-test.js.map +0 -1
- package/src/services/ecies/multi-recipient.d.ts +0 -56
- package/src/services/ecies/multi-recipient.d.ts.map +0 -1
- package/src/services/ecies/multi-recipient.js +0 -344
- package/src/services/ecies/multi-recipient.js.map +0 -1
- package/src/services/ecies/service.d.ts +0 -120
- package/src/services/ecies/service.d.ts.map +0 -1
- package/src/services/ecies/service.js +0 -210
- package/src/services/ecies/service.js.map +0 -1
- package/src/services/ecies/signature.d.ts +0 -27
- package/src/services/ecies/signature.d.ts.map +0 -1
- package/src/services/ecies/signature.js +0 -72
- package/src/services/ecies/signature.js.map +0 -1
- package/src/services/ecies/single-recipient.d.ts +0 -46
- package/src/services/ecies/single-recipient.d.ts.map +0 -1
- package/src/services/ecies/single-recipient.js +0 -322
- package/src/services/ecies/single-recipient.js.map +0 -1
- package/src/services/encryption-stream.d.ts +0 -71
- package/src/services/encryption-stream.d.ts.map +0 -1
- package/src/services/encryption-stream.js +0 -295
- package/src/services/encryption-stream.js.map +0 -1
- package/src/services/index.d.ts +0 -11
- package/src/services/index.d.ts.map +0 -1
- package/src/services/index.js.map +0 -1
- package/src/services/multi-recipient-processor.d.ts +0 -35
- package/src/services/multi-recipient-processor.d.ts.map +0 -1
- package/src/services/multi-recipient-processor.js +0 -289
- package/src/services/multi-recipient-processor.js.map +0 -1
- package/src/services/password-login.d.ts +0 -47
- package/src/services/password-login.d.ts.map +0 -1
- package/src/services/password-login.js +0 -115
- package/src/services/password-login.js.map +0 -1
- package/src/services/pbkdf2.d.ts +0 -54
- package/src/services/pbkdf2.d.ts.map +0 -1
- package/src/services/pbkdf2.js +0 -108
- package/src/services/pbkdf2.js.map +0 -1
- package/src/services/progress-tracker.d.ts +0 -23
- package/src/services/progress-tracker.d.ts.map +0 -1
- package/src/services/progress-tracker.js +0 -103
- package/src/services/progress-tracker.js.map +0 -1
- package/src/services/resumable-encryption.d.ts +0 -19
- package/src/services/resumable-encryption.d.ts.map +0 -1
- package/src/services/resumable-encryption.js +0 -105
- package/src/services/resumable-encryption.js.map +0 -1
- package/src/services/xor.d.ts +0 -37
- package/src/services/xor.d.ts.map +0 -1
- package/src/services/xor.js +0 -63
- package/src/services/xor.js.map +0 -1
- package/src/test-mocks/index.d.ts +0 -2
- package/src/test-mocks/index.d.ts.map +0 -1
- package/src/test-mocks/index.js +0 -2
- package/src/test-mocks/index.js.map +0 -1
- package/src/test-mocks/mock-frontend-member.d.ts +0 -85
- package/src/test-mocks/mock-frontend-member.d.ts.map +0 -1
- package/src/test-mocks/mock-frontend-member.js +0 -190
- package/src/test-mocks/mock-frontend-member.js.map +0 -1
- package/src/testing.d.ts +0 -2
- package/src/testing.d.ts.map +0 -1
- package/src/testing.js.map +0 -1
- package/src/translations/de.d.ts +0 -4
- package/src/translations/de.d.ts.map +0 -1
- package/src/translations/de.js.map +0 -1
- package/src/translations/en-US.d.ts +0 -4
- package/src/translations/en-US.d.ts.map +0 -1
- package/src/translations/en-US.js.map +0 -1
- package/src/translations/es.d.ts +0 -4
- package/src/translations/es.d.ts.map +0 -1
- package/src/translations/es.js.map +0 -1
- package/src/translations/fr.d.ts +0 -4
- package/src/translations/fr.d.ts.map +0 -1
- package/src/translations/fr.js.map +0 -1
- package/src/translations/ja.d.ts +0 -4
- package/src/translations/ja.d.ts.map +0 -1
- package/src/translations/ja.js.map +0 -1
- package/src/translations/uk.d.ts +0 -4
- package/src/translations/uk.d.ts.map +0 -1
- package/src/translations/uk.js.map +0 -1
- package/src/translations/zh-cn.d.ts +0 -4
- package/src/translations/zh-cn.d.ts.map +0 -1
- package/src/translations/zh-cn.js.map +0 -1
- package/src/types/deep-partial.d.ts +0 -4
- package/src/types/deep-partial.d.ts.map +0 -1
- package/src/types/deep-partial.js +0 -2
- package/src/types/deep-partial.js.map +0 -1
- package/src/types.d.ts.map +0 -1
- package/src/types.js +0 -2
- package/src/types.js.map +0 -1
- package/src/utils/encryption-type-utils.d.ts +0 -29
- package/src/utils/encryption-type-utils.d.ts.map +0 -1
- package/src/utils/encryption-type-utils.js +0 -61
- package/src/utils/encryption-type-utils.js.map +0 -1
- package/src/utils.d.ts +0 -68
- package/src/utils.d.ts.map +0 -1
- package/src/utils.js +0 -273
- package/src/utils.js.map +0 -1
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { BaseIdProvider } from '../../interfaces/id-provider';
|
|
2
|
+
import { randomBytes } from 'crypto';
|
|
3
|
+
import { IdProviderError } from '../../errors/id-provider';
|
|
4
|
+
import { IdProviderErrorType } from '../../enumerations/id-provider-error-type';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Custom ID provider that accepts any fixed byte length.
|
|
8
|
+
*
|
|
9
|
+
* Use this when you need a non-standard ID size or custom validation logic.
|
|
10
|
+
* For standard formats, prefer ObjectIdProvider, GuidV4Provider, or UuidProvider.
|
|
11
|
+
*
|
|
12
|
+
* Example:
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // 20-byte SHA-1 hash as recipient ID
|
|
15
|
+
* const provider = new CustomIdProvider(20, 'SHA1Hash');
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export class CustomIdProvider extends BaseIdProvider {
|
|
19
|
+
readonly byteLength: number;
|
|
20
|
+
readonly name: string;
|
|
21
|
+
|
|
22
|
+
constructor(byteLength: number, name = 'Custom') {
|
|
23
|
+
super();
|
|
24
|
+
|
|
25
|
+
if (!Number.isInteger(byteLength) || byteLength < 1 || byteLength > 255) {
|
|
26
|
+
throw new IdProviderError(
|
|
27
|
+
IdProviderErrorType.InvalidByteLengthParameter,
|
|
28
|
+
undefined,
|
|
29
|
+
undefined,
|
|
30
|
+
{ value: byteLength }
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
this.byteLength = byteLength;
|
|
35
|
+
this.name = name;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Generate a new random ID of the specified byte length.
|
|
40
|
+
*/
|
|
41
|
+
generate(): Uint8Array {
|
|
42
|
+
return randomBytes(this.byteLength);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Validate an ID buffer.
|
|
47
|
+
* Only checks length - override this method for custom validation.
|
|
48
|
+
*/
|
|
49
|
+
validate(id: Uint8Array): boolean {
|
|
50
|
+
return id.length === this.byteLength;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Serialize to hexadecimal string.
|
|
55
|
+
*/
|
|
56
|
+
serialize(id: Uint8Array): string {
|
|
57
|
+
this.validateLength(id, `${this.name}.serialize`);
|
|
58
|
+
|
|
59
|
+
return Array.from(id)
|
|
60
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
61
|
+
.join('');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Deserialize a hexadecimal string to buffer.
|
|
66
|
+
*/
|
|
67
|
+
deserialize(str: string): Uint8Array {
|
|
68
|
+
if (typeof str !== 'string') {
|
|
69
|
+
throw new IdProviderError(IdProviderErrorType.InputMustBeString);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const expectedLength = this.byteLength * 2;
|
|
73
|
+
if (str.length !== expectedLength) {
|
|
74
|
+
throw new IdProviderError(
|
|
75
|
+
IdProviderErrorType.InvalidStringLength,
|
|
76
|
+
undefined,
|
|
77
|
+
undefined,
|
|
78
|
+
{ expected: expectedLength, actual: str.length }
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (!/^[0-9a-fA-F]+$/.test(str)) {
|
|
83
|
+
throw new IdProviderError(IdProviderErrorType.InvalidCharacters);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const buffer = new Uint8Array(this.byteLength);
|
|
87
|
+
for (let i = 0; i < this.byteLength; i++) {
|
|
88
|
+
buffer[i] = parseInt(str.substr(i * 2, 2), 16);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return buffer;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Convert an ID of unknown type to a string representation.
|
|
96
|
+
* Delegates to base implementation.
|
|
97
|
+
*/
|
|
98
|
+
override idToString(id: unknown): string {
|
|
99
|
+
return super.idToString(id);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Convert a string representation of an ID back to an ID buffer.
|
|
104
|
+
* Delegates to deserialize.
|
|
105
|
+
*/
|
|
106
|
+
override idFromString(str: string): Uint8Array {
|
|
107
|
+
return this.deserialize(str);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { BaseIdProvider } from '../../interfaces/id-provider';
|
|
2
|
+
import { GuidV4 } from '../guid';
|
|
3
|
+
import { IdProviderError } from '../../errors/id-provider';
|
|
4
|
+
import { IdProviderErrorType } from '../../enumerations/id-provider-error-type';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* ID provider for GUIDv4 (16 bytes raw, 24 bytes base64).
|
|
8
|
+
*
|
|
9
|
+
* Uses the GuidV4 class which provides RFC 4122 compliant v4 GUIDs.
|
|
10
|
+
* The raw binary representation is 16 bytes (128 bits).
|
|
11
|
+
*
|
|
12
|
+
* Serialization uses base64 for compactness (24 characters vs 36 for hex with dashes).
|
|
13
|
+
*/
|
|
14
|
+
export class GuidV4Provider extends BaseIdProvider {
|
|
15
|
+
readonly byteLength = 16;
|
|
16
|
+
readonly name = 'GUIDv4';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Generate a new random GUIDv4.
|
|
20
|
+
*/
|
|
21
|
+
generate(): Uint8Array {
|
|
22
|
+
const guid = GuidV4.generate();
|
|
23
|
+
return guid.asRawGuidBufferUnsafe;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Validate a GUID buffer.
|
|
28
|
+
* Checks length and RFC 4122 v4 compliance.
|
|
29
|
+
*/
|
|
30
|
+
validate(id: Uint8Array): boolean {
|
|
31
|
+
if (id.length !== this.byteLength) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
try {
|
|
36
|
+
// Convert to GuidV4 and validate
|
|
37
|
+
const guid = new GuidV4(Buffer.from(id));
|
|
38
|
+
return guid.isValidV4();
|
|
39
|
+
} catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Serialize GUID to base64 string (24 characters).
|
|
46
|
+
*/
|
|
47
|
+
serialize(id: Uint8Array): string {
|
|
48
|
+
this.validateLength(id, 'GuidV4Provider.serialize');
|
|
49
|
+
|
|
50
|
+
try {
|
|
51
|
+
const guid = new GuidV4(Buffer.from(id));
|
|
52
|
+
return guid.asBase64Guid;
|
|
53
|
+
} catch (error) {
|
|
54
|
+
throw new IdProviderError(
|
|
55
|
+
IdProviderErrorType.InvalidGuidBuffer,
|
|
56
|
+
{ cause: error instanceof Error ? error : undefined },
|
|
57
|
+
undefined,
|
|
58
|
+
{ message: error instanceof Error ? error.message : String(error) }
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Deserialize a base64 or hex GUID string to buffer.
|
|
65
|
+
* Accepts multiple formats: base64 (24 chars), short hex (32 chars), full hex (36 chars).
|
|
66
|
+
*/
|
|
67
|
+
deserialize(str: string): Uint8Array {
|
|
68
|
+
if (typeof str !== 'string') {
|
|
69
|
+
throw new IdProviderError(IdProviderErrorType.InputMustBeString);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
try {
|
|
73
|
+
const guid = GuidV4.parse(str);
|
|
74
|
+
return guid.asRawGuidBufferUnsafe;
|
|
75
|
+
} catch (error) {
|
|
76
|
+
throw new IdProviderError(
|
|
77
|
+
IdProviderErrorType.ParseFailed,
|
|
78
|
+
{ cause: error instanceof Error ? error : undefined },
|
|
79
|
+
undefined,
|
|
80
|
+
{ input: str, message: error instanceof Error ? error.message : String(error) }
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Create a GUID from a namespace and name (v5 - SHA-1 based).
|
|
87
|
+
* Useful for deterministic GUIDs.
|
|
88
|
+
*/
|
|
89
|
+
fromNamespace(namespace: string, name: string): Uint8Array {
|
|
90
|
+
const guid = GuidV4.v5(name, namespace);
|
|
91
|
+
return guid.asRawGuidBufferUnsafe;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Get the GUID version from a buffer.
|
|
96
|
+
* Should return 4 for valid v4 GUIDs.
|
|
97
|
+
*/
|
|
98
|
+
getVersion(id: Uint8Array): number | undefined {
|
|
99
|
+
this.validateLength(id, 'GuidV4Provider.getVersion');
|
|
100
|
+
|
|
101
|
+
try {
|
|
102
|
+
const guid = new GuidV4(Buffer.from(id));
|
|
103
|
+
return guid.getVersion();
|
|
104
|
+
} catch {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Check if a GUID is the empty/nil GUID (all zeros).
|
|
111
|
+
*/
|
|
112
|
+
isEmpty(id: Uint8Array): boolean {
|
|
113
|
+
this.validateLength(id, 'GuidV4Provider.isEmpty');
|
|
114
|
+
|
|
115
|
+
try {
|
|
116
|
+
const guid = new GuidV4(Buffer.from(id));
|
|
117
|
+
return guid.isEmpty();
|
|
118
|
+
} catch {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Convert an ID of unknown type to a string representation.
|
|
125
|
+
* Handles Uint8Array, GuidV4 instances, and falls back to String().
|
|
126
|
+
*/
|
|
127
|
+
override idToString(id: unknown): string {
|
|
128
|
+
if (id instanceof GuidV4) {
|
|
129
|
+
return id.asBase64Guid;
|
|
130
|
+
}
|
|
131
|
+
return super.idToString(id);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Convert a string representation of an ID back to an ID buffer.
|
|
136
|
+
* Delegates to deserialize.
|
|
137
|
+
*/
|
|
138
|
+
override idFromString(str: string): Uint8Array {
|
|
139
|
+
return this.deserialize(str);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
@@ -1,30 +1,31 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* ID Providers for recipient identification in multi-recipient encryption.
|
|
3
|
-
*
|
|
3
|
+
*
|
|
4
4
|
* The library supports multiple ID formats to accommodate different use cases:
|
|
5
5
|
* - ObjectID: MongoDB/BSON ObjectID (12 bytes)
|
|
6
6
|
* - GUIDv4: RFC 4122 v4 GUID (16 bytes, base64 serialization)
|
|
7
7
|
* - UUID: RFC 4122 v4 UUID (16 bytes, standard format with dashes)
|
|
8
8
|
* - Legacy32Byte: Backward compatible 32-byte IDs (deprecated)
|
|
9
9
|
* - Custom: User-defined byte length and validation
|
|
10
|
-
*
|
|
10
|
+
*
|
|
11
11
|
* @example
|
|
12
12
|
* ```typescript
|
|
13
13
|
* import { ObjectIdProvider, GuidV4Provider } from './lib/id-providers';
|
|
14
|
-
*
|
|
14
|
+
*
|
|
15
15
|
* // Use MongoDB ObjectIDs (12 bytes)
|
|
16
16
|
* const objectIdProvider = new ObjectIdProvider();
|
|
17
17
|
* const id = objectIdProvider.generate();
|
|
18
|
-
*
|
|
18
|
+
*
|
|
19
19
|
* // Use GUIDs (16 bytes)
|
|
20
20
|
* const guidProvider = new GuidV4Provider();
|
|
21
21
|
* const guid = guidProvider.generate();
|
|
22
22
|
* ```
|
|
23
23
|
*/
|
|
24
|
+
|
|
24
25
|
export { ObjectIdProvider } from './objectid-provider';
|
|
25
26
|
export { GuidV4Provider } from './guidv4-provider';
|
|
26
27
|
export { UuidProvider } from './uuid-provider';
|
|
27
28
|
export { CustomIdProvider } from './custom-provider';
|
|
29
|
+
|
|
28
30
|
export type { IIdProvider } from '../../interfaces/id-provider';
|
|
29
31
|
export { BaseIdProvider } from '../../interfaces/id-provider';
|
|
30
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { BaseIdProvider } from '../../interfaces/id-provider';
|
|
2
|
+
import { ObjectId } from 'bson';
|
|
3
|
+
import { IdProviderError } from '../../errors/id-provider';
|
|
4
|
+
import { IdProviderErrorType } from '../../enumerations/id-provider-error-type';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* ID provider for MongoDB/BSON ObjectIDs (12 bytes).
|
|
8
|
+
*
|
|
9
|
+
* Format: 4-byte timestamp + 5-byte random + 3-byte counter
|
|
10
|
+
* This matches the MongoDB ObjectID specification.
|
|
11
|
+
*
|
|
12
|
+
* @see https://docs.mongodb.com/manual/reference/method/ObjectId/
|
|
13
|
+
*/
|
|
14
|
+
export class ObjectIdProvider extends BaseIdProvider {
|
|
15
|
+
readonly byteLength = 12;
|
|
16
|
+
readonly name = 'ObjectID';
|
|
17
|
+
|
|
18
|
+
constructor() {
|
|
19
|
+
super();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Generate a new MongoDB-style ObjectID.
|
|
24
|
+
* Format: [timestamp:4][random:5][counter:3]
|
|
25
|
+
*/
|
|
26
|
+
generate(): Uint8Array {
|
|
27
|
+
const buffer = new Uint8Array(12);
|
|
28
|
+
const objectId = new ObjectId();
|
|
29
|
+
|
|
30
|
+
if (typeof objectId.id === 'string') {
|
|
31
|
+
const hex = objectId.id as string;
|
|
32
|
+
for (let i = 0; i < 12; i++) {
|
|
33
|
+
buffer[i] = parseInt(hex.substring(i * 2, (i * 2) + 2), 16);
|
|
34
|
+
}
|
|
35
|
+
} else {
|
|
36
|
+
buffer.set(objectId.id, 0);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return buffer;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Validate an ObjectID buffer.
|
|
44
|
+
* Checks length and ensures it's not all zeros (invalid ObjectID).
|
|
45
|
+
*/
|
|
46
|
+
validate(id: Uint8Array): boolean {
|
|
47
|
+
if (id.length !== this.byteLength) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Check if all bytes are zero (invalid ObjectID)
|
|
52
|
+
let allZeros = true;
|
|
53
|
+
for (let i = 0; i < id.length; i++) {
|
|
54
|
+
if (id[i] !== 0) {
|
|
55
|
+
allZeros = false;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return !allZeros;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Serialize ObjectID to 24-character hex string (MongoDB standard).
|
|
65
|
+
*/
|
|
66
|
+
serialize(id: Uint8Array): string {
|
|
67
|
+
this.validateLength(id, 'ObjectIdProvider.serialize');
|
|
68
|
+
|
|
69
|
+
return Array.from(id)
|
|
70
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
71
|
+
.join('');
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Deserialize a 24-character hex string to ObjectID buffer.
|
|
76
|
+
*/
|
|
77
|
+
deserialize(str: string): Uint8Array {
|
|
78
|
+
if (typeof str !== 'string') {
|
|
79
|
+
throw new IdProviderError(IdProviderErrorType.InputMustBeString);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (str.length !== 24) {
|
|
83
|
+
throw new IdProviderError(
|
|
84
|
+
IdProviderErrorType.InvalidStringLength,
|
|
85
|
+
undefined,
|
|
86
|
+
undefined,
|
|
87
|
+
{ expected: 24, actual: str.length }
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (!/^[0-9a-fA-F]{24}$/.test(str)) {
|
|
92
|
+
throw new IdProviderError(IdProviderErrorType.InvalidCharacters);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const buffer = new Uint8Array(12);
|
|
96
|
+
for (let i = 0; i < 12; i++) {
|
|
97
|
+
buffer[i] = parseInt(str.substr(i * 2, 2), 16);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
if (!this.validate(buffer)) {
|
|
101
|
+
throw new IdProviderError(IdProviderErrorType.InvalidDeserializedId);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return buffer;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Convert an ID of unknown type to a string representation.
|
|
109
|
+
* Handles Uint8Array, ObjectId instances, and falls back to String().
|
|
110
|
+
*/
|
|
111
|
+
override idToString(id: unknown): string {
|
|
112
|
+
if (id instanceof ObjectId) {
|
|
113
|
+
return id.toHexString();
|
|
114
|
+
}
|
|
115
|
+
return super.idToString(id);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Convert a string representation of an ID back to an ID buffer.
|
|
120
|
+
* Delegates to deserialize.
|
|
121
|
+
*/
|
|
122
|
+
override idFromString(str: string): Uint8Array {
|
|
123
|
+
return this.deserialize(str);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { BaseIdProvider } from '../../interfaces/id-provider';
|
|
2
|
+
import { v4 as uuidv4, validate as uuidValidate, parse as uuidParse } from 'uuid';
|
|
3
|
+
import { IdProviderError } from '../../errors/id-provider';
|
|
4
|
+
import { IdProviderErrorType } from '../../enumerations/id-provider-error-type';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* ID provider for standard RFC 4122 UUIDs (16 bytes).
|
|
8
|
+
*
|
|
9
|
+
* Uses the 'uuid' npm package for UUID generation and validation.
|
|
10
|
+
* Serialization uses the standard UUID format with dashes (36 characters).
|
|
11
|
+
*
|
|
12
|
+
* This is functionally similar to GuidV4Provider but uses standard UUID
|
|
13
|
+
* string formatting (with dashes) instead of base64.
|
|
14
|
+
*/
|
|
15
|
+
export class UuidProvider extends BaseIdProvider {
|
|
16
|
+
readonly byteLength = 16;
|
|
17
|
+
readonly name = 'UUID';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Generate a new random UUIDv4.
|
|
21
|
+
*/
|
|
22
|
+
generate(): Uint8Array {
|
|
23
|
+
const buffer = new Uint8Array(16);
|
|
24
|
+
uuidv4(undefined, buffer);
|
|
25
|
+
return buffer;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Validate a UUID buffer.
|
|
30
|
+
* Checks length and RFC 4122 compliance.
|
|
31
|
+
*/
|
|
32
|
+
validate(id: Uint8Array): boolean {
|
|
33
|
+
if (id.length !== this.byteLength) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
try {
|
|
38
|
+
// Convert to string and validate
|
|
39
|
+
const str = this.serialize(id);
|
|
40
|
+
return uuidValidate(str);
|
|
41
|
+
} catch {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Serialize UUID to standard format with dashes (36 characters).
|
|
48
|
+
* Format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
|
|
49
|
+
*/
|
|
50
|
+
serialize(id: Uint8Array): string {
|
|
51
|
+
this.validateLength(id, 'UuidProvider.serialize');
|
|
52
|
+
|
|
53
|
+
const hex = Array.from(id)
|
|
54
|
+
.map(b => b.toString(16).padStart(2, '0'))
|
|
55
|
+
.join('');
|
|
56
|
+
|
|
57
|
+
// Insert dashes at proper positions
|
|
58
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Deserialize a UUID string (with or without dashes) to buffer.
|
|
63
|
+
*/
|
|
64
|
+
deserialize(str: string): Uint8Array {
|
|
65
|
+
if (typeof str !== 'string') {
|
|
66
|
+
throw new IdProviderError(IdProviderErrorType.InputMustBeString);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Validate format
|
|
70
|
+
if (!uuidValidate(str)) {
|
|
71
|
+
throw new IdProviderError(
|
|
72
|
+
IdProviderErrorType.InvalidUuidFormat,
|
|
73
|
+
undefined,
|
|
74
|
+
undefined,
|
|
75
|
+
{ input: str }
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
try {
|
|
80
|
+
const buffer = uuidParse(str);
|
|
81
|
+
return buffer;
|
|
82
|
+
} catch (error) {
|
|
83
|
+
throw new IdProviderError(
|
|
84
|
+
IdProviderErrorType.ParseFailed,
|
|
85
|
+
{ cause: error instanceof Error ? error : undefined },
|
|
86
|
+
undefined,
|
|
87
|
+
{ input: str, message: error instanceof Error ? error.message : String(error) }
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Extract the version from a UUID buffer.
|
|
94
|
+
* Should return 4 for v4 UUIDs.
|
|
95
|
+
*/
|
|
96
|
+
getVersion(id: Uint8Array): number | undefined {
|
|
97
|
+
this.validateLength(id, 'UuidProvider.getVersion');
|
|
98
|
+
|
|
99
|
+
// Version is in the most significant 4 bits of byte 6
|
|
100
|
+
const versionByte = id[6];
|
|
101
|
+
return (versionByte >> 4) & 0x0F;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Check if a UUID is the nil UUID (all zeros).
|
|
106
|
+
*/
|
|
107
|
+
isNil(id: Uint8Array): boolean {
|
|
108
|
+
this.validateLength(id, 'UuidProvider.isNil');
|
|
109
|
+
|
|
110
|
+
for (let i = 0; i < id.length; i++) {
|
|
111
|
+
if (id[i] !== 0) {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return true;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Convert an ID of unknown type to a string representation.
|
|
120
|
+
* Delegates to base implementation.
|
|
121
|
+
*/
|
|
122
|
+
override idToString(id: unknown): string {
|
|
123
|
+
return super.idToString(id);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Convert a string representation of an ID back to an ID buffer.
|
|
128
|
+
* Delegates to deserialize.
|
|
129
|
+
*/
|
|
130
|
+
override idFromString(str: string): Uint8Array {
|
|
131
|
+
return this.deserialize(str);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { IConstants } from '../interfaces/constants';
|
|
2
|
+
import { IInvariant } from '../interfaces/invariant';
|
|
3
|
+
import {
|
|
4
|
+
RecipientIdConsistencyInvariant,
|
|
5
|
+
Pbkdf2ProfilesValidityInvariant,
|
|
6
|
+
EncryptionAlgorithmConsistencyInvariant,
|
|
7
|
+
} from './invariants';
|
|
8
|
+
import { EciesComponentId, getEciesI18nEngine } from '../i18n-setup';
|
|
9
|
+
import { EciesStringKey } from '../enumerations/ecies-string-key';
|
|
10
|
+
import { TranslatableGenericError } from '@digitaldefiance/i18n-lib';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Validates all configuration invariants.
|
|
14
|
+
*
|
|
15
|
+
* This class maintains a registry of all invariants and validates them
|
|
16
|
+
* whenever a configuration is created or modified.
|
|
17
|
+
*
|
|
18
|
+
* Adding new invariants is easy - just:
|
|
19
|
+
* 1. Create a class implementing IInvariant
|
|
20
|
+
* 2. Add it to the DEFAULT_INVARIANTS array
|
|
21
|
+
* 3. Tests will automatically validate it
|
|
22
|
+
*/
|
|
23
|
+
export class InvariantValidator {
|
|
24
|
+
/**
|
|
25
|
+
* Default invariants that are always checked
|
|
26
|
+
*/
|
|
27
|
+
private static readonly DEFAULT_INVARIANTS: IInvariant[] = [
|
|
28
|
+
new RecipientIdConsistencyInvariant(),
|
|
29
|
+
new Pbkdf2ProfilesValidityInvariant(),
|
|
30
|
+
new EncryptionAlgorithmConsistencyInvariant(),
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Custom invariants registered at runtime
|
|
35
|
+
*/
|
|
36
|
+
private static customInvariants: IInvariant[] = [];
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Register a custom invariant to be checked alongside default invariants
|
|
40
|
+
*/
|
|
41
|
+
static registerInvariant(invariant: IInvariant): void {
|
|
42
|
+
this.customInvariants.push(invariant);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Clear all custom invariants (useful for testing)
|
|
47
|
+
*/
|
|
48
|
+
static clearCustomInvariants(): void {
|
|
49
|
+
this.customInvariants = [];
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Get all invariants (default + custom)
|
|
54
|
+
*/
|
|
55
|
+
static getAllInvariants(): readonly IInvariant[] {
|
|
56
|
+
return [...this.DEFAULT_INVARIANTS, ...this.customInvariants];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Validate all invariants for a given configuration
|
|
61
|
+
*
|
|
62
|
+
* @param config The configuration to validate
|
|
63
|
+
* @throws Error if any invariant fails
|
|
64
|
+
*/
|
|
65
|
+
static validateAll(config: IConstants): void {
|
|
66
|
+
const allInvariants = this.getAllInvariants();
|
|
67
|
+
const failures: string[] = [];
|
|
68
|
+
|
|
69
|
+
for (const invariant of allInvariants) {
|
|
70
|
+
if (!invariant.check(config)) {
|
|
71
|
+
failures.push(invariant.errorMessage(config));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (failures.length > 0) {
|
|
76
|
+
const engine = getEciesI18nEngine();
|
|
77
|
+
throw TranslatableGenericError.withEngine(
|
|
78
|
+
engine,
|
|
79
|
+
EciesComponentId,
|
|
80
|
+
EciesStringKey.Error_Invariant_ConfigurationValidationFailedMultipleTemplate,
|
|
81
|
+
{ count: failures.length, failures: failures.join('\n\n') },
|
|
82
|
+
undefined,
|
|
83
|
+
{ invariantCount: failures.length }
|
|
84
|
+
);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Check a single invariant
|
|
90
|
+
*
|
|
91
|
+
* @param config The configuration to validate
|
|
92
|
+
* @param invariantName Name of the invariant to check
|
|
93
|
+
* @returns true if invariant passes, false otherwise
|
|
94
|
+
*/
|
|
95
|
+
static checkInvariant(config: IConstants, invariantName: string): boolean {
|
|
96
|
+
const invariant = this.getAllInvariants().find(i => i.name === invariantName);
|
|
97
|
+
if (!invariant) {
|
|
98
|
+
const engine = getEciesI18nEngine();
|
|
99
|
+
throw TranslatableGenericError.withEngine(
|
|
100
|
+
engine,
|
|
101
|
+
EciesComponentId,
|
|
102
|
+
EciesStringKey.Error_Invariant_UnknownInvariantTemplate,
|
|
103
|
+
{ name: invariantName },
|
|
104
|
+
undefined,
|
|
105
|
+
{ invariantName }
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
return invariant.check(config);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Get failure details for a specific invariant
|
|
113
|
+
*
|
|
114
|
+
* @param config The configuration to validate
|
|
115
|
+
* @param invariantName Name of the invariant to check
|
|
116
|
+
* @returns Error message if invariant fails, null if it passes
|
|
117
|
+
*/
|
|
118
|
+
static getFailureDetails(config: IConstants, invariantName: string): string | null {
|
|
119
|
+
const invariant = this.getAllInvariants().find(i => i.name === invariantName);
|
|
120
|
+
if (!invariant) {
|
|
121
|
+
const engine = getEciesI18nEngine();
|
|
122
|
+
throw TranslatableGenericError.withEngine(
|
|
123
|
+
engine,
|
|
124
|
+
EciesComponentId,
|
|
125
|
+
EciesStringKey.Error_Invariant_UnknownInvariantTemplate,
|
|
126
|
+
{ name: invariantName },
|
|
127
|
+
undefined,
|
|
128
|
+
{ invariantName }
|
|
129
|
+
);
|
|
130
|
+
}
|
|
131
|
+
return invariant.check(config) ? null : invariant.errorMessage(config);
|
|
132
|
+
}
|
|
133
|
+
}
|