@explorins/pers-sdk 1.6.47 → 2.0.0

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 (189) hide show
  1. package/README.md +103 -0
  2. package/dist/api-key/api/api-key-api.d.ts +5 -2
  3. package/dist/api-key/api/api-key-api.d.ts.map +1 -1
  4. package/dist/business/api/business-api.d.ts +30 -11
  5. package/dist/business/api/business-api.d.ts.map +1 -1
  6. package/dist/business/api/business-membership-api.d.ts +24 -5
  7. package/dist/business/api/business-membership-api.d.ts.map +1 -1
  8. package/dist/business/services/business-membership-service.d.ts +9 -15
  9. package/dist/business/services/business-membership-service.d.ts.map +1 -1
  10. package/dist/business/services/business-service.d.ts +11 -7
  11. package/dist/business/services/business-service.d.ts.map +1 -1
  12. package/dist/business.cjs +101 -61
  13. package/dist/business.cjs.map +1 -1
  14. package/dist/business.js +101 -61
  15. package/dist/business.js.map +1 -1
  16. package/dist/campaign/api/campaign-api.d.ts +50 -13
  17. package/dist/campaign/api/campaign-api.d.ts.map +1 -1
  18. package/dist/campaign/services/campaign-service.d.ts +13 -12
  19. package/dist/campaign/services/campaign-service.d.ts.map +1 -1
  20. package/dist/campaign.cjs +2 -1
  21. package/dist/campaign.cjs.map +1 -1
  22. package/dist/campaign.js +2 -1
  23. package/dist/campaign.js.map +1 -1
  24. package/dist/chunks/{base-token-service-BSXDwrcq.js → base-token-service-DsD6lSdq.js} +2 -48
  25. package/dist/chunks/base-token-service-DsD6lSdq.js.map +1 -0
  26. package/dist/chunks/{base-token-service-CYuqPPs0.cjs → base-token-service-_64IWVES.cjs} +2 -48
  27. package/dist/chunks/base-token-service-_64IWVES.cjs.map +1 -0
  28. package/dist/chunks/{campaign-service-D-v9ZlUB.cjs → campaign-service-Ae164xl8.cjs} +74 -46
  29. package/dist/chunks/campaign-service-Ae164xl8.cjs.map +1 -0
  30. package/dist/chunks/{campaign-service-CKwkiOLx.js → campaign-service-rlK4WeSY.js} +74 -46
  31. package/dist/chunks/campaign-service-rlK4WeSY.js.map +1 -0
  32. package/dist/chunks/{donation-service-D-xFrONi.cjs → donation-service--6cnTvWq.cjs} +9 -5
  33. package/dist/chunks/donation-service--6cnTvWq.cjs.map +1 -0
  34. package/dist/chunks/{donation-service-CyJS4DIZ.js → donation-service-xiXZ2Eto.js} +9 -5
  35. package/dist/chunks/donation-service-xiXZ2Eto.js.map +1 -0
  36. package/dist/chunks/pagination-utils-9vQ-Npkr.js +166 -0
  37. package/dist/chunks/pagination-utils-9vQ-Npkr.js.map +1 -0
  38. package/dist/chunks/pagination-utils-B2jRHMSO.cjs +173 -0
  39. package/dist/chunks/pagination-utils-B2jRHMSO.cjs.map +1 -0
  40. package/dist/chunks/{pers-sdk-DULFjOW2.cjs → pers-sdk-CrffRkya.cjs} +242 -234
  41. package/dist/chunks/pers-sdk-CrffRkya.cjs.map +1 -0
  42. package/dist/chunks/{pers-sdk-VmeBqUEP.js → pers-sdk-omI-Fl0m.js} +236 -228
  43. package/dist/chunks/pers-sdk-omI-Fl0m.js.map +1 -0
  44. package/dist/chunks/{token-service-CpVwC5Eb.js → token-service-Bfj6C0yz.js} +62 -30
  45. package/dist/chunks/token-service-Bfj6C0yz.js.map +1 -0
  46. package/dist/chunks/{token-service-BWScn8Qa.cjs → token-service-BlbXrxnS.cjs} +62 -30
  47. package/dist/chunks/token-service-BlbXrxnS.cjs.map +1 -0
  48. package/dist/chunks/{transaction-service-CXjTHCFu.cjs → transaction-service-BcJfyCcq.cjs} +68 -31
  49. package/dist/chunks/transaction-service-BcJfyCcq.cjs.map +1 -0
  50. package/dist/chunks/{transaction-service-B7h_4Hg3.js → transaction-service-CnOD3scu.js} +68 -31
  51. package/dist/chunks/transaction-service-CnOD3scu.js.map +1 -0
  52. package/dist/chunks/{user-service-doT5vsBD.js → user-service-BGP3SZpk.js} +24 -12
  53. package/dist/chunks/user-service-BGP3SZpk.js.map +1 -0
  54. package/dist/chunks/{user-service-B89wBOV1.cjs → user-service-gITOx4qj.cjs} +24 -12
  55. package/dist/chunks/user-service-gITOx4qj.cjs.map +1 -0
  56. package/dist/core.cjs +10 -9
  57. package/dist/core.cjs.map +1 -1
  58. package/dist/core.js +10 -9
  59. package/dist/core.js.map +1 -1
  60. package/dist/donation/api/donation-api.d.ts +3 -1
  61. package/dist/donation/api/donation-api.d.ts.map +1 -1
  62. package/dist/donation/services/donation-service.d.ts +3 -1
  63. package/dist/donation/services/donation-service.d.ts.map +1 -1
  64. package/dist/donation.cjs +2 -1
  65. package/dist/donation.cjs.map +1 -1
  66. package/dist/donation.js +2 -1
  67. package/dist/donation.js.map +1 -1
  68. package/dist/index.cjs +23 -16
  69. package/dist/index.cjs.map +1 -1
  70. package/dist/index.js +11 -10
  71. package/dist/index.js.map +1 -1
  72. package/dist/managers/analytics-manager.d.ts +9 -9
  73. package/dist/managers/api-key-manager.d.ts +8 -6
  74. package/dist/managers/api-key-manager.d.ts.map +1 -1
  75. package/dist/managers/business-manager.d.ts +9 -7
  76. package/dist/managers/business-manager.d.ts.map +1 -1
  77. package/dist/managers/campaign-manager.d.ts +21 -20
  78. package/dist/managers/campaign-manager.d.ts.map +1 -1
  79. package/dist/managers/donation-manager.d.ts +4 -2
  80. package/dist/managers/donation-manager.d.ts.map +1 -1
  81. package/dist/managers/file-manager.d.ts +2 -2
  82. package/dist/managers/purchase-manager.d.ts +26 -24
  83. package/dist/managers/purchase-manager.d.ts.map +1 -1
  84. package/dist/managers/redemption-manager.d.ts +103 -91
  85. package/dist/managers/redemption-manager.d.ts.map +1 -1
  86. package/dist/managers/tenant-manager.d.ts +5 -2
  87. package/dist/managers/tenant-manager.d.ts.map +1 -1
  88. package/dist/managers/token-manager.d.ts +6 -4
  89. package/dist/managers/token-manager.d.ts.map +1 -1
  90. package/dist/managers/transaction-manager.d.ts +18 -17
  91. package/dist/managers/transaction-manager.d.ts.map +1 -1
  92. package/dist/managers/user-manager.d.ts +4 -2
  93. package/dist/managers/user-manager.d.ts.map +1 -1
  94. package/dist/managers/user-status-manager.d.ts +6 -4
  95. package/dist/managers/user-status-manager.d.ts.map +1 -1
  96. package/dist/package.json +1 -1
  97. package/dist/payment/api/payment-api.d.ts +15 -18
  98. package/dist/payment/api/payment-api.d.ts.map +1 -1
  99. package/dist/payment/services/payment-service.d.ts +6 -4
  100. package/dist/payment/services/payment-service.d.ts.map +1 -1
  101. package/dist/payment.cjs +219 -15
  102. package/dist/payment.cjs.map +1 -1
  103. package/dist/payment.js +209 -1
  104. package/dist/payment.js.map +1 -1
  105. package/dist/redemption/api/redemption-api.d.ts +22 -11
  106. package/dist/redemption/api/redemption-api.d.ts.map +1 -1
  107. package/dist/redemption/services/redemption-service.d.ts +11 -9
  108. package/dist/redemption/services/redemption-service.d.ts.map +1 -1
  109. package/dist/redemption.cjs +347 -15
  110. package/dist/redemption.cjs.map +1 -1
  111. package/dist/redemption.js +337 -1
  112. package/dist/redemption.js.map +1 -1
  113. package/dist/shared/index.d.ts +1 -0
  114. package/dist/shared/index.d.ts.map +1 -1
  115. package/dist/shared/utils/pagination-utils.d.ts +184 -0
  116. package/dist/shared/utils/pagination-utils.d.ts.map +1 -0
  117. package/dist/tenant/api/tenant-api.d.ts +6 -1
  118. package/dist/tenant/api/tenant-api.d.ts.map +1 -1
  119. package/dist/tenant/services/tenant-service.d.ts +5 -2
  120. package/dist/tenant/services/tenant-service.d.ts.map +1 -1
  121. package/dist/tenant.cjs +171 -15
  122. package/dist/tenant.cjs.map +1 -1
  123. package/dist/tenant.js +161 -1
  124. package/dist/tenant.js.map +1 -1
  125. package/dist/token/api/token-api.d.ts +24 -7
  126. package/dist/token/api/token-api.d.ts.map +1 -1
  127. package/dist/token/base/base-token-service.d.ts +5 -4
  128. package/dist/token/base/base-token-service.d.ts.map +1 -1
  129. package/dist/token/services/token-service.d.ts +10 -8
  130. package/dist/token/services/token-service.d.ts.map +1 -1
  131. package/dist/token/token-sdk.d.ts +5 -34
  132. package/dist/token/token-sdk.d.ts.map +1 -1
  133. package/dist/token.cjs +3 -2
  134. package/dist/token.cjs.map +1 -1
  135. package/dist/token.js +3 -2
  136. package/dist/token.js.map +1 -1
  137. package/dist/transaction/api/transaction-api.d.ts +48 -6
  138. package/dist/transaction/api/transaction-api.d.ts.map +1 -1
  139. package/dist/transaction/services/transaction-service.d.ts +12 -4
  140. package/dist/transaction/services/transaction-service.d.ts.map +1 -1
  141. package/dist/transaction.cjs +2 -1
  142. package/dist/transaction.cjs.map +1 -1
  143. package/dist/transaction.js +2 -1
  144. package/dist/transaction.js.map +1 -1
  145. package/dist/user/api/user-api.d.ts +4 -2
  146. package/dist/user/api/user-api.d.ts.map +1 -1
  147. package/dist/user/services/user-service.d.ts +4 -2
  148. package/dist/user/services/user-service.d.ts.map +1 -1
  149. package/dist/user-status/api/user-status-api.d.ts +6 -4
  150. package/dist/user-status/api/user-status-api.d.ts.map +1 -1
  151. package/dist/user-status/index.d.ts +4 -2
  152. package/dist/user-status/index.d.ts.map +1 -1
  153. package/dist/user-status/services/user-status-service.d.ts +4 -2
  154. package/dist/user-status/services/user-status-service.d.ts.map +1 -1
  155. package/dist/user-status.cjs +22 -14
  156. package/dist/user-status.cjs.map +1 -1
  157. package/dist/user-status.js +22 -14
  158. package/dist/user-status.js.map +1 -1
  159. package/dist/user.cjs +2 -1
  160. package/dist/user.cjs.map +1 -1
  161. package/dist/user.js +2 -1
  162. package/dist/user.js.map +1 -1
  163. package/package.json +1 -1
  164. package/dist/chunks/base-token-service-BSXDwrcq.js.map +0 -1
  165. package/dist/chunks/base-token-service-CYuqPPs0.cjs.map +0 -1
  166. package/dist/chunks/campaign-service-CKwkiOLx.js.map +0 -1
  167. package/dist/chunks/campaign-service-D-v9ZlUB.cjs.map +0 -1
  168. package/dist/chunks/donation-service-CyJS4DIZ.js.map +0 -1
  169. package/dist/chunks/donation-service-D-xFrONi.cjs.map +0 -1
  170. package/dist/chunks/payment-service-B4qx0qiE.cjs +0 -220
  171. package/dist/chunks/payment-service-B4qx0qiE.cjs.map +0 -1
  172. package/dist/chunks/payment-service-DfCBFosx.js +0 -217
  173. package/dist/chunks/payment-service-DfCBFosx.js.map +0 -1
  174. package/dist/chunks/pers-sdk-DULFjOW2.cjs.map +0 -1
  175. package/dist/chunks/pers-sdk-VmeBqUEP.js.map +0 -1
  176. package/dist/chunks/redemption-service-7qbeQxEM.cjs +0 -330
  177. package/dist/chunks/redemption-service-7qbeQxEM.cjs.map +0 -1
  178. package/dist/chunks/redemption-service-BT0J5Iy7.js +0 -327
  179. package/dist/chunks/redemption-service-BT0J5Iy7.js.map +0 -1
  180. package/dist/chunks/tenant-service-DME24vr1.cjs +0 -157
  181. package/dist/chunks/tenant-service-DME24vr1.cjs.map +0 -1
  182. package/dist/chunks/tenant-service-DxtHAlaa.js +0 -154
  183. package/dist/chunks/tenant-service-DxtHAlaa.js.map +0 -1
  184. package/dist/chunks/token-service-BWScn8Qa.cjs.map +0 -1
  185. package/dist/chunks/token-service-CpVwC5Eb.js.map +0 -1
  186. package/dist/chunks/transaction-service-B7h_4Hg3.js.map +0 -1
  187. package/dist/chunks/transaction-service-CXjTHCFu.cjs.map +0 -1
  188. package/dist/chunks/user-service-B89wBOV1.cjs.map +0 -1
  189. package/dist/chunks/user-service-doT5vsBD.js.map +0 -1
@@ -1,3 +1,339 @@
1
- export { R as RedemptionApi, a as RedemptionService } from './chunks/redemption-service-BT0J5Iy7.js';
2
1
  export { AccountOwnerType, ApiKeyType, MEMBERSHIP_ROLE_HIERARCHY, MembershipRole, NativeTokenTypes, hasMinimumRole } from '@explorins/pers-shared';
2
+ import { b as buildPaginationParams, n as normalizeToPaginated } from './chunks/pagination-utils-9vQ-Npkr.js';
3
+
4
+ /**
5
+ * Platform-Agnostic Redemption API Client (UPDATED - RESTful Design)
6
+ *
7
+ * Updated to work with the new RESTful controller structure:
8
+ * - /redemptions (main redemption management)
9
+ * - /redemption-types (redemption type management)
10
+ * - /redemption-tokens (token unit management)
11
+ * - /redemption-redeems (redemption execution and history)
12
+ *
13
+ * Handles redemption operations using the PERS backend with intelligent access detection.
14
+ * Uses @explorins/pers-shared DTOs for consistency with backend.
15
+ */
16
+ class RedemptionApi {
17
+ constructor(apiClient) {
18
+ this.apiClient = apiClient;
19
+ this.basePath = '/redemptions';
20
+ this.typesPath = '/redemptions/types';
21
+ }
22
+ // ==========================================
23
+ // PUBLIC OPERATIONS (Project Key)
24
+ // ==========================================
25
+ /**
26
+ * UNIFIED: Get redemptions with intelligent access control
27
+ *
28
+ * Intelligent endpoint that adapts based on authentication:
29
+ * - Public users: Get active redemptions only
30
+ * - Admin users: Get all redemptions with optional filtering
31
+ *
32
+ * @param options.active - Filter by active status (undefined = all for admins/active for public)
33
+ * @param options.adminAccess - Force admin access (requires admin auth)
34
+ * @param options.page - Page number (default: 1)
35
+ * @param options.limit - Items per page (default: 50)
36
+ * @param options.sortBy - Sort field
37
+ * @param options.sortOrder - Sort order (asc/desc)
38
+ * @returns Paginated response with redemptions
39
+ */
40
+ async getRedemptions(options) {
41
+ const params = buildPaginationParams(options);
42
+ if (options?.active !== undefined) {
43
+ params.append('active', String(options.active));
44
+ }
45
+ const response = await this.apiClient.get(`${this.basePath}?${params.toString()}`);
46
+ return normalizeToPaginated(response);
47
+ }
48
+ /**
49
+ * PUBLIC: Get redemption types
50
+ *
51
+ * Updated: /redemption/type → /redemption-types
52
+ * @param options Pagination options (page, limit, sortBy, sortOrder)
53
+ * @returns Paginated response with redemption types
54
+ */
55
+ async getRedemptionTypes(options) {
56
+ const params = buildPaginationParams(options);
57
+ const response = await this.apiClient.get(`${this.typesPath}?${params.toString()}`);
58
+ return normalizeToPaginated(response);
59
+ }
60
+ /**
61
+ * PUBLIC: Get redemption by ID
62
+ *
63
+ * Updated: /redemption/:id → /redemptions/:id
64
+ */
65
+ async getRedemptionById(id) {
66
+ return this.apiClient.get(`${this.basePath}/${id}`);
67
+ }
68
+ /**
69
+ * PUBLIC: Get available supply for redemption
70
+ *
71
+ * Updated: /redemption/:id/available-supply → /redemptions/:id/supply
72
+ */
73
+ async getRedemptionAvailableSupply(id) {
74
+ const result = await this.apiClient.get(`${this.basePath}/${id}/supply`);
75
+ return result.available;
76
+ }
77
+ // ==========================================
78
+ // REDEMPTION EXECUTION (UNIFIED ENDPOINT)
79
+ // ==========================================
80
+ /**
81
+ * Execute redemption (unified endpoint)
82
+ *
83
+ * NEW: POST /redemption-redeems - Role-based processing
84
+ * - USER: Direct user redemption processing
85
+ * - ADMIN: Can process redemptions for any account type
86
+ * - BUSINESS: Process redemptions for customers
87
+ */
88
+ async redeemRedemption(redemptionId) {
89
+ const body = {
90
+ redemptionId: redemptionId,
91
+ };
92
+ return this.apiClient.post(this.basePath + '/redeems', body);
93
+ }
94
+ // ==========================================
95
+ // REDEMPTION REDEEMS QUERIES (NEW ENDPOINTS)
96
+ // ==========================================
97
+ /**
98
+ * UNIFIED: Get redemption redeems with filtering and intelligent access
99
+ *
100
+ * Role-based access with unified filtering:
101
+ * - Users: See only their own redeems (userId/businessId filters ignored)
102
+ * - Admins: Can filter by userId, businessId, or redemptionId
103
+ *
104
+ * @param filters.redemptionId - Filter by specific redemption
105
+ * @param filters.userId - Admin only: Filter by user ID
106
+ * @param filters.businessId - Admin only: Filter by business ID
107
+ * @param filters.myRedeems - Force user's own redeems (uses /me endpoint)
108
+ * @param filters.page - Page number (default: 1)
109
+ * @param filters.limit - Items per page (default: 50)
110
+ * @param filters.sortBy - Sort field
111
+ * @param filters.sortOrder - Sort order (asc/desc)
112
+ * @returns Paginated response with redemption redeems
113
+ */
114
+ async getRedemptionRedeems(filters) {
115
+ let url = `${this.basePath}/redeems`;
116
+ const params = buildPaginationParams(filters);
117
+ // Use convenience endpoint for user's own redeems
118
+ if (filters?.myRedeems) {
119
+ url = `${this.basePath}/redeems/me`;
120
+ if (filters?.redemptionId) {
121
+ params.append('redemptionId', filters.redemptionId);
122
+ }
123
+ const response = await this.apiClient.get(`${url}?${params.toString()}`);
124
+ return normalizeToPaginated(response);
125
+ }
126
+ // Use admin endpoint with filtering
127
+ if (filters?.redemptionId)
128
+ params.append('redemptionId', filters.redemptionId);
129
+ if (filters?.userId)
130
+ params.append('userId', filters.userId);
131
+ if (filters?.businessId)
132
+ params.append('businessId', filters.businessId);
133
+ const response = await this.apiClient.get(`${url}?${params.toString()}`);
134
+ return normalizeToPaginated(response);
135
+ }
136
+ /**
137
+ * UNIFIED: Get specific redemption redeem by ID
138
+ */
139
+ async getRedemptionRedeemById(id) {
140
+ return this.apiClient.get(`${this.basePath}/redeems/${id}`);
141
+ }
142
+ // ==========================================
143
+ // USER OPERATIONS (JWT + Project Key)
144
+ // ==========================================
145
+ /**
146
+ * UNIFIED: Get user redemption history
147
+ *
148
+ * Uses convenience endpoint /redemption-redeems/me with optional filtering
149
+ * @param redemptionId - Optional filter by specific redemption
150
+ * @param options - Pagination options (page, limit, sortBy, sortOrder)
151
+ * @returns Paginated response with user's redemption redeems
152
+ */
153
+ async getUserRedeems(redemptionId, options) {
154
+ return this.getRedemptionRedeems({ myRedeems: true, redemptionId, ...options });
155
+ }
156
+ // ==========================================
157
+ // ADMIN OPERATIONS (Tenant Admin JWT)
158
+ // ==========================================
159
+ /**
160
+ * ADMIN: Create redemption
161
+ *
162
+ * Updated: /redemption/admin → /redemptions
163
+ */
164
+ async createRedemption(redemption) {
165
+ return this.apiClient.post(`${this.basePath}`, redemption);
166
+ }
167
+ /**
168
+ * ADMIN: Update redemption
169
+ *
170
+ * Updated: /redemption/admin/:id → /redemptions/:id
171
+ */
172
+ async updateRedemption(id, redemptionCreateRequest) {
173
+ return this.apiClient.put(`${this.basePath}/${id}`, redemptionCreateRequest);
174
+ }
175
+ /**
176
+ * UNIFIED: Toggle redemption active status
177
+ *
178
+ * Updated: /redemption/admin/:id/toggle-active → /redemptions/:id/status
179
+ * Following standard /status pattern used across domains
180
+ */
181
+ async toggleRedemptionActive(redemptionId) {
182
+ return this.apiClient.put(`${this.basePath}/${redemptionId}/status`, {});
183
+ }
184
+ /**
185
+ * ADMIN: Delete redemption
186
+ *
187
+ * Updated: /redemption/admin/:id → /redemptions/:id
188
+ */
189
+ async deleteRedemption(id) {
190
+ return this.apiClient.delete(`${this.basePath}/${id}`);
191
+ }
192
+ /**
193
+ * ADMIN: Create redemption type
194
+ *
195
+ * Updated: /redemption/admin/type → /redemption-types
196
+ */
197
+ async createRedemptionType(redemptionType) {
198
+ return this.apiClient.post(this.typesPath, redemptionType);
199
+ }
200
+ // ==========================================
201
+ // TOKEN UNIT MANAGEMENT (Admin)
202
+ // ==========================================
203
+ /**
204
+ * ADMIN: Create redemption token unit
205
+ *
206
+ * Updated: /redemption/admin/:id/token-units → /redemption-tokens/:id/
207
+ */
208
+ async createRedemptionTokenUnit(redemptionId, redemptionTokenUnit) {
209
+ return this.apiClient.post(`${this.basePath}/${redemptionId}/tokens`, redemptionTokenUnit);
210
+ }
211
+ /**
212
+ * ADMIN: Update redemption token unit
213
+ *
214
+ * Updated: /redemption/admin/:id/token-units/:tokenUnitId → /redemption-tokens/:id/:tokenUnitId
215
+ */
216
+ async updateRedemptionTokenUnit(redemptionId, tokenUnitId, redemptionTokenUnit) {
217
+ return this.apiClient.put(`${this.basePath}/${redemptionId}/tokens/${tokenUnitId}`, redemptionTokenUnit);
218
+ }
219
+ /**
220
+ * ADMIN: Delete redemption token unit
221
+ *
222
+ * Updated: /redemption/admin/:id/token-units/:tokenUnitId → /redemption-tokens/:id/:tokenUnitId
223
+ */
224
+ async deleteRedemptionTokenUnit(redemptionId, redemptionTokenUnitId) {
225
+ return this.apiClient.delete(`${this.basePath}/${redemptionId}/tokens/${redemptionTokenUnitId}`);
226
+ }
227
+ // ==========================================
228
+ // CONVENIENCE METHODS (Legacy Support)
229
+ // ==========================================
230
+ /**
231
+ * Convenience: Get active redemptions (public access)
232
+ *
233
+ * @deprecated Use getRedemptions({ active: true }) instead for paginated results
234
+ */
235
+ async getActiveRedemptions() {
236
+ const result = await this.getRedemptions({ active: true });
237
+ return [...result.data];
238
+ }
239
+ }
240
+
241
+ /**
242
+ * Platform-Agnostic Redemption Service
243
+ *
244
+ * Contains redemption business logic and operations that work across platforms.
245
+ * No framework dependencies - pure TypeScript business logic.
246
+ *
247
+ * Focuses only on actual backend capabilities.
248
+ */
249
+ class RedemptionService {
250
+ constructor(redemptionApi) {
251
+ this.redemptionApi = redemptionApi;
252
+ }
253
+ // ==========================================
254
+ // PUBLIC OPERATIONS
255
+ // ==========================================
256
+ /**
257
+ * UNIFIED: Get redemptions with intelligent access control and pagination
258
+ * @param options.active - Filter by active status
259
+ * @param options.adminAccess - Force admin access
260
+ */
261
+ async getRedemptions(options) {
262
+ return this.redemptionApi.getRedemptions(options);
263
+ }
264
+ /**
265
+ * Convenience: Get active redemptions (public)
266
+ */
267
+ async getActiveRedemptions() {
268
+ return this.redemptionApi.getActiveRedemptions();
269
+ }
270
+ /**
271
+ * Get all redemption types with pagination
272
+ */
273
+ async getRedemptionTypes(options) {
274
+ return this.redemptionApi.getRedemptionTypes(options);
275
+ }
276
+ // ==========================================
277
+ // AUTHENTICATED OPERATIONS
278
+ // ==========================================
279
+ /**
280
+ * AUTH: Redeem a redemption
281
+ */
282
+ async redeemRedemption(redemptionId) {
283
+ return this.redemptionApi.redeemRedemption(redemptionId);
284
+ }
285
+ /**
286
+ * UNIFIED: Get redemption redeems with filtering and pagination
287
+ */
288
+ async getRedemptionRedeems(filters) {
289
+ return this.redemptionApi.getRedemptionRedeems(filters);
290
+ }
291
+ /**
292
+ * Convenience: Get user redemptions with pagination
293
+ */
294
+ async getUserRedeems(options) {
295
+ return this.redemptionApi.getUserRedeems(undefined, options);
296
+ }
297
+ // ==========================================
298
+ // ADMIN OPERATIONS
299
+ // ==========================================
300
+ /**
301
+ * Convenience: Get redemptions as admin
302
+ */
303
+ async getRedemptionsAsAdmin(active, options) {
304
+ return this.redemptionApi.getRedemptions({ active, adminAccess: true, ...options });
305
+ }
306
+ /**
307
+ * ADMIN: Create redemption
308
+ */
309
+ async createRedemption(redemption) {
310
+ return this.redemptionApi.createRedemption(redemption);
311
+ }
312
+ /**
313
+ * ADMIN: Update redemption
314
+ */
315
+ async updateRedemption(id, redemptionCreateRequest) {
316
+ return this.redemptionApi.updateRedemption(id, redemptionCreateRequest); // ✅ CORRECTED: Fixed parameter
317
+ }
318
+ /**
319
+ * ADMIN: Toggle redemption active status
320
+ */
321
+ async toggleRedemptionActive(redemptionId) {
322
+ return this.redemptionApi.toggleRedemptionActive(redemptionId);
323
+ }
324
+ /**
325
+ * ADMIN: Create redemption token unit
326
+ */
327
+ async createRedemptionTokenUnit(redemptionId, redemptionTokenUnit) {
328
+ return this.redemptionApi.createRedemptionTokenUnit(redemptionId, redemptionTokenUnit);
329
+ }
330
+ /**
331
+ * ADMIN: Delete redemption token unit
332
+ */
333
+ async deleteRedemptionTokenUnit(redemptionId, redemptionTokenUnitId) {
334
+ return this.redemptionApi.deleteRedemptionTokenUnit(redemptionId, redemptionTokenUnitId);
335
+ }
336
+ }
337
+
338
+ export { RedemptionApi, RedemptionService };
3
339
  //# sourceMappingURL=redemption.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"redemption.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
1
+ {"version":3,"file":"redemption.js","sources":["../src/redemption/api/redemption-api.ts","../src/redemption/services/redemption-service.ts"],"sourcesContent":[null,null],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@
2
2
  * @explorins/pers-sdk/shared - Shared utilities and interfaces
3
3
  */
4
4
  export * from './interfaces/pers-shared-lib.interfaces';
5
+ export * from './utils/pagination-utils';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,yCAAyC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/shared/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,yCAAyC,CAAC;AAGxD,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,184 @@
1
+ import { PaginatedResponseDTO, SortOrder } from '@explorins/pers-shared';
2
+ /**
3
+ * Standard pagination options for all list methods
4
+ * Use this interface consistently across all API, service, and manager layers
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * async getCampaigns(options?: PaginationOptions): Promise<PaginatedResponseDTO<CampaignDTO>> {
9
+ * const params = buildPaginationParams(options);
10
+ * return this.apiClient.get(`/campaigns?${params.toString()}`);
11
+ * }
12
+ * ```
13
+ */
14
+ export interface PaginationOptions {
15
+ /**
16
+ * Page number (1-indexed)
17
+ * @default 1
18
+ */
19
+ page?: number;
20
+ /**
21
+ * Items per page
22
+ * @default 50
23
+ */
24
+ limit?: number;
25
+ /**
26
+ * Field to sort by (e.g., 'createdAt', 'name')
27
+ */
28
+ sortBy?: string;
29
+ /**
30
+ * Sort direction
31
+ */
32
+ sortOrder?: SortOrder;
33
+ }
34
+ /**
35
+ * Extended pagination with common filters
36
+ * Use for endpoints that support search and date filtering
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * async searchTransactions(options?: PaginationWithFilters): Promise<PaginatedResponseDTO<TransactionDTO>> {
41
+ * const params = buildPaginationParams(options);
42
+ * if (options?.search) params.set('search', options.search);
43
+ * // ...
44
+ * }
45
+ * ```
46
+ */
47
+ export interface PaginationWithFilters extends PaginationOptions {
48
+ /**
49
+ * Search query string
50
+ */
51
+ search?: string;
52
+ /**
53
+ * Filter by start date
54
+ */
55
+ startDate?: Date;
56
+ /**
57
+ * Filter by end date
58
+ */
59
+ endDate?: Date;
60
+ }
61
+ /**
62
+ * Type alias for hybrid period (backend can return either shape)
63
+ * Use this in API method return types during backend hybrid phase
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * // During hybrid backend phase
68
+ * async getItems(): Promise<ListResponse<ItemDTO>> {
69
+ * return this.apiClient.get<ListResponse<ItemDTO>>('/items');
70
+ * }
71
+ * ```
72
+ */
73
+ export type ListResponse<T> = T[] | PaginatedResponseDTO<T>;
74
+ /**
75
+ * Helper to build pagination query params with defaults
76
+ * Ensures pagination params are always included in API requests
77
+ *
78
+ * @param options - Pagination options (optional)
79
+ * @returns URLSearchParams with page and limit always set
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * async getItems(options?: PaginationOptions): Promise<PaginatedResponseDTO<ItemDTO>> {
84
+ * const params = buildPaginationParams(options);
85
+ * // params always includes: page=1&limit=50 (or custom values)
86
+ *
87
+ * if (options?.sortBy) params.set('sortBy', options.sortBy);
88
+ * if (options?.sortOrder) params.set('sortOrder', options.sortOrder);
89
+ *
90
+ * return this.apiClient.get(`/items?${params.toString()}`);
91
+ * }
92
+ * ```
93
+ */
94
+ export declare function buildPaginationParams(options?: PaginationOptions): URLSearchParams;
95
+ /**
96
+ * Type guard to check if response is paginated
97
+ *
98
+ * @param response - Either an array or paginated response
99
+ * @returns True if response is PaginatedResponseDTO
100
+ *
101
+ * @example
102
+ * ```typescript
103
+ * const response = await api.getItems();
104
+ * if (isPaginatedResponse(response)) {
105
+ * console.log(response.pagination.total);
106
+ * }
107
+ * ```
108
+ */
109
+ export declare function isPaginatedResponse<T>(response: T[] | PaginatedResponseDTO<T>): response is PaginatedResponseDTO<T>;
110
+ /**
111
+ * Extract data array from either array or paginated response
112
+ * Use during hybrid backend phase to safely handle both response shapes
113
+ *
114
+ * @param response - Either an array or paginated response
115
+ * @returns Data array
116
+ *
117
+ * @example
118
+ * ```typescript
119
+ * const response = await api.getItems(); // Could be T[] or PaginatedResponseDTO<T>
120
+ * const items = extractData(response); // Always T[]
121
+ * ```
122
+ */
123
+ export declare function extractData<T>(response: T[] | PaginatedResponseDTO<T>): T[];
124
+ /**
125
+ * Extract pagination metadata (returns null for array responses)
126
+ *
127
+ * @param response - Either an array or paginated response
128
+ * @returns Pagination metadata or null
129
+ *
130
+ * @example
131
+ * ```typescript
132
+ * const response = await api.getItems();
133
+ * const pagination = extractPagination(response);
134
+ * if (pagination) {
135
+ * console.log(`Total: ${pagination.total}`);
136
+ * }
137
+ * ```
138
+ */
139
+ export declare function extractPagination<T>(response: T[] | PaginatedResponseDTO<T>): PaginatedResponseDTO<T>['pagination'] | null;
140
+ /**
141
+ * Normalize any list response to PaginatedResponseDTO format
142
+ * Converts array responses to paginated format during hybrid backend phase
143
+ *
144
+ * @param response - Either an array or paginated response
145
+ * @returns Paginated response (normalized if input was array)
146
+ *
147
+ * @example
148
+ * ```typescript
149
+ * // Backend returns array (no pagination params)
150
+ * const arrayResponse = await api.getItems();
151
+ * const normalized = normalizeToPaginated(arrayResponse);
152
+ * console.log(normalized.data); // Original array
153
+ * console.log(normalized.pagination); // Generated metadata
154
+ *
155
+ * // Backend returns paginated (with pagination params)
156
+ * const paginatedResponse = await api.getItems({ page: 1, limit: 50 });
157
+ * const normalized2 = normalizeToPaginated(paginatedResponse);
158
+ * console.log(normalized2); // Same as input (no conversion needed)
159
+ * ```
160
+ */
161
+ export declare function normalizeToPaginated<T>(response: T[] | PaginatedResponseDTO<T>): PaginatedResponseDTO<T>;
162
+ /**
163
+ * Fetch all pages automatically (useful for infinite scroll or complete datasets)
164
+ *
165
+ * ⚠️ WARNING: Use with caution on large datasets. This will make multiple API calls
166
+ * and load all items into memory. Consider using pagination UI instead.
167
+ *
168
+ * @param fetchFn - Function that fetches a page (must return PaginatedResponseDTO)
169
+ * @param limit - Items per page (default: 50)
170
+ * @param maxPages - Safety limit to prevent infinite loops (default: 100)
171
+ * @returns All items from all pages
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * // Fetch all campaigns (use with caution!)
176
+ * const allCampaigns = await fetchAllPages(
177
+ * (page, limit) => sdk.campaigns.getCampaigns({ page, limit }),
178
+ * 50, // items per page
179
+ * 100 // max 100 pages (5000 items)
180
+ * );
181
+ * ```
182
+ */
183
+ export declare function fetchAllPages<T>(fetchFn: (page: number, limit: number) => Promise<PaginatedResponseDTO<T>>, limit?: number, maxPages?: number): Promise<T[]>;
184
+ //# sourceMappingURL=pagination-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination-utils.d.ts","sourceRoot":"","sources":["../../../src/shared/utils/pagination-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAMzE;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,IAAI,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;AAM5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,eAAe,CAWlF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,QAAQ,EAAE,CAAC,EAAE,GAAG,oBAAoB,CAAC,CAAC,CAAC,GACtC,QAAQ,IAAI,oBAAoB,CAAC,CAAC,CAAC,CAQrC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,oBAAoB,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAK3E;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EACjC,QAAQ,EAAE,CAAC,EAAE,GAAG,oBAAoB,CAAC,CAAC,CAAC,GACtC,oBAAoB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,IAAI,CAE9C;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,QAAQ,EAAE,CAAC,EAAE,GAAG,oBAAoB,CAAC,CAAC,CAAC,GACtC,oBAAoB,CAAC,CAAC,CAAC,CAiBzB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAC1E,KAAK,GAAE,MAAW,EAClB,QAAQ,GAAE,MAAY,GACrB,OAAO,CAAC,CAAC,EAAE,CAAC,CAad"}
@@ -1,5 +1,7 @@
1
1
  import { AdminDTO, TenantPublicDTO, TenantClientConfigDTO, AdminCreateRequestDTO } from '../../shared/interfaces/pers-shared-lib.interfaces';
2
2
  import { PersApiClient } from '../../core/pers-api-client';
3
+ import { PaginatedResponseDTO } from '@explorins/pers-shared';
4
+ import { PaginationOptions } from '../../shared';
3
5
  /**
4
6
  * Platform-Agnostic Tenant API Client
5
7
  *
@@ -46,8 +48,11 @@ export declare class TenantApi {
46
48
  updateRemoteTenant(tenantData: TenantPublicDTO): Promise<TenantPublicDTO>;
47
49
  /**
48
50
  * ADMIN: Get all tenant admins
51
+ *
52
+ * @param options Pagination options (page, limit, sortBy, sortOrder)
53
+ * @returns Paginated response with tenant admins
49
54
  */
50
- getAdmins(): Promise<AdminDTO[]>;
55
+ getAdmins(options?: PaginationOptions): Promise<PaginatedResponseDTO<AdminDTO>>;
51
56
  /**
52
57
  * ADMIN: Create new admin
53
58
  */
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-api.d.ts","sourceRoot":"","sources":["../../../src/tenant/api/tenant-api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACR,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,aAAa;IAE5C,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,SAAS,CAAa;IAM9B;;;;;;OAMG;IACG,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC;IAOjD;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5C;;;OAGG;IACG,qBAAqB,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAQ7D;;;;;OAKG;IACG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IASrE;;;OAGG;IACG,kBAAkB,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAI/E;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAItC;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIpE;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAGrF"}
1
+ {"version":3,"file":"tenant-api.d.ts","sourceRoot":"","sources":["../../../src/tenant/api/tenant-api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAA6D,MAAM,cAAc,CAAC;AAE5G;;;;;;;;GAQG;AACH,qBAAa,SAAS;IACR,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,aAAa;IAE5C,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,SAAS,CAAa;IAM9B;;;;;;OAMG;IACG,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC;IAOjD;;;OAGG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5C;;;OAGG;IACG,qBAAqB,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAQ7D;;;;;OAKG;IACG,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IASrE;;;OAGG;IACG,kBAAkB,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAI/E;;;;;OAKG;IACG,SAAS,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAMrF;;OAEG;IACG,SAAS,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIpE;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAGrF"}
@@ -1,5 +1,7 @@
1
+ import { PaginatedResponseDTO } from '@explorins/pers-shared';
1
2
  import { AdminDTO, TenantPublicDTO, TenantClientConfigDTO, AdminCreateRequestDTO } from '../../shared/interfaces/pers-shared-lib.interfaces';
2
3
  import { TenantApi } from '../api/tenant-api';
4
+ import { PaginationOptions } from '../../shared/utils/pagination-utils';
3
5
  /**
4
6
  * Platform-Agnostic Tenant Service
5
7
  *
@@ -28,9 +30,10 @@ export declare class TenantService {
28
30
  */
29
31
  updateRemoteTenant(tenantData: TenantPublicDTO): Promise<TenantPublicDTO>;
30
32
  /**
31
- * ADMIN: Get all tenant admins
33
+ * ADMIN: Get all tenant admins with pagination
34
+ * @param options - Pagination options
32
35
  */
33
- getAdmins(): Promise<AdminDTO[]>;
36
+ getAdmins(options?: PaginationOptions): Promise<PaginatedResponseDTO<AdminDTO>>;
34
37
  /**
35
38
  * ADMIN: Create new admin
36
39
  * ✅ FIXED: Renamed to match framework postAdmin method
@@ -1 +1 @@
1
- {"version":3,"file":"tenant-service.d.ts","sourceRoot":"","sources":["../../../src/tenant/services/tenant-service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C;;;;;;GAMG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAMxC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC;IAIjD;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5C;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAQ7D;;;OAGG;IACG,kBAAkB,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAI/E;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAItC;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIpE;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAGrF"}
1
+ {"version":3,"file":"tenant-service.d.ts","sourceRoot":"","sources":["../../../src/tenant/services/tenant-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EACL,QAAQ,EACR,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AACpF,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE;;;;;;GAMG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,SAAS;IAMxC;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,eAAe,CAAC;IAIjD;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC;IAI5C;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,qBAAqB,CAAC;IAQ7D;;;OAGG;IACG,kBAAkB,CAAC,UAAU,EAAE,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;IAI/E;;;OAGG;IACG,SAAS,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAIrF;;;OAGG;IACG,SAAS,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAIpE;;;OAGG;IACG,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC;CAGrF"}