@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,234 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.contentOfLoadFile = contentOfLoadFile;
|
|
37
|
+
exports.readFile = readFile;
|
|
38
|
+
exports.getCAUser = getCAUser;
|
|
39
|
+
exports.getIdentity = getIdentity;
|
|
40
|
+
exports.getFirstDirFileName = getFirstDirFileName;
|
|
41
|
+
exports.getFirstDirFileNameContent = getFirstDirFileNameContent;
|
|
42
|
+
exports.getSigner = getSigner;
|
|
43
|
+
exports.extractPrivateKey = extractPrivateKey;
|
|
44
|
+
const utils_1 = require("@decaf-ts/utils");
|
|
45
|
+
const logging_1 = require("@decaf-ts/logging");
|
|
46
|
+
const fabric_common_1 = require("fabric-common");
|
|
47
|
+
const fabric_gateway_1 = require("@hyperledger/fabric-gateway");
|
|
48
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
49
|
+
const log = logging_1.Logging.for("fabric-fs");
|
|
50
|
+
/**
|
|
51
|
+
* @description Loads content from a file or returns the content if already loaded
|
|
52
|
+
* @summary Determines if the input is already content or a path to a file, and loads the file if needed
|
|
53
|
+
* @param {string | Uint8Array} contentOrPath - The content or path to load
|
|
54
|
+
* @param {Function} fileReader - Function to read the file if contentOrPath is a path
|
|
55
|
+
* @return {Promise<string | Uint8Array | Buffer>} The content
|
|
56
|
+
* @function contentOfLoadFile
|
|
57
|
+
* @memberOf module:for-fabric.client
|
|
58
|
+
*/
|
|
59
|
+
async function contentOfLoadFile(contentOrPath, fileReader) {
|
|
60
|
+
if (contentOrPath instanceof Uint8Array)
|
|
61
|
+
return contentOrPath;
|
|
62
|
+
if (contentOrPath.match(/-----BEGIN (CERTIFICATE|KEY|PRIVATE KEY)-----.+?-----END \1-----$/gms))
|
|
63
|
+
return contentOrPath;
|
|
64
|
+
return await fileReader(contentOrPath);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* @description Reads a file from the file system
|
|
68
|
+
* @summary Loads a file using the Node.js file system module
|
|
69
|
+
* @param {string | Buffer} contentOrPath - The content or path to load
|
|
70
|
+
* @return {Promise<Buffer>} The file content as a Buffer
|
|
71
|
+
* @function readFile
|
|
72
|
+
* @memberOf module:for-fabric.client
|
|
73
|
+
*/
|
|
74
|
+
async function readFile(contentOrPath) {
|
|
75
|
+
if (typeof contentOrPath !== "string")
|
|
76
|
+
return contentOrPath;
|
|
77
|
+
const fileReader = async (path) => {
|
|
78
|
+
const { promises } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("fs"))));
|
|
79
|
+
return await promises.readFile(path);
|
|
80
|
+
};
|
|
81
|
+
return await fileReader(contentOrPath);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* @description Creates a Certificate Authority user
|
|
85
|
+
* @summary Initializes a user with the given credentials for interacting with a Fabric CA
|
|
86
|
+
* @param {string} userName - The user name
|
|
87
|
+
* @param {string} privateKey - The private key as a string
|
|
88
|
+
* @param {string} certificate - The certificate as a string
|
|
89
|
+
* @param {string} mspId - The Membership Service Provider ID
|
|
90
|
+
* @return {Promise<User>} Promise resolving to the created user
|
|
91
|
+
* @function getCAUser
|
|
92
|
+
* @memberOf module:for-fabric.client
|
|
93
|
+
*/
|
|
94
|
+
async function getCAUser(userName, privateKey, certificate, mspId) {
|
|
95
|
+
log.debug(`Creating a CA ${mspId} user ${userName} with certificate ${certificate}`);
|
|
96
|
+
const user = new fabric_common_1.User(userName);
|
|
97
|
+
const cryptoSuite = fabric_common_1.User.newCryptoSuite();
|
|
98
|
+
user.setCryptoSuite(cryptoSuite);
|
|
99
|
+
const importedKey = cryptoSuite.createKeyFromRaw(privateKey);
|
|
100
|
+
await user.setEnrollment(importedKey, certificate, mspId);
|
|
101
|
+
return user;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* @description Gets an identity from a certificate directory
|
|
105
|
+
* @summary Loads a certificate from a directory and creates an Identity object
|
|
106
|
+
* @param {string} mspId - The Membership Service Provider ID
|
|
107
|
+
* @param {string} certDirectoryPath - Path to the directory containing the certificate
|
|
108
|
+
* @return {Promise<Identity>} Promise resolving to the identity
|
|
109
|
+
* @function getIdentity
|
|
110
|
+
* @memberOf module:for-fabric.client
|
|
111
|
+
*/
|
|
112
|
+
async function getIdentity(mspId, certDirectoryPath) {
|
|
113
|
+
const identityFileReader = async (path) => {
|
|
114
|
+
const { promises } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("fs"))));
|
|
115
|
+
const certPath = await getFirstDirFileName(path);
|
|
116
|
+
const credentials = await promises.readFile(certPath);
|
|
117
|
+
return credentials;
|
|
118
|
+
};
|
|
119
|
+
const credentials = (await contentOfLoadFile(certDirectoryPath, identityFileReader));
|
|
120
|
+
return { mspId, credentials };
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* @description Gets the full path of the first file in a directory
|
|
124
|
+
* @summary Reads a directory and returns the path to the first file found
|
|
125
|
+
* @param {string} dirPath - Path to the directory
|
|
126
|
+
* @return {Promise<string>} Promise resolving to the full path of the first file
|
|
127
|
+
* @function getFirstDirFileName
|
|
128
|
+
* @memberOf module:for-fabric.client
|
|
129
|
+
*/
|
|
130
|
+
async function getFirstDirFileName(dirPath) {
|
|
131
|
+
const { promises } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("fs"))));
|
|
132
|
+
const { join } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("path"))));
|
|
133
|
+
const files = await promises.readdir(dirPath);
|
|
134
|
+
return join(dirPath, files[0]);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* @description Gets the content of the first file in a directory
|
|
138
|
+
* @summary Reads a directory, finds the first file, and returns its content as a string
|
|
139
|
+
* @param {string} dirPath - Path to the directory
|
|
140
|
+
* @return {Promise<string>} Promise resolving to the content of the first file
|
|
141
|
+
* @function getFirstDirFileNameContent
|
|
142
|
+
* @memberOf module:for-fabric.client
|
|
143
|
+
*/
|
|
144
|
+
async function getFirstDirFileNameContent(dirPath) {
|
|
145
|
+
const { promises } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("fs"))));
|
|
146
|
+
const { join } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("path"))));
|
|
147
|
+
const files = await promises.readdir(dirPath);
|
|
148
|
+
return (await promises.readFile(join(dirPath, files[0]))).toString();
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* @description Gets a signer from a key directory
|
|
152
|
+
* @summary Loads a private key from a directory and creates a Signer for Fabric transactions
|
|
153
|
+
* @param {string} keyDirectoryPath - Path to the directory containing the private key
|
|
154
|
+
* @return {Promise<Signer>} Promise resolving to the signer
|
|
155
|
+
* @function getSigner
|
|
156
|
+
* @memberOf module:for-fabric.client
|
|
157
|
+
*/
|
|
158
|
+
async function getSigner(keyDirectoryPath) {
|
|
159
|
+
const signerFileReader = async (path) => {
|
|
160
|
+
const { promises } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("fs"))));
|
|
161
|
+
const keyPath = await getFirstDirFileName(path);
|
|
162
|
+
return await promises.readFile(keyPath);
|
|
163
|
+
};
|
|
164
|
+
const privateKeyPem = (await contentOfLoadFile(keyDirectoryPath, signerFileReader));
|
|
165
|
+
// Node based implementation
|
|
166
|
+
// privateKey = createPrivateKey(privateKeyPem);
|
|
167
|
+
// --
|
|
168
|
+
// web based implementation
|
|
169
|
+
const privateKey = await extractPrivateKey(privateKeyPem);
|
|
170
|
+
const keys = Object.getOwnPropertySymbols(privateKey);
|
|
171
|
+
const k = privateKey[keys[0]];
|
|
172
|
+
// --
|
|
173
|
+
return fabric_gateway_1.signers.newPrivateKeySigner(k);
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* @description Extracts a private key from a PEM buffer
|
|
177
|
+
* @summary Converts a PEM-encoded private key to a CryptoKey object
|
|
178
|
+
* @param {Buffer} pem - The PEM-encoded private key
|
|
179
|
+
* @return {Promise<CryptoKey>} Promise resolving to the CryptoKey
|
|
180
|
+
* @function extractPrivateKey
|
|
181
|
+
* @memberOf module:for-fabric.client
|
|
182
|
+
* @mermaid
|
|
183
|
+
* sequenceDiagram
|
|
184
|
+
* participant Caller
|
|
185
|
+
* participant ExtractPrivateKey
|
|
186
|
+
* participant SubtleCrypto
|
|
187
|
+
*
|
|
188
|
+
* Caller->>ExtractPrivateKey: extractPrivateKey(pem)
|
|
189
|
+
* ExtractPrivateKey->>ExtractPrivateKey: Get SubtleCrypto implementation
|
|
190
|
+
* ExtractPrivateKey->>ExtractPrivateKey: Parse PEM format
|
|
191
|
+
* ExtractPrivateKey->>ExtractPrivateKey: Convert to binary DER
|
|
192
|
+
* ExtractPrivateKey->>SubtleCrypto: importKey(pkcs8, binaryDer, options)
|
|
193
|
+
* SubtleCrypto-->>ExtractPrivateKey: CryptoKey
|
|
194
|
+
* ExtractPrivateKey-->>Caller: CryptoKey
|
|
195
|
+
*/
|
|
196
|
+
async function extractPrivateKey(pem) {
|
|
197
|
+
const libName = "crypto";
|
|
198
|
+
let subtle;
|
|
199
|
+
if ((0, logging_1.isBrowser)()) {
|
|
200
|
+
subtle = globalThis.crypto.subtle;
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
const lib = (await (0, utils_1.normalizeImport)(Promise.resolve(`${libName}`).then(s => __importStar(require(s)))));
|
|
204
|
+
subtle = lib.subtle || lib.webcrypto.subtle;
|
|
205
|
+
}
|
|
206
|
+
if (!subtle)
|
|
207
|
+
throw new Error("Could not load SubtleCrypto module");
|
|
208
|
+
function str2ab(str) {
|
|
209
|
+
const buf = new ArrayBuffer(str.length);
|
|
210
|
+
const bufView = new Uint8Array(buf);
|
|
211
|
+
for (let i = 0, strLen = str.length; i < strLen; i++) {
|
|
212
|
+
bufView[i] = str.charCodeAt(i);
|
|
213
|
+
}
|
|
214
|
+
return buf;
|
|
215
|
+
}
|
|
216
|
+
const str = pem
|
|
217
|
+
.toString("utf8")
|
|
218
|
+
.replace("-----BEGIN PRIVATE KEY-----", "")
|
|
219
|
+
.replaceAll("\n", "")
|
|
220
|
+
.replace("-----END PRIVATE KEY-----", "");
|
|
221
|
+
const decoded = Buffer.from(str, "base64").toString("binary");
|
|
222
|
+
const binaryDer = str2ab(decoded);
|
|
223
|
+
try {
|
|
224
|
+
const key = await subtle.importKey("pkcs8", binaryDer, {
|
|
225
|
+
name: "ECDSA",
|
|
226
|
+
namedCurve: "P-256",
|
|
227
|
+
}, true, ["sign"]);
|
|
228
|
+
return key;
|
|
229
|
+
}
|
|
230
|
+
catch (e) {
|
|
231
|
+
throw new db_decorators_1.InternalError(e);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFicmljLWZzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9mYWJyaWMtZnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQkEsOENBWUM7QUFVRCw0QkFTQztBQWFELDhCQWVDO0FBV0Qsa0NBaUJDO0FBVUQsa0RBS0M7QUFVRCxnRUFPQztBQVVELDhCQXNCQztBQXVCRCw4Q0E2Q0M7QUE1T0QsMkNBQWtEO0FBQ2xELCtDQUF1RDtBQUN2RCxpREFBcUM7QUFDckMsZ0VBQXdFO0FBQ3hFLDJEQUF3RDtBQUV4RCxNQUFNLEdBQUcsR0FBRyxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUVyQzs7Ozs7Ozs7R0FRRztBQUNJLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsYUFBa0MsRUFDbEMsVUFBbUU7SUFFbkUsSUFBSSxhQUFhLFlBQVksVUFBVTtRQUFFLE9BQU8sYUFBYSxDQUFDO0lBQzlELElBQ0UsYUFBYSxDQUFDLEtBQUssQ0FDakIsc0VBQXNFLENBQ3ZFO1FBRUQsT0FBTyxhQUFhLENBQUM7SUFDdkIsT0FBTyxNQUFNLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNJLEtBQUssVUFBVSxRQUFRLENBQUMsYUFBOEI7SUFDM0QsSUFBSSxPQUFPLGFBQWEsS0FBSyxRQUFRO1FBQUUsT0FBTyxhQUFhLENBQUM7SUFFNUQsTUFBTSxVQUFVLEdBQUcsS0FBSyxFQUFFLElBQVksRUFBRSxFQUFFO1FBQ3hDLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLElBQUEsdUJBQWUsb0RBQVEsSUFBSSxJQUFFLENBQUM7UUFDekQsT0FBTyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQyxDQUFDO0lBRUYsT0FBTyxNQUFNLFVBQVUsQ0FBQyxh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NkJBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vcm1hbGl6ZUltcG9ydCB9IGZyb20gXCJAZGVjYWYtdHMvdXRpbHNcIjtcbmltcG9ydCB7IGlzQnJvd3NlciwgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gXCJmYWJyaWMtY29tbW9uXCI7XG5pbXBvcnQgeyBJZGVudGl0eSwgU2lnbmVyLCBzaWduZXJzIH0gZnJvbSBcIkBoeXBlcmxlZGdlci9mYWJyaWMtZ2F0ZXdheVwiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5jb25zdCBsb2cgPSBMb2dnaW5nLmZvcihcImZhYnJpYy1mc1wiKTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTG9hZHMgY29udGVudCBmcm9tIGEgZmlsZSBvciByZXR1cm5zIHRoZSBjb250ZW50IGlmIGFscmVhZHkgbG9hZGVkXG4gKiBAc3VtbWFyeSBEZXRlcm1pbmVzIGlmIHRoZSBpbnB1dCBpcyBhbHJlYWR5IGNvbnRlbnQgb3IgYSBwYXRoIHRvIGEgZmlsZSwgYW5kIGxvYWRzIHRoZSBmaWxlIGlmIG5lZWRlZFxuICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBjb250ZW50T3JQYXRoIC0gVGhlIGNvbnRlbnQgb3IgcGF0aCB0byBsb2FkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWxlUmVhZGVyIC0gRnVuY3Rpb24gdG8gcmVhZCB0aGUgZmlsZSBpZiBjb250ZW50T3JQYXRoIGlzIGEgcGF0aFxuICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmcgfCBVaW50OEFycmF5IHwgQnVmZmVyPn0gVGhlIGNvbnRlbnRcbiAqIEBmdW5jdGlvbiBjb250ZW50T2ZMb2FkRmlsZVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLmNsaWVudFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udGVudE9mTG9hZEZpbGUoXG4gIGNvbnRlbnRPclBhdGg6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gIGZpbGVSZWFkZXI6IChwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgVWludDhBcnJheSB8IEJ1ZmZlcj5cbikge1xuICBpZiAoY29udGVudE9yUGF0aCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiBjb250ZW50T3JQYXRoO1xuICBpZiAoXG4gICAgY29udGVudE9yUGF0aC5tYXRjaChcbiAgICAgIC8tLS0tLUJFR0lOIChDRVJUSUZJQ0FURXxLRVl8UFJJVkFURSBLRVkpLS0tLS0uKz8tLS0tLUVORCBcXDEtLS0tLSQvZ21zXG4gICAgKVxuICApXG4gICAgcmV0dXJuIGNvbnRlbnRPclBhdGg7XG4gIHJldHVybiBhd2FpdCBmaWxlUmVhZGVyKGNvbnRlbnRPclBhdGgpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZWFkcyBhIGZpbGUgZnJvbSB0aGUgZmlsZSBzeXN0ZW1cbiAqIEBzdW1tYXJ5IExvYWRzIGEgZmlsZSB1c2luZyB0aGUgTm9kZS5qcyBmaWxlIHN5c3RlbSBtb2R1bGVcbiAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSBjb250ZW50T3JQYXRoIC0gVGhlIGNvbnRlbnQgb3IgcGF0aCB0byBsb2FkXG4gKiBAcmV0dXJuIHtQcm9taXNlPEJ1ZmZlcj59IFRoZSBmaWxlIGNvbnRlbnQgYXMgYSBCdWZmZXJcbiAqIEBmdW5jdGlvbiByZWFkRmlsZVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLmNsaWVudFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEZpbGUoY29udGVudE9yUGF0aDogc3RyaW5nIHwgQnVmZmVyKSB7XG4gIGlmICh0eXBlb2YgY29udGVudE9yUGF0aCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbnRlbnRPclBhdGg7XG5cbiAgY29uc3QgZmlsZVJlYWRlciA9IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB7IHByb21pc2VzIH0gPSBhd2FpdCBub3JtYWxpemVJbXBvcnQoaW1wb3J0KFwiZnNcIikpO1xuICAgIHJldHVybiBhd2FpdCBwcm9taXNlcy5yZWFkRmlsZShwYXRoKTtcbiAgfTtcblxuICByZXR1cm4gYXdhaXQgZmlsZVJlYWRlcihjb250ZW50T3JQYXRoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIENlcnRpZmljYXRlIEF1dGhvcml0eSB1c2VyXG4gKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gY3JlZGVudGlhbHMgZm9yIGludGVyYWN0aW5nIHdpdGggYSBGYWJyaWMgQ0FcbiAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyTmFtZSAtIFRoZSB1c2VyIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcml2YXRlS2V5IC0gVGhlIHByaXZhdGUga2V5IGFzIGEgc3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gY2VydGlmaWNhdGUgLSBUaGUgY2VydGlmaWNhdGUgYXMgYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBtc3BJZCAtIFRoZSBNZW1iZXJzaGlwIFNlcnZpY2UgUHJvdmlkZXIgSURcbiAqIEByZXR1cm4ge1Byb21pc2U8VXNlcj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBjcmVhdGVkIHVzZXJcbiAqIEBmdW5jdGlvbiBnZXRDQVVzZXJcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5jbGllbnRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENBVXNlcihcbiAgdXNlck5hbWU6IHN0cmluZyxcbiAgcHJpdmF0ZUtleTogc3RyaW5nLFxuICBjZXJ0aWZpY2F0ZTogc3RyaW5nLFxuICBtc3BJZDogc3RyaW5nXG4pOiBQcm9taXNlPFVzZXI+IHtcbiAgbG9nLmRlYnVnKFxuICAgIGBDcmVhdGluZyBhIENBICR7bXNwSWR9IHVzZXIgJHt1c2VyTmFtZX0gd2l0aCBjZXJ0aWZpY2F0ZSAke2NlcnRpZmljYXRlfWBcbiAgKTtcbiAgY29uc3QgdXNlciA9IG5ldyBVc2VyKHVzZXJOYW1lKTtcbiAgY29uc3QgY3J5cHRvU3VpdGUgPSBVc2VyLm5ld0NyeXB0b1N1aXRlKCk7XG4gIHVzZXIuc2V0Q3J5cHRvU3VpdGUoY3J5cHRvU3VpdGUpO1xuICBjb25zdCBpbXBvcnRlZEtleSA9IGNyeXB0b1N1aXRlLmNyZWF0ZUtleUZyb21SYXcocHJpdmF0ZUtleSk7XG4gIGF3YWl0IHVzZXIuc2V0RW5yb2xsbWVudChpbXBvcnRlZEtleSwgY2VydGlmaWNhdGUsIG1zcElkKTtcbiAgcmV0dXJuIHVzZXI7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdldHMgYW4gaWRlbnRpdHkgZnJvbSBhIGNlcnRpZmljYXRlIGRpcmVjdG9yeVxuICogQHN1bW1hcnkgTG9hZHMgYSBjZXJ0aWZpY2F0ZSBmcm9tIGEgZGlyZWN0b3J5IGFuZCBjcmVhdGVzIGFuIElkZW50aXR5IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1zcElkIC0gVGhlIE1lbWJlcnNoaXAgU2VydmljZSBQcm92aWRlciBJRFxuICogQHBhcmFtIHtzdHJpbmd9IGNlcnREaXJlY3RvcnlQYXRoIC0gUGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGNlcnRpZmljYXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlPElkZW50aXR5Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGlkZW50aXR5XG4gKiBAZnVuY3Rpb24gZ2V0SWRlbnRpdHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5jbGllbnRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldElkZW50aXR5KFxuICBtc3BJZDogc3RyaW5nLFxuICBjZXJ0RGlyZWN0b3J5UGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPElkZW50aXR5PiB7XG4gIGNvbnN0IGlkZW50aXR5RmlsZVJlYWRlciA9IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB7IHByb21pc2VzIH0gPSBhd2FpdCBub3JtYWxpemVJbXBvcnQoaW1wb3J0KFwiZnNcIikpO1xuICAgIGNvbnN0IGNlcnRQYXRoID0gYXdhaXQgZ2V0Rmlyc3REaXJGaWxlTmFtZShwYXRoKTtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHByb21pc2VzLnJlYWRGaWxlKGNlcnRQYXRoKTtcbiAgICByZXR1cm4gY3JlZGVudGlhbHM7XG4gIH07XG5cbiAgY29uc3QgY3JlZGVudGlhbHM6IFVpbnQ4QXJyYXkgPSAoYXdhaXQgY29udGVudE9mTG9hZEZpbGUoXG4gICAgY2VydERpcmVjdG9yeVBhdGgsXG4gICAgaWRlbnRpdHlGaWxlUmVhZGVyXG4gICkpIGFzIFVpbnQ4QXJyYXk7XG5cbiAgcmV0dXJuIHsgbXNwSWQsIGNyZWRlbnRpYWxzIH07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgZmlyc3QgZmlsZSBpbiBhIGRpcmVjdG9yeVxuICogQHN1bW1hcnkgUmVhZHMgYSBkaXJlY3RvcnkgYW5kIHJldHVybnMgdGhlIHBhdGggdG8gdGhlIGZpcnN0IGZpbGUgZm91bmRcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJQYXRoIC0gUGF0aCB0byB0aGUgZGlyZWN0b3J5XG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBmdWxsIHBhdGggb2YgdGhlIGZpcnN0IGZpbGVcbiAqIEBmdW5jdGlvbiBnZXRGaXJzdERpckZpbGVOYW1lXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1mYWJyaWMuY2xpZW50XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRGaXJzdERpckZpbGVOYW1lKGRpclBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgcHJvbWlzZXMgfSA9IGF3YWl0IG5vcm1hbGl6ZUltcG9ydChpbXBvcnQoXCJmc1wiKSk7XG4gIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgbm9ybWFsaXplSW1wb3J0KGltcG9ydChcInBhdGhcIikpO1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IHByb21pc2VzLnJlYWRkaXIoZGlyUGF0aCk7XG4gIHJldHVybiBqb2luKGRpclBhdGgsIGZpbGVzWzBdKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY29udGVudCBvZiB0aGUgZmlyc3QgZmlsZSBpbiBhIGRpcmVjdG9yeVxuICogQHN1bW1hcnkgUmVhZHMgYSBkaXJlY3RvcnksIGZpbmRzIHRoZSBmaXJzdCBmaWxlLCBhbmQgcmV0dXJucyBpdHMgY29udGVudCBhcyBhIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IGRpclBhdGggLSBQYXRoIHRvIHRoZSBkaXJlY3RvcnlcbiAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIGZpcnN0IGZpbGVcbiAqIEBmdW5jdGlvbiBnZXRGaXJzdERpckZpbGVOYW1lQ29udGVudFxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLmNsaWVudFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Rmlyc3REaXJGaWxlTmFtZUNvbnRlbnQoXG4gIGRpclBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBwcm9taXNlcyB9ID0gYXdhaXQgbm9ybWFsaXplSW1wb3J0KGltcG9ydChcImZzXCIpKTtcbiAgY29uc3QgeyBqb2luIH0gPSBhd2FpdCBub3JtYWxpemVJbXBvcnQoaW1wb3J0KFwicGF0aFwiKSk7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgcHJvbWlzZXMucmVhZGRpcihkaXJQYXRoKTtcbiAgcmV0dXJuIChhd2FpdCBwcm9taXNlcy5yZWFkRmlsZShqb2luKGRpclBhdGgsIGZpbGVzWzBdKSkpLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdldHMgYSBzaWduZXIgZnJvbSBhIGtleSBkaXJlY3RvcnlcbiAqIEBzdW1tYXJ5IExvYWRzIGEgcHJpdmF0ZSBrZXkgZnJvbSBhIGRpcmVjdG9yeSBhbmQgY3JlYXRlcyBhIFNpZ25lciBmb3IgRmFicmljIHRyYW5zYWN0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleURpcmVjdG9yeVBhdGggLSBQYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcHJpdmF0ZSBrZXlcbiAqIEByZXR1cm4ge1Byb21pc2U8U2lnbmVyPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHNpZ25lclxuICogQGZ1bmN0aW9uIGdldFNpZ25lclxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLmNsaWVudFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbmVyKGtleURpcmVjdG9yeVBhdGg6IHN0cmluZyk6IFByb21pc2U8U2lnbmVyPiB7XG4gIGNvbnN0IHNpZ25lckZpbGVSZWFkZXIgPSBhc3luYyAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgeyBwcm9taXNlcyB9ID0gYXdhaXQgbm9ybWFsaXplSW1wb3J0KGltcG9ydChcImZzXCIpKTtcbiAgICBjb25zdCBrZXlQYXRoID0gYXdhaXQgZ2V0Rmlyc3REaXJGaWxlTmFtZShwYXRoKTtcbiAgICByZXR1cm4gYXdhaXQgcHJvbWlzZXMucmVhZEZpbGUoa2V5UGF0aCk7XG4gIH07XG5cbiAgY29uc3QgcHJpdmF0ZUtleVBlbSA9IChhd2FpdCBjb250ZW50T2ZMb2FkRmlsZShcbiAgICBrZXlEaXJlY3RvcnlQYXRoLFxuICAgIHNpZ25lckZpbGVSZWFkZXJcbiAgKSkgYXMgQnVmZmVyO1xuICAvLyBOb2RlIGJhc2VkIGltcGxlbWVudGF0aW9uXG4gIC8vIHByaXZhdGVLZXkgPSBjcmVhdGVQcml2YXRlS2V5KHByaXZhdGVLZXlQZW0pO1xuICAvLyAtLVxuXG4gIC8vIHdlYiBiYXNlZCBpbXBsZW1lbnRhdGlvblxuICBjb25zdCBwcml2YXRlS2V5ID0gYXdhaXQgZXh0cmFjdFByaXZhdGVLZXkocHJpdmF0ZUtleVBlbSk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByaXZhdGVLZXkpO1xuICBjb25zdCBrID0gKHByaXZhdGVLZXkgYXMgYW55KVtrZXlzWzBdXTtcbiAgLy8gLS1cblxuICByZXR1cm4gc2lnbmVycy5uZXdQcml2YXRlS2V5U2lnbmVyKGsgYXMgYW55KTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRXh0cmFjdHMgYSBwcml2YXRlIGtleSBmcm9tIGEgUEVNIGJ1ZmZlclxuICogQHN1bW1hcnkgQ29udmVydHMgYSBQRU0tZW5jb2RlZCBwcml2YXRlIGtleSB0byBhIENyeXB0b0tleSBvYmplY3RcbiAqIEBwYXJhbSB7QnVmZmVyfSBwZW0gLSBUaGUgUEVNLWVuY29kZWQgcHJpdmF0ZSBrZXlcbiAqIEByZXR1cm4ge1Byb21pc2U8Q3J5cHRvS2V5Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIENyeXB0b0tleVxuICogQGZ1bmN0aW9uIGV4dHJhY3RQcml2YXRlS2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1mYWJyaWMuY2xpZW50XG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBFeHRyYWN0UHJpdmF0ZUtleVxuICogICBwYXJ0aWNpcGFudCBTdWJ0bGVDcnlwdG9cbiAqXG4gKiAgIENhbGxlci0+PkV4dHJhY3RQcml2YXRlS2V5OiBleHRyYWN0UHJpdmF0ZUtleShwZW0pXG4gKiAgIEV4dHJhY3RQcml2YXRlS2V5LT4+RXh0cmFjdFByaXZhdGVLZXk6IEdldCBTdWJ0bGVDcnlwdG8gaW1wbGVtZW50YXRpb25cbiAqICAgRXh0cmFjdFByaXZhdGVLZXktPj5FeHRyYWN0UHJpdmF0ZUtleTogUGFyc2UgUEVNIGZvcm1hdFxuICogICBFeHRyYWN0UHJpdmF0ZUtleS0+PkV4dHJhY3RQcml2YXRlS2V5OiBDb252ZXJ0IHRvIGJpbmFyeSBERVJcbiAqICAgRXh0cmFjdFByaXZhdGVLZXktPj5TdWJ0bGVDcnlwdG86IGltcG9ydEtleShwa2NzOCwgYmluYXJ5RGVyLCBvcHRpb25zKVxuICogICBTdWJ0bGVDcnlwdG8tLT4+RXh0cmFjdFByaXZhdGVLZXk6IENyeXB0b0tleVxuICogICBFeHRyYWN0UHJpdmF0ZUtleS0tPj5DYWxsZXI6IENyeXB0b0tleVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFByaXZhdGVLZXkocGVtOiBCdWZmZXIpIHtcbiAgY29uc3QgbGliTmFtZSA9IFwiY3J5cHRvXCI7XG4gIGxldCBzdWJ0bGU7XG4gIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgIHN1YnRsZSA9IChnbG9iYWxUaGlzIGFzIGFueSkuY3J5cHRvLnN1YnRsZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBsaWIgPSAoYXdhaXQgbm9ybWFsaXplSW1wb3J0KGltcG9ydChsaWJOYW1lKSkpIGFzIGFueTtcbiAgICBzdWJ0bGUgPSBsaWIuc3VidGxlIHx8IGxpYi53ZWJjcnlwdG8uc3VidGxlO1xuICB9XG5cbiAgaWYgKCFzdWJ0bGUpIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBsb2FkIFN1YnRsZUNyeXB0byBtb2R1bGVcIik7XG5cbiAgZnVuY3Rpb24gc3RyMmFiKHN0cjogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVmID0gbmV3IEFycmF5QnVmZmVyKHN0ci5sZW5ndGgpO1xuICAgIGNvbnN0IGJ1ZlZpZXcgPSBuZXcgVWludDhBcnJheShidWYpO1xuICAgIGZvciAobGV0IGkgPSAwLCBzdHJMZW4gPSBzdHIubGVuZ3RoOyBpIDwgc3RyTGVuOyBpKyspIHtcbiAgICAgIGJ1ZlZpZXdbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIGNvbnN0IHN0ciA9IHBlbVxuICAgIC50b1N0cmluZyhcInV0ZjhcIilcbiAgICAucmVwbGFjZShcIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVwiLCBcIlwiKVxuICAgIC5yZXBsYWNlQWxsKFwiXFxuXCIsIFwiXCIpXG4gICAgLnJlcGxhY2UoXCItLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tXCIsIFwiXCIpO1xuICBjb25zdCBkZWNvZGVkID0gQnVmZmVyLmZyb20oc3RyLCBcImJhc2U2NFwiKS50b1N0cmluZyhcImJpbmFyeVwiKTtcbiAgY29uc3QgYmluYXJ5RGVyID0gc3RyMmFiKGRlY29kZWQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qga2V5ID0gYXdhaXQgc3VidGxlLmltcG9ydEtleShcbiAgICAgIFwicGtjczhcIixcbiAgICAgIGJpbmFyeURlcixcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJFQ0RTQVwiLFxuICAgICAgICBuYW1lZEN1cnZlOiBcIlAtMjU2XCIsXG4gICAgICB9LFxuICAgICAgdHJ1ZSxcbiAgICAgIFtcInNpZ25cIl1cbiAgICApO1xuXG4gICAgcmV0dXJuIGtleTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { User } from "fabric-common";
|
|
2
|
+
import { Identity, Signer } from "@hyperledger/fabric-gateway";
|
|
3
|
+
/**
|
|
4
|
+
* @description Loads content from a file or returns the content if already loaded
|
|
5
|
+
* @summary Determines if the input is already content or a path to a file, and loads the file if needed
|
|
6
|
+
* @param {string | Uint8Array} contentOrPath - The content or path to load
|
|
7
|
+
* @param {Function} fileReader - Function to read the file if contentOrPath is a path
|
|
8
|
+
* @return {Promise<string | Uint8Array | Buffer>} The content
|
|
9
|
+
* @function contentOfLoadFile
|
|
10
|
+
* @memberOf module:for-fabric.client
|
|
11
|
+
*/
|
|
12
|
+
export declare function contentOfLoadFile(contentOrPath: string | Uint8Array, fileReader: (path: string) => Promise<string | Uint8Array | Buffer>): Promise<string | Uint8Array<ArrayBufferLike> | Buffer<ArrayBufferLike>>;
|
|
13
|
+
/**
|
|
14
|
+
* @description Reads a file from the file system
|
|
15
|
+
* @summary Loads a file using the Node.js file system module
|
|
16
|
+
* @param {string | Buffer} contentOrPath - The content or path to load
|
|
17
|
+
* @return {Promise<Buffer>} The file content as a Buffer
|
|
18
|
+
* @function readFile
|
|
19
|
+
* @memberOf module:for-fabric.client
|
|
20
|
+
*/
|
|
21
|
+
export declare function readFile(contentOrPath: string | Buffer): Promise<Buffer<ArrayBufferLike>>;
|
|
22
|
+
/**
|
|
23
|
+
* @description Creates a Certificate Authority user
|
|
24
|
+
* @summary Initializes a user with the given credentials for interacting with a Fabric CA
|
|
25
|
+
* @param {string} userName - The user name
|
|
26
|
+
* @param {string} privateKey - The private key as a string
|
|
27
|
+
* @param {string} certificate - The certificate as a string
|
|
28
|
+
* @param {string} mspId - The Membership Service Provider ID
|
|
29
|
+
* @return {Promise<User>} Promise resolving to the created user
|
|
30
|
+
* @function getCAUser
|
|
31
|
+
* @memberOf module:for-fabric.client
|
|
32
|
+
*/
|
|
33
|
+
export declare function getCAUser(userName: string, privateKey: string, certificate: string, mspId: string): Promise<User>;
|
|
34
|
+
/**
|
|
35
|
+
* @description Gets an identity from a certificate directory
|
|
36
|
+
* @summary Loads a certificate from a directory and creates an Identity object
|
|
37
|
+
* @param {string} mspId - The Membership Service Provider ID
|
|
38
|
+
* @param {string} certDirectoryPath - Path to the directory containing the certificate
|
|
39
|
+
* @return {Promise<Identity>} Promise resolving to the identity
|
|
40
|
+
* @function getIdentity
|
|
41
|
+
* @memberOf module:for-fabric.client
|
|
42
|
+
*/
|
|
43
|
+
export declare function getIdentity(mspId: string, certDirectoryPath: string): Promise<Identity>;
|
|
44
|
+
/**
|
|
45
|
+
* @description Gets the full path of the first file in a directory
|
|
46
|
+
* @summary Reads a directory and returns the path to the first file found
|
|
47
|
+
* @param {string} dirPath - Path to the directory
|
|
48
|
+
* @return {Promise<string>} Promise resolving to the full path of the first file
|
|
49
|
+
* @function getFirstDirFileName
|
|
50
|
+
* @memberOf module:for-fabric.client
|
|
51
|
+
*/
|
|
52
|
+
export declare function getFirstDirFileName(dirPath: string): Promise<string>;
|
|
53
|
+
/**
|
|
54
|
+
* @description Gets the content of the first file in a directory
|
|
55
|
+
* @summary Reads a directory, finds the first file, and returns its content as a string
|
|
56
|
+
* @param {string} dirPath - Path to the directory
|
|
57
|
+
* @return {Promise<string>} Promise resolving to the content of the first file
|
|
58
|
+
* @function getFirstDirFileNameContent
|
|
59
|
+
* @memberOf module:for-fabric.client
|
|
60
|
+
*/
|
|
61
|
+
export declare function getFirstDirFileNameContent(dirPath: string): Promise<string>;
|
|
62
|
+
/**
|
|
63
|
+
* @description Gets a signer from a key directory
|
|
64
|
+
* @summary Loads a private key from a directory and creates a Signer for Fabric transactions
|
|
65
|
+
* @param {string} keyDirectoryPath - Path to the directory containing the private key
|
|
66
|
+
* @return {Promise<Signer>} Promise resolving to the signer
|
|
67
|
+
* @function getSigner
|
|
68
|
+
* @memberOf module:for-fabric.client
|
|
69
|
+
*/
|
|
70
|
+
export declare function getSigner(keyDirectoryPath: string): Promise<Signer>;
|
|
71
|
+
/**
|
|
72
|
+
* @description Extracts a private key from a PEM buffer
|
|
73
|
+
* @summary Converts a PEM-encoded private key to a CryptoKey object
|
|
74
|
+
* @param {Buffer} pem - The PEM-encoded private key
|
|
75
|
+
* @return {Promise<CryptoKey>} Promise resolving to the CryptoKey
|
|
76
|
+
* @function extractPrivateKey
|
|
77
|
+
* @memberOf module:for-fabric.client
|
|
78
|
+
* @mermaid
|
|
79
|
+
* sequenceDiagram
|
|
80
|
+
* participant Caller
|
|
81
|
+
* participant ExtractPrivateKey
|
|
82
|
+
* participant SubtleCrypto
|
|
83
|
+
*
|
|
84
|
+
* Caller->>ExtractPrivateKey: extractPrivateKey(pem)
|
|
85
|
+
* ExtractPrivateKey->>ExtractPrivateKey: Get SubtleCrypto implementation
|
|
86
|
+
* ExtractPrivateKey->>ExtractPrivateKey: Parse PEM format
|
|
87
|
+
* ExtractPrivateKey->>ExtractPrivateKey: Convert to binary DER
|
|
88
|
+
* ExtractPrivateKey->>SubtleCrypto: importKey(pkcs8, binaryDer, options)
|
|
89
|
+
* SubtleCrypto-->>ExtractPrivateKey: CryptoKey
|
|
90
|
+
* ExtractPrivateKey-->>Caller: CryptoKey
|
|
91
|
+
*/
|
|
92
|
+
export declare function extractPrivateKey(pem: Buffer): Promise<any>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @description Hyperledger Fabric Client Module for Decaf-ts
|
|
4
|
+
* @summary This module provides client-side utilities and adapters to interact with Hyperledger Fabric networks using Decaf-ts. It exposes the Fabric client adapter, event dispatch utilities, and filesystem helpers for loading identities and keys.
|
|
5
|
+
* @module client
|
|
6
|
+
* @memberOf module:for-fabric
|
|
7
|
+
* @example
|
|
8
|
+
* // Create a client adapter and submit a transaction
|
|
9
|
+
* // See also: {@link module:for-fabric~FabricClientAdapter} and {@link module:for-fabric~FabricClientDispatch}
|
|
10
|
+
*/
|
|
11
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
+
}
|
|
17
|
+
Object.defineProperty(o, k2, desc);
|
|
18
|
+
}) : (function(o, m, k, k2) {
|
|
19
|
+
if (k2 === undefined) k2 = k;
|
|
20
|
+
o[k2] = m[k];
|
|
21
|
+
}));
|
|
22
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
23
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
__exportStar(require("./fabric-fs.cjs"), exports);
|
|
27
|
+
__exportStar(require("./FabricClientAdapter.cjs"), exports);
|
|
28
|
+
__exportStar(require("./FabricClientDispatch.cjs"), exports);
|
|
29
|
+
__exportStar(require("./../shared/types.cjs"), exports);
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7R0FRRzs7Ozs7Ozs7Ozs7Ozs7OztBQUVILGtEQUE0QjtBQUM1Qiw0REFBc0M7QUFDdEMsNkRBQXVDO0FBQ3ZDLHdEQUFnQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIEh5cGVybGVkZ2VyIEZhYnJpYyBDbGllbnQgTW9kdWxlIGZvciBEZWNhZi10c1xuICogQHN1bW1hcnkgVGhpcyBtb2R1bGUgcHJvdmlkZXMgY2xpZW50LXNpZGUgdXRpbGl0aWVzIGFuZCBhZGFwdGVycyB0byBpbnRlcmFjdCB3aXRoIEh5cGVybGVkZ2VyIEZhYnJpYyBuZXR3b3JrcyB1c2luZyBEZWNhZi10cy4gSXQgZXhwb3NlcyB0aGUgRmFicmljIGNsaWVudCBhZGFwdGVyLCBldmVudCBkaXNwYXRjaCB1dGlsaXRpZXMsIGFuZCBmaWxlc3lzdGVtIGhlbHBlcnMgZm9yIGxvYWRpbmcgaWRlbnRpdGllcyBhbmQga2V5cy5cbiAqIEBtb2R1bGUgY2xpZW50XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1mYWJyaWNcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgYSBjbGllbnQgYWRhcHRlciBhbmQgc3VibWl0IGEgdHJhbnNhY3Rpb25cbiAqIC8vIFNlZSBhbHNvOiB7QGxpbmsgbW9kdWxlOmZvci1mYWJyaWN+RmFicmljQ2xpZW50QWRhcHRlcn0gYW5kIHtAbGluayBtb2R1bGU6Zm9yLWZhYnJpY35GYWJyaWNDbGllbnREaXNwYXRjaH1cbiAqL1xuXG5leHBvcnQgKiBmcm9tIFwiLi9mYWJyaWMtZnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0ZhYnJpY0NsaWVudEFkYXB0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL0ZhYnJpY0NsaWVudERpc3BhdGNoXCI7XG5leHBvcnQgKiBmcm9tIFwiLi4vc2hhcmVkL3R5cGVzXCI7XG4iXX0=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Hyperledger Fabric Client Module for Decaf-ts
|
|
3
|
+
* @summary This module provides client-side utilities and adapters to interact with Hyperledger Fabric networks using Decaf-ts. It exposes the Fabric client adapter, event dispatch utilities, and filesystem helpers for loading identities and keys.
|
|
4
|
+
* @module client
|
|
5
|
+
* @memberOf module:for-fabric
|
|
6
|
+
* @example
|
|
7
|
+
* // Create a client adapter and submit a transaction
|
|
8
|
+
* // See also: {@link module:for-fabric~FabricClientAdapter} and {@link module:for-fabric~FabricClientDispatch}
|
|
9
|
+
*/
|
|
10
|
+
export * from "./fabric-fs";
|
|
11
|
+
export * from "./FabricClientAdapter";
|
|
12
|
+
export * from "./FabricClientDispatch";
|
|
13
|
+
export * from "../shared/types";
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FabricLogger = void 0;
|
|
4
|
+
const logging_1 = require("@decaf-ts/logging");
|
|
5
|
+
/**
|
|
6
|
+
* @description Logger implementation tailored for Hyperledger Fabric clients.
|
|
7
|
+
* @summary Adapts the decaf-ts MiniLogger to route messages through a per-context Fabric logger, honoring configured log levels and formatting.
|
|
8
|
+
* @param {string} context - The logging context name used to scope the logger instance.
|
|
9
|
+
* @param {Partial<LoggingConfig> | undefined} conf - Optional logging configuration to override defaults for this context.
|
|
10
|
+
* @class FabricLogger
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // In a Fabric client/service
|
|
14
|
+
* const logger = new FabricLogger('MyFabricService', { level: 'info' });
|
|
15
|
+
* logger.info('Processing transaction');
|
|
16
|
+
* logger.debug('Transaction details', { txId: '123' });
|
|
17
|
+
* logger.error('Something went wrong');
|
|
18
|
+
* ```
|
|
19
|
+
* @mermaid
|
|
20
|
+
* sequenceDiagram
|
|
21
|
+
* autonumber
|
|
22
|
+
* participant C as Caller
|
|
23
|
+
* participant FL as FabricLogger
|
|
24
|
+
* participant ML as MiniLogger (delegate)
|
|
25
|
+
* C->>FL: info('Processing transaction')
|
|
26
|
+
* FL->>FL: createLog(level,msg,stack)
|
|
27
|
+
* FL->>ML: info(log)
|
|
28
|
+
* C->>FL: error(new Error('x'))
|
|
29
|
+
* FL->>FL: createLog(level,msg,stack)
|
|
30
|
+
* FL->>ML: error(log)
|
|
31
|
+
*/
|
|
32
|
+
class FabricLogger extends logging_1.MiniLogger {
|
|
33
|
+
constructor(context, conf) {
|
|
34
|
+
super(context, conf);
|
|
35
|
+
this.logger = new logging_1.MiniLogger(context, conf);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* @description Logs a message at the specified level.
|
|
39
|
+
* @summary Overrides the base MiniLogger.log to forward to the internal Fabric-aware logger, enforcing configured thresholds.
|
|
40
|
+
* @param {LogLevel} level - The log level to use for this message.
|
|
41
|
+
* @param {StringLike | Error} msg - The message or error to log.
|
|
42
|
+
* @param {string} [stack] - Optional stack trace string for errors.
|
|
43
|
+
* @return {void}
|
|
44
|
+
* @mermaid
|
|
45
|
+
* sequenceDiagram
|
|
46
|
+
* autonumber
|
|
47
|
+
* participant C as Caller
|
|
48
|
+
* participant FL as FabricLogger
|
|
49
|
+
* participant ML as MiniLogger (delegate)
|
|
50
|
+
* C->>FL: log(level, msg, stack?)
|
|
51
|
+
* FL->>FL: check configured level
|
|
52
|
+
* alt below threshold
|
|
53
|
+
* FL-->>C: return
|
|
54
|
+
* else above threshold
|
|
55
|
+
* FL->>FL: createLog(level, msg, stack)
|
|
56
|
+
* FL->>ML: method.call(logger, log)
|
|
57
|
+
* ML-->>FL: void
|
|
58
|
+
* end
|
|
59
|
+
*/
|
|
60
|
+
log(level, msg, stack) {
|
|
61
|
+
if (logging_1.NumericLogLevels[this.config("level")] <
|
|
62
|
+
logging_1.NumericLogLevels[level])
|
|
63
|
+
return;
|
|
64
|
+
let method;
|
|
65
|
+
switch (level) {
|
|
66
|
+
case logging_1.LogLevel.info:
|
|
67
|
+
method = this.logger.info;
|
|
68
|
+
break;
|
|
69
|
+
case logging_1.LogLevel.verbose:
|
|
70
|
+
method = this.logger.verbose;
|
|
71
|
+
break;
|
|
72
|
+
case logging_1.LogLevel.debug:
|
|
73
|
+
method = this.logger.debug;
|
|
74
|
+
break;
|
|
75
|
+
case logging_1.LogLevel.error:
|
|
76
|
+
method = this.logger.error;
|
|
77
|
+
break;
|
|
78
|
+
case logging_1.LogLevel.silly:
|
|
79
|
+
method = this.logger.silly;
|
|
80
|
+
break;
|
|
81
|
+
default:
|
|
82
|
+
throw new Error("Invalid log level");
|
|
83
|
+
}
|
|
84
|
+
method.call(this.logger, this.createLog(level, msg, stack));
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.FabricLogger = FabricLogger;
|
|
88
|
+
/**
|
|
89
|
+
* @description Factory function for creating FabricLogger instances.
|
|
90
|
+
* @summary Produces a new FabricLogger bound to the provided context name and configuration.
|
|
91
|
+
* @param {string} object - The logging context name.
|
|
92
|
+
* @param {Partial<LoggingConfig> | undefined} config - Optional logging configuration.
|
|
93
|
+
* @return {FabricLogger} A new FabricLogger instance.
|
|
94
|
+
* @function factory
|
|
95
|
+
* @memberOf module:for-fabric.client
|
|
96
|
+
*/
|
|
97
|
+
const factory = (object, config) => {
|
|
98
|
+
return new FabricLogger(object, config || {});
|
|
99
|
+
};
|
|
100
|
+
// Set the factory as the default logger factory
|
|
101
|
+
logging_1.Logging.setFactory(factory);
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvbG9nZ2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FRMkI7QUFHM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsb0JBQVU7SUFNMUMsWUFBWSxPQUFlLEVBQUUsSUFBd0M7UUFDbkUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksb0JBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ2dCLEdBQUcsQ0FDcEIsS0FBZSxFQUNmLEdBQXVCLEVBQ3ZCLEtBQWE7UUFFYixJQUNFLDBCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFhLENBQUM7WUFDbEQsMEJBQWdCLENBQUMsS0FBSyxDQUFDO1lBRXZCLE9BQU87UUFFVCxJQUFJLE1BQU0sQ0FBQztRQUNYLFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDZCxLQUFLLGtCQUFRLENBQUMsSUFBSTtnQkFDaEIsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO2dCQUMxQixNQUFNO1lBQ1IsS0FBSyxrQkFBUSxDQUFDLE9BQU87Z0JBQ25CLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztnQkFDN0IsTUFBTTtZQUNSLEtBQUssa0JBQVEsQ0FBQyxLQUFLO2dCQUNqQixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzNCLE1BQU07WUFDUixLQUFLLGtCQUFRLENBQUMsS0FBSztnQkFDakIsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUMzQixNQUFNO1lBQ1IsS0FBSyxrQkFBUSxDQUFDLEtBQUs7Z0JBQ2pCLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDM0IsTUFBTTtZQUNSO2dCQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7Q0FDRjtBQW5FRCxvQ0FtRUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxHQUFrQixDQUM3QixNQUFjLEVBQ2QsTUFBMEMsRUFDMUMsRUFBRTtJQUNGLE9BQU8sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUM7QUFFRixnREFBZ0Q7QUFDaEQsaUJBQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBMb2dnZXJGYWN0b3J5LFxuICBMb2dnaW5nLFxuICBMb2dnZXIsXG4gIExvZ0xldmVsLFxuICBNaW5pTG9nZ2VyLFxuICBOdW1lcmljTG9nTGV2ZWxzLFxuICBTdHJpbmdMaWtlLFxufSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcbmltcG9ydCB7IExvZ2dpbmdDb25maWcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTG9nZ2VyIGltcGxlbWVudGF0aW9uIHRhaWxvcmVkIGZvciBIeXBlcmxlZGdlciBGYWJyaWMgY2xpZW50cy5cbiAqIEBzdW1tYXJ5IEFkYXB0cyB0aGUgZGVjYWYtdHMgTWluaUxvZ2dlciB0byByb3V0ZSBtZXNzYWdlcyB0aHJvdWdoIGEgcGVyLWNvbnRleHQgRmFicmljIGxvZ2dlciwgaG9ub3JpbmcgY29uZmlndXJlZCBsb2cgbGV2ZWxzIGFuZCBmb3JtYXR0aW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQgLSBUaGUgbG9nZ2luZyBjb250ZXh0IG5hbWUgdXNlZCB0byBzY29wZSB0aGUgbG9nZ2VyIGluc3RhbmNlLlxuICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+IHwgdW5kZWZpbmVkfSBjb25mIC0gT3B0aW9uYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uIHRvIG92ZXJyaWRlIGRlZmF1bHRzIGZvciB0aGlzIGNvbnRleHQuXG4gKiBAY2xhc3MgRmFicmljTG9nZ2VyXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gSW4gYSBGYWJyaWMgY2xpZW50L3NlcnZpY2VcbiAqIGNvbnN0IGxvZ2dlciA9IG5ldyBGYWJyaWNMb2dnZXIoJ015RmFicmljU2VydmljZScsIHsgbGV2ZWw6ICdpbmZvJyB9KTtcbiAqIGxvZ2dlci5pbmZvKCdQcm9jZXNzaW5nIHRyYW5zYWN0aW9uJyk7XG4gKiBsb2dnZXIuZGVidWcoJ1RyYW5zYWN0aW9uIGRldGFpbHMnLCB7IHR4SWQ6ICcxMjMnIH0pO1xuICogbG9nZ2VyLmVycm9yKCdTb21ldGhpbmcgd2VudCB3cm9uZycpO1xuICogYGBgXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIGF1dG9udW1iZXJcbiAqICAgcGFydGljaXBhbnQgQyBhcyBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgRkwgYXMgRmFicmljTG9nZ2VyXG4gKiAgIHBhcnRpY2lwYW50IE1MIGFzIE1pbmlMb2dnZXIgKGRlbGVnYXRlKVxuICogICBDLT4+Rkw6IGluZm8oJ1Byb2Nlc3NpbmcgdHJhbnNhY3Rpb24nKVxuICogICBGTC0+PkZMOiBjcmVhdGVMb2cobGV2ZWwsbXNnLHN0YWNrKVxuICogICBGTC0+Pk1MOiBpbmZvKGxvZylcbiAqICAgQy0+PkZMOiBlcnJvcihuZXcgRXJyb3IoJ3gnKSlcbiAqICAgRkwtPj5GTDogY3JlYXRlTG9nKGxldmVsLG1zZyxzdGFjaylcbiAqICAgRkwtPj5NTDogZXJyb3IobG9nKVxuICovXG5leHBvcnQgY2xhc3MgRmFicmljTG9nZ2VyIGV4dGVuZHMgTWluaUxvZ2dlciB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHVuZGVybHlpbmcgRmFicmljIGxvZ2dlciBpbnN0YW5jZVxuICAgKi9cbiAgcHJvdGVjdGVkIGxvZ2dlcjogTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQ6IHN0cmluZywgY29uZjogUGFydGlhbDxMb2dnaW5nQ29uZmlnPiB8IHVuZGVmaW5lZCkge1xuICAgIHN1cGVyKGNvbnRleHQsIGNvbmYpO1xuICAgIHRoaXMubG9nZ2VyID0gbmV3IE1pbmlMb2dnZXIoY29udGV4dCwgY29uZik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBzcGVjaWZpZWQgbGV2ZWwuXG4gICAqIEBzdW1tYXJ5IE92ZXJyaWRlcyB0aGUgYmFzZSBNaW5pTG9nZ2VyLmxvZyB0byBmb3J3YXJkIHRvIHRoZSBpbnRlcm5hbCBGYWJyaWMtYXdhcmUgbG9nZ2VyLCBlbmZvcmNpbmcgY29uZmlndXJlZCB0aHJlc2hvbGRzLlxuICAgKiBAcGFyYW0ge0xvZ0xldmVsfSBsZXZlbCAtIFRoZSBsb2cgbGV2ZWwgdG8gdXNlIGZvciB0aGlzIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7U3RyaW5nTGlrZSB8IEVycm9yfSBtc2cgLSBUaGUgbWVzc2FnZSBvciBlcnJvciB0byBsb2cuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RhY2tdIC0gT3B0aW9uYWwgc3RhY2sgdHJhY2Ugc3RyaW5nIGZvciBlcnJvcnMuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIGF1dG9udW1iZXJcbiAgICogICBwYXJ0aWNpcGFudCBDIGFzIENhbGxlclxuICAgKiAgIHBhcnRpY2lwYW50IEZMIGFzIEZhYnJpY0xvZ2dlclxuICAgKiAgIHBhcnRpY2lwYW50IE1MIGFzIE1pbmlMb2dnZXIgKGRlbGVnYXRlKVxuICAgKiAgIEMtPj5GTDogbG9nKGxldmVsLCBtc2csIHN0YWNrPylcbiAgICogICBGTC0+PkZMOiBjaGVjayBjb25maWd1cmVkIGxldmVsXG4gICAqICAgYWx0IGJlbG93IHRocmVzaG9sZFxuICAgKiAgICAgRkwtLT4+QzogcmV0dXJuXG4gICAqICAgZWxzZSBhYm92ZSB0aHJlc2hvbGRcbiAgICogICAgIEZMLT4+Rkw6IGNyZWF0ZUxvZyhsZXZlbCwgbXNnLCBzdGFjaylcbiAgICogICAgIEZMLT4+TUw6IG1ldGhvZC5jYWxsKGxvZ2dlciwgbG9nKVxuICAgKiAgICAgTUwtLT4+Rkw6IHZvaWRcbiAgICogICBlbmRcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBsb2coXG4gICAgbGV2ZWw6IExvZ0xldmVsLFxuICAgIG1zZzogU3RyaW5nTGlrZSB8IEVycm9yLFxuICAgIHN0YWNrPzogRXJyb3JcbiAgKSB7XG4gICAgaWYgKFxuICAgICAgTnVtZXJpY0xvZ0xldmVsc1t0aGlzLmNvbmZpZyhcImxldmVsXCIpIGFzIExvZ0xldmVsXSA8XG4gICAgICBOdW1lcmljTG9nTGV2ZWxzW2xldmVsXVxuICAgIClcbiAgICAgIHJldHVybjtcblxuICAgIGxldCBtZXRob2Q7XG4gICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgY2FzZSBMb2dMZXZlbC5pbmZvOlxuICAgICAgICBtZXRob2QgPSB0aGlzLmxvZ2dlci5pbmZvO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTG9nTGV2ZWwudmVyYm9zZTpcbiAgICAgICAgbWV0aG9kID0gdGhpcy5sb2dnZXIudmVyYm9zZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvZ0xldmVsLmRlYnVnOlxuICAgICAgICBtZXRob2QgPSB0aGlzLmxvZ2dlci5kZWJ1ZztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvZ0xldmVsLmVycm9yOlxuICAgICAgICBtZXRob2QgPSB0aGlzLmxvZ2dlci5lcnJvcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExvZ0xldmVsLnNpbGx5OlxuICAgICAgICBtZXRob2QgPSB0aGlzLmxvZ2dlci5zaWxseTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxvZyBsZXZlbFwiKTtcbiAgICB9XG4gICAgbWV0aG9kLmNhbGwodGhpcy5sb2dnZXIsIHRoaXMuY3JlYXRlTG9nKGxldmVsLCBtc2csIHN0YWNrKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgRmFicmljTG9nZ2VyIGluc3RhbmNlcy5cbiAqIEBzdW1tYXJ5IFByb2R1Y2VzIGEgbmV3IEZhYnJpY0xvZ2dlciBib3VuZCB0byB0aGUgcHJvdmlkZWQgY29udGV4dCBuYW1lIGFuZCBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IG9iamVjdCAtIFRoZSBsb2dnaW5nIGNvbnRleHQgbmFtZS5cbiAqIEBwYXJhbSB7UGFydGlhbDxMb2dnaW5nQ29uZmlnPiB8IHVuZGVmaW5lZH0gY29uZmlnIC0gT3B0aW9uYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uLlxuICogQHJldHVybiB7RmFicmljTG9nZ2VyfSBBIG5ldyBGYWJyaWNMb2dnZXIgaW5zdGFuY2UuXG4gKiBAZnVuY3Rpb24gZmFjdG9yeVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLmNsaWVudFxuICovXG5jb25zdCBmYWN0b3J5OiBMb2dnZXJGYWN0b3J5ID0gKFxuICBvYmplY3Q6IHN0cmluZyxcbiAgY29uZmlnOiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+IHwgdW5kZWZpbmVkXG4pID0+IHtcbiAgcmV0dXJuIG5ldyBGYWJyaWNMb2dnZXIob2JqZWN0LCBjb25maWcgfHwge30pO1xufTtcblxuLy8gU2V0IHRoZSBmYWN0b3J5IGFzIHRoZSBkZWZhdWx0IGxvZ2dlciBmYWN0b3J5XG5Mb2dnaW5nLnNldEZhY3RvcnkoZmFjdG9yeSk7XG4iXX0=
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Logger, LogLevel, MiniLogger, StringLike } from "@decaf-ts/logging";
|
|
2
|
+
import { LoggingConfig } from "@decaf-ts/logging";
|
|
3
|
+
/**
|
|
4
|
+
* @description Logger implementation tailored for Hyperledger Fabric clients.
|
|
5
|
+
* @summary Adapts the decaf-ts MiniLogger to route messages through a per-context Fabric logger, honoring configured log levels and formatting.
|
|
6
|
+
* @param {string} context - The logging context name used to scope the logger instance.
|
|
7
|
+
* @param {Partial<LoggingConfig> | undefined} conf - Optional logging configuration to override defaults for this context.
|
|
8
|
+
* @class FabricLogger
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* // In a Fabric client/service
|
|
12
|
+
* const logger = new FabricLogger('MyFabricService', { level: 'info' });
|
|
13
|
+
* logger.info('Processing transaction');
|
|
14
|
+
* logger.debug('Transaction details', { txId: '123' });
|
|
15
|
+
* logger.error('Something went wrong');
|
|
16
|
+
* ```
|
|
17
|
+
* @mermaid
|
|
18
|
+
* sequenceDiagram
|
|
19
|
+
* autonumber
|
|
20
|
+
* participant C as Caller
|
|
21
|
+
* participant FL as FabricLogger
|
|
22
|
+
* participant ML as MiniLogger (delegate)
|
|
23
|
+
* C->>FL: info('Processing transaction')
|
|
24
|
+
* FL->>FL: createLog(level,msg,stack)
|
|
25
|
+
* FL->>ML: info(log)
|
|
26
|
+
* C->>FL: error(new Error('x'))
|
|
27
|
+
* FL->>FL: createLog(level,msg,stack)
|
|
28
|
+
* FL->>ML: error(log)
|
|
29
|
+
*/
|
|
30
|
+
export declare class FabricLogger extends MiniLogger {
|
|
31
|
+
/**
|
|
32
|
+
* @description The underlying Fabric logger instance
|
|
33
|
+
*/
|
|
34
|
+
protected logger: Logger;
|
|
35
|
+
constructor(context: string, conf: Partial<LoggingConfig> | undefined);
|
|
36
|
+
/**
|
|
37
|
+
* @description Logs a message at the specified level.
|
|
38
|
+
* @summary Overrides the base MiniLogger.log to forward to the internal Fabric-aware logger, enforcing configured thresholds.
|
|
39
|
+
* @param {LogLevel} level - The log level to use for this message.
|
|
40
|
+
* @param {StringLike | Error} msg - The message or error to log.
|
|
41
|
+
* @param {string} [stack] - Optional stack trace string for errors.
|
|
42
|
+
* @return {void}
|
|
43
|
+
* @mermaid
|
|
44
|
+
* sequenceDiagram
|
|
45
|
+
* autonumber
|
|
46
|
+
* participant C as Caller
|
|
47
|
+
* participant FL as FabricLogger
|
|
48
|
+
* participant ML as MiniLogger (delegate)
|
|
49
|
+
* C->>FL: log(level, msg, stack?)
|
|
50
|
+
* FL->>FL: check configured level
|
|
51
|
+
* alt below threshold
|
|
52
|
+
* FL-->>C: return
|
|
53
|
+
* else above threshold
|
|
54
|
+
* FL->>FL: createLog(level, msg, stack)
|
|
55
|
+
* FL->>ML: method.call(logger, log)
|
|
56
|
+
* ML-->>FL: void
|
|
57
|
+
* end
|
|
58
|
+
*/
|
|
59
|
+
protected log(level: LogLevel, msg: StringLike | Error, stack?: Error): void;
|
|
60
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoggedService = void 0;
|
|
4
|
+
const logging_1 = require("@decaf-ts/logging");
|
|
5
|
+
/**
|
|
6
|
+
* @description Base service with logging utilities.
|
|
7
|
+
* @summary Provides a lightweight abstract class that equips inheriting services with per-instance and static logger accessors using the decaf-ts logging facility. Intended to standardize logging across client-side services.
|
|
8
|
+
* @param {void} constructor - No constructor parameters; inheritors should call super().
|
|
9
|
+
* @class LoggedService
|
|
10
|
+
* @example
|
|
11
|
+
* // Extend LoggedService to gain logging helpers
|
|
12
|
+
* class UserService extends LoggedService {
|
|
13
|
+
* async doWork() {
|
|
14
|
+
* const log = this.log.for(this.doWork);
|
|
15
|
+
* log.info("Working...");
|
|
16
|
+
* }
|
|
17
|
+
* }
|
|
18
|
+
*
|
|
19
|
+
* // Static logger for class-level logging
|
|
20
|
+
* const sLog = (UserService as any).log;
|
|
21
|
+
* sLog.debug("Class level message");
|
|
22
|
+
*/
|
|
23
|
+
class LoggedService {
|
|
24
|
+
constructor() { }
|
|
25
|
+
/**
|
|
26
|
+
* @description Retrieves or creates the instance logger
|
|
27
|
+
* @summary Lazily initializes a logger using the class name of the concrete service and returns it for use in instance methods
|
|
28
|
+
* @return {Logger} The instance-specific logger
|
|
29
|
+
*/
|
|
30
|
+
get log() {
|
|
31
|
+
if (!this._log)
|
|
32
|
+
this._log = logging_1.Logging.for(this.constructor.name);
|
|
33
|
+
return this._log;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @description Retrieves or creates the static logger for the class
|
|
37
|
+
* @summary Provides a logger not bound to a specific instance, suitable for class-level diagnostics
|
|
38
|
+
* @return {Logger} The class-level logger
|
|
39
|
+
*/
|
|
40
|
+
static get log() {
|
|
41
|
+
if (!LoggedService._log)
|
|
42
|
+
LoggedService._log = logging_1.Logging.get();
|
|
43
|
+
return LoggedService._log;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.LoggedService = LoggedService;
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nZ2VkU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQvc2VydmljZXMvTG9nZ2VkU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQ0FBb0Q7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBc0IsYUFBYTtJQVdqQyxnQkFBeUIsQ0FBQztJQUUxQjs7OztPQUlHO0lBQ0gsSUFBYyxHQUFHO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLE1BQU0sS0FBSyxHQUFHO1FBQ3RCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSTtZQUFFLGFBQWEsQ0FBQyxJQUFJLEdBQUcsaUJBQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1RCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFDNUIsQ0FBQztDQUNGO0FBaENELHNDQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvZ2dlciwgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCYXNlIHNlcnZpY2Ugd2l0aCBsb2dnaW5nIHV0aWxpdGllcy5cbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgbGlnaHR3ZWlnaHQgYWJzdHJhY3QgY2xhc3MgdGhhdCBlcXVpcHMgaW5oZXJpdGluZyBzZXJ2aWNlcyB3aXRoIHBlci1pbnN0YW5jZSBhbmQgc3RhdGljIGxvZ2dlciBhY2Nlc3NvcnMgdXNpbmcgdGhlIGRlY2FmLXRzIGxvZ2dpbmcgZmFjaWxpdHkuIEludGVuZGVkIHRvIHN0YW5kYXJkaXplIGxvZ2dpbmcgYWNyb3NzIGNsaWVudC1zaWRlIHNlcnZpY2VzLlxuICogQHBhcmFtIHt2b2lkfSBjb25zdHJ1Y3RvciAtIE5vIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnM7IGluaGVyaXRvcnMgc2hvdWxkIGNhbGwgc3VwZXIoKS5cbiAqIEBjbGFzcyBMb2dnZWRTZXJ2aWNlXG4gKiBAZXhhbXBsZVxuICogLy8gRXh0ZW5kIExvZ2dlZFNlcnZpY2UgdG8gZ2FpbiBsb2dnaW5nIGhlbHBlcnNcbiAqIGNsYXNzIFVzZXJTZXJ2aWNlIGV4dGVuZHMgTG9nZ2VkU2VydmljZSB7XG4gKiAgIGFzeW5jIGRvV29yaygpIHtcbiAqICAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5kb1dvcmspO1xuICogICAgIGxvZy5pbmZvKFwiV29ya2luZy4uLlwiKTtcbiAqICAgfVxuICogfVxuICpcbiAqIC8vIFN0YXRpYyBsb2dnZXIgZm9yIGNsYXNzLWxldmVsIGxvZ2dpbmdcbiAqIGNvbnN0IHNMb2cgPSAoVXNlclNlcnZpY2UgYXMgYW55KS5sb2c7XG4gKiBzTG9nLmRlYnVnKFwiQ2xhc3MgbGV2ZWwgbWVzc2FnZVwiKTtcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExvZ2dlZFNlcnZpY2Uge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENhY2hlZCBzdGF0aWMgbG9nZ2VyIHNoYXJlZCBieSBhbGwgaW5zdGFuY2VzIG9mIHRoaXMgY2xhc3NcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF9sb2c/OiBMb2dnZXI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMYXppbHkgY3JlYXRlZCBsb2dnZXIgc2NvcGVkIHRvIHRoZSBjb25jcmV0ZSBzZXJ2aWNlIGluc3RhbmNlXG4gICAqL1xuICBwcml2YXRlIF9sb2c/OiBMb2dnZXI7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBvciBjcmVhdGVzIHRoZSBpbnN0YW5jZSBsb2dnZXJcbiAgICogQHN1bW1hcnkgTGF6aWx5IGluaXRpYWxpemVzIGEgbG9nZ2VyIHVzaW5nIHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjb25jcmV0ZSBzZXJ2aWNlIGFuZCByZXR1cm5zIGl0IGZvciB1c2UgaW4gaW5zdGFuY2UgbWV0aG9kc1xuICAgKiBAcmV0dXJuIHtMb2dnZXJ9IFRoZSBpbnN0YW5jZS1zcGVjaWZpYyBsb2dnZXJcbiAgICovXG4gIHByb3RlY3RlZCBnZXQgbG9nKCk6IExvZ2dlciB7XG4gICAgaWYgKCF0aGlzLl9sb2cpIHRoaXMuX2xvZyA9IExvZ2dpbmcuZm9yKHRoaXMuY29uc3RydWN0b3IubmFtZSk7XG4gICAgcmV0dXJuIHRoaXMuX2xvZztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIG9yIGNyZWF0ZXMgdGhlIHN0YXRpYyBsb2dnZXIgZm9yIHRoZSBjbGFzc1xuICAgKiBAc3VtbWFyeSBQcm92aWRlcyBhIGxvZ2dlciBub3QgYm91bmQgdG8gYSBzcGVjaWZpYyBpbnN0YW5jZSwgc3VpdGFibGUgZm9yIGNsYXNzLWxldmVsIGRpYWdub3N0aWNzXG4gICAqIEByZXR1cm4ge0xvZ2dlcn0gVGhlIGNsYXNzLWxldmVsIGxvZ2dlclxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBnZXQgbG9nKCk6IExvZ2dlciB7XG4gICAgaWYgKCFMb2dnZWRTZXJ2aWNlLl9sb2cpIExvZ2dlZFNlcnZpY2UuX2xvZyA9IExvZ2dpbmcuZ2V0KCk7XG4gICAgcmV0dXJuIExvZ2dlZFNlcnZpY2UuX2xvZztcbiAgfVxufVxuIl19
|