@explorins/pers-sdk-react-native 2.1.2 → 2.1.5

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 (38) hide show
  1. package/README.md +7 -7
  2. package/dist/hooks/index.d.ts +6 -0
  3. package/dist/hooks/index.d.ts.map +1 -1
  4. package/dist/hooks/index.js +1 -0
  5. package/dist/hooks/useAnalytics.d.ts +37 -14
  6. package/dist/hooks/useAnalytics.d.ts.map +1 -1
  7. package/dist/hooks/useAnalytics.js +239 -19
  8. package/dist/hooks/useCampaigns.d.ts +14 -6
  9. package/dist/hooks/useCampaigns.d.ts.map +1 -1
  10. package/dist/hooks/useCampaigns.js +144 -10
  11. package/dist/hooks/useRedemptions.d.ts +5 -2
  12. package/dist/hooks/useRedemptions.d.ts.map +1 -1
  13. package/dist/hooks/useRedemptions.js +53 -2
  14. package/dist/hooks/useTokenBalances.d.ts.map +1 -1
  15. package/dist/hooks/useTokenBalances.js +21 -8
  16. package/dist/hooks/useTransactions.d.ts +8 -5
  17. package/dist/hooks/useTransactions.d.ts.map +1 -1
  18. package/dist/hooks/useTransactions.js +70 -27
  19. package/dist/hooks/useTriggerSources.d.ts +76 -0
  20. package/dist/hooks/useTriggerSources.d.ts.map +1 -0
  21. package/dist/hooks/useTriggerSources.js +272 -0
  22. package/dist/index.d.ts +12 -3
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +2742 -495
  25. package/dist/index.js.map +1 -1
  26. package/dist/providers/PersSDKProvider.d.ts +1 -12
  27. package/dist/providers/PersSDKProvider.d.ts.map +1 -1
  28. package/dist/providers/PersSDKProvider.js +50 -25
  29. package/package.json +2 -2
  30. package/src/hooks/index.ts +17 -1
  31. package/src/hooks/useAnalytics.ts +268 -21
  32. package/src/hooks/useCampaigns.ts +176 -14
  33. package/src/hooks/useRedemptions.ts +66 -3
  34. package/src/hooks/useTokenBalances.ts +23 -9
  35. package/src/hooks/useTransactions.ts +84 -29
  36. package/src/hooks/useTriggerSources.ts +301 -0
  37. package/src/index.ts +33 -3
  38. package/src/providers/PersSDKProvider.tsx +58 -39
@@ -0,0 +1,272 @@
1
+ import { useCallback } from 'react';
2
+ import { usePersSDK } from '../providers/PersSDKProvider';
3
+ /**
4
+ * React hook for TriggerSource operations in the PERS SDK
5
+ *
6
+ * Manages trigger sources which are physical or digital activation points for campaigns:
7
+ * - **QR_CODE**: Scannable QR codes at physical locations
8
+ * - **NFC_TAG**: NFC tap points for contactless interactions
9
+ * - **GPS_GEOFENCE**: Location-based triggers with radius detection
10
+ * - **API_WEBHOOK**: External system integration triggers
11
+ * - **TRANSACTION**: Purchase/payment based triggers
12
+ *
13
+ * TriggerSources are standalone entities that can be created, managed, and then
14
+ * assigned to campaigns. This separation allows reuse across multiple campaigns.
15
+ *
16
+ * **Admin Only**: All create, update, and delete operations require admin authentication.
17
+ *
18
+ * @returns TriggerSource hook with CRUD operations
19
+ *
20
+ * @example Basic TriggerSource Operations
21
+ * ```typescript
22
+ * function TriggerSourceManager() {
23
+ * const {
24
+ * getAll,
25
+ * getById,
26
+ * create,
27
+ * update,
28
+ * remove
29
+ * } = useTriggerSources();
30
+ *
31
+ * // List all QR code trigger sources
32
+ * const loadQRSources = async () => {
33
+ * const { data: sources } = await getAll({ type: 'QR_CODE' });
34
+ * console.log('QR Sources:', sources);
35
+ * };
36
+ *
37
+ * // Create a new QR code for a store
38
+ * const createStoreQR = async () => {
39
+ * const source = await create({
40
+ * type: 'QR_CODE',
41
+ * name: 'Store Entrance QR',
42
+ * description: 'Scan at the entrance',
43
+ * businessId: 'business-123',
44
+ * coordsLatitude: 47.6062,
45
+ * coordsLongitude: -122.3321
46
+ * });
47
+ * console.log('Created:', source.id);
48
+ * };
49
+ * }
50
+ * ```
51
+ *
52
+ * @example GPS Geofence Trigger
53
+ * ```typescript
54
+ * const { create } = useTriggerSources();
55
+ *
56
+ * // Create a GPS geofence around a location
57
+ * const geofence = await create({
58
+ * type: 'GPS_GEOFENCE',
59
+ * name: 'Downtown Area',
60
+ * coordsLatitude: 47.6062,
61
+ * coordsLongitude: -122.3321,
62
+ * metadata: { radiusMeters: 100 }
63
+ * });
64
+ * ```
65
+ */
66
+ export const useTriggerSources = () => {
67
+ const { sdk, isInitialized, isAuthenticated } = usePersSDK();
68
+ /**
69
+ * Get trigger sources with optional filters and pagination
70
+ *
71
+ * Retrieves trigger sources (QR codes, NFC tags, GPS geofences, webhooks, etc.)
72
+ * that can be used to activate campaigns. Supports filtering by type, business,
73
+ * campaign association, and active status.
74
+ *
75
+ * @param options - Filter and pagination options
76
+ * @returns Promise resolving to paginated trigger sources
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * // Get all QR code trigger sources
81
+ * const { data: qrSources } = await getAll({ type: 'QR_CODE' });
82
+ *
83
+ * // Get trigger sources for a specific business
84
+ * const { data: businessSources, pagination } = await getAll({
85
+ * businessId: 'business-123',
86
+ * active: true,
87
+ * page: 1,
88
+ * limit: 20
89
+ * });
90
+ *
91
+ * // Get trigger sources assigned to a campaign
92
+ * const { data: campaignSources } = await getAll({
93
+ * campaignId: 'campaign-456'
94
+ * });
95
+ * ```
96
+ */
97
+ const getAll = useCallback(async (options) => {
98
+ if (!isInitialized || !sdk) {
99
+ throw new Error('SDK not initialized. Call initialize() first.');
100
+ }
101
+ try {
102
+ const result = await sdk.triggerSources.getAll(options);
103
+ return result;
104
+ }
105
+ catch (error) {
106
+ console.error('Failed to fetch trigger sources:', error);
107
+ throw error;
108
+ }
109
+ }, [sdk, isInitialized]);
110
+ /**
111
+ * Get trigger source by ID
112
+ *
113
+ * Retrieves detailed information for a specific trigger source including
114
+ * its type, location, metadata, and configuration.
115
+ *
116
+ * @param triggerSourceId - UUID of the trigger source
117
+ * @returns Promise resolving to trigger source details
118
+ * @throws {PersApiError} When trigger source with specified ID is not found
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * const source = await getById('source-123');
123
+ *
124
+ * console.log('Trigger Source:', source.name);
125
+ * console.log('Type:', source.type);
126
+ * console.log('Active:', source.isActive);
127
+ *
128
+ * if (source.coordsLatitude && source.coordsLongitude) {
129
+ * console.log('Location:', source.coordsLatitude, source.coordsLongitude);
130
+ * }
131
+ * ```
132
+ */
133
+ const getById = useCallback(async (triggerSourceId) => {
134
+ if (!isInitialized || !sdk) {
135
+ throw new Error('SDK not initialized. Call initialize() first.');
136
+ }
137
+ try {
138
+ const result = await sdk.triggerSources.getById(triggerSourceId);
139
+ return result;
140
+ }
141
+ catch (error) {
142
+ console.error('Failed to fetch trigger source:', error);
143
+ throw error;
144
+ }
145
+ }, [sdk, isInitialized]);
146
+ /**
147
+ * Admin: Create a new trigger source
148
+ *
149
+ * Creates a new trigger source (QR code, NFC tag, GPS geofence, webhook, or
150
+ * transaction-based trigger) that can be assigned to campaigns. Requires
151
+ * administrator privileges.
152
+ *
153
+ * @param triggerSource - Trigger source creation data
154
+ * @returns Promise resolving to created trigger source
155
+ * @throws {PersApiError} When not authenticated as admin or validation fails
156
+ *
157
+ * @example
158
+ * ```typescript
159
+ * // Create a QR code trigger source
160
+ * const qrSource = await create({
161
+ * type: 'QR_CODE',
162
+ * name: 'Store Entrance QR',
163
+ * description: 'QR code at main entrance',
164
+ * businessId: 'business-123',
165
+ * coordsLatitude: 47.6062,
166
+ * coordsLongitude: -122.3321
167
+ * });
168
+ *
169
+ * // Create an NFC tag trigger source
170
+ * const nfcSource = await create({
171
+ * type: 'NFC_TAG',
172
+ * name: 'Product Display NFC',
173
+ * metadata: { productId: 'SKU-12345' }
174
+ * });
175
+ * ```
176
+ */
177
+ const create = useCallback(async (triggerSource) => {
178
+ if (!isInitialized || !sdk) {
179
+ throw new Error('SDK not initialized. Call initialize() first.');
180
+ }
181
+ if (!isAuthenticated) {
182
+ throw new Error('SDK not authenticated. create requires admin authentication.');
183
+ }
184
+ try {
185
+ const result = await sdk.triggerSources.create(triggerSource);
186
+ return result;
187
+ }
188
+ catch (error) {
189
+ console.error('Failed to create trigger source:', error);
190
+ throw error;
191
+ }
192
+ }, [sdk, isInitialized, isAuthenticated]);
193
+ /**
194
+ * Admin: Update a trigger source
195
+ *
196
+ * Updates an existing trigger source's configuration. All fields are optional;
197
+ * only provided fields will be updated. Requires administrator privileges.
198
+ *
199
+ * @param triggerSourceId - UUID of the trigger source to update
200
+ * @param triggerSource - Updated trigger source data (partial)
201
+ * @returns Promise resolving to updated trigger source
202
+ * @throws {PersApiError} When not authenticated as admin or trigger source not found
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * // Update trigger source name and location
207
+ * const updated = await update('source-123', {
208
+ * name: 'Updated Store Entrance QR',
209
+ * description: 'New description',
210
+ * coordsLatitude: 47.6063,
211
+ * coordsLongitude: -122.3322
212
+ * });
213
+ * ```
214
+ */
215
+ const update = useCallback(async (triggerSourceId, triggerSource) => {
216
+ if (!isInitialized || !sdk) {
217
+ throw new Error('SDK not initialized. Call initialize() first.');
218
+ }
219
+ if (!isAuthenticated) {
220
+ throw new Error('SDK not authenticated. update requires admin authentication.');
221
+ }
222
+ try {
223
+ const result = await sdk.triggerSources.update(triggerSourceId, triggerSource);
224
+ return result;
225
+ }
226
+ catch (error) {
227
+ console.error('Failed to update trigger source:', error);
228
+ throw error;
229
+ }
230
+ }, [sdk, isInitialized, isAuthenticated]);
231
+ /**
232
+ * Admin: Delete a trigger source
233
+ *
234
+ * Soft deletes a trigger source, making it inactive. The trigger source will
235
+ * be removed from any campaigns it was assigned to. Requires administrator
236
+ * privileges.
237
+ *
238
+ * @param triggerSourceId - UUID of the trigger source to delete
239
+ * @returns Promise resolving to success status
240
+ * @throws {PersApiError} When not authenticated as admin or trigger source not found
241
+ *
242
+ * @example
243
+ * ```typescript
244
+ * const success = await remove('source-123');
245
+ * console.log('Trigger source deleted:', success);
246
+ * ```
247
+ */
248
+ const remove = useCallback(async (triggerSourceId) => {
249
+ if (!isInitialized || !sdk) {
250
+ throw new Error('SDK not initialized. Call initialize() first.');
251
+ }
252
+ if (!isAuthenticated) {
253
+ throw new Error('SDK not authenticated. remove requires admin authentication.');
254
+ }
255
+ try {
256
+ const result = await sdk.triggerSources.delete(triggerSourceId);
257
+ return result;
258
+ }
259
+ catch (error) {
260
+ console.error('Failed to delete trigger source:', error);
261
+ throw error;
262
+ }
263
+ }, [sdk, isInitialized, isAuthenticated]);
264
+ return {
265
+ getAll,
266
+ getById,
267
+ create,
268
+ update,
269
+ remove,
270
+ isAvailable: isInitialized && !!sdk?.triggerSources,
271
+ };
272
+ };
package/dist/index.d.ts CHANGED
@@ -206,18 +206,27 @@ export { PersSDKProvider, usePersSDK, type PersConfig, type PersSDKContext } fro
206
206
  * }
207
207
  * ```
208
208
  */
209
- export { useAuth, useTokens, useTokenBalances, useTransactions, useTransactionSigner, SigningStatus, useBusiness, useCampaigns, useRedemptions, useWeb3, usePurchases, useTenants, useUsers, useUserStatus, useFiles, useAnalytics, useDonations, useEvents } from './hooks';
210
- export type { OnStatusUpdateFn, StatusUpdateData, SigningStatusType, TransactionSigningResult, SubmissionResult, AuthenticatedUser } from './hooks';
209
+ export { useAuth, useTokens, useTokenBalances, useTransactions, useTransactionSigner, SigningStatus, useBusiness, useCampaigns, useRedemptions, useWeb3, usePurchases, useTenants, useUsers, useUserStatus, useFiles, useAnalytics, useDonations, useEvents, useTriggerSources } from './hooks';
210
+ export type { TransactionSignerHook, OnStatusUpdateFn, StatusUpdateData, SigningStatusType, TransactionSigningResult, SubmissionResult, AuthenticatedUser } from './hooks';
211
211
  export type { EventsHook, PersEvent, EventHandler, EventFilter, Unsubscribe } from './hooks';
212
212
  export type { TokenBalanceWithToken, UseTokenBalancesOptions, UseTokenBalancesResult } from './hooks';
213
+ export type { CampaignClaimFilters, CampaignHook } from './hooks';
214
+ export type { RedemptionRedeemFilters, RedemptionHook } from './hooks';
215
+ export type { TransactionQueryOptions, TransactionHook } from './hooks';
216
+ export type { TriggerSourceQueryOptions, TriggerSourceHook } from './hooks';
217
+ export type { AnalyticsHook } from './hooks';
213
218
  /**
214
219
  * React Native-optimized HTTP client with automatic request/response handling
215
220
  *
216
221
  * Provides platform-specific networking with proper error handling, timeout management,
217
222
  * and React Native compatibility. Automatically handles headers, authentication tokens,
218
223
  * and response parsing.
224
+ *
225
+ * @see {@link ReactNativeHttpClient} - The HTTP client implementation
226
+ * @see {@link HttpClient} - The HTTP client interface
227
+ * @see {@link RequestOptions} - Request configuration options
219
228
  */
220
- export { ReactNativeHttpClient } from './providers/react-native-http-client';
229
+ export { ReactNativeHttpClient, type HttpClient, type RequestOptions } from './providers/react-native-http-client';
221
230
  /**
222
231
  * React Native polyfill utilities for web compatibility
223
232
  *
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAGH,OAAO,aAAa,CAAC;AAMrB;;;;;;;;GAQG;AACH,OAAO,EACL,6BAA6B,EAC7B,KAAK,qBAAqB,EAC3B,MAAM,wCAAwC,CAAC;AAMhD;;;;;;;;;;GAUG;AACH,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAEvE;;;;;;;;GAQG;AACH,OAAO,EACL,wBAAwB,GACzB,MAAM,uCAAuC,CAAC;AAM/C;;;GAGG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAMvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,EACL,eAAe,EACf,UAAU,EACV,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,6BAA6B,CAAC;AAMrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AACH,OAAO,EACL,OAAO,EACP,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,cAAc,EACd,OAAO,EACP,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,SAAS,EACV,MAAM,SAAS,CAAC;AAGjB,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGpJ,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG7F,YAAY,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAMtG;;;;;;GAMG;AACH,OAAO,EACL,qBAAqB,EACtB,MAAM,sCAAsC,CAAC;AAM9C;;;;;;;;GAQG;AACH,OAAO,EACL,8BAA8B,EAC/B,MAAM,aAAa,CAAC;AAMrB;;;;;;;;;;;;;;;;GAgBG;AACH,cAAc,wBAAwB,CAAC;AAEvC;;;;GAIG;AACH,OAAO,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAE7E;;;;;GAKG;AACH,OAAO,EAEL,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;GAWG;AACH,YAAY,EACV,mBAAmB,EACnB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,sBAAsB,EACvB,MAAM,0BAA0B,CAAC;AAMlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,2BAA2B,EAC5B,MAAM,iCAAiC,CAAC;AAEzC,YAAY,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAMzG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuFG;AACH,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,UAAU,EACX,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}