@explorins/pers-sdk 1.6.28 → 1.6.32

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 (42) hide show
  1. package/dist/analytics/models/index.d.ts +5 -45
  2. package/dist/analytics/models/index.d.ts.map +1 -1
  3. package/dist/campaign/api/campaign-api.d.ts +12 -17
  4. package/dist/campaign/api/campaign-api.d.ts.map +1 -1
  5. package/dist/campaign.cjs +1 -1
  6. package/dist/campaign.js +1 -1
  7. package/dist/chunks/{campaign-service-CWK9I388.cjs → campaign-service-BkZcaxf5.cjs} +27 -26
  8. package/dist/chunks/campaign-service-BkZcaxf5.cjs.map +1 -0
  9. package/dist/chunks/{campaign-service-Dd7gMjC9.js → campaign-service-DVkWLB7Y.js} +27 -26
  10. package/dist/chunks/campaign-service-DVkWLB7Y.js.map +1 -0
  11. package/dist/chunks/{pers-sdk-BOphq5pm.cjs → pers-sdk-BbflloQE.cjs} +74 -5
  12. package/dist/chunks/{pers-sdk-BOphq5pm.cjs.map → pers-sdk-BbflloQE.cjs.map} +1 -1
  13. package/dist/chunks/{pers-sdk-xQqoP4zx.js → pers-sdk-Cb3gtslf.js} +72 -3
  14. package/dist/chunks/{pers-sdk-xQqoP4zx.js.map → pers-sdk-Cb3gtslf.js.map} +1 -1
  15. package/dist/chunks/transaction-service-B7h_4Hg3.js +333 -0
  16. package/dist/chunks/transaction-service-B7h_4Hg3.js.map +1 -0
  17. package/dist/chunks/transaction-service-CXjTHCFu.cjs +336 -0
  18. package/dist/chunks/transaction-service-CXjTHCFu.cjs.map +1 -0
  19. package/dist/core.cjs +3 -3
  20. package/dist/core.js +3 -3
  21. package/dist/index.cjs +5 -9
  22. package/dist/index.cjs.map +1 -1
  23. package/dist/index.js +3 -3
  24. package/dist/managers/analytics-manager.d.ts +1 -1
  25. package/dist/managers/transaction-manager.d.ts +61 -5
  26. package/dist/managers/transaction-manager.d.ts.map +1 -1
  27. package/dist/package.json +2 -2
  28. package/dist/transaction/api/transaction-api.d.ts +10 -12
  29. package/dist/transaction/api/transaction-api.d.ts.map +1 -1
  30. package/dist/transaction/index.d.ts +0 -1
  31. package/dist/transaction/index.d.ts.map +1 -1
  32. package/dist/transaction/models/index.d.ts +0 -34
  33. package/dist/transaction/models/index.d.ts.map +1 -1
  34. package/dist/transaction/services/transaction-service.d.ts +19 -6
  35. package/dist/transaction/services/transaction-service.d.ts.map +1 -1
  36. package/dist/transaction.cjs +4 -346
  37. package/dist/transaction.cjs.map +1 -1
  38. package/dist/transaction.js +2 -341
  39. package/dist/transaction.js.map +1 -1
  40. package/package.json +2 -2
  41. package/dist/chunks/campaign-service-CWK9I388.cjs.map +0 -1
  42. package/dist/chunks/campaign-service-Dd7gMjC9.js.map +0 -1
@@ -0,0 +1,333 @@
1
+ import { TransactionRole } from '@explorins/pers-shared';
2
+
3
+ /**
4
+ * Platform-Agnostic Transaction API Client (UPDATED FOR NEW RESTful ENDPOINTS)
5
+ *
6
+ * Handles transaction operations using the PERS backend.
7
+ * Uses @explorins/pers-shared DTOs for consistency with backend.
8
+ *
9
+ * MIGRATION NOTES:
10
+ * - All endpoints changed from /transaction to /transactions
11
+ * - Role-based paths removed (no more /auth, /admin, /business in URLs)
12
+ * - New RESTful resource-based structure
13
+ * - Added new client-side transaction flow methods
14
+ * - Enhanced admin query capabilities
15
+ */
16
+ class TransactionApi {
17
+ constructor(apiClient) {
18
+ this.apiClient = apiClient;
19
+ this.basePath = '/transactions';
20
+ }
21
+ /**
22
+ * Get transaction by ID (public endpoint)
23
+ *
24
+ * UPDATED: /transaction/{id} → /transactions/{id}
25
+ */
26
+ async getTransactionById(transactionId) {
27
+ return this.apiClient.get(`${this.basePath}/${transactionId}`);
28
+ }
29
+ /**
30
+ * Unique method to create a transaction
31
+ * @param request
32
+ * @returns
33
+ */
34
+ async createTransaction(request) {
35
+ return this.apiClient.post(`${this.basePath}`, request);
36
+ // return this.apiClient.post<TransactionDTO>(`${this.basePath}/system`, request);
37
+ }
38
+ // ==========================================
39
+ // AUTHENTICATED USER OPERATIONS
40
+ // ==========================================
41
+ /**
42
+ * AUTH: Get user transaction history with role-based filtering
43
+ *
44
+ * UPDATED: Uses consolidated /transactions/me endpoint with role parameter
45
+ * @param role - Optional role filter (SENDER, RECIPIENT). If undefined, returns all user transactions
46
+ * @param limit - Maximum number of transactions to return (default: 1000)
47
+ */
48
+ async getUserTransactionHistory(role, limit = 1000) {
49
+ const params = new URLSearchParams({
50
+ limit: limit.toString(),
51
+ timestamp: Date.now().toString()
52
+ });
53
+ // Add role parameter if specified
54
+ if (role === TransactionRole.SENDER) {
55
+ params.set('role', TransactionRole.SENDER);
56
+ }
57
+ else if (role === TransactionRole.RECIPIENT) {
58
+ params.set('role', TransactionRole.RECIPIENT);
59
+ }
60
+ // If no role specified, get all transactions for the user
61
+ const response = await this.apiClient.get(`${this.basePath}/me?${params.toString()}`);
62
+ return [...(response.data || [])];
63
+ }
64
+ /**
65
+ * AUTH: Prepare existing transaction for client-side signing
66
+ *
67
+ * NEW ENDPOINT: GET /transactions/{id}/prepare
68
+ */
69
+ async prepareExistingTransaction(transactionId) {
70
+ return this.apiClient.get(`${this.basePath}/${transactionId}/prepare`);
71
+ }
72
+ /**
73
+ * AUTH: Submit client-side signed transaction
74
+ *
75
+ * NEW ENDPOINT: POST /transactions/submit
76
+ */
77
+ async submitSignedTransaction(signedTxData) {
78
+ return this.apiClient.post(`${this.basePath}/submit`, signedTxData);
79
+ }
80
+ // ==========================================
81
+ // BUSINESS OPERATIONS
82
+ // ==========================================
83
+ /**
84
+ * BUSINESS: Create business transaction
85
+ *
86
+ * UPDATED: /transaction/business/transaction → /transactions/business
87
+ */
88
+ /* async createBusinessTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
89
+ return this.apiClient.post<TransactionRequestResponseDTO>(`${this.basePath}`, request);
90
+ } */
91
+ // ==========================================
92
+ // ADMIN OPERATIONS
93
+ // ==========================================
94
+ /**
95
+ * ADMIN: Create admin transaction
96
+ *
97
+ * UPDATED: /transaction/admin/transaction → /transactions/admin
98
+ */
99
+ /* async createAdminTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
100
+ // return this.apiClient.post<TransactionRequestResponseDTO>(`${this.basePath}`, request);
101
+ return this.apiClient.post<TransactionDTO>(`${this.basePath}/system`, request);
102
+ } */
103
+ /**
104
+ * AUTH: Prepare client signed transaction (Create new transaction for signing)
105
+ *
106
+ * UPDATED: /transaction/auth/prepare-signing → /transactions (POST)
107
+ */
108
+ async prepareClientSignedTransaction(request) {
109
+ return this.apiClient.post(`${this.basePath}`, request);
110
+ }
111
+ /**
112
+ * ADMIN: Get all tenant transactions
113
+ *
114
+ * UPDATED: /transaction/admin → /transactions
115
+ */
116
+ async getTenantTransactions(limit = 1000) {
117
+ const params = new URLSearchParams({
118
+ limit: limit.toString()
119
+ });
120
+ const result = await this.apiClient.get(`${this.basePath}?${params.toString()}`);
121
+ // Extract data array from paginated response
122
+ return [...(result.data || [])];
123
+ }
124
+ /**
125
+ * ADMIN: Get paginated transactions with filtering and sorting
126
+ *
127
+ * UPDATED: /transaction/admin → /transactions (same endpoint, better structure)
128
+ */
129
+ async getPaginatedTransactions(params) {
130
+ const queryString = this.buildQueryParams(params).toString();
131
+ return this.apiClient.get(`${this.basePath}?${queryString}`);
132
+ }
133
+ /**
134
+ * ADMIN: Export transactions to CSV
135
+ *
136
+ * UPDATED: /transaction/admin/export/csv → /transactions/export/csv
137
+ */
138
+ async exportTransactionsCSV() {
139
+ return this.apiClient.get(`${this.basePath}/export/csv`, 'blob');
140
+ }
141
+ // ==========================================
142
+ // NEW ADMIN QUERY METHODS
143
+ // ==========================================
144
+ /**
145
+ * ADMIN: Query transactions by sender
146
+ *
147
+ * NEW ENDPOINT: POST /transactions/query-sender
148
+ */
149
+ /**
150
+ * Query transactions by sender using unified endpoint
151
+ */
152
+ async queryTransactionsBySender(accountSelector) {
153
+ // Build query parameters safely
154
+ const queryParams = {};
155
+ if (accountSelector.accountId) {
156
+ queryParams['participantId'] = accountSelector.accountId;
157
+ }
158
+ queryParams['role'] = TransactionRole.SENDER.toString();
159
+ const params = new URLSearchParams(queryParams);
160
+ return this.apiClient.get(`${this.basePath}?${params.toString()}`).then(response => response); // Extract items from paginated response
161
+ }
162
+ /**
163
+ * Query transactions by recipient using unified endpoint
164
+ */
165
+ async queryTransactionsByRecipient(accountSelector) {
166
+ // Build query parameters safely
167
+ const queryParams = {};
168
+ if (accountSelector.accountId) {
169
+ queryParams['participantId'] = accountSelector.accountId;
170
+ }
171
+ queryParams['role'] = TransactionRole.RECIPIENT.toString();
172
+ const params = new URLSearchParams(queryParams);
173
+ return this.apiClient.get(`${this.basePath}?${params.toString()}`).then(response => response); // Extract items from paginated response
174
+ }
175
+ /**
176
+ * ADMIN: Get transaction analytics
177
+ *
178
+ * NEW ENDPOINT: POST /transactions/analytics
179
+ */
180
+ async getTransactionAnalytics(analyticsRequest) {
181
+ return this.apiClient.post(`${this.basePath}/analytics`, analyticsRequest);
182
+ }
183
+ /**
184
+ * Helper to convert DTO object to URLSearchParams
185
+ * Handles nested 'filters' object and arrays correctly.
186
+ */
187
+ buildQueryParams(params) {
188
+ const query = new URLSearchParams();
189
+ // 1. Handle Root Pagination Fields
190
+ if (params.page !== undefined)
191
+ query.append('page', params.page.toString());
192
+ if (params.limit !== undefined)
193
+ query.append('limit', params.limit.toString());
194
+ if (params.sortBy)
195
+ query.append('sortBy', params.sortBy);
196
+ if (params.sortOrder)
197
+ query.append('sortOrder', params.sortOrder);
198
+ // 2. Handle Nested Filters
199
+ if (params.filters) {
200
+ Object.entries(params.filters).forEach(([key, value]) => {
201
+ // Skip undefined/null values
202
+ if (value === undefined || value === null || value === '')
203
+ return;
204
+ if (Array.isArray(value)) {
205
+ // Handle Arrays: NestJS expects 'status=A&status=B'
206
+ value.forEach((item) => query.append(key, String(item)));
207
+ }
208
+ else {
209
+ // Handle Single Values: 'search=0x123'
210
+ // NOTE: Backend Controller expects flat query params for filters
211
+ // e.g. ?search=...&status=... NOT ?filters[search]=...
212
+ // This mapping flattens 'filters.search' -> 'search' to match @Query('search') in Controller
213
+ const stringValue = (value instanceof Date) ? value.toISOString() : String(value);
214
+ query.append(key, stringValue);
215
+ }
216
+ });
217
+ }
218
+ return query;
219
+ }
220
+ }
221
+
222
+ /**
223
+ * Platform-Agnostic Transaction Service
224
+ *
225
+ * Contains transaction business logic and operations that work across platforms.
226
+ * No framework dependencies - pure TypeScript business logic.
227
+ *
228
+ * Focuses only on actual backend capabilities.
229
+ */
230
+ class TransactionService {
231
+ constructor(transactionApi) {
232
+ this.transactionApi = transactionApi;
233
+ }
234
+ /**
235
+ * Get transaction by ID
236
+ */
237
+ async getTransactionById(transactionId) {
238
+ return this.transactionApi.getTransactionById(transactionId);
239
+ }
240
+ // ==========================================
241
+ // AUTHENTICATED OPERATIONS
242
+ // ==========================================
243
+ /**
244
+ * AUTH: Create authenticated transaction
245
+ */
246
+ /* async createAuthTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
247
+ return this.transactionApi.createAuthTransaction(request);
248
+ } */
249
+ async createTransaction(request) {
250
+ return this.transactionApi.createTransaction(request);
251
+ }
252
+ async submitSignedTransaction(signedTxData) {
253
+ return this.transactionApi.submitSignedTransaction(signedTxData);
254
+ }
255
+ /**
256
+ * AUTH: Get user transaction history by type
257
+ */
258
+ async getUserTransactionHistory(role, limit = 1000) {
259
+ return this.transactionApi.getUserTransactionHistory(role, limit);
260
+ }
261
+ /**
262
+ * AUTH: Prepare existing transaction for client-side signing
263
+ */
264
+ async prepareExistingTransaction(transactionId) {
265
+ return this.transactionApi.prepareExistingTransaction(transactionId);
266
+ }
267
+ /**
268
+ * AUTH: Prepare client signed transaction
269
+ */
270
+ async prepareClientSignedTransaction(request) {
271
+ return this.transactionApi.prepareClientSignedTransaction(request);
272
+ }
273
+ // ==========================================
274
+ // BUSINESS OPERATIONS
275
+ // ==========================================
276
+ /**
277
+ * BUSINESS: Create business transaction
278
+ */
279
+ /* async createBusinessTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
280
+ return this.transactionApi.createBusinessTransaction(request);
281
+ } */
282
+ // ==========================================
283
+ // ADMIN OPERATIONS
284
+ // ==========================================
285
+ /**
286
+ * ADMIN: Create admin transaction
287
+ */
288
+ /* async createAdminTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
289
+ return this.transactionApi.createAdminTransaction(request);
290
+ } */
291
+ /**
292
+ * ADMIN: Get all tenant transactions
293
+ */
294
+ async getTenantTransactions(limit = 1000) {
295
+ return this.transactionApi.getTenantTransactions(limit);
296
+ }
297
+ /**
298
+ * ADMIN: Get paginated transactions with filtering and sorting
299
+ */
300
+ async getPaginatedTransactions(params) {
301
+ return this.transactionApi.getPaginatedTransactions(params);
302
+ }
303
+ /**
304
+ * ADMIN: Export transactions to CSV
305
+ */
306
+ async exportTransactionsCSV() {
307
+ return this.transactionApi.exportTransactionsCSV();
308
+ }
309
+ // ==========================================
310
+ // QUERY & ANALYTICS OPERATIONS
311
+ // ==========================================
312
+ /**
313
+ * Query transactions by sender
314
+ */
315
+ async queryTransactionsBySender(accountSelector) {
316
+ return this.transactionApi.queryTransactionsBySender(accountSelector);
317
+ }
318
+ /**
319
+ * Query transactions by recipient
320
+ */
321
+ async queryTransactionsByRecipient(accountSelector) {
322
+ return this.transactionApi.queryTransactionsByRecipient(accountSelector);
323
+ }
324
+ /**
325
+ * ADMIN: Get transaction analytics
326
+ */
327
+ async getTransactionAnalytics(analyticsRequest) {
328
+ return this.transactionApi.getTransactionAnalytics(analyticsRequest);
329
+ }
330
+ }
331
+
332
+ export { TransactionApi as T, TransactionService as a };
333
+ //# sourceMappingURL=transaction-service-B7h_4Hg3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-service-B7h_4Hg3.js","sources":["../../src/transaction/api/transaction-api.ts","../../src/transaction/services/transaction-service.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
@@ -0,0 +1,336 @@
1
+ 'use strict';
2
+
3
+ var persShared = require('@explorins/pers-shared');
4
+
5
+ /**
6
+ * Platform-Agnostic Transaction API Client (UPDATED FOR NEW RESTful ENDPOINTS)
7
+ *
8
+ * Handles transaction operations using the PERS backend.
9
+ * Uses @explorins/pers-shared DTOs for consistency with backend.
10
+ *
11
+ * MIGRATION NOTES:
12
+ * - All endpoints changed from /transaction to /transactions
13
+ * - Role-based paths removed (no more /auth, /admin, /business in URLs)
14
+ * - New RESTful resource-based structure
15
+ * - Added new client-side transaction flow methods
16
+ * - Enhanced admin query capabilities
17
+ */
18
+ class TransactionApi {
19
+ constructor(apiClient) {
20
+ this.apiClient = apiClient;
21
+ this.basePath = '/transactions';
22
+ }
23
+ /**
24
+ * Get transaction by ID (public endpoint)
25
+ *
26
+ * UPDATED: /transaction/{id} → /transactions/{id}
27
+ */
28
+ async getTransactionById(transactionId) {
29
+ return this.apiClient.get(`${this.basePath}/${transactionId}`);
30
+ }
31
+ /**
32
+ * Unique method to create a transaction
33
+ * @param request
34
+ * @returns
35
+ */
36
+ async createTransaction(request) {
37
+ return this.apiClient.post(`${this.basePath}`, request);
38
+ // return this.apiClient.post<TransactionDTO>(`${this.basePath}/system`, request);
39
+ }
40
+ // ==========================================
41
+ // AUTHENTICATED USER OPERATIONS
42
+ // ==========================================
43
+ /**
44
+ * AUTH: Get user transaction history with role-based filtering
45
+ *
46
+ * UPDATED: Uses consolidated /transactions/me endpoint with role parameter
47
+ * @param role - Optional role filter (SENDER, RECIPIENT). If undefined, returns all user transactions
48
+ * @param limit - Maximum number of transactions to return (default: 1000)
49
+ */
50
+ async getUserTransactionHistory(role, limit = 1000) {
51
+ const params = new URLSearchParams({
52
+ limit: limit.toString(),
53
+ timestamp: Date.now().toString()
54
+ });
55
+ // Add role parameter if specified
56
+ if (role === persShared.TransactionRole.SENDER) {
57
+ params.set('role', persShared.TransactionRole.SENDER);
58
+ }
59
+ else if (role === persShared.TransactionRole.RECIPIENT) {
60
+ params.set('role', persShared.TransactionRole.RECIPIENT);
61
+ }
62
+ // If no role specified, get all transactions for the user
63
+ const response = await this.apiClient.get(`${this.basePath}/me?${params.toString()}`);
64
+ return [...(response.data || [])];
65
+ }
66
+ /**
67
+ * AUTH: Prepare existing transaction for client-side signing
68
+ *
69
+ * NEW ENDPOINT: GET /transactions/{id}/prepare
70
+ */
71
+ async prepareExistingTransaction(transactionId) {
72
+ return this.apiClient.get(`${this.basePath}/${transactionId}/prepare`);
73
+ }
74
+ /**
75
+ * AUTH: Submit client-side signed transaction
76
+ *
77
+ * NEW ENDPOINT: POST /transactions/submit
78
+ */
79
+ async submitSignedTransaction(signedTxData) {
80
+ return this.apiClient.post(`${this.basePath}/submit`, signedTxData);
81
+ }
82
+ // ==========================================
83
+ // BUSINESS OPERATIONS
84
+ // ==========================================
85
+ /**
86
+ * BUSINESS: Create business transaction
87
+ *
88
+ * UPDATED: /transaction/business/transaction → /transactions/business
89
+ */
90
+ /* async createBusinessTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
91
+ return this.apiClient.post<TransactionRequestResponseDTO>(`${this.basePath}`, request);
92
+ } */
93
+ // ==========================================
94
+ // ADMIN OPERATIONS
95
+ // ==========================================
96
+ /**
97
+ * ADMIN: Create admin transaction
98
+ *
99
+ * UPDATED: /transaction/admin/transaction → /transactions/admin
100
+ */
101
+ /* async createAdminTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
102
+ // return this.apiClient.post<TransactionRequestResponseDTO>(`${this.basePath}`, request);
103
+ return this.apiClient.post<TransactionDTO>(`${this.basePath}/system`, request);
104
+ } */
105
+ /**
106
+ * AUTH: Prepare client signed transaction (Create new transaction for signing)
107
+ *
108
+ * UPDATED: /transaction/auth/prepare-signing → /transactions (POST)
109
+ */
110
+ async prepareClientSignedTransaction(request) {
111
+ return this.apiClient.post(`${this.basePath}`, request);
112
+ }
113
+ /**
114
+ * ADMIN: Get all tenant transactions
115
+ *
116
+ * UPDATED: /transaction/admin → /transactions
117
+ */
118
+ async getTenantTransactions(limit = 1000) {
119
+ const params = new URLSearchParams({
120
+ limit: limit.toString()
121
+ });
122
+ const result = await this.apiClient.get(`${this.basePath}?${params.toString()}`);
123
+ // Extract data array from paginated response
124
+ return [...(result.data || [])];
125
+ }
126
+ /**
127
+ * ADMIN: Get paginated transactions with filtering and sorting
128
+ *
129
+ * UPDATED: /transaction/admin → /transactions (same endpoint, better structure)
130
+ */
131
+ async getPaginatedTransactions(params) {
132
+ const queryString = this.buildQueryParams(params).toString();
133
+ return this.apiClient.get(`${this.basePath}?${queryString}`);
134
+ }
135
+ /**
136
+ * ADMIN: Export transactions to CSV
137
+ *
138
+ * UPDATED: /transaction/admin/export/csv → /transactions/export/csv
139
+ */
140
+ async exportTransactionsCSV() {
141
+ return this.apiClient.get(`${this.basePath}/export/csv`, 'blob');
142
+ }
143
+ // ==========================================
144
+ // NEW ADMIN QUERY METHODS
145
+ // ==========================================
146
+ /**
147
+ * ADMIN: Query transactions by sender
148
+ *
149
+ * NEW ENDPOINT: POST /transactions/query-sender
150
+ */
151
+ /**
152
+ * Query transactions by sender using unified endpoint
153
+ */
154
+ async queryTransactionsBySender(accountSelector) {
155
+ // Build query parameters safely
156
+ const queryParams = {};
157
+ if (accountSelector.accountId) {
158
+ queryParams['participantId'] = accountSelector.accountId;
159
+ }
160
+ queryParams['role'] = persShared.TransactionRole.SENDER.toString();
161
+ const params = new URLSearchParams(queryParams);
162
+ return this.apiClient.get(`${this.basePath}?${params.toString()}`).then(response => response); // Extract items from paginated response
163
+ }
164
+ /**
165
+ * Query transactions by recipient using unified endpoint
166
+ */
167
+ async queryTransactionsByRecipient(accountSelector) {
168
+ // Build query parameters safely
169
+ const queryParams = {};
170
+ if (accountSelector.accountId) {
171
+ queryParams['participantId'] = accountSelector.accountId;
172
+ }
173
+ queryParams['role'] = persShared.TransactionRole.RECIPIENT.toString();
174
+ const params = new URLSearchParams(queryParams);
175
+ return this.apiClient.get(`${this.basePath}?${params.toString()}`).then(response => response); // Extract items from paginated response
176
+ }
177
+ /**
178
+ * ADMIN: Get transaction analytics
179
+ *
180
+ * NEW ENDPOINT: POST /transactions/analytics
181
+ */
182
+ async getTransactionAnalytics(analyticsRequest) {
183
+ return this.apiClient.post(`${this.basePath}/analytics`, analyticsRequest);
184
+ }
185
+ /**
186
+ * Helper to convert DTO object to URLSearchParams
187
+ * Handles nested 'filters' object and arrays correctly.
188
+ */
189
+ buildQueryParams(params) {
190
+ const query = new URLSearchParams();
191
+ // 1. Handle Root Pagination Fields
192
+ if (params.page !== undefined)
193
+ query.append('page', params.page.toString());
194
+ if (params.limit !== undefined)
195
+ query.append('limit', params.limit.toString());
196
+ if (params.sortBy)
197
+ query.append('sortBy', params.sortBy);
198
+ if (params.sortOrder)
199
+ query.append('sortOrder', params.sortOrder);
200
+ // 2. Handle Nested Filters
201
+ if (params.filters) {
202
+ Object.entries(params.filters).forEach(([key, value]) => {
203
+ // Skip undefined/null values
204
+ if (value === undefined || value === null || value === '')
205
+ return;
206
+ if (Array.isArray(value)) {
207
+ // Handle Arrays: NestJS expects 'status=A&status=B'
208
+ value.forEach((item) => query.append(key, String(item)));
209
+ }
210
+ else {
211
+ // Handle Single Values: 'search=0x123'
212
+ // NOTE: Backend Controller expects flat query params for filters
213
+ // e.g. ?search=...&status=... NOT ?filters[search]=...
214
+ // This mapping flattens 'filters.search' -> 'search' to match @Query('search') in Controller
215
+ const stringValue = (value instanceof Date) ? value.toISOString() : String(value);
216
+ query.append(key, stringValue);
217
+ }
218
+ });
219
+ }
220
+ return query;
221
+ }
222
+ }
223
+
224
+ /**
225
+ * Platform-Agnostic Transaction Service
226
+ *
227
+ * Contains transaction business logic and operations that work across platforms.
228
+ * No framework dependencies - pure TypeScript business logic.
229
+ *
230
+ * Focuses only on actual backend capabilities.
231
+ */
232
+ class TransactionService {
233
+ constructor(transactionApi) {
234
+ this.transactionApi = transactionApi;
235
+ }
236
+ /**
237
+ * Get transaction by ID
238
+ */
239
+ async getTransactionById(transactionId) {
240
+ return this.transactionApi.getTransactionById(transactionId);
241
+ }
242
+ // ==========================================
243
+ // AUTHENTICATED OPERATIONS
244
+ // ==========================================
245
+ /**
246
+ * AUTH: Create authenticated transaction
247
+ */
248
+ /* async createAuthTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
249
+ return this.transactionApi.createAuthTransaction(request);
250
+ } */
251
+ async createTransaction(request) {
252
+ return this.transactionApi.createTransaction(request);
253
+ }
254
+ async submitSignedTransaction(signedTxData) {
255
+ return this.transactionApi.submitSignedTransaction(signedTxData);
256
+ }
257
+ /**
258
+ * AUTH: Get user transaction history by type
259
+ */
260
+ async getUserTransactionHistory(role, limit = 1000) {
261
+ return this.transactionApi.getUserTransactionHistory(role, limit);
262
+ }
263
+ /**
264
+ * AUTH: Prepare existing transaction for client-side signing
265
+ */
266
+ async prepareExistingTransaction(transactionId) {
267
+ return this.transactionApi.prepareExistingTransaction(transactionId);
268
+ }
269
+ /**
270
+ * AUTH: Prepare client signed transaction
271
+ */
272
+ async prepareClientSignedTransaction(request) {
273
+ return this.transactionApi.prepareClientSignedTransaction(request);
274
+ }
275
+ // ==========================================
276
+ // BUSINESS OPERATIONS
277
+ // ==========================================
278
+ /**
279
+ * BUSINESS: Create business transaction
280
+ */
281
+ /* async createBusinessTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
282
+ return this.transactionApi.createBusinessTransaction(request);
283
+ } */
284
+ // ==========================================
285
+ // ADMIN OPERATIONS
286
+ // ==========================================
287
+ /**
288
+ * ADMIN: Create admin transaction
289
+ */
290
+ /* async createAdminTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
291
+ return this.transactionApi.createAdminTransaction(request);
292
+ } */
293
+ /**
294
+ * ADMIN: Get all tenant transactions
295
+ */
296
+ async getTenantTransactions(limit = 1000) {
297
+ return this.transactionApi.getTenantTransactions(limit);
298
+ }
299
+ /**
300
+ * ADMIN: Get paginated transactions with filtering and sorting
301
+ */
302
+ async getPaginatedTransactions(params) {
303
+ return this.transactionApi.getPaginatedTransactions(params);
304
+ }
305
+ /**
306
+ * ADMIN: Export transactions to CSV
307
+ */
308
+ async exportTransactionsCSV() {
309
+ return this.transactionApi.exportTransactionsCSV();
310
+ }
311
+ // ==========================================
312
+ // QUERY & ANALYTICS OPERATIONS
313
+ // ==========================================
314
+ /**
315
+ * Query transactions by sender
316
+ */
317
+ async queryTransactionsBySender(accountSelector) {
318
+ return this.transactionApi.queryTransactionsBySender(accountSelector);
319
+ }
320
+ /**
321
+ * Query transactions by recipient
322
+ */
323
+ async queryTransactionsByRecipient(accountSelector) {
324
+ return this.transactionApi.queryTransactionsByRecipient(accountSelector);
325
+ }
326
+ /**
327
+ * ADMIN: Get transaction analytics
328
+ */
329
+ async getTransactionAnalytics(analyticsRequest) {
330
+ return this.transactionApi.getTransactionAnalytics(analyticsRequest);
331
+ }
332
+ }
333
+
334
+ exports.TransactionApi = TransactionApi;
335
+ exports.TransactionService = TransactionService;
336
+ //# sourceMappingURL=transaction-service-CXjTHCFu.cjs.map