@brightchain/brightchain-lib 0.30.1 → 0.31.0
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/README.md +34 -5
- package/package.json +4 -4
- package/src/browser.d.ts +7 -0
- package/src/browser.d.ts.map +1 -1
- package/src/browser.js +21 -1
- package/src/browser.js.map +1 -1
- package/src/lib/asset/assetAccount.d.ts +66 -0
- package/src/lib/asset/assetAccount.d.ts.map +1 -0
- package/src/lib/asset/assetAccount.js +192 -0
- package/src/lib/asset/assetAccount.js.map +1 -0
- package/src/lib/asset/formatAssetAmount.d.ts +30 -0
- package/src/lib/asset/formatAssetAmount.d.ts.map +1 -0
- package/src/lib/asset/formatAssetAmount.js +54 -0
- package/src/lib/asset/formatAssetAmount.js.map +1 -0
- package/src/lib/asset/index.d.ts +11 -0
- package/src/lib/asset/index.d.ts.map +1 -0
- package/src/lib/asset/index.js +14 -0
- package/src/lib/asset/index.js.map +1 -0
- package/src/lib/asset/jouleConstants.d.ts +21 -0
- package/src/lib/asset/jouleConstants.d.ts.map +1 -0
- package/src/lib/asset/jouleConstants.js +24 -0
- package/src/lib/asset/jouleConstants.js.map +1 -0
- package/src/lib/asset/microunits.d.ts +19 -0
- package/src/lib/asset/microunits.d.ts.map +1 -0
- package/src/lib/asset/microunits.js +36 -0
- package/src/lib/asset/microunits.js.map +1 -0
- package/src/lib/constants.d.ts +3 -1
- package/src/lib/constants.d.ts.map +1 -1
- package/src/lib/constants.js +23 -1
- package/src/lib/constants.js.map +1 -1
- package/src/lib/db/driverBackedHeadRegistry.d.ts +42 -0
- package/src/lib/db/driverBackedHeadRegistry.d.ts.map +1 -0
- package/src/lib/db/driverBackedHeadRegistry.js +146 -0
- package/src/lib/db/driverBackedHeadRegistry.js.map +1 -0
- package/src/lib/db/headRegistryGossipTransport.d.ts +74 -0
- package/src/lib/db/headRegistryGossipTransport.d.ts.map +1 -0
- package/src/lib/db/headRegistryGossipTransport.js +153 -0
- package/src/lib/db/headRegistryGossipTransport.js.map +1 -0
- package/src/lib/db/inMemoryHeadRegistry.d.ts +9 -0
- package/src/lib/db/inMemoryHeadRegistry.d.ts.map +1 -1
- package/src/lib/db/inMemoryHeadRegistry.js +48 -0
- package/src/lib/db/inMemoryHeadRegistry.js.map +1 -1
- package/src/lib/db/inMemoryHeadRegistryDriver.d.ts +13 -0
- package/src/lib/db/inMemoryHeadRegistryDriver.d.ts.map +1 -0
- package/src/lib/db/inMemoryHeadRegistryDriver.js +24 -0
- package/src/lib/db/inMemoryHeadRegistryDriver.js.map +1 -0
- package/src/lib/db/index.d.ts +3 -0
- package/src/lib/db/index.d.ts.map +1 -1
- package/src/lib/db/index.js +3 -0
- package/src/lib/db/index.js.map +1 -1
- package/src/lib/energyAccount.d.ts +15 -62
- package/src/lib/energyAccount.d.ts.map +1 -1
- package/src/lib/energyAccount.js +20 -118
- package/src/lib/energyAccount.js.map +1 -1
- package/src/lib/enumerations/brightChainStrings.d.ts +123 -0
- package/src/lib/enumerations/brightChainStrings.d.ts.map +1 -1
- package/src/lib/enumerations/brightChainStrings.js +130 -0
- package/src/lib/enumerations/brightChainStrings.js.map +1 -1
- package/src/lib/enumerations/difficultyTier.d.ts +20 -0
- package/src/lib/enumerations/difficultyTier.d.ts.map +1 -0
- package/src/lib/enumerations/difficultyTier.js +25 -0
- package/src/lib/enumerations/difficultyTier.js.map +1 -0
- package/src/lib/enumerations/index.d.ts +2 -1
- package/src/lib/enumerations/index.d.ts.map +1 -1
- package/src/lib/enumerations/index.js +3 -1
- package/src/lib/enumerations/index.js.map +1 -1
- package/src/lib/errors/asset/assetUnknownError.d.ts +12 -0
- package/src/lib/errors/asset/assetUnknownError.d.ts.map +1 -0
- package/src/lib/errors/asset/assetUnknownError.js +21 -0
- package/src/lib/errors/asset/assetUnknownError.js.map +1 -0
- package/src/lib/errors/asset/index.d.ts +13 -0
- package/src/lib/errors/asset/index.d.ts.map +1 -0
- package/src/lib/errors/asset/index.js +16 -0
- package/src/lib/errors/asset/index.js.map +1 -0
- package/src/lib/errors/asset/insufficientAvailableBalanceError.d.ts +13 -0
- package/src/lib/errors/asset/insufficientAvailableBalanceError.d.ts.map +1 -0
- package/src/lib/errors/asset/insufficientAvailableBalanceError.js +25 -0
- package/src/lib/errors/asset/insufficientAvailableBalanceError.js.map +1 -0
- package/src/lib/errors/asset/invalidAmountError.d.ts +11 -0
- package/src/lib/errors/asset/invalidAmountError.d.ts.map +1 -0
- package/src/lib/errors/asset/invalidAmountError.js +20 -0
- package/src/lib/errors/asset/invalidAmountError.js.map +1 -0
- package/src/lib/errors/asset/ledgerAlreadyAttachedError.d.ts +11 -0
- package/src/lib/errors/asset/ledgerAlreadyAttachedError.d.ts.map +1 -0
- package/src/lib/errors/asset/ledgerAlreadyAttachedError.js +19 -0
- package/src/lib/errors/asset/ledgerAlreadyAttachedError.js.map +1 -0
- package/src/lib/errors/asset/mixedAssetError.d.ts +12 -0
- package/src/lib/errors/asset/mixedAssetError.d.ts.map +1 -0
- package/src/lib/errors/asset/mixedAssetError.js +22 -0
- package/src/lib/errors/asset/mixedAssetError.js.map +1 -0
- package/src/lib/errors/asset/reservationExpiredError.d.ts +13 -0
- package/src/lib/errors/asset/reservationExpiredError.d.ts.map +1 -0
- package/src/lib/errors/asset/reservationExpiredError.js +24 -0
- package/src/lib/errors/asset/reservationExpiredError.js.map +1 -0
- package/src/lib/errors/asset/reservationNotFoundError.d.ts +11 -0
- package/src/lib/errors/asset/reservationNotFoundError.d.ts.map +1 -0
- package/src/lib/errors/asset/reservationNotFoundError.js +20 -0
- package/src/lib/errors/asset/reservationNotFoundError.js.map +1 -0
- package/src/lib/errors/encryptionErrors.d.ts.map +1 -1
- package/src/lib/errors/encryptionErrors.js.map +1 -1
- package/src/lib/errors/friendsServiceError.d.ts.map +1 -1
- package/src/lib/errors/friendsServiceError.js.map +1 -1
- package/src/lib/errors/index.d.ts +18 -0
- package/src/lib/errors/index.d.ts.map +1 -1
- package/src/lib/errors/index.js +21 -0
- package/src/lib/errors/index.js.map +1 -1
- package/src/lib/i18n/strings/englishUs.d.ts.map +1 -1
- package/src/lib/i18n/strings/englishUs.js +131 -1
- package/src/lib/i18n/strings/englishUs.js.map +1 -1
- package/src/lib/i18n/strings/french.d.ts.map +1 -1
- package/src/lib/i18n/strings/french.js +133 -3
- package/src/lib/i18n/strings/french.js.map +1 -1
- package/src/lib/i18n/strings/german.d.ts.map +1 -1
- package/src/lib/i18n/strings/german.js +131 -1
- package/src/lib/i18n/strings/german.js.map +1 -1
- package/src/lib/i18n/strings/japanese.d.ts.map +1 -1
- package/src/lib/i18n/strings/japanese.js +131 -1
- package/src/lib/i18n/strings/japanese.js.map +1 -1
- package/src/lib/i18n/strings/mandarin.d.ts.map +1 -1
- package/src/lib/i18n/strings/mandarin.js +131 -1
- package/src/lib/i18n/strings/mandarin.js.map +1 -1
- package/src/lib/i18n/strings/spanish.d.ts.map +1 -1
- package/src/lib/i18n/strings/spanish.js +131 -1
- package/src/lib/i18n/strings/spanish.js.map +1 -1
- package/src/lib/i18n/strings/ukrainian.d.ts.map +1 -1
- package/src/lib/i18n/strings/ukrainian.js +131 -1
- package/src/lib/i18n/strings/ukrainian.js.map +1 -1
- package/src/lib/index.d.ts +36 -1
- package/src/lib/index.d.ts.map +1 -1
- package/src/lib/index.js +48 -1
- package/src/lib/index.js.map +1 -1
- package/src/lib/interfaces/appSubsystemPlugin.d.ts +6 -1
- package/src/lib/interfaces/appSubsystemPlugin.d.ts.map +1 -1
- package/src/lib/interfaces/assetAccount.d.ts +91 -0
- package/src/lib/interfaces/assetAccount.d.ts.map +1 -0
- package/src/lib/interfaces/assetAccount.js +3 -0
- package/src/lib/interfaces/assetAccount.js.map +1 -0
- package/src/lib/interfaces/brightpass/vaultEntry.d.ts +38 -0
- package/src/lib/interfaces/brightpass/vaultEntry.d.ts.map +1 -1
- package/src/lib/interfaces/brightpass/vaultMetadata.d.ts +11 -0
- package/src/lib/interfaces/brightpass/vaultMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/communication/chatStorageProvider.d.ts +1 -1
- package/src/lib/interfaces/communication/chatStorageProvider.d.ts.map +1 -1
- package/src/lib/interfaces/communication/index.d.ts +2 -0
- package/src/lib/interfaces/communication/index.d.ts.map +1 -1
- package/src/lib/interfaces/communication/index.js +2 -0
- package/src/lib/interfaces/communication/index.js.map +1 -1
- package/src/lib/interfaces/communication/server.d.ts +8 -0
- package/src/lib/interfaces/communication/server.d.ts.map +1 -1
- package/src/lib/interfaces/communication/serverIconConfig.d.ts +32 -0
- package/src/lib/interfaces/communication/serverIconConfig.d.ts.map +1 -0
- package/src/lib/interfaces/communication/serverIconConfig.js +35 -0
- package/src/lib/interfaces/communication/serverIconConfig.js.map +1 -0
- package/src/lib/interfaces/communication/serverIconRequest.d.ts +12 -0
- package/src/lib/interfaces/communication/serverIconRequest.d.ts.map +1 -0
- package/src/lib/interfaces/communication/serverIconRequest.js +3 -0
- package/src/lib/interfaces/communication/serverIconRequest.js.map +1 -0
- package/src/lib/interfaces/constants.d.ts +14 -0
- package/src/lib/interfaces/constants.d.ts.map +1 -1
- package/src/lib/interfaces/energyAccount.d.ts +13 -34
- package/src/lib/interfaces/energyAccount.d.ts.map +1 -1
- package/src/lib/interfaces/energyTransaction.d.ts +25 -6
- package/src/lib/interfaces/energyTransaction.d.ts.map +1 -1
- package/src/lib/interfaces/identity/brightChainIdentity.d.ts +29 -0
- package/src/lib/interfaces/identity/brightChainIdentity.d.ts.map +1 -0
- package/src/lib/interfaces/identity/brightChainIdentity.js +3 -0
- package/src/lib/interfaces/identity/brightChainIdentity.js.map +1 -0
- package/src/lib/interfaces/identity/index.d.ts +1 -0
- package/src/lib/interfaces/identity/index.d.ts.map +1 -1
- package/src/lib/interfaces/index.d.ts +5 -0
- package/src/lib/interfaces/index.d.ts.map +1 -1
- package/src/lib/interfaces/index.js +8 -0
- package/src/lib/interfaces/index.js.map +1 -1
- package/src/lib/interfaces/messaging/attachmentMetadata.d.ts +12 -0
- package/src/lib/interfaces/messaging/attachmentMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/emailMetadata.d.ts +55 -0
- package/src/lib/interfaces/messaging/emailMetadata.d.ts.map +1 -1
- package/src/lib/interfaces/messaging/emailMetadata.js.map +1 -1
- package/src/lib/interfaces/pouw/challengeToken.d.ts +20 -0
- package/src/lib/interfaces/pouw/challengeToken.d.ts.map +1 -0
- package/src/lib/interfaces/pouw/challengeToken.js +3 -0
- package/src/lib/interfaces/pouw/challengeToken.js.map +1 -0
- package/src/lib/interfaces/pouw/index.d.ts +8 -0
- package/src/lib/interfaces/pouw/index.d.ts.map +1 -0
- package/src/lib/interfaces/pouw/index.js +12 -0
- package/src/lib/interfaces/pouw/index.js.map +1 -0
- package/src/lib/interfaces/pouw/pouwConfig.d.ts +91 -0
- package/src/lib/interfaces/pouw/pouwConfig.d.ts.map +1 -0
- package/src/lib/interfaces/pouw/pouwConfig.js +24 -0
- package/src/lib/interfaces/pouw/pouwConfig.js.map +1 -0
- package/src/lib/interfaces/pouw/pouwMetrics.d.ts +23 -0
- package/src/lib/interfaces/pouw/pouwMetrics.d.ts.map +1 -0
- package/src/lib/interfaces/pouw/pouwMetrics.js +3 -0
- package/src/lib/interfaces/pouw/pouwMetrics.js.map +1 -0
- package/src/lib/interfaces/pouw/workResult.d.ts +19 -0
- package/src/lib/interfaces/pouw/workResult.d.ts.map +1 -0
- package/src/lib/interfaces/pouw/workResult.js +3 -0
- package/src/lib/interfaces/pouw/workResult.js.map +1 -0
- package/src/lib/interfaces/pouw/workUnit.d.ts +48 -0
- package/src/lib/interfaces/pouw/workUnit.d.ts.map +1 -0
- package/src/lib/interfaces/pouw/workUnit.js +14 -0
- package/src/lib/interfaces/pouw/workUnit.js.map +1 -0
- package/src/lib/interfaces/responses/adminDashboardResponse.d.ts +7 -0
- package/src/lib/interfaces/responses/adminDashboardResponse.d.ts.map +1 -1
- package/src/lib/interfaces/responses/communicationResponses.d.ts +2 -0
- package/src/lib/interfaces/responses/communicationResponses.d.ts.map +1 -1
- package/src/lib/interfaces/responses/identityResponseData.d.ts +10 -0
- package/src/lib/interfaces/responses/identityResponseData.d.ts.map +1 -0
- package/src/lib/interfaces/responses/identityResponseData.js +3 -0
- package/src/lib/interfaces/responses/identityResponseData.js.map +1 -0
- package/src/lib/interfaces/responses/index.d.ts +1 -0
- package/src/lib/interfaces/responses/index.d.ts.map +1 -1
- package/src/lib/interfaces/staging/commitRequest.d.ts +28 -0
- package/src/lib/interfaces/staging/commitRequest.d.ts.map +1 -0
- package/src/lib/interfaces/staging/commitRequest.js +3 -0
- package/src/lib/interfaces/staging/commitRequest.js.map +1 -0
- package/src/lib/interfaces/staging/commitResponse.d.ts +17 -0
- package/src/lib/interfaces/staging/commitResponse.d.ts.map +1 -0
- package/src/lib/interfaces/staging/commitResponse.js +3 -0
- package/src/lib/interfaces/staging/commitResponse.js.map +1 -0
- package/src/lib/interfaces/staging/index.d.ts +7 -0
- package/src/lib/interfaces/staging/index.d.ts.map +1 -0
- package/src/lib/interfaces/staging/index.js +6 -0
- package/src/lib/interfaces/staging/index.js.map +1 -0
- package/src/lib/interfaces/staging/processingParams.d.ts +16 -0
- package/src/lib/interfaces/staging/processingParams.d.ts.map +1 -0
- package/src/lib/interfaces/staging/processingParams.js +3 -0
- package/src/lib/interfaces/staging/processingParams.js.map +1 -0
- package/src/lib/interfaces/staging/stagedFileRecord.d.ts +23 -0
- package/src/lib/interfaces/staging/stagedFileRecord.d.ts.map +1 -0
- package/src/lib/interfaces/staging/stagedFileRecord.js +3 -0
- package/src/lib/interfaces/staging/stagedFileRecord.js.map +1 -0
- package/src/lib/interfaces/staging/stagingConfig.d.ts +19 -0
- package/src/lib/interfaces/staging/stagingConfig.d.ts.map +1 -0
- package/src/lib/interfaces/staging/stagingConfig.js +11 -0
- package/src/lib/interfaces/staging/stagingConfig.js.map +1 -0
- package/src/lib/interfaces/staging/tempUploadResponse.d.ts +19 -0
- package/src/lib/interfaces/staging/tempUploadResponse.d.ts.map +1 -0
- package/src/lib/interfaces/staging/tempUploadResponse.js +3 -0
- package/src/lib/interfaces/staging/tempUploadResponse.js.map +1 -0
- package/src/lib/interfaces/storage/blockStore.d.ts +22 -4
- package/src/lib/interfaces/storage/blockStore.d.ts.map +1 -1
- package/src/lib/interfaces/storage/headRegistry.d.ts +38 -0
- package/src/lib/interfaces/storage/headRegistry.d.ts.map +1 -1
- package/src/lib/interfaces/storage/headRegistryDriver.d.ts +47 -0
- package/src/lib/interfaces/storage/headRegistryDriver.d.ts.map +1 -0
- package/src/lib/interfaces/storage/headRegistryDriver.js +15 -0
- package/src/lib/interfaces/storage/headRegistryDriver.js.map +1 -0
- package/src/lib/interfaces/storage/index.d.ts +1 -0
- package/src/lib/interfaces/storage/index.d.ts.map +1 -1
- package/src/lib/interfaces/storage/index.js.map +1 -1
- package/src/lib/joule/formatJoule.d.ts +44 -0
- package/src/lib/joule/formatJoule.d.ts.map +1 -0
- package/src/lib/joule/formatJoule.js +121 -0
- package/src/lib/joule/formatJoule.js.map +1 -0
- package/src/lib/joule/index.d.ts +10 -0
- package/src/lib/joule/index.d.ts.map +1 -0
- package/src/lib/joule/index.js +13 -0
- package/src/lib/joule/index.js.map +1 -0
- package/src/lib/joule/jouleConstants.d.ts +13 -0
- package/src/lib/joule/jouleConstants.d.ts.map +1 -0
- package/src/lib/joule/jouleConstants.js +18 -0
- package/src/lib/joule/jouleConstants.js.map +1 -0
- package/src/lib/joule/rateTable.d.ts +55 -0
- package/src/lib/joule/rateTable.d.ts.map +1 -0
- package/src/lib/joule/rateTable.js +58 -0
- package/src/lib/joule/rateTable.js.map +1 -0
- package/src/lib/joule/resourceClass.d.ts +18 -0
- package/src/lib/joule/resourceClass.d.ts.map +1 -0
- package/src/lib/joule/resourceClass.js +28 -0
- package/src/lib/joule/resourceClass.js.map +1 -0
- package/src/lib/operationCost.d.ts +12 -7
- package/src/lib/operationCost.d.ts.map +1 -1
- package/src/lib/operationCost.js +11 -4
- package/src/lib/operationCost.js.map +1 -1
- package/src/lib/pouw/computeWorkUnit.d.ts +41 -0
- package/src/lib/pouw/computeWorkUnit.d.ts.map +1 -0
- package/src/lib/pouw/computeWorkUnit.js +92 -0
- package/src/lib/pouw/computeWorkUnit.js.map +1 -0
- package/src/lib/pouw/index.d.ts +8 -0
- package/src/lib/pouw/index.d.ts.map +1 -0
- package/src/lib/pouw/index.js +12 -0
- package/src/lib/pouw/index.js.map +1 -0
- package/src/lib/serializers/index.d.ts +2 -0
- package/src/lib/serializers/index.d.ts.map +1 -0
- package/src/lib/serializers/index.js +10 -0
- package/src/lib/serializers/index.js.map +1 -0
- package/src/lib/serializers/workUnitSerializer.d.ts +39 -0
- package/src/lib/serializers/workUnitSerializer.d.ts.map +1 -0
- package/src/lib/serializers/workUnitSerializer.js +150 -0
- package/src/lib/serializers/workUnitSerializer.js.map +1 -0
- package/src/lib/services/communication/__tests__/mockChatStorageProvider.d.ts +1 -1
- package/src/lib/services/communication/__tests__/mockChatStorageProvider.d.ts.map +1 -1
- package/src/lib/services/communication/__tests__/mockChatStorageProvider.js +5 -3
- package/src/lib/services/communication/__tests__/mockChatStorageProvider.js.map +1 -1
- package/src/lib/services/communication/__tests__/mockStorageProvider.d.ts +6 -0
- package/src/lib/services/communication/__tests__/mockStorageProvider.d.ts.map +1 -0
- package/src/lib/services/communication/__tests__/mockStorageProvider.js +41 -0
- package/src/lib/services/communication/__tests__/mockStorageProvider.js.map +1 -0
- package/src/lib/services/communication/channelService.d.ts +1 -1
- package/src/lib/services/communication/channelService.d.ts.map +1 -1
- package/src/lib/services/communication/channelService.js +2 -2
- package/src/lib/services/communication/channelService.js.map +1 -1
- package/src/lib/services/communication/conversationService.d.ts +1 -1
- package/src/lib/services/communication/conversationService.d.ts.map +1 -1
- package/src/lib/services/communication/conversationService.js +2 -2
- package/src/lib/services/communication/conversationService.js.map +1 -1
- package/src/lib/services/communication/groupService.d.ts +1 -1
- package/src/lib/services/communication/groupService.d.ts.map +1 -1
- package/src/lib/services/communication/groupService.js +2 -2
- package/src/lib/services/communication/groupService.js.map +1 -1
- package/src/lib/services/communication/rehydrationHelpers.d.ts.map +1 -1
- package/src/lib/services/communication/rehydrationHelpers.js +1 -2
- package/src/lib/services/communication/rehydrationHelpers.js.map +1 -1
- package/src/lib/services/communication/serverService.d.ts +13 -115
- package/src/lib/services/communication/serverService.d.ts.map +1 -1
- package/src/lib/services/communication/serverService.js +91 -235
- package/src/lib/services/communication/serverService.js.map +1 -1
- package/src/lib/services/copyOnWrite.service.d.ts.map +1 -1
- package/src/lib/services/copyOnWrite.service.js +1 -2
- package/src/lib/services/copyOnWrite.service.js.map +1 -1
- package/src/lib/services/messaging/emailMessageService.d.ts +89 -0
- package/src/lib/services/messaging/emailMessageService.d.ts.map +1 -1
- package/src/lib/services/messaging/emailMessageService.js +207 -28
- package/src/lib/services/messaging/emailMessageService.js.map +1 -1
- package/src/lib/services/messaging/emailParser.d.ts.map +1 -1
- package/src/lib/services/messaging/emailParser.js +1 -0
- package/src/lib/services/messaging/emailParser.js.map +1 -1
- package/src/lib/stores/assetAccountStore.d.ts +102 -0
- package/src/lib/stores/assetAccountStore.d.ts.map +1 -0
- package/src/lib/stores/assetAccountStore.js +276 -0
- package/src/lib/stores/assetAccountStore.js.map +1 -0
- package/src/lib/stores/blockStoreAdapter.d.ts +2 -0
- package/src/lib/stores/blockStoreAdapter.d.ts.map +1 -1
- package/src/lib/stores/blockStoreAdapter.js +3 -0
- package/src/lib/stores/blockStoreAdapter.js.map +1 -1
- package/src/lib/stores/energyAccountStore.d.ts +22 -36
- package/src/lib/stores/energyAccountStore.d.ts.map +1 -1
- package/src/lib/stores/energyAccountStore.js +33 -63
- package/src/lib/stores/energyAccountStore.js.map +1 -1
- package/src/lib/stores/memoryBlockStore.d.ts +16 -1
- package/src/lib/stores/memoryBlockStore.d.ts.map +1 -1
- package/src/lib/stores/memoryBlockStore.js +42 -6
- package/src/lib/stores/memoryBlockStore.js.map +1 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* HeadRegistryGossipTransport — Gossip-aware decorator for IHeadRegistry.
|
|
4
|
+
*
|
|
5
|
+
* Wraps any IHeadRegistry and wires it to an IGossipService so that:
|
|
6
|
+
* 1. Outbound: after every successful setHead(), the update is announced
|
|
7
|
+
* to peers via gossip.
|
|
8
|
+
* 2. Inbound: incoming 'head_update' gossip announcements are merged into
|
|
9
|
+
* the wrapped registry using last-writer-wins semantics.
|
|
10
|
+
* 3. Anti-entropy: an optional periodic timer re-announces all known head
|
|
11
|
+
* pointers so that nodes that missed earlier announcements can converge.
|
|
12
|
+
*
|
|
13
|
+
* Usage:
|
|
14
|
+
* const transport = new HeadRegistryGossipTransport(inner, gossipService);
|
|
15
|
+
* transport.start(30_000); // optional anti-entropy every 30 s
|
|
16
|
+
* // … use transport as an IHeadRegistry …
|
|
17
|
+
* await transport.stop();
|
|
18
|
+
*
|
|
19
|
+
* @see Requirements 2.1, 7.1, 7.2
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.HeadRegistryGossipTransport = void 0;
|
|
23
|
+
class HeadRegistryGossipTransport {
|
|
24
|
+
inner;
|
|
25
|
+
gossip;
|
|
26
|
+
announcementHandler;
|
|
27
|
+
antiEntropyTimer;
|
|
28
|
+
constructor(inner, gossip) {
|
|
29
|
+
this.inner = inner;
|
|
30
|
+
this.gossip = gossip;
|
|
31
|
+
// Build the inbound handler once so we can unregister the exact same
|
|
32
|
+
// reference in stop().
|
|
33
|
+
this.announcementHandler = (ann) => {
|
|
34
|
+
if (ann.type !== 'head_update' || !ann.headUpdate)
|
|
35
|
+
return;
|
|
36
|
+
const { dbName, collectionName } = ann.headUpdate;
|
|
37
|
+
const blockId = String(ann.blockId);
|
|
38
|
+
const timestamp = ann.timestamp; // already a Date
|
|
39
|
+
// Best-effort inbound merge — do not let gossip errors surface.
|
|
40
|
+
this.inner
|
|
41
|
+
.mergeHeadUpdate(dbName, collectionName, blockId, timestamp)
|
|
42
|
+
.catch(() => {
|
|
43
|
+
// Intentionally swallowed: gossip failures must not crash the service.
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
this.gossip.onAnnouncement(this.announcementHandler);
|
|
47
|
+
}
|
|
48
|
+
// ── Lifecycle ────────────────────────────────────────────────────────────
|
|
49
|
+
/**
|
|
50
|
+
* Start the optional anti-entropy timer.
|
|
51
|
+
* When `antiEntropyIntervalMs` is provided and > 0, the transport will
|
|
52
|
+
* periodically re-announce all known head pointers so that peers that
|
|
53
|
+
* joined late (or missed earlier announcements) can converge.
|
|
54
|
+
*
|
|
55
|
+
* @param antiEntropyIntervalMs - Interval in milliseconds between anti-entropy
|
|
56
|
+
* passes. Pass 0 or omit to disable.
|
|
57
|
+
*/
|
|
58
|
+
start(antiEntropyIntervalMs) {
|
|
59
|
+
if (antiEntropyIntervalMs && antiEntropyIntervalMs > 0) {
|
|
60
|
+
this.antiEntropyTimer = setInterval(() => {
|
|
61
|
+
void this.pushSnapshot();
|
|
62
|
+
}, antiEntropyIntervalMs);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Stop the anti-entropy timer and unregister the inbound handler.
|
|
67
|
+
* Should be called when the transport is no longer needed.
|
|
68
|
+
*/
|
|
69
|
+
async stop() {
|
|
70
|
+
if (this.antiEntropyTimer !== undefined) {
|
|
71
|
+
clearInterval(this.antiEntropyTimer);
|
|
72
|
+
this.antiEntropyTimer = undefined;
|
|
73
|
+
}
|
|
74
|
+
this.gossip.offAnnouncement(this.announcementHandler);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Re-announce every known head pointer via gossip.
|
|
78
|
+
* Used by the anti-entropy timer and can also be called manually to
|
|
79
|
+
* trigger an immediate convergence pass.
|
|
80
|
+
*/
|
|
81
|
+
async pushSnapshot() {
|
|
82
|
+
const snapshot = this.inner.exportSnapshot();
|
|
83
|
+
for (const [key, record] of snapshot) {
|
|
84
|
+
const colon = key.indexOf(':');
|
|
85
|
+
const dbName = colon === -1 ? key : key.slice(0, colon);
|
|
86
|
+
const collectionName = colon === -1 ? '' : key.slice(colon + 1);
|
|
87
|
+
try {
|
|
88
|
+
await this.gossip.announceHeadUpdate(dbName, collectionName, record.blockId);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Best-effort: individual failures must not abort the whole pass.
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// ── IHeadRegistry – mutations with outbound gossip ───────────────────────
|
|
96
|
+
/**
|
|
97
|
+
* Set the head pointer locally and announce the update to peers.
|
|
98
|
+
* Gossip announcement is best-effort: a failure does not roll back the
|
|
99
|
+
* local write.
|
|
100
|
+
*/
|
|
101
|
+
async setHead(dbName, collectionName, blockId, writeProof) {
|
|
102
|
+
await this.inner.setHead(dbName, collectionName, blockId, writeProof);
|
|
103
|
+
// Best-effort outbound announcement.
|
|
104
|
+
try {
|
|
105
|
+
await this.gossip.announceHeadUpdate(dbName, collectionName, blockId);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
// Intentionally swallowed: gossip failures must not break local writes.
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// ── IHeadRegistry – pure delegations ─────────────────────────────────────
|
|
112
|
+
getHead(dbName, collectionName) {
|
|
113
|
+
return this.inner.getHead(dbName, collectionName);
|
|
114
|
+
}
|
|
115
|
+
async removeHead(dbName, collectionName, writeProof) {
|
|
116
|
+
return this.inner.removeHead(dbName, collectionName, writeProof);
|
|
117
|
+
}
|
|
118
|
+
async clear() {
|
|
119
|
+
return this.inner.clear();
|
|
120
|
+
}
|
|
121
|
+
async load() {
|
|
122
|
+
return this.inner.load();
|
|
123
|
+
}
|
|
124
|
+
getAllHeads() {
|
|
125
|
+
return this.inner.getAllHeads();
|
|
126
|
+
}
|
|
127
|
+
getHeadTimestamp(dbName, collectionName) {
|
|
128
|
+
return this.inner.getHeadTimestamp(dbName, collectionName);
|
|
129
|
+
}
|
|
130
|
+
async mergeHeadUpdate(dbName, collectionName, blockId, timestamp, writeProof) {
|
|
131
|
+
return this.inner.mergeHeadUpdate(dbName, collectionName, blockId, timestamp, writeProof);
|
|
132
|
+
}
|
|
133
|
+
async deferHeadUpdate(dbName, collectionName, blockId, timestamp) {
|
|
134
|
+
return this.inner.deferHeadUpdate(dbName, collectionName, blockId, timestamp);
|
|
135
|
+
}
|
|
136
|
+
async applyDeferredUpdates(blockId) {
|
|
137
|
+
return this.inner.applyDeferredUpdates(blockId);
|
|
138
|
+
}
|
|
139
|
+
getDeferredUpdates() {
|
|
140
|
+
return this.inner.getDeferredUpdates();
|
|
141
|
+
}
|
|
142
|
+
exportSnapshot() {
|
|
143
|
+
return this.inner.exportSnapshot();
|
|
144
|
+
}
|
|
145
|
+
async mergeSnapshot(snapshot) {
|
|
146
|
+
return this.inner.mergeSnapshot(snapshot);
|
|
147
|
+
}
|
|
148
|
+
onHeadChange(dbName, collectionName, callback) {
|
|
149
|
+
return this.inner.onHeadChange(dbName, collectionName, callback);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
exports.HeadRegistryGossipTransport = HeadRegistryGossipTransport;
|
|
153
|
+
//# sourceMappingURL=headRegistryGossipTransport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headRegistryGossipTransport.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/headRegistryGossipTransport.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,10 +8,12 @@
|
|
|
8
8
|
* Use `createIsolated()` for test scenarios that need an independent registry.
|
|
9
9
|
*/
|
|
10
10
|
import type { DeferredHeadUpdate, IHeadRegistry } from '../interfaces/storage/headRegistry';
|
|
11
|
+
import type { HeadRecord } from '../interfaces/storage/headRegistryDriver';
|
|
11
12
|
export declare class InMemoryHeadRegistry implements IHeadRegistry {
|
|
12
13
|
private readonly heads;
|
|
13
14
|
private readonly timestamps;
|
|
14
15
|
private readonly deferred;
|
|
16
|
+
private readonly changeListeners;
|
|
15
17
|
private makeKey;
|
|
16
18
|
getHead(dbName: string, collectionName: string): string | undefined;
|
|
17
19
|
setHead(dbName: string, collectionName: string, blockId: string): Promise<void>;
|
|
@@ -21,9 +23,16 @@ export declare class InMemoryHeadRegistry implements IHeadRegistry {
|
|
|
21
23
|
getAllHeads(): Map<string, string>;
|
|
22
24
|
getHeadTimestamp(dbName: string, collectionName: string): Date | undefined;
|
|
23
25
|
mergeHeadUpdate(dbName: string, collectionName: string, blockId: string, timestamp: Date): Promise<boolean>;
|
|
26
|
+
private notifyHeadChange;
|
|
27
|
+
onHeadChange(dbName: string, collectionName: string, callback: (blockId: string) => void): () => void;
|
|
24
28
|
deferHeadUpdate(dbName: string, collectionName: string, blockId: string, timestamp: Date): Promise<void>;
|
|
25
29
|
applyDeferredUpdates(blockId: string): Promise<number>;
|
|
26
30
|
getDeferredUpdates(): DeferredHeadUpdate[];
|
|
31
|
+
exportSnapshot(): ReadonlyMap<string, HeadRecord>;
|
|
32
|
+
mergeSnapshot(snapshot: Iterable<readonly [string, HeadRecord]>): Promise<{
|
|
33
|
+
merged: number;
|
|
34
|
+
skipped: number;
|
|
35
|
+
}>;
|
|
27
36
|
/**
|
|
28
37
|
* Factory method that creates an independent InMemoryHeadRegistry instance.
|
|
29
38
|
* Useful for tests that need isolated state.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inMemoryHeadRegistry.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/inMemoryHeadRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACd,MAAM,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"inMemoryHeadRegistry.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/inMemoryHeadRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAE3E,qBAAa,oBAAqB,YAAW,aAAa;IACxD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;IACnD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2B;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IACrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG5B;IAEJ,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI7D,OAAO,CACX,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAMV,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAMtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIlC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAIpE,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,IAAI,GACd,OAAO,CAAC,OAAO,CAAC;IAgBnB,OAAO,CAAC,gBAAgB;IASxB,YAAY,CACV,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAClC,MAAM,IAAI;IAYP,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,IAAI,GACd,OAAO,CAAC,IAAI,CAAC;IAIV,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB5D,kBAAkB,IAAI,kBAAkB,EAAE;IAI1C,cAAc,IAAI,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC;IAY3C,aAAa,CACjB,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,GAChD,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAsB/C;;;OAGG;IACH,MAAM,CAAC,cAAc,IAAI,oBAAoB;CAG9C"}
|
|
@@ -5,6 +5,7 @@ class InMemoryHeadRegistry {
|
|
|
5
5
|
heads = new Map();
|
|
6
6
|
timestamps = new Map();
|
|
7
7
|
deferred = [];
|
|
8
|
+
changeListeners = new Map();
|
|
8
9
|
makeKey(dbName, collectionName) {
|
|
9
10
|
return `${dbName}:${collectionName}`;
|
|
10
11
|
}
|
|
@@ -42,11 +43,30 @@ class InMemoryHeadRegistry {
|
|
|
42
43
|
if (!localTimestamp || timestamp.getTime() > localTimestamp.getTime()) {
|
|
43
44
|
this.heads.set(key, blockId);
|
|
44
45
|
this.timestamps.set(key, timestamp);
|
|
46
|
+
this.notifyHeadChange(key, blockId);
|
|
45
47
|
return true;
|
|
46
48
|
}
|
|
47
49
|
// Local is same age or newer — reject
|
|
48
50
|
return false;
|
|
49
51
|
}
|
|
52
|
+
notifyHeadChange(key, blockId) {
|
|
53
|
+
const listeners = this.changeListeners.get(key);
|
|
54
|
+
if (listeners) {
|
|
55
|
+
for (const cb of listeners) {
|
|
56
|
+
cb(blockId);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
onHeadChange(dbName, collectionName, callback) {
|
|
61
|
+
const key = this.makeKey(dbName, collectionName);
|
|
62
|
+
if (!this.changeListeners.has(key)) {
|
|
63
|
+
this.changeListeners.set(key, new Set());
|
|
64
|
+
}
|
|
65
|
+
this.changeListeners.get(key).add(callback);
|
|
66
|
+
return () => {
|
|
67
|
+
this.changeListeners.get(key)?.delete(callback);
|
|
68
|
+
};
|
|
69
|
+
}
|
|
50
70
|
async deferHeadUpdate(dbName, collectionName, blockId, timestamp) {
|
|
51
71
|
this.deferred.push({ dbName, collectionName, blockId, timestamp });
|
|
52
72
|
}
|
|
@@ -69,6 +89,34 @@ class InMemoryHeadRegistry {
|
|
|
69
89
|
getDeferredUpdates() {
|
|
70
90
|
return [...this.deferred];
|
|
71
91
|
}
|
|
92
|
+
exportSnapshot() {
|
|
93
|
+
const result = new Map();
|
|
94
|
+
for (const [key, blockId] of this.heads) {
|
|
95
|
+
const ts = this.timestamps.get(key);
|
|
96
|
+
result.set(key, {
|
|
97
|
+
blockId,
|
|
98
|
+
timestamp: ts ? ts.toISOString() : new Date(0).toISOString(),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
async mergeSnapshot(snapshot) {
|
|
104
|
+
let merged = 0;
|
|
105
|
+
let skipped = 0;
|
|
106
|
+
for (const [key, record] of snapshot) {
|
|
107
|
+
const colon = key.indexOf(':');
|
|
108
|
+
const dbName = colon === -1 ? key : key.slice(0, colon);
|
|
109
|
+
const collectionName = colon === -1 ? '' : key.slice(colon + 1);
|
|
110
|
+
const applied = await this.mergeHeadUpdate(dbName, collectionName, record.blockId, new Date(record.timestamp));
|
|
111
|
+
if (applied) {
|
|
112
|
+
merged++;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
skipped++;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
return { merged, skipped };
|
|
119
|
+
}
|
|
72
120
|
/**
|
|
73
121
|
* Factory method that creates an independent InMemoryHeadRegistry instance.
|
|
74
122
|
* Useful for tests that need isolated state.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inMemoryHeadRegistry.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/inMemoryHeadRegistry.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"inMemoryHeadRegistry.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/inMemoryHeadRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { HeadRecord, IHeadRegistryDriver } from '../interfaces/storage/headRegistryDriver';
|
|
2
|
+
/**
|
|
3
|
+
* InMemoryHeadRegistryDriver — Map-backed driver, no I/O.
|
|
4
|
+
* Used for tests and as a fallback when no persistent store is available.
|
|
5
|
+
*/
|
|
6
|
+
export declare class InMemoryHeadRegistryDriver implements IHeadRegistryDriver {
|
|
7
|
+
private readonly store;
|
|
8
|
+
readRecord(key: string): Promise<HeadRecord | null>;
|
|
9
|
+
writeRecord(key: string, record: HeadRecord): Promise<void>;
|
|
10
|
+
deleteRecord(key: string): Promise<void>;
|
|
11
|
+
listKeys(): Promise<string[]>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=inMemoryHeadRegistryDriver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inMemoryHeadRegistryDriver.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/inMemoryHeadRegistryDriver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACpB,MAAM,0CAA0C,CAAC;AAElD;;;GAGG;AACH,qBAAa,0BAA2B,YAAW,mBAAmB;IACpE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IAEjD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAInD,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3D,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxC,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAGpC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InMemoryHeadRegistryDriver = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* InMemoryHeadRegistryDriver — Map-backed driver, no I/O.
|
|
6
|
+
* Used for tests and as a fallback when no persistent store is available.
|
|
7
|
+
*/
|
|
8
|
+
class InMemoryHeadRegistryDriver {
|
|
9
|
+
store = new Map();
|
|
10
|
+
async readRecord(key) {
|
|
11
|
+
return this.store.get(key) ?? null;
|
|
12
|
+
}
|
|
13
|
+
async writeRecord(key, record) {
|
|
14
|
+
this.store.set(key, record);
|
|
15
|
+
}
|
|
16
|
+
async deleteRecord(key) {
|
|
17
|
+
this.store.delete(key);
|
|
18
|
+
}
|
|
19
|
+
async listKeys() {
|
|
20
|
+
return Array.from(this.store.keys());
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.InMemoryHeadRegistryDriver = InMemoryHeadRegistryDriver;
|
|
24
|
+
//# sourceMappingURL=inMemoryHeadRegistryDriver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inMemoryHeadRegistryDriver.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/inMemoryHeadRegistryDriver.ts"],"names":[],"mappings":";;;AAKA;;;GAGG;AACH,MAAa,0BAA0B;IACpB,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEvD,KAAK,CAAC,UAAU,CAAC,GAAW;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,GAAW,EAAE,MAAkB;QAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAW;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;CACF;AAlBD,gEAkBC"}
|
package/src/lib/db/index.d.ts
CHANGED
|
@@ -2,10 +2,13 @@ export * from './aggregation';
|
|
|
2
2
|
export * from './brightdb';
|
|
3
3
|
export * from './collection';
|
|
4
4
|
export * from './cursor';
|
|
5
|
+
export * from './driverBackedHeadRegistry';
|
|
5
6
|
export * from './errors';
|
|
7
|
+
export * from './headRegistryGossipTransport';
|
|
6
8
|
export * from './indexing';
|
|
7
9
|
export * from './inMemoryDatabase';
|
|
8
10
|
export * from './inMemoryHeadRegistry';
|
|
11
|
+
export * from './inMemoryHeadRegistryDriver';
|
|
9
12
|
export * from './queryEngine';
|
|
10
13
|
export * from './schemaValidation';
|
|
11
14
|
export * from './transaction';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/index.ts"],"names":[],"mappings":"AACA,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,4BAA4B,CAAC;AAC3C,cAAc,UAAU,CAAC;AACzB,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,eAAe,CAAC;AAC9B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC"}
|
package/src/lib/db/index.js
CHANGED
|
@@ -6,10 +6,13 @@ tslib_1.__exportStar(require("./aggregation"), exports);
|
|
|
6
6
|
tslib_1.__exportStar(require("./brightdb"), exports);
|
|
7
7
|
tslib_1.__exportStar(require("./collection"), exports);
|
|
8
8
|
tslib_1.__exportStar(require("./cursor"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./driverBackedHeadRegistry"), exports);
|
|
9
10
|
tslib_1.__exportStar(require("./errors"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./headRegistryGossipTransport"), exports);
|
|
10
12
|
tslib_1.__exportStar(require("./indexing"), exports);
|
|
11
13
|
tslib_1.__exportStar(require("./inMemoryDatabase"), exports);
|
|
12
14
|
tslib_1.__exportStar(require("./inMemoryHeadRegistry"), exports);
|
|
15
|
+
tslib_1.__exportStar(require("./inMemoryHeadRegistryDriver"), exports);
|
|
13
16
|
tslib_1.__exportStar(require("./queryEngine"), exports);
|
|
14
17
|
tslib_1.__exportStar(require("./schemaValidation"), exports);
|
|
15
18
|
tslib_1.__exportStar(require("./transaction"), exports);
|
package/src/lib/db/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/index.ts"],"names":[],"mappings":";;;AAAA,qFAAqF;AACrF,wDAA8B;AAC9B,qDAA2B;AAC3B,uDAA6B;AAC7B,mDAAyB;AACzB,mDAAyB;AACzB,qDAA2B;AAC3B,6DAAmC;AACnC,iEAAuC;AACvC,wDAA8B;AAC9B,6DAAmC;AACnC,wDAA8B;AAC9B,kDAAwB;AACxB,yDAA+B;AAC/B,0DAAgC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/index.ts"],"names":[],"mappings":";;;AAAA,qFAAqF;AACrF,wDAA8B;AAC9B,qDAA2B;AAC3B,uDAA6B;AAC7B,mDAAyB;AACzB,qEAA2C;AAC3C,mDAAyB;AACzB,wEAA8C;AAC9C,qDAA2B;AAC3B,6DAAmC;AACnC,iEAAuC;AACvC,uEAA6C;AAC7C,wDAA8B;AAC9B,6DAAmC;AACnC,wDAA8B;AAC9B,kDAAwB;AACxB,yDAA+B;AAC/B,0DAAgC"}
|
|
@@ -1,71 +1,24 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AssetAccount } from './asset/assetAccount';
|
|
2
2
|
import { Checksum } from './types/checksum';
|
|
3
3
|
/**
|
|
4
|
-
* Energy account for tracking member's
|
|
5
|
-
*
|
|
4
|
+
* Energy account for tracking a member's microjoule balance.
|
|
5
|
+
*
|
|
6
|
+
* Extends {@link AssetAccount} with `assetId = 'joule'` and provides the
|
|
7
|
+
* legacy `netEnergy` alias and `createWithTrialCredits` factory retained for
|
|
8
|
+
* backward compatibility.
|
|
6
9
|
*/
|
|
7
|
-
export declare class EnergyAccount
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
balance: number;
|
|
11
|
-
earned: number;
|
|
12
|
-
spent: number;
|
|
13
|
-
reserved: number;
|
|
14
|
-
reputation: number;
|
|
15
|
-
lastUpdated: Date;
|
|
16
|
-
constructor(memberId: Checksum, createdAt?: Date, balance?: number, earned?: number, spent?: number, reserved?: number, reputation?: number, // New users start at neutral reputation
|
|
17
|
-
lastUpdated?: Date);
|
|
18
|
-
/**
|
|
19
|
-
* Create new account with trial credits
|
|
20
|
-
*/
|
|
10
|
+
export declare class EnergyAccount extends AssetAccount {
|
|
11
|
+
constructor(memberId: Checksum, createdAt?: Date, balance?: bigint, earned?: bigint, spent?: bigint, reserved?: bigint, reputation?: number, lastUpdated?: Date);
|
|
12
|
+
/** Create a new account pre-loaded with trial credits. */
|
|
21
13
|
static createWithTrialCredits(memberId: Checksum): EnergyAccount;
|
|
22
14
|
/**
|
|
23
|
-
*
|
|
24
|
-
|
|
25
|
-
get availableBalance(): number;
|
|
26
|
-
/**
|
|
27
|
-
* Get net energy (earned - spent)
|
|
28
|
-
*/
|
|
29
|
-
get netEnergy(): number;
|
|
30
|
-
/**
|
|
31
|
-
* Check if account can afford operation
|
|
32
|
-
*/
|
|
33
|
-
canAfford(amount: number): boolean;
|
|
34
|
-
/**
|
|
35
|
-
* Reserve energy for operation
|
|
36
|
-
*/
|
|
37
|
-
reserve(amount: number): void;
|
|
38
|
-
/**
|
|
39
|
-
* Release reserved energy
|
|
40
|
-
*/
|
|
41
|
-
release(amount: number): void;
|
|
42
|
-
/**
|
|
43
|
-
* Charge energy (deduct from balance)
|
|
44
|
-
*/
|
|
45
|
-
charge(amount: number): void;
|
|
46
|
-
/**
|
|
47
|
-
* Credit energy (add to balance)
|
|
48
|
-
*/
|
|
49
|
-
credit(amount: number): void;
|
|
50
|
-
/**
|
|
51
|
-
* Update reputation score
|
|
52
|
-
*/
|
|
53
|
-
updateReputation(newReputation: number): void;
|
|
54
|
-
/**
|
|
55
|
-
* Convert to DTO for serialization
|
|
56
|
-
*/
|
|
57
|
-
toDto(): IEnergyAccountDto;
|
|
58
|
-
/**
|
|
59
|
-
* Create from DTO
|
|
60
|
-
*/
|
|
61
|
-
static fromDto(dto: IEnergyAccountDto): EnergyAccount;
|
|
62
|
-
/**
|
|
63
|
-
* Convert to JSON
|
|
64
|
-
*/
|
|
65
|
-
toJson(): string;
|
|
66
|
-
/**
|
|
67
|
-
* Create from JSON
|
|
15
|
+
* Net energy = earned − spent.
|
|
16
|
+
* @deprecated Use {@link netAsset}.
|
|
68
17
|
*/
|
|
18
|
+
get netEnergy(): bigint;
|
|
19
|
+
/** Override to return a typed {@link EnergyAccount} instance. */
|
|
20
|
+
static fromDto(dto: Record<string, unknown>): EnergyAccount;
|
|
21
|
+
/** Override to return a typed {@link EnergyAccount} instance. */
|
|
69
22
|
static fromJson(json: string): EnergyAccount;
|
|
70
23
|
}
|
|
71
24
|
//# sourceMappingURL=energyAccount.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"energyAccount.d.ts","sourceRoot":"","sources":["../../../../brightchain-lib/src/lib/energyAccount.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"energyAccount.d.ts","sourceRoot":"","sources":["../../../../brightchain-lib/src/lib/energyAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMpD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAM5C;;;;;;GAMG;AACH,qBAAa,aAAc,SAAQ,YAAY;gBAE3C,QAAQ,EAAE,QAAQ,EAClB,SAAS,GAAE,IAAiB,EAC5B,OAAO,GAAE,MAAkC,EAC3C,MAAM,GAAE,MAAW,EACnB,KAAK,GAAE,MAAW,EAClB,QAAQ,GAAE,MAAW,EACrB,UAAU,GAAE,MAAY,EACxB,WAAW,CAAC,EAAE,IAAI;IAepB,0DAA0D;IAC1D,MAAM,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa;IAIhE;;;OAGG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,iEAAiE;WACjD,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,aAAa;IAcpE,iEAAiE;WACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;CAGtD"}
|
package/src/lib/energyAccount.js
CHANGED
|
@@ -1,137 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EnergyAccount = void 0;
|
|
4
|
+
const assetAccount_1 = require("./asset/assetAccount");
|
|
5
|
+
const jouleConstants_1 = require("./asset/jouleConstants");
|
|
4
6
|
const energyConsts_1 = require("./energyConsts");
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const checksum_1 = require("./types/checksum");
|
|
7
|
+
/** Trial credits in microjoules (1 000 Joules × 1 000 000 microjoules/Joule). */
|
|
8
|
+
const TRIAL_CREDITS_MICROJOULES = BigInt(energyConsts_1.ENERGY.TRIAL_CREDITS) * jouleConstants_1.JOULE_MICROUNITS_PER_UNIT;
|
|
8
9
|
/**
|
|
9
|
-
* Energy account for tracking member's
|
|
10
|
-
*
|
|
10
|
+
* Energy account for tracking a member's microjoule balance.
|
|
11
|
+
*
|
|
12
|
+
* Extends {@link AssetAccount} with `assetId = 'joule'` and provides the
|
|
13
|
+
* legacy `netEnergy` alias and `createWithTrialCredits` factory retained for
|
|
14
|
+
* backward compatibility.
|
|
11
15
|
*/
|
|
12
|
-
class EnergyAccount {
|
|
13
|
-
memberId
|
|
14
|
-
|
|
15
|
-
balance;
|
|
16
|
-
earned;
|
|
17
|
-
spent;
|
|
18
|
-
reserved;
|
|
19
|
-
reputation;
|
|
20
|
-
lastUpdated;
|
|
21
|
-
constructor(memberId, createdAt = new Date(), balance = energyConsts_1.ENERGY.TRIAL_CREDITS, earned = 0, spent = 0, reserved = 0, reputation = 0.5, // New users start at neutral reputation
|
|
22
|
-
lastUpdated) {
|
|
23
|
-
this.memberId = memberId;
|
|
24
|
-
this.createdAt = createdAt;
|
|
25
|
-
this.balance = balance;
|
|
26
|
-
this.earned = earned;
|
|
27
|
-
this.spent = spent;
|
|
28
|
-
this.reserved = reserved;
|
|
29
|
-
this.reputation = reputation;
|
|
30
|
-
this.lastUpdated = lastUpdated ?? createdAt;
|
|
16
|
+
class EnergyAccount extends assetAccount_1.AssetAccount {
|
|
17
|
+
constructor(memberId, createdAt = new Date(), balance = TRIAL_CREDITS_MICROJOULES, earned = 0n, spent = 0n, reserved = 0n, reputation = 0.5, lastUpdated) {
|
|
18
|
+
super(memberId, jouleConstants_1.JOULE_ASSET_ID, createdAt, balance, earned, spent, reserved, reputation, lastUpdated);
|
|
31
19
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Create new account with trial credits
|
|
34
|
-
*/
|
|
20
|
+
/** Create a new account pre-loaded with trial credits. */
|
|
35
21
|
static createWithTrialCredits(memberId) {
|
|
36
22
|
return new EnergyAccount(memberId);
|
|
37
23
|
}
|
|
38
24
|
/**
|
|
39
|
-
*
|
|
40
|
-
|
|
41
|
-
get availableBalance() {
|
|
42
|
-
return Math.max(0, this.balance - this.reserved);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Get net energy (earned - spent)
|
|
25
|
+
* Net energy = earned − spent.
|
|
26
|
+
* @deprecated Use {@link netAsset}.
|
|
46
27
|
*/
|
|
47
28
|
get netEnergy() {
|
|
48
|
-
return this.
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Check if account can afford operation
|
|
52
|
-
*/
|
|
53
|
-
canAfford(amount) {
|
|
54
|
-
return this.availableBalance >= amount;
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Reserve energy for operation
|
|
58
|
-
*/
|
|
59
|
-
reserve(amount) {
|
|
60
|
-
if (!this.canAfford(amount)) {
|
|
61
|
-
throw new translatableBrightChainError_1.TranslatableBrightChainError(enumerations_1.BrightChainStrings.EnergyAccount_InsufficientBalanceTemplate, {
|
|
62
|
-
AMOUNT: amount,
|
|
63
|
-
AVAILABLE: this.availableBalance,
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
this.reserved += amount;
|
|
67
|
-
this.lastUpdated = new Date();
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Release reserved energy
|
|
71
|
-
*/
|
|
72
|
-
release(amount) {
|
|
73
|
-
this.reserved = Math.max(0, this.reserved - amount);
|
|
74
|
-
this.lastUpdated = new Date();
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Charge energy (deduct from balance)
|
|
78
|
-
*/
|
|
79
|
-
charge(amount) {
|
|
80
|
-
if (amount > this.balance) {
|
|
81
|
-
throw new translatableBrightChainError_1.TranslatableBrightChainError(enumerations_1.BrightChainStrings.EnergyAccount_InsufficientBalanceTemplate, {
|
|
82
|
-
AMOUNT: amount,
|
|
83
|
-
AVAILABLE: this.balance,
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
this.balance -= amount;
|
|
87
|
-
this.spent += amount;
|
|
88
|
-
this.lastUpdated = new Date();
|
|
29
|
+
return this.netAsset;
|
|
89
30
|
}
|
|
90
|
-
/**
|
|
91
|
-
* Credit energy (add to balance)
|
|
92
|
-
*/
|
|
93
|
-
credit(amount) {
|
|
94
|
-
this.balance += amount;
|
|
95
|
-
this.earned += amount;
|
|
96
|
-
this.lastUpdated = new Date();
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Update reputation score
|
|
100
|
-
*/
|
|
101
|
-
updateReputation(newReputation) {
|
|
102
|
-
this.reputation = Math.max(0, Math.min(1, newReputation));
|
|
103
|
-
this.lastUpdated = new Date();
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Convert to DTO for serialization
|
|
107
|
-
*/
|
|
108
|
-
toDto() {
|
|
109
|
-
return {
|
|
110
|
-
memberId: this.memberId.toHex(),
|
|
111
|
-
balance: this.balance,
|
|
112
|
-
earned: this.earned,
|
|
113
|
-
spent: this.spent,
|
|
114
|
-
reserved: this.reserved,
|
|
115
|
-
reputation: this.reputation,
|
|
116
|
-
createdAt: this.createdAt.toISOString(),
|
|
117
|
-
lastUpdated: this.lastUpdated.toISOString(),
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
/**
|
|
121
|
-
* Create from DTO
|
|
122
|
-
*/
|
|
31
|
+
/** Override to return a typed {@link EnergyAccount} instance. */
|
|
123
32
|
static fromDto(dto) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Convert to JSON
|
|
128
|
-
*/
|
|
129
|
-
toJson() {
|
|
130
|
-
return JSON.stringify(this.toDto());
|
|
33
|
+
const base = assetAccount_1.AssetAccount.fromDto(dto);
|
|
34
|
+
return new EnergyAccount(base.memberId, base.createdAt, base.balance, base.earned, base.spent, base.reserved, base.reputation, base.lastUpdated);
|
|
131
35
|
}
|
|
132
|
-
/**
|
|
133
|
-
* Create from JSON
|
|
134
|
-
*/
|
|
36
|
+
/** Override to return a typed {@link EnergyAccount} instance. */
|
|
135
37
|
static fromJson(json) {
|
|
136
38
|
return EnergyAccount.fromDto(JSON.parse(json));
|
|
137
39
|
}
|