@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
package/lib/cli-module.cjs
DELETED
|
@@ -1,479 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.default = fabric;
|
|
7
|
-
const commander_1 = require("commander");
|
|
8
|
-
const logging_1 = require("@decaf-ts/logging");
|
|
9
|
-
const child_process_1 = require("child_process");
|
|
10
|
-
const fs_1 = __importDefault(require("fs"));
|
|
11
|
-
const path_1 = __importDefault(require("path"));
|
|
12
|
-
const rollup_1 = require("rollup");
|
|
13
|
-
const plugin_replace_1 = __importDefault(require("@rollup/plugin-replace"));
|
|
14
|
-
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
15
|
-
const indexes_1 = require("./client/indexes/index.cjs");
|
|
16
|
-
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
17
|
-
const cli_utils_1 = require("./cli-utils.cjs");
|
|
18
|
-
require("./shared/overrides/index.cjs");
|
|
19
|
-
const typescript_1 = __importDefault(require("typescript"));
|
|
20
|
-
const index_1 = require("./client/collections/index.cjs");
|
|
21
|
-
const logger = logging_1.Logging.for("fabric");
|
|
22
|
-
function resolveBundledJsImports() {
|
|
23
|
-
return {
|
|
24
|
-
name: "resolve-bundled-js-imports",
|
|
25
|
-
resolveId(source, importer) {
|
|
26
|
-
if (!importer || !source.startsWith(".")) {
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
const resolvedPath = path_1.default.resolve(path_1.default.dirname(importer), source);
|
|
30
|
-
const candidates = [
|
|
31
|
-
resolvedPath,
|
|
32
|
-
`${resolvedPath}.js`,
|
|
33
|
-
path_1.default.join(resolvedPath, "index.js"),
|
|
34
|
-
];
|
|
35
|
-
for (const candidate of candidates) {
|
|
36
|
-
if (fs_1.default.existsSync(candidate) && fs_1.default.statSync(candidate).isFile()) {
|
|
37
|
-
return candidate;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return null;
|
|
41
|
-
},
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
const compileCommand = new commander_1.Command()
|
|
45
|
-
.name("compile-contract")
|
|
46
|
-
.description("Creates a global contract")
|
|
47
|
-
.option("--dev", "compiles contracts without minification", false)
|
|
48
|
-
.option("--debug", "makes attaching debugger possible", false)
|
|
49
|
-
.option("--ccaas", "Ajusts the package commands to be deployed as ccaas", false)
|
|
50
|
-
.option("--name <String>", "contract name", "global-contract")
|
|
51
|
-
.option("--bundle", "Bundles with rollup instead of using tsc", false)
|
|
52
|
-
.option("--ts-config-file <string>", "relative path to the ts config file based on cwd or absolute path", "./tsconfig.json")
|
|
53
|
-
.option("--description <String>", "contract description", "Global contract implementation")
|
|
54
|
-
.option("--strip-contract-name", "strip contract name from output", false)
|
|
55
|
-
.option("--input <String>", "input folder for contracts", "lib/contracts")
|
|
56
|
-
.option("--output <String>", "output folder for contracts", "./contracts")
|
|
57
|
-
.option("--sourcemaps", "includes sourcemaps in the compiled output", false)
|
|
58
|
-
.action(async (options) => {
|
|
59
|
-
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(process.cwd(), "package.json"), "utf-8"));
|
|
60
|
-
const version = pkg.version;
|
|
61
|
-
let {
|
|
62
|
-
// eslint-disable-next-line prefer-const
|
|
63
|
-
dev,
|
|
64
|
-
// eslint-disable-next-line prefer-const
|
|
65
|
-
debug,
|
|
66
|
-
// eslint-disable-next-line prefer-const
|
|
67
|
-
name,
|
|
68
|
-
// eslint-disable-next-line prefer-const
|
|
69
|
-
description, output,
|
|
70
|
-
// eslint-disable-next-line prefer-const
|
|
71
|
-
input,
|
|
72
|
-
// eslint-disable-next-line prefer-const
|
|
73
|
-
stripContractName,
|
|
74
|
-
// eslint-disable-next-line prefer-const
|
|
75
|
-
ccaas,
|
|
76
|
-
// eslint-disable-next-line prefer-const
|
|
77
|
-
bundle, tsConfigFile, sourcemaps, } = options;
|
|
78
|
-
const log = logger.for("compile-contract");
|
|
79
|
-
log.debug(`running with options: ${JSON.stringify(options)} for ${pkg.name} version ${version}`);
|
|
80
|
-
tsConfigFile = path_1.default.isAbsolute(tsConfigFile)
|
|
81
|
-
? tsConfigFile
|
|
82
|
-
: path_1.default.join(process.cwd(), tsConfigFile);
|
|
83
|
-
output = stripContractName ? output : path_1.default.join(output, name);
|
|
84
|
-
log.info(`Deleting existing output folder (if exists) under ${output}`);
|
|
85
|
-
(0, child_process_1.execSync)(`rm -rf ${output}`);
|
|
86
|
-
if (bundle) {
|
|
87
|
-
log.info(`bundling contract from ${input}`);
|
|
88
|
-
const tempBundleDir = fs_1.default.mkdtempSync(path_1.default.join(process.cwd(), ".contract-bundle-"));
|
|
89
|
-
try {
|
|
90
|
-
const inputEntry = path_1.default.resolve(process.cwd(), input, "index.ts");
|
|
91
|
-
const configFile = typescript_1.default.readConfigFile(tsConfigFile, typescript_1.default.sys.readFile);
|
|
92
|
-
if (configFile.error) {
|
|
93
|
-
throw new db_decorators_1.InternalError(typescript_1.default.flattenDiagnosticMessageText(configFile.error.messageText, "\n"));
|
|
94
|
-
}
|
|
95
|
-
const parsedConfig = typescript_1.default.parseJsonConfigFileContent(configFile.config, typescript_1.default.sys, path_1.default.dirname(tsConfigFile), undefined, tsConfigFile);
|
|
96
|
-
if (parsedConfig.errors.length) {
|
|
97
|
-
throw new db_decorators_1.InternalError(parsedConfig.errors
|
|
98
|
-
.map((error) => typescript_1.default.flattenDiagnosticMessageText(error.messageText, "\n"))
|
|
99
|
-
.join("\n"));
|
|
100
|
-
}
|
|
101
|
-
const tempCompilerOptions = {
|
|
102
|
-
...parsedConfig.options,
|
|
103
|
-
outDir: tempBundleDir,
|
|
104
|
-
module: typescript_1.default.ModuleKind.ESNext,
|
|
105
|
-
declaration: false,
|
|
106
|
-
sourceMap: false,
|
|
107
|
-
inlineSources: false,
|
|
108
|
-
};
|
|
109
|
-
const bundledEntryPoint = typescript_1.default
|
|
110
|
-
.getOutputFileNames({
|
|
111
|
-
...parsedConfig,
|
|
112
|
-
options: tempCompilerOptions,
|
|
113
|
-
}, inputEntry, !typescript_1.default.sys.useCaseSensitiveFileNames)
|
|
114
|
-
.find((fileName) => fileName.endsWith(".js"));
|
|
115
|
-
if (!bundledEntryPoint) {
|
|
116
|
-
throw new db_decorators_1.InternalError(`Failed to determine the emitted bundle entry for ${inputEntry}`);
|
|
117
|
-
}
|
|
118
|
-
(0, cli_utils_1.compileWithTsconfigOverrides)(tsConfigFile, tempCompilerOptions);
|
|
119
|
-
const bundledContract = await (0, rollup_1.rollup)({
|
|
120
|
-
input: bundledEntryPoint,
|
|
121
|
-
plugins: [
|
|
122
|
-
resolveBundledJsImports(),
|
|
123
|
-
(0, plugin_replace_1.default)({
|
|
124
|
-
preventAssignment: true,
|
|
125
|
-
delimiters: ["", ""],
|
|
126
|
-
values: { "##VERSION##": version, "##PACKAGE##": pkg.name },
|
|
127
|
-
}),
|
|
128
|
-
],
|
|
129
|
-
});
|
|
130
|
-
log.info(`withing contract to ${output} with name ${(0, logging_1.toPascalCase)(name)}.js`);
|
|
131
|
-
await bundledContract.write({
|
|
132
|
-
file: `${output}/${(0, logging_1.toPascalCase)(name)}.js`,
|
|
133
|
-
format: "umd",
|
|
134
|
-
name: `${(0, logging_1.toPascalCase)(name)}.js`,
|
|
135
|
-
sourcemap: sourcemaps ? "inline" : false,
|
|
136
|
-
sourcemapPathTransform: (relativeSourcePath, sourcemapPath) => {
|
|
137
|
-
const absoluteSourcePath = path_1.default.resolve(path_1.default.dirname(sourcemapPath), relativeSourcePath);
|
|
138
|
-
if (absoluteSourcePath.startsWith(tempBundleDir)) {
|
|
139
|
-
return path_1.default.posix.join(".bundle", path_1.default
|
|
140
|
-
.relative(tempBundleDir, absoluteSourcePath)
|
|
141
|
-
.split(path_1.default.sep)
|
|
142
|
-
.join("/"));
|
|
143
|
-
}
|
|
144
|
-
return relativeSourcePath;
|
|
145
|
-
},
|
|
146
|
-
});
|
|
147
|
-
await bundledContract.close();
|
|
148
|
-
}
|
|
149
|
-
finally {
|
|
150
|
-
fs_1.default.rmSync(tempBundleDir, { recursive: true, force: true });
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
(0, cli_utils_1.compileWithTsconfigOverrides)(tsConfigFile, {
|
|
155
|
-
outDir: output,
|
|
156
|
-
module: typescript_1.default.ModuleKind.ESNext,
|
|
157
|
-
declaration: false,
|
|
158
|
-
sourceMap: sourcemaps,
|
|
159
|
-
inlineSources: sourcemaps,
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
const scripts = {
|
|
163
|
-
start: (0, cli_utils_1.getContractStartCommand)(debug, ccaas),
|
|
164
|
-
"start:dev": "fabric-chaincode-node start --tls.enabled false",
|
|
165
|
-
"start:watch": 'nodemon --exec "npm run start:dev"',
|
|
166
|
-
build: 'echo "No need to build the chaincode"',
|
|
167
|
-
lint: "eslint . --fix --ext .js",
|
|
168
|
-
};
|
|
169
|
-
const contractPackage = pkg;
|
|
170
|
-
contractPackage.name = name;
|
|
171
|
-
contractPackage.description = description;
|
|
172
|
-
contractPackage.scripts = scripts;
|
|
173
|
-
delete contractPackage.type;
|
|
174
|
-
delete contractPackage.types;
|
|
175
|
-
delete contractPackage.exports;
|
|
176
|
-
contractPackage.main = bundle
|
|
177
|
-
? `${(0, logging_1.toPascalCase)(name)}.js`
|
|
178
|
-
: `${input}/index.js`;
|
|
179
|
-
fs_1.default.writeFileSync(path_1.default.join(output, "package.json"), JSON.stringify(contractPackage));
|
|
180
|
-
log.info(`Installing and shrinkwrapping dependencies`);
|
|
181
|
-
(0, child_process_1.execSync)(`npm install`, { cwd: output });
|
|
182
|
-
(0, child_process_1.execSync)(`npm shrinkwrap`, { cwd: output });
|
|
183
|
-
(0, child_process_1.execSync)("rm -rf node_modules", { cwd: output });
|
|
184
|
-
log.info(`deleting temp folders`);
|
|
185
|
-
(0, child_process_1.execSync)(`rm -rf ./lib && rm -rf ./dist`, { cwd: output });
|
|
186
|
-
log.info(`Contract ${name} compiled successfully! in ${path_1.default.resolve(output)}`);
|
|
187
|
-
if (dev) {
|
|
188
|
-
log.info(`dev mode enabled. installing dependencies for debugging`);
|
|
189
|
-
(0, child_process_1.execSync)(`npm install`, {
|
|
190
|
-
cwd: output,
|
|
191
|
-
env: { ...process.env, NODE_ENV: "production" },
|
|
192
|
-
});
|
|
193
|
-
}
|
|
194
|
-
});
|
|
195
|
-
const extractIndexes = new commander_1.Command()
|
|
196
|
-
.command("extract-indexes")
|
|
197
|
-
.option("--file [String]", "the model file")
|
|
198
|
-
.option("--folder [String]", "the model folder")
|
|
199
|
-
.option("--outDir <String>", "the outdir. should match your contract folder")
|
|
200
|
-
.description("Creates a the JSON index files to be submitted to along with the contract")
|
|
201
|
-
.action(async (options) => {
|
|
202
|
-
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(process.cwd(), "package.json"), "utf-8"));
|
|
203
|
-
const version = pkg.version;
|
|
204
|
-
const log = logger.for("extract-indexes");
|
|
205
|
-
log.debug(`running with options: ${JSON.stringify(options)} for ${pkg.name} version ${version}`);
|
|
206
|
-
// eslint-disable-next-line prefer-const
|
|
207
|
-
let { file, folder, outDir } = options;
|
|
208
|
-
const models = [];
|
|
209
|
-
if (file) {
|
|
210
|
-
models.push(...(0, indexes_1.readModelFile)(file));
|
|
211
|
-
}
|
|
212
|
-
if (folder) {
|
|
213
|
-
log.info(`Loading models from ${folder}...`);
|
|
214
|
-
models.push(...(await (0, indexes_1.readModelFolders)(folder)));
|
|
215
|
-
}
|
|
216
|
-
const result = {};
|
|
217
|
-
const designDocs = {};
|
|
218
|
-
if (!file && !folder)
|
|
219
|
-
throw new db_decorators_1.InternalError(`Must pass a file or a folder`);
|
|
220
|
-
for (const m of models) {
|
|
221
|
-
log.verbose(`Extracting indexes for table ${decorator_validation_1.Model.tableName(m)}`);
|
|
222
|
-
const indexes = (0, indexes_1.generateModelIndexes)(m);
|
|
223
|
-
indexes.forEach((index) => {
|
|
224
|
-
if (index.name) {
|
|
225
|
-
result[index.name] = index;
|
|
226
|
-
}
|
|
227
|
-
});
|
|
228
|
-
(0, indexes_1.generateModelDesignDocs)(m, designDocs);
|
|
229
|
-
}
|
|
230
|
-
const indexesToWrite = Object.values(result);
|
|
231
|
-
const docsToWrite = Object.values(designDocs);
|
|
232
|
-
log.verbose(`Found ${indexesToWrite.length} indexes to create`);
|
|
233
|
-
log.verbose(`Found ${docsToWrite.length} design docs to create`);
|
|
234
|
-
log.debug(`Indexes: ${JSON.stringify(result)}`);
|
|
235
|
-
log.debug(`DesignDocs: ${JSON.stringify(designDocs)}`);
|
|
236
|
-
(0, indexes_1.writeIndexes)(indexesToWrite, outDir);
|
|
237
|
-
(0, indexes_1.writeDesignDocs)(docsToWrite, outDir);
|
|
238
|
-
});
|
|
239
|
-
const extractCollections = new commander_1.Command()
|
|
240
|
-
.command("extract-collections")
|
|
241
|
-
.option("--file [String]", "the model file")
|
|
242
|
-
.option("--folder [String]", "the model folder")
|
|
243
|
-
.option("--outDir <String>", "the outdir. should match your contract folder")
|
|
244
|
-
.option("--mspIds <String>", "single mspId or stringified array")
|
|
245
|
-
.option("--mainMspId <String>", "single mspId")
|
|
246
|
-
.option("--overrides [String]", "stringified override object {requiredPeerCount: number, maxPeerCount: number, blockToLive: number, memberOnlyRead: number, memberOnlyWrite: number, endorsementPolicy: {}}")
|
|
247
|
-
.description("Creates a the JSON index files to be submitted to along with the contract")
|
|
248
|
-
.action(async (options) => {
|
|
249
|
-
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(process.cwd(), "package.json"), "utf-8"));
|
|
250
|
-
const version = pkg.version;
|
|
251
|
-
const log = logger.for("extract-collections");
|
|
252
|
-
log.debug(`running with options: ${JSON.stringify(options)} for ${pkg.name} version ${version}`);
|
|
253
|
-
// eslint-disable-next-line prefer-const
|
|
254
|
-
let { file, folder, outDir, mspIds, mainMspId } = options;
|
|
255
|
-
try {
|
|
256
|
-
try {
|
|
257
|
-
mspIds = mspIds ? JSON.parse(mspIds) : undefined;
|
|
258
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
259
|
-
}
|
|
260
|
-
catch (e) {
|
|
261
|
-
// do nothing
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
catch (e) {
|
|
265
|
-
throw new db_decorators_1.SerializationError(`Unable to extract mspids: ${e}`);
|
|
266
|
-
}
|
|
267
|
-
const models = [];
|
|
268
|
-
if (file) {
|
|
269
|
-
models.push(...(0, indexes_1.readModelFile)(file));
|
|
270
|
-
}
|
|
271
|
-
if (folder) {
|
|
272
|
-
log.info(`Loading models from ${folder}...`);
|
|
273
|
-
models.push(...(await (0, indexes_1.readModelFolders)(folder)));
|
|
274
|
-
}
|
|
275
|
-
if (!file && !folder)
|
|
276
|
-
throw new db_decorators_1.InternalError(`Must pass a file or a folder`);
|
|
277
|
-
const injectableModels = models.filter((model) => decorator_validation_1.Model.isShared(model) ||
|
|
278
|
-
decorator_validation_1.Model.isPrivate(model) ||
|
|
279
|
-
!!decorator_validation_1.Model.mirroredAt(model));
|
|
280
|
-
if (!injectableModels.length) {
|
|
281
|
-
log.info(`No shared, private, or mirrored models found to extract collections`);
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
async function getCols(mspIdsList) {
|
|
285
|
-
const cols = await Promise.all(injectableModels.map(async (clazz) => {
|
|
286
|
-
const tableName = decorator_validation_1.Model.tableName(clazz);
|
|
287
|
-
const mirrorMeta = decorator_validation_1.Model.mirroredAt(clazz);
|
|
288
|
-
console.log(tableName);
|
|
289
|
-
const collections = {};
|
|
290
|
-
for (const msp of mspIdsList || mspIds || []) {
|
|
291
|
-
collections[msp] = await (0, index_1.extractCollections)(clazz, [msp, mainMspId], {},
|
|
292
|
-
// {
|
|
293
|
-
// sharedCols: Object.assign({}, overrides.sharedCols),
|
|
294
|
-
// privateCols: Object.assign({}, overrides.privateCols),
|
|
295
|
-
// },
|
|
296
|
-
!!mirrorMeta);
|
|
297
|
-
}
|
|
298
|
-
let mirrorCollection = undefined;
|
|
299
|
-
if (mirrorMeta) {
|
|
300
|
-
collections[mainMspId] = collections[mainMspId] || {};
|
|
301
|
-
Object.keys(collections).forEach((msp) => {
|
|
302
|
-
collections[mainMspId].privates = collections[msp].privates?.filter((p) => {
|
|
303
|
-
if (p.name !== mirrorMeta.resolver)
|
|
304
|
-
return true;
|
|
305
|
-
mirrorCollection = p;
|
|
306
|
-
return false;
|
|
307
|
-
});
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
const privatesCount = Object.values(collections)
|
|
311
|
-
.map((c) => c.privates)
|
|
312
|
-
.flat().length;
|
|
313
|
-
if (privatesCount)
|
|
314
|
-
log
|
|
315
|
-
.for(decorator_validation_1.Model.tableName(clazz))
|
|
316
|
-
.info(`Found ${privatesCount} private collections to create`);
|
|
317
|
-
const sharedCount = Object.values(collections)
|
|
318
|
-
.map((c) => c.shared)
|
|
319
|
-
.flat().length;
|
|
320
|
-
log
|
|
321
|
-
.for(decorator_validation_1.Model.tableName(clazz))
|
|
322
|
-
.info(`Found ${sharedCount} shared collections to create`);
|
|
323
|
-
if (mirrorCollection)
|
|
324
|
-
log
|
|
325
|
-
.for(decorator_validation_1.Model.tableName(clazz))
|
|
326
|
-
.info(`Found one mirror collection ${mirrorMeta?.resolver}`);
|
|
327
|
-
const colList = Object.values(collections)
|
|
328
|
-
.map((c) => [...(c.privates || []), ...(c.shared || [])])
|
|
329
|
-
.flat();
|
|
330
|
-
let indexes = [];
|
|
331
|
-
let designDocs = [];
|
|
332
|
-
if (colList.length) {
|
|
333
|
-
log
|
|
334
|
-
.for(decorator_validation_1.Model.tableName(clazz))
|
|
335
|
-
.verbose(`generating indexes for collections`);
|
|
336
|
-
indexes = (0, indexes_1.generateModelIndexes)(clazz);
|
|
337
|
-
log
|
|
338
|
-
.for(decorator_validation_1.Model.tableName(clazz))
|
|
339
|
-
.info(`found ${indexes.length} indexes`);
|
|
340
|
-
designDocs = (0, indexes_1.generateModelDesignDocs)(clazz);
|
|
341
|
-
log
|
|
342
|
-
.for(decorator_validation_1.Model.tableName(clazz))
|
|
343
|
-
.info(`found ${designDocs.length} design docs`);
|
|
344
|
-
}
|
|
345
|
-
return {
|
|
346
|
-
indexes,
|
|
347
|
-
designDocs,
|
|
348
|
-
collections: colList,
|
|
349
|
-
mirror: mirrorCollection,
|
|
350
|
-
};
|
|
351
|
-
}));
|
|
352
|
-
return cols;
|
|
353
|
-
}
|
|
354
|
-
const cols = await getCols();
|
|
355
|
-
const onlyMirror = await getCols([mainMspId]);
|
|
356
|
-
const collectionsTo = [
|
|
357
|
-
...onlyMirror.filter((c) => c.mirror).map((c) => c.mirror),
|
|
358
|
-
...cols.map((c) => c.collections).flat(),
|
|
359
|
-
...cols.filter((c) => c.mirror).map((c) => c.mirror),
|
|
360
|
-
];
|
|
361
|
-
const uniqueByCollection = [
|
|
362
|
-
...new Map(collectionsTo.map((item) => [item.name, item])).values(),
|
|
363
|
-
];
|
|
364
|
-
if (uniqueByCollection.length) {
|
|
365
|
-
(0, index_1.writeCollections)(uniqueByCollection, outDir);
|
|
366
|
-
const metaCollectionsConfig = path_1.default.join(outDir, "META-INF", "collections_config.json");
|
|
367
|
-
const contractCollectionsConfig = path_1.default.join(outDir, "collections_config.json");
|
|
368
|
-
fs_1.default.copyFileSync(metaCollectionsConfig, contractCollectionsConfig);
|
|
369
|
-
log.info(`Stored ${collectionsTo.length} collections to ${metaCollectionsConfig}`);
|
|
370
|
-
log.info(`Copied collections_config to ${contractCollectionsConfig} alongside the package.json`);
|
|
371
|
-
cols.forEach((c) => {
|
|
372
|
-
const { indexes, designDocs, collections, mirror } = c;
|
|
373
|
-
const toIndex = [...collections, mirror].filter(Boolean);
|
|
374
|
-
toIndex.forEach((i) => {
|
|
375
|
-
(0, indexes_1.writeIndexes)(indexes, outDir, i.name);
|
|
376
|
-
(0, index_1.writeCollectionDesignDocs)(designDocs || [], outDir, i.name);
|
|
377
|
-
log.info(`Stored ${indexes?.length || 0} indexes and ${designDocs?.length || 0} design docs to collection ${i.name}`);
|
|
378
|
-
});
|
|
379
|
-
});
|
|
380
|
-
}
|
|
381
|
-
});
|
|
382
|
-
const ensureInfra = new commander_1.Command()
|
|
383
|
-
.name("await-infra")
|
|
384
|
-
.description("waits for the infrastructure to be up and running")
|
|
385
|
-
.option("--container <String>", "docker container name to test (usually last peer)", "boot-org-c-peer-0")
|
|
386
|
-
.option("--timeout <String>", "timeout between tests in milliseconds", "5000")
|
|
387
|
-
.option("--attempts <String>", "number of attempts before giving up", "10")
|
|
388
|
-
.action(async (options) => {
|
|
389
|
-
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(process.cwd(), "package.json"), "utf-8"));
|
|
390
|
-
const version = pkg.version;
|
|
391
|
-
const log = logger.for("await-infra");
|
|
392
|
-
log.debug(`running with options: ${JSON.stringify(options)} for ${pkg.name} version ${version}`);
|
|
393
|
-
// eslint-disable-next-line prefer-const
|
|
394
|
-
let { container, timeout, attempts } = options;
|
|
395
|
-
timeout = parseInt(timeout) || 5000;
|
|
396
|
-
attempts = parseInt(attempts) || 10;
|
|
397
|
-
await (0, cli_utils_1.ensureInfrastructureBooted)("boot-org-c-peer-0", timeout, attempts);
|
|
398
|
-
log.info(`Infrastructure booted successfully (according to container ${container})!`);
|
|
399
|
-
});
|
|
400
|
-
const deployContract = new commander_1.Command()
|
|
401
|
-
.name("deploy-contract")
|
|
402
|
-
.description("deploys the selected contract")
|
|
403
|
-
.option("--name <String>", "Contract Name (and folder)")
|
|
404
|
-
.option("--input <String>", "input folder")
|
|
405
|
-
.option("--collections-config <String>", "path to collections_config.json to configure private collections")
|
|
406
|
-
.option("--incrementVersion <String>", "(true | false) if should use version or sequence to update contracts", false)
|
|
407
|
-
.option("--trackerFolder <String>", "contract version tracker folder (should be deleted on infrastructure:down)", path_1.default.join(process.cwd(), "tests", "integration", "chaincodeTrackers"))
|
|
408
|
-
.option("--peers <String>", "comma separated peer ids", "org-a-peer-0,org-b-peer-0,org-c-peer-0")
|
|
409
|
-
.action(async (options) => {
|
|
410
|
-
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(process.cwd(), "package.json"), "utf-8"));
|
|
411
|
-
const version = pkg.version;
|
|
412
|
-
const log = logger.for("deploy-contract");
|
|
413
|
-
log.debug(`running with options: ${JSON.stringify(options)} for ${pkg.name} version ${version}`);
|
|
414
|
-
const { name, input, peers, trackerFolder,
|
|
415
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
416
|
-
incrementVersion, collectionsConfig, } = options;
|
|
417
|
-
const peerIds = peers.split(",");
|
|
418
|
-
const countPath = path_1.default.resolve(path_1.default.join(trackerFolder, `${name}.count`));
|
|
419
|
-
let sequence;
|
|
420
|
-
try {
|
|
421
|
-
sequence = parseInt(fs_1.default.readFileSync(countPath).toString("utf-8"));
|
|
422
|
-
if (isNaN(sequence))
|
|
423
|
-
sequence = 1;
|
|
424
|
-
else
|
|
425
|
-
sequence += 1;
|
|
426
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
427
|
-
}
|
|
428
|
-
catch (e) {
|
|
429
|
-
sequence = 1;
|
|
430
|
-
}
|
|
431
|
-
//
|
|
432
|
-
// if (incrementVersion) {
|
|
433
|
-
// version = version + `-${sequence}`;
|
|
434
|
-
// // sequence = 1;
|
|
435
|
-
// }
|
|
436
|
-
try {
|
|
437
|
-
for (const peer of peerIds) {
|
|
438
|
-
(0, cli_utils_1.packageContract)(peer, input, name, version);
|
|
439
|
-
(0, cli_utils_1.installContract)(peer, name);
|
|
440
|
-
(0, cli_utils_1.approveContract)(peer, name, peer === "org-a-peer-0"
|
|
441
|
-
? "tls-ca-cert.pem"
|
|
442
|
-
: "orderer-tls-ca-cert.pem", sequence, version, collectionsConfig);
|
|
443
|
-
}
|
|
444
|
-
fs_1.default.writeFileSync(countPath, sequence.toString());
|
|
445
|
-
}
|
|
446
|
-
catch (err) {
|
|
447
|
-
log.error("Error deploying contract:", err);
|
|
448
|
-
}
|
|
449
|
-
(0, cli_utils_1.commitChaincode)(name, sequence, version, collectionsConfig);
|
|
450
|
-
});
|
|
451
|
-
const getCryptoMaterial = new commander_1.Command()
|
|
452
|
-
.name("get-crypto-material")
|
|
453
|
-
.description("copies the crypto material to the selected folder")
|
|
454
|
-
.option("--folder <String>", "output folder", "docker/docker-data")
|
|
455
|
-
.option("--org [String]", "the org/peer to extract from", "org-a")
|
|
456
|
-
.action(async (options) => {
|
|
457
|
-
const pkg = JSON.parse(fs_1.default.readFileSync(path_1.default.join(process.cwd(), "package.json"), "utf-8"));
|
|
458
|
-
const version = pkg.version;
|
|
459
|
-
const log = logger.for("get-crypto-material");
|
|
460
|
-
log.debug(`running with options: ${JSON.stringify(options)} for ${pkg.name} version ${version}`);
|
|
461
|
-
const { folder, org } = options;
|
|
462
|
-
(0, child_process_1.execSync)(`docker cp ${org}:/weaver/client/. ${folder}`, {
|
|
463
|
-
cwd: process.cwd(),
|
|
464
|
-
});
|
|
465
|
-
});
|
|
466
|
-
const fabricCmd = new commander_1.Command()
|
|
467
|
-
.name("for-fabric")
|
|
468
|
-
.command("fabric")
|
|
469
|
-
.description("exposes several commands to help manage the fabric infrastructure");
|
|
470
|
-
fabricCmd.addCommand(compileCommand);
|
|
471
|
-
fabricCmd.addCommand(extractIndexes);
|
|
472
|
-
fabricCmd.addCommand(ensureInfra);
|
|
473
|
-
fabricCmd.addCommand(deployContract);
|
|
474
|
-
fabricCmd.addCommand(getCryptoMaterial);
|
|
475
|
-
fabricCmd.addCommand(extractCollections);
|
|
476
|
-
function fabric() {
|
|
477
|
-
return fabricCmd;
|
|
478
|
-
}
|
|
479
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGktbW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBaXNCQSx5QkFFQztBQW5zQkQseUNBQW9DO0FBQ3BDLCtDQUEwRDtBQUMxRCxpREFBeUM7QUFDekMsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUN4QixtQ0FBd0M7QUFDeEMsNEVBQTZDO0FBQzdDLDJEQUE0RTtBQUM1RSx3REFPMEI7QUFDMUIseUVBQXVEO0FBQ3ZELCtDQVFxQjtBQUNyQix3Q0FBNEI7QUFDNUIsNERBQTRCO0FBQzVCLDBEQUtvQztBQUdwQyxNQUFNLE1BQU0sR0FBRyxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVyQyxTQUFTLHVCQUF1QjtJQUM5QixPQUFPO1FBQ0wsSUFBSSxFQUFFLDRCQUE0QjtRQUNsQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVE7WUFDeEIsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsTUFBTSxZQUFZLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxjQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sVUFBVSxHQUFHO2dCQUNqQixZQUFZO2dCQUNaLEdBQUcsWUFBWSxLQUFLO2dCQUNwQixjQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUM7YUFDcEMsQ0FBQztZQUVGLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ25DLElBQUksWUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxZQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7b0JB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LFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNyQyxTQUFTLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDeEMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0FBRXpDLFNBQXdCLE1BQU07SUFDNUIsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgeyBMb2dnaW5nLCB0b1Bhc2NhbENhc2UgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7IGV4ZWNTeW5jIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBQbHVnaW4sIHJvbGx1cCB9IGZyb20gXCJyb2xsdXBcIjtcbmltcG9ydCByZXBsYWNlIGZyb20gXCJAcm9sbHVwL3BsdWdpbi1yZXBsYWNlXCI7XG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yLCBTZXJpYWxpemF0aW9uRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7XG4gIGdlbmVyYXRlTW9kZWxEZXNpZ25Eb2NzLFxuICBnZW5lcmF0ZU1vZGVsSW5kZXhlcyxcbiAgcmVhZE1vZGVsRmlsZSxcbiAgcmVhZE1vZGVsRm9sZGVycyxcbiAgd3JpdGVEZXNpZ25Eb2NzLFxuICB3cml0ZUluZGV4ZXMsXG59IGZyb20gXCIuL2NsaWVudC9pbmRleGVzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7XG4gIGFwcHJvdmVDb250cmFjdCxcbiAgZW5zdXJlSW5mcmFzdHJ1Y3R1cmVCb290ZWQsXG4gIGluc3RhbGxDb250cmFjdCxcbiAgcGFja2FnZUNvbnRyYWN0LFxuICBjb21taXRDaGFpbmNvZGUsXG4gIGdldENvbnRyYWN0U3RhcnRDb21tYW5kLFxuICBjb21waWxlV2l0aFRzY29uZmlnT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi9jbGktdXRpbHNcIjtcbmltcG9ydCBcIi4vc2hhcmVkL292ZXJyaWRlc1wiO1xuaW1wb3J0IHRzIGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5pbXBvcnQge1xuICBleHRyYWN0Q29sbGVjdGlvbnMgYXMgZXhDb2xsZWN0aW9ucyxcbiAgUHJpdmF0ZUNvbGxlY3Rpb24sXG4gIHdyaXRlQ29sbGVjdGlvbnMsXG4gIHdyaXRlQ29sbGVjdGlvbkRlc2lnbkRvY3MsXG59IGZyb20gXCIuL2NsaWVudC9jb2xsZWN0aW9ucy9pbmRleFwiO1xuaW1wb3J0IHsgQ291Y2hEQkRlc2lnbkRvYywgQ3JlYXRlSW5kZXhSZXF1ZXN0IH0gZnJvbSBcIkBkZWNhZi10cy9mb3ItY291Y2hkYlwiO1xuXG5jb25zdCBsb2dnZXIgPSBMb2dnaW5nLmZvcihcImZhYnJpY1wiKTtcblxuZnVuY3Rpb24gcmVzb2x2ZUJ1bmRsZWRKc0ltcG9ydHMoKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcInJlc29sdmUtYnVuZGxlZC1qcy1pbXBvcnRzXCIsXG4gICAgcmVzb2x2ZUlkKHNvdXJjZSwgaW1wb3J0ZXIpIHtcbiAgICAgIGlmICghaW1wb3J0ZXIgfHwgIXNvdXJjZS5zdGFydHNXaXRoKFwiLlwiKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShpbXBvcnRlciksIHNvdXJjZSk7XG4gICAgICBjb25zdCBjYW5kaWRhdGVzID0gW1xuICAgICAgICByZXNvbHZlZFBhdGgsXG4gICAgICAgIGAke3Jlc29sdmVkUGF0aH0uanNgLFxuICAgICAgICBwYXRoLmpvaW4ocmVzb2x2ZWRQYXRoLCBcImluZGV4LmpzXCIpLFxuICAgICAgXTtcblxuICAgICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcykge1xuICAgICAgICBpZiAoZnMuZXhpc3RzU3luYyhjYW5kaWRhdGUpICYmIGZzLnN0YXRTeW5jKGNhbmRpZGF0ZSkuaXNGaWxlKCkpIHtcbiAgICAgICAgICByZXR1cm4gY2FuZGlkYXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0sXG4gIH07XG59XG5cbmNvbnN0IGNvbXBpbGVDb21tYW5kID0gbmV3IENvbW1hbmQoKVxuICAubmFtZShcImNvbXBpbGUtY29udHJhY3RcIilcbiAgLmRlc2NyaXB0aW9uKFwiQ3JlYXRlcyBhIGdsb2JhbCBjb250cmFjdFwiKVxuICAub3B0aW9uKFwiLS1kZXZcIiwgXCJjb21waWxlcyBjb250cmFjdHMgd2l0aG91dCBtaW5pZmljYXRpb25cIiwgZmFsc2UpXG4gIC5vcHRpb24oXCItLWRlYnVnXCIsIFwibWFrZXMgYXR0YWNoaW5nIGRlYnVnZ2VyIHBvc3NpYmxlXCIsIGZhbHNlKVxuICAub3B0aW9uKFxuICAgIFwiLS1jY2Fhc1wiLFxuICAgIFwiQWp1c3RzIHRoZSBwYWNrYWdlIGNvbW1hbmRzIHRvIGJlIGRlcGxveWVkIGFzIGNjYWFzXCIsXG4gICAgZmFsc2VcbiAgKVxuICAub3B0aW9uKFwiLS1uYW1lIDxTdHJpbmc+XCIsIFwiY29udHJhY3QgbmFtZVwiLCBcImdsb2JhbC1jb250cmFjdFwiKVxuICAub3B0aW9uKFwiLS1idW5kbGVcIiwgXCJCdW5kbGVzIHdpdGggcm9sbHVwIGluc3RlYWQgb2YgdXNpbmcgdHNjXCIsIGZhbHNlKVxuICAub3B0aW9uKFxuICAgIFwiLS10cy1jb25maWctZmlsZSA8c3RyaW5nPlwiLFxuICAgIFwicmVsYXRpdmUgcGF0aCB0byB0aGUgdHMgY29uZmlnIGZpbGUgYmFzZWQgb24gY3dkIG9yIGFic29sdXRlIHBhdGhcIixcbiAgICBcIi4vdHNjb25maWcuanNvblwiXG4gIClcbiAgLm9wdGlvbihcbiAgICBcIi0tZGVzY3JpcHRpb24gPFN0cmluZz5cIixcbiAgICBcImNvbnRyYWN0IGRlc2NyaXB0aW9uXCIsXG4gICAgXCJHbG9iYWwgY29udHJhY3QgaW1wbGVtZW50YXRpb25cIlxuICApXG4gIC5vcHRpb24oXCItLXN0cmlwLWNvbnRyYWN0LW5hbWVcIiwgXCJzdHJpcCBjb250cmFjdCBuYW1lIGZyb20gb3V0cHV0XCIsIGZhbHNlKVxuICAub3B0aW9uKFwiLS1pbnB1dCA8U3RyaW5nPlwiLCBcImlucHV0IGZvbGRlciBmb3IgY29udHJhY3RzXCIsIFwibGliL2NvbnRyYWN0c1wiKVxuICAub3B0aW9uKFwiLS1vdXRwdXQgPFN0cmluZz5cIiwgXCJvdXRwdXQgZm9sZGVyIGZvciBjb250cmFjdHNcIiwgXCIuL2NvbnRyYWN0c1wiKVxuICAub3B0aW9uKFwiLS1zb3VyY2VtYXBzXCIsIFwiaW5jbHVkZXMgc291cmNlbWFwcyBpbiB0aGUgY29tcGlsZWQgb3V0cHV0XCIsIGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBhbnkpID0+IHtcbiAgICBjb25zdCBwa2cgPSBKU09OLnBhcnNlKFxuICAgICAgZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcInBhY2thZ2UuanNvblwiKSwgXCJ1dGYtOFwiKVxuICAgICk7XG5cbiAgICBjb25zdCB2ZXJzaW9uID0gcGtnLnZlcnNpb247XG5cbiAgICBsZXQge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgZGV2LFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgZGVidWcsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBuYW1lLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBvdXRwdXQsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBpbnB1dCxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICAgIHN0cmlwQ29udHJhY3ROYW1lLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgICAgY2NhYXMsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgICBidW5kbGUsXG5cbiAgICAgIHRzQ29uZmlnRmlsZSxcbiAgICAgIHNvdXJjZW1hcHMsXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihcImNvbXBpbGUtY29udHJhY3RcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG5cbiAgICB0c0NvbmZpZ0ZpbGUgPSBwYXRoLmlzQWJzb2x1dGUodHNDb25maWdGaWxlKVxuICAgICAgPyB0c0NvbmZpZ0ZpbGVcbiAgICAgIDogcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIHRzQ29uZmlnRmlsZSk7XG5cbiAgICBvdXRwdXQgPSBzdHJpcENvbnRyYWN0TmFtZSA/IG91dHB1dCA6IHBhdGguam9pbihvdXRwdXQsIG5hbWUpO1xuICAgIGxvZy5pbmZvKGBEZWxldGluZyBleGlzdGluZyBvdXRwdXQgZm9sZGVyIChpZiBleGlzdHMpIHVuZGVyICR7b3V0cHV0fWApO1xuICAgIGV4ZWNTeW5jKGBybSAtcmYgJHtvdXRwdXR9YCk7XG4gICAgaWYgKGJ1bmRsZSkge1xuICAgICAgbG9nLmluZm8oYGJ1bmRsaW5nIGNvbnRyYWN0IGZyb20gJHtpbnB1dH1gKTtcbiAgICAgIGNvbnN0IHRlbXBCdW5kbGVEaXIgPSBmcy5ta2R0ZW1wU3luYyhcbiAgICAgICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiLmNvbnRyYWN0LWJ1bmRsZS1cIilcbiAgICAgICk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbnB1dEVudHJ5ID0gcGF0aC5yZXNvbHZlKHByb2Nlc3MuY3dkKCksIGlucHV0LCBcImluZGV4LnRzXCIpO1xuICAgICAgICBjb25zdCBjb25maWdGaWxlID0gdHMucmVhZENvbmZpZ0ZpbGUodHNDb25maWdGaWxlLCB0cy5zeXMucmVhZEZpbGUpO1xuICAgICAgICBpZiAoY29uZmlnRmlsZS5lcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgdHMuZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlVGV4dChjb25maWdGaWxlLmVycm9yLm1lc3NhZ2VUZXh0LCBcIlxcblwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJzZWRDb25maWcgPSB0cy5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChcbiAgICAgICAgICBjb25maWdGaWxlLmNvbmZpZyxcbiAgICAgICAgICB0cy5zeXMsXG4gICAgICAgICAgcGF0aC5kaXJuYW1lKHRzQ29uZmlnRmlsZSksXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHRzQ29uZmlnRmlsZVxuICAgICAgICApO1xuICAgICAgICBpZiAocGFyc2VkQ29uZmlnLmVycm9ycy5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgICAgIHBhcnNlZENvbmZpZy5lcnJvcnNcbiAgICAgICAgICAgICAgLm1hcCgoZXJyb3IpID0+XG4gICAgICAgICAgICAgICAgdHMuZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlVGV4dChlcnJvci5tZXNzYWdlVGV4dCwgXCJcXG5cIilcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuam9pbihcIlxcblwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0ZW1wQ29tcGlsZXJPcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMgPSB7XG4gICAgICAgICAgLi4ucGFyc2VkQ29uZmlnLm9wdGlvbnMsXG4gICAgICAgICAgb3V0RGlyOiB0ZW1wQnVuZGxlRGlyLFxuICAgICAgICAgIG1vZHVsZTogdHMuTW9kdWxlS2luZC5FU05leHQsXG4gICAgICAgICAgZGVjbGFyYXRpb246IGZhbHNlLFxuICAgICAgICAgIHNvdXJjZU1hcDogZmFsc2UsXG4gICAgICAgICAgaW5saW5lU291cmNlczogZmFsc2UsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJ1bmRsZWRFbnRyeVBvaW50ID0gdHNcbiAgICAgICAgICAuZ2V0T3V0cHV0RmlsZU5hbWVzKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5wYXJzZWRDb25maWcsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IHRlbXBDb21waWxlck9wdGlvbnMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5wdXRFbnRyeSxcbiAgICAgICAgICAgICF0cy5zeXMudXNlQ2FzZVNlbnNpdGl2ZUZpbGVOYW1lc1xuICAgICAgICAgIClcbiAgICAgICAgICAuZmluZCgoZmlsZU5hbWUpID0+IGZpbGVOYW1lLmVuZHNXaXRoKFwiLmpzXCIpKTtcblxuICAgICAgICBpZiAoIWJ1bmRsZWRFbnRyeVBvaW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgICAgICBgRmFpbGVkIHRvIGRldGVybWluZSB0aGUgZW1pdHRlZCBidW5kbGUgZW50cnkgZm9yICR7aW5wdXRFbnRyeX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBpbGVXaXRoVHNjb25maWdPdmVycmlkZXModHNDb25maWdGaWxlLCB0ZW1wQ29tcGlsZXJPcHRpb25zKTtcbiAgICAgICAgY29uc3QgYnVuZGxlZENvbnRyYWN0ID0gYXdhaXQgcm9sbHVwKHtcbiAgICAgICAgICBpbnB1dDogYnVuZGxlZEVudHJ5UG9pbnQsXG4gICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgcmVzb2x2ZUJ1bmRsZWRKc0ltcG9ydHMoKSxcbiAgICAgICAgICAgIHJlcGxhY2Uoe1xuICAgICAgICAgICAgICBwcmV2ZW50QXNzaWdubWVudDogdHJ1ZSxcbiAgICAgICAgICAgICAgZGVsaW1pdGVyczogW1wiXCIsIFwiXCJdLFxuICAgICAgICAgICAgICB2YWx1ZXM6IHsgXCIjI1ZFUlNJT04jI1wiOiB2ZXJzaW9uLCBcIiMjUEFDS0FHRSMjXCI6IHBrZy5uYW1lIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICAgICAgbG9nLmluZm8oXG4gICAgICAgICAgYHdpdGhpbmcgY29udHJhY3QgdG8gJHtvdXRwdXR9IHdpdGggbmFtZSAke3RvUGFzY2FsQ2FzZShuYW1lKX0uanNgXG4gICAgICAgICk7XG4gICAgICAgIGF3YWl0IGJ1bmRsZWRDb250cmFjdC53cml0ZSh7XG4gICAgICAgICAgZmlsZTogYCR7b3V0cHV0fS8ke3RvUGFzY2FsQ2FzZShuYW1lKX0uanNgLFxuICAgICAgICAgIGZvcm1hdDogXCJ1bWRcIixcbiAgICAgICAgICBuYW1lOiBgJHt0b1Bhc2NhbENhc2UobmFtZSl9LmpzYCxcbiAgICAgICAgICBzb3VyY2VtYXA6IHNvdXJjZW1hcHMgPyBcImlubGluZVwiIDogZmFsc2UsXG4gICAgICAgICAgc291cmNlbWFwUGF0aFRyYW5zZm9ybTogKHJlbGF0aXZlU291cmNlUGF0aCwgc291cmNlbWFwUGF0aCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWJzb2x1dGVTb3VyY2VQYXRoID0gcGF0aC5yZXNvbHZlKFxuICAgICAgICAgICAgICBwYXRoLmRpcm5hbWUoc291cmNlbWFwUGF0aCksXG4gICAgICAgICAgICAgIHJlbGF0aXZlU291cmNlUGF0aFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGFic29sdXRlU291cmNlUGF0aC5zdGFydHNXaXRoKHRlbXBCdW5kbGVEaXIpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBwYXRoLnBvc2l4LmpvaW4oXG4gICAgICAgICAgICAgICAgXCIuYnVuZGxlXCIsXG4gICAgICAgICAgICAgICAgcGF0aFxuICAgICAgICAgICAgICAgICAgLnJlbGF0aXZlKHRlbXBCdW5kbGVEaXIsIGFic29sdXRlU291cmNlUGF0aClcbiAgICAgICAgICAgICAgICAgIC5zcGxpdChwYXRoLnNlcClcbiAgICAgICAgICAgICAgICAgIC5qb2luKFwiL1wiKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcmVsYXRpdmVTb3VyY2VQYXRoO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBidW5kbGVkQ29udHJhY3QuY2xvc2UoKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGZzLnJtU3luYyh0ZW1wQnVuZGxlRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBpbGVXaXRoVHNjb25maWdPdmVycmlkZXModHNDb25maWdGaWxlLCB7XG4gICAgICAgIG91dERpcjogb3V0cHV0LFxuICAgICAgICBtb2R1bGU6IHRzLk1vZHVsZUtpbmQuRVNOZXh0LFxuICAgICAgICBkZWNsYXJhdGlvbjogZmFsc2UsXG4gICAgICAgIHNvdXJjZU1hcDogc291cmNlbWFwcyxcbiAgICAgICAgaW5saW5lU291cmNlczogc291cmNlbWFwcyxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHNjcmlwdHMgPSB7XG4gICAgICBzdGFydDogZ2V0Q29udHJhY3RTdGFydENvbW1hbmQoZGVidWcsIGNjYWFzKSxcbiAgICAgIFwic3RhcnQ6ZGV2XCI6IFwiZmFicmljLWNoYWluY29kZS1ub2RlIHN0YXJ0IC0tdGxzLmVuYWJsZWQgZmFsc2VcIixcbiAgICAgIFwic3RhcnQ6d2F0Y2hcIjogJ25vZGVtb24gLS1leGVjIFwibnBtIHJ1biBzdGFydDpkZXZcIicsXG4gICAgICBidWlsZDogJ2VjaG8gXCJObyBuZWVkIHRvIGJ1aWxkIHRoZSBjaGFpbmNvZGVcIicsXG4gICAgICBsaW50OiBcImVzbGludCAuIC0tZml4IC0tZXh0IC5qc1wiLFxuICAgIH07XG5cbiAgICBjb25zdCBjb250cmFjdFBhY2thZ2UgPSBwa2c7XG5cbiAgICBjb250cmFjdFBhY2thZ2UubmFtZSA9IG5hbWU7XG4gICAgY29udHJhY3RQYWNrYWdlLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgY29udHJhY3RQYWNrYWdlLnNjcmlwdHMgPSBzY3JpcHRzO1xuXG4gICAgZGVsZXRlIGNvbnRyYWN0UGFja2FnZS50eXBlO1xuICAgIGRlbGV0ZSBjb250cmFjdFBhY2thZ2UudHlwZXM7XG4gICAgZGVsZXRlIGNvbnRyYWN0UGFja2FnZS5leHBvcnRzO1xuICAgIGNvbnRyYWN0UGFja2FnZS5tYWluID0gYnVuZGxlXG4gICAgICA/IGAke3RvUGFzY2FsQ2FzZShuYW1lKX0uanNgXG4gICAgICA6IGAke2lucHV0fS9pbmRleC5qc2A7XG5cbiAgICBmcy53cml0ZUZpbGVTeW5jKFxuICAgICAgcGF0aC5qb2luKG91dHB1dCwgXCJwYWNrYWdlLmpzb25cIiksXG4gICAgICBKU09OLnN0cmluZ2lmeShjb250cmFjdFBhY2thZ2UpXG4gICAgKTtcblxuICAgIGxvZy5pbmZvKGBJbnN0YWxsaW5nIGFuZCBzaHJpbmt3cmFwcGluZyBkZXBlbmRlbmNpZXNgKTtcbiAgICBleGVjU3luYyhgbnBtIGluc3RhbGxgLCB7IGN3ZDogb3V0cHV0IH0pO1xuICAgIGV4ZWNTeW5jKGBucG0gc2hyaW5rd3JhcGAsIHsgY3dkOiBvdXRwdXQgfSk7XG4gICAgZXhlY1N5bmMoXCJybSAtcmYgbm9kZV9tb2R1bGVzXCIsIHsgY3dkOiBvdXRwdXQgfSk7XG4gICAgbG9nLmluZm8oYGRlbGV0aW5nIHRlbXAgZm9sZGVyc2ApO1xuICAgIGV4ZWNTeW5jKGBybSAtcmYgLi9saWIgJiYgcm0gLXJmIC4vZGlzdGAsIHsgY3dkOiBvdXRwdXQgfSk7XG4gICAgbG9nLmluZm8oXG4gICAgICBgQ29udHJhY3QgJHtuYW1lfSBjb21waWxlZCBzdWNjZXNzZnVsbHkhIGluICR7cGF0aC5yZXNvbHZlKG91dHB1dCl9YFxuICAgICk7XG4gICAgaWYgKGRldikge1xuICAgICAgbG9nLmluZm8oYGRldiBtb2RlIGVuYWJsZWQuIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzIGZvciBkZWJ1Z2dpbmdgKTtcbiAgICAgIGV4ZWNTeW5jKGBucG0gaW5zdGFsbGAsIHtcbiAgICAgICAgY3dkOiBvdXRwdXQsXG4gICAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgTk9ERV9FTlY6IFwicHJvZHVjdGlvblwiIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG5jb25zdCBleHRyYWN0SW5kZXhlcyA9IG5ldyBDb21tYW5kKClcbiAgLmNvbW1hbmQoXCJleHRyYWN0LWluZGV4ZXNcIilcbiAgLm9wdGlvbihcIi0tZmlsZSBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmaWxlXCIpXG4gIC5vcHRpb24oXCItLWZvbGRlciBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmb2xkZXJcIilcbiAgLm9wdGlvbihcIi0tb3V0RGlyIDxTdHJpbmc+XCIsIFwidGhlIG91dGRpci4gc2hvdWxkIG1hdGNoIHlvdXIgY29udHJhY3QgZm9sZGVyXCIpXG4gIC5kZXNjcmlwdGlvbihcbiAgICBcIkNyZWF0ZXMgYSB0aGUgSlNPTiBpbmRleCBmaWxlcyB0byBiZSBzdWJtaXR0ZWQgdG8gYWxvbmcgd2l0aCB0aGUgY29udHJhY3RcIlxuICApXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJleHRyYWN0LWluZGV4ZXNcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gICAgbGV0IHsgZmlsZSwgZm9sZGVyLCBvdXREaXIgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBtb2RlbHM6IGFueVtdID0gW107XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgIG1vZGVscy5wdXNoKC4uLnJlYWRNb2RlbEZpbGUoZmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChmb2xkZXIpIHtcbiAgICAgIGxvZy5pbmZvKGBMb2FkaW5nIG1vZGVscyBmcm9tICR7Zm9sZGVyfS4uLmApO1xuICAgICAgbW9kZWxzLnB1c2goLi4uKGF3YWl0IHJlYWRNb2RlbEZvbGRlcnMoZm9sZGVyKSkpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBjb25zdCBkZXNpZ25Eb2NzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgICBpZiAoIWZpbGUgJiYgIWZvbGRlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBNdXN0IHBhc3MgYSBmaWxlIG9yIGEgZm9sZGVyYCk7XG5cbiAgICBmb3IgKGNvbnN0IG0gb2YgbW9kZWxzKSB7XG4gICAgICBsb2cudmVyYm9zZShgRXh0cmFjdGluZyBpbmRleGVzIGZvciB0YWJsZSAke01vZGVsLnRhYmxlTmFtZShtKX1gKTtcbiAgICAgIGNvbnN0IGluZGV4ZXMgPSBnZW5lcmF0ZU1vZGVsSW5kZXhlcyhtKTtcbiAgICAgIGluZGV4ZXMuZm9yRWFjaCgoaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4Lm5hbWUpIHtcbiAgICAgICAgICByZXN1bHRbaW5kZXgubmFtZV0gPSBpbmRleDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBnZW5lcmF0ZU1vZGVsRGVzaWduRG9jcyhtLCBkZXNpZ25Eb2NzKTtcbiAgICB9XG4gICAgY29uc3QgaW5kZXhlc1RvV3JpdGUgPSBPYmplY3QudmFsdWVzKHJlc3VsdCk7XG4gICAgY29uc3QgZG9jc1RvV3JpdGUgPSBPYmplY3QudmFsdWVzKGRlc2lnbkRvY3MpO1xuICAgIGxvZy52ZXJib3NlKGBGb3VuZCAke2luZGV4ZXNUb1dyaXRlLmxlbmd0aH0gaW5kZXhlcyB0byBjcmVhdGVgKTtcbiAgICBsb2cudmVyYm9zZShgRm91bmQgJHtkb2NzVG9Xcml0ZS5sZW5ndGh9IGRlc2lnbiBkb2NzIHRvIGNyZWF0ZWApO1xuICAgIGxvZy5kZWJ1ZyhgSW5kZXhlczogJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgIGxvZy5kZWJ1ZyhgRGVzaWduRG9jczogJHtKU09OLnN0cmluZ2lmeShkZXNpZ25Eb2NzKX1gKTtcbiAgICB3cml0ZUluZGV4ZXMoaW5kZXhlc1RvV3JpdGUsIG91dERpcik7XG4gICAgd3JpdGVEZXNpZ25Eb2NzKGRvY3NUb1dyaXRlLCBvdXREaXIpO1xuICB9KTtcblxuY29uc3QgZXh0cmFjdENvbGxlY3Rpb25zID0gbmV3IENvbW1hbmQoKVxuICAuY29tbWFuZChcImV4dHJhY3QtY29sbGVjdGlvbnNcIilcbiAgLm9wdGlvbihcIi0tZmlsZSBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmaWxlXCIpXG4gIC5vcHRpb24oXCItLWZvbGRlciBbU3RyaW5nXVwiLCBcInRoZSBtb2RlbCBmb2xkZXJcIilcbiAgLm9wdGlvbihcIi0tb3V0RGlyIDxTdHJpbmc+XCIsIFwidGhlIG91dGRpci4gc2hvdWxkIG1hdGNoIHlvdXIgY29udHJhY3QgZm9sZGVyXCIpXG4gIC5vcHRpb24oXCItLW1zcElkcyA8U3RyaW5nPlwiLCBcInNpbmdsZSBtc3BJZCBvciBzdHJpbmdpZmllZCBhcnJheVwiKVxuICAub3B0aW9uKFwiLS1tYWluTXNwSWQgPFN0cmluZz5cIiwgXCJzaW5nbGUgbXNwSWRcIilcbiAgLm9wdGlvbihcbiAgICBcIi0tb3ZlcnJpZGVzIFtTdHJpbmddXCIsXG4gICAgXCJzdHJpbmdpZmllZCBvdmVycmlkZSBvYmplY3Qge3JlcXVpcmVkUGVlckNvdW50OiBudW1iZXIsIG1heFBlZXJDb3VudDogbnVtYmVyLCBibG9ja1RvTGl2ZTogbnVtYmVyLCBtZW1iZXJPbmx5UmVhZDogbnVtYmVyLCBtZW1iZXJPbmx5V3JpdGU6IG51bWJlciwgZW5kb3JzZW1lbnRQb2xpY3k6ICB7fX1cIlxuICApXG4gIC5kZXNjcmlwdGlvbihcbiAgICBcIkNyZWF0ZXMgYSB0aGUgSlNPTiBpbmRleCBmaWxlcyB0byBiZSBzdWJtaXR0ZWQgdG8gYWxvbmcgd2l0aCB0aGUgY29udHJhY3RcIlxuICApXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJleHRyYWN0LWNvbGxlY3Rpb25zXCIpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBydW5uaW5nIHdpdGggb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX0gZm9yICR7cGtnLm5hbWV9IHZlcnNpb24gJHt2ZXJzaW9ufWBcbiAgICApO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGxldCB7IGZpbGUsIGZvbGRlciwgb3V0RGlyLCBtc3BJZHMsIG1haW5Nc3BJZCB9ID0gb3B0aW9ucztcblxuICAgIHRyeSB7XG4gICAgICB0cnkge1xuICAgICAgICBtc3BJZHMgPSBtc3BJZHMgPyBKU09OLnBhcnNlKG1zcElkcykgOiB1bmRlZmluZWQ7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgLy8gIGRvIG5vdGhpbmdcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKGBVbmFibGUgdG8gZXh0cmFjdCBtc3BpZHM6ICAke2V9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgbW9kZWxzOiBhbnlbXSA9IFtdO1xuICAgIGlmIChmaWxlKSB7XG4gICAgICBtb2RlbHMucHVzaCguLi5yZWFkTW9kZWxGaWxlKGZpbGUpKTtcbiAgICB9XG5cbiAgICBpZiAoZm9sZGVyKSB7XG4gICAgICBsb2cuaW5mbyhgTG9hZGluZyBtb2RlbHMgZnJvbSAke2ZvbGRlcn0uLi5gKTtcbiAgICAgIG1vZGVscy5wdXNoKC4uLihhd2FpdCByZWFkTW9kZWxGb2xkZXJzKGZvbGRlcikpKTtcbiAgICB9XG5cbiAgICBpZiAoIWZpbGUgJiYgIWZvbGRlcilcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBNdXN0IHBhc3MgYSBmaWxlIG9yIGEgZm9sZGVyYCk7XG5cbiAgICBjb25zdCBpbmplY3RhYmxlTW9kZWxzID0gbW9kZWxzLmZpbHRlcihcbiAgICAgIChtb2RlbCkgPT5cbiAgICAgICAgTW9kZWwuaXNTaGFyZWQobW9kZWwpIHx8XG4gICAgICAgIE1vZGVsLmlzUHJpdmF0ZShtb2RlbCkgfHxcbiAgICAgICAgISFNb2RlbC5taXJyb3JlZEF0KG1vZGVsKVxuICAgICk7XG4gICAgaWYgKCFpbmplY3RhYmxlTW9kZWxzLmxlbmd0aCkge1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIGBObyBzaGFyZWQsIHByaXZhdGUsIG9yIG1pcnJvcmVkIG1vZGVscyBmb3VuZCB0byBleHRyYWN0IGNvbGxlY3Rpb25zYFxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhc3luYyBmdW5jdGlvbiBnZXRDb2xzKG1zcElkc0xpc3Q/OiBzdHJpbmdbXSkge1xuICAgICAgY29uc3QgY29sczoge1xuICAgICAgICBpbmRleGVzOiBDcmVhdGVJbmRleFJlcXVlc3RbXTtcbiAgICAgICAgZGVzaWduRG9jczogQ291Y2hEQkRlc2lnbkRvY1tdO1xuICAgICAgICBtaXJyb3I/OiBQcml2YXRlQ29sbGVjdGlvbjtcbiAgICAgICAgY29sbGVjdGlvbnM6IFByaXZhdGVDb2xsZWN0aW9uW107XG4gICAgICB9W10gPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgaW5qZWN0YWJsZU1vZGVscy5tYXAoYXN5bmMgKGNsYXp6KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFibGVOYW1lID0gTW9kZWwudGFibGVOYW1lKGNsYXp6KTtcbiAgICAgICAgICBjb25zdCBtaXJyb3JNZXRhID0gTW9kZWwubWlycm9yZWRBdChjbGF6eik7XG5cbiAgICAgICAgICBjb25zb2xlLmxvZyh0YWJsZU5hbWUpO1xuICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgICAgICAgZm9yIChjb25zdCBtc3Agb2YgbXNwSWRzTGlzdCB8fCBtc3BJZHMgfHwgW10pIHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb25zW21zcF0gPSBhd2FpdCBleENvbGxlY3Rpb25zKFxuICAgICAgICAgICAgICBjbGF6eixcbiAgICAgICAgICAgICAgW21zcCwgbWFpbk1zcElkXSxcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgLy8gICBzaGFyZWRDb2xzOiBPYmplY3QuYXNzaWduKHt9LCBvdmVycmlkZXMuc2hhcmVkQ29scyksXG4gICAgICAgICAgICAgIC8vICAgcHJpdmF0ZUNvbHM6IE9iamVjdC5hc3NpZ24oe30sIG92ZXJyaWRlcy5wcml2YXRlQ29scyksXG4gICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICEhbWlycm9yTWV0YVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgbWlycm9yQ29sbGVjdGlvbjogUHJpdmF0ZUNvbGxlY3Rpb24gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAobWlycm9yTWV0YSkge1xuICAgICAgICAgICAgY29sbGVjdGlvbnNbbWFpbk1zcElkXSA9IGNvbGxlY3Rpb25zW21haW5Nc3BJZF0gfHwge307XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb2xsZWN0aW9ucykuZm9yRWFjaCgobXNwOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgY29sbGVjdGlvbnNbbWFpbk1zcElkXS5wcml2YXRlcyA9IGNvbGxlY3Rpb25zW1xuICAgICAgICAgICAgICAgIG1zcFxuICAgICAgICAgICAgICBdLnByaXZhdGVzPy5maWx0ZXIoKHA6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwLm5hbWUgIT09IChtaXJyb3JNZXRhLnJlc29sdmVyIGFzIHN0cmluZykpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIG1pcnJvckNvbGxlY3Rpb24gPSBwIGFzIGFueTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgcHJpdmF0ZXNDb3VudCA9IE9iamVjdC52YWx1ZXMoY29sbGVjdGlvbnMpXG4gICAgICAgICAgICAubWFwKChjKSA9PiBjLnByaXZhdGVzKVxuICAgICAgICAgICAgLmZsYXQoKS5sZW5ndGg7XG4gICAgICAgICAgaWYgKHByaXZhdGVzQ291bnQpXG4gICAgICAgICAgICBsb2dcbiAgICAgICAgICAgICAgLmZvcihNb2RlbC50YWJsZU5hbWUoY2xhenopKVxuICAgICAgICAgICAgICAuaW5mbyhgRm91bmQgJHtwcml2YXRlc0NvdW50fSBwcml2YXRlIGNvbGxlY3Rpb25zIHRvIGNyZWF0ZWApO1xuICAgICAgICAgIGNvbnN0IHNoYXJlZENvdW50ID0gT2JqZWN0LnZhbHVlcyhjb2xsZWN0aW9ucylcbiAgICAgICAgICAgIC5tYXAoKGMpID0+IGMuc2hhcmVkKVxuICAgICAgICAgICAgLmZsYXQoKS5sZW5ndGg7XG5cbiAgICAgICAgICBsb2dcbiAgICAgICAgICAgIC5mb3IoTW9kZWwudGFibGVOYW1lKGNsYXp6KSlcbiAgICAgICAgICAgIC5pbmZvKGBGb3VuZCAke3NoYXJlZENvdW50fSBzaGFyZWQgY29sbGVjdGlvbnMgdG8gY3JlYXRlYCk7XG4gICAgICAgICAgaWYgKG1pcnJvckNvbGxlY3Rpb24pXG4gICAgICAgICAgICBsb2dcbiAgICAgICAgICAgICAgLmZvcihNb2RlbC50YWJsZU5hbWUoY2xhenopKVxuICAgICAgICAgICAgICAuaW5mbyhcbiAgICAgICAgICAgICAgICBgRm91bmQgb25lIG1pcnJvciBjb2xsZWN0aW9uICR7bWlycm9yTWV0YT8ucmVzb2x2ZXIgYXMgc3RyaW5nfWBcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgIGNvbnN0IGNvbExpc3QgPSBPYmplY3QudmFsdWVzKGNvbGxlY3Rpb25zKVxuICAgICAgICAgICAgLm1hcCgoYykgPT4gWy4uLihjLnByaXZhdGVzIHx8IFtdKSwgLi4uKGMuc2hhcmVkIHx8IFtdKV0pXG4gICAgICAgICAgICAuZmxhdCgpO1xuICAgICAgICAgIGxldCBpbmRleGVzOiBDcmVhdGVJbmRleFJlcXVlc3RbXSA9IFtdO1xuICAgICAgICAgIGxldCBkZXNpZ25Eb2NzOiBDb3VjaERCRGVzaWduRG9jW10gPSBbXTtcbiAgICAgICAgICBpZiAoY29sTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxvZ1xuICAgICAgICAgICAgICAuZm9yKE1vZGVsLnRhYmxlTmFtZShjbGF6eikpXG4gICAgICAgICAgICAgIC52ZXJib3NlKGBnZW5lcmF0aW5nIGluZGV4ZXMgZm9yIGNvbGxlY3Rpb25zYCk7XG4gICAgICAgICAgICBpbmRleGVzID0gZ2VuZXJhdGVNb2RlbEluZGV4ZXMoY2xhenopO1xuICAgICAgICAgICAgbG9nXG4gICAgICAgICAgICAgIC5mb3IoTW9kZWwudGFibGVOYW1lKGNsYXp6KSlcbiAgICAgICAgICAgICAgLmluZm8oYGZvdW5kICR7aW5kZXhlcy5sZW5ndGh9IGluZGV4ZXNgKTtcbiAgICAgICAgICAgIGRlc2lnbkRvY3MgPSBnZW5lcmF0ZU1vZGVsRGVzaWduRG9jcyhjbGF6eik7XG4gICAgICAgICAgICBsb2dcbiAgICAgICAgICAgICAgLmZvcihNb2RlbC50YWJsZU5hbWUoY2xhenopKVxuICAgICAgICAgICAgICAuaW5mbyhgZm91bmQgJHtkZXNpZ25Eb2NzLmxlbmd0aH0gZGVzaWduIGRvY3NgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4ZXMsXG4gICAgICAgICAgICBkZXNpZ25Eb2NzLFxuICAgICAgICAgICAgY29sbGVjdGlvbnM6IGNvbExpc3QsXG4gICAgICAgICAgICBtaXJyb3I6IG1pcnJvckNvbGxlY3Rpb24sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICByZXR1cm4gY29scztcbiAgICB9XG5cbiAgICBjb25zdCBjb2xzID0gYXdhaXQgZ2V0Q29scygpO1xuICAgIGNvbnN0IG9ubHlNaXJyb3IgPSBhd2FpdCBnZXRDb2xzKFttYWluTXNwSWRdKTtcblxuICAgIGNvbnN0IGNvbGxlY3Rpb25zVG8gPSBbXG4gICAgICAuLi5vbmx5TWlycm9yLmZpbHRlcigoYykgPT4gYy5taXJyb3IpLm1hcCgoYykgPT4gYy5taXJyb3IpLFxuICAgICAgLi4uY29scy5tYXAoKGMpID0+IGMuY29sbGVjdGlvbnMpLmZsYXQoKSxcbiAgICAgIC4uLmNvbHMuZmlsdGVyKChjKSA9PiBjLm1pcnJvcikubWFwKChjKSA9PiBjLm1pcnJvciksXG4gICAgXSBhcyBQcml2YXRlQ29sbGVjdGlvbltdO1xuXG4gICAgY29uc3QgdW5pcXVlQnlDb2xsZWN0aW9uID0gW1xuICAgICAgLi4ubmV3IE1hcChcbiAgICAgICAgY29sbGVjdGlvbnNUby5tYXAoKGl0ZW06IFByaXZhdGVDb2xsZWN0aW9uKSA9PiBbaXRlbS5uYW1lLCBpdGVtXSlcbiAgICAgICkudmFsdWVzKCksXG4gICAgXTtcblxuICAgIGlmICh1bmlxdWVCeUNvbGxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICB3cml0ZUNvbGxlY3Rpb25zKHVuaXF1ZUJ5Q29sbGVjdGlvbiwgb3V0RGlyKTtcbiAgICAgIGNvbnN0IG1ldGFDb2xsZWN0aW9uc0NvbmZpZyA9IHBhdGguam9pbihcbiAgICAgICAgb3V0RGlyLFxuICAgICAgICBcIk1FVEEtSU5GXCIsXG4gICAgICAgIFwiY29sbGVjdGlvbnNfY29uZmlnLmpzb25cIlxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNvbnRyYWN0Q29sbGVjdGlvbnNDb25maWcgPSBwYXRoLmpvaW4oXG4gICAgICAgIG91dERpcixcbiAgICAgICAgXCJjb2xsZWN0aW9uc19jb25maWcuanNvblwiXG4gICAgICApO1xuICAgICAgZnMuY29weUZpbGVTeW5jKG1ldGFDb2xsZWN0aW9uc0NvbmZpZywgY29udHJhY3RDb2xsZWN0aW9uc0NvbmZpZyk7XG4gICAgICBsb2cuaW5mbyhcbiAgICAgICAgYFN0b3JlZCAke2NvbGxlY3Rpb25zVG8ubGVuZ3RofSBjb2xsZWN0aW9ucyB0byAke21ldGFDb2xsZWN0aW9uc0NvbmZpZ31gXG4gICAgICApO1xuICAgICAgbG9nLmluZm8oXG4gICAgICAgIGBDb3BpZWQgY29sbGVjdGlvbnNfY29uZmlnIHRvICR7Y29udHJhY3RDb2xsZWN0aW9uc0NvbmZpZ30gYWxvbmdzaWRlIHRoZSBwYWNrYWdlLmpzb25gXG4gICAgICApO1xuXG4gICAgICBjb2xzLmZvckVhY2goKGMpID0+IHtcbiAgICAgICAgY29uc3QgeyBpbmRleGVzLCBkZXNpZ25Eb2NzLCBjb2xsZWN0aW9ucywgbWlycm9yIH0gPSBjO1xuICAgICAgICBjb25zdCB0b0luZGV4OiBQcml2YXRlQ29sbGVjdGlvbltdID0gWy4uLmNvbGxlY3Rpb25zLCBtaXJyb3JdLmZpbHRlcihcbiAgICAgICAgICBCb29sZWFuXG4gICAgICAgICkgYXMgUHJpdmF0ZUNvbGxlY3Rpb25bXTtcbiAgICAgICAgdG9JbmRleC5mb3JFYWNoKChpKSA9PiB7XG4gICAgICAgICAgd3JpdGVJbmRleGVzKGluZGV4ZXMsIG91dERpciwgaS5uYW1lKTtcbiAgICAgICAgICB3cml0ZUNvbGxlY3Rpb25EZXNpZ25Eb2NzKGRlc2lnbkRvY3MgfHwgW10sIG91dERpciwgaS5uYW1lKTtcbiAgICAgICAgICBsb2cuaW5mbyhcbiAgICAgICAgICAgIGBTdG9yZWQgJHtpbmRleGVzPy5sZW5ndGggfHwgMH0gaW5kZXhlcyBhbmQgJHtkZXNpZ25Eb2NzPy5sZW5ndGggfHwgMH0gZGVzaWduIGRvY3MgdG8gY29sbGVjdGlvbiAke2kubmFtZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuXG5jb25zdCBlbnN1cmVJbmZyYSA9IG5ldyBDb21tYW5kKClcbiAgLm5hbWUoXCJhd2FpdC1pbmZyYVwiKVxuICAuZGVzY3JpcHRpb24oXCJ3YWl0cyBmb3IgdGhlIGluZnJhc3RydWN0dXJlIHRvIGJlIHVwIGFuZCBydW5uaW5nXCIpXG4gIC5vcHRpb24oXG4gICAgXCItLWNvbnRhaW5lciA8U3RyaW5nPlwiLFxuICAgIFwiZG9ja2VyIGNvbnRhaW5lciBuYW1lIHRvIHRlc3QgKHVzdWFsbHkgbGFzdCBwZWVyKVwiLFxuICAgIFwiYm9vdC1vcmctYy1wZWVyLTBcIlxuICApXG4gIC5vcHRpb24oXCItLXRpbWVvdXQgPFN0cmluZz5cIiwgXCJ0aW1lb3V0IGJldHdlZW4gdGVzdHMgaW4gbWlsbGlzZWNvbmRzXCIsIFwiNTAwMFwiKVxuICAub3B0aW9uKFwiLS1hdHRlbXB0cyA8U3RyaW5nPlwiLCBcIm51bWJlciBvZiBhdHRlbXB0cyBiZWZvcmUgZ2l2aW5nIHVwXCIsIFwiMTBcIilcbiAgLmFjdGlvbihhc3luYyAob3B0aW9uczogYW55KSA9PiB7XG4gICAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShcbiAgICAgIGZzLnJlYWRGaWxlU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJwYWNrYWdlLmpzb25cIiksIFwidXRmLThcIilcbiAgICApO1xuXG4gICAgY29uc3QgdmVyc2lvbiA9IHBrZy52ZXJzaW9uO1xuXG4gICAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihcImF3YWl0LWluZnJhXCIpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBydW5uaW5nIHdpdGggb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX0gZm9yICR7cGtnLm5hbWV9IHZlcnNpb24gJHt2ZXJzaW9ufWBcbiAgICApO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBsZXQgeyBjb250YWluZXIsIHRpbWVvdXQsIGF0dGVtcHRzIH0gPSBvcHRpb25zO1xuICAgIHRpbWVvdXQgPSBwYXJzZUludCh0aW1lb3V0KSB8fCA1MDAwO1xuICAgIGF0dGVtcHRzID0gcGFyc2VJbnQoYXR0ZW1wdHMpIHx8IDEwO1xuXG4gICAgYXdhaXQgZW5zdXJlSW5mcmFzdHJ1Y3R1cmVCb290ZWQoXCJib290LW9yZy1jLXBlZXItMFwiLCB0aW1lb3V0LCBhdHRlbXB0cyk7XG5cbiAgICBsb2cuaW5mbyhcbiAgICAgIGBJbmZyYXN0cnVjdHVyZSBib290ZWQgc3VjY2Vzc2Z1bGx5IChhY2NvcmRpbmcgdG8gY29udGFpbmVyICR7Y29udGFpbmVyfSkhYFxuICAgICk7XG4gIH0pO1xuXG5jb25zdCBkZXBsb3lDb250cmFjdCA9IG5ldyBDb21tYW5kKClcbiAgLm5hbWUoXCJkZXBsb3ktY29udHJhY3RcIilcbiAgLmRlc2NyaXB0aW9uKFwiZGVwbG95cyB0aGUgc2VsZWN0ZWQgY29udHJhY3RcIilcbiAgLm9wdGlvbihcIi0tbmFtZSA8U3RyaW5nPlwiLCBcIkNvbnRyYWN0IE5hbWUgKGFuZCBmb2xkZXIpXCIpXG4gIC5vcHRpb24oXCItLWlucHV0IDxTdHJpbmc+XCIsIFwiaW5wdXQgZm9sZGVyXCIpXG4gIC5vcHRpb24oXG4gICAgXCItLWNvbGxlY3Rpb25zLWNvbmZpZyA8U3RyaW5nPlwiLFxuICAgIFwicGF0aCB0byBjb2xsZWN0aW9uc19jb25maWcuanNvbiB0byBjb25maWd1cmUgcHJpdmF0ZSBjb2xsZWN0aW9uc1wiXG4gIClcbiAgLm9wdGlvbihcbiAgICBcIi0taW5jcmVtZW50VmVyc2lvbiA8U3RyaW5nPlwiLFxuICAgIFwiKHRydWUgfCBmYWxzZSkgaWYgc2hvdWxkIHVzZSB2ZXJzaW9uIG9yIHNlcXVlbmNlIHRvIHVwZGF0ZSBjb250cmFjdHNcIixcbiAgICBmYWxzZVxuICApXG4gIC5vcHRpb24oXG4gICAgXCItLXRyYWNrZXJGb2xkZXIgPFN0cmluZz5cIixcbiAgICBcImNvbnRyYWN0IHZlcnNpb24gdHJhY2tlciBmb2xkZXIgKHNob3VsZCBiZSBkZWxldGVkIG9uIGluZnJhc3RydWN0dXJlOmRvd24pXCIsXG4gICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwidGVzdHNcIiwgXCJpbnRlZ3JhdGlvblwiLCBcImNoYWluY29kZVRyYWNrZXJzXCIpXG4gIClcbiAgLm9wdGlvbihcbiAgICBcIi0tcGVlcnMgPFN0cmluZz5cIixcbiAgICBcImNvbW1hIHNlcGFyYXRlZCBwZWVyIGlkc1wiLFxuICAgIFwib3JnLWEtcGVlci0wLG9yZy1iLXBlZXItMCxvcmctYy1wZWVyLTBcIlxuICApXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJkZXBsb3ktY29udHJhY3RcIik7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJ1bm5pbmcgd2l0aCBvcHRpb25zOiAke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMpfSBmb3IgJHtwa2cubmFtZX0gdmVyc2lvbiAke3ZlcnNpb259YFxuICAgICk7XG5cbiAgICBjb25zdCB7XG4gICAgICBuYW1lLFxuICAgICAgaW5wdXQsXG4gICAgICBwZWVycyxcbiAgICAgIHRyYWNrZXJGb2xkZXIsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICBpbmNyZW1lbnRWZXJzaW9uLFxuICAgICAgY29sbGVjdGlvbnNDb25maWcsXG4gICAgfSA9IG9wdGlvbnM7XG4gICAgY29uc3QgcGVlcklkcyA9IHBlZXJzLnNwbGl0KFwiLFwiKTtcblxuICAgIGNvbnN0IGNvdW50UGF0aCA9IHBhdGgucmVzb2x2ZShwYXRoLmpvaW4odHJhY2tlckZvbGRlciwgYCR7bmFtZX0uY291bnRgKSk7XG5cbiAgICBsZXQgc2VxdWVuY2U6IG51bWJlcjtcblxuICAgIHRyeSB7XG4gICAgICBzZXF1ZW5jZSA9IHBhcnNlSW50KGZzLnJlYWRGaWxlU3luYyhjb3VudFBhdGgpLnRvU3RyaW5nKFwidXRmLThcIikpO1xuICAgICAgaWYgKGlzTmFOKHNlcXVlbmNlKSkgc2VxdWVuY2UgPSAxO1xuICAgICAgZWxzZSBzZXF1ZW5jZSArPSAxO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHNlcXVlbmNlID0gMTtcbiAgICB9XG4gICAgLy9cbiAgICAvLyBpZiAoaW5jcmVtZW50VmVyc2lvbikge1xuICAgIC8vICAgdmVyc2lvbiA9IHZlcnNpb24gKyBgLSR7c2VxdWVuY2V9YDtcbiAgICAvLyAgIC8vIHNlcXVlbmNlID0gMTtcbiAgICAvLyB9XG5cbiAgICB0cnkge1xuICAgICAgZm9yIChjb25zdCBwZWVyIG9mIHBlZXJJZHMpIHtcbiAgICAgICAgcGFja2FnZUNvbnRyYWN0KHBlZXIsIGlucHV0LCBuYW1lLCB2ZXJzaW9uKTtcbiAgICAgICAgaW5zdGFsbENvbnRyYWN0KHBlZXIsIG5hbWUpO1xuICAgICAgICBhcHByb3ZlQ29udHJhY3QoXG4gICAgICAgICAgcGVlcixcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHBlZXIgPT09IFwib3JnLWEtcGVlci0wXCJcbiAgICAgICAgICAgID8gXCJ0bHMtY2EtY2VydC5wZW1cIlxuICAgICAgICAgICAgOiBcIm9yZGVyZXItdGxzLWNhLWNlcnQucGVtXCIsXG4gICAgICAgICAgc2VxdWVuY2UsXG4gICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICBjb2xsZWN0aW9uc0NvbmZpZ1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZnMud3JpdGVGaWxlU3luYyhjb3VudFBhdGgsIHNlcXVlbmNlLnRvU3RyaW5nKCkpO1xuICAgIH0gY2F0Y2ggKGVycjogYW55KSB7XG4gICAgICBsb2cuZXJyb3IoXCJFcnJvciBkZXBsb3lpbmcgY29udHJhY3Q6XCIsIGVycik7XG4gICAgfVxuICAgIGNvbW1pdENoYWluY29kZShuYW1lLCBzZXF1ZW5jZSwgdmVyc2lvbiwgY29sbGVjdGlvbnNDb25maWcpO1xuICB9KTtcblxuY29uc3QgZ2V0Q3J5cHRvTWF0ZXJpYWwgPSBuZXcgQ29tbWFuZCgpXG4gIC5uYW1lKFwiZ2V0LWNyeXB0by1tYXRlcmlhbFwiKVxuICAuZGVzY3JpcHRpb24oXCJjb3BpZXMgdGhlIGNyeXB0byBtYXRlcmlhbCB0byB0aGUgc2VsZWN0ZWQgZm9sZGVyXCIpXG4gIC5vcHRpb24oXCItLWZvbGRlciA8U3RyaW5nPlwiLCBcIm91dHB1dCBmb2xkZXJcIiwgXCJkb2NrZXIvZG9ja2VyLWRhdGFcIilcbiAgLm9wdGlvbihcIi0tb3JnIFtTdHJpbmddXCIsIFwidGhlIG9yZy9wZWVyIHRvIGV4dHJhY3QgZnJvbVwiLCBcIm9yZy1hXCIpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IGFueSkgPT4ge1xuICAgIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoXG4gICAgICBmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwicGFja2FnZS5qc29uXCIpLCBcInV0Zi04XCIpXG4gICAgKTtcblxuICAgIGNvbnN0IHZlcnNpb24gPSBwa2cudmVyc2lvbjtcblxuICAgIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoXCJnZXQtY3J5cHRvLW1hdGVyaWFsXCIpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBydW5uaW5nIHdpdGggb3B0aW9uczogJHtKU09OLnN0cmluZ2lmeShvcHRpb25zKX0gZm9yICR7cGtnLm5hbWV9IHZlcnNpb24gJHt2ZXJzaW9ufWBcbiAgICApO1xuICAgIGNvbnN0IHsgZm9sZGVyLCBvcmcgfSA9IG9wdGlvbnM7XG4gICAgZXhlY1N5bmMoYGRvY2tlciBjcCAke29yZ306L3dlYXZlci9jbGllbnQvLiAke2ZvbGRlcn1gLCB7XG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgfSk7XG4gIH0pO1xuXG5jb25zdCBmYWJyaWNDbWQgPSBuZXcgQ29tbWFuZCgpXG4gIC5uYW1lKFwiZm9yLWZhYnJpY1wiKVxuICAuY29tbWFuZChcImZhYnJpY1wiKVxuICAuZGVzY3JpcHRpb24oXG4gICAgXCJleHBvc2VzIHNldmVyYWwgY29tbWFuZHMgdG8gaGVscCBtYW5hZ2UgdGhlIGZhYnJpYyBpbmZyYXN0cnVjdHVyZVwiXG4gICk7XG5cbmZhYnJpY0NtZC5hZGRDb21tYW5kKGNvbXBpbGVDb21tYW5kKTtcbmZhYnJpY0NtZC5hZGRDb21tYW5kKGV4dHJhY3RJbmRleGVzKTtcbmZhYnJpY0NtZC5hZGRDb21tYW5kKGVuc3VyZUluZnJhKTtcbmZhYnJpY0NtZC5hZGRDb21tYW5kKGRlcGxveUNvbnRyYWN0KTtcbmZhYnJpY0NtZC5hZGRDb21tYW5kKGdldENyeXB0b01hdGVyaWFsKTtcbmZhYnJpY0NtZC5hZGRDb21tYW5kKGV4dHJhY3RDb2xsZWN0aW9ucyk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZhYnJpYygpIHtcbiAgcmV0dXJuIGZhYnJpY0NtZDtcbn1cbiJdfQ==
|