@decaf-ts/for-fabric 0.5.7 → 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 -3797
  2. package/dist/for-fabric.cjs.map +1 -0
  3. package/dist/for-fabric.js +2 -3901
  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 +1 -1
  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 -595
  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,158 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rebuildForMatchingCollection = rebuildForMatchingCollection;
4
- exports.createAuditHandler = createAuditHandler;
5
- exports.updateAuditHandler = updateAuditHandler;
6
- exports.deleteAuditHandler = deleteAuditHandler;
7
- exports.audit = audit;
8
- const decorator_validation_1 = require("@decaf-ts/decorator-validation");
9
- const decoration_1 = require("@decaf-ts/decoration");
10
- const db_decorators_1 = require("@decaf-ts/db-decorators");
11
- const OtherAudit_1 = require("./OtherAudit.cjs");
12
- const core_1 = require("@decaf-ts/core");
13
- const decorators_1 = require("./decorators.cjs");
14
- async function rebuildForMatchingCollection(model, context, collections) {
15
- const mapToCollections = collections && (collections.privateCols || collections.sharedCols);
16
- let cols = undefined;
17
- if (mapToCollections) {
18
- const msp = decorator_validation_1.Model.ownerOf(model) || (await context.stub.getCreator()).mspid;
19
- cols = [
20
- ...new Set([...collections.privateCols, ...collections.sharedCols].map((col) => {
21
- return typeof col === "string"
22
- ? col
23
- : col(model, msp);
24
- })),
25
- ];
26
- const pk = decorator_validation_1.Model.pk(model);
27
- cols.forEach((col) => {
28
- let segData;
29
- try {
30
- segData = context.get("segregatedData");
31
- }
32
- catch {
33
- return; // segregatedData not present in this context (e.g. cascade child)
34
- }
35
- if (!segData || !segData[col] || !(model[pk] in segData[col]))
36
- return;
37
- Object.assign(model, segData[col][model[pk]]);
38
- });
39
- }
40
- return model;
41
- }
42
- async function createAuditHandler(context, data, key, model) {
43
- const repo = core_1.Repository.forModel(OtherAudit_1.OtherAudit);
44
- if (!context.identity || !context.identity.getID)
45
- throw new db_decorators_1.InternalError(`Lost context apparently for audit`);
46
- model = await (0, decorators_1.populateRelations)(model, context, this._overrides);
47
- let roles = [];
48
- try {
49
- roles = JSON.parse(context.identity.getAttributeValue("roles"));
50
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
51
- }
52
- catch (e) {
53
- roles = ["unknown"];
54
- }
55
- const toCreate = new OtherAudit_1.OtherAudit({
56
- recordId: decorator_validation_1.Model.pk(model, true),
57
- userGroup: roles.join(", "),
58
- userId: context.identity.getID(),
59
- model: decorator_validation_1.Model.tableName(data.class),
60
- transaction: context.stub.getTxID(),
61
- action: db_decorators_1.OperationKeys.CREATE,
62
- diffs: model.compare(new this.class()),
63
- });
64
- const audit = await repo.override(this._overrides).create(toCreate, context);
65
- context.logger.info(`Audit log for ${db_decorators_1.OperationKeys.CREATE} of ${decorator_validation_1.Model.tableName(this.class)} created: ${audit.id}: ${JSON.stringify(audit, undefined, 2)}`);
66
- }
67
- /**
68
- * Returns a shallow-cloned copy of the model where each relation array item
69
- * is normalised to its string ID. This ensures that `{ id: "x" }` and `"x"`
70
- * compare as equal so that unchanged relations produce no diff.
71
- */
72
- function normalizeRelationsForAudit(model) {
73
- const copy = Object.assign(Object.create(Object.getPrototypeOf(model)), model);
74
- const relProps = decorator_validation_1.Model.relations(model);
75
- if (!relProps || !relProps.length)
76
- return copy;
77
- for (const propKey of relProps) {
78
- const value = copy[propKey];
79
- if (Array.isArray(value)) {
80
- copy[propKey] = value.map((item) => {
81
- if (item == null)
82
- return item;
83
- if (typeof item === "string" || typeof item === "number")
84
- return String(item);
85
- if (item.id != null)
86
- return String(item.id);
87
- return item; // new object without id — keep as-is
88
- });
89
- }
90
- else if (value != null) {
91
- if (typeof value === "string" || typeof value === "number") {
92
- copy[propKey] = String(value);
93
- }
94
- else if (value.id != null) {
95
- copy[propKey] = String(value.id);
96
- }
97
- }
98
- }
99
- return copy;
100
- }
101
- async function updateAuditHandler(context, data, key, model, oldModel) {
102
- const repo = core_1.Repository.forModel(OtherAudit_1.OtherAudit);
103
- if (!context.identity || !context.identity.getID)
104
- throw new db_decorators_1.InternalError(`Lost context apparently for audit`);
105
- const normalizedModel = normalizeRelationsForAudit(model);
106
- const normalizedOldModel = normalizeRelationsForAudit(oldModel);
107
- let roles = [];
108
- try {
109
- roles = JSON.parse(context.identity.getAttributeValue("roles"));
110
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
111
- }
112
- catch (e) {
113
- roles = ["unknown"];
114
- }
115
- const toCreate = new OtherAudit_1.OtherAudit({
116
- recordId: decorator_validation_1.Model.pk(model, true),
117
- userGroup: roles.join(", "),
118
- userId: context.identity.getID(),
119
- model: decorator_validation_1.Model.tableName(data.class),
120
- transaction: context.stub.getTxID(),
121
- action: db_decorators_1.OperationKeys.UPDATE,
122
- diffs: normalizedModel.compare(normalizedOldModel),
123
- });
124
- const audit = await repo.override(this._overrides).create(toCreate, context);
125
- context.logger.info(`Audit log for ${db_decorators_1.OperationKeys.UPDATE} of ${decorator_validation_1.Model.tableName(this.class)} created: ${JSON.stringify(audit, undefined, 2)}`);
126
- }
127
- async function deleteAuditHandler(context, data, key, model) {
128
- if (!context.identity || !context.identity.getID)
129
- throw new db_decorators_1.InternalError(`Lost context apparently. no getId in identity`);
130
- model = await (0, decorators_1.populateRelations)(model, context, this._overrides);
131
- let roles = [];
132
- try {
133
- roles = JSON.parse(context.identity.getAttributeValue("roles"));
134
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
135
- }
136
- catch (e) {
137
- roles = ["unknown"];
138
- }
139
- const toCreate = new OtherAudit_1.OtherAudit({
140
- recordId: decorator_validation_1.Model.pk(model, true),
141
- userGroup: roles.join(", "),
142
- userId: context.identity.getID(),
143
- model: decorator_validation_1.Model.tableName(data.class),
144
- transaction: context.stub.getTxID(),
145
- action: db_decorators_1.OperationKeys.DELETE,
146
- diffs: new this.class().compare(model),
147
- });
148
- const repo = core_1.Repository.forModel(OtherAudit_1.OtherAudit);
149
- const audit = await repo.override(this._overrides).create(toCreate, context);
150
- context.logger.info(`Audit log for ${db_decorators_1.OperationKeys.DELETE} of ${decorator_validation_1.Model.tableName(this.class)} created: ${JSON.stringify(audit, undefined, 2)}`);
151
- }
152
- function audit(model) {
153
- const meta = {
154
- class: model,
155
- };
156
- return (0, decoration_1.apply)((0, db_decorators_1.afterCreate)(createAuditHandler, meta), (0, db_decorators_1.onUpdate)(updateAuditHandler, meta), (0, db_decorators_1.afterDelete)(deleteAuditHandler, meta), (0, decoration_1.metadata)("audit", true));
157
- }
158
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy1wcml2YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnRyYWN0L21vZGVscy9kZWNvcmF0b3JzLXByaXZhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSxvRUFzQ0M7QUFFRCxnREF1Q0M7QUFtQ0QsZ0RBd0NDO0FBRUQsZ0RBcUNDO0FBTUQsc0JBVUM7QUFoT0QseUVBQXVEO0FBQ3ZELHFEQUFvRTtBQUNwRSwyREFNaUM7QUFDakMsaURBQTBDO0FBQzFDLHlDQUE0QztBQUc1QyxpREFBaUQ7QUFFMUMsS0FBSyxVQUFVLDRCQUE0QixDQUNoRCxLQUFRLEVBQ1IsT0FBWSxFQUNaLFdBR0M7SUFFRCxNQUFNLGdCQUFnQixHQUNwQixXQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyRSxJQUFJLElBQUksR0FBeUIsU0FBUyxDQUFDO0lBQzNDLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztRQUNyQixNQUFNLEdBQUcsR0FBRyw0QkFBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUM1RSxJQUFJLEdBQUc7WUFDTCxHQUFHLElBQUksR0FBRyxDQUNSLENBQUMsR0FBRyxXQUFXLENBQUMsV0FBVyxFQUFFLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsRSxPQUFPLE9BQU8sR0FBRyxLQUFLLFFBQVE7b0JBQzVCLENBQUMsQ0FBQyxHQUFHO29CQUNMLENBQUMsQ0FBRSxHQUEwQixDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM5QyxDQUFDLENBQUMsQ0FDSDtTQUNGLENBQUM7UUFFRixNQUFNLEVBQUUsR0FBRyw0QkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDbkIsSUFBSSxPQUFZLENBQUM7WUFDakIsSUFBSSxDQUFDO2dCQUNILE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDMUMsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxPQUFPLENBQUMsa0VBQWtFO1lBQzVFLENBQUM7WUFDRCxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBRSxLQUFLLENBQUMsRUFBRSxDQUFTLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNwRSxPQUFPO1lBQ1QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRU0sS0FBSyxVQUFVLGtCQUFrQixDQUt0QyxPQUE4QixFQUM5QixJQUFtQixFQUNuQixHQUFZLEVBQ1osS0FBUTtJQUVSLE1BQU0sSUFBSSxHQUFHLGlCQUFVLENBQUMsUUFBUSxDQUFDLHVCQUFVLENBQUMsQ0FBQztJQUU3QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSztRQUM5QyxNQUFNLElBQUksNkJBQWEsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBRS9ELEtBQUssR0FBRyxNQUFNLElBQUEsOEJBQWlCLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFFakUsSUFBSSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQ3pCLElBQUksQ0FBQztRQUNILEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFXLENBQUMsQ0FBQztRQUMxRSw2REFBNkQ7SUFDL0QsQ0FBQztJQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7UUFDcEIsS0FBSyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLElBQUksdUJBQVUsQ0FBQztRQUM5QixRQUFRLEVBQUUsNEJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztRQUMvQixTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDM0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO1FBQ2hDLEtBQUssRUFBRSw0QkFBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2xDLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNuQyxNQUFNLEVBQUUsNkJBQWEsQ0FBQyxNQUFNO1FBQzVCLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0tBQ3ZDLENBQUMsQ0FBQztJQUVILE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDakIsaUJBQWlCLDZCQUFhLENBQUMsTUFBTSxPQUFPLDRCQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUN2SSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLDBCQUEwQixDQUFrQixLQUFRO0lBQzNELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ3hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUMzQyxLQUFLLENBQ0QsQ0FBQztJQUNQLE1BQU0sUUFBUSxHQUFHLDRCQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBYSxDQUFDO0lBQ3BELElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQy9DLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUksSUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3hCLElBQVksQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQy9DLElBQUksSUFBSSxJQUFJLElBQUk7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQzlCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7b0JBQ3RELE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QixJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSTtvQkFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzVDLE9BQU8sSUFBSSxDQUFDLENBQUMscUNBQXFDO1lBQ3BELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLElBQUksS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3pCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMxRCxJQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pDLENBQUM7aUJBQU0sSUFBSyxLQUFhLENBQUMsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNwQyxJQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsTUFBTSxDQUFFLEtBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFTSxLQUFLLFVBQVUsa0JBQWtCLENBS3RDLE9BQThCLEVBQzlCLElBQW1CLEVBQ25CLEdBQVksRUFDWixLQUFRLEVBQ1IsUUFBVztJQUVYLE1BQU0sSUFBSSxHQUFHLGlCQUFVLENBQUMsUUFBUSxDQUFDLHVCQUFVLENBQUMsQ0FBQztJQUU3QyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSztRQUM5QyxNQUFNLElBQUksNkJBQWEsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO0lBRS9ELE1BQU0sZUFBZSxHQUFHLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFELE1BQU0sa0JBQWtCLEdBQUcsMEJBQTBCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEUsSUFBSSxLQUFLLEdBQWEsRUFBRSxDQUFDO0lBQ3pCLElBQUksQ0FBQztRQUNILEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFXLENBQUMsQ0FBQztRQUMxRSw2REFBNkQ7SUFDL0QsQ0FBQztJQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7UUFDcEIsS0FBSyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFHLElBQUksdUJBQVUsQ0FBQztRQUM5QixRQUFRLEVBQUUsNEJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQztRQUMvQixTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDM0IsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO1FBQ2hDLEtBQUssRUFBRSw0QkFBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ2xDLFdBQVcsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNuQyxNQUFNLEVBQUUsNkJBQWEsQ0FBQyxNQUFNO1FBQzVCLEtBQUssRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO0tBQ25ELENBQUMsQ0FBQztJQUVILE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDakIsaUJBQWlCLDZCQUFhLENBQUMsTUFBTSxPQUFPLDRCQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FDMUgsQ0FBQztBQUNKLENBQUM7QUFFTSxLQUFLLFVBQVUsa0JBQWtCLENBS3RDLE9BQThCLEVBQzlCLElBQW1CLEVBQ25CLEdBQVksRUFDWixLQUFRO0lBRVIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7UUFDOUMsTUFBTSxJQUFJLDZCQUFhLENBQUMsK0NBQStDLENBQUMsQ0FBQztJQUUzRSxLQUFLLEdBQUcsTUFBTSxJQUFBLDhCQUFpQixFQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ2pFLElBQUksS0FBSyxHQUFhLEVBQUUsQ0FBQztJQUN6QixJQUFJLENBQUM7UUFDSCxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBVyxDQUFDLENBQUM7UUFDMUUsNkRBQTZEO0lBQy9ELENBQUM7SUFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO1FBQ3BCLEtBQUssR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLHVCQUFVLENBQUM7UUFDOUIsUUFBUSxFQUFFLDRCQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUM7UUFDL0IsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzNCLE1BQU0sRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtRQUNoQyxLQUFLLEVBQUUsNEJBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNsQyxXQUFXLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7UUFDbkMsTUFBTSxFQUFFLDZCQUFhLENBQUMsTUFBTTtRQUM1QixLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztLQUN2QyxDQUFDLENBQUM7SUFFSCxNQUFNLElBQUksR0FBRyxpQkFBVSxDQUFDLFFBQVEsQ0FBQyx1QkFBVSxDQUFDLENBQUM7SUFDN0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzdFLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNqQixpQkFBaUIsNkJBQWEsQ0FBQyxNQUFNLE9BQU8sNEJBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUMxSCxDQUFDO0FBQ0osQ0FBQztBQU1ELFNBQWdCLEtBQUssQ0FBQyxLQUFrQztJQUN0RCxNQUFNLElBQUksR0FBa0I7UUFDMUIsS0FBSyxFQUFFLEtBQUs7S0FDYixDQUFDO0lBQ0YsT0FBTyxJQUFBLGtCQUFLLEVBQ1YsSUFBQSwyQkFBVyxFQUFDLGtCQUF5QixFQUFFLElBQUksQ0FBQyxFQUM1QyxJQUFBLHdCQUFRLEVBQUMsa0JBQXlCLEVBQUUsSUFBSSxDQUFDLEVBQ3pDLElBQUEsMkJBQVcsRUFBQyxrQkFBeUIsRUFBRSxJQUFJLENBQUMsRUFDNUMsSUFBQSxxQkFBUSxFQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FDeEIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IG1ldGFkYXRhLCBhcHBseSwgQ29uc3RydWN0b3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7XG4gIGFmdGVyQ3JlYXRlLFxuICBhZnRlckRlbGV0ZSxcbiAgb25VcGRhdGUsXG4gIEludGVybmFsRXJyb3IsXG4gIE9wZXJhdGlvbktleXMsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgT3RoZXJBdWRpdCB9IGZyb20gXCIuL090aGVyQXVkaXRcIjtcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IEZhYnJpY0NvbnRyYWN0Q29udGV4dCB9IGZyb20gXCIuLi8uLi9jb250cmFjdHMvQ29udHJhY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBDb2xsZWN0aW9uUmVzb2x2ZXIgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2RlY29yYXRvcnNcIjtcbmltcG9ydCB7IHBvcHVsYXRlUmVsYXRpb25zIH0gZnJvbSBcIi4vZGVjb3JhdG9yc1wiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVidWlsZEZvck1hdGNoaW5nQ29sbGVjdGlvbjxNIGV4dGVuZHMgTW9kZWw+KFxuICBtb2RlbDogTSxcbiAgY29udGV4dDogYW55LFxuICBjb2xsZWN0aW9uczoge1xuICAgIHByaXZhdGVDb2xzOiAoc3RyaW5nIHwgQ29sbGVjdGlvblJlc29sdmVyKVtdO1xuICAgIHNoYXJlZENvbHM6IChzdHJpbmcgfCBDb2xsZWN0aW9uUmVzb2x2ZXIpW107XG4gIH1cbikge1xuICBjb25zdCBtYXBUb0NvbGxlY3Rpb25zID1cbiAgICBjb2xsZWN0aW9ucyAmJiAoY29sbGVjdGlvbnMucHJpdmF0ZUNvbHMgfHwgY29sbGVjdGlvbnMuc2hhcmVkQ29scyk7XG4gIGxldCBjb2xzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgaWYgKG1hcFRvQ29sbGVjdGlvbnMpIHtcbiAgICBjb25zdCBtc3AgPSBNb2RlbC5vd25lck9mKG1vZGVsKSB8fCAoYXdhaXQgY29udGV4dC5zdHViLmdldENyZWF0b3IoKSkubXNwaWQ7XG4gICAgY29scyA9IFtcbiAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgIFsuLi5jb2xsZWN0aW9ucy5wcml2YXRlQ29scywgLi4uY29sbGVjdGlvbnMuc2hhcmVkQ29sc10ubWFwKChjb2wpID0+IHtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIGNvbCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgPyBjb2xcbiAgICAgICAgICAgIDogKGNvbCBhcyBDb2xsZWN0aW9uUmVzb2x2ZXIpKG1vZGVsLCBtc3ApO1xuICAgICAgICB9KVxuICAgICAgKSxcbiAgICBdO1xuXG4gICAgY29uc3QgcGsgPSBNb2RlbC5wayhtb2RlbCk7XG5cbiAgICBjb2xzLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgbGV0IHNlZ0RhdGE6IGFueTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNlZ0RhdGEgPSBjb250ZXh0LmdldChcInNlZ3JlZ2F0ZWREYXRhXCIpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjsgLy8gc2VncmVnYXRlZERhdGEgbm90IHByZXNlbnQgaW4gdGhpcyBjb250ZXh0IChlLmcuIGNhc2NhZGUgY2hpbGQpXG4gICAgICB9XG4gICAgICBpZiAoIXNlZ0RhdGEgfHwgIXNlZ0RhdGFbY29sXSB8fCAhKChtb2RlbFtwa10gYXMgYW55KSBpbiBzZWdEYXRhW2NvbF0pKVxuICAgICAgICByZXR1cm47XG4gICAgICBPYmplY3QuYXNzaWduKG1vZGVsLCBzZWdEYXRhW2NvbF1bbW9kZWxbcGtdXSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG1vZGVsO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXVkaXRIYW5kbGVyPFxuICBNIGV4dGVuZHMgTW9kZWwsXG4gIFIgZXh0ZW5kcyBSZXBvc2l0b3J5PE0sIGFueT4sXG4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBGYWJyaWNDb250cmFjdENvbnRleHQsXG4gIGRhdGE6IEF1ZGl0TWV0YWRhdGEsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXBvID0gUmVwb3NpdG9yeS5mb3JNb2RlbChPdGhlckF1ZGl0KTtcblxuICBpZiAoIWNvbnRleHQuaWRlbnRpdHkgfHwgIWNvbnRleHQuaWRlbnRpdHkuZ2V0SUQpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYExvc3QgY29udGV4dCBhcHBhcmVudGx5IGZvciBhdWRpdGApO1xuXG4gIG1vZGVsID0gYXdhaXQgcG9wdWxhdGVSZWxhdGlvbnMobW9kZWwsIGNvbnRleHQsIHRoaXMuX292ZXJyaWRlcyk7XG5cbiAgbGV0IHJvbGVzOiBzdHJpbmdbXSA9IFtdO1xuICB0cnkge1xuICAgIHJvbGVzID0gSlNPTi5wYXJzZShjb250ZXh0LmlkZW50aXR5LmdldEF0dHJpYnV0ZVZhbHVlKFwicm9sZXNcIikgYXMgc3RyaW5nKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICByb2xlcyA9IFtcInVua25vd25cIl07XG4gIH1cblxuICBjb25zdCB0b0NyZWF0ZSA9IG5ldyBPdGhlckF1ZGl0KHtcbiAgICByZWNvcmRJZDogTW9kZWwucGsobW9kZWwsIHRydWUpLFxuICAgIHVzZXJHcm91cDogcm9sZXMuam9pbihcIiwgXCIpLFxuICAgIHVzZXJJZDogY29udGV4dC5pZGVudGl0eS5nZXRJRCgpLFxuICAgIG1vZGVsOiBNb2RlbC50YWJsZU5hbWUoZGF0YS5jbGFzcyksXG4gICAgdHJhbnNhY3Rpb246IGNvbnRleHQuc3R1Yi5nZXRUeElEKCksXG4gICAgYWN0aW9uOiBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICBkaWZmczogbW9kZWwuY29tcGFyZShuZXcgdGhpcy5jbGFzcygpKSxcbiAgfSk7XG5cbiAgY29uc3QgYXVkaXQgPSBhd2FpdCByZXBvLm92ZXJyaWRlKHRoaXMuX292ZXJyaWRlcykuY3JlYXRlKHRvQ3JlYXRlLCBjb250ZXh0KTtcbiAgY29udGV4dC5sb2dnZXIuaW5mbyhcbiAgICBgQXVkaXQgbG9nIGZvciAke09wZXJhdGlvbktleXMuQ1JFQVRFfSBvZiAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX0gY3JlYXRlZDogJHthdWRpdC5pZH06ICR7SlNPTi5zdHJpbmdpZnkoYXVkaXQsIHVuZGVmaW5lZCwgMil9YFxuICApO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBzaGFsbG93LWNsb25lZCBjb3B5IG9mIHRoZSBtb2RlbCB3aGVyZSBlYWNoIHJlbGF0aW9uIGFycmF5IGl0ZW1cbiAqIGlzIG5vcm1hbGlzZWQgdG8gaXRzIHN0cmluZyBJRC4gVGhpcyBlbnN1cmVzIHRoYXQgYHsgaWQ6IFwieFwiIH1gIGFuZCBgXCJ4XCJgXG4gKiBjb21wYXJlIGFzIGVxdWFsIHNvIHRoYXQgdW5jaGFuZ2VkIHJlbGF0aW9ucyBwcm9kdWNlIG5vIGRpZmYuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVJlbGF0aW9uc0ZvckF1ZGl0PE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0pOiBNIHtcbiAgY29uc3QgY29weSA9IE9iamVjdC5hc3NpZ24oXG4gICAgT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YobW9kZWwpKSxcbiAgICBtb2RlbFxuICApIGFzIE07XG4gIGNvbnN0IHJlbFByb3BzID0gTW9kZWwucmVsYXRpb25zKG1vZGVsKSBhcyBzdHJpbmdbXTtcbiAgaWYgKCFyZWxQcm9wcyB8fCAhcmVsUHJvcHMubGVuZ3RoKSByZXR1cm4gY29weTtcbiAgZm9yIChjb25zdCBwcm9wS2V5IG9mIHJlbFByb3BzKSB7XG4gICAgY29uc3QgdmFsdWUgPSAoY29weSBhcyBhbnkpW3Byb3BLZXldO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgKGNvcHkgYXMgYW55KVtwcm9wS2V5XSA9IHZhbHVlLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGlmIChpdGVtID09IG51bGwpIHJldHVybiBpdGVtO1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIGl0ZW0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgcmV0dXJuIFN0cmluZyhpdGVtKTtcbiAgICAgICAgaWYgKGl0ZW0uaWQgIT0gbnVsbCkgcmV0dXJuIFN0cmluZyhpdGVtLmlkKTtcbiAgICAgICAgcmV0dXJuIGl0ZW07IC8vIG5ldyBvYmplY3Qgd2l0aG91dCBpZCDigJQga2VlcCBhcy1pc1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAoY29weSBhcyBhbnkpW3Byb3BLZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoKHZhbHVlIGFzIGFueSkuaWQgIT0gbnVsbCkge1xuICAgICAgICAoY29weSBhcyBhbnkpW3Byb3BLZXldID0gU3RyaW5nKCh2YWx1ZSBhcyBhbnkpLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvcHk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVBdWRpdEhhbmRsZXI8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIFJlcG9zaXRvcnk8TSwgYW55Pixcbj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgZGF0YTogQXVkaXRNZXRhZGF0YSxcbiAga2V5OiBrZXlvZiBNLFxuICBtb2RlbDogTSxcbiAgb2xkTW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZXBvID0gUmVwb3NpdG9yeS5mb3JNb2RlbChPdGhlckF1ZGl0KTtcblxuICBpZiAoIWNvbnRleHQuaWRlbnRpdHkgfHwgIWNvbnRleHQuaWRlbnRpdHkuZ2V0SUQpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYExvc3QgY29udGV4dCBhcHBhcmVudGx5IGZvciBhdWRpdGApO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRNb2RlbCA9IG5vcm1hbGl6ZVJlbGF0aW9uc0ZvckF1ZGl0KG1vZGVsKTtcbiAgY29uc3Qgbm9ybWFsaXplZE9sZE1vZGVsID0gbm9ybWFsaXplUmVsYXRpb25zRm9yQXVkaXQob2xkTW9kZWwpO1xuICBsZXQgcm9sZXM6IHN0cmluZ1tdID0gW107XG4gIHRyeSB7XG4gICAgcm9sZXMgPSBKU09OLnBhcnNlKGNvbnRleHQuaWRlbnRpdHkuZ2V0QXR0cmlidXRlVmFsdWUoXCJyb2xlc1wiKSBhcyBzdHJpbmcpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIHJvbGVzID0gW1widW5rbm93blwiXTtcbiAgfVxuXG4gIGNvbnN0IHRvQ3JlYXRlID0gbmV3IE90aGVyQXVkaXQoe1xuICAgIHJlY29yZElkOiBNb2RlbC5wayhtb2RlbCwgdHJ1ZSksXG4gICAgdXNlckdyb3VwOiByb2xlcy5qb2luKFwiLCBcIiksXG4gICAgdXNlcklkOiBjb250ZXh0LmlkZW50aXR5LmdldElEKCksXG4gICAgbW9kZWw6IE1vZGVsLnRhYmxlTmFtZShkYXRhLmNsYXNzKSxcbiAgICB0cmFuc2FjdGlvbjogY29udGV4dC5zdHViLmdldFR4SUQoKSxcbiAgICBhY3Rpb246IE9wZXJhdGlvbktleXMuVVBEQVRFLFxuICAgIGRpZmZzOiBub3JtYWxpemVkTW9kZWwuY29tcGFyZShub3JtYWxpemVkT2xkTW9kZWwpLFxuICB9KTtcblxuICBjb25zdCBhdWRpdCA9IGF3YWl0IHJlcG8ub3ZlcnJpZGUodGhpcy5fb3ZlcnJpZGVzKS5jcmVhdGUodG9DcmVhdGUsIGNvbnRleHQpO1xuICBjb250ZXh0LmxvZ2dlci5pbmZvKFxuICAgIGBBdWRpdCBsb2cgZm9yICR7T3BlcmF0aW9uS2V5cy5VUERBVEV9IG9mICR7TW9kZWwudGFibGVOYW1lKHRoaXMuY2xhc3MpfSBjcmVhdGVkOiAke0pTT04uc3RyaW5naWZ5KGF1ZGl0LCB1bmRlZmluZWQsIDIpfWBcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUF1ZGl0SGFuZGxlcjxcbiAgTSBleHRlbmRzIE1vZGVsLFxuICBSIGV4dGVuZHMgUmVwb3NpdG9yeTxNLCBhbnk+LFxuPihcbiAgdGhpczogUixcbiAgY29udGV4dDogRmFicmljQ29udHJhY3RDb250ZXh0LFxuICBkYXRhOiBBdWRpdE1ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFjb250ZXh0LmlkZW50aXR5IHx8ICFjb250ZXh0LmlkZW50aXR5LmdldElEKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBMb3N0IGNvbnRleHQgYXBwYXJlbnRseS4gbm8gZ2V0SWQgaW4gaWRlbnRpdHlgKTtcblxuICBtb2RlbCA9IGF3YWl0IHBvcHVsYXRlUmVsYXRpb25zKG1vZGVsLCBjb250ZXh0LCB0aGlzLl9vdmVycmlkZXMpO1xuICBsZXQgcm9sZXM6IHN0cmluZ1tdID0gW107XG4gIHRyeSB7XG4gICAgcm9sZXMgPSBKU09OLnBhcnNlKGNvbnRleHQuaWRlbnRpdHkuZ2V0QXR0cmlidXRlVmFsdWUoXCJyb2xlc1wiKSBhcyBzdHJpbmcpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgIHJvbGVzID0gW1widW5rbm93blwiXTtcbiAgfVxuXG4gIGNvbnN0IHRvQ3JlYXRlID0gbmV3IE90aGVyQXVkaXQoe1xuICAgIHJlY29yZElkOiBNb2RlbC5wayhtb2RlbCwgdHJ1ZSksXG4gICAgdXNlckdyb3VwOiByb2xlcy5qb2luKFwiLCBcIiksXG4gICAgdXNlcklkOiBjb250ZXh0LmlkZW50aXR5LmdldElEKCksXG4gICAgbW9kZWw6IE1vZGVsLnRhYmxlTmFtZShkYXRhLmNsYXNzKSxcbiAgICB0cmFuc2FjdGlvbjogY29udGV4dC5zdHViLmdldFR4SUQoKSxcbiAgICBhY3Rpb246IE9wZXJhdGlvbktleXMuREVMRVRFLFxuICAgIGRpZmZzOiBuZXcgdGhpcy5jbGFzcygpLmNvbXBhcmUobW9kZWwpLFxuICB9KTtcblxuICBjb25zdCByZXBvID0gUmVwb3NpdG9yeS5mb3JNb2RlbChPdGhlckF1ZGl0KTtcbiAgY29uc3QgYXVkaXQgPSBhd2FpdCByZXBvLm92ZXJyaWRlKHRoaXMuX292ZXJyaWRlcykuY3JlYXRlKHRvQ3JlYXRlLCBjb250ZXh0KTtcbiAgY29udGV4dC5sb2dnZXIuaW5mbyhcbiAgICBgQXVkaXQgbG9nIGZvciAke09wZXJhdGlvbktleXMuREVMRVRFfSBvZiAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX0gY3JlYXRlZDogJHtKU09OLnN0cmluZ2lmeShhdWRpdCwgdW5kZWZpbmVkLCAyKX1gXG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIEF1ZGl0TWV0YWRhdGEgPSB7XG4gIGNsYXNzOiBDb25zdHJ1Y3RvcjxNb2RlbD47XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYXVkaXQobW9kZWw6IENvbnN0cnVjdG9yPE1vZGVsPGJvb2xlYW4+Pikge1xuICBjb25zdCBtZXRhOiBBdWRpdE1ldGFkYXRhID0ge1xuICAgIGNsYXNzOiBtb2RlbCxcbiAgfTtcbiAgcmV0dXJuIGFwcGx5KFxuICAgIGFmdGVyQ3JlYXRlKGNyZWF0ZUF1ZGl0SGFuZGxlciBhcyBhbnksIG1ldGEpLFxuICAgIG9uVXBkYXRlKHVwZGF0ZUF1ZGl0SGFuZGxlciBhcyBhbnksIG1ldGEpLFxuICAgIGFmdGVyRGVsZXRlKGRlbGV0ZUF1ZGl0SGFuZGxlciBhcyBhbnksIG1ldGEpLFxuICAgIG1ldGFkYXRhKFwiYXVkaXRcIiwgdHJ1ZSlcbiAgKTtcbn1cbiJdfQ==
@@ -1,182 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.rebuildForMatchingCollection = rebuildForMatchingCollection;
4
- exports.populateRelations = populateRelations;
5
- exports.createAuditHandler = createAuditHandler;
6
- exports.updateAuditHandler = updateAuditHandler;
7
- exports.deleteAuditHandler = deleteAuditHandler;
8
- exports.audit = audit;
9
- exports.createAssignGtinOwnerHandler = createAssignGtinOwnerHandler;
10
- exports.deleteAssignGtinOwnerHandler = deleteAssignGtinOwnerHandler;
11
- exports.assignProductOwner = assignProductOwner;
12
- const decorator_validation_1 = require("@decaf-ts/decorator-validation");
13
- const decoration_1 = require("@decaf-ts/decoration");
14
- const db_decorators_1 = require("@decaf-ts/db-decorators");
15
- const Audit_1 = require("./Audit.cjs");
16
- const core_1 = require("@decaf-ts/core");
17
- const GtinOwner_1 = require("./GtinOwner.cjs");
18
- async function rebuildForMatchingCollection(model, context, collections) {
19
- const mapToCollections = collections && (collections.privateCols || collections.sharedCols);
20
- let cols = undefined;
21
- if (mapToCollections) {
22
- const msp = decorator_validation_1.Model.ownerOf(model) || (await context.stub.getCreator()).mspid;
23
- cols = [
24
- ...new Set([...collections.privateCols, ...collections.sharedCols].map((col) => {
25
- return typeof col === "string"
26
- ? col
27
- : col(model, msp);
28
- })),
29
- ];
30
- const pk = decorator_validation_1.Model.pk(model);
31
- cols.forEach((col) => {
32
- let segData;
33
- try {
34
- segData = context.get("segregatedData");
35
- }
36
- catch {
37
- return; // segregatedData not present in this context (e.g. cascade child)
38
- }
39
- if (!segData || !segData[col] || !(model[pk] in segData[col]))
40
- return;
41
- Object.assign(model, segData[col][model[pk]]);
42
- });
43
- }
44
- return model;
45
- }
46
- /**
47
- * Returns a shallow-cloned copy of the model with relation properties resolved
48
- * to their full instances. The original model is NOT mutated.
49
- */
50
- async function populateRelations(model, context, overrides) {
51
- // Create a shallow copy preserving the prototype so compare() etc. still work
52
- const copy = Object.assign(Object.create(Object.getPrototypeOf(model)), model);
53
- const relProps = decorator_validation_1.Model.relations(model);
54
- if (!relProps || !relProps.length)
55
- return copy;
56
- for (const propKey of relProps) {
57
- const meta = decorator_validation_1.Model.relations(model, propKey);
58
- const clazzOrFn = meta.class;
59
- const clazz = typeof clazzOrFn === "function" && clazzOrFn.name
60
- ? clazzOrFn
61
- : clazzOrFn();
62
- const value = copy[propKey];
63
- if (value === null || value === undefined)
64
- continue;
65
- const repo = core_1.Repository.forModel(clazz).override(overrides || {});
66
- if (Array.isArray(value)) {
67
- const resolved = [];
68
- for (const item of value) {
69
- if (typeof item === "string" || typeof item === "number") {
70
- try {
71
- resolved.push(await repo.read(String(item), context));
72
- }
73
- catch {
74
- resolved.push(item);
75
- }
76
- }
77
- else {
78
- resolved.push(item);
79
- }
80
- }
81
- copy[propKey] = resolved;
82
- }
83
- else if (typeof value === "string" || typeof value === "number") {
84
- try {
85
- copy[propKey] = await repo.read(String(value), context);
86
- }
87
- catch {
88
- // keep original value if read fails
89
- }
90
- }
91
- }
92
- return copy;
93
- }
94
- async function createAuditHandler(context, data, key, model) {
95
- const repo = core_1.Repository.forModel(Audit_1.Audit);
96
- if (!context.identity || !context.identity.getID)
97
- throw new db_decorators_1.InternalError(`Lost context apparently for audit`);
98
- model = await populateRelations(model, context, this._overrides);
99
- const toCreate = new Audit_1.Audit({
100
- userGroup: context.identity.getID(),
101
- userId: context.identity.getID(),
102
- model: decorator_validation_1.Model.tableName(data.class),
103
- transaction: context.stub.getTxID(),
104
- action: db_decorators_1.OperationKeys.CREATE,
105
- diffs: new this.class().compare(model),
106
- });
107
- const audit = await repo.override(this._overrides).create(toCreate, context);
108
- context.logger.info(`Audit log for ${db_decorators_1.OperationKeys.CREATE} of ${decorator_validation_1.Model.tableName(this.class)} created: ${audit.id}: ${JSON.stringify(audit, undefined, 2)}`);
109
- }
110
- async function updateAuditHandler(context, data, key, model, oldModel) {
111
- const repo = core_1.Repository.forModel(Audit_1.Audit);
112
- const collections = decorator_validation_1.Model.collectionsFor(Audit_1.Audit);
113
- //
114
- // model = await rebuildForMatchingCollection(model, context, collections);
115
- if (!context.identity || !context.identity.getID)
116
- throw new db_decorators_1.InternalError(`Lost context apparently for audit`);
117
- const populatedModel = await populateRelations(model, context, this._overrides);
118
- const populatedOldModel = await populateRelations(oldModel, context, this._overrides);
119
- const toCreate = new Audit_1.Audit({
120
- userGroup: context.identity.getID(),
121
- userId: context.identity.getID(),
122
- model: decorator_validation_1.Model.tableName(data.class),
123
- transaction: context.stub.getTxID(),
124
- action: db_decorators_1.OperationKeys.UPDATE,
125
- diffs: populatedModel.compare(populatedOldModel),
126
- });
127
- const audit = await repo.override(this._overrides).create(toCreate, context);
128
- context.logger.info(`Audit log for ${db_decorators_1.OperationKeys.UPDATE} of ${decorator_validation_1.Model.tableName(this.class)} created: ${JSON.stringify(audit, undefined, 2)}`);
129
- }
130
- async function deleteAuditHandler(context, data, key, model) {
131
- if (!context.identity || !context.identity.getID)
132
- throw new db_decorators_1.InternalError(`Lost context apprently. no getId in identity`);
133
- model = await populateRelations(model, context, this._overrides);
134
- const toCreate = new Audit_1.Audit({
135
- userGroup: context.identity.getID(),
136
- userId: context.identity.getID(),
137
- model: decorator_validation_1.Model.tableName(data.class),
138
- transaction: context.stub.getTxID(),
139
- action: db_decorators_1.OperationKeys.DELETE,
140
- diffs: model.compare(new this.class()),
141
- });
142
- const repo = core_1.Repository.forModel(Audit_1.Audit);
143
- const audit = await repo.override(this._overrides).create(toCreate, context);
144
- context.logger.info(`Audit log for ${db_decorators_1.OperationKeys.DELETE} of ${decorator_validation_1.Model.tableName(this.class)} created: ${JSON.stringify(audit, undefined, 2)}`);
145
- }
146
- function audit(model) {
147
- const meta = {
148
- class: model,
149
- };
150
- return (0, decoration_1.apply)((0, db_decorators_1.afterCreate)(createAuditHandler, meta), (0, db_decorators_1.afterUpdate)(updateAuditHandler, meta), (0, db_decorators_1.afterDelete)(deleteAuditHandler, meta), (0, decoration_1.metadata)("audit", true));
151
- }
152
- async function createAssignGtinOwnerHandler(context, data, key, model) {
153
- if (!model.productCode)
154
- throw new core_1.UnsupportedError(`Gtin owner can only be assigned to products`);
155
- const repo = core_1.Repository.forModel(GtinOwner_1.GtinOwner);
156
- const toCreate = new GtinOwner_1.GtinOwner({
157
- productCode: model.productCode,
158
- });
159
- const owner = await repo.create(toCreate, publicContext(context));
160
- context.logger.info(`GTIN owner assigned for product ${model.productCode}: ${owner.ownedBy}`);
161
- }
162
- async function deleteAssignGtinOwnerHandler(context, data, key, model) {
163
- if (!model.productCode)
164
- throw new core_1.UnsupportedError(`Gtin owner can only be assigned to products`);
165
- const repo = core_1.Repository.forModel(GtinOwner_1.GtinOwner);
166
- const owner = await repo.delete(model.productCode, publicContext(context));
167
- context.logger.info(`GTIN owner assigned for product ${model.productCode}: ${owner.ownedBy}`);
168
- }
169
- function assignProductOwner() {
170
- return (0, decoration_1.apply)((0, db_decorators_1.onCreate)(createAssignGtinOwnerHandler, {}), (0, db_decorators_1.afterDelete)(deleteAssignGtinOwnerHandler, {}));
171
- }
172
- function publicContext(ctx) {
173
- return new ctx.constructor(ctx).accumulate({
174
- fullySegregated: false,
175
- segregated: undefined,
176
- segregatedData: undefined,
177
- segregateRead: undefined,
178
- segregateWrite: undefined,
179
- segregateReadStack: undefined,
180
- });
181
- }
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cmFjdC9tb2RlbHMvZGVjb3JhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFCQSxvRUFzQ0M7QUFNRCw4Q0FnREM7QUFFRCxnREE4QkM7QUFFRCxnREE0Q0M7QUFFRCxnREE2QkM7QUFNRCxzQkFVQztBQUVELG9FQXFCQztBQUVELG9FQWtCQztBQUVELGdEQUtDO0FBaFNELHlFQUF1RDtBQUN2RCxxREFBb0U7QUFDcEUsMkRBT2lDO0FBQ2pDLHVDQUFnQztBQUNoQyx5Q0FLd0I7QUFHeEIsK0NBQXdDO0FBRWpDLEtBQUssVUFBVSw0QkFBNEIsQ0FDaEQsS0FBUSxFQUNSLE9BQVksRUFDWixXQUdDO0lBRUQsTUFBTSxnQkFBZ0IsR0FDcEIsV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckUsSUFBSSxJQUFJLEdBQXlCLFNBQVMsQ0FBQztJQUMzQyxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDckIsTUFBTSxHQUFHLEdBQUcsNEJBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDNUUsSUFBSSxHQUFHO1lBQ0wsR0FBRyxJQUFJLEdBQUcsQ0FDUixDQUFDLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxHQUFHLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDbEUsT0FBTyxPQUFPLEdBQUcsS0FBSyxRQUFRO29CQUM1QixDQUFDLENBQUMsR0FBRztvQkFDTCxDQUFDLENBQUUsR0FBMEIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUMsQ0FBQyxDQUFDLENBQ0g7U0FDRixDQUFD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QUM7QUFDSixDQUFDO0FBRUQsU0FBZ0Isa0JBQWtCO0lBQ2hDLE9BQU8sSUFBQSxrQkFBSyxFQUNWLElBQUEsd0JBQVEsRUFBQyw0QkFBbUMsRUFBRSxFQUFFLENBQUMsRUFDakQsSUFBQSwyQkFBVyxFQUFDLDRCQUFtQyxFQUFFLEVBQUUsQ0FBQyxDQUNyRCxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEdBQTBCO0lBQy9DLE9BQU8sSUFBSyxHQUFHLENBQUMsV0FBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDbEQsZUFBZSxFQUFFLEtBQUs7UUFDdEIsVUFBVSxFQUFFLFNBQVM7UUFDckIsY0FBYyxFQUFFLFNBQVM7UUFDekIsYUFBYSxFQUFFLFNBQVM7UUFDeEIsY0FBYyxFQUFFLFNBQVM7UUFDekIsa0JBQWtCLEVBQUUsU0FBUztLQUM5QixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBtZXRhZGF0YSwgYXBwbHksIENvbnN0cnVjdG9yIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0aW9uXCI7XG5pbXBvcnQge1xuICBhZnRlckNyZWF0ZSxcbiAgYWZ0ZXJEZWxldGUsXG4gIGFmdGVyVXBkYXRlLFxuICBJbnRlcm5hbEVycm9yLFxuICBvbkNyZWF0ZSxcbiAgT3BlcmF0aW9uS2V5cyxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBBdWRpdCB9IGZyb20gXCIuL0F1ZGl0XCI7XG5pbXBvcnQge1xuICBSZXBvLFxuICBSZXBvc2l0b3J5LFxuICBVbnN1cHBvcnRlZEVycm9yLFxuICBSZWxhdGlvbnNNZXRhZGF0YSxcbn0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBGYWJyaWNDb250cmFjdENvbnRleHQgfSBmcm9tIFwiLi4vLi4vY29udHJhY3RzL0NvbnRyYWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgQ29sbGVjdGlvblJlc29sdmVyIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBHdGluT3duZXIgfSBmcm9tIFwiLi9HdGluT3duZXJcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYnVpbGRGb3JNYXRjaGluZ0NvbGxlY3Rpb248TSBleHRlbmRzIE1vZGVsPihcbiAgbW9kZWw6IE0sXG4gIGNvbnRleHQ6IGFueSxcbiAgY29sbGVjdGlvbnM6IHtcbiAgICBwcml2YXRlQ29sczogKHN0cmluZyB8IENvbGxlY3Rpb25SZXNvbHZlcilbXTtcbiAgICBzaGFyZWRDb2xzOiAoc3RyaW5nIHwgQ29sbGVjdGlvblJlc29sdmVyKVtdO1xuICB9XG4pIHtcbiAgY29uc3QgbWFwVG9Db2xsZWN0aW9ucyA9XG4gICAgY29sbGVjdGlvbnMgJiYgKGNvbGxlY3Rpb25zLnByaXZhdGVDb2xzIHx8IGNvbGxlY3Rpb25zLnNoYXJlZENvbHMpO1xuICBsZXQgY29sczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGlmIChtYXBUb0NvbGxlY3Rpb25zKSB7XG4gICAgY29uc3QgbXNwID0gTW9kZWwub3duZXJPZihtb2RlbCkgfHwgKGF3YWl0IGNvbnRleHQuc3R1Yi5nZXRDcmVhdG9yKCkpLm1zcGlkO1xuICAgIGNvbHMgPSBbXG4gICAgICAuLi5uZXcgU2V0KFxuICAgICAgICBbLi4uY29sbGVjdGlvbnMucHJpdmF0ZUNvbHMsIC4uLmNvbGxlY3Rpb25zLnNoYXJlZENvbHNdLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiBjb2wgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgID8gY29sXG4gICAgICAgICAgICA6IChjb2wgYXMgQ29sbGVjdGlvblJlc29sdmVyKShtb2RlbCwgbXNwKTtcbiAgICAgICAgfSlcbiAgICAgICksXG4gICAgXTtcblxuICAgIGNvbnN0IHBrID0gTW9kZWwucGsobW9kZWwpO1xuXG4gICAgY29scy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGxldCBzZWdEYXRhOiBhbnk7XG4gICAgICB0cnkge1xuICAgICAgICBzZWdEYXRhID0gY29udGV4dC5nZXQoXCJzZWdyZWdhdGVkRGF0YVwiKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm47IC8vIHNlZ3JlZ2F0ZWREYXRhIG5vdCBwcmVzZW50IGluIHRoaXMgY29udGV4dCAoZS5nLiBjYXNjYWRlIGNoaWxkKVxuICAgICAgfVxuICAgICAgaWYgKCFzZWdEYXRhIHx8ICFzZWdEYXRhW2NvbF0gfHwgISgobW9kZWxbcGtdIGFzIGFueSkgaW4gc2VnRGF0YVtjb2xdKSlcbiAgICAgICAgcmV0dXJuO1xuICAgICAgT2JqZWN0LmFzc2lnbihtb2RlbCwgc2VnRGF0YVtjb2xdW21vZGVsW3BrXV0pO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBtb2RlbDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgc2hhbGxvdy1jbG9uZWQgY29weSBvZiB0aGUgbW9kZWwgd2l0aCByZWxhdGlvbiBwcm9wZXJ0aWVzIHJlc29sdmVkXG4gKiB0byB0aGVpciBmdWxsIGluc3RhbmNlcy4gVGhlIG9yaWdpbmFsIG1vZGVsIGlzIE5PVCBtdXRhdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcG9wdWxhdGVSZWxhdGlvbnM8TSBleHRlbmRzIE1vZGVsPihcbiAgbW9kZWw6IE0sXG4gIGNvbnRleHQ6IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgb3ZlcnJpZGVzPzogUmVjb3JkPHN0cmluZywgYW55PlxuKTogUHJvbWlzZTxNPiB7XG4gIC8vIENyZWF0ZSBhIHNoYWxsb3cgY29weSBwcmVzZXJ2aW5nIHRoZSBwcm90b3R5cGUgc28gY29tcGFyZSgpIGV0Yy4gc3RpbGwgd29ya1xuICBjb25zdCBjb3B5ID0gT2JqZWN0LmFzc2lnbihcbiAgICBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihtb2RlbCkpLFxuICAgIG1vZGVsXG4gICkgYXMgTTtcbiAgY29uc3QgcmVsUHJvcHMgPSBNb2RlbC5yZWxhdGlvbnMobW9kZWwpIGFzIHN0cmluZ1tdO1xuICBpZiAoIXJlbFByb3BzIHx8ICFyZWxQcm9wcy5sZW5ndGgpIHJldHVybiBjb3B5O1xuICBmb3IgKGNvbnN0IHByb3BLZXkgb2YgcmVsUHJvcHMpIHtcbiAgICBjb25zdCBtZXRhID0gTW9kZWwucmVsYXRpb25zKFxuICAgICAgbW9kZWwsXG4gICAgICBwcm9wS2V5IGFzIGtleW9mIE1cbiAgICApIGFzIFJlbGF0aW9uc01ldGFkYXRhO1xuICAgIGNvbnN0IGNsYXp6T3JGbiA9IG1ldGEuY2xhc3M7XG4gICAgY29uc3QgY2xheno6IENvbnN0cnVjdG9yPE1vZGVsPiA9XG4gICAgICB0eXBlb2YgY2xhenpPckZuID09PSBcImZ1bmN0aW9uXCIgJiYgKGNsYXp6T3JGbiBhcyBhbnkpLm5hbWVcbiAgICAgICAgPyAoY2xhenpPckZuIGFzIENvbnN0cnVjdG9yPE1vZGVsPilcbiAgICAgICAgOiAoY2xhenpPckZuIGFzICgpID0+IENvbnN0cnVjdG9yPE1vZGVsPikoKTtcbiAgICBjb25zdCB2YWx1ZSA9IChjb3B5IGFzIGFueSlbcHJvcEtleV07XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIGNvbnRpbnVlO1xuICAgIGNvbnN0IHJlcG8gPSBSZXBvc2l0b3J5LmZvck1vZGVsKGNsYXp6KS5vdmVycmlkZShvdmVycmlkZXMgfHwge30pO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgY29uc3QgcmVzb2x2ZWQ6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBpdGVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc29sdmVkLnB1c2goYXdhaXQgcmVwby5yZWFkKFN0cmluZyhpdGVtKSwgY29udGV4dCkpO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmVzb2x2ZWQucHVzaChpdGVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZWQucHVzaChpdGVtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgKGNvcHkgYXMgYW55KVtwcm9wS2V5XSA9IHJlc29sdmVkO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgKGNvcHkgYXMgYW55KVtwcm9wS2V5XSA9IGF3YWl0IHJlcG8ucmVhZChTdHJpbmcodmFsdWUpLCBjb250ZXh0KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBrZWVwIG9yaWdpbmFsIHZhbHVlIGlmIHJlYWQgZmFpbHNcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvcHk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVBdWRpdEhhbmRsZXI8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIFJlcG9zaXRvcnk8TSwgYW55Pixcbj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgZGF0YTogQXVkaXRNZXRhZGF0YSxcbiAga2V5OiBrZXlvZiBNLFxuICBtb2RlbDogTVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlcG8gPSBSZXBvc2l0b3J5LmZvck1vZGVsKEF1ZGl0KTtcblxuICBpZiAoIWNvbnRleHQuaWRlbnRpdHkgfHwgIWNvbnRleHQuaWRlbnRpdHkuZ2V0SUQpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYExvc3QgY29udGV4dCBhcHBhcmVudGx5IGZvciBhdWRpdGApO1xuXG4gIG1vZGVsID0gYXdhaXQgcG9wdWxhdGVSZWxhdGlvbnMobW9kZWwsIGNvbnRleHQsIHRoaXMuX292ZXJyaWRlcyk7XG5cbiAgY29uc3QgdG9DcmVhdGUgPSBuZXcgQXVkaXQoe1xuICAgIHVzZXJHcm91cDogY29udGV4dC5pZGVudGl0eS5nZXRJRCgpLFxuICAgIHVzZXJJZDogY29udGV4dC5pZGVudGl0eS5nZXRJRCgpLFxuICAgIG1vZGVsOiBNb2RlbC50YWJsZU5hbWUoZGF0YS5jbGFzcyksXG4gICAgdHJhbnNhY3Rpb246IGNvbnRleHQuc3R1Yi5nZXRUeElEKCksXG4gICAgYWN0aW9uOiBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICBkaWZmczogbmV3IHRoaXMuY2xhc3MoKS5jb21wYXJlKG1vZGVsKSxcbiAgfSk7XG5cbiAgY29uc3QgYXVkaXQgPSBhd2FpdCByZXBvLm92ZXJyaWRlKHRoaXMuX292ZXJyaWRlcykuY3JlYXRlKHRvQ3JlYXRlLCBjb250ZXh0KTtcbiAgY29udGV4dC5sb2dnZXIuaW5mbyhcbiAgICBgQXVkaXQgbG9nIGZvciAke09wZXJhdGlvbktleXMuQ1JFQVRFfSBvZiAke01vZGVsLnRhYmxlTmFtZSh0aGlzLmNsYXNzKX0gY3JlYXRlZDogJHthdWRpdC5pZH06ICR7SlNPTi5zdHJpbmdpZnkoYXVkaXQsIHVuZGVmaW5lZCwgMil9YFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQXVkaXRIYW5kbGVyPFxuICBNIGV4dGVuZHMgTW9kZWwsXG4gIFIgZXh0ZW5kcyBSZXBvc2l0b3J5PE0sIGFueT4sXG4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBGYWJyaWNDb250cmFjdENvbnRleHQsXG4gIGRhdGE6IEF1ZGl0TWV0YWRhdGEsXG4gIGtleToga2V5b2YgTSxcbiAgbW9kZWw6IE0sXG4gIG9sZE1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVwbyA9IFJlcG9zaXRvcnkuZm9yTW9kZWwoQXVkaXQpO1xuXG4gIGNvbnN0IGNvbGxlY3Rpb25zID0gTW9kZWwuY29sbGVjdGlvbnNGb3IoQXVkaXQpO1xuICAvL1xuICAvLyBtb2RlbCA9IGF3YWl0IHJlYnVpbGRGb3JNYXRjaGluZ0NvbGxlY3Rpb24obW9kZWwsIGNvbnRleHQsIGNvbGxlY3Rpb25zKTtcblxuICBpZiAoIWNvbnRleHQuaWRlbnRpdHkgfHwgIWNvbnRleHQuaWRlbnRpdHkuZ2V0SUQpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYExvc3QgY29udGV4dCBhcHBhcmVudGx5IGZvciBhdWRpdGApO1xuXG4gIGNvbnN0IHBvcHVsYXRlZE1vZGVsID0gYXdhaXQgcG9wdWxhdGVSZWxhdGlvbnMoXG4gICAgbW9kZWwsXG4gICAgY29udGV4dCxcbiAgICB0aGlzLl9vdmVycmlkZXNcbiAgKTtcbiAgY29uc3QgcG9wdWxhdGVkT2xkTW9kZWwgPSBhd2FpdCBwb3B1bGF0ZVJlbGF0aW9ucyhcbiAgICBvbGRNb2RlbCxcbiAgICBjb250ZXh0LFxuICAgIHRoaXMuX292ZXJyaWRlc1xuICApO1xuXG4gIGNvbnN0IHRvQ3JlYXRlID0gbmV3IEF1ZGl0KHtcbiAgICB1c2VyR3JvdXA6IGNvbnRleHQuaWRlbnRpdHkuZ2V0SUQoKSxcbiAgICB1c2VySWQ6IGNvbnRleHQuaWRlbnRpdHkuZ2V0SUQoKSxcbiAgICBtb2RlbDogTW9kZWwudGFibGVOYW1lKGRhdGEuY2xhc3MpLFxuICAgIHRyYW5zYWN0aW9uOiBjb250ZXh0LnN0dWIuZ2V0VHhJRCgpLFxuICAgIGFjdGlvbjogT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgZGlmZnM6IHBvcHVsYXRlZE1vZGVsLmNvbXBhcmUocG9wdWxhdGVkT2xkTW9kZWwpLFxuICB9KTtcblxuICBjb25zdCBhdWRpdCA9IGF3YWl0IHJlcG8ub3ZlcnJpZGUodGhpcy5fb3ZlcnJpZGVzKS5jcmVhdGUodG9DcmVhdGUsIGNvbnRleHQpO1xuICBjb250ZXh0LmxvZ2dlci5pbmZvKFxuICAgIGBBdWRpdCBsb2cgZm9yICR7T3BlcmF0aW9uS2V5cy5VUERBVEV9IG9mICR7TW9kZWwudGFibGVOYW1lKHRoaXMuY2xhc3MpfSBjcmVhdGVkOiAke0pTT04uc3RyaW5naWZ5KGF1ZGl0LCB1bmRlZmluZWQsIDIpfWBcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZUF1ZGl0SGFuZGxlcjxcbiAgTSBleHRlbmRzIE1vZGVsLFxuICBSIGV4dGVuZHMgUmVwb3NpdG9yeTxNLCBhbnk+LFxuPihcbiAgdGhpczogUixcbiAgY29udGV4dDogRmFicmljQ29udHJhY3RDb250ZXh0LFxuICBkYXRhOiBBdWRpdE1ldGFkYXRhLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFjb250ZXh0LmlkZW50aXR5IHx8ICFjb250ZXh0LmlkZW50aXR5LmdldElEKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBMb3N0IGNvbnRleHQgYXBwcmVudGx5LiBubyBnZXRJZCBpbiBpZGVudGl0eWApO1xuXG4gIG1vZGVsID0gYXdhaXQgcG9wdWxhdGVSZWxhdGlvbnMobW9kZWwsIGNvbnRleHQsIHRoaXMuX292ZXJyaWRlcyk7XG5cbiAgY29uc3QgdG9DcmVhdGUgPSBuZXcgQXVkaXQoe1xuICAgIHVzZXJHcm91cDogY29udGV4dC5pZGVudGl0eS5nZXRJRCgpLFxuICAgIHVzZXJJZDogY29udGV4dC5pZGVudGl0eS5nZXRJRCgpLFxuICAgIG1vZGVsOiBNb2RlbC50YWJsZU5hbWUoZGF0YS5jbGFzcyksXG4gICAgdHJhbnNhY3Rpb246IGNvbnRleHQuc3R1Yi5nZXRUeElEKCksXG4gICAgYWN0aW9uOiBPcGVyYXRpb25LZXlzLkRFTEVURSxcbiAgICBkaWZmczogbW9kZWwuY29tcGFyZShuZXcgdGhpcy5jbGFzcygpKSxcbiAgfSk7XG5cbiAgY29uc3QgcmVwbyA9IFJlcG9zaXRvcnkuZm9yTW9kZWwoQXVkaXQpO1xuICBjb25zdCBhdWRpdCA9IGF3YWl0IHJlcG8ub3ZlcnJpZGUodGhpcy5fb3ZlcnJpZGVzKS5jcmVhdGUodG9DcmVhdGUsIGNvbnRleHQpO1xuICBjb250ZXh0LmxvZ2dlci5pbmZvKFxuICAgIGBBdWRpdCBsb2cgZm9yICR7T3BlcmF0aW9uS2V5cy5ERUxFVEV9IG9mICR7TW9kZWwudGFibGVOYW1lKHRoaXMuY2xhc3MpfSBjcmVhdGVkOiAke0pTT04uc3RyaW5naWZ5KGF1ZGl0LCB1bmRlZmluZWQsIDIpfWBcbiAgKTtcbn1cblxuZXhwb3J0IHR5cGUgQXVkaXRNZXRhZGF0YSA9IHtcbiAgY2xhc3M6IENvbnN0cnVjdG9yPE1vZGVsPjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWRpdChtb2RlbDogQ29uc3RydWN0b3I8TW9kZWw8Ym9vbGVhbj4+KSB7XG4gIGNvbnN0IG1ldGE6IEF1ZGl0TWV0YWRhdGEgPSB7XG4gICAgY2xhc3M6IG1vZGVsLFxuICB9O1xuICByZXR1cm4gYXBwbHkoXG4gICAgYWZ0ZXJDcmVhdGUoY3JlYXRlQXVkaXRIYW5kbGVyIGFzIGFueSwgbWV0YSksXG4gICAgYWZ0ZXJVcGRhdGUodXBkYXRlQXVkaXRIYW5kbGVyIGFzIGFueSwgbWV0YSksXG4gICAgYWZ0ZXJEZWxldGUoZGVsZXRlQXVkaXRIYW5kbGVyIGFzIGFueSwgbWV0YSksXG4gICAgbWV0YWRhdGEoXCJhdWRpdFwiLCB0cnVlKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlQXNzaWduR3Rpbk93bmVySGFuZGxlcjxcbiAgTSBleHRlbmRzIE1vZGVsLFxuICBSIGV4dGVuZHMgUmVwbzxNPixcbiAgVixcbj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgZGF0YTogVixcbiAga2V5OiBrZXlvZiBNLFxuICBtb2RlbDogeyBwcm9kdWN0Q29kZTogc3RyaW5nIH1cbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIW1vZGVsLnByb2R1Y3RDb2RlKVxuICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKGBHdGluIG93bmVyIGNhbiBvbmx5IGJlIGFzc2lnbmVkIHRvIHByb2R1Y3RzYCk7XG4gIGNvbnN0IHJlcG8gPSBSZXBvc2l0b3J5LmZvck1vZGVsKEd0aW5Pd25lcik7XG4gIGNvbnN0IHRvQ3JlYXRlID0gbmV3IEd0aW5Pd25lcih7XG4gICAgcHJvZHVjdENvZGU6IG1vZGVsLnByb2R1Y3RDb2RlLFxuICB9KTtcbiAgY29uc3Qgb3duZXIgPSBhd2FpdCByZXBvLmNyZWF0ZSh0b0NyZWF0ZSwgcHVibGljQ29udGV4dChjb250ZXh0KSk7XG4gIGNvbnRleHQubG9nZ2VyLmluZm8oXG4gICAgYEdUSU4gb3duZXIgYXNzaWduZWQgZm9yIHByb2R1Y3QgJHttb2RlbC5wcm9kdWN0Q29kZX06ICR7b3duZXIub3duZWRCeX1gXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVBc3NpZ25HdGluT3duZXJIYW5kbGVyPFxuICBNIGV4dGVuZHMgTW9kZWwsXG4gIFIgZXh0ZW5kcyBSZXBvPE0+LFxuICBWLFxuPihcbiAgdGhpczogUixcbiAgY29udGV4dDogRmFicmljQ29udHJhY3RDb250ZXh0LFxuICBkYXRhOiBWLFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiB7IHByb2R1Y3RDb2RlOiBzdHJpbmcgfVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghbW9kZWwucHJvZHVjdENvZGUpXG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoYEd0aW4gb3duZXIgY2FuIG9ubHkgYmUgYXNzaWduZWQgdG8gcHJvZHVjdHNgKTtcbiAgY29uc3QgcmVwbyA9IFJlcG9zaXRvcnkuZm9yTW9kZWwoR3Rpbk93bmVyKTtcbiAgY29uc3Qgb3duZXIgPSBhd2FpdCByZXBvLmRlbGV0ZShtb2RlbC5wcm9kdWN0Q29kZSwgcHVibGljQ29udGV4dChjb250ZXh0KSk7XG4gIGNvbnRleHQubG9nZ2VyLmluZm8oXG4gICAgYEdUSU4gb3duZXIgYXNzaWduZWQgZm9yIHByb2R1Y3QgJHttb2RlbC5wcm9kdWN0Q29kZX06ICR7b3duZXIub3duZWRCeX1gXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25Qcm9kdWN0T3duZXIoKSB7XG4gIHJldHVybiBhcHBseShcbiAgICBvbkNyZWF0ZShjcmVhdGVBc3NpZ25HdGluT3duZXJIYW5kbGVyIGFzIGFueSwge30pLFxuICAgIGFmdGVyRGVsZXRlKGRlbGV0ZUFzc2lnbkd0aW5Pd25lckhhbmRsZXIgYXMgYW55LCB7fSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gcHVibGljQ29udGV4dChjdHg6IEZhYnJpY0NvbnRyYWN0Q29udGV4dCkge1xuICByZXR1cm4gbmV3IChjdHguY29uc3RydWN0b3IgYXMgYW55KShjdHgpLmFjY3VtdWxhdGUoe1xuICAgIGZ1bGx5U2VncmVnYXRlZDogZmFsc2UsXG4gICAgc2VncmVnYXRlZDogdW5kZWZpbmVkLFxuICAgIHNlZ3JlZ2F0ZWREYXRhOiB1bmRlZmluZWQsXG4gICAgc2VncmVnYXRlUmVhZDogdW5kZWZpbmVkLFxuICAgIHNlZ3JlZ2F0ZVdyaXRlOiB1bmRlZmluZWQsXG4gICAgc2VncmVnYXRlUmVhZFN0YWNrOiB1bmRlZmluZWQsXG4gIH0pO1xufVxuIl19
@@ -1,88 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.gtin = exports.GtinValidator = void 0;
13
- exports.generateGtin = generateGtin;
14
- exports.getBatch = getBatch;
15
- const decorator_validation_1 = require("@decaf-ts/decorator-validation");
16
- const db_decorators_1 = require("@decaf-ts/db-decorators");
17
- const decoration_1 = require("@decaf-ts/decoration");
18
- const GTIN_VALIDATION_KEY = "gtin";
19
- const GTIN_VALIDATION_ERROR_MESSAGE = "Not a valid Gtin";
20
- let GtinValidator = class GtinValidator extends decorator_validation_1.Validator {
21
- constructor(message = GTIN_VALIDATION_ERROR_MESSAGE) {
22
- super(message, "string", "number");
23
- }
24
- hasErrors(value, options) {
25
- if (value === undefined)
26
- return;
27
- const { message } = options || {};
28
- const gtin = value + "";
29
- if (!gtin.match(/\d{14}/g))
30
- return this.getMessage(message || this.message);
31
- const digits = gtin.slice(0, 13);
32
- const checksum = calculateGtinCheckSum(digits);
33
- return parseInt(checksum) === parseInt(gtin.charAt(13))
34
- ? undefined
35
- : this.getMessage(message || this.message);
36
- }
37
- };
38
- exports.GtinValidator = GtinValidator;
39
- exports.GtinValidator = GtinValidator = __decorate([
40
- (0, decorator_validation_1.validator)(GTIN_VALIDATION_KEY),
41
- __metadata("design:paramtypes", [String])
42
- ], GtinValidator);
43
- const gtin = (message = GTIN_VALIDATION_ERROR_MESSAGE) => {
44
- return (0, decoration_1.apply)((0, decorator_validation_1.required)(), (0, db_decorators_1.readonly)(), (0, decorator_validation_1.innerValidationDecorator)(exports.gtin, GTIN_VALIDATION_KEY, {
45
- message: message,
46
- async: false,
47
- }));
48
- };
49
- exports.gtin = gtin;
50
- // https://www.gs1.org/services/how-calculate-check-digit-manually
51
- function calculateGtinCheckSum(digits) {
52
- digits = "" + digits;
53
- if (digits.length !== 13)
54
- throw new Error("needs to received 13 digits");
55
- const multiplier = [3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3];
56
- let sum = 0;
57
- try {
58
- // multiply each digit for its multiplier according to the table
59
- for (let i = 0; i < 13; i++)
60
- sum += parseInt(digits.charAt(i)) * multiplier[i];
61
- // Find the nearest equal or higher multiple of ten
62
- const remainder = sum % 10;
63
- let nearest;
64
- if (remainder === 0)
65
- nearest = sum;
66
- else
67
- nearest = sum - remainder + 10;
68
- return nearest - sum + "";
69
- }
70
- catch (e) {
71
- throw new Error(`Did this received numbers? ${e}`);
72
- }
73
- }
74
- function generateGtin() {
75
- function pad(num, width, padding = "0") {
76
- const n = num + "";
77
- return n.length >= width
78
- ? n
79
- : new Array(width - n.length + 1).join(padding) + n;
80
- }
81
- const beforeChecksum = pad(Math.floor(Math.random() * 9999999999999), 13); // has to be 13. the checksum is the 4th digit
82
- const checksum = calculateGtinCheckSum(beforeChecksum);
83
- return `${beforeChecksum}${checksum}`;
84
- }
85
- function getBatch() {
86
- return Math.random().toString(36).replace(".", "").toUpperCase().slice(5);
87
- }
88
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Rpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250cmFjdC9tb2RlbHMvZ3Rpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUF1RUEsb0NBV0M7QUFFRCw0QkFFQztBQXRGRCx5RUFNd0M7QUFDeEMsMkRBQW1EO0FBQ25ELHFEQUE2QztBQUU3QyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztBQUNuQyxNQUFNLDZCQUE2QixHQUFHLGtCQUFrQixDQUFDO0FBR2xELElBQU0sYUFBYSxHQUFuQixNQUFNLGFBQWMsU0FBUSxnQ0FBUztJQUMxQyxZQUFZLFVBQWtCLDZCQUE2QjtRQUN6RCxLQUFLLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsU0FBUyxDQUNQLEtBQXNCLEVBQ3RCLE9BQTBCO1FBRTFCLElBQUksS0FBSyxLQUFLLFNBQVM7WUFBRSxPQUFPO1FBRWhDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFNUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakMsTUFBTSxRQUFRLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDL0MsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckQsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRixDQUFBO0FBckJZLHNDQUFhO3dCQUFiLGFBQWE7SUFEekIsSUFBQSxnQ0FBUyxFQUFDLG1CQUFtQixDQUFDOztHQUNsQixhQUFhLENBcUJ6QjtBQUVNLE1BQU0sSUFBSSxHQUFHLENBQUMsVUFBa0IsNkJBQTZCLEVBQUUsRUFBRTtJQUN0RSxPQUFPLElBQUEsa0JBQUssRUFDVixJQUFBLCtCQUFRLEdBQUUsRUFDVixJQUFBLHdCQUFRLEdBQUUsRUFDVixJQUFBLCtDQUF3QixFQUFDLFlBQUksRUFBRSxtQkFBbUIsRUFBRTtRQUNsRCxPQUFPLEVBQUUsT0FBTztRQUNoQixLQUFLLEVBQUUsS0FBSztLQUNiLENBQUMsQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBVFcsUUFBQSxJQUFJLFFBU2Y7QUFFRixrRUFBa0U7QUFDbEUsU0FBUyxxQkFBcUIsQ0FBQyxNQUFjO0lBQzNDLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO0lBQ3JCLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxFQUFFO1FBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osSUFBSSxDQUFDO1FBQ0gsZ0VBQWdFO1FBQ2hFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ3pCLEdBQUcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVwRCxtREFBbUQ7UUFDbkQsTUFBTSxTQUFTLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLE9BQU8sQ0FBQztRQUNaLElBQUksU0FBUyxLQUFLLENBQUM7WUFBRSxPQUFPLEdBQUcsR0FBRyxDQUFDOztZQUM5QixPQUFPLEdBQUcsR0FBRyxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFcEMsT0FBTyxPQUFPLEdBQUcsR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFnQixZQUFZO0lBQzFCLFNBQVMsR0FBRyxDQUFDLEdBQVcsRUFBRSxLQUFhLEVBQUUsVUFBa0IsR0FBRztRQUM1RCxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLE1BQU0sSUFBSSxLQUFLO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxhQUFhLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLDhDQUE4QztJQUN6SCxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2RCxPQUFPLEdBQUcsY0FBYyxHQUFHLFFBQVEsRUFBRSxDQUFDO0FBQ3hDLENBQUM7QUFFRCxTQUFnQixRQUFRO0lBQ3RCLE9BQU8sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaW5uZXJWYWxpZGF0aW9uRGVjb3JhdG9yLFxuICByZXF1aXJlZCxcbiAgVmFsaWRhdG9yLFxuICB2YWxpZGF0b3IsXG4gIFZhbGlkYXRvck9wdGlvbnMsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7IHJlYWRvbmx5IH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBhcHBseSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdGlvblwiO1xuXG5jb25zdCBHVElOX1ZBTElEQVRJT05fS0VZID0gXCJndGluXCI7XG5jb25zdCBHVElOX1ZBTElEQVRJT05fRVJST1JfTUVTU0FHRSA9IFwiTm90IGEgdmFsaWQgR3RpblwiO1xuXG5AdmFsaWRhdG9yKEdUSU5fVkFMSURBVElPTl9LRVkpXG5leHBvcnQgY2xhc3MgR3RpblZhbGlkYXRvciBleHRlbmRzIFZhbGlkYXRvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZyA9IEdUSU5fVkFMSURBVElPTl9FUlJPUl9NRVNTQUdFKSB7XG4gICAgc3VwZXIobWVzc2FnZSwgXCJzdHJpbmdcIiwgXCJudW1iZXJcIik7XG4gIH1cblxuICBoYXNFcnJvcnMoXG4gICAgdmFsdWU6IG51bWJlciB8IHN0cmluZyxcbiAgICBvcHRpb25zPzogVmFsaWRhdG9yT3B0aW9uc1xuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICBjb25zdCB7IG1lc3NhZ2UgfSA9IG9wdGlvbnMgfHwge307XG4gICAgY29uc3QgZ3RpbiA9IHZhbHVlICsgXCJcIjtcbiAgICBpZiAoIWd0aW4ubWF0Y2goL1xcZHsxNH0vZykpIHJldHVybiB0aGlzLmdldE1lc3NhZ2UobWVzc2FnZSB8fCB0aGlzLm1lc3NhZ2UpO1xuXG4gICAgY29uc3QgZGlnaXRzID0gZ3Rpbi5zbGljZSgwLCAxMyk7XG4gICAgY29uc3QgY2hlY2tzdW0gPSBjYWxjdWxhdGVHdGluQ2hlY2tTdW0oZGlnaXRzKTtcbiAgICByZXR1cm4gcGFyc2VJbnQoY2hlY2tzdW0pID09PSBwYXJzZUludChndGluLmNoYXJBdCgxMykpXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiB0aGlzLmdldE1lc3NhZ2UobWVzc2FnZSB8fCB0aGlzLm1lc3NhZ2UpO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBndGluID0gKG1lc3NhZ2U6IHN0cmluZyA9IEdUSU5fVkFMSURBVElPTl9FUlJPUl9NRVNTQUdFKSA9PiB7XG4gIHJldHVybiBhcHBseShcbiAgICByZXF1aXJlZCgpLFxuICAgIHJlYWRvbmx5KCksXG4gICAgaW5uZXJWYWxpZGF0aW9uRGVjb3JhdG9yKGd0aW4sIEdUSU5fVkFMSURBVElPTl9LRVksIHtcbiAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsXG4gICAgICBhc3luYzogZmFsc2UsXG4gICAgfSlcbiAgKTtcbn07XG5cbi8vIGh0dHBzOi8vd3d3LmdzMS5vcmcvc2VydmljZXMvaG93LWNhbGN1bGF0ZS1jaGVjay1kaWdpdC1tYW51YWxseVxuZnVuY3Rpb24gY2FsY3VsYXRlR3RpbkNoZWNrU3VtKGRpZ2l0czogc3RyaW5nKTogc3RyaW5nIHtcbiAgZGlnaXRzID0gXCJcIiArIGRpZ2l0cztcbiAgaWYgKGRpZ2l0cy5sZW5ndGggIT09IDEzKSB0aHJvdyBuZXcgRXJyb3IoXCJuZWVkcyB0byByZWNlaXZlZCAxMyBkaWdpdHNcIik7XG4gIGNvbnN0IG11bHRpcGxpZXIgPSBbMywgMSwgMywgMSwgMywgMSwgMywgMSwgMywgMSwgMywgMSwgM107XG4gIGxldCBzdW0gPSAwO1xuICB0cnkge1xuICAgIC8vIG11bHRpcGx5IGVhY2ggZGlnaXQgZm9yIGl0cyBtdWx0aXBsaWVyIGFjY29yZGluZyB0byB0aGUgdGFibGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEzOyBpKyspXG4gICAgICBzdW0gKz0gcGFyc2VJbnQoZGlnaXRzLmNoYXJBdChpKSkgKiBtdWx0aXBsaWVyW2ldO1xuXG4gICAgLy8gRmluZCB0aGUgbmVhcmVzdCBlcXVhbCBvciBoaWdoZXIgbXVsdGlwbGUgb2YgdGVuXG4gICAgY29uc3QgcmVtYWluZGVyID0gc3VtICUgMTA7XG4gICAgbGV0IG5lYXJlc3Q7XG4gICAgaWYgKHJlbWFpbmRlciA9PT0gMCkgbmVhcmVzdCA9IHN1bTtcbiAgICBlbHNlIG5lYXJlc3QgPSBzdW0gLSByZW1haW5kZXIgKyAxMDtcblxuICAgIHJldHVybiBuZWFyZXN0IC0gc3VtICsgXCJcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRGlkIHRoaXMgcmVjZWl2ZWQgbnVtYmVycz8gJHtlfWApO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUd0aW4oKTogc3RyaW5nIHtcbiAgZnVuY3Rpb24gcGFkKG51bTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBwYWRkaW5nOiBzdHJpbmcgPSBcIjBcIikge1xuICAgIGNvbnN0IG4gPSBudW0gKyBcIlwiO1xuICAgIHJldHVybiBuLmxlbmd0aCA+PSB3aWR0aFxuICAgICAgPyBuXG4gICAgICA6IG5ldyBBcnJheSh3aWR0aCAtIG4ubGVuZ3RoICsgMSkuam9pbihwYWRkaW5nKSArIG47XG4gIH1cblxuICBjb25zdCBiZWZvcmVDaGVja3N1bSA9IHBhZChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA5OTk5OTk5OTk5OTk5KSwgMTMpOyAvLyBoYXMgdG8gYmUgMTMuIHRoZSBjaGVja3N1bSBpcyB0aGUgNHRoIGRpZ2l0XG4gIGNvbnN0IGNoZWNrc3VtID0gY2FsY3VsYXRlR3RpbkNoZWNrU3VtKGJlZm9yZUNoZWNrc3VtKTtcbiAgcmV0dXJuIGAke2JlZm9yZUNoZWNrc3VtfSR7Y2hlY2tzdW19YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJhdGNoKCkge1xuICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikucmVwbGFjZShcIi5cIiwgXCJcIikudG9VcHBlckNhc2UoKS5zbGljZSg1KTtcbn1cbiJdfQ==
@@ -1,83 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateHistoryHandler = updateHistoryHandler;
4
- exports.deleteHistoryHandler = deleteHistoryHandler;
5
- exports.historyDec = historyDec;
6
- const decorator_validation_1 = require("@decaf-ts/decorator-validation");
7
- const core_1 = require("@decaf-ts/core");
8
- const decoration_1 = require("@decaf-ts/decoration");
9
- const db_decorators_1 = require("@decaf-ts/db-decorators");
10
- const decorators_1 = require("./decorators.cjs");
11
- const History_1 = require("./History.cjs");
12
- async function updateHistoryHandler(context, data, key, model, oldModel) {
13
- if (!context.identity || !context.identity.getID)
14
- throw new db_decorators_1.InternalError(`Lost context apparently for history`);
15
- const table = decorator_validation_1.Model.tableName(oldModel);
16
- const pk = decorator_validation_1.Model.pk(oldModel, true);
17
- let version;
18
- try {
19
- version = decorator_validation_1.Model.versionOf(oldModel);
20
- }
21
- catch {
22
- context.logger.warn(`History for ${table}'s ${pk.toString()} could not be created due to missing version`);
23
- return; // model has no @version field — skip history
24
- }
25
- // Populate relations on a non-mutating copy of oldModel, then convert to a
26
- // plain object so no model-anchor (__model) keys appear in the stored JSON.
27
- const populated = await (0, decorators_1.populateRelations)(oldModel, context, this._overrides);
28
- const record = JSON.parse(JSON.stringify(populated));
29
- const repo = core_1.Repository.forModel(History_1.History).override(this._overrides);
30
- const toCreate = new History_1.History({
31
- table,
32
- key: pk,
33
- version,
34
- record,
35
- });
36
- const overrides = {
37
- stub: context.stub,
38
- identity: context.identity,
39
- logger: context.logger,
40
- fullySegregated: true,
41
- };
42
- const historyCtx = await this.adapter.context(db_decorators_1.OperationKeys.CREATE, overrides, History_1.History);
43
- const history = await repo.create(toCreate, historyCtx);
44
- context.logger.info(`History for ${table}'s ${pk.toString()} version ${version} stored with id ${history.id}`);
45
- }
46
- async function deleteHistoryHandler(context, data, key, model) {
47
- if (!context.identity || !context.identity.getID)
48
- throw new db_decorators_1.InternalError(`Lost context apparently for history`);
49
- const table = decorator_validation_1.Model.tableName(model);
50
- const pk = decorator_validation_1.Model.pk(model, true);
51
- let version;
52
- try {
53
- version = decorator_validation_1.Model.versionOf(model);
54
- }
55
- catch {
56
- context.logger.warn(`History for ${table}'s ${pk.toString()} could not be created due to missing version`);
57
- return; // model has no @version field — skip history
58
- }
59
- // Populate relations on a non-mutating copy of model, then convert to a
60
- // plain object so no model-anchor (__model) keys appear in the stored JSON.
61
- const populated = await (0, decorators_1.populateRelations)(model, context, this._overrides);
62
- const record = JSON.parse(JSON.stringify(populated));
63
- const repo = core_1.Repository.forModel(History_1.History).override(this._overrides);
64
- const toCreate = new History_1.History({
65
- table,
66
- key: pk,
67
- version,
68
- record,
69
- });
70
- const overrides = {
71
- stub: context.stub,
72
- identity: context.identity,
73
- logger: context.logger,
74
- fullySegregated: true,
75
- };
76
- const historyCtx = await this.adapter.context(db_decorators_1.OperationKeys.CREATE, overrides, History_1.History);
77
- const history = await repo.create(toCreate, historyCtx);
78
- context.logger.info(`History for ${table}'s ${pk.toString()} version ${version} stored with id ${history.id}`);
79
- }
80
- function historyDec() {
81
- return (0, decoration_1.apply)((0, db_decorators_1.onUpdate)(updateHistoryHandler, {}, { priority: 99 }), (0, db_decorators_1.afterDelete)(deleteHistoryHandler, {}, { priority: 99 }), (0, decoration_1.metadata)("history", true));
82
- }
83
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGlzdG9yeS1kZWMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29udHJhY3QvbW9kZWxzL2hpc3RvcnktZGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaUJBLG9EQXVEQztBQUVELG9EQXFEQztBQUVELGdDQU1DO0FBdklELHlFQUF1RDtBQUN2RCx5Q0FBNEM7QUFDNUMscURBQXVEO0FBQ3ZELDJEQU1pQztBQUNqQyxpREFBaUQ7QUFLakQsMkNBQW9DO0FBRTdCLEtBQUssVUFBVSxvQkFBb0IsQ0FLeEMsT0FBOEIsRUFDOUIsSUFBUyxFQUNULEdBQVksRUFDWixLQUFRLEVBQ1IsUUFBVztJQUVYLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLO1FBQzlDLE1BQU0sSUFBSSw2QkFBYSxDQUFDLHFDQUFxQyxDQUFDLENBQUM7SUFFakUsTUFBTSxLQUFLLEdBQUcsNEJBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDeEMsTUFBTSxFQUFFLEdBQW1CLDRCQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQVEsQ0FBQztJQUMzRCxJQUFJLE9BQWUsQ0FBQztJQUNwQixJQUFJLENBQUM7UUFDSCxPQUFPLEdBQUcsNEJBQUssQ0FBQyxTQUFTLENBQUMsUUFBZSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNqQixlQUFlLEtBQUssTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLDhDQUE4QyxDQUN0RixDQUFDO1FBQ0YsT0FBTyxDQUFDLDZDQUE2QztJQUN2RCxDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLDRFQUE0RTtJQUM1RSxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUEsOEJBQWlCLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxD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LENBQUM7SUFFbEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDM0MsNkJBQWEsQ0FBQyxNQUFNLEVBQ3BCLFNBQVMsRUFDVCxpQkFBTyxDQUNSLENBQUM7SUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3hELE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNqQixlQUFlLEtBQUssTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFLFlBQVksT0FBTyxtQkFBbUIsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUMxRixDQUFDO0FBQ0osQ0FBQztBQUVELFNBQWdCLFVBQVU7SUFDeEIsT0FBTyxJQUFBLGtCQUFLLEVBQ1YsSUFBQSx3QkFBUSxFQUFDLG9CQUEyQixFQUFFLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUMzRCxJQUFBLDJCQUFXLEVBQUMsb0JBQTJCLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQzlELElBQUEscUJBQVEsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQzFCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBhcHBseSwgbWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRpb25cIjtcbmltcG9ydCB7XG4gIGFmdGVyRGVsZXRlLFxuICBJbnRlcm5hbEVycm9yLFxuICBvblVwZGF0ZSxcbiAgT3BlcmF0aW9uS2V5cyxcbiAgUHJpbWFyeUtleVR5cGUsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgcG9wdWxhdGVSZWxhdGlvbnMgfSBmcm9tIFwiLi9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgRmFicmljQ29udHJhY3RGbGFncyxcbn0gZnJvbSBcIi4uLy4uL2NvbnRyYWN0cy9pbmRleFwiO1xuaW1wb3J0IHsgSGlzdG9yeSB9IGZyb20gXCIuL0hpc3RvcnlcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUhpc3RvcnlIYW5kbGVyPFxuICBNIGV4dGVuZHMgTW9kZWwsXG4gIFIgZXh0ZW5kcyBSZXBvc2l0b3J5PE0sIGFueT4sXG4+KFxuICB0aGlzOiBSLFxuICBjb250ZXh0OiBGYWJyaWNDb250cmFjdENvbnRleHQsXG4gIGRhdGE6IGFueSxcbiAga2V5OiBrZXlvZiBNLFxuICBtb2RlbDogTSxcbiAgb2xkTW9kZWw6IE1cbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWNvbnRleHQuaWRlbnRpdHkgfHwgIWNvbnRleHQuaWRlbnRpdHkuZ2V0SUQpXG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoYExvc3QgY29udGV4dCBhcHBhcmVudGx5IGZvciBoaXN0b3J5YCk7XG5cbiAgY29uc3QgdGFibGUgPSBNb2RlbC50YWJsZU5hbWUob2xkTW9kZWwpO1xuICBjb25zdCBwazogUHJpbWFyeUtleVR5cGUgPSBNb2RlbC5wayhvbGRNb2RlbCwgdHJ1ZSkgYXMgYW55O1xuICBsZXQgdmVyc2lvbjogbnVtYmVyO1xuICB0cnkge1xuICAgIHZlcnNpb24gPSBNb2RlbC52ZXJzaW9uT2Yob2xkTW9kZWwgYXMgYW55KTtcbiAgfSBjYXRjaCB7XG4gICAgY29udGV4dC5sb2dnZXIud2FybihcbiAgICAgIGBIaXN0b3J5IGZvciAke3RhYmxlfSdzICR7cGsudG9TdHJpbmcoKX0gY291bGQgbm90IGJlIGNyZWF0ZWQgZHVlIHRvIG1pc3NpbmcgdmVyc2lvbmBcbiAgICApO1xuICAgIHJldHVybjsgLy8gbW9kZWwgaGFzIG5vIEB2ZXJzaW9uIGZpZWxkIOKAlCBza2lwIGhpc3RvcnlcbiAgfVxuXG4gIC8vIFBvcHVsYXRlIHJlbGF0aW9ucyBvbiBhIG5vbi1tdXRhdGluZyBjb3B5IG9mIG9sZE1vZGVsLCB0aGVuIGNvbnZlcnQgdG8gYVxuICAvLyBwbGFpbiBvYmplY3Qgc28gbm8gbW9kZWwtYW5jaG9yIChfX21vZGVsKSBrZXlzIGFwcGVhciBpbiB0aGUgc3RvcmVkIEpTT04uXG4gIGNvbnN0IHBvcHVsYXRlZCA9IGF3YWl0IHBvcHVsYXRlUmVsYXRpb25zKG9sZE1vZGVsLCBjb250ZXh0LCB0aGlzLl9vdmVycmlkZXMpO1xuICBjb25zdCByZWNvcmQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHBvcHVsYXRlZCkpO1xuXG4gIGNvbnN0IHJlcG8gPSBSZXBvc2l0b3J5LmZvck1vZGVsKEhpc3RvcnkpLm92ZXJyaWRlKHRoaXMuX292ZXJyaWRlcyk7XG4gIGNvbnN0IHRvQ3JlYXRlID0gbmV3IEhpc3Rvcnkoe1xuICAgIHRhYmxlLFxuICAgIGtleTogcGssXG4gICAgdmVyc2lvbixcbiAgICByZWNvcmQsXG4gIH0pO1xuICBjb25zdCBvdmVycmlkZXMgPSB7XG4gICAgc3R1YjogY29udGV4dC5zdHViLFxuICAgIGlkZW50aXR5OiBjb250ZXh0LmlkZW50aXR5LFxuICAgIGxvZ2dlcjogY29udGV4dC5sb2dnZXIsXG4gICAgZnVsbHlTZWdyZWdhdGVkOiB0cnVlLFxuICB9IGFzIFBhcnRpYWw8RmFicmljQ29udHJhY3RGbGFncz47XG5cbiAgY29uc3QgaGlzdG9yeUN0eCA9IGF3YWl0IHRoaXMuYWRhcHRlci5jb250ZXh0KFxuICAgIE9wZXJhdGlvbktleXMuQ1JFQVRFLFxuICAgIG92ZXJyaWRlcyxcbiAgICBIaXN0b3J5XG4gICk7XG5cbiAgY29uc3QgaGlzdG9yeSA9IGF3YWl0IHJlcG8uY3JlYXRlKHRvQ3JlYXRlLCBoaXN0b3J5Q3R4KTtcbiAgY29udGV4dC5sb2dnZXIuaW5mbyhcbiAgICBgSGlzdG9yeSBmb3IgJHt0YWJsZX0ncyAke3BrLnRvU3RyaW5nKCl9IHZlcnNpb24gJHt2ZXJzaW9ufSBzdG9yZWQgd2l0aCBpZCAke2hpc3RvcnkuaWR9YFxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlSGlzdG9yeUhhbmRsZXI8XG4gIE0gZXh0ZW5kcyBNb2RlbCxcbiAgUiBleHRlbmRzIFJlcG9zaXRvcnk8TSwgYW55Pixcbj4oXG4gIHRoaXM6IFIsXG4gIGNvbnRleHQ6IEZhYnJpY0NvbnRyYWN0Q29udGV4dCxcbiAgZGF0YTogYW55LFxuICBrZXk6IGtleW9mIE0sXG4gIG1vZGVsOiBNXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFjb250ZXh0LmlkZW50aXR5IHx8ICFjb250ZXh0LmlkZW50aXR5LmdldElEKVxuICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBMb3N0IGNvbnRleHQgYXBwYXJlbnRseSBmb3IgaGlzdG9yeWApO1xuXG4gIGNvbnN0IHRhYmxlID0gTW9kZWwudGFibGVOYW1lKG1vZGVsKTtcbiAgY29uc3QgcGs6IFByaW1hcnlLZXlUeXBlID0gTW9kZWwucGsobW9kZWwsIHRydWUpIGFzIGFueTtcbiAgbGV0IHZlcnNpb246IG51bWJlcjtcbiAgdHJ5IHtcbiAgICB2ZXJzaW9uID0gTW9kZWwudmVyc2lvbk9mKG1vZGVsIGFzIGFueSk7XG4gIH0gY2F0Y2gge1xuICAgIGNvbnRleHQubG9nZ2VyLndhcm4oXG4gICAgICBgSGlzdG9yeSBmb3IgJHt0YWJsZX0ncyAke3BrLnRvU3RyaW5nKCl9IGNvdWxkIG5vdCBiZSBjcmVhdGVkIGR1ZSB0byBtaXNzaW5nIHZlcnNpb25gXG4gICAgKTtcbiAgICByZXR1cm47IC8vIG1vZGVsIGhhcyBubyBAdmVyc2lvbiBmaWVsZCDigJQgc2tpcCBoaXN0b3J5XG4gIH1cblxuICAvLyBQb3B1bGF0ZSByZWxhdGlvbnMgb24gYSBub24tbXV0YXRpbmcgY29weSBvZiBtb2RlbCwgdGhlbiBjb252ZXJ0IHRvIGFcbiAgLy8gcGxhaW4gb2JqZWN0IHNvIG5vIG1vZGVsLWFuY2hvciAoX19tb2RlbCkga2V5cyBhcHBlYXIgaW4gdGhlIHN0b3JlZCBKU09OLlxuICBjb25zdCBwb3B1bGF0ZWQgPSBhd2FpdCBwb3B1bGF0ZVJlbGF0aW9ucyhtb2RlbCwgY29udGV4dCwgdGhpcy5fb3ZlcnJpZGVzKTtcbiAgY29uc3QgcmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwb3B1bGF0ZWQpKTtcblxuICBjb25zdCByZXBvID0gUmVwb3NpdG9yeS5mb3JNb2RlbChIaXN0b3J5KS5vdmVycmlkZSh0aGlzLl9vdmVycmlkZXMpO1xuICBjb25zdCB0b0NyZWF0ZSA9IG5ldyBIaXN0b3J5KHtcbiAgICB0YWJsZSxcbiAgICBrZXk6IHBrLFxuICAgIHZlcnNpb24sXG4gICAgcmVjb3JkLFxuICB9KTtcbiAgY29uc3Qgb3ZlcnJpZGVzID0ge1xuICAgIHN0dWI6IGNvbnRleHQuc3R1YixcbiAgICBpZGVudGl0eTogY29udGV4dC5pZGVudGl0eSxcbiAgICBsb2dnZXI6IGNvbnRleHQubG9nZ2VyLFxuICAgIGZ1bGx5U2VncmVnYXRlZDogdHJ1ZSxcbiAgfSBhcyBQYXJ0aWFsPEZhYnJpY0NvbnRyYWN0RmxhZ3M+O1xuXG4gIGNvbnN0IGhpc3RvcnlDdHggPSBhd2FpdCB0aGlzLmFkYXB0ZXIuY29udGV4dChcbiAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICBvdmVycmlkZXMsXG4gICAgSGlzdG9yeVxuICApO1xuICBjb25zdCBoaXN0b3J5ID0gYXdhaXQgcmVwby5jcmVhdGUodG9DcmVhdGUsIGhpc3RvcnlDdHgpO1xuICBjb250ZXh0LmxvZ2dlci5pbmZvKFxuICAgIGBIaXN0b3J5IGZvciAke3RhYmxlfSdzICR7cGsudG9TdHJpbmcoKX0gdmVyc2lvbiAke3ZlcnNpb259IHN0b3JlZCB3aXRoIGlkICR7aGlzdG9yeS5pZH1gXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoaXN0b3J5RGVjKCkge1xuICByZXR1cm4gYXBwbHkoXG4gICAgb25VcGRhdGUodXBkYXRlSGlzdG9yeUhhbmRsZXIgYXMgYW55LCB7fSwgeyBwcmlvcml0eTogOTkgfSksXG4gICAgYWZ0ZXJEZWxldGUoZGVsZXRlSGlzdG9yeUhhbmRsZXIgYXMgYW55LCB7fSwgeyBwcmlvcml0eTogOTkgfSksXG4gICAgbWV0YWRhdGEoXCJoaXN0b3J5XCIsIHRydWUpXG4gICk7XG59XG4iXX0=