@decaf-ts/for-fabric 0.0.2

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