@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,375 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Heartbeat Monitor Implementation
|
|
4
|
+
*
|
|
5
|
+
* Implements peer connectivity monitoring through periodic heartbeat messages.
|
|
6
|
+
* Detects network partitions when all peers become unreachable and
|
|
7
|
+
* triggers reconnection events when peers become available again.
|
|
8
|
+
*
|
|
9
|
+
* @see Requirements 7.1, 7.2, 7.5, 7.6
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.HeartbeatMonitor = exports.DEFAULT_HEARTBEAT_CONFIG = void 0;
|
|
13
|
+
// Re-export DEFAULT_HEARTBEAT_CONFIG from brightchain-lib for convenience
|
|
14
|
+
var brightchain_lib_1 = require("@brightchain/brightchain-lib");
|
|
15
|
+
Object.defineProperty(exports, "DEFAULT_HEARTBEAT_CONFIG", { enumerable: true, get: function () { return brightchain_lib_1.DEFAULT_HEARTBEAT_CONFIG; } });
|
|
16
|
+
/**
|
|
17
|
+
* Default heartbeat configuration values (local copy for use in this module).
|
|
18
|
+
*/
|
|
19
|
+
const defaultHeartbeatConfig = {
|
|
20
|
+
intervalMs: 5000,
|
|
21
|
+
timeoutMs: 2000,
|
|
22
|
+
missedThreshold: 3,
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Heartbeat Monitor Implementation
|
|
26
|
+
*
|
|
27
|
+
* Monitors peer connectivity using periodic heartbeat messages.
|
|
28
|
+
* Detects network partitions when all peers become unreachable and
|
|
29
|
+
* triggers reconnection events when peers become available again.
|
|
30
|
+
*
|
|
31
|
+
* @see Requirements 7.1, 7.2, 7.5, 7.6
|
|
32
|
+
*/
|
|
33
|
+
class HeartbeatMonitor {
|
|
34
|
+
/**
|
|
35
|
+
* Create a new HeartbeatMonitor.
|
|
36
|
+
*
|
|
37
|
+
* @param transport - Transport for sending heartbeat pings
|
|
38
|
+
* @param config - Heartbeat configuration (uses defaults if not provided)
|
|
39
|
+
*/
|
|
40
|
+
constructor(transport, config = defaultHeartbeatConfig) {
|
|
41
|
+
this.transport = transport;
|
|
42
|
+
this.config = config;
|
|
43
|
+
/**
|
|
44
|
+
* Map of peer ID to heartbeat state.
|
|
45
|
+
*/
|
|
46
|
+
this.peerStates = new Map();
|
|
47
|
+
/**
|
|
48
|
+
* Registered connectivity event handlers.
|
|
49
|
+
*/
|
|
50
|
+
this.handlers = new Set();
|
|
51
|
+
/**
|
|
52
|
+
* Heartbeat interval timer handle.
|
|
53
|
+
*/
|
|
54
|
+
this.heartbeatTimer = null;
|
|
55
|
+
/**
|
|
56
|
+
* Whether the monitor is currently running.
|
|
57
|
+
*/
|
|
58
|
+
this.running = false;
|
|
59
|
+
/**
|
|
60
|
+
* Whether we are currently in a partition state (all peers unreachable).
|
|
61
|
+
*/
|
|
62
|
+
this.inPartition = false;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Start the heartbeat monitor.
|
|
66
|
+
* Begins sending periodic heartbeat pings to all known peers.
|
|
67
|
+
*
|
|
68
|
+
* @see Requirements 7.1
|
|
69
|
+
*/
|
|
70
|
+
start() {
|
|
71
|
+
if (this.running) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
this.running = true;
|
|
75
|
+
this.heartbeatTimer = setInterval(() => {
|
|
76
|
+
this.sendHeartbeats().catch(() => {
|
|
77
|
+
// Ignore heartbeat errors - they're handled per-peer
|
|
78
|
+
});
|
|
79
|
+
}, this.config.intervalMs);
|
|
80
|
+
// Send initial heartbeats immediately
|
|
81
|
+
this.sendHeartbeats().catch(() => {
|
|
82
|
+
// Ignore initial heartbeat errors
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Stop the heartbeat monitor.
|
|
87
|
+
* Stops sending heartbeats and clears all tracking state.
|
|
88
|
+
*/
|
|
89
|
+
stop() {
|
|
90
|
+
if (!this.running) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
this.running = false;
|
|
94
|
+
if (this.heartbeatTimer) {
|
|
95
|
+
clearInterval(this.heartbeatTimer);
|
|
96
|
+
this.heartbeatTimer = null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if the monitor is currently running.
|
|
101
|
+
*
|
|
102
|
+
* @returns True if the monitor is active
|
|
103
|
+
*/
|
|
104
|
+
isRunning() {
|
|
105
|
+
return this.running;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Check if a specific peer is currently reachable.
|
|
109
|
+
*
|
|
110
|
+
* @param peerId - The peer ID to check
|
|
111
|
+
* @returns True if the peer is reachable (responding to heartbeats)
|
|
112
|
+
* @see Requirements 7.5
|
|
113
|
+
*/
|
|
114
|
+
isPeerReachable(peerId) {
|
|
115
|
+
const state = this.peerStates.get(peerId);
|
|
116
|
+
return state?.reachable ?? false;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Get all peers that are currently reachable.
|
|
120
|
+
*
|
|
121
|
+
* @returns Array of peer IDs that are responding to heartbeats
|
|
122
|
+
* @see Requirements 7.5
|
|
123
|
+
*/
|
|
124
|
+
getReachablePeers() {
|
|
125
|
+
const reachable = [];
|
|
126
|
+
for (const [peerId, state] of this.peerStates) {
|
|
127
|
+
if (state.reachable) {
|
|
128
|
+
reachable.push(peerId);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return reachable;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get all peers that are currently unreachable.
|
|
135
|
+
*
|
|
136
|
+
* @returns Array of peer IDs that have exceeded the missed threshold
|
|
137
|
+
* @see Requirements 7.5
|
|
138
|
+
*/
|
|
139
|
+
getUnreachablePeers() {
|
|
140
|
+
const unreachable = [];
|
|
141
|
+
for (const [peerId, state] of this.peerStates) {
|
|
142
|
+
if (!state.reachable) {
|
|
143
|
+
unreachable.push(peerId);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return unreachable;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get the number of consecutive missed heartbeats for a peer.
|
|
150
|
+
*
|
|
151
|
+
* @param peerId - The peer ID to check
|
|
152
|
+
* @returns Number of missed heartbeats, or 0 if peer is unknown
|
|
153
|
+
*/
|
|
154
|
+
getMissedCount(peerId) {
|
|
155
|
+
return this.peerStates.get(peerId)?.missedCount ?? 0;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Add a peer to be monitored.
|
|
159
|
+
*
|
|
160
|
+
* @param peerId - The peer ID to start monitoring
|
|
161
|
+
*/
|
|
162
|
+
addPeer(peerId) {
|
|
163
|
+
if (!this.peerStates.has(peerId)) {
|
|
164
|
+
this.peerStates.set(peerId, {
|
|
165
|
+
missedCount: 0,
|
|
166
|
+
reachable: true, // Assume reachable until proven otherwise
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Remove a peer from monitoring.
|
|
172
|
+
*
|
|
173
|
+
* @param peerId - The peer ID to stop monitoring
|
|
174
|
+
*/
|
|
175
|
+
removePeer(peerId) {
|
|
176
|
+
this.peerStates.delete(peerId);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get all peers being monitored.
|
|
180
|
+
*
|
|
181
|
+
* @returns Array of all peer IDs being monitored
|
|
182
|
+
*/
|
|
183
|
+
getMonitoredPeers() {
|
|
184
|
+
return Array.from(this.peerStates.keys());
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Subscribe to connectivity change events.
|
|
188
|
+
*
|
|
189
|
+
* @param handler - Function to call when connectivity changes
|
|
190
|
+
* @see Requirements 7.2, 7.5, 7.7
|
|
191
|
+
*/
|
|
192
|
+
onConnectivityChange(handler) {
|
|
193
|
+
this.handlers.add(handler);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Remove a connectivity change handler.
|
|
197
|
+
*
|
|
198
|
+
* @param handler - The handler to remove
|
|
199
|
+
*/
|
|
200
|
+
offConnectivityChange(handler) {
|
|
201
|
+
this.handlers.delete(handler);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Record a successful heartbeat response from a peer.
|
|
205
|
+
* Called when a pong is received in response to a ping.
|
|
206
|
+
*
|
|
207
|
+
* @param peerId - The peer that responded
|
|
208
|
+
* @param latencyMs - Round-trip latency in milliseconds
|
|
209
|
+
*/
|
|
210
|
+
recordHeartbeatResponse(peerId, latencyMs) {
|
|
211
|
+
let state = this.peerStates.get(peerId);
|
|
212
|
+
if (!state) {
|
|
213
|
+
state = {
|
|
214
|
+
missedCount: 0,
|
|
215
|
+
reachable: true,
|
|
216
|
+
};
|
|
217
|
+
this.peerStates.set(peerId, state);
|
|
218
|
+
}
|
|
219
|
+
const wasUnreachable = !state.reachable;
|
|
220
|
+
state.missedCount = 0;
|
|
221
|
+
state.reachable = true;
|
|
222
|
+
state.lastLatencyMs = latencyMs;
|
|
223
|
+
state.lastSuccessAt = new Date();
|
|
224
|
+
// Emit peer_connected if peer was previously unreachable
|
|
225
|
+
if (wasUnreachable) {
|
|
226
|
+
this.emitEvent({
|
|
227
|
+
type: 'peer_connected',
|
|
228
|
+
peerId,
|
|
229
|
+
timestamp: new Date(),
|
|
230
|
+
});
|
|
231
|
+
// Check if we're exiting partition mode
|
|
232
|
+
this.checkPartitionExit();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Get the last recorded latency for a peer.
|
|
237
|
+
*
|
|
238
|
+
* @param peerId - The peer ID to check
|
|
239
|
+
* @returns Last recorded latency in milliseconds, or undefined if unknown
|
|
240
|
+
*/
|
|
241
|
+
getLastLatency(peerId) {
|
|
242
|
+
return this.peerStates.get(peerId)?.lastLatencyMs;
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Get the current configuration.
|
|
246
|
+
*
|
|
247
|
+
* @returns The heartbeat configuration
|
|
248
|
+
*/
|
|
249
|
+
getConfig() {
|
|
250
|
+
return { ...this.config };
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Send heartbeats to all monitored peers.
|
|
254
|
+
* @private
|
|
255
|
+
*/
|
|
256
|
+
async sendHeartbeats() {
|
|
257
|
+
const peers = this.getMonitoredPeers();
|
|
258
|
+
if (peers.length === 0) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
const heartbeatPromises = peers.map((peerId) => this.sendHeartbeatToPeer(peerId));
|
|
262
|
+
await Promise.all(heartbeatPromises);
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Send a heartbeat to a specific peer and handle the response.
|
|
266
|
+
* @private
|
|
267
|
+
*/
|
|
268
|
+
async sendHeartbeatToPeer(peerId) {
|
|
269
|
+
try {
|
|
270
|
+
const latencyMs = await this.transport.sendPing(peerId);
|
|
271
|
+
this.recordHeartbeatResponse(peerId, latencyMs);
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
// Heartbeat failed - record missed
|
|
275
|
+
this.recordMissedHeartbeat(peerId);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Record a missed heartbeat for a peer.
|
|
280
|
+
* @private
|
|
281
|
+
*/
|
|
282
|
+
recordMissedHeartbeat(peerId) {
|
|
283
|
+
let state = this.peerStates.get(peerId);
|
|
284
|
+
if (!state) {
|
|
285
|
+
state = {
|
|
286
|
+
missedCount: 0,
|
|
287
|
+
reachable: true,
|
|
288
|
+
};
|
|
289
|
+
this.peerStates.set(peerId, state);
|
|
290
|
+
}
|
|
291
|
+
state.missedCount++;
|
|
292
|
+
// Check if peer has exceeded missed threshold
|
|
293
|
+
if (state.reachable && state.missedCount >= this.config.missedThreshold) {
|
|
294
|
+
state.reachable = false;
|
|
295
|
+
this.emitEvent({
|
|
296
|
+
type: 'peer_disconnected',
|
|
297
|
+
peerId,
|
|
298
|
+
timestamp: new Date(),
|
|
299
|
+
});
|
|
300
|
+
// Check if all peers are now unreachable (partition)
|
|
301
|
+
this.checkPartitionEntry();
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Check if we should enter partition mode (all peers unreachable).
|
|
306
|
+
* @private
|
|
307
|
+
*/
|
|
308
|
+
checkPartitionEntry() {
|
|
309
|
+
if (this.inPartition) {
|
|
310
|
+
return; // Already in partition
|
|
311
|
+
}
|
|
312
|
+
const monitoredPeers = this.getMonitoredPeers();
|
|
313
|
+
if (monitoredPeers.length === 0) {
|
|
314
|
+
return; // No peers to monitor
|
|
315
|
+
}
|
|
316
|
+
const reachablePeers = this.getReachablePeers();
|
|
317
|
+
if (reachablePeers.length === 0) {
|
|
318
|
+
// All peers are unreachable - enter partition mode
|
|
319
|
+
this.inPartition = true;
|
|
320
|
+
this.emitEvent({
|
|
321
|
+
type: 'all_disconnected',
|
|
322
|
+
timestamp: new Date(),
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Check if we should exit partition mode (at least one peer reachable).
|
|
328
|
+
* @private
|
|
329
|
+
*/
|
|
330
|
+
checkPartitionExit() {
|
|
331
|
+
if (!this.inPartition) {
|
|
332
|
+
return; // Not in partition
|
|
333
|
+
}
|
|
334
|
+
const reachablePeers = this.getReachablePeers();
|
|
335
|
+
if (reachablePeers.length > 0) {
|
|
336
|
+
// At least one peer is reachable - exit partition mode
|
|
337
|
+
this.inPartition = false;
|
|
338
|
+
this.emitEvent({
|
|
339
|
+
type: 'some_reconnected',
|
|
340
|
+
timestamp: new Date(),
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Emit a connectivity event to all handlers.
|
|
346
|
+
* @private
|
|
347
|
+
*/
|
|
348
|
+
emitEvent(event) {
|
|
349
|
+
for (const handler of this.handlers) {
|
|
350
|
+
try {
|
|
351
|
+
handler(event);
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
// Ignore handler errors to prevent one handler from affecting others
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Check if currently in partition mode.
|
|
360
|
+
*
|
|
361
|
+
* @returns True if all peers are unreachable
|
|
362
|
+
*/
|
|
363
|
+
isInPartition() {
|
|
364
|
+
return this.inPartition;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Clear all peer states (for testing).
|
|
368
|
+
*/
|
|
369
|
+
clearPeers() {
|
|
370
|
+
this.peerStates.clear();
|
|
371
|
+
this.inPartition = false;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
exports.HeartbeatMonitor = HeartbeatMonitor;
|
|
375
|
+
//# sourceMappingURL=heartbeatMonitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeatMonitor.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/availability/heartbeatMonitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Availability module exports
|
|
3
|
+
*
|
|
4
|
+
* This module provides implementations for block availability tracking,
|
|
5
|
+
* discovery, and network partition handling.
|
|
6
|
+
*/
|
|
7
|
+
export * from './availabilityMetrics';
|
|
8
|
+
export * from './availabilityService';
|
|
9
|
+
export * from './blockRegistry';
|
|
10
|
+
export * from './configValidation';
|
|
11
|
+
export * from './discoveryProtocol';
|
|
12
|
+
export * from './gossipService';
|
|
13
|
+
export * from './heartbeatMonitor';
|
|
14
|
+
export * from './reconciliationService';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/availability/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @fileoverview Availability module exports
|
|
4
|
+
*
|
|
5
|
+
* This module provides implementations for block availability tracking,
|
|
6
|
+
* discovery, and network partition handling.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
const tslib_1 = require("tslib");
|
|
10
|
+
tslib_1.__exportStar(require("./availabilityMetrics"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./availabilityService"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./blockRegistry"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./configValidation"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./discoveryProtocol"), exports);
|
|
15
|
+
tslib_1.__exportStar(require("./gossipService"), exports);
|
|
16
|
+
tslib_1.__exportStar(require("./heartbeatMonitor"), exports);
|
|
17
|
+
tslib_1.__exportStar(require("./reconciliationService"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/availability/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,gEAAsC;AACtC,gEAAsC;AACtC,0DAAgC;AAChC,6DAAmC;AACnC,8DAAoC;AACpC,0DAAgC;AAChC,6DAAmC;AACnC,kEAAwC"}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Reconciliation Service Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements state synchronization after network reconnection.
|
|
5
|
+
* Handles manifest exchange, pending sync queue processing,
|
|
6
|
+
* orphan resolution, and conflict resolution using last-write-wins.
|
|
7
|
+
*
|
|
8
|
+
* @see Requirements 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8
|
|
9
|
+
*/
|
|
10
|
+
import { BlockManifest, IReconciliationService, PendingSyncItem, ReconciliationConfig, ReconciliationEventHandler, ReconciliationResult, SyncVectorEntry } from '@brightchain/brightchain-lib';
|
|
11
|
+
/**
|
|
12
|
+
* Interface for peer manifest operations.
|
|
13
|
+
* Abstracts network communication for reconciliation.
|
|
14
|
+
*/
|
|
15
|
+
export interface IManifestProvider {
|
|
16
|
+
/**
|
|
17
|
+
* Get the local node ID.
|
|
18
|
+
*/
|
|
19
|
+
getLocalNodeId(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Get the local manifest.
|
|
22
|
+
*/
|
|
23
|
+
getLocalManifest(): BlockManifest;
|
|
24
|
+
/**
|
|
25
|
+
* Get manifest from a peer.
|
|
26
|
+
*
|
|
27
|
+
* @param peerId - The peer to get manifest from
|
|
28
|
+
* @param sinceTimestamp - Optional timestamp to get changes since
|
|
29
|
+
* @param timeoutMs - Timeout in milliseconds
|
|
30
|
+
*/
|
|
31
|
+
getPeerManifest(peerId: string, sinceTimestamp?: Date, timeoutMs?: number): Promise<BlockManifest>;
|
|
32
|
+
/**
|
|
33
|
+
* Update location metadata for a block.
|
|
34
|
+
*
|
|
35
|
+
* @param blockId - The block ID to update
|
|
36
|
+
* @param nodeId - The node ID that has the block
|
|
37
|
+
* @param timestamp - When the block was seen
|
|
38
|
+
*/
|
|
39
|
+
updateBlockLocation(blockId: string, nodeId: string, timestamp: Date): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Get the current availability state of a block.
|
|
42
|
+
*
|
|
43
|
+
* @param blockId - The block ID to check
|
|
44
|
+
* @returns 'local' | 'remote' | 'cached' | 'orphaned' | 'unknown'
|
|
45
|
+
*/
|
|
46
|
+
getBlockAvailabilityState(blockId: string): Promise<'local' | 'remote' | 'cached' | 'orphaned' | 'unknown'>;
|
|
47
|
+
/**
|
|
48
|
+
* Update block availability state.
|
|
49
|
+
*
|
|
50
|
+
* @param blockId - The block ID to update
|
|
51
|
+
* @param state - The new state
|
|
52
|
+
*/
|
|
53
|
+
updateBlockAvailabilityState(blockId: string, state: 'local' | 'remote' | 'cached' | 'orphaned' | 'unknown'): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Get all orphaned block IDs.
|
|
56
|
+
*/
|
|
57
|
+
getOrphanedBlockIds(): Promise<string[]>;
|
|
58
|
+
/**
|
|
59
|
+
* Send a pending sync item to a peer.
|
|
60
|
+
*
|
|
61
|
+
* @param peerId - The peer to send to
|
|
62
|
+
* @param item - The sync item to send
|
|
63
|
+
*/
|
|
64
|
+
sendSyncItem(peerId: string, item: PendingSyncItem): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Get connected peer IDs.
|
|
67
|
+
*/
|
|
68
|
+
getConnectedPeerIds(): string[];
|
|
69
|
+
/**
|
|
70
|
+
* Get the timestamp of a block's last modification.
|
|
71
|
+
*
|
|
72
|
+
* @param blockId - The block ID to check
|
|
73
|
+
* @param nodeId - The node to check
|
|
74
|
+
*/
|
|
75
|
+
getBlockTimestamp(blockId: string, nodeId: string): Promise<Date | null>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Reconciliation Service Implementation
|
|
79
|
+
*
|
|
80
|
+
* Handles state synchronization after network reconnection.
|
|
81
|
+
* Implements manifest exchange, pending sync queue processing,
|
|
82
|
+
* orphan resolution, and conflict resolution.
|
|
83
|
+
*
|
|
84
|
+
* @see Requirements 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7, 9.8
|
|
85
|
+
*/
|
|
86
|
+
export declare class ReconciliationService implements IReconciliationService {
|
|
87
|
+
private readonly manifestProvider;
|
|
88
|
+
private readonly config;
|
|
89
|
+
/**
|
|
90
|
+
* Sync vectors for each peer.
|
|
91
|
+
*/
|
|
92
|
+
private readonly syncVectors;
|
|
93
|
+
/**
|
|
94
|
+
* Pending sync queue.
|
|
95
|
+
*/
|
|
96
|
+
private pendingSyncQueue;
|
|
97
|
+
/**
|
|
98
|
+
* Event handlers.
|
|
99
|
+
*/
|
|
100
|
+
private readonly eventHandlers;
|
|
101
|
+
/**
|
|
102
|
+
* Base path for persistence.
|
|
103
|
+
*/
|
|
104
|
+
private readonly basePath;
|
|
105
|
+
/**
|
|
106
|
+
* Create a new ReconciliationService.
|
|
107
|
+
*
|
|
108
|
+
* @param manifestProvider - Provider for manifest operations
|
|
109
|
+
* @param basePath - Base path for persistence files
|
|
110
|
+
* @param config - Reconciliation configuration
|
|
111
|
+
*/
|
|
112
|
+
constructor(manifestProvider: IManifestProvider, basePath: string, config?: ReconciliationConfig);
|
|
113
|
+
/**
|
|
114
|
+
* Start reconciliation with reconnected peers.
|
|
115
|
+
*
|
|
116
|
+
* @param peerIds - Array of peer IDs to reconcile with
|
|
117
|
+
* @returns Promise resolving to reconciliation result
|
|
118
|
+
* @see Requirements 9.1, 9.2, 9.3, 9.4, 9.5, 9.6, 9.7
|
|
119
|
+
*/
|
|
120
|
+
reconcile(peerIds: string[]): Promise<ReconciliationResult>;
|
|
121
|
+
/**
|
|
122
|
+
* Reconcile with a single peer.
|
|
123
|
+
*/
|
|
124
|
+
private reconcileWithPeer;
|
|
125
|
+
/**
|
|
126
|
+
* Resolve orphaned blocks by checking if any reconnected peers have them.
|
|
127
|
+
*/
|
|
128
|
+
private resolveOrphanedBlocks;
|
|
129
|
+
/**
|
|
130
|
+
* Get the sync vector entry for a specific peer.
|
|
131
|
+
*
|
|
132
|
+
* @param peerId - The peer ID to get sync vector for
|
|
133
|
+
* @returns The sync vector entry or null if not found
|
|
134
|
+
*/
|
|
135
|
+
getSyncVector(peerId: string): SyncVectorEntry | null;
|
|
136
|
+
/**
|
|
137
|
+
* Get all sync vector entries.
|
|
138
|
+
*
|
|
139
|
+
* @returns Map of peer IDs to sync vector entries
|
|
140
|
+
*/
|
|
141
|
+
getAllSyncVectors(): Map<string, SyncVectorEntry>;
|
|
142
|
+
/**
|
|
143
|
+
* Update the sync vector for a peer after successful synchronization.
|
|
144
|
+
*
|
|
145
|
+
* @param peerId - The peer ID to update
|
|
146
|
+
* @param timestamp - The timestamp of the sync
|
|
147
|
+
* @param manifestChecksum - The checksum of the peer's manifest
|
|
148
|
+
*/
|
|
149
|
+
updateSyncVector(peerId: string, timestamp: Date, manifestChecksum: string): void;
|
|
150
|
+
/**
|
|
151
|
+
* Initialize sync vector for a new peer.
|
|
152
|
+
*
|
|
153
|
+
* @param peerId - The peer ID to initialize
|
|
154
|
+
*/
|
|
155
|
+
initializeSyncVector(peerId: string): void;
|
|
156
|
+
/**
|
|
157
|
+
* Get the pending sync queue.
|
|
158
|
+
*
|
|
159
|
+
* @returns Array of pending sync items
|
|
160
|
+
*/
|
|
161
|
+
getPendingSyncQueue(): PendingSyncItem[];
|
|
162
|
+
/**
|
|
163
|
+
* Add an item to the pending sync queue.
|
|
164
|
+
*
|
|
165
|
+
* @param item - The item to add to the queue
|
|
166
|
+
*/
|
|
167
|
+
addToPendingSyncQueue(item: PendingSyncItem): void;
|
|
168
|
+
/**
|
|
169
|
+
* Process the pending sync queue.
|
|
170
|
+
*
|
|
171
|
+
* @returns Promise that resolves when queue is processed
|
|
172
|
+
*/
|
|
173
|
+
processPendingSyncQueue(): Promise<void>;
|
|
174
|
+
/**
|
|
175
|
+
* Clear the pending sync queue.
|
|
176
|
+
*/
|
|
177
|
+
clearPendingSyncQueue(): void;
|
|
178
|
+
/**
|
|
179
|
+
* Persist sync vectors to disk.
|
|
180
|
+
*
|
|
181
|
+
* @returns Promise that resolves when persistence is complete
|
|
182
|
+
*/
|
|
183
|
+
persistSyncVectors(): Promise<void>;
|
|
184
|
+
/**
|
|
185
|
+
* Load sync vectors from disk.
|
|
186
|
+
*
|
|
187
|
+
* @returns Promise that resolves when loading is complete
|
|
188
|
+
*/
|
|
189
|
+
loadSyncVectors(): Promise<void>;
|
|
190
|
+
/**
|
|
191
|
+
* Persist pending sync queue to disk.
|
|
192
|
+
*
|
|
193
|
+
* @returns Promise that resolves when persistence is complete
|
|
194
|
+
*/
|
|
195
|
+
persistPendingSyncQueue(): Promise<void>;
|
|
196
|
+
/**
|
|
197
|
+
* Load pending sync queue from disk.
|
|
198
|
+
*
|
|
199
|
+
* @returns Promise that resolves when loading is complete
|
|
200
|
+
*/
|
|
201
|
+
loadPendingSyncQueue(): Promise<void>;
|
|
202
|
+
/**
|
|
203
|
+
* Subscribe to reconciliation events.
|
|
204
|
+
*
|
|
205
|
+
* @param handler - Function to call when events occur
|
|
206
|
+
*/
|
|
207
|
+
onEvent(handler: ReconciliationEventHandler): void;
|
|
208
|
+
/**
|
|
209
|
+
* Remove a reconciliation event handler.
|
|
210
|
+
*
|
|
211
|
+
* @param handler - The handler to remove
|
|
212
|
+
*/
|
|
213
|
+
offEvent(handler: ReconciliationEventHandler): void;
|
|
214
|
+
/**
|
|
215
|
+
* Get the current configuration.
|
|
216
|
+
*
|
|
217
|
+
* @returns The reconciliation configuration
|
|
218
|
+
*/
|
|
219
|
+
getConfig(): ReconciliationConfig;
|
|
220
|
+
/**
|
|
221
|
+
* Emit an event to all handlers.
|
|
222
|
+
*/
|
|
223
|
+
private emitEvent;
|
|
224
|
+
/**
|
|
225
|
+
* Ensure the directory for a file path exists.
|
|
226
|
+
*/
|
|
227
|
+
private ensureDirectoryExists;
|
|
228
|
+
/**
|
|
229
|
+
* Split an array into chunks.
|
|
230
|
+
*/
|
|
231
|
+
private chunkArray;
|
|
232
|
+
/**
|
|
233
|
+
* Clear all state (for testing).
|
|
234
|
+
*/
|
|
235
|
+
clear(): void;
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=reconciliationService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconciliationService.d.ts","sourceRoot":"","sources":["../../../../../brightchain-api-lib/src/lib/availability/reconciliationService.ts"],"names":[],"mappings":"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"}
|