react-native-iap 14.3.2 → 14.3.3

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 (47) hide show
  1. package/lib/module/helpers/subscription.js +2 -2
  2. package/lib/module/helpers/subscription.js.map +1 -1
  3. package/lib/module/hooks/useIAP.js +14 -8
  4. package/lib/module/hooks/useIAP.js.map +1 -1
  5. package/lib/module/index.js +76 -23
  6. package/lib/module/index.js.map +1 -1
  7. package/lib/module/types.js +90 -190
  8. package/lib/module/types.js.map +1 -1
  9. package/lib/module/utils/error.js +4 -4
  10. package/lib/module/utils/error.js.map +1 -1
  11. package/lib/module/utils/errorMapping.js +34 -10
  12. package/lib/module/utils/errorMapping.js.map +1 -1
  13. package/lib/module/utils/type-bridge.js +217 -173
  14. package/lib/module/utils/type-bridge.js.map +1 -1
  15. package/lib/typescript/src/helpers/subscription.d.ts.map +1 -1
  16. package/lib/typescript/src/hooks/useIAP.d.ts +8 -11
  17. package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
  18. package/lib/typescript/src/index.d.ts +11 -10
  19. package/lib/typescript/src/index.d.ts.map +1 -1
  20. package/lib/typescript/src/specs/RnIap.nitro.d.ts +2 -2
  21. package/lib/typescript/src/types.d.ts +606 -518
  22. package/lib/typescript/src/types.d.ts.map +1 -1
  23. package/lib/typescript/src/utils/errorMapping.d.ts +2 -1
  24. package/lib/typescript/src/utils/errorMapping.d.ts.map +1 -1
  25. package/lib/typescript/src/utils/type-bridge.d.ts +13 -14
  26. package/lib/typescript/src/utils/type-bridge.d.ts.map +1 -1
  27. package/nitrogen/generated/android/c++/JHybridRnIapSpec.cpp +4 -4
  28. package/nitrogen/generated/android/c++/{JNitroAndroidReceiptValidationOptions.hpp → JNitroReceiptValidationAndroidOptions.hpp} +9 -9
  29. package/nitrogen/generated/android/c++/JNitroReceiptValidationParams.hpp +5 -5
  30. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/{NitroAndroidReceiptValidationOptions.kt → NitroReceiptValidationAndroidOptions.kt} +3 -3
  31. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationParams.kt +1 -1
  32. package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.hpp +10 -10
  33. package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Umbrella.hpp +3 -3
  34. package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.hpp +3 -3
  35. package/nitrogen/generated/ios/swift/{NitroAndroidReceiptValidationOptions.swift → NitroReceiptValidationAndroidOptions.swift} +5 -5
  36. package/nitrogen/generated/ios/swift/NitroReceiptValidationParams.swift +9 -9
  37. package/nitrogen/generated/shared/c++/{NitroAndroidReceiptValidationOptions.hpp → NitroReceiptValidationAndroidOptions.hpp} +10 -10
  38. package/nitrogen/generated/shared/c++/NitroReceiptValidationParams.hpp +8 -8
  39. package/package.json +1 -1
  40. package/src/helpers/subscription.ts +8 -9
  41. package/src/hooks/useIAP.ts +52 -47
  42. package/src/index.ts +123 -35
  43. package/src/specs/RnIap.nitro.ts +2 -2
  44. package/src/types.ts +651 -616
  45. package/src/utils/error.ts +4 -4
  46. package/src/utils/errorMapping.ts +47 -19
  47. package/src/utils/type-bridge.ts +308 -204
@@ -35,7 +35,7 @@ export function parseErrorStringToJsonObj(
35
35
  // Handle non-string inputs
36
36
  if (typeof errorString !== 'string') {
37
37
  return {
38
- code: ErrorCode.E_UNKNOWN,
38
+ code: ErrorCode.Unknown,
39
39
  message: 'Unknown error occurred',
40
40
  };
41
41
  }
@@ -46,7 +46,7 @@ export function parseErrorStringToJsonObj(
46
46
  if (typeof parsed === 'object' && parsed !== null) {
47
47
  // Ensure it has at least code and message
48
48
  return {
49
- code: parsed.code || ErrorCode.E_UNKNOWN,
49
+ code: parsed.code || ErrorCode.Unknown,
50
50
  message: parsed.message || errorString,
51
51
  ...parsed,
52
52
  };
@@ -71,7 +71,7 @@ export function parseErrorStringToJsonObj(
71
71
 
72
72
  // Fallback: treat entire string as message
73
73
  return {
74
- code: ErrorCode.E_UNKNOWN,
74
+ code: ErrorCode.Unknown,
75
75
  message: errorString,
76
76
  };
77
77
  }
@@ -90,7 +90,7 @@ export function isUserCancelledError(
90
90
  : parseErrorStringToJsonObj(error);
91
91
 
92
92
  return (
93
- errorObj.code === ErrorCode.E_USER_CANCELLED ||
93
+ errorObj.code === ErrorCode.UserCancelled ||
94
94
  errorObj.code === 'E_USER_CANCELED' || // Alternative spelling
95
95
  errorObj.responseCode === 1
96
96
  ); // Android BillingClient.BillingResponseCode.USER_CANCELED
@@ -1,42 +1,70 @@
1
1
  import {ErrorCode, type PurchaseError} from '../types';
2
2
 
3
+ const ERROR_CODE_ALIASES: Record<string, ErrorCode> = {
4
+ E_USER_CANCELED: ErrorCode.UserCancelled,
5
+ USER_CANCELED: ErrorCode.UserCancelled,
6
+ E_USER_CANCELLED: ErrorCode.UserCancelled,
7
+ USER_CANCELLED: ErrorCode.UserCancelled,
8
+ };
9
+
10
+ export const normalizeErrorCodeFromNative = (code: unknown): ErrorCode => {
11
+ if (typeof code === 'string') {
12
+ const upper = code.toUpperCase();
13
+ const alias = ERROR_CODE_ALIASES[upper];
14
+ if (alias) {
15
+ return alias;
16
+ }
17
+
18
+ const trimmed = upper.startsWith('E_') ? upper.slice(2) : upper;
19
+ const camel = trimmed
20
+ .toLowerCase()
21
+ .split('_')
22
+ .map((segment) => {
23
+ if (!segment) return segment;
24
+ return segment.charAt(0).toUpperCase() + segment.slice(1);
25
+ })
26
+ .join('');
27
+ if ((ErrorCode as any)[camel]) {
28
+ return (ErrorCode as any)[camel];
29
+ }
30
+ }
31
+ return ErrorCode.Unknown;
32
+ };
33
+
3
34
  export function isUserCancelledError(error: PurchaseError): boolean {
4
- return (
5
- error.code === ErrorCode.E_USER_CANCELLED ||
6
- error.code === 'E_USER_CANCELED'
7
- );
35
+ return normalizeErrorCodeFromNative(error.code) === ErrorCode.UserCancelled;
8
36
  }
9
37
 
10
38
  export function isRecoverableError(error: PurchaseError): boolean {
11
39
  const recoverable = new Set<string>([
12
- ErrorCode.E_NETWORK_ERROR,
13
- ErrorCode.E_SERVICE_ERROR,
14
- ErrorCode.E_REMOTE_ERROR,
15
- ErrorCode.E_CONNECTION_CLOSED,
16
- ErrorCode.E_SERVICE_DISCONNECTED,
17
- ErrorCode.E_INIT_CONNECTION,
18
- ErrorCode.E_SYNC_ERROR,
40
+ ErrorCode.NetworkError,
41
+ ErrorCode.ServiceError,
42
+ ErrorCode.RemoteError,
43
+ ErrorCode.ConnectionClosed,
44
+ ErrorCode.ServiceDisconnected,
45
+ ErrorCode.InitConnection,
46
+ ErrorCode.SyncError,
19
47
  ]);
20
48
  return recoverable.has(error.code);
21
49
  }
22
50
 
23
51
  export function getUserFriendlyErrorMessage(error: PurchaseError): string {
24
52
  switch (error.code) {
25
- case ErrorCode.E_USER_CANCELLED:
53
+ case ErrorCode.UserCancelled:
26
54
  return 'Purchase cancelled';
27
- case ErrorCode.E_NETWORK_ERROR:
55
+ case ErrorCode.NetworkError:
28
56
  return 'Network connection error';
29
- case ErrorCode.E_SERVICE_ERROR:
57
+ case ErrorCode.ServiceError:
30
58
  return 'Store service error';
31
- case ErrorCode.E_REMOTE_ERROR:
59
+ case ErrorCode.RemoteError:
32
60
  return 'Remote service error';
33
- case ErrorCode.E_IAP_NOT_AVAILABLE:
61
+ case ErrorCode.IapNotAvailable:
34
62
  return 'In-app purchases are not available on this device';
35
- case ErrorCode.E_DEFERRED_PAYMENT:
63
+ case ErrorCode.DeferredPayment:
36
64
  return 'Payment was deferred (pending approval)';
37
- case ErrorCode.E_TRANSACTION_VALIDATION_FAILED:
65
+ case ErrorCode.TransactionValidationFailed:
38
66
  return 'Transaction validation failed';
39
- case ErrorCode.E_SKU_NOT_FOUND:
67
+ case ErrorCode.SkuNotFound:
40
68
  return 'Product not found';
41
69
  default:
42
70
  return error.message || 'Unknown error occurred';