@decaf-ts/for-fabric 0.12.6 → 0.12.8

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 (590) hide show
  1. package/README.md +177 -146
  2. package/dist/for-fabric.cjs +2 -3797
  3. package/dist/for-fabric.cjs.map +1 -0
  4. package/dist/for-fabric.js +2 -3901
  5. package/dist/for-fabric.js.map +1 -0
  6. package/lib/cjs/bin/cli.cjs +2 -2
  7. package/lib/cjs/bin/cli.cjs.map +1 -0
  8. package/lib/cjs/cli-module.cjs +107 -3
  9. package/lib/cjs/cli-module.cjs.map +1 -0
  10. package/lib/cjs/cli-utils.cjs +2 -2
  11. package/lib/cjs/cli-utils.cjs.map +1 -0
  12. package/lib/cjs/client/FabricClientAdapter.cjs +2 -2
  13. package/lib/cjs/client/FabricClientAdapter.cjs.map +1 -0
  14. package/lib/cjs/client/FabricClientDispatch.cjs +2 -2
  15. package/lib/cjs/client/FabricClientDispatch.cjs.map +1 -0
  16. package/lib/cjs/client/FabricClientPaginator.cjs +2 -2
  17. package/lib/cjs/client/FabricClientPaginator.cjs.map +1 -0
  18. package/lib/cjs/client/FabricClientRepository.cjs +2 -2
  19. package/lib/cjs/client/FabricClientRepository.cjs.map +1 -0
  20. package/lib/cjs/client/FabricClientStatement.cjs +2 -2
  21. package/lib/cjs/client/FabricClientStatement.cjs.map +1 -0
  22. package/lib/cjs/client/collections/generation.cjs +2 -2
  23. package/lib/cjs/client/collections/generation.cjs.map +1 -0
  24. package/lib/cjs/client/collections/index.cjs +2 -2
  25. package/lib/cjs/client/collections/index.cjs.map +1 -0
  26. package/lib/cjs/client/constants.cjs +2 -2
  27. package/lib/cjs/client/constants.cjs.map +1 -0
  28. package/lib/cjs/client/crypto.cjs +2 -2
  29. package/lib/cjs/client/crypto.cjs.map +1 -0
  30. package/lib/cjs/client/erc20/FabricERC20ClientRepository.cjs +2 -2
  31. package/lib/cjs/client/erc20/FabricERC20ClientRepository.cjs.map +1 -0
  32. package/lib/cjs/client/erc20/index.cjs +2 -2
  33. package/lib/cjs/client/erc20/index.cjs.map +1 -0
  34. package/lib/cjs/client/fabric-fs.cjs +2 -2
  35. package/lib/cjs/client/fabric-fs.cjs.map +1 -0
  36. package/lib/cjs/client/fabric-hsm.cjs +2 -2
  37. package/lib/cjs/client/fabric-hsm.cjs.map +1 -0
  38. package/lib/cjs/client/ids/id-extraction.cjs +2 -2
  39. package/lib/cjs/client/ids/id-extraction.cjs.map +1 -0
  40. package/lib/cjs/client/ids/index.cjs +2 -2
  41. package/lib/cjs/client/ids/index.cjs.map +1 -0
  42. package/lib/cjs/client/index.cjs +2 -2
  43. package/lib/cjs/client/index.cjs.map +1 -0
  44. package/lib/cjs/client/indexes/generation.cjs +9 -4
  45. package/lib/cjs/client/indexes/generation.cjs.map +1 -0
  46. package/lib/cjs/client/indexes/index.cjs +2 -2
  47. package/lib/cjs/client/indexes/index.cjs.map +1 -0
  48. package/lib/cjs/client/logging.cjs +2 -2
  49. package/lib/cjs/client/logging.cjs.map +1 -0
  50. package/lib/cjs/client/services/FabricEnrollmentService.cjs +2 -2
  51. package/lib/cjs/client/services/FabricEnrollmentService.cjs.map +1 -0
  52. package/lib/cjs/client/services/FabricIdentityService.cjs +2 -2
  53. package/lib/cjs/client/services/FabricIdentityService.cjs.map +1 -0
  54. package/lib/cjs/client/services/RegistrationRequestBuilder.cjs +2 -2
  55. package/lib/cjs/client/services/RegistrationRequestBuilder.cjs.map +1 -0
  56. package/lib/cjs/client/services/constants.cjs +2 -2
  57. package/lib/cjs/client/services/constants.cjs.map +1 -0
  58. package/lib/cjs/client/services/index.cjs +2 -2
  59. package/lib/cjs/client/services/index.cjs.map +1 -0
  60. package/lib/cjs/client/types.cjs +2 -2
  61. package/lib/cjs/client/types.cjs.map +1 -0
  62. package/lib/cjs/client/utils.cjs +2 -2
  63. package/lib/cjs/client/utils.cjs.map +1 -0
  64. package/lib/cjs/contract/Address.cjs +2 -2
  65. package/lib/cjs/contract/Address.cjs.map +1 -0
  66. package/lib/cjs/contract/AddressContract.cjs +2 -2
  67. package/lib/cjs/contract/AddressContract.cjs.map +1 -0
  68. package/lib/cjs/contract/AuditContract.cjs +2 -2
  69. package/lib/cjs/contract/AuditContract.cjs.map +1 -0
  70. package/lib/cjs/contract/BatchContract.cjs +2 -2
  71. package/lib/cjs/contract/BatchContract.cjs.map +1 -0
  72. package/lib/cjs/contract/MarketContract.cjs +2 -2
  73. package/lib/cjs/contract/MarketContract.cjs.map +1 -0
  74. package/lib/cjs/contract/OtherAuditContract.cjs +2 -2
  75. package/lib/cjs/contract/OtherAuditContract.cjs.map +1 -0
  76. package/lib/cjs/contract/OtherBatchContract.cjs +2 -2
  77. package/lib/cjs/contract/OtherBatchContract.cjs.map +1 -0
  78. package/lib/cjs/contract/OtherLeafletContract.cjs +72 -0
  79. package/lib/cjs/contract/OtherLeafletContract.cjs.map +1 -0
  80. package/lib/cjs/contract/OtherLeafletFileContract.cjs +76 -0
  81. package/lib/cjs/contract/OtherLeafletFileContract.cjs.map +1 -0
  82. package/lib/cjs/contract/OtherMarketContract.cjs +2 -2
  83. package/lib/cjs/contract/OtherMarketContract.cjs.map +1 -0
  84. package/lib/cjs/contract/OtherProductContract.cjs +2 -2
  85. package/lib/cjs/contract/OtherProductContract.cjs.map +1 -0
  86. package/lib/cjs/contract/OtherProductImageContract.cjs +2 -2
  87. package/lib/cjs/contract/OtherProductImageContract.cjs.map +1 -0
  88. package/lib/cjs/contract/OtherProductSharedContract.cjs +2 -2
  89. package/lib/cjs/contract/OtherProductSharedContract.cjs.map +1 -0
  90. package/lib/cjs/contract/OtherProductStrengthContract.cjs +2 -2
  91. package/lib/cjs/contract/OtherProductStrengthContract.cjs.map +1 -0
  92. package/lib/cjs/contract/Product.cjs +2 -2
  93. package/lib/cjs/contract/Product.cjs.map +1 -0
  94. package/lib/cjs/contract/ProductContract.cjs +2 -2
  95. package/lib/cjs/contract/ProductContract.cjs.map +1 -0
  96. package/lib/cjs/contract/ProductStrengthContract.cjs +2 -2
  97. package/lib/cjs/contract/ProductStrengthContract.cjs.map +1 -0
  98. package/lib/cjs/contract/SegregatedPrivateDocumentContract.cjs +2 -2
  99. package/lib/cjs/contract/SegregatedPrivateDocumentContract.cjs.map +1 -0
  100. package/lib/cjs/contract/SegregatedSharedDocumentContract.cjs +2 -2
  101. package/lib/cjs/contract/SegregatedSharedDocumentContract.cjs.map +1 -0
  102. package/lib/cjs/contract/User.cjs +2 -2
  103. package/lib/cjs/contract/User.cjs.map +1 -0
  104. package/lib/cjs/contract/UserContract.cjs +2 -2
  105. package/lib/cjs/contract/UserContract.cjs.map +1 -0
  106. package/lib/cjs/contract/index.cjs +20 -20
  107. package/lib/cjs/contract/index.cjs.map +1 -0
  108. package/lib/cjs/contract/logging-context.cjs +2 -2
  109. package/lib/cjs/contract/logging-context.cjs.map +1 -0
  110. package/lib/cjs/contract/models/Audit.cjs +2 -2
  111. package/lib/cjs/contract/models/Audit.cjs.map +1 -0
  112. package/lib/cjs/contract/models/BaseIdentifiedModel.cjs +2 -2
  113. package/lib/cjs/contract/models/BaseIdentifiedModel.cjs.map +1 -0
  114. package/lib/cjs/contract/models/BaseModel.cjs +2 -2
  115. package/lib/cjs/contract/models/BaseModel.cjs.map +1 -0
  116. package/lib/cjs/contract/models/Batch.cjs +2 -2
  117. package/lib/cjs/contract/models/Batch.cjs.map +1 -0
  118. package/lib/cjs/contract/models/GtinOwner.cjs +2 -2
  119. package/lib/cjs/contract/models/GtinOwner.cjs.map +1 -0
  120. package/lib/cjs/contract/models/History.cjs +2 -2
  121. package/lib/cjs/contract/models/History.cjs.map +1 -0
  122. package/lib/cjs/contract/models/Leaflet.cjs +2 -2
  123. package/lib/cjs/contract/models/Leaflet.cjs.map +1 -0
  124. package/lib/cjs/contract/models/LeafletFile.cjs +2 -2
  125. package/lib/cjs/contract/models/LeafletFile.cjs.map +1 -0
  126. package/lib/cjs/contract/models/Market.cjs +2 -2
  127. package/lib/cjs/contract/models/Market.cjs.map +1 -0
  128. package/lib/cjs/contract/models/OtherAudit.cjs +3 -3
  129. package/lib/cjs/contract/models/OtherAudit.cjs.map +1 -0
  130. package/lib/cjs/contract/models/OtherBatchShared.cjs +137 -28
  131. package/lib/cjs/contract/models/OtherBatchShared.cjs.map +1 -0
  132. package/lib/cjs/contract/models/OtherLeaflet.cjs +3 -3
  133. package/lib/cjs/contract/models/OtherLeaflet.cjs.map +1 -0
  134. package/lib/cjs/contract/models/OtherLeafletFile.cjs +3 -3
  135. package/lib/cjs/contract/models/OtherLeafletFile.cjs.map +1 -0
  136. package/lib/cjs/contract/models/OtherMarket.cjs +3 -3
  137. package/lib/cjs/contract/models/OtherMarket.cjs.map +1 -0
  138. package/lib/cjs/contract/models/OtherProduct.cjs +3 -3
  139. package/lib/cjs/contract/models/OtherProduct.cjs.map +1 -0
  140. package/lib/cjs/contract/models/OtherProductImage.cjs +3 -3
  141. package/lib/cjs/contract/models/OtherProductImage.cjs.map +1 -0
  142. package/lib/cjs/contract/models/OtherProductShared.cjs +3 -3
  143. package/lib/cjs/contract/models/OtherProductShared.cjs.map +1 -0
  144. package/lib/cjs/contract/models/OtherProductStrength.cjs +3 -5
  145. package/lib/cjs/contract/models/OtherProductStrength.cjs.map +1 -0
  146. package/lib/cjs/contract/models/Product.cjs +2 -2
  147. package/lib/cjs/contract/models/Product.cjs.map +1 -0
  148. package/lib/cjs/contract/models/ProductStrength.cjs +2 -2
  149. package/lib/cjs/contract/models/ProductStrength.cjs.map +1 -0
  150. package/lib/cjs/contract/models/SegregatedDocument.cjs +2 -2
  151. package/lib/cjs/contract/models/SegregatedDocument.cjs.map +1 -0
  152. package/lib/cjs/contract/models/constants.cjs +2 -2
  153. package/lib/cjs/contract/models/constants.cjs.map +1 -0
  154. package/lib/cjs/contract/models/decorators-private.cjs +2 -2
  155. package/lib/cjs/contract/models/decorators-private.cjs.map +1 -0
  156. package/lib/cjs/contract/models/decorators.cjs +2 -2
  157. package/lib/cjs/contract/models/decorators.cjs.map +1 -0
  158. package/lib/cjs/contract/models/gtin.cjs +2 -2
  159. package/lib/cjs/contract/models/gtin.cjs.map +1 -0
  160. package/lib/cjs/contract/models/history-dec.cjs +2 -2
  161. package/lib/cjs/contract/models/history-dec.cjs.map +1 -0
  162. package/lib/cjs/contract/trackedModels/History.cjs +81 -0
  163. package/lib/cjs/contract/trackedModels/History.cjs.map +1 -0
  164. package/lib/cjs/contract/trackedModels/OtherAudit.cjs +124 -0
  165. package/lib/cjs/contract/trackedModels/OtherAudit.cjs.map +1 -0
  166. package/lib/cjs/contract/trackedModels/OtherLeaflet.cjs +121 -0
  167. package/lib/cjs/contract/trackedModels/OtherLeaflet.cjs.map +1 -0
  168. package/lib/cjs/contract/trackedModels/OtherLeafletFile.cjs +71 -0
  169. package/lib/cjs/contract/trackedModels/OtherLeafletFile.cjs.map +1 -0
  170. package/lib/cjs/contract/trackedModels/OtherMarket.cjs +90 -0
  171. package/lib/cjs/contract/trackedModels/OtherMarket.cjs.map +1 -0
  172. package/lib/cjs/contract/trackedModels/OtherProduct.cjs +83 -0
  173. package/lib/cjs/contract/trackedModels/OtherProduct.cjs.map +1 -0
  174. package/lib/cjs/contract/trackedModels/OtherProductImage.cjs +65 -0
  175. package/lib/cjs/contract/trackedModels/OtherProductImage.cjs.map +1 -0
  176. package/lib/cjs/contract/trackedModels/OtherProductShared.cjs +105 -0
  177. package/lib/cjs/contract/trackedModels/OtherProductShared.cjs.map +1 -0
  178. package/lib/cjs/contract/trackedModels/OtherProductStrength.cjs +91 -0
  179. package/lib/cjs/contract/trackedModels/OtherProductStrength.cjs.map +1 -0
  180. package/lib/cjs/contracts/ContractAdapter.cjs +2 -2
  181. package/lib/cjs/contracts/ContractAdapter.cjs.map +1 -0
  182. package/lib/cjs/contracts/ContractContext.cjs +2 -2
  183. package/lib/cjs/contracts/ContractContext.cjs.map +1 -0
  184. package/lib/cjs/contracts/FabricContractDispatch.cjs +2 -2
  185. package/lib/cjs/contracts/FabricContractDispatch.cjs.map +1 -0
  186. package/lib/cjs/contracts/FabricContractPaginator.cjs +2 -2
  187. package/lib/cjs/contracts/FabricContractPaginator.cjs.map +1 -0
  188. package/lib/cjs/contracts/FabricContractRepository.cjs +2 -2
  189. package/lib/cjs/contracts/FabricContractRepository.cjs.map +1 -0
  190. package/lib/cjs/contracts/FabricContractRepositoryObservableHandler.cjs +2 -2
  191. package/lib/cjs/contracts/FabricContractRepositoryObservableHandler.cjs.map +1 -0
  192. package/lib/cjs/contracts/FabricContractSequence.cjs +2 -2
  193. package/lib/cjs/contracts/FabricContractSequence.cjs.map +1 -0
  194. package/lib/cjs/contracts/FabricContractStatement.cjs +2 -2
  195. package/lib/cjs/contracts/FabricContractStatement.cjs.map +1 -0
  196. package/lib/cjs/contracts/MigrationContract.cjs +2 -2
  197. package/lib/cjs/contracts/MigrationContract.cjs.map +1 -0
  198. package/lib/cjs/contracts/PrivateSequence.cjs +2 -2
  199. package/lib/cjs/contracts/PrivateSequence.cjs.map +1 -0
  200. package/lib/cjs/contracts/auth/decorators.cjs +2 -2
  201. package/lib/cjs/contracts/auth/decorators.cjs.map +1 -0
  202. package/lib/cjs/contracts/auth/index.cjs +2 -2
  203. package/lib/cjs/contracts/auth/index.cjs.map +1 -0
  204. package/lib/cjs/contracts/bootstrap.cjs +14 -0
  205. package/lib/cjs/contracts/bootstrap.cjs.map +1 -0
  206. package/lib/cjs/contracts/crud/crud-contract.cjs +3 -2
  207. package/lib/cjs/contracts/crud/crud-contract.cjs.map +1 -0
  208. package/lib/cjs/contracts/crud/index.cjs +2 -2
  209. package/lib/cjs/contracts/crud/index.cjs.map +1 -0
  210. package/lib/cjs/contracts/crud/serialized-crud-contract.cjs +2 -2
  211. package/lib/cjs/contracts/crud/serialized-crud-contract.cjs.map +1 -0
  212. package/lib/cjs/contracts/erc20/erc20contract.cjs +2 -2
  213. package/lib/cjs/contracts/erc20/erc20contract.cjs.map +1 -0
  214. package/lib/cjs/contracts/erc20/index.cjs +2 -2
  215. package/lib/cjs/contracts/erc20/index.cjs.map +1 -0
  216. package/lib/cjs/contracts/erc20/models.cjs +2 -2
  217. package/lib/cjs/contracts/erc20/models.cjs.map +1 -0
  218. package/lib/cjs/contracts/fabric-overrides.cjs +65 -0
  219. package/lib/cjs/contracts/fabric-overrides.cjs.map +1 -0
  220. package/lib/cjs/contracts/index.cjs +3 -2
  221. package/lib/cjs/contracts/index.cjs.map +1 -0
  222. package/lib/cjs/contracts/logging.cjs +2 -2
  223. package/lib/cjs/contracts/logging.cjs.map +1 -0
  224. package/lib/cjs/contracts/overrides.cjs +2 -2
  225. package/lib/cjs/contracts/overrides.cjs.map +1 -0
  226. package/lib/cjs/contracts/types.cjs +2 -2
  227. package/lib/cjs/contracts/types.cjs.map +1 -0
  228. package/lib/cjs/contracts/uuid.cjs +2 -2
  229. package/lib/cjs/contracts/uuid.cjs.map +1 -0
  230. package/lib/cjs/index.cjs +2 -2
  231. package/lib/cjs/index.cjs.map +1 -0
  232. package/lib/cjs/shared/ClientSerializer.cjs +2 -2
  233. package/lib/cjs/shared/ClientSerializer.cjs.map +1 -0
  234. package/lib/cjs/shared/DeterministicSerializer.cjs +2 -2
  235. package/lib/cjs/shared/DeterministicSerializer.cjs.map +1 -0
  236. package/lib/cjs/shared/SimpleDeterministicSerializer.cjs +2 -2
  237. package/lib/cjs/shared/SimpleDeterministicSerializer.cjs.map +1 -0
  238. package/lib/cjs/shared/constants.cjs +2 -2
  239. package/lib/cjs/shared/constants.cjs.map +1 -0
  240. package/lib/cjs/shared/decorators.cjs +2 -2
  241. package/lib/cjs/shared/decorators.cjs.map +1 -0
  242. package/lib/cjs/shared/erc20/erc20-constants.cjs +2 -2
  243. package/lib/cjs/shared/erc20/erc20-constants.cjs.map +1 -0
  244. package/lib/cjs/shared/erc20/index.cjs +2 -2
  245. package/lib/cjs/shared/erc20/index.cjs.map +1 -0
  246. package/lib/cjs/shared/errors.cjs +2 -2
  247. package/lib/cjs/shared/errors.cjs.map +1 -0
  248. package/lib/cjs/shared/events.cjs +2 -2
  249. package/lib/cjs/shared/events.cjs.map +1 -0
  250. package/lib/cjs/shared/fabric-types.cjs +2 -2
  251. package/lib/cjs/shared/fabric-types.cjs.map +1 -0
  252. package/lib/cjs/shared/index.cjs +2 -2
  253. package/lib/cjs/shared/index.cjs.map +1 -0
  254. package/lib/cjs/shared/interfaces/Checkable.cjs +2 -2
  255. package/lib/cjs/shared/interfaces/Checkable.cjs.map +1 -0
  256. package/lib/cjs/shared/interfaces/index.cjs +2 -2
  257. package/lib/cjs/shared/interfaces/index.cjs.map +1 -0
  258. package/lib/cjs/shared/math.cjs +2 -2
  259. package/lib/cjs/shared/math.cjs.map +1 -0
  260. package/lib/cjs/shared/model/FabricBaseModel.cjs +2 -2
  261. package/lib/cjs/shared/model/FabricBaseModel.cjs.map +1 -0
  262. package/lib/cjs/shared/model/FabricIdentifiedBaseModel.cjs +2 -2
  263. package/lib/cjs/shared/model/FabricIdentifiedBaseModel.cjs.map +1 -0
  264. package/lib/cjs/shared/model/Identity.cjs +2 -2
  265. package/lib/cjs/shared/model/Identity.cjs.map +1 -0
  266. package/lib/cjs/shared/model/IdentityCredentials.cjs +2 -2
  267. package/lib/cjs/shared/model/IdentityCredentials.cjs.map +1 -0
  268. package/lib/cjs/shared/model/index.cjs +2 -2
  269. package/lib/cjs/shared/model/index.cjs.map +1 -0
  270. package/lib/cjs/shared/overrides/Model.cjs +2 -2
  271. package/lib/cjs/shared/overrides/Model.cjs.map +1 -0
  272. package/lib/cjs/shared/overrides/index.cjs +2 -2
  273. package/lib/cjs/shared/overrides/index.cjs.map +1 -0
  274. package/lib/cjs/shared/overrides/overrides.cjs +2 -2
  275. package/lib/cjs/shared/overrides/overrides.cjs.map +1 -0
  276. package/lib/cjs/shared/types.cjs +2 -2
  277. package/lib/cjs/shared/types.cjs.map +1 -0
  278. package/lib/cjs/version.cjs +3 -3
  279. package/lib/cjs/version.cjs.map +1 -0
  280. package/lib/esm/bin/cli.js +1 -1
  281. package/lib/esm/bin/cli.js.map +1 -0
  282. package/lib/esm/cli-module.js +106 -2
  283. package/lib/esm/cli-module.js.map +1 -0
  284. package/lib/esm/cli-utils.js +1 -1
  285. package/lib/esm/cli-utils.js.map +1 -0
  286. package/lib/esm/client/FabricClientAdapter.js +1 -1
  287. package/lib/esm/client/FabricClientAdapter.js.map +1 -0
  288. package/lib/esm/client/FabricClientDispatch.js +1 -1
  289. package/lib/esm/client/FabricClientDispatch.js.map +1 -0
  290. package/lib/esm/client/FabricClientPaginator.js +1 -1
  291. package/lib/esm/client/FabricClientPaginator.js.map +1 -0
  292. package/lib/esm/client/FabricClientRepository.js +1 -1
  293. package/lib/esm/client/FabricClientRepository.js.map +1 -0
  294. package/lib/esm/client/FabricClientStatement.js +1 -1
  295. package/lib/esm/client/FabricClientStatement.js.map +1 -0
  296. package/lib/esm/client/collections/generation.js +1 -1
  297. package/lib/esm/client/collections/generation.js.map +1 -0
  298. package/lib/esm/client/collections/index.js +1 -1
  299. package/lib/esm/client/collections/index.js.map +1 -0
  300. package/lib/esm/client/constants.js +1 -1
  301. package/lib/esm/client/constants.js.map +1 -0
  302. package/lib/esm/client/crypto.js +1 -1
  303. package/lib/esm/client/crypto.js.map +1 -0
  304. package/lib/esm/client/erc20/FabricERC20ClientRepository.js +1 -1
  305. package/lib/esm/client/erc20/FabricERC20ClientRepository.js.map +1 -0
  306. package/lib/esm/client/erc20/index.js +1 -1
  307. package/lib/esm/client/erc20/index.js.map +1 -0
  308. package/lib/esm/client/fabric-fs.js +1 -1
  309. package/lib/esm/client/fabric-fs.js.map +1 -0
  310. package/lib/esm/client/fabric-hsm.js +1 -1
  311. package/lib/esm/client/fabric-hsm.js.map +1 -0
  312. package/lib/esm/client/ids/id-extraction.js +1 -1
  313. package/lib/esm/client/ids/id-extraction.js.map +1 -0
  314. package/lib/esm/client/ids/index.js +1 -1
  315. package/lib/esm/client/ids/index.js.map +1 -0
  316. package/lib/esm/client/index.js +1 -1
  317. package/lib/esm/client/index.js.map +1 -0
  318. package/lib/esm/client/indexes/generation.js +8 -3
  319. package/lib/esm/client/indexes/generation.js.map +1 -0
  320. package/lib/esm/client/indexes/index.js +1 -1
  321. package/lib/esm/client/indexes/index.js.map +1 -0
  322. package/lib/esm/client/logging.js +1 -1
  323. package/lib/esm/client/logging.js.map +1 -0
  324. package/lib/esm/client/services/FabricEnrollmentService.js +1 -1
  325. package/lib/esm/client/services/FabricEnrollmentService.js.map +1 -0
  326. package/lib/esm/client/services/FabricIdentityService.js +1 -1
  327. package/lib/esm/client/services/FabricIdentityService.js.map +1 -0
  328. package/lib/esm/client/services/RegistrationRequestBuilder.js +1 -1
  329. package/lib/esm/client/services/RegistrationRequestBuilder.js.map +1 -0
  330. package/lib/esm/client/services/constants.js +1 -1
  331. package/lib/esm/client/services/constants.js.map +1 -0
  332. package/lib/esm/client/services/index.js +1 -1
  333. package/lib/esm/client/services/index.js.map +1 -0
  334. package/lib/esm/client/types.js +1 -1
  335. package/lib/esm/client/types.js.map +1 -0
  336. package/lib/esm/client/utils.js +1 -1
  337. package/lib/esm/client/utils.js.map +1 -0
  338. package/lib/esm/contract/Address.js +1 -1
  339. package/lib/esm/contract/Address.js.map +1 -0
  340. package/lib/esm/contract/AddressContract.js +1 -1
  341. package/lib/esm/contract/AddressContract.js.map +1 -0
  342. package/lib/esm/contract/AuditContract.js +1 -1
  343. package/lib/esm/contract/AuditContract.js.map +1 -0
  344. package/lib/esm/contract/BatchContract.js +1 -1
  345. package/lib/esm/contract/BatchContract.js.map +1 -0
  346. package/lib/esm/contract/MarketContract.js +1 -1
  347. package/lib/esm/contract/MarketContract.js.map +1 -0
  348. package/lib/esm/contract/OtherAuditContract.js +1 -1
  349. package/lib/esm/contract/OtherAuditContract.js.map +1 -0
  350. package/lib/esm/contract/OtherBatchContract.js +1 -1
  351. package/lib/esm/contract/OtherBatchContract.js.map +1 -0
  352. package/lib/esm/contract/OtherLeafletContract.js +63 -0
  353. package/lib/esm/contract/OtherLeafletContract.js.map +1 -0
  354. package/lib/esm/contract/OtherLeafletFileContract.js +67 -0
  355. package/lib/esm/contract/OtherLeafletFileContract.js.map +1 -0
  356. package/lib/esm/contract/OtherMarketContract.js +1 -1
  357. package/lib/esm/contract/OtherMarketContract.js.map +1 -0
  358. package/lib/esm/contract/OtherProductContract.js +1 -1
  359. package/lib/esm/contract/OtherProductContract.js.map +1 -0
  360. package/lib/esm/contract/OtherProductImageContract.js +1 -1
  361. package/lib/esm/contract/OtherProductImageContract.js.map +1 -0
  362. package/lib/esm/contract/OtherProductSharedContract.js +1 -1
  363. package/lib/esm/contract/OtherProductSharedContract.js.map +1 -0
  364. package/lib/esm/contract/OtherProductStrengthContract.js +1 -1
  365. package/lib/esm/contract/OtherProductStrengthContract.js.map +1 -0
  366. package/lib/esm/contract/Product.js +1 -1
  367. package/lib/esm/contract/Product.js.map +1 -0
  368. package/lib/esm/contract/ProductContract.js +1 -1
  369. package/lib/esm/contract/ProductContract.js.map +1 -0
  370. package/lib/esm/contract/ProductStrengthContract.js +1 -1
  371. package/lib/esm/contract/ProductStrengthContract.js.map +1 -0
  372. package/lib/esm/contract/SegregatedPrivateDocumentContract.js +1 -1
  373. package/lib/esm/contract/SegregatedPrivateDocumentContract.js.map +1 -0
  374. package/lib/esm/contract/SegregatedSharedDocumentContract.js +1 -1
  375. package/lib/esm/contract/SegregatedSharedDocumentContract.js.map +1 -0
  376. package/lib/esm/contract/User.js +1 -1
  377. package/lib/esm/contract/User.js.map +1 -0
  378. package/lib/esm/contract/UserContract.js +1 -1
  379. package/lib/esm/contract/UserContract.js.map +1 -0
  380. package/lib/esm/contract/index.js +19 -19
  381. package/lib/esm/contract/index.js.map +1 -0
  382. package/lib/esm/contract/logging-context.js +1 -1
  383. package/lib/esm/contract/logging-context.js.map +1 -0
  384. package/lib/esm/contract/models/Audit.js +1 -1
  385. package/lib/esm/contract/models/Audit.js.map +1 -0
  386. package/lib/esm/contract/models/BaseIdentifiedModel.js +1 -1
  387. package/lib/esm/contract/models/BaseIdentifiedModel.js.map +1 -0
  388. package/lib/esm/contract/models/BaseModel.js +1 -1
  389. package/lib/esm/contract/models/BaseModel.js.map +1 -0
  390. package/lib/esm/contract/models/Batch.js +1 -1
  391. package/lib/esm/contract/models/Batch.js.map +1 -0
  392. package/lib/esm/contract/models/GtinOwner.js +1 -1
  393. package/lib/esm/contract/models/GtinOwner.js.map +1 -0
  394. package/lib/esm/contract/models/History.js +1 -1
  395. package/lib/esm/contract/models/History.js.map +1 -0
  396. package/lib/esm/contract/models/Leaflet.js +1 -1
  397. package/lib/esm/contract/models/Leaflet.js.map +1 -0
  398. package/lib/esm/contract/models/LeafletFile.js +1 -1
  399. package/lib/esm/contract/models/LeafletFile.js.map +1 -0
  400. package/lib/esm/contract/models/Market.js +1 -1
  401. package/lib/esm/contract/models/Market.js.map +1 -0
  402. package/lib/esm/contract/models/OtherAudit.js +2 -2
  403. package/lib/esm/contract/models/OtherAudit.js.map +1 -0
  404. package/lib/esm/contract/models/OtherBatchShared.js +139 -31
  405. package/lib/esm/contract/models/OtherBatchShared.js.map +1 -0
  406. package/lib/esm/contract/models/OtherLeaflet.js +2 -2
  407. package/lib/esm/contract/models/OtherLeaflet.js.map +1 -0
  408. package/lib/esm/contract/models/OtherLeafletFile.js +2 -2
  409. package/lib/esm/contract/models/OtherLeafletFile.js.map +1 -0
  410. package/lib/esm/contract/models/OtherMarket.js +2 -2
  411. package/lib/esm/contract/models/OtherMarket.js.map +1 -0
  412. package/lib/esm/contract/models/OtherProduct.js +2 -2
  413. package/lib/esm/contract/models/OtherProduct.js.map +1 -0
  414. package/lib/esm/contract/models/OtherProductImage.js +2 -2
  415. package/lib/esm/contract/models/OtherProductImage.js.map +1 -0
  416. package/lib/esm/contract/models/OtherProductShared.js +2 -2
  417. package/lib/esm/contract/models/OtherProductShared.js.map +1 -0
  418. package/lib/esm/contract/models/OtherProductStrength.js +2 -4
  419. package/lib/esm/contract/models/OtherProductStrength.js.map +1 -0
  420. package/lib/esm/contract/models/Product.js +1 -1
  421. package/lib/esm/contract/models/Product.js.map +1 -0
  422. package/lib/esm/contract/models/ProductStrength.js +1 -1
  423. package/lib/esm/contract/models/ProductStrength.js.map +1 -0
  424. package/lib/esm/contract/models/SegregatedDocument.js +1 -1
  425. package/lib/esm/contract/models/SegregatedDocument.js.map +1 -0
  426. package/lib/esm/contract/models/constants.js +1 -1
  427. package/lib/esm/contract/models/constants.js.map +1 -0
  428. package/lib/esm/contract/models/decorators-private.js +1 -1
  429. package/lib/esm/contract/models/decorators-private.js.map +1 -0
  430. package/lib/esm/contract/models/decorators.js +1 -1
  431. package/lib/esm/contract/models/decorators.js.map +1 -0
  432. package/lib/esm/contract/models/gtin.js +1 -1
  433. package/lib/esm/contract/models/gtin.js.map +1 -0
  434. package/lib/esm/contract/models/history-dec.js +1 -1
  435. package/lib/esm/contract/models/history-dec.js.map +1 -0
  436. package/lib/esm/contract/trackedModels/History.js +72 -0
  437. package/lib/esm/contract/trackedModels/History.js.map +1 -0
  438. package/lib/esm/contract/trackedModels/OtherAudit.js +115 -0
  439. package/lib/esm/contract/trackedModels/OtherAudit.js.map +1 -0
  440. package/lib/esm/contract/trackedModels/OtherLeaflet.js +112 -0
  441. package/lib/esm/contract/trackedModels/OtherLeaflet.js.map +1 -0
  442. package/lib/esm/contract/trackedModels/OtherLeafletFile.js +62 -0
  443. package/lib/esm/contract/trackedModels/OtherLeafletFile.js.map +1 -0
  444. package/lib/esm/contract/trackedModels/OtherMarket.js +81 -0
  445. package/lib/esm/contract/trackedModels/OtherMarket.js.map +1 -0
  446. package/lib/esm/contract/trackedModels/OtherProduct.js +74 -0
  447. package/lib/esm/contract/trackedModels/OtherProduct.js.map +1 -0
  448. package/lib/esm/contract/trackedModels/OtherProductImage.js +56 -0
  449. package/lib/esm/contract/trackedModels/OtherProductImage.js.map +1 -0
  450. package/lib/esm/contract/trackedModels/OtherProductShared.js +96 -0
  451. package/lib/esm/contract/trackedModels/OtherProductShared.js.map +1 -0
  452. package/lib/esm/contract/trackedModels/OtherProductStrength.js +82 -0
  453. package/lib/esm/contract/trackedModels/OtherProductStrength.js.map +1 -0
  454. package/lib/esm/contracts/ContractAdapter.js +1 -1
  455. package/lib/esm/contracts/ContractAdapter.js.map +1 -0
  456. package/lib/esm/contracts/ContractContext.js +1 -1
  457. package/lib/esm/contracts/ContractContext.js.map +1 -0
  458. package/lib/esm/contracts/FabricContractDispatch.js +1 -1
  459. package/lib/esm/contracts/FabricContractDispatch.js.map +1 -0
  460. package/lib/esm/contracts/FabricContractPaginator.js +1 -1
  461. package/lib/esm/contracts/FabricContractPaginator.js.map +1 -0
  462. package/lib/esm/contracts/FabricContractRepository.js +1 -1
  463. package/lib/esm/contracts/FabricContractRepository.js.map +1 -0
  464. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +1 -1
  465. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js.map +1 -0
  466. package/lib/esm/contracts/FabricContractSequence.js +1 -1
  467. package/lib/esm/contracts/FabricContractSequence.js.map +1 -0
  468. package/lib/esm/contracts/FabricContractStatement.js +1 -1
  469. package/lib/esm/contracts/FabricContractStatement.js.map +1 -0
  470. package/lib/esm/contracts/MigrationContract.js +1 -1
  471. package/lib/esm/contracts/MigrationContract.js.map +1 -0
  472. package/lib/esm/contracts/PrivateSequence.js +1 -1
  473. package/lib/esm/contracts/PrivateSequence.js.map +1 -0
  474. package/lib/esm/contracts/auth/decorators.js +1 -1
  475. package/lib/esm/contracts/auth/decorators.js.map +1 -0
  476. package/lib/esm/contracts/auth/index.js +1 -1
  477. package/lib/esm/contracts/auth/index.js.map +1 -0
  478. package/lib/esm/contracts/bootstrap.js +11 -0
  479. package/lib/esm/contracts/bootstrap.js.map +1 -0
  480. package/lib/esm/contracts/crud/crud-contract.js +2 -1
  481. package/lib/esm/contracts/crud/crud-contract.js.map +1 -0
  482. package/lib/esm/contracts/crud/index.js +1 -1
  483. package/lib/esm/contracts/crud/index.js.map +1 -0
  484. package/lib/esm/contracts/crud/serialized-crud-contract.js +1 -1
  485. package/lib/esm/contracts/crud/serialized-crud-contract.js.map +1 -0
  486. package/lib/esm/contracts/erc20/erc20contract.js +1 -1
  487. package/lib/esm/contracts/erc20/erc20contract.js.map +1 -0
  488. package/lib/esm/contracts/erc20/index.js +1 -1
  489. package/lib/esm/contracts/erc20/index.js.map +1 -0
  490. package/lib/esm/contracts/erc20/models.js +1 -1
  491. package/lib/esm/contracts/erc20/models.js.map +1 -0
  492. package/lib/esm/contracts/fabric-overrides.js +61 -0
  493. package/lib/esm/contracts/fabric-overrides.js.map +1 -0
  494. package/lib/esm/contracts/index.js +2 -1
  495. package/lib/esm/contracts/index.js.map +1 -0
  496. package/lib/esm/contracts/logging.js +1 -1
  497. package/lib/esm/contracts/logging.js.map +1 -0
  498. package/lib/esm/contracts/overrides.js +1 -1
  499. package/lib/esm/contracts/overrides.js.map +1 -0
  500. package/lib/esm/contracts/types.js +1 -1
  501. package/lib/esm/contracts/types.js.map +1 -0
  502. package/lib/esm/contracts/uuid.js +1 -1
  503. package/lib/esm/contracts/uuid.js.map +1 -0
  504. package/lib/esm/index.js +1 -1
  505. package/lib/esm/index.js.map +1 -0
  506. package/lib/esm/shared/ClientSerializer.js +1 -1
  507. package/lib/esm/shared/ClientSerializer.js.map +1 -0
  508. package/lib/esm/shared/DeterministicSerializer.js +1 -1
  509. package/lib/esm/shared/DeterministicSerializer.js.map +1 -0
  510. package/lib/esm/shared/SimpleDeterministicSerializer.js +1 -1
  511. package/lib/esm/shared/SimpleDeterministicSerializer.js.map +1 -0
  512. package/lib/esm/shared/constants.js +1 -1
  513. package/lib/esm/shared/constants.js.map +1 -0
  514. package/lib/esm/shared/decorators.js +1 -1
  515. package/lib/esm/shared/decorators.js.map +1 -0
  516. package/lib/esm/shared/erc20/erc20-constants.js +1 -1
  517. package/lib/esm/shared/erc20/erc20-constants.js.map +1 -0
  518. package/lib/esm/shared/erc20/index.js +1 -1
  519. package/lib/esm/shared/erc20/index.js.map +1 -0
  520. package/lib/esm/shared/errors.js +1 -1
  521. package/lib/esm/shared/errors.js.map +1 -0
  522. package/lib/esm/shared/events.js +1 -1
  523. package/lib/esm/shared/events.js.map +1 -0
  524. package/lib/esm/shared/fabric-types.js +1 -1
  525. package/lib/esm/shared/fabric-types.js.map +1 -0
  526. package/lib/esm/shared/index.js +1 -1
  527. package/lib/esm/shared/index.js.map +1 -0
  528. package/lib/esm/shared/interfaces/Checkable.js +1 -1
  529. package/lib/esm/shared/interfaces/Checkable.js.map +1 -0
  530. package/lib/esm/shared/interfaces/index.js +1 -1
  531. package/lib/esm/shared/interfaces/index.js.map +1 -0
  532. package/lib/esm/shared/math.js +1 -1
  533. package/lib/esm/shared/math.js.map +1 -0
  534. package/lib/esm/shared/model/FabricBaseModel.js +1 -1
  535. package/lib/esm/shared/model/FabricBaseModel.js.map +1 -0
  536. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js +1 -1
  537. package/lib/esm/shared/model/FabricIdentifiedBaseModel.js.map +1 -0
  538. package/lib/esm/shared/model/Identity.js +1 -1
  539. package/lib/esm/shared/model/Identity.js.map +1 -0
  540. package/lib/esm/shared/model/IdentityCredentials.js +1 -1
  541. package/lib/esm/shared/model/IdentityCredentials.js.map +1 -0
  542. package/lib/esm/shared/model/index.js +1 -1
  543. package/lib/esm/shared/model/index.js.map +1 -0
  544. package/lib/esm/shared/overrides/Model.js +1 -1
  545. package/lib/esm/shared/overrides/Model.js.map +1 -0
  546. package/lib/esm/shared/overrides/index.js +1 -1
  547. package/lib/esm/shared/overrides/index.js.map +1 -0
  548. package/lib/esm/shared/overrides/overrides.js +1 -1
  549. package/lib/esm/shared/overrides/overrides.js.map +1 -0
  550. package/lib/esm/shared/types.js +1 -1
  551. package/lib/esm/shared/types.js.map +1 -0
  552. package/lib/esm/version.js +2 -2
  553. package/lib/esm/version.js.map +1 -0
  554. package/lib/types/contract/OtherLeafletContract.d.cts +18 -0
  555. package/lib/types/contract/OtherLeafletContract.d.mts +18 -0
  556. package/lib/types/contract/OtherLeafletFileContract.d.cts +17 -0
  557. package/lib/types/contract/OtherLeafletFileContract.d.mts +17 -0
  558. package/lib/types/contract/index.d.cts +1 -0
  559. package/lib/types/contract/index.d.mts +1 -0
  560. package/lib/types/contract/models/OtherBatchShared.d.cts +43 -6
  561. package/lib/types/contract/models/OtherBatchShared.d.mts +43 -6
  562. package/lib/types/contract/trackedModels/History.d.cts +9 -0
  563. package/lib/types/contract/trackedModels/History.d.mts +9 -0
  564. package/lib/types/contract/trackedModels/OtherAudit.d.cts +15 -0
  565. package/lib/types/contract/trackedModels/OtherAudit.d.mts +15 -0
  566. package/lib/types/contract/trackedModels/OtherLeaflet.d.cts +16 -0
  567. package/lib/types/contract/trackedModels/OtherLeaflet.d.mts +16 -0
  568. package/lib/types/contract/trackedModels/OtherLeafletFile.d.cts +10 -0
  569. package/lib/types/contract/trackedModels/OtherLeafletFile.d.mts +10 -0
  570. package/lib/types/contract/trackedModels/OtherMarket.d.cts +13 -0
  571. package/lib/types/contract/trackedModels/OtherMarket.d.mts +13 -0
  572. package/lib/types/contract/trackedModels/OtherProduct.d.cts +12 -0
  573. package/lib/types/contract/trackedModels/OtherProduct.d.mts +12 -0
  574. package/lib/types/contract/trackedModels/OtherProductImage.d.cts +9 -0
  575. package/lib/types/contract/trackedModels/OtherProductImage.d.mts +9 -0
  576. package/lib/types/contract/trackedModels/OtherProductShared.d.cts +18 -0
  577. package/lib/types/contract/trackedModels/OtherProductShared.d.mts +18 -0
  578. package/lib/types/contract/trackedModels/OtherProductStrength.d.cts +12 -0
  579. package/lib/types/contract/trackedModels/OtherProductStrength.d.mts +12 -0
  580. package/lib/types/contracts/bootstrap.d.cts +10 -0
  581. package/lib/types/contracts/bootstrap.d.mts +10 -0
  582. package/lib/types/contracts/crud/crud-contract.d.cts +1 -0
  583. package/lib/types/contracts/crud/crud-contract.d.mts +1 -0
  584. package/lib/types/contracts/fabric-overrides.d.cts +1 -0
  585. package/lib/types/contracts/fabric-overrides.d.mts +1 -0
  586. package/lib/types/contracts/index.d.cts +1 -0
  587. package/lib/types/contracts/index.d.mts +1 -0
  588. package/lib/types/version.d.cts +1 -1
  589. package/lib/types/version.d.mts +1 -1
  590. package/package.json +31 -5
package/README.md CHANGED
@@ -1,11 +1,11 @@
1
1
  ![Banner](./workdocs/assets/decaf-logo.svg)
2
+
2
3
  ## Hyperledger Fabric Contracts for DECAF
3
4
 
4
5
  Chaincode-side building blocks for Hyperledger Fabric written in TypeScript. This module provides repositories, CRUD contracts (object and serialized JSON), an ERC20 sample contract, Fabric-backed sequences, event emission, and context-aware logging. It adapts DECAF’s data-access patterns to Fabric’s world-state so you can write smart contracts with the same Repository/Model abstractions used elsewhere in DECAF.
5
6
 
6
7
  > Release docs refreshed on 2025-11-26. See [workdocs/reports/RELEASE_NOTES.md](./workdocs/reports/RELEASE_NOTES.md) for ticket summaries.
7
8
 
8
-
9
9
  ![Licence](https://img.shields.io/github/license/decaf-ts/for-fabric.svg?style=plastic)
10
10
  ![GitHub language count](https://img.shields.io/github/languages/count/decaf-ts/for-fabric?style=plastic)
11
11
  ![GitHub top language](https://img.shields.io/github/languages/top/decaf-ts/for-fabric?style=plastic)
@@ -34,6 +34,7 @@ Documentation available [here](https://decaf-ts.github.io/for-fabric/)
34
34
  This module focuses on the chaincode (contracts) side of @decaf-ts/for-fabric. It adapts DECAF’s Repository/Model/Adapter abstractions to Hyperledger Fabric’s world state and execution context so you can implement smart contracts with familiar patterns and minimal boilerplate.
35
35
 
36
36
  Key ideas:
37
+
37
38
  - Keep your domain models as annotated classes (using @decaf-ts/decorator-validation).
38
39
  - Use a Repository to persist/read/query models through a Fabric-aware Adapter.
39
40
  - Compose reusable CRUD contracts and utilities instead of hand-writing stub calls.
@@ -42,31 +43,38 @@ Key ideas:
42
43
 
43
44
  Contracts building blocks identified in src/contracts:
44
45
 
45
- 1) Core context and types
46
+ 1. Core context and types
47
+
46
48
  - FabricContractContext: Extends the generic Context to expose Fabric-specific properties (stub, clientIdentity, logger) and timestamp resolution from the ledger.
47
49
  - FabricContractFlags: Interface extending RepositoryFlags with stub, clientIdentity and logger for contract calls.
48
50
 
49
- 2) Logging
51
+ 2. Logging
52
+
50
53
  - ContractLogger: MiniLogger-compatible logger bound to the Fabric contract Context. It honors log levels and forwards to the underlying Fabric logger.
51
54
 
52
- 3) Adapter and repository
55
+ 3. Adapter and repository
56
+
53
57
  - FabricContractAdapter: Chaincode-side Adapter that implements CRUD, bulk operations, raw Mango queries, result iteration, model preparation/reversion, composite-key prefixes, and sequence creation. Bridges DECAF abstractions to Fabric (ChaincodeStub, ClientIdentity) and CouchDB-style queries.
54
58
  - FabricContractRepository<M>: Repository for models inside chaincode. Supports create, update, createAll, updateAll, read/readAll, raw queries (Mango), select projections, prefix-based bulk ops, and event emission through an ObserverHandler.
55
59
  - FabricContractRepositoryObservableHandler: ObserverHandler that emits Fabric events via stub.setEvent using names generated by generateFabricEventName.
56
60
 
57
- 4) Sequences
61
+ 4. Sequences
62
+
58
63
  - FabricContractDBSequence: Fabric-backed implementation of Sequence with current, next and range. Stores values in the world state via FabricContractRepository and supports Number or BigInt sequences with configurable startWith and incrementBy.
59
64
 
60
- 5) CRUD contracts
65
+ 5. CRUD contracts
66
+
61
67
  - FabricCrudContract<M>: Base smart contract exposing CRUD endpoints (create, read, update, delete, createAll, readAll, updateAll, deleteAll, raw, init, healthcheck) for a model type. Uses DeterministicSerializer and the FabricContractAdapter/Repository behind the scenes and provides logFor(ctx).
62
68
  - SerializedCrudContract<M>: Same endpoints as FabricCrudContract but takes/returns JSON strings (de)serialized to the model class. This simplifies client interactions and is used in tests.
63
69
 
64
- 6) ERC20 sample
70
+ 6. ERC20 sample
71
+
65
72
  - ERC20Token, ERC20Wallet, Allowance: Sample domain models for an ERC20-like token, wallets and allowances.
66
73
  - FabricStatement<M,R>: A CouchDBStatement bridge that runs Mango queries through FabricContractAdapter, handling primary key projection when needed.
67
- - FabricERC20Contract: A full ERC20 smart contract showcasing repository-based persistence and arithmetic helpers. Implements Initialize, CheckInitialized, TokenName, Symbol, Decimals, TotalSupply, BalanceOf, Transfer, TransferFrom, Approve, Allowance, Mint, Burn, BurnFrom, ClientAccountBalance, ClientAccountID and an internal _transfer helper.
74
+ - FabricERC20Contract: A full ERC20 smart contract showcasing repository-based persistence and arithmetic helpers. Implements Initialize, CheckInitialized, TokenName, Symbol, Decimals, TotalSupply, BalanceOf, Transfer, TransferFrom, Approve, Allowance, Mint, Burn, BurnFrom, ClientAccountBalance, ClientAccountID and an internal \_transfer helper.
68
75
 
69
76
  Design notes:
77
+
70
78
  - Deterministic serialization is used to ensure stable bytes for world-state writes.
71
79
  - onCreate/onCreateUpdate hooks from db-decorators are leveraged by the adapter to set primary keys and creator/owner metadata.
72
80
  - Mango queries (CouchDB) are used for rich queries via getQueryResultWithPagination.
@@ -74,7 +82,6 @@ Design notes:
74
82
 
75
83
  With these components you can build robust chaincode while keeping code concise, testable, and aligned with DECAF’s architecture.
76
84
 
77
-
78
85
  ### How to Use
79
86
 
80
87
  ## Installation
@@ -88,55 +95,55 @@ npm install @decaf-ts/for-fabric
88
95
  ### Connecting to a Fabric Network
89
96
 
90
97
  ```typescript
91
- import { FabricAdapter, PeerConfig } from '@decaf-ts/for-fabric';
98
+ import { FabricAdapter, PeerConfig } from "@decaf-ts/for-fabric";
92
99
 
93
100
  // Configure connection to a Fabric peer
94
101
  const config: PeerConfig = {
95
- mspId: 'Org1MSP',
96
- peerEndpoint: 'localhost:7051',
97
- channelName: 'mychannel',
98
- chaincodeName: 'mycc',
99
- contractName: 'mycontract',
100
- tlsCertPath: '/path/to/tls/cert',
101
- certDirectoryPath: '/path/to/cert/dir',
102
- keyDirectoryPath: '/path/to/key/dir',
103
- cryptoPath: '/path/to/crypto',
104
- peerHostAlias: 'peer0.org1.example.com',
105
- caEndpoint: 'localhost:7054',
106
- caTlsCertificate: '/path/to/ca/tls/cert',
107
- caCert: '/path/to/ca/cert',
108
- caKey: '/path/to/ca/key',
109
- ca: 'ca.org1.example.com'
102
+ mspId: "Org1MSP",
103
+ peerEndpoint: "localhost:7051",
104
+ channelName: "mychannel",
105
+ chaincodeName: "mycc",
106
+ contractName: "mycontract",
107
+ tlsCertPath: "/path/to/tls/cert",
108
+ certDirectoryPath: "/path/to/cert/dir",
109
+ keyDirectoryPath: "/path/to/key/dir",
110
+ cryptoPath: "/path/to/crypto",
111
+ peerHostAlias: "peer0.org1.example.com",
112
+ caEndpoint: "localhost:7054",
113
+ caTlsCertificate: "/path/to/ca/tls/cert",
114
+ caCert: "/path/to/ca/cert",
115
+ caKey: "/path/to/ca/key",
116
+ ca: "ca.org1.example.com",
110
117
  };
111
118
 
112
119
  // Create an adapter instance
113
- const adapter = new FabricAdapter(config, 'org1-adapter');
120
+ const adapter = new FabricAdapter(config, "org1-adapter");
114
121
 
115
122
  // Use the adapter to interact with the Fabric network
116
123
  async function createAsset() {
117
- const asset = { id: 'asset1', value: 'Asset 1 Value' };
118
- return await adapter.create('assets', 'asset1', asset, {}, mySerializer);
124
+ const asset = { id: "asset1", value: "Asset 1 Value" };
125
+ return await adapter.create("assets", "asset1", asset, {}, mySerializer);
119
126
  }
120
127
 
121
128
  async function readAsset(id: string) {
122
- return await adapter.read('assets', id, mySerializer);
129
+ return await adapter.read("assets", id, mySerializer);
123
130
  }
124
131
 
125
132
  async function updateAsset(id: string, newValue: string) {
126
133
  const asset = await readAsset(id);
127
134
  asset.value = newValue;
128
- return await adapter.update('assets', id, asset, {}, mySerializer);
135
+ return await adapter.update("assets", id, asset, {}, mySerializer);
129
136
  }
130
137
 
131
138
  async function deleteAsset(id: string) {
132
- return await adapter.delete('assets', id, mySerializer);
139
+ return await adapter.delete("assets", id, mySerializer);
133
140
  }
134
141
 
135
142
  async function queryAssets(owner: string) {
136
143
  const query = {
137
144
  selector: {
138
- owner: owner
139
- }
145
+ owner: owner,
146
+ },
140
147
  };
141
148
  return await adapter.raw(query, true);
142
149
  }
@@ -145,7 +152,7 @@ async function queryAssets(owner: string) {
145
152
  ### Listening for Chaincode Events
146
153
 
147
154
  ```typescript
148
- import { FabricAdapter, FabricDispatch } from '@decaf-ts/for-fabric';
155
+ import { FabricAdapter, FabricDispatch } from "@decaf-ts/for-fabric";
149
156
 
150
157
  async function setupEventListener(config: PeerConfig) {
151
158
  // Create a client
@@ -158,7 +165,7 @@ async function setupEventListener(config: PeerConfig) {
158
165
  dispatch.configure(config);
159
166
 
160
167
  // Register an observer for a specific table and event
161
- dispatch.observe('assets', 'create', (id) => {
168
+ dispatch.observe("assets", "create", (id) => {
162
169
  console.log(`Asset created: ${id}`);
163
170
  // Fetch the new asset or update UI
164
171
  });
@@ -174,29 +181,29 @@ async function setupEventListener(config: PeerConfig) {
174
181
  ### Working with Identities and Certificates
175
182
 
176
183
  ```typescript
177
- import {
178
- getIdentity,
179
- getSigner,
180
- readFile,
181
- getCAUser
182
- } from '@decaf-ts/for-fabric';
184
+ import {
185
+ getIdentity,
186
+ getSigner,
187
+ readFile,
188
+ getCAUser,
189
+ } from "@decaf-ts/for-fabric";
183
190
 
184
191
  async function setupIdentity() {
185
192
  // Read a certificate file
186
- const tlsCert = await readFile('/path/to/tls/cert');
193
+ const tlsCert = await readFile("/path/to/tls/cert");
187
194
 
188
195
  // Get an identity from a certificate directory
189
- const identity = await getIdentity('Org1MSP', '/path/to/cert/dir');
196
+ const identity = await getIdentity("Org1MSP", "/path/to/cert/dir");
190
197
 
191
198
  // Get a signer from a key directory
192
- const signer = await getSigner('/path/to/key/dir');
199
+ const signer = await getSigner("/path/to/key/dir");
193
200
 
194
201
  // Create a CA user
195
202
  const user = await getCAUser(
196
- 'user1',
197
- privateKeyPem,
198
- certificatePem,
199
- 'Org1MSP'
203
+ "user1",
204
+ privateKeyPem,
205
+ certificatePem,
206
+ "Org1MSP"
200
207
  );
201
208
 
202
209
  return { identity, signer, user };
@@ -208,9 +215,9 @@ async function setupIdentity() {
208
215
  ### Creating a Model
209
216
 
210
217
  ```typescript
211
- import { Model, id, property, table } from '@decaf-ts/decorator-validation';
218
+ import { Model, id, property, table } from "@decaf-ts/decorator-validation";
212
219
 
213
- @table('assets')
220
+ @table("assets")
214
221
  export class Asset extends Model {
215
222
  @id()
216
223
  id: string;
@@ -229,14 +236,17 @@ export class Asset extends Model {
229
236
  ### Creating a CRUD Contract
230
237
 
231
238
  ```typescript
232
- import { FabricCrudContract } from '@decaf-ts/for-fabric';
233
- import { Context, Contract, Info, Transaction } from 'fabric-contract-api';
234
- import { Asset } from './asset';
235
-
236
- @Info({ title: 'AssetContract', description: 'Smart contract for trading assets' })
239
+ import { FabricCrudContract } from "@decaf-ts/for-fabric";
240
+ import { Context, Contract, Info, Transaction } from "fabric-contract-api";
241
+ import { Asset } from "./asset";
242
+
243
+ @Info({
244
+ title: "AssetContract",
245
+ description: "Smart contract for trading assets",
246
+ })
237
247
  export class AssetContract extends FabricCrudContract<Asset> {
238
248
  constructor() {
239
- super('AssetContract', Asset);
249
+ super("AssetContract", Asset);
240
250
  }
241
251
 
242
252
  // The base class already provides standard CRUD operations:
@@ -256,7 +266,7 @@ export class AssetContract extends FabricCrudContract<Asset> {
256
266
  results.push({
257
267
  txId: value.txId,
258
268
  timestamp: value.timestamp,
259
- value: JSON.parse(value.value.toString('utf8'))
269
+ value: JSON.parse(value.value.toString("utf8")),
260
270
  });
261
271
 
262
272
  result = await iterator.next();
@@ -267,7 +277,11 @@ export class AssetContract extends FabricCrudContract<Asset> {
267
277
  }
268
278
 
269
279
  @Transaction()
270
- async transferAsset(ctx: Context, id: string, newOwner: string): Promise<Asset> {
280
+ async transferAsset(
281
+ ctx: Context,
282
+ id: string,
283
+ newOwner: string
284
+ ): Promise<Asset> {
271
285
  const asset = await this.read(ctx, id);
272
286
  asset.owner = newOwner;
273
287
  return await this.update(ctx, asset);
@@ -278,14 +292,14 @@ export class AssetContract extends FabricCrudContract<Asset> {
278
292
  ### Using the Contract Adapter Directly
279
293
 
280
294
  ```typescript
281
- import { FabricContractAdapter } from '@decaf-ts/for-fabric';
282
- import { Context, Contract, Transaction } from 'fabric-contract-api';
295
+ import { FabricContractAdapter } from "@decaf-ts/for-fabric";
296
+ import { Context, Contract, Transaction } from "fabric-contract-api";
283
297
 
284
298
  export class CustomContract extends Contract {
285
299
  private adapter: FabricContractAdapter;
286
300
 
287
301
  constructor() {
288
- super('CustomContract');
302
+ super("CustomContract");
289
303
  this.adapter = new FabricContractAdapter();
290
304
  }
291
305
 
@@ -293,7 +307,7 @@ export class CustomContract extends Contract {
293
307
  async createRecord(ctx: Context, id: string, data: string): Promise<any> {
294
308
  const record = { id, data, timestamp: Date.now() };
295
309
  return await this.adapter.create(
296
- 'records',
310
+ "records",
297
311
  id,
298
312
  record,
299
313
  {},
@@ -305,15 +319,14 @@ export class CustomContract extends Contract {
305
319
  async queryRecords(ctx: Context, owner: string): Promise<any[]> {
306
320
  const query = {
307
321
  selector: {
308
- owner: owner
309
- }
322
+ owner: owner,
323
+ },
310
324
  };
311
325
 
312
- return await this.adapter.raw(
313
- query,
314
- true,
315
- { stub: ctx.stub, logger: ctx.logging }
316
- );
326
+ return await this.adapter.raw(query, true, {
327
+ stub: ctx.stub,
328
+ logger: ctx.logging,
329
+ });
317
330
  }
318
331
  }
319
332
  ```
@@ -321,26 +334,22 @@ export class CustomContract extends Contract {
321
334
  ### Emitting and Handling Events
322
335
 
323
336
  ```typescript
324
- import {
337
+ import {
325
338
  FabricContractRepositoryObservableHandler,
326
339
  generateFabricEventName,
327
- parseEventName
328
- } from '@decaf-ts/for-fabric';
329
- import { Context } from 'fabric-contract-api';
330
- import { OperationKeys } from '@decaf-ts/db-decorators';
340
+ parseEventName,
341
+ } from "@decaf-ts/for-fabric";
342
+ import { Context } from "fabric-contract-api";
343
+ import { OperationKeys } from "@decaf-ts/db-decorators";
331
344
 
332
345
  // In chaincode: Emit an event
333
346
  async function emitEvent(ctx: Context, tableName: string, id: string) {
334
347
  const handler = new FabricContractRepositoryObservableHandler();
335
- const logger = ctx.logging.getLogger('EventHandler');
348
+ const logger = ctx.logging.getLogger("EventHandler");
336
349
 
337
- await handler.updateObservers(
338
- logger,
339
- tableName,
340
- OperationKeys.CREATE,
341
- id,
342
- { stub: ctx.stub }
343
- );
350
+ await handler.updateObservers(logger, tableName, OperationKeys.CREATE, id, {
351
+ stub: ctx.stub,
352
+ });
344
353
  }
345
354
 
346
355
  // In client: Parse an event name
@@ -357,7 +366,6 @@ function handleEvent(eventName: string, payload: Buffer) {
357
366
 
358
367
  For more detailed examples and API documentation, refer to the [API Reference](./docs/api/index.html).
359
368
 
360
-
361
369
  ## Contracts APIs (Chaincode)
362
370
 
363
371
  The following examples are based on the contracts in for-fabric/src/contracts and reflect the patterns used by the unit/integration tests.
@@ -367,29 +375,31 @@ The following examples are based on the contracts in for-fabric/src/contracts an
367
375
  Description: Base contract exposing CRUD endpoints for a model class. It uses Repository and DeterministicSerializer under the hood.
368
376
 
369
377
  ```typescript
370
- import { Context, Transaction, Contract } from 'fabric-contract-api';
371
- import { model, ModelArg, required } from '@decaf-ts/decorator-validation';
372
- import { BaseModel, pk } from '@decaf-ts/core';
373
- import { FabricCrudContract } from '@decaf-ts/for-fabric/contracts';
378
+ import { Context, Transaction, Contract } from "fabric-contract-api";
379
+ import { model, ModelArg, required } from "@decaf-ts/decorator-validation";
380
+ import { BaseModel, pk } from "@decaf-ts/core";
381
+ import { FabricCrudContract } from "@decaf-ts/for-fabric/contracts";
374
382
 
375
383
  @model()
376
384
  class Person extends BaseModel {
377
- @pk({ type: 'Number' })
385
+ @pk({ type: "Number" })
378
386
  id!: number;
379
387
  @required() name!: string;
380
- constructor(arg?: ModelArg<Person>) { super(arg); }
388
+ constructor(arg?: ModelArg<Person>) {
389
+ super(arg);
390
+ }
381
391
  }
382
392
 
383
393
  export class PersonContract extends FabricCrudContract<Person> {
384
394
  constructor() {
385
- super('PersonContract', Person);
395
+ super("PersonContract", Person);
386
396
  }
387
397
 
388
398
  @Transaction(false)
389
399
  async ping(ctx: Context): Promise<string> {
390
400
  // Uses FabricCrudContract.logFor
391
- this.logFor(ctx).info('ping');
392
- return 'pong';
401
+ this.logFor(ctx).info("ping");
402
+ return "pong";
393
403
  }
394
404
  }
395
405
  ```
@@ -401,28 +411,33 @@ Usage in tests: see tests/unit/contracts.test.ts pattern where a SerializedCrudC
401
411
  Description: Same endpoints as FabricCrudContract but takes and returns JSON strings. Useful for simple clients. Based on tests/unit/contracts.test.ts.
402
412
 
403
413
  ```typescript
404
- import { Context } from 'fabric-contract-api';
405
- import { model, ModelArg, required } from '@decaf-ts/decorator-validation';
406
- import { BaseModel, pk } from '@decaf-ts/core';
407
- import { SerializedCrudContract } from '@decaf-ts/for-fabric/contracts';
414
+ import { Context } from "fabric-contract-api";
415
+ import { model, ModelArg, required } from "@decaf-ts/decorator-validation";
416
+ import { BaseModel, pk } from "@decaf-ts/core";
417
+ import { SerializedCrudContract } from "@decaf-ts/for-fabric/contracts";
408
418
 
409
419
  @model()
410
420
  class TestModel extends BaseModel {
411
- @pk({ type: 'Number' }) id!: number;
421
+ @pk({ type: "Number" }) id!: number;
412
422
  @required() name!: string;
413
423
  @required() nif!: string;
414
- constructor(arg?: ModelArg<TestModel>) { super(arg); }
424
+ constructor(arg?: ModelArg<TestModel>) {
425
+ super(arg);
426
+ }
415
427
  }
416
428
 
417
429
  export class TestModelContract extends SerializedCrudContract<TestModel> {
418
430
  constructor() {
419
- super('TestModelContract', TestModel);
431
+ super("TestModelContract", TestModel);
420
432
  }
421
433
  }
422
434
 
423
435
  // Example invocation (mirrors unit test usage)
424
436
  async function createExample(contract: TestModelContract, ctx: Context) {
425
- const payload = new TestModel({ name: 'Alice', nif: '123456789' }).serialize();
437
+ const payload = new TestModel({
438
+ name: "Alice",
439
+ nif: "123456789",
440
+ }).serialize();
426
441
  const resultJson = await contract.create(ctx, payload);
427
442
  const created = new TestModel(JSON.parse(resultJson));
428
443
  return created;
@@ -434,24 +449,29 @@ async function createExample(contract: TestModelContract, ctx: Context) {
434
449
  Description: Chaincode-side repository used inside contract methods to persist and query models.
435
450
 
436
451
  ```typescript
437
- import { Context } from 'fabric-contract-api';
438
- import { Repo } from '@decaf-ts/core';
439
- import { model, required, ModelArg } from '@decaf-ts/decorator-validation';
440
- import { BaseModel, pk } from '@decaf-ts/core';
441
- import { FabricContractRepository } from '@decaf-ts/for-fabric/contracts';
452
+ import { Context } from "fabric-contract-api";
453
+ import { Repo } from "@decaf-ts/core";
454
+ import { model, required, ModelArg } from "@decaf-ts/decorator-validation";
455
+ import { BaseModel, pk } from "@decaf-ts/core";
456
+ import { FabricContractRepository } from "@decaf-ts/for-fabric/contracts";
442
457
 
443
458
  @model()
444
459
  class Asset extends BaseModel {
445
460
  @pk() id!: string;
446
461
  @required() owner!: string;
447
- constructor(arg?: ModelArg<Asset>) { super(arg); }
462
+ constructor(arg?: ModelArg<Asset>) {
463
+ super(arg);
464
+ }
448
465
  }
449
466
 
450
467
  export class AssetContract extends Contract {
451
468
  private repo: Repo<Asset, any, any, any, any>;
452
469
  constructor() {
453
- super('AssetContract');
454
- this.repo = new FabricContractRepository<Asset>(new (require('@decaf-ts/for-fabric').contracts.FabricContractAdapter)(), Asset);
470
+ super("AssetContract");
471
+ this.repo = new FabricContractRepository<Asset>(
472
+ new (require("@decaf-ts/for-fabric").contracts.FabricContractAdapter)(),
473
+ Asset
474
+ );
455
475
  }
456
476
 
457
477
  @Transaction()
@@ -477,19 +497,22 @@ export class AssetContract extends Contract {
477
497
  Description: World-state backed sequences for generating incremental values.
478
498
 
479
499
  ```typescript
480
- import { Context } from 'fabric-contract-api';
481
- import { FabricContractDBSequence } from '@decaf-ts/for-fabric/contracts';
482
- import { FabricContractAdapter } from '@decaf-ts/for-fabric/contracts';
500
+ import { Context } from "fabric-contract-api";
501
+ import { FabricContractDBSequence } from "@decaf-ts/for-fabric/contracts";
502
+ import { FabricContractAdapter } from "@decaf-ts/for-fabric/contracts";
483
503
 
484
504
  const adapter = new FabricContractAdapter();
485
505
 
486
506
  export class OrderContract extends Contract {
487
- private orderSeq = new FabricContractDBSequence({
488
- name: 'orderSeq',
489
- type: 'Number',
490
- startWith: 1,
491
- incrementBy: 1,
492
- }, adapter);
507
+ private orderSeq = new FabricContractDBSequence(
508
+ {
509
+ name: "orderSeq",
510
+ type: "Number",
511
+ startWith: 1,
512
+ incrementBy: 1,
513
+ },
514
+ adapter
515
+ );
493
516
 
494
517
  @Transaction()
495
518
  async CreateOrder(ctx: Context): Promise<number> {
@@ -510,11 +533,11 @@ export class OrderContract extends Contract {
510
533
  Description: Bridge to run Mango queries through the Fabric adapter and get typed models back; used internally by repositories and also directly in advanced cases. See tests/unit/erc20conttract.test.ts mocking CouchDBStatement processing.
511
534
 
512
535
  ```typescript
513
- import { FabricStatement } from '@decaf-ts/for-fabric/contracts';
514
- import { FabricContractAdapter } from '@decaf-ts/for-fabric/contracts';
515
- import { FabricContractContext } from '@decaf-ts/for-fabric/contracts';
516
- import { MangoQuery } from '@decaf-ts/for-couchdb';
517
- import { Model } from '@decaf-ts/decorator-validation';
536
+ import { FabricStatement } from "@decaf-ts/for-fabric/contracts";
537
+ import { FabricContractAdapter } from "@decaf-ts/for-fabric/contracts";
538
+ import { FabricContractContext } from "@decaf-ts/for-fabric/contracts";
539
+ import { MangoQuery } from "@decaf-ts/for-couchdb";
540
+ import { Model } from "@decaf-ts/decorator-validation";
518
541
 
519
542
  class MyModel extends Model {}
520
543
 
@@ -522,7 +545,9 @@ const adapter = new FabricContractAdapter();
522
545
 
523
546
  async function query(ctx: FabricContractContext) {
524
547
  const stmt = new FabricStatement<MyModel, MyModel[]>(adapter, ctx);
525
- const models = await stmt.raw<MyModel[]>({ selector: { type: 'MyModel' } } as MangoQuery);
548
+ const models = await stmt.raw<MyModel[]>({
549
+ selector: { type: "MyModel" },
550
+ } as MangoQuery);
526
551
  return models;
527
552
  }
528
553
  ```
@@ -532,17 +557,21 @@ async function query(ctx: FabricContractContext) {
532
557
  Description: Context-aware logger bound to Fabric’s Context, honoring log levels.
533
558
 
534
559
  ```typescript
535
- import { Context, Transaction } from 'fabric-contract-api';
536
- import { Contract } from 'fabric-contract-api';
537
- import { ContractLogger } from '@decaf-ts/for-fabric/contracts';
560
+ import { Context, Transaction } from "fabric-contract-api";
561
+ import { Contract } from "fabric-contract-api";
562
+ import { ContractLogger } from "@decaf-ts/for-fabric/contracts";
538
563
 
539
564
  export class LoggableContract extends Contract {
540
565
  @Transaction()
541
566
  async DoWork(ctx: Context): Promise<void> {
542
- const log = new ContractLogger('LoggableContract', { level: 'info' }, ctx as any);
543
- log.info('Starting work');
567
+ const log = new ContractLogger(
568
+ "LoggableContract",
569
+ { level: "info" },
570
+ ctx as any
571
+ );
572
+ log.info("Starting work");
544
573
  // ... work ...
545
- log.debug('Finished');
574
+ log.debug("Finished");
546
575
  }
547
576
  }
548
577
  ```
@@ -552,15 +581,21 @@ export class LoggableContract extends Contract {
552
581
  Description: Emits Fabric events for repository operations. You can also use it directly to emit a custom event.
553
582
 
554
583
  ```typescript
555
- import { FabricContractRepositoryObservableHandler } from '@decaf-ts/for-fabric/contracts';
556
- import { OperationKeys } from '@decaf-ts/db-decorators';
557
- import { FabricContractContext } from '@decaf-ts/for-fabric/contracts';
558
- import { MiniLogger } from '@decaf-ts/logging';
584
+ import { FabricContractRepositoryObservableHandler } from "@decaf-ts/for-fabric/contracts";
585
+ import { OperationKeys } from "@decaf-ts/db-decorators";
586
+ import { FabricContractContext } from "@decaf-ts/for-fabric/contracts";
587
+ import { MiniLogger } from "@decaf-ts/logging";
559
588
 
560
589
  async function emitExample(ctx: FabricContractContext) {
561
590
  const handler = new FabricContractRepositoryObservableHandler();
562
- const log = new MiniLogger('obs');
563
- await handler.updateObservers(log as any, 'assets', OperationKeys.CREATE, 'asset1', ctx);
591
+ const log = new MiniLogger("obs");
592
+ await handler.updateObservers(
593
+ log as any,
594
+ "assets",
595
+ OperationKeys.CREATE,
596
+ "asset1",
597
+ ctx
598
+ );
564
599
  }
565
600
  ```
566
601
 
@@ -569,7 +604,7 @@ async function emitExample(ctx: FabricContractContext) {
569
604
  Description: Access Fabric-specific context inside contracts.
570
605
 
571
606
  ```typescript
572
- import { FabricContractContext } from '@decaf-ts/for-fabric/contracts';
607
+ import { FabricContractContext } from "@decaf-ts/for-fabric/contracts";
573
608
 
574
609
  function readContext(ctx: FabricContractContext) {
575
610
  const ts = ctx.timestamp; // Date from stub.getDateTimestamp()
@@ -583,19 +618,19 @@ function readContext(ctx: FabricContractContext) {
583
618
  Description: Full ERC20 implementation used in tests (see tests/unit/erc20conttract.test.ts).
584
619
 
585
620
  ```typescript
586
- import { FabricERC20Contract } from '@decaf-ts/for-fabric/contracts';
587
- import { FabricContractContext } from '@decaf-ts/for-fabric/contracts';
621
+ import { FabricERC20Contract } from "@decaf-ts/for-fabric/contracts";
622
+ import { FabricContractContext } from "@decaf-ts/for-fabric/contracts";
588
623
 
589
- const contract = new FabricERC20Contract('TestToken');
624
+ const contract = new FabricERC20Contract("TestToken");
590
625
 
591
626
  async function initAndRead(ctx: FabricContractContext) {
592
- const created = await contract.Initialize(ctx, 'TestToken', 'TT', 18);
627
+ const created = await contract.Initialize(ctx, "TestToken", "TT", 18);
593
628
  if (created) {
594
629
  const name = await contract.TokenName(ctx);
595
630
  const decimals = await contract.Decimals(ctx);
596
631
  return { name, decimals };
597
632
  }
598
- throw new Error('Init failed');
633
+ throw new Error("Init failed");
599
634
  }
600
635
  ```
601
636
 
@@ -607,7 +642,6 @@ async function initAndRead(ctx: FabricContractContext) {
607
642
 
608
643
  These patterns are mirrored in the examples above to ensure correctness and consistency with the repository’s test suite.
609
644
 
610
-
611
645
  ## Coding Principles
612
646
 
613
647
  - group similar functionality in folders (analog to namespaces but without any namespace declaration)
@@ -626,8 +660,8 @@ These patterns are mirrored in the examples above to ensure correctness and cons
626
660
  - etc;
627
661
 
628
662
  ## Release Documentation Hooks
629
- Stay aligned with the automated release pipeline by reviewing [Release Notes](./workdocs/reports/RELEASE_NOTES.md) and [Dependencies](./workdocs/reports/DEPENDENCIES.md) after trying these recipes (updated on 2025-11-26).
630
663
 
664
+ Stay aligned with the automated release pipeline by reviewing [Release Notes](./workdocs/reports/RELEASE_NOTES.md) and [Dependencies](./workdocs/reports/DEPENDENCIES.md) after trying these recipes (updated on 2025-11-26).
631
665
 
632
666
  ### Related
633
667
 
@@ -637,9 +671,6 @@ Stay aligned with the automated release pipeline by reviewing [Release Notes](./
637
671
 
638
672
  [![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/decaf-ts/)
639
673
 
640
-
641
-
642
-
643
674
  #### Languages
644
675
 
645
676
  ![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge&logo=typescript&logoColor=white)