@explorins/pers-sdk-react-native 2.2.0 → 2.2.1

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.
package/README.md CHANGED
@@ -1127,11 +1127,19 @@ All documentation is available on GitHub:
1127
1127
  | Guide | Description |
1128
1128
  |-------|-------------|
1129
1129
  | [Quick Setup Guide](https://github.com/eXplorins/pers-sdk/blob/main/packages/pers-sdk-react-native/docs/QUICK_SETUP_GUIDE.md) | Android + Passkey setup in one page |
1130
+ | [**Troubleshooting**](https://github.com/eXplorins/pers-sdk/blob/main/packages/pers-sdk-react-native/docs/TROUBLESHOOTING.md) | **Common issues & solutions** |
1130
1131
  | [Passkey Setup](https://github.com/eXplorins/pers-sdk/blob/main/packages/pers-sdk-react-native/REACT_NATIVE_PASSKEY_SETUP.md) | WebAuthn/Passkey configuration |
1131
1132
  | [Android Compatibility](https://github.com/eXplorins/pers-sdk/blob/main/packages/pers-sdk-react-native/docs/ANDROID_COMPATIBILITY_FAQ.md) | New Architecture troubleshooting |
1132
1133
  | [Auth State Handling](https://github.com/eXplorins/pers-sdk/blob/main/packages/pers-sdk-react-native/docs/AUTH_STATE_HANDLING.md) | Session management patterns |
1133
1134
  | [Changelog](https://github.com/eXplorins/pers-sdk/blob/main/packages/pers-sdk-react-native/CHANGELOG.md) | Version history |
1134
1135
 
1136
+ ### Quick Reference: Common Issues
1137
+
1138
+ - **User is null after restart?** → Session restoration is async. [See solution](./docs/TROUBLESHOOTING.md#1-sdkuser-is-null-after-app-restart)
1139
+ - **Stamp transaction fails?** → Use `tokenBalance.tokenId`, not metadata ID. [See solution](./docs/TROUBLESHOOTING.md#3-stamp-erc721-voucher-transaction-fails)
1140
+ - **Which wallet to use?** → Match by `token.chainId`, never use `wallets[0]`. [See solution](./docs/TROUBLESHOOTING.md#6-which-wallet-to-use-multiple-wallets)
1141
+ - **Passkey "NotConfigured"?** → Device needs Google Play Services. [See solution](./docs/TROUBLESHOOTING.md#2-passkey-notconfigured-error-on-android)
1142
+
1135
1143
  ---
1136
1144
 
1137
1145
  ## Contributing
@@ -30,6 +30,7 @@ export interface GetRedemptionsOptions {
30
30
  }
31
31
  export declare const useRedemptions: () => {
32
32
  getRedemptions: (options?: GetRedemptionsOptions) => Promise<PaginatedResponseDTO<RedemptionDTO>>;
33
+ getRedemptionById: (id: string, include?: RedemptionIncludeRelation[]) => Promise<RedemptionDTO>;
33
34
  getUserRedemptions: (filters?: {
34
35
  redemptionId?: string;
35
36
  status?: ProcessRecordStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"useRedemptions.d.ts","sourceRoot":"","sources":["../../src/hooks/useRedemptions.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0C,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,KAAK,EACV,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,EACnB,kCAAkC,EAClC,iBAAiB,EACjB,oBAAoB,EACpB,+BAA+B,EAC/B,yBAAyB,EACzB,mBAAmB,EACnB,cAAc,EACd,SAAS,EACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,YAAY,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEvG;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,wDAAwD;IACxD,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC1B,uDAAuD;IACvD,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACxB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACtC,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;IAC5C,qBAAqB;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,eAAO,MAAM,cAAc;+BAqD2B,qBAAqB,KAAG,QAAQ,qBAAqB,aAAa,CAAC,CAAC;mCAyC5G;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,mBAAmB,CAAA;KAAE,YACvD,iBAAiB,YACjB,+BAA+B,EAAE,KAC1C,QAAQ,qBAAqB,mBAAmB,CAAC,CAAC;2BAkErC,MAAM,YACV;QAAE,OAAO,CAAC,EAAE,cAAc,CAAC;QAAC,cAAc,CAAC,EAAE,gBAAgB,CAAA;KAAE,KACxE,QAAQ,kCAAkC,CAAC;8BAmHG,QAAQ,qBAAqB,iBAAiB,CAAC,CAAC;qCA9BrF,uBAAuB,YACvB,+BAA+B,EAAE,KAC1C,QAAQ,qBAAqB,mBAAmB,CAAC,CAAC;uCAcO,0BAA0B,KAAG,QAAQ,aAAa,CAAC;qCA4BrD,MAAM,kBAAkB,0BAA0B,KAAG,QAAQ,aAAa,CAAC;2CAcrE,MAAM,KAAG,QAAQ,aAAa,CAAC;;;;CA4BhG,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"useRedemptions.d.ts","sourceRoot":"","sources":["../../src/hooks/useRedemptions.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0C,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAClG,OAAO,KAAK,EACV,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,EACnB,kCAAkC,EAClC,iBAAiB,EACjB,oBAAoB,EACpB,+BAA+B,EAC/B,yBAAyB,EACzB,mBAAmB,EACnB,cAAc,EACd,SAAS,EACV,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAC9E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,YAAY,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEvG;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,oFAAoF;IACpF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,wDAAwD;IACxD,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC1B,uDAAuD;IACvD,OAAO,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACxB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,yBAAyB,EAAE,CAAC;IACtC,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,CAAC;IAC5C,qBAAqB;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,eAAO,MAAM,cAAc;+BAqD2B,qBAAqB,KAAG,QAAQ,qBAAqB,aAAa,CAAC,CAAC;4BAkUlH,MAAM,YACA,yBAAyB,EAAE,KACpC,QAAQ,aAAa,CAAC;mCA3Rb;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,mBAAmB,CAAA;KAAE,YACvD,iBAAiB,YACjB,+BAA+B,EAAE,KAC1C,QAAQ,qBAAqB,mBAAmB,CAAC,CAAC;2BAiGrC,MAAM,YACV;QAAE,OAAO,CAAC,EAAE,cAAc,CAAC;QAAC,cAAc,CAAC,EAAE,gBAAgB,CAAA;KAAE,KACxE,QAAQ,kCAAkC,CAAC;8BAmHG,QAAQ,qBAAqB,iBAAiB,CAAC,CAAC;qCA9BrF,uBAAuB,YACvB,+BAA+B,EAAE,KAC1C,QAAQ,qBAAqB,mBAAmB,CAAC,CAAC;uCAcO,0BAA0B,KAAG,QAAQ,aAAa,CAAC;qCA4BrD,MAAM,kBAAkB,0BAA0B,KAAG,QAAQ,aAAa,CAAC;2CAcrE,MAAM,KAAG,QAAQ,aAAa,CAAC;;;;CAmEhG,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC"}
@@ -112,6 +112,25 @@ export const useRedemptions = () => {
112
112
  /**
113
113
  * Redeem a redemption offer with optional dynamic context
114
114
  *
115
+ * ## When to use `redeem()` vs `createTransaction()`
116
+ *
117
+ * | Use Case | Method | Auto-Signs |
118
+ * |----------|--------|------------|
119
+ * | **Voucher redemption** | `redeem()` | ✅ Yes |
120
+ * | **Reward redemption** | `redeem()` | ✅ Yes |
121
+ * | **Direct token transfer** | `createTransaction()` | ⚠️ Depends |
122
+ * | **POS burn with QR** | `buildPOSBurnRequest()` | ❌ Manual |
123
+ *
124
+ * **Use `redeem()` for voucher/reward redemptions.** It automatically:
125
+ * 1. Creates redemption record
126
+ * 2. Triggers passkey/biometric prompt
127
+ * 3. Signs the transaction
128
+ * 4. Submits to blockchain
129
+ * 5. Returns result with `transactionHash`
130
+ *
131
+ * **No admin approval required** - The "PENDING" state is brief (seconds).
132
+ * The user's passkey signature IS the approval.
133
+ *
115
134
  * Supports dynamic context for personalized NFT generation when the redemption
116
135
  * issues ERC721 tokens. Context can include validity dates, AI prompt placeholders,
117
136
  * and custom metadata.
@@ -120,11 +139,21 @@ export const useRedemptions = () => {
120
139
  * @param options - Optional settings
121
140
  * @param options.context - Dynamic context for NFT personalization (validity dates, AI prompts)
122
141
  * @param options.onStatusUpdate - Callback for transaction signing status updates
123
- * @returns Promise resolving to redemption result
142
+ * @returns Promise resolving to redemption result with `transactionHash` on success
124
143
  *
125
- * @example Basic redemption
144
+ * @example Basic redemption (most common)
126
145
  * ```typescript
127
- * const result = await redeem('redemption-123');
146
+ * const { redeem } = useRedemptions();
147
+ *
148
+ * const result = await redeem('redemption-123', {
149
+ * onStatusUpdate: (status, message) => {
150
+ * console.log(`Status: ${status} - ${message}`);
151
+ * }
152
+ * });
153
+ *
154
+ * if (result.transactionHash) {
155
+ * console.log('Redemption complete!', result.transactionHash);
156
+ * }
128
157
  * ```
129
158
  *
130
159
  * @example Redemption with dynamic context (personalized NFT)
@@ -155,6 +184,8 @@ export const useRedemptions = () => {
155
184
  * }
156
185
  * });
157
186
  * ```
187
+ *
188
+ * @see {@link useTransactions.createTransaction | createTransaction()} for direct transfers without redemption flow
158
189
  */
159
190
  const redeem = useCallback(async (redemptionId, options) => {
160
191
  if (!isInitialized || !sdk) {
@@ -304,8 +335,43 @@ export const useRedemptions = () => {
304
335
  throw error;
305
336
  }
306
337
  }, [sdk, isInitialized]);
338
+ /**
339
+ * Get a specific redemption by ID
340
+ *
341
+ * Retrieves detailed information about a specific redemption offer.
342
+ *
343
+ * @param id - Redemption UUID
344
+ * @param include - Optional relations to include: 'redeemCount'
345
+ * @returns Promise resolving to the redemption
346
+ *
347
+ * @example Basic usage
348
+ * ```typescript
349
+ * const redemption = await getRedemptionById('7baf4d39-0bd6-45ca-9c66-8c0d655767c3');
350
+ * console.log(redemption.name);
351
+ * ```
352
+ *
353
+ * @example With redeem count
354
+ * ```typescript
355
+ * const redemption = await getRedemptionById('redemption-123', ['redeemCount']);
356
+ * console.log(`${redemption.name} has been redeemed ${redemption.redeemCount} times`);
357
+ * ```
358
+ */
359
+ const getRedemptionById = useCallback(async (id, include) => {
360
+ if (!isInitialized || !sdk) {
361
+ throw new Error('SDK not initialized. Call initialize() first.');
362
+ }
363
+ try {
364
+ const result = await sdk.redemptions.getRedemptionById(id, include);
365
+ return result;
366
+ }
367
+ catch (error) {
368
+ console.error('Failed to fetch redemption by ID:', error);
369
+ throw error;
370
+ }
371
+ }, [sdk, isInitialized]);
307
372
  return {
308
373
  getRedemptions,
374
+ getRedemptionById,
309
375
  getUserRedemptions,
310
376
  redeem,
311
377
  getRedemptionTypes,
@@ -6,9 +6,42 @@ import type { TokenBalance } from '@explorins/pers-sdk/web3';
6
6
  * This composite type combines blockchain balance data with token metadata,
7
7
  * making it easy to display token information in UI components without
8
8
  * needing to join data from multiple sources.
9
+ *
10
+ * ## CRITICAL: Token ID for Transactions
11
+ *
12
+ * For ERC721 (stamps) and ERC1155 (rewards), use `tokenBalance.tokenId` as the
13
+ * `contractTokenId` when creating transactions. This is the **on-chain token ID**
14
+ * assigned by the blockchain, NOT the metadata definition ID.
15
+ *
16
+ * | Token Type | tokenId meaning | Example |
17
+ * |------------|-----------------|---------|
18
+ * | ERC20 | `null` or `""` | N/A (fungible points) |
19
+ * | ERC721 | NFT instance ID | `"46"` (on-chain ID) |
20
+ * | ERC1155 | Token type ID | `"16"` (semi-fungible type) |
21
+ *
22
+ * @example Correct usage for token burn transaction
23
+ * ```typescript
24
+ * const stampBalance = tokenBalances.find(b => b.token.type === 'ERC721');
25
+ *
26
+ * const request = buildPOSBurnRequest({
27
+ * amount: 1,
28
+ * contractAddress: stampBalance.token.contractAddress,
29
+ * contractTokenId: stampBalance.tokenBalance.tokenId, // ✅ Correct
30
+ * chainId: stampBalance.token.chainId,
31
+ * userId: userId,
32
+ * businessId: businessId
33
+ * });
34
+ * ```
35
+ *
36
+ * @see {@link https://docs.explorins.com/pers-sdk/troubleshooting#stamp-voucher-transaction-fails | Troubleshooting: Stamp Transaction Fails}
9
37
  */
10
38
  export interface TokenBalanceWithToken {
11
- /** The balance data from blockchain */
39
+ /**
40
+ * The balance data from blockchain
41
+ *
42
+ * **Important:** For NFT operations, use `tokenBalance.tokenId` as the `contractTokenId`
43
+ * in transaction requests. This is the actual on-chain ID, not the metadata definition.
44
+ */
12
45
  tokenBalance: TokenBalance;
13
46
  /** The token definition (contract, symbol, metadata, etc.) */
14
47
  token: TokenDTO;
@@ -1 +1 @@
1
- {"version":3,"file":"useTokenBalances.d.ts","sourceRoot":"","sources":["../../src/hooks/useTokenBalances.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACtE,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8FG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CAqLzF"}
1
+ {"version":3,"file":"useTokenBalances.d.ts","sourceRoot":"","sources":["../../src/hooks/useTokenBalances.ts"],"names":[],"mappings":"AAGA,OAAO,EAAoB,KAAK,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAuB,MAAM,0BAA0B,CAAC;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8FG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,sBAAsB,CAqLzF"}
@@ -1,4 +1,4 @@
1
- import type { TokenDTO, PaginatedResponseDTO } from '@explorins/pers-sdk';
1
+ import type { TokenDTO, TokenMetadataDTO, PaginatedResponseDTO } from '@explorins/pers-sdk';
2
2
  /**
3
3
  * React hook for token operations in the PERS SDK
4
4
  *
@@ -34,6 +34,9 @@ export declare const useTokens: () => {
34
34
  getTokenTypes: () => Promise<any>;
35
35
  getStatusTokens: () => Promise<PaginatedResponseDTO<TokenDTO>>;
36
36
  getTokenByContract: (contractAddress: string, contractTokenId?: string | null) => Promise<TokenDTO>;
37
+ getTokenMetadata: (options?: any) => Promise<PaginatedResponseDTO<TokenMetadataDTO>>;
38
+ getRewards: (options?: any) => Promise<PaginatedResponseDTO<TokenMetadataDTO>>;
39
+ getStamps: (options?: any) => Promise<PaginatedResponseDTO<TokenMetadataDTO>>;
37
40
  isAvailable: boolean;
38
41
  };
39
42
  export type TokenHook = ReturnType<typeof useTokens>;
@@ -1 +1 @@
1
- {"version":3,"file":"useTokens.d.ts","sourceRoot":"","sources":["../../src/hooks/useTokens.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,SAAS;qBAoBoB,QAAQ,qBAAqB,QAAQ,CAAC,CAAC;gCA2B5B,QAAQ,QAAQ,CAAC;2BA2BtB,QAAQ,qBAAqB,QAAQ,CAAC,CAAC;yBA2BzC,QAAQ,GAAG,CAAC;2BA2BV,QAAQ,qBAAqB,QAAQ,CAAC,CAAC;0CA6BtB,MAAM,oBAAoB,MAAM,GAAG,IAAI,KAAG,QAAQ,QAAQ,CAAC;;CAuB3H,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC"}
1
+ {"version":3,"file":"useTokens.d.ts","sourceRoot":"","sources":["../../src/hooks/useTokens.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,gBAAgB,EAAE,oBAAoB,EAAyE,MAAM,qBAAqB,CAAC;AAEnK;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,SAAS;qBAoBoB,QAAQ,qBAAqB,QAAQ,CAAC,CAAC;gCA2B5B,QAAQ,QAAQ,CAAC;2BA2BtB,QAAQ,qBAAqB,QAAQ,CAAC,CAAC;yBA2BzC,QAAQ,GAAG,CAAC;2BA2BV,QAAQ,qBAAqB,QAAQ,CAAC,CAAC;0CA6BtB,MAAM,oBAAoB,MAAM,GAAG,IAAI,KAAG,QAAQ,QAAQ,CAAC;yCAkCvC,QAAQ,qBAAqB,gBAAgB,CAAC,CAAC;mCA+B3D,QAAQ,qBAAqB,gBAAgB,CAAC,CAAC;kCA+BjD,QAAQ,qBAAqB,gBAAgB,CAAC,CAAC;;CA0BrH,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC"}
@@ -191,6 +191,99 @@ export const useTokens = () => {
191
191
  throw error;
192
192
  }
193
193
  }, [sdk, isInitialized]);
194
+ /**
195
+ * Get all token metadata with filtering and pagination
196
+ *
197
+ * Retrieves token metadata (rewards/stamps) with server-side filtering.
198
+ * Use tokenType: 'ERC1155' for rewards, 'ERC721' for stamps.
199
+ *
200
+ * @param options - Filter and pagination options
201
+ * @returns Promise resolving to paginated token metadata
202
+ * @throws Error if SDK is not initialized
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * const { getTokenMetadata } = useTokens();
207
+ * const rewards = await getTokenMetadata({
208
+ * tokenType: 'ERC1155',
209
+ * active: true,
210
+ * limit: 10
211
+ * });
212
+ * ```
213
+ */
214
+ const getTokenMetadata = useCallback(async (options) => {
215
+ if (!isInitialized || !sdk) {
216
+ throw new Error('SDK not initialized. Call initialize() first.');
217
+ }
218
+ try {
219
+ const result = await sdk.tokens.getTokenMetadata(options);
220
+ return result;
221
+ }
222
+ catch (error) {
223
+ console.error('Failed to fetch token metadata:', error);
224
+ throw error;
225
+ }
226
+ }, [sdk, isInitialized]);
227
+ /**
228
+ * Get rewards (ERC1155 token metadata) with filtering and pagination
229
+ *
230
+ * Convenience method for fetching reward metadata. Rewards are ERC1155 tokens
231
+ * that represent collectible items, vouchers, or other redeemable rewards.
232
+ *
233
+ * @param options - Filter and pagination options
234
+ * @returns Promise resolving to paginated reward metadata
235
+ * @throws Error if SDK is not initialized
236
+ *
237
+ * @example
238
+ * ```typescript
239
+ * const { getRewards } = useTokens();
240
+ * const rewards = await getRewards({ active: true, limit: 10 });
241
+ * console.log(`Found ${rewards.pagination.total} rewards`);
242
+ * ```
243
+ */
244
+ const getRewards = useCallback(async (options) => {
245
+ if (!isInitialized || !sdk) {
246
+ throw new Error('SDK not initialized. Call initialize() first.');
247
+ }
248
+ try {
249
+ const result = await sdk.tokens.getRewards(options);
250
+ return result;
251
+ }
252
+ catch (error) {
253
+ console.error('Failed to fetch rewards:', error);
254
+ throw error;
255
+ }
256
+ }, [sdk, isInitialized]);
257
+ /**
258
+ * Get stamps (ERC721 token metadata) with filtering and pagination
259
+ *
260
+ * Convenience method for fetching stamp metadata. Stamps are ERC721 tokens
261
+ * that represent achievements, badges, or collectible status markers.
262
+ *
263
+ * @param options - Filter and pagination options
264
+ * @returns Promise resolving to paginated stamp metadata
265
+ * @throws Error if SDK is not initialized
266
+ *
267
+ * @example
268
+ * ```typescript
269
+ * const { getStamps } = useTokens();
270
+ * const stamps = await getStamps({ active: true, limit: 10 });
271
+ * console.log(`Found ${stamps.pagination.total} stamps`);
272
+ * ```
273
+ */
274
+ const getStamps = useCallback(async (options) => {
275
+ if (!isInitialized || !sdk) {
276
+ throw new Error('SDK not initialized. Call initialize() first.');
277
+ }
278
+ try {
279
+ const result = await sdk.tokens.getStamps(options);
280
+ return result;
281
+ }
282
+ catch (error) {
283
+ console.error('Failed to fetch stamps:', error);
284
+ throw error;
285
+ }
286
+ }, [sdk, isInitialized]);
194
287
  return {
195
288
  getTokens,
196
289
  getActiveCreditToken,
@@ -198,6 +291,9 @@ export const useTokens = () => {
198
291
  getTokenTypes,
199
292
  getStatusTokens,
200
293
  getTokenByContract,
294
+ getTokenMetadata,
295
+ getRewards,
296
+ getStamps,
201
297
  isAvailable: isInitialized && !!sdk?.tokens,
202
298
  };
203
299
  };