@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,295 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @file NativeRsFecService - Native Reed-Solomon FEC implementation
|
|
4
|
+
* @description Provides hardware-accelerated FEC operations using native Rust bindings.
|
|
5
|
+
* This implementation is optimized for Apple Silicon and other supported platforms.
|
|
6
|
+
*
|
|
7
|
+
* @requirements 1.8, 4.5, 4.6
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.NativeRsFecService = void 0;
|
|
11
|
+
const brightchain_lib_1 = require("@brightchain/brightchain-lib");
|
|
12
|
+
const constants_1 = require("../constants");
|
|
13
|
+
/**
|
|
14
|
+
* Native Reed-Solomon FEC Service using @digitaldefiance/node-rs-accelerate.
|
|
15
|
+
*
|
|
16
|
+
* This service provides hardware-accelerated FEC operations for platforms
|
|
17
|
+
* that support native Rust bindings, particularly Apple Silicon.
|
|
18
|
+
*
|
|
19
|
+
* If the native library is not available, isAvailable() will return false
|
|
20
|
+
* and the FecServiceFactory should fall back to WasmFecService.
|
|
21
|
+
*/
|
|
22
|
+
class NativeRsFecService {
|
|
23
|
+
constructor() {
|
|
24
|
+
this.nativeModule = null;
|
|
25
|
+
this.availabilityChecked = false;
|
|
26
|
+
this.isAvailableResult = false;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Check if the native FEC service is available.
|
|
30
|
+
*
|
|
31
|
+
* This checks for:
|
|
32
|
+
* 1. The @digitaldefiance/node-rs-accelerate package being installed
|
|
33
|
+
* 2. Native bindings being available for the current platform
|
|
34
|
+
* 3. Apple Silicon or other supported hardware
|
|
35
|
+
*
|
|
36
|
+
* @returns Promise resolving to true if native FEC is available
|
|
37
|
+
*/
|
|
38
|
+
async isAvailable() {
|
|
39
|
+
if (this.availabilityChecked) {
|
|
40
|
+
return this.isAvailableResult;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
// Try to dynamically import the native module
|
|
44
|
+
// This will fail if the package is not installed or bindings are not available
|
|
45
|
+
const module = await this.loadNativeModule();
|
|
46
|
+
this.nativeModule = module;
|
|
47
|
+
this.isAvailableResult =
|
|
48
|
+
module !== null && typeof module.encode === 'function';
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
this.isAvailableResult = false;
|
|
52
|
+
}
|
|
53
|
+
this.availabilityChecked = true;
|
|
54
|
+
return this.isAvailableResult;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Attempt to load the native Reed-Solomon module.
|
|
58
|
+
* @returns The native module or null if not available
|
|
59
|
+
*/
|
|
60
|
+
async loadNativeModule() {
|
|
61
|
+
try {
|
|
62
|
+
// Dynamic import to avoid build-time errors if package is not installed
|
|
63
|
+
// The package may not exist yet - this is intentional for future hardware acceleration
|
|
64
|
+
const nativeRs = await Function('return import("@digitaldefiance/node-rs-accelerate")')();
|
|
65
|
+
return nativeRs;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Package not installed or native bindings not available
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Ensure the native module is loaded and available.
|
|
74
|
+
* @throws FecError if native module is not available
|
|
75
|
+
*/
|
|
76
|
+
async ensureAvailable() {
|
|
77
|
+
const available = await this.isAvailable();
|
|
78
|
+
if (!available || !this.nativeModule) {
|
|
79
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.FecEncodingFailed, undefined, {
|
|
80
|
+
ERROR: 'Native FEC service is not available on this platform',
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return this.nativeModule;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create parity data for a block using native Reed-Solomon encoding.
|
|
87
|
+
*
|
|
88
|
+
* @param blockData - The original block data to create parity for
|
|
89
|
+
* @param parityCount - Number of parity shards to generate
|
|
90
|
+
* @returns Promise resolving to array of parity data objects
|
|
91
|
+
* @throws FecError if encoding fails or native module is not available
|
|
92
|
+
*/
|
|
93
|
+
async createParityData(blockData, parityCount) {
|
|
94
|
+
const nativeModule = await this.ensureAvailable();
|
|
95
|
+
if (!blockData || blockData.length === 0) {
|
|
96
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.DataRequired);
|
|
97
|
+
}
|
|
98
|
+
if (parityCount <= 0) {
|
|
99
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.ParityBlockCountMustBePositive);
|
|
100
|
+
}
|
|
101
|
+
const shardSize = Math.min(blockData.length, constants_1.Constants.FEC.MAX_SHARD_SIZE);
|
|
102
|
+
const requiredShards = Math.ceil(blockData.length / shardSize);
|
|
103
|
+
try {
|
|
104
|
+
const resultParityData = Array(parityCount)
|
|
105
|
+
.fill(null)
|
|
106
|
+
.map(() => Buffer.alloc(0));
|
|
107
|
+
// Process each chunk
|
|
108
|
+
for (let i = 0; i < requiredShards; i++) {
|
|
109
|
+
const start = i * shardSize;
|
|
110
|
+
const end = Math.min(start + shardSize, blockData.length);
|
|
111
|
+
const chunk = blockData.subarray(start, end);
|
|
112
|
+
// Pad chunk if necessary
|
|
113
|
+
const paddedChunk = chunk.length < shardSize
|
|
114
|
+
? Buffer.concat([
|
|
115
|
+
Buffer.from(chunk),
|
|
116
|
+
Buffer.alloc(shardSize - chunk.length),
|
|
117
|
+
])
|
|
118
|
+
: Buffer.from(chunk);
|
|
119
|
+
// Use native encoding
|
|
120
|
+
const chunkParity = await this.nativeEncode(nativeModule, paddedChunk, shardSize, 1, parityCount, true);
|
|
121
|
+
// Distribute parity data
|
|
122
|
+
for (let j = 0; j < parityCount; j++) {
|
|
123
|
+
const parityChunk = chunkParity.subarray(j * shardSize, (j + 1) * shardSize);
|
|
124
|
+
resultParityData[j] = Buffer.concat([
|
|
125
|
+
resultParityData[j],
|
|
126
|
+
parityChunk,
|
|
127
|
+
]);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return resultParityData.map((data, index) => ({
|
|
131
|
+
data,
|
|
132
|
+
index,
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
if (error instanceof brightchain_lib_1.FecError) {
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.FecEncodingFailed, undefined, {
|
|
140
|
+
ERROR: error instanceof Error ? error.message : 'Unknown error',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Recover block data using parity data with native decoding.
|
|
146
|
+
*
|
|
147
|
+
* @param corruptedData - The corrupted block data, or null if completely missing
|
|
148
|
+
* @param parityData - Array of available parity data objects
|
|
149
|
+
* @param originalSize - The original size of the block data in bytes
|
|
150
|
+
* @returns Promise resolving to recovery result with recovered data
|
|
151
|
+
* @throws FecError if recovery fails or native module is not available
|
|
152
|
+
*/
|
|
153
|
+
async recoverFileData(_corruptedData, parityData, originalSize) {
|
|
154
|
+
const nativeModule = await this.ensureAvailable();
|
|
155
|
+
if (!parityData || parityData.length === 0) {
|
|
156
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.DataRequired);
|
|
157
|
+
}
|
|
158
|
+
if (originalSize <= 0) {
|
|
159
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.InvalidDataLength);
|
|
160
|
+
}
|
|
161
|
+
try {
|
|
162
|
+
const shardSize = Math.min(originalSize, constants_1.Constants.FEC.MAX_SHARD_SIZE);
|
|
163
|
+
const requiredShards = Math.ceil(originalSize / shardSize);
|
|
164
|
+
// Set up shard availability array (data shard unavailable, parity shards available)
|
|
165
|
+
const availableShards = [false, ...Array(parityData.length).fill(true)];
|
|
166
|
+
let recoveredData = Buffer.alloc(0);
|
|
167
|
+
// Recover each shard
|
|
168
|
+
for (let i = 0; i < requiredShards; i++) {
|
|
169
|
+
const start = i * shardSize;
|
|
170
|
+
const end = Math.min(start + shardSize, originalSize);
|
|
171
|
+
const chunkSize = end - start;
|
|
172
|
+
// Create placeholder for corrupted data shard
|
|
173
|
+
const corruptedShard = Buffer.alloc(shardSize);
|
|
174
|
+
// Combine corrupted and parity data for this shard
|
|
175
|
+
const shardData = Buffer.concat([
|
|
176
|
+
corruptedShard,
|
|
177
|
+
...parityData.map((parity) => Buffer.from(parity.data.subarray(i * shardSize, (i + 1) * shardSize))),
|
|
178
|
+
]);
|
|
179
|
+
// Recover this shard using native decoding
|
|
180
|
+
const recoveredShard = await this.nativeDecode(nativeModule, shardData, shardSize, 1, parityData.length, availableShards);
|
|
181
|
+
// Only take the actual data length for the last shard
|
|
182
|
+
const actualShard = i === requiredShards - 1
|
|
183
|
+
? recoveredShard.subarray(0, chunkSize)
|
|
184
|
+
: recoveredShard;
|
|
185
|
+
recoveredData = Buffer.concat([recoveredData, actualShard]);
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
data: recoveredData,
|
|
189
|
+
recovered: true,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
if (error instanceof brightchain_lib_1.FecError) {
|
|
194
|
+
throw error;
|
|
195
|
+
}
|
|
196
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.FecDecodingFailed, undefined, {
|
|
197
|
+
ERROR: error instanceof Error ? error.message : 'Unknown error',
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Verify block integrity against its parity data using native operations.
|
|
203
|
+
*
|
|
204
|
+
* @param blockData - The block data to verify
|
|
205
|
+
* @param parityData - The stored parity data to verify against
|
|
206
|
+
* @returns Promise resolving to true if the block is intact
|
|
207
|
+
*/
|
|
208
|
+
async verifyFileIntegrity(blockData, parityData) {
|
|
209
|
+
try {
|
|
210
|
+
const regeneratedParity = await this.createParityData(blockData, parityData.length);
|
|
211
|
+
return parityData.every((original, index) => {
|
|
212
|
+
const originalBuf = Buffer.from(original.data);
|
|
213
|
+
const regeneratedBuf = Buffer.from(regeneratedParity[index].data);
|
|
214
|
+
return originalBuf.equals(regeneratedBuf);
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Native Reed-Solomon encoding.
|
|
223
|
+
*/
|
|
224
|
+
async nativeEncode(nativeModule, data, shardSize, dataShards, parityShards, fecOnly) {
|
|
225
|
+
if (!data || data.length === 0) {
|
|
226
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.DataRequired);
|
|
227
|
+
}
|
|
228
|
+
if (data.length !== shardSize * dataShards) {
|
|
229
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.InvalidDataLength, undefined, {
|
|
230
|
+
LENGTH: data.length.toString(),
|
|
231
|
+
EXPECTED: (shardSize * dataShards).toString(),
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
if (shardSize > constants_1.Constants.FEC.MAX_SHARD_SIZE) {
|
|
235
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.ShardSizeExceedsMaximum, undefined, {
|
|
236
|
+
SIZE: shardSize.toString(),
|
|
237
|
+
MAXIMUM: constants_1.Constants.FEC.MAX_SHARD_SIZE.toString(),
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
if (dataShards <= 0 || parityShards <= 0) {
|
|
241
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.InvalidShardCounts);
|
|
242
|
+
}
|
|
243
|
+
try {
|
|
244
|
+
const shards = new Uint8Array(shardSize * (dataShards + parityShards));
|
|
245
|
+
shards.set(data);
|
|
246
|
+
// Use native encoding
|
|
247
|
+
nativeModule.encode(shards, dataShards, parityShards);
|
|
248
|
+
return fecOnly
|
|
249
|
+
? Buffer.from(shards.subarray(shardSize * dataShards))
|
|
250
|
+
: Buffer.from(shards);
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.FecEncodingFailed, undefined, {
|
|
254
|
+
ERROR: error instanceof Error ? error.message : 'Unknown error',
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Native Reed-Solomon decoding.
|
|
260
|
+
*/
|
|
261
|
+
async nativeDecode(nativeModule, data, shardSize, dataShards, parityShards, shardsAvailable) {
|
|
262
|
+
if (!data || data.length === 0) {
|
|
263
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.DataRequired);
|
|
264
|
+
}
|
|
265
|
+
if (data.length !== shardSize * (dataShards + parityShards)) {
|
|
266
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.InvalidDataLength, undefined, {
|
|
267
|
+
LENGTH: data.length.toString(),
|
|
268
|
+
EXPECTED: (shardSize * (dataShards + parityShards)).toString(),
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
if (!shardsAvailable ||
|
|
272
|
+
shardsAvailable.length !== dataShards + parityShards) {
|
|
273
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.InvalidShardsAvailableArray);
|
|
274
|
+
}
|
|
275
|
+
const availableCount = shardsAvailable.filter((x) => x).length;
|
|
276
|
+
if (availableCount < dataShards) {
|
|
277
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.NotEnoughShardsAvailable, undefined, {
|
|
278
|
+
AVAILABLE: availableCount.toString(),
|
|
279
|
+
REQUIRED: dataShards.toString(),
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
try {
|
|
283
|
+
// Use native reconstruction
|
|
284
|
+
nativeModule.reconstruct(data, dataShards, parityShards, shardsAvailable);
|
|
285
|
+
return data.subarray(0, shardSize * dataShards);
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
throw new brightchain_lib_1.FecError(brightchain_lib_1.FecErrorType.FecDecodingFailed, undefined, {
|
|
289
|
+
ERROR: error instanceof Error ? error.message : 'Unknown error',
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
exports.NativeRsFecService = NativeRsFecService;
|
|
295
|
+
//# sourceMappingURL=nativeRsFecService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nativeRsFecService.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/nativeRsFecService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { IPbkdf2Result } from '../interfaces/pbkdf2-result';
|
|
2
|
+
export declare class Pbkdf2Service {
|
|
3
|
+
static deriveKeyFromPassword(password: Buffer, salt: Buffer, iterations: number, saltSize: number, keyLength: number, digest: string): IPbkdf2Result;
|
|
4
|
+
static deriveKeyFromPasswordAsync(password: Buffer, salt: Buffer, iterations: number, saltSize: number, keyLength: number, digest: string): Promise<IPbkdf2Result>;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=pbkdf2.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pbkdf2.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/pbkdf2.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,qBAAa,aAAa;WACV,qBAAqB,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,aAAa;WAUI,0BAA0B,CAC5C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,aAAa,CAAC;CAa1B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Pbkdf2Service = void 0;
|
|
4
|
+
const crypto_1 = require("crypto");
|
|
5
|
+
class Pbkdf2Service {
|
|
6
|
+
static deriveKeyFromPassword(password, salt, iterations, saltSize, keyLength, digest) {
|
|
7
|
+
const hash = (0, crypto_1.pbkdf2Sync)(password, salt, iterations, keyLength, digest);
|
|
8
|
+
return {
|
|
9
|
+
hash,
|
|
10
|
+
salt,
|
|
11
|
+
iterations,
|
|
12
|
+
// digest,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
static async deriveKeyFromPasswordAsync(password, salt, iterations, saltSize, keyLength, digest) {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
(0, crypto_1.pbkdf2)(password, salt, iterations, keyLength, digest, (err, hash) => {
|
|
18
|
+
if (err)
|
|
19
|
+
return reject(err);
|
|
20
|
+
resolve({
|
|
21
|
+
hash,
|
|
22
|
+
salt,
|
|
23
|
+
iterations,
|
|
24
|
+
// digest,
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
exports.Pbkdf2Service = Pbkdf2Service;
|
|
31
|
+
//# sourceMappingURL=pbkdf2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pbkdf2.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/pbkdf2.ts"],"names":[],"mappings":";;;AAAA,mCAA4C;AAG5C,MAAa,aAAa;IACjB,MAAM,CAAC,qBAAqB,CACjC,QAAgB,EAChB,IAAY,EACZ,UAAkB,EAClB,QAAgB,EAChB,SAAiB,EACjB,MAAc;QAEd,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACvE,OAAO;YACL,IAAI;YACJ,IAAI;YACJ,UAAU;YACV,UAAU;SACX,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAC5C,QAAgB,EAChB,IAAY,EACZ,UAAkB,EAClB,QAAgB,EAChB,SAAiB,EACjB,MAAc;QAEd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAA,eAAM,EAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBAClE,IAAI,GAAG;oBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC5B,OAAO,CAAC;oBACN,IAAI;oBACJ,IAAI;oBACJ,UAAU;oBACV,UAAU;iBACX,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAtCD,sCAsCC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PlatformID } from '@digitaldefiance/node-ecies-lib';
|
|
2
|
+
import { BackupCodeService, UserService as BaseUserService, IBaseDocument, IConstants, IEmailService, KeyWrappingService, RoleService } from '@digitaldefiance/node-express-suite';
|
|
3
|
+
import { ITokenRole, IUserBase } from '@digitaldefiance/suite-core-lib';
|
|
4
|
+
import { Environment } from '../environment';
|
|
5
|
+
import { IApplication } from '../interfaces/application';
|
|
6
|
+
import { DefaultBackendIdType } from '../shared-types';
|
|
7
|
+
export declare class UserService<T, D extends Date, S extends string, A extends string, I extends PlatformID = DefaultBackendIdType, TEnvironment extends Environment = Environment, TConstants extends IConstants = IConstants, TBaseDocument extends IBaseDocument<T, I> = IBaseDocument<T, I>, TUser extends IUserBase<I, D, S, A> = IUserBase<I, D, S, A>, TTokenRole extends ITokenRole<I, D> = ITokenRole<I, D>, TApplication extends IApplication<I> = IApplication<I>> extends BaseUserService<T, I, D, S, A, TEnvironment, TConstants, TBaseDocument, TUser, TTokenRole, TApplication> {
|
|
8
|
+
constructor(application: TApplication, roleService: RoleService<I, D, TTokenRole>, emailService: IEmailService, keyWrappingService: KeyWrappingService, backupCodeService: BackupCodeService<I, D, TTokenRole, TApplication>);
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EACL,iBAAiB,EACjB,WAAW,IAAI,eAAe,EAC9B,aAAa,EACb,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,WAAW,EACZ,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,qBAAa,WAAW,CACtB,CAAC,EACD,CAAC,SAAS,IAAI,EACd,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,MAAM,EAChB,CAAC,SAAS,UAAU,GAAG,oBAAoB,EAC3C,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,UAAU,SAAS,UAAU,GAAG,UAAU,EAC1C,aAAa,SAAS,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAC/D,KAAK,SAAS,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC3D,UAAU,SAAS,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EACtD,YAAY,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CACtD,SAAQ,eAAe,CACvB,CAAC,EACD,CAAC,EACD,CAAC,EACD,CAAC,EACD,CAAC,EACD,YAAY,EACZ,UAAU,EACV,aAAa,EACb,KAAK,EACL,UAAU,EACV,YAAY,CACb;gBAEG,WAAW,EAAE,YAAY,EACzB,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,EAC1C,YAAY,EAAE,aAAa,EAC3B,kBAAkB,EAAE,kBAAkB,EACtC,iBAAiB,EAAE,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,YAAY,CAAC;CAUvE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UserService = void 0;
|
|
4
|
+
const node_express_suite_1 = require("@digitaldefiance/node-express-suite");
|
|
5
|
+
class UserService extends node_express_suite_1.UserService {
|
|
6
|
+
constructor(application, roleService, emailService, keyWrappingService, backupCodeService) {
|
|
7
|
+
super(application, roleService, emailService, keyWrappingService, backupCodeService);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.UserService = UserService;
|
|
11
|
+
//# sourceMappingURL=user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/user.ts"],"names":[],"mappings":";;;AACA,4EAQ6C;AAM7C,MAAa,WAYX,SAAQ,gCAYT;IACC,YACE,WAAyB,EACzB,WAA0C,EAC1C,YAA2B,EAC3B,kBAAsC,EACtC,iBAAoE;QAEpE,KAAK,CACH,WAAW,EACX,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,CAClB,CAAC;IACJ,CAAC;CACF;AAxCD,kCAwCC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Server } from 'http';
|
|
2
|
+
/**
|
|
3
|
+
* WebSocket message handler callback
|
|
4
|
+
*/
|
|
5
|
+
export type MessageHandler = (nodeId: string, messageId: string) => Promise<void>;
|
|
6
|
+
export type AckHandler = (nodeId: string, messageId: string, status: string) => Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Node.js WebSocket server for message passing with ECIES authentication
|
|
9
|
+
* Manages WebSocket connections and routes messages between nodes
|
|
10
|
+
*/
|
|
11
|
+
export declare class WebSocketMessageServer {
|
|
12
|
+
private wss;
|
|
13
|
+
private connections;
|
|
14
|
+
private authenticatedNodes;
|
|
15
|
+
private publicKeys;
|
|
16
|
+
private messageHandler?;
|
|
17
|
+
private ackHandler?;
|
|
18
|
+
private eciesSignature;
|
|
19
|
+
private requireAuth;
|
|
20
|
+
constructor(server: Server, requireAuth?: boolean);
|
|
21
|
+
/**
|
|
22
|
+
* Register public key for a node
|
|
23
|
+
*/
|
|
24
|
+
registerNodeKey(nodeId: string, publicKey: Buffer): void;
|
|
25
|
+
/**
|
|
26
|
+
* Register message handler
|
|
27
|
+
*/
|
|
28
|
+
onMessage(handler: MessageHandler): void;
|
|
29
|
+
/**
|
|
30
|
+
* Register acknowledgment handler
|
|
31
|
+
*/
|
|
32
|
+
onAck(handler: AckHandler): void;
|
|
33
|
+
/**
|
|
34
|
+
* Send message to specific node
|
|
35
|
+
*/
|
|
36
|
+
sendToNode(nodeId: string, messageId: string): Promise<boolean>;
|
|
37
|
+
/**
|
|
38
|
+
* Broadcast message to all connected nodes
|
|
39
|
+
*/
|
|
40
|
+
broadcast(messageId: string): void;
|
|
41
|
+
/**
|
|
42
|
+
* Get connected node IDs
|
|
43
|
+
*/
|
|
44
|
+
getConnectedNodes(): string[];
|
|
45
|
+
/**
|
|
46
|
+
* Close all connections and shutdown server
|
|
47
|
+
*/
|
|
48
|
+
close(callback?: () => void): void;
|
|
49
|
+
private setupConnectionHandler;
|
|
50
|
+
private verifySignature;
|
|
51
|
+
private extractNodeId;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=webSocketMessageServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webSocketMessageServer.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/webSocketMessageServer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAClF,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE9F;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,cAAc,CAAC,CAAiB;IACxC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,WAAW,CAAU;gBAEjB,MAAM,EAAE,MAAM,EAAE,WAAW,UAAQ;IAS/C;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIxD;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAIxC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAIhC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAcrE;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IASlC;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAalC,OAAO,CAAC,sBAAsB;YAyDhB,eAAe;IAU7B,OAAO,CAAC,aAAa;CAKtB"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WebSocketMessageServer = void 0;
|
|
4
|
+
const ws_1 = require("ws");
|
|
5
|
+
const node_ecies_lib_1 = require("@digitaldefiance/node-ecies-lib");
|
|
6
|
+
/**
|
|
7
|
+
* Node.js WebSocket server for message passing with ECIES authentication
|
|
8
|
+
* Manages WebSocket connections and routes messages between nodes
|
|
9
|
+
*/
|
|
10
|
+
class WebSocketMessageServer {
|
|
11
|
+
constructor(server, requireAuth = false) {
|
|
12
|
+
this.connections = new Map();
|
|
13
|
+
this.authenticatedNodes = new Map(); // ws -> nodeId
|
|
14
|
+
this.publicKeys = new Map(); // nodeId -> publicKey
|
|
15
|
+
this.wss = new ws_1.WebSocketServer({ server });
|
|
16
|
+
this.requireAuth = requireAuth;
|
|
17
|
+
const config = { enableCompression: false };
|
|
18
|
+
const cryptoCore = new node_ecies_lib_1.EciesCryptoCore(config);
|
|
19
|
+
this.eciesSignature = new node_ecies_lib_1.EciesSignature(cryptoCore);
|
|
20
|
+
this.setupConnectionHandler();
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Register public key for a node
|
|
24
|
+
*/
|
|
25
|
+
registerNodeKey(nodeId, publicKey) {
|
|
26
|
+
this.publicKeys.set(nodeId, publicKey);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Register message handler
|
|
30
|
+
*/
|
|
31
|
+
onMessage(handler) {
|
|
32
|
+
this.messageHandler = handler;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Register acknowledgment handler
|
|
36
|
+
*/
|
|
37
|
+
onAck(handler) {
|
|
38
|
+
this.ackHandler = handler;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Send message to specific node
|
|
42
|
+
*/
|
|
43
|
+
async sendToNode(nodeId, messageId) {
|
|
44
|
+
const ws = this.connections.get(nodeId);
|
|
45
|
+
if (!ws || ws.readyState !== ws_1.WebSocket.OPEN) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
try {
|
|
49
|
+
ws.send(JSON.stringify({ type: 'message', messageId }));
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Broadcast message to all connected nodes
|
|
58
|
+
*/
|
|
59
|
+
broadcast(messageId) {
|
|
60
|
+
const message = JSON.stringify({ type: 'message', messageId });
|
|
61
|
+
for (const ws of this.connections.values()) {
|
|
62
|
+
if (ws.readyState === ws_1.WebSocket.OPEN) {
|
|
63
|
+
ws.send(message);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get connected node IDs
|
|
69
|
+
*/
|
|
70
|
+
getConnectedNodes() {
|
|
71
|
+
return Array.from(this.connections.keys());
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Close all connections and shutdown server
|
|
75
|
+
*/
|
|
76
|
+
close(callback) {
|
|
77
|
+
for (const ws of this.connections.values()) {
|
|
78
|
+
ws.close();
|
|
79
|
+
}
|
|
80
|
+
this.connections.clear();
|
|
81
|
+
this.authenticatedNodes.clear();
|
|
82
|
+
if (callback) {
|
|
83
|
+
this.wss.close(callback);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
this.wss.close();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
setupConnectionHandler() {
|
|
90
|
+
this.wss.on('connection', (ws, req) => {
|
|
91
|
+
const nodeId = this.extractNodeId(req.url);
|
|
92
|
+
if (!nodeId) {
|
|
93
|
+
ws.close();
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
let authenticated = !this.requireAuth;
|
|
97
|
+
if (!this.requireAuth) {
|
|
98
|
+
this.connections.set(nodeId, ws);
|
|
99
|
+
this.authenticatedNodes.set(ws, nodeId);
|
|
100
|
+
}
|
|
101
|
+
ws.on('message', async (data) => {
|
|
102
|
+
try {
|
|
103
|
+
const message = JSON.parse(data.toString());
|
|
104
|
+
if (message.type === 'auth') {
|
|
105
|
+
const publicKey = this.publicKeys.get(message.nodeId);
|
|
106
|
+
if (publicKey && await this.verifySignature(message.nodeId, message.timestamp, message.signature, publicKey)) {
|
|
107
|
+
authenticated = true;
|
|
108
|
+
this.connections.set(message.nodeId, ws);
|
|
109
|
+
this.authenticatedNodes.set(ws, message.nodeId);
|
|
110
|
+
ws.send(JSON.stringify({ type: 'auth_success' }));
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
ws.close();
|
|
114
|
+
}
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (!authenticated) {
|
|
118
|
+
ws.close();
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (message.type === 'message' && this.messageHandler) {
|
|
122
|
+
await this.messageHandler(nodeId, message.messageId);
|
|
123
|
+
}
|
|
124
|
+
else if (message.type === 'ack' && this.ackHandler) {
|
|
125
|
+
await this.ackHandler(nodeId, message.messageId, message.status);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Invalid message format
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
ws.on('close', () => {
|
|
133
|
+
const authenticatedNodeId = this.authenticatedNodes.get(ws);
|
|
134
|
+
if (authenticatedNodeId) {
|
|
135
|
+
this.connections.delete(authenticatedNodeId);
|
|
136
|
+
this.authenticatedNodes.delete(ws);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
async verifySignature(nodeId, timestamp, signature, publicKey) {
|
|
142
|
+
try {
|
|
143
|
+
const message = Buffer.from(`${nodeId}:${timestamp}`);
|
|
144
|
+
const signatureBuffer = Buffer.from(signature, 'hex');
|
|
145
|
+
return this.eciesSignature.verifyMessage(publicKey, message, signatureBuffer);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
extractNodeId(url) {
|
|
152
|
+
if (!url)
|
|
153
|
+
return null;
|
|
154
|
+
const match = url.match(/\/([^/?]+)/);
|
|
155
|
+
return match ? match[1] : null;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.WebSocketMessageServer = WebSocketMessageServer;
|
|
159
|
+
//# sourceMappingURL=webSocketMessageServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webSocketMessageServer.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/services/webSocketMessageServer.ts"],"names":[],"mappings":"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"}
|