@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.
- package/dist/for-fabric.cjs +1 -1
- package/dist/for-fabric.cjs.map +1 -1
- package/dist/for-fabric.js +1 -1
- package/dist/for-fabric.js.map +1 -1
- package/lib/cjs/cli-module.cjs +109 -4
- package/lib/cjs/cli-module.cjs.map +1 -1
- package/lib/cjs/client/FabricClientAdapter.cjs +134 -63
- package/lib/cjs/client/FabricClientAdapter.cjs.map +1 -1
- package/lib/cjs/client/FabricClientContext.cjs +30 -0
- package/lib/cjs/client/FabricClientContext.cjs.map +1 -0
- package/lib/cjs/client/FabricClientDispatch.cjs +1 -1
- package/lib/cjs/client/FabricClientDispatch.cjs.map +1 -1
- package/lib/cjs/client/FabricClientRepository.cjs +1 -1
- package/lib/cjs/client/FabricClientRepository.cjs.map +1 -1
- package/lib/cjs/client/FabricClientStatement.cjs +3 -2
- package/lib/cjs/client/FabricClientStatement.cjs.map +1 -1
- package/lib/cjs/client/constants.cjs +1 -0
- package/lib/cjs/client/constants.cjs.map +1 -1
- package/lib/cjs/client/index.cjs +1 -0
- package/lib/cjs/client/index.cjs.map +1 -1
- package/lib/cjs/client/indexes/generation.cjs +1 -13
- package/lib/cjs/client/indexes/generation.cjs.map +1 -1
- package/lib/cjs/contract/models/Audit.cjs +1 -3
- package/lib/cjs/contract/models/Audit.cjs.map +1 -1
- package/lib/cjs/contract/models/History.cjs +2 -76
- package/lib/cjs/contract/models/History.cjs.map +1 -1
- package/lib/cjs/contract/models/OtherBatchShared.cjs +3 -238
- package/lib/cjs/contract/models/OtherBatchShared.cjs.map +1 -1
- package/lib/cjs/contract/models/OtherLeaflet.cjs +5 -117
- package/lib/cjs/contract/models/OtherLeaflet.cjs.map +1 -1
- package/lib/cjs/contract/models/OtherLeafletFile.cjs +2 -66
- package/lib/cjs/contract/models/OtherLeafletFile.cjs.map +1 -1
- package/lib/cjs/contract/models/OtherMarket.cjs +2 -85
- package/lib/cjs/contract/models/OtherMarket.cjs.map +1 -1
- package/lib/cjs/contract/models/OtherProduct.cjs +2 -78
- package/lib/cjs/contract/models/OtherProduct.cjs.map +1 -1
- package/lib/cjs/contract/models/OtherProductImage.cjs +2 -60
- package/lib/cjs/contract/models/OtherProductImage.cjs.map +1 -1
- package/lib/cjs/contract/models/OtherProductShared.cjs +2 -100
- package/lib/cjs/contract/models/OtherProductShared.cjs.map +1 -1
- package/lib/cjs/contract/models/OtherProductStrength.cjs +2 -86
- package/lib/cjs/contract/models/OtherProductStrength.cjs.map +1 -1
- package/lib/cjs/contract/models/ProductStrength.cjs.map +1 -1
- package/lib/cjs/contract/models/SegregatedDocument.cjs +0 -4
- package/lib/cjs/contract/models/SegregatedDocument.cjs.map +1 -1
- package/lib/cjs/contract/models/decorators.cjs +0 -3
- package/lib/cjs/contract/models/decorators.cjs.map +1 -1
- package/lib/cjs/contract/trackedModels/OtherBatchShared.cjs +129 -0
- package/lib/cjs/contract/trackedModels/OtherBatchShared.cjs.map +1 -0
- package/lib/cjs/contract/trackedModels/OtherProduct.cjs +1 -1
- package/lib/cjs/contract/trackedModels/OtherProduct.cjs.map +1 -1
- package/lib/cjs/contracts/ContractAdapter.cjs +39 -7
- package/lib/cjs/contracts/ContractAdapter.cjs.map +1 -1
- package/lib/cjs/contracts/MigrationContract.cjs +4 -5
- package/lib/cjs/contracts/MigrationContract.cjs.map +1 -1
- package/lib/cjs/contracts/crud/crud-contract.cjs +25 -21
- package/lib/cjs/contracts/crud/crud-contract.cjs.map +1 -1
- package/lib/cjs/shared/constants.cjs +4 -0
- package/lib/cjs/shared/constants.cjs.map +1 -1
- package/lib/cjs/shared/decorators.cjs +22 -1
- package/lib/cjs/shared/decorators.cjs.map +1 -1
- package/lib/cjs/shared/overrides/overrides.cjs +34 -0
- package/lib/cjs/shared/overrides/overrides.cjs.map +1 -1
- package/lib/cjs/version.cjs +16 -2
- package/lib/cjs/version.cjs.map +1 -1
- package/lib/esm/cli-module.js +109 -4
- package/lib/esm/cli-module.js.map +1 -1
- package/lib/esm/client/FabricClientAdapter.js +135 -64
- package/lib/esm/client/FabricClientAdapter.js.map +1 -1
- package/lib/esm/client/FabricClientContext.js +25 -0
- package/lib/esm/client/FabricClientContext.js.map +1 -0
- package/lib/esm/client/FabricClientDispatch.js +1 -1
- package/lib/esm/client/FabricClientDispatch.js.map +1 -1
- package/lib/esm/client/FabricClientRepository.js +1 -1
- package/lib/esm/client/FabricClientRepository.js.map +1 -1
- package/lib/esm/client/FabricClientStatement.js +3 -2
- package/lib/esm/client/FabricClientStatement.js.map +1 -1
- package/lib/esm/client/constants.js +1 -0
- package/lib/esm/client/constants.js.map +1 -1
- package/lib/esm/client/index.js +1 -0
- package/lib/esm/client/index.js.map +1 -1
- package/lib/esm/client/indexes/generation.js +1 -13
- package/lib/esm/client/indexes/generation.js.map +1 -1
- package/lib/esm/contract/index.js.map +1 -1
- package/lib/esm/contract/models/Audit.js +2 -4
- package/lib/esm/contract/models/Audit.js.map +1 -1
- package/lib/esm/contract/models/History.js +1 -71
- package/lib/esm/contract/models/History.js.map +1 -1
- package/lib/esm/contract/models/OtherBatchShared.js +1 -231
- package/lib/esm/contract/models/OtherBatchShared.js.map +1 -1
- package/lib/esm/contract/models/OtherLeaflet.js +2 -111
- package/lib/esm/contract/models/OtherLeaflet.js.map +1 -1
- package/lib/esm/contract/models/OtherLeafletFile.js +1 -61
- package/lib/esm/contract/models/OtherLeafletFile.js.map +1 -1
- package/lib/esm/contract/models/OtherMarket.js +1 -80
- package/lib/esm/contract/models/OtherMarket.js.map +1 -1
- package/lib/esm/contract/models/OtherProduct.js +1 -73
- package/lib/esm/contract/models/OtherProduct.js.map +1 -1
- package/lib/esm/contract/models/OtherProductImage.js +1 -55
- package/lib/esm/contract/models/OtherProductImage.js.map +1 -1
- package/lib/esm/contract/models/OtherProductShared.js +1 -95
- package/lib/esm/contract/models/OtherProductShared.js.map +1 -1
- package/lib/esm/contract/models/OtherProductStrength.js +1 -81
- package/lib/esm/contract/models/OtherProductStrength.js.map +1 -1
- package/lib/esm/contract/models/ProductStrength.js +1 -1
- package/lib/esm/contract/models/ProductStrength.js.map +1 -1
- package/lib/esm/contract/models/SegregatedDocument.js +1 -5
- package/lib/esm/contract/models/SegregatedDocument.js.map +1 -1
- package/lib/esm/contract/models/decorators.js +0 -3
- package/lib/esm/contract/models/decorators.js.map +1 -1
- package/lib/esm/contract/trackedModels/OtherBatchShared.js +120 -0
- package/lib/esm/contract/trackedModels/OtherBatchShared.js.map +1 -0
- package/lib/esm/contract/trackedModels/OtherProduct.js +2 -2
- package/lib/esm/contract/trackedModels/OtherProduct.js.map +1 -1
- package/lib/esm/contract/trackedModels/OtherProductStrength.js.map +1 -1
- package/lib/esm/contracts/ContractAdapter.js +40 -8
- package/lib/esm/contracts/ContractAdapter.js.map +1 -1
- package/lib/esm/contracts/FabricContractStatement.js.map +1 -1
- package/lib/esm/contracts/MigrationContract.js +4 -5
- package/lib/esm/contracts/MigrationContract.js.map +1 -1
- package/lib/esm/contracts/crud/crud-contract.js +27 -23
- package/lib/esm/contracts/crud/crud-contract.js.map +1 -1
- package/lib/esm/shared/constants.js +4 -0
- package/lib/esm/shared/constants.js.map +1 -1
- package/lib/esm/shared/decorators.js +17 -0
- package/lib/esm/shared/decorators.js.map +1 -1
- package/lib/esm/shared/overrides/overrides.js +35 -1
- package/lib/esm/shared/overrides/overrides.js.map +1 -1
- package/lib/esm/version.js +15 -1
- package/lib/esm/version.js.map +1 -1
- package/lib/types/client/FabricClientAdapter.d.cts +42 -33
- package/lib/types/client/FabricClientAdapter.d.mts +42 -33
- package/lib/types/client/FabricClientContext.d.cts +11 -0
- package/lib/types/client/FabricClientContext.d.mts +11 -0
- package/lib/types/client/FabricClientDispatch.d.cts +5 -5
- package/lib/types/client/FabricClientDispatch.d.mts +5 -5
- package/lib/types/client/FabricClientStatement.d.cts +6 -6
- package/lib/types/client/FabricClientStatement.d.mts +6 -6
- package/lib/types/client/index.d.cts +1 -0
- package/lib/types/client/index.d.mts +1 -0
- package/lib/types/client/types.d.cts +2 -0
- package/lib/types/client/types.d.mts +2 -0
- package/lib/types/contract/models/History.d.cts +1 -9
- package/lib/types/contract/models/History.d.mts +1 -9
- package/lib/types/contract/models/OtherBatchShared.d.cts +1 -55
- package/lib/types/contract/models/OtherBatchShared.d.mts +1 -55
- package/lib/types/contract/models/OtherLeaflet.d.cts +2 -16
- package/lib/types/contract/models/OtherLeaflet.d.mts +2 -16
- package/lib/types/contract/models/OtherLeafletFile.d.cts +1 -10
- package/lib/types/contract/models/OtherLeafletFile.d.mts +1 -10
- package/lib/types/contract/models/OtherMarket.d.cts +1 -13
- package/lib/types/contract/models/OtherMarket.d.mts +1 -13
- package/lib/types/contract/models/OtherProduct.d.cts +1 -12
- package/lib/types/contract/models/OtherProduct.d.mts +1 -12
- package/lib/types/contract/models/OtherProductImage.d.cts +1 -9
- package/lib/types/contract/models/OtherProductImage.d.mts +1 -9
- package/lib/types/contract/models/OtherProductShared.d.cts +1 -18
- package/lib/types/contract/models/OtherProductShared.d.mts +1 -18
- package/lib/types/contract/models/OtherProductStrength.d.cts +1 -12
- package/lib/types/contract/models/OtherProductStrength.d.mts +1 -12
- package/lib/types/contract/trackedModels/OtherBatchShared.d.cts +19 -0
- package/lib/types/contract/trackedModels/OtherBatchShared.d.mts +19 -0
- package/lib/types/contracts/ContractAdapter.d.cts +1 -0
- package/lib/types/contracts/ContractAdapter.d.mts +1 -0
- package/lib/types/contracts/FabricContractStatement.d.cts +2 -3
- package/lib/types/contracts/FabricContractStatement.d.mts +2 -3
- package/lib/types/contracts/MigrationContract.d.cts +1 -1
- package/lib/types/contracts/MigrationContract.d.mts +1 -1
- package/lib/types/contracts/crud/crud-contract.d.cts +3 -1
- package/lib/types/contracts/crud/crud-contract.d.mts +3 -1
- package/lib/types/contracts/types.d.cts +1 -0
- package/lib/types/contracts/types.d.mts +1 -0
- package/lib/types/shared/constants.d.cts +5 -1
- package/lib/types/shared/constants.d.mts +5 -1
- package/lib/types/shared/decorators.d.cts +9 -1
- package/lib/types/shared/decorators.d.mts +9 -1
- package/lib/types/shared/overrides/Model.d.cts +4 -0
- package/lib/types/shared/overrides/Model.d.mts +4 -0
- package/lib/types/version.d.cts +15 -1
- package/lib/types/version.d.mts +15 -1
- 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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,
|
|
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<
|
|
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,
|
|
721
|
-
return FabricClientAdapter.getContract(await this.Gateway(ctx), this.config,
|
|
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,
|
|
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,
|
|
756
|
-
log.verbose(`${submit ? "Submit" : "Evaluate"}ting transaction ${
|
|
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:
|
|
765
|
-
acc[key]
|
|
766
|
-
|
|
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,
|
|
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
|
-
|
|
894
|
-
|
|
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 ${
|
|
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,
|
|
1034
|
-
|
|
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,
|
|
1052
|
-
return this.transaction(ctx, api, false, args, transientData, endorsingOrganizations,
|
|
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,
|
|
1125
|
+
static async getContract(gateway, config, clazzOrContractName, ctx) {
|
|
1081
1126
|
const log = this.log.for(this.getContract);
|
|
1082
|
-
|
|
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 ${
|
|
1086
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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();
|