@explorins/pers-sdk-react-native 2.1.7 → 2.1.10

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.
@@ -1,8 +1,27 @@
1
- import type { CampaignClaimRequestDTO, CampaignDTO, CampaignClaimDTO, CampaignTriggerDTO, PaginatedResponseDTO, CampaignClaimIncludeRelation, CampaignIncludeRelation } from '@explorins/pers-shared';
1
+ import type { CampaignClaimRequestDTO, CampaignDTO, CampaignClaimDTO, CampaignTriggerDTO, PaginatedResponseDTO, CampaignClaimIncludeRelation, CampaignIncludeRelation, SortOrder } from '@explorins/pers-shared';
2
2
  import type { CampaignClaimFilters } from '@explorins/pers-sdk/campaign';
3
3
  export type { CampaignClaimFilters } from '@explorins/pers-sdk/campaign';
4
+ /**
5
+ * Options for fetching campaigns
6
+ */
7
+ export interface GetCampaignsOptions {
8
+ /** Filter by tag */
9
+ tag?: string;
10
+ /** Filter by business ID */
11
+ businessId?: string;
12
+ /** Page number (1-indexed) */
13
+ page?: number;
14
+ /** Items per page */
15
+ limit?: number;
16
+ /** Sort field */
17
+ sortBy?: 'name' | 'createdAt' | 'startDate';
18
+ /** Sort order */
19
+ sortOrder?: SortOrder;
20
+ /** Relations to include: 'triggerSources', 'businesses' */
21
+ include?: CampaignIncludeRelation[];
22
+ }
4
23
  export declare const useCampaigns: () => {
5
- getActiveCampaigns: () => Promise<PaginatedResponseDTO<CampaignDTO>>;
24
+ getActiveCampaigns: (options?: GetCampaignsOptions) => Promise<PaginatedResponseDTO<CampaignDTO>>;
6
25
  getCampaignById: (campaignId: string, include?: CampaignIncludeRelation[]) => Promise<CampaignDTO | null>;
7
26
  claimCampaign: (request: CampaignClaimRequestDTO) => Promise<CampaignClaimDTO | null>;
8
27
  getUserClaims: (options?: {
@@ -11,7 +30,9 @@ export declare const useCampaigns: () => {
11
30
  include?: CampaignClaimIncludeRelation[];
12
31
  }) => Promise<PaginatedResponseDTO<CampaignClaimDTO>>;
13
32
  getCampaignTriggers: () => Promise<PaginatedResponseDTO<CampaignTriggerDTO>>;
14
- getAllCampaigns: (active?: boolean) => Promise<PaginatedResponseDTO<CampaignDTO>>;
33
+ getAllCampaigns: (options?: GetCampaignsOptions & {
34
+ active?: boolean;
35
+ }) => Promise<PaginatedResponseDTO<CampaignDTO>>;
15
36
  getCampaignClaims: (filters?: CampaignClaimFilters, include?: CampaignClaimIncludeRelation[]) => Promise<PaginatedResponseDTO<CampaignClaimDTO>>;
16
37
  getCampaignClaimsByUserId: (userId: string, include?: CampaignClaimIncludeRelation[]) => Promise<PaginatedResponseDTO<CampaignClaimDTO>>;
17
38
  getCampaignClaimsByBusinessId: (businessId: string, include?: CampaignClaimIncludeRelation[]) => Promise<PaginatedResponseDTO<CampaignClaimDTO>>;
@@ -1 +1 @@
1
- {"version":3,"file":"useCampaigns.d.ts","sourceRoot":"","sources":["../../src/hooks/useCampaigns.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,uBAAuB,EACvB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGzE,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,eAAO,MAAM,YAAY;8BAG0B,QAAQ,qBAAqB,WAAW,CAAC,CAAC;kCA6B7E,MAAM,YACR,uBAAuB,EAAE,KAClC,QAAQ,WAAW,GAAG,IAAI,CAAC;6BAcoB,uBAAuB,KAAG,QAAQ,gBAAgB,GAAG,IAAI,CAAC;8BAmCzD;QACjD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,4BAA4B,EAAE,CAAC;KAC1C,KAAG,QAAQ,qBAAqB,gBAAgB,CAAC,CAAC;+BAkBD,QAAQ,qBAAqB,kBAAkB,CAAC,CAAC;+BAe/C,OAAO,KAAG,QAAQ,qBAAqB,WAAW,CAAC,CAAC;kCA+B5F,oBAAoB,YACpB,4BAA4B,EAAE,KACvC,QAAQ,qBAAqB,gBAAgB,CAAC,CAAC;wCAsBxC,MAAM,YACJ,4BAA4B,EAAE,KACvC,QAAQ,qBAAqB,gBAAgB,CAAC,CAAC;gDAsBpC,MAAM,YACR,4BAA4B,EAAE,KACvC,QAAQ,qBAAqB,gBAAgB,CAAC,CAAC;sCA4CpC,MAAM,mBACD,MAAM,KACtB,QAAQ,WAAW,CAAC;sCA4BT,MAAM,mBACD,MAAM,KACtB,QAAQ,WAAW,CAAC;;CA+BxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"useCampaigns.d.ts","sourceRoot":"","sources":["../../src/hooks/useCampaigns.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,uBAAuB,EACvB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,EACvB,SAAS,EACV,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGzE,YAAY,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;IAC5C,iBAAiB;IACjB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACrC;AAED,eAAO,MAAM,YAAY;mCA6BX,mBAAmB,KAC5B,QAAQ,qBAAqB,WAAW,CAAC,CAAC;kCAgC/B,MAAM,YACR,uBAAuB,EAAE,KAClC,QAAQ,WAAW,GAAG,IAAI,CAAC;6BAcoB,uBAAuB,KAAG,QAAQ,gBAAgB,GAAG,IAAI,CAAC;8BAmCzD;QACjD,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,4BAA4B,EAAE,CAAC;KAC1C,KAAG,QAAQ,qBAAqB,gBAAgB,CAAC,CAAC;+BAkBD,QAAQ,qBAAqB,kBAAkB,CAAC,CAAC;gCA0CvF,mBAAmB,GAAG;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,KACnD,QAAQ,qBAAqB,WAAW,CAAC,CAAC;kCA+BjC,oBAAoB,YACpB,4BAA4B,EAAE,KACvC,QAAQ,qBAAqB,gBAAgB,CAAC,CAAC;wCAsBxC,MAAM,YACJ,4BAA4B,EAAE,KACvC,QAAQ,qBAAqB,gBAAgB,CAAC,CAAC;gDAsBpC,MAAM,YACR,4BAA4B,EAAE,KACvC,QAAQ,qBAAqB,gBAAgB,CAAC,CAAC;sCA4CpC,MAAM,mBACD,MAAM,KACtB,QAAQ,WAAW,CAAC;sCA4BT,MAAM,mBACD,MAAM,KACtB,QAAQ,WAAW,CAAC;;CA+BxB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC"}
@@ -2,12 +2,40 @@ import { useCallback } from 'react';
2
2
  import { usePersSDK } from '../providers/PersSDKProvider';
3
3
  export const useCampaigns = () => {
4
4
  const { sdk, isInitialized, isAuthenticated } = usePersSDK();
5
- const getActiveCampaigns = useCallback(async () => {
5
+ /**
6
+ * Get active campaigns with optional filters and include relations
7
+ *
8
+ * @param options - Filter, pagination, and include options
9
+ * @returns Promise resolving to paginated active campaigns
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * // Simple: get active campaigns with trigger sources
14
+ * const { data: campaigns } = await getActiveCampaigns({ include: ['triggerSources'] });
15
+ *
16
+ * // With pagination
17
+ * const { data, pagination } = await getActiveCampaigns({
18
+ * page: 1,
19
+ * limit: 10,
20
+ * include: ['triggerSources', 'businesses']
21
+ * });
22
+ *
23
+ * // Filter by tag
24
+ * const { data } = await getActiveCampaigns({ tag: 'summer-promo' });
25
+ *
26
+ * // Filter by business
27
+ * const { data } = await getActiveCampaigns({ businessId: 'business-123' });
28
+ * ```
29
+ */
30
+ const getActiveCampaigns = useCallback(async (options) => {
6
31
  if (!isInitialized || !sdk) {
7
32
  throw new Error('SDK not initialized. Call initialize() first.');
8
33
  }
9
34
  try {
10
- const result = await sdk.campaigns.getCampaigns({ active: true });
35
+ const result = await sdk.campaigns.getCampaigns({
36
+ active: true,
37
+ ...options
38
+ });
11
39
  return result;
12
40
  }
13
41
  catch (error) {
@@ -107,12 +135,38 @@ export const useCampaigns = () => {
107
135
  }
108
136
  }, [sdk, isInitialized]);
109
137
  // Admin methods
110
- const getAllCampaigns = useCallback(async (active) => {
138
+ /**
139
+ * Admin: Get all campaigns with optional filters and include relations
140
+ *
141
+ * @param options - Filter, pagination, and include options (same as getActiveCampaigns but active is optional)
142
+ * @returns Promise resolving to paginated campaigns
143
+ *
144
+ * @example
145
+ * ```typescript
146
+ * // Get all campaigns
147
+ * const { data } = await getAllCampaigns();
148
+ *
149
+ * // Get only active campaigns with trigger sources
150
+ * const { data } = await getAllCampaigns({ active: true, include: ['triggerSources'] });
151
+ *
152
+ * // Get inactive campaigns
153
+ * const { data } = await getAllCampaigns({ active: false });
154
+ *
155
+ * // With pagination and sorting
156
+ * const { data } = await getAllCampaigns({
157
+ * page: 1,
158
+ * limit: 20,
159
+ * sortBy: 'createdAt',
160
+ * sortOrder: 'DESC'
161
+ * });
162
+ * ```
163
+ */
164
+ const getAllCampaigns = useCallback(async (options) => {
111
165
  if (!isInitialized || !sdk) {
112
166
  throw new Error('SDK not initialized. Call initialize() first.');
113
167
  }
114
168
  try {
115
- const result = await sdk.campaigns.getCampaigns({ active });
169
+ const result = await sdk.campaigns.getCampaigns(options);
116
170
  return result;
117
171
  }
118
172
  catch (error) {
@@ -29,7 +29,11 @@ export interface UseTokenBalancesOptions {
29
29
  availableTokens?: TokenDTO[];
30
30
  /** Whether to automatically load balances on mount/auth/token changes */
31
31
  autoLoad?: boolean;
32
- /** Optional refresh interval in milliseconds (0 = disabled) */
32
+ /**
33
+ * Fallback polling interval in milliseconds (0 = disabled)
34
+ * @deprecated Use wallet events instead (refreshOnWalletEvents). Polling kept as fallback only.
35
+ * @default 0
36
+ */
33
37
  refreshInterval?: number;
34
38
  /**
35
39
  * Auto-refresh balances when wallet events are received (Transfer, Approval, etc.)
@@ -120,18 +124,7 @@ export interface UseTokenBalancesResult {
120
124
  * ```
121
125
  *
122
126
  * @example
123
- * **With Auto-Refresh:**
124
- * ```typescript
125
- * const { tokenBalances, isLoading } = useTokenBalances({
126
- * accountAddress: walletAddress!,
127
- * availableTokens,
128
- * autoLoad: true,
129
- * refreshInterval: 30000 // Refresh every 30 seconds
130
- * });
131
- * ```
132
- *
133
- * @example
134
- * **With Wallet Events (Real-time):**
127
+ * **With Wallet Events (Real-time):
135
128
  * ```typescript
136
129
  * // Auto-refresh on Transfer, Approval, and other blockchain events
137
130
  * const { tokenBalances } = useTokenBalances({
@@ -1 +1 @@
1
- {"version":3,"file":"useTokenBalances.d.ts","sourceRoot":"","sources":["../../src/hooks/useTokenBalances.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,0BAA0B,CAAC;AAElF;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,uCAAuC;IACvC,YAAY,EAAE,YAAY,CAAC;IAC3B,8DAA8D;IAC9D,KAAK,EAAE,QAAQ,CAAC;IAChB,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,0DAA0D;IAC1D,aAAa,EAAE,qBAAqB,EAAE,CAAC;IACvC,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,uCAAuC;IACvC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,sFAAsF;IACtF,WAAW,EAAE,OAAO,CAAC;IACrB,0CAA0C;IAC1C,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CAgMzF"}
1
+ {"version":3,"file":"useTokenBalances.d.ts","sourceRoot":"","sources":["../../src/hooks/useTokenBalances.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,0BAA0B,CAAC;AAElF;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,uCAAuC;IACvC,YAAY,EAAE,YAAY,CAAC;IAC3B,8DAA8D;IAC9D,KAAK,EAAE,QAAQ,CAAC;IAChB,8EAA8E;IAC9E,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,0DAA0D;IAC1D,aAAa,EAAE,qBAAqB,EAAE,CAAC;IACvC,6CAA6C;IAC7C,SAAS,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,uCAAuC;IACvC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,sFAAsF;IACtF,WAAW,EAAE,OAAO,CAAC;IACrB,0CAA0C;IAC1C,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuFG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CAqLzF"}
@@ -61,18 +61,7 @@ import { NativeTokenTypes } from '@explorins/pers-shared';
61
61
  * ```
62
62
  *
63
63
  * @example
64
- * **With Auto-Refresh:**
65
- * ```typescript
66
- * const { tokenBalances, isLoading } = useTokenBalances({
67
- * accountAddress: walletAddress!,
68
- * availableTokens,
69
- * autoLoad: true,
70
- * refreshInterval: 30000 // Refresh every 30 seconds
71
- * });
72
- * ```
73
- *
74
- * @example
75
- * **With Wallet Events (Real-time):**
64
+ * **With Wallet Events (Real-time):
76
65
  * ```typescript
77
66
  * // Auto-refresh on Transfer, Approval, and other blockchain events
78
67
  * const { tokenBalances } = useTokenBalances({
@@ -207,28 +196,18 @@ export function useTokenBalances(options) {
207
196
  loadBalances();
208
197
  }
209
198
  }, [autoLoad, isAvailable, availableTokens.length, loadBalances]);
210
- // Event-driven refresh: listen for transaction events instead of polling
199
+ // Deprecated: Fallback polling interval (prefer wallet events)
200
+ // Kept for backward compatibility and edge cases where events might not work
211
201
  useEffect(() => {
212
- if (!sdk || refreshInterval <= 0 || !isAvailable)
202
+ if (refreshInterval <= 0 || !isAvailable)
213
203
  return;
214
- // Subscribe to transaction domain events
215
- const unsubscribe = sdk.events.subscribe((event) => {
216
- if (event.domain === 'transaction' && event.type === 'transaction_completed') {
217
- console.log('[useTokenBalances] Transaction completed, refreshing balances...');
218
- loadBalances();
219
- }
220
- }, { domains: ['transaction'] });
221
- // Also set up a fallback polling interval (much longer than before)
222
- // This handles cases where events might be missed
223
- const fallbackInterval = Math.max(refreshInterval, 60000); // Minimum 1 minute
224
204
  const intervalId = setInterval(() => {
225
205
  loadBalances();
226
- }, fallbackInterval);
206
+ }, refreshInterval);
227
207
  return () => {
228
- unsubscribe();
229
208
  clearInterval(intervalId);
230
209
  };
231
- }, [sdk, refreshInterval, isAvailable, loadBalances]);
210
+ }, [refreshInterval, isAvailable, loadBalances]);
232
211
  // Wallet events refresh: listen for real-time blockchain events
233
212
  // Refreshes on ANY wallet domain event (Transfer, TransferSingle, etc.)
234
213
  // Debouncing prevents excessive API calls during rapid events