@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.
Files changed (205) hide show
  1. package/LICENSE.md +22 -0
  2. package/README.md +647 -0
  3. package/dist/for-fabric.cjs +6223 -0
  4. package/dist/for-fabric.esm.cjs +6180 -0
  5. package/lib/client/FabricClientAdapter.cjs +760 -0
  6. package/lib/client/FabricClientAdapter.d.ts +381 -0
  7. package/lib/client/FabricClientDispatch.cjs +186 -0
  8. package/lib/client/FabricClientDispatch.d.ts +125 -0
  9. package/lib/client/FabricClientRepository.cjs +131 -0
  10. package/lib/client/FabricClientRepository.d.ts +100 -0
  11. package/lib/client/erc20/erc20ClientRepository.cjs +343 -0
  12. package/lib/client/erc20/erc20ClientRepository.d.ts +254 -0
  13. package/lib/client/fabric-fs.cjs +234 -0
  14. package/lib/client/fabric-fs.d.ts +92 -0
  15. package/lib/client/index.cjs +30 -0
  16. package/lib/client/index.d.ts +13 -0
  17. package/lib/client/logging.cjs +102 -0
  18. package/lib/client/logging.d.ts +60 -0
  19. package/lib/client/services/LoggedService.cjs +47 -0
  20. package/lib/client/services/LoggedService.d.ts +42 -0
  21. package/lib/client/services/constants.cjs +3 -0
  22. package/lib/client/services/constants.d.ts +15 -0
  23. package/lib/client/services/enrollementService.cjs +344 -0
  24. package/lib/client/services/enrollementService.d.ts +176 -0
  25. package/lib/client/services/index.cjs +18 -0
  26. package/lib/client/services/index.d.ts +1 -0
  27. package/lib/contracts/ContractAdapter.cjs +730 -0
  28. package/lib/contracts/ContractAdapter.d.ts +296 -0
  29. package/lib/contracts/ContractContext.cjs +85 -0
  30. package/lib/contracts/ContractContext.d.ts +64 -0
  31. package/lib/contracts/ContractPrivateDataAdapter.cjs +281 -0
  32. package/lib/contracts/ContractPrivateDataAdapter.d.ts +74 -0
  33. package/lib/contracts/FabricConstruction.cjs +441 -0
  34. package/lib/contracts/FabricConstruction.d.ts +304 -0
  35. package/lib/contracts/FabricContractRepository.cjs +306 -0
  36. package/lib/contracts/FabricContractRepository.d.ts +162 -0
  37. package/lib/contracts/FabricContractRepositoryObservableHandler.cjs +85 -0
  38. package/lib/contracts/FabricContractRepositoryObservableHandler.d.ts +62 -0
  39. package/lib/contracts/FabricContractSequence.cjs +139 -0
  40. package/lib/contracts/FabricContractSequence.d.ts +61 -0
  41. package/lib/contracts/FabricContractStatement.cjs +119 -0
  42. package/lib/contracts/FabricContractStatement.d.ts +34 -0
  43. package/lib/contracts/PrivateSequence.cjs +36 -0
  44. package/lib/contracts/PrivateSequence.d.ts +15 -0
  45. package/lib/contracts/crud/crud-contract.cjs +257 -0
  46. package/lib/contracts/crud/crud-contract.d.ts +168 -0
  47. package/lib/contracts/crud/index.cjs +19 -0
  48. package/lib/contracts/crud/index.d.ts +2 -0
  49. package/lib/contracts/crud/serialized-crud-contract.cjs +172 -0
  50. package/lib/contracts/crud/serialized-crud-contract.d.ts +37 -0
  51. package/lib/contracts/erc20/erc20contract.cjs +569 -0
  52. package/lib/contracts/erc20/erc20contract.d.ts +151 -0
  53. package/lib/contracts/erc20/index.cjs +21 -0
  54. package/lib/contracts/erc20/index.d.ts +2 -0
  55. package/lib/contracts/erc20/models.cjs +209 -0
  56. package/lib/contracts/erc20/models.d.ts +114 -0
  57. package/lib/contracts/index.cjs +32 -0
  58. package/lib/contracts/index.d.ts +15 -0
  59. package/lib/contracts/logging.cjs +96 -0
  60. package/lib/contracts/logging.d.ts +49 -0
  61. package/lib/contracts/private-data.cjs +121 -0
  62. package/lib/contracts/private-data.d.ts +16 -0
  63. package/lib/contracts/types.cjs +3 -0
  64. package/lib/contracts/types.d.ts +26 -0
  65. package/lib/esm/client/FabricClientAdapter.d.ts +381 -0
  66. package/lib/esm/client/FabricClientAdapter.js +723 -0
  67. package/lib/esm/client/FabricClientDispatch.d.ts +125 -0
  68. package/lib/esm/client/FabricClientDispatch.js +182 -0
  69. package/lib/esm/client/FabricClientRepository.d.ts +100 -0
  70. package/lib/esm/client/FabricClientRepository.js +127 -0
  71. package/lib/esm/client/erc20/erc20ClientRepository.d.ts +254 -0
  72. package/lib/esm/client/erc20/erc20ClientRepository.js +339 -0
  73. package/lib/esm/client/fabric-fs.d.ts +92 -0
  74. package/lib/esm/client/fabric-fs.js +191 -0
  75. package/lib/esm/client/index.d.ts +13 -0
  76. package/lib/esm/client/index.js +14 -0
  77. package/lib/esm/client/logging.d.ts +60 -0
  78. package/lib/esm/client/logging.js +98 -0
  79. package/lib/esm/client/services/LoggedService.d.ts +42 -0
  80. package/lib/esm/client/services/LoggedService.js +43 -0
  81. package/lib/esm/client/services/constants.d.ts +15 -0
  82. package/lib/esm/client/services/constants.js +2 -0
  83. package/lib/esm/client/services/enrollementService.d.ts +176 -0
  84. package/lib/esm/client/services/enrollementService.js +337 -0
  85. package/lib/esm/client/services/index.d.ts +1 -0
  86. package/lib/esm/client/services/index.js +2 -0
  87. package/lib/esm/contracts/ContractAdapter.d.ts +296 -0
  88. package/lib/esm/contracts/ContractAdapter.js +724 -0
  89. package/lib/esm/contracts/ContractContext.d.ts +64 -0
  90. package/lib/esm/contracts/ContractContext.js +81 -0
  91. package/lib/esm/contracts/ContractPrivateDataAdapter.d.ts +74 -0
  92. package/lib/esm/contracts/ContractPrivateDataAdapter.js +277 -0
  93. package/lib/esm/contracts/FabricConstruction.d.ts +304 -0
  94. package/lib/esm/contracts/FabricConstruction.js +433 -0
  95. package/lib/esm/contracts/FabricContractRepository.d.ts +162 -0
  96. package/lib/esm/contracts/FabricContractRepository.js +302 -0
  97. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.d.ts +62 -0
  98. package/lib/esm/contracts/FabricContractRepositoryObservableHandler.js +81 -0
  99. package/lib/esm/contracts/FabricContractSequence.d.ts +61 -0
  100. package/lib/esm/contracts/FabricContractSequence.js +135 -0
  101. package/lib/esm/contracts/FabricContractStatement.d.ts +34 -0
  102. package/lib/esm/contracts/FabricContractStatement.js +115 -0
  103. package/lib/esm/contracts/PrivateSequence.d.ts +15 -0
  104. package/lib/esm/contracts/PrivateSequence.js +33 -0
  105. package/lib/esm/contracts/crud/crud-contract.d.ts +168 -0
  106. package/lib/esm/contracts/crud/crud-contract.js +253 -0
  107. package/lib/esm/contracts/crud/index.d.ts +2 -0
  108. package/lib/esm/contracts/crud/index.js +3 -0
  109. package/lib/esm/contracts/crud/serialized-crud-contract.d.ts +37 -0
  110. package/lib/esm/contracts/crud/serialized-crud-contract.js +168 -0
  111. package/lib/esm/contracts/erc20/erc20contract.d.ts +151 -0
  112. package/lib/esm/contracts/erc20/erc20contract.js +565 -0
  113. package/lib/esm/contracts/erc20/index.d.ts +2 -0
  114. package/lib/esm/contracts/erc20/index.js +4 -0
  115. package/lib/esm/contracts/erc20/models.d.ts +114 -0
  116. package/lib/esm/contracts/erc20/models.js +206 -0
  117. package/lib/esm/contracts/index.d.ts +15 -0
  118. package/lib/esm/contracts/index.js +16 -0
  119. package/lib/esm/contracts/logging.d.ts +49 -0
  120. package/lib/esm/contracts/logging.js +92 -0
  121. package/lib/esm/contracts/private-data.d.ts +16 -0
  122. package/lib/esm/contracts/private-data.js +113 -0
  123. package/lib/esm/contracts/types.d.ts +26 -0
  124. package/lib/esm/contracts/types.js +2 -0
  125. package/lib/esm/index.d.ts +8 -0
  126. package/lib/esm/index.js +9 -0
  127. package/lib/esm/shared/ClientSerializer.d.ts +52 -0
  128. package/lib/esm/shared/ClientSerializer.js +80 -0
  129. package/lib/esm/shared/DeterministicSerializer.d.ts +40 -0
  130. package/lib/esm/shared/DeterministicSerializer.js +50 -0
  131. package/lib/esm/shared/SimpleDeterministicSerializer.d.ts +7 -0
  132. package/lib/esm/shared/SimpleDeterministicSerializer.js +42 -0
  133. package/lib/esm/shared/constants.d.ts +39 -0
  134. package/lib/esm/shared/constants.js +42 -0
  135. package/lib/esm/shared/crypto.d.ts +107 -0
  136. package/lib/esm/shared/crypto.js +331 -0
  137. package/lib/esm/shared/decorators.d.ts +24 -0
  138. package/lib/esm/shared/decorators.js +98 -0
  139. package/lib/esm/shared/erc20/erc20-constants.d.ts +25 -0
  140. package/lib/esm/shared/erc20/erc20-constants.js +27 -0
  141. package/lib/esm/shared/errors.d.ts +116 -0
  142. package/lib/esm/shared/errors.js +132 -0
  143. package/lib/esm/shared/events.d.ts +39 -0
  144. package/lib/esm/shared/events.js +47 -0
  145. package/lib/esm/shared/fabric-types.d.ts +33 -0
  146. package/lib/esm/shared/fabric-types.js +2 -0
  147. package/lib/esm/shared/index.d.ts +13 -0
  148. package/lib/esm/shared/index.js +14 -0
  149. package/lib/esm/shared/interfaces/Checkable.d.ts +21 -0
  150. package/lib/esm/shared/interfaces/Checkable.js +2 -0
  151. package/lib/esm/shared/math.d.ts +34 -0
  152. package/lib/esm/shared/math.js +61 -0
  153. package/lib/esm/shared/model/Identity.d.ts +42 -0
  154. package/lib/esm/shared/model/Identity.js +78 -0
  155. package/lib/esm/shared/model/IdentityCredentials.d.ts +41 -0
  156. package/lib/esm/shared/model/IdentityCredentials.js +74 -0
  157. package/lib/esm/shared/model/index.d.ts +1 -0
  158. package/lib/esm/shared/model/index.js +2 -0
  159. package/lib/esm/shared/model/utils.d.ts +60 -0
  160. package/lib/esm/shared/model/utils.js +108 -0
  161. package/lib/esm/shared/types.d.ts +79 -0
  162. package/lib/esm/shared/types.js +2 -0
  163. package/lib/esm/shared/utils.d.ts +55 -0
  164. package/lib/esm/shared/utils.js +148 -0
  165. package/lib/index.cjs +25 -0
  166. package/lib/index.d.ts +8 -0
  167. package/lib/shared/ClientSerializer.cjs +84 -0
  168. package/lib/shared/ClientSerializer.d.ts +52 -0
  169. package/lib/shared/DeterministicSerializer.cjs +54 -0
  170. package/lib/shared/DeterministicSerializer.d.ts +40 -0
  171. package/lib/shared/SimpleDeterministicSerializer.cjs +46 -0
  172. package/lib/shared/SimpleDeterministicSerializer.d.ts +7 -0
  173. package/lib/shared/constants.cjs +45 -0
  174. package/lib/shared/constants.d.ts +39 -0
  175. package/lib/shared/crypto.cjs +369 -0
  176. package/lib/shared/crypto.d.ts +107 -0
  177. package/lib/shared/decorators.cjs +105 -0
  178. package/lib/shared/decorators.d.ts +24 -0
  179. package/lib/shared/erc20/erc20-constants.cjs +30 -0
  180. package/lib/shared/erc20/erc20-constants.d.ts +25 -0
  181. package/lib/shared/errors.cjs +142 -0
  182. package/lib/shared/errors.d.ts +116 -0
  183. package/lib/shared/events.cjs +51 -0
  184. package/lib/shared/events.d.ts +39 -0
  185. package/lib/shared/fabric-types.cjs +4 -0
  186. package/lib/shared/fabric-types.d.ts +33 -0
  187. package/lib/shared/index.cjs +30 -0
  188. package/lib/shared/index.d.ts +13 -0
  189. package/lib/shared/interfaces/Checkable.cjs +3 -0
  190. package/lib/shared/interfaces/Checkable.d.ts +21 -0
  191. package/lib/shared/math.cjs +66 -0
  192. package/lib/shared/math.d.ts +34 -0
  193. package/lib/shared/model/Identity.cjs +81 -0
  194. package/lib/shared/model/Identity.d.ts +42 -0
  195. package/lib/shared/model/IdentityCredentials.cjs +77 -0
  196. package/lib/shared/model/IdentityCredentials.d.ts +41 -0
  197. package/lib/shared/model/index.cjs +18 -0
  198. package/lib/shared/model/index.d.ts +1 -0
  199. package/lib/shared/model/utils.cjs +114 -0
  200. package/lib/shared/model/utils.d.ts +60 -0
  201. package/lib/shared/types.cjs +3 -0
  202. package/lib/shared/types.d.ts +79 -0
  203. package/lib/shared/utils.cjs +185 -0
  204. package/lib/shared/utils.d.ts +55 -0
  205. 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=