@brightchain/brightchain-api-lib 0.0.1
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/brightchain-api-lib/README.md +101 -0
- package/package.json +53 -0
- package/src/index.d.ts +88 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +101 -0
- package/src/index.js.map +1 -0
- package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.d.ts +71 -0
- package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.d.ts.map +1 -0
- package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.js +119 -0
- package/src/lib/__tests__/fixtures/mock-backend-brightchain-member.js.map +1 -0
- package/src/lib/__tests__/fixtures/mocked-model.d.ts +90 -0
- package/src/lib/__tests__/fixtures/mocked-model.d.ts.map +1 -0
- package/src/lib/__tests__/fixtures/mocked-model.js +101 -0
- package/src/lib/__tests__/fixtures/mocked-model.js.map +1 -0
- package/src/lib/__tests__/helpers/application.mock.d.ts +5 -0
- package/src/lib/__tests__/helpers/application.mock.d.ts.map +1 -0
- package/src/lib/__tests__/helpers/application.mock.js +52 -0
- package/src/lib/__tests__/helpers/application.mock.js.map +1 -0
- package/src/lib/__tests__/helpers/model-mocks.mock.d.ts +43 -0
- package/src/lib/__tests__/helpers/model-mocks.mock.d.ts.map +1 -0
- package/src/lib/__tests__/helpers/model-mocks.mock.js +67 -0
- package/src/lib/__tests__/helpers/model-mocks.mock.js.map +1 -0
- package/src/lib/appConstants.d.ts +87 -0
- package/src/lib/appConstants.d.ts.map +1 -0
- package/src/lib/appConstants.js +25 -0
- package/src/lib/appConstants.js.map +1 -0
- package/src/lib/application-base.d.ts +39 -0
- package/src/lib/application-base.d.ts.map +1 -0
- package/src/lib/application-base.js +84 -0
- package/src/lib/application-base.js.map +1 -0
- package/src/lib/application.d.ts +14 -0
- package/src/lib/application.d.ts.map +1 -0
- package/src/lib/application.js +105 -0
- package/src/lib/application.js.map +1 -0
- package/src/lib/availability/availabilityMetrics.d.ts +241 -0
- package/src/lib/availability/availabilityMetrics.d.ts.map +1 -0
- package/src/lib/availability/availabilityMetrics.js +425 -0
- package/src/lib/availability/availabilityMetrics.js.map +1 -0
- package/src/lib/availability/availabilityService.d.ts +250 -0
- package/src/lib/availability/availabilityService.d.ts.map +1 -0
- package/src/lib/availability/availabilityService.js +593 -0
- package/src/lib/availability/availabilityService.js.map +1 -0
- package/src/lib/availability/blockRegistry.d.ts +141 -0
- package/src/lib/availability/blockRegistry.d.ts.map +1 -0
- package/src/lib/availability/blockRegistry.js +257 -0
- package/src/lib/availability/blockRegistry.js.map +1 -0
- package/src/lib/availability/configValidation.d.ts +72 -0
- package/src/lib/availability/configValidation.d.ts.map +1 -0
- package/src/lib/availability/configValidation.js +261 -0
- package/src/lib/availability/configValidation.js.map +1 -0
- package/src/lib/availability/discoveryProtocol.d.ts +160 -0
- package/src/lib/availability/discoveryProtocol.d.ts.map +1 -0
- package/src/lib/availability/discoveryProtocol.js +304 -0
- package/src/lib/availability/discoveryProtocol.js.map +1 -0
- package/src/lib/availability/gossipService.d.ts +158 -0
- package/src/lib/availability/gossipService.d.ts.map +1 -0
- package/src/lib/availability/gossipService.js +271 -0
- package/src/lib/availability/gossipService.js.map +1 -0
- package/src/lib/availability/heartbeatMonitor.d.ts +204 -0
- package/src/lib/availability/heartbeatMonitor.d.ts.map +1 -0
- package/src/lib/availability/heartbeatMonitor.js +375 -0
- package/src/lib/availability/heartbeatMonitor.js.map +1 -0
- package/src/lib/availability/index.d.ts +15 -0
- package/src/lib/availability/index.d.ts.map +1 -0
- package/src/lib/availability/index.js +18 -0
- package/src/lib/availability/index.js.map +1 -0
- package/src/lib/availability/reconciliationService.d.ts +237 -0
- package/src/lib/availability/reconciliationService.d.ts.map +1 -0
- package/src/lib/availability/reconciliationService.js +513 -0
- package/src/lib/availability/reconciliationService.js.map +1 -0
- package/src/lib/blocks/handle.d.ts +45 -0
- package/src/lib/blocks/handle.d.ts.map +1 -0
- package/src/lib/blocks/handle.js +221 -0
- package/src/lib/blocks/handle.js.map +1 -0
- package/src/lib/constants.d.ts +50 -0
- package/src/lib/constants.d.ts.map +1 -0
- package/src/lib/constants.js +58 -0
- package/src/lib/constants.js.map +1 -0
- package/src/lib/controllers/base.d.ts +50 -0
- package/src/lib/controllers/base.d.ts.map +1 -0
- package/src/lib/controllers/base.js +235 -0
- package/src/lib/controllers/base.js.map +1 -0
- package/src/lib/controllers/user.d.ts +9 -0
- package/src/lib/controllers/user.d.ts.map +1 -0
- package/src/lib/controllers/user.js +21 -0
- package/src/lib/controllers/user.js.map +1 -0
- package/src/lib/datastore/block-document-store-factory.d.ts +19 -0
- package/src/lib/datastore/block-document-store-factory.d.ts.map +1 -0
- package/src/lib/datastore/block-document-store-factory.js +29 -0
- package/src/lib/datastore/block-document-store-factory.js.map +1 -0
- package/src/lib/datastore/block-document-store.d.ts +185 -0
- package/src/lib/datastore/block-document-store.d.ts.map +1 -0
- package/src/lib/datastore/block-document-store.js +590 -0
- package/src/lib/datastore/block-document-store.js.map +1 -0
- package/src/lib/datastore/document-model-adapter.d.ts +48 -0
- package/src/lib/datastore/document-model-adapter.d.ts.map +1 -0
- package/src/lib/datastore/document-model-adapter.js +178 -0
- package/src/lib/datastore/document-model-adapter.js.map +1 -0
- package/src/lib/datastore/document-store.d.ts +64 -0
- package/src/lib/datastore/document-store.d.ts.map +1 -0
- package/src/lib/datastore/document-store.js +3 -0
- package/src/lib/datastore/document-store.js.map +1 -0
- package/src/lib/datastore/memory-document-store.d.ts +6 -0
- package/src/lib/datastore/memory-document-store.d.ts.map +1 -0
- package/src/lib/datastore/memory-document-store.js +196 -0
- package/src/lib/datastore/memory-document-store.js.map +1 -0
- package/src/lib/documents/base.d.ts +5 -0
- package/src/lib/documents/base.d.ts.map +1 -0
- package/src/lib/documents/base.js +3 -0
- package/src/lib/documents/base.js.map +1 -0
- package/src/lib/documents/email-token.d.ts +8 -0
- package/src/lib/documents/email-token.d.ts.map +1 -0
- package/src/lib/documents/email-token.js +3 -0
- package/src/lib/documents/email-token.js.map +1 -0
- package/src/lib/documents/index.d.ts +7 -0
- package/src/lib/documents/index.d.ts.map +1 -0
- package/src/lib/documents/index.js +3 -0
- package/src/lib/documents/index.js.map +1 -0
- package/src/lib/documents/mnemonic.d.ts +8 -0
- package/src/lib/documents/mnemonic.d.ts.map +1 -0
- package/src/lib/documents/mnemonic.js +3 -0
- package/src/lib/documents/mnemonic.js.map +1 -0
- package/src/lib/documents/role.d.ts +8 -0
- package/src/lib/documents/role.d.ts.map +1 -0
- package/src/lib/documents/role.js +3 -0
- package/src/lib/documents/role.js.map +1 -0
- package/src/lib/documents/used-direct-login-token.d.ts +5 -0
- package/src/lib/documents/used-direct-login-token.d.ts.map +1 -0
- package/src/lib/documents/used-direct-login-token.js +3 -0
- package/src/lib/documents/used-direct-login-token.js.map +1 -0
- package/src/lib/documents/user-role.d.ts +8 -0
- package/src/lib/documents/user-role.d.ts.map +1 -0
- package/src/lib/documents/user-role.js +3 -0
- package/src/lib/documents/user-role.js.map +1 -0
- package/src/lib/documents/user.d.ts +13 -0
- package/src/lib/documents/user.d.ts.map +1 -0
- package/src/lib/documents/user.js +3 -0
- package/src/lib/documents/user.js.map +1 -0
- package/src/lib/enumerations/model-name.d.ts +30 -0
- package/src/lib/enumerations/model-name.d.ts.map +1 -0
- package/src/lib/enumerations/model-name.js +34 -0
- package/src/lib/enumerations/model-name.js.map +1 -0
- package/src/lib/enumerations/schema-collection.d.ts +30 -0
- package/src/lib/enumerations/schema-collection.d.ts.map +1 -0
- package/src/lib/enumerations/schema-collection.js +34 -0
- package/src/lib/enumerations/schema-collection.js.map +1 -0
- package/src/lib/enumerations/symmetric-error-type.d.ts +5 -0
- package/src/lib/enumerations/symmetric-error-type.d.ts.map +1 -0
- package/src/lib/enumerations/symmetric-error-type.js +9 -0
- package/src/lib/enumerations/symmetric-error-type.js.map +1 -0
- package/src/lib/environment.d.ts +23 -0
- package/src/lib/environment.d.ts.map +1 -0
- package/src/lib/environment.js +75 -0
- package/src/lib/environment.js.map +1 -0
- package/src/lib/errors/admin-role-not-found.d.ts +6 -0
- package/src/lib/errors/admin-role-not-found.d.ts.map +1 -0
- package/src/lib/errors/admin-role-not-found.js +14 -0
- package/src/lib/errors/admin-role-not-found.js.map +1 -0
- package/src/lib/errors/email-already-verified.d.ts +5 -0
- package/src/lib/errors/email-already-verified.d.ts.map +1 -0
- package/src/lib/errors/email-already-verified.js +11 -0
- package/src/lib/errors/email-already-verified.js.map +1 -0
- package/src/lib/errors/email-token-failed-to-send.d.ts +7 -0
- package/src/lib/errors/email-token-failed-to-send.d.ts.map +1 -0
- package/src/lib/errors/email-token-failed-to-send.js +14 -0
- package/src/lib/errors/email-token-failed-to-send.js.map +1 -0
- package/src/lib/errors/express-validation.d.ts +7 -0
- package/src/lib/errors/express-validation.d.ts.map +1 -0
- package/src/lib/errors/express-validation.js +14 -0
- package/src/lib/errors/express-validation.js.map +1 -0
- package/src/lib/errors/invalid-backup-code-version.d.ts +5 -0
- package/src/lib/errors/invalid-backup-code-version.d.ts.map +1 -0
- package/src/lib/errors/invalid-backup-code-version.js +12 -0
- package/src/lib/errors/invalid-backup-code-version.js.map +1 -0
- package/src/lib/errors/invalid-challenge-response.d.ts +5 -0
- package/src/lib/errors/invalid-challenge-response.d.ts.map +1 -0
- package/src/lib/errors/invalid-challenge-response.js +14 -0
- package/src/lib/errors/invalid-challenge-response.js.map +1 -0
- package/src/lib/errors/invalid-expired-token.d.ts +5 -0
- package/src/lib/errors/invalid-expired-token.d.ts.map +1 -0
- package/src/lib/errors/invalid-expired-token.js +13 -0
- package/src/lib/errors/invalid-expired-token.js.map +1 -0
- package/src/lib/errors/invalid-jwt-token.d.ts +5 -0
- package/src/lib/errors/invalid-jwt-token.d.ts.map +1 -0
- package/src/lib/errors/invalid-jwt-token.js +12 -0
- package/src/lib/errors/invalid-jwt-token.js.map +1 -0
- package/src/lib/errors/last-admin-error.d.ts +7 -0
- package/src/lib/errors/last-admin-error.d.ts.map +1 -0
- package/src/lib/errors/last-admin-error.js +16 -0
- package/src/lib/errors/last-admin-error.js.map +1 -0
- package/src/lib/errors/login-challenge-expired.d.ts +5 -0
- package/src/lib/errors/login-challenge-expired.d.ts.map +1 -0
- package/src/lib/errors/login-challenge-expired.js +14 -0
- package/src/lib/errors/login-challenge-expired.js.map +1 -0
- package/src/lib/errors/member-role-not-found.d.ts +7 -0
- package/src/lib/errors/member-role-not-found.d.ts.map +1 -0
- package/src/lib/errors/member-role-not-found.js +14 -0
- package/src/lib/errors/member-role-not-found.js.map +1 -0
- package/src/lib/errors/missing-validated-data.d.ts +8 -0
- package/src/lib/errors/missing-validated-data.d.ts.map +1 -0
- package/src/lib/errors/missing-validated-data.js +32 -0
- package/src/lib/errors/missing-validated-data.js.map +1 -0
- package/src/lib/errors/mnemonic-or-password-required.d.ts +5 -0
- package/src/lib/errors/mnemonic-or-password-required.d.ts.map +1 -0
- package/src/lib/errors/mnemonic-or-password-required.js +14 -0
- package/src/lib/errors/mnemonic-or-password-required.js.map +1 -0
- package/src/lib/errors/restricted.d.ts +5 -0
- package/src/lib/errors/restricted.d.ts.map +1 -0
- package/src/lib/errors/restricted.js +15 -0
- package/src/lib/errors/restricted.js.map +1 -0
- package/src/lib/errors/symmetric.d.ts +9 -0
- package/src/lib/errors/symmetric.d.ts.map +1 -0
- package/src/lib/errors/symmetric.js +24 -0
- package/src/lib/errors/symmetric.js.map +1 -0
- package/src/lib/errors/token-expired.d.ts +5 -0
- package/src/lib/errors/token-expired.d.ts.map +1 -0
- package/src/lib/errors/token-expired.js +12 -0
- package/src/lib/errors/token-expired.js.map +1 -0
- package/src/lib/errors/token-not-found.d.ts +8 -0
- package/src/lib/errors/token-not-found.d.ts.map +1 -0
- package/src/lib/errors/token-not-found.js +19 -0
- package/src/lib/errors/token-not-found.js.map +1 -0
- package/src/lib/errors/translatable-error-local.d.ts +7 -0
- package/src/lib/errors/translatable-error-local.d.ts.map +1 -0
- package/src/lib/errors/translatable-error-local.js +17 -0
- package/src/lib/errors/translatable-error-local.js.map +1 -0
- package/src/lib/errors/typed-error-local.d.ts +10 -0
- package/src/lib/errors/typed-error-local.d.ts.map +1 -0
- package/src/lib/errors/typed-error-local.js +24 -0
- package/src/lib/errors/typed-error-local.js.map +1 -0
- package/src/lib/factories/blockStoreFactory.d.ts +14 -0
- package/src/lib/factories/blockStoreFactory.d.ts.map +1 -0
- package/src/lib/factories/blockStoreFactory.js +18 -0
- package/src/lib/factories/blockStoreFactory.js.map +1 -0
- package/src/lib/interfaces/api-constants.d.ts +51 -0
- package/src/lib/interfaces/api-constants.d.ts.map +1 -0
- package/src/lib/interfaces/api-constants.js +13 -0
- package/src/lib/interfaces/api-constants.js.map +1 -0
- package/src/lib/interfaces/api-express-validation-error-response.d.ts +7 -0
- package/src/lib/interfaces/api-express-validation-error-response.d.ts.map +1 -0
- package/src/lib/interfaces/api-express-validation-error-response.js +3 -0
- package/src/lib/interfaces/api-express-validation-error-response.js.map +1 -0
- package/src/lib/interfaces/api-mongo-validation-error-response.d.ts +6 -0
- package/src/lib/interfaces/api-mongo-validation-error-response.d.ts.map +1 -0
- package/src/lib/interfaces/api-mongo-validation-error-response.js +3 -0
- package/src/lib/interfaces/api-mongo-validation-error-response.js.map +1 -0
- package/src/lib/interfaces/application.d.ts +10 -0
- package/src/lib/interfaces/application.d.ts.map +1 -0
- package/src/lib/interfaces/application.js +3 -0
- package/src/lib/interfaces/application.js.map +1 -0
- package/src/lib/interfaces/authenticated-cipher.d.ts +10 -0
- package/src/lib/interfaces/authenticated-cipher.d.ts.map +1 -0
- package/src/lib/interfaces/authenticated-cipher.js +3 -0
- package/src/lib/interfaces/authenticated-cipher.js.map +1 -0
- package/src/lib/interfaces/authenticated-decipher.d.ts +9 -0
- package/src/lib/interfaces/authenticated-decipher.d.ts.map +1 -0
- package/src/lib/interfaces/authenticated-decipher.js +3 -0
- package/src/lib/interfaces/authenticated-decipher.js.map +1 -0
- package/src/lib/interfaces/backend-objects/email-token.d.ts +4 -0
- package/src/lib/interfaces/backend-objects/email-token.d.ts.map +1 -0
- package/src/lib/interfaces/backend-objects/email-token.js +3 -0
- package/src/lib/interfaces/backend-objects/email-token.js.map +1 -0
- package/src/lib/interfaces/backend-objects/request-user.d.ts +5 -0
- package/src/lib/interfaces/backend-objects/request-user.d.ts.map +1 -0
- package/src/lib/interfaces/backend-objects/request-user.js +3 -0
- package/src/lib/interfaces/backend-objects/request-user.js.map +1 -0
- package/src/lib/interfaces/backend-objects/role.d.ts +4 -0
- package/src/lib/interfaces/backend-objects/role.d.ts.map +1 -0
- package/src/lib/interfaces/backend-objects/role.js +3 -0
- package/src/lib/interfaces/backend-objects/role.js.map +1 -0
- package/src/lib/interfaces/backend-objects/user.d.ts +5 -0
- package/src/lib/interfaces/backend-objects/user.d.ts.map +1 -0
- package/src/lib/interfaces/backend-objects/user.js +3 -0
- package/src/lib/interfaces/backend-objects/user.js.map +1 -0
- package/src/lib/interfaces/bases/mnemonic.d.ts +4 -0
- package/src/lib/interfaces/bases/mnemonic.d.ts.map +1 -0
- package/src/lib/interfaces/bases/mnemonic.js +3 -0
- package/src/lib/interfaces/bases/mnemonic.js.map +1 -0
- package/src/lib/interfaces/bases/role.d.ts +4 -0
- package/src/lib/interfaces/bases/role.d.ts.map +1 -0
- package/src/lib/interfaces/bases/role.js +3 -0
- package/src/lib/interfaces/bases/role.js.map +1 -0
- package/src/lib/interfaces/bases/user-role.d.ts +4 -0
- package/src/lib/interfaces/bases/user-role.d.ts.map +1 -0
- package/src/lib/interfaces/bases/user-role.js +3 -0
- package/src/lib/interfaces/bases/user-role.js.map +1 -0
- package/src/lib/interfaces/bases/user.d.ts +5 -0
- package/src/lib/interfaces/bases/user.d.ts.map +1 -0
- package/src/lib/interfaces/bases/user.js +3 -0
- package/src/lib/interfaces/bases/user.js.map +1 -0
- package/src/lib/interfaces/checksum-config.d.ts +5 -0
- package/src/lib/interfaces/checksum-config.d.ts.map +1 -0
- package/src/lib/interfaces/checksum-config.js +3 -0
- package/src/lib/interfaces/checksum-config.js.map +1 -0
- package/src/lib/interfaces/discriminator-collections.d.ts +5 -0
- package/src/lib/interfaces/discriminator-collections.d.ts.map +1 -0
- package/src/lib/interfaces/discriminator-collections.js +3 -0
- package/src/lib/interfaces/discriminator-collections.js.map +1 -0
- package/src/lib/interfaces/ecies-consts.d.ts +88 -0
- package/src/lib/interfaces/ecies-consts.d.ts.map +1 -0
- package/src/lib/interfaces/ecies-consts.js +3 -0
- package/src/lib/interfaces/ecies-consts.js.map +1 -0
- package/src/lib/interfaces/environment-aws.d.ts +7 -0
- package/src/lib/interfaces/environment-aws.d.ts.map +1 -0
- package/src/lib/interfaces/environment-aws.js +3 -0
- package/src/lib/interfaces/environment-aws.js.map +1 -0
- package/src/lib/interfaces/environment-mongo.d.ts +76 -0
- package/src/lib/interfaces/environment-mongo.d.ts.map +1 -0
- package/src/lib/interfaces/environment-mongo.js +3 -0
- package/src/lib/interfaces/environment-mongo.js.map +1 -0
- package/src/lib/interfaces/environment.d.ts +28 -0
- package/src/lib/interfaces/environment.d.ts.map +1 -0
- package/src/lib/interfaces/environment.js +3 -0
- package/src/lib/interfaces/environment.js.map +1 -0
- package/src/lib/interfaces/jwt-sign-response.d.ts +12 -0
- package/src/lib/interfaces/jwt-sign-response.d.ts.map +1 -0
- package/src/lib/interfaces/jwt-sign-response.js +3 -0
- package/src/lib/interfaces/jwt-sign-response.js.map +1 -0
- package/src/lib/interfaces/member/member-with-mnemonic.d.ts +6 -0
- package/src/lib/interfaces/member/member-with-mnemonic.d.ts.map +1 -0
- package/src/lib/interfaces/member/member-with-mnemonic.js +3 -0
- package/src/lib/interfaces/member/member-with-mnemonic.js.map +1 -0
- package/src/lib/interfaces/member/operational.d.ts +36 -0
- package/src/lib/interfaces/member/operational.d.ts.map +1 -0
- package/src/lib/interfaces/member/operational.js +3 -0
- package/src/lib/interfaces/member/operational.js.map +1 -0
- package/src/lib/interfaces/mongo-errors.d.ts +9 -0
- package/src/lib/interfaces/mongo-errors.d.ts.map +1 -0
- package/src/lib/interfaces/mongo-errors.js +3 -0
- package/src/lib/interfaces/mongo-errors.js.map +1 -0
- package/src/lib/interfaces/multi-encrypted-message.d.ts +8 -0
- package/src/lib/interfaces/multi-encrypted-message.d.ts.map +1 -0
- package/src/lib/interfaces/multi-encrypted-message.js +3 -0
- package/src/lib/interfaces/multi-encrypted-message.js.map +1 -0
- package/src/lib/interfaces/multi-encrypted-parsed-header.d.ts +24 -0
- package/src/lib/interfaces/multi-encrypted-parsed-header.d.ts.map +1 -0
- package/src/lib/interfaces/multi-encrypted-parsed-header.js +3 -0
- package/src/lib/interfaces/multi-encrypted-parsed-header.js.map +1 -0
- package/src/lib/interfaces/pbkdf2-result.d.ts +6 -0
- package/src/lib/interfaces/pbkdf2-result.d.ts.map +1 -0
- package/src/lib/interfaces/pbkdf2-result.js +3 -0
- package/src/lib/interfaces/pbkdf2-result.js.map +1 -0
- package/src/lib/interfaces/request-user.d.ts +51 -0
- package/src/lib/interfaces/request-user.d.ts.map +1 -0
- package/src/lib/interfaces/request-user.js +3 -0
- package/src/lib/interfaces/request-user.js.map +1 -0
- package/src/lib/interfaces/responses/api-backup-codes-response.d.ts +11 -0
- package/src/lib/interfaces/responses/api-backup-codes-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-backup-codes-response.js +3 -0
- package/src/lib/interfaces/responses/api-backup-codes-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-challenge-response.d.ts +11 -0
- package/src/lib/interfaces/responses/api-challenge-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-challenge-response.js +3 -0
- package/src/lib/interfaces/responses/api-challenge-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-code-count-response.d.ts +11 -0
- package/src/lib/interfaces/responses/api-code-count-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-code-count-response.js +3 -0
- package/src/lib/interfaces/responses/api-code-count-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-login-response.d.ts +20 -0
- package/src/lib/interfaces/responses/api-login-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-login-response.js +3 -0
- package/src/lib/interfaces/responses/api-login-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-mnemonic-response.d.ts +11 -0
- package/src/lib/interfaces/responses/api-mnemonic-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-mnemonic-response.js +3 -0
- package/src/lib/interfaces/responses/api-mnemonic-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-registration-response.d.ts +16 -0
- package/src/lib/interfaces/responses/api-registration-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-registration-response.js +3 -0
- package/src/lib/interfaces/responses/api-registration-response.js.map +1 -0
- package/src/lib/interfaces/responses/api-request-user-response.d.ts +12 -0
- package/src/lib/interfaces/responses/api-request-user-response.d.ts.map +1 -0
- package/src/lib/interfaces/responses/api-request-user-response.js +3 -0
- package/src/lib/interfaces/responses/api-request-user-response.js.map +1 -0
- package/src/lib/interfaces/responses/index.d.ts +9 -0
- package/src/lib/interfaces/responses/index.d.ts.map +1 -0
- package/src/lib/interfaces/responses/index.js +11 -0
- package/src/lib/interfaces/responses/index.js.map +1 -0
- package/src/lib/interfaces/schema.d.ts +28 -0
- package/src/lib/interfaces/schema.d.ts.map +1 -0
- package/src/lib/interfaces/schema.js +3 -0
- package/src/lib/interfaces/schema.js.map +1 -0
- package/src/lib/interfaces/server-init-result.d.ts +34 -0
- package/src/lib/interfaces/server-init-result.d.ts.map +1 -0
- package/src/lib/interfaces/server-init-result.js +3 -0
- package/src/lib/interfaces/server-init-result.js.map +1 -0
- package/src/lib/interfaces/single-encrypted-parsed-header.d.ts +35 -0
- package/src/lib/interfaces/single-encrypted-parsed-header.d.ts.map +1 -0
- package/src/lib/interfaces/single-encrypted-parsed-header.js +3 -0
- package/src/lib/interfaces/single-encrypted-parsed-header.js.map +1 -0
- package/src/lib/interfaces/status-code-response.d.ts +7 -0
- package/src/lib/interfaces/status-code-response.d.ts.map +1 -0
- package/src/lib/interfaces/status-code-response.js +3 -0
- package/src/lib/interfaces/status-code-response.js.map +1 -0
- package/src/lib/interfaces/symmetric-encryption-results.d.ts +5 -0
- package/src/lib/interfaces/symmetric-encryption-results.d.ts.map +1 -0
- package/src/lib/interfaces/symmetric-encryption-results.js +3 -0
- package/src/lib/interfaces/symmetric-encryption-results.js.map +1 -0
- package/src/lib/interfaces/token-user.d.ts +9 -0
- package/src/lib/interfaces/token-user.d.ts.map +1 -0
- package/src/lib/interfaces/token-user.js +3 -0
- package/src/lib/interfaces/token-user.js.map +1 -0
- package/src/lib/interfaces/wallet-seed.d.ts +7 -0
- package/src/lib/interfaces/wallet-seed.d.ts.map +1 -0
- package/src/lib/interfaces/wallet-seed.js +3 -0
- package/src/lib/interfaces/wallet-seed.js.map +1 -0
- package/src/lib/middlewares/cleanup-crypto.d.ts +7 -0
- package/src/lib/middlewares/cleanup-crypto.d.ts.map +1 -0
- package/src/lib/middlewares/cleanup-crypto.js +32 -0
- package/src/lib/middlewares/cleanup-crypto.js.map +1 -0
- package/src/lib/middlewares/index.d.ts +3 -0
- package/src/lib/middlewares/index.d.ts.map +1 -0
- package/src/lib/middlewares/index.js +10 -0
- package/src/lib/middlewares/index.js.map +1 -0
- package/src/lib/middlewares.d.ts +19 -0
- package/src/lib/middlewares.d.ts.map +1 -0
- package/src/lib/middlewares.js +95 -0
- package/src/lib/middlewares.js.map +1 -0
- package/src/lib/models/email-token.d.ts +47 -0
- package/src/lib/models/email-token.d.ts.map +1 -0
- package/src/lib/models/email-token.js +11 -0
- package/src/lib/models/email-token.js.map +1 -0
- package/src/lib/models/mnemonic.d.ts +26 -0
- package/src/lib/models/mnemonic.d.ts.map +1 -0
- package/src/lib/models/mnemonic.js +11 -0
- package/src/lib/models/mnemonic.js.map +1 -0
- package/src/lib/models/role.d.ts +23 -0
- package/src/lib/models/role.d.ts.map +1 -0
- package/src/lib/models/role.js +8 -0
- package/src/lib/models/role.js.map +1 -0
- package/src/lib/models/used-direct-login-token.d.ts +29 -0
- package/src/lib/models/used-direct-login-token.d.ts.map +1 -0
- package/src/lib/models/used-direct-login-token.js +11 -0
- package/src/lib/models/used-direct-login-token.js.map +1 -0
- package/src/lib/models/user-role.d.ts +59 -0
- package/src/lib/models/user-role.d.ts.map +1 -0
- package/src/lib/models/user-role.js +11 -0
- package/src/lib/models/user-role.js.map +1 -0
- package/src/lib/models/user.d.ts +132 -0
- package/src/lib/models/user.d.ts.map +1 -0
- package/src/lib/models/user.js +8 -0
- package/src/lib/models/user.js.map +1 -0
- package/src/lib/routers/api.d.ts +21 -0
- package/src/lib/routers/api.d.ts.map +1 -0
- package/src/lib/routers/api.js +41 -0
- package/src/lib/routers/api.js.map +1 -0
- package/src/lib/routers/app.d.ts +22 -0
- package/src/lib/routers/app.d.ts.map +1 -0
- package/src/lib/routers/app.js +131 -0
- package/src/lib/routers/app.js.map +1 -0
- package/src/lib/routers/base.d.ts +8 -0
- package/src/lib/routers/base.d.ts.map +1 -0
- package/src/lib/routers/base.js +12 -0
- package/src/lib/routers/base.js.map +1 -0
- package/src/lib/routers/messageRouter.d.ts +4 -0
- package/src/lib/routers/messageRouter.d.ts.map +1 -0
- package/src/lib/routers/messageRouter.js +81 -0
- package/src/lib/routers/messageRouter.js.map +1 -0
- package/src/lib/schemas/email-token.d.ts +44 -0
- package/src/lib/schemas/email-token.d.ts.map +1 -0
- package/src/lib/schemas/email-token.js +29 -0
- package/src/lib/schemas/email-token.js.map +1 -0
- package/src/lib/schemas/mnemonic.d.ts +22 -0
- package/src/lib/schemas/mnemonic.d.ts.map +1 -0
- package/src/lib/schemas/mnemonic.js +21 -0
- package/src/lib/schemas/mnemonic.js.map +1 -0
- package/src/lib/schemas/role.d.ts +21 -0
- package/src/lib/schemas/role.d.ts.map +1 -0
- package/src/lib/schemas/role.js +36 -0
- package/src/lib/schemas/role.js.map +1 -0
- package/src/lib/schemas/schema.d.ts +3 -0
- package/src/lib/schemas/schema.d.ts.map +1 -0
- package/src/lib/schemas/schema.js +74 -0
- package/src/lib/schemas/schema.js.map +1 -0
- package/src/lib/schemas/used-direct-login-token.d.ts +25 -0
- package/src/lib/schemas/used-direct-login-token.d.ts.map +1 -0
- package/src/lib/schemas/used-direct-login-token.js +14 -0
- package/src/lib/schemas/used-direct-login-token.js.map +1 -0
- package/src/lib/schemas/user-role.d.ts +55 -0
- package/src/lib/schemas/user-role.d.ts.map +1 -0
- package/src/lib/schemas/user-role.js +22 -0
- package/src/lib/schemas/user-role.js.map +1 -0
- package/src/lib/schemas/user.d.ts +129 -0
- package/src/lib/schemas/user.d.ts.map +1 -0
- package/src/lib/schemas/user.js +84 -0
- package/src/lib/schemas/user.js.map +1 -0
- package/src/lib/services/diskQuorumService.d.ts +55 -0
- package/src/lib/services/diskQuorumService.d.ts.map +1 -0
- package/src/lib/services/diskQuorumService.js +247 -0
- package/src/lib/services/diskQuorumService.js.map +1 -0
- package/src/lib/services/email.d.ts +27 -0
- package/src/lib/services/email.d.ts.map +1 -0
- package/src/lib/services/email.js +81 -0
- package/src/lib/services/email.js.map +1 -0
- package/src/lib/services/eventNotificationSystem.d.ts +46 -0
- package/src/lib/services/eventNotificationSystem.d.ts.map +1 -0
- package/src/lib/services/eventNotificationSystem.js +83 -0
- package/src/lib/services/eventNotificationSystem.js.map +1 -0
- package/src/lib/services/fec.d.ts +87 -0
- package/src/lib/services/fec.d.ts.map +1 -0
- package/src/lib/services/fec.js +256 -0
- package/src/lib/services/fec.js.map +1 -0
- package/src/lib/services/fecServiceFactory.d.ts +89 -0
- package/src/lib/services/fecServiceFactory.d.ts.map +1 -0
- package/src/lib/services/fecServiceFactory.js +154 -0
- package/src/lib/services/fecServiceFactory.js.map +1 -0
- package/src/lib/services/fecUsageExample.d.ts +33 -0
- package/src/lib/services/fecUsageExample.d.ts.map +1 -0
- package/src/lib/services/fecUsageExample.js +79 -0
- package/src/lib/services/fecUsageExample.js.map +1 -0
- package/src/lib/services/keyWrapping.d.ts +61 -0
- package/src/lib/services/keyWrapping.d.ts.map +1 -0
- package/src/lib/services/keyWrapping.js +297 -0
- package/src/lib/services/keyWrapping.js.map +1 -0
- package/src/lib/services/messageEventsWebSocketHandler.d.ts +15 -0
- package/src/lib/services/messageEventsWebSocketHandler.d.ts.map +1 -0
- package/src/lib/services/messageEventsWebSocketHandler.js +59 -0
- package/src/lib/services/messageEventsWebSocketHandler.js.map +1 -0
- package/src/lib/services/messagePassingService.d.ts +31 -0
- package/src/lib/services/messagePassingService.d.ts.map +1 -0
- package/src/lib/services/messagePassingService.js +88 -0
- package/src/lib/services/messagePassingService.js.map +1 -0
- package/src/lib/services/nativeRsFecService.d.ts +79 -0
- package/src/lib/services/nativeRsFecService.d.ts.map +1 -0
- package/src/lib/services/nativeRsFecService.js +295 -0
- package/src/lib/services/nativeRsFecService.js.map +1 -0
- package/src/lib/services/pbkdf2.d.ts +6 -0
- package/src/lib/services/pbkdf2.d.ts.map +1 -0
- package/src/lib/services/pbkdf2.js +31 -0
- package/src/lib/services/pbkdf2.js.map +1 -0
- package/src/lib/services/user.d.ts +10 -0
- package/src/lib/services/user.d.ts.map +1 -0
- package/src/lib/services/user.js +11 -0
- package/src/lib/services/user.js.map +1 -0
- package/src/lib/services/webSocketMessageServer.d.ts +53 -0
- package/src/lib/services/webSocketMessageServer.d.ts.map +1 -0
- package/src/lib/services/webSocketMessageServer.js +159 -0
- package/src/lib/services/webSocketMessageServer.js.map +1 -0
- package/src/lib/shared-types.d.ts +82 -0
- package/src/lib/shared-types.d.ts.map +1 -0
- package/src/lib/shared-types.js +6 -0
- package/src/lib/shared-types.js.map +1 -0
- package/src/lib/stores/availabilityAwareBlockStore.d.ts +287 -0
- package/src/lib/stores/availabilityAwareBlockStore.d.ts.map +1 -0
- package/src/lib/stores/availabilityAwareBlockStore.js +458 -0
- package/src/lib/stores/availabilityAwareBlockStore.js.map +1 -0
- package/src/lib/stores/diskBlockAsyncStore.d.ts +212 -0
- package/src/lib/stores/diskBlockAsyncStore.d.ts.map +1 -0
- package/src/lib/stores/diskBlockAsyncStore.js +803 -0
- package/src/lib/stores/diskBlockAsyncStore.js.map +1 -0
- package/src/lib/stores/diskBlockMetadataStore.d.ts +125 -0
- package/src/lib/stores/diskBlockMetadataStore.d.ts.map +1 -0
- package/src/lib/stores/diskBlockMetadataStore.js +347 -0
- package/src/lib/stores/diskBlockMetadataStore.js.map +1 -0
- package/src/lib/stores/diskBlockStore.d.ts +41 -0
- package/src/lib/stores/diskBlockStore.d.ts.map +1 -0
- package/src/lib/stores/diskBlockStore.js +87 -0
- package/src/lib/stores/diskBlockStore.js.map +1 -0
- package/src/lib/stores/diskBlockSyncStore.d.ts +12 -0
- package/src/lib/stores/diskBlockSyncStore.d.ts.map +1 -0
- package/src/lib/stores/diskBlockSyncStore.js +55 -0
- package/src/lib/stores/diskBlockSyncStore.js.map +1 -0
- package/src/lib/stores/diskCblStore.d.ts +30 -0
- package/src/lib/stores/diskCblStore.d.ts.map +1 -0
- package/src/lib/stores/diskCblStore.js +139 -0
- package/src/lib/stores/diskCblStore.js.map +1 -0
- package/src/lib/stores/diskMessageMetadataStore.d.ts +17 -0
- package/src/lib/stores/diskMessageMetadataStore.d.ts.map +1 -0
- package/src/lib/stores/diskMessageMetadataStore.js +214 -0
- package/src/lib/stores/diskMessageMetadataStore.js.map +1 -0
- package/src/lib/transforms/checksumTransform.d.ts +8 -0
- package/src/lib/transforms/checksumTransform.d.ts.map +1 -0
- package/src/lib/transforms/checksumTransform.js +22 -0
- package/src/lib/transforms/checksumTransform.js.map +1 -0
- package/src/lib/transforms/memoryWritableStream.d.ts +8 -0
- package/src/lib/transforms/memoryWritableStream.d.ts.map +1 -0
- package/src/lib/transforms/memoryWritableStream.js +20 -0
- package/src/lib/transforms/memoryWritableStream.js.map +1 -0
- package/src/lib/transforms/xorMultipleTransform.d.ts +12 -0
- package/src/lib/transforms/xorMultipleTransform.d.ts.map +1 -0
- package/src/lib/transforms/xorMultipleTransform.js +52 -0
- package/src/lib/transforms/xorMultipleTransform.js.map +1 -0
- package/src/lib/utils/type-converters.d.ts +10 -0
- package/src/lib/utils/type-converters.d.ts.map +1 -0
- package/src/lib/utils/type-converters.js +42 -0
- package/src/lib/utils/type-converters.js.map +1 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KeyWrappingService = void 0;
|
|
4
|
+
const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
|
|
5
|
+
const i18n_lib_1 = require("@digitaldefiance/i18n-lib");
|
|
6
|
+
const node_ecies_lib_1 = require("@digitaldefiance/node-ecies-lib");
|
|
7
|
+
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
8
|
+
const crypto_1 = require("crypto");
|
|
9
|
+
const appConstants_1 = require("../appConstants");
|
|
10
|
+
const constants_1 = require("../constants");
|
|
11
|
+
const pbkdf2_1 = require("./pbkdf2");
|
|
12
|
+
class KeyWrappingService {
|
|
13
|
+
/**
|
|
14
|
+
* Generates a new master key and wraps it with the user's password
|
|
15
|
+
*/
|
|
16
|
+
wrapNewMasterKey(password) {
|
|
17
|
+
const masterKey = new node_ecies_lib_1.SecureBuffer((0, crypto_1.randomBytes)(constants_1.Constants.WRAPPED_KEY.MASTER_KEY_SIZE));
|
|
18
|
+
const wrappedKey = this.wrapMasterKey(masterKey, password);
|
|
19
|
+
return { masterKey, wrappedKey };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Wraps an existing master key with a password-derived key
|
|
23
|
+
*/
|
|
24
|
+
wrapMasterKey(masterKey, password) {
|
|
25
|
+
if (appConstants_1.AppConstants.PasswordRegex.test(password.value ?? '') === false) {
|
|
26
|
+
throw new i18n_lib_1.HandleableError(new Error(suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidCredentials));
|
|
27
|
+
}
|
|
28
|
+
const salt = (0, crypto_1.randomBytes)(constants_1.Constants.WRAPPED_KEY.SALT_SIZE);
|
|
29
|
+
const iterations = constants_1.Constants.WRAPPED_KEY.MIN_ITERATIONS;
|
|
30
|
+
// Derive key from password using centralized PBKDF2 service
|
|
31
|
+
const derivedKey = pbkdf2_1.Pbkdf2Service.deriveKeyFromPassword(Buffer.from(password.value ?? ''), salt, iterations, constants_1.Constants.WRAPPED_KEY.SALT_SIZE, 32, // AES-256 key size
|
|
32
|
+
'sha256');
|
|
33
|
+
const passwordKeySecure = new node_ecies_lib_1.SecureBuffer(derivedKey.hash);
|
|
34
|
+
// Encrypt master key
|
|
35
|
+
const iv = (0, crypto_1.randomBytes)(constants_1.Constants.WRAPPED_KEY.IV_SIZE);
|
|
36
|
+
const cipher = (0, crypto_1.createCipheriv)('aes-256-gcm', passwordKeySecure.value, iv);
|
|
37
|
+
const encrypted = Buffer.concat([
|
|
38
|
+
cipher.update(masterKey.value),
|
|
39
|
+
cipher.final(),
|
|
40
|
+
]);
|
|
41
|
+
const authTag = cipher.getAuthTag();
|
|
42
|
+
passwordKeySecure.dispose();
|
|
43
|
+
return {
|
|
44
|
+
salt: salt.toString('hex'),
|
|
45
|
+
iv: iv.toString('hex'),
|
|
46
|
+
authTag: authTag.toString('hex'),
|
|
47
|
+
encryptedMasterKey: encrypted.toString('hex'),
|
|
48
|
+
iterations,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Unwraps a master key using the user's password
|
|
53
|
+
*/
|
|
54
|
+
unwrapMasterKey(wrappedKey, password) {
|
|
55
|
+
const salt = Buffer.from(wrappedKey.salt, 'hex');
|
|
56
|
+
const iv = Buffer.from(wrappedKey.iv, 'hex');
|
|
57
|
+
const authTag = Buffer.from(wrappedKey.authTag, 'hex');
|
|
58
|
+
const encrypted = Buffer.from(wrappedKey.encryptedMasterKey, 'hex');
|
|
59
|
+
// Derive the same key from password using centralized PBKDF2 service
|
|
60
|
+
const derivedKey = pbkdf2_1.Pbkdf2Service.deriveKeyFromPassword(Buffer.from(password.value ?? ''), salt, wrappedKey.iterations, salt.length, // Use actual salt size
|
|
61
|
+
32, // AES-256 key size
|
|
62
|
+
'sha256');
|
|
63
|
+
const passwordKeySecure = new node_ecies_lib_1.SecureBuffer(derivedKey.hash);
|
|
64
|
+
try {
|
|
65
|
+
const decipher = (0, crypto_1.createDecipheriv)('aes-256-gcm', passwordKeySecure.value, iv);
|
|
66
|
+
decipher.setAuthTag(authTag);
|
|
67
|
+
const decrypted = Buffer.concat([
|
|
68
|
+
decipher.update(encrypted),
|
|
69
|
+
decipher.final(),
|
|
70
|
+
]);
|
|
71
|
+
return new node_ecies_lib_1.SecureBuffer(decrypted);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
throw new i18n_lib_1.HandleableError(new Error(suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidCredentials));
|
|
75
|
+
}
|
|
76
|
+
finally {
|
|
77
|
+
passwordKeySecure.dispose();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Async version of unwrapMasterKey that uses libuv threadpool via crypto.pbkdf2
|
|
82
|
+
* to avoid blocking the event loop during password verification.
|
|
83
|
+
*/
|
|
84
|
+
async unwrapMasterKeyAsync(wrappedKey, password) {
|
|
85
|
+
const __perfEnabled = process.env['PERF_LOGS'] === '1';
|
|
86
|
+
const _t0 = __perfEnabled ? Date.now() : 0;
|
|
87
|
+
const salt = Buffer.from(wrappedKey.salt, 'hex');
|
|
88
|
+
const iv = Buffer.from(wrappedKey.iv, 'hex');
|
|
89
|
+
const authTag = Buffer.from(wrappedKey.authTag, 'hex');
|
|
90
|
+
const encrypted = Buffer.from(wrappedKey.encryptedMasterKey, 'hex');
|
|
91
|
+
// Accept either a SecureString (preferred) or a raw password string to avoid
|
|
92
|
+
// expensive SecureString construction in the hot login path.
|
|
93
|
+
const pwdBuffer = typeof password === 'string'
|
|
94
|
+
? Buffer.from(password, 'utf8')
|
|
95
|
+
: Buffer.from(password.value ?? '');
|
|
96
|
+
// Use centralized PBKDF2 service for async key derivation
|
|
97
|
+
const derivedKey = await pbkdf2_1.Pbkdf2Service.deriveKeyFromPasswordAsync(pwdBuffer, salt, wrappedKey.iterations, salt.length, // Use actual salt size
|
|
98
|
+
32, // AES-256 key size
|
|
99
|
+
'sha256');
|
|
100
|
+
const passwordKeySecure = new node_ecies_lib_1.SecureBuffer(derivedKey.hash);
|
|
101
|
+
try {
|
|
102
|
+
const decipher = (0, crypto_1.createDecipheriv)('aes-256-gcm', passwordKeySecure.value, iv);
|
|
103
|
+
decipher.setAuthTag(authTag);
|
|
104
|
+
const decrypted = Buffer.concat([
|
|
105
|
+
decipher.update(encrypted),
|
|
106
|
+
decipher.final(),
|
|
107
|
+
]);
|
|
108
|
+
if (__perfEnabled)
|
|
109
|
+
console.warn('[perf] unwrapMasterKeyAsync pbkdf2 iters=', wrappedKey.iterations, 'dt=', Date.now() - _t0, 'ms');
|
|
110
|
+
return new node_ecies_lib_1.SecureBuffer(decrypted);
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
throw new i18n_lib_1.HandleableError(new Error(suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidCredentials));
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
// Best-effort zero the temporary password buffer
|
|
117
|
+
try {
|
|
118
|
+
pwdBuffer.fill(0);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// ignore
|
|
122
|
+
}
|
|
123
|
+
passwordKeySecure.dispose();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Deduplicated async unwrap that coalesces concurrent identical PBKDF2 operations.
|
|
128
|
+
* Keyed by salt + iterations + a short hash of the password. Entry is removed after resolve/reject.
|
|
129
|
+
*/
|
|
130
|
+
async unwrapMasterKeyAsyncDedup(wrappedKey, password) {
|
|
131
|
+
// Derive a short cache key; avoid storing raw password by hashing
|
|
132
|
+
const pwdKey = (0, crypto_1.createHash)('sha256')
|
|
133
|
+
.update(password, 'utf8')
|
|
134
|
+
.digest('base64url')
|
|
135
|
+
.slice(0, 24);
|
|
136
|
+
const cacheKey = `${wrappedKey.salt}:${wrappedKey.iterations}:${pwdKey}`;
|
|
137
|
+
let p = KeyWrappingService.inFlightUnwraps.get(cacheKey);
|
|
138
|
+
if (!p) {
|
|
139
|
+
// Compute once, extract raw bytes, dispose the shared SecureBuffer, and cache the bytes
|
|
140
|
+
p = (async () => {
|
|
141
|
+
const mk = await this.unwrapMasterKeyAsync(wrappedKey, password);
|
|
142
|
+
try {
|
|
143
|
+
const copy = Buffer.from(mk.value);
|
|
144
|
+
const b64 = copy.toString('base64');
|
|
145
|
+
// zeroize copy
|
|
146
|
+
copy.fill(0);
|
|
147
|
+
return b64;
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
mk.dispose();
|
|
151
|
+
}
|
|
152
|
+
})().finally(() => {
|
|
153
|
+
// Best-effort cleanup
|
|
154
|
+
KeyWrappingService.inFlightUnwraps.delete(cacheKey);
|
|
155
|
+
});
|
|
156
|
+
KeyWrappingService.inFlightUnwraps.set(cacheKey, p);
|
|
157
|
+
}
|
|
158
|
+
const b64 = await p;
|
|
159
|
+
// Return a fresh SecureBuffer per caller to avoid cross-disposal races
|
|
160
|
+
const buf = Buffer.from(b64, 'base64');
|
|
161
|
+
const secure = new node_ecies_lib_1.SecureBuffer(Buffer.from(buf));
|
|
162
|
+
buf.fill(0);
|
|
163
|
+
return secure;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Changes password by re-wrapping the master key
|
|
167
|
+
*/
|
|
168
|
+
changePassword(wrappedKey, oldPassword, newPassword) {
|
|
169
|
+
// Unwrap with old password
|
|
170
|
+
const masterKey = this.unwrapMasterKey(wrappedKey, oldPassword);
|
|
171
|
+
try {
|
|
172
|
+
// Re-wrap with new password
|
|
173
|
+
return this.wrapMasterKey(masterKey, newPassword);
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
masterKey.dispose();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Wraps arbitrary secret bytes with a password-derived key (AES-256-GCM)
|
|
181
|
+
*/
|
|
182
|
+
wrapSecret(secret, password) {
|
|
183
|
+
if (appConstants_1.AppConstants.PasswordRegex.test(password.value ?? '') === false) {
|
|
184
|
+
throw new i18n_lib_1.HandleableError(new Error(suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidCredentials));
|
|
185
|
+
}
|
|
186
|
+
const salt = (0, crypto_1.randomBytes)(constants_1.Constants.WRAPPED_KEY.SALT_SIZE);
|
|
187
|
+
const iterations = constants_1.Constants.WRAPPED_KEY.MIN_ITERATIONS;
|
|
188
|
+
// Derive key from password using centralized PBKDF2 service
|
|
189
|
+
const derivedKey = pbkdf2_1.Pbkdf2Service.deriveKeyFromPassword(Buffer.from(password.value ?? ''), salt, iterations, constants_1.Constants.WRAPPED_KEY.SALT_SIZE, 32, // AES-256 key size
|
|
190
|
+
'sha256');
|
|
191
|
+
const passwordKeySecure = new node_ecies_lib_1.SecureBuffer(derivedKey.hash);
|
|
192
|
+
try {
|
|
193
|
+
const iv = (0, crypto_1.randomBytes)(constants_1.Constants.WRAPPED_KEY.IV_SIZE);
|
|
194
|
+
const cipher = (0, crypto_1.createCipheriv)('aes-256-gcm', passwordKeySecure.value, iv);
|
|
195
|
+
const encrypted = Buffer.concat([
|
|
196
|
+
cipher.update(secret.value),
|
|
197
|
+
cipher.final(),
|
|
198
|
+
]);
|
|
199
|
+
const authTag = cipher.getAuthTag();
|
|
200
|
+
return {
|
|
201
|
+
salt: salt.toString('hex'),
|
|
202
|
+
iv: iv.toString('hex'),
|
|
203
|
+
authTag: authTag.toString('hex'),
|
|
204
|
+
ciphertext: encrypted.toString('hex'),
|
|
205
|
+
iterations,
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
finally {
|
|
209
|
+
passwordKeySecure.dispose();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Unwraps a password-wrapped secret (sync)
|
|
214
|
+
*/
|
|
215
|
+
unwrapSecret(wrapped, password) {
|
|
216
|
+
const salt = Buffer.from(wrapped.salt, 'hex');
|
|
217
|
+
const iv = Buffer.from(wrapped.iv, 'hex');
|
|
218
|
+
const authTag = Buffer.from(wrapped.authTag, 'hex');
|
|
219
|
+
const encrypted = Buffer.from(wrapped.ciphertext, 'hex');
|
|
220
|
+
// Derive key from password using centralized PBKDF2 service
|
|
221
|
+
const derivedKey = pbkdf2_1.Pbkdf2Service.deriveKeyFromPassword(Buffer.from(password.value ?? ''), salt, wrapped.iterations, salt.length, // Use actual salt size
|
|
222
|
+
32, // AES-256 key size
|
|
223
|
+
'sha256');
|
|
224
|
+
const passwordKeySecure = new node_ecies_lib_1.SecureBuffer(derivedKey.hash);
|
|
225
|
+
try {
|
|
226
|
+
const decipher = (0, crypto_1.createDecipheriv)('aes-256-gcm', passwordKeySecure.value, iv);
|
|
227
|
+
decipher.setAuthTag(authTag);
|
|
228
|
+
const decrypted = Buffer.concat([
|
|
229
|
+
decipher.update(encrypted),
|
|
230
|
+
decipher.final(),
|
|
231
|
+
]);
|
|
232
|
+
return new node_ecies_lib_1.SecureBuffer(decrypted);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
throw new i18n_lib_1.HandleableError(new Error(suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidCredentials));
|
|
236
|
+
}
|
|
237
|
+
finally {
|
|
238
|
+
passwordKeySecure.dispose();
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Unwraps a password-wrapped secret (async PBKDF2)
|
|
243
|
+
*/
|
|
244
|
+
async unwrapSecretAsync(wrapped, password) {
|
|
245
|
+
const salt = Buffer.from(wrapped.salt, 'hex');
|
|
246
|
+
const iv = Buffer.from(wrapped.iv, 'hex');
|
|
247
|
+
const authTag = Buffer.from(wrapped.authTag, 'hex');
|
|
248
|
+
const encrypted = Buffer.from(wrapped.ciphertext, 'hex');
|
|
249
|
+
// Validate password parameter before using it
|
|
250
|
+
if (typeof password === 'string') {
|
|
251
|
+
if (password === undefined || password === null) {
|
|
252
|
+
throw new Error('Password cannot be undefined or null');
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else if (!(password instanceof ecies_lib_1.SecureString)) {
|
|
256
|
+
throw new Error('Password must be provided as string or SecureString');
|
|
257
|
+
}
|
|
258
|
+
const pwdBuffer = typeof password === 'string'
|
|
259
|
+
? Buffer.from(password, 'utf8')
|
|
260
|
+
: Buffer.from(password.value ?? '');
|
|
261
|
+
// Additional safety check
|
|
262
|
+
if (!pwdBuffer) {
|
|
263
|
+
throw new Error('Failed to create password buffer - password may be invalid');
|
|
264
|
+
}
|
|
265
|
+
// Use centralized PBKDF2 service for async key derivation
|
|
266
|
+
const derivedKey = await pbkdf2_1.Pbkdf2Service.deriveKeyFromPasswordAsync(Buffer.from(pwdBuffer), salt, wrapped.iterations, salt.length, // Use actual salt size
|
|
267
|
+
32, // AES-256 key size
|
|
268
|
+
'sha256');
|
|
269
|
+
const passwordKeySecure = new node_ecies_lib_1.SecureBuffer(derivedKey.hash);
|
|
270
|
+
try {
|
|
271
|
+
const decipher = (0, crypto_1.createDecipheriv)('aes-256-gcm', passwordKeySecure.value, iv);
|
|
272
|
+
decipher.setAuthTag(authTag);
|
|
273
|
+
const decrypted = Buffer.concat([
|
|
274
|
+
decipher.update(encrypted),
|
|
275
|
+
decipher.final(),
|
|
276
|
+
]);
|
|
277
|
+
return new node_ecies_lib_1.SecureBuffer(decrypted);
|
|
278
|
+
}
|
|
279
|
+
catch {
|
|
280
|
+
throw new i18n_lib_1.HandleableError(new Error(suite_core_lib_1.SuiteCoreStringKey.Validation_InvalidCredentials));
|
|
281
|
+
}
|
|
282
|
+
finally {
|
|
283
|
+
try {
|
|
284
|
+
pwdBuffer.fill(0);
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
// ignore
|
|
288
|
+
}
|
|
289
|
+
passwordKeySecure.dispose();
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
exports.KeyWrappingService = KeyWrappingService;
|
|
294
|
+
// In-flight de-duplication map to share PBKDF2 work across concurrent identical requests
|
|
295
|
+
// Store a promise of the raw master key bytes, so each caller can get an independent SecureBuffer
|
|
296
|
+
KeyWrappingService.inFlightUnwraps = new Map();
|
|
297
|
+
//# sourceMappingURL=keyWrapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyWrapping.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/keyWrapping.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { WebSocket } from 'ws';
|
|
2
|
+
import { EventNotificationSystem } from './eventNotificationSystem';
|
|
3
|
+
/**
|
|
4
|
+
* WebSocket handler for message event subscriptions
|
|
5
|
+
* Integrates EventNotificationSystem with WebSocket server
|
|
6
|
+
*/
|
|
7
|
+
export declare class MessageEventsWebSocketHandler {
|
|
8
|
+
private readonly eventSystem;
|
|
9
|
+
constructor(eventSystem: EventNotificationSystem);
|
|
10
|
+
/**
|
|
11
|
+
* Handle new WebSocket connection for event subscriptions
|
|
12
|
+
*/
|
|
13
|
+
handleConnection(ws: WebSocket): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=messageEventsWebSocketHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageEventsWebSocketHandler.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/messageEventsWebSocketHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAE,uBAAuB,EAAkC,MAAM,2BAA2B,CAAC;AAEpG;;;GAGG;AACH,qBAAa,6BAA6B;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAAX,WAAW,EAAE,uBAAuB;IAEjE;;OAEG;IACH,gBAAgB,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI;CA4CtC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessageEventsWebSocketHandler = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* WebSocket handler for message event subscriptions
|
|
6
|
+
* Integrates EventNotificationSystem with WebSocket server
|
|
7
|
+
*/
|
|
8
|
+
class MessageEventsWebSocketHandler {
|
|
9
|
+
constructor(eventSystem) {
|
|
10
|
+
this.eventSystem = eventSystem;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Handle new WebSocket connection for event subscriptions
|
|
14
|
+
*/
|
|
15
|
+
handleConnection(ws) {
|
|
16
|
+
// Subscribe with no filter initially
|
|
17
|
+
this.eventSystem.subscribe(ws);
|
|
18
|
+
// Handle incoming messages for filter updates
|
|
19
|
+
ws.on('message', (data) => {
|
|
20
|
+
try {
|
|
21
|
+
const message = JSON.parse(data.toString());
|
|
22
|
+
if (message.type === 'subscribe') {
|
|
23
|
+
const filter = {
|
|
24
|
+
types: message.eventTypes,
|
|
25
|
+
senderId: message.senderId,
|
|
26
|
+
recipientId: message.recipientId,
|
|
27
|
+
};
|
|
28
|
+
// Unsubscribe and resubscribe with new filter
|
|
29
|
+
this.eventSystem.unsubscribe(ws);
|
|
30
|
+
this.eventSystem.subscribe(ws, filter);
|
|
31
|
+
}
|
|
32
|
+
else if (message.type === 'unsubscribe') {
|
|
33
|
+
this.eventSystem.unsubscribe(ws);
|
|
34
|
+
}
|
|
35
|
+
else if (message.type === 'getHistory') {
|
|
36
|
+
const filter = {
|
|
37
|
+
types: message.eventTypes,
|
|
38
|
+
senderId: message.senderId,
|
|
39
|
+
recipientId: message.recipientId,
|
|
40
|
+
};
|
|
41
|
+
const limit = message.limit || 100;
|
|
42
|
+
const history = this.eventSystem.getEventHistory(filter, limit);
|
|
43
|
+
ws.send(JSON.stringify({ type: 'history', events: history }));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
ws.send(JSON.stringify({ type: 'error', message: error.message }));
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
// Handle disconnect
|
|
51
|
+
ws.on('close', () => {
|
|
52
|
+
this.eventSystem.unsubscribe(ws);
|
|
53
|
+
});
|
|
54
|
+
// Send confirmation
|
|
55
|
+
ws.send(JSON.stringify({ type: 'connected', message: 'Subscribed to message events' }));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.MessageEventsWebSocketHandler = MessageEventsWebSocketHandler;
|
|
59
|
+
//# sourceMappingURL=messageEventsWebSocketHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messageEventsWebSocketHandler.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/messageEventsWebSocketHandler.ts"],"names":[],"mappings":";;;AAGA;;;GAGG;AACH,MAAa,6BAA6B;IACxC,YAA6B,WAAoC;QAApC,gBAAW,GAAX,WAAW,CAAyB;IAAG,CAAC;IAErE;;OAEG;IACH,gBAAgB,CAAC,EAAa;QAC5B,qCAAqC;QACrC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAE/B,8CAA8C;QAC9C,EAAE,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE;YAChC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAE5C,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;oBACjC,MAAM,MAAM,GAAiB;wBAC3B,KAAK,EAAE,OAAO,CAAC,UAAgC;wBAC/C,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;qBACjC,CAAC;oBAEF,8CAA8C;oBAC9C,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;oBACjC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;gBACzC,CAAC;qBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;oBAC1C,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;gBACnC,CAAC;qBAAM,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBACzC,MAAM,MAAM,GAAiB;wBAC3B,KAAK,EAAE,OAAO,CAAC,UAAgC;wBAC/C,QAAQ,EAAE,OAAO,CAAC,QAAQ;wBAC1B,WAAW,EAAE,OAAO,CAAC,WAAW;qBACjC,CAAC;oBACF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,GAAG,CAAC;oBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;oBAChE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAG,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAChF,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,CAAC,CAAC;IAC1F,CAAC;CACF;AAlDD,sEAkDC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { MessageCBLService, IMessageMetadataStore, IMessageCBLOptions as ICreateMessageOptions } from '@brightchain/brightchain-lib';
|
|
2
|
+
import { EventNotificationSystem } from './eventNotificationSystem';
|
|
3
|
+
import { WebSocketMessageServer } from './webSocketMessageServer';
|
|
4
|
+
/**
|
|
5
|
+
* High-level message passing service coordinating storage, routing, and events
|
|
6
|
+
*/
|
|
7
|
+
export declare class MessagePassingService {
|
|
8
|
+
private messageCBL;
|
|
9
|
+
private metadataStore;
|
|
10
|
+
private eventSystem;
|
|
11
|
+
private wsServer;
|
|
12
|
+
constructor(messageCBL: MessageCBLService, metadataStore: IMessageMetadataStore, eventSystem: EventNotificationSystem, wsServer: WebSocketMessageServer);
|
|
13
|
+
/**
|
|
14
|
+
* Send a message
|
|
15
|
+
*/
|
|
16
|
+
sendMessage(content: Buffer, senderId: string, options: ICreateMessageOptions): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Get message content
|
|
19
|
+
*/
|
|
20
|
+
getMessage(messageId: string): Promise<Buffer | null>;
|
|
21
|
+
/**
|
|
22
|
+
* Query messages
|
|
23
|
+
*/
|
|
24
|
+
queryMessages(query: any): Promise<any>;
|
|
25
|
+
/**
|
|
26
|
+
* Delete message
|
|
27
|
+
*/
|
|
28
|
+
deleteMessage(messageId: string): Promise<void>;
|
|
29
|
+
private setupHandlers;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=messagePassingService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messagePassingService.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/messagePassingService.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EAErB,kBAAkB,IAAI,qBAAqB,EAC5C,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,uBAAuB,EAAoB,MAAM,2BAA2B,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE;;GAEG;AACH,qBAAa,qBAAqB;IAE9B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,QAAQ;gBAHR,UAAU,EAAE,iBAAiB,EAC7B,aAAa,EAAE,qBAAqB,EACpC,WAAW,EAAE,uBAAuB,EACpC,QAAQ,EAAE,sBAAsB;IAK1C;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,MAAM,CAAC;IA8BlB;;OAEG;IACG,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAK3D;;OAEG;IACG,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAI7C;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASrD,OAAO,CAAC,aAAa;CA+BtB"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessagePassingService = void 0;
|
|
4
|
+
const brightchain_lib_1 = require("@brightchain/brightchain-lib");
|
|
5
|
+
const eventNotificationSystem_1 = require("./eventNotificationSystem");
|
|
6
|
+
/**
|
|
7
|
+
* High-level message passing service coordinating storage, routing, and events
|
|
8
|
+
*/
|
|
9
|
+
class MessagePassingService {
|
|
10
|
+
constructor(messageCBL, metadataStore, eventSystem, wsServer) {
|
|
11
|
+
this.messageCBL = messageCBL;
|
|
12
|
+
this.metadataStore = metadataStore;
|
|
13
|
+
this.eventSystem = eventSystem;
|
|
14
|
+
this.wsServer = wsServer;
|
|
15
|
+
this.setupHandlers();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Send a message
|
|
19
|
+
*/
|
|
20
|
+
async sendMessage(content, senderId, options) {
|
|
21
|
+
const { messageId } = await this.messageCBL.createMessage(new Uint8Array(content), senderId, options);
|
|
22
|
+
const metadata = await this.messageCBL.getMessageMetadata(messageId);
|
|
23
|
+
if (metadata) {
|
|
24
|
+
this.eventSystem.emit(eventNotificationSystem_1.MessageEventType.MESSAGE_STORED, metadata);
|
|
25
|
+
// Route to recipients
|
|
26
|
+
if (options.recipients && options.recipients.length > 0) {
|
|
27
|
+
for (const recipientId of options.recipients) {
|
|
28
|
+
await this.wsServer.sendToNode(recipientId, messageId);
|
|
29
|
+
await this.metadataStore.updateDeliveryStatus(messageId, recipientId, brightchain_lib_1.MessageDeliveryStatus.IN_TRANSIT);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// Broadcast
|
|
34
|
+
this.wsServer.broadcast(messageId);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return messageId;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get message content
|
|
41
|
+
*/
|
|
42
|
+
async getMessage(messageId) {
|
|
43
|
+
const content = await this.messageCBL.getMessageContent(messageId);
|
|
44
|
+
return content ? Buffer.from(content) : null;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Query messages
|
|
48
|
+
*/
|
|
49
|
+
async queryMessages(query) {
|
|
50
|
+
return this.metadataStore.queryMessages(query);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Delete message
|
|
54
|
+
*/
|
|
55
|
+
async deleteMessage(messageId) {
|
|
56
|
+
const metadata = await this.messageCBL.getMessageMetadata(messageId);
|
|
57
|
+
if (metadata && metadata.cblBlockIds) {
|
|
58
|
+
for (const blockId of metadata.cblBlockIds) {
|
|
59
|
+
await this.messageCBL['blockStore'].deleteBlock(blockId);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
setupHandlers() {
|
|
64
|
+
this.wsServer.onMessage(async (nodeId, messageId) => {
|
|
65
|
+
const metadata = await this.messageCBL.getMessageMetadata(messageId);
|
|
66
|
+
if (metadata) {
|
|
67
|
+
this.eventSystem.emit(eventNotificationSystem_1.MessageEventType.MESSAGE_RECEIVED, metadata);
|
|
68
|
+
await this.wsServer.sendToNode(nodeId, messageId);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
this.wsServer.onAck(async (nodeId, messageId, status) => {
|
|
72
|
+
await this.metadataStore.recordAcknowledgment(messageId, nodeId, new Date());
|
|
73
|
+
await this.metadataStore.updateDeliveryStatus(messageId, nodeId, status);
|
|
74
|
+
const metadata = await this.messageCBL.getMessageMetadata(messageId);
|
|
75
|
+
if (metadata) {
|
|
76
|
+
const allDelivered = metadata.recipients?.every((r) => metadata.deliveryStatus?.get(r) === brightchain_lib_1.MessageDeliveryStatus.DELIVERED);
|
|
77
|
+
if (allDelivered) {
|
|
78
|
+
this.eventSystem.emit(eventNotificationSystem_1.MessageEventType.MESSAGE_DELIVERED, metadata);
|
|
79
|
+
}
|
|
80
|
+
else if (status === brightchain_lib_1.MessageDeliveryStatus.FAILED) {
|
|
81
|
+
this.eventSystem.emit(eventNotificationSystem_1.MessageEventType.MESSAGE_FAILED, metadata);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.MessagePassingService = MessagePassingService;
|
|
88
|
+
//# sourceMappingURL=messagePassingService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messagePassingService.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/messagePassingService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file NativeRsFecService - Native Reed-Solomon FEC implementation
|
|
3
|
+
* @description Provides hardware-accelerated FEC operations using native Rust bindings.
|
|
4
|
+
* This implementation is optimized for Apple Silicon and other supported platforms.
|
|
5
|
+
*
|
|
6
|
+
* @requirements 1.8, 4.5, 4.6
|
|
7
|
+
*/
|
|
8
|
+
import { FecRecoveryResult, IFecService, ParityData } from '@brightchain/brightchain-lib';
|
|
9
|
+
/**
|
|
10
|
+
* Native Reed-Solomon FEC Service using @digitaldefiance/node-rs-accelerate.
|
|
11
|
+
*
|
|
12
|
+
* This service provides hardware-accelerated FEC operations for platforms
|
|
13
|
+
* that support native Rust bindings, particularly Apple Silicon.
|
|
14
|
+
*
|
|
15
|
+
* If the native library is not available, isAvailable() will return false
|
|
16
|
+
* and the FecServiceFactory should fall back to WasmFecService.
|
|
17
|
+
*/
|
|
18
|
+
export declare class NativeRsFecService implements IFecService {
|
|
19
|
+
private nativeModule;
|
|
20
|
+
private availabilityChecked;
|
|
21
|
+
private isAvailableResult;
|
|
22
|
+
/**
|
|
23
|
+
* Check if the native FEC service is available.
|
|
24
|
+
*
|
|
25
|
+
* This checks for:
|
|
26
|
+
* 1. The @digitaldefiance/node-rs-accelerate package being installed
|
|
27
|
+
* 2. Native bindings being available for the current platform
|
|
28
|
+
* 3. Apple Silicon or other supported hardware
|
|
29
|
+
*
|
|
30
|
+
* @returns Promise resolving to true if native FEC is available
|
|
31
|
+
*/
|
|
32
|
+
isAvailable(): Promise<boolean>;
|
|
33
|
+
/**
|
|
34
|
+
* Attempt to load the native Reed-Solomon module.
|
|
35
|
+
* @returns The native module or null if not available
|
|
36
|
+
*/
|
|
37
|
+
private loadNativeModule;
|
|
38
|
+
/**
|
|
39
|
+
* Ensure the native module is loaded and available.
|
|
40
|
+
* @throws FecError if native module is not available
|
|
41
|
+
*/
|
|
42
|
+
private ensureAvailable;
|
|
43
|
+
/**
|
|
44
|
+
* Create parity data for a block using native Reed-Solomon encoding.
|
|
45
|
+
*
|
|
46
|
+
* @param blockData - The original block data to create parity for
|
|
47
|
+
* @param parityCount - Number of parity shards to generate
|
|
48
|
+
* @returns Promise resolving to array of parity data objects
|
|
49
|
+
* @throws FecError if encoding fails or native module is not available
|
|
50
|
+
*/
|
|
51
|
+
createParityData(blockData: Buffer | Uint8Array, parityCount: number): Promise<ParityData[]>;
|
|
52
|
+
/**
|
|
53
|
+
* Recover block data using parity data with native decoding.
|
|
54
|
+
*
|
|
55
|
+
* @param corruptedData - The corrupted block data, or null if completely missing
|
|
56
|
+
* @param parityData - Array of available parity data objects
|
|
57
|
+
* @param originalSize - The original size of the block data in bytes
|
|
58
|
+
* @returns Promise resolving to recovery result with recovered data
|
|
59
|
+
* @throws FecError if recovery fails or native module is not available
|
|
60
|
+
*/
|
|
61
|
+
recoverFileData(_corruptedData: Buffer | Uint8Array | null, parityData: ParityData[], originalSize: number): Promise<FecRecoveryResult>;
|
|
62
|
+
/**
|
|
63
|
+
* Verify block integrity against its parity data using native operations.
|
|
64
|
+
*
|
|
65
|
+
* @param blockData - The block data to verify
|
|
66
|
+
* @param parityData - The stored parity data to verify against
|
|
67
|
+
* @returns Promise resolving to true if the block is intact
|
|
68
|
+
*/
|
|
69
|
+
verifyFileIntegrity(blockData: Buffer | Uint8Array, parityData: ParityData[]): Promise<boolean>;
|
|
70
|
+
/**
|
|
71
|
+
* Native Reed-Solomon encoding.
|
|
72
|
+
*/
|
|
73
|
+
private nativeEncode;
|
|
74
|
+
/**
|
|
75
|
+
* Native Reed-Solomon decoding.
|
|
76
|
+
*/
|
|
77
|
+
private nativeDecode;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=nativeRsFecService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeRsFecService.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/nativeRsFecService.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAGL,iBAAiB,EACjB,WAAW,EACX,UAAU,EACX,MAAM,8BAA8B,CAAC;AAGtC;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,YAAW,WAAW;IACpD,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,iBAAiB,CAAS;IAElC;;;;;;;;;OASG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAoBrC;;;OAGG;YACW,gBAAgB;IAc9B;;;OAGG;YACW,eAAe;IAU7B;;;;;;;OAOG;IACG,gBAAgB,CACpB,SAAS,EAAE,MAAM,GAAG,UAAU,EAC9B,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,UAAU,EAAE,CAAC;IAuExB;;;;;;;;OAQG;IACG,eAAe,CACnB,cAAc,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,EAC1C,UAAU,EAAE,UAAU,EAAE,EACxB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,iBAAiB,CAAC;IAwE7B;;;;;;OAMG;IACG,mBAAmB,CACvB,SAAS,EAAE,MAAM,GAAG,UAAU,EAC9B,UAAU,EAAE,UAAU,EAAE,GACvB,OAAO,CAAC,OAAO,CAAC;IAiBnB;;OAEG;YACW,YAAY;IA+C1B;;OAEG;YACW,YAAY;CA4C3B"}
|