@decaf-ts/for-fabric 0.12.8 → 0.13.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 (181) hide show
  1. package/dist/for-fabric.cjs +1 -1
  2. package/dist/for-fabric.cjs.map +1 -1
  3. package/dist/for-fabric.js +1 -1
  4. package/dist/for-fabric.js.map +1 -1
  5. package/lib/cjs/cli-module.cjs +109 -4
  6. package/lib/cjs/cli-module.cjs.map +1 -1
  7. package/lib/cjs/client/FabricClientAdapter.cjs +134 -63
  8. package/lib/cjs/client/FabricClientAdapter.cjs.map +1 -1
  9. package/lib/cjs/client/FabricClientContext.cjs +30 -0
  10. package/lib/cjs/client/FabricClientContext.cjs.map +1 -0
  11. package/lib/cjs/client/FabricClientDispatch.cjs +1 -1
  12. package/lib/cjs/client/FabricClientDispatch.cjs.map +1 -1
  13. package/lib/cjs/client/FabricClientRepository.cjs +1 -1
  14. package/lib/cjs/client/FabricClientRepository.cjs.map +1 -1
  15. package/lib/cjs/client/FabricClientStatement.cjs +3 -2
  16. package/lib/cjs/client/FabricClientStatement.cjs.map +1 -1
  17. package/lib/cjs/client/constants.cjs +1 -0
  18. package/lib/cjs/client/constants.cjs.map +1 -1
  19. package/lib/cjs/client/index.cjs +1 -0
  20. package/lib/cjs/client/index.cjs.map +1 -1
  21. package/lib/cjs/client/indexes/generation.cjs +1 -13
  22. package/lib/cjs/client/indexes/generation.cjs.map +1 -1
  23. package/lib/cjs/contract/models/Audit.cjs +1 -3
  24. package/lib/cjs/contract/models/Audit.cjs.map +1 -1
  25. package/lib/cjs/contract/models/History.cjs +2 -76
  26. package/lib/cjs/contract/models/History.cjs.map +1 -1
  27. package/lib/cjs/contract/models/OtherBatchShared.cjs +3 -238
  28. package/lib/cjs/contract/models/OtherBatchShared.cjs.map +1 -1
  29. package/lib/cjs/contract/models/OtherLeaflet.cjs +5 -117
  30. package/lib/cjs/contract/models/OtherLeaflet.cjs.map +1 -1
  31. package/lib/cjs/contract/models/OtherLeafletFile.cjs +2 -66
  32. package/lib/cjs/contract/models/OtherLeafletFile.cjs.map +1 -1
  33. package/lib/cjs/contract/models/OtherMarket.cjs +2 -85
  34. package/lib/cjs/contract/models/OtherMarket.cjs.map +1 -1
  35. package/lib/cjs/contract/models/OtherProduct.cjs +2 -78
  36. package/lib/cjs/contract/models/OtherProduct.cjs.map +1 -1
  37. package/lib/cjs/contract/models/OtherProductImage.cjs +2 -60
  38. package/lib/cjs/contract/models/OtherProductImage.cjs.map +1 -1
  39. package/lib/cjs/contract/models/OtherProductShared.cjs +2 -100
  40. package/lib/cjs/contract/models/OtherProductShared.cjs.map +1 -1
  41. package/lib/cjs/contract/models/OtherProductStrength.cjs +2 -86
  42. package/lib/cjs/contract/models/OtherProductStrength.cjs.map +1 -1
  43. package/lib/cjs/contract/models/ProductStrength.cjs.map +1 -1
  44. package/lib/cjs/contract/models/SegregatedDocument.cjs +0 -4
  45. package/lib/cjs/contract/models/SegregatedDocument.cjs.map +1 -1
  46. package/lib/cjs/contract/models/decorators.cjs +0 -3
  47. package/lib/cjs/contract/models/decorators.cjs.map +1 -1
  48. package/lib/cjs/contract/trackedModels/OtherBatchShared.cjs +129 -0
  49. package/lib/cjs/contract/trackedModels/OtherBatchShared.cjs.map +1 -0
  50. package/lib/cjs/contract/trackedModels/OtherProduct.cjs +1 -1
  51. package/lib/cjs/contract/trackedModels/OtherProduct.cjs.map +1 -1
  52. package/lib/cjs/contracts/ContractAdapter.cjs +39 -7
  53. package/lib/cjs/contracts/ContractAdapter.cjs.map +1 -1
  54. package/lib/cjs/contracts/MigrationContract.cjs +4 -5
  55. package/lib/cjs/contracts/MigrationContract.cjs.map +1 -1
  56. package/lib/cjs/contracts/crud/crud-contract.cjs +25 -21
  57. package/lib/cjs/contracts/crud/crud-contract.cjs.map +1 -1
  58. package/lib/cjs/shared/constants.cjs +4 -0
  59. package/lib/cjs/shared/constants.cjs.map +1 -1
  60. package/lib/cjs/shared/decorators.cjs +22 -1
  61. package/lib/cjs/shared/decorators.cjs.map +1 -1
  62. package/lib/cjs/shared/overrides/overrides.cjs +34 -0
  63. package/lib/cjs/shared/overrides/overrides.cjs.map +1 -1
  64. package/lib/cjs/version.cjs +16 -2
  65. package/lib/cjs/version.cjs.map +1 -1
  66. package/lib/esm/cli-module.js +109 -4
  67. package/lib/esm/cli-module.js.map +1 -1
  68. package/lib/esm/client/FabricClientAdapter.js +135 -64
  69. package/lib/esm/client/FabricClientAdapter.js.map +1 -1
  70. package/lib/esm/client/FabricClientContext.js +25 -0
  71. package/lib/esm/client/FabricClientContext.js.map +1 -0
  72. package/lib/esm/client/FabricClientDispatch.js +1 -1
  73. package/lib/esm/client/FabricClientDispatch.js.map +1 -1
  74. package/lib/esm/client/FabricClientRepository.js +1 -1
  75. package/lib/esm/client/FabricClientRepository.js.map +1 -1
  76. package/lib/esm/client/FabricClientStatement.js +3 -2
  77. package/lib/esm/client/FabricClientStatement.js.map +1 -1
  78. package/lib/esm/client/constants.js +1 -0
  79. package/lib/esm/client/constants.js.map +1 -1
  80. package/lib/esm/client/index.js +1 -0
  81. package/lib/esm/client/index.js.map +1 -1
  82. package/lib/esm/client/indexes/generation.js +1 -13
  83. package/lib/esm/client/indexes/generation.js.map +1 -1
  84. package/lib/esm/contract/index.js.map +1 -1
  85. package/lib/esm/contract/models/Audit.js +2 -4
  86. package/lib/esm/contract/models/Audit.js.map +1 -1
  87. package/lib/esm/contract/models/History.js +1 -71
  88. package/lib/esm/contract/models/History.js.map +1 -1
  89. package/lib/esm/contract/models/OtherBatchShared.js +1 -231
  90. package/lib/esm/contract/models/OtherBatchShared.js.map +1 -1
  91. package/lib/esm/contract/models/OtherLeaflet.js +2 -111
  92. package/lib/esm/contract/models/OtherLeaflet.js.map +1 -1
  93. package/lib/esm/contract/models/OtherLeafletFile.js +1 -61
  94. package/lib/esm/contract/models/OtherLeafletFile.js.map +1 -1
  95. package/lib/esm/contract/models/OtherMarket.js +1 -80
  96. package/lib/esm/contract/models/OtherMarket.js.map +1 -1
  97. package/lib/esm/contract/models/OtherProduct.js +1 -73
  98. package/lib/esm/contract/models/OtherProduct.js.map +1 -1
  99. package/lib/esm/contract/models/OtherProductImage.js +1 -55
  100. package/lib/esm/contract/models/OtherProductImage.js.map +1 -1
  101. package/lib/esm/contract/models/OtherProductShared.js +1 -95
  102. package/lib/esm/contract/models/OtherProductShared.js.map +1 -1
  103. package/lib/esm/contract/models/OtherProductStrength.js +1 -81
  104. package/lib/esm/contract/models/OtherProductStrength.js.map +1 -1
  105. package/lib/esm/contract/models/ProductStrength.js +1 -1
  106. package/lib/esm/contract/models/ProductStrength.js.map +1 -1
  107. package/lib/esm/contract/models/SegregatedDocument.js +1 -5
  108. package/lib/esm/contract/models/SegregatedDocument.js.map +1 -1
  109. package/lib/esm/contract/models/decorators.js +0 -3
  110. package/lib/esm/contract/models/decorators.js.map +1 -1
  111. package/lib/esm/contract/trackedModels/OtherBatchShared.js +120 -0
  112. package/lib/esm/contract/trackedModels/OtherBatchShared.js.map +1 -0
  113. package/lib/esm/contract/trackedModels/OtherProduct.js +2 -2
  114. package/lib/esm/contract/trackedModels/OtherProduct.js.map +1 -1
  115. package/lib/esm/contract/trackedModels/OtherProductStrength.js.map +1 -1
  116. package/lib/esm/contracts/ContractAdapter.js +40 -8
  117. package/lib/esm/contracts/ContractAdapter.js.map +1 -1
  118. package/lib/esm/contracts/FabricContractStatement.js.map +1 -1
  119. package/lib/esm/contracts/MigrationContract.js +4 -5
  120. package/lib/esm/contracts/MigrationContract.js.map +1 -1
  121. package/lib/esm/contracts/crud/crud-contract.js +27 -23
  122. package/lib/esm/contracts/crud/crud-contract.js.map +1 -1
  123. package/lib/esm/shared/constants.js +4 -0
  124. package/lib/esm/shared/constants.js.map +1 -1
  125. package/lib/esm/shared/decorators.js +17 -0
  126. package/lib/esm/shared/decorators.js.map +1 -1
  127. package/lib/esm/shared/overrides/overrides.js +35 -1
  128. package/lib/esm/shared/overrides/overrides.js.map +1 -1
  129. package/lib/esm/version.js +15 -1
  130. package/lib/esm/version.js.map +1 -1
  131. package/lib/types/client/FabricClientAdapter.d.cts +42 -33
  132. package/lib/types/client/FabricClientAdapter.d.mts +42 -33
  133. package/lib/types/client/FabricClientContext.d.cts +11 -0
  134. package/lib/types/client/FabricClientContext.d.mts +11 -0
  135. package/lib/types/client/FabricClientDispatch.d.cts +5 -5
  136. package/lib/types/client/FabricClientDispatch.d.mts +5 -5
  137. package/lib/types/client/FabricClientStatement.d.cts +6 -6
  138. package/lib/types/client/FabricClientStatement.d.mts +6 -6
  139. package/lib/types/client/index.d.cts +1 -0
  140. package/lib/types/client/index.d.mts +1 -0
  141. package/lib/types/client/types.d.cts +2 -0
  142. package/lib/types/client/types.d.mts +2 -0
  143. package/lib/types/contract/models/History.d.cts +1 -9
  144. package/lib/types/contract/models/History.d.mts +1 -9
  145. package/lib/types/contract/models/OtherBatchShared.d.cts +1 -55
  146. package/lib/types/contract/models/OtherBatchShared.d.mts +1 -55
  147. package/lib/types/contract/models/OtherLeaflet.d.cts +2 -16
  148. package/lib/types/contract/models/OtherLeaflet.d.mts +2 -16
  149. package/lib/types/contract/models/OtherLeafletFile.d.cts +1 -10
  150. package/lib/types/contract/models/OtherLeafletFile.d.mts +1 -10
  151. package/lib/types/contract/models/OtherMarket.d.cts +1 -13
  152. package/lib/types/contract/models/OtherMarket.d.mts +1 -13
  153. package/lib/types/contract/models/OtherProduct.d.cts +1 -12
  154. package/lib/types/contract/models/OtherProduct.d.mts +1 -12
  155. package/lib/types/contract/models/OtherProductImage.d.cts +1 -9
  156. package/lib/types/contract/models/OtherProductImage.d.mts +1 -9
  157. package/lib/types/contract/models/OtherProductShared.d.cts +1 -18
  158. package/lib/types/contract/models/OtherProductShared.d.mts +1 -18
  159. package/lib/types/contract/models/OtherProductStrength.d.cts +1 -12
  160. package/lib/types/contract/models/OtherProductStrength.d.mts +1 -12
  161. package/lib/types/contract/trackedModels/OtherBatchShared.d.cts +19 -0
  162. package/lib/types/contract/trackedModels/OtherBatchShared.d.mts +19 -0
  163. package/lib/types/contracts/ContractAdapter.d.cts +1 -0
  164. package/lib/types/contracts/ContractAdapter.d.mts +1 -0
  165. package/lib/types/contracts/FabricContractStatement.d.cts +2 -3
  166. package/lib/types/contracts/FabricContractStatement.d.mts +2 -3
  167. package/lib/types/contracts/MigrationContract.d.cts +1 -1
  168. package/lib/types/contracts/MigrationContract.d.mts +1 -1
  169. package/lib/types/contracts/crud/crud-contract.d.cts +3 -1
  170. package/lib/types/contracts/crud/crud-contract.d.mts +3 -1
  171. package/lib/types/contracts/types.d.cts +1 -0
  172. package/lib/types/contracts/types.d.mts +1 -0
  173. package/lib/types/shared/constants.d.cts +5 -1
  174. package/lib/types/shared/constants.d.mts +5 -1
  175. package/lib/types/shared/decorators.d.cts +9 -1
  176. package/lib/types/shared/decorators.d.mts +9 -1
  177. package/lib/types/shared/overrides/Model.d.cts +4 -0
  178. package/lib/types/shared/overrides/Model.d.mts +4 -0
  179. package/lib/types/version.d.cts +15 -1
  180. package/lib/types/version.d.mts +15 -1
  181. package/package.json +6 -4
@@ -65,6 +65,7 @@ const db_decorators_1 = require("@decaf-ts/db-decorators");
65
65
  const core_1 = require("@decaf-ts/core");
66
66
  const constants_js_1 = require("./../shared/constants.cjs");
67
67
  const ClientSerializer_js_1 = require("./../shared/ClientSerializer.cjs");
68
+ const FabricClientContext_js_1 = require("./FabricClientContext.cjs");
68
69
  const FabricClientStatement_js_1 = require("./FabricClientStatement.cjs");
69
70
  const FabricClientPaginator_js_1 = require("./FabricClientPaginator.cjs");
70
71
  const FabricClientRepository_js_1 = require("./FabricClientRepository.cjs");
@@ -73,6 +74,7 @@ const constants_js_2 = require("./constants.cjs");
73
74
  const fs_1 = __importDefault(require("fs"));
74
75
  const crypto_js_1 = require("./crypto.cjs");
75
76
  const id_extraction_js_1 = require("./ids/id-extraction.cjs");
77
+ const index_js_1 = require("./../shared/index.cjs");
76
78
  /**
77
79
  * @description Adapter for interacting with Hyperledger Fabric networks
78
80
  * @summary The FabricAdapter extends CouchDBAdapter to provide a seamless interface for interacting with Hyperledger Fabric networks.
@@ -131,6 +133,9 @@ class FabricClientAdapter extends core_1.Adapter {
131
133
  static { this.decoder = new TextDecoder("utf8"); }
132
134
  static { this.serializer = new ClientSerializer_js_1.ClientSerializer(); }
133
135
  static { this.log = logging_1.Logging.for(FabricClientAdapter); }
136
+ get Context() {
137
+ return FabricClientContext_js_1.FabricClientContext;
138
+ }
134
139
  /**
135
140
  * @description Creates a new FabricAdapter instance
136
141
  * @summary Initializes a new adapter for interacting with a Hyperledger Fabric network
@@ -141,6 +146,15 @@ class FabricClientAdapter extends core_1.Adapter {
141
146
  super(Object.assign({}, constants_js_2.DefaultFabricClientFlags, config), constants_js_1.FabricFlavour, alias);
142
147
  this.serializer = FabricClientAdapter.serializer;
143
148
  }
149
+ chaincodeFor(model, ...args) {
150
+ return FabricClientAdapter.chaincodeFor(model, this.config, ...args);
151
+ }
152
+ channelFor(model, ...args) {
153
+ return FabricClientAdapter.channelFor(model, this.config, ...args);
154
+ }
155
+ contractFor(model, ...args) {
156
+ return FabricClientAdapter.contractFor(model, this.config, ...args);
157
+ }
144
158
  Statement(overrides) {
145
159
  return new FabricClientStatement_js_1.FabricClientStatement(this, overrides);
146
160
  }
@@ -278,10 +292,8 @@ class FabricClientAdapter extends core_1.Adapter {
278
292
  log.verbose(`pks: ${ids}`);
279
293
  const hasTransient = transient && Object.keys(transient).length > 0;
280
294
  const needsFullPayload = hasTransient || this.shouldForceGatewayHydration(ctx);
281
- const transientPayload = hasTransient ? { [tableName]: transient } : {};
282
- const result = await this.submitTransaction(ctx, db_decorators_1.BulkCrudOperationKeys.CREATE_ALL, [
283
- JSON.stringify(models.map((m) => this.serializer.serialize(m, clazz.name))),
284
- ], transientPayload, this.getEndorsingOrganizations(ctx), clazz.name);
295
+ const serializedModels = models.map((m) => JSON.parse(this.serializer.serialize(m, clazz.name)));
296
+ const result = await this.submitTransaction(ctx, db_decorators_1.BulkCrudOperationKeys.CREATE_ALL, [JSON.stringify(serializedModels)], hasTransient ? { [tableName]: transient } : undefined, this.getEndorsingOrganizations(ctx), clazz);
285
297
  let res;
286
298
  try {
287
299
  res = JSON.parse(this.decode(result)).map((r) => JSON.parse(r));
@@ -290,7 +302,7 @@ class FabricClientAdapter extends core_1.Adapter {
290
302
  throw new db_decorators_1.SerializationError(e);
291
303
  }
292
304
  if (this.shouldRefreshAfterWrite(clazz, ctx, needsFullPayload, res[0][decorator_validation_1.Model.pk(clazz)] || ids[0])) {
293
- return this.readAll(clazz, (0, id_extraction_js_1.extractIds)(clazz, models.map((m, i) => decorator_validation_1.Model.merge(Object.assign({}, m, transient[i] || {}), res[i])), ids), ctx);
305
+ return this.readAll(clazz, (0, id_extraction_js_1.extractIds)(clazz, models.map((m, i) => decorator_validation_1.Model.merge(Object.assign({}, m, transient?.[i] || {}), res[i])), ids), ctx);
294
306
  }
295
307
  return res;
296
308
  }
@@ -306,7 +318,7 @@ class FabricClientAdapter extends core_1.Adapter {
306
318
  const tableName = decorator_validation_1.Model.tableName(clazz);
307
319
  log.info(`reading ${ids.length} entries to ${tableName} table`);
308
320
  log.verbose(`pks: ${ids}`);
309
- const result = await this.evaluateTransaction(ctx, db_decorators_1.BulkCrudOperationKeys.READ_ALL, [JSON.stringify(ids)], undefined, undefined, clazz.name);
321
+ const result = await this.evaluateTransaction(ctx, db_decorators_1.BulkCrudOperationKeys.READ_ALL, [JSON.stringify(ids)], undefined, undefined, clazz);
310
322
  try {
311
323
  return JSON.parse(this.decode(result)).map((r) => JSON.parse(r));
312
324
  }
@@ -334,10 +346,8 @@ class FabricClientAdapter extends core_1.Adapter {
334
346
  log.verbose(`pks: ${ids}`);
335
347
  const hasTransient = transient && Object.keys(transient).length > 0;
336
348
  const needsFullPayload = hasTransient || this.shouldForceGatewayHydration(ctx);
337
- const transientPayload = hasTransient ? { [tableName]: transient } : {};
338
- const result = await this.submitTransaction(ctx, db_decorators_1.BulkCrudOperationKeys.UPDATE_ALL, [
339
- JSON.stringify(models.map((m) => this.serializer.serialize(m, clazz.name))),
340
- ], transientPayload, this.getEndorsingOrganizations(ctx), clazz.name);
349
+ const serializedModels = models.map((m) => JSON.parse(this.serializer.serialize(m, clazz.name)));
350
+ const result = await this.submitTransaction(ctx, db_decorators_1.BulkCrudOperationKeys.UPDATE_ALL, [JSON.stringify(serializedModels)], hasTransient ? { [tableName]: transient } : undefined, this.getEndorsingOrganizations(ctx), clazz);
341
351
  let res;
342
352
  try {
343
353
  res = JSON.parse(this.decode(result)).map((r) => JSON.parse(r));
@@ -346,7 +356,7 @@ class FabricClientAdapter extends core_1.Adapter {
346
356
  throw new db_decorators_1.SerializationError(e);
347
357
  }
348
358
  if (this.shouldRefreshAfterWrite(clazz, ctx, needsFullPayload, ids[0])) {
349
- return this.readAll(clazz, (0, id_extraction_js_1.extractIds)(clazz, models.map((m, i) => decorator_validation_1.Model.merge(Object.assign({}, m, transient[i] || {}), res[i])), ids), ctx);
359
+ return this.readAll(clazz, (0, id_extraction_js_1.extractIds)(clazz, models.map((m, i) => decorator_validation_1.Model.merge(Object.assign({}, m, transient?.[i] || {}), res[i])), ids), ctx);
350
360
  }
351
361
  return res;
352
362
  }
@@ -369,7 +379,7 @@ class FabricClientAdapter extends core_1.Adapter {
369
379
  }
370
380
  log.info(`deleting ${ids.length} entries to ${tableName} table`);
371
381
  log.verbose(`pks: ${ids}`);
372
- const res = await this.submitTransaction(ctx, db_decorators_1.BulkCrudOperationKeys.DELETE_ALL, [JSON.stringify(ids)], undefined, this.getEndorsingOrganizations(ctx), clazz.name);
382
+ const res = await this.submitTransaction(ctx, db_decorators_1.BulkCrudOperationKeys.DELETE_ALL, [JSON.stringify(ids)], undefined, this.getEndorsingOrganizations(ctx), clazz);
373
383
  try {
374
384
  return shouldHydrate
375
385
  ? result
@@ -482,6 +492,30 @@ class FabricClientAdapter extends core_1.Adapter {
482
492
  }
483
493
  return hasId;
484
494
  }
495
+ injectTransientOverrides(transientData, ctx) {
496
+ const hasTransientData = this.hasMeaningfulTransientData(transientData);
497
+ const shouldInject = !!ctx.getOrUndefined("allowContextTransientMap");
498
+ if (!hasTransientData && !shouldInject)
499
+ return undefined;
500
+ const overrides = ctx.toOverrides();
501
+ const payload = hasTransientData ? Object.assign({}, transientData) : {};
502
+ if (shouldInject && Object.keys(overrides).length) {
503
+ payload[constants_js_1.FabricModelKeys.OVERRIDES] = overrides;
504
+ }
505
+ return Object.keys(payload).length ? payload : undefined;
506
+ }
507
+ hasMeaningfulTransientData(value) {
508
+ if (value === undefined || value === null)
509
+ return false;
510
+ if (Array.isArray(value))
511
+ return value.some((item) => this.hasMeaningfulTransientData(item));
512
+ if (typeof value !== "object")
513
+ return true;
514
+ const entries = Object.entries(value);
515
+ if (!entries.length)
516
+ return false;
517
+ return entries.some(([, entry]) => this.hasMeaningfulTransientData(entry));
518
+ }
485
519
  getEndorsingOrganizations(ctx) {
486
520
  const direct = ctx.getOrUndefined("endorsingOrgs") ||
487
521
  ctx.getOrUndefined("endorsingOrgs");
@@ -512,8 +546,7 @@ class FabricClientAdapter extends core_1.Adapter {
512
546
  log.debug(`pk: ${id}`);
513
547
  const hasTransient = transient && Object.keys(transient).length > 0;
514
548
  const needsFullPayload = hasTransient || this.shouldForceGatewayHydration(ctx);
515
- const transientPayload = hasTransient ? { [tableName]: transient } : {};
516
- const result = await this.submitTransaction(ctx, db_decorators_1.OperationKeys.CREATE, [this.serializer.serialize(model, clazz.name)], transientPayload, this.getEndorsingOrganizations(ctx), clazz.name);
549
+ const result = await this.submitTransaction(ctx, db_decorators_1.OperationKeys.CREATE, [this.serializer.serialize(model, clazz.name)], hasTransient ? { [tableName]: transient } : undefined, this.getEndorsingOrganizations(ctx), clazz);
517
550
  const deserialized = this.serializer.deserialize(this.decode(result));
518
551
  if (this.shouldRefreshAfterWrite(clazz, ctx, needsFullPayload, id)) {
519
552
  return this.read(clazz, (0, id_extraction_js_1.extractIds)(clazz, decorator_validation_1.Model.merge(Object.assign({}, model, transient || {}), deserialized, clazz), id), ctx);
@@ -524,7 +557,7 @@ class FabricClientAdapter extends core_1.Adapter {
524
557
  const { log, ctx } = this.logCtx(args, this.healthcheck);
525
558
  const tableName = decorator_validation_1.Model.tableName(clazz);
526
559
  log.verbose(`reading entry from ${tableName} table`);
527
- const result = await this.evaluateTransaction(ctx, "healthcheck", [], undefined, undefined, clazz.name);
560
+ const result = await this.evaluateTransaction(ctx, "healthcheck", [], undefined, undefined, clazz);
528
561
  return JSON.parse(this.decode(result));
529
562
  }
530
563
  /**
@@ -539,7 +572,7 @@ class FabricClientAdapter extends core_1.Adapter {
539
572
  const tableName = decorator_validation_1.Model.tableName(clazz);
540
573
  log.verbose(`reading entry from ${tableName} table`);
541
574
  log.debug(`pk: ${id}`);
542
- const result = await this.evaluateTransaction(ctx, db_decorators_1.OperationKeys.READ, [id.toString()], undefined, undefined, clazz.name);
575
+ const result = await this.evaluateTransaction(ctx, db_decorators_1.OperationKeys.READ, [id.toString()], undefined, undefined, clazz);
543
576
  return this.serializer.deserialize(this.decode(result));
544
577
  }
545
578
  updatePrefix(clazz, id, model, ...args) {
@@ -569,9 +602,7 @@ class FabricClientAdapter extends core_1.Adapter {
569
602
  log.debug(`pk: ${id}`);
570
603
  const hasTransient = transient && Object.keys(transient).length > 0;
571
604
  const needsFullPayload = hasTransient || this.shouldForceGatewayHydration(ctx);
572
- const transientPayload = hasTransient ? { [tableName]: transient } : {};
573
- const result = await this.submitTransaction(ctx, db_decorators_1.OperationKeys.UPDATE, [this.serializer.serialize(model, clazz.name || clazz)], // TODO should be receving class but is receiving string
574
- transientPayload, this.getEndorsingOrganizations(ctx), clazz.name);
605
+ const result = await this.submitTransaction(ctx, db_decorators_1.OperationKeys.UPDATE, [this.serializer.serialize(model, clazz.name)], hasTransient ? { [tableName]: transient } : undefined, this.getEndorsingOrganizations(ctx), clazz);
575
606
  const deserialized = this.serializer.deserialize(this.decode(result));
576
607
  if (this.shouldRefreshAfterWrite(clazz, ctx, needsFullPayload, id)) {
577
608
  return this.read(clazz, (0, id_extraction_js_1.extractIds)(clazz, decorator_validation_1.Model.merge(Object.assign({}, model, transient || {}), deserialized, clazz), id), ctx);
@@ -596,7 +627,7 @@ class FabricClientAdapter extends core_1.Adapter {
596
627
  }
597
628
  log.verbose(`deleting entry from ${tableName} table`);
598
629
  log.debug(`pk: ${id}`);
599
- const res = await this.submitTransaction(ctx, db_decorators_1.OperationKeys.DELETE, [id.toString()], undefined, this.getEndorsingOrganizations(ctx), clazz.name);
630
+ const res = await this.submitTransaction(ctx, db_decorators_1.OperationKeys.DELETE, [id.toString()], undefined, this.getEndorsingOrganizations(ctx), clazz);
600
631
  return shouldHydrate
601
632
  ? result
602
633
  : this.serializer.deserialize(this.decode(res));
@@ -628,11 +659,10 @@ class FabricClientAdapter extends core_1.Adapter {
628
659
  */
629
660
  async raw(rawInput, docsOnly = true, clazz, ...args) {
630
661
  const { log, ctx } = this.logCtx(args, this.raw);
631
- const tableName = clazz.name;
632
662
  log.info(`Performing raw statement on table ${decorator_validation_1.Model.tableName(clazz)}`);
633
663
  let transactionResult;
634
664
  try {
635
- transactionResult = await this.evaluateTransaction(ctx, "raw", [JSON.stringify(rawInput), docsOnly], undefined, undefined, tableName);
665
+ transactionResult = await this.evaluateTransaction(ctx, "raw", [JSON.stringify(rawInput), docsOnly], undefined, undefined, clazz);
636
666
  }
637
667
  catch (e) {
638
668
  throw this.parseError(e);
@@ -667,7 +697,7 @@ class FabricClientAdapter extends core_1.Adapter {
667
697
  * @param {string} ddoc - Design document name
668
698
  * @param {string} viewName - View name
669
699
  * @param {Record<string, any>} options - View query options
670
- * @param {...ContextualArgs<Context<FabricClientFlags>>} args - Optional contextual arguments
700
+ * @param {...ContextualArgs<FabricClientContext>} args - Optional contextual arguments
671
701
  * @return {Promise<ViewResponse<R>>} The view response
672
702
  */
673
703
  async view(ddoc, viewName, options, ...args) {
@@ -707,18 +737,13 @@ class FabricClientAdapter extends core_1.Adapter {
707
737
  async Gateway(ctx) {
708
738
  return FabricClientAdapter.getGateway(ctx, this.config, this.client);
709
739
  }
710
- getContractName(className) {
711
- if (!className)
712
- return undefined;
713
- return `${className}Contract`;
714
- }
715
740
  /**
716
741
  * @description Gets a Contract instance for the Fabric chaincode
717
742
  * @summary Creates a new Contract instance using the current Gateway
718
743
  * @return {Promise<Contrakt>} Promise resolving to the Contract instance
719
744
  */
720
- async Contract(ctx, contractName) {
721
- return FabricClientAdapter.getContract(await this.Gateway(ctx), this.config, contractName);
745
+ async Contract(ctx, clazzOrContractName) {
746
+ return FabricClientAdapter.getContract(await this.Gateway(ctx), this.config, clazzOrContractName, ctx);
722
747
  }
723
748
  /**
724
749
  * @description Executes a transaction on the Fabric network
@@ -748,23 +773,33 @@ class FabricClientAdapter extends core_1.Adapter {
748
773
  * Contract-->>FabricAdapter: result
749
774
  * FabricAdapter->>Gateway: close()
750
775
  */
751
- async transaction(ctx, api, submit = true, args, transientData = {}, endorsingOrganizations, className) {
776
+ async transaction(ctx, api, submit = true, args, transientData = {}, endorsingOrganizations, clazzOrContractName) {
752
777
  const log = this.log.for(this.transaction);
778
+ transientData = this.injectTransientOverrides(transientData, ctx);
779
+ if (submit && this.shouldUseLegacyGateway(ctx)) {
780
+ const legacyArgs = this.prepareLegacyArgs(args);
781
+ const transientMap = this.buildLegacyTransient(transientData);
782
+ const peerConfigs = this.buildLegacyPeerConfigs(ctx);
783
+ return await this.submitLegacyWithExplicitEndorsers(ctx, api, legacyArgs, transientMap, peerConfigs, clazzOrContractName);
784
+ }
753
785
  const gateway = await this.Gateway(ctx);
754
786
  try {
755
- const contract = await this.Contract(ctx, this.getContractName(className));
756
- log.verbose(`${submit ? "Submit" : "Evaluate"}ting transaction ${this.getContractName(className) || this.config.contractName}.${api}`);
787
+ const contract = await this.Contract(ctx, clazzOrContractName);
788
+ log.verbose(`${submit ? "Submit" : "Evaluate"}ting transaction ${contract.getContractName()}.${api}`);
757
789
  log.debug(`args: ${args?.map((a) => a.toString()).join("\n") || "none"}`);
758
790
  const method = submit ? contract.submit : contract.evaluate;
791
+ const transientEntries = Object.entries(transientData || {});
759
792
  endorsingOrganizations = endorsingOrganizations?.length
760
793
  ? endorsingOrganizations
761
794
  : undefined;
762
795
  const proposalOptions = {
763
796
  arguments: args || [],
764
- transientData: Object.entries(transientData).reduce((acc, [key, val]) => {
765
- acc[key] = JSON.stringify(val);
766
- return acc;
767
- }, {}),
797
+ transientData: transientEntries.length
798
+ ? transientEntries.reduce((acc, [key, val]) => {
799
+ acc[key] = JSON.stringify(val);
800
+ return acc;
801
+ }, {})
802
+ : undefined,
768
803
  endorsingOrganizations: ctx.getOrUndefined("allowManualEndorsingOrgs")
769
804
  ? endorsingOrganizations || undefined
770
805
  : undefined, // mspId list
@@ -861,7 +896,7 @@ class FabricClientAdapter extends core_1.Adapter {
861
896
  }
862
897
  return peers;
863
898
  }
864
- async submitLegacyWithExplicitEndorsers(ctx, fcn, args, transientMap, peerConfigs, className) {
899
+ async submitLegacyWithExplicitEndorsers(ctx, fcn, args, transientMap, peerConfigs, clazzOrContractName) {
865
900
  const log = this.log.for(this.submitLegacyWithExplicitEndorsers);
866
901
  const peers = this.normalizeLegacyPeers(peerConfigs);
867
902
  const identityMaterial = await this.resolveLegacyIdentityMaterial();
@@ -890,8 +925,24 @@ class FabricClientAdapter extends core_1.Adapter {
890
925
  key: identityMaterial.privateKey,
891
926
  },
892
927
  });
893
- const network = await gateway.getNetwork(this.config.channel);
894
- const contract = network.getContract(this.config.chaincodeName, this.getContractName(className));
928
+ let channel = this.config.channel;
929
+ let chaincode = this.config.chaincodeName;
930
+ let contractName = this.config.contractName;
931
+ if (clazzOrContractName) {
932
+ if (typeof clazzOrContractName === "string")
933
+ contractName = clazzOrContractName;
934
+ else {
935
+ if (!ctx)
936
+ throw new db_decorators_1.InternalError(`No context received to determine chaincode config`);
937
+ channel =
938
+ (await this.channelFor(clazzOrContractName, ctx)) || channel;
939
+ chaincode =
940
+ (await this.chaincodeFor(clazzOrContractName, ctx)) || chaincode;
941
+ contractName = await this.contractFor(clazzOrContractName, ctx);
942
+ }
943
+ }
944
+ const network = await gateway.getNetwork(channel);
945
+ const contract = network.getContract(chaincode, contractName);
895
946
  const transaction = contract.createTransaction(fcn);
896
947
  if (transientMap) {
897
948
  transaction.setTransient(transientMap);
@@ -902,7 +953,7 @@ class FabricClientAdapter extends core_1.Adapter {
902
953
  if (endorsers.length) {
903
954
  transaction.setEndorsingPeers(endorsers);
904
955
  }
905
- log.verbose(`Legacy submitting ${this.getContractName(className) || this.config.contractName}.${fcn} via peers ${peers.map((p) => p.peerEndpoint).join(", ")}`);
956
+ log.verbose(`Legacy submitting ${contractName}.${fcn} via peers ${peers.map((p) => p.peerEndpoint).join(", ")}`);
906
957
  const result = await transaction.submit(...args);
907
958
  return Uint8Array.from(result);
908
959
  }
@@ -1030,14 +1081,8 @@ class FabricClientAdapter extends core_1.Adapter {
1030
1081
  * @param {Array<string>} [endorsingOrganizations] - Organizations that must endorse the transaction
1031
1082
  * @return {Promise<Uint8Array>} Promise resolving to the transaction result
1032
1083
  */
1033
- async submitTransaction(ctx, api, args, transientData, endorsingOrganizations, className) {
1034
- if (this.shouldUseLegacyGateway(ctx)) {
1035
- const legacyArgs = this.prepareLegacyArgs(args);
1036
- const transientMap = this.buildLegacyTransient(transientData);
1037
- const peerConfigs = this.buildLegacyPeerConfigs(ctx);
1038
- return this.submitLegacyWithExplicitEndorsers(ctx, api, legacyArgs, transientMap, peerConfigs, className);
1039
- }
1040
- return this.transaction(ctx, api, true, args, transientData, endorsingOrganizations, className);
1084
+ async submitTransaction(ctx, api, args, transientData, endorsingOrganizations, clazzOrContractName) {
1085
+ return this.transaction(ctx, api, true, args, transientData, endorsingOrganizations, clazzOrContractName);
1041
1086
  }
1042
1087
  /**
1043
1088
  * @description Evaluates a transaction on the Fabric network
@@ -1048,8 +1093,8 @@ class FabricClientAdapter extends core_1.Adapter {
1048
1093
  * @param {Array<string>} [endorsingOrganizations] - Organizations that must endorse the transaction
1049
1094
  * @return {Promise<Uint8Array>} Promise resolving to the transaction result
1050
1095
  */
1051
- async evaluateTransaction(ctx, api, args, transientData, endorsingOrganizations, className) {
1052
- return this.transaction(ctx, api, false, args, transientData, endorsingOrganizations, className);
1096
+ async evaluateTransaction(ctx, api, args, transientData, endorsingOrganizations, clazzOrContractName) {
1097
+ return this.transaction(ctx, api, false, args, transientData, endorsingOrganizations, clazzOrContractName);
1053
1098
  }
1054
1099
  async migrate(reference, ...args) {
1055
1100
  const { ctxArgs } = (await this.logCtx([args], core_1.PersistenceKeys.MIGRATION, true)).for(this.migrate);
@@ -1077,14 +1122,30 @@ class FabricClientAdapter extends core_1.Adapter {
1077
1122
  * @param {PeerConfig} config - The peer configuration
1078
1123
  * @return {Contrakt} The Contract instance
1079
1124
  */
1080
- static getContract(gateway, config, contractName) {
1125
+ static async getContract(gateway, config, clazzOrContractName, ctx) {
1081
1126
  const log = this.log.for(this.getContract);
1082
- const network = this.getNetwork(gateway, config.channel);
1127
+ let channel = config.channel;
1128
+ let chaincode = config.chaincodeName;
1129
+ let contractName = config.contractName;
1130
+ if (clazzOrContractName) {
1131
+ if (typeof clazzOrContractName === "string")
1132
+ contractName = clazzOrContractName;
1133
+ else {
1134
+ if (!ctx)
1135
+ throw new db_decorators_1.InternalError(`No context received to determine chaincode config`);
1136
+ channel =
1137
+ (await this.channelFor(clazzOrContractName, config, ctx)) || channel;
1138
+ chaincode =
1139
+ (await this.chaincodeFor(clazzOrContractName, config, ctx)) ||
1140
+ chaincode;
1141
+ contractName = await this.contractFor(clazzOrContractName, config, ctx);
1142
+ }
1143
+ }
1144
+ const network = this.getNetwork(gateway, channel);
1083
1145
  let contract;
1084
1146
  try {
1085
- log.debug(`Retrieving chaincode ${config.chaincodeName} contract ${contractName || config.contractName} from network ${config.channel}`);
1086
- contractName = contractName ? contractName : config.contractName;
1087
- contract = network.getContract(config.chaincodeName, contractName);
1147
+ log.debug(`Retrieving chaincode ${chaincode} contract ${contractName} from network ${channel}`);
1148
+ contract = network.getContract(chaincode, contractName);
1088
1149
  }
1089
1150
  catch (e) {
1090
1151
  throw this.parseError(e);
@@ -1247,6 +1308,16 @@ class FabricClientAdapter extends core_1.Adapter {
1247
1308
  Dispatch() {
1248
1309
  return new FabricClientAdapter["_baseDispatch"](this.client);
1249
1310
  }
1311
+ static chaincodeFor(model, config, ...args) {
1312
+ return decorator_validation_1.Model.chaincodeOf(model, ...args) || config.chaincodeName;
1313
+ }
1314
+ static channelFor(model, config, ...args) {
1315
+ return decorator_validation_1.Model.channelOf(model, ...args) || config.channel;
1316
+ }
1317
+ static contractFor(model, config, ...args) {
1318
+ return (decorator_validation_1.Model.contractOf(model, ...args) ||
1319
+ (0, index_js_1.DefaultContractResolver)(model, ...args));
1320
+ }
1250
1321
  /**
1251
1322
  * @description Parses an error into a BaseError
1252
1323
  * @summary Converts any error into a standardized BaseError using the parent class implementation
@@ -1319,47 +1390,47 @@ __decorate([
1319
1390
  (0, logging_1.debug)(),
1320
1391
  (0, logging_1.final)(),
1321
1392
  __metadata("design:type", Function),
1322
- __metadata("design:paramtypes", [Object, Object, Object, Object, core_1.Context]),
1393
+ __metadata("design:paramtypes", [Object, Object, Object, Object, FabricClientContext_js_1.FabricClientContext]),
1323
1394
  __metadata("design:returntype", Promise)
1324
1395
  ], FabricClientAdapter.prototype, "create", null);
1325
1396
  __decorate([
1326
1397
  (0, logging_1.debug)(),
1327
1398
  (0, logging_1.final)(),
1328
1399
  __metadata("design:type", Function),
1329
- __metadata("design:paramtypes", [Object, core_1.Context]),
1400
+ __metadata("design:paramtypes", [Object, FabricClientContext_js_1.FabricClientContext]),
1330
1401
  __metadata("design:returntype", Promise)
1331
1402
  ], FabricClientAdapter.prototype, "healthcheck", null);
1332
1403
  __decorate([
1333
1404
  (0, logging_1.debug)(),
1334
1405
  (0, logging_1.final)(),
1335
1406
  __metadata("design:type", Function),
1336
- __metadata("design:paramtypes", [Object, Object, core_1.Context]),
1407
+ __metadata("design:paramtypes", [Object, Object, FabricClientContext_js_1.FabricClientContext]),
1337
1408
  __metadata("design:returntype", Promise)
1338
1409
  ], FabricClientAdapter.prototype, "read", null);
1339
1410
  __decorate([
1340
1411
  (0, logging_1.debug)(),
1341
1412
  (0, logging_1.final)(),
1342
1413
  __metadata("design:type", Function),
1343
- __metadata("design:paramtypes", [Object, Object, Object, Object, core_1.Context]),
1414
+ __metadata("design:paramtypes", [Object, Object, Object, Object, FabricClientContext_js_1.FabricClientContext]),
1344
1415
  __metadata("design:returntype", Promise)
1345
1416
  ], FabricClientAdapter.prototype, "update", null);
1346
1417
  __decorate([
1347
1418
  (0, logging_1.debug)(),
1348
1419
  (0, logging_1.final)(),
1349
1420
  __metadata("design:type", Function),
1350
- __metadata("design:paramtypes", [Object, Object, core_1.Context]),
1421
+ __metadata("design:paramtypes", [Object, Object, FabricClientContext_js_1.FabricClientContext]),
1351
1422
  __metadata("design:returntype", Promise)
1352
1423
  ], FabricClientAdapter.prototype, "delete", null);
1353
1424
  __decorate([
1354
1425
  (0, logging_1.debug)(),
1355
1426
  __metadata("design:type", Function),
1356
- __metadata("design:paramtypes", [Object, typeof (_a = typeof D !== "undefined" && D) === "function" ? _a : Object, Object, core_1.Context]),
1427
+ __metadata("design:paramtypes", [Object, typeof (_a = typeof D !== "undefined" && D) === "function" ? _a : Object, Object, FabricClientContext_js_1.FabricClientContext]),
1357
1428
  __metadata("design:returntype", Promise)
1358
1429
  ], FabricClientAdapter.prototype, "raw", null);
1359
1430
  __decorate([
1360
1431
  (0, logging_1.debug)(),
1361
1432
  __metadata("design:type", Function),
1362
- __metadata("design:paramtypes", [String, String, Object, core_1.Context]),
1433
+ __metadata("design:paramtypes", [String, String, Object, FabricClientContext_js_1.FabricClientContext]),
1363
1434
  __metadata("design:returntype", Promise)
1364
1435
  ], FabricClientAdapter.prototype, "view", null);
1365
1436
  FabricClientAdapter.decoration();