@decaf-ts/for-fabric 0.5.7 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/for-fabric.cjs +2 -3797
- package/dist/for-fabric.cjs.map +1 -0
- package/dist/for-fabric.js +2 -3901
- package/dist/for-fabric.js.map +1 -0
- package/lib/cjs/bin/cli.cjs +9 -0
- package/lib/cjs/bin/cli.js.map +1 -0
- package/lib/cjs/cli-module.cjs +479 -0
- package/lib/cjs/cli-module.js.map +1 -0
- package/lib/cjs/cli-utils.cjs +309 -0
- package/lib/cjs/cli-utils.js.map +1 -0
- package/lib/cjs/client/FabricClientAdapter.cjs +1362 -0
- package/lib/cjs/client/FabricClientAdapter.js.map +1 -0
- package/lib/cjs/client/FabricClientDispatch.cjs +290 -0
- package/lib/cjs/client/FabricClientDispatch.js.map +1 -0
- package/lib/cjs/client/FabricClientPaginator.cjs +21 -0
- package/lib/cjs/client/FabricClientPaginator.js.map +1 -0
- package/lib/cjs/client/FabricClientRepository.cjs +259 -0
- package/lib/cjs/client/FabricClientRepository.js.map +1 -0
- package/lib/cjs/client/FabricClientStatement.cjs +451 -0
- package/lib/cjs/client/FabricClientStatement.js.map +1 -0
- package/lib/cjs/client/collections/generation.cjs +113 -0
- package/lib/cjs/client/collections/generation.js.map +1 -0
- package/lib/{client/indexes → cjs/client/collections}/index.cjs +1 -1
- package/lib/cjs/client/collections/index.js.map +1 -0
- package/lib/cjs/client/constants.cjs +16 -0
- package/lib/cjs/client/constants.js.map +1 -0
- package/lib/cjs/client/crypto.cjs +368 -0
- package/lib/cjs/client/crypto.js.map +1 -0
- package/lib/{esm/client/erc20/FabricERC20ClientRepository.d.ts → cjs/client/erc20/FabricERC20ClientRepository.cjs} +139 -30
- package/lib/cjs/client/erc20/FabricERC20ClientRepository.js.map +1 -0
- package/lib/{client → cjs/client}/erc20/index.cjs +1 -1
- package/lib/cjs/client/erc20/index.js.map +1 -0
- package/lib/cjs/client/fabric-fs.cjs +234 -0
- package/lib/cjs/client/fabric-fs.js.map +1 -0
- package/lib/cjs/client/fabric-hsm.cjs +165 -0
- package/lib/cjs/client/fabric-hsm.js.map +1 -0
- package/lib/cjs/client/ids/id-extraction.cjs +30 -0
- package/lib/cjs/client/ids/id-extraction.js.map +1 -0
- package/lib/{client → cjs/client}/ids/index.cjs +1 -1
- package/lib/cjs/client/ids/index.js.map +1 -0
- package/lib/{client → cjs/client}/index.cjs +1 -1
- package/lib/cjs/client/index.js.map +1 -0
- package/lib/cjs/client/indexes/generation.cjs +95 -0
- package/lib/cjs/client/indexes/generation.js.map +1 -0
- package/lib/{client/collections → cjs/client/indexes}/index.cjs +1 -1
- package/lib/cjs/client/indexes/index.js.map +1 -0
- package/lib/{esm/client/logging.d.ts → cjs/client/logging.cjs} +51 -9
- package/lib/cjs/client/logging.js.map +1 -0
- package/lib/cjs/client/services/FabricEnrollmentService.cjs +363 -0
- package/lib/cjs/client/services/FabricEnrollmentService.js.map +1 -0
- package/lib/cjs/client/services/FabricIdentityService.cjs +324 -0
- package/lib/cjs/client/services/FabricIdentityService.js.map +1 -0
- package/lib/cjs/client/services/RegistrationRequestBuilder.cjs +91 -0
- package/lib/cjs/client/services/RegistrationRequestBuilder.js.map +1 -0
- package/lib/{esm/client/services/constants.d.ts → cjs/client/services/constants.cjs} +10 -5
- package/lib/cjs/client/services/constants.js.map +1 -0
- package/lib/cjs/client/services/index.cjs +21 -0
- package/lib/cjs/client/services/index.js.map +1 -0
- package/lib/cjs/client/types.cjs +3 -0
- package/lib/cjs/client/types.js.map +1 -0
- package/lib/cjs/client/utils.cjs +262 -0
- package/lib/cjs/client/utils.js.map +1 -0
- package/lib/{contract → cjs/contract}/Address.cjs +1 -1
- package/lib/cjs/contract/Address.js.map +1 -0
- package/lib/{contract → cjs/contract}/AddressContract.cjs +1 -1
- package/lib/cjs/contract/AddressContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/AuditContract.cjs +1 -1
- package/lib/cjs/contract/AuditContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/BatchContract.cjs +1 -1
- package/lib/cjs/contract/BatchContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/MarketContract.cjs +1 -1
- package/lib/cjs/contract/MarketContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherAuditContract.cjs +1 -1
- package/lib/cjs/contract/OtherAuditContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherBatchContract.cjs +1 -1
- package/lib/cjs/contract/OtherBatchContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherMarketContract.cjs +1 -1
- package/lib/cjs/contract/OtherMarketContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherProductContract.cjs +1 -1
- package/lib/cjs/contract/OtherProductContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherProductImageContract.cjs +1 -1
- package/lib/cjs/contract/OtherProductImageContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherProductSharedContract.cjs +1 -1
- package/lib/cjs/contract/OtherProductSharedContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/OtherProductStrengthContract.cjs +1 -1
- package/lib/cjs/contract/OtherProductStrengthContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/Product.cjs +1 -1
- package/lib/cjs/contract/Product.js.map +1 -0
- package/lib/{contract → cjs/contract}/ProductContract.cjs +1 -1
- package/lib/cjs/contract/ProductContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/ProductStrengthContract.cjs +1 -1
- package/lib/cjs/contract/ProductStrengthContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/SegregatedPrivateDocumentContract.cjs +1 -1
- package/lib/cjs/contract/SegregatedPrivateDocumentContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/SegregatedSharedDocumentContract.cjs +1 -1
- package/lib/cjs/contract/SegregatedSharedDocumentContract.js.map +1 -0
- package/lib/{contract → cjs/contract}/User.cjs +1 -1
- package/lib/cjs/contract/User.js.map +1 -0
- package/lib/{contract → cjs/contract}/UserContract.cjs +1 -1
- package/lib/cjs/contract/UserContract.js.map +1 -0
- package/lib/cjs/contract/index.cjs +36 -0
- package/lib/cjs/contract/index.js.map +1 -0
- package/lib/cjs/contract/logging-context.cjs +77 -0
- package/lib/cjs/contract/logging-context.js.map +1 -0
- package/lib/cjs/contract/models/Audit.cjs +106 -0
- package/lib/cjs/contract/models/Audit.js.map +1 -0
- package/lib/{contract → cjs/contract}/models/BaseIdentifiedModel.cjs +1 -1
- package/lib/cjs/contract/models/BaseIdentifiedModel.js.map +1 -0
- package/lib/{contract → cjs/contract}/models/BaseModel.cjs +1 -1
- package/lib/cjs/contract/models/BaseModel.js.map +1 -0
- package/lib/cjs/contract/models/Batch.cjs +174 -0
- package/lib/cjs/contract/models/Batch.js.map +1 -0
- package/lib/cjs/contract/models/GtinOwner.cjs +59 -0
- package/lib/cjs/contract/models/GtinOwner.js.map +1 -0
- package/lib/cjs/contract/models/History.cjs +75 -0
- package/lib/cjs/contract/models/History.js.map +1 -0
- package/lib/cjs/contract/models/Leaflet.cjs +95 -0
- package/lib/cjs/contract/models/Leaflet.js.map +1 -0
- package/lib/cjs/contract/models/LeafletFile.cjs +58 -0
- package/lib/cjs/contract/models/LeafletFile.js.map +1 -0
- package/lib/cjs/contract/models/Market.cjs +75 -0
- package/lib/cjs/contract/models/Market.js.map +1 -0
- package/lib/cjs/contract/models/OtherAudit.cjs +118 -0
- package/lib/cjs/contract/models/OtherAudit.js.map +1 -0
- package/lib/cjs/contract/models/OtherBatchShared.cjs +127 -0
- package/lib/cjs/contract/models/OtherBatchShared.js.map +1 -0
- package/lib/cjs/contract/models/OtherLeaflet.cjs +115 -0
- package/lib/cjs/contract/models/OtherLeaflet.js.map +1 -0
- package/lib/cjs/contract/models/OtherLeafletFile.cjs +65 -0
- package/lib/cjs/contract/models/OtherLeafletFile.js.map +1 -0
- package/lib/cjs/contract/models/OtherMarket.cjs +84 -0
- package/lib/cjs/contract/models/OtherMarket.js.map +1 -0
- package/lib/cjs/contract/models/OtherProduct.cjs +77 -0
- package/lib/cjs/contract/models/OtherProduct.js.map +1 -0
- package/lib/cjs/contract/models/OtherProductImage.cjs +59 -0
- package/lib/cjs/contract/models/OtherProductImage.js.map +1 -0
- package/lib/cjs/contract/models/OtherProductShared.cjs +99 -0
- package/lib/cjs/contract/models/OtherProductShared.js.map +1 -0
- package/lib/cjs/contract/models/OtherProductStrength.cjs +87 -0
- package/lib/cjs/contract/models/OtherProductStrength.js.map +1 -0
- package/lib/cjs/contract/models/Product.cjs +78 -0
- package/lib/cjs/contract/models/Product.js.map +1 -0
- package/lib/cjs/contract/models/ProductStrength.cjs +78 -0
- package/lib/cjs/contract/models/ProductStrength.js.map +1 -0
- package/lib/{contract → cjs/contract}/models/SegregatedDocument.cjs +1 -1
- package/lib/cjs/contract/models/SegregatedDocument.js.map +1 -0
- package/lib/cjs/contract/models/constants.cjs +30 -0
- package/lib/cjs/contract/models/constants.js.map +1 -0
- package/lib/cjs/contract/models/decorators-private.cjs +158 -0
- package/lib/cjs/contract/models/decorators-private.js.map +1 -0
- package/lib/cjs/contract/models/decorators.cjs +182 -0
- package/lib/cjs/contract/models/decorators.js.map +1 -0
- package/lib/cjs/contract/models/gtin.cjs +88 -0
- package/lib/cjs/contract/models/gtin.js.map +1 -0
- package/lib/cjs/contract/models/history-dec.cjs +83 -0
- package/lib/cjs/contract/models/history-dec.js.map +1 -0
- package/lib/cjs/contracts/ContractAdapter.cjs +1193 -0
- package/lib/cjs/contracts/ContractAdapter.js.map +1 -0
- package/lib/cjs/contracts/ContractContext.cjs +157 -0
- package/lib/cjs/contracts/ContractContext.js.map +1 -0
- package/lib/cjs/contracts/FabricContractDispatch.cjs +79 -0
- package/lib/cjs/contracts/FabricContractDispatch.js.map +1 -0
- package/lib/{esm/contracts/FabricContractPaginator.d.ts → cjs/contracts/FabricContractPaginator.cjs} +77 -9
- package/lib/cjs/contracts/FabricContractPaginator.js.map +1 -0
- package/lib/cjs/contracts/FabricContractRepository.cjs +322 -0
- package/lib/cjs/contracts/FabricContractRepository.js.map +1 -0
- package/lib/{esm/contracts/FabricContractRepositoryObservableHandler.d.ts → cjs/contracts/FabricContractRepositoryObservableHandler.cjs} +42 -8
- package/lib/cjs/contracts/FabricContractRepositoryObservableHandler.js.map +1 -0
- package/lib/cjs/contracts/FabricContractSequence.cjs +338 -0
- package/lib/cjs/contracts/FabricContractSequence.js.map +1 -0
- package/lib/cjs/contracts/FabricContractStatement.cjs +180 -0
- package/lib/cjs/contracts/FabricContractStatement.js.map +1 -0
- package/lib/cjs/contracts/MigrationContract.cjs +147 -0
- package/lib/cjs/contracts/MigrationContract.js.map +1 -0
- package/lib/{contracts → cjs/contracts}/PrivateSequence.cjs +1 -1
- package/lib/cjs/contracts/PrivateSequence.js.map +1 -0
- package/lib/cjs/contracts/auth/decorators.cjs +84 -0
- package/lib/cjs/contracts/auth/decorators.js.map +1 -0
- package/lib/{contracts → cjs/contracts}/auth/index.cjs +1 -1
- package/lib/cjs/contracts/auth/index.js.map +1 -0
- package/lib/cjs/contracts/crud/crud-contract.cjs +416 -0
- package/lib/cjs/contracts/crud/crud-contract.js.map +1 -0
- package/lib/{contracts → cjs/contracts}/crud/index.cjs +1 -1
- package/lib/cjs/contracts/crud/index.js.map +1 -0
- package/lib/cjs/contracts/crud/serialized-crud-contract.cjs +284 -0
- package/lib/cjs/contracts/crud/serialized-crud-contract.js.map +1 -0
- package/lib/cjs/contracts/erc20/erc20contract.cjs +581 -0
- package/lib/cjs/contracts/erc20/erc20contract.js.map +1 -0
- package/lib/cjs/contracts/erc20/index.cjs +21 -0
- package/lib/cjs/contracts/erc20/index.js.map +1 -0
- package/lib/cjs/contracts/erc20/models.cjs +209 -0
- package/lib/cjs/contracts/erc20/models.js.map +1 -0
- package/lib/{contracts → cjs/contracts}/index.cjs +1 -1
- package/lib/cjs/contracts/index.js.map +1 -0
- package/lib/cjs/contracts/logging.cjs +118 -0
- package/lib/cjs/contracts/logging.js.map +1 -0
- package/lib/cjs/contracts/overrides.cjs +8 -0
- package/lib/cjs/contracts/overrides.js.map +1 -0
- package/lib/cjs/contracts/types.cjs +3 -0
- package/lib/cjs/contracts/types.js.map +1 -0
- package/lib/cjs/contracts/uuid.cjs +75 -0
- package/lib/cjs/contracts/uuid.js.map +1 -0
- package/lib/{index.cjs → cjs/index.cjs} +1 -1
- package/lib/cjs/index.js.map +1 -0
- package/lib/{shared/ClientSerializer.d.ts → cjs/shared/ClientSerializer.cjs} +35 -6
- package/lib/cjs/shared/ClientSerializer.js.map +1 -0
- package/lib/cjs/shared/DeterministicSerializer.cjs +106 -0
- package/lib/cjs/shared/DeterministicSerializer.js.map +1 -0
- package/lib/cjs/shared/SimpleDeterministicSerializer.cjs +69 -0
- package/lib/cjs/shared/SimpleDeterministicSerializer.js.map +1 -0
- package/lib/{shared/constants.d.ts → cjs/shared/constants.cjs} +18 -12
- package/lib/cjs/shared/constants.js.map +1 -0
- package/lib/cjs/shared/decorators.cjs +595 -0
- package/lib/cjs/shared/decorators.js.map +1 -0
- package/lib/{shared/erc20/erc20-constants.d.ts → cjs/shared/erc20/erc20-constants.cjs} +9 -4
- package/lib/cjs/shared/erc20/erc20-constants.js.map +1 -0
- package/lib/{shared → cjs/shared}/erc20/index.cjs +1 -1
- package/lib/cjs/shared/erc20/index.js.map +1 -0
- package/lib/cjs/shared/errors.cjs +190 -0
- package/lib/cjs/shared/errors.js.map +1 -0
- package/lib/{shared/events.d.ts → cjs/shared/events.cjs} +21 -7
- package/lib/cjs/shared/events.js.map +1 -0
- package/lib/cjs/shared/fabric-types.cjs +3 -0
- package/lib/cjs/shared/fabric-types.js.map +1 -0
- package/lib/{shared → cjs/shared}/index.cjs +1 -1
- package/lib/cjs/shared/index.js.map +1 -0
- package/lib/cjs/shared/interfaces/Checkable.cjs +3 -0
- package/lib/cjs/shared/interfaces/Checkable.js.map +1 -0
- package/lib/{shared → cjs/shared}/interfaces/index.cjs +1 -1
- package/lib/cjs/shared/interfaces/index.js.map +1 -0
- package/lib/cjs/shared/math.cjs +66 -0
- package/lib/cjs/shared/math.js.map +1 -0
- package/lib/{shared → cjs/shared}/model/FabricBaseModel.cjs +1 -1
- package/lib/cjs/shared/model/FabricBaseModel.js.map +1 -0
- package/lib/{shared → cjs/shared}/model/FabricIdentifiedBaseModel.cjs +1 -1
- package/lib/cjs/shared/model/FabricIdentifiedBaseModel.js.map +1 -0
- package/lib/cjs/shared/model/Identity.cjs +71 -0
- package/lib/cjs/shared/model/Identity.js.map +1 -0
- package/lib/cjs/shared/model/IdentityCredentials.cjs +66 -0
- package/lib/cjs/shared/model/IdentityCredentials.js.map +1 -0
- package/lib/cjs/shared/model/index.cjs +21 -0
- package/lib/cjs/shared/model/index.js.map +1 -0
- package/lib/cjs/shared/overrides/Model.cjs +4 -0
- package/lib/cjs/shared/overrides/Model.js.map +1 -0
- package/lib/{shared → cjs/shared}/overrides/index.cjs +1 -1
- package/lib/cjs/shared/overrides/index.js.map +1 -0
- package/lib/cjs/shared/overrides/overrides.cjs +93 -0
- package/lib/cjs/shared/overrides/overrides.js.map +1 -0
- package/lib/cjs/shared/types.cjs +3 -0
- package/lib/cjs/shared/types.js.map +1 -0
- package/lib/cjs/version.cjs +8 -0
- package/lib/cjs/version.js.map +1 -0
- package/lib/esm/bin/cli.js +1 -1
- package/lib/esm/bin/cli.js.map +1 -0
- package/lib/esm/cli-module.js +1 -1
- package/lib/esm/cli-module.js.map +1 -0
- package/lib/esm/cli-utils.js +1 -1
- package/lib/esm/cli-utils.js.map +1 -0
- package/lib/esm/client/FabricClientAdapter.js +1 -1
- package/lib/esm/client/FabricClientAdapter.js.map +1 -0
- package/lib/esm/client/FabricClientDispatch.js +1 -1
- package/lib/esm/client/FabricClientDispatch.js.map +1 -0
- package/lib/esm/client/FabricClientPaginator.js +1 -1
- package/lib/esm/client/FabricClientPaginator.js.map +1 -0
- package/lib/esm/client/FabricClientRepository.js +1 -1
- package/lib/esm/client/FabricClientRepository.js.map +1 -0
- package/lib/esm/client/FabricClientStatement.js +1 -1
- package/lib/esm/client/FabricClientStatement.js.map +1 -0
- package/lib/esm/client/collections/generation.js +1 -1
- package/lib/esm/client/collections/generation.js.map +1 -0
- package/lib/esm/client/collections/index.js +1 -1
- package/lib/esm/client/collections/index.js.map +1 -0
- package/lib/esm/client/constants.js +1 -1
- package/lib/esm/client/constants.js.map +1 -0
- package/lib/esm/client/crypto.js +1 -1
- package/lib/esm/client/crypto.js.map +1 -0
- package/lib/esm/client/erc20/FabricERC20ClientRepository.js +1 -1
- package/lib/esm/client/erc20/FabricERC20ClientRepository.js.map +1 -0
- package/lib/esm/client/erc20/index.js +1 -1
- package/lib/esm/client/erc20/index.js.map +1 -0
- package/lib/esm/client/fabric-fs.js +1 -1
- package/lib/esm/client/fabric-fs.js.map +1 -0
- package/lib/esm/client/fabric-hsm.js +1 -1
- package/lib/esm/client/fabric-hsm.js.map +1 -0
- package/lib/esm/client/ids/id-extraction.js +1 -1
- package/lib/esm/client/ids/id-extraction.js.map +1 -0
- package/lib/esm/client/ids/index.js +1 -1
- package/lib/esm/client/ids/index.js.map +1 -0
- package/lib/esm/client/index.js +1 -1
- package/lib/esm/client/index.js.map +1 -0
- package/lib/esm/client/indexes/generation.js +1 -1
- package/lib/esm/client/indexes/generation.js.map +1 -0
- package/lib/esm/client/indexes/index.js +1 -1
- package/lib/esm/client/indexes/index.js.map +1 -0
- package/lib/esm/client/logging.js +1 -1
- package/lib/esm/client/logging.js.map +1 -0
- package/lib/esm/client/services/FabricEnrollmentService.js +1 -1
- package/lib/esm/client/services/FabricEnrollmentService.js.map +1 -0
- package/lib/esm/client/services/FabricIdentityService.js +1 -1
- package/lib/esm/client/services/FabricIdentityService.js.map +1 -0
- package/lib/esm/client/services/RegistrationRequestBuilder.js +1 -1
- package/lib/esm/client/services/RegistrationRequestBuilder.js.map +1 -0
- package/lib/esm/client/services/constants.js +1 -1
- package/lib/esm/client/services/constants.js.map +1 -0
- package/lib/esm/client/services/index.js +1 -1
- package/lib/esm/client/services/index.js.map +1 -0
- package/lib/esm/client/types.js +1 -1
- package/lib/esm/client/types.js.map +1 -0
- package/lib/esm/client/utils.js +1 -1
- package/lib/esm/client/utils.js.map +1 -0
- package/lib/esm/contract/Address.js +1 -1
- package/lib/esm/contract/Address.js.map +1 -0
- package/lib/esm/contract/AddressContract.js +1 -1
- package/lib/esm/contract/AddressContract.js.map +1 -0
- package/lib/esm/contract/AuditContract.js +1 -1
- package/lib/esm/contract/AuditContract.js.map +1 -0
- package/lib/esm/contract/BatchContract.js +1 -1
- package/lib/esm/contract/BatchContract.js.map +1 -0
- package/lib/esm/contract/MarketContract.js +1 -1
- package/lib/esm/contract/MarketContract.js.map +1 -0
- package/lib/esm/contract/OtherAuditContract.js +1 -1
- package/lib/esm/contract/OtherAuditContract.js.map +1 -0
- package/lib/esm/contract/OtherBatchContract.js +1 -1
- package/lib/esm/contract/OtherBatchContract.js.map +1 -0
- package/lib/esm/contract/OtherMarketContract.js +1 -1
- package/lib/esm/contract/OtherMarketContract.js.map +1 -0
- package/lib/esm/contract/OtherProductContract.js +1 -1
- package/lib/esm/contract/OtherProductContract.js.map +1 -0
- package/lib/esm/contract/OtherProductImageContract.js +1 -1
- package/lib/esm/contract/OtherProductImageContract.js.map +1 -0
- package/lib/esm/contract/OtherProductSharedContract.js +1 -1
- package/lib/esm/contract/OtherProductSharedContract.js.map +1 -0
- package/lib/esm/contract/OtherProductStrengthContract.js +1 -1
- package/lib/esm/contract/OtherProductStrengthContract.js.map +1 -0
- package/lib/esm/contract/Product.js +1 -1
- package/lib/esm/contract/Product.js.map +1 -0
- package/lib/esm/contract/ProductContract.js +1 -1
- package/lib/esm/contract/ProductContract.js.map +1 -0
- package/lib/esm/contract/ProductStrengthContract.js +1 -1
- package/lib/esm/contract/ProductStrengthContract.js.map +1 -0
- package/lib/esm/contract/SegregatedPrivateDocumentContract.js +1 -1
- package/lib/esm/contract/SegregatedPrivateDocumentContract.js.map +1 -0
- package/lib/esm/contract/SegregatedSharedDocumentContract.js +1 -1
- package/lib/esm/contract/SegregatedSharedDocumentContract.js.map +1 -0
- package/lib/esm/contract/User.js +1 -1
- package/lib/esm/contract/User.js.map +1 -0
- package/lib/esm/contract/UserContract.js +1 -1
- package/lib/esm/contract/UserContract.js.map +1 -0
- package/lib/esm/contract/index.js +1 -1
- package/lib/esm/contract/index.js.map +1 -0
- package/lib/esm/contract/logging-context.js +1 -1
- package/lib/esm/contract/logging-context.js.map +1 -0
- package/lib/esm/contract/models/Audit.js +1 -1
- package/lib/esm/contract/models/Audit.js.map +1 -0
- package/lib/esm/contract/models/BaseIdentifiedModel.js +1 -1
- package/lib/esm/contract/models/BaseIdentifiedModel.js.map +1 -0
- package/lib/esm/contract/models/BaseModel.js +1 -1
- package/lib/esm/contract/models/BaseModel.js.map +1 -0
- package/lib/esm/contract/models/Batch.js +1 -1
- package/lib/esm/contract/models/Batch.js.map +1 -0
- package/lib/esm/contract/models/GtinOwner.js +1 -1
- package/lib/esm/contract/models/GtinOwner.js.map +1 -0
- package/lib/esm/contract/models/History.js +1 -1
- package/lib/esm/contract/models/History.js.map +1 -0
- package/lib/esm/contract/models/Leaflet.js +1 -1
- package/lib/esm/contract/models/Leaflet.js.map +1 -0
- package/lib/esm/contract/models/LeafletFile.js +1 -1
- package/lib/esm/contract/models/LeafletFile.js.map +1 -0
- package/lib/esm/contract/models/Market.js +1 -1
- package/lib/esm/contract/models/Market.js.map +1 -0
- package/lib/esm/contract/models/OtherAudit.js +1 -1
- package/lib/esm/contract/models/OtherAudit.js.map +1 -0
- package/lib/esm/contract/models/OtherBatchShared.js +1 -1
- package/lib/esm/contract/models/OtherBatchShared.js.map +1 -0
- package/lib/esm/contract/models/OtherLeaflet.js +1 -1
- package/lib/esm/contract/models/OtherLeaflet.js.map +1 -0
- package/lib/esm/contract/models/OtherLeafletFile.js +1 -1
- package/lib/esm/contract/models/OtherLeafletFile.js.map +1 -0
- package/lib/esm/contract/models/OtherMarket.js +1 -1
- package/lib/esm/contract/models/OtherMarket.js.map +1 -0
- package/lib/esm/contract/models/OtherProduct.js +1 -1
- package/lib/esm/contract/models/OtherProduct.js.map +1 -0
- package/lib/esm/contract/models/OtherProductImage.js +1 -1
- package/lib/esm/contract/models/OtherProductImage.js.map +1 -0
- package/lib/esm/contract/models/OtherProductShared.js +1 -1
- package/lib/esm/contract/models/OtherProductShared.js.map +1 -0
- package/lib/esm/contract/models/OtherProductStrength.js +1 -1
- package/lib/esm/contract/models/OtherProductStrength.js.map +1 -0
- package/lib/esm/contract/models/Product.js +1 -1
- package/lib/esm/contract/models/Product.js.map +1 -0
- package/lib/esm/contract/models/ProductStrength.js +1 -1
- package/lib/esm/contract/models/ProductStrength.js.map +1 -0
- package/lib/esm/contract/models/SegregatedDocument.js +1 -1
- package/lib/esm/contract/models/SegregatedDocument.js.map +1 -0
- package/lib/esm/contract/models/constants.js +1 -1
- package/lib/esm/contract/models/constants.js.map +1 -0
- package/lib/esm/contract/models/decorators-private.js +1 -1
- package/lib/esm/contract/models/decorators-private.js.map +1 -0
- package/lib/esm/contract/models/decorators.js +1 -1
- package/lib/esm/contract/models/decorators.js.map +1 -0
- package/lib/esm/contract/models/gtin.js +1 -1
- package/lib/esm/contract/models/gtin.js.map +1 -0
- package/lib/esm/contract/models/history-dec.js +1 -1
- package/lib/esm/contract/models/history-dec.js.map +1 -0
- package/lib/esm/contracts/ContractAdapter.js +1 -1
- package/lib/esm/contracts/ContractAdapter.js.map +1 -0
- package/lib/esm/contracts/ContractContext.js +1 -1
- package/lib/esm/contracts/ContractContext.js.map +1 -0
- package/lib/esm/contracts/FabricContractDispatch.js +1 -1
- package/lib/esm/contracts/FabricContractDispatch.js.map +1 -0
- package/lib/esm/contracts/FabricContractPaginator.js +1 -1
- package/lib/esm/contracts/FabricContractPaginator.js.map +1 -0
- package/lib/esm/contracts/FabricContractRepository.js +1 -1
- package/lib/esm/contracts/FabricContractRepository.js.map +1 -0
- package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +1 -1
- package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js.map +1 -0
- package/lib/esm/contracts/FabricContractSequence.js +1 -1
- package/lib/esm/contracts/FabricContractSequence.js.map +1 -0
- package/lib/esm/contracts/FabricContractStatement.js +1 -1
- package/lib/esm/contracts/FabricContractStatement.js.map +1 -0
- package/lib/esm/contracts/MigrationContract.js +1 -1
- package/lib/esm/contracts/MigrationContract.js.map +1 -0
- package/lib/esm/contracts/PrivateSequence.js +1 -1
- package/lib/esm/contracts/PrivateSequence.js.map +1 -0
- package/lib/esm/contracts/auth/decorators.js +1 -1
- package/lib/esm/contracts/auth/decorators.js.map +1 -0
- package/lib/esm/contracts/auth/index.js +1 -1
- package/lib/esm/contracts/auth/index.js.map +1 -0
- package/lib/esm/contracts/crud/crud-contract.js +1 -1
- package/lib/esm/contracts/crud/crud-contract.js.map +1 -0
- package/lib/esm/contracts/crud/index.js +1 -1
- package/lib/esm/contracts/crud/index.js.map +1 -0
- package/lib/esm/contracts/crud/serialized-crud-contract.js +1 -1
- package/lib/esm/contracts/crud/serialized-crud-contract.js.map +1 -0
- package/lib/esm/contracts/erc20/erc20contract.js +1 -1
- package/lib/esm/contracts/erc20/erc20contract.js.map +1 -0
- package/lib/esm/contracts/erc20/index.js +1 -1
- package/lib/esm/contracts/erc20/index.js.map +1 -0
- package/lib/esm/contracts/erc20/models.js +1 -1
- package/lib/esm/contracts/erc20/models.js.map +1 -0
- package/lib/esm/contracts/index.js +1 -1
- package/lib/esm/contracts/index.js.map +1 -0
- package/lib/esm/contracts/logging.js +1 -1
- package/lib/esm/contracts/logging.js.map +1 -0
- package/lib/esm/contracts/overrides.js +1 -1
- package/lib/esm/contracts/overrides.js.map +1 -0
- package/lib/esm/contracts/types.js +1 -1
- package/lib/esm/contracts/types.js.map +1 -0
- package/lib/esm/contracts/uuid.js +1 -1
- package/lib/esm/contracts/uuid.js.map +1 -0
- package/lib/esm/index.js +1 -1
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/shared/ClientSerializer.js +1 -1
- package/lib/esm/shared/ClientSerializer.js.map +1 -0
- package/lib/esm/shared/DeterministicSerializer.js +1 -1
- package/lib/esm/shared/DeterministicSerializer.js.map +1 -0
- package/lib/esm/shared/SimpleDeterministicSerializer.js +1 -1
- package/lib/esm/shared/SimpleDeterministicSerializer.js.map +1 -0
- package/lib/esm/shared/constants.js +1 -1
- package/lib/esm/shared/constants.js.map +1 -0
- package/lib/esm/shared/decorators.js +1 -1
- package/lib/esm/shared/decorators.js.map +1 -0
- package/lib/esm/shared/erc20/erc20-constants.js +1 -1
- package/lib/esm/shared/erc20/erc20-constants.js.map +1 -0
- package/lib/esm/shared/erc20/index.js +1 -1
- package/lib/esm/shared/erc20/index.js.map +1 -0
- package/lib/esm/shared/errors.js +1 -1
- package/lib/esm/shared/errors.js.map +1 -0
- package/lib/esm/shared/events.js +1 -1
- package/lib/esm/shared/events.js.map +1 -0
- package/lib/esm/shared/fabric-types.js +1 -1
- package/lib/esm/shared/fabric-types.js.map +1 -0
- package/lib/esm/shared/index.js +1 -1
- package/lib/esm/shared/index.js.map +1 -0
- package/lib/esm/shared/interfaces/Checkable.js +1 -1
- package/lib/esm/shared/interfaces/Checkable.js.map +1 -0
- package/lib/esm/shared/interfaces/index.js +1 -1
- package/lib/esm/shared/interfaces/index.js.map +1 -0
- package/lib/esm/shared/math.js +1 -1
- package/lib/esm/shared/math.js.map +1 -0
- package/lib/esm/shared/model/FabricBaseModel.js +1 -1
- package/lib/esm/shared/model/FabricBaseModel.js.map +1 -0
- package/lib/esm/shared/model/FabricIdentifiedBaseModel.js +1 -1
- package/lib/esm/shared/model/FabricIdentifiedBaseModel.js.map +1 -0
- package/lib/esm/shared/model/Identity.js +1 -1
- package/lib/esm/shared/model/Identity.js.map +1 -0
- package/lib/esm/shared/model/IdentityCredentials.js +1 -1
- package/lib/esm/shared/model/IdentityCredentials.js.map +1 -0
- package/lib/esm/shared/model/index.js +1 -1
- package/lib/esm/shared/model/index.js.map +1 -0
- package/lib/esm/shared/overrides/Model.js +1 -1
- package/lib/esm/shared/overrides/Model.js.map +1 -0
- package/lib/esm/shared/overrides/index.js +1 -1
- package/lib/esm/shared/overrides/index.js.map +1 -0
- package/lib/esm/shared/overrides/overrides.js +1 -1
- package/lib/esm/shared/overrides/overrides.js.map +1 -0
- package/lib/esm/shared/types.js +1 -1
- package/lib/esm/shared/types.js.map +1 -0
- package/lib/esm/version.js +2 -2
- package/lib/esm/version.js.map +1 -0
- package/lib/{esm → types}/version.d.ts +1 -1
- package/package.json +22 -18
- package/lib/bin/cli.cjs +0 -9
- package/lib/cli-module.cjs +0 -479
- package/lib/cli-utils.cjs +0 -309
- package/lib/client/FabricClientAdapter.cjs +0 -1362
- package/lib/client/FabricClientDispatch.cjs +0 -290
- package/lib/client/FabricClientPaginator.cjs +0 -21
- package/lib/client/FabricClientRepository.cjs +0 -259
- package/lib/client/FabricClientStatement.cjs +0 -451
- package/lib/client/collections/generation.cjs +0 -113
- package/lib/client/constants.cjs +0 -16
- package/lib/client/crypto.cjs +0 -368
- package/lib/client/erc20/FabricERC20ClientRepository.cjs +0 -363
- package/lib/client/fabric-fs.cjs +0 -234
- package/lib/client/fabric-hsm.cjs +0 -165
- package/lib/client/ids/id-extraction.cjs +0 -30
- package/lib/client/indexes/generation.cjs +0 -95
- package/lib/client/logging.cjs +0 -102
- package/lib/client/services/FabricEnrollmentService.cjs +0 -363
- package/lib/client/services/FabricIdentityService.cjs +0 -324
- package/lib/client/services/RegistrationRequestBuilder.cjs +0 -91
- package/lib/client/services/constants.cjs +0 -20
- package/lib/client/services/index.cjs +0 -21
- package/lib/client/types.cjs +0 -3
- package/lib/client/utils.cjs +0 -262
- package/lib/contract/index.cjs +0 -36
- package/lib/contract/logging-context.cjs +0 -77
- package/lib/contract/models/Audit.cjs +0 -106
- package/lib/contract/models/Batch.cjs +0 -174
- package/lib/contract/models/GtinOwner.cjs +0 -59
- package/lib/contract/models/History.cjs +0 -75
- package/lib/contract/models/Leaflet.cjs +0 -95
- package/lib/contract/models/LeafletFile.cjs +0 -58
- package/lib/contract/models/Market.cjs +0 -75
- package/lib/contract/models/OtherAudit.cjs +0 -118
- package/lib/contract/models/OtherBatchShared.cjs +0 -127
- package/lib/contract/models/OtherLeaflet.cjs +0 -115
- package/lib/contract/models/OtherLeafletFile.cjs +0 -65
- package/lib/contract/models/OtherMarket.cjs +0 -84
- package/lib/contract/models/OtherProduct.cjs +0 -77
- package/lib/contract/models/OtherProductImage.cjs +0 -59
- package/lib/contract/models/OtherProductShared.cjs +0 -99
- package/lib/contract/models/OtherProductStrength.cjs +0 -87
- package/lib/contract/models/Product.cjs +0 -78
- package/lib/contract/models/ProductStrength.cjs +0 -78
- package/lib/contract/models/constants.cjs +0 -30
- package/lib/contract/models/decorators-private.cjs +0 -158
- package/lib/contract/models/decorators.cjs +0 -182
- package/lib/contract/models/gtin.cjs +0 -88
- package/lib/contract/models/history-dec.cjs +0 -83
- package/lib/contracts/ContractAdapter.cjs +0 -1193
- package/lib/contracts/ContractContext.cjs +0 -157
- package/lib/contracts/FabricContractDispatch.cjs +0 -79
- package/lib/contracts/FabricContractPaginator.cjs +0 -173
- package/lib/contracts/FabricContractRepository.cjs +0 -322
- package/lib/contracts/FabricContractRepositoryObservableHandler.cjs +0 -96
- package/lib/contracts/FabricContractSequence.cjs +0 -338
- package/lib/contracts/FabricContractStatement.cjs +0 -180
- package/lib/contracts/MigrationContract.cjs +0 -147
- package/lib/contracts/auth/decorators.cjs +0 -84
- package/lib/contracts/crud/crud-contract.cjs +0 -416
- package/lib/contracts/crud/serialized-crud-contract.cjs +0 -284
- package/lib/contracts/erc20/erc20contract.cjs +0 -581
- package/lib/contracts/erc20/index.cjs +0 -21
- package/lib/contracts/erc20/models.cjs +0 -209
- package/lib/contracts/logging.cjs +0 -118
- package/lib/contracts/overrides.cjs +0 -8
- package/lib/contracts/types.cjs +0 -3
- package/lib/contracts/uuid.cjs +0 -75
- package/lib/esm/bin/cli.d.ts +0 -1
- package/lib/esm/cli-module.d.ts +0 -3
- package/lib/esm/cli-utils.d.ts +0 -21
- package/lib/esm/client/FabricClientAdapter.d.ts +0 -404
- package/lib/esm/client/FabricClientDispatch.d.ts +0 -133
- package/lib/esm/client/FabricClientPaginator.d.ts +0 -12
- package/lib/esm/client/FabricClientRepository.d.ts +0 -71
- package/lib/esm/client/FabricClientStatement.d.ts +0 -64
- package/lib/esm/client/collections/generation.d.ts +0 -46
- package/lib/esm/client/collections/index.d.ts +0 -1
- package/lib/esm/client/constants.d.ts +0 -2
- package/lib/esm/client/crypto.d.ts +0 -107
- package/lib/esm/client/erc20/index.d.ts +0 -1
- package/lib/esm/client/fabric-fs.d.ts +0 -92
- package/lib/esm/client/fabric-hsm.d.ts +0 -24
- package/lib/esm/client/ids/id-extraction.d.ts +0 -4
- package/lib/esm/client/ids/index.d.ts +0 -1
- package/lib/esm/client/index.d.ts +0 -23
- package/lib/esm/client/indexes/generation.d.ts +0 -10
- package/lib/esm/client/indexes/index.d.ts +0 -1
- package/lib/esm/client/services/FabricEnrollmentService.d.ts +0 -176
- package/lib/esm/client/services/FabricIdentityService.d.ts +0 -98
- package/lib/esm/client/services/RegistrationRequestBuilder.d.ts +0 -19
- package/lib/esm/client/services/index.d.ts +0 -4
- package/lib/esm/client/types.d.ts +0 -20
- package/lib/esm/client/utils.d.ts +0 -71
- package/lib/esm/contract/Address.d.ts +0 -13
- package/lib/esm/contract/AddressContract.d.ts +0 -5
- package/lib/esm/contract/AuditContract.d.ts +0 -5
- package/lib/esm/contract/BatchContract.d.ts +0 -5
- package/lib/esm/contract/MarketContract.d.ts +0 -5
- package/lib/esm/contract/OtherAuditContract.d.ts +0 -5
- package/lib/esm/contract/OtherBatchContract.d.ts +0 -5
- package/lib/esm/contract/OtherMarketContract.d.ts +0 -5
- package/lib/esm/contract/OtherProductContract.d.ts +0 -5
- package/lib/esm/contract/OtherProductImageContract.d.ts +0 -5
- package/lib/esm/contract/OtherProductSharedContract.d.ts +0 -5
- package/lib/esm/contract/OtherProductStrengthContract.d.ts +0 -5
- package/lib/esm/contract/Product.d.ts +0 -7
- package/lib/esm/contract/ProductContract.d.ts +0 -5
- package/lib/esm/contract/ProductStrengthContract.d.ts +0 -5
- package/lib/esm/contract/SegregatedPrivateDocumentContract.d.ts +0 -5
- package/lib/esm/contract/SegregatedSharedDocumentContract.d.ts +0 -5
- package/lib/esm/contract/User.d.ts +0 -7
- package/lib/esm/contract/UserContract.d.ts +0 -5
- package/lib/esm/contract/index.d.ts +0 -2
- package/lib/esm/contract/logging-context.d.ts +0 -8
- package/lib/esm/contract/models/Audit.d.ts +0 -13
- package/lib/esm/contract/models/BaseIdentifiedModel.d.ts +0 -7
- package/lib/esm/contract/models/BaseModel.d.ts +0 -7
- package/lib/esm/contract/models/Batch.d.ts +0 -18
- package/lib/esm/contract/models/GtinOwner.d.ts +0 -8
- package/lib/esm/contract/models/History.d.ts +0 -9
- package/lib/esm/contract/models/Leaflet.d.ts +0 -12
- package/lib/esm/contract/models/LeafletFile.d.ts +0 -9
- package/lib/esm/contract/models/Market.d.ts +0 -12
- package/lib/esm/contract/models/OtherAudit.d.ts +0 -15
- package/lib/esm/contract/models/OtherBatchShared.d.ts +0 -18
- package/lib/esm/contract/models/OtherLeaflet.d.ts +0 -16
- package/lib/esm/contract/models/OtherLeafletFile.d.ts +0 -10
- package/lib/esm/contract/models/OtherMarket.d.ts +0 -13
- package/lib/esm/contract/models/OtherProduct.d.ts +0 -12
- package/lib/esm/contract/models/OtherProductImage.d.ts +0 -9
- package/lib/esm/contract/models/OtherProductShared.d.ts +0 -18
- package/lib/esm/contract/models/OtherProductStrength.d.ts +0 -12
- package/lib/esm/contract/models/Product.d.ts +0 -15
- package/lib/esm/contract/models/ProductStrength.d.ts +0 -11
- package/lib/esm/contract/models/SegregatedDocument.d.ts +0 -18
- package/lib/esm/contract/models/constants.d.ts +0 -24
- package/lib/esm/contract/models/decorators-private.d.ts +0 -16
- package/lib/esm/contract/models/decorators.d.ts +0 -28
- package/lib/esm/contract/models/gtin.d.ts +0 -8
- package/lib/esm/contract/models/history-dec.d.ts +0 -6
- package/lib/esm/contracts/ContractAdapter.d.ts +0 -287
- package/lib/esm/contracts/ContractContext.d.ts +0 -89
- package/lib/esm/contracts/FabricContractDispatch.d.ts +0 -7
- package/lib/esm/contracts/FabricContractRepository.d.ts +0 -119
- package/lib/esm/contracts/FabricContractSequence.d.ts +0 -87
- package/lib/esm/contracts/FabricContractStatement.d.ts +0 -36
- package/lib/esm/contracts/MigrationContract.d.ts +0 -22
- package/lib/esm/contracts/PrivateSequence.d.ts +0 -15
- package/lib/esm/contracts/auth/decorators.d.ts +0 -6
- package/lib/esm/contracts/auth/index.d.ts +0 -1
- package/lib/esm/contracts/crud/crud-contract.d.ts +0 -199
- package/lib/esm/contracts/crud/index.d.ts +0 -2
- package/lib/esm/contracts/crud/serialized-crud-contract.d.ts +0 -42
- package/lib/esm/contracts/erc20/erc20contract.d.ts +0 -152
- package/lib/esm/contracts/erc20/index.d.ts +0 -2
- package/lib/esm/contracts/erc20/models.d.ts +0 -114
- package/lib/esm/contracts/index.d.ts +0 -19
- package/lib/esm/contracts/logging.d.ts +0 -54
- package/lib/esm/contracts/types.d.ts +0 -38
- package/lib/esm/contracts/uuid.d.ts +0 -2
- package/lib/esm/shared/overrides/overrides.d.ts +0 -1
- package/lib/index.d.ts +0 -8
- package/lib/shared/ClientSerializer.cjs +0 -81
- package/lib/shared/DeterministicSerializer.cjs +0 -106
- package/lib/shared/DeterministicSerializer.d.ts +0 -47
- package/lib/shared/SimpleDeterministicSerializer.cjs +0 -69
- package/lib/shared/SimpleDeterministicSerializer.d.ts +0 -7
- package/lib/shared/constants.cjs +0 -41
- package/lib/shared/decorators.cjs +0 -595
- package/lib/shared/decorators.d.ts +0 -81
- package/lib/shared/erc20/erc20-constants.cjs +0 -30
- package/lib/shared/erc20/index.d.ts +0 -1
- package/lib/shared/errors.cjs +0 -190
- package/lib/shared/errors.d.ts +0 -140
- package/lib/shared/events.cjs +0 -51
- package/lib/shared/fabric-types.cjs +0 -3
- package/lib/shared/fabric-types.d.ts +0 -32
- package/lib/shared/index.d.ts +0 -20
- package/lib/shared/interfaces/Checkable.cjs +0 -3
- package/lib/shared/interfaces/Checkable.d.ts +0 -23
- package/lib/shared/interfaces/index.d.ts +0 -1
- package/lib/shared/math.cjs +0 -66
- package/lib/shared/math.d.ts +0 -34
- package/lib/shared/model/FabricBaseModel.d.ts +0 -7
- package/lib/shared/model/FabricIdentifiedBaseModel.d.ts +0 -7
- package/lib/shared/model/Identity.cjs +0 -71
- package/lib/shared/model/Identity.d.ts +0 -42
- package/lib/shared/model/IdentityCredentials.cjs +0 -66
- package/lib/shared/model/IdentityCredentials.d.ts +0 -41
- package/lib/shared/model/index.cjs +0 -21
- package/lib/shared/model/index.d.ts +0 -4
- package/lib/shared/overrides/Model.cjs +0 -4
- package/lib/shared/overrides/Model.d.ts +0 -22
- package/lib/shared/overrides/index.d.ts +0 -2
- package/lib/shared/overrides/overrides.cjs +0 -93
- package/lib/shared/overrides/overrides.d.ts +0 -1
- package/lib/shared/types.cjs +0 -3
- package/lib/shared/types.d.ts +0 -125
- package/lib/version.cjs +0 -8
- package/lib/version.d.ts +0 -2
- /package/lib/{bin → types/bin}/cli.d.ts +0 -0
- /package/lib/{cli-module.d.ts → types/cli-module.d.ts} +0 -0
- /package/lib/{cli-utils.d.ts → types/cli-utils.d.ts} +0 -0
- /package/lib/{client → types/client}/FabricClientAdapter.d.ts +0 -0
- /package/lib/{client → types/client}/FabricClientDispatch.d.ts +0 -0
- /package/lib/{client → types/client}/FabricClientPaginator.d.ts +0 -0
- /package/lib/{client → types/client}/FabricClientRepository.d.ts +0 -0
- /package/lib/{client → types/client}/FabricClientStatement.d.ts +0 -0
- /package/lib/{client → types/client}/collections/generation.d.ts +0 -0
- /package/lib/{client → types/client}/collections/index.d.ts +0 -0
- /package/lib/{client → types/client}/constants.d.ts +0 -0
- /package/lib/{client → types/client}/crypto.d.ts +0 -0
- /package/lib/{client → types/client}/erc20/FabricERC20ClientRepository.d.ts +0 -0
- /package/lib/{client → types/client}/erc20/index.d.ts +0 -0
- /package/lib/{client → types/client}/fabric-fs.d.ts +0 -0
- /package/lib/{client → types/client}/fabric-hsm.d.ts +0 -0
- /package/lib/{client → types/client}/ids/id-extraction.d.ts +0 -0
- /package/lib/{client → types/client}/ids/index.d.ts +0 -0
- /package/lib/{client → types/client}/index.d.ts +0 -0
- /package/lib/{client → types/client}/indexes/generation.d.ts +0 -0
- /package/lib/{client → types/client}/indexes/index.d.ts +0 -0
- /package/lib/{client → types/client}/logging.d.ts +0 -0
- /package/lib/{client → types/client}/services/FabricEnrollmentService.d.ts +0 -0
- /package/lib/{client → types/client}/services/FabricIdentityService.d.ts +0 -0
- /package/lib/{client → types/client}/services/RegistrationRequestBuilder.d.ts +0 -0
- /package/lib/{client → types/client}/services/constants.d.ts +0 -0
- /package/lib/{client → types/client}/services/index.d.ts +0 -0
- /package/lib/{client → types/client}/types.d.ts +0 -0
- /package/lib/{client → types/client}/utils.d.ts +0 -0
- /package/lib/{contract → types/contract}/Address.d.ts +0 -0
- /package/lib/{contract → types/contract}/AddressContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/AuditContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/BatchContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/MarketContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherAuditContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherBatchContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherMarketContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherProductContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherProductImageContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherProductSharedContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/OtherProductStrengthContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/Product.d.ts +0 -0
- /package/lib/{contract → types/contract}/ProductContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/ProductStrengthContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/SegregatedPrivateDocumentContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/SegregatedSharedDocumentContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/User.d.ts +0 -0
- /package/lib/{contract → types/contract}/UserContract.d.ts +0 -0
- /package/lib/{contract → types/contract}/index.d.ts +0 -0
- /package/lib/{contract → types/contract}/logging-context.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/Audit.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/BaseIdentifiedModel.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/BaseModel.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/Batch.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/GtinOwner.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/History.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/Leaflet.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/LeafletFile.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/Market.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherAudit.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherBatchShared.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherLeaflet.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherLeafletFile.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherMarket.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherProduct.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherProductImage.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherProductShared.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/OtherProductStrength.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/Product.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/ProductStrength.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/SegregatedDocument.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/constants.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/decorators-private.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/decorators.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/gtin.d.ts +0 -0
- /package/lib/{contract → types/contract}/models/history-dec.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/ContractAdapter.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/ContractContext.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/FabricContractDispatch.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/FabricContractPaginator.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/FabricContractRepository.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/FabricContractRepositoryObservableHandler.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/FabricContractSequence.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/FabricContractStatement.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/MigrationContract.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/PrivateSequence.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/auth/decorators.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/auth/index.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/crud/crud-contract.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/crud/index.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/crud/serialized-crud-contract.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/erc20/erc20contract.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/erc20/index.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/erc20/models.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/index.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/logging.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/overrides.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/types.d.ts +0 -0
- /package/lib/{contracts → types/contracts}/uuid.d.ts +0 -0
- /package/lib/{esm → types}/index.d.ts +0 -0
- /package/lib/{esm → types}/shared/ClientSerializer.d.ts +0 -0
- /package/lib/{esm → types}/shared/DeterministicSerializer.d.ts +0 -0
- /package/lib/{esm → types}/shared/SimpleDeterministicSerializer.d.ts +0 -0
- /package/lib/{esm → types}/shared/constants.d.ts +0 -0
- /package/lib/{esm → types}/shared/decorators.d.ts +0 -0
- /package/lib/{esm → types}/shared/erc20/erc20-constants.d.ts +0 -0
- /package/lib/{esm → types}/shared/erc20/index.d.ts +0 -0
- /package/lib/{esm → types}/shared/errors.d.ts +0 -0
- /package/lib/{esm → types}/shared/events.d.ts +0 -0
- /package/lib/{esm → types}/shared/fabric-types.d.ts +0 -0
- /package/lib/{esm → types}/shared/index.d.ts +0 -0
- /package/lib/{esm → types}/shared/interfaces/Checkable.d.ts +0 -0
- /package/lib/{esm → types}/shared/interfaces/index.d.ts +0 -0
- /package/lib/{esm → types}/shared/math.d.ts +0 -0
- /package/lib/{esm → types}/shared/model/FabricBaseModel.d.ts +0 -0
- /package/lib/{esm → types}/shared/model/FabricIdentifiedBaseModel.d.ts +0 -0
- /package/lib/{esm → types}/shared/model/Identity.d.ts +0 -0
- /package/lib/{esm → types}/shared/model/IdentityCredentials.d.ts +0 -0
- /package/lib/{esm → types}/shared/model/index.d.ts +0 -0
- /package/lib/{esm → types}/shared/overrides/Model.d.ts +0 -0
- /package/lib/{esm → types}/shared/overrides/index.d.ts +0 -0
- /package/lib/{esm/contracts → types/shared/overrides}/overrides.d.ts +0 -0
- /package/lib/{esm → types}/shared/types.d.ts +0 -0
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FabricContractRepository = void 0;
|
|
4
|
-
require("./overrides.cjs");
|
|
5
|
-
const core_1 = require("@decaf-ts/core");
|
|
6
|
-
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
7
|
-
const FabricContractRepositoryObservableHandler_1 = require("./FabricContractRepositoryObservableHandler.cjs");
|
|
8
|
-
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
9
|
-
const decorators_1 = require("./../shared/decorators.cjs");
|
|
10
|
-
const fs_1 = require("fs");
|
|
11
|
-
/**
|
|
12
|
-
* @description Repository for Hyperledger Fabric chaincode models
|
|
13
|
-
* @summary Provides CRUD operations for models within Fabric chaincode contracts
|
|
14
|
-
* @template M - Type extending Model
|
|
15
|
-
* @template MangoQuery - Query type for CouchDB-like queries
|
|
16
|
-
* @template FabricContractAdapter - Adapter type for Fabric contract operations
|
|
17
|
-
* @template FabricContractFlags - Flags specific to Fabric contract operations
|
|
18
|
-
* @template FabricContractContext - Context type for Fabric contract operations
|
|
19
|
-
*
|
|
20
|
-
* @param {FabricContractAdapter} [adapter] - The adapter for interacting with the state database
|
|
21
|
-
* @param {Constructor<M>} [clazz] - The model constructor
|
|
22
|
-
* @param {Array<OperationKeys | BulkCrudOperationKeys | string>} [trackedEvents] - Events to track for observer notifications
|
|
23
|
-
*
|
|
24
|
-
* @class FabricContractRepository
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* // In a Fabric chaincode contract class
|
|
28
|
-
* import { FabricContractRepository, FabricContractAdapter } from '@decaf-ts/for-fabric';
|
|
29
|
-
*
|
|
30
|
-
* @table('assets')
|
|
31
|
-
* class Asset extends Model {
|
|
32
|
-
* @id()
|
|
33
|
-
* id: string;
|
|
34
|
-
*
|
|
35
|
-
* @property()
|
|
36
|
-
* data: string;
|
|
37
|
-
* }
|
|
38
|
-
*
|
|
39
|
-
* export class MyContract extends Contract {
|
|
40
|
-
* private adapter = new FabricContractAdapter();
|
|
41
|
-
* private repository: FabricContractRepository<Asset>;
|
|
42
|
-
*
|
|
43
|
-
* constructor() {
|
|
44
|
-
* super('MyContract');
|
|
45
|
-
* this.repository = new FabricContractRepository<Asset>(this.adapter, Asset);
|
|
46
|
-
* }
|
|
47
|
-
*
|
|
48
|
-
* @Transaction()
|
|
49
|
-
* async createAsset(ctx: Context, id: string, data: string): Promise<void> {
|
|
50
|
-
* const asset = new Asset();
|
|
51
|
-
* asset.id = id;
|
|
52
|
-
* asset.data = data;
|
|
53
|
-
*
|
|
54
|
-
* await this.repository.create(asset, { stub: ctx.stub });
|
|
55
|
-
* }
|
|
56
|
-
* }
|
|
57
|
-
* ```
|
|
58
|
-
* @mermaid
|
|
59
|
-
* sequenceDiagram
|
|
60
|
-
* participant Contract
|
|
61
|
-
* participant Repository
|
|
62
|
-
* participant Adapter
|
|
63
|
-
* participant StateDB
|
|
64
|
-
*
|
|
65
|
-
* Contract->>Repository: create(model, ctx)
|
|
66
|
-
* Repository->>Adapter: prepare(model, pk)
|
|
67
|
-
* Repository->>Adapter: create(tableName, id, record, transient, ctx)
|
|
68
|
-
* Adapter->>StateDB: putState(id, serializedData)
|
|
69
|
-
* StateDB-->>Adapter: Success
|
|
70
|
-
* Adapter-->>Repository: record
|
|
71
|
-
* Repository->>Adapter: revert(record, class, pk, id, transient)
|
|
72
|
-
* Adapter-->>Repository: model
|
|
73
|
-
* Repository-->>Contract: model
|
|
74
|
-
*/
|
|
75
|
-
class FabricContractRepository extends core_1.Repository {
|
|
76
|
-
constructor(adapter, clazz, omittedEvents) {
|
|
77
|
-
super(adapter, clazz);
|
|
78
|
-
this.omittedEvents = omittedEvents;
|
|
79
|
-
this._overrides = Object.assign({}, super["_overrides"], {
|
|
80
|
-
ignoreValidation: false,
|
|
81
|
-
ignoreHandlers: false,
|
|
82
|
-
allowRawStatements: true,
|
|
83
|
-
forcePrepareSimpleQueries: false,
|
|
84
|
-
forcePrepareComplexQueries: false,
|
|
85
|
-
rebuildWithTransient: false,
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
async create(model, ...args) {
|
|
89
|
-
const { ctx, log, ctxArgs } = this.logCtx(args, this.create);
|
|
90
|
-
log.debug(`Creating new ${this.class.name} in table ${decorator_validation_1.Model.tableName(this.class)}`);
|
|
91
|
-
// eslint-disable-next-line prefer-const
|
|
92
|
-
let { record, id, transient, segregated } = this.adapter.prepare(model, model[this.pk], ctx);
|
|
93
|
-
if (segregated)
|
|
94
|
-
ctx.put("segregatedData", segregated);
|
|
95
|
-
record = await this.adapter.create(this.class, id, record, ...ctxArgs);
|
|
96
|
-
return this.adapter.revert(record || {}, this.class, id, transient, ctx);
|
|
97
|
-
}
|
|
98
|
-
async createAll(models, ...args) {
|
|
99
|
-
if (!models.length)
|
|
100
|
-
return models;
|
|
101
|
-
const { ctx, log, ctxArgs } = this.logCtx(args, this.createAll);
|
|
102
|
-
log.debug(`Creating ${models.length} new ${this.class.name} in table ${decorator_validation_1.Model.tableName(this.class)}`);
|
|
103
|
-
const prepared = models.map((m) => this.adapter.prepare(m, ctx));
|
|
104
|
-
const ids = prepared.map((p) => p.id);
|
|
105
|
-
let records = prepared.map((p) => p.record);
|
|
106
|
-
const segregated = prepared.reduce((acc, p) => {
|
|
107
|
-
const cols = Object.keys(p.segregated || {});
|
|
108
|
-
cols.forEach((c) => {
|
|
109
|
-
acc[c] = acc[c] || {};
|
|
110
|
-
acc[c] = { ...acc[c], ...(p.segregated || {})[c] };
|
|
111
|
-
});
|
|
112
|
-
return acc;
|
|
113
|
-
}, {});
|
|
114
|
-
if (Object.keys(segregated).length) {
|
|
115
|
-
ctx.put("segregatedData", segregated);
|
|
116
|
-
}
|
|
117
|
-
records = await this.adapter.createAll(this.class, ids, records, ...ctxArgs);
|
|
118
|
-
return records.map((r, i) => this.adapter.revert(r, this.class, ids[i], prepared[i].transient, ctx));
|
|
119
|
-
}
|
|
120
|
-
async update(model, ...args) {
|
|
121
|
-
const { ctxArgs, log, ctx } = this.logCtx(args, this.update);
|
|
122
|
-
// eslint-disable-next-line prefer-const
|
|
123
|
-
let { record, id, transient, segregated } = this.adapter.prepare(model, ctx);
|
|
124
|
-
log.debug(`updating ${this.class.name} in table ${decorator_validation_1.Model.tableName(this.class)} with id ${id}`);
|
|
125
|
-
if (segregated)
|
|
126
|
-
ctx.put("segregatedData", segregated);
|
|
127
|
-
record = await this.adapter.update(this.class, id, record, ...ctxArgs);
|
|
128
|
-
return this.adapter.revert(record, this.class, id, transient, ctx);
|
|
129
|
-
}
|
|
130
|
-
async updateAll(models, ...args) {
|
|
131
|
-
const { ctx, log, ctxArgs } = this.logCtx(args, this.updateAll);
|
|
132
|
-
log.verbose(`Updating ${models.length} new ${this.class.name} in table ${decorator_validation_1.Model.tableName(this.class)}`);
|
|
133
|
-
const prepared = models.map((m) => this.adapter.prepare(m, ctx));
|
|
134
|
-
const ids = prepared.map((p) => p.id);
|
|
135
|
-
const records = prepared.map((p) => p.record);
|
|
136
|
-
const segregated = prepared.reduce((acc, p) => {
|
|
137
|
-
const cols = Object.keys(p.segregated || {});
|
|
138
|
-
cols.forEach((c) => {
|
|
139
|
-
acc[c] = acc[c] || {};
|
|
140
|
-
acc[c] = { ...acc[c], ...(p.segregated || {})[c] };
|
|
141
|
-
});
|
|
142
|
-
return acc;
|
|
143
|
-
}, {});
|
|
144
|
-
if (Object.keys(segregated).length) {
|
|
145
|
-
ctx.put("segregatedData", segregated);
|
|
146
|
-
}
|
|
147
|
-
const updated = await this.adapter.updateAll(this.class, ids, records, ...ctxArgs);
|
|
148
|
-
return updated.map((u, i) => this.adapter.revert(u, this.class, ids[i], prepared[i].transient, ctx));
|
|
149
|
-
}
|
|
150
|
-
async listBy(key, order, ...args) {
|
|
151
|
-
const { log, ctxArgs } = (await this.logCtx(args, core_1.PreparedStatementKeys.LIST_BY, true)).for(this.listBy);
|
|
152
|
-
log.verbose(`listing ${decorator_validation_1.Model.tableName(this.class)} by ${key} ${order}`);
|
|
153
|
-
return this.select()
|
|
154
|
-
.orderBy([key, order])
|
|
155
|
-
.execute(...ctxArgs);
|
|
156
|
-
}
|
|
157
|
-
async paginateBy(key, order, ref = {
|
|
158
|
-
offset: 1,
|
|
159
|
-
limit: 10,
|
|
160
|
-
}, ...args) {
|
|
161
|
-
ref.offset = ref.offset || 1;
|
|
162
|
-
ref.limit = ref.limit || 10;
|
|
163
|
-
const { offset, bookmark, limit } = ref;
|
|
164
|
-
if (!offset && !bookmark)
|
|
165
|
-
throw new core_1.QueryError(`PaginateBy needs a page or a bookmark`);
|
|
166
|
-
const { log, ctxArgs, ctx } = (await this.logCtx(args, core_1.PreparedStatementKeys.PAGE_BY, true)).for(this.paginateBy);
|
|
167
|
-
log.verbose(`paginating ${decorator_validation_1.Model.tableName(this.class)} with page size ${limit}`);
|
|
168
|
-
const msp = (0, decorators_1.extractMspId)(ctx.identity);
|
|
169
|
-
const { privateCols, sharedCols } = decorator_validation_1.Model.collectionsFor(this.class);
|
|
170
|
-
const collections = [
|
|
171
|
-
...new Set(await Promise.all([...privateCols, ...sharedCols].map((c) => typeof c === "string" ? c : c(this.class, msp, ctx)))),
|
|
172
|
-
];
|
|
173
|
-
(0, decorators_1.applySegregationFlags)(new this.class(), collections, ctx);
|
|
174
|
-
await (0, decorators_1.applyMirrorFlags)(this.class, msp, ctx);
|
|
175
|
-
let paginator;
|
|
176
|
-
if (offset && bookmark) {
|
|
177
|
-
paginator = await this.override({
|
|
178
|
-
forcePrepareComplexQueries: false,
|
|
179
|
-
forcePrepareSimpleQueries: false,
|
|
180
|
-
})
|
|
181
|
-
.select()
|
|
182
|
-
.orderBy([key, order])
|
|
183
|
-
.paginate(limit, bookmark, ...ctxArgs);
|
|
184
|
-
}
|
|
185
|
-
else if (offset) {
|
|
186
|
-
paginator = await this.override({
|
|
187
|
-
forcePrepareComplexQueries: false,
|
|
188
|
-
forcePrepareSimpleQueries: false,
|
|
189
|
-
})
|
|
190
|
-
.select()
|
|
191
|
-
.orderBy([key, order])
|
|
192
|
-
.paginate(limit, ...ctxArgs);
|
|
193
|
-
}
|
|
194
|
-
else {
|
|
195
|
-
throw new core_1.QueryError(`PaginateBy needs a page or a bookmark`);
|
|
196
|
-
}
|
|
197
|
-
const paged = await paginator.page(offset, bookmark, ...ctxArgs);
|
|
198
|
-
const totalCount = await countStoredEntries(ctx, this.class);
|
|
199
|
-
if (typeof totalCount === "number") {
|
|
200
|
-
paginator._recordCount = totalCount;
|
|
201
|
-
paginator._totalPages = Math.max(1, Math.ceil(totalCount / limit));
|
|
202
|
-
}
|
|
203
|
-
const serialization = paginator.serialize(paged);
|
|
204
|
-
if (process.env.PAGE_DEBUG) {
|
|
205
|
-
(0, fs_1.appendFileSync)("/tmp/fabric-paginate.log", JSON.stringify(Object.assign({
|
|
206
|
-
key,
|
|
207
|
-
order,
|
|
208
|
-
ref,
|
|
209
|
-
}, serialization)) + "\n");
|
|
210
|
-
}
|
|
211
|
-
return serialization;
|
|
212
|
-
}
|
|
213
|
-
async statement(name, ...args) {
|
|
214
|
-
const { log, ctx, ctxArgs } = (await this.logCtx(args, core_1.PersistenceKeys.STATEMENT, true)).for(this.statement);
|
|
215
|
-
if (!core_1.Repository.statements(this, name))
|
|
216
|
-
throw new core_1.QueryError(`Invalid prepared statement requested ${name}`);
|
|
217
|
-
if (ctx.logger) {
|
|
218
|
-
ctx.logger.info(`Repo statement: ${name} + ${args}`);
|
|
219
|
-
}
|
|
220
|
-
log.verbose(`Executing prepared statement ${name} with args ${ctxArgs}`);
|
|
221
|
-
let result;
|
|
222
|
-
try {
|
|
223
|
-
result = await this[name](...ctxArgs);
|
|
224
|
-
}
|
|
225
|
-
catch (e) {
|
|
226
|
-
if (e instanceof db_decorators_1.BaseError)
|
|
227
|
-
throw e;
|
|
228
|
-
throw new db_decorators_1.InternalError(`Failed to execute prepared statement ${name} with args ${ctxArgs}: ${e}`);
|
|
229
|
-
}
|
|
230
|
-
return result;
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* @description Gets the observer handler for this repository
|
|
234
|
-
* @summary Returns a FabricContractRepositoryObservableHandler instance
|
|
235
|
-
* @return {ObserverHandler} The observer handler
|
|
236
|
-
*/
|
|
237
|
-
ObserverHandler() {
|
|
238
|
-
return new FabricContractRepositoryObservableHandler_1.FabricContractRepositoryObservableHandler();
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* @description Updates observers based on tracked events
|
|
242
|
-
* @summary Filters events based on trackedEvents and delegates to the parent method
|
|
243
|
-
* @param {string} table - The table/collection name
|
|
244
|
-
* @param {OperationKeys | BulkCrudOperationKeys | string} event - The event type
|
|
245
|
-
* @param {EventIds} id - The event identifier
|
|
246
|
-
* @param {FabricContractContext} ctx - The Fabric contract context
|
|
247
|
-
* @param {...any[]} args - Additional arguments
|
|
248
|
-
* @return {Promise<void>} Promise that resolves when observers are updated
|
|
249
|
-
*/
|
|
250
|
-
async updateObservers(table, event, id, ...args) {
|
|
251
|
-
if (!this.omittedEvents || !this.omittedEvents.includes(event))
|
|
252
|
-
return await super.updateObservers(table, event, id, ...args);
|
|
253
|
-
}
|
|
254
|
-
logCtx(args, operation, allowCreate, overrides) {
|
|
255
|
-
const result = super.logCtx(args, operation, allowCreate, overrides);
|
|
256
|
-
return this.cleanContextualizedArgs(result);
|
|
257
|
-
}
|
|
258
|
-
cleanContextualizedArgs(args) {
|
|
259
|
-
if (args instanceof Promise) {
|
|
260
|
-
return args.then((ctxArgs) => this.applyCleanContext(ctxArgs));
|
|
261
|
-
}
|
|
262
|
-
return this.applyCleanContext(args);
|
|
263
|
-
}
|
|
264
|
-
applyCleanContext(ctxArgs) {
|
|
265
|
-
this.cleanContext(ctxArgs.ctx);
|
|
266
|
-
return ctxArgs;
|
|
267
|
-
}
|
|
268
|
-
cleanContext(ctx) {
|
|
269
|
-
ctx.put("segregated", undefined);
|
|
270
|
-
ctx.put("allowGatewayOverride", undefined);
|
|
271
|
-
return ctx;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
exports.FabricContractRepository = FabricContractRepository;
|
|
275
|
-
async function countStoredEntries(ctx, clazz) {
|
|
276
|
-
const stub = ctx?.stub;
|
|
277
|
-
if (!stub)
|
|
278
|
-
return undefined;
|
|
279
|
-
const table = decorator_validation_1.Model.tableName(clazz);
|
|
280
|
-
const prefix = `${table}_`;
|
|
281
|
-
const seen = new Set();
|
|
282
|
-
if (typeof stub.getStateByPartialCompositeKey === "function") {
|
|
283
|
-
const iterator = await stub.getStateByPartialCompositeKey(table, []);
|
|
284
|
-
try {
|
|
285
|
-
while (true) {
|
|
286
|
-
const result = await iterator.next();
|
|
287
|
-
if (result?.done)
|
|
288
|
-
break;
|
|
289
|
-
const key = result?.value?.key;
|
|
290
|
-
if (key && key.startsWith(prefix)) {
|
|
291
|
-
seen.add(key);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
finally {
|
|
296
|
-
if (iterator && typeof iterator.close === "function") {
|
|
297
|
-
await iterator.close();
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
if (stub.state) {
|
|
302
|
-
Object.keys(stub.state)
|
|
303
|
-
.filter((key) => key.startsWith(prefix))
|
|
304
|
-
.forEach((key) => seen.add(key));
|
|
305
|
-
}
|
|
306
|
-
const { privateCols, sharedCols } = decorator_validation_1.Model.collectionsFor(clazz);
|
|
307
|
-
const resolvers = [...privateCols, ...sharedCols];
|
|
308
|
-
if (resolvers.length && stub.privateState) {
|
|
309
|
-
const msp = (0, decorators_1.extractMspId)(ctx.identity);
|
|
310
|
-
const collections = await Promise.all(resolvers.map((resolver) => typeof resolver === "string" ? resolver : resolver(clazz, msp, ctx)));
|
|
311
|
-
for (const collection of collections) {
|
|
312
|
-
const entries = stub.privateState[collection];
|
|
313
|
-
if (!entries)
|
|
314
|
-
continue;
|
|
315
|
-
Object.keys(entries)
|
|
316
|
-
.filter((key) => key.startsWith(prefix))
|
|
317
|
-
.forEach((key) => seen.add(key));
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
return seen.size ? seen.size : undefined;
|
|
321
|
-
}
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ29udHJhY3RSZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9GYWJyaWNDb250cmFjdFJlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkJBQXFCO0FBQ3JCLHlDQWV3QjtBQUV4Qix5RUFBdUQ7QUFDdkQsK0dBQXdHO0FBQ3hHLDJEQU1pQztBQUlqQywyREFJOEI7QUFDOUIsMkJBQW9DO0FBRXBDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0ErREc7QUFDSCxNQUFhLHdCQUEwQyxTQUFRLGlCQUc5RDtJQVVDLFlBQ0UsT0FBK0IsRUFDL0IsS0FBc0IsRUFDWixhQUFrRTtRQUU1RSxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRlosa0JBQWEsR0FBYixhQUFhLENBQXFEO1FBWjNELGVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDckUsZ0JBQWdCLEVBQUUsS0FBSztZQUN2QixjQUFjLEVBQUUsS0FBSztZQUNyQixrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLHlCQUF5QixFQUFFLEtBQUs7WUFDaEMsMEJBQTBCLEVBQUUsS0FBSztZQUNqQyxvQkFBb0IsRUFBRSxLQUFLO1NBQzVCLENBQUMsQ0FBQztJQVFILENBQUM7SUFFUSxLQUFLLENBQUMsTUFBTSxDQUNuQixLQUFRLEVBQ1IsR0FBRyxJQUErQztRQUVsRCxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0QsR0FBRyxDQUFDLEtBQUssQ0FDUCxnQkFBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLGFB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QUMsT0FBTyxDQUFDO2lCQUNqQixNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3ZDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBcIi4vb3ZlcnJpZGVzXCI7XG5pbXBvcnQge1xuICBSZXBvc2l0b3J5LFxuICBPYnNlcnZlckhhbmRsZXIsXG4gIEV2ZW50SWRzLFxuICBDb250ZXh0dWFsQXJncyxcbiAgTWF5YmVDb250ZXh0dWFsQXJnLFxuICBRdWVyeUVycm9yLFxuICBQZXJzaXN0ZW5jZUtleXMsXG4gIFByZXBhcmVkU3RhdGVtZW50S2V5cyxcbiAgT3JkZXJEaXJlY3Rpb24sXG4gIFNlcmlhbGl6ZWRQYWdlLFxuICBQYWdpbmF0b3IsXG4gIERpcmVjdGlvbkxpbWl0T2Zmc2V0LFxuICBNZXRob2RPck9wZXJhdGlvbixcbiAgQ29udGV4dHVhbGl6ZWRBcmdzLFxufSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IEZhYnJpY0NvbnRyYWN0Q29udGV4dCB9IGZyb20gXCIuL0NvbnRyYWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBGYWJyaWNDb250cmFjdFJlcG9zaXRvcnlPYnNlcnZhYmxlSGFuZGxlciB9IGZyb20gXCIuL0ZhYnJpY0NvbnRyYWN0UmVwb3NpdG9yeU9ic2VydmFibGVIYW5kbGVyXCI7XG5pbXBvcnQge1xuICBCYXNlRXJyb3IsXG4gIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyxcbiAgSW50ZXJuYWxFcnJvcixcbiAgT3BlcmF0aW9uS2V5cyxcbiAgUHJpbWFyeUtleVR5cGUsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7IEZhYnJpY0NvbnRyYWN0QWRhcHRlciB9IGZyb20gXCIuL0NvbnRyYWN0QWRhcHRlclwiO1xuaW1wb3J0IHsgRmFicmljQ29udHJhY3RGbGFncyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQge1xuICBhcHBseU1pcnJvckZsYWdzLFxuICBhcHBseVNlZ3JlZ2F0aW9uRmxhZ3MsXG4gIGV4dHJhY3RNc3BJZCxcbn0gZnJvbSBcIi4uL3NoYXJlZC9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBhcHBlbmRGaWxlU3luYyB9IGZyb20gXCJmc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXBvc2l0b3J5IGZvciBIeXBlcmxlZGdlciBGYWJyaWMgY2hhaW5jb2RlIG1vZGVsc1xuICogQHN1bW1hcnkgUHJvdmlkZXMgQ1JVRCBvcGVyYXRpb25zIGZvciBtb2RlbHMgd2l0aGluIEZhYnJpYyBjaGFpbmNvZGUgY29udHJhY3RzXG4gKiBAdGVtcGxhdGUgTSAtIFR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gKiBAdGVtcGxhdGUgTWFuZ29RdWVyeSAtIFF1ZXJ5IHR5cGUgZm9yIENvdWNoREItbGlrZSBxdWVyaWVzXG4gKiBAdGVtcGxhdGUgRmFicmljQ29udHJhY3RBZGFwdGVyIC0gQWRhcHRlciB0eXBlIGZvciBGYWJyaWMgY29udHJhY3Qgb3BlcmF0aW9uc1xuICogQHRlbXBsYXRlIEZhYnJpY0NvbnRyYWN0RmxhZ3MgLSBGbGFncyBzcGVjaWZpYyB0byBGYWJyaWMgY29udHJhY3Qgb3BlcmF0aW9uc1xuICogQHRlbXBsYXRlIEZhYnJpY0NvbnRyYWN0Q29udGV4dCAtIENvbnRleHQgdHlwZSBmb3IgRmFicmljIGNvbnRyYWN0IG9wZXJhdGlvbnNcbiAqXG4gKiBAcGFyYW0ge0ZhYnJpY0NvbnRyYWN0QWRhcHRlcn0gW2FkYXB0ZXJdIC0gVGhlIGFkYXB0ZXIgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIHN0YXRlIGRhdGFiYXNlXG4gKiBAcGFyYW0ge0NvbnN0cnVjdG9yPE0+fSBbY2xhenpdIC0gVGhlIG1vZGVsIGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5PE9wZXJhdGlvbktleXMgfCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMgfCBzdHJpbmc+fSBbdHJhY2tlZEV2ZW50c10gLSBFdmVudHMgdG8gdHJhY2sgZm9yIG9ic2VydmVyIG5vdGlmaWNhdGlvbnNcbiAqXG4gKiBAY2xhc3MgRmFicmljQ29udHJhY3RSZXBvc2l0b3J5XG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gSW4gYSBGYWJyaWMgY2hhaW5jb2RlIGNvbnRyYWN0IGNsYXNzXG4gKiBpbXBvcnQgeyBGYWJyaWNDb250cmFjdFJlcG9zaXRvcnksIEZhYnJpY0NvbnRyYWN0QWRhcHRlciB9IGZyb20gJ0BkZWNhZi10cy9mb3ItZmFicmljJztcbiAqXG4gKiBAdGFibGUoJ2Fzc2V0cycpXG4gKiBjbGFzcyBBc3NldCBleHRlbmRzIE1vZGVsIHtcbiAqICAgQGlkKClcbiAqICAgaWQ6IHN0cmluZztcbiAqXG4gKiAgIEBwcm9wZXJ0eSgpXG4gKiAgIGRhdGE6IHN0cmluZztcbiAqIH1cbiAqXG4gKiBleHBvcnQgY2xhc3MgTXlDb250cmFjdCBleHRlbmRzIENvbnRyYWN0IHtcbiAqICAgcHJpdmF0ZSBhZGFwdGVyID0gbmV3IEZhYnJpY0NvbnRyYWN0QWRhcHRlcigpO1xuICogICBwcml2YXRlIHJlcG9zaXRvcnk6IEZhYnJpY0NvbnRyYWN0UmVwb3NpdG9yeTxBc3NldD47XG4gKlxuICogICBjb25zdHJ1Y3RvcigpIHtcbiAqICAgICBzdXBlcignTXlDb250cmFjdCcpO1xuICogICAgIHRoaXMucmVwb3NpdG9yeSA9IG5ldyBGYWJyaWNDb250cmFjdFJlcG9zaXRvcnk8QXNzZXQ+KHRoaXMuYWRhcHRlciwgQXNzZXQpO1xuICogICB9XG4gKlxuICogICBAVHJhbnNhY3Rpb24oKVxuICogICBhc3luYyBjcmVhdGVBc3NldChjdHg6IENvbnRleHQsIGlkOiBzdHJpbmcsIGRhdGE6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICogICAgIGNvbnN0IGFzc2V0ID0gbmV3IEFzc2V0KCk7XG4gKiAgICAgYXNzZXQuaWQgPSBpZDtcbiAqICAgICBhc3NldC5kYXRhID0gZGF0YTtcbiAqXG4gKiAgICAgYXdhaXQgdGhpcy5yZXBvc2l0b3J5LmNyZWF0ZShhc3NldCwgeyBzdHViOiBjdHguc3R1YiB9KTtcbiAqICAgfVxuICogfVxuICogYGBgXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENvbnRyYWN0XG4gKiAgIHBhcnRpY2lwYW50IFJlcG9zaXRvcnlcbiAqICAgcGFydGljaXBhbnQgQWRhcHRlclxuICogICBwYXJ0aWNpcGFudCBTdGF0ZURCXG4gKlxuICogICBDb250cmFjdC0+PlJlcG9zaXRvcnk6IGNyZWF0ZShtb2RlbCwgY3R4KVxuICogICBSZXBvc2l0b3J5LT4+QWRhcHRlcjogcHJlcGFyZShtb2RlbCwgcGspXG4gKiAgIFJlcG9zaXRvcnktPj5BZGFwdGVyOiBjcmVhdGUodGFibGVOYW1lLCBpZCwgcmVjb3JkLCB0cmFuc2llbnQsIGN0eClcbiAqICAgQWRhcHRlci0+PlN0YXRlREI6IHB1dFN0YXRlKGlkLCBzZXJpYWxpemVkRGF0YSlcbiAqICAgU3RhdGVEQi0tPj5BZGFwdGVyOiBTdWNjZXNzXG4gKiAgIEFkYXB0ZXItLT4+UmVwb3NpdG9yeTogcmVjb3JkXG4gKiAgIFJlcG9zaXRvcnktPj5BZGFwdGVyOiByZXZlcnQocmVjb3JkLCBjbGFzcywgcGssIGlkLCB0cmFuc2llbnQpXG4gKiAgIEFkYXB0ZXItLT4+UmVwb3NpdG9yeTogbW9kZWxcbiAqICAgUmVwb3NpdG9yeS0tPj5Db250cmFjdDogbW9kZWxcbiAqL1xuZXhwb3J0IGNsYXNzIEZhYnJpY0NvbnRyYWN0UmVwb3NpdG9yeTxNIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgUmVwb3NpdG9yeTxcbiAgTSxcbiAgRmFicmljQ29udHJhY3RBZGFwdGVyXG4+IHtcbiAgcHJvdGVjdGVkIG92ZXJyaWRlIF9vdmVycmlkZXMgPSBPYmplY3QuYXNzaWduKHt9LCBzdXBlcltcIl9vdmVycmlkZXNcIl0sIHtcbiAgICBpZ25vcmVWYWxpZGF0aW9uOiBmYWxzZSxcbiAgICBpZ25vcmVIYW5kbGVyczogZmFsc2UsXG4gICAgYWxsb3dSYXdTdGF0ZW1lbnRzOiB0cnVlLFxuICAgIGZvcmNlUHJlcGFyZVNpbXBsZVF1ZXJpZXM6IGZhbHNlLFxuICAgIGZvcmNlUHJlcGFyZUNvbXBsZXhRdWVyaWVzOiBmYWxzZSxcbiAgICByZWJ1aWxkV2l0aFRyYW5zaWVudDogZmFsc2UsXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGFkYXB0ZXI/OiBGYWJyaWNDb250cmFjdEFkYXB0ZXIsXG4gICAgY2xheno/OiBDb25zdHJ1Y3RvcjxNPixcbiAgICBwcm90ZWN0ZWQgb21pdHRlZEV2ZW50cz86IChPcGVyYXRpb25LZXlzIHwgQnVsa0NydWRPcGVyYXRpb25LZXlzIHwgc3RyaW5nKVtdXG4gICkge1xuICAgIHN1cGVyKGFkYXB0ZXIsIGNsYXp6KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZShcbiAgICBtb2RlbDogTSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0PlxuICApOiBQcm9taXNlPE0+IHtcbiAgICBjb25zdCB7IGN0eCwgbG9nLCBjdHhBcmdzIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLmNyZWF0ZSk7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYENyZWF0aW5nIG5ldyAke3RoaXMuY2xhc3MubmFtZX0gaW4gdGFibGUgJHtNb2RlbC50YWJsZU5hbWUodGhpcy5jbGFzcyl9YFxuICAgICk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IHJlY29yZCwgaWQsIHRyYW5zaWVudCwgc2VncmVnYXRlZCB9ID0gdGhpcy5hZGFwdGVyLnByZXBhcmUoXG4gICAgICBtb2RlbCxcbiAgICAgIG1vZGVsW3RoaXMucGtdIGFzIGFueSxcbiAgICAgIGN0eFxuICAgICk7XG4gICAgaWYgKHNlZ3JlZ2F0ZWQpIGN0eC5wdXQoXCJzZWdyZWdhdGVkRGF0YVwiLCBzZWdyZWdhdGVkKTtcbiAgICByZWNvcmQgPSBhd2FpdCB0aGlzLmFkYXB0ZXIuY3JlYXRlKHRoaXMuY2xhc3MsIGlkLCByZWNvcmQsIC4uLmN0eEFyZ3MpO1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIucmV2ZXJ0PE0+KHJlY29yZCB8fCB7fSwgdGhpcy5jbGFzcywgaWQsIHRyYW5zaWVudCwgY3R4KTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZUFsbChcbiAgICBtb2RlbHM6IE1bXSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0PlxuICApOiBQcm9taXNlPE1bXT4ge1xuICAgIGlmICghbW9kZWxzLmxlbmd0aCkgcmV0dXJuIG1vZGVscztcbiAgICBjb25zdCB7IGN0eCwgbG9nLCBjdHhBcmdzIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLmNyZWF0ZUFsbCk7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYENyZWF0aW5nICR7bW9kZWxzLmxlbmd0aH0gbmV3ICR7dGhpcy5jbGFzcy5uYW1lfSBpbiB0YWJsZSAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX1gXG4gICAgKTtcblxuICAgIGNvbnN0IHByZXBhcmVkID0gbW9kZWxzLm1hcCgobSkgPT4gdGhpcy5hZGFwdGVyLnByZXBhcmUobSwgY3R4KSk7XG4gICAgY29uc3QgaWRzID0gcHJlcGFyZWQubWFwKChwKSA9PiBwLmlkKTtcbiAgICBsZXQgcmVjb3JkcyA9IHByZXBhcmVkLm1hcCgocCkgPT4gcC5yZWNvcmQpO1xuICAgIGNvbnN0IHNlZ3JlZ2F0ZWQgPSBwcmVwYXJlZC5yZWR1Y2UoXG4gICAgICAoYWNjLCBwKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBPYmplY3Qua2V5cyhwLnNlZ3JlZ2F0ZWQgfHwge30pO1xuICAgICAgICBjb2xzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgICBhY2NbY10gPSBhY2NbY10gfHwge307XG4gICAgICAgICAgYWNjW2NdID0geyAuLi5hY2NbY10sIC4uLihwLnNlZ3JlZ2F0ZWQgfHwge30pW2NdIH07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIGFueT5cbiAgICApO1xuICAgIGlmIChPYmplY3Qua2V5cyhzZWdyZWdhdGVkKS5sZW5ndGgpIHtcbiAgICAgIGN0eC5wdXQoXCJzZWdyZWdhdGVkRGF0YVwiLCBzZWdyZWdhdGVkKTtcbiAgICB9XG4gICAgcmVjb3JkcyA9IGF3YWl0IHRoaXMuYWRhcHRlci5jcmVhdGVBbGwoXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgaWRzIGFzIFByaW1hcnlLZXlUeXBlW10sXG4gICAgICByZWNvcmRzLFxuICAgICAgLi4uY3R4QXJnc1xuICAgICk7XG4gICAgcmV0dXJuIHJlY29yZHMubWFwKChyLCBpKSA9PlxuICAgICAgdGhpcy5hZGFwdGVyLnJldmVydChyLCB0aGlzLmNsYXNzLCBpZHNbaV0sIHByZXBhcmVkW2ldLnRyYW5zaWVudCwgY3R4KVxuICAgICk7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyB1cGRhdGUoXG4gICAgbW9kZWw6IE0sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPEZhYnJpY0NvbnRyYWN0Q29udGV4dD5cbiAgKTogUHJvbWlzZTxNPiB7XG4gICAgY29uc3QgeyBjdHhBcmdzLCBsb2csIGN0eCB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy51cGRhdGUpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgeyByZWNvcmQsIGlkLCB0cmFuc2llbnQsIHNlZ3JlZ2F0ZWQgfSA9IHRoaXMuYWRhcHRlci5wcmVwYXJlKFxuICAgICAgbW9kZWwsXG4gICAgICBjdHhcbiAgICApO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGB1cGRhdGluZyAke3RoaXMuY2xhc3MubmFtZX0gaW4gdGFibGUgJHtNb2RlbC50YWJsZU5hbWUodGhpcy5jbGFzcyl9IHdpdGggaWQgJHtpZH1gXG4gICAgKTtcbiAgICBpZiAoc2VncmVnYXRlZCkgY3R4LnB1dChcInNlZ3JlZ2F0ZWREYXRhXCIsIHNlZ3JlZ2F0ZWQpO1xuICAgIHJlY29yZCA9IGF3YWl0IHRoaXMuYWRhcHRlci51cGRhdGUodGhpcy5jbGFzcywgaWQsIHJlY29yZCwgLi4uY3R4QXJncyk7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5yZXZlcnQ8TT4ocmVjb3JkLCB0aGlzLmNsYXNzLCBpZCwgdHJhbnNpZW50LCBjdHgpO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgdXBkYXRlQWxsKFxuICAgIG1vZGVsczogTVtdLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxGYWJyaWNDb250cmFjdENvbnRleHQ+XG4gICk6IFByb21pc2U8TVtdPiB7XG4gICAgY29uc3QgeyBjdHgsIGxvZywgY3R4QXJncyB9ID0gdGhpcy5sb2dDdHgoYXJncywgdGhpcy51cGRhdGVBbGwpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYFVwZGF0aW5nICR7bW9kZWxzLmxlbmd0aH0gbmV3ICR7dGhpcy5jbGFzcy5uYW1lfSBpbiB0YWJsZSAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX1gXG4gICAgKTtcblxuICAgIGNvbnN0IHByZXBhcmVkID0gbW9kZWxzLm1hcCgobSkgPT4gdGhpcy5hZGFwdGVyLnByZXBhcmUobSwgY3R4KSk7XG4gICAgY29uc3QgaWRzID0gcHJlcGFyZWQubWFwKChwKSA9PiBwLmlkKTtcbiAgICBjb25zdCByZWNvcmRzID0gcHJlcGFyZWQubWFwKChwKSA9PiBwLnJlY29yZCk7XG4gICAgY29uc3Qgc2VncmVnYXRlZCA9IHByZXBhcmVkLnJlZHVjZShcbiAgICAgIChhY2MsIHApID0+IHtcbiAgICAgICAgY29uc3QgY29scyA9IE9iamVjdC5rZXlzKHAuc2VncmVnYXRlZCB8fCB7fSk7XG4gICAgICAgIGNvbHMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICAgIGFjY1tjXSA9IGFjY1tjXSB8fCB7fTtcbiAgICAgICAgICBhY2NbY10gPSB7IC4uLmFjY1tjXSwgLi4uKHAuc2VncmVnYXRlZCB8fCB7fSlbY10gfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgICB9LFxuICAgICAge30gYXMgUmVjb3JkPHN0cmluZywgYW55PlxuICAgICk7XG4gICAgaWYgKE9iamVjdC5rZXlzKHNlZ3JlZ2F0ZWQpLmxlbmd0aCkge1xuICAgICAgY3R4LnB1dChcInNlZ3JlZ2F0ZWREYXRhXCIsIHNlZ3JlZ2F0ZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCB0aGlzLmFkYXB0ZXIudXBkYXRlQWxsKFxuICAgICAgdGhpcy5jbGFzcyxcbiAgICAgIGlkcyxcbiAgICAgIHJlY29yZHMsXG4gICAgICAuLi5jdHhBcmdzXG4gICAgKTtcbiAgICByZXR1cm4gdXBkYXRlZC5tYXAoKHUsIGkpID0+XG4gICAgICB0aGlzLmFkYXB0ZXIucmV2ZXJ0KHUsIHRoaXMuY2xhc3MsIGlkc1tpXSwgcHJlcGFyZWRbaV0udHJhbnNpZW50LCBjdHgpXG4gICAgKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIGxpc3RCeShcbiAgICBrZXk6IGtleW9mIE0sXG4gICAgb3JkZXI6IE9yZGVyRGlyZWN0aW9uLFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxGYWJyaWNDb250cmFjdENvbnRleHQ+XG4gICkge1xuICAgIGNvbnN0IHsgbG9nLCBjdHhBcmdzIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBQcmVwYXJlZFN0YXRlbWVudEtleXMuTElTVF9CWSwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLmxpc3RCeSk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgbGlzdGluZyAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX0gYnkgJHtrZXkgYXMgc3RyaW5nfSAke29yZGVyfWBcbiAgICApO1xuICAgIHJldHVybiB0aGlzLnNlbGVjdCgpXG4gICAgICAub3JkZXJCeShba2V5LCBvcmRlcl0pXG4gICAgICAuZXhlY3V0ZSguLi5jdHhBcmdzKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHBhZ2luYXRlQnkoXG4gICAga2V5OiBrZXlvZiBNLFxuICAgIG9yZGVyOiBPcmRlckRpcmVjdGlvbixcbiAgICByZWY6IE9taXQ8RGlyZWN0aW9uTGltaXRPZmZzZXQsIFwiZGlyZWN0aW9uXCI+ID0ge1xuICAgICAgb2Zmc2V0OiAxLFxuICAgICAgbGltaXQ6IDEwLFxuICAgIH0sXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPEZhYnJpY0NvbnRyYWN0Q29udGV4dD5cbiAgKTogUHJvbWlzZTxTZXJpYWxpemVkUGFnZTxNPj4ge1xuICAgIHJlZi5vZmZzZXQgPSByZWYub2Zmc2V0IHx8IDE7XG4gICAgcmVmLmxpbWl0ID0gcmVmLmxpbWl0IHx8IDEwO1xuICAgIGNvbnN0IHsgb2Zmc2V0LCBib29rbWFyaywgbGltaXQgfSA9IHJlZjtcbiAgICBpZiAoIW9mZnNldCAmJiAhYm9va21hcmspXG4gICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihgUGFnaW5hdGVCeSBuZWVkcyBhIHBhZ2Ugb3IgYSBib29rbWFya2ApO1xuICAgIGNvbnN0IHsgbG9nLCBjdHhBcmdzLCBjdHggfSA9IChcbiAgICAgIGF3YWl0IHRoaXMubG9nQ3R4KGFyZ3MsIFByZXBhcmVkU3RhdGVtZW50S2V5cy5QQUdFX0JZLCB0cnVlKVxuICAgICkuZm9yKHRoaXMucGFnaW5hdGVCeSk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgcGFnaW5hdGluZyAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX0gd2l0aCBwYWdlIHNpemUgJHtsaW1pdH1gXG4gICAgKTtcblxuICAgIGNvbnN0IG1zcCA9IGV4dHJhY3RNc3BJZChjdHguaWRlbnRpdHkpO1xuICAgIGNvbnN0IHsgcHJpdmF0ZUNvbHMsIHNoYXJlZENvbHMgfSA9IE1vZGVsLmNvbGxlY3Rpb25zRm9yKHRoaXMuY2xhc3MpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gW1xuICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgWy4uLnByaXZhdGVDb2xzLCAuLi5zaGFyZWRDb2xzXS5tYXAoKGMpID0+XG4gICAgICAgICAgICB0eXBlb2YgYyA9PT0gXCJzdHJpbmdcIiA/IGMgOiBjKHRoaXMuY2xhc3MsIG1zcCwgY3R4KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICBdO1xuICAgIGFwcGx5U2VncmVnYXRpb25GbGFncyhuZXcgdGhpcy5jbGFzcygpLCBjb2xsZWN0aW9ucywgY3R4KTtcbiAgICBhd2FpdCBhcHBseU1pcnJvckZsYWdzKHRoaXMuY2xhc3MsIG1zcCwgY3R4KTtcblxuICAgIGxldCBwYWdpbmF0b3I6IFBhZ2luYXRvcjxNPjtcbiAgICBpZiAob2Zmc2V0ICYmIGJvb2ttYXJrKSB7XG4gICAgICBwYWdpbmF0b3IgPSBhd2FpdCB0aGlzLm92ZXJyaWRlKHtcbiAgICAgICAgZm9yY2VQcmVwYXJlQ29tcGxleFF1ZXJpZXM6IGZhbHNlLFxuICAgICAgICBmb3JjZVByZXBhcmVTaW1wbGVRdWVyaWVzOiBmYWxzZSxcbiAgICAgIH0gYXMgYW55KVxuICAgICAgICAuc2VsZWN0KClcbiAgICAgICAgLm9yZGVyQnkoW2tleSwgb3JkZXJdKVxuICAgICAgICAucGFnaW5hdGUobGltaXQgYXMgbnVtYmVyLCBib29rbWFyaywgLi4uY3R4QXJncyk7XG4gICAgfSBlbHNlIGlmIChvZmZzZXQpIHtcbiAgICAgIHBhZ2luYXRvciA9IGF3YWl0IHRoaXMub3ZlcnJpZGUoe1xuICAgICAgICBmb3JjZVByZXBhcmVDb21wbGV4UXVlcmllczogZmFsc2UsXG4gICAgICAgIGZvcmNlUHJlcGFyZVNpbXBsZVF1ZXJpZXM6IGZhbHNlLFxuICAgICAgfSBhcyBhbnkpXG4gICAgICAgIC5zZWxlY3QoKVxuICAgICAgICAub3JkZXJCeShba2V5LCBvcmRlcl0pXG4gICAgICAgIC5wYWdpbmF0ZShsaW1pdCBhcyBudW1iZXIsIC4uLmN0eEFyZ3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihgUGFnaW5hdGVCeSBuZWVkcyBhIHBhZ2Ugb3IgYSBib29rbWFya2ApO1xuICAgIH1cbiAgICBjb25zdCBwYWdlZCA9IGF3YWl0IHBhZ2luYXRvci5wYWdlKG9mZnNldCwgYm9va21hcmssIC4uLmN0eEFyZ3MpO1xuICAgIGNvbnN0IHRvdGFsQ291bnQgPSBhd2FpdCBjb3VudFN0b3JlZEVudHJpZXMoY3R4LCB0aGlzLmNsYXNzKTtcbiAgICBpZiAodHlwZW9mIHRvdGFsQ291bnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIChwYWdpbmF0b3IgYXMgYW55KS5fcmVjb3JkQ291bnQgPSB0b3RhbENvdW50O1xuICAgICAgKHBhZ2luYXRvciBhcyBhbnkpLl90b3RhbFBhZ2VzID0gTWF0aC5tYXgoXG4gICAgICAgIDEsXG4gICAgICAgIE1hdGguY2VpbCh0b3RhbENvdW50IC8gbGltaXQpXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBzZXJpYWxpemF0aW9uID0gcGFnaW5hdG9yLnNlcmlhbGl6ZShwYWdlZCkgYXMgU2VyaWFsaXplZFBhZ2U8TT47XG4gICAgaWYgKHByb2Nlc3MuZW52LlBBR0VfREVCVUcpIHtcbiAgICAgIGFwcGVuZEZpbGVTeW5jKFxuICAgICAgICBcIi90bXAvZmFicmljLXBhZ2luYXRlLmxvZ1wiLFxuICAgICAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgIG9yZGVyLFxuICAgICAgICAgICAgICByZWYsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VyaWFsaXphdGlvblxuICAgICAgICAgIClcbiAgICAgICAgKSArIFwiXFxuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBzZXJpYWxpemF0aW9uO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgc3RhdGVtZW50KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0PlxuICApIHtcbiAgICBjb25zdCB7IGxvZywgY3R4LCBjdHhBcmdzIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBQZXJzaXN0ZW5jZUtleXMuU1RBVEVNRU5ULCB0cnVlKVxuICAgICkuZm9yKHRoaXMuc3RhdGVtZW50KTtcbiAgICBpZiAoIVJlcG9zaXRvcnkuc3RhdGVtZW50cyh0aGlzLCBuYW1lIGFzIGtleW9mIHR5cGVvZiB0aGlzKSlcbiAgICAgIHRocm93IG5ldyBRdWVyeUVycm9yKGBJbnZhbGlkIHByZXBhcmVkIHN0YXRlbWVudCByZXF1ZXN0ZWQgJHtuYW1lfWApO1xuICAgIGlmIChjdHgubG9nZ2VyKSB7XG4gICAgICBjdHgubG9nZ2VyLmluZm8oYFJlcG8gc3RhdGVtZW50OiAke25hbWV9ICsgJHthcmdzfWApO1xuICAgIH1cbiAgICBsb2cudmVyYm9zZShgRXhlY3V0aW5nIHByZXBhcmVkIHN0YXRlbWVudCAke25hbWV9IHdpdGggYXJncyAke2N0eEFyZ3N9YCk7XG5cbiAgICBsZXQgcmVzdWx0OiBhbnk7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0ICh0aGlzIGFzIGFueSlbbmFtZV0oLi4uY3R4QXJncyk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBCYXNlRXJyb3IpIHRocm93IGU7XG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBleGVjdXRlIHByZXBhcmVkIHN0YXRlbWVudCAke25hbWV9IHdpdGggYXJncyAke2N0eEFyZ3N9OiAke2V9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBvYnNlcnZlciBoYW5kbGVyIGZvciB0aGlzIHJlcG9zaXRvcnlcbiAgICogQHN1bW1hcnkgUmV0dXJucyBhIEZhYnJpY0NvbnRyYWN0UmVwb3NpdG9yeU9ic2VydmFibGVIYW5kbGVyIGluc3RhbmNlXG4gICAqIEByZXR1cm4ge09ic2VydmVySGFuZGxlcn0gVGhlIG9ic2VydmVyIGhhbmRsZXJcbiAgICovXG4gIG92ZXJyaWRlIE9ic2VydmVySGFuZGxlcigpOiBPYnNlcnZlckhhbmRsZXIge1xuICAgIHJldHVybiBuZXcgRmFicmljQ29udHJhY3RSZXBvc2l0b3J5T2JzZXJ2YWJsZUhhbmRsZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBvYnNlcnZlcnMgYmFzZWQgb24gdHJhY2tlZCBldmVudHNcbiAgICogQHN1bW1hcnkgRmlsdGVycyBldmVudHMgYmFzZWQgb24gdHJhY2tlZEV2ZW50cyBhbmQgZGVsZWdhdGVzIHRvIHRoZSBwYXJlbnQgbWV0aG9kXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZSAtIFRoZSB0YWJsZS9jb2xsZWN0aW9uIG5hbWVcbiAgICogQHBhcmFtIHtPcGVyYXRpb25LZXlzIHwgQnVsa0NydWRPcGVyYXRpb25LZXlzIHwgc3RyaW5nfSBldmVudCAtIFRoZSBldmVudCB0eXBlXG4gICAqIEBwYXJhbSB7RXZlbnRJZHN9IGlkIC0gVGhlIGV2ZW50IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIHtGYWJyaWNDb250cmFjdENvbnRleHR9IGN0eCAtIFRoZSBGYWJyaWMgY29udHJhY3QgY29udGV4dFxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHNcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gb2JzZXJ2ZXJzIGFyZSB1cGRhdGVkXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyB1cGRhdGVPYnNlcnZlcnMoXG4gICAgdGFibGU6IENvbnN0cnVjdG9yPE0+IHwgc3RyaW5nLFxuICAgIGV2ZW50OiBPcGVyYXRpb25LZXlzIHwgQnVsa0NydWRPcGVyYXRpb25LZXlzIHwgc3RyaW5nLFxuICAgIGlkOiBFdmVudElkcyxcbiAgICAuLi5hcmdzOiBDb250ZXh0dWFsQXJnczxGYWJyaWNDb250cmFjdENvbnRleHQ+XG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5vbWl0dGVkRXZlbnRzIHx8ICF0aGlzLm9taXR0ZWRFdmVudHMuaW5jbHVkZXMoZXZlbnQpKVxuICAgICAgcmV0dXJuIGF3YWl0IHN1cGVyLnVwZGF0ZU9ic2VydmVycyh0YWJsZSwgZXZlbnQsIGlkLCAuLi5hcmdzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0LCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRFxuICApOiBDb250ZXh0dWFsaXplZEFyZ3M8XG4gICAgRmFicmljQ29udHJhY3RDb250ZXh0LFxuICAgIEFSR1MsXG4gICAgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlXG4gID47XG4gIHByb3RlY3RlZCBvdmVycmlkZSBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0LCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRCxcbiAgICBhbGxvd0NyZWF0ZTogZmFsc2VcbiAgKTogQ29udGV4dHVhbGl6ZWRBcmdzPFxuICAgIEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICBBUkdTLFxuICAgIE1FVEhPRCBleHRlbmRzIHN0cmluZyA/IHRydWUgOiBmYWxzZVxuICA+O1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbG9nQ3R4PFxuICAgIEFSR1MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLFxuICAgIE1FVEhPRCBleHRlbmRzIE1ldGhvZE9yT3BlcmF0aW9uID0gTWV0aG9kT3JPcGVyYXRpb24sXG4gID4oXG4gICAgYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPEZhYnJpY0NvbnRyYWN0Q29udGV4dCwgQVJHUz4sXG4gICAgb3BlcmF0aW9uOiBNRVRIT0QsXG4gICAgYWxsb3dDcmVhdGU6IHRydWVcbiAgKTogUHJvbWlzZTxcbiAgICBDb250ZXh0dWFsaXplZEFyZ3M8XG4gICAgICBGYWJyaWNDb250cmFjdENvbnRleHQsXG4gICAgICBBUkdTLFxuICAgICAgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlXG4gICAgPlxuICA+O1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbG9nQ3R4PFxuICAgIEFSR1MgZXh0ZW5kcyBhbnlbXSA9IGFueVtdLFxuICAgIE1FVEhPRCBleHRlbmRzIE1ldGhvZE9yT3BlcmF0aW9uID0gTWV0aG9kT3JPcGVyYXRpb24sXG4gID4oXG4gICAgYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPEZhYnJpY0NvbnRyYWN0Q29udGV4dCwgQVJHUz4sXG4gICAgb3BlcmF0aW9uOiBNRVRIT0QsXG4gICAgYWxsb3dDcmVhdGU6IHRydWUsXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxGYWJyaWNDb250cmFjdEZsYWdzPlxuICApOiBQcm9taXNlPFxuICAgIENvbnRleHR1YWxpemVkQXJnczxcbiAgICAgIEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICAgIEFSR1MsXG4gICAgICBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2VcbiAgICA+XG4gID47XG4gIHByb3RlY3RlZCBvdmVycmlkZSBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0LCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRCxcbiAgICBhbGxvd0NyZWF0ZTogZmFsc2UsXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxGYWJyaWNDb250cmFjdEZsYWdzPlxuICApOiBDb250ZXh0dWFsaXplZEFyZ3M8XG4gICAgRmFicmljQ29udHJhY3RDb250ZXh0LFxuICAgIEFSR1MsXG4gICAgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlXG4gID47XG4gIHByb3RlY3RlZCBvdmVycmlkZSBsb2dDdHg8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdID0gYW55W10sXG4gICAgTUVUSE9EIGV4dGVuZHMgTWV0aG9kT3JPcGVyYXRpb24gPSBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBhcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0LCBBUkdTPixcbiAgICBvcGVyYXRpb246IE1FVEhPRCxcbiAgICBhbGxvd0NyZWF0ZT86IGJvb2xlYW4sXG4gICAgb3ZlcnJpZGVzPzogUGFydGlhbDxGYWJyaWNDb250cmFjdEZsYWdzPlxuICApOlxuICAgIHwgQ29udGV4dHVhbGl6ZWRBcmdzPFxuICAgICAgICBGYWJyaWNDb250cmFjdENvbnRleHQsXG4gICAgICAgIEFSR1MsXG4gICAgICAgIE1FVEhPRCBleHRlbmRzIHN0cmluZyA/IHRydWUgOiBmYWxzZVxuICAgICAgPlxuICAgIHwgUHJvbWlzZTxcbiAgICAgICAgQ29udGV4dHVhbGl6ZWRBcmdzPFxuICAgICAgICAgIEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICAgICAgICBBUkdTLFxuICAgICAgICAgIE1FVEhPRCBleHRlbmRzIHN0cmluZyA/IHRydWUgOiBmYWxzZVxuICAgICAgICA+XG4gICAgICA+IHtcbiAgICBjb25zdCByZXN1bHQgPSBzdXBlci5sb2dDdHgoYXJncywgb3BlcmF0aW9uLCBhbGxvd0NyZWF0ZSBhcyBhbnksIG92ZXJyaWRlcyk7XG4gICAgcmV0dXJuIHRoaXMuY2xlYW5Db250ZXh0dWFsaXplZEFyZ3MocmVzdWx0KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5Db250ZXh0dWFsaXplZEFyZ3M8XG4gICAgQVJHUyBleHRlbmRzIGFueVtdLFxuICAgIE1FVEhPRCBleHRlbmRzIE1ldGhvZE9yT3BlcmF0aW9uLFxuICA+KFxuICAgIGFyZ3M6XG4gICAgICB8IENvbnRleHR1YWxpemVkQXJnczxcbiAgICAgICAgICBGYWJyaWNDb250cmFjdENvbnRleHQsXG4gICAgICAgICAgQVJHUyxcbiAgICAgICAgICBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgPlxuICAgICAgfCBQcm9taXNlPFxuICAgICAgICAgIENvbnRleHR1YWxpemVkQXJnczxcbiAgICAgICAgICAgIEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgICAgICAgICAgIEFSR1MsXG4gICAgICAgICAgICBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgICA+XG4gICAgICAgID5cbiAgKTpcbiAgICB8IENvbnRleHR1YWxpemVkQXJnczxcbiAgICAgICAgRmFicmljQ29udHJhY3RDb250ZXh0LFxuICAgICAgICBBUkdTLFxuICAgICAgICBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2VcbiAgICAgID5cbiAgICB8IFByb21pc2U8XG4gICAgICAgIENvbnRleHR1YWxpemVkQXJnczxcbiAgICAgICAgICBGYWJyaWNDb250cmFjdENvbnRleHQsXG4gICAgICAgICAgQVJHUyxcbiAgICAgICAgICBNRVRIT0QgZXh0ZW5kcyBzdHJpbmcgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgPlxuICAgICAgPiB7XG4gICAgaWYgKGFyZ3MgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gYXJncy50aGVuKChjdHhBcmdzKSA9PiB0aGlzLmFwcGx5Q2xlYW5Db250ZXh0KGN0eEFyZ3MpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBwbHlDbGVhbkNvbnRleHQoYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q2xlYW5Db250ZXh0PFxuICAgIEFSR1MgZXh0ZW5kcyBhbnlbXSxcbiAgICBNRVRIT0QgZXh0ZW5kcyBNZXRob2RPck9wZXJhdGlvbixcbiAgPihcbiAgICBjdHhBcmdzOiBDb250ZXh0dWFsaXplZEFyZ3M8XG4gICAgICBGYWJyaWNDb250cmFjdENvbnRleHQsXG4gICAgICBBUkdTLFxuICAgICAgTUVUSE9EIGV4dGVuZHMgc3RyaW5nID8gdHJ1ZSA6IGZhbHNlXG4gICAgPlxuICApIHtcbiAgICB0aGlzLmNsZWFuQ29udGV4dChjdHhBcmdzLmN0eCk7XG4gICAgcmV0dXJuIGN0eEFyZ3M7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuQ29udGV4dChjdHg6IEZhYnJpY0NvbnRyYWN0Q29udGV4dCk6IEZhYnJpY0NvbnRyYWN0Q29udGV4dCB7XG4gICAgY3R4LnB1dChcInNlZ3JlZ2F0ZWRcIiwgdW5kZWZpbmVkKTtcbiAgICBjdHgucHV0KFwiYWxsb3dHYXRld2F5T3ZlcnJpZGVcIiwgdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gY3R4O1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvdW50U3RvcmVkRW50cmllczxNIGV4dGVuZHMgTW9kZWw+KFxuICBjdHg6IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgY2xheno6IENvbnN0cnVjdG9yPE0+XG4pOiBQcm9taXNlPG51bWJlciB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBzdHViID0gY3R4Py5zdHViIGFzXG4gICAgfCB7XG4gICAgICAgIHN0YXRlPzogUmVjb3JkPHN0cmluZywgQnVmZmVyPjtcbiAgICAgICAgcHJpdmF0ZVN0YXRlPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgQnVmZmVyPj47XG4gICAgICAgIGdldFN0YXRlQnlQYXJ0aWFsQ29tcG9zaXRlS2V5PzogKFxuICAgICAgICAgIG9iamVjdFR5cGU6IHN0cmluZyxcbiAgICAgICAgICBhdHRyaWJ1dGVzOiBzdHJpbmdbXVxuICAgICAgICApID0+IFByb21pc2U8YW55PjtcbiAgICAgIH1cbiAgICB8IHVuZGVmaW5lZDtcbiAgaWYgKCFzdHViKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGNvbnN0IHRhYmxlID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgY29uc3QgcHJlZml4ID0gYCR7dGFibGV9X2A7XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBpZiAodHlwZW9mIHN0dWIuZ2V0U3RhdGVCeVBhcnRpYWxDb21wb3NpdGVLZXkgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGNvbnN0IGl0ZXJhdG9yID0gYXdhaXQgc3R1Yi5nZXRTdGF0ZUJ5UGFydGlhbENvbXBvc2l0ZUtleSh0YWJsZSwgW10pO1xuICAgIHRyeSB7XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIGlmIChyZXN1bHQ/LmRvbmUpIGJyZWFrO1xuICAgICAgICBjb25zdCBrZXkgPSByZXN1bHQ/LnZhbHVlPy5rZXk7XG4gICAgICAgIGlmIChrZXkgJiYga2V5LnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICAgIHNlZW4uYWRkKGtleSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGl0ZXJhdG9yICYmIHR5cGVvZiBpdGVyYXRvci5jbG9zZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0dWIuc3RhdGUpIHtcbiAgICBPYmplY3Qua2V5cyhzdHViLnN0YXRlKVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aChwcmVmaXgpKVxuICAgICAgLmZvckVhY2goKGtleSkgPT4gc2Vlbi5hZGQoa2V5KSk7XG4gIH1cblxuICBjb25zdCB7IHByaXZhdGVDb2xzLCBzaGFyZWRDb2xzIH0gPSBNb2RlbC5jb2xsZWN0aW9uc0ZvcihjbGF6eik7XG4gIGNvbnN0IHJlc29sdmVycyA9IFsuLi5wcml2YXRlQ29scywgLi4uc2hhcmVkQ29sc107XG4gIGlmIChyZXNvbHZlcnMubGVuZ3RoICYmIHN0dWIucHJpdmF0ZVN0YXRlKSB7XG4gICAgY29uc3QgbXNwID0gZXh0cmFjdE1zcElkKGN0eC5pZGVudGl0eSk7XG4gICAgY29uc3QgY29sbGVjdGlvbnMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHJlc29sdmVycy5tYXAoKHJlc29sdmVyKSA9PlxuICAgICAgICB0eXBlb2YgcmVzb2x2ZXIgPT09IFwic3RyaW5nXCIgPyByZXNvbHZlciA6IHJlc29sdmVyKGNsYXp6LCBtc3AsIGN0eClcbiAgICAgIClcbiAgICApO1xuICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuICAgICAgY29uc3QgZW50cmllcyA9IHN0dWIucHJpdmF0ZVN0YXRlW2NvbGxlY3Rpb25dO1xuICAgICAgaWYgKCFlbnRyaWVzKSBjb250aW51ZTtcbiAgICAgIE9iamVjdC5rZXlzKGVudHJpZXMpXG4gICAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5LnN0YXJ0c1dpdGgocHJlZml4KSlcbiAgICAgICAgLmZvckVhY2goKGtleSkgPT4gc2Vlbi5hZGQoa2V5KSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNlZW4uc2l6ZSA/IHNlZW4uc2l6ZSA6IHVuZGVmaW5lZDtcbn1cbiJdfQ==
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.FabricContractRepositoryObservableHandler = void 0;
|
|
4
|
-
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
5
|
-
const core_1 = require("@decaf-ts/core");
|
|
6
|
-
const events_1 = require("./../shared/events.cjs");
|
|
7
|
-
/**
|
|
8
|
-
* @description Observer handler for Fabric chaincode events
|
|
9
|
-
* @summary Emits events on the Fabric ledger when repository operations occur
|
|
10
|
-
* @class FabricContractRepositoryObservableHandler
|
|
11
|
-
* @extends {ObserverHandler}
|
|
12
|
-
* @example
|
|
13
|
-
* ```typescript
|
|
14
|
-
* // In a Fabric chaincode contract
|
|
15
|
-
* import { FabricContractRepositoryObservableHandler } from '@decaf-ts/for-fabric';
|
|
16
|
-
*
|
|
17
|
-
* // Create a handler with default supported events
|
|
18
|
-
* const handler = new FabricContractRepositoryObservableHandler();
|
|
19
|
-
*
|
|
20
|
-
* // Emit an event
|
|
21
|
-
* await handler.updateObservers(
|
|
22
|
-
* logger,
|
|
23
|
-
* 'assets',
|
|
24
|
-
* OperationKeys.CREATE,
|
|
25
|
-
* 'asset1',
|
|
26
|
-
* context
|
|
27
|
-
* );
|
|
28
|
-
* ```
|
|
29
|
-
* @mermaid
|
|
30
|
-
* sequenceDiagram
|
|
31
|
-
* participant Repository
|
|
32
|
-
* participant ObservableHandler
|
|
33
|
-
* participant Stub
|
|
34
|
-
* participant Ledger
|
|
35
|
-
*
|
|
36
|
-
* Repository->>ObservableHandler: updateObservers(log, table, event, id, ctx)
|
|
37
|
-
* ObservableHandler->>ObservableHandler: Check if event is supported
|
|
38
|
-
* ObservableHandler->>ObservableHandler: generateFabricEventName(table, event, owner)
|
|
39
|
-
* ObservableHandler->>Stub: setEvent(eventName, payload)
|
|
40
|
-
* Stub->>Ledger: Record event
|
|
41
|
-
*/
|
|
42
|
-
class FabricContractRepositoryObservableHandler extends core_1.ObserverHandler {
|
|
43
|
-
/**
|
|
44
|
-
* @description Creates a new FabricContractRepositoryObservableHandler instance
|
|
45
|
-
* @summary Initializes the handler with a list of supported events
|
|
46
|
-
* @param {Array<OperationKeys | BulkCrudOperationKeys | string>} [supportedEvents] - Events that will trigger Fabric events
|
|
47
|
-
*/
|
|
48
|
-
constructor(supportedEvents = [
|
|
49
|
-
db_decorators_1.OperationKeys.CREATE,
|
|
50
|
-
db_decorators_1.OperationKeys.UPDATE,
|
|
51
|
-
db_decorators_1.OperationKeys.DELETE,
|
|
52
|
-
db_decorators_1.BulkCrudOperationKeys.CREATE_ALL,
|
|
53
|
-
db_decorators_1.BulkCrudOperationKeys.UPDATE_ALL,
|
|
54
|
-
db_decorators_1.BulkCrudOperationKeys.DELETE_ALL,
|
|
55
|
-
]) {
|
|
56
|
-
super();
|
|
57
|
-
this.supportedEvents = supportedEvents;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* @description Updates observers by emitting Fabric events
|
|
61
|
-
* @summary Emits events on the Fabric ledger for supported event types
|
|
62
|
-
* @param {Logger} log - Logger instance for debugging
|
|
63
|
-
* @param {string} table - The table/collection name
|
|
64
|
-
* @param {OperationKeys | BulkCrudOperationKeys | string} event - The event type
|
|
65
|
-
* @param {EventIds} id - The event identifier
|
|
66
|
-
* @param {FabricContractContext} ctx - The Fabric contract context
|
|
67
|
-
* @param {string} [owner] - Optional owner identifier for the event
|
|
68
|
-
* @param {object | string | undefined} [owner] - Optional payload for the event
|
|
69
|
-
*
|
|
70
|
-
* @return {Promise<void>} Promise that resolves when the event is emitted
|
|
71
|
-
*/
|
|
72
|
-
async updateObservers(clazz, event, id, ...args) {
|
|
73
|
-
const { log, ctx } = core_1.Adapter.logCtx(this.updateObservers, event, false, ...args);
|
|
74
|
-
if (ctx.isFullySegregated)
|
|
75
|
-
return;
|
|
76
|
-
if (!ctx.stub)
|
|
77
|
-
return;
|
|
78
|
-
const { stub } = ctx;
|
|
79
|
-
const [owner, payload] = args;
|
|
80
|
-
const table = typeof clazz === "string" ? clazz : clazz.name;
|
|
81
|
-
if (this.supportedEvents.indexOf(event) !== -1) {
|
|
82
|
-
log.debug(`Emitting ${event} event`);
|
|
83
|
-
const eventName = (0, events_1.generateFabricEventName)(table, event, owner);
|
|
84
|
-
const eventData = { id: id };
|
|
85
|
-
if (ctx.getOrUndefined("observeFullResult") && payload) {
|
|
86
|
-
eventData.result = payload;
|
|
87
|
-
}
|
|
88
|
-
stub.setEvent(eventName, Buffer.from(JSON.stringify(eventData)));
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
stub.setEvent(event, Buffer.from(JSON.stringify(payload)));
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
exports.FabricContractRepositoryObservableHandler = FabricContractRepositoryObservableHandler;
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ29udHJhY3RSZXBvc2l0b3J5T2JzZXJ2YWJsZUhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL0ZhYnJpY0NvbnRyYWN0UmVwb3NpdG9yeU9ic2VydmFibGVIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJEQUErRTtBQUMvRSx5Q0FLd0I7QUFDeEIsbURBQTJEO0FBSTNEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsTUFBYSx5Q0FBMEMsU0FBUSxzQkFBZTtJQUM1RTs7OztPQUlHO0lBQ0gsWUFDVSxrQkFJRjtRQUNKLDZCQUFhLENBQUMsTUFBTTtRQUNwQiw2QkFBYSxDQUFDLE1BQU07UUFDcEIsNkJBQWEsQ0FBQyxNQUFNO1FBQ3BCLHFDQUFxQixDQUFDLFVBQVU7UUFDaEMscUNBQXFCLENBQUMsVUFBVTtRQUNoQyxxQ0FBcUIsQ0FBQyxVQUFVO0tBQ2pDO1FBRUQsS0FBSyxFQUFFLENBQUM7UUFiQSxvQkFBZSxHQUFmLGVBQWUsQ0FXdEI7SUFHSCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ00sS0FBSyxDQUFDLGVBQWUsQ0FDNUIsS0FBZ0MsRUFDaEMsS0FBcUQsRUFDckQsRUFBWSxFQUNaLEdBQUcsSUFBMkM7UUFFOUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxjQUFPLENBQUMsTUFBTSxDQUNqQyxJQUFJLENBQUMsZUFBZSxFQUNwQixLQUFLLEVBQ0wsS0FBSyxFQUNMLEdBQUcsSUFBSSxDQUNSLENBQUM7UUFDRixJQUFJLEdBQUcsQ0FBQyxpQkFBaUI7WUFBRSxPQUFPO1FBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSTtZQUFFLE9BQU87UUFDdEIsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQztRQUNyQixNQUFNLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM5QixNQUFNLEtBQUssR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUM3RCxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0MsR0FBRyxDQUFDLEtBQUssQ0FBQyxZQUFZLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDckMsTUFBTSxTQUFTLEdBQUcsSUFBQSxnQ0FBdUIsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQy9ELE1BQU0sU0FBUyxHQUE0QixFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN0RCxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDdkQsU0FBUyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7WUFDN0IsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdELENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFqRUQsOEZBaUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnVsa0NydWRPcGVyYXRpb25LZXlzLCBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQge1xuICBBZGFwdGVyLFxuICBDb250ZXh0dWFsQXJncyxcbiAgRXZlbnRJZHMsXG4gIE9ic2VydmVySGFuZGxlcixcbn0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZUZhYnJpY0V2ZW50TmFtZSB9IGZyb20gXCIuLi9zaGFyZWQvZXZlbnRzXCI7XG5pbXBvcnQgeyBGYWJyaWNDb250cmFjdENvbnRleHQgfSBmcm9tIFwiLi9Db250cmFjdENvbnRleHRcIjtcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE9ic2VydmVyIGhhbmRsZXIgZm9yIEZhYnJpYyBjaGFpbmNvZGUgZXZlbnRzXG4gKiBAc3VtbWFyeSBFbWl0cyBldmVudHMgb24gdGhlIEZhYnJpYyBsZWRnZXIgd2hlbiByZXBvc2l0b3J5IG9wZXJhdGlvbnMgb2NjdXJcbiAqIEBjbGFzcyBGYWJyaWNDb250cmFjdFJlcG9zaXRvcnlPYnNlcnZhYmxlSGFuZGxlclxuICogQGV4dGVuZHMge09ic2VydmVySGFuZGxlcn1cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBJbiBhIEZhYnJpYyBjaGFpbmNvZGUgY29udHJhY3RcbiAqIGltcG9ydCB7IEZhYnJpY0NvbnRyYWN0UmVwb3NpdG9yeU9ic2VydmFibGVIYW5kbGVyIH0gZnJvbSAnQGRlY2FmLXRzL2Zvci1mYWJyaWMnO1xuICpcbiAqIC8vIENyZWF0ZSBhIGhhbmRsZXIgd2l0aCBkZWZhdWx0IHN1cHBvcnRlZCBldmVudHNcbiAqIGNvbnN0IGhhbmRsZXIgPSBuZXcgRmFicmljQ29udHJhY3RSZXBvc2l0b3J5T2JzZXJ2YWJsZUhhbmRsZXIoKTtcbiAqXG4gKiAvLyBFbWl0IGFuIGV2ZW50XG4gKiBhd2FpdCBoYW5kbGVyLnVwZGF0ZU9ic2VydmVycyhcbiAqICAgbG9nZ2VyLFxuICogICAnYXNzZXRzJyxcbiAqICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gKiAgICdhc3NldDEnLFxuICogICBjb250ZXh0XG4gKiApO1xuICogYGBgXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IFJlcG9zaXRvcnlcbiAqICAgcGFydGljaXBhbnQgT2JzZXJ2YWJsZUhhbmRsZXJcbiAqICAgcGFydGljaXBhbnQgU3R1YlxuICogICBwYXJ0aWNpcGFudCBMZWRnZXJcbiAqXG4gKiAgIFJlcG9zaXRvcnktPj5PYnNlcnZhYmxlSGFuZGxlcjogdXBkYXRlT2JzZXJ2ZXJzKGxvZywgdGFibGUsIGV2ZW50LCBpZCwgY3R4KVxuICogICBPYnNlcnZhYmxlSGFuZGxlci0+Pk9ic2VydmFibGVIYW5kbGVyOiBDaGVjayBpZiBldmVudCBpcyBzdXBwb3J0ZWRcbiAqICAgT2JzZXJ2YWJsZUhhbmRsZXItPj5PYnNlcnZhYmxlSGFuZGxlcjogZ2VuZXJhdGVGYWJyaWNFdmVudE5hbWUodGFibGUsIGV2ZW50LCBvd25lcilcbiAqICAgT2JzZXJ2YWJsZUhhbmRsZXItPj5TdHViOiBzZXRFdmVudChldmVudE5hbWUsIHBheWxvYWQpXG4gKiAgIFN0dWItPj5MZWRnZXI6IFJlY29yZCBldmVudFxuICovXG5leHBvcnQgY2xhc3MgRmFicmljQ29udHJhY3RSZXBvc2l0b3J5T2JzZXJ2YWJsZUhhbmRsZXIgZXh0ZW5kcyBPYnNlcnZlckhhbmRsZXIge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgRmFicmljQ29udHJhY3RSZXBvc2l0b3J5T2JzZXJ2YWJsZUhhbmRsZXIgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgSW5pdGlhbGl6ZXMgdGhlIGhhbmRsZXIgd2l0aCBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGV2ZW50c1xuICAgKiBAcGFyYW0ge0FycmF5PE9wZXJhdGlvbktleXMgfCBCdWxrQ3J1ZE9wZXJhdGlvbktleXMgfCBzdHJpbmc+fSBbc3VwcG9ydGVkRXZlbnRzXSAtIEV2ZW50cyB0aGF0IHdpbGwgdHJpZ2dlciBGYWJyaWMgZXZlbnRzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN1cHBvcnRlZEV2ZW50czogKFxuICAgICAgfCBPcGVyYXRpb25LZXlzXG4gICAgICB8IEJ1bGtDcnVkT3BlcmF0aW9uS2V5c1xuICAgICAgfCBzdHJpbmdcbiAgICApW10gPSBbXG4gICAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICAgIE9wZXJhdGlvbktleXMuVVBEQVRFLFxuICAgICAgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgICBCdWxrQ3J1ZE9wZXJhdGlvbktleXMuQ1JFQVRFX0FMTCxcbiAgICAgIEJ1bGtDcnVkT3BlcmF0aW9uS2V5cy5VUERBVEVfQUxMLFxuICAgICAgQnVsa0NydWRPcGVyYXRpb25LZXlzLkRFTEVURV9BTEwsXG4gICAgXVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIG9ic2VydmVycyBieSBlbWl0dGluZyBGYWJyaWMgZXZlbnRzXG4gICAqIEBzdW1tYXJ5IEVtaXRzIGV2ZW50cyBvbiB0aGUgRmFicmljIGxlZGdlciBmb3Igc3VwcG9ydGVkIGV2ZW50IHR5cGVzXG4gICAqIEBwYXJhbSB7TG9nZ2VyfSBsb2cgLSBMb2dnZXIgaW5zdGFuY2UgZm9yIGRlYnVnZ2luZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdGFibGUgLSBUaGUgdGFibGUvY29sbGVjdGlvbiBuYW1lXG4gICAqIEBwYXJhbSB7T3BlcmF0aW9uS2V5cyB8IEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyB8IHN0cmluZ30gZXZlbnQgLSBUaGUgZXZlbnQgdHlwZVxuICAgKiBAcGFyYW0ge0V2ZW50SWRzfSBpZCAtIFRoZSBldmVudCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSB7RmFicmljQ29udHJhY3RDb250ZXh0fSBjdHggLSBUaGUgRmFicmljIGNvbnRyYWN0IGNvbnRleHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvd25lcl0gLSBPcHRpb25hbCBvd25lciBpZGVudGlmaWVyIGZvciB0aGUgZXZlbnRcbiAgICogQHBhcmFtIHtvYmplY3QgfCBzdHJpbmcgfCB1bmRlZmluZWR9IFtvd25lcl0gLSBPcHRpb25hbCBwYXlsb2FkIGZvciB0aGUgZXZlbnRcbiAgICpcbiAgICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGV2ZW50IGlzIGVtaXR0ZWRcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHVwZGF0ZU9ic2VydmVycyhcbiAgICBjbGF6ejogc3RyaW5nIHwgQ29uc3RydWN0b3I8YW55PixcbiAgICBldmVudDogT3BlcmF0aW9uS2V5cyB8IEJ1bGtDcnVkT3BlcmF0aW9uS2V5cyB8IHN0cmluZyxcbiAgICBpZDogRXZlbnRJZHMsXG4gICAgLi4uYXJnczogQ29udGV4dHVhbEFyZ3M8RmFicmljQ29udHJhY3RDb250ZXh0PlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGxvZywgY3R4IH0gPSBBZGFwdGVyLmxvZ0N0eDxGYWJyaWNDb250cmFjdENvbnRleHQ+KFxuICAgICAgdGhpcy51cGRhdGVPYnNlcnZlcnMsXG4gICAgICBldmVudCxcbiAgICAgIGZhbHNlLFxuICAgICAgLi4uYXJnc1xuICAgICk7XG4gICAgaWYgKGN0eC5pc0Z1bGx5U2VncmVnYXRlZCkgcmV0dXJuO1xuICAgIGlmICghY3R4LnN0dWIpIHJldHVybjtcbiAgICBjb25zdCB7IHN0dWIgfSA9IGN0eDtcbiAgICBjb25zdCBbb3duZXIsIHBheWxvYWRdID0gYXJncztcbiAgICBjb25zdCB0YWJsZSA9IHR5cGVvZiBjbGF6eiA9PT0gXCJzdHJpbmdcIiA/IGNsYXp6IDogY2xhenoubmFtZTtcbiAgICBpZiAodGhpcy5zdXBwb3J0ZWRFdmVudHMuaW5kZXhPZihldmVudCkgIT09IC0xKSB7XG4gICAgICBsb2cuZGVidWcoYEVtaXR0aW5nICR7ZXZlbnR9IGV2ZW50YCk7XG4gICAgICBjb25zdCBldmVudE5hbWUgPSBnZW5lcmF0ZUZhYnJpY0V2ZW50TmFtZSh0YWJsZSwgZXZlbnQsIG93bmVyKTtcbiAgICAgIGNvbnN0IGV2ZW50RGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IGlkOiBpZCB9O1xuICAgICAgaWYgKGN0eC5nZXRPclVuZGVmaW5lZChcIm9ic2VydmVGdWxsUmVzdWx0XCIpICYmIHBheWxvYWQpIHtcbiAgICAgICAgZXZlbnREYXRhLnJlc3VsdCA9IHBheWxvYWQ7XG4gICAgICB9XG4gICAgICBzdHViLnNldEV2ZW50KGV2ZW50TmFtZSwgQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoZXZlbnREYXRhKSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHViLnNldEV2ZW50KGV2ZW50LCBCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShwYXlsb2FkKSkpO1xuICAgIH1cbiAgfVxufVxuIl19
|