@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,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatAssetAmount = formatAssetAmount;
|
|
4
|
+
const jouleConstants_1 = require("./jouleConstants");
|
|
5
|
+
/**
|
|
6
|
+
* Format an asset microunit amount as a human-readable string.
|
|
7
|
+
*
|
|
8
|
+
* - For `assetId === 'joule'` the default format is `'1.234567 J'`.
|
|
9
|
+
* - For unknown assetIds the function falls back to `'<microunits> <assetId>'`
|
|
10
|
+
* raw and never throws.
|
|
11
|
+
*
|
|
12
|
+
* No business logic SHALL parse formatted strings back into amounts; parsing
|
|
13
|
+
* occurs only on validated DTO inputs.
|
|
14
|
+
*
|
|
15
|
+
* @see asset-account-store-generalization spec, Requirements 8.1–8.4.
|
|
16
|
+
*/
|
|
17
|
+
function formatAssetAmount(amount, assetId, opts) {
|
|
18
|
+
if (assetId !== jouleConstants_1.JOULE_ASSET_ID) {
|
|
19
|
+
return `${amount.toString()} ${assetId}`;
|
|
20
|
+
}
|
|
21
|
+
const precision = opts?.precision !== undefined
|
|
22
|
+
? Math.max(0, opts.precision)
|
|
23
|
+
: jouleConstants_1.JOULE_DECIMALS;
|
|
24
|
+
const negative = amount < 0n;
|
|
25
|
+
const abs = negative ? -amount : amount;
|
|
26
|
+
const integer = abs / jouleConstants_1.JOULE_MICROUNITS_PER_UNIT;
|
|
27
|
+
const fractional = abs % jouleConstants_1.JOULE_MICROUNITS_PER_UNIT;
|
|
28
|
+
// Pad fractional to JOULE_DECIMALS digits, then truncate / pad to precision.
|
|
29
|
+
let fractionalStr = fractional.toString().padStart(jouleConstants_1.JOULE_DECIMALS, '0');
|
|
30
|
+
if (precision < jouleConstants_1.JOULE_DECIMALS) {
|
|
31
|
+
fractionalStr = fractionalStr.slice(0, precision);
|
|
32
|
+
}
|
|
33
|
+
else if (precision > jouleConstants_1.JOULE_DECIMALS) {
|
|
34
|
+
fractionalStr = fractionalStr.padEnd(precision, '0');
|
|
35
|
+
}
|
|
36
|
+
let integerStr;
|
|
37
|
+
if (opts?.locale) {
|
|
38
|
+
try {
|
|
39
|
+
integerStr = new Intl.NumberFormat(opts.locale, {
|
|
40
|
+
useGrouping: true,
|
|
41
|
+
maximumFractionDigits: 0,
|
|
42
|
+
}).format(integer);
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
integerStr = integer.toString();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
integerStr = integer.toString();
|
|
50
|
+
}
|
|
51
|
+
const body = precision === 0 ? integerStr : `${integerStr}.${fractionalStr}`;
|
|
52
|
+
return `${negative ? '-' : ''}${body} ${jouleConstants_1.JOULE_SYMBOL}`;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=formatAssetAmount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatAssetAmount.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/asset/formatAssetAmount.ts"],"names":[],"mappings":";;AAoCA,8CA4CC;AAhFD,qDAK0B;AAmB1B;;;;;;;;;;;GAWG;AACH,SAAgB,iBAAiB,CAC/B,MAAc,EACd,OAAe,EACf,IAAgC;IAEhC,IAAI,OAAO,KAAK,+BAAc,EAAE,CAAC;QAC/B,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,OAAO,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,SAAS,GACb,IAAI,EAAE,SAAS,KAAK,SAAS;QAC3B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;QAC7B,CAAC,CAAC,+BAAc,CAAC;IAErB,MAAM,QAAQ,GAAG,MAAM,GAAG,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAExC,MAAM,OAAO,GAAG,GAAG,GAAG,0CAAyB,CAAC;IAChD,MAAM,UAAU,GAAG,GAAG,GAAG,0CAAyB,CAAC;IAEnD,6EAA6E;IAC7E,IAAI,aAAa,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAAc,EAAE,GAAG,CAAC,CAAC;IACxE,IAAI,SAAS,GAAG,+BAAc,EAAE,CAAC;QAC/B,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACpD,CAAC;SAAM,IAAI,SAAS,GAAG,+BAAc,EAAE,CAAC;QACtC,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,UAAkB,CAAC;IACvB,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,UAAU,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE;gBAC9C,WAAW,EAAE,IAAI;gBACjB,qBAAqB,EAAE,CAAC;aACzB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,IAAI,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,IAAI,aAAa,EAAE,CAAC;IAC7E,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,6BAAY,EAAE,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asset-account primitives.
|
|
3
|
+
*
|
|
4
|
+
* Introduced by the `asset-account-store-generalization` spec as the
|
|
5
|
+
* generalized base for joule and any future metered asset.
|
|
6
|
+
*/
|
|
7
|
+
export * from './assetAccount';
|
|
8
|
+
export * from './formatAssetAmount';
|
|
9
|
+
export * from './jouleConstants';
|
|
10
|
+
export * from './microunits';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/asset/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
/**
|
|
5
|
+
* Asset-account primitives.
|
|
6
|
+
*
|
|
7
|
+
* Introduced by the `asset-account-store-generalization` spec as the
|
|
8
|
+
* generalized base for joule and any future metered asset.
|
|
9
|
+
*/
|
|
10
|
+
tslib_1.__exportStar(require("./assetAccount"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./formatAssetAmount"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./jouleConstants"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./microunits"), exports);
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/asset/index.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,yDAA+B;AAC/B,8DAAoC;AACpC,2DAAiC;AACjC,uDAA6B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Joule resource-credit constants.
|
|
3
|
+
*
|
|
4
|
+
* Joule is BrightChain's first-class metered asset. All ledger and
|
|
5
|
+
* operational-tier arithmetic is performed in microjoules (`bigint`) to
|
|
6
|
+
* eliminate floating-point rounding from charge / credit paths.
|
|
7
|
+
*
|
|
8
|
+
* @see asset-account-store-generalization spec, Requirement 1.2
|
|
9
|
+
*/
|
|
10
|
+
/** Microjoules per joule. 1 J = 1_000_000 µJ. */
|
|
11
|
+
export declare const JOULE_MICROUNITS_PER_UNIT = 1000000n;
|
|
12
|
+
/**
|
|
13
|
+
* Number of fractional decimal digits a joule amount renders with by default.
|
|
14
|
+
* Tied to {@link JOULE_MICROUNITS_PER_UNIT}: 10^6 microunits => 6 decimals.
|
|
15
|
+
*/
|
|
16
|
+
export declare const JOULE_DECIMALS = 6;
|
|
17
|
+
/** Display symbol for the joule asset. */
|
|
18
|
+
export declare const JOULE_SYMBOL = "J";
|
|
19
|
+
/** Canonical assetId string for the joule asset. */
|
|
20
|
+
export declare const JOULE_ASSET_ID = "joule";
|
|
21
|
+
//# sourceMappingURL=jouleConstants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jouleConstants.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/asset/jouleConstants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,iDAAiD;AACjD,eAAO,MAAM,yBAAyB,WAAa,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,0CAA0C;AAC1C,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC,oDAAoD;AACpD,eAAO,MAAM,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Joule resource-credit constants.
|
|
4
|
+
*
|
|
5
|
+
* Joule is BrightChain's first-class metered asset. All ledger and
|
|
6
|
+
* operational-tier arithmetic is performed in microjoules (`bigint`) to
|
|
7
|
+
* eliminate floating-point rounding from charge / credit paths.
|
|
8
|
+
*
|
|
9
|
+
* @see asset-account-store-generalization spec, Requirement 1.2
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.JOULE_ASSET_ID = exports.JOULE_SYMBOL = exports.JOULE_DECIMALS = exports.JOULE_MICROUNITS_PER_UNIT = void 0;
|
|
13
|
+
/** Microjoules per joule. 1 J = 1_000_000 µJ. */
|
|
14
|
+
exports.JOULE_MICROUNITS_PER_UNIT = 1000000n;
|
|
15
|
+
/**
|
|
16
|
+
* Number of fractional decimal digits a joule amount renders with by default.
|
|
17
|
+
* Tied to {@link JOULE_MICROUNITS_PER_UNIT}: 10^6 microunits => 6 decimals.
|
|
18
|
+
*/
|
|
19
|
+
exports.JOULE_DECIMALS = 6;
|
|
20
|
+
/** Display symbol for the joule asset. */
|
|
21
|
+
exports.JOULE_SYMBOL = 'J';
|
|
22
|
+
/** Canonical assetId string for the joule asset. */
|
|
23
|
+
exports.JOULE_ASSET_ID = 'joule';
|
|
24
|
+
//# sourceMappingURL=jouleConstants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jouleConstants.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/asset/jouleConstants.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,iDAAiD;AACpC,QAAA,yBAAyB,GAAG,QAAU,CAAC;AAEpD;;;GAGG;AACU,QAAA,cAAc,GAAG,CAAC,CAAC;AAEhC,0CAA0C;AAC7B,QAAA,YAAY,GAAG,GAAG,CAAC;AAEhC,oDAAoD;AACvC,QAAA,cAAc,GAAG,OAAO,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert a joule value (display-tier `number`) into microjoule microunits
|
|
3
|
+
* (`bigint`). Use only at trust boundaries (rate tables, user input, legacy
|
|
4
|
+
* DTO hydration). Internal arithmetic SHALL stay in `bigint` microunits.
|
|
5
|
+
*
|
|
6
|
+
* @throws {InvalidAmountError} If the input is non-finite or negative.
|
|
7
|
+
*
|
|
8
|
+
* @see asset-account-store-generalization spec, Requirement 1.2.
|
|
9
|
+
*/
|
|
10
|
+
export declare function joulesToMicrojoules(joules: number): bigint;
|
|
11
|
+
/**
|
|
12
|
+
* Convert microjoule microunits (`bigint`) back into a joule `number` for
|
|
13
|
+
* display only. This conversion may lose precision above
|
|
14
|
+
* `Number.MAX_SAFE_INTEGER`; do **not** round-trip arithmetic through it.
|
|
15
|
+
*
|
|
16
|
+
* @see asset-account-store-generalization spec, Requirement 1.2.
|
|
17
|
+
*/
|
|
18
|
+
export declare function microjoulesToJoules(microjoules: bigint): number;
|
|
19
|
+
//# sourceMappingURL=microunits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"microunits.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/asset/microunits.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAY1D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/D"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.joulesToMicrojoules = joulesToMicrojoules;
|
|
4
|
+
exports.microjoulesToJoules = microjoulesToJoules;
|
|
5
|
+
const invalidAmountError_1 = require("../errors/asset/invalidAmountError");
|
|
6
|
+
const jouleConstants_1 = require("./jouleConstants");
|
|
7
|
+
/**
|
|
8
|
+
* Convert a joule value (display-tier `number`) into microjoule microunits
|
|
9
|
+
* (`bigint`). Use only at trust boundaries (rate tables, user input, legacy
|
|
10
|
+
* DTO hydration). Internal arithmetic SHALL stay in `bigint` microunits.
|
|
11
|
+
*
|
|
12
|
+
* @throws {InvalidAmountError} If the input is non-finite or negative.
|
|
13
|
+
*
|
|
14
|
+
* @see asset-account-store-generalization spec, Requirement 1.2.
|
|
15
|
+
*/
|
|
16
|
+
function joulesToMicrojoules(joules) {
|
|
17
|
+
if (typeof joules !== 'number' || !Number.isFinite(joules) || joules < 0) {
|
|
18
|
+
throw new invalidAmountError_1.InvalidAmountError('joulesToMicrojoules expects a finite, non-negative number.', joules);
|
|
19
|
+
}
|
|
20
|
+
// Multiply in number space, round, then promote to bigint.
|
|
21
|
+
// Display-tier inputs are bounded by Number.MAX_SAFE_INTEGER / 1e6
|
|
22
|
+
// (~9e9 J) which is far above any expected request budget.
|
|
23
|
+
const microunits = Math.round(joules * Number(jouleConstants_1.JOULE_MICROUNITS_PER_UNIT));
|
|
24
|
+
return BigInt(microunits);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Convert microjoule microunits (`bigint`) back into a joule `number` for
|
|
28
|
+
* display only. This conversion may lose precision above
|
|
29
|
+
* `Number.MAX_SAFE_INTEGER`; do **not** round-trip arithmetic through it.
|
|
30
|
+
*
|
|
31
|
+
* @see asset-account-store-generalization spec, Requirement 1.2.
|
|
32
|
+
*/
|
|
33
|
+
function microjoulesToJoules(microjoules) {
|
|
34
|
+
return Number(microjoules) / Number(jouleConstants_1.JOULE_MICROUNITS_PER_UNIT);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=microunits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"microunits.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/asset/microunits.ts"],"names":[],"mappings":";;AAYA,kDAYC;AASD,kDAEC;AAnCD,2EAAwE;AACxE,qDAA6D;AAE7D;;;;;;;;GAQG;AACH,SAAgB,mBAAmB,CAAC,MAAc;IAChD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACzE,MAAM,IAAI,uCAAkB,CAC1B,4DAA4D,EAC5D,MAAM,CACP,CAAC;IACJ,CAAC;IACD,2DAA2D;IAC3D,mEAAmE;IACnE,2DAA2D;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,0CAAyB,CAAC,CAAC,CAAC;IAC1E,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,mBAAmB,CAAC,WAAmB;IACrD,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,0CAAyB,CAAC,CAAC;AACjE,CAAC"}
|
package/src/lib/constants.d.ts
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* @module constants
|
|
10
10
|
*/
|
|
11
11
|
import { IConstants as ISuiteCoreConstants } from '@digitaldefiance/suite-core-lib';
|
|
12
|
-
import { IBCFECConsts, IBlockHeaderConsts, ICBLConsts, IConstants, ISealingConsts, ISiteConsts, IThemeColors, ITupleConsts } from './interfaces/constants';
|
|
12
|
+
import { IBCFECConsts, IBlockHeaderConsts, ICBLConsts, IConstants, IFontawesomePickerConstants, ISealingConsts, ISiteConsts, IThemeColors, ITupleConsts } from './interfaces/constants';
|
|
13
13
|
/**
|
|
14
14
|
* Site-specific constants for BrightChain
|
|
15
15
|
*/
|
|
@@ -81,6 +81,8 @@ export declare const VALIDATION: {
|
|
|
81
81
|
readonly VAULT_NAME_MAX_LENGTH: 50;
|
|
82
82
|
readonly PASSWORD_MIN_LENGTH: 12;
|
|
83
83
|
};
|
|
84
|
+
export declare const BRIGHTHUB: IFontawesomePickerConstants;
|
|
85
|
+
export declare const BRIGHTCHAT: IFontawesomePickerConstants;
|
|
84
86
|
/**
|
|
85
87
|
* BrightChain constants object extending base constants from @digitaldefiance/ecies-lib.
|
|
86
88
|
* Only includes BrightChain-specific constants not provided by upstream.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../brightchain-lib/src/lib/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,UAAU,IAAI,mBAAmB,EAElC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,EACb,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,WAOT,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,YAajB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,kBAYjB,CAAC;AAEX;;;GAGG;AACH,oBAAY,mBAAmB;IAC7B;;OAEG;IACH,GAAG,IAAO;IAEV;;OAEG;IACH,QAAQ,IAAO;IAEf;;OAEG;IACH,WAAW,IAAO;IAElB;;OAEG;IACH,UAAU,IAAO;IAEjB;;OAEG;IACH,QAAQ,IAAO;IAEf;;OAEG;IACH,UAAU,IAAO;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,GAAG,EAAE,UA+BjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAG,GAAY,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,YAQX,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,YAkBV,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,cAIZ,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;;;;CAIb,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../brightchain-lib/src/lib/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EACL,UAAU,IAAI,mBAAmB,EAElC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,2BAA2B,EAC3B,cAAc,EACd,WAAW,EACX,YAAY,EACZ,YAAY,EACb,MAAM,wBAAwB,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,WAOT,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,YAajB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,kBAYjB,CAAC;AAEX;;;GAGG;AACH,oBAAY,mBAAmB;IAC7B;;OAEG;IACH,GAAG,IAAO;IAEV;;OAEG;IACH,QAAQ,IAAO;IAEf;;OAEG;IACH,WAAW,IAAO;IAElB;;OAEG;IACH,UAAU,IAAO;IAEjB;;OAEG;IACH,QAAQ,IAAO;IAEf;;OAEG;IACH,UAAU,IAAO;CAClB;AAED;;GAEG;AACH,eAAO,MAAM,GAAG,EAAE,UA+BjB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAG,GAAY,CAAC;AAElD;;GAEG;AACH,eAAO,MAAM,MAAM,EAAE,YAQX,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,KAAK,EAAE,YAkBV,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,OAAO,EAAE,cAIZ,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;;;;CAIb,CAAC;AAEX,eAAO,MAAM,SAAS,EAAE,2BAUvB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,2BAUxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,UAavB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;CAKzB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,mBACI,CAAC;AAEjC,YAAY,EAAE,mBAAmB,EAAE,CAAC;AAEpC,eAAe,SAAS,CAAC"}
|
package/src/lib/constants.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* @module constants
|
|
11
11
|
*/
|
|
12
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
-
exports.CoreConstants = exports.CoreOverrides = exports.CONSTANTS = exports.VALIDATION = exports.SEALING = exports.TUPLE = exports.BC_FEC = exports.OFFS_CACHE_PERCENTAGE = exports.CBL = exports.StructuredBlockType = exports.BLOCK_HEADER = exports.THEME_COLORS = exports.SITE = void 0;
|
|
13
|
+
exports.CoreConstants = exports.CoreOverrides = exports.CONSTANTS = exports.BRIGHTCHAT = exports.BRIGHTHUB = exports.VALIDATION = exports.SEALING = exports.TUPLE = exports.BC_FEC = exports.OFFS_CACHE_PERCENTAGE = exports.CBL = exports.StructuredBlockType = exports.BLOCK_HEADER = exports.THEME_COLORS = exports.SITE = void 0;
|
|
14
14
|
const ecies_lib_1 = require("@digitaldefiance/ecies-lib");
|
|
15
15
|
const suite_core_lib_1 = require("@digitaldefiance/suite-core-lib");
|
|
16
16
|
/**
|
|
@@ -167,6 +167,26 @@ exports.VALIDATION = {
|
|
|
167
167
|
VAULT_NAME_MAX_LENGTH: 50,
|
|
168
168
|
PASSWORD_MIN_LENGTH: 12,
|
|
169
169
|
};
|
|
170
|
+
exports.BRIGHTHUB = {
|
|
171
|
+
/**
|
|
172
|
+
* Max icons to show in the grid at once
|
|
173
|
+
*/
|
|
174
|
+
FONTAWESOME_MAX_DISPLAY: 120,
|
|
175
|
+
/**
|
|
176
|
+
* Grid item size (width and height) in pixels for the icon grid.
|
|
177
|
+
*/
|
|
178
|
+
FONTAWESOME_ICON_GRID_SIZE: 40,
|
|
179
|
+
};
|
|
180
|
+
exports.BRIGHTCHAT = {
|
|
181
|
+
/**
|
|
182
|
+
* Max icons to show in the grid at once
|
|
183
|
+
*/
|
|
184
|
+
FONTAWESOME_MAX_DISPLAY: 120,
|
|
185
|
+
/**
|
|
186
|
+
* Grid item size (width and height) in pixels for the icon grid.
|
|
187
|
+
*/
|
|
188
|
+
FONTAWESOME_ICON_GRID_SIZE: 40,
|
|
189
|
+
};
|
|
170
190
|
/**
|
|
171
191
|
* BrightChain constants object extending base constants from @digitaldefiance/ecies-lib.
|
|
172
192
|
* Only includes BrightChain-specific constants not provided by upstream.
|
|
@@ -182,6 +202,8 @@ exports.CONSTANTS = {
|
|
|
182
202
|
VALIDATION: exports.VALIDATION,
|
|
183
203
|
SITE: exports.SITE,
|
|
184
204
|
THEME_COLORS: exports.THEME_COLORS,
|
|
205
|
+
BRIGHTHUB: exports.BRIGHTHUB,
|
|
206
|
+
BRIGHTCHAT: exports.BRIGHTCHAT,
|
|
185
207
|
};
|
|
186
208
|
exports.CoreOverrides = {
|
|
187
209
|
Site: 'BrightChain',
|
package/src/lib/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../brightchain-lib/src/lib/constants.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;AAEH,0DAAwE;AACxE,oEAGyC;
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../brightchain-lib/src/lib/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DriverBackedHeadRegistry — IHeadRegistry implemented on top of IHeadRegistryDriver.
|
|
3
|
+
*
|
|
4
|
+
* Holds an in-memory cache for reads (getHead is synchronous per the interface).
|
|
5
|
+
* Every mutation writes only the affected key via the driver (O(1) per write).
|
|
6
|
+
* load() hydrates the cache by listing all keys and reading each one.
|
|
7
|
+
*
|
|
8
|
+
* This replaces both PersistentHeadRegistry (single-JSON-file on disk) and
|
|
9
|
+
* CloudHeadRegistry (single-JSON-blob in cloud), which both did a full
|
|
10
|
+
* serialize-all-heads rewrite on every mutation.
|
|
11
|
+
*/
|
|
12
|
+
import type { IWriteProof } from '../interfaces/auth/writeProof';
|
|
13
|
+
import type { DeferredHeadUpdate, IHeadRegistry } from '../interfaces/storage/headRegistry';
|
|
14
|
+
import type { HeadRecord, IHeadRegistryDriver } from '../interfaces/storage/headRegistryDriver';
|
|
15
|
+
export declare class DriverBackedHeadRegistry implements IHeadRegistry {
|
|
16
|
+
private readonly heads;
|
|
17
|
+
private readonly timestamps;
|
|
18
|
+
private readonly deferred;
|
|
19
|
+
private readonly changeListeners;
|
|
20
|
+
protected readonly driver: IHeadRegistryDriver;
|
|
21
|
+
constructor(driver: IHeadRegistryDriver);
|
|
22
|
+
private makeKey;
|
|
23
|
+
getHead(dbName: string, collectionName: string): string | undefined;
|
|
24
|
+
setHead(dbName: string, collectionName: string, blockId: string, _writeProof?: IWriteProof): Promise<void>;
|
|
25
|
+
removeHead(dbName: string, collectionName: string, _writeProof?: IWriteProof): Promise<void>;
|
|
26
|
+
clear(): Promise<void>;
|
|
27
|
+
load(): Promise<void>;
|
|
28
|
+
getAllHeads(): Map<string, string>;
|
|
29
|
+
getHeadTimestamp(dbName: string, collectionName: string): Date | undefined;
|
|
30
|
+
mergeHeadUpdate(dbName: string, collectionName: string, blockId: string, timestamp: Date): Promise<boolean>;
|
|
31
|
+
private notifyHeadChange;
|
|
32
|
+
onHeadChange(dbName: string, collectionName: string, callback: (blockId: string) => void): () => void;
|
|
33
|
+
deferHeadUpdate(dbName: string, collectionName: string, blockId: string, timestamp: Date): Promise<void>;
|
|
34
|
+
applyDeferredUpdates(blockId: string): Promise<number>;
|
|
35
|
+
getDeferredUpdates(): DeferredHeadUpdate[];
|
|
36
|
+
exportSnapshot(): ReadonlyMap<string, HeadRecord>;
|
|
37
|
+
mergeSnapshot(snapshot: Iterable<readonly [string, HeadRecord]>): Promise<{
|
|
38
|
+
merged: number;
|
|
39
|
+
skipped: number;
|
|
40
|
+
}>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=driverBackedHeadRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driverBackedHeadRegistry.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/driverBackedHeadRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EACV,UAAU,EACV,mBAAmB,EACpB,MAAM,0CAA0C,CAAC;AAElD,qBAAa,wBAAyB,YAAW,aAAa;IAC5D,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;IACJ,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;gBAEnC,MAAM,EAAE,mBAAmB;IAIvC,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,EACf,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC;IAWV,UAAU,CACd,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC;IAOV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAStB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAe3B,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;IAqB5D,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;CAqBhD"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DriverBackedHeadRegistry = void 0;
|
|
4
|
+
class DriverBackedHeadRegistry {
|
|
5
|
+
heads = new Map();
|
|
6
|
+
timestamps = new Map();
|
|
7
|
+
deferred = [];
|
|
8
|
+
changeListeners = new Map();
|
|
9
|
+
driver;
|
|
10
|
+
constructor(driver) {
|
|
11
|
+
this.driver = driver;
|
|
12
|
+
}
|
|
13
|
+
makeKey(dbName, collectionName) {
|
|
14
|
+
return `${dbName}:${collectionName}`;
|
|
15
|
+
}
|
|
16
|
+
getHead(dbName, collectionName) {
|
|
17
|
+
return this.heads.get(this.makeKey(dbName, collectionName));
|
|
18
|
+
}
|
|
19
|
+
async setHead(dbName, collectionName, blockId, _writeProof) {
|
|
20
|
+
const key = this.makeKey(dbName, collectionName);
|
|
21
|
+
const ts = new Date();
|
|
22
|
+
this.heads.set(key, blockId);
|
|
23
|
+
this.timestamps.set(key, ts);
|
|
24
|
+
await this.driver.writeRecord(key, {
|
|
25
|
+
blockId,
|
|
26
|
+
timestamp: ts.toISOString(),
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
async removeHead(dbName, collectionName, _writeProof) {
|
|
30
|
+
const key = this.makeKey(dbName, collectionName);
|
|
31
|
+
this.heads.delete(key);
|
|
32
|
+
this.timestamps.delete(key);
|
|
33
|
+
await this.driver.deleteRecord(key);
|
|
34
|
+
}
|
|
35
|
+
async clear() {
|
|
36
|
+
const keys = await this.driver.listKeys();
|
|
37
|
+
// Delete all persisted records in parallel
|
|
38
|
+
await Promise.all(keys.map((k) => this.driver.deleteRecord(k)));
|
|
39
|
+
this.heads.clear();
|
|
40
|
+
this.timestamps.clear();
|
|
41
|
+
this.deferred.length = 0;
|
|
42
|
+
}
|
|
43
|
+
async load() {
|
|
44
|
+
this.heads.clear();
|
|
45
|
+
this.timestamps.clear();
|
|
46
|
+
const keys = await this.driver.listKeys();
|
|
47
|
+
const records = await Promise.all(keys.map((k) => this.driver.readRecord(k).then((r) => ({ k, r }))));
|
|
48
|
+
for (const { k, r } of records) {
|
|
49
|
+
if (r) {
|
|
50
|
+
this.heads.set(k, r.blockId);
|
|
51
|
+
this.timestamps.set(k, new Date(r.timestamp));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
getAllHeads() {
|
|
56
|
+
return new Map(this.heads);
|
|
57
|
+
}
|
|
58
|
+
getHeadTimestamp(dbName, collectionName) {
|
|
59
|
+
return this.timestamps.get(this.makeKey(dbName, collectionName));
|
|
60
|
+
}
|
|
61
|
+
async mergeHeadUpdate(dbName, collectionName, blockId, timestamp) {
|
|
62
|
+
const key = this.makeKey(dbName, collectionName);
|
|
63
|
+
const localTs = this.timestamps.get(key);
|
|
64
|
+
if (!localTs || timestamp.getTime() > localTs.getTime()) {
|
|
65
|
+
this.heads.set(key, blockId);
|
|
66
|
+
this.timestamps.set(key, timestamp);
|
|
67
|
+
await this.driver.writeRecord(key, {
|
|
68
|
+
blockId,
|
|
69
|
+
timestamp: timestamp.toISOString(),
|
|
70
|
+
});
|
|
71
|
+
this.notifyHeadChange(key, blockId);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
notifyHeadChange(key, blockId) {
|
|
77
|
+
const listeners = this.changeListeners.get(key);
|
|
78
|
+
if (listeners) {
|
|
79
|
+
for (const cb of listeners) {
|
|
80
|
+
cb(blockId);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
onHeadChange(dbName, collectionName, callback) {
|
|
85
|
+
const key = this.makeKey(dbName, collectionName);
|
|
86
|
+
if (!this.changeListeners.has(key)) {
|
|
87
|
+
this.changeListeners.set(key, new Set());
|
|
88
|
+
}
|
|
89
|
+
this.changeListeners.get(key).add(callback);
|
|
90
|
+
return () => {
|
|
91
|
+
this.changeListeners.get(key)?.delete(callback);
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
async deferHeadUpdate(dbName, collectionName, blockId, timestamp) {
|
|
95
|
+
this.deferred.push({ dbName, collectionName, blockId, timestamp });
|
|
96
|
+
}
|
|
97
|
+
async applyDeferredUpdates(blockId) {
|
|
98
|
+
let applied = 0;
|
|
99
|
+
const remaining = [];
|
|
100
|
+
for (const update of this.deferred) {
|
|
101
|
+
if (update.blockId === blockId) {
|
|
102
|
+
await this.mergeHeadUpdate(update.dbName, update.collectionName, update.blockId, update.timestamp);
|
|
103
|
+
applied++;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
remaining.push(update);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
this.deferred.length = 0;
|
|
110
|
+
this.deferred.push(...remaining);
|
|
111
|
+
return applied;
|
|
112
|
+
}
|
|
113
|
+
getDeferredUpdates() {
|
|
114
|
+
return [...this.deferred];
|
|
115
|
+
}
|
|
116
|
+
exportSnapshot() {
|
|
117
|
+
const result = new Map();
|
|
118
|
+
for (const [key, blockId] of this.heads) {
|
|
119
|
+
const ts = this.timestamps.get(key);
|
|
120
|
+
result.set(key, {
|
|
121
|
+
blockId,
|
|
122
|
+
timestamp: ts ? ts.toISOString() : new Date(0).toISOString(),
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
return result;
|
|
126
|
+
}
|
|
127
|
+
async mergeSnapshot(snapshot) {
|
|
128
|
+
let merged = 0;
|
|
129
|
+
let skipped = 0;
|
|
130
|
+
for (const [key, record] of snapshot) {
|
|
131
|
+
const colon = key.indexOf(':');
|
|
132
|
+
const dbName = colon === -1 ? key : key.slice(0, colon);
|
|
133
|
+
const collectionName = colon === -1 ? '' : key.slice(colon + 1);
|
|
134
|
+
const applied = await this.mergeHeadUpdate(dbName, collectionName, record.blockId, new Date(record.timestamp));
|
|
135
|
+
if (applied) {
|
|
136
|
+
merged++;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
skipped++;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return { merged, skipped };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
exports.DriverBackedHeadRegistry = DriverBackedHeadRegistry;
|
|
146
|
+
//# sourceMappingURL=driverBackedHeadRegistry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driverBackedHeadRegistry.js","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/driverBackedHeadRegistry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HeadRegistryGossipTransport — Gossip-aware decorator for IHeadRegistry.
|
|
3
|
+
*
|
|
4
|
+
* Wraps any IHeadRegistry and wires it to an IGossipService so that:
|
|
5
|
+
* 1. Outbound: after every successful setHead(), the update is announced
|
|
6
|
+
* to peers via gossip.
|
|
7
|
+
* 2. Inbound: incoming 'head_update' gossip announcements are merged into
|
|
8
|
+
* the wrapped registry using last-writer-wins semantics.
|
|
9
|
+
* 3. Anti-entropy: an optional periodic timer re-announces all known head
|
|
10
|
+
* pointers so that nodes that missed earlier announcements can converge.
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* const transport = new HeadRegistryGossipTransport(inner, gossipService);
|
|
14
|
+
* transport.start(30_000); // optional anti-entropy every 30 s
|
|
15
|
+
* // … use transport as an IHeadRegistry …
|
|
16
|
+
* await transport.stop();
|
|
17
|
+
*
|
|
18
|
+
* @see Requirements 2.1, 7.1, 7.2
|
|
19
|
+
*/
|
|
20
|
+
import type { IWriteProof } from '../interfaces/auth/writeProof';
|
|
21
|
+
import type { IGossipService } from '../interfaces/availability/gossipService';
|
|
22
|
+
import type { DeferredHeadUpdate, IHeadRegistry } from '../interfaces/storage/headRegistry';
|
|
23
|
+
import type { HeadRecord } from '../interfaces/storage/headRegistryDriver';
|
|
24
|
+
export declare class HeadRegistryGossipTransport implements IHeadRegistry {
|
|
25
|
+
private readonly inner;
|
|
26
|
+
private readonly gossip;
|
|
27
|
+
private readonly announcementHandler;
|
|
28
|
+
private antiEntropyTimer?;
|
|
29
|
+
constructor(inner: IHeadRegistry, gossip: IGossipService);
|
|
30
|
+
/**
|
|
31
|
+
* Start the optional anti-entropy timer.
|
|
32
|
+
* When `antiEntropyIntervalMs` is provided and > 0, the transport will
|
|
33
|
+
* periodically re-announce all known head pointers so that peers that
|
|
34
|
+
* joined late (or missed earlier announcements) can converge.
|
|
35
|
+
*
|
|
36
|
+
* @param antiEntropyIntervalMs - Interval in milliseconds between anti-entropy
|
|
37
|
+
* passes. Pass 0 or omit to disable.
|
|
38
|
+
*/
|
|
39
|
+
start(antiEntropyIntervalMs?: number): void;
|
|
40
|
+
/**
|
|
41
|
+
* Stop the anti-entropy timer and unregister the inbound handler.
|
|
42
|
+
* Should be called when the transport is no longer needed.
|
|
43
|
+
*/
|
|
44
|
+
stop(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* Re-announce every known head pointer via gossip.
|
|
47
|
+
* Used by the anti-entropy timer and can also be called manually to
|
|
48
|
+
* trigger an immediate convergence pass.
|
|
49
|
+
*/
|
|
50
|
+
pushSnapshot(): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* Set the head pointer locally and announce the update to peers.
|
|
53
|
+
* Gossip announcement is best-effort: a failure does not roll back the
|
|
54
|
+
* local write.
|
|
55
|
+
*/
|
|
56
|
+
setHead(dbName: string, collectionName: string, blockId: string, writeProof?: IWriteProof): Promise<void>;
|
|
57
|
+
getHead(dbName: string, collectionName: string): string | undefined;
|
|
58
|
+
removeHead(dbName: string, collectionName: string, writeProof?: IWriteProof): Promise<void>;
|
|
59
|
+
clear(): Promise<void>;
|
|
60
|
+
load(): Promise<void>;
|
|
61
|
+
getAllHeads(): Map<string, string>;
|
|
62
|
+
getHeadTimestamp(dbName: string, collectionName: string): Date | undefined;
|
|
63
|
+
mergeHeadUpdate(dbName: string, collectionName: string, blockId: string, timestamp: Date, writeProof?: IWriteProof): Promise<boolean>;
|
|
64
|
+
deferHeadUpdate(dbName: string, collectionName: string, blockId: string, timestamp: Date): Promise<void>;
|
|
65
|
+
applyDeferredUpdates(blockId: string): Promise<number>;
|
|
66
|
+
getDeferredUpdates(): DeferredHeadUpdate[];
|
|
67
|
+
exportSnapshot(): ReadonlyMap<string, HeadRecord>;
|
|
68
|
+
mergeSnapshot(snapshot: Iterable<readonly [string, HeadRecord]>): Promise<{
|
|
69
|
+
merged: number;
|
|
70
|
+
skipped: number;
|
|
71
|
+
}>;
|
|
72
|
+
onHeadChange(dbName: string, collectionName: string, callback: (blockId: string) => void): () => void;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=headRegistryGossipTransport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headRegistryGossipTransport.d.ts","sourceRoot":"","sources":["../../../../../brightchain-lib/src/lib/db/headRegistryGossipTransport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,KAAK,EAGV,cAAc,EACf,MAAM,0CAA0C,CAAC;AAElD,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EACd,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAE3E,qBAAa,2BAA4B,YAAW,aAAa;IAC/D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IACxC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,gBAAgB,CAAC,CAAiC;gBAE9C,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,cAAc;IAwBxD;;;;;;;;OAQG;IACH,KAAK,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ3C;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAoBnC;;;;OAIG;IACG,OAAO,CACX,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,IAAI,CAAC;IAiBhB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI7D,UAAU,CACd,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,UAAU,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,IAAI,CAAC;IAIV,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,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,EACf,UAAU,CAAC,EAAE,WAAW,GACvB,OAAO,CAAC,OAAO,CAAC;IAUb,eAAe,CACnB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,IAAI,GACd,OAAO,CAAC,IAAI,CAAC;IASV,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5D,kBAAkB,IAAI,kBAAkB,EAAE;IAI1C,cAAc,IAAI,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC;IAI3C,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;IAI/C,YAAY,CACV,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAClC,MAAM,IAAI;CAGd"}
|