@decaf-ts/for-fabric 0.5.6 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (826) hide show
  1. package/dist/for-fabric.cjs +2 -3796
  2. package/dist/for-fabric.cjs.map +1 -0
  3. package/dist/for-fabric.js +2 -3900
  4. package/dist/for-fabric.js.map +1 -0
  5. package/lib/cjs/bin/cli.cjs +9 -0
  6. package/lib/cjs/bin/cli.js.map +1 -0
  7. package/lib/cjs/cli-module.cjs +479 -0
  8. package/lib/cjs/cli-module.js.map +1 -0
  9. package/lib/cjs/cli-utils.cjs +309 -0
  10. package/lib/cjs/cli-utils.js.map +1 -0
  11. package/lib/cjs/client/FabricClientAdapter.cjs +1362 -0
  12. package/lib/cjs/client/FabricClientAdapter.js.map +1 -0
  13. package/lib/cjs/client/FabricClientDispatch.cjs +290 -0
  14. package/lib/cjs/client/FabricClientDispatch.js.map +1 -0
  15. package/lib/cjs/client/FabricClientPaginator.cjs +21 -0
  16. package/lib/cjs/client/FabricClientPaginator.js.map +1 -0
  17. package/lib/cjs/client/FabricClientRepository.cjs +259 -0
  18. package/lib/cjs/client/FabricClientRepository.js.map +1 -0
  19. package/lib/cjs/client/FabricClientStatement.cjs +451 -0
  20. package/lib/cjs/client/FabricClientStatement.js.map +1 -0
  21. package/lib/cjs/client/collections/generation.cjs +113 -0
  22. package/lib/cjs/client/collections/generation.js.map +1 -0
  23. package/lib/{client/indexes → cjs/client/collections}/index.cjs +1 -1
  24. package/lib/cjs/client/collections/index.js.map +1 -0
  25. package/lib/cjs/client/constants.cjs +16 -0
  26. package/lib/cjs/client/constants.js.map +1 -0
  27. package/lib/cjs/client/crypto.cjs +368 -0
  28. package/lib/cjs/client/crypto.js.map +1 -0
  29. package/lib/{esm/client/erc20/FabricERC20ClientRepository.d.ts → cjs/client/erc20/FabricERC20ClientRepository.cjs} +139 -30
  30. package/lib/cjs/client/erc20/FabricERC20ClientRepository.js.map +1 -0
  31. package/lib/{client → cjs/client}/erc20/index.cjs +1 -1
  32. package/lib/cjs/client/erc20/index.js.map +1 -0
  33. package/lib/cjs/client/fabric-fs.cjs +234 -0
  34. package/lib/cjs/client/fabric-fs.js.map +1 -0
  35. package/lib/cjs/client/fabric-hsm.cjs +165 -0
  36. package/lib/cjs/client/fabric-hsm.js.map +1 -0
  37. package/lib/cjs/client/ids/id-extraction.cjs +30 -0
  38. package/lib/cjs/client/ids/id-extraction.js.map +1 -0
  39. package/lib/{client → cjs/client}/ids/index.cjs +1 -1
  40. package/lib/cjs/client/ids/index.js.map +1 -0
  41. package/lib/{client → cjs/client}/index.cjs +1 -1
  42. package/lib/cjs/client/index.js.map +1 -0
  43. package/lib/cjs/client/indexes/generation.cjs +95 -0
  44. package/lib/cjs/client/indexes/generation.js.map +1 -0
  45. package/lib/{client/collections → cjs/client/indexes}/index.cjs +1 -1
  46. package/lib/cjs/client/indexes/index.js.map +1 -0
  47. package/lib/{esm/client/logging.d.ts → cjs/client/logging.cjs} +51 -9
  48. package/lib/cjs/client/logging.js.map +1 -0
  49. package/lib/cjs/client/services/FabricEnrollmentService.cjs +363 -0
  50. package/lib/cjs/client/services/FabricEnrollmentService.js.map +1 -0
  51. package/lib/cjs/client/services/FabricIdentityService.cjs +324 -0
  52. package/lib/cjs/client/services/FabricIdentityService.js.map +1 -0
  53. package/lib/cjs/client/services/RegistrationRequestBuilder.cjs +91 -0
  54. package/lib/cjs/client/services/RegistrationRequestBuilder.js.map +1 -0
  55. package/lib/{esm/client/services/constants.d.ts → cjs/client/services/constants.cjs} +10 -5
  56. package/lib/cjs/client/services/constants.js.map +1 -0
  57. package/lib/cjs/client/services/index.cjs +21 -0
  58. package/lib/cjs/client/services/index.js.map +1 -0
  59. package/lib/cjs/client/types.cjs +3 -0
  60. package/lib/cjs/client/types.js.map +1 -0
  61. package/lib/cjs/client/utils.cjs +262 -0
  62. package/lib/cjs/client/utils.js.map +1 -0
  63. package/lib/{contract → cjs/contract}/Address.cjs +1 -1
  64. package/lib/cjs/contract/Address.js.map +1 -0
  65. package/lib/{contract → cjs/contract}/AddressContract.cjs +1 -1
  66. package/lib/cjs/contract/AddressContract.js.map +1 -0
  67. package/lib/{contract → cjs/contract}/AuditContract.cjs +1 -1
  68. package/lib/cjs/contract/AuditContract.js.map +1 -0
  69. package/lib/{contract → cjs/contract}/BatchContract.cjs +1 -1
  70. package/lib/cjs/contract/BatchContract.js.map +1 -0
  71. package/lib/{contract → cjs/contract}/MarketContract.cjs +1 -1
  72. package/lib/cjs/contract/MarketContract.js.map +1 -0
  73. package/lib/{contract → cjs/contract}/OtherAuditContract.cjs +1 -1
  74. package/lib/cjs/contract/OtherAuditContract.js.map +1 -0
  75. package/lib/{contract → cjs/contract}/OtherBatchContract.cjs +1 -1
  76. package/lib/cjs/contract/OtherBatchContract.js.map +1 -0
  77. package/lib/{contract → cjs/contract}/OtherMarketContract.cjs +1 -1
  78. package/lib/cjs/contract/OtherMarketContract.js.map +1 -0
  79. package/lib/{contract → cjs/contract}/OtherProductContract.cjs +1 -1
  80. package/lib/cjs/contract/OtherProductContract.js.map +1 -0
  81. package/lib/{contract → cjs/contract}/OtherProductImageContract.cjs +1 -1
  82. package/lib/cjs/contract/OtherProductImageContract.js.map +1 -0
  83. package/lib/{contract → cjs/contract}/OtherProductSharedContract.cjs +1 -1
  84. package/lib/cjs/contract/OtherProductSharedContract.js.map +1 -0
  85. package/lib/{contract → cjs/contract}/OtherProductStrengthContract.cjs +1 -1
  86. package/lib/cjs/contract/OtherProductStrengthContract.js.map +1 -0
  87. package/lib/{contract → cjs/contract}/Product.cjs +1 -1
  88. package/lib/cjs/contract/Product.js.map +1 -0
  89. package/lib/{contract → cjs/contract}/ProductContract.cjs +1 -1
  90. package/lib/cjs/contract/ProductContract.js.map +1 -0
  91. package/lib/{contract → cjs/contract}/ProductStrengthContract.cjs +1 -1
  92. package/lib/cjs/contract/ProductStrengthContract.js.map +1 -0
  93. package/lib/{contract → cjs/contract}/SegregatedPrivateDocumentContract.cjs +1 -1
  94. package/lib/cjs/contract/SegregatedPrivateDocumentContract.js.map +1 -0
  95. package/lib/{contract → cjs/contract}/SegregatedSharedDocumentContract.cjs +1 -1
  96. package/lib/cjs/contract/SegregatedSharedDocumentContract.js.map +1 -0
  97. package/lib/{contract → cjs/contract}/User.cjs +1 -1
  98. package/lib/cjs/contract/User.js.map +1 -0
  99. package/lib/{contract → cjs/contract}/UserContract.cjs +1 -1
  100. package/lib/cjs/contract/UserContract.js.map +1 -0
  101. package/lib/cjs/contract/index.cjs +36 -0
  102. package/lib/cjs/contract/index.js.map +1 -0
  103. package/lib/cjs/contract/logging-context.cjs +77 -0
  104. package/lib/cjs/contract/logging-context.js.map +1 -0
  105. package/lib/cjs/contract/models/Audit.cjs +106 -0
  106. package/lib/cjs/contract/models/Audit.js.map +1 -0
  107. package/lib/{contract → cjs/contract}/models/BaseIdentifiedModel.cjs +1 -1
  108. package/lib/cjs/contract/models/BaseIdentifiedModel.js.map +1 -0
  109. package/lib/{contract → cjs/contract}/models/BaseModel.cjs +1 -1
  110. package/lib/cjs/contract/models/BaseModel.js.map +1 -0
  111. package/lib/cjs/contract/models/Batch.cjs +174 -0
  112. package/lib/cjs/contract/models/Batch.js.map +1 -0
  113. package/lib/cjs/contract/models/GtinOwner.cjs +59 -0
  114. package/lib/cjs/contract/models/GtinOwner.js.map +1 -0
  115. package/lib/cjs/contract/models/History.cjs +75 -0
  116. package/lib/cjs/contract/models/History.js.map +1 -0
  117. package/lib/cjs/contract/models/Leaflet.cjs +95 -0
  118. package/lib/cjs/contract/models/Leaflet.js.map +1 -0
  119. package/lib/cjs/contract/models/LeafletFile.cjs +58 -0
  120. package/lib/cjs/contract/models/LeafletFile.js.map +1 -0
  121. package/lib/cjs/contract/models/Market.cjs +75 -0
  122. package/lib/cjs/contract/models/Market.js.map +1 -0
  123. package/lib/cjs/contract/models/OtherAudit.cjs +118 -0
  124. package/lib/cjs/contract/models/OtherAudit.js.map +1 -0
  125. package/lib/cjs/contract/models/OtherBatchShared.cjs +127 -0
  126. package/lib/cjs/contract/models/OtherBatchShared.js.map +1 -0
  127. package/lib/cjs/contract/models/OtherLeaflet.cjs +115 -0
  128. package/lib/cjs/contract/models/OtherLeaflet.js.map +1 -0
  129. package/lib/cjs/contract/models/OtherLeafletFile.cjs +65 -0
  130. package/lib/cjs/contract/models/OtherLeafletFile.js.map +1 -0
  131. package/lib/cjs/contract/models/OtherMarket.cjs +84 -0
  132. package/lib/cjs/contract/models/OtherMarket.js.map +1 -0
  133. package/lib/cjs/contract/models/OtherProduct.cjs +77 -0
  134. package/lib/cjs/contract/models/OtherProduct.js.map +1 -0
  135. package/lib/cjs/contract/models/OtherProductImage.cjs +59 -0
  136. package/lib/cjs/contract/models/OtherProductImage.js.map +1 -0
  137. package/lib/cjs/contract/models/OtherProductShared.cjs +99 -0
  138. package/lib/cjs/contract/models/OtherProductShared.js.map +1 -0
  139. package/lib/cjs/contract/models/OtherProductStrength.cjs +87 -0
  140. package/lib/cjs/contract/models/OtherProductStrength.js.map +1 -0
  141. package/lib/cjs/contract/models/Product.cjs +78 -0
  142. package/lib/cjs/contract/models/Product.js.map +1 -0
  143. package/lib/cjs/contract/models/ProductStrength.cjs +78 -0
  144. package/lib/cjs/contract/models/ProductStrength.js.map +1 -0
  145. package/lib/{contract → cjs/contract}/models/SegregatedDocument.cjs +1 -1
  146. package/lib/cjs/contract/models/SegregatedDocument.js.map +1 -0
  147. package/lib/cjs/contract/models/constants.cjs +30 -0
  148. package/lib/cjs/contract/models/constants.js.map +1 -0
  149. package/lib/cjs/contract/models/decorators-private.cjs +158 -0
  150. package/lib/cjs/contract/models/decorators-private.js.map +1 -0
  151. package/lib/cjs/contract/models/decorators.cjs +182 -0
  152. package/lib/cjs/contract/models/decorators.js.map +1 -0
  153. package/lib/cjs/contract/models/gtin.cjs +88 -0
  154. package/lib/cjs/contract/models/gtin.js.map +1 -0
  155. package/lib/cjs/contract/models/history-dec.cjs +83 -0
  156. package/lib/cjs/contract/models/history-dec.js.map +1 -0
  157. package/lib/cjs/contracts/ContractAdapter.cjs +1193 -0
  158. package/lib/cjs/contracts/ContractAdapter.js.map +1 -0
  159. package/lib/cjs/contracts/ContractContext.cjs +157 -0
  160. package/lib/cjs/contracts/ContractContext.js.map +1 -0
  161. package/lib/cjs/contracts/FabricContractDispatch.cjs +79 -0
  162. package/lib/cjs/contracts/FabricContractDispatch.js.map +1 -0
  163. package/lib/{esm/contracts/FabricContractPaginator.d.ts → cjs/contracts/FabricContractPaginator.cjs} +77 -9
  164. package/lib/cjs/contracts/FabricContractPaginator.js.map +1 -0
  165. package/lib/cjs/contracts/FabricContractRepository.cjs +322 -0
  166. package/lib/cjs/contracts/FabricContractRepository.js.map +1 -0
  167. package/lib/{esm/contracts/FabricContractRepositoryObservableHandler.d.ts → cjs/contracts/FabricContractRepositoryObservableHandler.cjs} +42 -8
  168. package/lib/cjs/contracts/FabricContractRepositoryObservableHandler.js.map +1 -0
  169. package/lib/cjs/contracts/FabricContractSequence.cjs +338 -0
  170. package/lib/cjs/contracts/FabricContractSequence.js.map +1 -0
  171. package/lib/cjs/contracts/FabricContractStatement.cjs +180 -0
  172. package/lib/cjs/contracts/FabricContractStatement.js.map +1 -0
  173. package/lib/cjs/contracts/MigrationContract.cjs +147 -0
  174. package/lib/cjs/contracts/MigrationContract.js.map +1 -0
  175. package/lib/{contracts → cjs/contracts}/PrivateSequence.cjs +1 -1
  176. package/lib/cjs/contracts/PrivateSequence.js.map +1 -0
  177. package/lib/cjs/contracts/auth/decorators.cjs +84 -0
  178. package/lib/cjs/contracts/auth/decorators.js.map +1 -0
  179. package/lib/{contracts → cjs/contracts}/auth/index.cjs +1 -1
  180. package/lib/cjs/contracts/auth/index.js.map +1 -0
  181. package/lib/cjs/contracts/crud/crud-contract.cjs +416 -0
  182. package/lib/cjs/contracts/crud/crud-contract.js.map +1 -0
  183. package/lib/{contracts → cjs/contracts}/crud/index.cjs +1 -1
  184. package/lib/cjs/contracts/crud/index.js.map +1 -0
  185. package/lib/cjs/contracts/crud/serialized-crud-contract.cjs +284 -0
  186. package/lib/cjs/contracts/crud/serialized-crud-contract.js.map +1 -0
  187. package/lib/cjs/contracts/erc20/erc20contract.cjs +581 -0
  188. package/lib/cjs/contracts/erc20/erc20contract.js.map +1 -0
  189. package/lib/cjs/contracts/erc20/index.cjs +21 -0
  190. package/lib/cjs/contracts/erc20/index.js.map +1 -0
  191. package/lib/cjs/contracts/erc20/models.cjs +209 -0
  192. package/lib/cjs/contracts/erc20/models.js.map +1 -0
  193. package/lib/{contracts → cjs/contracts}/index.cjs +1 -1
  194. package/lib/cjs/contracts/index.js.map +1 -0
  195. package/lib/cjs/contracts/logging.cjs +118 -0
  196. package/lib/cjs/contracts/logging.js.map +1 -0
  197. package/lib/cjs/contracts/overrides.cjs +8 -0
  198. package/lib/cjs/contracts/overrides.js.map +1 -0
  199. package/lib/cjs/contracts/types.cjs +3 -0
  200. package/lib/cjs/contracts/types.js.map +1 -0
  201. package/lib/cjs/contracts/uuid.cjs +75 -0
  202. package/lib/cjs/contracts/uuid.js.map +1 -0
  203. package/lib/{index.cjs → cjs/index.cjs} +1 -1
  204. package/lib/cjs/index.js.map +1 -0
  205. package/lib/{shared/ClientSerializer.d.ts → cjs/shared/ClientSerializer.cjs} +35 -6
  206. package/lib/cjs/shared/ClientSerializer.js.map +1 -0
  207. package/lib/cjs/shared/DeterministicSerializer.cjs +106 -0
  208. package/lib/cjs/shared/DeterministicSerializer.js.map +1 -0
  209. package/lib/cjs/shared/SimpleDeterministicSerializer.cjs +69 -0
  210. package/lib/cjs/shared/SimpleDeterministicSerializer.js.map +1 -0
  211. package/lib/{shared/constants.d.ts → cjs/shared/constants.cjs} +18 -12
  212. package/lib/cjs/shared/constants.js.map +1 -0
  213. package/lib/cjs/shared/decorators.cjs +595 -0
  214. package/lib/cjs/shared/decorators.js.map +1 -0
  215. package/lib/{shared/erc20/erc20-constants.d.ts → cjs/shared/erc20/erc20-constants.cjs} +9 -4
  216. package/lib/cjs/shared/erc20/erc20-constants.js.map +1 -0
  217. package/lib/{shared → cjs/shared}/erc20/index.cjs +1 -1
  218. package/lib/cjs/shared/erc20/index.js.map +1 -0
  219. package/lib/cjs/shared/errors.cjs +190 -0
  220. package/lib/cjs/shared/errors.js.map +1 -0
  221. package/lib/{shared/events.d.ts → cjs/shared/events.cjs} +21 -7
  222. package/lib/cjs/shared/events.js.map +1 -0
  223. package/lib/cjs/shared/fabric-types.cjs +3 -0
  224. package/lib/cjs/shared/fabric-types.js.map +1 -0
  225. package/lib/{shared → cjs/shared}/index.cjs +1 -1
  226. package/lib/cjs/shared/index.js.map +1 -0
  227. package/lib/cjs/shared/interfaces/Checkable.cjs +3 -0
  228. package/lib/cjs/shared/interfaces/Checkable.js.map +1 -0
  229. package/lib/{shared → cjs/shared}/interfaces/index.cjs +1 -1
  230. package/lib/cjs/shared/interfaces/index.js.map +1 -0
  231. package/lib/cjs/shared/math.cjs +66 -0
  232. package/lib/cjs/shared/math.js.map +1 -0
  233. package/lib/{shared → cjs/shared}/model/FabricBaseModel.cjs +1 -1
  234. package/lib/cjs/shared/model/FabricBaseModel.js.map +1 -0
  235. package/lib/{shared → cjs/shared}/model/FabricIdentifiedBaseModel.cjs +1 -1
  236. package/lib/cjs/shared/model/FabricIdentifiedBaseModel.js.map +1 -0
  237. package/lib/cjs/shared/model/Identity.cjs +71 -0
  238. package/lib/cjs/shared/model/Identity.js.map +1 -0
  239. package/lib/cjs/shared/model/IdentityCredentials.cjs +66 -0
  240. package/lib/cjs/shared/model/IdentityCredentials.js.map +1 -0
  241. package/lib/cjs/shared/model/index.cjs +21 -0
  242. package/lib/cjs/shared/model/index.js.map +1 -0
  243. package/lib/cjs/shared/overrides/Model.cjs +4 -0
  244. package/lib/cjs/shared/overrides/Model.js.map +1 -0
  245. package/lib/{shared → cjs/shared}/overrides/index.cjs +1 -1
  246. package/lib/cjs/shared/overrides/index.js.map +1 -0
  247. package/lib/cjs/shared/overrides/overrides.cjs +93 -0
  248. package/lib/cjs/shared/overrides/overrides.js.map +1 -0
  249. package/lib/cjs/shared/types.cjs +3 -0
  250. package/lib/cjs/shared/types.js.map +1 -0
  251. package/lib/cjs/version.cjs +8 -0
  252. package/lib/cjs/version.js.map +1 -0
  253. package/lib/esm/bin/cli.js +1 -1
  254. package/lib/esm/bin/cli.js.map +1 -0
  255. package/lib/esm/cli-module.js +1 -1
  256. package/lib/esm/cli-module.js.map +1 -0
  257. package/lib/esm/cli-utils.js +1 -1
  258. package/lib/esm/cli-utils.js.map +1 -0
  259. package/lib/esm/client/FabricClientAdapter.js +1 -1
  260. package/lib/esm/client/FabricClientAdapter.js.map +1 -0
  261. package/lib/esm/client/FabricClientDispatch.js +1 -1
  262. package/lib/esm/client/FabricClientDispatch.js.map +1 -0
  263. package/lib/esm/client/FabricClientPaginator.js +1 -1
  264. package/lib/esm/client/FabricClientPaginator.js.map +1 -0
  265. package/lib/esm/client/FabricClientRepository.js +1 -1
  266. package/lib/esm/client/FabricClientRepository.js.map +1 -0
  267. package/lib/esm/client/FabricClientStatement.js +1 -1
  268. package/lib/esm/client/FabricClientStatement.js.map +1 -0
  269. package/lib/esm/client/collections/generation.js +1 -1
  270. package/lib/esm/client/collections/generation.js.map +1 -0
  271. package/lib/esm/client/collections/index.js +1 -1
  272. package/lib/esm/client/collections/index.js.map +1 -0
  273. package/lib/esm/client/constants.js +1 -1
  274. package/lib/esm/client/constants.js.map +1 -0
  275. package/lib/esm/client/crypto.js +1 -1
  276. package/lib/esm/client/crypto.js.map +1 -0
  277. package/lib/esm/client/erc20/FabricERC20ClientRepository.js +1 -1
  278. package/lib/esm/client/erc20/FabricERC20ClientRepository.js.map +1 -0
  279. package/lib/esm/client/erc20/index.js +1 -1
  280. package/lib/esm/client/erc20/index.js.map +1 -0
  281. package/lib/esm/client/fabric-fs.js +1 -1
  282. package/lib/esm/client/fabric-fs.js.map +1 -0
  283. package/lib/esm/client/fabric-hsm.js +1 -1
  284. package/lib/esm/client/fabric-hsm.js.map +1 -0
  285. package/lib/esm/client/ids/id-extraction.js +1 -1
  286. package/lib/esm/client/ids/id-extraction.js.map +1 -0
  287. package/lib/esm/client/ids/index.js +1 -1
  288. package/lib/esm/client/ids/index.js.map +1 -0
  289. package/lib/esm/client/index.js +1 -1
  290. package/lib/esm/client/index.js.map +1 -0
  291. package/lib/esm/client/indexes/generation.js +1 -1
  292. package/lib/esm/client/indexes/generation.js.map +1 -0
  293. package/lib/esm/client/indexes/index.js +1 -1
  294. package/lib/esm/client/indexes/index.js.map +1 -0
  295. package/lib/esm/client/logging.js +1 -1
  296. package/lib/esm/client/logging.js.map +1 -0
  297. package/lib/esm/client/services/FabricEnrollmentService.js +1 -1
  298. package/lib/esm/client/services/FabricEnrollmentService.js.map +1 -0
  299. package/lib/esm/client/services/FabricIdentityService.js +1 -1
  300. package/lib/esm/client/services/FabricIdentityService.js.map +1 -0
  301. package/lib/esm/client/services/RegistrationRequestBuilder.js +1 -1
  302. package/lib/esm/client/services/RegistrationRequestBuilder.js.map +1 -0
  303. package/lib/esm/client/services/constants.js +1 -1
  304. package/lib/esm/client/services/constants.js.map +1 -0
  305. package/lib/esm/client/services/index.js +1 -1
  306. package/lib/esm/client/services/index.js.map +1 -0
  307. package/lib/esm/client/types.js +1 -1
  308. package/lib/esm/client/types.js.map +1 -0
  309. package/lib/esm/client/utils.js +1 -1
  310. package/lib/esm/client/utils.js.map +1 -0
  311. package/lib/esm/contract/Address.js +1 -1
  312. package/lib/esm/contract/Address.js.map +1 -0
  313. package/lib/esm/contract/AddressContract.js +1 -1
  314. package/lib/esm/contract/AddressContract.js.map +1 -0
  315. package/lib/esm/contract/AuditContract.js +1 -1
  316. package/lib/esm/contract/AuditContract.js.map +1 -0
  317. package/lib/esm/contract/BatchContract.js +1 -1
  318. package/lib/esm/contract/BatchContract.js.map +1 -0
  319. package/lib/esm/contract/MarketContract.js +1 -1
  320. package/lib/esm/contract/MarketContract.js.map +1 -0
  321. package/lib/esm/contract/OtherAuditContract.js +1 -1
  322. package/lib/esm/contract/OtherAuditContract.js.map +1 -0
  323. package/lib/esm/contract/OtherBatchContract.js +1 -1
  324. package/lib/esm/contract/OtherBatchContract.js.map +1 -0
  325. package/lib/esm/contract/OtherMarketContract.js +1 -1
  326. package/lib/esm/contract/OtherMarketContract.js.map +1 -0
  327. package/lib/esm/contract/OtherProductContract.js +1 -1
  328. package/lib/esm/contract/OtherProductContract.js.map +1 -0
  329. package/lib/esm/contract/OtherProductImageContract.js +1 -1
  330. package/lib/esm/contract/OtherProductImageContract.js.map +1 -0
  331. package/lib/esm/contract/OtherProductSharedContract.js +1 -1
  332. package/lib/esm/contract/OtherProductSharedContract.js.map +1 -0
  333. package/lib/esm/contract/OtherProductStrengthContract.js +1 -1
  334. package/lib/esm/contract/OtherProductStrengthContract.js.map +1 -0
  335. package/lib/esm/contract/Product.js +1 -1
  336. package/lib/esm/contract/Product.js.map +1 -0
  337. package/lib/esm/contract/ProductContract.js +1 -1
  338. package/lib/esm/contract/ProductContract.js.map +1 -0
  339. package/lib/esm/contract/ProductStrengthContract.js +1 -1
  340. package/lib/esm/contract/ProductStrengthContract.js.map +1 -0
  341. package/lib/esm/contract/SegregatedPrivateDocumentContract.js +1 -1
  342. package/lib/esm/contract/SegregatedPrivateDocumentContract.js.map +1 -0
  343. package/lib/esm/contract/SegregatedSharedDocumentContract.js +1 -1
  344. package/lib/esm/contract/SegregatedSharedDocumentContract.js.map +1 -0
  345. package/lib/esm/contract/User.js +1 -1
  346. package/lib/esm/contract/User.js.map +1 -0
  347. package/lib/esm/contract/UserContract.js +1 -1
  348. package/lib/esm/contract/UserContract.js.map +1 -0
  349. package/lib/esm/contract/index.js +1 -1
  350. package/lib/esm/contract/index.js.map +1 -0
  351. package/lib/esm/contract/logging-context.js +1 -1
  352. package/lib/esm/contract/logging-context.js.map +1 -0
  353. package/lib/esm/contract/models/Audit.js +1 -1
  354. package/lib/esm/contract/models/Audit.js.map +1 -0
  355. package/lib/esm/contract/models/BaseIdentifiedModel.js +1 -1
  356. package/lib/esm/contract/models/BaseIdentifiedModel.js.map +1 -0
  357. package/lib/esm/contract/models/BaseModel.js +1 -1
  358. package/lib/esm/contract/models/BaseModel.js.map +1 -0
  359. package/lib/esm/contract/models/Batch.js +1 -1
  360. package/lib/esm/contract/models/Batch.js.map +1 -0
  361. package/lib/esm/contract/models/GtinOwner.js +1 -1
  362. package/lib/esm/contract/models/GtinOwner.js.map +1 -0
  363. package/lib/esm/contract/models/History.js +1 -1
  364. package/lib/esm/contract/models/History.js.map +1 -0
  365. package/lib/esm/contract/models/Leaflet.js +1 -1
  366. package/lib/esm/contract/models/Leaflet.js.map +1 -0
  367. package/lib/esm/contract/models/LeafletFile.js +1 -1
  368. package/lib/esm/contract/models/LeafletFile.js.map +1 -0
  369. package/lib/esm/contract/models/Market.js +1 -1
  370. package/lib/esm/contract/models/Market.js.map +1 -0
  371. package/lib/esm/contract/models/OtherAudit.js +1 -1
  372. package/lib/esm/contract/models/OtherAudit.js.map +1 -0
  373. package/lib/esm/contract/models/OtherBatchShared.js +1 -1
  374. package/lib/esm/contract/models/OtherBatchShared.js.map +1 -0
  375. package/lib/esm/contract/models/OtherLeaflet.js +1 -1
  376. package/lib/esm/contract/models/OtherLeaflet.js.map +1 -0
  377. package/lib/esm/contract/models/OtherLeafletFile.js +1 -1
  378. package/lib/esm/contract/models/OtherLeafletFile.js.map +1 -0
  379. package/lib/esm/contract/models/OtherMarket.js +1 -1
  380. package/lib/esm/contract/models/OtherMarket.js.map +1 -0
  381. package/lib/esm/contract/models/OtherProduct.js +1 -1
  382. package/lib/esm/contract/models/OtherProduct.js.map +1 -0
  383. package/lib/esm/contract/models/OtherProductImage.js +1 -1
  384. package/lib/esm/contract/models/OtherProductImage.js.map +1 -0
  385. package/lib/esm/contract/models/OtherProductShared.js +1 -1
  386. package/lib/esm/contract/models/OtherProductShared.js.map +1 -0
  387. package/lib/esm/contract/models/OtherProductStrength.js +1 -1
  388. package/lib/esm/contract/models/OtherProductStrength.js.map +1 -0
  389. package/lib/esm/contract/models/Product.js +1 -1
  390. package/lib/esm/contract/models/Product.js.map +1 -0
  391. package/lib/esm/contract/models/ProductStrength.js +1 -1
  392. package/lib/esm/contract/models/ProductStrength.js.map +1 -0
  393. package/lib/esm/contract/models/SegregatedDocument.js +1 -1
  394. package/lib/esm/contract/models/SegregatedDocument.js.map +1 -0
  395. package/lib/esm/contract/models/constants.js +1 -1
  396. package/lib/esm/contract/models/constants.js.map +1 -0
  397. package/lib/esm/contract/models/decorators-private.js +1 -1
  398. package/lib/esm/contract/models/decorators-private.js.map +1 -0
  399. package/lib/esm/contract/models/decorators.js +1 -1
  400. package/lib/esm/contract/models/decorators.js.map +1 -0
  401. package/lib/esm/contract/models/gtin.js +1 -1
  402. package/lib/esm/contract/models/gtin.js.map +1 -0
  403. package/lib/esm/contract/models/history-dec.js +1 -1
  404. package/lib/esm/contract/models/history-dec.js.map +1 -0
  405. package/lib/esm/contracts/ContractAdapter.js +1 -1
  406. package/lib/esm/contracts/ContractAdapter.js.map +1 -0
  407. package/lib/esm/contracts/ContractContext.js +1 -1
  408. package/lib/esm/contracts/ContractContext.js.map +1 -0
  409. package/lib/esm/contracts/FabricContractDispatch.js +1 -1
  410. package/lib/esm/contracts/FabricContractDispatch.js.map +1 -0
  411. package/lib/esm/contracts/FabricContractPaginator.js +1 -1
  412. package/lib/esm/contracts/FabricContractPaginator.js.map +1 -0
  413. package/lib/esm/contracts/FabricContractRepository.js +1 -1
  414. package/lib/esm/contracts/FabricContractRepository.js.map +1 -0
  415. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +1 -1
  416. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js.map +1 -0
  417. package/lib/esm/contracts/FabricContractSequence.js +1 -1
  418. package/lib/esm/contracts/FabricContractSequence.js.map +1 -0
  419. package/lib/esm/contracts/FabricContractStatement.js +1 -1
  420. package/lib/esm/contracts/FabricContractStatement.js.map +1 -0
  421. package/lib/esm/contracts/MigrationContract.js +1 -1
  422. package/lib/esm/contracts/MigrationContract.js.map +1 -0
  423. package/lib/esm/contracts/PrivateSequence.js +1 -1
  424. package/lib/esm/contracts/PrivateSequence.js.map +1 -0
  425. package/lib/esm/contracts/auth/decorators.js +1 -1
  426. package/lib/esm/contracts/auth/decorators.js.map +1 -0
  427. package/lib/esm/contracts/auth/index.js +1 -1
  428. package/lib/esm/contracts/auth/index.js.map +1 -0
  429. package/lib/esm/contracts/crud/crud-contract.js +1 -1
  430. package/lib/esm/contracts/crud/crud-contract.js.map +1 -0
  431. package/lib/esm/contracts/crud/index.js +1 -1
  432. package/lib/esm/contracts/crud/index.js.map +1 -0
  433. package/lib/esm/contracts/crud/serialized-crud-contract.js +1 -1
  434. package/lib/esm/contracts/crud/serialized-crud-contract.js.map +1 -0
  435. package/lib/esm/contracts/erc20/erc20contract.js +1 -1
  436. package/lib/esm/contracts/erc20/erc20contract.js.map +1 -0
  437. package/lib/esm/contracts/erc20/index.js +1 -1
  438. package/lib/esm/contracts/erc20/index.js.map +1 -0
  439. package/lib/esm/contracts/erc20/models.js +1 -1
  440. package/lib/esm/contracts/erc20/models.js.map +1 -0
  441. package/lib/esm/contracts/index.js +1 -1
  442. package/lib/esm/contracts/index.js.map +1 -0
  443. package/lib/esm/contracts/logging.js +1 -1
  444. package/lib/esm/contracts/logging.js.map +1 -0
  445. package/lib/esm/contracts/overrides.js +1 -1
  446. package/lib/esm/contracts/overrides.js.map +1 -0
  447. package/lib/esm/contracts/types.js +1 -1
  448. package/lib/esm/contracts/types.js.map +1 -0
  449. package/lib/esm/contracts/uuid.js +1 -1
  450. package/lib/esm/contracts/uuid.js.map +1 -0
  451. package/lib/esm/index.js +1 -1
  452. package/lib/esm/index.js.map +1 -0
  453. package/lib/esm/shared/ClientSerializer.js +1 -1
  454. package/lib/esm/shared/ClientSerializer.js.map +1 -0
  455. package/lib/esm/shared/DeterministicSerializer.js +1 -1
  456. package/lib/esm/shared/DeterministicSerializer.js.map +1 -0
  457. package/lib/esm/shared/SimpleDeterministicSerializer.js +1 -1
  458. package/lib/esm/shared/SimpleDeterministicSerializer.js.map +1 -0
  459. package/lib/esm/shared/constants.js +1 -1
  460. package/lib/esm/shared/constants.js.map +1 -0
  461. package/lib/esm/shared/decorators.js +5 -3
  462. package/lib/esm/shared/decorators.js.map +1 -0
  463. package/lib/esm/shared/erc20/erc20-constants.js +1 -1
  464. package/lib/esm/shared/erc20/erc20-constants.js.map +1 -0
  465. package/lib/esm/shared/erc20/index.js +1 -1
  466. package/lib/esm/shared/erc20/index.js.map +1 -0
  467. package/lib/esm/shared/errors.js +1 -1
  468. package/lib/esm/shared/errors.js.map +1 -0
  469. package/lib/esm/shared/events.js +1 -1
  470. package/lib/esm/shared/events.js.map +1 -0
  471. package/lib/esm/shared/fabric-types.js +1 -1
  472. package/lib/esm/shared/fabric-types.js.map +1 -0
  473. package/lib/esm/shared/index.js +1 -1
  474. package/lib/esm/shared/index.js.map +1 -0
  475. package/lib/esm/shared/interfaces/Checkable.js +1 -1
  476. package/lib/esm/shared/interfaces/Checkable.js.map +1 -0
  477. package/lib/esm/shared/interfaces/index.js +1 -1
  478. package/lib/esm/shared/interfaces/index.js.map +1 -0
  479. package/lib/esm/shared/math.js +1 -1
  480. package/lib/esm/shared/math.js.map +1 -0
  481. package/lib/esm/shared/model/FabricBaseModel.js +1 -1
  482. package/lib/esm/shared/model/FabricBaseModel.js.map +1 -0
  483. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js +1 -1
  484. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js.map +1 -0
  485. package/lib/esm/shared/model/Identity.js +1 -1
  486. package/lib/esm/shared/model/Identity.js.map +1 -0
  487. package/lib/esm/shared/model/IdentityCredentials.js +1 -1
  488. package/lib/esm/shared/model/IdentityCredentials.js.map +1 -0
  489. package/lib/esm/shared/model/index.js +1 -1
  490. package/lib/esm/shared/model/index.js.map +1 -0
  491. package/lib/esm/shared/overrides/Model.js +1 -1
  492. package/lib/esm/shared/overrides/Model.js.map +1 -0
  493. package/lib/esm/shared/overrides/index.js +1 -1
  494. package/lib/esm/shared/overrides/index.js.map +1 -0
  495. package/lib/esm/shared/overrides/overrides.js +1 -1
  496. package/lib/esm/shared/overrides/overrides.js.map +1 -0
  497. package/lib/esm/shared/types.js +1 -1
  498. package/lib/esm/shared/types.js.map +1 -0
  499. package/lib/esm/version.js +2 -2
  500. package/lib/esm/version.js.map +1 -0
  501. package/lib/{esm → types}/version.d.ts +1 -1
  502. package/package.json +22 -18
  503. package/lib/bin/cli.cjs +0 -9
  504. package/lib/cli-module.cjs +0 -479
  505. package/lib/cli-utils.cjs +0 -309
  506. package/lib/client/FabricClientAdapter.cjs +0 -1362
  507. package/lib/client/FabricClientDispatch.cjs +0 -290
  508. package/lib/client/FabricClientPaginator.cjs +0 -21
  509. package/lib/client/FabricClientRepository.cjs +0 -259
  510. package/lib/client/FabricClientStatement.cjs +0 -451
  511. package/lib/client/collections/generation.cjs +0 -113
  512. package/lib/client/constants.cjs +0 -16
  513. package/lib/client/crypto.cjs +0 -368
  514. package/lib/client/erc20/FabricERC20ClientRepository.cjs +0 -363
  515. package/lib/client/fabric-fs.cjs +0 -234
  516. package/lib/client/fabric-hsm.cjs +0 -165
  517. package/lib/client/ids/id-extraction.cjs +0 -30
  518. package/lib/client/indexes/generation.cjs +0 -95
  519. package/lib/client/logging.cjs +0 -102
  520. package/lib/client/services/FabricEnrollmentService.cjs +0 -363
  521. package/lib/client/services/FabricIdentityService.cjs +0 -324
  522. package/lib/client/services/RegistrationRequestBuilder.cjs +0 -91
  523. package/lib/client/services/constants.cjs +0 -20
  524. package/lib/client/services/index.cjs +0 -21
  525. package/lib/client/types.cjs +0 -3
  526. package/lib/client/utils.cjs +0 -262
  527. package/lib/contract/index.cjs +0 -36
  528. package/lib/contract/logging-context.cjs +0 -77
  529. package/lib/contract/models/Audit.cjs +0 -106
  530. package/lib/contract/models/Batch.cjs +0 -174
  531. package/lib/contract/models/GtinOwner.cjs +0 -59
  532. package/lib/contract/models/History.cjs +0 -75
  533. package/lib/contract/models/Leaflet.cjs +0 -95
  534. package/lib/contract/models/LeafletFile.cjs +0 -58
  535. package/lib/contract/models/Market.cjs +0 -75
  536. package/lib/contract/models/OtherAudit.cjs +0 -118
  537. package/lib/contract/models/OtherBatchShared.cjs +0 -127
  538. package/lib/contract/models/OtherLeaflet.cjs +0 -115
  539. package/lib/contract/models/OtherLeafletFile.cjs +0 -65
  540. package/lib/contract/models/OtherMarket.cjs +0 -84
  541. package/lib/contract/models/OtherProduct.cjs +0 -77
  542. package/lib/contract/models/OtherProductImage.cjs +0 -59
  543. package/lib/contract/models/OtherProductShared.cjs +0 -99
  544. package/lib/contract/models/OtherProductStrength.cjs +0 -87
  545. package/lib/contract/models/Product.cjs +0 -78
  546. package/lib/contract/models/ProductStrength.cjs +0 -78
  547. package/lib/contract/models/constants.cjs +0 -30
  548. package/lib/contract/models/decorators-private.cjs +0 -158
  549. package/lib/contract/models/decorators.cjs +0 -182
  550. package/lib/contract/models/gtin.cjs +0 -88
  551. package/lib/contract/models/history-dec.cjs +0 -83
  552. package/lib/contracts/ContractAdapter.cjs +0 -1193
  553. package/lib/contracts/ContractContext.cjs +0 -157
  554. package/lib/contracts/FabricContractDispatch.cjs +0 -79
  555. package/lib/contracts/FabricContractPaginator.cjs +0 -173
  556. package/lib/contracts/FabricContractRepository.cjs +0 -322
  557. package/lib/contracts/FabricContractRepositoryObservableHandler.cjs +0 -96
  558. package/lib/contracts/FabricContractSequence.cjs +0 -338
  559. package/lib/contracts/FabricContractStatement.cjs +0 -180
  560. package/lib/contracts/MigrationContract.cjs +0 -147
  561. package/lib/contracts/auth/decorators.cjs +0 -84
  562. package/lib/contracts/crud/crud-contract.cjs +0 -416
  563. package/lib/contracts/crud/serialized-crud-contract.cjs +0 -284
  564. package/lib/contracts/erc20/erc20contract.cjs +0 -581
  565. package/lib/contracts/erc20/index.cjs +0 -21
  566. package/lib/contracts/erc20/models.cjs +0 -209
  567. package/lib/contracts/logging.cjs +0 -118
  568. package/lib/contracts/overrides.cjs +0 -8
  569. package/lib/contracts/types.cjs +0 -3
  570. package/lib/contracts/uuid.cjs +0 -75
  571. package/lib/esm/bin/cli.d.ts +0 -1
  572. package/lib/esm/cli-module.d.ts +0 -3
  573. package/lib/esm/cli-utils.d.ts +0 -21
  574. package/lib/esm/client/FabricClientAdapter.d.ts +0 -404
  575. package/lib/esm/client/FabricClientDispatch.d.ts +0 -133
  576. package/lib/esm/client/FabricClientPaginator.d.ts +0 -12
  577. package/lib/esm/client/FabricClientRepository.d.ts +0 -71
  578. package/lib/esm/client/FabricClientStatement.d.ts +0 -64
  579. package/lib/esm/client/collections/generation.d.ts +0 -46
  580. package/lib/esm/client/collections/index.d.ts +0 -1
  581. package/lib/esm/client/constants.d.ts +0 -2
  582. package/lib/esm/client/crypto.d.ts +0 -107
  583. package/lib/esm/client/erc20/index.d.ts +0 -1
  584. package/lib/esm/client/fabric-fs.d.ts +0 -92
  585. package/lib/esm/client/fabric-hsm.d.ts +0 -24
  586. package/lib/esm/client/ids/id-extraction.d.ts +0 -4
  587. package/lib/esm/client/ids/index.d.ts +0 -1
  588. package/lib/esm/client/index.d.ts +0 -23
  589. package/lib/esm/client/indexes/generation.d.ts +0 -10
  590. package/lib/esm/client/indexes/index.d.ts +0 -1
  591. package/lib/esm/client/services/FabricEnrollmentService.d.ts +0 -176
  592. package/lib/esm/client/services/FabricIdentityService.d.ts +0 -98
  593. package/lib/esm/client/services/RegistrationRequestBuilder.d.ts +0 -19
  594. package/lib/esm/client/services/index.d.ts +0 -4
  595. package/lib/esm/client/types.d.ts +0 -20
  596. package/lib/esm/client/utils.d.ts +0 -71
  597. package/lib/esm/contract/Address.d.ts +0 -13
  598. package/lib/esm/contract/AddressContract.d.ts +0 -5
  599. package/lib/esm/contract/AuditContract.d.ts +0 -5
  600. package/lib/esm/contract/BatchContract.d.ts +0 -5
  601. package/lib/esm/contract/MarketContract.d.ts +0 -5
  602. package/lib/esm/contract/OtherAuditContract.d.ts +0 -5
  603. package/lib/esm/contract/OtherBatchContract.d.ts +0 -5
  604. package/lib/esm/contract/OtherMarketContract.d.ts +0 -5
  605. package/lib/esm/contract/OtherProductContract.d.ts +0 -5
  606. package/lib/esm/contract/OtherProductImageContract.d.ts +0 -5
  607. package/lib/esm/contract/OtherProductSharedContract.d.ts +0 -5
  608. package/lib/esm/contract/OtherProductStrengthContract.d.ts +0 -5
  609. package/lib/esm/contract/Product.d.ts +0 -7
  610. package/lib/esm/contract/ProductContract.d.ts +0 -5
  611. package/lib/esm/contract/ProductStrengthContract.d.ts +0 -5
  612. package/lib/esm/contract/SegregatedPrivateDocumentContract.d.ts +0 -5
  613. package/lib/esm/contract/SegregatedSharedDocumentContract.d.ts +0 -5
  614. package/lib/esm/contract/User.d.ts +0 -7
  615. package/lib/esm/contract/UserContract.d.ts +0 -5
  616. package/lib/esm/contract/index.d.ts +0 -2
  617. package/lib/esm/contract/logging-context.d.ts +0 -8
  618. package/lib/esm/contract/models/Audit.d.ts +0 -13
  619. package/lib/esm/contract/models/BaseIdentifiedModel.d.ts +0 -7
  620. package/lib/esm/contract/models/BaseModel.d.ts +0 -7
  621. package/lib/esm/contract/models/Batch.d.ts +0 -18
  622. package/lib/esm/contract/models/GtinOwner.d.ts +0 -8
  623. package/lib/esm/contract/models/History.d.ts +0 -9
  624. package/lib/esm/contract/models/Leaflet.d.ts +0 -12
  625. package/lib/esm/contract/models/LeafletFile.d.ts +0 -9
  626. package/lib/esm/contract/models/Market.d.ts +0 -12
  627. package/lib/esm/contract/models/OtherAudit.d.ts +0 -15
  628. package/lib/esm/contract/models/OtherBatchShared.d.ts +0 -18
  629. package/lib/esm/contract/models/OtherLeaflet.d.ts +0 -16
  630. package/lib/esm/contract/models/OtherLeafletFile.d.ts +0 -10
  631. package/lib/esm/contract/models/OtherMarket.d.ts +0 -13
  632. package/lib/esm/contract/models/OtherProduct.d.ts +0 -12
  633. package/lib/esm/contract/models/OtherProductImage.d.ts +0 -9
  634. package/lib/esm/contract/models/OtherProductShared.d.ts +0 -18
  635. package/lib/esm/contract/models/OtherProductStrength.d.ts +0 -12
  636. package/lib/esm/contract/models/Product.d.ts +0 -15
  637. package/lib/esm/contract/models/ProductStrength.d.ts +0 -11
  638. package/lib/esm/contract/models/SegregatedDocument.d.ts +0 -18
  639. package/lib/esm/contract/models/constants.d.ts +0 -24
  640. package/lib/esm/contract/models/decorators-private.d.ts +0 -16
  641. package/lib/esm/contract/models/decorators.d.ts +0 -28
  642. package/lib/esm/contract/models/gtin.d.ts +0 -8
  643. package/lib/esm/contract/models/history-dec.d.ts +0 -6
  644. package/lib/esm/contracts/ContractAdapter.d.ts +0 -287
  645. package/lib/esm/contracts/ContractContext.d.ts +0 -89
  646. package/lib/esm/contracts/FabricContractDispatch.d.ts +0 -7
  647. package/lib/esm/contracts/FabricContractRepository.d.ts +0 -119
  648. package/lib/esm/contracts/FabricContractSequence.d.ts +0 -87
  649. package/lib/esm/contracts/FabricContractStatement.d.ts +0 -36
  650. package/lib/esm/contracts/MigrationContract.d.ts +0 -22
  651. package/lib/esm/contracts/PrivateSequence.d.ts +0 -15
  652. package/lib/esm/contracts/auth/decorators.d.ts +0 -6
  653. package/lib/esm/contracts/auth/index.d.ts +0 -1
  654. package/lib/esm/contracts/crud/crud-contract.d.ts +0 -199
  655. package/lib/esm/contracts/crud/index.d.ts +0 -2
  656. package/lib/esm/contracts/crud/serialized-crud-contract.d.ts +0 -42
  657. package/lib/esm/contracts/erc20/erc20contract.d.ts +0 -152
  658. package/lib/esm/contracts/erc20/index.d.ts +0 -2
  659. package/lib/esm/contracts/erc20/models.d.ts +0 -114
  660. package/lib/esm/contracts/index.d.ts +0 -19
  661. package/lib/esm/contracts/logging.d.ts +0 -54
  662. package/lib/esm/contracts/types.d.ts +0 -38
  663. package/lib/esm/contracts/uuid.d.ts +0 -2
  664. package/lib/esm/shared/overrides/overrides.d.ts +0 -1
  665. package/lib/index.d.ts +0 -8
  666. package/lib/shared/ClientSerializer.cjs +0 -81
  667. package/lib/shared/DeterministicSerializer.cjs +0 -106
  668. package/lib/shared/DeterministicSerializer.d.ts +0 -47
  669. package/lib/shared/SimpleDeterministicSerializer.cjs +0 -69
  670. package/lib/shared/SimpleDeterministicSerializer.d.ts +0 -7
  671. package/lib/shared/constants.cjs +0 -41
  672. package/lib/shared/decorators.cjs +0 -593
  673. package/lib/shared/decorators.d.ts +0 -81
  674. package/lib/shared/erc20/erc20-constants.cjs +0 -30
  675. package/lib/shared/erc20/index.d.ts +0 -1
  676. package/lib/shared/errors.cjs +0 -190
  677. package/lib/shared/errors.d.ts +0 -140
  678. package/lib/shared/events.cjs +0 -51
  679. package/lib/shared/fabric-types.cjs +0 -3
  680. package/lib/shared/fabric-types.d.ts +0 -32
  681. package/lib/shared/index.d.ts +0 -20
  682. package/lib/shared/interfaces/Checkable.cjs +0 -3
  683. package/lib/shared/interfaces/Checkable.d.ts +0 -23
  684. package/lib/shared/interfaces/index.d.ts +0 -1
  685. package/lib/shared/math.cjs +0 -66
  686. package/lib/shared/math.d.ts +0 -34
  687. package/lib/shared/model/FabricBaseModel.d.ts +0 -7
  688. package/lib/shared/model/FabricIdentifiedBaseModel.d.ts +0 -7
  689. package/lib/shared/model/Identity.cjs +0 -71
  690. package/lib/shared/model/Identity.d.ts +0 -42
  691. package/lib/shared/model/IdentityCredentials.cjs +0 -66
  692. package/lib/shared/model/IdentityCredentials.d.ts +0 -41
  693. package/lib/shared/model/index.cjs +0 -21
  694. package/lib/shared/model/index.d.ts +0 -4
  695. package/lib/shared/overrides/Model.cjs +0 -4
  696. package/lib/shared/overrides/Model.d.ts +0 -22
  697. package/lib/shared/overrides/index.d.ts +0 -2
  698. package/lib/shared/overrides/overrides.cjs +0 -93
  699. package/lib/shared/overrides/overrides.d.ts +0 -1
  700. package/lib/shared/types.cjs +0 -3
  701. package/lib/shared/types.d.ts +0 -125
  702. package/lib/version.cjs +0 -8
  703. package/lib/version.d.ts +0 -2
  704. /package/lib/{bin → types/bin}/cli.d.ts +0 -0
  705. /package/lib/{cli-module.d.ts → types/cli-module.d.ts} +0 -0
  706. /package/lib/{cli-utils.d.ts → types/cli-utils.d.ts} +0 -0
  707. /package/lib/{client → types/client}/FabricClientAdapter.d.ts +0 -0
  708. /package/lib/{client → types/client}/FabricClientDispatch.d.ts +0 -0
  709. /package/lib/{client → types/client}/FabricClientPaginator.d.ts +0 -0
  710. /package/lib/{client → types/client}/FabricClientRepository.d.ts +0 -0
  711. /package/lib/{client → types/client}/FabricClientStatement.d.ts +0 -0
  712. /package/lib/{client → types/client}/collections/generation.d.ts +0 -0
  713. /package/lib/{client → types/client}/collections/index.d.ts +0 -0
  714. /package/lib/{client → types/client}/constants.d.ts +0 -0
  715. /package/lib/{client → types/client}/crypto.d.ts +0 -0
  716. /package/lib/{client → types/client}/erc20/FabricERC20ClientRepository.d.ts +0 -0
  717. /package/lib/{client → types/client}/erc20/index.d.ts +0 -0
  718. /package/lib/{client → types/client}/fabric-fs.d.ts +0 -0
  719. /package/lib/{client → types/client}/fabric-hsm.d.ts +0 -0
  720. /package/lib/{client → types/client}/ids/id-extraction.d.ts +0 -0
  721. /package/lib/{client → types/client}/ids/index.d.ts +0 -0
  722. /package/lib/{client → types/client}/index.d.ts +0 -0
  723. /package/lib/{client → types/client}/indexes/generation.d.ts +0 -0
  724. /package/lib/{client → types/client}/indexes/index.d.ts +0 -0
  725. /package/lib/{client → types/client}/logging.d.ts +0 -0
  726. /package/lib/{client → types/client}/services/FabricEnrollmentService.d.ts +0 -0
  727. /package/lib/{client → types/client}/services/FabricIdentityService.d.ts +0 -0
  728. /package/lib/{client → types/client}/services/RegistrationRequestBuilder.d.ts +0 -0
  729. /package/lib/{client → types/client}/services/constants.d.ts +0 -0
  730. /package/lib/{client → types/client}/services/index.d.ts +0 -0
  731. /package/lib/{client → types/client}/types.d.ts +0 -0
  732. /package/lib/{client → types/client}/utils.d.ts +0 -0
  733. /package/lib/{contract → types/contract}/Address.d.ts +0 -0
  734. /package/lib/{contract → types/contract}/AddressContract.d.ts +0 -0
  735. /package/lib/{contract → types/contract}/AuditContract.d.ts +0 -0
  736. /package/lib/{contract → types/contract}/BatchContract.d.ts +0 -0
  737. /package/lib/{contract → types/contract}/MarketContract.d.ts +0 -0
  738. /package/lib/{contract → types/contract}/OtherAuditContract.d.ts +0 -0
  739. /package/lib/{contract → types/contract}/OtherBatchContract.d.ts +0 -0
  740. /package/lib/{contract → types/contract}/OtherMarketContract.d.ts +0 -0
  741. /package/lib/{contract → types/contract}/OtherProductContract.d.ts +0 -0
  742. /package/lib/{contract → types/contract}/OtherProductImageContract.d.ts +0 -0
  743. /package/lib/{contract → types/contract}/OtherProductSharedContract.d.ts +0 -0
  744. /package/lib/{contract → types/contract}/OtherProductStrengthContract.d.ts +0 -0
  745. /package/lib/{contract → types/contract}/Product.d.ts +0 -0
  746. /package/lib/{contract → types/contract}/ProductContract.d.ts +0 -0
  747. /package/lib/{contract → types/contract}/ProductStrengthContract.d.ts +0 -0
  748. /package/lib/{contract → types/contract}/SegregatedPrivateDocumentContract.d.ts +0 -0
  749. /package/lib/{contract → types/contract}/SegregatedSharedDocumentContract.d.ts +0 -0
  750. /package/lib/{contract → types/contract}/User.d.ts +0 -0
  751. /package/lib/{contract → types/contract}/UserContract.d.ts +0 -0
  752. /package/lib/{contract → types/contract}/index.d.ts +0 -0
  753. /package/lib/{contract → types/contract}/logging-context.d.ts +0 -0
  754. /package/lib/{contract → types/contract}/models/Audit.d.ts +0 -0
  755. /package/lib/{contract → types/contract}/models/BaseIdentifiedModel.d.ts +0 -0
  756. /package/lib/{contract → types/contract}/models/BaseModel.d.ts +0 -0
  757. /package/lib/{contract → types/contract}/models/Batch.d.ts +0 -0
  758. /package/lib/{contract → types/contract}/models/GtinOwner.d.ts +0 -0
  759. /package/lib/{contract → types/contract}/models/History.d.ts +0 -0
  760. /package/lib/{contract → types/contract}/models/Leaflet.d.ts +0 -0
  761. /package/lib/{contract → types/contract}/models/LeafletFile.d.ts +0 -0
  762. /package/lib/{contract → types/contract}/models/Market.d.ts +0 -0
  763. /package/lib/{contract → types/contract}/models/OtherAudit.d.ts +0 -0
  764. /package/lib/{contract → types/contract}/models/OtherBatchShared.d.ts +0 -0
  765. /package/lib/{contract → types/contract}/models/OtherLeaflet.d.ts +0 -0
  766. /package/lib/{contract → types/contract}/models/OtherLeafletFile.d.ts +0 -0
  767. /package/lib/{contract → types/contract}/models/OtherMarket.d.ts +0 -0
  768. /package/lib/{contract → types/contract}/models/OtherProduct.d.ts +0 -0
  769. /package/lib/{contract → types/contract}/models/OtherProductImage.d.ts +0 -0
  770. /package/lib/{contract → types/contract}/models/OtherProductShared.d.ts +0 -0
  771. /package/lib/{contract → types/contract}/models/OtherProductStrength.d.ts +0 -0
  772. /package/lib/{contract → types/contract}/models/Product.d.ts +0 -0
  773. /package/lib/{contract → types/contract}/models/ProductStrength.d.ts +0 -0
  774. /package/lib/{contract → types/contract}/models/SegregatedDocument.d.ts +0 -0
  775. /package/lib/{contract → types/contract}/models/constants.d.ts +0 -0
  776. /package/lib/{contract → types/contract}/models/decorators-private.d.ts +0 -0
  777. /package/lib/{contract → types/contract}/models/decorators.d.ts +0 -0
  778. /package/lib/{contract → types/contract}/models/gtin.d.ts +0 -0
  779. /package/lib/{contract → types/contract}/models/history-dec.d.ts +0 -0
  780. /package/lib/{contracts → types/contracts}/ContractAdapter.d.ts +0 -0
  781. /package/lib/{contracts → types/contracts}/ContractContext.d.ts +0 -0
  782. /package/lib/{contracts → types/contracts}/FabricContractDispatch.d.ts +0 -0
  783. /package/lib/{contracts → types/contracts}/FabricContractPaginator.d.ts +0 -0
  784. /package/lib/{contracts → types/contracts}/FabricContractRepository.d.ts +0 -0
  785. /package/lib/{contracts → types/contracts}/FabricContractRepositoryObservableHandler.d.ts +0 -0
  786. /package/lib/{contracts → types/contracts}/FabricContractSequence.d.ts +0 -0
  787. /package/lib/{contracts → types/contracts}/FabricContractStatement.d.ts +0 -0
  788. /package/lib/{contracts → types/contracts}/MigrationContract.d.ts +0 -0
  789. /package/lib/{contracts → types/contracts}/PrivateSequence.d.ts +0 -0
  790. /package/lib/{contracts → types/contracts}/auth/decorators.d.ts +0 -0
  791. /package/lib/{contracts → types/contracts}/auth/index.d.ts +0 -0
  792. /package/lib/{contracts → types/contracts}/crud/crud-contract.d.ts +0 -0
  793. /package/lib/{contracts → types/contracts}/crud/index.d.ts +0 -0
  794. /package/lib/{contracts → types/contracts}/crud/serialized-crud-contract.d.ts +0 -0
  795. /package/lib/{contracts → types/contracts}/erc20/erc20contract.d.ts +0 -0
  796. /package/lib/{contracts → types/contracts}/erc20/index.d.ts +0 -0
  797. /package/lib/{contracts → types/contracts}/erc20/models.d.ts +0 -0
  798. /package/lib/{contracts → types/contracts}/index.d.ts +0 -0
  799. /package/lib/{contracts → types/contracts}/logging.d.ts +0 -0
  800. /package/lib/{contracts → types/contracts}/overrides.d.ts +0 -0
  801. /package/lib/{contracts → types/contracts}/types.d.ts +0 -0
  802. /package/lib/{contracts → types/contracts}/uuid.d.ts +0 -0
  803. /package/lib/{esm → types}/index.d.ts +0 -0
  804. /package/lib/{esm → types}/shared/ClientSerializer.d.ts +0 -0
  805. /package/lib/{esm → types}/shared/DeterministicSerializer.d.ts +0 -0
  806. /package/lib/{esm → types}/shared/SimpleDeterministicSerializer.d.ts +0 -0
  807. /package/lib/{esm → types}/shared/constants.d.ts +0 -0
  808. /package/lib/{esm → types}/shared/decorators.d.ts +0 -0
  809. /package/lib/{esm → types}/shared/erc20/erc20-constants.d.ts +0 -0
  810. /package/lib/{esm → types}/shared/erc20/index.d.ts +0 -0
  811. /package/lib/{esm → types}/shared/errors.d.ts +0 -0
  812. /package/lib/{esm → types}/shared/events.d.ts +0 -0
  813. /package/lib/{esm → types}/shared/fabric-types.d.ts +0 -0
  814. /package/lib/{esm → types}/shared/index.d.ts +0 -0
  815. /package/lib/{esm → types}/shared/interfaces/Checkable.d.ts +0 -0
  816. /package/lib/{esm → types}/shared/interfaces/index.d.ts +0 -0
  817. /package/lib/{esm → types}/shared/math.d.ts +0 -0
  818. /package/lib/{esm → types}/shared/model/FabricBaseModel.d.ts +0 -0
  819. /package/lib/{esm → types}/shared/model/FabricIdentifiedBaseModel.d.ts +0 -0
  820. /package/lib/{esm → types}/shared/model/Identity.d.ts +0 -0
  821. /package/lib/{esm → types}/shared/model/IdentityCredentials.d.ts +0 -0
  822. /package/lib/{esm → types}/shared/model/index.d.ts +0 -0
  823. /package/lib/{esm → types}/shared/overrides/Model.d.ts +0 -0
  824. /package/lib/{esm → types}/shared/overrides/index.d.ts +0 -0
  825. /package/lib/{esm/contracts → types/shared/overrides}/overrides.d.ts +0 -0
  826. /package/lib/{esm → types}/shared/types.d.ts +0 -0
@@ -1,338 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FabricContractSequence = void 0;
4
- const db_decorators_1 = require("@decaf-ts/db-decorators");
5
- const decorator_validation_1 = require("@decaf-ts/decorator-validation");
6
- const core_1 = require("@decaf-ts/core");
7
- const for_couchdb_1 = require("@decaf-ts/for-couchdb");
8
- /**
9
- * @description Abstract base class for sequence generation
10
- * @summary Provides a framework for generating sequential values (like primary keys) in the persistence layer.
11
- * Implementations of this class handle the specifics of how sequences are stored and incremented in different
12
- * database systems.
13
- * @param {SequenceOptions} options - Configuration options for the sequence generator
14
- * @class Sequence
15
- * @example
16
- * ```typescript
17
- * // Example implementation for a specific database
18
- * class PostgresSequence extends Sequence {
19
- * constructor(options: SequenceOptions) {
20
- * super(options);
21
- * }
22
- *
23
- * async next(): Promise<number> {
24
- * // Implementation to get next value from PostgreSQL sequence
25
- * const result = await this.options.executor.raw(`SELECT nextval('${this.options.name}')`);
26
- * return parseInt(result.rows[0].nextval);
27
- * }
28
- *
29
- * async current(): Promise<number> {
30
- * // Implementation to get current value from PostgreSQL sequence
31
- * const result = await this.options.executor.raw(`SELECT currval('${this.options.name}')`);
32
- * return parseInt(result.rows[0].currval);
33
- * }
34
- *
35
- * async range(count: number): Promise<number[]> {
36
- * // Implementation to get a range of values
37
- * const values: number[] = [];
38
- * for (let i = 0; i < count; i++) {
39
- * values.push(await this.next());
40
- * }
41
- * return values;
42
- * }
43
- * }
44
- *
45
- * // Usage
46
- * const sequence = new PostgresSequence({
47
- * name: 'user_id_seq',
48
- * executor: dbExecutor
49
- * });
50
- *
51
- * const nextId = await sequence.next();
52
- * ```
53
- */
54
- class FabricContractSequence extends core_1.Sequence {
55
- /**
56
- * @description Creates a new sequence instance
57
- * @summary Protected constructor that initializes the sequence with the provided options
58
- */
59
- constructor(options, adapter) {
60
- super(options, adapter);
61
- }
62
- /**
63
- * @description Retrieves the current value of the sequence
64
- * @summary Gets the current value of the sequence from storage. If the sequence
65
- * doesn't exist yet, it returns the configured starting value.
66
- * @return A promise that resolves to the current sequence value
67
- */
68
- async current(...args) {
69
- const { ctx, log } = (await this.logCtx(args, db_decorators_1.OperationKeys.READ, true)).for(this.current);
70
- let cachedCurrent;
71
- const { name, startWith } = this.options;
72
- const adapterMeta = ctx.getSequenceSegregation(String(name));
73
- try {
74
- cachedCurrent = ctx.getFromChildren(name);
75
- if (cachedCurrent !== undefined && cachedCurrent !== null)
76
- return this.parse(cachedCurrent);
77
- const sequence = await this.repo.read(name, ctx);
78
- return this.parse(sequence.current);
79
- }
80
- catch (e) {
81
- if (e instanceof db_decorators_1.NotFoundError) {
82
- // If the sequence is supposed to live in private/shared collections,
83
- // read it from those collections using the adapter (not the stub directly).
84
- if (adapterMeta?.collections?.length) {
85
- const adapter = this.adapter;
86
- const tableName = decorator_validation_1.Model.tableName(core_1.SequenceModel);
87
- const publicKey = ctx.stub.createCompositeKey(tableName, [String(name)]);
88
- for (const col of adapterMeta.collections) {
89
- try {
90
- const privateAdapter = adapter.forPrivate(col);
91
- const raw = await privateAdapter.readState(publicKey, ctx);
92
- if (raw && raw.current !== undefined && raw.current !== null)
93
- return this.parse(raw.current);
94
- }
95
- catch (err) {
96
- if (err instanceof db_decorators_1.NotFoundError)
97
- continue;
98
- // fall through to regular startWith fallback for any parse/IO errors
99
- }
100
- }
101
- }
102
- try {
103
- log.debug(`Trying to resolve current sequence ${name} value from context tree`);
104
- cachedCurrent = ctx.getFromChildren(name);
105
- if (cachedCurrent !== undefined && cachedCurrent !== null) {
106
- log.debug(`Retrieved cached current value for sequence ${name}: ${cachedCurrent}`);
107
- }
108
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
109
- }
110
- catch (e) {
111
- // fall through
112
- }
113
- if (cachedCurrent === undefined || cachedCurrent === null) {
114
- log.info(`No cached value for sequence ${name} in context`);
115
- cachedCurrent = startWith;
116
- }
117
- try {
118
- return this.parse(cachedCurrent);
119
- }
120
- catch (e) {
121
- throw new db_decorators_1.InternalError(`Failed to parse initial value for sequence ${startWith}: ${e}`);
122
- }
123
- }
124
- throw new db_decorators_1.InternalError(`Failed to retrieve current value for sequence ${name}: ${e}`);
125
- }
126
- }
127
- /**
128
- * @description Increments the sequence value
129
- * @summary Increases the current sequence value by the specified amount and persists
130
- * the new value to storage. This method handles both numeric and BigInt sequence types.
131
- * @param {string | number | bigint} current - The current value of the sequence
132
- * @param {number} [count] - Optional amount to increment by, defaults to the sequence's incrementBy value
133
- * @return A promise that resolves to the new sequence value after incrementing
134
- */
135
- async increment(count, ctx) {
136
- const log = ctx.logger.for(this.increment);
137
- const { type, incrementBy, name } = this.options;
138
- if (!name)
139
- throw new db_decorators_1.InternalError("Sequence name is required");
140
- log.info(`Obtaining sequence lock for sequence ${name}`);
141
- // return FabricContractSequence.lock.execute(async () => {
142
- const toIncrementBy = count || incrementBy;
143
- if (toIncrementBy % incrementBy !== 0)
144
- throw new db_decorators_1.InternalError(`Value to increment does not consider the incrementBy setting: ${incrementBy}`);
145
- const typeName = typeof type === "function" && type?.name
146
- ? type.name
147
- : type;
148
- const currentValue = await this.current(ctx);
149
- async function returnAndCache(res) {
150
- if (res instanceof Promise)
151
- res = await res;
152
- log
153
- .for(returnAndCache)
154
- .info(`Storing new ${name} seq value in cache: ${res.current}`);
155
- ctx.cache.put(name, res.current);
156
- return res;
157
- }
158
- const performUpsert = async (next) => {
159
- try {
160
- return await returnAndCache(this.repo.update(new core_1.SequenceModel({ id: name, current: next }), ctx));
161
- }
162
- catch (e) {
163
- if (e instanceof db_decorators_1.NotFoundError) {
164
- return await returnAndCache(this.repo.create(new core_1.SequenceModel({ id: name, current: next }), ctx));
165
- }
166
- throw e;
167
- }
168
- };
169
- const incrementSerial = async (base) => {
170
- switch (typeName) {
171
- case Number.name:
172
- return this.parse(base) + toIncrementBy;
173
- case BigInt.name:
174
- return this.parse(base) + BigInt(toIncrementBy);
175
- case String.name:
176
- return this.parse(base);
177
- case "serial":
178
- return await Promise.resolve(core_1.Serial.instance.generate(base));
179
- default:
180
- throw new db_decorators_1.InternalError("Should never happen");
181
- }
182
- };
183
- // Check if model is fully segregated — sequence goes ONLY to private collections.
184
- // Prefer the explicit per-sequence metadata when available; otherwise fall back to
185
- // the context's registered read collections (covers early pk generation paths).
186
- const adapterMeta = ctx.getSequenceSegregation(name);
187
- const fallbackCollections = ctx
188
- .getReadCollections()
189
- .filter(Boolean);
190
- const effectiveCollections = adapterMeta?.collections?.length ? adapterMeta.collections : fallbackCollections;
191
- const effectiveFullySegregated = (adapterMeta?.fullySegregated ?? ctx.isFullySegregated) &&
192
- effectiveCollections.length > 0;
193
- let next;
194
- if (typeName === "uuid") {
195
- throw new core_1.UnsupportedError(`uuid pk generation is only supported using @uuid and a deterministic seed`);
196
- }
197
- else {
198
- next = await incrementSerial(currentValue);
199
- }
200
- if (effectiveFullySegregated) {
201
- const seqModel = new core_1.SequenceModel({ id: name, current: next });
202
- await this.writeSequenceToCollections(ctx, seqModel, effectiveCollections);
203
- log.debug(`Sequence.increment (private-only) ${name} current=${currentValue} next=${next}`);
204
- ctx.cache.put(name, next);
205
- return next;
206
- }
207
- const seq = await performUpsert(next);
208
- log.debug(`Sequence.increment ${name} current=${currentValue} next=${next}`);
209
- // Replicate sequence to segregated collections if model uses private/shared data.
210
- // When metadata isn't available, fall back to the context's registered read collections.
211
- if (effectiveCollections.length) {
212
- await this.writeSequenceToCollections(ctx, seq, effectiveCollections);
213
- }
214
- return seq.current;
215
- // }, name);
216
- }
217
- /**
218
- * @description Ensures the sequence exists and is at least a given value
219
- * @summary Fabric needs to respect segregated/private/shared storage rules when creating
220
- * sequences (for example for persistent @version(true) and @sequence()).
221
- */
222
- async ensureAtLeast(value, ...args) {
223
- const { ctx, log } = (await this.logCtx(args, db_decorators_1.OperationKeys.UPDATE, true)).for(this.ensureAtLeast);
224
- const { name } = this.options;
225
- if (!name)
226
- throw new db_decorators_1.InternalError("Sequence name is required");
227
- const desired = this.parse(value);
228
- const greaterThan = (a, b) => {
229
- if (typeof a === "bigint" || typeof b === "bigint") {
230
- return BigInt(a) > BigInt(b);
231
- }
232
- if (typeof a === "number" || typeof b === "number") {
233
- return Number(a) > Number(b);
234
- }
235
- return String(a) > String(b);
236
- };
237
- const adapterMeta = ctx.getSequenceSegregation(String(name));
238
- const isFullySegregated = adapterMeta !== undefined &&
239
- adapterMeta.fullySegregated &&
240
- adapterMeta.collections.length > 0;
241
- const readExisting = async () => {
242
- try {
243
- return await this.repo.read(name, ctx);
244
- }
245
- catch (e) {
246
- if (e instanceof db_decorators_1.NotFoundError)
247
- return undefined;
248
- throw e;
249
- }
250
- };
251
- const writePrivate = async (seqModel, collections) => {
252
- await this.writeSequenceToCollections(ctx, seqModel, collections);
253
- ctx.cache.put(name, seqModel.current);
254
- };
255
- const upsertPublic = async (next) => {
256
- try {
257
- return await this.repo.update(new core_1.SequenceModel({ id: name, current: next }), ctx);
258
- }
259
- catch (e) {
260
- if (e instanceof db_decorators_1.NotFoundError) {
261
- return await this.repo.create(new core_1.SequenceModel({ id: name, current: next }), ctx);
262
- }
263
- throw e;
264
- }
265
- };
266
- const existing = await readExisting();
267
- if (!existing) {
268
- const seqModel = new core_1.SequenceModel({ id: name, current: desired });
269
- if (isFullySegregated) {
270
- await writePrivate(seqModel, adapterMeta.collections);
271
- return desired;
272
- }
273
- const created = await upsertPublic(desired);
274
- await this.replicateToSegregatedCollections(ctx, created);
275
- return this.parse(created.current);
276
- }
277
- const current = this.parse(existing.current);
278
- if (!greaterThan(desired, current)) {
279
- return current;
280
- }
281
- const seqModel = new core_1.SequenceModel({ id: name, current: desired });
282
- if (isFullySegregated) {
283
- await writePrivate(seqModel, adapterMeta.collections);
284
- log.debug(`Sequence.ensureAtLeast (private-only) ${name} current=${current} desired=${desired}`);
285
- return desired;
286
- }
287
- const updated = await upsertPublic(desired);
288
- await this.replicateToSegregatedCollections(ctx, updated);
289
- return this.parse(updated.current);
290
- }
291
- /**
292
- * @description Replicates the sequence to all segregated collections
293
- * @summary When a model uses privateData or sharedData decorators, its sequence must be
294
- * replicated to all collections the model is stored in. This ensures clients with access
295
- * to only one collection can still read the model's sequence, while clients without
296
- * access to any collection won't see the sequence on the public chain.
297
- * @param {Context<any>} ctx - The execution context
298
- * @param {SequenceModel} seq - The sequence model to replicate
299
- */
300
- async writeSequenceToCollections(ctx, seq, collections) {
301
- const log = ctx.logger.for(this.writeSequenceToCollections);
302
- const adapter = this.adapter;
303
- const tableName = decorator_validation_1.Model.tableName(core_1.SequenceModel);
304
- const composedKey = ctx.stub.createCompositeKey(tableName, [String(seq.id)]);
305
- for (const collection of collections) {
306
- try {
307
- const privateAdapter = adapter.forPrivate(collection);
308
- const record = {
309
- [for_couchdb_1.CouchDBKeys.TABLE]: tableName,
310
- id: seq.id,
311
- current: seq.current,
312
- };
313
- await privateAdapter["putState"](composedKey, record, ctx);
314
- log.debug(`Sequence ${seq.id} written to collection ${collection}`);
315
- }
316
- catch (e) {
317
- log.warn(`Failed to write sequence ${seq.id} to collection ${collection}: ${e}`);
318
- }
319
- }
320
- }
321
- async replicateToSegregatedCollections(ctx, seq) {
322
- // Use adapter metadata instead of ctx.getReadCollections() because the Sequence
323
- // creates its own context via logCtx, losing collections set by extractSegregatedCollections.
324
- const adapterMeta = ctx.getSequenceSegregation(String(seq.id));
325
- if (!adapterMeta || !adapterMeta.collections.length) {
326
- return;
327
- }
328
- // Only replicate for non-fully-segregated models (fully segregated is handled separately)
329
- if (adapterMeta.fullySegregated) {
330
- return;
331
- }
332
- const log = ctx.logger.for(this.replicateToSegregatedCollections);
333
- log.info(`Replicating sequence ${seq.id} to ${adapterMeta.collections.length} segregated collections: ${adapterMeta.collections.join(", ")}`);
334
- await this.writeSequenceToCollections(ctx, seq, adapterMeta.collections);
335
- }
336
- }
337
- exports.FabricContractSequence = FabricContractSequence;
338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ29udHJhY3RTZXF1ZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvRmFicmljQ29udHJhY3RTZXF1ZW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFJaUM7QUFDakMseUVBQXVEO0FBQ3ZELHlDQVN3QjtBQUd4Qix1REFBb0Q7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZDRztBQUNILE1BQWEsc0JBQXVCLFNBQVEsZUFBUTtJQUNsRDs7O09BR0c7SUFDSCxZQUFZLE9BQXdCLEVBQUUsT0FBK0I7UUFDbkUsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDTSxLQUFLLENBQUMsT0FBTyxDQUNwQixHQUFHLElBQTZCO1FBRWhDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FDbkIsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSw2QkFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FDbEQsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BCLElBQUksYUFBa0IsQ0FBQztRQUN2QixNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDekMsTUFBTSxXQUFXLEdBQUksR0FBNkIsQ0FBQyxzQkFBc0IsQ0FDdkUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUNiLENBQUM7UUFDRixJQUFJLENBQUM7WUFDSCxhQUFhLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFXLENBQUMsQ0FBQztZQUNqRCxJQUFJLGFBQWEsS0FBSyxTQUFTLElBQUksYUFBYSxLQUFLLElBQUk7Z0JBQ3ZELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FB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QUUsQ0FBQztZQUNwRCxPQUFPO1FBQ1QsQ0FBQztRQUVELDBGQUEwRjtRQUMxRixJQUFJLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNoQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ2xFLEdBQUcsQ0FBQyxJQUFJLENBQ04sd0JBQXdCLEdBQUcsQ0FBQyxFQUFFLE9BQU8sV0FBVyxDQUFDLFdBQVcsQ0FBQyxNQUFNLDRCQUE0QixXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUNwSSxDQUFDO1FBRUYsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDM0UsQ0FBQztDQUNGO0FBcFlELHdEQW9ZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEludGVybmFsRXJyb3IsXG4gIE5vdEZvdW5kRXJyb3IsXG4gIE9wZXJhdGlvbktleXMsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQge1xuICBBZGFwdGVyLFxuICBDb250ZXh0LFxuICBNYXliZUNvbnRleHR1YWxBcmcsXG4gIFNlcXVlbmNlLFxuICBTZXF1ZW5jZU1vZGVsLFxuICBTZXF1ZW5jZU9wdGlvbnMsXG4gIFNlcmlhbCxcbiAgVW5zdXBwb3J0ZWRFcnJvcixcbn0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBGYWJyaWNDb250cmFjdENvbnRleHQgfSBmcm9tIFwiLi9Db250cmFjdENvbnRleHRcIjtcbmltcG9ydCB0eXBlIHsgRmFicmljQ29udHJhY3RBZGFwdGVyIH0gZnJvbSBcIi4vQ29udHJhY3RBZGFwdGVyXCI7XG5pbXBvcnQgeyBDb3VjaERCS2V5cyB9IGZyb20gXCJAZGVjYWYtdHMvZm9yLWNvdWNoZGJcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3Igc2VxdWVuY2UgZ2VuZXJhdGlvblxuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIGdlbmVyYXRpbmcgc2VxdWVudGlhbCB2YWx1ZXMgKGxpa2UgcHJpbWFyeSBrZXlzKSBpbiB0aGUgcGVyc2lzdGVuY2UgbGF5ZXIuXG4gKiBJbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBjbGFzcyBoYW5kbGUgdGhlIHNwZWNpZmljcyBvZiBob3cgc2VxdWVuY2VzIGFyZSBzdG9yZWQgYW5kIGluY3JlbWVudGVkIGluIGRpZmZlcmVudFxuICogZGF0YWJhc2Ugc3lzdGVtcy5cbiAqIEBwYXJhbSB7U2VxdWVuY2VPcHRpb25zfSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgc2VxdWVuY2UgZ2VuZXJhdG9yXG4gKiBAY2xhc3MgU2VxdWVuY2VcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBFeGFtcGxlIGltcGxlbWVudGF0aW9uIGZvciBhIHNwZWNpZmljIGRhdGFiYXNlXG4gKiBjbGFzcyBQb3N0Z3Jlc1NlcXVlbmNlIGV4dGVuZHMgU2VxdWVuY2Uge1xuICogICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMpIHtcbiAqICAgICBzdXBlcihvcHRpb25zKTtcbiAqICAgfVxuICpcbiAqICAgYXN5bmMgbmV4dCgpOiBQcm9taXNlPG51bWJlcj4ge1xuICogICAgIC8vIEltcGxlbWVudGF0aW9uIHRvIGdldCBuZXh0IHZhbHVlIGZyb20gUG9zdGdyZVNRTCBzZXF1ZW5jZVxuICogICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMub3B0aW9ucy5leGVjdXRvci5yYXcoYFNFTEVDVCBuZXh0dmFsKCcke3RoaXMub3B0aW9ucy5uYW1lfScpYCk7XG4gKiAgICAgcmV0dXJuIHBhcnNlSW50KHJlc3VsdC5yb3dzWzBdLm5leHR2YWwpO1xuICogICB9XG4gKlxuICogICBhc3luYyBjdXJyZW50KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gKiAgICAgLy8gSW1wbGVtZW50YXRpb24gdG8gZ2V0IGN1cnJlbnQgdmFsdWUgZnJvbSBQb3N0Z3JlU1FMIHNlcXVlbmNlXG4gKiAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5vcHRpb25zLmV4ZWN1dG9yLnJhdyhgU0VMRUNUIGN1cnJ2YWwoJyR7dGhpcy5vcHRpb25zLm5hbWV9JylgKTtcbiAqICAgICByZXR1cm4gcGFyc2VJbnQocmVzdWx0LnJvd3NbMF0uY3VycnZhbCk7XG4gKiAgIH1cbiAqXG4gKiAgIGFzeW5jIHJhbmdlKGNvdW50OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcltdPiB7XG4gKiAgICAgLy8gSW1wbGVtZW50YXRpb24gdG8gZ2V0IGEgcmFuZ2Ugb2YgdmFsdWVzXG4gKiAgICAgY29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtdO1xuICogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICogICAgICAgdmFsdWVzLnB1c2goYXdhaXQgdGhpcy5uZXh0KCkpO1xuICogICAgIH1cbiAqICAgICByZXR1cm4gdmFsdWVzO1xuICogICB9XG4gKiB9XG4gKlxuICogLy8gVXNhZ2VcbiAqIGNvbnN0IHNlcXVlbmNlID0gbmV3IFBvc3RncmVzU2VxdWVuY2Uoe1xuICogICBuYW1lOiAndXNlcl9pZF9zZXEnLFxuICogICBleGVjdXRvcjogZGJFeGVjdXRvclxuICogfSk7XG4gKlxuICogY29uc3QgbmV4dElkID0gYXdhaXQgc2VxdWVuY2UubmV4dCgpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBGYWJyaWNDb250cmFjdFNlcXVlbmNlIGV4dGVuZHMgU2VxdWVuY2Uge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgc2VxdWVuY2UgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgUHJvdGVjdGVkIGNvbnN0cnVjdG9yIHRoYXQgaW5pdGlhbGl6ZXMgdGhlIHNlcXVlbmNlIHdpdGggdGhlIHByb3ZpZGVkIG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFNlcXVlbmNlT3B0aW9ucywgYWRhcHRlcjogQWRhcHRlcjxhbnksIGFueSwgYW55Pikge1xuICAgIHN1cGVyKG9wdGlvbnMsIGFkYXB0ZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNlcXVlbmNlXG4gICAqIEBzdW1tYXJ5IEdldHMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNlcXVlbmNlIGZyb20gc3RvcmFnZS4gSWYgdGhlIHNlcXVlbmNlXG4gICAqIGRvZXNuJ3QgZXhpc3QgeWV0LCBpdCByZXR1cm5zIHRoZSBjb25maWd1cmVkIHN0YXJ0aW5nIHZhbHVlLlxuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjdXJyZW50IHNlcXVlbmNlIHZhbHVlXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBjdXJyZW50KFxuICAgIC4uLmFyZ3M6IE1heWJlQ29udGV4dHVhbEFyZzxhbnk+XG4gICk6IFByb21pc2U8c3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50PiB7XG4gICAgY29uc3QgeyBjdHgsIGxvZyB9ID0gKFxuICAgICAgYXdhaXQgdGhpcy5sb2dDdHgoYXJncywgT3BlcmF0aW9uS2V5cy5SRUFELCB0cnVlKVxuICAgICkuZm9yKHRoaXMuY3VycmVudCk7XG4gICAgbGV0IGNhY2hlZEN1cnJlbnQ6IGFueTtcbiAgICBjb25zdCB7IG5hbWUsIHN0YXJ0V2l0aCB9ID0gdGhpcy5vcHRpb25zO1xuICAgIGNvbnN0IGFkYXB0ZXJNZXRhID0gKGN0eCBhcyBGYWJyaWNDb250cmFjdENvbnRleHQpLmdldFNlcXVlbmNlU2VncmVnYXRpb24oXG4gICAgICBTdHJpbmcobmFtZSlcbiAgICApO1xuICAgIHRyeSB7XG4gICAgICBjYWNoZWRDdXJyZW50ID0gY3R4LmdldEZyb21DaGlsZHJlbihuYW1lIGFzIGFueSk7XG4gICAgICBpZiAoY2FjaGVkQ3VycmVudCAhPT0gdW5kZWZpbmVkICYmIGNhY2hlZEN1cnJlbnQgIT09IG51bGwpXG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlKGNhY2hlZEN1cnJlbnQpO1xuICAgICAgY29uc3Qgc2VxdWVuY2U6IFNlcXVlbmNlTW9kZWwgPSBhd2FpdCB0aGlzLnJlcG8ucmVhZChuYW1lIGFzIHN0cmluZywgY3R4KTtcbiAgICAgIHJldHVybiB0aGlzLnBhcnNlKHNlcXVlbmNlLmN1cnJlbnQgYXMgc3RyaW5nIHwgbnVtYmVyKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcikge1xuICAgICAgICAvLyBJZiB0aGUgc2VxdWVuY2UgaXMgc3VwcG9zZWQgdG8gbGl2ZSBpbiBwcml2YXRlL3NoYXJlZCBjb2xsZWN0aW9ucyxcbiAgICAgICAgLy8gcmVhZCBpdCBmcm9tIHRob3NlIGNvbGxlY3Rpb25zIHVzaW5nIHRoZSBhZGFwdGVyIChub3QgdGhlIHN0dWIgZGlyZWN0bHkpLlxuICAgICAgICBpZiAoYWRhcHRlck1ldGE/LmNvbGxlY3Rpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hZGFwdGVyIGFzIHVua25vd24gYXMgRmFicmljQ29udHJhY3RBZGFwdGVyO1xuICAgICAgICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShTZXF1ZW5jZU1vZGVsIGFzIGFueSk7XG4gICAgICAgICAgY29uc3QgcHVibGljS2V5ID0gKGN0eCBhcyBGYWJyaWNDb250cmFjdENvbnRleHQpLnN0dWIuY3JlYXRlQ29tcG9zaXRlS2V5KFxuICAgICAgICAgICAgdGFibGVOYW1lLFxuICAgICAgICAgICAgW1N0cmluZyhuYW1lKV1cbiAgICAgICAgICApO1xuICAgICAgICAgIGZvciAoY29uc3QgY29sIG9mIGFkYXB0ZXJNZXRhLmNvbGxlY3Rpb25zKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBwcml2YXRlQWRhcHRlciA9IGFkYXB0ZXIuZm9yUHJpdmF0ZShjb2wpO1xuICAgICAgICAgICAgICBjb25zdCByYXcgPSBhd2FpdCAocHJpdmF0ZUFkYXB0ZXIgYXMgYW55KS5yZWFkU3RhdGUoXG4gICAgICAgICAgICAgICAgcHVibGljS2V5LFxuICAgICAgICAgICAgICAgIGN0eCBhcyBhbnlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHJhdyAmJiByYXcuY3VycmVudCAhPT0gdW5kZWZpbmVkICYmIHJhdy5jdXJyZW50ICE9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnNlKHJhdy5jdXJyZW50IGFzIGFueSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnI6IGFueSkge1xuICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcikgY29udGludWU7XG4gICAgICAgICAgICAgIC8vIGZhbGwgdGhyb3VnaCB0byByZWd1bGFyIHN0YXJ0V2l0aCBmYWxsYmFjayBmb3IgYW55IHBhcnNlL0lPIGVycm9yc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgICAgIGBUcnlpbmcgdG8gcmVzb2x2ZSBjdXJyZW50IHNlcXVlbmNlICR7bmFtZX0gdmFsdWUgZnJvbSBjb250ZXh0IHRyZWVgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjYWNoZWRDdXJyZW50ID0gY3R4LmdldEZyb21DaGlsZHJlbihuYW1lIGFzIGFueSk7XG4gICAgICAgICAgaWYgKGNhY2hlZEN1cnJlbnQgIT09IHVuZGVmaW5lZCAmJiBjYWNoZWRDdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsb2cuZGVidWcoXG4gICAgICAgICAgICAgIGBSZXRyaWV2ZWQgY2FjaGVkIGN1cnJlbnQgdmFsdWUgZm9yIHNlcXVlbmNlICR7bmFtZX06ICR7Y2FjaGVkQ3VycmVudH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICAvLyBmYWxsIHRocm91Z2hcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FjaGVkQ3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IGNhY2hlZEN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICBsb2cuaW5mbyhgTm8gY2FjaGVkIHZhbHVlIGZvciBzZXF1ZW5jZSAke25hbWV9IGluIGNvbnRleHRgKTtcbiAgICAgICAgICBjYWNoZWRDdXJyZW50ID0gc3RhcnRXaXRoO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2UoY2FjaGVkQ3VycmVudCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBwYXJzZSBpbml0aWFsIHZhbHVlIGZvciBzZXF1ZW5jZSAke3N0YXJ0V2l0aH06ICR7ZX1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gcmV0cmlldmUgY3VycmVudCB2YWx1ZSBmb3Igc2VxdWVuY2UgJHtuYW1lfTogJHtlfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbmNyZW1lbnRzIHRoZSBzZXF1ZW5jZSB2YWx1ZVxuICAgKiBAc3VtbWFyeSBJbmNyZWFzZXMgdGhlIGN1cnJlbnQgc2VxdWVuY2UgdmFsdWUgYnkgdGhlIHNwZWNpZmllZCBhbW91bnQgYW5kIHBlcnNpc3RzXG4gICAqIHRoZSBuZXcgdmFsdWUgdG8gc3RvcmFnZS4gVGhpcyBtZXRob2QgaGFuZGxlcyBib3RoIG51bWVyaWMgYW5kIEJpZ0ludCBzZXF1ZW5jZSB0eXBlcy5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnR9IGN1cnJlbnQgLSBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc2VxdWVuY2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtjb3VudF0gLSBPcHRpb25hbCBhbW91bnQgdG8gaW5jcmVtZW50IGJ5LCBkZWZhdWx0cyB0byB0aGUgc2VxdWVuY2UncyBpbmNyZW1lbnRCeSB2YWx1ZVxuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBuZXcgc2VxdWVuY2UgdmFsdWUgYWZ0ZXIgaW5jcmVtZW50aW5nXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgaW5jcmVtZW50KFxuICAgIGNvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgY3R4OiBDb250ZXh0PGFueT5cbiAgKTogUHJvbWlzZTxzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ+IHtcbiAgICBjb25zdCBsb2cgPSBjdHgubG9nZ2VyLmZvcih0aGlzLmluY3JlbWVudCk7XG4gICAgY29uc3QgeyB0eXBlLCBpbmNyZW1lbnRCeSwgbmFtZSB9ID0gdGhpcy5vcHRpb25zO1xuICAgIGlmICghbmFtZSkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJTZXF1ZW5jZSBuYW1lIGlzIHJlcXVpcmVkXCIpO1xuICAgIGxvZy5pbmZvKGBPYnRhaW5pbmcgc2VxdWVuY2UgbG9jayBmb3Igc2VxdWVuY2UgJHtuYW1lfWApO1xuICAgIC8vIHJldHVybiBGYWJyaWNDb250cmFjdFNlcXVlbmNlLmxvY2suZXhlY3V0ZShhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdG9JbmNyZW1lbnRCeSA9IGNvdW50IHx8IGluY3JlbWVudEJ5O1xuICAgIGlmICh0b0luY3JlbWVudEJ5ICUgaW5jcmVtZW50QnkgIT09IDApXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYFZhbHVlIHRvIGluY3JlbWVudCBkb2VzIG5vdCBjb25zaWRlciB0aGUgaW5jcmVtZW50Qnkgc2V0dGluZzogJHtpbmNyZW1lbnRCeX1gXG4gICAgICApO1xuICAgIGNvbnN0IHR5cGVOYW1lID1cbiAgICAgIHR5cGVvZiB0eXBlID09PSBcImZ1bmN0aW9uXCIgJiYgKHR5cGUgYXMgYW55KT8ubmFtZVxuICAgICAgICA/ICh0eXBlIGFzIGFueSkubmFtZVxuICAgICAgICA6IHR5cGU7XG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gYXdhaXQgdGhpcy5jdXJyZW50KGN0eCk7XG5cbiAgICBhc3luYyBmdW5jdGlvbiByZXR1cm5BbmRDYWNoZShyZXM6IFNlcXVlbmNlTW9kZWwgfCBQcm9taXNlPFNlcXVlbmNlTW9kZWw+KSB7XG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgUHJvbWlzZSkgcmVzID0gYXdhaXQgcmVzO1xuICAgICAgbG9nXG4gICAgICAgIC5mb3IocmV0dXJuQW5kQ2FjaGUpXG4gICAgICAgIC5pbmZvKGBTdG9yaW5nIG5ldyAke25hbWV9IHNlcSB2YWx1ZSBpbiBjYWNoZTogJHtyZXMuY3VycmVudH1gKTtcbiAgICAgIGN0eC5jYWNoZS5wdXQobmFtZSBhcyBzdHJpbmcsIHJlcy5jdXJyZW50KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgY29uc3QgcGVyZm9ybVVwc2VydCA9IGFzeW5jIChcbiAgICAgIG5leHQ6IHN0cmluZyB8IG51bWJlciB8IGJpZ2ludFxuICAgICk6IFByb21pc2U8U2VxdWVuY2VNb2RlbD4gPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJldHVybkFuZENhY2hlKFxuICAgICAgICAgIHRoaXMucmVwby51cGRhdGUobmV3IFNlcXVlbmNlTW9kZWwoeyBpZDogbmFtZSwgY3VycmVudDogbmV4dCB9KSwgY3R4KVxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBhd2FpdCByZXR1cm5BbmRDYWNoZShcbiAgICAgICAgICAgIHRoaXMucmVwby5jcmVhdGUoXG4gICAgICAgICAgICAgIG5ldyBTZXF1ZW5jZU1vZGVsKHsgaWQ6IG5hbWUsIGN1cnJlbnQ6IG5leHQgfSksXG4gICAgICAgICAgICAgIGN0eFxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgaW5jcmVtZW50U2VyaWFsID0gYXN5bmMgKFxuICAgICAgYmFzZTogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50XG4gICAgKTogUHJvbWlzZTxzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ+ID0+IHtcbiAgICAgIHN3aXRjaCAodHlwZU5hbWUpIHtcbiAgICAgICAgY2FzZSBOdW1iZXIubmFtZTpcbiAgICAgICAgICByZXR1cm4gKHRoaXMucGFyc2UoYmFzZSkgYXMgbnVtYmVyKSArIHRvSW5jcmVtZW50Qnk7XG4gICAgICAgIGNhc2UgQmlnSW50Lm5hbWU6XG4gICAgICAgICAgcmV0dXJuICh0aGlzLnBhcnNlKGJhc2UpIGFzIGJpZ2ludCkgKyBCaWdJbnQodG9JbmNyZW1lbnRCeSk7XG4gICAgICAgIGNhc2UgU3RyaW5nLm5hbWU6XG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyc2UoYmFzZSk7XG4gICAgICAgIGNhc2UgXCJzZXJpYWxcIjpcbiAgICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgU2VyaWFsLmluc3RhbmNlLmdlbmVyYXRlKGJhc2UgYXMgc3RyaW5nKVxuICAgICAgICAgICk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJTaG91bGQgbmV2ZXIgaGFwcGVuXCIpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBDaGVjayBpZiBtb2RlbCBpcyBmdWxseSBzZWdyZWdhdGVkIOKAlCBzZXF1ZW5jZSBnb2VzIE9OTFkgdG8gcHJpdmF0ZSBjb2xsZWN0aW9ucy5cbiAgICAvLyBQcmVmZXIgdGhlIGV4cGxpY2l0IHBlci1zZXF1ZW5jZSBtZXRhZGF0YSB3aGVuIGF2YWlsYWJsZTsgb3RoZXJ3aXNlIGZhbGwgYmFjayB0b1xuICAgIC8vIHRoZSBjb250ZXh0J3MgcmVnaXN0ZXJlZCByZWFkIGNvbGxlY3Rpb25zIChjb3ZlcnMgZWFybHkgcGsgZ2VuZXJhdGlvbiBwYXRocykuXG4gICAgY29uc3QgYWRhcHRlck1ldGEgPSAoY3R4IGFzIEZhYnJpY0NvbnRyYWN0Q29udGV4dCkuZ2V0U2VxdWVuY2VTZWdyZWdhdGlvbihcbiAgICAgIG5hbWVcbiAgICApO1xuICAgIGNvbnN0IGZhbGxiYWNrQ29sbGVjdGlvbnMgPSAoY3R4IGFzIEZhYnJpY0NvbnRyYWN0Q29udGV4dClcbiAgICAgIC5nZXRSZWFkQ29sbGVjdGlvbnMoKVxuICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICBjb25zdCBlZmZlY3RpdmVDb2xsZWN0aW9ucyA9XG4gICAgICBhZGFwdGVyTWV0YT8uY29sbGVjdGlvbnM/Lmxlbmd0aCA/IGFkYXB0ZXJNZXRhLmNvbGxlY3Rpb25zIDogZmFsbGJhY2tDb2xsZWN0aW9ucztcbiAgICBjb25zdCBlZmZlY3RpdmVGdWxseVNlZ3JlZ2F0ZWQgPVxuICAgICAgKGFkYXB0ZXJNZXRhPy5mdWxseVNlZ3JlZ2F0ZWQgPz8gKGN0eCBhcyBGYWJyaWNDb250cmFjdENvbnRleHQpLmlzRnVsbHlTZWdyZWdhdGVkKSAmJlxuICAgICAgZWZmZWN0aXZlQ29sbGVjdGlvbnMubGVuZ3RoID4gMDtcblxuICAgIGxldCBuZXh0OiBhbnk7XG4gICAgaWYgKHR5cGVOYW1lID09PSBcInV1aWRcIikge1xuICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoXG4gICAgICAgIGB1dWlkIHBrIGdlbmVyYXRpb24gaXMgb25seSBzdXBwb3J0ZWQgdXNpbmcgQHV1aWQgYW5kIGEgZGV0ZXJtaW5pc3RpYyBzZWVkYFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dCA9IGF3YWl0IGluY3JlbWVudFNlcmlhbChjdXJyZW50VmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChlZmZlY3RpdmVGdWxseVNlZ3JlZ2F0ZWQpIHtcbiAgICAgIGNvbnN0IHNlcU1vZGVsID0gbmV3IFNlcXVlbmNlTW9kZWwoeyBpZDogbmFtZSwgY3VycmVudDogbmV4dCB9KTtcbiAgICAgIGF3YWl0IHRoaXMud3JpdGVTZXF1ZW5jZVRvQ29sbGVjdGlvbnMoXG4gICAgICAgIGN0eCxcbiAgICAgICAgc2VxTW9kZWwsXG4gICAgICAgIGVmZmVjdGl2ZUNvbGxlY3Rpb25zXG4gICAgICApO1xuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBgU2VxdWVuY2UuaW5jcmVtZW50IChwcml2YXRlLW9ubHkpICR7bmFtZX0gY3VycmVudD0ke2N1cnJlbnRWYWx1ZSBhcyBhbnl9IG5leHQ9JHtuZXh0IGFzIGFueX1gXG4gICAgICApO1xuICAgICAgY3R4LmNhY2hlLnB1dChuYW1lIGFzIHN0cmluZywgbmV4dCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9XG5cbiAgICBjb25zdCBzZXEgPSBhd2FpdCBwZXJmb3JtVXBzZXJ0KG5leHQpO1xuICAgIGxvZy5kZWJ1ZyhcbiAgICAgIGBTZXF1ZW5jZS5pbmNyZW1lbnQgJHtuYW1lfSBjdXJyZW50PSR7Y3VycmVudFZhbHVlIGFzIGFueX0gbmV4dD0ke25leHQgYXMgYW55fWBcbiAgICApO1xuXG4gICAgLy8gUmVwbGljYXRlIHNlcXVlbmNlIHRvIHNlZ3JlZ2F0ZWQgY29sbGVjdGlvbnMgaWYgbW9kZWwgdXNlcyBwcml2YXRlL3NoYXJlZCBkYXRhLlxuICAgIC8vIFdoZW4gbWV0YWRhdGEgaXNuJ3QgYXZhaWxhYmxlLCBmYWxsIGJhY2sgdG8gdGhlIGNvbnRleHQncyByZWdpc3RlcmVkIHJlYWQgY29sbGVjdGlvbnMuXG4gICAgaWYgKGVmZmVjdGl2ZUNvbGxlY3Rpb25zLmxlbmd0aCkge1xuICAgICAgYXdhaXQgdGhpcy53cml0ZVNlcXVlbmNlVG9Db2xsZWN0aW9ucyhjdHgsIHNlcSwgZWZmZWN0aXZlQ29sbGVjdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiBzZXEuY3VycmVudCBhcyBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ7XG4gICAgLy8gfSwgbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEVuc3VyZXMgdGhlIHNlcXVlbmNlIGV4aXN0cyBhbmQgaXMgYXQgbGVhc3QgYSBnaXZlbiB2YWx1ZVxuICAgKiBAc3VtbWFyeSBGYWJyaWMgbmVlZHMgdG8gcmVzcGVjdCBzZWdyZWdhdGVkL3ByaXZhdGUvc2hhcmVkIHN0b3JhZ2UgcnVsZXMgd2hlbiBjcmVhdGluZ1xuICAgKiBzZXF1ZW5jZXMgKGZvciBleGFtcGxlIGZvciBwZXJzaXN0ZW50IEB2ZXJzaW9uKHRydWUpIGFuZCBAc2VxdWVuY2UoKSkuXG4gICAqL1xuICBvdmVycmlkZSBhc3luYyBlbnN1cmVBdExlYXN0KFxuICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQsXG4gICAgLi4uYXJnczogTWF5YmVDb250ZXh0dWFsQXJnPGFueT5cbiAgKTogUHJvbWlzZTxzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQ+IHtcbiAgICBjb25zdCB7IGN0eCwgbG9nIH0gPSAoXG4gICAgICBhd2FpdCB0aGlzLmxvZ0N0eChhcmdzLCBPcGVyYXRpb25LZXlzLlVQREFURSwgdHJ1ZSlcbiAgICApLmZvcih0aGlzLmVuc3VyZUF0TGVhc3QpO1xuICAgIGNvbnN0IHsgbmFtZSB9ID0gdGhpcy5vcHRpb25zO1xuICAgIGlmICghbmFtZSkgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJTZXF1ZW5jZSBuYW1lIGlzIHJlcXVpcmVkXCIpO1xuXG4gICAgY29uc3QgZGVzaXJlZCA9IHRoaXMucGFyc2UodmFsdWUpO1xuXG4gICAgY29uc3QgZ3JlYXRlclRoYW4gPSAoXG4gICAgICBhOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnQsXG4gICAgICBiOiBzdHJpbmcgfCBudW1iZXIgfCBiaWdpbnRcbiAgICApOiBib29sZWFuID0+IHtcbiAgICAgIGlmICh0eXBlb2YgYSA9PT0gXCJiaWdpbnRcIiB8fCB0eXBlb2YgYiA9PT0gXCJiaWdpbnRcIikge1xuICAgICAgICByZXR1cm4gQmlnSW50KGEgYXMgYW55KSA+IEJpZ0ludChiIGFzIGFueSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGEgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIGIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgcmV0dXJuIE51bWJlcihhKSA+IE51bWJlcihiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBTdHJpbmcoYSkgPiBTdHJpbmcoYik7XG4gICAgfTtcblxuICAgIGNvbnN0IGFkYXB0ZXJNZXRhID0gKGN0eCBhcyBGYWJyaWNDb250cmFjdENvbnRleHQpLmdldFNlcXVlbmNlU2VncmVnYXRpb24oXG4gICAgICBTdHJpbmcobmFtZSlcbiAgICApO1xuICAgIGNvbnN0IGlzRnVsbHlTZWdyZWdhdGVkID1cbiAgICAgIGFkYXB0ZXJNZXRhICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIGFkYXB0ZXJNZXRhLmZ1bGx5U2VncmVnYXRlZCAmJlxuICAgICAgYWRhcHRlck1ldGEuY29sbGVjdGlvbnMubGVuZ3RoID4gMDtcblxuICAgIGNvbnN0IHJlYWRFeGlzdGluZyA9IGFzeW5jICgpOiBQcm9taXNlPFNlcXVlbmNlTW9kZWwgfCB1bmRlZmluZWQ+ID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcG8ucmVhZChuYW1lIGFzIHN0cmluZywgY3R4KTtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE5vdEZvdW5kRXJyb3IpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHdyaXRlUHJpdmF0ZSA9IGFzeW5jIChcbiAgICAgIHNlcU1vZGVsOiBTZXF1ZW5jZU1vZGVsLFxuICAgICAgY29sbGVjdGlvbnM6IHN0cmluZ1tdXG4gICAgKSA9PiB7XG4gICAgICBhd2FpdCB0aGlzLndyaXRlU2VxdWVuY2VUb0NvbGxlY3Rpb25zKGN0eCwgc2VxTW9kZWwsIGNvbGxlY3Rpb25zKTtcbiAgICAgIGN0eC5jYWNoZS5wdXQobmFtZSBhcyBzdHJpbmcsIHNlcU1vZGVsLmN1cnJlbnQpO1xuICAgIH07XG5cbiAgICBjb25zdCB1cHNlcnRQdWJsaWMgPSBhc3luYyAobmV4dDogc3RyaW5nIHwgbnVtYmVyIHwgYmlnaW50KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5yZXBvLnVwZGF0ZShcbiAgICAgICAgICBuZXcgU2VxdWVuY2VNb2RlbCh7IGlkOiBuYW1lLCBjdXJyZW50OiBuZXh0IH0pLFxuICAgICAgICAgIGN0eFxuICAgICAgICApO1xuICAgICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICAgIGlmIChlIGluc3RhbmNlb2YgTm90Rm91bmRFcnJvcikge1xuICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnJlcG8uY3JlYXRlKFxuICAgICAgICAgICAgbmV3IFNlcXVlbmNlTW9kZWwoeyBpZDogbmFtZSwgY3VycmVudDogbmV4dCB9KSxcbiAgICAgICAgICAgIGN0eFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgZXhpc3RpbmcgPSBhd2FpdCByZWFkRXhpc3RpbmcoKTtcbiAgICBpZiAoIWV4aXN0aW5nKSB7XG4gICAgICBjb25zdCBzZXFNb2RlbCA9IG5ldyBTZXF1ZW5jZU1vZGVsKHsgaWQ6IG5hbWUsIGN1cnJlbnQ6IGRlc2lyZWQgfSk7XG4gICAgICBpZiAoaXNGdWxseVNlZ3JlZ2F0ZWQpIHtcbiAgICAgICAgYXdhaXQgd3JpdGVQcml2YXRlKHNlcU1vZGVsLCBhZGFwdGVyTWV0YSEuY29sbGVjdGlvbnMpO1xuICAgICAgICByZXR1cm4gZGVzaXJlZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCB1cHNlcnRQdWJsaWMoZGVzaXJlZCk7XG4gICAgICBhd2FpdCB0aGlzLnJlcGxpY2F0ZVRvU2VncmVnYXRlZENvbGxlY3Rpb25zKGN0eCwgY3JlYXRlZCk7XG4gICAgICByZXR1cm4gdGhpcy5wYXJzZShjcmVhdGVkLmN1cnJlbnQgYXMgYW55KTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5wYXJzZShleGlzdGluZy5jdXJyZW50IGFzIGFueSk7XG4gICAgaWYgKCFncmVhdGVyVGhhbihkZXNpcmVkLCBjdXJyZW50KSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VxTW9kZWwgPSBuZXcgU2VxdWVuY2VNb2RlbCh7IGlkOiBuYW1lLCBjdXJyZW50OiBkZXNpcmVkIH0pO1xuICAgIGlmIChpc0Z1bGx5U2VncmVnYXRlZCkge1xuICAgICAgYXdhaXQgd3JpdGVQcml2YXRlKHNlcU1vZGVsLCBhZGFwdGVyTWV0YSEuY29sbGVjdGlvbnMpO1xuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBgU2VxdWVuY2UuZW5zdXJlQXRMZWFzdCAocHJpdmF0ZS1vbmx5KSAke25hbWV9IGN1cnJlbnQ9JHtjdXJyZW50IGFzIGFueX0gZGVzaXJlZD0ke2Rlc2lyZWQgYXMgYW55fWBcbiAgICAgICk7XG4gICAgICByZXR1cm4gZGVzaXJlZDtcbiAgICB9XG5cbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgdXBzZXJ0UHVibGljKGRlc2lyZWQpO1xuICAgIGF3YWl0IHRoaXMucmVwbGljYXRlVG9TZWdyZWdhdGVkQ29sbGVjdGlvbnMoY3R4LCB1cGRhdGVkKTtcbiAgICByZXR1cm4gdGhpcy5wYXJzZSh1cGRhdGVkLmN1cnJlbnQgYXMgYW55KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwbGljYXRlcyB0aGUgc2VxdWVuY2UgdG8gYWxsIHNlZ3JlZ2F0ZWQgY29sbGVjdGlvbnNcbiAgICogQHN1bW1hcnkgV2hlbiBhIG1vZGVsIHVzZXMgcHJpdmF0ZURhdGEgb3Igc2hhcmVkRGF0YSBkZWNvcmF0b3JzLCBpdHMgc2VxdWVuY2UgbXVzdCBiZVxuICAgKiByZXBsaWNhdGVkIHRvIGFsbCBjb2xsZWN0aW9ucyB0aGUgbW9kZWwgaXMgc3RvcmVkIGluLiBUaGlzIGVuc3VyZXMgY2xpZW50cyB3aXRoIGFjY2Vzc1xuICAgKiB0byBvbmx5IG9uZSBjb2xsZWN0aW9uIGNhbiBzdGlsbCByZWFkIHRoZSBtb2RlbCdzIHNlcXVlbmNlLCB3aGlsZSBjbGllbnRzIHdpdGhvdXRcbiAgICogYWNjZXNzIHRvIGFueSBjb2xsZWN0aW9uIHdvbid0IHNlZSB0aGUgc2VxdWVuY2Ugb24gdGhlIHB1YmxpYyBjaGFpbi5cbiAgICogQHBhcmFtIHtDb250ZXh0PGFueT59IGN0eCAtIFRoZSBleGVjdXRpb24gY29udGV4dFxuICAgKiBAcGFyYW0ge1NlcXVlbmNlTW9kZWx9IHNlcSAtIFRoZSBzZXF1ZW5jZSBtb2RlbCB0byByZXBsaWNhdGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgd3JpdGVTZXF1ZW5jZVRvQ29sbGVjdGlvbnMoXG4gICAgY3R4OiBDb250ZXh0PGFueT4sXG4gICAgc2VxOiBTZXF1ZW5jZU1vZGVsLFxuICAgIGNvbGxlY3Rpb25zOiBzdHJpbmdbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBsb2cgPSBjdHgubG9nZ2VyLmZvcih0aGlzLndyaXRlU2VxdWVuY2VUb0NvbGxlY3Rpb25zKTtcbiAgICBjb25zdCBhZGFwdGVyID0gdGhpcy5hZGFwdGVyIGFzIHVua25vd24gYXMgRmFicmljQ29udHJhY3RBZGFwdGVyO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IE1vZGVsLnRhYmxlTmFtZShTZXF1ZW5jZU1vZGVsIGFzIGFueSk7XG4gICAgY29uc3QgY29tcG9zZWRLZXkgPSAoY3R4IGFzIEZhYnJpY0NvbnRyYWN0Q29udGV4dCkuc3R1Yi5jcmVhdGVDb21wb3NpdGVLZXkoXG4gICAgICB0YWJsZU5hbWUsXG4gICAgICBbU3RyaW5nKHNlcS5pZCldXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUFkYXB0ZXIgPSBhZGFwdGVyLmZvclByaXZhdGUoY29sbGVjdGlvbik7XG4gICAgICAgIGNvbnN0IHJlY29yZCA9IHtcbiAgICAgICAgICBbQ291Y2hEQktleXMuVEFCTEVdOiB0YWJsZU5hbWUsXG4gICAgICAgICAgaWQ6IHNlcS5pZCxcbiAgICAgICAgICBjdXJyZW50OiBzZXEuY3VycmVudCxcbiAgICAgICAgfTtcbiAgICAgICAgYXdhaXQgcHJpdmF0ZUFkYXB0ZXJbXCJwdXRTdGF0ZVwiXShjb21wb3NlZEtleSwgcmVjb3JkLCBjdHggYXMgYW55KTtcbiAgICAgICAgbG9nLmRlYnVnKGBTZXF1ZW5jZSAke3NlcS5pZH0gd3JpdHRlbiB0byBjb2xsZWN0aW9uICR7Y29sbGVjdGlvbn1gKTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgbG9nLndhcm4oXG4gICAgICAgICAgYEZhaWxlZCB0byB3cml0ZSBzZXF1ZW5jZSAke3NlcS5pZH0gdG8gY29sbGVjdGlvbiAke2NvbGxlY3Rpb259OiAke2V9YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVwbGljYXRlVG9TZWdyZWdhdGVkQ29sbGVjdGlvbnMoXG4gICAgY3R4OiBDb250ZXh0PGFueT4sXG4gICAgc2VxOiBTZXF1ZW5jZU1vZGVsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFVzZSBhZGFwdGVyIG1ldGFkYXRhIGluc3RlYWQgb2YgY3R4LmdldFJlYWRDb2xsZWN0aW9ucygpIGJlY2F1c2UgdGhlIFNlcXVlbmNlXG4gICAgLy8gY3JlYXRlcyBpdHMgb3duIGNvbnRleHQgdmlhIGxvZ0N0eCwgbG9zaW5nIGNvbGxlY3Rpb25zIHNldCBieSBleHRyYWN0U2VncmVnYXRlZENvbGxlY3Rpb25zLlxuICAgIGNvbnN0IGFkYXB0ZXJNZXRhID0gKGN0eCBhcyBGYWJyaWNDb250cmFjdENvbnRleHQpLmdldFNlcXVlbmNlU2VncmVnYXRpb24oXG4gICAgICBTdHJpbmcoc2VxLmlkKVxuICAgICk7XG5cbiAgICBpZiAoIWFkYXB0ZXJNZXRhIHx8ICFhZGFwdGVyTWV0YS5jb2xsZWN0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPbmx5IHJlcGxpY2F0ZSBmb3Igbm9uLWZ1bGx5LXNlZ3JlZ2F0ZWQgbW9kZWxzIChmdWxseSBzZWdyZWdhdGVkIGlzIGhhbmRsZWQgc2VwYXJhdGVseSlcbiAgICBpZiAoYWRhcHRlck1ldGEuZnVsbHlTZWdyZWdhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbG9nID0gY3R4LmxvZ2dlci5mb3IodGhpcy5yZXBsaWNhdGVUb1NlZ3JlZ2F0ZWRDb2xsZWN0aW9ucyk7XG4gICAgbG9nLmluZm8oXG4gICAgICBgUmVwbGljYXRpbmcgc2VxdWVuY2UgJHtzZXEuaWR9IHRvICR7YWRhcHRlck1ldGEuY29sbGVjdGlvbnMubGVuZ3RofSBzZWdyZWdhdGVkIGNvbGxlY3Rpb25zOiAke2FkYXB0ZXJNZXRhLmNvbGxlY3Rpb25zLmpvaW4oXCIsIFwiKX1gXG4gICAgKTtcblxuICAgIGF3YWl0IHRoaXMud3JpdGVTZXF1ZW5jZVRvQ29sbGVjdGlvbnMoY3R4LCBzZXEsIGFkYXB0ZXJNZXRhLmNvbGxlY3Rpb25zKTtcbiAgfVxufVxuIl19
@@ -1,180 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.FabricStatement = void 0;
4
- const for_couchdb_1 = require("@decaf-ts/for-couchdb");
5
- const decorator_validation_1 = require("@decaf-ts/decorator-validation");
6
- const for_couchdb_2 = require("@decaf-ts/for-couchdb");
7
- const core_1 = require("@decaf-ts/core");
8
- const db_decorators_1 = require("@decaf-ts/db-decorators");
9
- const decorators_1 = require("./../shared/decorators.cjs");
10
- /**
11
- * @description Statement wrapper for executing Mango queries within Fabric contracts
12
- * @summary Bridges CouchDB-style queries to Fabric via the FabricContractAdapter, handling identity and primary key projection when needed.
13
- * @template M - Model type this statement operates on
14
- * @template R - Result type returned by the statement
15
- * @param {FabricContractAdapter} adapter - The Fabric contract adapter used for raw execution
16
- * @param {FabricContractContext} ctx - The Fabric contract context carrying stub and identity
17
- * @return {void}
18
- * @class FabricStatement
19
- * @example
20
- * const stmt = new FabricStatement<MyModel, MyModel[]>(adapter, ctx);
21
- * const result = await stmt.raw<MyModel[]>({ selector: { type: 'MyModel' } });
22
- * @mermaid
23
- * sequenceDiagram
24
- * participant App
25
- * participant Statement
26
- * participant Adapter
27
- * participant Ledger
28
- * App->>Statement: raw({ selector })
29
- * Statement->>Adapter: adapter.raw(mango, true, ctx)
30
- * Adapter->>Ledger: Evaluate query
31
- * Adapter-->>Statement: rows
32
- * Statement-->>App: models
33
- */
34
- class FabricStatement extends for_couchdb_2.CouchDBStatement {
35
- constructor(adapter, overrides) {
36
- super(adapter);
37
- if (overrides) {
38
- this.overrides = overrides;
39
- }
40
- }
41
- async executionPrefix(method, ...args) {
42
- const newArgs = args.filter(Boolean);
43
- if (args.length !== newArgs.length)
44
- throw new db_decorators_1.InternalError(`Received an undefined in the paginator for ${method}: ${args}`);
45
- return super.executionPrefix(method, ...args);
46
- }
47
- build() {
48
- const log = this.log.for(this.build);
49
- this.manualAggregation = undefined;
50
- const aggregateInfo = this.buildAggregateInfo();
51
- if (aggregateInfo) {
52
- if (this.shouldUseManualAggregation()) {
53
- this.manualAggregation = aggregateInfo;
54
- }
55
- else {
56
- return this.createAggregateQuery(aggregateInfo);
57
- }
58
- }
59
- const selectors = {};
60
- selectors[for_couchdb_1.CouchDBKeys.TABLE] = {};
61
- selectors[for_couchdb_1.CouchDBKeys.TABLE] = decorator_validation_1.Model.tableName(this.fromSelector);
62
- const query = { selector: selectors };
63
- if (this.selectSelector)
64
- query.fields = this.selectSelector;
65
- if (this.whereCondition) {
66
- const condition = this.parseCondition(core_1.Condition.and(this.whereCondition, core_1.Condition.attribute(for_couchdb_1.CouchDBKeys.TABLE).eq(query.selector[for_couchdb_1.CouchDBKeys.TABLE]))).selector;
67
- const selectorKeys = Object.keys(condition);
68
- if (selectorKeys.length === 1 &&
69
- Object.values(for_couchdb_1.CouchDBGroupOperator).indexOf(selectorKeys[0]) !== -1)
70
- switch (selectorKeys[0]) {
71
- case for_couchdb_1.CouchDBGroupOperator.AND:
72
- condition[for_couchdb_1.CouchDBGroupOperator.AND] = [
73
- ...Object.values(condition[for_couchdb_1.CouchDBGroupOperator.AND]).reduce((accum, val) => {
74
- const keys = Object.keys(val);
75
- if (keys.length !== 1)
76
- throw new Error("Too many keys in query selector. should be one");
77
- const k = keys[0];
78
- if (k === for_couchdb_1.CouchDBGroupOperator.AND)
79
- accum.push(...val[k]);
80
- else
81
- accum.push(val);
82
- return accum;
83
- }, []),
84
- ];
85
- query.selector = condition;
86
- break;
87
- case for_couchdb_1.CouchDBGroupOperator.OR: {
88
- const s = {};
89
- s[for_couchdb_1.CouchDBGroupOperator.AND] = [
90
- condition,
91
- ...Object.entries(query.selector).map(([key, val]) => {
92
- const result = {};
93
- result[key] = val;
94
- return result;
95
- }),
96
- ];
97
- query.selector = s;
98
- break;
99
- }
100
- default:
101
- throw new Error("This should be impossible");
102
- }
103
- else {
104
- Object.entries(condition).forEach(([key, val]) => {
105
- if (query.selector[key])
106
- log.warn(`A ${key} query param is about to be overridden: ${query.selector[key]} by ${val}`);
107
- query.selector[key] = val;
108
- });
109
- }
110
- }
111
- if (this.orderBySelectors?.length) {
112
- query.sort = query.sort || [];
113
- query.selector = query.selector || {};
114
- for (const [selectorKey, direction] of this.orderBySelectors) {
115
- const selector = selectorKey;
116
- const rec = {};
117
- rec[selector] = direction;
118
- query.sort.push(rec);
119
- if (!query.selector[selector]) {
120
- query.selector[selector] = {};
121
- query.selector[selector][for_couchdb_1.CouchDBOperator.BIGGER] =
122
- null;
123
- }
124
- }
125
- }
126
- const hasManualAggregate = !!this.manualAggregation;
127
- if (this.limitSelector) {
128
- query.limit = this.limitSelector;
129
- }
130
- else if (!hasManualAggregate) {
131
- // log.warn(
132
- // `No limit selector defined. Using default couchdb limit of ${CouchDBQueryLimit}`
133
- // );
134
- // query.limit = CouchDBQueryLimit;
135
- // do nothing
136
- }
137
- if (this.offsetSelector)
138
- query.skip = this.offsetSelector;
139
- return query;
140
- }
141
- async execute(...args) {
142
- const { log, ctx, ctxArgs } = this.logCtx(args, this.execute);
143
- const msp = (0, decorators_1.extractMspId)(ctx.identity);
144
- const { privateCols, sharedCols } = decorator_validation_1.Model.collectionsFor(this.fromSelector);
145
- const collections = [
146
- ...new Set(await Promise.all([...privateCols, ...sharedCols].map((c) => typeof c === "string" ? c : c(this.fromSelector, msp, ctx)))),
147
- ];
148
- (0, decorators_1.applySegregationFlags)(new this.fromSelector(), collections, ctx);
149
- await (0, decorators_1.applyMirrorFlags)(this.fromSelector, msp, ctx);
150
- try {
151
- if (this.prepared)
152
- return this.executePrepared(...args);
153
- log.silly(`Building raw statement...`);
154
- const query = this.build();
155
- log.silly(`executing raw statement`);
156
- const results = (await this.raw(query, true, ...ctxArgs));
157
- if (this.hasAggregation()) {
158
- return results;
159
- }
160
- if (!this.selectSelector) {
161
- if (this.groupBySelectors?.length) {
162
- const grouped = this.revertGroupedResults(results, (r) => this.processRecord(r, ctx));
163
- return (await this.applyAfterHandlersToResult(grouped, ctx));
164
- }
165
- if (Array.isArray(results)) {
166
- const mapped = results.map((r) => this.processRecord(r, ctx));
167
- return (await this.applyAfterHandlersToResult(mapped, ctx));
168
- }
169
- const single = this.processRecord(results, ctx);
170
- return (await this.applyAfterHandlersToResult(single, ctx));
171
- }
172
- return results;
173
- }
174
- catch (e) {
175
- throw new core_1.QueryError(e);
176
- }
177
- }
178
- }
179
- exports.FabricStatement = FabricStatement;
180
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ29udHJhY3RTdGF0ZW1lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL0ZhYnJpY0NvbnRyYWN0U3RhdGVtZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHVEQVMrQjtBQUMvQix5RUFBdUQ7QUFFdkQsdURBQXlEO0FBQ3pELHlDQU93QjtBQUN4QiwyREFBd0Q7QUFFeEQsMkRBSThCO0FBRTlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVCRztBQUNILE1BQWEsZUFBb0MsU0FBUSw4QkFJeEQ7SUFDQyxZQUNFLE9BQXlELEVBQ3pELFNBQWlDO1FBRWpDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVrQixLQUFLLENBQUMsZUFBZSxDQUN0QyxNQUFXLEVBQ1gsR0FBRyxJQUErQztRQUVsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUN6QixPQUFPLENBQ3FDLENBQUM7UUFDL0MsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLE9BQU8sQ0FBQyxNQUFNO1lBQ2hDLE1BQU0sSUFBSSw2QkFBYSxDQUNyQiw4Q0FBOEMsTUFBTSxLQUFLLElBQUksRUFBRSxDQUNoRSxDQUFDO1FBQ0osT0FBTyxLQUFLLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFa0IsS0FBSztRQUN0QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQztRQUNuQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUNoRCxJ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REJHcm91cE9wZXJhdG9yLFxuICBDb3VjaERCS2V5cyxcbiAgQ291Y2hEQk9wZXJhdG9yLFxuICBDb3VjaERCUXVlcnlMaW1pdCxcbiAgTWFuZ29PcGVyYXRvcixcbiAgTWFuZ29RdWVyeSxcbiAgTWFuZ29TZWxlY3Rvcixcbn0gZnJvbSBcIkBkZWNhZi10cy9mb3ItY291Y2hkYlwiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBGYWJyaWNDb250cmFjdENvbnRleHQgfSBmcm9tIFwiLi9Db250cmFjdENvbnRleHRcIjtcbmltcG9ydCB7IENvdWNoREJTdGF0ZW1lbnQgfSBmcm9tIFwiQGRlY2FmLXRzL2Zvci1jb3VjaGRiXCI7XG5pbXBvcnQge1xuICBBZGFwdGVyRmxhZ3MsXG4gIENvbmRpdGlvbixcbiAgQ29udGV4dHVhbEFyZ3MsXG4gIE1heWJlQ29udGV4dHVhbEFyZyxcbiAgT3JkZXJEaXJlY3Rpb24sXG4gIFF1ZXJ5RXJyb3IsXG59IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7XG4gIGFwcGx5TWlycm9yRmxhZ3MsXG4gIGFwcGx5U2VncmVnYXRpb25GbGFncyxcbiAgZXh0cmFjdE1zcElkLFxufSBmcm9tIFwiLi4vc2hhcmVkL2RlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3RhdGVtZW50IHdyYXBwZXIgZm9yIGV4ZWN1dGluZyBNYW5nbyBxdWVyaWVzIHdpdGhpbiBGYWJyaWMgY29udHJhY3RzXG4gKiBAc3VtbWFyeSBCcmlkZ2VzIENvdWNoREItc3R5bGUgcXVlcmllcyB0byBGYWJyaWMgdmlhIHRoZSBGYWJyaWNDb250cmFjdEFkYXB0ZXIsIGhhbmRsaW5nIGlkZW50aXR5IGFuZCBwcmltYXJ5IGtleSBwcm9qZWN0aW9uIHdoZW4gbmVlZGVkLlxuICogQHRlbXBsYXRlIE0gLSBNb2RlbCB0eXBlIHRoaXMgc3RhdGVtZW50IG9wZXJhdGVzIG9uXG4gKiBAdGVtcGxhdGUgUiAtIFJlc3VsdCB0eXBlIHJldHVybmVkIGJ5IHRoZSBzdGF0ZW1lbnRcbiAqIEBwYXJhbSB7RmFicmljQ29udHJhY3RBZGFwdGVyfSBhZGFwdGVyIC0gVGhlIEZhYnJpYyBjb250cmFjdCBhZGFwdGVyIHVzZWQgZm9yIHJhdyBleGVjdXRpb25cbiAqIEBwYXJhbSB7RmFicmljQ29udHJhY3RDb250ZXh0fSBjdHggLSBUaGUgRmFicmljIGNvbnRyYWN0IGNvbnRleHQgY2Fycnlpbmcgc3R1YiBhbmQgaWRlbnRpdHlcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKiBAY2xhc3MgRmFicmljU3RhdGVtZW50XG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc3RtdCA9IG5ldyBGYWJyaWNTdGF0ZW1lbnQ8TXlNb2RlbCwgTXlNb2RlbFtdPihhZGFwdGVyLCBjdHgpO1xuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RtdC5yYXc8TXlNb2RlbFtdPih7IHNlbGVjdG9yOiB7IHR5cGU6ICdNeU1vZGVsJyB9IH0pO1xuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBBcHBcbiAqICAgcGFydGljaXBhbnQgU3RhdGVtZW50XG4gKiAgIHBhcnRpY2lwYW50IEFkYXB0ZXJcbiAqICAgcGFydGljaXBhbnQgTGVkZ2VyXG4gKiAgIEFwcC0+PlN0YXRlbWVudDogcmF3KHsgc2VsZWN0b3IgfSlcbiAqICAgU3RhdGVtZW50LT4+QWRhcHRlcjogYWRhcHRlci5yYXcobWFuZ28sIHRydWUsIGN0eClcbiAqICAgQWRhcHRlci0+PkxlZGdlcjogRXZhbHVhdGUgcXVlcnlcbiAqICAgQWRhcHRlci0tPj5TdGF0ZW1lbnQ6IHJvd3NcbiAqICAgU3RhdGVtZW50LS0+PkFwcDogbW9kZWxzXG4gKi9cbmV4cG9ydCBjbGFzcyBGYWJyaWNTdGF0ZW1lbnQ8TSBleHRlbmRzIE1vZGVsLCBSPiBleHRlbmRzIENvdWNoREJTdGF0ZW1lbnQ8XG4gIE0sXG4gIENvdWNoREJBZGFwdGVyPGFueSwgdm9pZCwgRmFicmljQ29udHJhY3RDb250ZXh0PixcbiAgUlxuPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGFkYXB0ZXI6IENvdWNoREJBZGFwdGVyPGFueSwgdm9pZCwgRmFicmljQ29udHJhY3RDb250ZXh0PixcbiAgICBvdmVycmlkZXM/OiBQYXJ0aWFsPEFkYXB0ZXJGbGFncz5cbiAgKSB7XG4gICAgc3VwZXIoYWRhcHRlcik7XG4gICAgaWYgKG92ZXJyaWRlcykge1xuICAgICAgdGhpcy5vdmVycmlkZXMgPSBvdmVycmlkZXM7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGV4ZWN1dGlvblByZWZpeChcbiAgICBtZXRob2Q6IGFueSxcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0PlxuICApIHtcbiAgICBjb25zdCBuZXdBcmdzID0gYXJncy5maWx0ZXIoXG4gICAgICBCb29sZWFuXG4gICAgKSBhcyBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0PjtcbiAgICBpZiAoYXJncy5sZW5ndGggIT09IG5ld0FyZ3MubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXG4gICAgICAgIGBSZWNlaXZlZCBhbiB1bmRlZmluZWQgaW4gdGhlIHBhZ2luYXRvciBmb3IgJHttZXRob2R9OiAke2FyZ3N9YFxuICAgICAgKTtcbiAgICByZXR1cm4gc3VwZXIuZXhlY3V0aW9uUHJlZml4KG1ldGhvZCwgLi4uYXJncyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYnVpbGQoKTogTWFuZ29RdWVyeSB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuYnVpbGQpO1xuICAgIHRoaXMubWFudWFsQWdncmVnYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWdncmVnYXRlSW5mbyA9IHRoaXMuYnVpbGRBZ2dyZWdhdGVJbmZvKCk7XG4gICAgaWYgKGFnZ3JlZ2F0ZUluZm8pIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZFVzZU1hbnVhbEFnZ3JlZ2F0aW9uKCkpIHtcbiAgICAgICAgdGhpcy5tYW51YWxBZ2dyZWdhdGlvbiA9IGFnZ3JlZ2F0ZUluZm87XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVBZ2dyZWdhdGVRdWVyeShhZ2dyZWdhdGVJbmZvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0b3JzOiBNYW5nb1NlbGVjdG9yID0ge307XG4gICAgc2VsZWN0b3JzW0NvdWNoREJLZXlzLlRBQkxFXSA9IHt9O1xuICAgIHNlbGVjdG9yc1tDb3VjaERCS2V5cy5UQUJMRV0gPSBNb2RlbC50YWJsZU5hbWUodGhpcy5mcm9tU2VsZWN0b3IpO1xuICAgIGNvbnN0IHF1ZXJ5OiBNYW5nb1F1ZXJ5ID0geyBzZWxlY3Rvcjogc2VsZWN0b3JzIH07XG4gICAgaWYgKHRoaXMuc2VsZWN0U2VsZWN0b3IpIHF1ZXJ5LmZpZWxkcyA9IHRoaXMuc2VsZWN0U2VsZWN0b3IgYXMgc3RyaW5nW107XG5cbiAgICBpZiAodGhpcy53aGVyZUNvbmRpdGlvbikge1xuICAgICAgY29uc3QgY29uZGl0aW9uOiBNYW5nb1NlbGVjdG9yID0gdGhpcy5wYXJzZUNvbmRpdGlvbihcbiAgICAgICAgQ29uZGl0aW9uLmFuZChcbiAgICAgICAgICB0aGlzLndoZXJlQ29uZGl0aW9uLFxuICAgICAgICAgIENvbmRpdGlvbi5hdHRyaWJ1dGU8TT4oQ291Y2hEQktleXMuVEFCTEUgYXMga2V5b2YgTSkuZXEoXG4gICAgICAgICAgICBxdWVyeS5zZWxlY3RvcltDb3VjaERCS2V5cy5UQUJMRV1cbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICkuc2VsZWN0b3I7XG4gICAgICBjb25zdCBzZWxlY3RvcktleXMgPSBPYmplY3Qua2V5cyhjb25kaXRpb24pIGFzIE1hbmdvT3BlcmF0b3JbXTtcbiAgICAgIGlmIChcbiAgICAgICAgc2VsZWN0b3JLZXlzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICBPYmplY3QudmFsdWVzKENvdWNoREJHcm91cE9wZXJhdG9yKS5pbmRleE9mKHNlbGVjdG9yS2V5c1swXSkgIT09IC0xXG4gICAgICApXG4gICAgICAgIHN3aXRjaCAoc2VsZWN0b3JLZXlzWzBdKSB7XG4gICAgICAgICAgY2FzZSBDb3VjaERCR3JvdXBPcGVyYXRvci5BTkQ6XG4gICAgICAgICAgICBjb25kaXRpb25bQ291Y2hEQkdyb3VwT3BlcmF0b3IuQU5EXSA9IFtcbiAgICAgICAgICAgICAgLi4uT2JqZWN0LnZhbHVlcyhcbiAgICAgICAgICAgICAgICBjb25kaXRpb25bQ291Y2hEQkdyb3VwT3BlcmF0b3IuQU5EXSBhcyBNYW5nb1NlbGVjdG9yXG4gICAgICAgICAgICAgICkucmVkdWNlKChhY2N1bTogTWFuZ29TZWxlY3RvcltdLCB2YWw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCAhPT0gMSlcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgXCJUb28gbWFueSBrZXlzIGluIHF1ZXJ5IHNlbGVjdG9yLiBzaG91bGQgYmUgb25lXCJcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgayA9IGtleXNbMF07XG4gICAgICAgICAgICAgICAgaWYgKGsgPT09IENvdWNoREJHcm91cE9wZXJhdG9yLkFORClcbiAgICAgICAgICAgICAgICAgIGFjY3VtLnB1c2goLi4uKHZhbFtrXSBhcyBhbnlbXSkpO1xuICAgICAgICAgICAgICAgIGVsc2UgYWNjdW0ucHVzaCh2YWwpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgICAgICAgICAgfSwgW10pLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHF1ZXJ5LnNlbGVjdG9yID0gY29uZGl0aW9uO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBDb3VjaERCR3JvdXBPcGVyYXRvci5PUjoge1xuICAgICAgICAgICAgY29uc3QgczogUmVjb3JkPGFueSwgYW55PiA9IHt9O1xuICAgICAgICAgICAgc1tDb3VjaERCR3JvdXBPcGVyYXRvci5BTkRdID0gW1xuICAgICAgICAgICAgICBjb25kaXRpb24sXG4gICAgICAgICAgICAgIC4uLk9iamVjdC5lbnRyaWVzKHF1ZXJ5LnNlbGVjdG9yKS5tYXAoKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxhbnksIGFueT4gPSB7fTtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBxdWVyeS5zZWxlY3RvciA9IHM7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgc2hvdWxkIGJlIGltcG9zc2libGVcIik7XG4gICAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBPYmplY3QuZW50cmllcyhjb25kaXRpb24pLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgICBpZiAocXVlcnkuc2VsZWN0b3Jba2V5XSlcbiAgICAgICAgICAgIGxvZy53YXJuKFxuICAgICAgICAgICAgICBgQSAke2tleX0gcXVlcnkgcGFyYW0gaXMgYWJvdXQgdG8gYmUgb3ZlcnJpZGRlbjogJHtxdWVyeS5zZWxlY3RvcltrZXldfSBieSAke3ZhbH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIHF1ZXJ5LnNlbGVjdG9yW2tleV0gPSB2YWw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLm9yZGVyQnlTZWxlY3RvcnM/Lmxlbmd0aCkge1xuICAgICAgcXVlcnkuc29ydCA9IHF1ZXJ5LnNvcnQgfHwgW107XG4gICAgICBxdWVyeS5zZWxlY3RvciA9IHF1ZXJ5LnNlbGVjdG9yIHx8ICh7fSBhcyBNYW5nb1NlbGVjdG9yKTtcbiAgICAgIGZvciAoY29uc3QgW3NlbGVjdG9yS2V5LCBkaXJlY3Rpb25dIG9mIHRoaXMub3JkZXJCeVNlbGVjdG9ycykge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHNlbGVjdG9yS2V5IGFzIHN0cmluZztcbiAgICAgICAgY29uc3QgcmVjOiBSZWNvcmQ8c3RyaW5nLCBPcmRlckRpcmVjdGlvbj4gPSB7fTtcbiAgICAgICAgcmVjW3NlbGVjdG9yXSA9IGRpcmVjdGlvbiBhcyBPcmRlckRpcmVjdGlvbjtcbiAgICAgICAgKHF1ZXJ5LnNvcnQgYXMgUmVjb3JkPHN0cmluZywgT3JkZXJEaXJlY3Rpb24+W10pLnB1c2gocmVjKTtcbiAgICAgICAgaWYgKCFxdWVyeS5zZWxlY3RvcltzZWxlY3Rvcl0pIHtcbiAgICAgICAgICBxdWVyeS5zZWxlY3RvcltzZWxlY3Rvcl0gPSB7fSBhcyBNYW5nb1NlbGVjdG9yO1xuICAgICAgICAgIChxdWVyeS5zZWxlY3RvcltzZWxlY3Rvcl0gYXMgTWFuZ29TZWxlY3RvcilbQ291Y2hEQk9wZXJhdG9yLkJJR0dFUl0gPVxuICAgICAgICAgICAgbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhc01hbnVhbEFnZ3JlZ2F0ZSA9ICEhdGhpcy5tYW51YWxBZ2dyZWdhdGlvbjtcbiAgICBpZiAodGhpcy5saW1pdFNlbGVjdG9yKSB7XG4gICAgICBxdWVyeS5saW1pdCA9IHRoaXMubGltaXRTZWxlY3RvcjtcbiAgICB9IGVsc2UgaWYgKCFoYXNNYW51YWxBZ2dyZWdhdGUpIHtcbiAgICAgIC8vIGxvZy53YXJuKFxuICAgICAgLy8gICBgTm8gbGltaXQgc2VsZWN0b3IgZGVmaW5lZC4gVXNpbmcgZGVmYXVsdCBjb3VjaGRiIGxpbWl0IG9mICR7Q291Y2hEQlF1ZXJ5TGltaXR9YFxuICAgICAgLy8gKTtcbiAgICAgIC8vIHF1ZXJ5LmxpbWl0ID0gQ291Y2hEQlF1ZXJ5TGltaXQ7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuXG4gICAgaWYgKHRoaXMub2Zmc2V0U2VsZWN0b3IpIHF1ZXJ5LnNraXAgPSB0aGlzLm9mZnNldFNlbGVjdG9yO1xuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZXhlY3V0ZShcbiAgICAuLi5hcmdzOiBNYXliZUNvbnRleHR1YWxBcmc8RmFicmljQ29udHJhY3RDb250ZXh0PlxuICApOiBQcm9taXNlPFI+IHtcbiAgICBjb25zdCB7IGxvZywgY3R4LCBjdHhBcmdzIH0gPSB0aGlzLmxvZ0N0eChhcmdzLCB0aGlzLmV4ZWN1dGUpO1xuXG4gICAgY29uc3QgbXNwID0gZXh0cmFjdE1zcElkKGN0eC5pZGVudGl0eSk7XG5cbiAgICBjb25zdCB7IHByaXZhdGVDb2xzLCBzaGFyZWRDb2xzIH0gPSBNb2RlbC5jb2xsZWN0aW9uc0Zvcih0aGlzLmZyb21TZWxlY3Rvcik7XG4gICAgY29uc3QgY29sbGVjdGlvbnMgPSBbXG4gICAgICAuLi5uZXcgU2V0KFxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICBbLi4ucHJpdmF0ZUNvbHMsIC4uLnNoYXJlZENvbHNdLm1hcCgoYykgPT5cbiAgICAgICAgICAgIHR5cGVvZiBjID09PSBcInN0cmluZ1wiID8gYyA6IGModGhpcy5mcm9tU2VsZWN0b3IsIG1zcCwgY3R4KVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKSxcbiAgICBdO1xuXG4gICAgYXBwbHlTZWdyZWdhdGlvbkZsYWdzKG5ldyB0aGlzLmZyb21TZWxlY3RvcigpLCBjb2xsZWN0aW9ucywgY3R4KTtcbiAgICBhd2FpdCBhcHBseU1pcnJvckZsYWdzKHRoaXMuZnJvbVNlbGVjdG9yLCBtc3AsIGN0eCk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMucHJlcGFyZWQpIHJldHVybiB0aGlzLmV4ZWN1dGVQcmVwYXJlZCguLi4oYXJncyBhcyBhbnkpKTtcbiAgICAgIGxvZy5zaWxseShgQnVpbGRpbmcgcmF3IHN0YXRlbWVudC4uLmApO1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmJ1aWxkKCk7XG4gICAgICBsb2cuc2lsbHkoYGV4ZWN1dGluZyByYXcgc3RhdGVtZW50YCk7XG4gICAgICBjb25zdCByZXN1bHRzID0gKGF3YWl0IHRoaXMucmF3PFI+KFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICAgLi4uKGN0eEFyZ3MgYXMgQ29udGV4dHVhbEFyZ3M8RmFicmljQ29udHJhY3RDb250ZXh0PilcbiAgICAgICkpIGFzIHVua25vd24gYXMgUjtcbiAgICAgIGlmICh0aGlzLmhhc0FnZ3JlZ2F0aW9uKCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMuc2VsZWN0U2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeVNlbGVjdG9ycz8ubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZCA9IHRoaXMucmV2ZXJ0R3JvdXBlZFJlc3VsdHMoXG4gICAgICAgICAgICByZXN1bHRzLFxuICAgICAgICAgICAgKHIpID0+IHRoaXMucHJvY2Vzc1JlY29yZChyLCBjdHgpXG4gICAgICAgICAgKSBhcyBSO1xuICAgICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBseUFmdGVySGFuZGxlcnNUb1Jlc3VsdChncm91cGVkLCBjdHgpKSBhcyBSO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdHMpKSB7XG4gICAgICAgICAgY29uc3QgbWFwcGVkID0gcmVzdWx0cy5tYXAoKHIpID0+IHRoaXMucHJvY2Vzc1JlY29yZChyLCBjdHgpKSBhcyB1bmtub3duIGFzIFI7XG4gICAgICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmFwcGx5QWZ0ZXJIYW5kbGVyc1RvUmVzdWx0KG1hcHBlZCwgY3R4KSkgYXMgUjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaW5nbGUgPSB0aGlzLnByb2Nlc3NSZWNvcmQocmVzdWx0cywgY3R4KSBhcyB1bmtub3duIGFzIFI7XG4gICAgICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBseUFmdGVySGFuZGxlcnNUb1Jlc3VsdChzaW5nbGUsIGN0eCkpIGFzIFI7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgUXVlcnlFcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==