@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,125 @@
1
+ import { Dispatch } from "@decaf-ts/core";
2
+ import { Client } from "@grpc/grpc-js";
3
+ import { FabricClientAdapter } from "./FabricClientAdapter";
4
+ /**
5
+ * @description Event dispatcher for Hyperledger Fabric chaincode events
6
+ * @summary Listens for and processes events emitted by Fabric chaincode, dispatching them to registered observers
7
+ * @template PeerConfig - Configuration type for connecting to a Fabric peer
8
+ * @param client - gRPC client for connecting to the Fabric network
9
+ * @class FabricClientDispatch
10
+ * @example
11
+ * ```typescript
12
+ * // Create a new FabricDispatch instance
13
+ * const client = await FabricAdapter.getClient(peerConfig);
14
+ * const dispatch = new FabricDispatch(client);
15
+ *
16
+ * // Configure the dispatch with peer configuration
17
+ * dispatch.configure(peerConfig);
18
+ *
19
+ * // Register an observer for a specific table and event
20
+ * dispatch.observe('users', 'create', (id) => {
21
+ * console.log(`User created: ${id}`);
22
+ * });
23
+ *
24
+ * // Start listening for events
25
+ * await dispatch.start();
26
+ * ```
27
+ * @mermaid
28
+ * sequenceDiagram
29
+ * participant Client
30
+ * participant FabricDispatch
31
+ * participant Gateway
32
+ * participant Network
33
+ * participant Chaincode
34
+ *
35
+ * Client->>FabricDispatch: new FabricDispatch(client)
36
+ * Client->>FabricDispatch: configure(peerConfig)
37
+ * Client->>FabricDispatch: observe(table, event, callback)
38
+ * Client->>FabricDispatch: start()
39
+ * FabricDispatch->>FabricDispatch: initialize()
40
+ * FabricDispatch->>Gateway: getGateway(config, client)
41
+ * Gateway->>Network: getNetwork(channel)
42
+ * Network->>Network: getChaincodeEvents(chaincodeName)
43
+ * FabricDispatch->>FabricDispatch: handleEvents()
44
+ * loop For each event
45
+ * Chaincode-->>FabricDispatch: ChaincodeEvent
46
+ * FabricDispatch->>FabricDispatch: parseEventName(eventName)
47
+ * FabricDispatch->>FabricDispatch: parsePayload(payload)
48
+ * FabricDispatch->>FabricDispatch: updateObservers(table, event, id)
49
+ * FabricDispatch-->>Client: callback(id)
50
+ * end
51
+ */
52
+ export declare class FabricClientDispatch extends Dispatch {
53
+ protected client: Client;
54
+ /**
55
+ * @description Event listening stack for chaincode events
56
+ */
57
+ private listeningStack?;
58
+ /**
59
+ * @description Text decoder for converting event payloads from bytes to strings
60
+ */
61
+ private decoder;
62
+ /**
63
+ * @description Creates a new FabricDispatch instance
64
+ * @summary Initializes a dispatcher for Fabric chaincode events
65
+ * @param {Client} client - gRPC client for connecting to the Fabric network
66
+ */
67
+ constructor(client: Client);
68
+ /**
69
+ * @description Closes the event listening connection
70
+ * @summary Stops listening for chaincode events and releases resources
71
+ * @return {Promise<void>} Promise that resolves when the connection is closed
72
+ */
73
+ close(): Promise<void>;
74
+ /**
75
+ * @description Parses event payload from binary format
76
+ * @summary Converts a Uint8Array containing JSON to an object with an id property
77
+ * @param {Uint8Array} jsonBytes - The binary payload from the chaincode event
78
+ * @return {{ id: string }} The parsed payload containing the record ID
79
+ */
80
+ private parsePayload;
81
+ /**
82
+ * @description Starts observing an adapter
83
+ * @summary Connects this dispatch to an adapter to monitor its operations
84
+ * @param {Adapter<any, any, any, any>} observer - The adapter to observe
85
+ * @return {void}
86
+ */
87
+ observe(observer: FabricClientAdapter): void;
88
+ /**
89
+ * @description Updates observers about a database event
90
+ * @summary Notifies observers about a change in the database
91
+ * @param {string} table - The name of the table where the change occurred
92
+ * @param {OperationKeys|BulkCrudOperationKeys|string} event - The type of operation that occurred
93
+ * @param {any} payload - The event payload
94
+ * @return {Promise<void>} A promise that resolves when all observers have been notified
95
+ */
96
+ updateObservers(table: string, event: string, payload: any): Promise<void>;
97
+ /**
98
+ * @description Processes incoming chaincode events
99
+ * @summary Listens for events from the chaincode and dispatches them to registered observers
100
+ * @return {Promise<void>} Promise that resolves when event handling stops
101
+ * @mermaid
102
+ * sequenceDiagram
103
+ * participant FabricDispatch
104
+ * participant EventStack
105
+ * participant EventParser
106
+ * participant Observers
107
+ *
108
+ * FabricDispatch->>FabricDispatch: handleEvents()
109
+ * FabricDispatch->>EventStack: for await (const evt of listeningStack)
110
+ * EventStack-->>FabricDispatch: ChaincodeEvent
111
+ * FabricDispatch->>EventParser: parseEventName(evt.eventName)
112
+ * EventParser-->>FabricDispatch: { table, event, owner }
113
+ * FabricDispatch->>FabricDispatch: Check if event is for this MSP
114
+ * FabricDispatch->>FabricDispatch: parsePayload(evt.payload)
115
+ * FabricDispatch->>Observers: updateObservers(table, event, payload.id)
116
+ * Observers-->>FabricDispatch: Callbacks executed
117
+ */
118
+ protected handleEvents(): Promise<void>;
119
+ /**
120
+ * @description Initializes the event listener
121
+ * @summary Sets up the connection to the Fabric network and starts listening for chaincode events
122
+ * @return {Promise<void>} Promise that resolves when initialization is complete
123
+ */
124
+ protected initialize(): Promise<void>;
125
+ }
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FabricClientRepository = void 0;
4
+ const core_1 = require("@decaf-ts/core");
5
+ const db_decorators_1 = require("@decaf-ts/db-decorators");
6
+ /**
7
+ * @description Repository implementation for Fabric client operations
8
+ * @summary Extends the generic Repository to prepare context and arguments for CRUD operations executed via a Fabric client Adapter, wiring RepositoryFlags and Fabric-specific overrides.
9
+ * @template M extends Model - The model type handled by this repository
10
+ * @param {Adapter<any, MangoQuery, FabricFlags, Context<FabricFlags>>} [adapter] - Optional adapter instance used to execute operations
11
+ * @param {Constructor<M>} [clazz] - Optional model constructor used by the repository
12
+ * @return {void}
13
+ * @class FabricClientRepository
14
+ * @example
15
+ * import { Repository } from "@decaf-ts/core";
16
+ * import { FabricClientRepository } from "@decaf-ts/for-fabric";
17
+ *
18
+ * class User extends Model { id!: string; name!: string; }
19
+ * const repo = new FabricClientRepository<User>();
20
+ * const created = await repo.create(new User({ id: "1", name: "Alice" }));
21
+ * const loaded = await repo.read("1");
22
+ *
23
+ * @mermaid
24
+ * sequenceDiagram
25
+ * participant App
26
+ * participant Repo as FabricClientRepository
27
+ * participant Adapter
28
+ * App->>Repo: create(model)
29
+ * Repo->>Repo: createPrefix(model, ...args)
30
+ * Repo->>Adapter: create(table, id, model, flags)
31
+ * Adapter-->>Repo: result
32
+ * Repo-->>App: model
33
+ */
34
+ class FabricClientRepository extends core_1.Repository {
35
+ constructor(adapter, clazz) {
36
+ super(adapter, clazz);
37
+ }
38
+ /**
39
+ * @description Prepare arguments and context for create
40
+ * @summary Builds repository context and ensures the model is instantiated with the repository's class before delegating to the adapter
41
+ * @param {M} model - The model instance to create
42
+ * @param {...any[]} args - Additional operation arguments and flags
43
+ * @return {...any[]} Tuple containing the prepared model and the processed arguments
44
+ */
45
+ async createPrefix(model, ...args) {
46
+ const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.CREATE, this.class, args, this.adapter, this._overrides || {});
47
+ model = new this.class(model);
48
+ return [model, ...contextArgs.args];
49
+ }
50
+ /**
51
+ * @description Prepare arguments and context for bulk create
52
+ * @summary Resolves repository context for a createAll operation passing through models and processed arguments
53
+ * @param {M[]} models - Array of model instances to create
54
+ * @param {...any} args - Additional operation arguments and flags
55
+ * @return {...any[]} Tuple containing the models array and processed arguments
56
+ */
57
+ async createAllPrefix(models, ...args) {
58
+ const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.CREATE, this.class, args, this.adapter, this._overrides || {});
59
+ return [models, ...contextArgs.args];
60
+ }
61
+ /**
62
+ * @description Prepare arguments and context for read
63
+ * @summary Resolves repository context for a read operation and forwards the key and processed arguments
64
+ * @param {string} key - The model primary key to read
65
+ * @param {...any} args - Additional operation arguments and flags
66
+ * @return {...any[]} Tuple containing the key and processed arguments
67
+ */
68
+ async readPrefix(key, ...args) {
69
+ const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.READ, this.class, args, this.adapter, this._overrides || {});
70
+ return [key, ...contextArgs.args];
71
+ }
72
+ /**
73
+ * @description Prepare arguments and context for bulk read
74
+ * @summary Resolves repository context for a readAll operation and forwards the keys and processed arguments
75
+ * @param {(string[]|number[])} keys - Array of model primary keys to read
76
+ * @param {...any} args - Additional operation arguments and flags
77
+ * @return {...any[]} Tuple containing the keys and processed arguments
78
+ */
79
+ async readAllPrefix(keys, ...args) {
80
+ const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.READ, this.class, args, this.adapter, this._overrides || {});
81
+ return [keys, ...contextArgs.args];
82
+ }
83
+ /**
84
+ * @description Prepare arguments and context for update
85
+ * @summary Resolves repository context for an update operation and forwards the model and processed arguments
86
+ * @param {M} model - The model instance to update
87
+ * @param {...any[]} args - Additional operation arguments and flags
88
+ * @return {...any[]} Tuple containing the model and processed arguments
89
+ */
90
+ async updatePrefix(model, ...args) {
91
+ const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.UPDATE, this.class, args, this.adapter, this._overrides || {});
92
+ return [model, ...contextArgs.args];
93
+ }
94
+ /**
95
+ * @description Prepare arguments and context for bulk update
96
+ * @summary Resolves repository context for an updateAll operation and forwards the models and processed arguments
97
+ * @param {M[]} models - The model instances to update
98
+ * @param {...any} args - Additional operation arguments and flags
99
+ * @return {...any[]} Tuple containing the models and processed arguments
100
+ */
101
+ async updateAllPrefix(models, ...args) {
102
+ const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.UPDATE, this.class, args, this.adapter, this._overrides || {});
103
+ return [models, ...contextArgs.args];
104
+ }
105
+ /**
106
+ * @description Prepare arguments and context for delete
107
+ * @summary Resolves repository context for a delete operation, ensures the target exists via read, then forwards key and processed arguments
108
+ * @param {string|number} key - The model primary key to delete
109
+ * @param {...any} args - Additional operation arguments and flags
110
+ * @return {...any[]} Tuple containing the key and processed arguments
111
+ */
112
+ async deletePrefix(key, ...args) {
113
+ const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.DELETE, this.class, args, this.adapter, this._overrides || {});
114
+ await this.read(key, ...contextArgs.args);
115
+ return [key, ...contextArgs.args];
116
+ }
117
+ /**
118
+ * @description Prepare arguments and context for bulk delete
119
+ * @summary Resolves repository context for a deleteAll operation, validates existence via readAll, then forwards keys and processed arguments
120
+ * @param {(string[]|number[])} keys - The model primary keys to delete
121
+ * @param {...any} args - Additional operation arguments and flags
122
+ * @return {...any[]} Tuple containing the keys and processed arguments
123
+ */
124
+ async deleteAllPrefix(keys, ...args) {
125
+ const contextArgs = await db_decorators_1.Context.args(db_decorators_1.OperationKeys.DELETE, this.class, args, this.adapter, this._overrides || {});
126
+ await this.readAll(keys, ...contextArgs.args);
127
+ return [keys, ...contextArgs.args];
128
+ }
129
+ }
130
+ exports.FabricClientRepository = FabricClientRepository;
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRmFicmljQ2xpZW50UmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGllbnQvRmFicmljQ2xpZW50UmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBcUQ7QUFHckQsMkRBSWlDO0FBR2pDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQkc7QUFDSCxNQUFhLHNCQUF3QyxTQUFRLGlCQUk1RDtJQUNDLFlBQ0UsT0FBMEUsRUFDMUUsS0FBc0I7UUFFdEIsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ2dCLEtBQUssQ0FBQyxZQUFZLENBQ25DLEtBQVEsRUFDUixHQUFHLElBQVc7UUFFZCxNQUFNLFdBQVcsR0FBRyxNQUFNLHVCQUFPLENBQUMsSUFBSSxDQUtwQyw2QkFBYSxDQUFDLE1BQU0sRUFDcEIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FDdEIsQ0FBQztRQUNGLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ2dCLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBVyxFQUFFLEdBQUcsSUFBVztRQUNsRSxNQUFNLFdBQVcsR0FBRyxNQUFNLHVCQUFPLENBQUMsSUFBSSxDQUNwQyw2QkFBYSxDQUFDLE1BQU0sRUFDcEIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FDdEIsQ0FBQztRQUNGLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNnQixLQUFLLENBQUMsVUFBVSxDQUFDLEdBQVcsRUFBRSxHQUFHLElBQVc7UUFDN0QsTUFBTSxXQUFXLEdBQUcsTUFBTSx1QkFBTyxDQUFDLElBQUksQ0FDcEMsNkJBQWEsQ0FBQyxJQUFJLEVBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxFQUNKLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQ3RCLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDZ0IsS0FBSyxDQUFDLGFBQWEsQ0FDcEMsSUFBeUIsRUFDekIsR0FBRyxJQUFXO1FBRWQsTUFBTSxXQUFXLEdBQUcsTUFBTSx1QkFBTyxDQUFDLElBQUksQ0FDcEMsNkJBQWEsQ0FBQyxJQUFJLEVBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxFQUNKLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQ3RCLENBQUM7UUFDRixPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDZ0IsS0FBSyxDQUFDLFlBQVksQ0FDbkMsS0FBUSxFQUNSLEdBQUcsSUFBVztRQUVkLE1BQU0sV0FBVyxHQUFHLE1BQU0sdUJBQU8sQ0FBQyxJQUFJLENBQ3BDLDZCQUFhLENBQUMsTUFBTSxFQUNwQixJQUFJLENBQUMsS0FBSyxFQUNWLElBQUksRUFDSixJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUN0QixDQUFDO1FBQ0YsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ2dCLEtBQUssQ0FBQyxlQUFlLENBQ3RDLE1BQVcsRUFDWCxHQUFHLElBQVc7UUFFZCxNQUFNLFdBQVcsR0FBRyxNQUFNLHVCQUFPLENBQUMsSUFBSSxDQUNwQyw2QkFBYSxDQUFDLE1BQU0sRUFDcEIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FDdEIsQ0FBQztRQUNGLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNnQixLQUFLLENBQUMsWUFBWSxDQUFDLEdBQVEsRUFBRSxHQUFHLElBQVc7UUFDNUQsTUFBTSxXQUFXLEdBQUcsTUFBTSx1QkFBTyxDQUFDLElBQUksQ0FDcEMsNkJBQWEsQ0FBQyxNQUFNLEVBQ3BCLElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxFQUNKLElBQUksQ0FBQyxPQUFPLEVBQ1osSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQ3RCLENBQUM7UUFDRixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNnQixLQUFLLENBQUMsZUFBZSxDQUN0QyxJQUF5QixFQUN6QixHQUFHLElBQVc7UUFFZCxNQUFNLFdBQVcsR0FBRyxNQUFNLHVCQUFPLENBQUMsSUFBSSxDQUNwQyw2QkFBYSxDQUFDLE1BQU0sRUFDcEIsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLEVBQ0osSUFBSSxDQUFDLE9BQU8sRUFDWixJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FDdEIsQ0FBQztRQUNGLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxDQUFDO0NBQ0Y7QUFqTEQsd0RBaUxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRhcHRlciwgUmVwb3NpdG9yeSB9IGZyb20gXCJAZGVjYWYtdHMvY29yZVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0b3IsIE1vZGVsIH0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgTWFuZ29RdWVyeSB9IGZyb20gXCJAZGVjYWYtdHMvZm9yLWNvdWNoZGJcIjtcbmltcG9ydCB7XG4gIENvbnRleHQsXG4gIE9wZXJhdGlvbktleXMsXG4gIFJlcG9zaXRvcnlGbGFncyxcbn0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5pbXBvcnQgeyBGYWJyaWNGbGFncyB9IGZyb20gXCIuLi9zaGFyZWRcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwb3NpdG9yeSBpbXBsZW1lbnRhdGlvbiBmb3IgRmFicmljIGNsaWVudCBvcGVyYXRpb25zXG4gKiBAc3VtbWFyeSBFeHRlbmRzIHRoZSBnZW5lcmljIFJlcG9zaXRvcnkgdG8gcHJlcGFyZSBjb250ZXh0IGFuZCBhcmd1bWVudHMgZm9yIENSVUQgb3BlcmF0aW9ucyBleGVjdXRlZCB2aWEgYSBGYWJyaWMgY2xpZW50IEFkYXB0ZXIsIHdpcmluZyBSZXBvc2l0b3J5RmxhZ3MgYW5kIEZhYnJpYy1zcGVjaWZpYyBvdmVycmlkZXMuXG4gKiBAdGVtcGxhdGUgTSBleHRlbmRzIE1vZGVsIC0gVGhlIG1vZGVsIHR5cGUgaGFuZGxlZCBieSB0aGlzIHJlcG9zaXRvcnlcbiAqIEBwYXJhbSB7QWRhcHRlcjxhbnksIE1hbmdvUXVlcnksIEZhYnJpY0ZsYWdzLCBDb250ZXh0PEZhYnJpY0ZsYWdzPj59IFthZGFwdGVyXSAtIE9wdGlvbmFsIGFkYXB0ZXIgaW5zdGFuY2UgdXNlZCB0byBleGVjdXRlIG9wZXJhdGlvbnNcbiAqIEBwYXJhbSB7Q29uc3RydWN0b3I8TT59IFtjbGF6el0gLSBPcHRpb25hbCBtb2RlbCBjb25zdHJ1Y3RvciB1c2VkIGJ5IHRoZSByZXBvc2l0b3J5XG4gKiBAcmV0dXJuIHt2b2lkfVxuICogQGNsYXNzIEZhYnJpY0NsaWVudFJlcG9zaXRvcnlcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9jb3JlXCI7XG4gKiBpbXBvcnQgeyBGYWJyaWNDbGllbnRSZXBvc2l0b3J5IH0gZnJvbSBcIkBkZWNhZi10cy9mb3ItZmFicmljXCI7XG4gKlxuICogY2xhc3MgVXNlciBleHRlbmRzIE1vZGVsIHsgaWQhOiBzdHJpbmc7IG5hbWUhOiBzdHJpbmc7IH1cbiAqIGNvbnN0IHJlcG8gPSBuZXcgRmFicmljQ2xpZW50UmVwb3NpdG9yeTxVc2VyPigpO1xuICogY29uc3QgY3JlYXRlZCA9IGF3YWl0IHJlcG8uY3JlYXRlKG5ldyBVc2VyKHsgaWQ6IFwiMVwiLCBuYW1lOiBcIkFsaWNlXCIgfSkpO1xuICogY29uc3QgbG9hZGVkID0gYXdhaXQgcmVwby5yZWFkKFwiMVwiKTtcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IEFwcFxuICogICBwYXJ0aWNpcGFudCBSZXBvIGFzIEZhYnJpY0NsaWVudFJlcG9zaXRvcnlcbiAqICAgcGFydGljaXBhbnQgQWRhcHRlclxuICogICBBcHAtPj5SZXBvOiBjcmVhdGUobW9kZWwpXG4gKiAgIFJlcG8tPj5SZXBvOiBjcmVhdGVQcmVmaXgobW9kZWwsIC4uLmFyZ3MpXG4gKiAgIFJlcG8tPj5BZGFwdGVyOiBjcmVhdGUodGFibGUsIGlkLCBtb2RlbCwgZmxhZ3MpXG4gKiAgIEFkYXB0ZXItLT4+UmVwbzogcmVzdWx0XG4gKiAgIFJlcG8tLT4+QXBwOiBtb2RlbFxuICovXG5leHBvcnQgY2xhc3MgRmFicmljQ2xpZW50UmVwb3NpdG9yeTxNIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgUmVwb3NpdG9yeTxcbiAgTSxcbiAgTWFuZ29RdWVyeSxcbiAgQWRhcHRlcjxhbnksIGFueSwgTWFuZ29RdWVyeSwgRmFicmljRmxhZ3MsIENvbnRleHQ8RmFicmljRmxhZ3M+PlxuPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGFkYXB0ZXI/OiBBZGFwdGVyPGFueSwgYW55LCBNYW5nb1F1ZXJ5LCBGYWJyaWNGbGFncywgQ29udGV4dDxGYWJyaWNGbGFncz4+LFxuICAgIGNsYXp6PzogQ29uc3RydWN0b3I8TT5cbiAgKSB7XG4gICAgc3VwZXIoYWRhcHRlciwgY2xhenopO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlIGFyZ3VtZW50cyBhbmQgY29udGV4dCBmb3IgY3JlYXRlXG4gICAqIEBzdW1tYXJ5IEJ1aWxkcyByZXBvc2l0b3J5IGNvbnRleHQgYW5kIGVuc3VyZXMgdGhlIG1vZGVsIGlzIGluc3RhbnRpYXRlZCB3aXRoIHRoZSByZXBvc2l0b3J5J3MgY2xhc3MgYmVmb3JlIGRlbGVnYXRpbmcgdG8gdGhlIGFkYXB0ZXJcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSB0byBjcmVhdGVcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgb3BlcmF0aW9uIGFyZ3VtZW50cyBhbmQgZmxhZ3NcbiAgICogQHJldHVybiB7Li4uYW55W119IFR1cGxlIGNvbnRhaW5pbmcgdGhlIHByZXBhcmVkIG1vZGVsIGFuZCB0aGUgcHJvY2Vzc2VkIGFyZ3VtZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGNyZWF0ZVByZWZpeChcbiAgICBtb2RlbDogTSxcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBQcm9taXNlPFtNLCAuLi5hbnlbXV0+IHtcbiAgICBjb25zdCBjb250ZXh0QXJncyA9IGF3YWl0IENvbnRleHQuYXJnczxcbiAgICAgIE0sXG4gICAgICBDb250ZXh0PFJlcG9zaXRvcnlGbGFncz4sXG4gICAgICBSZXBvc2l0b3J5RmxhZ3NcbiAgICA+KFxuICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgbW9kZWwgPSBuZXcgdGhpcy5jbGFzcyhtb2RlbCk7XG4gICAgcmV0dXJuIFttb2RlbCwgLi4uY29udGV4dEFyZ3MuYXJnc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmUgYXJndW1lbnRzIGFuZCBjb250ZXh0IGZvciBidWxrIGNyZWF0ZVxuICAgKiBAc3VtbWFyeSBSZXNvbHZlcyByZXBvc2l0b3J5IGNvbnRleHQgZm9yIGEgY3JlYXRlQWxsIG9wZXJhdGlvbiBwYXNzaW5nIHRocm91Z2ggbW9kZWxzIGFuZCBwcm9jZXNzZWQgYXJndW1lbnRzXG4gICAqIEBwYXJhbSB7TVtdfSBtb2RlbHMgLSBBcnJheSBvZiBtb2RlbCBpbnN0YW5jZXMgdG8gY3JlYXRlXG4gICAqIEBwYXJhbSB7Li4uYW55fSBhcmdzIC0gQWRkaXRpb25hbCBvcGVyYXRpb24gYXJndW1lbnRzIGFuZCBmbGFnc1xuICAgKiBAcmV0dXJuIHsuLi5hbnlbXX0gVHVwbGUgY29udGFpbmluZyB0aGUgbW9kZWxzIGFycmF5IGFuZCBwcm9jZXNzZWQgYXJndW1lbnRzXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgY3JlYXRlQWxsUHJlZml4KG1vZGVsczogTVtdLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5DUkVBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgcmV0dXJuIFttb2RlbHMsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlIGFyZ3VtZW50cyBhbmQgY29udGV4dCBmb3IgcmVhZFxuICAgKiBAc3VtbWFyeSBSZXNvbHZlcyByZXBvc2l0b3J5IGNvbnRleHQgZm9yIGEgcmVhZCBvcGVyYXRpb24gYW5kIGZvcndhcmRzIHRoZSBrZXkgYW5kIHByb2Nlc3NlZCBhcmd1bWVudHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBtb2RlbCBwcmltYXJ5IGtleSB0byByZWFkXG4gICAqIEBwYXJhbSB7Li4uYW55fSBhcmdzIC0gQWRkaXRpb25hbCBvcGVyYXRpb24gYXJndW1lbnRzIGFuZCBmbGFnc1xuICAgKiBAcmV0dXJuIHsuLi5hbnlbXX0gVHVwbGUgY29udGFpbmluZyB0aGUga2V5IGFuZCBwcm9jZXNzZWQgYXJndW1lbnRzXG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgcmVhZFByZWZpeChrZXk6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcbiAgICBjb25zdCBjb250ZXh0QXJncyA9IGF3YWl0IENvbnRleHQuYXJncyhcbiAgICAgIE9wZXJhdGlvbktleXMuUkVBRCxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzLFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgdGhpcy5fb3ZlcnJpZGVzIHx8IHt9XG4gICAgKTtcbiAgICByZXR1cm4gW2tleSwgLi4uY29udGV4dEFyZ3MuYXJnc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmUgYXJndW1lbnRzIGFuZCBjb250ZXh0IGZvciBidWxrIHJlYWRcbiAgICogQHN1bW1hcnkgUmVzb2x2ZXMgcmVwb3NpdG9yeSBjb250ZXh0IGZvciBhIHJlYWRBbGwgb3BlcmF0aW9uIGFuZCBmb3J3YXJkcyB0aGUga2V5cyBhbmQgcHJvY2Vzc2VkIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0geyhzdHJpbmdbXXxudW1iZXJbXSl9IGtleXMgLSBBcnJheSBvZiBtb2RlbCBwcmltYXJ5IGtleXMgdG8gcmVhZFxuICAgKiBAcGFyYW0gey4uLmFueX0gYXJncyAtIEFkZGl0aW9uYWwgb3BlcmF0aW9uIGFyZ3VtZW50cyBhbmQgZmxhZ3NcbiAgICogQHJldHVybiB7Li4uYW55W119IFR1cGxlIGNvbnRhaW5pbmcgdGhlIGtleXMgYW5kIHByb2Nlc3NlZCBhcmd1bWVudHNcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyByZWFkQWxsUHJlZml4KFxuICAgIGtleXM6IHN0cmluZ1tdIHwgbnVtYmVyW10sXG4gICAgLi4uYXJnczogYW55W11cbiAgKSB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhd2FpdCBDb250ZXh0LmFyZ3MoXG4gICAgICBPcGVyYXRpb25LZXlzLlJFQUQsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgcmV0dXJuIFtrZXlzLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZSBhcmd1bWVudHMgYW5kIGNvbnRleHQgZm9yIHVwZGF0ZVxuICAgKiBAc3VtbWFyeSBSZXNvbHZlcyByZXBvc2l0b3J5IGNvbnRleHQgZm9yIGFuIHVwZGF0ZSBvcGVyYXRpb24gYW5kIGZvcndhcmRzIHRoZSBtb2RlbCBhbmQgcHJvY2Vzc2VkIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIHRvIHVwZGF0ZVxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBvcGVyYXRpb24gYXJndW1lbnRzIGFuZCBmbGFnc1xuICAgKiBAcmV0dXJuIHsuLi5hbnlbXX0gVHVwbGUgY29udGFpbmluZyB0aGUgbW9kZWwgYW5kIHByb2Nlc3NlZCBhcmd1bWVudHNcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB1cGRhdGVQcmVmaXgoXG4gICAgbW9kZWw6IE0sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxbTSwgLi4uYXJnczogYW55W11dPiB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhd2FpdCBDb250ZXh0LmFyZ3MoXG4gICAgICBPcGVyYXRpb25LZXlzLlVQREFURSxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzLFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgdGhpcy5fb3ZlcnJpZGVzIHx8IHt9XG4gICAgKTtcbiAgICByZXR1cm4gW21vZGVsLCAuLi5jb250ZXh0QXJncy5hcmdzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJlcGFyZSBhcmd1bWVudHMgYW5kIGNvbnRleHQgZm9yIGJ1bGsgdXBkYXRlXG4gICAqIEBzdW1tYXJ5IFJlc29sdmVzIHJlcG9zaXRvcnkgY29udGV4dCBmb3IgYW4gdXBkYXRlQWxsIG9wZXJhdGlvbiBhbmQgZm9yd2FyZHMgdGhlIG1vZGVscyBhbmQgcHJvY2Vzc2VkIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0ge01bXX0gbW9kZWxzIC0gVGhlIG1vZGVsIGluc3RhbmNlcyB0byB1cGRhdGVcbiAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3MgLSBBZGRpdGlvbmFsIG9wZXJhdGlvbiBhcmd1bWVudHMgYW5kIGZsYWdzXG4gICAqIEByZXR1cm4gey4uLmFueVtdfSBUdXBsZSBjb250YWluaW5nIHRoZSBtb2RlbHMgYW5kIHByb2Nlc3NlZCBhcmd1bWVudHNcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyB1cGRhdGVBbGxQcmVmaXgoXG4gICAgbW9kZWxzOiBNW10sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgcmV0dXJuIFttb2RlbHMsIC4uLmNvbnRleHRBcmdzLmFyZ3NdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQcmVwYXJlIGFyZ3VtZW50cyBhbmQgY29udGV4dCBmb3IgZGVsZXRlXG4gICAqIEBzdW1tYXJ5IFJlc29sdmVzIHJlcG9zaXRvcnkgY29udGV4dCBmb3IgYSBkZWxldGUgb3BlcmF0aW9uLCBlbnN1cmVzIHRoZSB0YXJnZXQgZXhpc3RzIHZpYSByZWFkLCB0aGVuIGZvcndhcmRzIGtleSBhbmQgcHJvY2Vzc2VkIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGtleSAtIFRoZSBtb2RlbCBwcmltYXJ5IGtleSB0byBkZWxldGVcbiAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3MgLSBBZGRpdGlvbmFsIG9wZXJhdGlvbiBhcmd1bWVudHMgYW5kIGZsYWdzXG4gICAqIEByZXR1cm4gey4uLmFueVtdfSBUdXBsZSBjb250YWluaW5nIHRoZSBrZXkgYW5kIHByb2Nlc3NlZCBhcmd1bWVudHNcbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBkZWxldGVQcmVmaXgoa2V5OiBhbnksIC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgY29uc3QgY29udGV4dEFyZ3MgPSBhd2FpdCBDb250ZXh0LmFyZ3MoXG4gICAgICBPcGVyYXRpb25LZXlzLkRFTEVURSxcbiAgICAgIHRoaXMuY2xhc3MsXG4gICAgICBhcmdzLFxuICAgICAgdGhpcy5hZGFwdGVyLFxuICAgICAgdGhpcy5fb3ZlcnJpZGVzIHx8IHt9XG4gICAgKTtcbiAgICBhd2FpdCB0aGlzLnJlYWQoa2V5LCAuLi5jb250ZXh0QXJncy5hcmdzKTtcbiAgICByZXR1cm4gW2tleSwgLi4uY29udGV4dEFyZ3MuYXJnc107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByZXBhcmUgYXJndW1lbnRzIGFuZCBjb250ZXh0IGZvciBidWxrIGRlbGV0ZVxuICAgKiBAc3VtbWFyeSBSZXNvbHZlcyByZXBvc2l0b3J5IGNvbnRleHQgZm9yIGEgZGVsZXRlQWxsIG9wZXJhdGlvbiwgdmFsaWRhdGVzIGV4aXN0ZW5jZSB2aWEgcmVhZEFsbCwgdGhlbiBmb3J3YXJkcyBrZXlzIGFuZCBwcm9jZXNzZWQgYXJndW1lbnRzXG4gICAqIEBwYXJhbSB7KHN0cmluZ1tdfG51bWJlcltdKX0ga2V5cyAtIFRoZSBtb2RlbCBwcmltYXJ5IGtleXMgdG8gZGVsZXRlXG4gICAqIEBwYXJhbSB7Li4uYW55fSBhcmdzIC0gQWRkaXRpb25hbCBvcGVyYXRpb24gYXJndW1lbnRzIGFuZCBmbGFnc1xuICAgKiBAcmV0dXJuIHsuLi5hbnlbXX0gVHVwbGUgY29udGFpbmluZyB0aGUga2V5cyBhbmQgcHJvY2Vzc2VkIGFyZ3VtZW50c1xuICAgKi9cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGFzeW5jIGRlbGV0ZUFsbFByZWZpeChcbiAgICBrZXlzOiBzdHJpbmdbXSB8IG51bWJlcltdLFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICkge1xuICAgIGNvbnN0IGNvbnRleHRBcmdzID0gYXdhaXQgQ29udGV4dC5hcmdzKFxuICAgICAgT3BlcmF0aW9uS2V5cy5ERUxFVEUsXG4gICAgICB0aGlzLmNsYXNzLFxuICAgICAgYXJncyxcbiAgICAgIHRoaXMuYWRhcHRlcixcbiAgICAgIHRoaXMuX292ZXJyaWRlcyB8fCB7fVxuICAgICk7XG4gICAgYXdhaXQgdGhpcy5yZWFkQWxsKGtleXMsIC4uLmNvbnRleHRBcmdzLmFyZ3MpO1xuICAgIHJldHVybiBba2V5cywgLi4uY29udGV4dEFyZ3MuYXJnc107XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,100 @@
1
+ import { Adapter, Repository } from "@decaf-ts/core";
2
+ import { Constructor, Model } from "@decaf-ts/decorator-validation";
3
+ import { MangoQuery } from "@decaf-ts/for-couchdb";
4
+ import { Context } from "@decaf-ts/db-decorators";
5
+ import { FabricFlags } from "../shared";
6
+ /**
7
+ * @description Repository implementation for Fabric client operations
8
+ * @summary Extends the generic Repository to prepare context and arguments for CRUD operations executed via a Fabric client Adapter, wiring RepositoryFlags and Fabric-specific overrides.
9
+ * @template M extends Model - The model type handled by this repository
10
+ * @param {Adapter<any, MangoQuery, FabricFlags, Context<FabricFlags>>} [adapter] - Optional adapter instance used to execute operations
11
+ * @param {Constructor<M>} [clazz] - Optional model constructor used by the repository
12
+ * @return {void}
13
+ * @class FabricClientRepository
14
+ * @example
15
+ * import { Repository } from "@decaf-ts/core";
16
+ * import { FabricClientRepository } from "@decaf-ts/for-fabric";
17
+ *
18
+ * class User extends Model { id!: string; name!: string; }
19
+ * const repo = new FabricClientRepository<User>();
20
+ * const created = await repo.create(new User({ id: "1", name: "Alice" }));
21
+ * const loaded = await repo.read("1");
22
+ *
23
+ * @mermaid
24
+ * sequenceDiagram
25
+ * participant App
26
+ * participant Repo as FabricClientRepository
27
+ * participant Adapter
28
+ * App->>Repo: create(model)
29
+ * Repo->>Repo: createPrefix(model, ...args)
30
+ * Repo->>Adapter: create(table, id, model, flags)
31
+ * Adapter-->>Repo: result
32
+ * Repo-->>App: model
33
+ */
34
+ export declare class FabricClientRepository<M extends Model> extends Repository<M, MangoQuery, Adapter<any, any, MangoQuery, FabricFlags, Context<FabricFlags>>> {
35
+ constructor(adapter?: Adapter<any, any, MangoQuery, FabricFlags, Context<FabricFlags>>, clazz?: Constructor<M>);
36
+ /**
37
+ * @description Prepare arguments and context for create
38
+ * @summary Builds repository context and ensures the model is instantiated with the repository's class before delegating to the adapter
39
+ * @param {M} model - The model instance to create
40
+ * @param {...any[]} args - Additional operation arguments and flags
41
+ * @return {...any[]} Tuple containing the prepared model and the processed arguments
42
+ */
43
+ protected createPrefix(model: M, ...args: any[]): Promise<[M, ...any[]]>;
44
+ /**
45
+ * @description Prepare arguments and context for bulk create
46
+ * @summary Resolves repository context for a createAll operation passing through models and processed arguments
47
+ * @param {M[]} models - Array of model instances to create
48
+ * @param {...any} args - Additional operation arguments and flags
49
+ * @return {...any[]} Tuple containing the models array and processed arguments
50
+ */
51
+ protected createAllPrefix(models: M[], ...args: any[]): Promise<any[]>;
52
+ /**
53
+ * @description Prepare arguments and context for read
54
+ * @summary Resolves repository context for a read operation and forwards the key and processed arguments
55
+ * @param {string} key - The model primary key to read
56
+ * @param {...any} args - Additional operation arguments and flags
57
+ * @return {...any[]} Tuple containing the key and processed arguments
58
+ */
59
+ protected readPrefix(key: string, ...args: any[]): Promise<any[]>;
60
+ /**
61
+ * @description Prepare arguments and context for bulk read
62
+ * @summary Resolves repository context for a readAll operation and forwards the keys and processed arguments
63
+ * @param {(string[]|number[])} keys - Array of model primary keys to read
64
+ * @param {...any} args - Additional operation arguments and flags
65
+ * @return {...any[]} Tuple containing the keys and processed arguments
66
+ */
67
+ protected readAllPrefix(keys: string[] | number[], ...args: any[]): Promise<any[]>;
68
+ /**
69
+ * @description Prepare arguments and context for update
70
+ * @summary Resolves repository context for an update operation and forwards the model and processed arguments
71
+ * @param {M} model - The model instance to update
72
+ * @param {...any[]} args - Additional operation arguments and flags
73
+ * @return {...any[]} Tuple containing the model and processed arguments
74
+ */
75
+ protected updatePrefix(model: M, ...args: any[]): Promise<[M, ...args: any[]]>;
76
+ /**
77
+ * @description Prepare arguments and context for bulk update
78
+ * @summary Resolves repository context for an updateAll operation and forwards the models and processed arguments
79
+ * @param {M[]} models - The model instances to update
80
+ * @param {...any} args - Additional operation arguments and flags
81
+ * @return {...any[]} Tuple containing the models and processed arguments
82
+ */
83
+ protected updateAllPrefix(models: M[], ...args: any[]): Promise<any[]>;
84
+ /**
85
+ * @description Prepare arguments and context for delete
86
+ * @summary Resolves repository context for a delete operation, ensures the target exists via read, then forwards key and processed arguments
87
+ * @param {string|number} key - The model primary key to delete
88
+ * @param {...any} args - Additional operation arguments and flags
89
+ * @return {...any[]} Tuple containing the key and processed arguments
90
+ */
91
+ protected deletePrefix(key: any, ...args: any[]): Promise<any[]>;
92
+ /**
93
+ * @description Prepare arguments and context for bulk delete
94
+ * @summary Resolves repository context for a deleteAll operation, validates existence via readAll, then forwards keys and processed arguments
95
+ * @param {(string[]|number[])} keys - The model primary keys to delete
96
+ * @param {...any} args - Additional operation arguments and flags
97
+ * @return {...any[]} Tuple containing the keys and processed arguments
98
+ */
99
+ protected deleteAllPrefix(keys: string[] | number[], ...args: any[]): Promise<any[]>;
100
+ }