@explorins/pers-sdk 1.6.27 → 1.6.30

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/campaign/api/campaign-api.d.ts +2 -12
  2. package/dist/campaign/api/campaign-api.d.ts.map +1 -1
  3. package/dist/campaign.cjs +1 -1
  4. package/dist/campaign.js +1 -1
  5. package/dist/chunks/{campaign-service-Dd7gMjC9.js → campaign-service-BBB_HlK2.js} +3 -17
  6. package/dist/chunks/campaign-service-BBB_HlK2.js.map +1 -0
  7. package/dist/chunks/{campaign-service-CWK9I388.cjs → campaign-service-sLgVhBUK.cjs} +3 -17
  8. package/dist/chunks/campaign-service-sLgVhBUK.cjs.map +1 -0
  9. package/dist/chunks/{pers-sdk-D0T6Amfp.js → pers-sdk-Bt9D_tLS.js} +77 -8
  10. package/dist/chunks/{pers-sdk-D0T6Amfp.js.map → pers-sdk-Bt9D_tLS.js.map} +1 -1
  11. package/dist/chunks/{pers-sdk-BBEOX58U.cjs → pers-sdk-CQpjfRIm.cjs} +79 -10
  12. package/dist/chunks/{pers-sdk-BBEOX58U.cjs.map → pers-sdk-CQpjfRIm.cjs.map} +1 -1
  13. package/dist/chunks/transaction-service-C2sVByGQ.js +332 -0
  14. package/dist/chunks/transaction-service-C2sVByGQ.js.map +1 -0
  15. package/dist/chunks/transaction-service-oA5BRzWy.cjs +335 -0
  16. package/dist/chunks/transaction-service-oA5BRzWy.cjs.map +1 -0
  17. package/dist/core.cjs +3 -3
  18. package/dist/core.js +3 -3
  19. package/dist/index.cjs +5 -9
  20. package/dist/index.cjs.map +1 -1
  21. package/dist/index.js +3 -3
  22. package/dist/managers/redemption-manager.d.ts +4 -4
  23. package/dist/managers/redemption-manager.d.ts.map +1 -1
  24. package/dist/managers/transaction-manager.d.ts +61 -5
  25. package/dist/managers/transaction-manager.d.ts.map +1 -1
  26. package/dist/package.json +2 -2
  27. package/dist/pers-sdk.d.ts +1 -1
  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,332 @@
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
+ query.append(key, String(value));
214
+ }
215
+ });
216
+ }
217
+ return query;
218
+ }
219
+ }
220
+
221
+ /**
222
+ * Platform-Agnostic Transaction Service
223
+ *
224
+ * Contains transaction business logic and operations that work across platforms.
225
+ * No framework dependencies - pure TypeScript business logic.
226
+ *
227
+ * Focuses only on actual backend capabilities.
228
+ */
229
+ class TransactionService {
230
+ constructor(transactionApi) {
231
+ this.transactionApi = transactionApi;
232
+ }
233
+ /**
234
+ * Get transaction by ID
235
+ */
236
+ async getTransactionById(transactionId) {
237
+ return this.transactionApi.getTransactionById(transactionId);
238
+ }
239
+ // ==========================================
240
+ // AUTHENTICATED OPERATIONS
241
+ // ==========================================
242
+ /**
243
+ * AUTH: Create authenticated transaction
244
+ */
245
+ /* async createAuthTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
246
+ return this.transactionApi.createAuthTransaction(request);
247
+ } */
248
+ async createTransaction(request) {
249
+ return this.transactionApi.createTransaction(request);
250
+ }
251
+ async submitSignedTransaction(signedTxData) {
252
+ return this.transactionApi.submitSignedTransaction(signedTxData);
253
+ }
254
+ /**
255
+ * AUTH: Get user transaction history by type
256
+ */
257
+ async getUserTransactionHistory(role, limit = 1000) {
258
+ return this.transactionApi.getUserTransactionHistory(role, limit);
259
+ }
260
+ /**
261
+ * AUTH: Prepare existing transaction for client-side signing
262
+ */
263
+ async prepareExistingTransaction(transactionId) {
264
+ return this.transactionApi.prepareExistingTransaction(transactionId);
265
+ }
266
+ /**
267
+ * AUTH: Prepare client signed transaction
268
+ */
269
+ async prepareClientSignedTransaction(request) {
270
+ return this.transactionApi.prepareClientSignedTransaction(request);
271
+ }
272
+ // ==========================================
273
+ // BUSINESS OPERATIONS
274
+ // ==========================================
275
+ /**
276
+ * BUSINESS: Create business transaction
277
+ */
278
+ /* async createBusinessTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
279
+ return this.transactionApi.createBusinessTransaction(request);
280
+ } */
281
+ // ==========================================
282
+ // ADMIN OPERATIONS
283
+ // ==========================================
284
+ /**
285
+ * ADMIN: Create admin transaction
286
+ */
287
+ /* async createAdminTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
288
+ return this.transactionApi.createAdminTransaction(request);
289
+ } */
290
+ /**
291
+ * ADMIN: Get all tenant transactions
292
+ */
293
+ async getTenantTransactions(limit = 1000) {
294
+ return this.transactionApi.getTenantTransactions(limit);
295
+ }
296
+ /**
297
+ * ADMIN: Get paginated transactions with filtering and sorting
298
+ */
299
+ async getPaginatedTransactions(params) {
300
+ return this.transactionApi.getPaginatedTransactions(params);
301
+ }
302
+ /**
303
+ * ADMIN: Export transactions to CSV
304
+ */
305
+ async exportTransactionsCSV() {
306
+ return this.transactionApi.exportTransactionsCSV();
307
+ }
308
+ // ==========================================
309
+ // QUERY & ANALYTICS OPERATIONS
310
+ // ==========================================
311
+ /**
312
+ * Query transactions by sender
313
+ */
314
+ async queryTransactionsBySender(accountSelector) {
315
+ return this.transactionApi.queryTransactionsBySender(accountSelector);
316
+ }
317
+ /**
318
+ * Query transactions by recipient
319
+ */
320
+ async queryTransactionsByRecipient(accountSelector) {
321
+ return this.transactionApi.queryTransactionsByRecipient(accountSelector);
322
+ }
323
+ /**
324
+ * ADMIN: Get transaction analytics
325
+ */
326
+ async getTransactionAnalytics(analyticsRequest) {
327
+ return this.transactionApi.getTransactionAnalytics(analyticsRequest);
328
+ }
329
+ }
330
+
331
+ export { TransactionApi as T, TransactionService as a };
332
+ //# sourceMappingURL=transaction-service-C2sVByGQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-service-C2sVByGQ.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,335 @@
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
+ query.append(key, String(value));
216
+ }
217
+ });
218
+ }
219
+ return query;
220
+ }
221
+ }
222
+
223
+ /**
224
+ * Platform-Agnostic Transaction Service
225
+ *
226
+ * Contains transaction business logic and operations that work across platforms.
227
+ * No framework dependencies - pure TypeScript business logic.
228
+ *
229
+ * Focuses only on actual backend capabilities.
230
+ */
231
+ class TransactionService {
232
+ constructor(transactionApi) {
233
+ this.transactionApi = transactionApi;
234
+ }
235
+ /**
236
+ * Get transaction by ID
237
+ */
238
+ async getTransactionById(transactionId) {
239
+ return this.transactionApi.getTransactionById(transactionId);
240
+ }
241
+ // ==========================================
242
+ // AUTHENTICATED OPERATIONS
243
+ // ==========================================
244
+ /**
245
+ * AUTH: Create authenticated transaction
246
+ */
247
+ /* async createAuthTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
248
+ return this.transactionApi.createAuthTransaction(request);
249
+ } */
250
+ async createTransaction(request) {
251
+ return this.transactionApi.createTransaction(request);
252
+ }
253
+ async submitSignedTransaction(signedTxData) {
254
+ return this.transactionApi.submitSignedTransaction(signedTxData);
255
+ }
256
+ /**
257
+ * AUTH: Get user transaction history by type
258
+ */
259
+ async getUserTransactionHistory(role, limit = 1000) {
260
+ return this.transactionApi.getUserTransactionHistory(role, limit);
261
+ }
262
+ /**
263
+ * AUTH: Prepare existing transaction for client-side signing
264
+ */
265
+ async prepareExistingTransaction(transactionId) {
266
+ return this.transactionApi.prepareExistingTransaction(transactionId);
267
+ }
268
+ /**
269
+ * AUTH: Prepare client signed transaction
270
+ */
271
+ async prepareClientSignedTransaction(request) {
272
+ return this.transactionApi.prepareClientSignedTransaction(request);
273
+ }
274
+ // ==========================================
275
+ // BUSINESS OPERATIONS
276
+ // ==========================================
277
+ /**
278
+ * BUSINESS: Create business transaction
279
+ */
280
+ /* async createBusinessTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
281
+ return this.transactionApi.createBusinessTransaction(request);
282
+ } */
283
+ // ==========================================
284
+ // ADMIN OPERATIONS
285
+ // ==========================================
286
+ /**
287
+ * ADMIN: Create admin transaction
288
+ */
289
+ /* async createAdminTransaction(request: TransactionRequestDTO): Promise<TransactionRequestResponseDTO> {
290
+ return this.transactionApi.createAdminTransaction(request);
291
+ } */
292
+ /**
293
+ * ADMIN: Get all tenant transactions
294
+ */
295
+ async getTenantTransactions(limit = 1000) {
296
+ return this.transactionApi.getTenantTransactions(limit);
297
+ }
298
+ /**
299
+ * ADMIN: Get paginated transactions with filtering and sorting
300
+ */
301
+ async getPaginatedTransactions(params) {
302
+ return this.transactionApi.getPaginatedTransactions(params);
303
+ }
304
+ /**
305
+ * ADMIN: Export transactions to CSV
306
+ */
307
+ async exportTransactionsCSV() {
308
+ return this.transactionApi.exportTransactionsCSV();
309
+ }
310
+ // ==========================================
311
+ // QUERY & ANALYTICS OPERATIONS
312
+ // ==========================================
313
+ /**
314
+ * Query transactions by sender
315
+ */
316
+ async queryTransactionsBySender(accountSelector) {
317
+ return this.transactionApi.queryTransactionsBySender(accountSelector);
318
+ }
319
+ /**
320
+ * Query transactions by recipient
321
+ */
322
+ async queryTransactionsByRecipient(accountSelector) {
323
+ return this.transactionApi.queryTransactionsByRecipient(accountSelector);
324
+ }
325
+ /**
326
+ * ADMIN: Get transaction analytics
327
+ */
328
+ async getTransactionAnalytics(analyticsRequest) {
329
+ return this.transactionApi.getTransactionAnalytics(analyticsRequest);
330
+ }
331
+ }
332
+
333
+ exports.TransactionApi = TransactionApi;
334
+ exports.TransactionService = TransactionService;
335
+ //# sourceMappingURL=transaction-service-oA5BRzWy.cjs.map