@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,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ContractLogger = void 0;
|
|
4
|
+
const logging_1 = require("@decaf-ts/logging");
|
|
5
|
+
/**
|
|
6
|
+
* @description Logger implementation for Fabric chaincode contracts
|
|
7
|
+
* @summary Adapts the standard logging interface to work with Fabric's chaincode context
|
|
8
|
+
*
|
|
9
|
+
* @param {string} context - The logging context name
|
|
10
|
+
* @param {Partial<LoggingConfig> | undefined} conf - Optional logging configuration
|
|
11
|
+
* @param {Ctx} ctx - The Fabric chaincode context
|
|
12
|
+
*
|
|
13
|
+
* @class ContractLogger
|
|
14
|
+
* @extends {MiniLogger}
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* // In a Fabric chaincode contract
|
|
18
|
+
* import { ContractLogger } from '@decaf-ts/for-fabric';
|
|
19
|
+
*
|
|
20
|
+
* export class MyContract extends Contract {
|
|
21
|
+
* @Transaction()
|
|
22
|
+
* async myFunction(ctx: Context): Promise<void> {
|
|
23
|
+
* const logger = new ContractLogger('MyContract', { level: 'info' }, ctx);
|
|
24
|
+
*
|
|
25
|
+
* logger.info('Processing transaction');
|
|
26
|
+
* logger.debug('Transaction details:', { ... });
|
|
27
|
+
*
|
|
28
|
+
* // Do something
|
|
29
|
+
*
|
|
30
|
+
* logger.info('Transaction complete');
|
|
31
|
+
* }
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
class ContractLogger extends logging_1.MiniLogger {
|
|
36
|
+
constructor(context, conf, ctx) {
|
|
37
|
+
super(context, conf);
|
|
38
|
+
if (!ctx) {
|
|
39
|
+
this.logger = new logging_1.MiniLogger(context, conf);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
this.logger = ctx.logger;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @description Logs a message at the specified level
|
|
47
|
+
* @summary Overrides the base log method to use the Fabric context's logger
|
|
48
|
+
* @param {LogLevel} level - The log level
|
|
49
|
+
* @param {StringLike | Error} msg - The message to log
|
|
50
|
+
* @param {Error} [stack] - Optional stack trace for errors
|
|
51
|
+
* @return {void}
|
|
52
|
+
*/
|
|
53
|
+
log(level, msg, stack) {
|
|
54
|
+
if (logging_1.NumericLogLevels[this.config("level")] <
|
|
55
|
+
logging_1.NumericLogLevels[level])
|
|
56
|
+
return;
|
|
57
|
+
let method;
|
|
58
|
+
switch (level) {
|
|
59
|
+
case logging_1.LogLevel.info:
|
|
60
|
+
method = this.logger.info;
|
|
61
|
+
break;
|
|
62
|
+
case logging_1.LogLevel.verbose:
|
|
63
|
+
method = this.logger.verbose;
|
|
64
|
+
break;
|
|
65
|
+
case logging_1.LogLevel.debug:
|
|
66
|
+
method = this.logger.debug;
|
|
67
|
+
break;
|
|
68
|
+
case logging_1.LogLevel.error:
|
|
69
|
+
method = this.logger.error;
|
|
70
|
+
break;
|
|
71
|
+
case logging_1.LogLevel.silly:
|
|
72
|
+
method = this.logger.silly;
|
|
73
|
+
break;
|
|
74
|
+
default:
|
|
75
|
+
throw new Error("Invalid log level");
|
|
76
|
+
}
|
|
77
|
+
method.call(this.logger, this.createLog(level, msg, stack));
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.ContractLogger = ContractLogger;
|
|
81
|
+
/**
|
|
82
|
+
* @description Factory function for creating ContractLogger instances
|
|
83
|
+
* @summary Creates a new ContractLogger with the given context, config, and Fabric context
|
|
84
|
+
* @param {string} object - The logging context name
|
|
85
|
+
* @param {Partial<LoggingConfig> | undefined} config - Optional logging configuration
|
|
86
|
+
* @param {Ctx} ctx - The Fabric chaincode context
|
|
87
|
+
* @return {ContractLogger} A new ContractLogger instance
|
|
88
|
+
* @function factory
|
|
89
|
+
* @memberOf module:fabric.contracts
|
|
90
|
+
*/
|
|
91
|
+
const factory = (object, config, ctx) => {
|
|
92
|
+
return new ContractLogger(object, config || {}, ctx);
|
|
93
|
+
};
|
|
94
|
+
// Set the factory as the default logger factory
|
|
95
|
+
logging_1.Logging.setFactory(factory);
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdHMvbG9nZ2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FRMkI7QUFLM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsb0JBQVU7SUFNNUMsWUFDRSxPQUFlLEVBQ2YsSUFBd0MsRUFDeEMsR0FBMkI7UUFFM0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksb0JBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUMsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ2dCLEdBQUcsQ0FDcEIsS0FBZSxFQUNmLEdBQXVCLEVBQ3ZCLEtBQWE7UUFFYixJQUNFLDBCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFhLENBQUM7WUFDbEQsMEJBQWdCLENBQUMsS0FBSyxDQUFDO1lBRXZCLE9BQU87UUFFVCxJQUFJLE1BQU0sQ0FBQztRQUNYLFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDZCxLQUFLLGtCQUFRLENBQUMsSUFBSTtnQkFDaEIsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUMxQixNQUFNO1lBQ1IsS0FBSyxrQkFBUSxDQUFDLE9BQU87Z0JBQ25CLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztnQkFDN0IsTUFBTTtZQUNSLEtBQUssa0JBQVEsQ0FBQyxLQUFLO2dCQUNqQixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzNCLE1BQU07WUFDUixLQUFLLGtCQUFRLENBQUMsS0FBSztnQkFDakIsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUMzQixNQUFNO1lBQ1IsS0FBSyxrQkFBUSxDQUFDLEtBQUs7Z0JBQ2pCLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDM0IsTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7Q0FDRjtBQTVERCx3Q0E0REM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQU8sR0FBa0IsQ0FDN0IsTUFBYyxFQUNkLE1BQTBDLEVBQzFDLEdBQVEsRUFDUixFQUFFO0lBQ0YsT0FBTyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLEVBQUUsRUFBRSxHQUFVLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQUM7QUFFRixnREFBZ0Q7QUFDaEQsaUJBQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBMb2dnZXJGYWN0b3J5LFxuICBMb2dnaW5nLFxuICBMb2dnZXIsXG4gIExvZ0xldmVsLFxuICBNaW5pTG9nZ2VyLFxuICBOdW1lcmljTG9nTGV2ZWxzLFxuICBTdHJpbmdMaWtlLFxufSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7IExvZ2dpbmdDb25maWcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7IENvbnRleHQgYXMgQ3R4IH0gZnJvbSBcImZhYnJpYy1jb250cmFjdC1hcGlcIjtcbmltcG9ydCB7IEZhYnJpY0NvbnRyYWN0Q29udGV4dCB9IGZyb20gXCIuL0NvbnRyYWN0Q29udGV4dFwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBMb2dnZXIgaW1wbGVtZW50YXRpb24gZm9yIEZhYnJpYyBjaGFpbmNvZGUgY29udHJhY3RzXG4gKiBAc3VtbWFyeSBBZGFwdHMgdGhlIHN0YW5kYXJkIGxvZ2dpbmcgaW50ZXJmYWNlIHRvIHdvcmsgd2l0aCBGYWJyaWMncyBjaGFpbmNvZGUgY29udGV4dFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0IC0gVGhlIGxvZ2dpbmcgY29udGV4dCBuYW1lXG4gKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz4gfCB1bmRlZmluZWR9IGNvbmYgLSBPcHRpb25hbCBsb2dnaW5nIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSB7Q3R4fSBjdHggLSBUaGUgRmFicmljIGNoYWluY29kZSBjb250ZXh0XG4gKlxuICogQGNsYXNzIENvbnRyYWN0TG9nZ2VyXG4gKiBAZXh0ZW5kcyB7TWluaUxvZ2dlcn1cbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBJbiBhIEZhYnJpYyBjaGFpbmNvZGUgY29udHJhY3RcbiAqIGltcG9ydCB7IENvbnRyYWN0TG9nZ2VyIH0gZnJvbSAnQGRlY2FmLXRzL2Zvci1mYWJyaWMnO1xuICpcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbnRyYWN0IGV4dGVuZHMgQ29udHJhY3Qge1xuICogICBAVHJhbnNhY3Rpb24oKVxuICogICBhc3luYyBteUZ1bmN0aW9uKGN0eDogQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICogICAgIGNvbnN0IGxvZ2dlciA9IG5ldyBDb250cmFjdExvZ2dlcignTXlDb250cmFjdCcsIHsgbGV2ZWw6ICdpbmZvJyB9LCBjdHgpO1xuICpcbiAqICAgICBsb2dnZXIuaW5mbygnUHJvY2Vzc2luZyB0cmFuc2FjdGlvbicpO1xuICogICAgIGxvZ2dlci5kZWJ1ZygnVHJhbnNhY3Rpb24gZGV0YWlsczonLCB7IC4uLiB9KTtcbiAqXG4gKiAgICAgLy8gRG8gc29tZXRoaW5nXG4gKlxuICogICAgIGxvZ2dlci5pbmZvKCdUcmFuc2FjdGlvbiBjb21wbGV0ZScpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIENvbnRyYWN0TG9nZ2VyIGV4dGVuZHMgTWluaUxvZ2dlciB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHVuZGVybHlpbmcgRmFicmljIGxvZ2dlciBpbnN0YW5jZVxuICAgKi9cbiAgcHJvdGVjdGVkIGxvZ2dlcjogTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGNvbnRleHQ6IHN0cmluZyxcbiAgICBjb25mOiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+IHwgdW5kZWZpbmVkLFxuICAgIGN0eD86IEZhYnJpY0NvbnRyYWN0Q29udGV4dFxuICApIHtcbiAgICBzdXBlcihjb250ZXh0LCBjb25mKTtcbiAgICBpZiAoIWN0eCkge1xuICAgICAgdGhpcy5sb2dnZXIgPSBuZXcgTWluaUxvZ2dlcihjb250ZXh0LCBjb25mKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2dnZXIgPSBjdHgubG9nZ2VyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIG1lc3NhZ2UgYXQgdGhlIHNwZWNpZmllZCBsZXZlbFxuICAgKiBAc3VtbWFyeSBPdmVycmlkZXMgdGhlIGJhc2UgbG9nIG1ldGhvZCB0byB1c2UgdGhlIEZhYnJpYyBjb250ZXh0J3MgbG9nZ2VyXG4gICAqIEBwYXJhbSB7TG9nTGV2ZWx9IGxldmVsIC0gVGhlIGxvZyBsZXZlbFxuICAgKiBAcGFyYW0ge1N0cmluZ0xpa2UgfCBFcnJvcn0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gbG9nXG4gICAqIEBwYXJhbSB7RXJyb3J9IFtzdGFja10gLSBPcHRpb25hbCBzdGFjayB0cmFjZSBmb3IgZXJyb3JzXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbG9nKFxuICAgIGxldmVsOiBMb2dMZXZlbCxcbiAgICBtc2c6IFN0cmluZ0xpa2UgfCBFcnJvcixcbiAgICBzdGFjaz86IEVycm9yXG4gICkge1xuICAgIGlmIChcbiAgICAgIE51bWVyaWNMb2dMZXZlbHNbdGhpcy5jb25maWcoXCJsZXZlbFwiKSBhcyBMb2dMZXZlbF0gPFxuICAgICAgTnVtZXJpY0xvZ0xldmVsc1tsZXZlbF1cbiAgICApXG4gICAgICByZXR1cm47XG5cbiAgICBsZXQgbWV0aG9kO1xuICAgIHN3aXRjaCAobGV2ZWwpIHtcbiAgICAgIGNhc2UgTG9nTGV2ZWwuaW5mbzpcbiAgICAgICAgbWV0aG9kID0gdGhpcy5sb2dnZXIuaW5mbztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvZ0xldmVsLnZlcmJvc2U6XG4gICAgICAgIG1ldGhvZCA9IHRoaXMubG9nZ2VyLnZlcmJvc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMb2dMZXZlbC5kZWJ1ZzpcbiAgICAgICAgbWV0aG9kID0gdGhpcy5sb2dnZXIuZGVidWc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMb2dMZXZlbC5lcnJvcjpcbiAgICAgICAgbWV0aG9kID0gdGhpcy5sb2dnZXIuZXJyb3I7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMb2dMZXZlbC5zaWxseTpcbiAgICAgICAgbWV0aG9kID0gdGhpcy5sb2dnZXIuc2lsbHk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsb2cgbGV2ZWxcIik7XG4gICAgfVxuICAgIG1ldGhvZC5jYWxsKHRoaXMubG9nZ2VyLCB0aGlzLmNyZWF0ZUxvZyhsZXZlbCwgbXNnLCBzdGFjaykpO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIENvbnRyYWN0TG9nZ2VyIGluc3RhbmNlc1xuICogQHN1bW1hcnkgQ3JlYXRlcyBhIG5ldyBDb250cmFjdExvZ2dlciB3aXRoIHRoZSBnaXZlbiBjb250ZXh0LCBjb25maWcsIGFuZCBGYWJyaWMgY29udGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IG9iamVjdCAtIFRoZSBsb2dnaW5nIGNvbnRleHQgbmFtZVxuICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+IHwgdW5kZWZpbmVkfSBjb25maWcgLSBPcHRpb25hbCBsb2dnaW5nIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSB7Q3R4fSBjdHggLSBUaGUgRmFicmljIGNoYWluY29kZSBjb250ZXh0XG4gKiBAcmV0dXJuIHtDb250cmFjdExvZ2dlcn0gQSBuZXcgQ29udHJhY3RMb2dnZXIgaW5zdGFuY2VcbiAqIEBmdW5jdGlvbiBmYWN0b3J5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZhYnJpYy5jb250cmFjdHNcbiAqL1xuY29uc3QgZmFjdG9yeTogTG9nZ2VyRmFjdG9yeSA9IChcbiAgb2JqZWN0OiBzdHJpbmcsXG4gIGNvbmZpZzogUGFydGlhbDxMb2dnaW5nQ29uZmlnPiB8IHVuZGVmaW5lZCxcbiAgY3R4OiBDdHhcbikgPT4ge1xuICByZXR1cm4gbmV3IENvbnRyYWN0TG9nZ2VyKG9iamVjdCwgY29uZmlnIHx8IHt9LCBjdHggYXMgYW55KTtcbn07XG5cbi8vIFNldCB0aGUgZmFjdG9yeSBhcyB0aGUgZGVmYXVsdCBsb2dnZXIgZmFjdG9yeVxuTG9nZ2luZy5zZXRGYWN0b3J5KGZhY3RvcnkpO1xuIl19
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Logger, LogLevel, MiniLogger, StringLike } from "@decaf-ts/logging";
|
|
2
|
+
import { LoggingConfig } from "@decaf-ts/logging";
|
|
3
|
+
import { FabricContractContext } from "./ContractContext";
|
|
4
|
+
/**
|
|
5
|
+
* @description Logger implementation for Fabric chaincode contracts
|
|
6
|
+
* @summary Adapts the standard logging interface to work with Fabric's chaincode context
|
|
7
|
+
*
|
|
8
|
+
* @param {string} context - The logging context name
|
|
9
|
+
* @param {Partial<LoggingConfig> | undefined} conf - Optional logging configuration
|
|
10
|
+
* @param {Ctx} ctx - The Fabric chaincode context
|
|
11
|
+
*
|
|
12
|
+
* @class ContractLogger
|
|
13
|
+
* @extends {MiniLogger}
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* // In a Fabric chaincode contract
|
|
17
|
+
* import { ContractLogger } from '@decaf-ts/for-fabric';
|
|
18
|
+
*
|
|
19
|
+
* export class MyContract extends Contract {
|
|
20
|
+
* @Transaction()
|
|
21
|
+
* async myFunction(ctx: Context): Promise<void> {
|
|
22
|
+
* const logger = new ContractLogger('MyContract', { level: 'info' }, ctx);
|
|
23
|
+
*
|
|
24
|
+
* logger.info('Processing transaction');
|
|
25
|
+
* logger.debug('Transaction details:', { ... });
|
|
26
|
+
*
|
|
27
|
+
* // Do something
|
|
28
|
+
*
|
|
29
|
+
* logger.info('Transaction complete');
|
|
30
|
+
* }
|
|
31
|
+
* }
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export declare class ContractLogger extends MiniLogger {
|
|
35
|
+
/**
|
|
36
|
+
* @description The underlying Fabric logger instance
|
|
37
|
+
*/
|
|
38
|
+
protected logger: Logger;
|
|
39
|
+
constructor(context: string, conf: Partial<LoggingConfig> | undefined, ctx?: FabricContractContext);
|
|
40
|
+
/**
|
|
41
|
+
* @description Logs a message at the specified level
|
|
42
|
+
* @summary Overrides the base log method to use the Fabric context's logger
|
|
43
|
+
* @param {LogLevel} level - The log level
|
|
44
|
+
* @param {StringLike | Error} msg - The message to log
|
|
45
|
+
* @param {Error} [stack] - Optional stack trace for errors
|
|
46
|
+
* @return {void}
|
|
47
|
+
*/
|
|
48
|
+
protected log(level: LogLevel, msg: StringLike | Error, stack?: Error): void;
|
|
49
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MISSING_PRIVATE_DATA_ERROR_MESSAGE = exports.MISSING_PRIVATE_DATA_REGEX = void 0;
|
|
4
|
+
exports.processModel = processModel;
|
|
5
|
+
exports.hasPrivateData = hasPrivateData;
|
|
6
|
+
exports.getClassPrivateDataMetadata = getClassPrivateDataMetadata;
|
|
7
|
+
exports.isModelPrivate = isModelPrivate;
|
|
8
|
+
exports.modelToPrivate = modelToPrivate;
|
|
9
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
10
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
11
|
+
const core_1 = require("@decaf-ts/core");
|
|
12
|
+
const decorators_1 = require("./../shared/decorators.cjs");
|
|
13
|
+
const constants_1 = require("./../shared/constants.cjs");
|
|
14
|
+
exports.MISSING_PRIVATE_DATA_REGEX = /private\s+data\s+matching\s+public\s+hash\s+version\s+is\s+not\s+available/i;
|
|
15
|
+
exports.MISSING_PRIVATE_DATA_ERROR_MESSAGE = "private data matching public hash version is not available ...";
|
|
16
|
+
function processModel(adapter, model) {
|
|
17
|
+
const transient = (0, db_decorators_1.modelToTransient)(model);
|
|
18
|
+
const privateData = modelToPrivate(model);
|
|
19
|
+
const transformModel = (model) => {
|
|
20
|
+
return Object.entries(model).reduce((accum, [key, val]) => {
|
|
21
|
+
if (typeof val === "undefined")
|
|
22
|
+
return accum;
|
|
23
|
+
const mappedProp = core_1.Repository.column(model, key);
|
|
24
|
+
if (adapter.isReserved(mappedProp))
|
|
25
|
+
throw new db_decorators_1.InternalError(`Property name ${mappedProp} is reserved`);
|
|
26
|
+
accum[mappedProp] = val;
|
|
27
|
+
return accum;
|
|
28
|
+
}, {});
|
|
29
|
+
};
|
|
30
|
+
if (privateData.private) {
|
|
31
|
+
const collections = Object.keys(privateData.private);
|
|
32
|
+
for (const collection of collections) {
|
|
33
|
+
privateData.private[collection] = transformModel(privateData.private[collection]);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
model: transient.model,
|
|
38
|
+
transient: transient.transient,
|
|
39
|
+
privateData: privateData.private,
|
|
40
|
+
result: transformModel(transient.model),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function hasPrivateData(model) {
|
|
44
|
+
const metadata = getClassPrivateDataMetadata(model);
|
|
45
|
+
if (!metadata)
|
|
46
|
+
return false;
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
function getClassPrivateDataMetadata(model) {
|
|
50
|
+
let metadata = Reflect.getMetadata((0, decorators_1.getFabricModelKey)(constants_1.FabricModelKeys.PRIVATE), model);
|
|
51
|
+
metadata =
|
|
52
|
+
metadata ||
|
|
53
|
+
Reflect.getMetadata((0, decorators_1.getFabricModelKey)(constants_1.FabricModelKeys.PRIVATE), model.constructor);
|
|
54
|
+
return metadata;
|
|
55
|
+
}
|
|
56
|
+
function isModelPrivate(model) {
|
|
57
|
+
const metadata = getClassPrivateDataMetadata(model);
|
|
58
|
+
if (!metadata || metadata.isPrivate === undefined)
|
|
59
|
+
return false;
|
|
60
|
+
return metadata.isPrivate;
|
|
61
|
+
}
|
|
62
|
+
function modelToPrivate(model) {
|
|
63
|
+
if (!hasPrivateData(model))
|
|
64
|
+
return { model: model };
|
|
65
|
+
const decs = (0, db_decorators_1.getAllPropertyDecoratorsRecursive)(model, undefined, (0, decorators_1.getFabricModelKey)(constants_1.FabricModelKeys.PRIVATE));
|
|
66
|
+
const isPrivate = isModelPrivate(model);
|
|
67
|
+
const modelCollections = getClassPrivateDataMetadata(model);
|
|
68
|
+
let result = {
|
|
69
|
+
model: model,
|
|
70
|
+
private: undefined,
|
|
71
|
+
};
|
|
72
|
+
if (isPrivate) {
|
|
73
|
+
result = Object.keys(model).reduce((accum, k) => {
|
|
74
|
+
const collections = modelCollections.collections;
|
|
75
|
+
accum.private = accum.private || {};
|
|
76
|
+
for (const collection of collections) {
|
|
77
|
+
try {
|
|
78
|
+
accum.private[collection] = accum.private[collection] || {};
|
|
79
|
+
accum.private[collection][k] = model[k];
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
throw new db_decorators_1.SerializationError(`Failed to serialize private property ${k}: ${e}`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return accum;
|
|
86
|
+
}, { model: {} });
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
result = Object.entries(decs).reduce((accum, [k, val]) => {
|
|
90
|
+
const privateData = val.find((el) => el.key === "");
|
|
91
|
+
if (privateData) {
|
|
92
|
+
const collections = privateData.props.collections;
|
|
93
|
+
accum.private = accum.private || {};
|
|
94
|
+
for (const collection of collections) {
|
|
95
|
+
try {
|
|
96
|
+
accum.private[collection] = accum.private[collection] || {};
|
|
97
|
+
accum.private[collection][k] = model[k];
|
|
98
|
+
}
|
|
99
|
+
catch (e) {
|
|
100
|
+
throw new db_decorators_1.SerializationError(`Failed to serialize private property ${k}: ${e}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
accum.model = accum.model || {};
|
|
106
|
+
accum.model[k] = model[k];
|
|
107
|
+
}
|
|
108
|
+
return accum;
|
|
109
|
+
}, {});
|
|
110
|
+
}
|
|
111
|
+
result.model = result.model || {};
|
|
112
|
+
result.model = decorator_validation_1.Model.build(result.model, model.constructor.name);
|
|
113
|
+
if (result.private) {
|
|
114
|
+
const collections = Object.keys(result.private);
|
|
115
|
+
for (const collection of collections) {
|
|
116
|
+
result.private[collection] = decorator_validation_1.Model.build(result.private[collection], model.constructor.name);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpdmF0ZS1kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9wcml2YXRlLWRhdGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBaUJBLG9DQWtDQztBQUVELHdDQUlDO0FBRUQsa0VBZ0JDO0FBRUQsd0NBSUM7QUFFRCx3Q0E4RkM7QUFqTEQsMkRBS2lDO0FBQ2pDLHlFQUF1RDtBQUN2RCx5Q0FBNEM7QUFDNUMsMkRBQXlEO0FBQ3pELHlEQUFzRDtBQUV6QyxRQUFBLDBCQUEwQixHQUNyQyw2RUFBNkUsQ0FBQztBQUVuRSxRQUFBLGtDQUFrQyxHQUM3QyxnRUFBZ0UsQ0FBQztBQUVuRSxTQUFnQixZQUFZLENBQWtCLE9BQVksRUFBRSxLQUFRO0lBQ2xFLE1BQU0sU0FBUyxHQUFHLElBQUEsZ0NBQWdCLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUMsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7UUFDcEMsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FDakMsQ0FBQyxLQUEwQixFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUU7WUFDekMsSUFBSSxPQUFPLEdBQUcsS0FBSyxXQUFXO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQzdDLE1BQU0sVUFBVSxHQUFHLGlCQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNqRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO2dCQUNoQyxNQUFNLElBQUksNkJBQWEsQ0FBQyxpQkFBaUIsVUFBVSxjQUFjLENBQUMsQ0FBQztZQUNyRSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ3hCLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxF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QkFBQyxPQUFPLENBQVUsRUFBRSxDQUFDO3dCQUNwQixNQUFNLElBQUksa0NBQWtCLENBQzFCLHdDQUF3QyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ2xELENBQUM7b0JBQ0osQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEtBQUssQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2hDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUksS0FBNkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNyRCxDQUFDO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLEVBQ0QsRUFBbUUsQ0FDcEUsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO0lBRWxDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsNEJBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWpFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWhELEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7WUFDckMsTUFBTSxDQUFDLE9BQVEsQ0FBQyxVQUFVLENBQUMsR0FBRyw0QkFBSyxDQUFDLEtBQUssQ0FDdkMsTUFBTSxDQUFDLE9BQVEsQ0FBQyxVQUFVLENBQUMsRUFDM0IsS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ3ZCLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sTUFBcUUsQ0FBQztBQUMvRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzUmVjdXJzaXZlLFxuICBJbnRlcm5hbEVycm9yLFxuICBtb2RlbFRvVHJhbnNpZW50LFxuICBTZXJpYWxpemF0aW9uRXJyb3IsXG59IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG5pbXBvcnQgeyBnZXRGYWJyaWNNb2RlbEtleSB9IGZyb20gXCIuLi9zaGFyZWQvZGVjb3JhdG9yc1wiO1xuaW1wb3J0IHsgRmFicmljTW9kZWxLZXlzIH0gZnJvbSBcIi4uL3NoYXJlZC9jb25zdGFudHNcIjtcblxuZXhwb3J0IGNvbnN0IE1JU1NJTkdfUFJJVkFURV9EQVRBX1JFR0VYID1cbiAgL3ByaXZhdGVcXHMrZGF0YVxccyttYXRjaGluZ1xccytwdWJsaWNcXHMraGFzaFxccyt2ZXJzaW9uXFxzK2lzXFxzK25vdFxccythdmFpbGFibGUvaTtcblxuZXhwb3J0IGNvbnN0IE1JU1NJTkdfUFJJVkFURV9EQVRBX0VSUk9SX01FU1NBR0UgPVxuICBcInByaXZhdGUgZGF0YSBtYXRjaGluZyBwdWJsaWMgaGFzaCB2ZXJzaW9uIGlzIG5vdCBhdmFpbGFibGUgLi4uXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzTW9kZWw8TSBleHRlbmRzIE1vZGVsPihhZGFwdGVyOiBhbnksIG1vZGVsOiBNKSB7XG4gIGNvbnN0IHRyYW5zaWVudCA9IG1vZGVsVG9UcmFuc2llbnQobW9kZWwpO1xuICBjb25zdCBwcml2YXRlRGF0YSA9IG1vZGVsVG9Qcml2YXRlKG1vZGVsKTtcblxuICBjb25zdCB0cmFuc2Zvcm1Nb2RlbCA9IChtb2RlbDogYW55KSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG1vZGVsKS5yZWR1Y2UoXG4gICAgICAoYWNjdW06IFJlY29yZDxzdHJpbmcsIGFueT4sIFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBhY2N1bTtcbiAgICAgICAgY29uc3QgbWFwcGVkUHJvcCA9IFJlcG9zaXRvcnkuY29sdW1uKG1vZGVsLCBrZXkpO1xuICAgICAgICBpZiAoYWRhcHRlci5pc1Jlc2VydmVkKG1hcHBlZFByb3ApKVxuICAgICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKGBQcm9wZXJ0eSBuYW1lICR7bWFwcGVkUHJvcH0gaXMgcmVzZXJ2ZWRgKTtcbiAgICAgICAgYWNjdW1bbWFwcGVkUHJvcF0gPSB2YWw7XG4gICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICk7XG4gIH07XG5cbiAgaWYgKHByaXZhdGVEYXRhLnByaXZhdGUpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9ucyA9IE9iamVjdC5rZXlzKHByaXZhdGVEYXRhLnByaXZhdGUpO1xuXG4gICAgZm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIGNvbGxlY3Rpb25zKSB7XG4gICAgICBwcml2YXRlRGF0YS5wcml2YXRlIVtjb2xsZWN0aW9uXSA9IHRyYW5zZm9ybU1vZGVsKFxuICAgICAgICBwcml2YXRlRGF0YS5wcml2YXRlIVtjb2xsZWN0aW9uXVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1vZGVsOiB0cmFuc2llbnQubW9kZWwsXG4gICAgdHJhbnNpZW50OiB0cmFuc2llbnQudHJhbnNpZW50LFxuICAgIHByaXZhdGVEYXRhOiBwcml2YXRlRGF0YS5wcml2YXRlLFxuICAgIHJlc3VsdDogdHJhbnNmb3JtTW9kZWwodHJhbnNpZW50Lm1vZGVsKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ByaXZhdGVEYXRhPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0pIHtcbiAgY29uc3QgbWV0YWRhdGEgPSBnZXRDbGFzc1ByaXZhdGVEYXRhTWV0YWRhdGEobW9kZWwpO1xuICBpZiAoIW1ldGFkYXRhKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xhc3NQcml2YXRlRGF0YU1ldGFkYXRhPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBNXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgbGV0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICBnZXRGYWJyaWNNb2RlbEtleShGYWJyaWNNb2RlbEtleXMuUFJJVkFURSksXG4gICAgbW9kZWxcbiAgKTtcblxuICBtZXRhZGF0YSA9XG4gICAgbWV0YWRhdGEgfHxcbiAgICBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgZ2V0RmFicmljTW9kZWxLZXkoRmFicmljTW9kZWxLZXlzLlBSSVZBVEUpLFxuICAgICAgbW9kZWwuY29uc3RydWN0b3JcbiAgICApO1xuXG4gIHJldHVybiBtZXRhZGF0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTW9kZWxQcml2YXRlPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0pOiBib29sZWFuIHtcbiAgY29uc3QgbWV0YWRhdGEgPSBnZXRDbGFzc1ByaXZhdGVEYXRhTWV0YWRhdGEobW9kZWwpO1xuICBpZiAoIW1ldGFkYXRhIHx8IG1ldGFkYXRhLmlzUHJpdmF0ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBtZXRhZGF0YS5pc1ByaXZhdGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbFRvUHJpdmF0ZTxNIGV4dGVuZHMgTW9kZWw+KFxuICBtb2RlbDogTVxuKTogeyBtb2RlbDogTTsgcHJpdmF0ZT86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+IH0ge1xuICBpZiAoIWhhc1ByaXZhdGVEYXRhKG1vZGVsKSkgcmV0dXJuIHsgbW9kZWw6IG1vZGVsIH07XG4gIGNvbnN0IGRlY3M6IFJlY29yZDxzdHJpbmcsIGFueVtdPiA9IGdldEFsbFByb3BlcnR5RGVjb3JhdG9yc1JlY3Vyc2l2ZShcbiAgICBtb2RlbCxcbiAgICB1bmRlZmluZWQsXG4gICAgZ2V0RmFicmljTW9kZWxLZXkoRmFicmljTW9kZWxLZXlzLlBSSVZBVEUpXG4gICkgYXMgUmVjb3JkPHN0cmluZywgYW55W10+O1xuXG4gIGNvbnN0IGlzUHJpdmF0ZSA9IGlzTW9kZWxQcml2YXRlKG1vZGVsKTtcbiAgY29uc3QgbW9kZWxDb2xsZWN0aW9uczogUmVjb3JkPHN0cmluZywgYW55PiA9XG4gICAgZ2V0Q2xhc3NQcml2YXRlRGF0YU1ldGFkYXRhKG1vZGVsKTtcblxuICBsZXQgcmVzdWx0OiB7IG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+OyBwcml2YXRlPzogUmVjb3JkPHN0cmluZywgYW55PiB9ID0ge1xuICAgIG1vZGVsOiBtb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHByaXZhdGU6IHVuZGVmaW5lZCxcbiAgfTtcblxuICBpZiAoaXNQcml2YXRlKSB7XG4gICAgcmVzdWx0ID0gT2JqZWN0LmtleXMobW9kZWwpLnJlZHVjZShcbiAgICAgIChcbiAgICAgICAgYWNjdW06IHsgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT47IHByaXZhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0sXG4gICAgICAgIGtcbiAgICAgICkgPT4ge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9ucyA9IG1vZGVsQ29sbGVjdGlvbnMuY29sbGVjdGlvbnM7XG4gICAgICAgIGFjY3VtLnByaXZhdGUgPSBhY2N1bS5wcml2YXRlIHx8IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhY2N1bS5wcml2YXRlW2NvbGxlY3Rpb25dID0gYWNjdW0ucHJpdmF0ZVtjb2xsZWN0aW9uXSB8fCB7fTtcbiAgICAgICAgICAgIGFjY3VtLnByaXZhdGVbY29sbGVjdGlvbl1ba10gPSBtb2RlbFtrIGFzIGtleW9mIE1dO1xuICAgICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBTZXJpYWxpemF0aW9uRXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgdG8gc2VyaWFsaXplIHByaXZhdGUgcHJvcGVydHkgJHtrfTogJHtlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSxcbiAgICAgIHsgbW9kZWw6IHt9IH0gYXMge1xuICAgICAgICBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICAgICAgcHJpdmF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgICB9XG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSBPYmplY3QuZW50cmllcyhkZWNzKS5yZWR1Y2UoXG4gICAgICAoXG4gICAgICAgIGFjY3VtOiB7IG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+OyBwcml2YXRlPzogUmVjb3JkPHN0cmluZywgYW55PiB9LFxuICAgICAgICBbaywgdmFsXVxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVEYXRhID0gdmFsLmZpbmQoKGVsKSA9PiBlbC5rZXkgPT09IFwiXCIpO1xuXG4gICAgICAgIGlmIChwcml2YXRlRGF0YSkge1xuICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gcHJpdmF0ZURhdGEucHJvcHMuY29sbGVjdGlvbnM7XG5cbiAgICAgICAgICBhY2N1bS5wcml2YXRlID0gYWNjdW0ucHJpdmF0ZSB8fCB7fTtcblxuICAgICAgICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYWNjdW0ucHJpdmF0ZVtjb2xsZWN0aW9uXSA9IGFjY3VtLnByaXZhdGVbY29sbGVjdGlvbl0gfHwge307XG4gICAgICAgICAgICAgIGFjY3VtLnByaXZhdGVbY29sbGVjdGlvbl1ba10gPSBtb2RlbFtrIGFzIGtleW9mIE1dO1xuICAgICAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKFxuICAgICAgICAgICAgICAgIGBGYWlsZWQgdG8gc2VyaWFsaXplIHByaXZhdGUgcHJvcGVydHkgJHtrfTogJHtlfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYWNjdW0ubW9kZWwgPSBhY2N1bS5tb2RlbCB8fCB7fTtcbiAgICAgICAgICBhY2N1bS5tb2RlbFtrXSA9IChtb2RlbCBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVtrXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LFxuICAgICAge30gYXMgeyBtb2RlbDogUmVjb3JkPHN0cmluZywgYW55PjsgcHJpdmF0ZT86IFJlY29yZDxzdHJpbmcsIGFueT4gfVxuICAgICk7XG4gIH1cblxuICByZXN1bHQubW9kZWwgPSByZXN1bHQubW9kZWwgfHwge307XG5cbiAgcmVzdWx0Lm1vZGVsID0gTW9kZWwuYnVpbGQocmVzdWx0Lm1vZGVsLCBtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICBpZiAocmVzdWx0LnByaXZhdGUpIHtcbiAgICBjb25zdCBjb2xsZWN0aW9ucyA9IE9iamVjdC5rZXlzKHJlc3VsdC5wcml2YXRlKTtcblxuICAgIGZvciAoY29uc3QgY29sbGVjdGlvbiBvZiBjb2xsZWN0aW9ucykge1xuICAgICAgcmVzdWx0LnByaXZhdGUhW2NvbGxlY3Rpb25dID0gTW9kZWwuYnVpbGQoXG4gICAgICAgIHJlc3VsdC5wcml2YXRlIVtjb2xsZWN0aW9uXSxcbiAgICAgICAgbW9kZWwuY29uc3RydWN0b3IubmFtZVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdCBhcyB7IG1vZGVsOiBNOyBwcml2YXRlPzogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYW55Pj4gfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
|
+
export declare const MISSING_PRIVATE_DATA_REGEX: RegExp;
|
|
3
|
+
export declare const MISSING_PRIVATE_DATA_ERROR_MESSAGE = "private data matching public hash version is not available ...";
|
|
4
|
+
export declare function processModel<M extends Model>(adapter: any, model: M): {
|
|
5
|
+
model: M;
|
|
6
|
+
transient: Record<string, any> | undefined;
|
|
7
|
+
privateData: Record<string, Record<string, any>> | undefined;
|
|
8
|
+
result: Record<string, any>;
|
|
9
|
+
};
|
|
10
|
+
export declare function hasPrivateData<M extends Model>(model: M): boolean;
|
|
11
|
+
export declare function getClassPrivateDataMetadata<M extends Model>(model: M): Record<string, any>;
|
|
12
|
+
export declare function isModelPrivate<M extends Model>(model: M): boolean;
|
|
13
|
+
export declare function modelToPrivate<M extends Model>(model: M): {
|
|
14
|
+
model: M;
|
|
15
|
+
private?: Record<string, Record<string, any>>;
|
|
16
|
+
};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBvc2l0b3J5RmxhZ3MgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IENoYWluY29kZVN0dWIsIENsaWVudElkZW50aXR5IH0gZnJvbSBcImZhYnJpYy1zaGltLWFwaVwiO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZsYWdzIGZvciBGYWJyaWMgY2hhaW5jb2RlIGNvbnRyYWN0IG9wZXJhdGlvbnNcbiAqIEBzdW1tYXJ5IEV4dGVuZHMgcmVwb3NpdG9yeSBmbGFncyB3aXRoIEZhYnJpYy1zcGVjaWZpYyBjb250ZXh0IGVsZW1lbnRzIGF2YWlsYWJsZSBkdXJpbmcgRmFicmljIGNoYWluY29kZSBleGVjdXRpb24sIHN1Y2ggYXMgdGhlIENoYWluY29kZVN0dWIsIENsaWVudElkZW50aXR5IGFuZCBhIHJlcXVlc3Qtc2NvcGVkIExvZ2dlci5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1JlcG9zaXRvcnlGbGFnc30gW2Jhc2VdIC0gQmFzZSByZXBvc2l0b3J5IGZsYWdzIHRoYXQgdGhlc2UgRmFicmljLXNwZWNpZmljIGZsYWdzIGV4dGVuZFxuICogQHJldHVybiB7dm9pZH1cbiAqIEBpbnRlcmZhY2UgRmFicmljQ29udHJhY3RGbGFnc1xuICogQG1lbWJlck9mIG1vZHVsZTpmYWJyaWMuY29udHJhY3RzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFicmljQ29udHJhY3RGbGFncyBleHRlbmRzIFJlcG9zaXRvcnlGbGFncyB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2hhaW5jb2RlIHN0dWIgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIGxlZGdlclxuICAgKi9cbiAgc3R1YjogQ2hhaW5jb2RlU3R1YjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENsaWVudCBpZGVudGl0eSBmb3IgdGhlIHRyYW5zYWN0aW9uIHN1Ym1pdHRlclxuICAgKi9cbiAgY2xpZW50SWRlbnRpdHk6IENsaWVudElkZW50aXR5O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9nZ2VyIGluc3RhbmNlIGZvciB0aGUgY29udHJhY3RcbiAgICovXG4gIGxvZ2dlcjogTG9nZ2VyO1xufVxuIl19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { RepositoryFlags } from "@decaf-ts/db-decorators";
|
|
2
|
+
import { ChaincodeStub, ClientIdentity } from "fabric-shim-api";
|
|
3
|
+
import { Logger } from "@decaf-ts/logging";
|
|
4
|
+
/**
|
|
5
|
+
* @description Flags for Fabric chaincode contract operations
|
|
6
|
+
* @summary Extends repository flags with Fabric-specific context elements available during Fabric chaincode execution, such as the ChaincodeStub, ClientIdentity and a request-scoped Logger.
|
|
7
|
+
* @template T
|
|
8
|
+
* @param {RepositoryFlags} [base] - Base repository flags that these Fabric-specific flags extend
|
|
9
|
+
* @return {void}
|
|
10
|
+
* @interface FabricContractFlags
|
|
11
|
+
* @memberOf module:fabric.contracts
|
|
12
|
+
*/
|
|
13
|
+
export interface FabricContractFlags extends RepositoryFlags {
|
|
14
|
+
/**
|
|
15
|
+
* @description Chaincode stub for interacting with the ledger
|
|
16
|
+
*/
|
|
17
|
+
stub: ChaincodeStub;
|
|
18
|
+
/**
|
|
19
|
+
* @description Client identity for the transaction submitter
|
|
20
|
+
*/
|
|
21
|
+
clientIdentity: ClientIdentity;
|
|
22
|
+
/**
|
|
23
|
+
* @description Logger instance for the contract
|
|
24
|
+
*/
|
|
25
|
+
logger: Logger;
|
|
26
|
+
}
|