@explorins/pers-sdk 1.0.0-alpha.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/config/domains.js +22 -0
  2. package/explorins-pers-sdk-1.0.0-alpha.1.tgz +0 -0
  3. package/package.json +116 -23
  4. package/rollup.config.js +50 -54
  5. package/scripts/copy-declarations.js +147 -0
  6. package/src/analytics/api/analytics-api.ts +24 -0
  7. package/src/analytics/index.ts +52 -0
  8. package/src/analytics/models/index.ts +74 -0
  9. package/src/analytics/services/analytics-service.ts +28 -0
  10. package/src/auth-admin/api/auth-admin-api.ts +42 -0
  11. package/src/auth-admin/index.ts +47 -0
  12. package/src/auth-admin/services/auth-admin-service.ts +36 -0
  13. package/src/business/api/business-api.ts +181 -19
  14. package/src/business/index.ts +4 -3
  15. package/src/business/models/index.ts +4 -4
  16. package/src/business/services/business-service.ts +1 -1
  17. package/src/campaign/api/campaign-api.ts +376 -0
  18. package/src/campaign/index.ts +67 -0
  19. package/src/campaign/services/campaign-service.ts +164 -0
  20. package/src/core/abstractions/http-client.ts +1 -0
  21. package/src/core/auth/auth-provider.interface.ts +2 -2
  22. package/src/core/auth/create-auth-provider.ts +6 -6
  23. package/src/core/index.ts +33 -0
  24. package/src/core/pers-api-client.ts +211 -19
  25. package/src/core/pers-config.ts +34 -7
  26. package/src/core/utils/jwt.function.ts +24 -0
  27. package/src/donation/api/donation-api.ts +24 -0
  28. package/src/donation/index.ts +47 -0
  29. package/src/donation/models/index.ts +11 -0
  30. package/src/donation/services/donation-service.ts +25 -0
  31. package/src/index.ts +40 -1
  32. package/src/payment/api/payment-api.ts +185 -0
  33. package/src/payment/index.ts +64 -0
  34. package/src/payment/models/index.ts +29 -0
  35. package/src/payment/services/payment-service.ts +70 -0
  36. package/src/redemption/api/redemption-api.ts +241 -0
  37. package/src/redemption/index.ts +60 -0
  38. package/src/redemption/models/index.ts +17 -0
  39. package/src/redemption/services/redemption-service.ts +103 -0
  40. package/src/shared/interfaces/pers-shared-lib.interfaces.ts +99 -0
  41. package/src/tenant/api/tenant-api.ts +92 -0
  42. package/src/tenant/index.ts +61 -0
  43. package/src/tenant/models/index.ts +20 -0
  44. package/src/tenant/services/tenant-service.ts +78 -0
  45. package/src/token/api/token-api.ts +129 -0
  46. package/src/token/base/base-token-service.ts +167 -0
  47. package/src/token/index.ts +38 -0
  48. package/src/token/models/index.ts +30 -0
  49. package/src/token/services/token-service.ts +125 -0
  50. package/src/token/token-sdk.ts +231 -0
  51. package/src/transaction/api/transaction-api.ts +296 -0
  52. package/src/transaction/index.ts +65 -0
  53. package/src/transaction/models/index.ts +60 -0
  54. package/src/transaction/services/transaction-service.ts +104 -0
  55. package/src/user/api/user-api.ts +98 -0
  56. package/src/user/index.ts +62 -0
  57. package/src/user/models/index.ts +10 -0
  58. package/src/user/services/user-service.ts +75 -0
  59. package/src/user-status/api/user-status-api.ts +78 -0
  60. package/src/user-status/index.ts +55 -0
  61. package/src/user-status/models/index.ts +11 -0
  62. package/src/user-status/services/user-status-service.ts +51 -0
  63. package/src/web3/api/web3-api.ts +68 -0
  64. package/src/web3/index.ts +38 -0
  65. package/src/web3/models/index.ts +150 -0
  66. package/src/web3/services/web3-service.ts +338 -0
  67. package/src/web3-chain/api/web3-chain-api.ts +42 -0
  68. package/src/web3-chain/index.ts +27 -0
  69. package/src/web3-chain/models/index.ts +45 -0
  70. package/src/web3-chain/services/getWeb3FCD.service.ts +47 -0
  71. package/src/web3-chain/services/provider.service.ts +123 -0
  72. package/src/web3-chain/services/public-http-provider.service.ts +26 -0
  73. package/src/web3-chain/services/web3-chain-service.ts +131 -0
  74. package/src/business/business/tsconfig.json +0 -18
  75. package/src/core/abstractions/core-interfaces.ts +0 -56
  76. package/src/core/core.ts +0 -30
  77. package/src/core.ts +0 -30
@@ -0,0 +1,376 @@
1
+ import { PersApiClient } from '../../core/pers-api-client';
2
+ import {
3
+ CampaignDTO,
4
+ CampaignCreateRequestDTO,
5
+ CampaignUserClaimDTO,
6
+ CampaignClaimRequestDTO,
7
+ CampaignTriggerDTO,
8
+ CampaignBusinessEngagementCreateRequestDTO,
9
+ TokenUnitCreateRequestDTO,
10
+ } from '../../shared/interfaces/pers-shared-lib.interfaces';
11
+
12
+ /**
13
+ * Platform-Agnostic Campaign API Client (NEW - RESTful Design)
14
+ *
15
+ * Updated to use the new microservice-ready campaign controllers:
16
+ * - CampaignsController: Core campaign operations
17
+ * - CampaignTagsController: Tag management
18
+ * - CampaignTokensController: Token unit operations
19
+ * - CampaignTriggersController: Trigger system
20
+ * - CampaignEngagementsController: Business relationships
21
+ * - CampaignClaimsController: Claims processing
22
+ *
23
+ * Uses @explorins/pers-shared DTOs for consistency with backend.
24
+ * All endpoints updated to new RESTful patterns without role revelation.
25
+ */
26
+ export class CampaignApi {
27
+ constructor(private apiClient: PersApiClient) {}
28
+
29
+ // ==========================================
30
+ // CORE CAMPAIGN OPERATIONS (/campaigns)
31
+ // ==========================================
32
+
33
+ /**
34
+ * PUBLIC: Get all active campaigns
35
+ * NEW: /campaigns (intelligent access detection)
36
+ */
37
+ async getActiveCampaigns(): Promise<CampaignDTO[]> {
38
+ return this.apiClient.get<CampaignDTO[]>('/campaigns');
39
+ }
40
+
41
+ /**
42
+ * ADMIN: Get campaigns with filtering options
43
+ * NEW: /campaigns with query parameters (admin access detected automatically)
44
+ */
45
+ async getCampaigns(options?: {
46
+ active?: boolean;
47
+ tag?: string;
48
+ limit?: number;
49
+ offset?: number;
50
+ sort?: 'name' | 'createdAt' | 'startDate';
51
+ order?: 'ASC' | 'DESC';
52
+ }): Promise<CampaignDTO[]> {
53
+ let url = '/campaigns';
54
+ const params: string[] = [];
55
+
56
+ if (options) {
57
+ if (options.active !== undefined) params.push(`active=${options.active}`);
58
+ if (options.tag) params.push(`tag=${encodeURIComponent(options.tag)}`);
59
+ if (options.limit) params.push(`limit=${options.limit}`);
60
+ if (options.offset) params.push(`offset=${options.offset}`);
61
+ if (options.sort) params.push(`sort=${options.sort}`);
62
+ if (options.order) params.push(`order=${options.order}`);
63
+ }
64
+
65
+ if (params.length > 0) {
66
+ url += `?${params.join('&')}`;
67
+ }
68
+
69
+ return this.apiClient.get<CampaignDTO[]>(url);
70
+ }
71
+
72
+ /**
73
+ * PUBLIC: Get campaign by ID
74
+ * NEW: /campaigns/{id}
75
+ */
76
+ async getCampaignById(id: string): Promise<CampaignDTO> {
77
+ return this.apiClient.get<CampaignDTO>(`/campaigns/${id}`);
78
+ }
79
+
80
+ /**
81
+ * ADMIN: Create campaign
82
+ * NEW: POST /campaigns
83
+ */
84
+ async createCampaign(campaign: CampaignCreateRequestDTO): Promise<CampaignDTO> {
85
+ return this.apiClient.post<CampaignDTO>('/campaigns', campaign);
86
+ }
87
+
88
+ /**
89
+ * ADMIN: Update campaign
90
+ * NEW: PUT /campaigns/{id}
91
+ */
92
+ async updateCampaign(campaignId: string, campaign: CampaignCreateRequestDTO): Promise<CampaignDTO> {
93
+ return this.apiClient.put<CampaignDTO>(`/campaigns/${campaignId}`, campaign);
94
+ }
95
+
96
+ /**
97
+ * ADMIN: Toggle campaign active status
98
+ * NEW: PUT /campaigns/{id}/status
99
+ */
100
+ async toggleCampaignActive(campaignId: string): Promise<CampaignDTO> {
101
+ return this.apiClient.put<CampaignDTO>(`/campaigns/${campaignId}/status`, {});
102
+ }
103
+
104
+ /**
105
+ * ADMIN: Toggle campaign testnet environment
106
+ * NEW: PUT /campaigns/{id}/environment
107
+ */
108
+ async toggleCampaignTestnet(campaignId: string): Promise<CampaignDTO> {
109
+ return this.apiClient.put<CampaignDTO>(`/campaigns/${campaignId}/environment`, {});
110
+ }
111
+
112
+ /**
113
+ * ADMIN: Delete campaign
114
+ * NEW: DELETE /campaigns/{id}
115
+ */
116
+ async deleteCampaign(campaignId: string): Promise<boolean> {
117
+ return this.apiClient.delete<boolean>(`/campaigns/${campaignId}`);
118
+ }
119
+
120
+ // ==========================================
121
+ // TAG MANAGEMENT (/campaign-tags)
122
+ // ==========================================
123
+
124
+ /**
125
+ * ADMIN: Get all unique campaign tags
126
+ * NEW: GET /campaign-tags
127
+ */
128
+ async getAllUniqueTags(): Promise<string[]> {
129
+ return this.apiClient.get<string[]>('/campaign-tags');
130
+ }
131
+
132
+ /**
133
+ * ADMIN: Update campaign tags (replace all)
134
+ * NEW: PUT /campaign-tags/{id}
135
+ */
136
+ async updateCampaignTags(campaignId: string, tags: string[]): Promise<CampaignDTO> {
137
+ return this.apiClient.put<CampaignDTO>(`/campaign-tags/${campaignId}`, { tags });
138
+ }
139
+
140
+ /**
141
+ * ADMIN: Add tags to campaign
142
+ * NEW: POST /campaign-tags/{id}
143
+ */
144
+ async addTagsToCampaign(campaignId: string, tags: string[]): Promise<CampaignDTO> {
145
+ return this.apiClient.post<CampaignDTO>(`/campaign-tags/${campaignId}`, { tags });
146
+ }
147
+
148
+ /**
149
+ * ADMIN: Remove tag from campaign
150
+ * NEW: DELETE /campaign-tags/{id}/{tag}
151
+ */
152
+ async removeTagFromCampaign(campaignId: string, tag: string): Promise<CampaignDTO> {
153
+ return this.apiClient.delete<CampaignDTO>(`/campaign-tags/${campaignId}/${encodeURIComponent(tag)}`);
154
+ }
155
+
156
+ // ==========================================
157
+ // TOKEN MANAGEMENT (/campaign-tokens)
158
+ // ==========================================
159
+
160
+ /**
161
+ * ADMIN: Create campaign token unit
162
+ * NEW: POST /campaign-tokens/{id}
163
+ */
164
+ async createCampaignTokenUnit(campaignId: string, campaignTokenUnit: TokenUnitCreateRequestDTO): Promise<CampaignDTO> {
165
+ return this.apiClient.post<CampaignDTO>(`/campaign-tokens/${campaignId}`, campaignTokenUnit);
166
+ }
167
+
168
+ /**
169
+ * ADMIN: Update campaign token unit
170
+ * NEW: PUT /campaign-tokens/{id}/{tokenUnitId}
171
+ */
172
+ async updateCampaignTokenUnit(campaignId: string, tokenUnitId: string, campaignTokenUnit: TokenUnitCreateRequestDTO): Promise<CampaignDTO> {
173
+ return this.apiClient.put<CampaignDTO>(`/campaign-tokens/${campaignId}/${tokenUnitId}`, campaignTokenUnit);
174
+ }
175
+
176
+ /**
177
+ * ADMIN: Delete campaign token unit
178
+ * NEW: DELETE /campaign-tokens/{id}/{tokenUnitId}
179
+ */
180
+ async deleteCampaignTokenUnit(campaignId: string, campaignTokenUnitId: string): Promise<CampaignDTO> {
181
+ return this.apiClient.delete<CampaignDTO>(`/campaign-tokens/${campaignId}/${campaignTokenUnitId}`);
182
+ }
183
+
184
+ // ==========================================
185
+ // TRIGGER SYSTEM (/campaign-triggers)
186
+ // ==========================================
187
+
188
+ /**
189
+ * PUBLIC: Get campaign triggers catalog
190
+ * NEW: GET /campaign-triggers
191
+ */
192
+ async getCampaignTriggers(): Promise<CampaignTriggerDTO[]> {
193
+ return this.apiClient.get<CampaignTriggerDTO[]>('/campaign-triggers');
194
+ }
195
+
196
+ /**
197
+ * ADMIN: Create campaign trigger
198
+ * NEW: POST /campaign-triggers
199
+ */
200
+ async createCampaignTrigger(trigger: any): Promise<CampaignTriggerDTO> {
201
+ return this.apiClient.post<CampaignTriggerDTO>('/campaign-triggers', trigger);
202
+ }
203
+
204
+ /**
205
+ * ADMIN: Update campaign trigger
206
+ * NEW: PUT /campaign-triggers/{id}
207
+ */
208
+ async updateCampaignTrigger(triggerId: string, trigger: any): Promise<CampaignTriggerDTO> {
209
+ return this.apiClient.put<CampaignTriggerDTO>(`/campaign-triggers/${triggerId}`, trigger);
210
+ }
211
+
212
+ /**
213
+ * ADMIN: Delete campaign trigger
214
+ * NEW: DELETE /campaign-triggers/{id}
215
+ */
216
+ async deleteCampaignTrigger(triggerId: string): Promise<boolean> {
217
+ return this.apiClient.delete<boolean>(`/campaign-triggers/${triggerId}`);
218
+ }
219
+
220
+ /**
221
+ * ADMIN: Set campaign trigger
222
+ * NEW: PUT /campaign-triggers/campaigns/{id}/trigger/{triggerId}
223
+ */
224
+ async setCampaignTrigger(campaignId: string, triggerId: string): Promise<CampaignDTO> {
225
+ return this.apiClient.put<CampaignDTO>(`/campaign-triggers/campaigns/${campaignId}/trigger/${triggerId}`, {});
226
+ }
227
+
228
+ /**
229
+ * ADMIN: Create trigger condition
230
+ * NEW: POST /campaign-triggers/conditions
231
+ */
232
+ async createTriggerCondition(condition: any): Promise<any> {
233
+ return this.apiClient.post<any>('/campaign-triggers/conditions', condition);
234
+ }
235
+
236
+ /**
237
+ * ADMIN: Update trigger condition
238
+ * NEW: PUT /campaign-triggers/conditions/{id}
239
+ */
240
+ async updateTriggerCondition(conditionId: string, condition: any): Promise<any> {
241
+ return this.apiClient.put<any>(`/campaign-triggers/conditions/${conditionId}`, condition);
242
+ }
243
+
244
+ /**
245
+ * ADMIN: Add/Remove condition to trigger
246
+ * NEW: PUT /campaign-triggers/{triggerId}/condition/{conditionId}
247
+ */
248
+ async addOrRemoveConditionToTrigger(triggerId: string, conditionId: string): Promise<CampaignTriggerDTO> {
249
+ return this.apiClient.put<CampaignTriggerDTO>(`/campaign-triggers/${triggerId}/condition/${conditionId}`, {});
250
+ }
251
+
252
+ // ==========================================
253
+ // BUSINESS ENGAGEMENTS (/campaign-engagements)
254
+ // ==========================================
255
+
256
+ /**
257
+ * ADMIN: Add business engagement to campaign
258
+ * NEW: POST /campaign-engagements/{id}
259
+ */
260
+ async addBusinessEngagementToCampaign(campaignId: string, campaignBusinessEngagement: CampaignBusinessEngagementCreateRequestDTO): Promise<CampaignDTO> {
261
+ return this.apiClient.post<CampaignDTO>(`/campaign-engagements/${campaignId}`, campaignBusinessEngagement);
262
+ }
263
+
264
+ /**
265
+ * ADMIN: Update campaign business engagement
266
+ * NEW: PUT /campaign-engagements/{id}/{businessEngagementId}
267
+ */
268
+ async updateCampaignBusinessEngagement(campaignId: string, businessEngagementId: string, campaignBusinessEngagement: CampaignBusinessEngagementCreateRequestDTO): Promise<CampaignDTO> {
269
+ return this.apiClient.put<CampaignDTO>(`/campaign-engagements/${campaignId}/${businessEngagementId}`, campaignBusinessEngagement);
270
+ }
271
+
272
+ /**
273
+ * ADMIN: Delete campaign business engagement
274
+ * NEW: DELETE /campaign-engagements/{id}/{businessEngagementId}
275
+ */
276
+ async deleteCampaignBusinessEngagement(campaignId: string, businessEngagementId: string): Promise<CampaignDTO> {
277
+ return this.apiClient.delete<CampaignDTO>(`/campaign-engagements/${campaignId}/${businessEngagementId}`);
278
+ }
279
+
280
+ // ==========================================
281
+ // CLAIMS PROCESSING (/campaign-claims)
282
+ // ==========================================
283
+
284
+ /**
285
+ * USER: Claim campaign reward
286
+ * NEW: POST /campaign-claims/user
287
+ */
288
+ async claimCampaign(request: CampaignClaimRequestDTO): Promise<CampaignUserClaimDTO> {
289
+ return this.apiClient.post<CampaignUserClaimDTO>('/campaign-claims/user', request);
290
+ }
291
+
292
+ /**
293
+ * USER: Get claims for logged user
294
+ * NEW: GET /campaign-claims/users/me
295
+ */
296
+ async getClaimsForLoggedUser(): Promise<CampaignUserClaimDTO[]> {
297
+ return this.apiClient.get<CampaignUserClaimDTO[]>('/campaign-claims/users/me');
298
+ }
299
+
300
+ /**
301
+ * BUSINESS: Claim campaign reward for customer
302
+ * NEW: POST /campaign-claims/business
303
+ */
304
+ async businessClaimCampaign(request: any): Promise<CampaignUserClaimDTO> {
305
+ return this.apiClient.post<CampaignUserClaimDTO>('/campaign-claims/business', request);
306
+ }
307
+
308
+ /**
309
+ * SYSTEM: Process automated claim
310
+ * NEW: POST /campaign-claims/system
311
+ */
312
+ async systemClaimCampaign(request: any): Promise<CampaignUserClaimDTO> {
313
+ return this.apiClient.post<CampaignUserClaimDTO>('/campaign-claims/system', request);
314
+ }
315
+
316
+ /**
317
+ * ADMIN: Manual claim processing
318
+ * NEW: POST /campaign-claims/admin
319
+ */
320
+ async adminClaimCampaign(request: any): Promise<CampaignUserClaimDTO> {
321
+ return this.apiClient.post<CampaignUserClaimDTO>('/campaign-claims/admin', request);
322
+ }
323
+
324
+ /**
325
+ * ADMIN: Get all campaign claims
326
+ * NEW: GET /campaign-claims/admin
327
+ */
328
+ async getCampaignClaims(): Promise<CampaignUserClaimDTO[]> {
329
+ return this.apiClient.get<CampaignUserClaimDTO[]>('/campaign-claims/admin');
330
+ }
331
+
332
+ /**
333
+ * ADMIN: Get campaign claims by campaign ID
334
+ * NEW: GET /campaign-claims/admin/{campaignId}
335
+ */
336
+ async getCampaignClaimsByCampaignId(campaignId: string): Promise<CampaignUserClaimDTO[]> {
337
+ return this.apiClient.get<CampaignUserClaimDTO[]>(`/campaign-claims/admin/${campaignId}`);
338
+ }
339
+
340
+ /**
341
+ * ADMIN: Get campaign claims by user ID
342
+ * NEW: GET /campaign-claims/admin/users/{userId}
343
+ */
344
+ async getCampaignClaimsByUserId(userId: string): Promise<CampaignUserClaimDTO[]> {
345
+ return this.apiClient.get<CampaignUserClaimDTO[]>(`/campaign-claims/admin/users/${userId}`);
346
+ }
347
+
348
+ /**
349
+ * ADMIN: Get campaign claims by business ID
350
+ * NEW: GET /campaign-claims/admin/businesses/{businessId}
351
+ */
352
+ async getCampaignClaimsByBusinessId(businessId: string): Promise<CampaignUserClaimDTO[]> {
353
+ return this.apiClient.get<CampaignUserClaimDTO[]>(`/campaign-claims/admin/businesses/${businessId}`);
354
+ }
355
+
356
+ /**
357
+ * USER: Get user's claims for specific campaign
358
+ * NEW: GET /campaign-claims/campaigns/{campaignId}/users/me
359
+ */
360
+ async getUserClaimsForCampaign(campaignId: string): Promise<CampaignUserClaimDTO[]> {
361
+ return this.apiClient.get<CampaignUserClaimDTO[]>(`/campaign-claims/campaigns/${campaignId}/users/me`);
362
+ }
363
+
364
+ // ==========================================
365
+ // BACKWARD COMPATIBILITY (DEPRECATED)
366
+ // ==========================================
367
+
368
+ /**
369
+ * @deprecated Use getCampaigns() instead
370
+ * LEGACY: Get campaigns with active filter
371
+ */
372
+ async getCampaignsLegacy(active?: boolean): Promise<CampaignDTO[]> {
373
+ console.warn('CampaignApi.getCampaignsLegacy() is deprecated. Use getCampaigns() instead.');
374
+ return this.getCampaigns(active !== undefined ? { active } : undefined);
375
+ }
376
+ }
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @explorins/pers-sdk-campaign
3
+ *
4
+ * Platform-agnostic Campaign Domain SDK for PERS ecosystem
5
+ * Handles campaign operations across different authorization levels
6
+ */
7
+
8
+ // API Layer
9
+ export { CampaignApi } from './api/campaign-api';
10
+
11
+ // Service Layer
12
+ export { CampaignService } from './services/campaign-service';
13
+
14
+ // Models & Types - re-export all centralized interfaces
15
+ export * from '../shared/interfaces/pers-shared-lib.interfaces';
16
+
17
+ // Factory function for creating campaign SDK instance
18
+ import { PersApiClient } from '../core/pers-api-client';
19
+ import { CampaignApi } from './api/campaign-api';
20
+ import { CampaignService } from './services/campaign-service';
21
+ import { CampaignClaimRequestDTO, CampaignCreateRequestDTO, TokenUnitCreateRequestDTO, CampaignBusinessEngagementCreateRequestDTO } from '../shared/interfaces/pers-shared-lib.interfaces';
22
+
23
+ /**
24
+ * Create a complete Campaign SDK instance
25
+ *
26
+ * @param apiClient - Configured PERS API client
27
+ * @returns Campaign SDK with flattened structure for better DX
28
+ */
29
+ export function createCampaignSDK(apiClient: PersApiClient) {
30
+ const campaignApi = new CampaignApi(apiClient);
31
+ const campaignService = new CampaignService(campaignApi);
32
+
33
+ return {
34
+ // Direct access to service methods (primary interface)
35
+
36
+ // Public methods
37
+ getActiveCampaigns: () => campaignService.getActiveCampaigns(),
38
+ getCampaignById: (id: string) => campaignService.getCampaignById(id),
39
+
40
+ // Auth methods
41
+ claimCampaign: (request: CampaignClaimRequestDTO) => campaignService.claimCampaign(request),
42
+ getClaimsForLoggedUser: () => campaignService.getClaimsForLoggedUser(),
43
+
44
+ // Admin methods
45
+ getCampaigns: (active?: boolean) => campaignService.getCampaigns(active),
46
+ getCampaignTriggers: () => campaignService.getCampaignTriggers(),
47
+ toggleCampaignActive: (campaignId: string) => campaignService.toggleCampaignActive(campaignId),
48
+ toggleCampaignTestnet: (campaignId: string) => campaignService.toggleCampaignTestnet(campaignId),
49
+ createCampaign: (campaign: CampaignCreateRequestDTO) => campaignService.createCampaign(campaign),
50
+ setCampaignTrigger: (campaignId: string, triggerId: string) => campaignService.setCampaignTrigger(campaignId, triggerId),
51
+ updateCampaign: (campaignId: string, campaign: CampaignCreateRequestDTO) => campaignService.updateCampaign(campaignId, campaign),
52
+ createCampaignTokenUnit: (campaignId: string, campaignTokenUnit: TokenUnitCreateRequestDTO) => campaignService.createCampaignTokenUnit(campaignId, campaignTokenUnit),
53
+ deleteCampaignTokenUnit: (campaignId: string, campaignTokenUnitId: string) => campaignService.deleteCampaignTokenUnit(campaignId, campaignTokenUnitId),
54
+ addBusinessEngagementToCampaign: (campaignId: string, campaignBusinessEngagement: CampaignBusinessEngagementCreateRequestDTO) => campaignService.addBusinessEngagementToCampaign(campaignId, campaignBusinessEngagement),
55
+ updateCampaignBusinessEngagement: (campaignId: string, businessEngagementId: string, campaignBusinessEngagement: CampaignBusinessEngagementCreateRequestDTO) => campaignService.updateCampaignBusinessEngagement(campaignId, businessEngagementId, campaignBusinessEngagement),
56
+ deleteCampaignBusinessEngagement: (campaignId: string, businessEngagementId: string) => campaignService.deleteCampaignBusinessEngagement(campaignId, businessEngagementId),
57
+ getCampaignClaims: () => campaignService.getCampaignClaims(),
58
+ getCampaignClaimsByUserId: (userId: string) => campaignService.getCampaignClaimsByUserId(userId),
59
+ getCampaignClaimsByBusinessId: (businessId: string) => campaignService.getCampaignClaimsByBusinessId(businessId),
60
+
61
+ // Advanced access for edge cases
62
+ api: campaignApi,
63
+ service: campaignService
64
+ };
65
+ }
66
+
67
+ export type CampaignSDK = ReturnType<typeof createCampaignSDK>;
@@ -0,0 +1,164 @@
1
+ import { CampaignApi } from '../api/campaign-api';
2
+ import {
3
+ CampaignDTO,
4
+ CampaignCreateRequestDTO,
5
+ CampaignUserClaimDTO,
6
+ CampaignClaimRequestDTO,
7
+ CampaignTriggerDTO,
8
+ TokenUnitCreateRequestDTO,
9
+ CampaignBusinessEngagementCreateRequestDTO
10
+ } from '../../shared/interfaces/pers-shared-lib.interfaces';
11
+
12
+ /**
13
+ * Platform-Agnostic Campaign Service
14
+ *
15
+ * Contains campaign business logic and operations that work across platforms.
16
+ * No framework dependencies - pure TypeScript business logic.
17
+ *
18
+ * Focuses only on actual backend capabilities.
19
+ */
20
+ export class CampaignService {
21
+ constructor(private campaignApi: CampaignApi) {}
22
+
23
+ // ==========================================
24
+ // PUBLIC OPERATIONS
25
+ // ==========================================
26
+
27
+ /**
28
+ * PUBLIC: Get all active campaigns
29
+ */
30
+ async getActiveCampaigns(): Promise<CampaignDTO[]> {
31
+ return this.campaignApi.getActiveCampaigns();
32
+ }
33
+
34
+ /**
35
+ * PUBLIC: Get campaign by ID
36
+ */
37
+ async getCampaignById(id: string): Promise<CampaignDTO> {
38
+ return this.campaignApi.getCampaignById(id);
39
+ }
40
+
41
+ // ==========================================
42
+ // AUTHENTICATED OPERATIONS
43
+ // ==========================================
44
+
45
+ /**
46
+ * AUTH: Claim campaign
47
+ */
48
+ async claimCampaign(request: CampaignClaimRequestDTO): Promise<CampaignUserClaimDTO> {
49
+ return this.campaignApi.claimCampaign(request);
50
+ }
51
+
52
+ /**
53
+ * AUTH: Get claims for logged user
54
+ */
55
+ async getClaimsForLoggedUser(): Promise<CampaignUserClaimDTO[]> {
56
+ return this.campaignApi.getClaimsForLoggedUser();
57
+ }
58
+
59
+ // ==========================================
60
+ // ADMIN OPERATIONS
61
+ // ==========================================
62
+
63
+ /**
64
+ * ADMIN: Get campaigns with optional active filter
65
+ */
66
+ async getCampaigns(active?: boolean): Promise<CampaignDTO[]> {
67
+ return this.campaignApi.getCampaigns(active !== undefined ? { active } : undefined);
68
+ }
69
+
70
+ /**
71
+ * ADMIN: Get campaign triggers
72
+ */
73
+ async getCampaignTriggers(): Promise<CampaignTriggerDTO[]> {
74
+ return this.campaignApi.getCampaignTriggers();
75
+ }
76
+
77
+ /**
78
+ * ADMIN: Toggle campaign active status
79
+ */
80
+ async toggleCampaignActive(campaignId: string): Promise<CampaignDTO> {
81
+ return this.campaignApi.toggleCampaignActive(campaignId);
82
+ }
83
+
84
+ /**
85
+ * ADMIN: Toggle campaign testnet environment
86
+ */
87
+ async toggleCampaignTestnet(campaignId: string): Promise<CampaignDTO> {
88
+ return this.campaignApi.toggleCampaignTestnet(campaignId);
89
+ }
90
+
91
+ /**
92
+ * ADMIN: Create campaign
93
+ */
94
+ async createCampaign(campaign: CampaignCreateRequestDTO): Promise<CampaignDTO> {
95
+ return this.campaignApi.createCampaign(campaign);
96
+ }
97
+
98
+ /**
99
+ * ADMIN: Set campaign trigger
100
+ */
101
+ async setCampaignTrigger(campaignId: string, triggerId: string): Promise<CampaignDTO> {
102
+ return this.campaignApi.setCampaignTrigger(campaignId, triggerId);
103
+ }
104
+
105
+ /**
106
+ * ADMIN: Update campaign
107
+ */
108
+ async updateCampaign(campaignId: string, campaign: CampaignCreateRequestDTO): Promise<CampaignDTO> {
109
+ return this.campaignApi.updateCampaign(campaignId, campaign);
110
+ }
111
+
112
+ /**
113
+ * ADMIN: Create campaign token unit
114
+ */
115
+ async createCampaignTokenUnit(campaignId: string, campaignTokenUnit: TokenUnitCreateRequestDTO): Promise<CampaignDTO> {
116
+ return this.campaignApi.createCampaignTokenUnit(campaignId, campaignTokenUnit);
117
+ }
118
+
119
+ /**
120
+ * ADMIN: Delete campaign token unit
121
+ */
122
+ async deleteCampaignTokenUnit(campaignId: string, campaignTokenUnitId: string): Promise<CampaignDTO> {
123
+ return this.campaignApi.deleteCampaignTokenUnit(campaignId, campaignTokenUnitId);
124
+ }
125
+
126
+ /**
127
+ * ADMIN: Add business engagement to campaign
128
+ */
129
+ async addBusinessEngagementToCampaign(campaignId: string, campaignBusinessEngagement: CampaignBusinessEngagementCreateRequestDTO): Promise<CampaignDTO> {
130
+ return this.campaignApi.addBusinessEngagementToCampaign(campaignId, campaignBusinessEngagement);
131
+ }
132
+
133
+ /**
134
+ * ADMIN: Update campaign business engagement
135
+ */
136
+ async updateCampaignBusinessEngagement(campaignId: string, businessEngagementId: string, campaignBusinessEngagement: CampaignBusinessEngagementCreateRequestDTO): Promise<CampaignDTO> {
137
+ return this.campaignApi.updateCampaignBusinessEngagement(campaignId, businessEngagementId, campaignBusinessEngagement);
138
+ }
139
+
140
+ async deleteCampaignBusinessEngagement(campaignId: string, businessEngagementId: string): Promise<CampaignDTO> {
141
+ return this.campaignApi.deleteCampaignBusinessEngagement(campaignId, businessEngagementId);
142
+ }
143
+
144
+ /**
145
+ * ADMIN: Get all campaign claims
146
+ */
147
+ async getCampaignClaims(): Promise<CampaignUserClaimDTO[]> {
148
+ return this.campaignApi.getCampaignClaims();
149
+ }
150
+
151
+ /**
152
+ * ADMIN: Get campaign claims by user ID
153
+ */
154
+ async getCampaignClaimsByUserId(userId: string): Promise<CampaignUserClaimDTO[]> {
155
+ return this.campaignApi.getCampaignClaimsByUserId(userId);
156
+ }
157
+
158
+ /**
159
+ * ADMIN: Get campaign claims by business ID
160
+ */
161
+ async getCampaignClaimsByBusinessId(businessId: string): Promise<CampaignUserClaimDTO[]> {
162
+ return this.campaignApi.getCampaignClaimsByBusinessId(businessId);
163
+ }
164
+ }
@@ -14,6 +14,7 @@ export interface RequestOptions {
14
14
  headers?: Record<string, string>;
15
15
  params?: Record<string, string>;
16
16
  timeout?: number;
17
+ responseType?: 'json' | 'blob' | 'text' | 'arraybuffer';
17
18
  }
18
19
 
19
20
  export interface HttpResponse<T> {
@@ -1,11 +1,11 @@
1
- export interface AuthProvider {
1
+ export interface PersAuthProvider {
2
2
  getToken(): Promise<string | null>;
3
3
  getProjectKey(): Promise<string | null>;
4
4
  authType: 'admin' | 'user' | 'firebase';
5
5
  onTokenExpired?: () => Promise<void>;
6
6
  }
7
7
 
8
- export interface RequestOptions {
8
+ export interface PersRequestOptions {
9
9
  headers?: Record<string, string>;
10
10
  }
11
11
 
@@ -1,4 +1,4 @@
1
- import { AuthProvider } from './auth-provider.interface';
1
+ import { PersAuthProvider } from './auth-provider.interface';
2
2
  import { SimpleAuthConfig } from './simple-auth-config.interface';
3
3
 
4
4
  /**
@@ -16,7 +16,7 @@ import { SimpleAuthConfig } from './simple-auth-config.interface';
16
16
  * @param config - Simple auth configuration
17
17
  * @returns AuthProvider implementation
18
18
  */
19
- export function createAuthProvider(config: SimpleAuthConfig): AuthProvider {
19
+ export function createAuthProvider(config: SimpleAuthConfig): PersAuthProvider {
20
20
  // Store current token for refresh scenarios and caching
21
21
  let currentToken: string | null = config.token || null;
22
22
  let isRefreshing = false; // Prevent concurrent refresh attempts
@@ -113,24 +113,24 @@ export function createAuthProvider(config: SimpleAuthConfig): AuthProvider {
113
113
  * Platform-specific localStorage token provider for browsers
114
114
  * This is a convenience function for browser environments
115
115
  */
116
- export function createBrowserTokenProvider(tokenKey: string = 'userJwt'): () => Promise<string | null> {
116
+ /* export function createBrowserTokenProvider(tokenKey: string = 'userJwt'): () => Promise<string | null> {
117
117
  return async () => {
118
118
  if (typeof localStorage !== 'undefined') {
119
119
  return localStorage.getItem(tokenKey);
120
120
  }
121
121
  return null;
122
122
  };
123
- }
123
+ } */
124
124
 
125
125
  /**
126
126
  * Platform-specific environment variable token provider for Node.js
127
127
  * This is a convenience function for Node.js environments
128
128
  */
129
- export function createNodeTokenProvider(envVar: string = 'JWT_TOKEN'): () => Promise<string | null> {
129
+ /* export function createNodeTokenProvider(envVar: string = 'JWT_TOKEN'): () => Promise<string | null> {
130
130
  return async () => {
131
131
  if (typeof process !== 'undefined' && process.env) {
132
132
  return process.env[envVar] || null;
133
133
  }
134
134
  return null;
135
135
  };
136
- }
136
+ } */