@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,78 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { BaseModel, Cascade, oneToOne, pk } from "@decaf-ts/core";
|
|
11
|
+
import { model, required } from "@decaf-ts/decorator-validation";
|
|
12
|
+
import { IdentityCredentials } from "./IdentityCredentials.js";
|
|
13
|
+
import { IdentityType } from "./../constants.js";
|
|
14
|
+
/**
|
|
15
|
+
* @description Identity model representing a Fabric wallet entry
|
|
16
|
+
* @summary Encapsulates an identity stored in a Fabric wallet, including its MSP identifier, credential linkage, and type information. Built on BaseModel for integration with Decaf validation and persistence.
|
|
17
|
+
* @param {ModelArg<Identity>} [arg] - Optional initialization object used to populate model fields
|
|
18
|
+
* @class Identity
|
|
19
|
+
* @example
|
|
20
|
+
* // Create a new identity referencing existing credentials
|
|
21
|
+
* const id = new Identity({ id: "user1", mspId: "Org1MSP", type: IdentityType.X509 });
|
|
22
|
+
* @mermaid
|
|
23
|
+
* sequenceDiagram
|
|
24
|
+
* participant App
|
|
25
|
+
* participant Model as Identity
|
|
26
|
+
* App->>Model: new Identity({ id, mspId, type })
|
|
27
|
+
* Model-->>App: instance
|
|
28
|
+
*/
|
|
29
|
+
let Identity = class Identity extends BaseModel {
|
|
30
|
+
constructor(arg) {
|
|
31
|
+
super(arg);
|
|
32
|
+
/**
|
|
33
|
+
* @description Unique identifier of the identity in the wallet
|
|
34
|
+
* @summary Primary key used to reference this identity record
|
|
35
|
+
*/
|
|
36
|
+
this.id = undefined;
|
|
37
|
+
/**
|
|
38
|
+
* @description Link to the identity credentials stored separately
|
|
39
|
+
* @summary One-to-one relationship to the credentials entity; cascades on update and delete
|
|
40
|
+
*/
|
|
41
|
+
this.credentials = undefined;
|
|
42
|
+
/**
|
|
43
|
+
* @description Membership Service Provider identifier
|
|
44
|
+
* @summary The MSP ID corresponding to the organization that issued this identity
|
|
45
|
+
*/
|
|
46
|
+
this.mspId = undefined;
|
|
47
|
+
/**
|
|
48
|
+
* @description Type of identity
|
|
49
|
+
* @summary Indicates the identity encoding/format; defaults to X.509
|
|
50
|
+
*/
|
|
51
|
+
this.type = IdentityType.X509;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
__decorate([
|
|
55
|
+
pk(),
|
|
56
|
+
__metadata("design:type", String)
|
|
57
|
+
], Identity.prototype, "id", void 0);
|
|
58
|
+
__decorate([
|
|
59
|
+
oneToOne(IdentityCredentials, {
|
|
60
|
+
update: Cascade.CASCADE,
|
|
61
|
+
delete: Cascade.CASCADE,
|
|
62
|
+
}),
|
|
63
|
+
__metadata("design:type", IdentityCredentials)
|
|
64
|
+
], Identity.prototype, "credentials", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
required(),
|
|
67
|
+
__metadata("design:type", String)
|
|
68
|
+
], Identity.prototype, "mspId", void 0);
|
|
69
|
+
__decorate([
|
|
70
|
+
required(),
|
|
71
|
+
__metadata("design:type", String)
|
|
72
|
+
], Identity.prototype, "type", void 0);
|
|
73
|
+
Identity = __decorate([
|
|
74
|
+
model(),
|
|
75
|
+
__metadata("design:paramtypes", [Object])
|
|
76
|
+
], Identity);
|
|
77
|
+
export { Identity };
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWRlbnRpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2hhcmVkL21vZGVsL0lkZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFpQixRQUFRLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUNBQThCO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsMEJBQXFCO0FBRTVDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUksSUFBTSxRQUFRLEdBQWQsTUFBTSxRQUFTLFNBQVEsU0FBUztJQWdDckMsWUFBWSxHQUF1QjtRQUNqQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFoQ2I7OztXQUdHO1FBRUgsT0FBRSxHQUFZLFNBQVMsQ0FBQztRQUV4Qjs7O1dBR0c7UUFLSCxnQkFBVyxHQUF5QixTQUFTLENBQUM7UUFFOUM7OztXQUdHO1FBRUgsVUFBSyxHQUFZLFNBQVMsQ0FBQztRQUUzQjs7O1dBR0c7UUFFSCxTQUFJLEdBQWtCLFlBQVksQ0FBQyxJQUFJLENBQUM7SUFJeEMsQ0FBQztDQUNGLENBQUE7QUE3QkM7SUFEQyxFQUFFLEVBQUU7O29DQUNtQjtBQVV4QjtJQUpDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtRQUM3QixNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU87UUFDdkIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxPQUFPO0tBQ3hCLENBQUM7OEJBQ1ksbUJBQW1COzZDQUFhO0FBTzlDO0lBREMsUUFBUSxFQUFFOzt1Q0FDZ0I7QUFPM0I7SUFEQyxRQUFRLEVBQUU7O3NDQUM2QjtBQTlCN0IsUUFBUTtJQURwQixLQUFLLEVBQUU7O0dBQ0ssUUFBUSxDQW1DcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlTW9kZWwsIENhc2NhZGUsIG9uZVRvT25lLCBwayB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgbW9kZWwsIHR5cGUgTW9kZWxBcmcsIHJlcXVpcmVkIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgSWRlbnRpdHlDcmVkZW50aWFscyB9IGZyb20gXCIuL0lkZW50aXR5Q3JlZGVudGlhbHNcIjtcbmltcG9ydCB7IElkZW50aXR5VHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSWRlbnRpdHkgbW9kZWwgcmVwcmVzZW50aW5nIGEgRmFicmljIHdhbGxldCBlbnRyeVxuICogQHN1bW1hcnkgRW5jYXBzdWxhdGVzIGFuIGlkZW50aXR5IHN0b3JlZCBpbiBhIEZhYnJpYyB3YWxsZXQsIGluY2x1ZGluZyBpdHMgTVNQIGlkZW50aWZpZXIsIGNyZWRlbnRpYWwgbGlua2FnZSwgYW5kIHR5cGUgaW5mb3JtYXRpb24uIEJ1aWx0IG9uIEJhc2VNb2RlbCBmb3IgaW50ZWdyYXRpb24gd2l0aCBEZWNhZiB2YWxpZGF0aW9uIGFuZCBwZXJzaXN0ZW5jZS5cbiAqIEBwYXJhbSB7TW9kZWxBcmc8SWRlbnRpdHk+fSBbYXJnXSAtIE9wdGlvbmFsIGluaXRpYWxpemF0aW9uIG9iamVjdCB1c2VkIHRvIHBvcHVsYXRlIG1vZGVsIGZpZWxkc1xuICogQGNsYXNzIElkZW50aXR5XG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgbmV3IGlkZW50aXR5IHJlZmVyZW5jaW5nIGV4aXN0aW5nIGNyZWRlbnRpYWxzXG4gKiBjb25zdCBpZCA9IG5ldyBJZGVudGl0eSh7IGlkOiBcInVzZXIxXCIsIG1zcElkOiBcIk9yZzFNU1BcIiwgdHlwZTogSWRlbnRpdHlUeXBlLlg1MDkgfSk7XG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IEFwcFxuICogICBwYXJ0aWNpcGFudCBNb2RlbCBhcyBJZGVudGl0eVxuICogICBBcHAtPj5Nb2RlbDogbmV3IElkZW50aXR5KHsgaWQsIG1zcElkLCB0eXBlIH0pXG4gKiAgIE1vZGVsLS0+PkFwcDogaW5zdGFuY2VcbiAqL1xuQG1vZGVsKClcbmV4cG9ydCBjbGFzcyBJZGVudGl0eSBleHRlbmRzIEJhc2VNb2RlbCB7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGlkZW50aXR5IGluIHRoZSB3YWxsZXRcbiAgICogQHN1bW1hcnkgUHJpbWFyeSBrZXkgdXNlZCB0byByZWZlcmVuY2UgdGhpcyBpZGVudGl0eSByZWNvcmRcbiAgICovXG4gIEBwaygpXG4gIGlkPzogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gTGluayB0byB0aGUgaWRlbnRpdHkgY3JlZGVudGlhbHMgc3RvcmVkIHNlcGFyYXRlbHlcbiAgICogQHN1bW1hcnkgT25lLXRvLW9uZSByZWxhdGlvbnNoaXAgdG8gdGhlIGNyZWRlbnRpYWxzIGVudGl0eTsgY2FzY2FkZXMgb24gdXBkYXRlIGFuZCBkZWxldGVcbiAgICovXG4gIEBvbmVUb09uZShJZGVudGl0eUNyZWRlbnRpYWxzLCB7XG4gICAgdXBkYXRlOiBDYXNjYWRlLkNBU0NBREUsXG4gICAgZGVsZXRlOiBDYXNjYWRlLkNBU0NBREUsXG4gIH0pXG4gIGNyZWRlbnRpYWxzPzogSWRlbnRpdHlDcmVkZW50aWFscyA9IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIE1lbWJlcnNoaXAgU2VydmljZSBQcm92aWRlciBpZGVudGlmaWVyXG4gICAqIEBzdW1tYXJ5IFRoZSBNU1AgSUQgY29ycmVzcG9uZGluZyB0byB0aGUgb3JnYW5pemF0aW9uIHRoYXQgaXNzdWVkIHRoaXMgaWRlbnRpdHlcbiAgICovXG4gIEByZXF1aXJlZCgpXG4gIG1zcElkPzogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVHlwZSBvZiBpZGVudGl0eVxuICAgKiBAc3VtbWFyeSBJbmRpY2F0ZXMgdGhlIGlkZW50aXR5IGVuY29kaW5nL2Zvcm1hdDsgZGVmYXVsdHMgdG8gWC41MDlcbiAgICovXG4gIEByZXF1aXJlZCgpXG4gIHR5cGU/OiBJZGVudGl0eVR5cGUgPSBJZGVudGl0eVR5cGUuWDUwOTtcblxuICBjb25zdHJ1Y3Rvcihhcmc6IE1vZGVsQXJnPElkZW50aXR5Pikge1xuICAgIHN1cGVyKGFyZyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { BaseModel } from "@decaf-ts/core";
|
|
2
|
+
import { type ModelArg } from "@decaf-ts/decorator-validation";
|
|
3
|
+
/**
|
|
4
|
+
* @description Identity credential model storing cryptographic materials
|
|
5
|
+
* @summary Holds certificate chain and private key information for a Fabric identity, managed as a separate entity linked from Identity
|
|
6
|
+
* @param {ModelArg<IdentityCredentials>} [arg] - Optional initialization object used to populate model fields
|
|
7
|
+
* @class IdentityCredentials
|
|
8
|
+
* @example
|
|
9
|
+
* // Create credentials entry
|
|
10
|
+
* const creds = new IdentityCredentials({ id: "creds1", certificate: "...", rootCertificate: "...", privateKey: "..." });
|
|
11
|
+
* @mermaid
|
|
12
|
+
* sequenceDiagram
|
|
13
|
+
* participant App
|
|
14
|
+
* participant Model as IdentityCredentials
|
|
15
|
+
* App->>Model: new IdentityCredentials({ id, certificate, rootCertificate, privateKey })
|
|
16
|
+
* Model-->>App: instance
|
|
17
|
+
* @see model
|
|
18
|
+
*/
|
|
19
|
+
export declare class IdentityCredentials extends BaseModel {
|
|
20
|
+
/**
|
|
21
|
+
* @description Unique identifier of the credentials record
|
|
22
|
+
* @summary Primary key for referencing this credentials entry
|
|
23
|
+
*/
|
|
24
|
+
id?: string;
|
|
25
|
+
/**
|
|
26
|
+
* @description PEM-encoded X.509 certificate for the identity
|
|
27
|
+
* @summary Leaf certificate associated with the identity
|
|
28
|
+
*/
|
|
29
|
+
certificate?: string;
|
|
30
|
+
/**
|
|
31
|
+
* @description PEM-encoded root or intermediate certificate
|
|
32
|
+
* @summary Root of trust used to validate the leaf certificate
|
|
33
|
+
*/
|
|
34
|
+
rootCertificate?: string;
|
|
35
|
+
/**
|
|
36
|
+
* @description PEM-encoded private key material
|
|
37
|
+
* @summary Private key corresponding to the identity certificate
|
|
38
|
+
*/
|
|
39
|
+
privateKey?: string;
|
|
40
|
+
constructor(arg?: ModelArg<IdentityCredentials>);
|
|
41
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { BaseModel, pk } from "@decaf-ts/core";
|
|
11
|
+
import { model, required } from "@decaf-ts/decorator-validation";
|
|
12
|
+
/**
|
|
13
|
+
* @description Identity credential model storing cryptographic materials
|
|
14
|
+
* @summary Holds certificate chain and private key information for a Fabric identity, managed as a separate entity linked from Identity
|
|
15
|
+
* @param {ModelArg<IdentityCredentials>} [arg] - Optional initialization object used to populate model fields
|
|
16
|
+
* @class IdentityCredentials
|
|
17
|
+
* @example
|
|
18
|
+
* // Create credentials entry
|
|
19
|
+
* const creds = new IdentityCredentials({ id: "creds1", certificate: "...", rootCertificate: "...", privateKey: "..." });
|
|
20
|
+
* @mermaid
|
|
21
|
+
* sequenceDiagram
|
|
22
|
+
* participant App
|
|
23
|
+
* participant Model as IdentityCredentials
|
|
24
|
+
* App->>Model: new IdentityCredentials({ id, certificate, rootCertificate, privateKey })
|
|
25
|
+
* Model-->>App: instance
|
|
26
|
+
* @see model
|
|
27
|
+
*/
|
|
28
|
+
let IdentityCredentials = class IdentityCredentials extends BaseModel {
|
|
29
|
+
constructor(arg) {
|
|
30
|
+
super(arg);
|
|
31
|
+
/**
|
|
32
|
+
* @description Unique identifier of the credentials record
|
|
33
|
+
* @summary Primary key for referencing this credentials entry
|
|
34
|
+
*/
|
|
35
|
+
this.id = undefined;
|
|
36
|
+
/**
|
|
37
|
+
* @description PEM-encoded X.509 certificate for the identity
|
|
38
|
+
* @summary Leaf certificate associated with the identity
|
|
39
|
+
*/
|
|
40
|
+
this.certificate = undefined;
|
|
41
|
+
/**
|
|
42
|
+
* @description PEM-encoded root or intermediate certificate
|
|
43
|
+
* @summary Root of trust used to validate the leaf certificate
|
|
44
|
+
*/
|
|
45
|
+
this.rootCertificate = undefined;
|
|
46
|
+
/**
|
|
47
|
+
* @description PEM-encoded private key material
|
|
48
|
+
* @summary Private key corresponding to the identity certificate
|
|
49
|
+
*/
|
|
50
|
+
this.privateKey = undefined;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
__decorate([
|
|
54
|
+
pk(),
|
|
55
|
+
__metadata("design:type", String)
|
|
56
|
+
], IdentityCredentials.prototype, "id", void 0);
|
|
57
|
+
__decorate([
|
|
58
|
+
required(),
|
|
59
|
+
__metadata("design:type", String)
|
|
60
|
+
], IdentityCredentials.prototype, "certificate", void 0);
|
|
61
|
+
__decorate([
|
|
62
|
+
required(),
|
|
63
|
+
__metadata("design:type", String)
|
|
64
|
+
], IdentityCredentials.prototype, "rootCertificate", void 0);
|
|
65
|
+
__decorate([
|
|
66
|
+
required(),
|
|
67
|
+
__metadata("design:type", String)
|
|
68
|
+
], IdentityCredentials.prototype, "privateKey", void 0);
|
|
69
|
+
IdentityCredentials = __decorate([
|
|
70
|
+
model(),
|
|
71
|
+
__metadata("design:paramtypes", [Object])
|
|
72
|
+
], IdentityCredentials);
|
|
73
|
+
export { IdentityCredentials };
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSWRlbnRpdHlDcmVkZW50aWFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zaGFyZWQvbW9kZWwvSWRlbnRpdHlDcmVkZW50aWFscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxLQUFLLEVBQWlCLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRWhGOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVJLElBQU0sbUJBQW1CLEdBQXpCLE1BQU0sbUJBQW9CLFNBQVEsU0FBUztJQTZCaEQsWUFBWSxHQUFtQztRQUM3QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUE3QmI7OztXQUdHO1FBRUgsT0FBRSxHQUFZLFNBQVMsQ0FBQztRQUV4Qjs7O1dBR0c7UUFFSCxnQkFBVyxHQUFZLFNBQVMsQ0FBQztRQUVqQzs7O1dBR0c7UUFFSCxvQkFBZSxHQUFZLFNBQVMsQ0FBQztRQUVyQzs7O1dBR0c7UUFFSCxlQUFVLEdBQVksU0FBUyxDQUFDO0lBSWhDLENBQUM7Q0FDRixDQUFBO0FBMUJDO0lBREMsRUFBRSxFQUFFOzsrQ0FDbUI7QUFPeEI7SUFEQyxRQUFRLEVBQUU7O3dEQUNzQjtBQU9qQztJQURDLFFBQVEsRUFBRTs7NERBQzBCO0FBT3JDO0lBREMsUUFBUSxFQUFFOzt1REFDcUI7QUEzQnJCLG1CQUFtQjtJQUQvQixLQUFLLEVBQUU7O0dBQ0ssbUJBQW1CLENBZ0MvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VNb2RlbCwgcGsgfSBmcm9tIFwiQGRlY2FmLXRzL2NvcmVcIjtcbmltcG9ydCB7IG1vZGVsLCB0eXBlIE1vZGVsQXJnLCByZXF1aXJlZCB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSWRlbnRpdHkgY3JlZGVudGlhbCBtb2RlbCBzdG9yaW5nIGNyeXB0b2dyYXBoaWMgbWF0ZXJpYWxzXG4gKiBAc3VtbWFyeSBIb2xkcyBjZXJ0aWZpY2F0ZSBjaGFpbiBhbmQgcHJpdmF0ZSBrZXkgaW5mb3JtYXRpb24gZm9yIGEgRmFicmljIGlkZW50aXR5LCBtYW5hZ2VkIGFzIGEgc2VwYXJhdGUgZW50aXR5IGxpbmtlZCBmcm9tIElkZW50aXR5XG4gKiBAcGFyYW0ge01vZGVsQXJnPElkZW50aXR5Q3JlZGVudGlhbHM+fSBbYXJnXSAtIE9wdGlvbmFsIGluaXRpYWxpemF0aW9uIG9iamVjdCB1c2VkIHRvIHBvcHVsYXRlIG1vZGVsIGZpZWxkc1xuICogQGNsYXNzIElkZW50aXR5Q3JlZGVudGlhbHNcbiAqIEBleGFtcGxlXG4gKiAvLyBDcmVhdGUgY3JlZGVudGlhbHMgZW50cnlcbiAqIGNvbnN0IGNyZWRzID0gbmV3IElkZW50aXR5Q3JlZGVudGlhbHMoeyBpZDogXCJjcmVkczFcIiwgY2VydGlmaWNhdGU6IFwiLi4uXCIsIHJvb3RDZXJ0aWZpY2F0ZTogXCIuLi5cIiwgcHJpdmF0ZUtleTogXCIuLi5cIiB9KTtcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQXBwXG4gKiAgIHBhcnRpY2lwYW50IE1vZGVsIGFzIElkZW50aXR5Q3JlZGVudGlhbHNcbiAqICAgQXBwLT4+TW9kZWw6IG5ldyBJZGVudGl0eUNyZWRlbnRpYWxzKHsgaWQsIGNlcnRpZmljYXRlLCByb290Q2VydGlmaWNhdGUsIHByaXZhdGVLZXkgfSlcbiAqICAgTW9kZWwtLT4+QXBwOiBpbnN0YW5jZVxuICogQHNlZSBtb2RlbFxuICovXG5AbW9kZWwoKVxuZXhwb3J0IGNsYXNzIElkZW50aXR5Q3JlZGVudGlhbHMgZXh0ZW5kcyBCYXNlTW9kZWwge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBjcmVkZW50aWFscyByZWNvcmRcbiAgICogQHN1bW1hcnkgUHJpbWFyeSBrZXkgZm9yIHJlZmVyZW5jaW5nIHRoaXMgY3JlZGVudGlhbHMgZW50cnlcbiAgICovXG4gIEBwaygpXG4gIGlkPzogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUEVNLWVuY29kZWQgWC41MDkgY2VydGlmaWNhdGUgZm9yIHRoZSBpZGVudGl0eVxuICAgKiBAc3VtbWFyeSBMZWFmIGNlcnRpZmljYXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaWRlbnRpdHlcbiAgICovXG4gIEByZXF1aXJlZCgpXG4gIGNlcnRpZmljYXRlPzogc3RyaW5nID0gdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUEVNLWVuY29kZWQgcm9vdCBvciBpbnRlcm1lZGlhdGUgY2VydGlmaWNhdGVcbiAgICogQHN1bW1hcnkgUm9vdCBvZiB0cnVzdCB1c2VkIHRvIHZhbGlkYXRlIHRoZSBsZWFmIGNlcnRpZmljYXRlXG4gICAqL1xuICBAcmVxdWlyZWQoKVxuICByb290Q2VydGlmaWNhdGU/OiBzdHJpbmcgPSB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQRU0tZW5jb2RlZCBwcml2YXRlIGtleSBtYXRlcmlhbFxuICAgKiBAc3VtbWFyeSBQcml2YXRlIGtleSBjb3JyZXNwb25kaW5nIHRvIHRoZSBpZGVudGl0eSBjZXJ0aWZpY2F0ZVxuICAgKi9cbiAgQHJlcXVpcmVkKClcbiAgcHJpdmF0ZUtleT86IHN0cmluZyA9IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihhcmc/OiBNb2RlbEFyZzxJZGVudGl0eUNyZWRlbnRpYWxzPikge1xuICAgIHN1cGVyKGFyZyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Identity";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from "./Identity.js";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2hhcmVkL21vZGVsL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL0lkZW50aXR5XCI7XG4iXX0=
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
|
+
/**
|
|
3
|
+
* @description Checks whether a model or its class has private data metadata
|
|
4
|
+
* @summary Uses reflection metadata to determine if the given Decaf model includes Fabric private data annotations at instance or constructor level
|
|
5
|
+
* @template M extends Model
|
|
6
|
+
* @param {M} model - The model instance to inspect for private data metadata
|
|
7
|
+
* @return {boolean} True if private data metadata is present; otherwise false
|
|
8
|
+
* @function hasPrivateData
|
|
9
|
+
* @memberOf module:for-fabric.shared
|
|
10
|
+
*/
|
|
11
|
+
export declare function hasPrivateData<M extends Model>(model: M): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* @description Retrieves the Fabric private data metadata for a model
|
|
14
|
+
* @summary Looks up the metadata key on the instance first and then on the constructor to support both instance and static decorator placement
|
|
15
|
+
* @template M extends Model
|
|
16
|
+
* @param {M} model - The model whose Fabric private data metadata should be retrieved
|
|
17
|
+
* @return {Record<string, any>} The metadata object if present, otherwise undefined-like value
|
|
18
|
+
* @function getClassPrivateDataMetadata
|
|
19
|
+
* @memberOf module:for-fabric.shared
|
|
20
|
+
*/
|
|
21
|
+
export declare function getClassPrivateDataMetadata<M extends Model>(model: M): Record<string, any>;
|
|
22
|
+
/**
|
|
23
|
+
* @description Determines if a model should be fully treated as private
|
|
24
|
+
* @summary Reads the metadata flag isPrivate from the model's Fabric private data metadata and returns its boolean value
|
|
25
|
+
* @template M extends Model
|
|
26
|
+
* @param {M} model - The model instance to check
|
|
27
|
+
* @return {boolean} True when model is marked as private; otherwise false
|
|
28
|
+
* @function isModelPrivate
|
|
29
|
+
* @memberOf module:for-fabric.shared
|
|
30
|
+
*/
|
|
31
|
+
export declare function isModelPrivate<M extends Model>(model: M): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* @description Splits a model into public and Fabric private data collections
|
|
34
|
+
* @summary Iterates over property decorators to collect attributes destined for private data collections while keeping public fields, returning a structure containing the rebuilt public model and a map of collection-name to private attributes
|
|
35
|
+
* @template M extends Model
|
|
36
|
+
* @param {M} model - The model instance to transform into public and private parts
|
|
37
|
+
* @return {{ model: M, private: Record<string, Record<string, any>> }} An object with the rebuilt public model and optional private collection maps
|
|
38
|
+
* @function modelToPrivate
|
|
39
|
+
* @mermaid
|
|
40
|
+
* sequenceDiagram
|
|
41
|
+
* participant Caller
|
|
42
|
+
* participant Utils as modelToPrivate
|
|
43
|
+
* participant Meta as Metadata
|
|
44
|
+
* Caller->>Utils: modelToPrivate(model)
|
|
45
|
+
* Utils->>Meta: getAllPropertyDecoratorsRecursive(model, PRIVATE)
|
|
46
|
+
* Utils->>Meta: isModelPrivate(model)
|
|
47
|
+
* alt model is private or has private props
|
|
48
|
+
* Utils->>Utils: group properties by collection
|
|
49
|
+
* else
|
|
50
|
+
* Utils->>Utils: keep property in public model
|
|
51
|
+
* end
|
|
52
|
+
* Utils->>Meta: getClassPrivateDataMetadata(model)
|
|
53
|
+
* Utils->>Utils: Model.build(public, anchor)
|
|
54
|
+
* Utils-->>Caller: { model, private }
|
|
55
|
+
* @memberOf module:for-fabric.shared
|
|
56
|
+
*/
|
|
57
|
+
export declare function modelToPrivate<M extends Model>(model: M): {
|
|
58
|
+
model: M;
|
|
59
|
+
private?: Record<string, Record<string, any>>;
|
|
60
|
+
};
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Model } from "@decaf-ts/decorator-validation";
|
|
2
|
+
import { getFabricModelKey } from "./../decorators.js";
|
|
3
|
+
import { FabricModelKeys } from "./../constants.js";
|
|
4
|
+
import { getAllPropertyDecoratorsRecursive, SerializationError, } from "@decaf-ts/db-decorators";
|
|
5
|
+
/**
|
|
6
|
+
* @description Checks whether a model or its class has private data metadata
|
|
7
|
+
* @summary Uses reflection metadata to determine if the given Decaf model includes Fabric private data annotations at instance or constructor level
|
|
8
|
+
* @template M extends Model
|
|
9
|
+
* @param {M} model - The model instance to inspect for private data metadata
|
|
10
|
+
* @return {boolean} True if private data metadata is present; otherwise false
|
|
11
|
+
* @function hasPrivateData
|
|
12
|
+
* @memberOf module:for-fabric.shared
|
|
13
|
+
*/
|
|
14
|
+
export function hasPrivateData(model) {
|
|
15
|
+
const metadata = getClassPrivateDataMetadata(model);
|
|
16
|
+
if (!metadata)
|
|
17
|
+
return false;
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* @description Retrieves the Fabric private data metadata for a model
|
|
22
|
+
* @summary Looks up the metadata key on the instance first and then on the constructor to support both instance and static decorator placement
|
|
23
|
+
* @template M extends Model
|
|
24
|
+
* @param {M} model - The model whose Fabric private data metadata should be retrieved
|
|
25
|
+
* @return {Record<string, any>} The metadata object if present, otherwise undefined-like value
|
|
26
|
+
* @function getClassPrivateDataMetadata
|
|
27
|
+
* @memberOf module:for-fabric.shared
|
|
28
|
+
*/
|
|
29
|
+
export function getClassPrivateDataMetadata(model) {
|
|
30
|
+
let metadata = Reflect.getMetadata(getFabricModelKey(FabricModelKeys.PRIVATE), model);
|
|
31
|
+
metadata =
|
|
32
|
+
metadata ||
|
|
33
|
+
Reflect.getMetadata(getFabricModelKey(FabricModelKeys.PRIVATE), model.constructor);
|
|
34
|
+
return metadata;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @description Determines if a model should be fully treated as private
|
|
38
|
+
* @summary Reads the metadata flag isPrivate from the model's Fabric private data metadata and returns its boolean value
|
|
39
|
+
* @template M extends Model
|
|
40
|
+
* @param {M} model - The model instance to check
|
|
41
|
+
* @return {boolean} True when model is marked as private; otherwise false
|
|
42
|
+
* @function isModelPrivate
|
|
43
|
+
* @memberOf module:for-fabric.shared
|
|
44
|
+
*/
|
|
45
|
+
export function isModelPrivate(model) {
|
|
46
|
+
const metadata = getClassPrivateDataMetadata(model);
|
|
47
|
+
if (!metadata || metadata.isPrivate === undefined)
|
|
48
|
+
return false;
|
|
49
|
+
return metadata.isPrivate;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @description Splits a model into public and Fabric private data collections
|
|
53
|
+
* @summary Iterates over property decorators to collect attributes destined for private data collections while keeping public fields, returning a structure containing the rebuilt public model and a map of collection-name to private attributes
|
|
54
|
+
* @template M extends Model
|
|
55
|
+
* @param {M} model - The model instance to transform into public and private parts
|
|
56
|
+
* @return {{ model: M, private: Record<string, Record<string, any>> }} An object with the rebuilt public model and optional private collection maps
|
|
57
|
+
* @function modelToPrivate
|
|
58
|
+
* @mermaid
|
|
59
|
+
* sequenceDiagram
|
|
60
|
+
* participant Caller
|
|
61
|
+
* participant Utils as modelToPrivate
|
|
62
|
+
* participant Meta as Metadata
|
|
63
|
+
* Caller->>Utils: modelToPrivate(model)
|
|
64
|
+
* Utils->>Meta: getAllPropertyDecoratorsRecursive(model, PRIVATE)
|
|
65
|
+
* Utils->>Meta: isModelPrivate(model)
|
|
66
|
+
* alt model is private or has private props
|
|
67
|
+
* Utils->>Utils: group properties by collection
|
|
68
|
+
* else
|
|
69
|
+
* Utils->>Utils: keep property in public model
|
|
70
|
+
* end
|
|
71
|
+
* Utils->>Meta: getClassPrivateDataMetadata(model)
|
|
72
|
+
* Utils->>Utils: Model.build(public, anchor)
|
|
73
|
+
* Utils-->>Caller: { model, private }
|
|
74
|
+
* @memberOf module:for-fabric.shared
|
|
75
|
+
*/
|
|
76
|
+
export function modelToPrivate(model) {
|
|
77
|
+
if (!hasPrivateData(model))
|
|
78
|
+
return { model: model };
|
|
79
|
+
const decs = getAllPropertyDecoratorsRecursive(model, undefined, getFabricModelKey(FabricModelKeys.PRIVATE));
|
|
80
|
+
const isPrivate = isModelPrivate(model);
|
|
81
|
+
const modelCollections = getClassPrivateDataMetadata(model);
|
|
82
|
+
const result = Object.entries(decs).reduce((accum, [k, val]) => {
|
|
83
|
+
const privateData = val.find((el) => el.key === "");
|
|
84
|
+
if (privateData || isPrivate) {
|
|
85
|
+
const collections = isPrivate
|
|
86
|
+
? modelCollections.collections
|
|
87
|
+
: privateData.props.collections;
|
|
88
|
+
accum.private = accum.private || {};
|
|
89
|
+
for (const collection of collections) {
|
|
90
|
+
try {
|
|
91
|
+
accum.private[collection] = accum.private[collection] || {};
|
|
92
|
+
accum.private[collection][k] = model[k];
|
|
93
|
+
}
|
|
94
|
+
catch (e) {
|
|
95
|
+
throw new SerializationError(`Failed to serialize private property ${k}: ${e}`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
accum.model = accum.model || {};
|
|
101
|
+
accum.model[k] = model[k];
|
|
102
|
+
}
|
|
103
|
+
return accum;
|
|
104
|
+
}, {});
|
|
105
|
+
result.model = Model.build(result.model, model.constructor.name);
|
|
106
|
+
return result;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2hhcmVkL21vZGVsL3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsMkJBQXNCO0FBQ2xELE9BQU8sRUFBRSxlQUFlLEVBQUUsMEJBQXFCO0FBQy9DLE9BQU8sRUFDTCxpQ0FBaUMsRUFDakMsa0JBQWtCLEdBQ25CLE1BQU0seUJBQXlCLENBQUM7QUFFakM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFrQixLQUFRO0lBQ3RELE1BQU0sUUFBUSxHQUFHLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDNUIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQ3pDLEtBQVE7SUFFUixJQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUNoQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQzFDLEtBQUssQ0FDTixDQUFDO0lBRUYsUUFBUTtRQUNOLFFBQVE7WUFDUixPQUFPLENBQUMsV0FBVyxDQUNqQixpQkFBaUIsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQzFDLEtBQUssQ0FBQyxXQUFXLENBQ2xCLENBQUM7SUFFSixPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFrQixLQUFRO0lBQ3RELE1BQU0sUUFBUSxHQUFHLDJCQUEyQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BELElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFNBQVMsS0FBSyxTQUFTO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDaEUsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDO0FBQzVCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsS0FBUTtJQUVSLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNwRCxNQUFNLElBQUksR0FBMEIsaUNBQWlDLENBQ25FLEtBQUssRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUNsQixDQUFDO0lBRTNCLE1BQU0sU0FBUyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxNQUFNLGdCQUFnQixHQUNwQiwyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVyQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FDeEMsQ0FDRSxLQUFvRSxFQUNwRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFDUixFQUFFO1FBQ0YsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUVwRCxJQUFJLFdBQVcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUM3QixNQUFNLFdBQVcsR0FBRyxTQUFTO2dCQUMzQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsV0FBVztnQkFDOUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1lBQ2xDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFFcEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDO29CQUNILEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQzVELEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQVksQ0FBQyxDQUFDO2dCQUNyRCxDQUFDO2dCQUFDLE9BQU8sQ0FBVSxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sSUFBSSxrQkFBa0IsQ0FDMUIsd0NBQXdDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FDbEQsQ0FBQztnQkFDSixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNoQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFJLEtBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQyxFQUNELEVBQW1FLENBQ3BFLENBQUM7SUFDRixNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sTUFBcUUsQ0FBQztBQUMvRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyBnZXRGYWJyaWNNb2RlbEtleSB9IGZyb20gXCIuLi9kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBGYWJyaWNNb2RlbEtleXMgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnNSZWN1cnNpdmUsXG4gIFNlcmlhbGl6YXRpb25FcnJvcixcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENoZWNrcyB3aGV0aGVyIGEgbW9kZWwgb3IgaXRzIGNsYXNzIGhhcyBwcml2YXRlIGRhdGEgbWV0YWRhdGFcbiAqIEBzdW1tYXJ5IFVzZXMgcmVmbGVjdGlvbiBtZXRhZGF0YSB0byBkZXRlcm1pbmUgaWYgdGhlIGdpdmVuIERlY2FmIG1vZGVsIGluY2x1ZGVzIEZhYnJpYyBwcml2YXRlIGRhdGEgYW5ub3RhdGlvbnMgYXQgaW5zdGFuY2Ugb3IgY29uc3RydWN0b3IgbGV2ZWxcbiAqIEB0ZW1wbGF0ZSBNIGV4dGVuZHMgTW9kZWxcbiAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UgdG8gaW5zcGVjdCBmb3IgcHJpdmF0ZSBkYXRhIG1ldGFkYXRhXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHByaXZhdGUgZGF0YSBtZXRhZGF0YSBpcyBwcmVzZW50OyBvdGhlcndpc2UgZmFsc2VcbiAqIEBmdW5jdGlvbiBoYXNQcml2YXRlRGF0YVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLnNoYXJlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzUHJpdmF0ZURhdGE8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSkge1xuICBjb25zdCBtZXRhZGF0YSA9IGdldENsYXNzUHJpdmF0ZURhdGFNZXRhZGF0YShtb2RlbCk7XG4gIGlmICghbWV0YWRhdGEpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUgRmFicmljIHByaXZhdGUgZGF0YSBtZXRhZGF0YSBmb3IgYSBtb2RlbFxuICogQHN1bW1hcnkgTG9va3MgdXAgdGhlIG1ldGFkYXRhIGtleSBvbiB0aGUgaW5zdGFuY2UgZmlyc3QgYW5kIHRoZW4gb24gdGhlIGNvbnN0cnVjdG9yIHRvIHN1cHBvcnQgYm90aCBpbnN0YW5jZSBhbmQgc3RhdGljIGRlY29yYXRvciBwbGFjZW1lbnRcbiAqIEB0ZW1wbGF0ZSBNIGV4dGVuZHMgTW9kZWxcbiAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgd2hvc2UgRmFicmljIHByaXZhdGUgZGF0YSBtZXRhZGF0YSBzaG91bGQgYmUgcmV0cmlldmVkXG4gKiBAcmV0dXJuIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBUaGUgbWV0YWRhdGEgb2JqZWN0IGlmIHByZXNlbnQsIG90aGVyd2lzZSB1bmRlZmluZWQtbGlrZSB2YWx1ZVxuICogQGZ1bmN0aW9uIGdldENsYXNzUHJpdmF0ZURhdGFNZXRhZGF0YVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLnNoYXJlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xhc3NQcml2YXRlRGF0YU1ldGFkYXRhPE0gZXh0ZW5kcyBNb2RlbD4oXG4gIG1vZGVsOiBNXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgbGV0IG1ldGFkYXRhID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICBnZXRGYWJyaWNNb2RlbEtleShGYWJyaWNNb2RlbEtleXMuUFJJVkFURSksXG4gICAgbW9kZWxcbiAgKTtcblxuICBtZXRhZGF0YSA9XG4gICAgbWV0YWRhdGEgfHxcbiAgICBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgZ2V0RmFicmljTW9kZWxLZXkoRmFicmljTW9kZWxLZXlzLlBSSVZBVEUpLFxuICAgICAgbW9kZWwuY29uc3RydWN0b3JcbiAgICApO1xuXG4gIHJldHVybiBtZXRhZGF0YTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGV0ZXJtaW5lcyBpZiBhIG1vZGVsIHNob3VsZCBiZSBmdWxseSB0cmVhdGVkIGFzIHByaXZhdGVcbiAqIEBzdW1tYXJ5IFJlYWRzIHRoZSBtZXRhZGF0YSBmbGFnIGlzUHJpdmF0ZSBmcm9tIHRoZSBtb2RlbCdzIEZhYnJpYyBwcml2YXRlIGRhdGEgbWV0YWRhdGEgYW5kIHJldHVybnMgaXRzIGJvb2xlYW4gdmFsdWVcbiAqIEB0ZW1wbGF0ZSBNIGV4dGVuZHMgTW9kZWxcbiAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UgdG8gY2hlY2tcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgd2hlbiBtb2RlbCBpcyBtYXJrZWQgYXMgcHJpdmF0ZTsgb3RoZXJ3aXNlIGZhbHNlXG4gKiBAZnVuY3Rpb24gaXNNb2RlbFByaXZhdGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5zaGFyZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTW9kZWxQcml2YXRlPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0pOiBib29sZWFuIHtcbiAgY29uc3QgbWV0YWRhdGEgPSBnZXRDbGFzc1ByaXZhdGVEYXRhTWV0YWRhdGEobW9kZWwpO1xuICBpZiAoIW1ldGFkYXRhIHx8IG1ldGFkYXRhLmlzUHJpdmF0ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBtZXRhZGF0YS5pc1ByaXZhdGU7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNwbGl0cyBhIG1vZGVsIGludG8gcHVibGljIGFuZCBGYWJyaWMgcHJpdmF0ZSBkYXRhIGNvbGxlY3Rpb25zXG4gKiBAc3VtbWFyeSBJdGVyYXRlcyBvdmVyIHByb3BlcnR5IGRlY29yYXRvcnMgdG8gY29sbGVjdCBhdHRyaWJ1dGVzIGRlc3RpbmVkIGZvciBwcml2YXRlIGRhdGEgY29sbGVjdGlvbnMgd2hpbGUga2VlcGluZyBwdWJsaWMgZmllbGRzLCByZXR1cm5pbmcgYSBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgcmVidWlsdCBwdWJsaWMgbW9kZWwgYW5kIGEgbWFwIG9mIGNvbGxlY3Rpb24tbmFtZSB0byBwcml2YXRlIGF0dHJpYnV0ZXNcbiAqIEB0ZW1wbGF0ZSBNIGV4dGVuZHMgTW9kZWxcbiAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgaW5zdGFuY2UgdG8gdHJhbnNmb3JtIGludG8gcHVibGljIGFuZCBwcml2YXRlIHBhcnRzXG4gKiBAcmV0dXJuIHt7IG1vZGVsOiBNLCBwcml2YXRlOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB9fSBBbiBvYmplY3Qgd2l0aCB0aGUgcmVidWlsdCBwdWJsaWMgbW9kZWwgYW5kIG9wdGlvbmFsIHByaXZhdGUgY29sbGVjdGlvbiBtYXBzXG4gKiBAZnVuY3Rpb24gbW9kZWxUb1ByaXZhdGVcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IFV0aWxzIGFzIG1vZGVsVG9Qcml2YXRlXG4gKiAgIHBhcnRpY2lwYW50IE1ldGEgYXMgTWV0YWRhdGFcbiAqICAgQ2FsbGVyLT4+VXRpbHM6IG1vZGVsVG9Qcml2YXRlKG1vZGVsKVxuICogICBVdGlscy0+Pk1ldGE6IGdldEFsbFByb3BlcnR5RGVjb3JhdG9yc1JlY3Vyc2l2ZShtb2RlbCwgUFJJVkFURSlcbiAqICAgVXRpbHMtPj5NZXRhOiBpc01vZGVsUHJpdmF0ZShtb2RlbClcbiAqICAgYWx0IG1vZGVsIGlzIHByaXZhdGUgb3IgaGFzIHByaXZhdGUgcHJvcHNcbiAqICAgICBVdGlscy0+PlV0aWxzOiBncm91cCBwcm9wZXJ0aWVzIGJ5IGNvbGxlY3Rpb25cbiAqICAgZWxzZVxuICogICAgIFV0aWxzLT4+VXRpbHM6IGtlZXAgcHJvcGVydHkgaW4gcHVibGljIG1vZGVsXG4gKiAgIGVuZFxuICogICBVdGlscy0+Pk1ldGE6IGdldENsYXNzUHJpdmF0ZURhdGFNZXRhZGF0YShtb2RlbClcbiAqICAgVXRpbHMtPj5VdGlsczogTW9kZWwuYnVpbGQocHVibGljLCBhbmNob3IpXG4gKiAgIFV0aWxzLS0+PkNhbGxlcjogeyBtb2RlbCwgcHJpdmF0ZSB9XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1mYWJyaWMuc2hhcmVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2RlbFRvUHJpdmF0ZTxNIGV4dGVuZHMgTW9kZWw+KFxuICBtb2RlbDogTVxuKTogeyBtb2RlbDogTTsgcHJpdmF0ZT86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+IH0ge1xuICBpZiAoIWhhc1ByaXZhdGVEYXRhKG1vZGVsKSkgcmV0dXJuIHsgbW9kZWw6IG1vZGVsIH07XG4gIGNvbnN0IGRlY3M6IFJlY29yZDxzdHJpbmcsIGFueVtdPiA9IGdldEFsbFByb3BlcnR5RGVjb3JhdG9yc1JlY3Vyc2l2ZShcbiAgICBtb2RlbCxcbiAgICB1bmRlZmluZWQsXG4gICAgZ2V0RmFicmljTW9kZWxLZXkoRmFicmljTW9kZWxLZXlzLlBSSVZBVEUpXG4gICkgYXMgUmVjb3JkPHN0cmluZywgYW55W10+O1xuXG4gIGNvbnN0IGlzUHJpdmF0ZSA9IGlzTW9kZWxQcml2YXRlKG1vZGVsKTtcbiAgY29uc3QgbW9kZWxDb2xsZWN0aW9uczogUmVjb3JkPHN0cmluZywgYW55PiA9XG4gICAgZ2V0Q2xhc3NQcml2YXRlRGF0YU1ldGFkYXRhKG1vZGVsKTtcblxuICBjb25zdCByZXN1bHQgPSBPYmplY3QuZW50cmllcyhkZWNzKS5yZWR1Y2UoXG4gICAgKFxuICAgICAgYWNjdW06IHsgbW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT47IHByaXZhdGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH0sXG4gICAgICBbaywgdmFsXVxuICAgICkgPT4ge1xuICAgICAgY29uc3QgcHJpdmF0ZURhdGEgPSB2YWwuZmluZCgoZWwpID0+IGVsLmtleSA9PT0gXCJcIik7XG5cbiAgICAgIGlmIChwcml2YXRlRGF0YSB8fCBpc1ByaXZhdGUpIHtcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbnMgPSBpc1ByaXZhdGVcbiAgICAgICAgICA/IG1vZGVsQ29sbGVjdGlvbnMuY29sbGVjdGlvbnNcbiAgICAgICAgICA6IHByaXZhdGVEYXRhLnByb3BzLmNvbGxlY3Rpb25zO1xuICAgICAgICBhY2N1bS5wcml2YXRlID0gYWNjdW0ucHJpdmF0ZSB8fCB7fTtcblxuICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYWNjdW0ucHJpdmF0ZVtjb2xsZWN0aW9uXSA9IGFjY3VtLnByaXZhdGVbY29sbGVjdGlvbl0gfHwge307XG4gICAgICAgICAgICBhY2N1bS5wcml2YXRlW2NvbGxlY3Rpb25dW2tdID0gbW9kZWxbayBhcyBrZXlvZiBNXTtcbiAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2VyaWFsaXphdGlvbkVycm9yKFxuICAgICAgICAgICAgICBgRmFpbGVkIHRvIHNlcmlhbGl6ZSBwcml2YXRlIHByb3BlcnR5ICR7a306ICR7ZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWNjdW0ubW9kZWwgPSBhY2N1bS5tb2RlbCB8fCB7fTtcbiAgICAgICAgYWNjdW0ubW9kZWxba10gPSAobW9kZWwgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba107XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW07XG4gICAgfSxcbiAgICB7fSBhcyB7IG1vZGVsOiBSZWNvcmQ8c3RyaW5nLCBhbnk+OyBwcml2YXRlPzogUmVjb3JkPHN0cmluZywgYW55PiB9XG4gICk7XG4gIHJlc3VsdC5tb2RlbCA9IE1vZGVsLmJ1aWxkKHJlc3VsdC5tb2RlbCwgbW9kZWwuY29uc3RydWN0b3IubmFtZSk7XG4gIHJldHVybiByZXN1bHQgYXMgeyBtb2RlbDogTTsgcHJpdmF0ZT86IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGFueT4+IH07XG59XG4iXX0=
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { RepositoryFlags } from "@decaf-ts/db-decorators";
|
|
2
|
+
import { TLSOptions } from "fabric-ca-client";
|
|
3
|
+
/**
|
|
4
|
+
* @description Configuration for connecting to a Hyperledger Fabric peer
|
|
5
|
+
* @summary Contains all the necessary parameters to establish a connection to a Fabric peer and interact with chaincode
|
|
6
|
+
* @typedef {Object} PeerConfig
|
|
7
|
+
* @property {string} cryptoPath - Path to the crypto materials
|
|
8
|
+
* @property {string} keyCertOrDirectoryPath - Key file contents or Path to the directory containing private keys
|
|
9
|
+
* @property {string} certCertOrDirectoryPath - Cert file contents or Path to the directory containing certificates
|
|
10
|
+
* @property {string} tlsCert - Path to the TLS certificate
|
|
11
|
+
* @property {string} peerEndpoint - Endpoint URL for the peer
|
|
12
|
+
* @property {string} peerHostAlias - Host alias for the peer
|
|
13
|
+
* @property {string} caEndpoint - Endpoint URL for the certificate authority
|
|
14
|
+
* @property {string} caTlsCertificate - TLS certificate for the certificate authority
|
|
15
|
+
* @property {string} caCert - Certificate for the certificate authority
|
|
16
|
+
* @property {string} caKey - Key for the certificate authority
|
|
17
|
+
* @property {string} chaincodeName - Name of the chaincode to interact with
|
|
18
|
+
* @property {string} [contractName] - Optional name of the specific contract within the chaincode
|
|
19
|
+
* @property {string} [ca] - Optional certificate authority name
|
|
20
|
+
* @property {string} mspId - Membership Service Provider ID
|
|
21
|
+
* @property {string} channel - Channel name
|
|
22
|
+
* @memberOf module:for-fabric.shared
|
|
23
|
+
*/
|
|
24
|
+
export type PeerConfig = {
|
|
25
|
+
cryptoPath: string;
|
|
26
|
+
keyCertOrDirectoryPath: string;
|
|
27
|
+
certCertOrDirectoryPath: string;
|
|
28
|
+
tlsCert: string | Buffer;
|
|
29
|
+
peerEndpoint: string;
|
|
30
|
+
peerHostAlias: string;
|
|
31
|
+
caEndpoint?: string;
|
|
32
|
+
caTlsCertificate?: string;
|
|
33
|
+
caCert?: string;
|
|
34
|
+
caKey?: string;
|
|
35
|
+
chaincodeName: string;
|
|
36
|
+
contractName?: string;
|
|
37
|
+
ca?: string;
|
|
38
|
+
mspId: string;
|
|
39
|
+
channel: string;
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* @description Flags for Fabric operations
|
|
43
|
+
* @summary Combines repository flags with peer configuration overrides
|
|
44
|
+
* @interface FabricFlags
|
|
45
|
+
* @extends {RepositoryFlags}
|
|
46
|
+
* @memberOf module:for-fabric.shared
|
|
47
|
+
*/
|
|
48
|
+
export type FabricFlags = RepositoryFlags;
|
|
49
|
+
/**
|
|
50
|
+
* @description Configuration for connecting to a Hyperledger Fabric peer
|
|
51
|
+
* @summary Contains all the necessary parameters to establish a connection to a Fabric peer and interact with chaincode
|
|
52
|
+
* @typedef {Object} CAConfig
|
|
53
|
+
* @property {string} url - Path to the crypto materials
|
|
54
|
+
* @property {TLSOptions} tls - Path to the directory containing private keys
|
|
55
|
+
* @property {string} caName - Path to the directory containing certificates
|
|
56
|
+
* @property {string} tlsCertPath - Path to the TLS certificate
|
|
57
|
+
* @property {string} caCert - Endpoint URL for the peer
|
|
58
|
+
* @property {string} caKey - Host alias for the peer
|
|
59
|
+
* @memberOf module:for-fabric.shared
|
|
60
|
+
*/
|
|
61
|
+
export type CAConfig = {
|
|
62
|
+
url: string;
|
|
63
|
+
tls?: TLSOptions;
|
|
64
|
+
caName: string;
|
|
65
|
+
caCert: string;
|
|
66
|
+
caKey: string;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* @description User credentials for CA enrollment or access
|
|
70
|
+
* @summary Optional username/password pair used when enrolling with a Fabric CA or authenticating in client utilities
|
|
71
|
+
* @interface Credentials
|
|
72
|
+
* @property {string} [userName] - Optional username
|
|
73
|
+
* @property {string} [password] - Optional password
|
|
74
|
+
* @memberOf module:for-fabric.shared
|
|
75
|
+
*/
|
|
76
|
+
export interface Credentials {
|
|
77
|
+
userName?: string;
|
|
78
|
+
password?: string;
|
|
79
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2hhcmVkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZXBvc2l0b3J5RmxhZ3MgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7IFRMU09wdGlvbnMgfSBmcm9tIFwiZmFicmljLWNhLWNsaWVudFwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIGZvciBjb25uZWN0aW5nIHRvIGEgSHlwZXJsZWRnZXIgRmFicmljIHBlZXJcbiAqIEBzdW1tYXJ5IENvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byBhIEZhYnJpYyBwZWVyIGFuZCBpbnRlcmFjdCB3aXRoIGNoYWluY29kZVxuICogQHR5cGVkZWYge09iamVjdH0gUGVlckNvbmZpZ1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGNyeXB0b1BhdGggLSBQYXRoIHRvIHRoZSBjcnlwdG8gbWF0ZXJpYWxzXG4gKiBAcHJvcGVydHkge3N0cmluZ30ga2V5Q2VydE9yRGlyZWN0b3J5UGF0aCAtIEtleSBmaWxlIGNvbnRlbnRzIG9yIFBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHByaXZhdGUga2V5c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGNlcnRDZXJ0T3JEaXJlY3RvcnlQYXRoIC0gQ2VydCBmaWxlIGNvbnRlbnRzIG9yIFBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGNlcnRpZmljYXRlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHRsc0NlcnQgLSBQYXRoIHRvIHRoZSBUTFMgY2VydGlmaWNhdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwZWVyRW5kcG9pbnQgLSBFbmRwb2ludCBVUkwgZm9yIHRoZSBwZWVyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGVlckhvc3RBbGlhcyAtIEhvc3QgYWxpYXMgZm9yIHRoZSBwZWVyXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2FFbmRwb2ludCAtIEVuZHBvaW50IFVSTCBmb3IgdGhlIGNlcnRpZmljYXRlIGF1dGhvcml0eVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhVGxzQ2VydGlmaWNhdGUgLSBUTFMgY2VydGlmaWNhdGUgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBhdXRob3JpdHlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYUNlcnQgLSBDZXJ0aWZpY2F0ZSBmb3IgdGhlIGNlcnRpZmljYXRlIGF1dGhvcml0eVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhS2V5IC0gS2V5IGZvciB0aGUgY2VydGlmaWNhdGUgYXV0aG9yaXR5XG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2hhaW5jb2RlTmFtZSAtIE5hbWUgb2YgdGhlIGNoYWluY29kZSB0byBpbnRlcmFjdCB3aXRoXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2NvbnRyYWN0TmFtZV0gLSBPcHRpb25hbCBuYW1lIG9mIHRoZSBzcGVjaWZpYyBjb250cmFjdCB3aXRoaW4gdGhlIGNoYWluY29kZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtjYV0gLSBPcHRpb25hbCBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkgbmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG1zcElkIC0gTWVtYmVyc2hpcCBTZXJ2aWNlIFByb3ZpZGVyIElEXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2hhbm5lbCAtIENoYW5uZWwgbmFtZVxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLnNoYXJlZFxuICovXG5leHBvcnQgdHlwZSBQZWVyQ29uZmlnID0ge1xuICBjcnlwdG9QYXRoOiBzdHJpbmc7XG4gIGtleUNlcnRPckRpcmVjdG9yeVBhdGg6IHN0cmluZztcbiAgY2VydENlcnRPckRpcmVjdG9yeVBhdGg6IHN0cmluZztcbiAgdGxzQ2VydDogc3RyaW5nIHwgQnVmZmVyO1xuICBwZWVyRW5kcG9pbnQ6IHN0cmluZztcbiAgcGVlckhvc3RBbGlhczogc3RyaW5nO1xuICBjYUVuZHBvaW50Pzogc3RyaW5nO1xuICBjYVRsc0NlcnRpZmljYXRlPzogc3RyaW5nO1xuICBjYUNlcnQ/OiBzdHJpbmc7XG4gIGNhS2V5Pzogc3RyaW5nO1xuICBjaGFpbmNvZGVOYW1lOiBzdHJpbmc7XG4gIGNvbnRyYWN0TmFtZT86IHN0cmluZztcbiAgY2E/OiBzdHJpbmc7XG4gIG1zcElkOiBzdHJpbmc7XG4gIGNoYW5uZWw6IHN0cmluZztcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEZsYWdzIGZvciBGYWJyaWMgb3BlcmF0aW9uc1xuICogQHN1bW1hcnkgQ29tYmluZXMgcmVwb3NpdG9yeSBmbGFncyB3aXRoIHBlZXIgY29uZmlndXJhdGlvbiBvdmVycmlkZXNcbiAqIEBpbnRlcmZhY2UgRmFicmljRmxhZ3NcbiAqIEBleHRlbmRzIHtSZXBvc2l0b3J5RmxhZ3N9XG4gKiBAbWVtYmVyT2YgbW9kdWxlOmZvci1mYWJyaWMuc2hhcmVkXG4gKi9cbmV4cG9ydCB0eXBlIEZhYnJpY0ZsYWdzID0gUmVwb3NpdG9yeUZsYWdzO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb25maWd1cmF0aW9uIGZvciBjb25uZWN0aW5nIHRvIGEgSHlwZXJsZWRnZXIgRmFicmljIHBlZXJcbiAqIEBzdW1tYXJ5IENvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5IHBhcmFtZXRlcnMgdG8gZXN0YWJsaXNoIGEgY29ubmVjdGlvbiB0byBhIEZhYnJpYyBwZWVyIGFuZCBpbnRlcmFjdCB3aXRoIGNoYWluY29kZVxuICogQHR5cGVkZWYge09iamVjdH0gQ0FDb25maWdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB1cmwgLSBQYXRoIHRvIHRoZSBjcnlwdG8gbWF0ZXJpYWxzXG4gKiBAcHJvcGVydHkge1RMU09wdGlvbnN9IHRscyAtIFBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHByaXZhdGUga2V5c1xuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhTmFtZSAtIFBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIGNlcnRpZmljYXRlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IHRsc0NlcnRQYXRoIC0gUGF0aCB0byB0aGUgVExTIGNlcnRpZmljYXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gY2FDZXJ0IC0gRW5kcG9pbnQgVVJMIGZvciB0aGUgcGVlclxuICogQHByb3BlcnR5IHtzdHJpbmd9IGNhS2V5IC0gSG9zdCBhbGlhcyBmb3IgdGhlIHBlZXJcbiAqIEBtZW1iZXJPZiBtb2R1bGU6Zm9yLWZhYnJpYy5zaGFyZWRcbiAqL1xuZXhwb3J0IHR5cGUgQ0FDb25maWcgPSB7XG4gIHVybDogc3RyaW5nO1xuICB0bHM/OiBUTFNPcHRpb25zO1xuICBjYU5hbWU6IHN0cmluZztcbiAgY2FDZXJ0OiBzdHJpbmc7XG4gIGNhS2V5OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBVc2VyIGNyZWRlbnRpYWxzIGZvciBDQSBlbnJvbGxtZW50IG9yIGFjY2Vzc1xuICogQHN1bW1hcnkgT3B0aW9uYWwgdXNlcm5hbWUvcGFzc3dvcmQgcGFpciB1c2VkIHdoZW4gZW5yb2xsaW5nIHdpdGggYSBGYWJyaWMgQ0Egb3IgYXV0aGVudGljYXRpbmcgaW4gY2xpZW50IHV0aWxpdGllc1xuICogQGludGVyZmFjZSBDcmVkZW50aWFsc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFt1c2VyTmFtZV0gLSBPcHRpb25hbCB1c2VybmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtwYXNzd29yZF0gLSBPcHRpb25hbCBwYXNzd29yZFxuICogQG1lbWJlck9mIG1vZHVsZTpmb3ItZmFicmljLnNoYXJlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWRlbnRpYWxzIHtcbiAgdXNlck5hbWU/OiBzdHJpbmc7XG4gIHBhc3N3b3JkPzogc3RyaW5nO1xufVxuIl19
|
|
@@ -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
|
+
}
|