@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,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,191 @@
|
|
|
1
|
+
import { normalizeImport } from "@decaf-ts/utils";
|
|
2
|
+
import { isBrowser, Logging } from "@decaf-ts/logging";
|
|
3
|
+
import { User } from "fabric-common";
|
|
4
|
+
import { signers } from "@hyperledger/fabric-gateway";
|
|
5
|
+
import { InternalError } from "@decaf-ts/db-decorators";
|
|
6
|
+
const log = Logging.for("fabric-fs");
|
|
7
|
+
/**
|
|
8
|
+
* @description Loads content from a file or returns the content if already loaded
|
|
9
|
+
* @summary Determines if the input is already content or a path to a file, and loads the file if needed
|
|
10
|
+
* @param {string | Uint8Array} contentOrPath - The content or path to load
|
|
11
|
+
* @param {Function} fileReader - Function to read the file if contentOrPath is a path
|
|
12
|
+
* @return {Promise<string | Uint8Array | Buffer>} The content
|
|
13
|
+
* @function contentOfLoadFile
|
|
14
|
+
* @memberOf module:for-fabric.client
|
|
15
|
+
*/
|
|
16
|
+
export async function contentOfLoadFile(contentOrPath, fileReader) {
|
|
17
|
+
if (contentOrPath instanceof Uint8Array)
|
|
18
|
+
return contentOrPath;
|
|
19
|
+
if (contentOrPath.match(/-----BEGIN (CERTIFICATE|KEY|PRIVATE KEY)-----.+?-----END \1-----$/gms))
|
|
20
|
+
return contentOrPath;
|
|
21
|
+
return await fileReader(contentOrPath);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* @description Reads a file from the file system
|
|
25
|
+
* @summary Loads a file using the Node.js file system module
|
|
26
|
+
* @param {string | Buffer} contentOrPath - The content or path to load
|
|
27
|
+
* @return {Promise<Buffer>} The file content as a Buffer
|
|
28
|
+
* @function readFile
|
|
29
|
+
* @memberOf module:for-fabric.client
|
|
30
|
+
*/
|
|
31
|
+
export async function readFile(contentOrPath) {
|
|
32
|
+
if (typeof contentOrPath !== "string")
|
|
33
|
+
return contentOrPath;
|
|
34
|
+
const fileReader = async (path) => {
|
|
35
|
+
const { promises } = await normalizeImport(import("fs"));
|
|
36
|
+
return await promises.readFile(path);
|
|
37
|
+
};
|
|
38
|
+
return await fileReader(contentOrPath);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @description Creates a Certificate Authority user
|
|
42
|
+
* @summary Initializes a user with the given credentials for interacting with a Fabric CA
|
|
43
|
+
* @param {string} userName - The user name
|
|
44
|
+
* @param {string} privateKey - The private key as a string
|
|
45
|
+
* @param {string} certificate - The certificate as a string
|
|
46
|
+
* @param {string} mspId - The Membership Service Provider ID
|
|
47
|
+
* @return {Promise<User>} Promise resolving to the created user
|
|
48
|
+
* @function getCAUser
|
|
49
|
+
* @memberOf module:for-fabric.client
|
|
50
|
+
*/
|
|
51
|
+
export async function getCAUser(userName, privateKey, certificate, mspId) {
|
|
52
|
+
log.debug(`Creating a CA ${mspId} user ${userName} with certificate ${certificate}`);
|
|
53
|
+
const user = new User(userName);
|
|
54
|
+
const cryptoSuite = User.newCryptoSuite();
|
|
55
|
+
user.setCryptoSuite(cryptoSuite);
|
|
56
|
+
const importedKey = cryptoSuite.createKeyFromRaw(privateKey);
|
|
57
|
+
await user.setEnrollment(importedKey, certificate, mspId);
|
|
58
|
+
return user;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @description Gets an identity from a certificate directory
|
|
62
|
+
* @summary Loads a certificate from a directory and creates an Identity object
|
|
63
|
+
* @param {string} mspId - The Membership Service Provider ID
|
|
64
|
+
* @param {string} certDirectoryPath - Path to the directory containing the certificate
|
|
65
|
+
* @return {Promise<Identity>} Promise resolving to the identity
|
|
66
|
+
* @function getIdentity
|
|
67
|
+
* @memberOf module:for-fabric.client
|
|
68
|
+
*/
|
|
69
|
+
export async function getIdentity(mspId, certDirectoryPath) {
|
|
70
|
+
const identityFileReader = async (path) => {
|
|
71
|
+
const { promises } = await normalizeImport(import("fs"));
|
|
72
|
+
const certPath = await getFirstDirFileName(path);
|
|
73
|
+
const credentials = await promises.readFile(certPath);
|
|
74
|
+
return credentials;
|
|
75
|
+
};
|
|
76
|
+
const credentials = (await contentOfLoadFile(certDirectoryPath, identityFileReader));
|
|
77
|
+
return { mspId, credentials };
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* @description Gets the full path of the first file in a directory
|
|
81
|
+
* @summary Reads a directory and returns the path to the first file found
|
|
82
|
+
* @param {string} dirPath - Path to the directory
|
|
83
|
+
* @return {Promise<string>} Promise resolving to the full path of the first file
|
|
84
|
+
* @function getFirstDirFileName
|
|
85
|
+
* @memberOf module:for-fabric.client
|
|
86
|
+
*/
|
|
87
|
+
export async function getFirstDirFileName(dirPath) {
|
|
88
|
+
const { promises } = await normalizeImport(import("fs"));
|
|
89
|
+
const { join } = await normalizeImport(import("path"));
|
|
90
|
+
const files = await promises.readdir(dirPath);
|
|
91
|
+
return join(dirPath, files[0]);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* @description Gets the content of the first file in a directory
|
|
95
|
+
* @summary Reads a directory, finds the first file, and returns its content as a string
|
|
96
|
+
* @param {string} dirPath - Path to the directory
|
|
97
|
+
* @return {Promise<string>} Promise resolving to the content of the first file
|
|
98
|
+
* @function getFirstDirFileNameContent
|
|
99
|
+
* @memberOf module:for-fabric.client
|
|
100
|
+
*/
|
|
101
|
+
export async function getFirstDirFileNameContent(dirPath) {
|
|
102
|
+
const { promises } = await normalizeImport(import("fs"));
|
|
103
|
+
const { join } = await normalizeImport(import("path"));
|
|
104
|
+
const files = await promises.readdir(dirPath);
|
|
105
|
+
return (await promises.readFile(join(dirPath, files[0]))).toString();
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* @description Gets a signer from a key directory
|
|
109
|
+
* @summary Loads a private key from a directory and creates a Signer for Fabric transactions
|
|
110
|
+
* @param {string} keyDirectoryPath - Path to the directory containing the private key
|
|
111
|
+
* @return {Promise<Signer>} Promise resolving to the signer
|
|
112
|
+
* @function getSigner
|
|
113
|
+
* @memberOf module:for-fabric.client
|
|
114
|
+
*/
|
|
115
|
+
export async function getSigner(keyDirectoryPath) {
|
|
116
|
+
const signerFileReader = async (path) => {
|
|
117
|
+
const { promises } = await normalizeImport(import("fs"));
|
|
118
|
+
const keyPath = await getFirstDirFileName(path);
|
|
119
|
+
return await promises.readFile(keyPath);
|
|
120
|
+
};
|
|
121
|
+
const privateKeyPem = (await contentOfLoadFile(keyDirectoryPath, signerFileReader));
|
|
122
|
+
// Node based implementation
|
|
123
|
+
// privateKey = createPrivateKey(privateKeyPem);
|
|
124
|
+
// --
|
|
125
|
+
// web based implementation
|
|
126
|
+
const privateKey = await extractPrivateKey(privateKeyPem);
|
|
127
|
+
const keys = Object.getOwnPropertySymbols(privateKey);
|
|
128
|
+
const k = privateKey[keys[0]];
|
|
129
|
+
// --
|
|
130
|
+
return signers.newPrivateKeySigner(k);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* @description Extracts a private key from a PEM buffer
|
|
134
|
+
* @summary Converts a PEM-encoded private key to a CryptoKey object
|
|
135
|
+
* @param {Buffer} pem - The PEM-encoded private key
|
|
136
|
+
* @return {Promise<CryptoKey>} Promise resolving to the CryptoKey
|
|
137
|
+
* @function extractPrivateKey
|
|
138
|
+
* @memberOf module:for-fabric.client
|
|
139
|
+
* @mermaid
|
|
140
|
+
* sequenceDiagram
|
|
141
|
+
* participant Caller
|
|
142
|
+
* participant ExtractPrivateKey
|
|
143
|
+
* participant SubtleCrypto
|
|
144
|
+
*
|
|
145
|
+
* Caller->>ExtractPrivateKey: extractPrivateKey(pem)
|
|
146
|
+
* ExtractPrivateKey->>ExtractPrivateKey: Get SubtleCrypto implementation
|
|
147
|
+
* ExtractPrivateKey->>ExtractPrivateKey: Parse PEM format
|
|
148
|
+
* ExtractPrivateKey->>ExtractPrivateKey: Convert to binary DER
|
|
149
|
+
* ExtractPrivateKey->>SubtleCrypto: importKey(pkcs8, binaryDer, options)
|
|
150
|
+
* SubtleCrypto-->>ExtractPrivateKey: CryptoKey
|
|
151
|
+
* ExtractPrivateKey-->>Caller: CryptoKey
|
|
152
|
+
*/
|
|
153
|
+
export async function extractPrivateKey(pem) {
|
|
154
|
+
const libName = "crypto";
|
|
155
|
+
let subtle;
|
|
156
|
+
if (isBrowser()) {
|
|
157
|
+
subtle = globalThis.crypto.subtle;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
const lib = (await normalizeImport(import(libName)));
|
|
161
|
+
subtle = lib.subtle || lib.webcrypto.subtle;
|
|
162
|
+
}
|
|
163
|
+
if (!subtle)
|
|
164
|
+
throw new Error("Could not load SubtleCrypto module");
|
|
165
|
+
function str2ab(str) {
|
|
166
|
+
const buf = new ArrayBuffer(str.length);
|
|
167
|
+
const bufView = new Uint8Array(buf);
|
|
168
|
+
for (let i = 0, strLen = str.length; i < strLen; i++) {
|
|
169
|
+
bufView[i] = str.charCodeAt(i);
|
|
170
|
+
}
|
|
171
|
+
return buf;
|
|
172
|
+
}
|
|
173
|
+
const str = pem
|
|
174
|
+
.toString("utf8")
|
|
175
|
+
.replace("-----BEGIN PRIVATE KEY-----", "")
|
|
176
|
+
.replaceAll("\n", "")
|
|
177
|
+
.replace("-----END PRIVATE KEY-----", "");
|
|
178
|
+
const decoded = Buffer.from(str, "base64").toString("binary");
|
|
179
|
+
const binaryDer = str2ab(decoded);
|
|
180
|
+
try {
|
|
181
|
+
const key = await subtle.importKey("pkcs8", binaryDer, {
|
|
182
|
+
name: "ECDSA",
|
|
183
|
+
namedCurve: "P-256",
|
|
184
|
+
}, true, ["sign"]);
|
|
185
|
+
return key;
|
|
186
|
+
}
|
|
187
|
+
catch (e) {
|
|
188
|
+
throw new InternalError(e);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFicmljLWZzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NsaWVudC9mYWJyaWMtZnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyQyxPQUFPLEVBQW9CLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRXJDOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxpQkFBaUIsQ0FDckMsYUFBa0MsRUFDbEMsVUFBbUU7SUFFbkUsSUFBSSxhQUFhLFlBQVksVUFBVTtRQUFFLE9BQU8sYUFBYSxDQUFDO0lBQzlELElBQ0UsYUFBYSxDQUFDLEtBQUssQ0FDakIsc0VBQXNFLENBQ3ZFO1FBRUQsT0FBTyxhQUFhLENBQUM7SUFDdkIsT0FBTyxNQUFNLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsUUFBUSxDQUFDLGFBQThCO0lBQzNELElBQUksT0FBTyxhQUFhLEtBQUssUUFBUTtRQUFFLE9BQU8sYUFBYSxDQUFDO0lBRTVELE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxJQUFZLEVBQUUsRUFBRTtRQUN4QyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekQsT0FBTyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENB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QUFTLEVBQ1Q7WUFDRSxJQUFJLEVBQUUsT0FBTztZQUNiLFVBQVUsRUFBRSxPQUFPO1NBQ3BCLEVBQ0QsSUFBSSxFQUNKLENBQUMsTUFBTSxDQUFDLENBQ1QsQ0FBQztRQUVGLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7UUFDaEIsTUFBTSxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG5vcm1hbGl6ZUltcG9ydCB9IGZyb20gXCJAZGVjYWYtdHMvdXRpbHNcIjtcbmltcG9ydCB7IGlzQnJvd3NlciwgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gXCJmYWJyaWMtY29tbW9uXCI7XG5pbXBvcnQgeyBJZGVudGl0eSwgU2lnbmVyLCBzaWduZXJzIH0gZnJvbSBcIkBoeXBlcmxlZGdlci9mYWJyaWMtZ2F0ZXdheVwiO1xuaW1wb3J0IHsgSW50ZXJuYWxFcnJvciB9IGZyb20gXCJAZGVjYWYtdHMvZGItZGVjb3JhdG9yc1wiO1xuXG5jb25zdCBsb2cgPSBMb2dnaW5nLmZvcihcImZhYnJpYy1mc1wiKTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTG9hZHMgY29udGVudCBmcm9tIGEgZmlsZSBvciByZXR1cm5zIHRoZSBjb250ZW50IGlmIGFscmVhZHkgbG9hZGVkXG4gKiBAc3VtbWFyeSBEZXRlcm1pbmVzIGlmIHRoZSBpbnB1dCBpcyBhbHJlYWR5IGNvbnRlbnQgb3IgYSBwYXRoIHRvIGEgZmlsZSwgYW5kIGxvYWRzIHRoZSBmaWxlIGlmIG5lZWRlZFxuICogQHBhcmFtIHtzdHJpbmcgfCBVaW50OEFycmF5fSBjb250ZW50T3JQYXRoIC0gVGhlIGNvbnRlbnQgb3IgcGF0aCB0byBsb2FkXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWxlUmVhZGVyIC0gRnVuY3Rpb24gdG8gcmVhZCB0aGUgZmlsZSBpZiBjb250ZW50T3JQYXRoIGlzIGEgcGF0aFxuICogQHJldHVybiB7UHJvbWlzZTxzdHJpbmcgfCBVaW50OEFycmF5IHwgQnVmZmVyPn0gVGhlIGNvbnRlbnRcbiAqIEBmdW5jdGlvbiBjb250ZW50T2ZMb2FkRmlsZVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLmNsaWVudFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29udGVudE9mTG9hZEZpbGUoXG4gIGNvbnRlbnRPclBhdGg6IHN0cmluZyB8IFVpbnQ4QXJyYXksXG4gIGZpbGVSZWFkZXI6IChwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgVWludDhBcnJheSB8IEJ1ZmZlcj5cbikge1xuICBpZiAoY29udGVudE9yUGF0aCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHJldHVybiBjb250ZW50T3JQYXRoO1xuICBpZiAoXG4gICAgY29udGVudE9yUGF0aC5tYXRjaChcbiAgICAgIC8tLS0tLUJFR0lOIChDRVJUSUZJQ0FURXxLRVl8UFJJVkFURSBLRVkpLS0tLS0uKz8tLS0tLUVORCBcXDEtLS0tLSQvZ21zXG4gICAgKVxuICApXG4gICAgcmV0dXJuIGNvbnRlbnRPclBhdGg7XG4gIHJldHVybiBhd2FpdCBmaWxlUmVhZGVyKGNvbnRlbnRPclBhdGgpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZWFkcyBhIGZpbGUgZnJvbSB0aGUgZmlsZSBzeXN0ZW1cbiAqIEBzdW1tYXJ5IExvYWRzIGEgZmlsZSB1c2luZyB0aGUgTm9kZS5qcyBmaWxlIHN5c3RlbSBtb2R1bGVcbiAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSBjb250ZW50T3JQYXRoIC0gVGhlIGNvbnRlbnQgb3IgcGF0aCB0byBsb2FkXG4gKiBAcmV0dXJuIHtQcm9taXNlPEJ1ZmZlcj59IFRoZSBmaWxlIGNvbnRlbnQgYXMgYSBCdWZmZXJcbiAqIEBmdW5jdGlvbiByZWFkRmlsZVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLmNsaWVudFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEZpbGUoY29udGVudE9yUGF0aDogc3RyaW5nIHwgQnVmZmVyKSB7XG4gIGlmICh0eXBlb2YgY29udGVudE9yUGF0aCAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGNvbnRlbnRPclBhdGg7XG5cbiAgY29uc3QgZmlsZVJlYWRlciA9IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB7IHByb21pc2VzIH0gPSBhd2FpdCBub3JtYWxpemVJbXBvcnQoaW1wb3J0KFwiZnNcIikpO1xuICAgIHJldHVybiBhd2FpdCBwcm9taXNlcy5yZWFkRmlsZShwYXRoKTtcbiAgfTtcblxuICByZXR1cm4gYXdhaXQgZmlsZVJlYWRlcihjb250ZW50T3JQYXRoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIENlcnRpZmljYXRlIEF1dGhvcml0eSB1c2VyXG4gKiBAc3VtbWFyeSBJbml0aWFsaXplcyBhIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gY3JlZGVudGlhbHMgZm9yIGludGVyYWN0aW5nIHdpdGggYSBGYWJyaWMgQ0FcbiAqIEBwYXJhbSB7c3RyaW5nfSB1c2VyTmFtZSAtIFRoZSB1c2VyIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcml2YXRlS2V5IC0gVGhlIHByaXZhdGUga2V5IGFzIGEgc3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gY2VydGlmaWNhdGUgLSBUaGUgY2VydGlmaWNhdGUgYXMgYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBtc3BJZCAtIFRoZSBNZW1iZXJzaGlwIFNlcnZpY2UgUHJvdmlkZXIgSURcbiAqIEByZXR1cm4ge1Byb21pc2U8VXNlcj59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBjcmVhdGVkIHVzZXJcbiAqIEBmdW5jdGlvbiBnZXRDQVVzZXJcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5jbGllbnRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENBVXNlcihcbiAgdXNlck5hbWU6IHN0cmluZyxcbiAgcHJpdmF0ZUtleTogc3RyaW5nLFxuICBjZXJ0aWZpY2F0ZTogc3RyaW5nLFxuICBtc3BJZDogc3RyaW5nXG4pOiBQcm9taXNlPFVzZXI+IHtcbiAgbG9nLmRlYnVnKFxuICAgIGBDcmVhdGluZyBhIENBICR7bXNwSWR9IHVzZXIgJHt1c2VyTmFtZX0gd2l0aCBjZXJ0aWZpY2F0ZSAke2NlcnRpZmljYXRlfWBcbiAgKTtcbiAgY29uc3QgdXNlciA9IG5ldyBVc2VyKHVzZXJOYW1lKTtcbiAgY29uc3QgY3J5cHRvU3VpdGUgPSBVc2VyLm5ld0NyeXB0b1N1aXRlKCk7XG4gIHVzZXIuc2V0Q3J5cHRvU3VpdGUoY3J5cHRvU3VpdGUpO1xuICBjb25zdCBpbXBvcnRlZEtleSA9IGNyeXB0b1N1aXRlLmNyZWF0ZUtleUZyb21SYXcocHJpdmF0ZUtleSk7XG4gIGF3YWl0IHVzZXIuc2V0RW5yb2xsbWVudChpbXBvcnRlZEtleSwgY2VydGlmaWNhdGUsIG1zcElkKTtcbiAgcmV0dXJuIHVzZXI7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdldHMgYW4gaWRlbnRpdHkgZnJvbSBhIGNlcnRpZmljYXRlIGRpcmVjdG9yeVxuICogQHN1bW1hcnkgTG9hZHMgYSBjZXJ0aWZpY2F0ZSBmcm9tIGEgZGlyZWN0b3J5IGFuZCBjcmVhdGVzIGFuIElkZW50aXR5IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1zcElkIC0gVGhlIE1lbWJlcnNoaXAgU2VydmljZSBQcm92aWRlciBJRFxuICogQHBhcmFtIHtzdHJpbmd9IGNlcnREaXJlY3RvcnlQYXRoIC0gUGF0aCB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGNlcnRpZmljYXRlXG4gKiBAcmV0dXJuIHtQcm9taXNlPElkZW50aXR5Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGlkZW50aXR5XG4gKiBAZnVuY3Rpb24gZ2V0SWRlbnRpdHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5jbGllbnRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldElkZW50aXR5KFxuICBtc3BJZDogc3RyaW5nLFxuICBjZXJ0RGlyZWN0b3J5UGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPElkZW50aXR5PiB7XG4gIGNvbnN0IGlkZW50aXR5RmlsZVJlYWRlciA9IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCB7IHByb21pc2VzIH0gPSBhd2FpdCBub3JtYWxpemVJbXBvcnQoaW1wb3J0KFwiZnNcIikpO1xuICAgIGNvbnN0IGNlcnRQYXRoID0gYXdhaXQgZ2V0Rmlyc3REaXJGaWxlTmFtZShwYXRoKTtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IGF3YWl0IHByb21pc2VzLnJlYWRGaWxlKGNlcnRQYXRoKTtcbiAgICByZXR1cm4gY3JlZGVudGlhbHM7XG4gIH07XG5cbiAgY29uc3QgY3JlZGVudGlhbHM6IFVpbnQ4QXJyYXkgPSAoYXdhaXQgY29udGVudE9mTG9hZEZpbGUoXG4gICAgY2VydERpcmVjdG9yeVBhdGgsXG4gICAgaWRlbnRpdHlGaWxlUmVhZGVyXG4gICkpIGFzIFVpbnQ4QXJyYXk7XG5cbiAgcmV0dXJuIHsgbXNwSWQsIGNyZWRlbnRpYWxzIH07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgZmlyc3QgZmlsZSBpbiBhIGRpcmVjdG9yeVxuICogQHN1bW1hcnkgUmVhZHMgYSBkaXJlY3RvcnkgYW5kIHJldHVybnMgdGhlIHBhdGggdG8gdGhlIGZpcnN0IGZpbGUgZm91bmRcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJQYXRoIC0gUGF0aCB0byB0aGUgZGlyZWN0b3J5XG4gKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZz59IFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBmdWxsIHBhdGggb2YgdGhlIGZpcnN0IGZpbGVcbiAqIEBmdW5jdGlvbiBnZXRGaXJzdERpckZpbGVOYW1lXG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1mYWJyaWMuY2xpZW50XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRGaXJzdERpckZpbGVOYW1lKGRpclBhdGg6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHsgcHJvbWlzZXMgfSA9IGF3YWl0IG5vcm1hbGl6ZUltcG9ydChpbXBvcnQoXCJmc1wiKSk7XG4gIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgbm9ybWFsaXplSW1wb3J0KGltcG9ydChcInBhdGhcIikpO1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IHByb21pc2VzLnJlYWRkaXIoZGlyUGF0aCk7XG4gIHJldHVybiBqb2luKGRpclBhdGgsIGZpbGVzWzBdKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gR2V0cyB0aGUgY29udGVudCBvZiB0aGUgZmlyc3QgZmlsZSBpbiBhIGRpcmVjdG9yeVxuICogQHN1bW1hcnkgUmVhZHMgYSBkaXJlY3RvcnksIGZpbmRzIHRoZSBmaXJzdCBmaWxlLCBhbmQgcmV0dXJucyBpdHMgY29udGVudCBhcyBhIHN0cmluZ1xuICogQHBhcmFtIHtzdHJpbmd9IGRpclBhdGggLSBQYXRoIHRvIHRoZSBkaXJlY3RvcnlcbiAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIGZpcnN0IGZpbGVcbiAqIEBmdW5jdGlvbiBnZXRGaXJzdERpckZpbGVOYW1lQ29udGVudFxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLmNsaWVudFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Rmlyc3REaXJGaWxlTmFtZUNvbnRlbnQoXG4gIGRpclBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBwcm9taXNlcyB9ID0gYXdhaXQgbm9ybWFsaXplSW1wb3J0KGltcG9ydChcImZzXCIpKTtcbiAgY29uc3QgeyBqb2luIH0gPSBhd2FpdCBub3JtYWxpemVJbXBvcnQoaW1wb3J0KFwicGF0aFwiKSk7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgcHJvbWlzZXMucmVhZGRpcihkaXJQYXRoKTtcbiAgcmV0dXJuIChhd2FpdCBwcm9taXNlcy5yZWFkRmlsZShqb2luKGRpclBhdGgsIGZpbGVzWzBdKSkpLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEdldHMgYSBzaWduZXIgZnJvbSBhIGtleSBkaXJlY3RvcnlcbiAqIEBzdW1tYXJ5IExvYWRzIGEgcHJpdmF0ZSBrZXkgZnJvbSBhIGRpcmVjdG9yeSBhbmQgY3JlYXRlcyBhIFNpZ25lciBmb3IgRmFicmljIHRyYW5zYWN0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleURpcmVjdG9yeVBhdGggLSBQYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcHJpdmF0ZSBrZXlcbiAqIEByZXR1cm4ge1Byb21pc2U8U2lnbmVyPn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHNpZ25lclxuICogQGZ1bmN0aW9uIGdldFNpZ25lclxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLmNsaWVudFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0U2lnbmVyKGtleURpcmVjdG9yeVBhdGg6IHN0cmluZyk6IFByb21pc2U8U2lnbmVyPiB7XG4gIGNvbnN0IHNpZ25lckZpbGVSZWFkZXIgPSBhc3luYyAocGF0aDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgeyBwcm9taXNlcyB9ID0gYXdhaXQgbm9ybWFsaXplSW1wb3J0KGltcG9ydChcImZzXCIpKTtcbiAgICBjb25zdCBrZXlQYXRoID0gYXdhaXQgZ2V0Rmlyc3REaXJGaWxlTmFtZShwYXRoKTtcbiAgICByZXR1cm4gYXdhaXQgcHJvbWlzZXMucmVhZEZpbGUoa2V5UGF0aCk7XG4gIH07XG5cbiAgY29uc3QgcHJpdmF0ZUtleVBlbSA9IChhd2FpdCBjb250ZW50T2ZMb2FkRmlsZShcbiAgICBrZXlEaXJlY3RvcnlQYXRoLFxuICAgIHNpZ25lckZpbGVSZWFkZXJcbiAgKSkgYXMgQnVmZmVyO1xuICAvLyBOb2RlIGJhc2VkIGltcGxlbWVudGF0aW9uXG4gIC8vIHByaXZhdGVLZXkgPSBjcmVhdGVQcml2YXRlS2V5KHByaXZhdGVLZXlQZW0pO1xuICAvLyAtLVxuXG4gIC8vIHdlYiBiYXNlZCBpbXBsZW1lbnRhdGlvblxuICBjb25zdCBwcml2YXRlS2V5ID0gYXdhaXQgZXh0cmFjdFByaXZhdGVLZXkocHJpdmF0ZUtleVBlbSk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByaXZhdGVLZXkpO1xuICBjb25zdCBrID0gKHByaXZhdGVLZXkgYXMgYW55KVtrZXlzWzBdXTtcbiAgLy8gLS1cblxuICByZXR1cm4gc2lnbmVycy5uZXdQcml2YXRlS2V5U2lnbmVyKGsgYXMgYW55KTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRXh0cmFjdHMgYSBwcml2YXRlIGtleSBmcm9tIGEgUEVNIGJ1ZmZlclxuICogQHN1bW1hcnkgQ29udmVydHMgYSBQRU0tZW5jb2RlZCBwcml2YXRlIGtleSB0byBhIENyeXB0b0tleSBvYmplY3RcbiAqIEBwYXJhbSB7QnVmZmVyfSBwZW0gLSBUaGUgUEVNLWVuY29kZWQgcHJpdmF0ZSBrZXlcbiAqIEByZXR1cm4ge1Byb21pc2U8Q3J5cHRvS2V5Pn0gUHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIENyeXB0b0tleVxuICogQGZ1bmN0aW9uIGV4dHJhY3RQcml2YXRlS2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1mYWJyaWMuY2xpZW50XG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBFeHRyYWN0UHJpdmF0ZUtleVxuICogICBwYXJ0aWNpcGFudCBTdWJ0bGVDcnlwdG9cbiAqXG4gKiAgIENhbGxlci0+PkV4dHJhY3RQcml2YXRlS2V5OiBleHRyYWN0UHJpdmF0ZUtleShwZW0pXG4gKiAgIEV4dHJhY3RQcml2YXRlS2V5LT4+RXh0cmFjdFByaXZhdGVLZXk6IEdldCBTdWJ0bGVDcnlwdG8gaW1wbGVtZW50YXRpb25cbiAqICAgRXh0cmFjdFByaXZhdGVLZXktPj5FeHRyYWN0UHJpdmF0ZUtleTogUGFyc2UgUEVNIGZvcm1hdFxuICogICBFeHRyYWN0UHJpdmF0ZUtleS0+PkV4dHJhY3RQcml2YXRlS2V5OiBDb252ZXJ0IHRvIGJpbmFyeSBERVJcbiAqICAgRXh0cmFjdFByaXZhdGVLZXktPj5TdWJ0bGVDcnlwdG86IGltcG9ydEtleShwa2NzOCwgYmluYXJ5RGVyLCBvcHRpb25zKVxuICogICBTdWJ0bGVDcnlwdG8tLT4+RXh0cmFjdFByaXZhdGVLZXk6IENyeXB0b0tleVxuICogICBFeHRyYWN0UHJpdmF0ZUtleS0tPj5DYWxsZXI6IENyeXB0b0tleVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXh0cmFjdFByaXZhdGVLZXkocGVtOiBCdWZmZXIpIHtcbiAgY29uc3QgbGliTmFtZSA9IFwiY3J5cHRvXCI7XG4gIGxldCBzdWJ0bGU7XG4gIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgIHN1YnRsZSA9IChnbG9iYWxUaGlzIGFzIGFueSkuY3J5cHRvLnN1YnRsZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBsaWIgPSAoYXdhaXQgbm9ybWFsaXplSW1wb3J0KGltcG9ydChsaWJOYW1lKSkpIGFzIGFueTtcbiAgICBzdWJ0bGUgPSBsaWIuc3VidGxlIHx8IGxpYi53ZWJjcnlwdG8uc3VidGxlO1xuICB9XG5cbiAgaWYgKCFzdWJ0bGUpIHRocm93IG5ldyBFcnJvcihcIkNvdWxkIG5vdCBsb2FkIFN1YnRsZUNyeXB0byBtb2R1bGVcIik7XG5cbiAgZnVuY3Rpb24gc3RyMmFiKHN0cjogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVmID0gbmV3IEFycmF5QnVmZmVyKHN0ci5sZW5ndGgpO1xuICAgIGNvbnN0IGJ1ZlZpZXcgPSBuZXcgVWludDhBcnJheShidWYpO1xuICAgIGZvciAobGV0IGkgPSAwLCBzdHJMZW4gPSBzdHIubGVuZ3RoOyBpIDwgc3RyTGVuOyBpKyspIHtcbiAgICAgIGJ1ZlZpZXdbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZjtcbiAgfVxuXG4gIGNvbnN0IHN0ciA9IHBlbVxuICAgIC50b1N0cmluZyhcInV0ZjhcIilcbiAgICAucmVwbGFjZShcIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVwiLCBcIlwiKVxuICAgIC5yZXBsYWNlQWxsKFwiXFxuXCIsIFwiXCIpXG4gICAgLnJlcGxhY2UoXCItLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tXCIsIFwiXCIpO1xuICBjb25zdCBkZWNvZGVkID0gQnVmZmVyLmZyb20oc3RyLCBcImJhc2U2NFwiKS50b1N0cmluZyhcImJpbmFyeVwiKTtcbiAgY29uc3QgYmluYXJ5RGVyID0gc3RyMmFiKGRlY29kZWQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qga2V5ID0gYXdhaXQgc3VidGxlLmltcG9ydEtleShcbiAgICAgIFwicGtjczhcIixcbiAgICAgIGJpbmFyeURlcixcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJFQ0RTQVwiLFxuICAgICAgICBuYW1lZEN1cnZlOiBcIlAtMjU2XCIsXG4gICAgICB9LFxuICAgICAgdHJ1ZSxcbiAgICAgIFtcInNpZ25cIl1cbiAgICApO1xuXG4gICAgcmV0dXJuIGtleTtcbiAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -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,14 @@
|
|
|
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.js";
|
|
11
|
+
export * from "./FabricClientAdapter.js";
|
|
12
|
+
export * from "./FabricClientDispatch.js";
|
|
13
|
+
export * from "./../shared/types.js";
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY2xpZW50L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBRUgsK0JBQTRCO0FBQzVCLHlDQUFzQztBQUN0QywwQ0FBdUM7QUFDdkMscUNBQWdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZGVzY3JpcHRpb24gSHlwZXJsZWRnZXIgRmFicmljIENsaWVudCBNb2R1bGUgZm9yIERlY2FmLXRzXG4gKiBAc3VtbWFyeSBUaGlzIG1vZHVsZSBwcm92aWRlcyBjbGllbnQtc2lkZSB1dGlsaXRpZXMgYW5kIGFkYXB0ZXJzIHRvIGludGVyYWN0IHdpdGggSHlwZXJsZWRnZXIgRmFicmljIG5ldHdvcmtzIHVzaW5nIERlY2FmLXRzLiBJdCBleHBvc2VzIHRoZSBGYWJyaWMgY2xpZW50IGFkYXB0ZXIsIGV2ZW50IGRpc3BhdGNoIHV0aWxpdGllcywgYW5kIGZpbGVzeXN0ZW0gaGVscGVycyBmb3IgbG9hZGluZyBpZGVudGl0aWVzIGFuZCBrZXlzLlxuICogQG1vZHVsZSBjbGllbnRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpY1xuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIGNsaWVudCBhZGFwdGVyIGFuZCBzdWJtaXQgYSB0cmFuc2FjdGlvblxuICogLy8gU2VlIGFsc286IHtAbGluayBtb2R1bGU6Zm9yLWZhYnJpY35GYWJyaWNDbGllbnRBZGFwdGVyfSBhbmQge0BsaW5rIG1vZHVsZTpmb3ItZmFicmljfkZhYnJpY0NsaWVudERpc3BhdGNofVxuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL2ZhYnJpYy1mc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vRmFicmljQ2xpZW50QWRhcHRlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vRmFicmljQ2xpZW50RGlzcGF0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCIuLi9zaGFyZWQvdHlwZXNcIjtcbiJdfQ==
|
|
@@ -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,98 @@
|
|
|
1
|
+
import { Logging, LogLevel, MiniLogger, NumericLogLevels, } from "@decaf-ts/logging";
|
|
2
|
+
/**
|
|
3
|
+
* @description Logger implementation tailored for Hyperledger Fabric clients.
|
|
4
|
+
* @summary Adapts the decaf-ts MiniLogger to route messages through a per-context Fabric logger, honoring configured log levels and formatting.
|
|
5
|
+
* @param {string} context - The logging context name used to scope the logger instance.
|
|
6
|
+
* @param {Partial<LoggingConfig> | undefined} conf - Optional logging configuration to override defaults for this context.
|
|
7
|
+
* @class FabricLogger
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // In a Fabric client/service
|
|
11
|
+
* const logger = new FabricLogger('MyFabricService', { level: 'info' });
|
|
12
|
+
* logger.info('Processing transaction');
|
|
13
|
+
* logger.debug('Transaction details', { txId: '123' });
|
|
14
|
+
* logger.error('Something went wrong');
|
|
15
|
+
* ```
|
|
16
|
+
* @mermaid
|
|
17
|
+
* sequenceDiagram
|
|
18
|
+
* autonumber
|
|
19
|
+
* participant C as Caller
|
|
20
|
+
* participant FL as FabricLogger
|
|
21
|
+
* participant ML as MiniLogger (delegate)
|
|
22
|
+
* C->>FL: info('Processing transaction')
|
|
23
|
+
* FL->>FL: createLog(level,msg,stack)
|
|
24
|
+
* FL->>ML: info(log)
|
|
25
|
+
* C->>FL: error(new Error('x'))
|
|
26
|
+
* FL->>FL: createLog(level,msg,stack)
|
|
27
|
+
* FL->>ML: error(log)
|
|
28
|
+
*/
|
|
29
|
+
export class FabricLogger extends MiniLogger {
|
|
30
|
+
constructor(context, conf) {
|
|
31
|
+
super(context, conf);
|
|
32
|
+
this.logger = new MiniLogger(context, conf);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* @description Logs a message at the specified level.
|
|
36
|
+
* @summary Overrides the base MiniLogger.log to forward to the internal Fabric-aware logger, enforcing configured thresholds.
|
|
37
|
+
* @param {LogLevel} level - The log level to use for this message.
|
|
38
|
+
* @param {StringLike | Error} msg - The message or error to log.
|
|
39
|
+
* @param {string} [stack] - Optional stack trace string for errors.
|
|
40
|
+
* @return {void}
|
|
41
|
+
* @mermaid
|
|
42
|
+
* sequenceDiagram
|
|
43
|
+
* autonumber
|
|
44
|
+
* participant C as Caller
|
|
45
|
+
* participant FL as FabricLogger
|
|
46
|
+
* participant ML as MiniLogger (delegate)
|
|
47
|
+
* C->>FL: log(level, msg, stack?)
|
|
48
|
+
* FL->>FL: check configured level
|
|
49
|
+
* alt below threshold
|
|
50
|
+
* FL-->>C: return
|
|
51
|
+
* else above threshold
|
|
52
|
+
* FL->>FL: createLog(level, msg, stack)
|
|
53
|
+
* FL->>ML: method.call(logger, log)
|
|
54
|
+
* ML-->>FL: void
|
|
55
|
+
* end
|
|
56
|
+
*/
|
|
57
|
+
log(level, msg, stack) {
|
|
58
|
+
if (NumericLogLevels[this.config("level")] <
|
|
59
|
+
NumericLogLevels[level])
|
|
60
|
+
return;
|
|
61
|
+
let method;
|
|
62
|
+
switch (level) {
|
|
63
|
+
case LogLevel.info:
|
|
64
|
+
method = this.logger.info;
|
|
65
|
+
break;
|
|
66
|
+
case LogLevel.verbose:
|
|
67
|
+
method = this.logger.verbose;
|
|
68
|
+
break;
|
|
69
|
+
case LogLevel.debug:
|
|
70
|
+
method = this.logger.debug;
|
|
71
|
+
break;
|
|
72
|
+
case LogLevel.error:
|
|
73
|
+
method = this.logger.error;
|
|
74
|
+
break;
|
|
75
|
+
case LogLevel.silly:
|
|
76
|
+
method = this.logger.silly;
|
|
77
|
+
break;
|
|
78
|
+
default:
|
|
79
|
+
throw new Error("Invalid log level");
|
|
80
|
+
}
|
|
81
|
+
method.call(this.logger, this.createLog(level, msg, stack));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* @description Factory function for creating FabricLogger instances.
|
|
86
|
+
* @summary Produces a new FabricLogger bound to the provided context name and configuration.
|
|
87
|
+
* @param {string} object - The logging context name.
|
|
88
|
+
* @param {Partial<LoggingConfig> | undefined} config - Optional logging configuration.
|
|
89
|
+
* @return {FabricLogger} A new FabricLogger instance.
|
|
90
|
+
* @function factory
|
|
91
|
+
* @memberOf module:for-fabric.client
|
|
92
|
+
*/
|
|
93
|
+
const factory = (object, config) => {
|
|
94
|
+
return new FabricLogger(object, config || {});
|
|
95
|
+
};
|
|
96
|
+
// Set the factory as the default logger factory
|
|
97
|
+
Logging.setFactory(factory);
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2luZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jbGllbnQvbG9nZ2luZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsT0FBTyxFQUVQLFFBQVEsRUFDUixVQUFVLEVBQ1YsZ0JBQWdCLEdBRWpCLE1BQU0sbUJBQW1CLENBQUM7QUFHM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsTUFBTSxPQUFPLFlBQWEsU0FBUSxVQUFVO0lBTTFDLFlBQVksT0FBZSxFQUFFLElBQXdDO1FBQ25FLEtBQUssQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFVBQVUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ2dCLEdBQUcsQ0FDcEIsS0FBZSxFQUNmLEdBQXVCLEVBQ3ZCLEtBQWE7UUFFYixJQUNFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFhLENBQUM7WUFDbEQsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1lBRXZCLE9BQU87UUFFVCxJQUFJLE1BQU0sQ0FBQztRQUNYLFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDZCxLQUFLLFFBQVEsQ0FBQyxJQUFJO2dCQUNoQixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxPQUFPO2dCQUNuQixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7Z0JBQzdCLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxLQUFLO2dCQUNqQixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzNCLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxLQUFLO2dCQUNqQixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzNCLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxLQUFLO2dCQUNqQixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzNCLE1BQU07WUFDUjtnQkFDRSxNQUFNLElBQUksS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sT0FBTyxHQUFrQixDQUM3QixNQUFjLEVBQ2QsTUFBMEMsRUFDMUMsRUFBRTtJQUNGLE9BQU8sSUFBSSxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQztBQUNoRCxDQUFDLENBQUM7QUFFRixnREFBZ0Q7QUFDaEQsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIExvZ2dlckZhY3RvcnksXG4gIExvZ2dpbmcsXG4gIExvZ2dlcixcbiAgTG9nTGV2ZWwsXG4gIE1pbmlMb2dnZXIsXG4gIE51bWVyaWNMb2dMZXZlbHMsXG4gIFN0cmluZ0xpa2UsXG59IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0IHsgTG9nZ2luZ0NvbmZpZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBMb2dnZXIgaW1wbGVtZW50YXRpb24gdGFpbG9yZWQgZm9yIEh5cGVybGVkZ2VyIEZhYnJpYyBjbGllbnRzLlxuICogQHN1bW1hcnkgQWRhcHRzIHRoZSBkZWNhZi10cyBNaW5pTG9nZ2VyIHRvIHJvdXRlIG1lc3NhZ2VzIHRocm91Z2ggYSBwZXItY29udGV4dCBGYWJyaWMgbG9nZ2VyLCBob25vcmluZyBjb25maWd1cmVkIGxvZyBsZXZlbHMgYW5kIGZvcm1hdHRpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGV4dCAtIFRoZSBsb2dnaW5nIGNvbnRleHQgbmFtZSB1c2VkIHRvIHNjb3BlIHRoZSBsb2dnZXIgaW5zdGFuY2UuXG4gKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz4gfCB1bmRlZmluZWR9IGNvbmYgLSBPcHRpb25hbCBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gdG8gb3ZlcnJpZGUgZGVmYXVsdHMgZm9yIHRoaXMgY29udGV4dC5cbiAqIEBjbGFzcyBGYWJyaWNMb2dnZXJcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBJbiBhIEZhYnJpYyBjbGllbnQvc2VydmljZVxuICogY29uc3QgbG9nZ2VyID0gbmV3IEZhYnJpY0xvZ2dlcignTXlGYWJyaWNTZXJ2aWNlJywgeyBsZXZlbDogJ2luZm8nIH0pO1xuICogbG9nZ2VyLmluZm8oJ1Byb2Nlc3NpbmcgdHJhbnNhY3Rpb24nKTtcbiAqIGxvZ2dlci5kZWJ1ZygnVHJhbnNhY3Rpb24gZGV0YWlscycsIHsgdHhJZDogJzEyMycgfSk7XG4gKiBsb2dnZXIuZXJyb3IoJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XG4gKiBgYGBcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgYXV0b251bWJlclxuICogICBwYXJ0aWNpcGFudCBDIGFzIENhbGxlclxuICogICBwYXJ0aWNpcGFudCBGTCBhcyBGYWJyaWNMb2dnZXJcbiAqICAgcGFydGljaXBhbnQgTUwgYXMgTWluaUxvZ2dlciAoZGVsZWdhdGUpXG4gKiAgIEMtPj5GTDogaW5mbygnUHJvY2Vzc2luZyB0cmFuc2FjdGlvbicpXG4gKiAgIEZMLT4+Rkw6IGNyZWF0ZUxvZyhsZXZlbCxtc2csc3RhY2spXG4gKiAgIEZMLT4+TUw6IGluZm8obG9nKVxuICogICBDLT4+Rkw6IGVycm9yKG5ldyBFcnJvcigneCcpKVxuICogICBGTC0+PkZMOiBjcmVhdGVMb2cobGV2ZWwsbXNnLHN0YWNrKVxuICogICBGTC0+Pk1MOiBlcnJvcihsb2cpXG4gKi9cbmV4cG9ydCBjbGFzcyBGYWJyaWNMb2dnZXIgZXh0ZW5kcyBNaW5pTG9nZ2VyIHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdW5kZXJseWluZyBGYWJyaWMgbG9nZ2VyIGluc3RhbmNlXG4gICAqL1xuICBwcm90ZWN0ZWQgbG9nZ2VyOiBMb2dnZXI7XG5cbiAgY29uc3RydWN0b3IoY29udGV4dDogc3RyaW5nLCBjb25mOiBQYXJ0aWFsPExvZ2dpbmdDb25maWc+IHwgdW5kZWZpbmVkKSB7XG4gICAgc3VwZXIoY29udGV4dCwgY29uZik7XG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTWluaUxvZ2dlcihjb250ZXh0LCBjb25mKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIG1lc3NhZ2UgYXQgdGhlIHNwZWNpZmllZCBsZXZlbC5cbiAgICogQHN1bW1hcnkgT3ZlcnJpZGVzIHRoZSBiYXNlIE1pbmlMb2dnZXIubG9nIHRvIGZvcndhcmQgdG8gdGhlIGludGVybmFsIEZhYnJpYy1hd2FyZSBsb2dnZXIsIGVuZm9yY2luZyBjb25maWd1cmVkIHRocmVzaG9sZHMuXG4gICAqIEBwYXJhbSB7TG9nTGV2ZWx9IGxldmVsIC0gVGhlIGxvZyBsZXZlbCB0byB1c2UgZm9yIHRoaXMgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtTdHJpbmdMaWtlIHwgRXJyb3J9IG1zZyAtIFRoZSBtZXNzYWdlIG9yIGVycm9yIHRvIGxvZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdGFja10gLSBPcHRpb25hbCBzdGFjayB0cmFjZSBzdHJpbmcgZm9yIGVycm9ycy5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgYXV0b251bWJlclxuICAgKiAgIHBhcnRpY2lwYW50IEMgYXMgQ2FsbGVyXG4gICAqICAgcGFydGljaXBhbnQgRkwgYXMgRmFicmljTG9nZ2VyXG4gICAqICAgcGFydGljaXBhbnQgTUwgYXMgTWluaUxvZ2dlciAoZGVsZWdhdGUpXG4gICAqICAgQy0+PkZMOiBsb2cobGV2ZWwsIG1zZywgc3RhY2s/KVxuICAgKiAgIEZMLT4+Rkw6IGNoZWNrIGNvbmZpZ3VyZWQgbGV2ZWxcbiAgICogICBhbHQgYmVsb3cgdGhyZXNob2xkXG4gICAqICAgICBGTC0tPj5DOiByZXR1cm5cbiAgICogICBlbHNlIGFib3ZlIHRocmVzaG9sZFxuICAgKiAgICAgRkwtPj5GTDogY3JlYXRlTG9nKGxldmVsLCBtc2csIHN0YWNrKVxuICAgKiAgICAgRkwtPj5NTDogbWV0aG9kLmNhbGwobG9nZ2VyLCBsb2cpXG4gICAqICAgICBNTC0tPj5GTDogdm9pZFxuICAgKiAgIGVuZFxuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGxvZyhcbiAgICBsZXZlbDogTG9nTGV2ZWwsXG4gICAgbXNnOiBTdHJpbmdMaWtlIHwgRXJyb3IsXG4gICAgc3RhY2s/OiBFcnJvclxuICApIHtcbiAgICBpZiAoXG4gICAgICBOdW1lcmljTG9nTGV2ZWxzW3RoaXMuY29uZmlnKFwibGV2ZWxcIikgYXMgTG9nTGV2ZWxdIDxcbiAgICAgIE51bWVyaWNMb2dMZXZlbHNbbGV2ZWxdXG4gICAgKVxuICAgICAgcmV0dXJuO1xuXG4gICAgbGV0IG1ldGhvZDtcbiAgICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgICBjYXNlIExvZ0xldmVsLmluZm86XG4gICAgICAgIG1ldGhvZCA9IHRoaXMubG9nZ2VyLmluZm87XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMb2dMZXZlbC52ZXJib3NlOlxuICAgICAgICBtZXRob2QgPSB0aGlzLmxvZ2dlci52ZXJib3NlO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTG9nTGV2ZWwuZGVidWc6XG4gICAgICAgIG1ldGhvZCA9IHRoaXMubG9nZ2VyLmRlYnVnO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTG9nTGV2ZWwuZXJyb3I6XG4gICAgICAgIG1ldGhvZCA9IHRoaXMubG9nZ2VyLmVycm9yO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTG9nTGV2ZWwuc2lsbHk6XG4gICAgICAgIG1ldGhvZCA9IHRoaXMubG9nZ2VyLnNpbGx5O1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgbG9nIGxldmVsXCIpO1xuICAgIH1cbiAgICBtZXRob2QuY2FsbCh0aGlzLmxvZ2dlciwgdGhpcy5jcmVhdGVMb2cobGV2ZWwsIG1zZywgc3RhY2spKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBGYWJyaWNMb2dnZXIgaW5zdGFuY2VzLlxuICogQHN1bW1hcnkgUHJvZHVjZXMgYSBuZXcgRmFicmljTG9nZ2VyIGJvdW5kIHRvIHRoZSBwcm92aWRlZCBjb250ZXh0IG5hbWUgYW5kIGNvbmZpZ3VyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gb2JqZWN0IC0gVGhlIGxvZ2dpbmcgY29udGV4dCBuYW1lLlxuICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+IHwgdW5kZWZpbmVkfSBjb25maWcgLSBPcHRpb25hbCBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uXG4gKiBAcmV0dXJuIHtGYWJyaWNMb2dnZXJ9IEEgbmV3IEZhYnJpY0xvZ2dlciBpbnN0YW5jZS5cbiAqIEBmdW5jdGlvbiBmYWN0b3J5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1mYWJyaWMuY2xpZW50XG4gKi9cbmNvbnN0IGZhY3Rvcnk6IExvZ2dlckZhY3RvcnkgPSAoXG4gIG9iamVjdDogc3RyaW5nLFxuICBjb25maWc6IFBhcnRpYWw8TG9nZ2luZ0NvbmZpZz4gfCB1bmRlZmluZWRcbikgPT4ge1xuICByZXR1cm4gbmV3IEZhYnJpY0xvZ2dlcihvYmplY3QsIGNvbmZpZyB8fCB7fSk7XG59O1xuXG4vLyBTZXQgdGhlIGZhY3RvcnkgYXMgdGhlIGRlZmF1bHQgbG9nZ2VyIGZhY3RvcnlcbkxvZ2dpbmcuc2V0RmFjdG9yeShmYWN0b3J5KTtcbiJdfQ==
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { Logger } from "@decaf-ts/logging";
|
|
2
|
+
/**
|
|
3
|
+
* @description Base service with logging utilities.
|
|
4
|
+
* @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.
|
|
5
|
+
* @param {void} constructor - No constructor parameters; inheritors should call super().
|
|
6
|
+
* @class LoggedService
|
|
7
|
+
* @example
|
|
8
|
+
* // Extend LoggedService to gain logging helpers
|
|
9
|
+
* class UserService extends LoggedService {
|
|
10
|
+
* async doWork() {
|
|
11
|
+
* const log = this.log.for(this.doWork);
|
|
12
|
+
* log.info("Working...");
|
|
13
|
+
* }
|
|
14
|
+
* }
|
|
15
|
+
*
|
|
16
|
+
* // Static logger for class-level logging
|
|
17
|
+
* const sLog = (UserService as any).log;
|
|
18
|
+
* sLog.debug("Class level message");
|
|
19
|
+
*/
|
|
20
|
+
export declare abstract class LoggedService {
|
|
21
|
+
/**
|
|
22
|
+
* @description Cached static logger shared by all instances of this class
|
|
23
|
+
*/
|
|
24
|
+
private static _log?;
|
|
25
|
+
/**
|
|
26
|
+
* @description Lazily created logger scoped to the concrete service instance
|
|
27
|
+
*/
|
|
28
|
+
private _log?;
|
|
29
|
+
protected constructor();
|
|
30
|
+
/**
|
|
31
|
+
* @description Retrieves or creates the instance logger
|
|
32
|
+
* @summary Lazily initializes a logger using the class name of the concrete service and returns it for use in instance methods
|
|
33
|
+
* @return {Logger} The instance-specific logger
|
|
34
|
+
*/
|
|
35
|
+
protected get log(): Logger;
|
|
36
|
+
/**
|
|
37
|
+
* @description Retrieves or creates the static logger for the class
|
|
38
|
+
* @summary Provides a logger not bound to a specific instance, suitable for class-level diagnostics
|
|
39
|
+
* @return {Logger} The class-level logger
|
|
40
|
+
*/
|
|
41
|
+
protected static get log(): Logger;
|
|
42
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Logging } from "@decaf-ts/logging";
|
|
2
|
+
/**
|
|
3
|
+
* @description Base service with logging utilities.
|
|
4
|
+
* @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.
|
|
5
|
+
* @param {void} constructor - No constructor parameters; inheritors should call super().
|
|
6
|
+
* @class LoggedService
|
|
7
|
+
* @example
|
|
8
|
+
* // Extend LoggedService to gain logging helpers
|
|
9
|
+
* class UserService extends LoggedService {
|
|
10
|
+
* async doWork() {
|
|
11
|
+
* const log = this.log.for(this.doWork);
|
|
12
|
+
* log.info("Working...");
|
|
13
|
+
* }
|
|
14
|
+
* }
|
|
15
|
+
*
|
|
16
|
+
* // Static logger for class-level logging
|
|
17
|
+
* const sLog = (UserService as any).log;
|
|
18
|
+
* sLog.debug("Class level message");
|
|
19
|
+
*/
|
|
20
|
+
export class LoggedService {
|
|
21
|
+
constructor() { }
|
|
22
|
+
/**
|
|
23
|
+
* @description Retrieves or creates the instance logger
|
|
24
|
+
* @summary Lazily initializes a logger using the class name of the concrete service and returns it for use in instance methods
|
|
25
|
+
* @return {Logger} The instance-specific logger
|
|
26
|
+
*/
|
|
27
|
+
get log() {
|
|
28
|
+
if (!this._log)
|
|
29
|
+
this._log = Logging.for(this.constructor.name);
|
|
30
|
+
return this._log;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* @description Retrieves or creates the static logger for the class
|
|
34
|
+
* @summary Provides a logger not bound to a specific instance, suitable for class-level diagnostics
|
|
35
|
+
* @return {Logger} The class-level logger
|
|
36
|
+
*/
|
|
37
|
+
static get log() {
|
|
38
|
+
if (!LoggedService._log)
|
|
39
|
+
LoggedService._log = Logging.get();
|
|
40
|
+
return LoggedService._log;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nZ2VkU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jbGllbnQvc2VydmljZXMvTG9nZ2VkU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxPQUFnQixhQUFhO0lBV2pDLGdCQUF5QixDQUFDO0lBRTFCOzs7O09BSUc7SUFDSCxJQUFjLEdBQUc7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7WUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7O09BSUc7SUFDTyxNQUFNLEtBQUssR0FBRztRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUk7WUFBRSxhQUFhLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1RCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFDNUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9nZ2VyLCBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEJhc2Ugc2VydmljZSB3aXRoIGxvZ2dpbmcgdXRpbGl0aWVzLlxuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBsaWdodHdlaWdodCBhYnN0cmFjdCBjbGFzcyB0aGF0IGVxdWlwcyBpbmhlcml0aW5nIHNlcnZpY2VzIHdpdGggcGVyLWluc3RhbmNlIGFuZCBzdGF0aWMgbG9nZ2VyIGFjY2Vzc29ycyB1c2luZyB0aGUgZGVjYWYtdHMgbG9nZ2luZyBmYWNpbGl0eS4gSW50ZW5kZWQgdG8gc3RhbmRhcmRpemUgbG9nZ2luZyBhY3Jvc3MgY2xpZW50LXNpZGUgc2VydmljZXMuXG4gKiBAcGFyYW0ge3ZvaWR9IGNvbnN0cnVjdG9yIC0gTm8gY29uc3RydWN0b3IgcGFyYW1ldGVyczsgaW5oZXJpdG9ycyBzaG91bGQgY2FsbCBzdXBlcigpLlxuICogQGNsYXNzIExvZ2dlZFNlcnZpY2VcbiAqIEBleGFtcGxlXG4gKiAvLyBFeHRlbmQgTG9nZ2VkU2VydmljZSB0byBnYWluIGxvZ2dpbmcgaGVscGVyc1xuICogY2xhc3MgVXNlclNlcnZpY2UgZXh0ZW5kcyBMb2dnZWRTZXJ2aWNlIHtcbiAqICAgYXN5bmMgZG9Xb3JrKCkge1xuICogICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmRvV29yayk7XG4gKiAgICAgbG9nLmluZm8oXCJXb3JraW5nLi4uXCIpO1xuICogICB9XG4gKiB9XG4gKlxuICogLy8gU3RhdGljIGxvZ2dlciBmb3IgY2xhc3MtbGV2ZWwgbG9nZ2luZ1xuICogY29uc3Qgc0xvZyA9IChVc2VyU2VydmljZSBhcyBhbnkpLmxvZztcbiAqIHNMb2cuZGVidWcoXCJDbGFzcyBsZXZlbCBtZXNzYWdlXCIpO1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTG9nZ2VkU2VydmljZSB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2FjaGVkIHN0YXRpYyBsb2dnZXIgc2hhcmVkIGJ5IGFsbCBpbnN0YW5jZXMgb2YgdGhpcyBjbGFzc1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZz86IExvZ2dlcjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExhemlseSBjcmVhdGVkIGxvZ2dlciBzY29wZWQgdG8gdGhlIGNvbmNyZXRlIHNlcnZpY2UgaW5zdGFuY2VcbiAgICovXG4gIHByaXZhdGUgX2xvZz86IExvZ2dlcjtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIG9yIGNyZWF0ZXMgdGhlIGluc3RhbmNlIGxvZ2dlclxuICAgKiBAc3VtbWFyeSBMYXppbHkgaW5pdGlhbGl6ZXMgYSBsb2dnZXIgdXNpbmcgdGhlIGNsYXNzIG5hbWUgb2YgdGhlIGNvbmNyZXRlIHNlcnZpY2UgYW5kIHJldHVybnMgaXQgZm9yIHVzZSBpbiBpbnN0YW5jZSBtZXRob2RzXG4gICAqIEByZXR1cm4ge0xvZ2dlcn0gVGhlIGluc3RhbmNlLXNwZWNpZmljIGxvZ2dlclxuICAgKi9cbiAgcHJvdGVjdGVkIGdldCBsb2coKTogTG9nZ2VyIHtcbiAgICBpZiAoIXRoaXMuX2xvZykgdGhpcy5fbG9nID0gTG9nZ2luZy5mb3IodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICByZXR1cm4gdGhpcy5fbG9nO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgb3IgY3JlYXRlcyB0aGUgc3RhdGljIGxvZ2dlciBmb3IgdGhlIGNsYXNzXG4gICAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgbG9nZ2VyIG5vdCBib3VuZCB0byBhIHNwZWNpZmljIGluc3RhbmNlLCBzdWl0YWJsZSBmb3IgY2xhc3MtbGV2ZWwgZGlhZ25vc3RpY3NcbiAgICogQHJldHVybiB7TG9nZ2VyfSBUaGUgY2xhc3MtbGV2ZWwgbG9nZ2VyXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGdldCBsb2coKTogTG9nZ2VyIHtcbiAgICBpZiAoIUxvZ2dlZFNlcnZpY2UuX2xvZykgTG9nZ2VkU2VydmljZS5fbG9nID0gTG9nZ2luZy5nZXQoKTtcbiAgICByZXR1cm4gTG9nZ2VkU2VydmljZS5fbG9nO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Certificate Authority role types used during enrollment and registration.
|
|
3
|
+
* @summary Enumerates the standard Hyperledger Fabric CA roles that can be assigned to identities when registering with the CA service.
|
|
4
|
+
* @enum {string}
|
|
5
|
+
* @readonly
|
|
6
|
+
* @memberOf module:for-fabric.client
|
|
7
|
+
*/
|
|
8
|
+
export declare enum CA_ROLE {
|
|
9
|
+
/** Administrator role with elevated privileges for managing identities and affiliations */
|
|
10
|
+
ADMIN = "admin",
|
|
11
|
+
/** Standard user role for application clients interacting with the network */
|
|
12
|
+
USER = "user",
|
|
13
|
+
/** Client role typically used for SDK-based interactions and service accounts */
|
|
14
|
+
CLIENT = "client"
|
|
15
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaWVudC9zZXJ2aWNlcy9jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIENlcnRpZmljYXRlIEF1dGhvcml0eSByb2xlIHR5cGVzIHVzZWQgZHVyaW5nIGVucm9sbG1lbnQgYW5kIHJlZ2lzdHJhdGlvbi5cbiAqIEBzdW1tYXJ5IEVudW1lcmF0ZXMgdGhlIHN0YW5kYXJkIEh5cGVybGVkZ2VyIEZhYnJpYyBDQSByb2xlcyB0aGF0IGNhbiBiZSBhc3NpZ25lZCB0byBpZGVudGl0aWVzIHdoZW4gcmVnaXN0ZXJpbmcgd2l0aCB0aGUgQ0Egc2VydmljZS5cbiAqIEBlbnVtIHtzdHJpbmd9XG4gKiBAcmVhZG9ubHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5jbGllbnRcbiAqL1xuZXhwb3J0IGRlY2xhcmUgZW51bSBDQV9ST0xFIHtcbiAgLyoqIEFkbWluaXN0cmF0b3Igcm9sZSB3aXRoIGVsZXZhdGVkIHByaXZpbGVnZXMgZm9yIG1hbmFnaW5nIGlkZW50aXRpZXMgYW5kIGFmZmlsaWF0aW9ucyAqL1xuICBBRE1JTiA9IFwiYWRtaW5cIixcbiAgLyoqIFN0YW5kYXJkIHVzZXIgcm9sZSBmb3IgYXBwbGljYXRpb24gY2xpZW50cyBpbnRlcmFjdGluZyB3aXRoIHRoZSBuZXR3b3JrICovXG4gIFVTRVIgPSBcInVzZXJcIixcbiAgLyoqIENsaWVudCByb2xlIHR5cGljYWxseSB1c2VkIGZvciBTREstYmFzZWQgaW50ZXJhY3Rpb25zIGFuZCBzZXJ2aWNlIGFjY291bnRzICovXG4gIENMSUVOVCA9IFwiY2xpZW50XCIsXG59XG4iXX0=
|