@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,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.CoreUtils = void 0;
|
|
37
|
+
const decorator_validation_1 = require("@decaf-ts/decorator-validation");
|
|
38
|
+
const logging_1 = require("@decaf-ts/logging");
|
|
39
|
+
const utils_1 = require("@decaf-ts/utils");
|
|
40
|
+
const fabric_gateway_1 = require("@hyperledger/fabric-gateway");
|
|
41
|
+
const fabric_common_1 = require("fabric-common");
|
|
42
|
+
/**
|
|
43
|
+
* @description Core utilities for interacting with files, crypto identities, and Fabric SDK helpers
|
|
44
|
+
* @summary Provides static helper methods to read credentials and keys from disk or raw content, construct Fabric gateway Identities and Signers, and perform common filesystem operations used by the Fabric client tooling.
|
|
45
|
+
* @class CoreUtils
|
|
46
|
+
* @example
|
|
47
|
+
* // Read an identity and signer from directories
|
|
48
|
+
* const identity = await CoreUtils.getIdentity('Org1MSP', '/msp/signcerts');
|
|
49
|
+
* const signer = await CoreUtils.getSigner('/msp/keystore');
|
|
50
|
+
* // Build a CA user
|
|
51
|
+
* const user = await CoreUtils.getCAUser('appUser', pemKey, pemCert, 'Org1MSP');
|
|
52
|
+
*/
|
|
53
|
+
class CoreUtils {
|
|
54
|
+
static { this.logger = logging_1.Logging.for(CoreUtils.name); }
|
|
55
|
+
constructor() { }
|
|
56
|
+
/**
|
|
57
|
+
* @description Resolve file content from a path or return provided raw content
|
|
58
|
+
* @summary If the input is a Uint8Array or PEM content, returns it as-is; otherwise uses a provided async fileReader to load the content from disk.
|
|
59
|
+
* @param {string|Uint8Array} contentOrPath - Either a raw content buffer/string or a filesystem path
|
|
60
|
+
* @param {function(string): Promise<string|Uint8Array|Buffer>} fileReader - Async function to read file content when a path is provided
|
|
61
|
+
* @return {Promise<string|Uint8Array|Buffer>} The content to be used downstream
|
|
62
|
+
*/
|
|
63
|
+
static async contentOfLoadFile(contentOrPath, fileReader) {
|
|
64
|
+
if (contentOrPath instanceof Uint8Array)
|
|
65
|
+
return contentOrPath;
|
|
66
|
+
if (contentOrPath.match(/-----BEGIN (CERTIFICATE|KEY|PRIVATE KEY)-----.+?-----END \1-----$/gms))
|
|
67
|
+
return contentOrPath;
|
|
68
|
+
return await fileReader(contentOrPath);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* @description Read file content from a path or return provided Buffer
|
|
72
|
+
* @summary Convenience wrapper that loads a file using fs.promises when a path string is provided; otherwise returns the given Buffer directly.
|
|
73
|
+
* @param {string|Buffer} contentOrPath - Path to a file on disk or an already-loaded Buffer
|
|
74
|
+
* @return {Promise<string|Uint8Array|Buffer>} The file content as a Buffer/string depending on reader
|
|
75
|
+
*/
|
|
76
|
+
static async readFile(contentOrPath) {
|
|
77
|
+
if (typeof contentOrPath !== "string")
|
|
78
|
+
return contentOrPath;
|
|
79
|
+
const fileReader = async (path) => {
|
|
80
|
+
const { promises } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("fs"))));
|
|
81
|
+
return await promises.readFile(path);
|
|
82
|
+
};
|
|
83
|
+
return await fileReader(contentOrPath);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* @description Create a Fabric CA User object with enrollment
|
|
87
|
+
* @summary Constructs a fabric-common User, sets a crypto suite, imports the provided private key, and sets enrollment with certificate and MSP ID.
|
|
88
|
+
* @param {string} userName - The user name for the CA user
|
|
89
|
+
* @param {string} privateKey - PEM-encoded private key
|
|
90
|
+
* @param {string} certificate - PEM-encoded X.509 certificate
|
|
91
|
+
* @param {string} mspId - Membership Service Provider identifier
|
|
92
|
+
* @return {Promise<User>} The enrolled Fabric User instance
|
|
93
|
+
*/
|
|
94
|
+
static async getCAUser(userName, privateKey, certificate, mspId) {
|
|
95
|
+
this.logger.debug((0, decorator_validation_1.stringFormat)("Creating CA {0} user {1} with certificate {2}", mspId, userName, certificate));
|
|
96
|
+
const user = new fabric_common_1.User(userName);
|
|
97
|
+
const cryptoSuite = fabric_common_1.User.newCryptoSuite();
|
|
98
|
+
user.setCryptoSuite(cryptoSuite);
|
|
99
|
+
const importedKey = cryptoSuite.createKeyFromRaw(privateKey);
|
|
100
|
+
await user.setEnrollment(importedKey, certificate, mspId);
|
|
101
|
+
return user;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* @description Build a Fabric Gateway Identity from an MSP ID and certificate
|
|
105
|
+
* @summary Reads a certificate from a directory path or accepts raw content and returns an Identity object suitable for the Fabric Gateway.
|
|
106
|
+
* @param {string} mspId - Membership Service Provider ID
|
|
107
|
+
* @param {string} certDirectoryPath - Path to a directory containing the certificate file, or PEM content
|
|
108
|
+
* @return {Promise<Identity>} The identity containing mspId and certificate credentials
|
|
109
|
+
*/
|
|
110
|
+
static async getIdentity(mspId, certDirectoryPath) {
|
|
111
|
+
const identityFileReader = async (path) => {
|
|
112
|
+
const { promises } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("fs"))));
|
|
113
|
+
const certPath = await this.getFirstDirFileName(path);
|
|
114
|
+
const credentials = await promises.readFile(certPath);
|
|
115
|
+
return credentials;
|
|
116
|
+
};
|
|
117
|
+
const credentials = (await this.contentOfLoadFile(certDirectoryPath, identityFileReader));
|
|
118
|
+
return { mspId, credentials };
|
|
119
|
+
}
|
|
120
|
+
static async getFirstDirFileName(dirPath) {
|
|
121
|
+
const { promises } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("fs"))));
|
|
122
|
+
const { join } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("path"))));
|
|
123
|
+
const files = await promises.readdir(dirPath);
|
|
124
|
+
return join(dirPath, files[0]);
|
|
125
|
+
}
|
|
126
|
+
static async getFirstDirFileNameContent(dirPath) {
|
|
127
|
+
const { promises } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("fs"))));
|
|
128
|
+
const { join } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("path"))));
|
|
129
|
+
const files = await promises.readdir(dirPath);
|
|
130
|
+
return (await promises.readFile(join(dirPath, files[0]))).toString();
|
|
131
|
+
}
|
|
132
|
+
static async getFileContent(filePath) {
|
|
133
|
+
const { promises } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("fs"))));
|
|
134
|
+
return (await promises.readFile(filePath)).toString();
|
|
135
|
+
}
|
|
136
|
+
static async getSigner(keyDirectoryPath) {
|
|
137
|
+
const signerFileReader = async (path) => {
|
|
138
|
+
const { promises } = await (0, utils_1.normalizeImport)(Promise.resolve().then(() => __importStar(require("fs"))));
|
|
139
|
+
const keyPath = await this.getFirstDirFileName(path);
|
|
140
|
+
return await promises.readFile(keyPath);
|
|
141
|
+
};
|
|
142
|
+
const privateKeyPem = (await this.contentOfLoadFile(keyDirectoryPath, signerFileReader));
|
|
143
|
+
const privateKey = await this.extractPrivateKey(privateKeyPem);
|
|
144
|
+
const keys = Object.getOwnPropertySymbols(privateKey);
|
|
145
|
+
const k = privateKey[keys[0]];
|
|
146
|
+
// --
|
|
147
|
+
return fabric_gateway_1.signers.newPrivateKeySigner(k);
|
|
148
|
+
}
|
|
149
|
+
static async extractPrivateKey(pem) {
|
|
150
|
+
const libName = "crypto";
|
|
151
|
+
let subtle;
|
|
152
|
+
if (globalThis.window &&
|
|
153
|
+
globalThis.window.Crypto) {
|
|
154
|
+
subtle = globalThis.Crypto.subtle;
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const lib = (await (0, utils_1.normalizeImport)(Promise.resolve(`${libName}`).then(s => __importStar(require(s)))));
|
|
158
|
+
subtle = lib.subtle || lib.webcrypto.subtle;
|
|
159
|
+
}
|
|
160
|
+
if (!subtle)
|
|
161
|
+
throw new Error("Could not load SubtleCrypto module");
|
|
162
|
+
function str2ab(str) {
|
|
163
|
+
const buf = new ArrayBuffer(str.length);
|
|
164
|
+
const bufView = new Uint8Array(buf);
|
|
165
|
+
for (let i = 0, strLen = str.length; i < strLen; i++) {
|
|
166
|
+
bufView[i] = str.charCodeAt(i);
|
|
167
|
+
}
|
|
168
|
+
return buf;
|
|
169
|
+
}
|
|
170
|
+
const str = pem
|
|
171
|
+
.toString("utf8")
|
|
172
|
+
.replace("-----BEGIN PRIVATE KEY-----", "")
|
|
173
|
+
.replaceAll("\n", "")
|
|
174
|
+
.replace("-----END PRIVATE KEY-----", "");
|
|
175
|
+
const decoded = Buffer.from(str, "base64").toString("binary");
|
|
176
|
+
const binaryDer = str2ab(decoded);
|
|
177
|
+
const key = await subtle.importKey("pkcs8", binaryDer, {
|
|
178
|
+
name: "ECDSA",
|
|
179
|
+
namedCurve: "P-256",
|
|
180
|
+
}, true, ["sign"]);
|
|
181
|
+
return key;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
exports.CoreUtils = CoreUtils;
|
|
185
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2hhcmVkL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHlFQUE4RDtBQUM5RCwrQ0FBb0Q7QUFDcEQsMkNBQWtEO0FBQ2xELGdFQUF3RTtBQUN4RSxpREFBcUM7QUFFckM7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEsU0FBUzthQUNMLFdBQU0sR0FBVyxpQkFBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFNUQsZ0JBQXVCLENBQUM7SUFFeEI7Ozs7OztPQU1HO0lBQ0ssTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FDcEMsYUFBa0MsRUFDbEMsVUFBbUU7UUFFbkUsSUFBSSxhQUFhLFlBQVksVUFBVTtZQUFFLE9BQU8sYUFBYSxDQUFDO1FBQzlELElBQ0UsYUFBYSxDQUFDLEtBQUssQ0FDakIsc0VBQXNFLENBQ3ZFO1lBRUQsT0FBTyxhQUFhLENBQUM7UUFDdkIsT0FBTyxNQUFNLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxhQUE4QjtRQUNsRCxJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVE7WUFBRSxPQUFPLGFBQWEsQ0FBQztRQUU1RCxNQUFNLFVBQVUsR0FBRyxLQUFLLEVBQUUsSUFBWSxFQUFFLEVBQUU7WUFDeEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLE1BQU0sSUFBQSx1QkFBZSxvREFBUSxJQUFJLElBQUUsQ0FBQztZQUN6RCxPQUFPLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUM7UUFFRixPQUFPLE1BQU0sVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFF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QU0sQ0FBQyxTQUFTLENBQ2hDLE9BQU8sRUFDUCxTQUFTLEVBQ1Q7WUFDRSxJQUFJLEVBQUUsT0FBTztZQUNiLFVBQVUsRUFBRSxPQUFPO1NBQ3BCLEVBQ0QsSUFBSSxFQUNKLENBQUMsTUFBTSxDQUFDLENBQ1QsQ0FBQztRQUVGLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzs7QUFyTEgsOEJBc0xDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaW5nRm9ybWF0IH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgTG9nZ2VyLCBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgeyBub3JtYWxpemVJbXBvcnQgfSBmcm9tIFwiQGRlY2FmLXRzL3V0aWxzXCI7XG5pbXBvcnQgeyBJZGVudGl0eSwgU2lnbmVyLCBzaWduZXJzIH0gZnJvbSBcIkBoeXBlcmxlZGdlci9mYWJyaWMtZ2F0ZXdheVwiO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gXCJmYWJyaWMtY29tbW9uXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvcmUgdXRpbGl0aWVzIGZvciBpbnRlcmFjdGluZyB3aXRoIGZpbGVzLCBjcnlwdG8gaWRlbnRpdGllcywgYW5kIEZhYnJpYyBTREsgaGVscGVyc1xuICogQHN1bW1hcnkgUHJvdmlkZXMgc3RhdGljIGhlbHBlciBtZXRob2RzIHRvIHJlYWQgY3JlZGVudGlhbHMgYW5kIGtleXMgZnJvbSBkaXNrIG9yIHJhdyBjb250ZW50LCBjb25zdHJ1Y3QgRmFicmljIGdhdGV3YXkgSWRlbnRpdGllcyBhbmQgU2lnbmVycywgYW5kIHBlcmZvcm0gY29tbW9uIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyB1c2VkIGJ5IHRoZSBGYWJyaWMgY2xpZW50IHRvb2xpbmcuXG4gKiBAY2xhc3MgQ29yZVV0aWxzXG4gKiBAZXhhbXBsZVxuICogLy8gUmVhZCBhbiBpZGVudGl0eSBhbmQgc2lnbmVyIGZyb20gZGlyZWN0b3JpZXNcbiAqIGNvbnN0IGlkZW50aXR5ID0gYXdhaXQgQ29yZVV0aWxzLmdldElkZW50aXR5KCdPcmcxTVNQJywgJy9tc3Avc2lnbmNlcnRzJyk7XG4gKiBjb25zdCBzaWduZXIgPSBhd2FpdCBDb3JlVXRpbHMuZ2V0U2lnbmVyKCcvbXNwL2tleXN0b3JlJyk7XG4gKiAvLyBCdWlsZCBhIENBIHVzZXJcbiAqIGNvbnN0IHVzZXIgPSBhd2FpdCBDb3JlVXRpbHMuZ2V0Q0FVc2VyKCdhcHBVc2VyJywgcGVtS2V5LCBwZW1DZXJ0LCAnT3JnMU1TUCcpO1xuICovXG5leHBvcnQgY2xhc3MgQ29yZVV0aWxzIHtcbiAgcHJpdmF0ZSBzdGF0aWMgbG9nZ2VyOiBMb2dnZXIgPSBMb2dnaW5nLmZvcihDb3JlVXRpbHMubmFtZSk7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXNvbHZlIGZpbGUgY29udGVudCBmcm9tIGEgcGF0aCBvciByZXR1cm4gcHJvdmlkZWQgcmF3IGNvbnRlbnRcbiAgICogQHN1bW1hcnkgSWYgdGhlIGlucHV0IGlzIGEgVWludDhBcnJheSBvciBQRU0gY29udGVudCwgcmV0dXJucyBpdCBhcy1pczsgb3RoZXJ3aXNlIHVzZXMgYSBwcm92aWRlZCBhc3luYyBmaWxlUmVhZGVyIHRvIGxvYWQgdGhlIGNvbnRlbnQgZnJvbSBkaXNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ3xVaW50OEFycmF5fSBjb250ZW50T3JQYXRoIC0gRWl0aGVyIGEgcmF3IGNvbnRlbnQgYnVmZmVyL3N0cmluZyBvciBhIGZpbGVzeXN0ZW0gcGF0aFxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IFByb21pc2U8c3RyaW5nfFVpbnQ4QXJyYXl8QnVmZmVyPn0gZmlsZVJlYWRlciAtIEFzeW5jIGZ1bmN0aW9uIHRvIHJlYWQgZmlsZSBjb250ZW50IHdoZW4gYSBwYXRoIGlzIHByb3ZpZGVkXG4gICAqIEByZXR1cm4ge1Byb21pc2U8c3RyaW5nfFVpbnQ4QXJyYXl8QnVmZmVyPn0gVGhlIGNvbnRlbnQgdG8gYmUgdXNlZCBkb3duc3RyZWFtXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBhc3luYyBjb250ZW50T2ZMb2FkRmlsZShcbiAgICBjb250ZW50T3JQYXRoOiBzdHJpbmcgfCBVaW50OEFycmF5LFxuICAgIGZpbGVSZWFkZXI6IChwYXRoOiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nIHwgVWludDhBcnJheSB8IEJ1ZmZlcj5cbiAgKSB7XG4gICAgaWYgKGNvbnRlbnRPclBhdGggaW5zdGFuY2VvZiBVaW50OEFycmF5KSByZXR1cm4gY29udGVudE9yUGF0aDtcbiAgICBpZiAoXG4gICAgICBjb250ZW50T3JQYXRoLm1hdGNoKFxuICAgICAgICAvLS0tLS1CRUdJTiAoQ0VSVElGSUNBVEV8S0VZfFBSSVZBVEUgS0VZKS0tLS0tLis/LS0tLS1FTkQgXFwxLS0tLS0kL2dtc1xuICAgICAgKVxuICAgIClcbiAgICAgIHJldHVybiBjb250ZW50T3JQYXRoO1xuICAgIHJldHVybiBhd2FpdCBmaWxlUmVhZGVyKGNvbnRlbnRPclBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZWFkIGZpbGUgY29udGVudCBmcm9tIGEgcGF0aCBvciByZXR1cm4gcHJvdmlkZWQgQnVmZmVyXG4gICAqIEBzdW1tYXJ5IENvbnZlbmllbmNlIHdyYXBwZXIgdGhhdCBsb2FkcyBhIGZpbGUgdXNpbmcgZnMucHJvbWlzZXMgd2hlbiBhIHBhdGggc3RyaW5nIGlzIHByb3ZpZGVkOyBvdGhlcndpc2UgcmV0dXJucyB0aGUgZ2l2ZW4gQnVmZmVyIGRpcmVjdGx5LlxuICAgKiBAcGFyYW0ge3N0cmluZ3xCdWZmZXJ9IGNvbnRlbnRPclBhdGggLSBQYXRoIHRvIGEgZmlsZSBvbiBkaXNrIG9yIGFuIGFscmVhZHktbG9hZGVkIEJ1ZmZlclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPHN0cmluZ3xVaW50OEFycmF5fEJ1ZmZlcj59IFRoZSBmaWxlIGNvbnRlbnQgYXMgYSBCdWZmZXIvc3RyaW5nIGRlcGVuZGluZyBvbiByZWFkZXJcbiAgICovXG4gIHN0YXRpYyBhc3luYyByZWFkRmlsZShjb250ZW50T3JQYXRoOiBzdHJpbmcgfCBCdWZmZXIpIHtcbiAgICBpZiAodHlwZW9mIGNvbnRlbnRPclBhdGggIT09IFwic3RyaW5nXCIpIHJldHVybiBjb250ZW50T3JQYXRoO1xuXG4gICAgY29uc3QgZmlsZVJlYWRlciA9IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgcHJvbWlzZXMgfSA9IGF3YWl0IG5vcm1hbGl6ZUltcG9ydChpbXBvcnQoXCJmc1wiKSk7XG4gICAgICByZXR1cm4gYXdhaXQgcHJvbWlzZXMucmVhZEZpbGUocGF0aCk7XG4gICAgfTtcblxuICAgIHJldHVybiBhd2FpdCBmaWxlUmVhZGVyKGNvbnRlbnRPclBhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDcmVhdGUgYSBGYWJyaWMgQ0EgVXNlciBvYmplY3Qgd2l0aCBlbnJvbGxtZW50XG4gICAqIEBzdW1tYXJ5IENvbnN0cnVjdHMgYSBmYWJyaWMtY29tbW9uIFVzZXIsIHNldHMgYSBjcnlwdG8gc3VpdGUsIGltcG9ydHMgdGhlIHByb3ZpZGVkIHByaXZhdGUga2V5LCBhbmQgc2V0cyBlbnJvbGxtZW50IHdpdGggY2VydGlmaWNhdGUgYW5kIE1TUCBJRC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVzZXJOYW1lIC0gVGhlIHVzZXIgbmFtZSBmb3IgdGhlIENBIHVzZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHByaXZhdGVLZXkgLSBQRU0tZW5jb2RlZCBwcml2YXRlIGtleVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2VydGlmaWNhdGUgLSBQRU0tZW5jb2RlZCBYLjUwOSBjZXJ0aWZpY2F0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbXNwSWQgLSBNZW1iZXJzaGlwIFNlcnZpY2UgUHJvdmlkZXIgaWRlbnRpZmllclxuICAgKiBAcmV0dXJuIHtQcm9taXNlPFVzZXI+fSBUaGUgZW5yb2xsZWQgRmFicmljIFVzZXIgaW5zdGFuY2VcbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXRDQVVzZXIoXG4gICAgdXNlck5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlS2V5OiBzdHJpbmcsXG4gICAgY2VydGlmaWNhdGU6IHN0cmluZyxcbiAgICBtc3BJZDogc3RyaW5nXG4gICk6IFByb21pc2U8VXNlcj4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKFxuICAgICAgc3RyaW5nRm9ybWF0KFxuICAgICAgICBcIkNyZWF0aW5nIENBIHswfSB1c2VyIHsxfSB3aXRoIGNlcnRpZmljYXRlIHsyfVwiLFxuICAgICAgICBtc3BJZCxcbiAgICAgICAgdXNlck5hbWUsXG4gICAgICAgIGNlcnRpZmljYXRlXG4gICAgICApXG4gICAgKTtcbiAgICBjb25zdCB1c2VyID0gbmV3IFVzZXIodXNlck5hbWUpO1xuICAgIGNvbnN0IGNyeXB0b1N1aXRlID0gVXNlci5uZXdDcnlwdG9TdWl0ZSgpO1xuICAgIHVzZXIuc2V0Q3J5cHRvU3VpdGUoY3J5cHRvU3VpdGUpO1xuICAgIGNvbnN0IGltcG9ydGVkS2V5ID0gY3J5cHRvU3VpdGUuY3JlYXRlS2V5RnJvbVJhdyhwcml2YXRlS2V5KTtcbiAgICBhd2FpdCB1c2VyLnNldEVucm9sbG1lbnQoaW1wb3J0ZWRLZXksIGNlcnRpZmljYXRlLCBtc3BJZCk7XG4gICAgcmV0dXJuIHVzZXI7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEJ1aWxkIGEgRmFicmljIEdhdGV3YXkgSWRlbnRpdHkgZnJvbSBhbiBNU1AgSUQgYW5kIGNlcnRpZmljYXRlXG4gICAqIEBzdW1tYXJ5IFJlYWRzIGEgY2VydGlmaWNhdGUgZnJvbSBhIGRpcmVjdG9yeSBwYXRoIG9yIGFjY2VwdHMgcmF3IGNvbnRlbnQgYW5kIHJldHVybnMgYW4gSWRlbnRpdHkgb2JqZWN0IHN1aXRhYmxlIGZvciB0aGUgRmFicmljIEdhdGV3YXkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtc3BJZCAtIE1lbWJlcnNoaXAgU2VydmljZSBQcm92aWRlciBJRFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2VydERpcmVjdG9yeVBhdGggLSBQYXRoIHRvIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGNlcnRpZmljYXRlIGZpbGUsIG9yIFBFTSBjb250ZW50XG4gICAqIEByZXR1cm4ge1Byb21pc2U8SWRlbnRpdHk+fSBUaGUgaWRlbnRpdHkgY29udGFpbmluZyBtc3BJZCBhbmQgY2VydGlmaWNhdGUgY3JlZGVudGlhbHNcbiAgICovXG4gIHN0YXRpYyBhc3luYyBnZXRJZGVudGl0eShcbiAgICBtc3BJZDogc3RyaW5nLFxuICAgIGNlcnREaXJlY3RvcnlQYXRoOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxJZGVudGl0eT4ge1xuICAgIGNvbnN0IGlkZW50aXR5RmlsZVJlYWRlciA9IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgcHJvbWlzZXMgfSA9IGF3YWl0IG5vcm1hbGl6ZUltcG9ydChpbXBvcnQoXCJmc1wiKSk7XG4gICAgICBjb25zdCBjZXJ0UGF0aCA9IGF3YWl0IHRoaXMuZ2V0Rmlyc3REaXJGaWxlTmFtZShwYXRoKTtcbiAgICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gYXdhaXQgcHJvbWlzZXMucmVhZEZpbGUoY2VydFBhdGgpO1xuICAgICAgcmV0dXJuIGNyZWRlbnRpYWxzO1xuICAgIH07XG5cbiAgICBjb25zdCBjcmVkZW50aWFsczogVWludDhBcnJheSA9IChhd2FpdCB0aGlzLmNvbnRlbnRPZkxvYWRGaWxlKFxuICAgICAgY2VydERpcmVjdG9yeVBhdGgsXG4gICAgICBpZGVudGl0eUZpbGVSZWFkZXJcbiAgICApKSBhcyBVaW50OEFycmF5O1xuXG4gICAgcmV0dXJuIHsgbXNwSWQsIGNyZWRlbnRpYWxzIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0Rmlyc3REaXJGaWxlTmFtZShkaXJQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgcHJvbWlzZXMgfSA9IGF3YWl0IG5vcm1hbGl6ZUltcG9ydChpbXBvcnQoXCJmc1wiKSk7XG4gICAgY29uc3QgeyBqb2luIH0gPSBhd2FpdCBub3JtYWxpemVJbXBvcnQoaW1wb3J0KFwicGF0aFwiKSk7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBwcm9taXNlcy5yZWFkZGlyKGRpclBhdGgpO1xuICAgIHJldHVybiBqb2luKGRpclBhdGgsIGZpbGVzWzBdKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBnZXRGaXJzdERpckZpbGVOYW1lQ29udGVudChkaXJQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgcHJvbWlzZXMgfSA9IGF3YWl0IG5vcm1hbGl6ZUltcG9ydChpbXBvcnQoXCJmc1wiKSk7XG4gICAgY29uc3QgeyBqb2luIH0gPSBhd2FpdCBub3JtYWxpemVJbXBvcnQoaW1wb3J0KFwicGF0aFwiKSk7XG4gICAgY29uc3QgZmlsZXMgPSBhd2FpdCBwcm9taXNlcy5yZWFkZGlyKGRpclBhdGgpO1xuICAgIHJldHVybiAoYXdhaXQgcHJvbWlzZXMucmVhZEZpbGUoam9pbihkaXJQYXRoLCBmaWxlc1swXSkpKS50b1N0cmluZygpO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIGdldEZpbGVDb250ZW50KGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHsgcHJvbWlzZXMgfSA9IGF3YWl0IG5vcm1hbGl6ZUltcG9ydChpbXBvcnQoXCJmc1wiKSk7XG4gICAgcmV0dXJuIChhd2FpdCBwcm9taXNlcy5yZWFkRmlsZShmaWxlUGF0aCkpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0U2lnbmVyKGtleURpcmVjdG9yeVBhdGg6IHN0cmluZyk6IFByb21pc2U8U2lnbmVyPiB7XG4gICAgY29uc3Qgc2lnbmVyRmlsZVJlYWRlciA9IGFzeW5jIChwYXRoOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgcHJvbWlzZXMgfSA9IGF3YWl0IG5vcm1hbGl6ZUltcG9ydChpbXBvcnQoXCJmc1wiKSk7XG4gICAgICBjb25zdCBrZXlQYXRoID0gYXdhaXQgdGhpcy5nZXRGaXJzdERpckZpbGVOYW1lKHBhdGgpO1xuICAgICAgcmV0dXJuIGF3YWl0IHByb21pc2VzLnJlYWRGaWxlKGtleVBhdGgpO1xuICAgIH07XG5cbiAgICBjb25zdCBwcml2YXRlS2V5UGVtID0gKGF3YWl0IHRoaXMuY29udGVudE9mTG9hZEZpbGUoXG4gICAgICBrZXlEaXJlY3RvcnlQYXRoLFxuICAgICAgc2lnbmVyRmlsZVJlYWRlclxuICAgICkpIGFzIEJ1ZmZlcjtcbiAgICBjb25zdCBwcml2YXRlS2V5ID0gYXdhaXQgdGhpcy5leHRyYWN0UHJpdmF0ZUtleShwcml2YXRlS2V5UGVtKTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhwcml2YXRlS2V5KTtcbiAgICBjb25zdCBrID0gKHByaXZhdGVLZXkgYXMgYW55KVtrZXlzWzBdXTtcbiAgICAvLyAtLVxuXG4gICAgcmV0dXJuIHNpZ25lcnMubmV3UHJpdmF0ZUtleVNpZ25lcihrIGFzIGFueSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyBleHRyYWN0UHJpdmF0ZUtleShwZW06IEJ1ZmZlcikge1xuICAgIGNvbnN0IGxpYk5hbWUgPSBcImNyeXB0b1wiO1xuICAgIGxldCBzdWJ0bGU6IGFueTtcbiAgICBpZiAoXG4gICAgICAoZ2xvYmFsVGhpcyBhcyBhbnkpLndpbmRvdyAmJlxuICAgICAgKChnbG9iYWxUaGlzIGFzIGFueSkud2luZG93IGFzIHsgQ3J5cHRvOiBhbnkgfSkuQ3J5cHRvXG4gICAgKSB7XG4gICAgICBzdWJ0bGUgPSAoKGdsb2JhbFRoaXMgYXMgYW55KS5DcnlwdG8gYXMgYW55KS5zdWJ0bGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxpYiA9IChhd2FpdCBub3JtYWxpemVJbXBvcnQoaW1wb3J0KGxpYk5hbWUpKSkgYXMgYW55O1xuICAgICAgc3VidGxlID0gbGliLnN1YnRsZSB8fCBsaWIud2ViY3J5cHRvLnN1YnRsZTtcbiAgICB9XG5cbiAgICBpZiAoIXN1YnRsZSkgdGhyb3cgbmV3IEVycm9yKFwiQ291bGQgbm90IGxvYWQgU3VidGxlQ3J5cHRvIG1vZHVsZVwiKTtcblxuICAgIGZ1bmN0aW9uIHN0cjJhYihzdHI6IHN0cmluZykge1xuICAgICAgY29uc3QgYnVmID0gbmV3IEFycmF5QnVmZmVyKHN0ci5sZW5ndGgpO1xuICAgICAgY29uc3QgYnVmVmlldyA9IG5ldyBVaW50OEFycmF5KGJ1Zik7XG4gICAgICBmb3IgKGxldCBpID0gMCwgc3RyTGVuID0gc3RyLmxlbmd0aDsgaSA8IHN0ckxlbjsgaSsrKSB7XG4gICAgICAgIGJ1ZlZpZXdbaV0gPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBidWY7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyID0gcGVtXG4gICAgICAudG9TdHJpbmcoXCJ1dGY4XCIpXG4gICAgICAucmVwbGFjZShcIi0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLVwiLCBcIlwiKVxuICAgICAgLnJlcGxhY2VBbGwoXCJcXG5cIiwgXCJcIilcbiAgICAgIC5yZXBsYWNlKFwiLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLVwiLCBcIlwiKTtcbiAgICBjb25zdCBkZWNvZGVkID0gQnVmZmVyLmZyb20oc3RyLCBcImJhc2U2NFwiKS50b1N0cmluZyhcImJpbmFyeVwiKTtcbiAgICBjb25zdCBiaW5hcnlEZXIgPSBzdHIyYWIoZGVjb2RlZCk7XG4gICAgY29uc3Qga2V5ID0gYXdhaXQgc3VidGxlLmltcG9ydEtleShcbiAgICAgIFwicGtjczhcIixcbiAgICAgIGJpbmFyeURlcixcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJFQ0RTQVwiLFxuICAgICAgICBuYW1lZEN1cnZlOiBcIlAtMjU2XCIsXG4gICAgICB9LFxuICAgICAgdHJ1ZSxcbiAgICAgIFtcInNpZ25cIl1cbiAgICApO1xuXG4gICAgcmV0dXJuIGtleTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Identity, Signer } from "@hyperledger/fabric-gateway";
|
|
2
|
+
import { User } from "fabric-common";
|
|
3
|
+
/**
|
|
4
|
+
* @description Core utilities for interacting with files, crypto identities, and Fabric SDK helpers
|
|
5
|
+
* @summary Provides static helper methods to read credentials and keys from disk or raw content, construct Fabric gateway Identities and Signers, and perform common filesystem operations used by the Fabric client tooling.
|
|
6
|
+
* @class CoreUtils
|
|
7
|
+
* @example
|
|
8
|
+
* // Read an identity and signer from directories
|
|
9
|
+
* const identity = await CoreUtils.getIdentity('Org1MSP', '/msp/signcerts');
|
|
10
|
+
* const signer = await CoreUtils.getSigner('/msp/keystore');
|
|
11
|
+
* // Build a CA user
|
|
12
|
+
* const user = await CoreUtils.getCAUser('appUser', pemKey, pemCert, 'Org1MSP');
|
|
13
|
+
*/
|
|
14
|
+
export declare class CoreUtils {
|
|
15
|
+
private static logger;
|
|
16
|
+
private constructor();
|
|
17
|
+
/**
|
|
18
|
+
* @description Resolve file content from a path or return provided raw content
|
|
19
|
+
* @summary If the input is a Uint8Array or PEM content, returns it as-is; otherwise uses a provided async fileReader to load the content from disk.
|
|
20
|
+
* @param {string|Uint8Array} contentOrPath - Either a raw content buffer/string or a filesystem path
|
|
21
|
+
* @param {function(string): Promise<string|Uint8Array|Buffer>} fileReader - Async function to read file content when a path is provided
|
|
22
|
+
* @return {Promise<string|Uint8Array|Buffer>} The content to be used downstream
|
|
23
|
+
*/
|
|
24
|
+
private static contentOfLoadFile;
|
|
25
|
+
/**
|
|
26
|
+
* @description Read file content from a path or return provided Buffer
|
|
27
|
+
* @summary Convenience wrapper that loads a file using fs.promises when a path string is provided; otherwise returns the given Buffer directly.
|
|
28
|
+
* @param {string|Buffer} contentOrPath - Path to a file on disk or an already-loaded Buffer
|
|
29
|
+
* @return {Promise<string|Uint8Array|Buffer>} The file content as a Buffer/string depending on reader
|
|
30
|
+
*/
|
|
31
|
+
static readFile(contentOrPath: string | Buffer): Promise<Buffer<ArrayBufferLike>>;
|
|
32
|
+
/**
|
|
33
|
+
* @description Create a Fabric CA User object with enrollment
|
|
34
|
+
* @summary Constructs a fabric-common User, sets a crypto suite, imports the provided private key, and sets enrollment with certificate and MSP ID.
|
|
35
|
+
* @param {string} userName - The user name for the CA user
|
|
36
|
+
* @param {string} privateKey - PEM-encoded private key
|
|
37
|
+
* @param {string} certificate - PEM-encoded X.509 certificate
|
|
38
|
+
* @param {string} mspId - Membership Service Provider identifier
|
|
39
|
+
* @return {Promise<User>} The enrolled Fabric User instance
|
|
40
|
+
*/
|
|
41
|
+
static getCAUser(userName: string, privateKey: string, certificate: string, mspId: string): Promise<User>;
|
|
42
|
+
/**
|
|
43
|
+
* @description Build a Fabric Gateway Identity from an MSP ID and certificate
|
|
44
|
+
* @summary Reads a certificate from a directory path or accepts raw content and returns an Identity object suitable for the Fabric Gateway.
|
|
45
|
+
* @param {string} mspId - Membership Service Provider ID
|
|
46
|
+
* @param {string} certDirectoryPath - Path to a directory containing the certificate file, or PEM content
|
|
47
|
+
* @return {Promise<Identity>} The identity containing mspId and certificate credentials
|
|
48
|
+
*/
|
|
49
|
+
static getIdentity(mspId: string, certDirectoryPath: string): Promise<Identity>;
|
|
50
|
+
static getFirstDirFileName(dirPath: string): Promise<string>;
|
|
51
|
+
static getFirstDirFileNameContent(dirPath: string): Promise<string>;
|
|
52
|
+
static getFileContent(filePath: string): Promise<string>;
|
|
53
|
+
static getSigner(keyDirectoryPath: string): Promise<Signer>;
|
|
54
|
+
private static extractPrivateKey;
|
|
55
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@decaf-ts/for-fabric",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "template for ts projects",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"exports": {
|
|
7
|
+
"./client": {
|
|
8
|
+
"require": "./lib/client/index.cjs",
|
|
9
|
+
"import": "./lib/esm/client/index.js"
|
|
10
|
+
},
|
|
11
|
+
"./contracts": {
|
|
12
|
+
"require": "./lib/contracts/index.cjs",
|
|
13
|
+
"import": "./lib/esm/contracts/index.js"
|
|
14
|
+
},
|
|
15
|
+
"./shared": {
|
|
16
|
+
"require": "./lib/shared/index.cjs",
|
|
17
|
+
"import": "./lib/esm/shared/index.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"types": "lib/index.d.ts",
|
|
21
|
+
"scripts": {
|
|
22
|
+
"do-install": "NPM_TOKEN=$(cat .npmtoken) npm install",
|
|
23
|
+
"update-dependencies": "PREFIX=\"decaf-ts\"; npm ls | grep \"$PREFIX\" | awk -F/ '{print $NF}' | sed 's/@.*//' | xargs -I package npm update @\"$PREFIX\"/package",
|
|
24
|
+
"update-scripts": "npx update-scripts",
|
|
25
|
+
"on-first-run": "npx update-scripts --boot",
|
|
26
|
+
"set-git-auth": "git config url.\"https://api:$(cat .token)@github.com/\".insteadOf \"https://github.com/\" && git config url.\"https://ssh:$(cat .token)@github.com/\".insteadOf \"ssh://git@github.com/\" && git config url.\"https://git:$(cat .token)@github.com/\".insteadOf \"git@github.com:\"",
|
|
27
|
+
"flash-forward": "npx npm-check-updates -u && npm run do-install",
|
|
28
|
+
"reset": "rm -rf * && git checkout . && git pull && npm run do-install",
|
|
29
|
+
"build": "npx build-scripts --dev",
|
|
30
|
+
"build:prod": "npx build-scripts --prod",
|
|
31
|
+
"test": "jest --runInBand --coverage --detectOpenHandles",
|
|
32
|
+
"test:unit": "jest --testPathPattern=\"/tests/unit\" --passWithNoTests --detectOpenHandles",
|
|
33
|
+
"test:integration": "jest --testPathPattern=\"/tests/(integration)\" --passWithNoTests --detectOpenHandles",
|
|
34
|
+
"test:all": "jest --testPathPattern=\"/tests\" --passWithNoTests --detectOpenHandles",
|
|
35
|
+
"test:circular": "dpdm -T --no-warning --no-tree ./src/index.ts",
|
|
36
|
+
"coverage": "rimraf ./workdocs/reports/data/*.json && npm run test:all -- --coverage --config=./workdocs/reports/jest.coverage.config.ts",
|
|
37
|
+
"lint": "eslint .",
|
|
38
|
+
"lint-fix": "eslint --fix .",
|
|
39
|
+
"prepare-pr": "npm run lint-fix && npm run build:prod && npm run coverage && npm run docs",
|
|
40
|
+
"prepare-release": "npm run lint-fix && npm run build:prod && npm run docs",
|
|
41
|
+
"release": "./bin/tag-release.sh",
|
|
42
|
+
"clean-publish": "npx clean-publish",
|
|
43
|
+
"drawings": "for FILE in workdocs/drawings/*.drawio; do echo \"converting $FILE to image...\" && docker run --rm -v $(pwd):/data rlespinasse/drawio-export --format png $FILE; done && cp -rf workdocs/drawings/export/* workdocs/resources/",
|
|
44
|
+
"uml": "cd workdocs/uml && for FILE in ./*.puml; do docker run --rm -v $(pwd):/work -w /work miy4/plantuml -DPLANTUML_LIMIT_SIZE=8192 -tpng $FILE; done && cd ../.. && cp -fr workdocs/uml/*.png workdocs/resources/",
|
|
45
|
+
"docs": "npx rimraf ./docs && mkdir docs && npx build-scripts --docs",
|
|
46
|
+
"infrastructure:up": "docker compose -f ./docker/infrastructure/docker-compose.yaml up -d",
|
|
47
|
+
"infrastructure:down": "docker compose -f ./docker/infrastructure/docker-compose.yaml down --rmi local -v",
|
|
48
|
+
"publish-docs": "docker run -it --rm --user $(id -u):$(id -g) -v \"$(pwd)/workdocs/confluence:/content\" -e ATLASSIAN_API_TOKEN=$(cat .confluence-token) ghcr.io/markdown-confluence/publish:latest",
|
|
49
|
+
"copy-storage": "sudo cp -R docker/infrastructure/storage docker/docker-data/ && sudo chmod -R 755 docker/docker-data",
|
|
50
|
+
"repo:init": "codex exec \"$(cat ./.codex/prompts/repo-setup.md)\nbase_path is `./`, initialize the repository\"",
|
|
51
|
+
"repo:setup": "codex exec \"$(cat ./.codex/prompts/repo-setup.md)\nbase_path is ./\"",
|
|
52
|
+
"repo:doc": "codex exec \"$(cat ./.codex/prompts/doc.md) $(cat ./.codex/prompts/bulk-docs.md)\nbase_path is ./\"",
|
|
53
|
+
"repo:tests": "codex exec \"$(cat ./.codex/prompts/bulk-tests.md)\nbase_path is ./ and coverage is 95%\" -s workspace-write",
|
|
54
|
+
"repo:readme": "codex exec \"$(cat ./.codex/prompts/update-readme.md)\nbase_path is ./\"",
|
|
55
|
+
"repo:pr": "npm run repo:doc && npm run repo:tests && npm run repo:readme",
|
|
56
|
+
"sync-codex": "./bin/sync-codex.sh"
|
|
57
|
+
},
|
|
58
|
+
"repository": {
|
|
59
|
+
"type": "git",
|
|
60
|
+
"url": "git+https://github.com/decaf-ts/ts-workspace.git"
|
|
61
|
+
},
|
|
62
|
+
"engines": {
|
|
63
|
+
"node": ">=20.0.0",
|
|
64
|
+
"npm": ">=10.0.0"
|
|
65
|
+
},
|
|
66
|
+
"files": [
|
|
67
|
+
"lib",
|
|
68
|
+
"dist"
|
|
69
|
+
],
|
|
70
|
+
"keywords": [
|
|
71
|
+
"plantuml",
|
|
72
|
+
"mermaid",
|
|
73
|
+
"uml",
|
|
74
|
+
"drawio",
|
|
75
|
+
"mddocs",
|
|
76
|
+
"md",
|
|
77
|
+
"jsdoc",
|
|
78
|
+
"doc",
|
|
79
|
+
"docs",
|
|
80
|
+
"documentation",
|
|
81
|
+
"test",
|
|
82
|
+
"reports",
|
|
83
|
+
"confluence",
|
|
84
|
+
"ci/cd",
|
|
85
|
+
"ci",
|
|
86
|
+
"cd",
|
|
87
|
+
"template",
|
|
88
|
+
"typescript",
|
|
89
|
+
"ts"
|
|
90
|
+
],
|
|
91
|
+
"author": "Tiago Venceslau and Contributors",
|
|
92
|
+
"license": "MIT",
|
|
93
|
+
"bugs": {
|
|
94
|
+
"url": "https://github.com/decaf-ts/ts-workspace/issues"
|
|
95
|
+
},
|
|
96
|
+
"homepage": "https://github.com/decaf-ts/ts-workspace#readme",
|
|
97
|
+
"devDependencies": {
|
|
98
|
+
"@decaf-ts/fabric-weaver": "latest",
|
|
99
|
+
"@decaf-ts/utils": "latest",
|
|
100
|
+
"@eslint/js": "^9.25.1",
|
|
101
|
+
"@rollup/plugin-commonjs": "^28.0.3",
|
|
102
|
+
"@rollup/plugin-json": "^6.1.0",
|
|
103
|
+
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
104
|
+
"@rollup/plugin-typescript": "^12.1.2",
|
|
105
|
+
"@stylistic/eslint-plugin": "^4.2.0",
|
|
106
|
+
"@types/jest": "^29.5.14",
|
|
107
|
+
"clean-publish": "^5.1.0",
|
|
108
|
+
"dpdm": "^3.14.0",
|
|
109
|
+
"eslint": "^9.25.1",
|
|
110
|
+
"eslint-config-prettier": "^10.1.2",
|
|
111
|
+
"eslint-plugin-prettier": "^5.2.6",
|
|
112
|
+
"globals": "^16.0.0",
|
|
113
|
+
"jest": "^29.7.0",
|
|
114
|
+
"jest-html-reporters": "^3.1.7",
|
|
115
|
+
"jest-junit": "^16.0.0",
|
|
116
|
+
"jsdoc": "^4.0.4",
|
|
117
|
+
"jsdoc-mermaid": "^1.0.0",
|
|
118
|
+
"markdown-include": "^0.4.3",
|
|
119
|
+
"minimist": "^1.2.8",
|
|
120
|
+
"nodemon": "^3.1.9",
|
|
121
|
+
"npm-check-updates": "^18.0.0",
|
|
122
|
+
"prettier": "3.5.3",
|
|
123
|
+
"rimraf": "^6.0.1",
|
|
124
|
+
"rollup": "^4.40.0",
|
|
125
|
+
"ts-jest": "^29.3.2",
|
|
126
|
+
"ts-loader": "^9.5.2",
|
|
127
|
+
"ts-node": "^10.9.2",
|
|
128
|
+
"typescript": "^5.8.3",
|
|
129
|
+
"typescript-eslint": "^8.31.0"
|
|
130
|
+
},
|
|
131
|
+
"peerDependencies": {
|
|
132
|
+
"@decaf-ts/core": "latest",
|
|
133
|
+
"@decaf-ts/db-decorators": "latest",
|
|
134
|
+
"@decaf-ts/decorator-validation": "latest",
|
|
135
|
+
"@decaf-ts/for-couchdb": "latest",
|
|
136
|
+
"@decaf-ts/injectable-decorators": "latest",
|
|
137
|
+
"@decaf-ts/logging": "latest",
|
|
138
|
+
"@decaf-ts/reflection": "latest",
|
|
139
|
+
"@decaf-ts/transactional-decorators": "latest",
|
|
140
|
+
"reflect-metadata": "^0.2.1"
|
|
141
|
+
},
|
|
142
|
+
"dependencies": {
|
|
143
|
+
"@grpc/grpc-js": "^1.13.3",
|
|
144
|
+
"@hyperledger/fabric-gateway": "^1.7.1",
|
|
145
|
+
"@peculiar/webcrypto": "^1.5.0",
|
|
146
|
+
"@peculiar/x509": "^1.13.0",
|
|
147
|
+
"fabric-ca-client": "^2.2.20",
|
|
148
|
+
"fabric-common": "^2.2.20",
|
|
149
|
+
"fabric-contract-api": "^2.5.8",
|
|
150
|
+
"fabric-network": "^2.2.20",
|
|
151
|
+
"fabric-shim": "^2.5.8",
|
|
152
|
+
"json-stringify-deterministic": "^1.0.12",
|
|
153
|
+
"jsrsasign": "^11.1.0",
|
|
154
|
+
"jsrsasign-util": "^1.0.5",
|
|
155
|
+
"rollup-plugin-ts": "^3.4.5",
|
|
156
|
+
"sort-keys-recursive": "^2.1.10"
|
|
157
|
+
},
|
|
158
|
+
"overrides": {
|
|
159
|
+
"fabric-common": {
|
|
160
|
+
"jsrsasign": "^11.1.0"
|
|
161
|
+
},
|
|
162
|
+
"fabric-ca-client": {
|
|
163
|
+
"jsrsasign": "^11.1.0"
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|