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.
- package/lib/module/helpers/subscription.js +2 -2
- package/lib/module/helpers/subscription.js.map +1 -1
- package/lib/module/hooks/useIAP.js +14 -8
- package/lib/module/hooks/useIAP.js.map +1 -1
- package/lib/module/index.js +76 -23
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js +90 -190
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/error.js +4 -4
- package/lib/module/utils/error.js.map +1 -1
- package/lib/module/utils/errorMapping.js +34 -10
- package/lib/module/utils/errorMapping.js.map +1 -1
- package/lib/module/utils/type-bridge.js +217 -173
- package/lib/module/utils/type-bridge.js.map +1 -1
- package/lib/typescript/src/helpers/subscription.d.ts.map +1 -1
- package/lib/typescript/src/hooks/useIAP.d.ts +8 -11
- package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +11 -10
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/RnIap.nitro.d.ts +2 -2
- package/lib/typescript/src/types.d.ts +606 -518
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/utils/errorMapping.d.ts +2 -1
- package/lib/typescript/src/utils/errorMapping.d.ts.map +1 -1
- package/lib/typescript/src/utils/type-bridge.d.ts +13 -14
- package/lib/typescript/src/utils/type-bridge.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JHybridRnIapSpec.cpp +4 -4
- package/nitrogen/generated/android/c++/{JNitroAndroidReceiptValidationOptions.hpp → JNitroReceiptValidationAndroidOptions.hpp} +9 -9
- package/nitrogen/generated/android/c++/JNitroReceiptValidationParams.hpp +5 -5
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/{NitroAndroidReceiptValidationOptions.kt → NitroReceiptValidationAndroidOptions.kt} +3 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationParams.kt +1 -1
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.hpp +10 -10
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Umbrella.hpp +3 -3
- package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.hpp +3 -3
- package/nitrogen/generated/ios/swift/{NitroAndroidReceiptValidationOptions.swift → NitroReceiptValidationAndroidOptions.swift} +5 -5
- package/nitrogen/generated/ios/swift/NitroReceiptValidationParams.swift +9 -9
- package/nitrogen/generated/shared/c++/{NitroAndroidReceiptValidationOptions.hpp → NitroReceiptValidationAndroidOptions.hpp} +10 -10
- package/nitrogen/generated/shared/c++/NitroReceiptValidationParams.hpp +8 -8
- package/package.json +1 -1
- package/src/helpers/subscription.ts +8 -9
- package/src/hooks/useIAP.ts +52 -47
- package/src/index.ts +123 -35
- package/src/specs/RnIap.nitro.ts +2 -2
- package/src/types.ts +651 -616
- package/src/utils/error.ts +4 -4
- package/src/utils/errorMapping.ts +47 -19
- package/src/utils/type-bridge.ts +308 -204
package/src/utils/error.ts
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
13
|
-
ErrorCode.
|
|
14
|
-
ErrorCode.
|
|
15
|
-
ErrorCode.
|
|
16
|
-
ErrorCode.
|
|
17
|
-
ErrorCode.
|
|
18
|
-
ErrorCode.
|
|
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.
|
|
53
|
+
case ErrorCode.UserCancelled:
|
|
26
54
|
return 'Purchase cancelled';
|
|
27
|
-
case ErrorCode.
|
|
55
|
+
case ErrorCode.NetworkError:
|
|
28
56
|
return 'Network connection error';
|
|
29
|
-
case ErrorCode.
|
|
57
|
+
case ErrorCode.ServiceError:
|
|
30
58
|
return 'Store service error';
|
|
31
|
-
case ErrorCode.
|
|
59
|
+
case ErrorCode.RemoteError:
|
|
32
60
|
return 'Remote service error';
|
|
33
|
-
case ErrorCode.
|
|
61
|
+
case ErrorCode.IapNotAvailable:
|
|
34
62
|
return 'In-app purchases are not available on this device';
|
|
35
|
-
case ErrorCode.
|
|
63
|
+
case ErrorCode.DeferredPayment:
|
|
36
64
|
return 'Payment was deferred (pending approval)';
|
|
37
|
-
case ErrorCode.
|
|
65
|
+
case ErrorCode.TransactionValidationFailed:
|
|
38
66
|
return 'Transaction validation failed';
|
|
39
|
-
case ErrorCode.
|
|
67
|
+
case ErrorCode.SkuNotFound:
|
|
40
68
|
return 'Product not found';
|
|
41
69
|
default:
|
|
42
70
|
return error.message || 'Unknown error occurred';
|