@explorins/pers-sdk-react-native 1.5.17 → 1.5.20

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 (40) hide show
  1. package/README.md +336 -234
  2. package/dist/hooks/index.d.ts +1 -1
  3. package/dist/hooks/index.d.ts.map +1 -1
  4. package/dist/hooks/useAuth.d.ts +1 -1
  5. package/dist/hooks/useAuth.d.ts.map +1 -1
  6. package/dist/hooks/useAuth.js +7 -7
  7. package/dist/hooks/useRedemptions.d.ts.map +1 -1
  8. package/dist/hooks/useRedemptions.js +4 -4
  9. package/dist/hooks/useTenants.d.ts.map +1 -1
  10. package/dist/hooks/useTenants.js +0 -1
  11. package/dist/hooks/useTransactionSigner.d.ts +186 -53
  12. package/dist/hooks/useTransactionSigner.d.ts.map +1 -1
  13. package/dist/hooks/useTransactionSigner.js +285 -102
  14. package/dist/hooks/useTransactions.d.ts +2 -2
  15. package/dist/hooks/useTransactions.d.ts.map +1 -1
  16. package/dist/hooks/useTransactions.js +38 -9
  17. package/dist/index.d.ts +211 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +21154 -18543
  20. package/dist/index.js.map +1 -1
  21. package/dist/providers/PersSDKProvider.d.ts +2 -8
  22. package/dist/providers/PersSDKProvider.d.ts.map +1 -1
  23. package/dist/providers/PersSDKProvider.js +16 -31
  24. package/dist/providers/react-native-auth-provider.d.ts +25 -36
  25. package/dist/providers/react-native-auth-provider.d.ts.map +1 -1
  26. package/dist/providers/react-native-auth-provider.js +36 -146
  27. package/dist/storage/async-storage-token-storage.d.ts +22 -0
  28. package/dist/storage/async-storage-token-storage.d.ts.map +1 -0
  29. package/dist/storage/async-storage-token-storage.js +113 -0
  30. package/package.json +16 -11
  31. package/src/hooks/index.ts +1 -1
  32. package/src/hooks/useAuth.ts +7 -7
  33. package/src/hooks/useRedemptions.ts +5 -7
  34. package/src/hooks/useTenants.ts +0 -1
  35. package/src/hooks/useTransactionSigner.ts +322 -166
  36. package/src/hooks/useTransactions.ts +44 -11
  37. package/src/index.ts +243 -7
  38. package/src/providers/PersSDKProvider.tsx +21 -40
  39. package/src/providers/react-native-auth-provider.ts +59 -176
  40. package/src/storage/async-storage-token-storage.ts +133 -0
@@ -14,5 +14,5 @@ export { useFiles } from './useFiles';
14
14
  export { useAnalytics } from './useAnalytics';
15
15
  export { useDonations } from './useDonations';
16
16
  export type { RawUserData } from './useAuth';
17
- export type { TransactionSignerHook, TransactionSigningResult } from './useTransactionSigner';
17
+ export type { TransactionSignerHook, SubmissionResult, AuthenticatedUser, TransactionSigningResult } from './useTransactionSigner';
18
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,YAAY,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -51,7 +51,7 @@ export declare const useAuth: () => {
51
51
  checkIsAuthenticated: () => Promise<boolean>;
52
52
  refreshTokens: (refreshToken?: string) => Promise<import("@explorins/pers-shared").SessionAuthResponseDTO>;
53
53
  clearAuth: () => Promise<void>;
54
- hasValidAuth: () => boolean;
54
+ hasValidAuth: () => Promise<boolean>;
55
55
  };
56
56
  export type AuthHook = ReturnType<typeof useAuth>;
57
57
  //# sourceMappingURL=useAuth.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useAuth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAG/F,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,OAAO;;;;;sBA2ByB,MAAM,aAAY,MAAM,GAAG,OAAO,KAAY,QAAQ,6BAA6B,CAAC;oCA8CtE,WAAW,KAAG,QAAQ,IAAI,CAAC;kBA+C/C,QAAQ,IAAI,CAAC;;0BA8BL,QAAQ,OAAO,CAAC;gCAmBV,QAAQ,OAAO,CAAC;mCAqBX,MAAM;qBAmBtB,QAAQ,IAAI,CAAC;wBAoBhB,OAAO;CAyB7C,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"useAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useAuth.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,6BAA6B,EAAE,MAAM,wBAAwB,CAAC;AAG/F,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,eAAO,MAAM,OAAO;;;;;sBA2ByB,MAAM,aAAY,MAAM,GAAG,OAAO,KAAY,QAAQ,6BAA6B,CAAC;oCA8CtE,WAAW,KAAG,QAAQ,IAAI,CAAC;kBA+C/C,QAAQ,IAAI,CAAC;;0BA8BL,QAAQ,OAAO,CAAC;gCAmBV,QAAQ,OAAO,CAAC;mCAqBX,MAAM;qBAmBtB,QAAQ,IAAI,CAAC;wBAoBV,QAAQ,OAAO,CAAC;CAyB5D,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC"}
@@ -61,7 +61,7 @@ export const useAuth = () => {
61
61
  try {
62
62
  console.log(`Logging in as ${userType}...`);
63
63
  // Set token in auth provider
64
- await authProvider.setToken(jwtToken);
64
+ await authProvider.setAccessToken(jwtToken);
65
65
  // Perform login using the manager
66
66
  const result = await sdk.auth.loginWithToken(jwtToken, userType);
67
67
  const userData = result.user || result.admin;
@@ -100,11 +100,11 @@ export const useAuth = () => {
100
100
  }
101
101
  try {
102
102
  console.log('Logging in with raw user data...');
103
- // Use the raw data login from the API client directly
104
- const result = await sdk.api().loginUserWithRawData(rawUserData);
103
+ // Use the raw data login from the auth manager
104
+ const result = await sdk.auth.loginWithRawData(rawUserData);
105
105
  // Set token from result
106
106
  if (result.accessToken) {
107
- await authProvider.setToken(result.accessToken);
107
+ await authProvider.setAccessToken(result.accessToken);
108
108
  }
109
109
  const userData = result.user;
110
110
  if (userData) {
@@ -139,7 +139,7 @@ export const useAuth = () => {
139
139
  try {
140
140
  console.log('Logging out...');
141
141
  if (authProvider) {
142
- await authProvider.setToken(null);
142
+ await authProvider.clearTokens();
143
143
  }
144
144
  setAuthenticationState(null, null, false);
145
145
  console.log('Logout successful');
@@ -237,11 +237,11 @@ export const useAuth = () => {
237
237
  * console.log('Auth is valid:', isValid);
238
238
  * ```
239
239
  */
240
- const hasValidAuth = useCallback(() => {
240
+ const hasValidAuth = useCallback(async () => {
241
241
  if (!sdk) {
242
242
  return false;
243
243
  }
244
- return sdk.auth.hasValidAuth();
244
+ return await sdk.auth.hasValidAuth();
245
245
  }, [sdk]);
246
246
  return {
247
247
  // State
@@ -1 +1 @@
1
- {"version":3,"file":"useRedemptions.d.ts","sourceRoot":"","sources":["../../src/hooks/useRedemptions.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,EACnB,kCAAkC,EAClC,iBAAiB,EAElB,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,cAAc;gCAI0B,QAAQ,aAAa,EAAE,CAAC;8BAe1B,QAAQ,mBAAmB,EAAE,CAAC;gCAmB1B,MAAM,KAAG,QAAQ,kCAAkC,CAAC;8BAsFxD,QAAQ,iBAAiB,EAAE,CAAC;uCA/BjB,0BAA0B,KAAG,QAAQ,aAAa,CAAC;iCAgBzD,OAAO,KAAG,QAAQ,aAAa,EAAE,CAAC;qCA8B9B,MAAM,kBAAkB,0BAA0B,KAAG,QAAQ,aAAa,CAAC;2CAerE,MAAM,KAAG,QAAQ,aAAa,CAAC;;CA0BhG,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":"AAGA,OAAO,KAAK,EACV,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,EACnB,kCAAkC,EAClC,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,cAAc;gCAI0B,QAAQ,aAAa,EAAE,CAAC;8BAe1B,QAAQ,mBAAmB,EAAE,CAAC;gCAmB1B,MAAM,KAAG,QAAQ,kCAAkC,CAAC;8BAsFxD,QAAQ,iBAAiB,EAAE,CAAC;uCA/BjB,0BAA0B,KAAG,QAAQ,aAAa,CAAC;iCAgBzD,OAAO,KAAG,QAAQ,aAAa,EAAE,CAAC;qCA8B9B,MAAM,kBAAkB,0BAA0B,KAAG,QAAQ,aAAa,CAAC;2CAerE,MAAM,KAAG,QAAQ,aAAa,CAAC;;CA0BhG,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC"}
@@ -3,7 +3,7 @@ import { usePersSDK } from '../providers/PersSDKProvider';
3
3
  import { useTransactionSigner } from './useTransactionSigner';
4
4
  export const useRedemptions = () => {
5
5
  const { sdk, isInitialized, isAuthenticated } = usePersSDK();
6
- const { signTransaction, isSignerAvailable } = useTransactionSigner();
6
+ const { signAndSubmitTransactionWithJWT, isSignerAvailable } = useTransactionSigner();
7
7
  const getActiveRedemptions = useCallback(async () => {
8
8
  if (!isInitialized || !sdk) {
9
9
  throw new Error('SDK not initialized. Call initialize() first.');
@@ -52,7 +52,7 @@ export const useRedemptions = () => {
52
52
  if (txToken && isSignerAvailable) {
53
53
  console.log('Transaction requires blockchain signing, processing with WebAuthn signer...');
54
54
  try {
55
- const signingResult = await signTransaction(txToken);
55
+ const signingResult = await signAndSubmitTransactionWithJWT(txToken);
56
56
  console.log('Blockchain signing result:', signingResult);
57
57
  if (signingResult.success) {
58
58
  console.log('Transaction signed successfully:', signingResult.transactionHash);
@@ -60,7 +60,7 @@ export const useRedemptions = () => {
60
60
  return {
61
61
  ...result,
62
62
  transactionHash: signingResult.transactionHash,
63
- signature: signingResult.signature,
63
+ // signature: signingResult.signature,
64
64
  isSigned: true,
65
65
  signedAt: new Date().toISOString()
66
66
  };
@@ -86,7 +86,7 @@ export const useRedemptions = () => {
86
86
  console.error('Failed to redeem redemption:', error);
87
87
  throw error;
88
88
  }
89
- }, [sdk, isInitialized, isAuthenticated, signTransaction, isSignerAvailable]);
89
+ }, [sdk, isInitialized, isAuthenticated, signAndSubmitTransactionWithJWT, isSignerAvailable]);
90
90
  // Admin methods
91
91
  const createRedemption = useCallback(async (redemptionData) => {
92
92
  if (!isInitialized || !sdk) {
@@ -1 +1 @@
1
- {"version":3,"file":"useTenants.d.ts","sourceRoot":"","sources":["../../src/hooks/useTenants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAE/F,eAAO,MAAM,UAAU;yBAGuB,QAAQ,eAAe,CAAC;2BAetB,QAAQ,qBAAqB,CAAC;yBAehC,QAAQ,MAAM,CAAC;qBAenB,QAAQ,QAAQ,EAAE,CAAC;;CAsB5D,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC"}
1
+ {"version":3,"file":"useTenants.d.ts","sourceRoot":"","sources":["../../src/hooks/useTenants.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAE/F,eAAO,MAAM,UAAU;yBAGuB,QAAQ,eAAe,CAAC;2BActB,QAAQ,qBAAqB,CAAC;yBAehC,QAAQ,MAAM,CAAC;qBAenB,QAAQ,QAAQ,EAAE,CAAC;;CAsB5D,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC"}
@@ -8,7 +8,6 @@ export const useTenants = () => {
8
8
  }
9
9
  try {
10
10
  const result = await sdk.tenants.getTenantInfo();
11
- console.log('Tenant info fetched successfully:', result);
12
11
  return result;
13
12
  }
14
13
  catch (error) {
@@ -1,77 +1,210 @@
1
- interface AuthenticationResult {
2
- user: SignerAuthenticatedUser;
3
- isExpired: boolean;
4
- }
5
- interface SignerAuthenticatedUser {
6
- identifier: string;
7
- signerAuthToken: string;
8
- persAccessToken: string;
9
- }
10
- interface TransactionSigningResult {
11
- success: boolean;
12
- transactionHash?: string;
13
- signature?: string;
14
- error?: string;
1
+ type SubmissionResult = import('@explorins/pers-signer/react-native').SubmissionResult;
2
+ type AuthenticatedUser = import('@explorins/pers-signer/react-native').AuthenticatedUser;
3
+ type TransactionSigningResult = import('@explorins/pers-signer/react-native').TransactionSigningResult;
4
+ /**
5
+ * Return interface for the useTransactionSigner hook
6
+ *
7
+ * Provides secure transaction signing capabilities for EVM blockchain interactions
8
+ * and error handling for React Native applications.
9
+ *
10
+ * @interface TransactionSignerHook
11
+ * @property {Function} signAndSubmitTransactionWithJWT - Main method to sign and submit transactions
12
+ * @property {boolean} isSignerInitialized - Whether the signer SDK has been initialized
13
+ * @property {boolean} isSignerAvailable - Whether signing functionality is fully available
14
+ */
15
+ interface TransactionSignerHook {
16
+ signAndSubmitTransactionWithJWT: (jwt: string) => Promise<SubmissionResult>;
17
+ isSignerInitialized: boolean;
18
+ isSignerAvailable: boolean;
15
19
  }
16
20
  /**
17
21
  * React Native hook for blockchain transaction signing using PERS Signer SDK
18
22
  *
19
- * Simplified interface matching web frontend - uses high-level SDK methods
20
- * that handle all complexity internally (tenant setup, project keys, etc.).
23
+ * This hook provides a complete blockchain transaction signing solution for React Native
24
+ * applications, integrating with the PERS ecosystem for tourism loyalty and reward systems.
25
+ * It automatically handles WebAuthn authentication, transaction preparation, signing, and
26
+ * blockchain submission in a single convenient interface.
27
+ *
28
+ * **Features:**
29
+ * - Automatic WebAuthn provider initialization for React Native
30
+ * - 5-minute authentication caching to reduce repeated logins
31
+ * - Complete transaction lifecycle management (sign + submit)
32
+ * - Comprehensive error handling with detailed error messages
33
+ * - Real-time status monitoring for UI feedback
34
+ * - Automatic retry logic for network failures
35
+ *
36
+ * **Underlying SDK Methods:**
37
+ * The hook uses the PERS Signer SDK which provides 5 core methods:
38
+ * 1. `loginUser(jwtToken)` - Authenticate user with 5-minute caching
39
+ * 2. `signTransaction(signingData, jwtToken)` - Sign transactions with auto-login
40
+ * 3. `submitTransaction(signingResult, jwtToken)` - Submit signed transactions
41
+ * 4. `signPersTransaction(jwtToken)` - Legacy one-liner for backward compatibility
42
+ * 5. `signAndSubmitPersTransaction(jwtToken)` - Complete sign + submit flow (used by this hook)
43
+ *
44
+ * **Security:**
45
+ * - WebAuthn-based secure authentication (no passwords stored)
46
+ * - JWT token validation and expiration checking
47
+ * - Secure transaction signing using device biometrics/PIN
48
+ * - No sensitive data stored locally
49
+ *
50
+ * @returns {TransactionSignerHook} Hook interface with signing methods and status
21
51
  *
22
52
  * @example
53
+ * **Basic Usage:**
23
54
  * ```typescript
24
- * function TransactionComponent() {
25
- * const { signTransactionWithJWT, isSignerAvailable } = useTransactionSigner();
55
+ * import { useTransactionSigner } from '@explorins/pers-sdk-react-native';
56
+ *
57
+ * function TransactionScreen() {
58
+ * const {
59
+ * signAndSubmitTransactionWithJWT,
60
+ * isSignerAvailable,
61
+ * isSignerInitialized
62
+ * } = useTransactionSigner();
26
63
  *
27
64
  * const handleSign = async (jwtFromRedemption: string) => {
65
+ * if (!isSignerAvailable) {
66
+ * console.error('Signer not available');
67
+ * return;
68
+ * }
69
+ *
28
70
  * try {
29
- * const result = await signTransactionWithJWT(jwtFromRedemption);
71
+ * const result = await signAndSubmitTransactionWithJWT(jwtFromRedemption);
30
72
  * if (result.success) {
31
- * console.log('Transaction signed:', result.transactionHash);
73
+ * console.log('Transaction completed:', result.transactionHash);
74
+ * // Handle successful transaction
75
+ * if (result.shouldRedirect && result.redirectUrl) {
76
+ * // Navigate to success page or external URL
77
+ * }
32
78
  * }
33
79
  * } catch (error) {
34
- * console.error('Signing failed:', error);
80
+ * console.error('Transaction failed:', error.message);
81
+ * // Handle error (show user-friendly message)
35
82
  * }
36
83
  * };
37
84
  *
38
85
  * return (
39
- * <button onClick={handleSign} disabled={!isSignerAvailable}>
40
- * Sign Transaction
41
- * </button>
86
+ * <View style={styles.container}>
87
+ * <TouchableOpacity
88
+ * onPress={() => handleSign(redeemJWT)}
89
+ * disabled={!isSignerAvailable}
90
+ * style={[styles.button, !isSignerAvailable && styles.disabled]}
91
+ * >
92
+ * <Text style={styles.buttonText}>
93
+ * {isSignerInitialized ? 'Sign Transaction' : 'Initializing...'}
94
+ * </Text>
95
+ * </TouchableOpacity>
96
+ * </View>
42
97
  * );
43
98
  * }
44
99
  * ```
100
+ *
101
+ * @example
102
+ * **Advanced Usage with Error Handling:**
103
+ * ```typescript
104
+ * function AdvancedTransactionComponent() {
105
+ * const [isLoading, setIsLoading] = useState(false);
106
+ * const [error, setError] = useState<string | null>(null);
107
+ * const { signAndSubmitTransactionWithJWT, isSignerAvailable } = useTransactionSigner();
108
+ *
109
+ * const handleTransaction = async (jwt: string) => {
110
+ * setIsLoading(true);
111
+ * setError(null);
112
+ *
113
+ * try {
114
+ * const result = await signAndSubmitTransactionWithJWT(jwt);
115
+ *
116
+ * if (result.success) {
117
+ * // Success handling
118
+ * Alert.alert(
119
+ * 'Success',
120
+ * `Transaction completed!\nHash: ${result.transactionHash}`
121
+ * );
122
+ * } else {
123
+ * throw new Error(result.error || 'Transaction failed');
124
+ * }
125
+ * } catch (err) {
126
+ * const errorMessage = err instanceof Error ? err.message : 'Unknown error';
127
+ * setError(errorMessage);
128
+ *
129
+ * // Different error handling based on error type
130
+ * if (errorMessage.includes('expired')) {
131
+ * Alert.alert('Session Expired', 'Please log in again');
132
+ * } else if (errorMessage.includes('network')) {
133
+ * Alert.alert('Network Error', 'Please check your connection');
134
+ * } else {
135
+ * Alert.alert('Transaction Failed', errorMessage);
136
+ * }
137
+ * } finally {
138
+ * setIsLoading(false);
139
+ * }
140
+ * };
141
+ *
142
+ * return (
143
+ * <View>
144
+ * {error && (
145
+ * <Text style={styles.errorText}>{error}</Text>
146
+ * )}
147
+ * <TouchableOpacity
148
+ * onPress={() => handleTransaction(jwtToken)}
149
+ * disabled={!isSignerAvailable || isLoading}
150
+ * >
151
+ * <Text>
152
+ * {isLoading ? 'Processing...' : 'Sign & Submit Transaction'}
153
+ * </Text>
154
+ * </TouchableOpacity>
155
+ * </View>
156
+ * );
157
+ * }
158
+ * ```
159
+ *
160
+ * @example
161
+ * **Integration with PERS SDK:**
162
+ * ```typescript
163
+ * import { usePersSDK } from '@explorins/pers-sdk-react-native';
164
+ * import { useTransactionSigner } from '@explorins/pers-sdk-react-native';
165
+ *
166
+ * function RedemptionFlow() {
167
+ * const { user, redeemTokens } = usePersSDK();
168
+ * const { signAndSubmitTransactionWithJWT } = useTransactionSigner();
169
+ *
170
+ * const handleRedemption = async (tokenAmount: number) => {
171
+ * try {
172
+ * // Step 1: Create redemption with PERS SDK
173
+ * const redemption = await redeemTokens({
174
+ * tokenAmount,
175
+ * destinationAddress: user?.walletAddress
176
+ * });
177
+ *
178
+ * // Step 2: Sign and submit transaction
179
+ * const txResult = await signAndSubmitTransactionWithJWT(redemption.jwtToken);
180
+ *
181
+ * if (txResult.success) {
182
+ * console.log('Redemption completed:', txResult.transactionHash);
183
+ * }
184
+ * } catch (error) {
185
+ * console.error('Redemption failed:', error);
186
+ * }
187
+ * };
188
+ * }
189
+ * ```
190
+ *
191
+ * @see {@link SubmissionResult} for transaction result structure
192
+ * @see {@link TransactionSigningResult} for signing result details
193
+ * @see {@link AuthenticatedUser} for user authentication data
194
+ *
195
+ * @since 1.5.0
45
196
  */
46
- export declare const useTransactionSigner: () => {
47
- /**
48
- * Sign a blockchain transaction using JWT token (recommended method)
49
- */
50
- signTransactionWithJWT: (jwt: string) => Promise<TransactionSigningResult>;
51
- /**
52
- * Legacy transaction signing method
53
- * @deprecated Use signTransactionWithJWT instead
54
- */
55
- signTransaction: (jwt: string) => Promise<TransactionSigningResult>;
56
- /**
57
- * Manual user authentication (for advanced use cases)
58
- */
59
- authenticateUser: (identifier: string) => Promise<SignerAuthenticatedUser | null>;
60
- /**
61
- * Whether the transaction signer has been initialized
62
- */
63
- isSignerInitialized: boolean;
64
- /**
65
- * Whether transaction signing is available (all requirements met)
66
- */
67
- isSignerAvailable: boolean;
68
- };
69
- /**
70
- * Type definition for the transaction signer hook
71
- */
72
- export type TransactionSignerHook = ReturnType<typeof useTransactionSigner>;
197
+ export declare const useTransactionSigner: () => TransactionSignerHook;
73
198
  /**
74
- * Export the transaction signing result type for external usage
199
+ * Type exports for external usage
200
+ *
201
+ * These types are re-exported from the PERS Signer SDK for convenience
202
+ * when working with transaction signing in React Native applications.
203
+ *
204
+ * @see {@link SubmissionResult} - Complete transaction submission result
205
+ * @see {@link AuthenticatedUser} - User authentication data structure
206
+ * @see {@link TransactionSigningResult} - Transaction signing result details
207
+ * @see {@link TransactionSignerHook} - Hook return interface
75
208
  */
76
- export type { TransactionSigningResult, SignerAuthenticatedUser, AuthenticationResult };
209
+ export type { SubmissionResult, AuthenticatedUser, TransactionSigningResult, TransactionSignerHook };
77
210
  //# sourceMappingURL=useTransactionSigner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTransactionSigner.d.ts","sourceRoot":"","sources":["../../src/hooks/useTransactionSigner.ts"],"names":[],"mappings":"AA2BA,UAAU,oBAAoB;IAC5B,IAAI,EAAE,uBAAuB,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,uBAAuB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB;AASD,UAAU,wBAAwB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,eAAO,MAAM,oBAAoB;IA+I7B;;OAEG;kCAnGkD,MAAM,KAAG,QAAQ,wBAAwB,CAAC;IAsG/F;;;OAGG;2BAd2C,MAAM,KAAG,QAAQ,wBAAwB,CAAC;IAiBxF;;OAEG;mCAvCmD,MAAM,KAAG,QAAQ,uBAAuB,GAAG,IAAI,CAAC;IA0CtG;;OAEG;;IAGH;;OAEG;;CAGN,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAE5E;;GAEG;AACH,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,CAAC"}
1
+ {"version":3,"file":"useTransactionSigner.d.ts","sourceRoot":"","sources":["../../src/hooks/useTransactionSigner.ts"],"names":[],"mappings":"AAMA,KAAK,gBAAgB,GAAG,OAAO,qCAAqC,EAAE,gBAAgB,CAAC;AACvF,KAAK,iBAAiB,GAAG,OAAO,qCAAqC,EAAE,iBAAiB,CAAC;AACzF,KAAK,wBAAwB,GAAG,OAAO,qCAAqC,EAAE,wBAAwB,CAAC;AAcvG;;;;;;;;;;GAUG;AACH,UAAU,qBAAqB;IAC7B,+BAA+B,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5E,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAKD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgLG;AACH,eAAO,MAAM,oBAAoB,QAAO,qBA4LvC,CAAC;AAEF;;;;;;;;;;GAUG;AACH,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,CAAC"}