@decaf-ts/for-fabric 0.0.2
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/LICENSE.md +22 -0
- package/README.md +647 -0
- package/dist/for-fabric.cjs +6223 -0
- package/dist/for-fabric.esm.cjs +6180 -0
- package/lib/client/FabricClientAdapter.cjs +760 -0
- package/lib/client/FabricClientAdapter.d.ts +381 -0
- package/lib/client/FabricClientDispatch.cjs +186 -0
- package/lib/client/FabricClientDispatch.d.ts +125 -0
- package/lib/client/FabricClientRepository.cjs +131 -0
- package/lib/client/FabricClientRepository.d.ts +100 -0
- package/lib/client/erc20/erc20ClientRepository.cjs +343 -0
- package/lib/client/erc20/erc20ClientRepository.d.ts +254 -0
- package/lib/client/fabric-fs.cjs +234 -0
- package/lib/client/fabric-fs.d.ts +92 -0
- package/lib/client/index.cjs +30 -0
- package/lib/client/index.d.ts +13 -0
- package/lib/client/logging.cjs +102 -0
- package/lib/client/logging.d.ts +60 -0
- package/lib/client/services/LoggedService.cjs +47 -0
- package/lib/client/services/LoggedService.d.ts +42 -0
- package/lib/client/services/constants.cjs +3 -0
- package/lib/client/services/constants.d.ts +15 -0
- package/lib/client/services/enrollementService.cjs +344 -0
- package/lib/client/services/enrollementService.d.ts +176 -0
- package/lib/client/services/index.cjs +18 -0
- package/lib/client/services/index.d.ts +1 -0
- package/lib/contracts/ContractAdapter.cjs +730 -0
- package/lib/contracts/ContractAdapter.d.ts +296 -0
- package/lib/contracts/ContractContext.cjs +85 -0
- package/lib/contracts/ContractContext.d.ts +64 -0
- package/lib/contracts/ContractPrivateDataAdapter.cjs +281 -0
- package/lib/contracts/ContractPrivateDataAdapter.d.ts +74 -0
- package/lib/contracts/FabricConstruction.cjs +441 -0
- package/lib/contracts/FabricConstruction.d.ts +304 -0
- package/lib/contracts/FabricContractRepository.cjs +306 -0
- package/lib/contracts/FabricContractRepository.d.ts +162 -0
- package/lib/contracts/FabricContractRepositoryObservableHandler.cjs +85 -0
- package/lib/contracts/FabricContractRepositoryObservableHandler.d.ts +62 -0
- package/lib/contracts/FabricContractSequence.cjs +139 -0
- package/lib/contracts/FabricContractSequence.d.ts +61 -0
- package/lib/contracts/FabricContractStatement.cjs +119 -0
- package/lib/contracts/FabricContractStatement.d.ts +34 -0
- package/lib/contracts/PrivateSequence.cjs +36 -0
- package/lib/contracts/PrivateSequence.d.ts +15 -0
- package/lib/contracts/crud/crud-contract.cjs +257 -0
- package/lib/contracts/crud/crud-contract.d.ts +168 -0
- package/lib/contracts/crud/index.cjs +19 -0
- package/lib/contracts/crud/index.d.ts +2 -0
- package/lib/contracts/crud/serialized-crud-contract.cjs +172 -0
- package/lib/contracts/crud/serialized-crud-contract.d.ts +37 -0
- package/lib/contracts/erc20/erc20contract.cjs +569 -0
- package/lib/contracts/erc20/erc20contract.d.ts +151 -0
- package/lib/contracts/erc20/index.cjs +21 -0
- package/lib/contracts/erc20/index.d.ts +2 -0
- package/lib/contracts/erc20/models.cjs +209 -0
- package/lib/contracts/erc20/models.d.ts +114 -0
- package/lib/contracts/index.cjs +32 -0
- package/lib/contracts/index.d.ts +15 -0
- package/lib/contracts/logging.cjs +96 -0
- package/lib/contracts/logging.d.ts +49 -0
- package/lib/contracts/private-data.cjs +121 -0
- package/lib/contracts/private-data.d.ts +16 -0
- package/lib/contracts/types.cjs +3 -0
- package/lib/contracts/types.d.ts +26 -0
- package/lib/esm/client/FabricClientAdapter.d.ts +381 -0
- package/lib/esm/client/FabricClientAdapter.js +723 -0
- package/lib/esm/client/FabricClientDispatch.d.ts +125 -0
- package/lib/esm/client/FabricClientDispatch.js +182 -0
- package/lib/esm/client/FabricClientRepository.d.ts +100 -0
- package/lib/esm/client/FabricClientRepository.js +127 -0
- package/lib/esm/client/erc20/erc20ClientRepository.d.ts +254 -0
- package/lib/esm/client/erc20/erc20ClientRepository.js +339 -0
- package/lib/esm/client/fabric-fs.d.ts +92 -0
- package/lib/esm/client/fabric-fs.js +191 -0
- package/lib/esm/client/index.d.ts +13 -0
- package/lib/esm/client/index.js +14 -0
- package/lib/esm/client/logging.d.ts +60 -0
- package/lib/esm/client/logging.js +98 -0
- package/lib/esm/client/services/LoggedService.d.ts +42 -0
- package/lib/esm/client/services/LoggedService.js +43 -0
- package/lib/esm/client/services/constants.d.ts +15 -0
- package/lib/esm/client/services/constants.js +2 -0
- package/lib/esm/client/services/enrollementService.d.ts +176 -0
- package/lib/esm/client/services/enrollementService.js +337 -0
- package/lib/esm/client/services/index.d.ts +1 -0
- package/lib/esm/client/services/index.js +2 -0
- package/lib/esm/contracts/ContractAdapter.d.ts +296 -0
- package/lib/esm/contracts/ContractAdapter.js +724 -0
- package/lib/esm/contracts/ContractContext.d.ts +64 -0
- package/lib/esm/contracts/ContractContext.js +81 -0
- package/lib/esm/contracts/ContractPrivateDataAdapter.d.ts +74 -0
- package/lib/esm/contracts/ContractPrivateDataAdapter.js +277 -0
- package/lib/esm/contracts/FabricConstruction.d.ts +304 -0
- package/lib/esm/contracts/FabricConstruction.js +433 -0
- package/lib/esm/contracts/FabricContractRepository.d.ts +162 -0
- package/lib/esm/contracts/FabricContractRepository.js +302 -0
- package/lib/esm/contracts/FabricContractRepositoryObservableHandler.d.ts +62 -0
- package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +81 -0
- package/lib/esm/contracts/FabricContractSequence.d.ts +61 -0
- package/lib/esm/contracts/FabricContractSequence.js +135 -0
- package/lib/esm/contracts/FabricContractStatement.d.ts +34 -0
- package/lib/esm/contracts/FabricContractStatement.js +115 -0
- package/lib/esm/contracts/PrivateSequence.d.ts +15 -0
- package/lib/esm/contracts/PrivateSequence.js +33 -0
- package/lib/esm/contracts/crud/crud-contract.d.ts +168 -0
- package/lib/esm/contracts/crud/crud-contract.js +253 -0
- package/lib/esm/contracts/crud/index.d.ts +2 -0
- package/lib/esm/contracts/crud/index.js +3 -0
- package/lib/esm/contracts/crud/serialized-crud-contract.d.ts +37 -0
- package/lib/esm/contracts/crud/serialized-crud-contract.js +168 -0
- package/lib/esm/contracts/erc20/erc20contract.d.ts +151 -0
- package/lib/esm/contracts/erc20/erc20contract.js +565 -0
- package/lib/esm/contracts/erc20/index.d.ts +2 -0
- package/lib/esm/contracts/erc20/index.js +4 -0
- package/lib/esm/contracts/erc20/models.d.ts +114 -0
- package/lib/esm/contracts/erc20/models.js +206 -0
- package/lib/esm/contracts/index.d.ts +15 -0
- package/lib/esm/contracts/index.js +16 -0
- package/lib/esm/contracts/logging.d.ts +49 -0
- package/lib/esm/contracts/logging.js +92 -0
- package/lib/esm/contracts/private-data.d.ts +16 -0
- package/lib/esm/contracts/private-data.js +113 -0
- package/lib/esm/contracts/types.d.ts +26 -0
- package/lib/esm/contracts/types.js +2 -0
- package/lib/esm/index.d.ts +8 -0
- package/lib/esm/index.js +9 -0
- package/lib/esm/shared/ClientSerializer.d.ts +52 -0
- package/lib/esm/shared/ClientSerializer.js +80 -0
- package/lib/esm/shared/DeterministicSerializer.d.ts +40 -0
- package/lib/esm/shared/DeterministicSerializer.js +50 -0
- package/lib/esm/shared/SimpleDeterministicSerializer.d.ts +7 -0
- package/lib/esm/shared/SimpleDeterministicSerializer.js +42 -0
- package/lib/esm/shared/constants.d.ts +39 -0
- package/lib/esm/shared/constants.js +42 -0
- package/lib/esm/shared/crypto.d.ts +107 -0
- package/lib/esm/shared/crypto.js +331 -0
- package/lib/esm/shared/decorators.d.ts +24 -0
- package/lib/esm/shared/decorators.js +98 -0
- package/lib/esm/shared/erc20/erc20-constants.d.ts +25 -0
- package/lib/esm/shared/erc20/erc20-constants.js +27 -0
- package/lib/esm/shared/errors.d.ts +116 -0
- package/lib/esm/shared/errors.js +132 -0
- package/lib/esm/shared/events.d.ts +39 -0
- package/lib/esm/shared/events.js +47 -0
- package/lib/esm/shared/fabric-types.d.ts +33 -0
- package/lib/esm/shared/fabric-types.js +2 -0
- package/lib/esm/shared/index.d.ts +13 -0
- package/lib/esm/shared/index.js +14 -0
- package/lib/esm/shared/interfaces/Checkable.d.ts +21 -0
- package/lib/esm/shared/interfaces/Checkable.js +2 -0
- package/lib/esm/shared/math.d.ts +34 -0
- package/lib/esm/shared/math.js +61 -0
- package/lib/esm/shared/model/Identity.d.ts +42 -0
- package/lib/esm/shared/model/Identity.js +78 -0
- package/lib/esm/shared/model/IdentityCredentials.d.ts +41 -0
- package/lib/esm/shared/model/IdentityCredentials.js +74 -0
- package/lib/esm/shared/model/index.d.ts +1 -0
- package/lib/esm/shared/model/index.js +2 -0
- package/lib/esm/shared/model/utils.d.ts +60 -0
- package/lib/esm/shared/model/utils.js +108 -0
- package/lib/esm/shared/types.d.ts +79 -0
- package/lib/esm/shared/types.js +2 -0
- package/lib/esm/shared/utils.d.ts +55 -0
- package/lib/esm/shared/utils.js +148 -0
- package/lib/index.cjs +25 -0
- package/lib/index.d.ts +8 -0
- package/lib/shared/ClientSerializer.cjs +84 -0
- package/lib/shared/ClientSerializer.d.ts +52 -0
- package/lib/shared/DeterministicSerializer.cjs +54 -0
- package/lib/shared/DeterministicSerializer.d.ts +40 -0
- package/lib/shared/SimpleDeterministicSerializer.cjs +46 -0
- package/lib/shared/SimpleDeterministicSerializer.d.ts +7 -0
- package/lib/shared/constants.cjs +45 -0
- package/lib/shared/constants.d.ts +39 -0
- package/lib/shared/crypto.cjs +369 -0
- package/lib/shared/crypto.d.ts +107 -0
- package/lib/shared/decorators.cjs +105 -0
- package/lib/shared/decorators.d.ts +24 -0
- package/lib/shared/erc20/erc20-constants.cjs +30 -0
- package/lib/shared/erc20/erc20-constants.d.ts +25 -0
- package/lib/shared/errors.cjs +142 -0
- package/lib/shared/errors.d.ts +116 -0
- package/lib/shared/events.cjs +51 -0
- package/lib/shared/events.d.ts +39 -0
- package/lib/shared/fabric-types.cjs +4 -0
- package/lib/shared/fabric-types.d.ts +33 -0
- package/lib/shared/index.cjs +30 -0
- package/lib/shared/index.d.ts +13 -0
- package/lib/shared/interfaces/Checkable.cjs +3 -0
- package/lib/shared/interfaces/Checkable.d.ts +21 -0
- package/lib/shared/math.cjs +66 -0
- package/lib/shared/math.d.ts +34 -0
- package/lib/shared/model/Identity.cjs +81 -0
- package/lib/shared/model/Identity.d.ts +42 -0
- package/lib/shared/model/IdentityCredentials.cjs +77 -0
- package/lib/shared/model/IdentityCredentials.d.ts +41 -0
- package/lib/shared/model/index.cjs +18 -0
- package/lib/shared/model/index.d.ts +1 -0
- package/lib/shared/model/utils.cjs +114 -0
- package/lib/shared/model/utils.d.ts +60 -0
- package/lib/shared/types.cjs +3 -0
- package/lib/shared/types.d.ts +79 -0
- package/lib/shared/utils.cjs +185 -0
- package/lib/shared/utils.d.ts +55 -0
- package/package.json +166 -0
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FabricContractPrivateDataAdapter = void 0;
|
|
4
|
+
const ContractAdapter_1 = require("./ContractAdapter.cjs");
|
|
5
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
6
|
+
const private_data_1 = require("./private-data.cjs");
|
|
7
|
+
const errors_1 = require("./../shared/errors.cjs");
|
|
8
|
+
const FabricContractSequence_1 = require("./FabricContractSequence.cjs");
|
|
9
|
+
const for_couchdb_1 = require("@decaf-ts/for-couchdb");
|
|
10
|
+
class FabricContractPrivateDataAdapter extends ContractAdapter_1.FabricContractAdapter {
|
|
11
|
+
/**
|
|
12
|
+
* @description Creates a new FabricContractAdapter instance
|
|
13
|
+
* @summary Initializes an adapter for interacting with the Fabric state database
|
|
14
|
+
* @param {void} scope - Not used in this adapter
|
|
15
|
+
* @param {string} [alias] - Optional alias for the adapter instance
|
|
16
|
+
*/
|
|
17
|
+
constructor(scope, alias, collections) {
|
|
18
|
+
super(scope, alias);
|
|
19
|
+
this.collections = collections;
|
|
20
|
+
this.collections = collections || [];
|
|
21
|
+
}
|
|
22
|
+
async Sequence(options) {
|
|
23
|
+
return new FabricContractSequence_1.FabricContractSequence(options, this, this.collections);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* @description Reads a record from the state database
|
|
27
|
+
* @summary Retrieves and deserializes a record from the Fabric state database
|
|
28
|
+
* @param {string} tableName - The name of the table/collection
|
|
29
|
+
* @param {string | number} id - The record identifier
|
|
30
|
+
* @param {...any[]} args - Additional arguments, including the chaincode stub and logger
|
|
31
|
+
* @return {Promise<Record<string, any>>} Promise resolving to the retrieved record
|
|
32
|
+
*/
|
|
33
|
+
async read(tableName, id, instance, ...args) {
|
|
34
|
+
const { stub, logger } = args.pop();
|
|
35
|
+
const log = logger.for(this.read);
|
|
36
|
+
let model;
|
|
37
|
+
try {
|
|
38
|
+
const results = await this.readState(stub, tableName, id.toString(), instance);
|
|
39
|
+
if (results.length < 1) {
|
|
40
|
+
log.debug(`No record found for id ${id} in ${tableName} table`);
|
|
41
|
+
throw new db_decorators_1.NotFoundError(`No record found for id ${id} in ${tableName} table`);
|
|
42
|
+
}
|
|
43
|
+
else if (results.length < 2) {
|
|
44
|
+
log.debug(`No record found for id ${id} in ${tableName} table`);
|
|
45
|
+
model = results.pop();
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
model = this.mergeModels(results);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
throw this.parseError(e);
|
|
53
|
+
}
|
|
54
|
+
return model;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* @description Deletes a record from the state database
|
|
58
|
+
* @summary Retrieves a record and then removes it from the Fabric state database
|
|
59
|
+
* @param {string} tableName - The name of the table/collection
|
|
60
|
+
* @param {string | number} id - The record identifier to delete
|
|
61
|
+
* @param {...any[]} args - Additional arguments, including the chaincode stub and logger
|
|
62
|
+
* @return {Promise<Record<string, any>>} Promise resolving to the deleted record
|
|
63
|
+
*/
|
|
64
|
+
async delete(tableName, id, instance, ...args) {
|
|
65
|
+
const ctx = args.pop();
|
|
66
|
+
const { stub, logger } = ctx;
|
|
67
|
+
const log = logger.for(this.delete);
|
|
68
|
+
args.push(ctx);
|
|
69
|
+
let model;
|
|
70
|
+
try {
|
|
71
|
+
model = await this.read(tableName, id, instance, ...args);
|
|
72
|
+
log.verbose(`deleting entry with pk ${id} from ${tableName} table`);
|
|
73
|
+
this.deleteState(stub, tableName, id.toString(), instance);
|
|
74
|
+
}
|
|
75
|
+
catch (e) {
|
|
76
|
+
throw this.parseError(e);
|
|
77
|
+
}
|
|
78
|
+
return model;
|
|
79
|
+
}
|
|
80
|
+
prepare(model, pk, ...args) {
|
|
81
|
+
const { stub, logger } = args.pop();
|
|
82
|
+
const tableName = args.shift();
|
|
83
|
+
const log = logger.for(this.prepare);
|
|
84
|
+
const split = (0, private_data_1.processModel)(this, model);
|
|
85
|
+
// if ((model as any)[PersistenceKeys.METADATA]) {
|
|
86
|
+
// log.silly(
|
|
87
|
+
// `Passing along persistence metadata for ${(model as any)[PersistenceKeys.METADATA]}`
|
|
88
|
+
// );
|
|
89
|
+
// Object.defineProperty(split.result, PersistenceKeys.METADATA, {
|
|
90
|
+
// enumerable: false,
|
|
91
|
+
// writable: false,
|
|
92
|
+
// configurable: true,
|
|
93
|
+
// value: (model as any)[PersistenceKeys.METADATA],
|
|
94
|
+
// });
|
|
95
|
+
// }
|
|
96
|
+
log.info(`Preparing record for ${tableName} table with pk ${model[pk]}`);
|
|
97
|
+
return {
|
|
98
|
+
record: split.privateData,
|
|
99
|
+
id: stub.createCompositeKey(tableName, [String(model[pk])]),
|
|
100
|
+
transient: split.transient,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
updatePrefix(tableName, id, model, ...args) {
|
|
104
|
+
const ctx = args.pop();
|
|
105
|
+
const collections = Object.keys(model);
|
|
106
|
+
for (const collection of collections) {
|
|
107
|
+
model[collection][for_couchdb_1.CouchDBKeys.TABLE] = tableName;
|
|
108
|
+
}
|
|
109
|
+
const record = model;
|
|
110
|
+
return [tableName, id, record, ctx];
|
|
111
|
+
}
|
|
112
|
+
async putState(stub, id, model,
|
|
113
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
114
|
+
...args) {
|
|
115
|
+
const collections = Object.keys(model);
|
|
116
|
+
let res = {};
|
|
117
|
+
let data;
|
|
118
|
+
for (const collection of collections) {
|
|
119
|
+
res = model[collection];
|
|
120
|
+
try {
|
|
121
|
+
data = Buffer.from(ContractAdapter_1.FabricContractAdapter.serializer.serialize(model[collection]));
|
|
122
|
+
}
|
|
123
|
+
catch (e) {
|
|
124
|
+
throw new db_decorators_1.SerializationError(`Failed to serialize record with id ${id}: ${e}`);
|
|
125
|
+
}
|
|
126
|
+
await stub.putPrivateData(collection, id.toString(), data);
|
|
127
|
+
}
|
|
128
|
+
return res;
|
|
129
|
+
}
|
|
130
|
+
async readState(stub, tableName, id, instance,
|
|
131
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
132
|
+
...args) {
|
|
133
|
+
const composedKey = stub.createCompositeKey(tableName, [String(id)]);
|
|
134
|
+
const model = (0, private_data_1.modelToPrivate)(instance);
|
|
135
|
+
const collections = Object.keys(model.private);
|
|
136
|
+
const results = [];
|
|
137
|
+
for (const collection of collections) {
|
|
138
|
+
try {
|
|
139
|
+
let res = await stub.getPrivateData(collection, composedKey);
|
|
140
|
+
if (res.toString() === "") {
|
|
141
|
+
throw new db_decorators_1.NotFoundError(`Entry with id ${id} doesn't exist...`);
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
res = ContractAdapter_1.FabricContractAdapter.serializer.deserialize(res.toString()
|
|
145
|
+
// model.constructor.name
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
catch (e) {
|
|
149
|
+
throw new db_decorators_1.SerializationError(`Failed to parse private data: ${e}`);
|
|
150
|
+
}
|
|
151
|
+
results.push(res);
|
|
152
|
+
}
|
|
153
|
+
catch (e) {
|
|
154
|
+
if (private_data_1.MISSING_PRIVATE_DATA_REGEX.test(e.message))
|
|
155
|
+
throw new errors_1.UnauthorizedPrivateDataAccess(e);
|
|
156
|
+
throw e;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
return results;
|
|
160
|
+
}
|
|
161
|
+
async deleteState(stub, tableName, id, instance,
|
|
162
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
163
|
+
...args) {
|
|
164
|
+
const composedKey = stub.createCompositeKey(tableName, [String(id)]);
|
|
165
|
+
const model = (0, private_data_1.modelToPrivate)(instance);
|
|
166
|
+
const collections = Object.keys(model.private);
|
|
167
|
+
for (const collection of collections) {
|
|
168
|
+
await stub.deletePrivateData(collection, composedKey);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
async queryResult(stub, rawInput, instance) {
|
|
172
|
+
const privateData = (0, private_data_1.modelToPrivate)(instance).private;
|
|
173
|
+
const collection = Object.keys(privateData)[0] || "";
|
|
174
|
+
const result = (await stub.getPrivateDataQueryResult(collection, JSON.stringify(rawInput)));
|
|
175
|
+
const iterator = result.iterator;
|
|
176
|
+
return iterator;
|
|
177
|
+
}
|
|
178
|
+
async queryResultPaginated(stub, rawInput, limit = 250, skip = undefined, instance) {
|
|
179
|
+
const privateData = (0, private_data_1.modelToPrivate)(instance).private;
|
|
180
|
+
const collection = Object.keys(privateData)[0] || "";
|
|
181
|
+
const iterator = await stub.getPrivateDataQueryResult(collection, JSON.stringify(rawInput));
|
|
182
|
+
const results = [];
|
|
183
|
+
let count = 0;
|
|
184
|
+
let reachedBookmark = skip ? false : true;
|
|
185
|
+
let lastKey = null;
|
|
186
|
+
while (true) {
|
|
187
|
+
const res = await iterator.next();
|
|
188
|
+
if (res.value && res.value.value.toString()) {
|
|
189
|
+
const recordKey = res.value.key;
|
|
190
|
+
const recordValue = res.value.value.toString("utf8");
|
|
191
|
+
// If we have a skip, skip until we reach it
|
|
192
|
+
if (!reachedBookmark) {
|
|
193
|
+
if (recordKey === skip?.toString()) {
|
|
194
|
+
reachedBookmark = true;
|
|
195
|
+
}
|
|
196
|
+
continue;
|
|
197
|
+
}
|
|
198
|
+
results.push({ Key: recordKey, Record: JSON.parse(recordValue) });
|
|
199
|
+
lastKey = recordKey;
|
|
200
|
+
count++;
|
|
201
|
+
if (count >= limit) {
|
|
202
|
+
await iterator.close();
|
|
203
|
+
return {
|
|
204
|
+
iterator: results,
|
|
205
|
+
metadata: {
|
|
206
|
+
fetchedRecordsCount: results.length,
|
|
207
|
+
bookmark: lastKey,
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (res.done) {
|
|
213
|
+
await iterator.close();
|
|
214
|
+
return {
|
|
215
|
+
iterator: results,
|
|
216
|
+
metadata: {
|
|
217
|
+
fetchedRecordsCount: results.length,
|
|
218
|
+
bookmark: "",
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
// return (await stub.getQueryResultWithPagination(
|
|
224
|
+
// JSON.stringify(rawInput),
|
|
225
|
+
// limit,
|
|
226
|
+
// skip?.toString()
|
|
227
|
+
// )) as StateQueryResponse<Iterators.StateQueryIterator>;
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* @description Executes a raw query against the state database
|
|
231
|
+
* @summary Performs a rich query using CouchDB syntax against the Fabric state database
|
|
232
|
+
* @template R - The return type
|
|
233
|
+
* @param {MangoQuery} rawInput - The Mango Query to execute
|
|
234
|
+
* @param {boolean} docsOnly - Whether to return only documents (not used in this implementation)
|
|
235
|
+
* @param {...any[]} args - Additional arguments, including the chaincode stub and logger
|
|
236
|
+
* @return {Promise<R>} Promise resolving to the query results
|
|
237
|
+
* @mermaid
|
|
238
|
+
* sequenceDiagram
|
|
239
|
+
* participant Caller
|
|
240
|
+
* participant FabricContractAdapter
|
|
241
|
+
* participant Stub
|
|
242
|
+
* participant StateDB
|
|
243
|
+
*
|
|
244
|
+
* Caller->>FabricContractAdapter: raw(rawInput, docsOnly, ctx)
|
|
245
|
+
* FabricContractAdapter->>FabricContractAdapter: Extract limit and skip
|
|
246
|
+
* alt With pagination
|
|
247
|
+
* FabricContractAdapter->>Stub: getQueryResultWithPagination(query, limit, skip)
|
|
248
|
+
* else Without pagination
|
|
249
|
+
* FabricContractAdapter->>Stub: getQueryResult(query)
|
|
250
|
+
* end
|
|
251
|
+
* Stub->>StateDB: Execute query
|
|
252
|
+
* StateDB-->>Stub: Iterator
|
|
253
|
+
* Stub-->>FabricContractAdapter: Iterator
|
|
254
|
+
* FabricContractAdapter->>FabricContractAdapter: resultIterator(log, iterator)
|
|
255
|
+
* FabricContractAdapter-->>Caller: results
|
|
256
|
+
*/
|
|
257
|
+
async raw(rawInput, docsOnly, ...args) {
|
|
258
|
+
const { stub, logger } = args.pop();
|
|
259
|
+
const log = logger.for(this.raw);
|
|
260
|
+
const { skip, limit } = rawInput;
|
|
261
|
+
const instance = args.shift();
|
|
262
|
+
let iterator;
|
|
263
|
+
if (limit || skip) {
|
|
264
|
+
delete rawInput["limit"];
|
|
265
|
+
delete rawInput["skip"];
|
|
266
|
+
log.debug(`Retrieving paginated iterator: limit: ${limit}/ skip: ${skip}`);
|
|
267
|
+
const response = (await this.queryResultPaginated(stub, rawInput, limit || 250, skip?.toString(), instance));
|
|
268
|
+
iterator = response.iterator;
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
log.debug("Retrieving iterator");
|
|
272
|
+
iterator = (await this.queryResult(stub, rawInput, instance));
|
|
273
|
+
}
|
|
274
|
+
log.debug("Iterator acquired");
|
|
275
|
+
const results = (await this.resultIterator(log, iterator));
|
|
276
|
+
log.debug(`returning {0} results`, `${Array.isArray(results) ? results.length : 1}`);
|
|
277
|
+
return results;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
exports.FabricContractPrivateDataAdapter = FabricContractPrivateDataAdapter;
|
|
281
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udHJhY3RQcml2YXRlRGF0YUFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL0NvbnRyYWN0UHJpdmF0ZURhdGFBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDJEQUEwRDtBQUMxRCwyREFJaUM7QUFFakMscURBSXdCO0FBQ3hCLG1EQUFpRTtBQUNqRSx5RUFBa0U7QUFHbEUsdURBQWdFO0FBRWhFLE1BQWEsZ0NBQWlDLFNBQVEsdUNBQXFCO0lBQ3pFOzs7OztPQUtHO0lBQ0gsWUFDRSxLQUFXLEVBQ1gsS0FBYyxFQUNHLFdBQXNCO1FBRXZDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFGSCxnQkFBVyxHQUFYLFdBQVcsQ0FBVztRQUd2QyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsSUFBSSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVRLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBd0I7UUFDOUMsT0FBTyxJQUFJLCtDQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ00sS0FBSyxDQUFDLElBQUksQ0FDakIsU0FBaUIsRUFDakIsRUFBbUIsRUFDbkIsUUFBYSxFQUNiLEdBQUcsSUFBVztRQUVkLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxDLElBQUksS0FBMEIsQ0FBQztRQUMvQixJQUFJLENBQUM7WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQ2xDLElBQUksRUFDSixTQUFTLEVBQ1QsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUNi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QyxJQUFJLEVBQ0osUUFBUSxFQUNSLFFBQVEsQ0FDVCxDQUFpQyxDQUFDO1FBQ3JDLENBQUM7UUFDRCxHQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFL0IsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFNLENBQUM7UUFDaEUsR0FBRyxDQUFDLEtBQUssQ0FDUCx1QkFBdUIsRUFDdkIsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDakQsQ0FBQztRQUNGLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7Q0FDRjtBQXhZRCw0RUF3WUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFpbmNvZGVTdHViLCBJdGVyYXRvcnMsIFN0YXRlUXVlcnlSZXNwb25zZSB9IGZyb20gXCJmYWJyaWMtc2hpbVwiO1xuaW1wb3J0IHsgRmFicmljQ29udHJhY3RBZGFwdGVyIH0gZnJvbSBcIi4vQ29udHJhY3RBZGFwdGVyXCI7XG5pbXBvcnQge1xuICBCYXNlRXJyb3IsXG4gIE5vdEZvdW5kRXJyb3IsXG4gIFNlcmlhbGl6YXRpb25FcnJvcixcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7XG4gIE1JU1NJTkdfUFJJVkFURV9EQVRBX1JFR0VYLFxuICBtb2RlbFRvUHJpdmF0ZSxcbiAgcHJvY2Vzc01vZGVsLFxufSBmcm9tIFwiLi9wcml2YXRlLWRhdGFcIjtcbmltcG9ydCB7IFVuYXV0aG9yaXplZFByaXZhdGVEYXRhQWNjZXNzIH0gZnJvbSBcIi4uL3NoYXJlZC9lcnJvcnNcIjtcbmltcG9ydCB7IEZhYnJpY0NvbnRyYWN0U2VxdWVuY2UgfSBmcm9tIFwiLi9GYWJyaWNDb250cmFjdFNlcXVlbmNlXCI7XG5pbXBvcnQgeyBTZXF1ZW5jZSwgU2VxdWVuY2VPcHRpb25zIH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBGYWJyaWNDb250cmFjdENvbnRleHQgfSBmcm9tIFwiLi9Db250cmFjdENvbnRleHRcIjtcbmltcG9ydCB7IENvdWNoREJLZXlzLCBNYW5nb1F1ZXJ5IH0gZnJvbSBcIkBkZWNhZi10cy9mb3ItY291Y2hkYlwiO1xuXG5leHBvcnQgY2xhc3MgRmFicmljQ29udHJhY3RQcml2YXRlRGF0YUFkYXB0ZXIgZXh0ZW5kcyBGYWJyaWNDb250cmFjdEFkYXB0ZXIge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgRmFicmljQ29udHJhY3RBZGFwdGVyIGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGFuIGFkYXB0ZXIgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIEZhYnJpYyBzdGF0ZSBkYXRhYmFzZVxuICAgKiBAcGFyYW0ge3ZvaWR9IHNjb3BlIC0gTm90IHVzZWQgaW4gdGhpcyBhZGFwdGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpYXNdIC0gT3B0aW9uYWwgYWxpYXMgZm9yIHRoZSBhZGFwdGVyIGluc3RhbmNlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogdm9pZCxcbiAgICBhbGlhcz86IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbGxlY3Rpb25zPzogc3RyaW5nW11cbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGFsaWFzKTtcbiAgICB0aGlzLmNvbGxlY3Rpb25zID0gY29sbGVjdGlvbnMgfHwgW107XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBTZXF1ZW5jZShvcHRpb25zOiBTZXF1ZW5jZU9wdGlvbnMpOiBQcm9taXNlPFNlcXVlbmNlPiB7XG4gICAgcmV0dXJuIG5ldyBGYWJyaWNDb250cmFjdFNlcXVlbmNlKG9wdGlvbnMsIHRoaXMsIHRoaXMuY29sbGVjdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWFkcyBhIHJlY29yZCBmcm9tIHRoZSBzdGF0ZSBkYXRhYmFzZVxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgYW5kIGRlc2VyaWFsaXplcyBhIHJlY29yZCBmcm9tIHRoZSBGYWJyaWMgc3RhdGUgZGF0YWJhc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRhYmxlTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSB0YWJsZS9jb2xsZWN0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBpZCAtIFRoZSByZWNvcmQgaWRlbnRpZmllclxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMsIGluY2x1ZGluZyB0aGUgY2hhaW5jb2RlIHN0dWIgYW5kIGxvZ2dlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+fSBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmV0cmlldmVkIHJlY29yZFxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgcmVhZChcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyLFxuICAgIGluc3RhbmNlOiBhbnksXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgY29uc3QgeyBzdHViLCBsb2dnZXIgfSA9IGFyZ3MucG9wKCk7XG4gICAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcih0aGlzLnJlYWQpO1xuXG4gICAgbGV0IG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5yZWFkU3RhdGUoXG4gICAgICAgIHN0dWIsXG4gICAgICAgIHRhYmxlTmFtZSxcbiAgICAgICAgaWQudG9TdHJpbmcoKSxcbiAgICAgICAgaW5zdGFuY2VcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA8IDEpIHtcbiAgICAgICAgbG9nLmRlYnVnKGBObyByZWNvcmQgZm91bmQgZm9yIGlkICR7aWR9IGluICR7dGFibGVOYW1lfSB0YWJsZWApO1xuICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihcbiAgICAgICAgICBgTm8gcmVjb3JkIGZvdW5kIGZvciBpZCAke2lkfSBpbiAke3RhYmxlTmFtZX0gdGFibGVgXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdHMubGVuZ3RoIDwgMikge1xuICAgICAgICBsb2cuZGVidWcoYE5vIHJlY29yZCBmb3VuZCBmb3IgaWQgJHtpZH0gaW4gJHt0YWJsZU5hbWV9IHRhYmxlYCk7XG4gICAgICAgIG1vZGVsID0gcmVzdWx0cy5wb3AoKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbW9kZWwgPSB0aGlzLm1lcmdlTW9kZWxzKHJlc3VsdHMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IHRoaXMucGFyc2VFcnJvcihlIGFzIEVycm9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbW9kZWw7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgYSByZWNvcmQgZnJvbSB0aGUgc3RhdGUgZGF0YWJhc2VcbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIGEgcmVjb3JkIGFuZCB0aGVuIHJlbW92ZXMgaXQgZnJvbSB0aGUgRmFicmljIHN0YXRlIGRhdGFiYXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWJsZU5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgdGFibGUvY29sbGVjdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gaWQgLSBUaGUgcmVjb3JkIGlkZW50aWZpZXIgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cywgaW5jbHVkaW5nIHRoZSBjaGFpbmNvZGUgc3R1YiBhbmQgbG9nZ2VyXG4gICAqIEByZXR1cm4ge1Byb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBkZWxldGVkIHJlY29yZFxuICAgKi9cbiAgb3ZlcnJpZGUgYXN5bmMgZGVsZXRlKFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgaW5zdGFuY2U6IGFueSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBjb25zdCBjdHggPSBhcmdzLnBvcCgpO1xuICAgIGNvbnN0IHsgc3R1YiwgbG9nZ2VyIH0gPSBjdHg7XG4gICAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcih0aGlzLmRlbGV0ZSk7XG5cbiAgICBhcmdzLnB1c2goY3R4KTtcblxuICAgIGxldCBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB0cnkge1xuICAgICAgbW9kZWwgPSBhd2FpdCB0aGlzLnJlYWQodGFibGVOYW1lLCBpZCwgaW5zdGFuY2UsIC4uLmFyZ3MpO1xuICAgICAgbG9nLnZlcmJvc2UoYGRlbGV0aW5nIGVudHJ5IHdpdGggcGsgJHtpZH0gZnJvbSAke3RhYmxlTmFtZX0gdGFibGVgKTtcbiAgICAgIHRoaXMuZGVsZXRlU3RhdGUoc3R1YiwgdGFibGVOYW1lLCBpZC50b1N0cmluZygpLCBpbnN0YW5jZSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgdGhpcy5wYXJzZUVycm9yKGUgYXMgRXJyb3IpO1xuICAgIH1cblxuICAgIHJldHVybiBtb2RlbDtcbiAgfVxuICBvdmVycmlkZSBwcmVwYXJlPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgbW9kZWw6IE0sXG4gICAgcGs6IGtleW9mIE0sXG4gICAgLi4uYXJnczogYW55W11cbiAgKToge1xuICAgIHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICBpZDogc3RyaW5nO1xuICAgIHRyYW5zaWVudD86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIH0ge1xuICAgIGNvbnN0IHsgc3R1YiwgbG9nZ2VyIH0gPSBhcmdzLnBvcCgpO1xuICAgIGNvbnN0IHRhYmxlTmFtZSA9IGFyZ3Muc2hpZnQoKTtcbiAgICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKHRoaXMucHJlcGFyZSk7XG5cbiAgICBjb25zdCBzcGxpdCA9IHByb2Nlc3NNb2RlbCh0aGlzLCBtb2RlbCk7XG4gICAgLy8gaWYgKChtb2RlbCBhcyBhbnkpW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV0pIHtcbiAgICAvLyAgIGxvZy5zaWxseShcbiAgICAvLyAgICAgYFBhc3NpbmcgYWxvbmcgcGVyc2lzdGVuY2UgbWV0YWRhdGEgZm9yICR7KG1vZGVsIGFzIGFueSlbUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBXX1gXG4gICAgLy8gICApO1xuICAgIC8vICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNwbGl0LnJlc3VsdCwgUGVyc2lzdGVuY2VLZXlzLk1FVEFEQVRBLCB7XG4gICAgLy8gICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIC8vICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgLy8gICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgdmFsdWU6IChtb2RlbCBhcyBhbnkpW1BlcnNpc3RlbmNlS2V5cy5NRVRBREFUQV0sXG4gICAgLy8gICB9KTtcbiAgICAvLyB9XG5cbiAgICBsb2cuaW5mbyhgUHJlcGFyaW5nIHJlY29yZCBmb3IgJHt0YWJsZU5hbWV9IHRhYmxlIHdpdGggcGsgJHttb2RlbFtwa119YCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVjb3JkOiBzcGxpdC5wcml2YXRlRGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgICAgaWQ6IHN0dWIuY3JlYXRlQ29tcG9zaXRlS2V5KHRhYmxlTmFtZSwgW1N0cmluZyhtb2RlbFtwa10pXSksXG4gICAgICB0cmFuc2llbnQ6IHNwbGl0LnRyYW5zaWVudCxcbiAgICB9O1xuICB9XG5cbiAgb3ZlcnJpZGUgdXBkYXRlUHJlZml4KFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogKHN0cmluZyB8IG51bWJlciB8IFJlY29yZDxzdHJpbmcsIGFueT4pW10ge1xuICAgIGNvbnN0IGN0eDogRmFicmljQ29udHJhY3RDb250ZXh0ID0gYXJncy5wb3AoKTtcbiAgICBjb25zdCBjb2xsZWN0aW9ucyA9IE9iamVjdC5rZXlzKG1vZGVsKTtcblxuICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuICAgICAgbW9kZWxbY29sbGVjdGlvbl1bQ291Y2hEQktleXMuVEFCTEVdID0gdGFibGVOYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPHN0cmluZywgYW55PiA9IG1vZGVsO1xuXG4gICAgcmV0dXJuIFt0YWJsZU5hbWUsIGlkLCByZWNvcmQsIGN0eF07XG4gIH1cbiAgb3ZlcnJpZGUgYXN5bmMgcHV0U3RhdGUoXG4gICAgc3R1YjogQ2hhaW5jb2RlU3R1YixcbiAgICBpZDogc3RyaW5nLFxuICAgIG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApIHtcbiAgICBjb25zdCBjb2xsZWN0aW9ucyA9IE9iamVjdC5rZXlzKG1vZGVsKTtcbiAgICBsZXQgcmVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gICAgbGV0IGRhdGE6IEJ1ZmZlcjtcblxuICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuICAgICAgcmVzID0gbW9kZWwhW2NvbGxlY3Rpb25dO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKFxuICAgICAgICAgIEZhYnJpY0NvbnRyYWN0QWRhcHRlci5zZXJpYWxpemVyLnNlcmlhbGl6ZShcbiAgICAgICAgICAgIG1vZGVsIVtjb2xsZWN0aW9uXSBhcyBNb2RlbFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgdGhyb3cgbmV3IFNlcmlhbGl6YXRpb25FcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHRvIHNlcmlhbGl6ZSByZWNvcmQgd2l0aCBpZCAke2lkfTogJHtlfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHN0dWIucHV0UHJpdmF0ZURhdGEoY29sbGVjdGlvbiwgaWQudG9TdHJpbmcoKSwgZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIG92ZXJyaWRlIGFzeW5jIHJlYWRTdGF0ZShcbiAgICBzdHViOiBDaGFpbmNvZGVTdHViLFxuICAgIHRhYmxlTmFtZTogc3RyaW5nLFxuICAgIGlkOiBzdHJpbmcsXG4gICAgaW5zdGFuY2U6IGFueSxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgLi4uYXJnczogYW55W11cbiAgKSB7XG4gICAgY29uc3QgY29tcG9zZWRLZXkgPSBzdHViLmNyZWF0ZUNvbXBvc2l0ZUtleSh0YWJsZU5hbWUsIFtTdHJpbmcoaWQpXSk7XG4gICAgY29uc3QgbW9kZWwgPSBtb2RlbFRvUHJpdmF0ZShpbnN0YW5jZSk7XG4gICAgY29uc3QgY29sbGVjdGlvbnMgPSBPYmplY3Qua2V5cyhtb2RlbC5wcml2YXRlISk7XG4gICAgY29uc3QgcmVzdWx0czogYW55W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHJlczogQnVmZmVyIHwgUmVjb3JkPHN0cmluZywgYW55PiA9IGF3YWl0IHN0dWIuZ2V0UHJpdmF0ZURhdGEoXG4gICAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgICBjb21wb3NlZEtleVxuICAgICAgICApO1xuICAgICAgICBpZiAocmVzLnRvU3RyaW5nKCkgPT09IFwiXCIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgRW50cnkgd2l0aCBpZCAke2lkfSBkb2Vzbid0IGV4aXN0Li4uYCk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXMgPSBGYWJyaWNDb250cmFjdEFkYXB0ZXIuc2VyaWFsaXplci5kZXNlcmlhbGl6ZShcbiAgICAgICAgICAgIHJlcy50b1N0cmluZygpXG4gICAgICAgICAgICAvLyBtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBwcml2YXRlIGRhdGE6ICR7ZX1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHRzLnB1c2gocmVzKTtcbiAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgaWYgKE1JU1NJTkdfUFJJVkFURV9EQVRBX1JFR0VYLnRlc3QoKGUgYXMgQmFzZUVycm9yKS5tZXNzYWdlKSlcbiAgICAgICAgICB0aHJvdyBuZXcgVW5hdXRob3JpemVkUHJpdmF0ZURhdGFBY2Nlc3MoZSBhcyBCYXNlRXJyb3IpO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgb3ZlcnJpZGUgYXN5bmMgZGVsZXRlU3RhdGUoXG4gICAgc3R1YjogQ2hhaW5jb2RlU3R1YixcbiAgICB0YWJsZU5hbWU6IHN0cmluZyxcbiAgICBpZDogc3RyaW5nLFxuICAgIGluc3RhbmNlOiBhbnksXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIC4uLmFyZ3M6IGFueVtdXG4gICkge1xuICAgIGNvbnN0IGNvbXBvc2VkS2V5ID0gc3R1Yi5jcmVhdGVDb21wb3NpdGVLZXkodGFibGVOYW1lLCBbU3RyaW5nKGlkKV0pO1xuICAgIGNvbnN0IG1vZGVsID0gbW9kZWxUb1ByaXZhdGUoaW5zdGFuY2UpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gT2JqZWN0LmtleXMobW9kZWwucHJpdmF0ZSEpO1xuXG4gICAgZm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zKSB7XG4gICAgICBhd2FpdCBzdHViLmRlbGV0ZVByaXZhdGVEYXRhKGNvbGxlY3Rpb24sIGNvbXBvc2VkS2V5KTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBxdWVyeVJlc3VsdChcbiAgICBzdHViOiBDaGFpbmNvZGVTdHViLFxuICAgIHJhd0lucHV0OiBhbnksXG4gICAgaW5zdGFuY2U6IGFueVxuICApOiBQcm9taXNlPEl0ZXJhdG9ycy5TdGF0ZVF1ZXJ5SXRlcmF0b3I+IHtcbiAgICBjb25zdCBwcml2YXRlRGF0YSA9IG1vZGVsVG9Qcml2YXRlKGluc3RhbmNlKS5wcml2YXRlITtcbiAgICBjb25zdCBjb2xsZWN0aW9uID0gT2JqZWN0LmtleXMocHJpdmF0ZURhdGEpWzBdIHx8IFwiXCI7XG5cbiAgICBjb25zdCByZXN1bHQgPSAoYXdhaXQgc3R1Yi5nZXRQcml2YXRlRGF0YVF1ZXJ5UmVzdWx0KFxuICAgICAgY29sbGVjdGlvbixcbiAgICAgIEpTT04uc3RyaW5naWZ5KHJhd0lucHV0KVxuICAgICkpIGFzIGFueTtcblxuICAgIGNvbnN0IGl0ZXJhdG9yID0gcmVzdWx0Lml0ZXJhdG9yIGFzIEl0ZXJhdG9ycy5TdGF0ZVF1ZXJ5SXRlcmF0b3I7XG5cbiAgICByZXR1cm4gaXRlcmF0b3I7XG4gIH1cblxuICBvdmVycmlkZSBhc3luYyBxdWVyeVJlc3VsdFBhZ2luYXRlZChcbiAgICBzdHViOiBDaGFpbmNvZGVTdHViLFxuICAgIHJhd0lucHV0OiBhbnksXG4gICAgbGltaXQ6IG51bWJlciA9IDI1MCxcbiAgICBza2lwOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgaW5zdGFuY2U6IGFueVxuICApOiBQcm9taXNlPFN0YXRlUXVlcnlSZXNwb25zZTxJdGVyYXRvcnMuU3RhdGVRdWVyeUl0ZXJhdG9yPj4ge1xuICAgIGNvbnN0IHByaXZhdGVEYXRhID0gbW9kZWxUb1ByaXZhdGUoaW5zdGFuY2UpLnByaXZhdGUhO1xuICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBPYmplY3Qua2V5cyhwcml2YXRlRGF0YSlbMF0gfHwgXCJcIjtcblxuICAgIGNvbnN0IGl0ZXJhdG9yID0gYXdhaXQgc3R1Yi5nZXRQcml2YXRlRGF0YVF1ZXJ5UmVzdWx0KFxuICAgICAgY29sbGVjdGlvbixcbiAgICAgIEpTT04uc3RyaW5naWZ5KHJhd0lucHV0KVxuICAgICk7XG5cbiAgICBjb25zdCByZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IHJlYWNoZWRCb29rbWFyayA9IHNraXAgPyBmYWxzZSA6IHRydWU7XG4gICAgbGV0IGxhc3RLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcblxuICAgICAgaWYgKHJlcy52YWx1ZSAmJiByZXMudmFsdWUudmFsdWUudG9TdHJpbmcoKSkge1xuICAgICAgICBjb25zdCByZWNvcmRLZXkgPSByZXMudmFsdWUua2V5O1xuICAgICAgICBjb25zdCByZWNvcmRWYWx1ZSA9IChyZXMudmFsdWUudmFsdWUgYXMgYW55KS50b1N0cmluZyhcInV0ZjhcIik7XG5cbiAgICAgICAgLy8gSWYgd2UgaGF2ZSBhIHNraXAsIHNraXAgdW50aWwgd2UgcmVhY2ggaXRcbiAgICAgICAgaWYgKCFyZWFjaGVkQm9va21hcmspIHtcbiAgICAgICAgICBpZiAocmVjb3JkS2V5ID09PSBza2lwPy50b1N0cmluZygpKSB7XG4gICAgICAgICAgICByZWFjaGVkQm9va21hcmsgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdHMucHVzaCh7IEtleTogcmVjb3JkS2V5LCBSZWNvcmQ6IEpTT04ucGFyc2UocmVjb3JkVmFsdWUpIH0pO1xuICAgICAgICBsYXN0S2V5ID0gcmVjb3JkS2V5O1xuICAgICAgICBjb3VudCsrO1xuXG4gICAgICAgIGlmIChjb3VudCA+PSBsaW1pdCkge1xuICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLmNsb3NlKCk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yOiByZXN1bHRzIGFzIHVua25vd24gYXMgSXRlcmF0b3JzLlN0YXRlUXVlcnlJdGVyYXRvcixcbiAgICAgICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgICAgIGZldGNoZWRSZWNvcmRzQ291bnQ6IHJlc3VsdHMubGVuZ3RoLFxuICAgICAgICAgICAgICBib29rbWFyazogbGFzdEtleSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzLmRvbmUpIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IuY2xvc2UoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBpdGVyYXRvcjogcmVzdWx0cyBhcyB1bmtub3duIGFzIEl0ZXJhdG9ycy5TdGF0ZVF1ZXJ5SXRlcmF0b3IsXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIGZldGNoZWRSZWNvcmRzQ291bnQ6IHJlc3VsdHMubGVuZ3RoLFxuICAgICAgICAgICAgYm9va21hcms6IFwiXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gcmV0dXJuIChhd2FpdCBzdHViLmdldFF1ZXJ5UmVzdWx0V2l0aFBhZ2luYXRpb24oXG4gICAgLy8gICBKU09OLnN0cmluZ2lmeShyYXdJbnB1dCksXG4gICAgLy8gICBsaW1pdCxcbiAgICAvLyAgIHNraXA/LnRvU3RyaW5nKClcbiAgICAvLyApKSBhcyBTdGF0ZVF1ZXJ5UmVzcG9uc2U8SXRlcmF0b3JzLlN0YXRlUXVlcnlJdGVyYXRvcj47XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgcmF3IHF1ZXJ5IGFnYWluc3QgdGhlIHN0YXRlIGRhdGFiYXNlXG4gICAqIEBzdW1tYXJ5IFBlcmZvcm1zIGEgcmljaCBxdWVyeSB1c2luZyBDb3VjaERCIHN5bnRheCBhZ2FpbnN0IHRoZSBGYWJyaWMgc3RhdGUgZGF0YWJhc2VcbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgcmV0dXJuIHR5cGVcbiAgICogQHBhcmFtIHtNYW5nb1F1ZXJ5fSByYXdJbnB1dCAtIFRoZSBNYW5nbyBRdWVyeSB0byBleGVjdXRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZG9jc09ubHkgLSBXaGV0aGVyIHRvIHJldHVybiBvbmx5IGRvY3VtZW50cyAobm90IHVzZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbilcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzLCBpbmNsdWRpbmcgdGhlIGNoYWluY29kZSBzdHViIGFuZCBsb2dnZXJcbiAgICogQHJldHVybiB7UHJvbWlzZTxSPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHF1ZXJ5IHJlc3VsdHNcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgRmFicmljQ29udHJhY3RBZGFwdGVyXG4gICAqICAgcGFydGljaXBhbnQgU3R1YlxuICAgKiAgIHBhcnRpY2lwYW50IFN0YXRlREJcbiAgICpcbiAgICogICBDYWxsZXItPj5GYWJyaWNDb250cmFjdEFkYXB0ZXI6IHJhdyhyYXdJbnB1dCwgZG9jc09ubHksIGN0eClcbiAgICogICBGYWJyaWNDb250cmFjdEFkYXB0ZXItPj5GYWJyaWNDb250cmFjdEFkYXB0ZXI6IEV4dHJhY3QgbGltaXQgYW5kIHNraXBcbiAgICogICBhbHQgV2l0aCBwYWdpbmF0aW9uXG4gICAqICAgICBGYWJyaWNDb250cmFjdEFkYXB0ZXItPj5TdHViOiBnZXRRdWVyeVJlc3VsdFdpdGhQYWdpbmF0aW9uKHF1ZXJ5LCBsaW1pdCwgc2tpcClcbiAgICogICBlbHNlIFdpdGhvdXQgcGFnaW5hdGlvblxuICAgKiAgICAgRmFicmljQ29udHJhY3RBZGFwdGVyLT4+U3R1YjogZ2V0UXVlcnlSZXN1bHQocXVlcnkpXG4gICAqICAgZW5kXG4gICAqICAgU3R1Yi0+PlN0YXRlREI6IEV4ZWN1dGUgcXVlcnlcbiAgICogICBTdGF0ZURCLS0+PlN0dWI6IEl0ZXJhdG9yXG4gICAqICAgU3R1Yi0tPj5GYWJyaWNDb250cmFjdEFkYXB0ZXI6IEl0ZXJhdG9yXG4gICAqICAgRmFicmljQ29udHJhY3RBZGFwdGVyLT4+RmFicmljQ29udHJhY3RBZGFwdGVyOiByZXN1bHRJdGVyYXRvcihsb2csIGl0ZXJhdG9yKVxuICAgKiAgIEZhYnJpY0NvbnRyYWN0QWRhcHRlci0tPj5DYWxsZXI6IHJlc3VsdHNcbiAgICovXG4gIG92ZXJyaWRlIGFzeW5jIHJhdzxSPihcbiAgICByYXdJbnB1dDogTWFuZ29RdWVyeSxcbiAgICBkb2NzT25seTogYm9vbGVhbixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFI+IHtcbiAgICBjb25zdCB7IHN0dWIsIGxvZ2dlciB9ID0gYXJncy5wb3AoKTtcbiAgICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKHRoaXMucmF3KTtcbiAgICBjb25zdCB7IHNraXAsIGxpbWl0IH0gPSByYXdJbnB1dDtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGFyZ3Muc2hpZnQoKTtcbiAgICBsZXQgaXRlcmF0b3I6IEl0ZXJhdG9ycy5TdGF0ZVF1ZXJ5SXRlcmF0b3I7XG4gICAgaWYgKGxpbWl0IHx8IHNraXApIHtcbiAgICAgIGRlbGV0ZSByYXdJbnB1dFtcImxpbWl0XCJdO1xuICAgICAgZGVsZXRlIHJhd0lucHV0W1wic2tpcFwiXTtcbiAgICAgIGxvZy5kZWJ1ZyhcbiAgICAgICAgYFJldHJpZXZpbmcgcGFnaW5hdGVkIGl0ZXJhdG9yOiBsaW1pdDogJHtsaW1pdH0vIHNraXA6ICR7c2tpcH1gXG4gICAgICApO1xuICAgICAgY29uc3QgcmVzcG9uc2U6IFN0YXRlUXVlcnlSZXNwb25zZTxJdGVyYXRvcnMuU3RhdGVRdWVyeUl0ZXJhdG9yPiA9XG4gICAgICAgIChhd2FpdCB0aGlzLnF1ZXJ5UmVzdWx0UGFnaW5hdGVkKFxuICAgICAgICAgIHN0dWIsXG4gICAgICAgICAgcmF3SW5wdXQsXG4gICAgICAgICAgbGltaXQgfHwgMjUwLFxuICAgICAgICAgIChza2lwIGFzIGFueSk/LnRvU3RyaW5nKCksXG4gICAgICAgICAgaW5zdGFuY2VcbiAgICAgICAgKSkgYXMgU3RhdGVRdWVyeVJlc3BvbnNlPEl0ZXJhdG9ycy5TdGF0ZVF1ZXJ5SXRlcmF0b3I+O1xuICAgICAgaXRlcmF0b3IgPSByZXNwb25zZS5pdGVyYXRvcjtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmRlYnVnKFwiUmV0cmlldmluZyBpdGVyYXRvclwiKTtcbiAgICAgIGl0ZXJhdG9yID0gKGF3YWl0IHRoaXMucXVlcnlSZXN1bHQoXG4gICAgICAgIHN0dWIsXG4gICAgICAgIHJhd0lucHV0LFxuICAgICAgICBpbnN0YW5jZVxuICAgICAgKSkgYXMgSXRlcmF0b3JzLlN0YXRlUXVlcnlJdGVyYXRvcjtcbiAgICB9XG4gICAgbG9nLmRlYnVnKFwiSXRlcmF0b3IgYWNxdWlyZWRcIik7XG5cbiAgICBjb25zdCByZXN1bHRzID0gKGF3YWl0IHRoaXMucmVzdWx0SXRlcmF0b3IobG9nLCBpdGVyYXRvcikpIGFzIFI7XG4gICAgbG9nLmRlYnVnKFxuICAgICAgYHJldHVybmluZyB7MH0gcmVzdWx0c2AsXG4gICAgICBgJHtBcnJheS5pc0FycmF5KHJlc3VsdHMpID8gcmVzdWx0cy5sZW5ndGggOiAxfWBcbiAgICApO1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { ChaincodeStub, Iterators, StateQueryResponse } from "fabric-shim";
|
|
2
|
+
import { FabricContractAdapter } from "./ContractAdapter";
|
|
3
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
4
|
+
import { Sequence, SequenceOptions } from "@decaf-ts/core";
|
|
5
|
+
import { MangoQuery } from "@decaf-ts/for-couchdb";
|
|
6
|
+
export declare class FabricContractPrivateDataAdapter extends FabricContractAdapter {
|
|
7
|
+
private readonly collections?;
|
|
8
|
+
/**
|
|
9
|
+
* @description Creates a new FabricContractAdapter instance
|
|
10
|
+
* @summary Initializes an adapter for interacting with the Fabric state database
|
|
11
|
+
* @param {void} scope - Not used in this adapter
|
|
12
|
+
* @param {string} [alias] - Optional alias for the adapter instance
|
|
13
|
+
*/
|
|
14
|
+
constructor(scope: void, alias?: string, collections?: string[] | undefined);
|
|
15
|
+
Sequence(options: SequenceOptions): Promise<Sequence>;
|
|
16
|
+
/**
|
|
17
|
+
* @description Reads a record from the state database
|
|
18
|
+
* @summary Retrieves and deserializes a record from the Fabric state database
|
|
19
|
+
* @param {string} tableName - The name of the table/collection
|
|
20
|
+
* @param {string | number} id - The record identifier
|
|
21
|
+
* @param {...any[]} args - Additional arguments, including the chaincode stub and logger
|
|
22
|
+
* @return {Promise<Record<string, any>>} Promise resolving to the retrieved record
|
|
23
|
+
*/
|
|
24
|
+
read(tableName: string, id: string | number, instance: any, ...args: any[]): Promise<Record<string, any>>;
|
|
25
|
+
/**
|
|
26
|
+
* @description Deletes a record from the state database
|
|
27
|
+
* @summary Retrieves a record and then removes it from the Fabric state database
|
|
28
|
+
* @param {string} tableName - The name of the table/collection
|
|
29
|
+
* @param {string | number} id - The record identifier to delete
|
|
30
|
+
* @param {...any[]} args - Additional arguments, including the chaincode stub and logger
|
|
31
|
+
* @return {Promise<Record<string, any>>} Promise resolving to the deleted record
|
|
32
|
+
*/
|
|
33
|
+
delete(tableName: string, id: string | number, instance: any, ...args: any[]): Promise<Record<string, any>>;
|
|
34
|
+
prepare<M extends Model>(model: M, pk: keyof M, ...args: any[]): {
|
|
35
|
+
record: Record<string, any>;
|
|
36
|
+
id: string;
|
|
37
|
+
transient?: Record<string, any>;
|
|
38
|
+
};
|
|
39
|
+
updatePrefix(tableName: string, id: string | number, model: Record<string, any>, ...args: any[]): (string | number | Record<string, any>)[];
|
|
40
|
+
putState(stub: ChaincodeStub, id: string, model: Record<string, any>, ...args: any[]): Promise<Record<string, any>>;
|
|
41
|
+
readState(stub: ChaincodeStub, tableName: string, id: string, instance: any, ...args: any[]): Promise<any[]>;
|
|
42
|
+
deleteState(stub: ChaincodeStub, tableName: string, id: string, instance: any, ...args: any[]): Promise<void>;
|
|
43
|
+
queryResult(stub: ChaincodeStub, rawInput: any, instance: any): Promise<Iterators.StateQueryIterator>;
|
|
44
|
+
queryResultPaginated(stub: ChaincodeStub, rawInput: any, limit: number | undefined, skip: number | undefined, instance: any): Promise<StateQueryResponse<Iterators.StateQueryIterator>>;
|
|
45
|
+
/**
|
|
46
|
+
* @description Executes a raw query against the state database
|
|
47
|
+
* @summary Performs a rich query using CouchDB syntax against the Fabric state database
|
|
48
|
+
* @template R - The return type
|
|
49
|
+
* @param {MangoQuery} rawInput - The Mango Query to execute
|
|
50
|
+
* @param {boolean} docsOnly - Whether to return only documents (not used in this implementation)
|
|
51
|
+
* @param {...any[]} args - Additional arguments, including the chaincode stub and logger
|
|
52
|
+
* @return {Promise<R>} Promise resolving to the query results
|
|
53
|
+
* @mermaid
|
|
54
|
+
* sequenceDiagram
|
|
55
|
+
* participant Caller
|
|
56
|
+
* participant FabricContractAdapter
|
|
57
|
+
* participant Stub
|
|
58
|
+
* participant StateDB
|
|
59
|
+
*
|
|
60
|
+
* Caller->>FabricContractAdapter: raw(rawInput, docsOnly, ctx)
|
|
61
|
+
* FabricContractAdapter->>FabricContractAdapter: Extract limit and skip
|
|
62
|
+
* alt With pagination
|
|
63
|
+
* FabricContractAdapter->>Stub: getQueryResultWithPagination(query, limit, skip)
|
|
64
|
+
* else Without pagination
|
|
65
|
+
* FabricContractAdapter->>Stub: getQueryResult(query)
|
|
66
|
+
* end
|
|
67
|
+
* Stub->>StateDB: Execute query
|
|
68
|
+
* StateDB-->>Stub: Iterator
|
|
69
|
+
* Stub-->>FabricContractAdapter: Iterator
|
|
70
|
+
* FabricContractAdapter->>FabricContractAdapter: resultIterator(log, iterator)
|
|
71
|
+
* FabricContractAdapter-->>Caller: results
|
|
72
|
+
*/
|
|
73
|
+
raw<R>(rawInput: MangoQuery, docsOnly: boolean, ...args: any[]): Promise<R>;
|
|
74
|
+
}
|