react-native-iap 14.4.45 → 14.4.47
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/NitroIap.podspec +2 -2
- package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +113 -3
- package/ios/HybridRnIap.swift +61 -2
- package/lib/module/hooks/useIAP.js +9 -1
- package/lib/module/hooks/useIAP.js.map +1 -1
- package/lib/module/index.js +68 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js +5 -0
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/errorMapping.js +32 -6
- package/lib/module/utils/errorMapping.js.map +1 -1
- package/lib/typescript/src/hooks/useIAP.d.ts +5 -1
- package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +34 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/RnIap.nitro.d.ts +72 -26
- package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +109 -51
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/utils/errorMapping.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JHybridRnIapSpec.cpp +76 -0
- package/nitrogen/generated/android/c++/JHybridRnIapSpec.hpp +2 -0
- package/nitrogen/generated/android/c++/JIapkitPurchaseState.hpp +80 -0
- package/nitrogen/generated/android/c++/JIapkitStore.hpp +59 -0
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitAppleProps.hpp +57 -0
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitGoogleProps.hpp +57 -0
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitProps.hpp +70 -0
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitResult.hpp +68 -0
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithProviderProps.hpp +70 -0
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithProviderResult.hpp +86 -0
- package/nitrogen/generated/android/c++/JPurchaseVerificationProvider.hpp +59 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/HybridRnIapSpec.kt +8 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/IapkitPurchaseState.kt +28 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/IapkitStore.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitAppleProps.kt +36 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitGoogleProps.kt +36 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitProps.kt +42 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitResult.kt +42 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithProviderProps.kt +39 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithProviderResult.kt +39 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseVerificationProvider.kt +21 -0
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.cpp +8 -0
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.hpp +123 -0
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Umbrella.hpp +27 -0
- package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.hpp +43 -0
- package/nitrogen/generated/ios/swift/Func_void_NitroVerifyPurchaseWithProviderResult.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridRnIapSpec.swift +2 -0
- package/nitrogen/generated/ios/swift/HybridRnIapSpec_cxx.swift +45 -0
- package/nitrogen/generated/ios/swift/IapkitPurchaseState.swift +68 -0
- package/nitrogen/generated/ios/swift/IapkitStore.swift +40 -0
- package/nitrogen/generated/ios/swift/NitroVerifyPurchaseWithIapkitAppleProps.swift +35 -0
- package/nitrogen/generated/ios/swift/NitroVerifyPurchaseWithIapkitGoogleProps.swift +35 -0
- package/nitrogen/generated/ios/swift/NitroVerifyPurchaseWithIapkitProps.swift +100 -0
- package/nitrogen/generated/ios/swift/NitroVerifyPurchaseWithIapkitResult.swift +57 -0
- package/nitrogen/generated/ios/swift/NitroVerifyPurchaseWithProviderProps.swift +58 -0
- package/nitrogen/generated/ios/swift/NitroVerifyPurchaseWithProviderResult.swift +58 -0
- package/nitrogen/generated/ios/swift/PurchaseVerificationProvider.swift +40 -0
- package/nitrogen/generated/shared/c++/HybridRnIapSpec.cpp +2 -0
- package/nitrogen/generated/shared/c++/HybridRnIapSpec.hpp +8 -0
- package/nitrogen/generated/shared/c++/IapkitPurchaseState.hpp +104 -0
- package/nitrogen/generated/shared/c++/IapkitStore.hpp +76 -0
- package/nitrogen/generated/shared/c++/NitroVerifyPurchaseWithIapkitAppleProps.hpp +75 -0
- package/nitrogen/generated/shared/c++/NitroVerifyPurchaseWithIapkitGoogleProps.hpp +75 -0
- package/nitrogen/generated/shared/c++/NitroVerifyPurchaseWithIapkitProps.hpp +89 -0
- package/nitrogen/generated/shared/c++/NitroVerifyPurchaseWithIapkitResult.hpp +87 -0
- package/nitrogen/generated/shared/c++/NitroVerifyPurchaseWithProviderProps.hpp +84 -0
- package/nitrogen/generated/shared/c++/NitroVerifyPurchaseWithProviderResult.hpp +84 -0
- package/nitrogen/generated/shared/c++/PurchaseVerificationProvider.hpp +76 -0
- package/openiap-versions.json +3 -3
- package/package.json +1 -1
- package/src/hooks/useIAP.ts +32 -0
- package/src/index.ts +74 -5
- package/src/specs/RnIap.nitro.ts +101 -28
- package/src/types.ts +126 -57
- package/src/utils/errorMapping.ts +32 -4
package/NitroIap.podspec
CHANGED
|
@@ -42,8 +42,8 @@ Pod::Spec.new do |s|
|
|
|
42
42
|
s.dependency 'React-jsi'
|
|
43
43
|
s.dependency 'React-callinvoker'
|
|
44
44
|
# OpenIAP Apple for StoreKit 2 integration
|
|
45
|
-
#
|
|
46
|
-
s.dependency 'openiap', "
|
|
45
|
+
# Exact version match for consistent builds
|
|
46
|
+
s.dependency 'openiap', "#{apple_version}"
|
|
47
47
|
|
|
48
48
|
install_modules_dependencies(s)
|
|
49
49
|
end
|
|
@@ -549,7 +549,34 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
549
549
|
}
|
|
550
550
|
}
|
|
551
551
|
}
|
|
552
|
-
|
|
552
|
+
|
|
553
|
+
override fun hasActiveSubscriptions(subscriptionIds: Array<String>?): Promise<Boolean> {
|
|
554
|
+
return Promise.async {
|
|
555
|
+
initConnection(null).await()
|
|
556
|
+
|
|
557
|
+
RnIapLog.payload(
|
|
558
|
+
"hasActiveSubscriptions",
|
|
559
|
+
mapOf("subscriptionIds" to (subscriptionIds?.toList() ?: "all"))
|
|
560
|
+
)
|
|
561
|
+
|
|
562
|
+
try {
|
|
563
|
+
val hasActive = openIap.hasActiveSubscriptions(subscriptionIds?.toList())
|
|
564
|
+
RnIapLog.result("hasActiveSubscriptions", hasActive)
|
|
565
|
+
hasActive
|
|
566
|
+
} catch (e: Exception) {
|
|
567
|
+
RnIapLog.failure("hasActiveSubscriptions", e)
|
|
568
|
+
val error = OpenIAPError.ServiceUnavailable
|
|
569
|
+
throw OpenIapException(
|
|
570
|
+
toErrorJson(
|
|
571
|
+
error = error,
|
|
572
|
+
debugMessage = e.message,
|
|
573
|
+
messageOverride = "Failed to check active subscriptions: ${e.message}"
|
|
574
|
+
)
|
|
575
|
+
)
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
|
|
553
580
|
// Transaction management methods (Unified)
|
|
554
581
|
override fun finishTransaction(params: NitroFinishTransactionParams): Promise<Variant_Boolean_NitroPurchaseResult> {
|
|
555
582
|
return Promise.async {
|
|
@@ -1078,7 +1105,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1078
1105
|
)
|
|
1079
1106
|
|
|
1080
1107
|
Variant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.Second(result)
|
|
1081
|
-
|
|
1108
|
+
|
|
1082
1109
|
} catch (e: Exception) {
|
|
1083
1110
|
val debugMessage = e.message
|
|
1084
1111
|
val error = OpenIAPError.InvalidReceipt
|
|
@@ -1092,7 +1119,60 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1092
1119
|
}
|
|
1093
1120
|
}
|
|
1094
1121
|
}
|
|
1095
|
-
|
|
1122
|
+
|
|
1123
|
+
override fun verifyPurchaseWithProvider(params: NitroVerifyPurchaseWithProviderProps): Promise<NitroVerifyPurchaseWithProviderResult> {
|
|
1124
|
+
return Promise.async {
|
|
1125
|
+
try {
|
|
1126
|
+
// Convert Nitro enum to string (e.g., IAPKIT -> "iapkit")
|
|
1127
|
+
val providerString = params.provider.name.lowercase()
|
|
1128
|
+
RnIapLog.payload("verifyPurchaseWithProvider", mapOf("provider" to providerString))
|
|
1129
|
+
|
|
1130
|
+
// Build the props map for OpenIAP - use string value for provider
|
|
1131
|
+
val propsMap = mutableMapOf<String, Any?>("provider" to providerString)
|
|
1132
|
+
params.iapkit?.let { iapkit ->
|
|
1133
|
+
val iapkitMap = mutableMapOf<String, Any?>()
|
|
1134
|
+
iapkit.apiKey?.let { iapkitMap["apiKey"] = it }
|
|
1135
|
+
iapkit.google?.let { google ->
|
|
1136
|
+
iapkitMap["google"] = mapOf("purchaseToken" to google.purchaseToken)
|
|
1137
|
+
}
|
|
1138
|
+
iapkit.apple?.let { apple ->
|
|
1139
|
+
iapkitMap["apple"] = mapOf("jws" to apple.jws)
|
|
1140
|
+
}
|
|
1141
|
+
propsMap["iapkit"] = iapkitMap
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
val props = dev.hyo.openiap.VerifyPurchaseWithProviderProps.fromJson(propsMap)
|
|
1145
|
+
val result = openIap.verifyPurchaseWithProvider(props)
|
|
1146
|
+
|
|
1147
|
+
RnIapLog.result("verifyPurchaseWithProvider", mapOf("provider" to result.provider, "iapkitCount" to result.iapkit.size))
|
|
1148
|
+
|
|
1149
|
+
// Convert result to Nitro types
|
|
1150
|
+
val nitroIapkitResults = result.iapkit.map { item ->
|
|
1151
|
+
NitroVerifyPurchaseWithIapkitResult(
|
|
1152
|
+
isValid = item.isValid,
|
|
1153
|
+
state = mapIapkitPurchaseState(item.state.name),
|
|
1154
|
+
store = mapIapkitStore(item.store.name)
|
|
1155
|
+
)
|
|
1156
|
+
}.toTypedArray()
|
|
1157
|
+
|
|
1158
|
+
NitroVerifyPurchaseWithProviderResult(
|
|
1159
|
+
iapkit = nitroIapkitResults,
|
|
1160
|
+
provider = mapPurchaseVerificationProvider(result.provider.name)
|
|
1161
|
+
)
|
|
1162
|
+
} catch (e: Exception) {
|
|
1163
|
+
RnIapLog.failure("verifyPurchaseWithProvider", e)
|
|
1164
|
+
val error = OpenIAPError.VerificationFailed
|
|
1165
|
+
throw OpenIapException(
|
|
1166
|
+
toErrorJson(
|
|
1167
|
+
error = error,
|
|
1168
|
+
debugMessage = e.message,
|
|
1169
|
+
messageOverride = "Verification failed: ${e.message ?: "unknown reason"}"
|
|
1170
|
+
)
|
|
1171
|
+
)
|
|
1172
|
+
}
|
|
1173
|
+
}
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1096
1176
|
// iOS-specific methods - Not applicable on Android, return appropriate defaults
|
|
1097
1177
|
override fun subscriptionStatusIOS(sku: String): Promise<Array<NitroSubscriptionStatus>?> {
|
|
1098
1178
|
return Promise.async {
|
|
@@ -1324,6 +1404,36 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1324
1404
|
}
|
|
1325
1405
|
}
|
|
1326
1406
|
|
|
1407
|
+
// Helper functions to map OpenIAP enum values to Nitro enum values
|
|
1408
|
+
private fun mapIapkitPurchaseState(stateName: String): IapkitPurchaseState {
|
|
1409
|
+
return when (stateName.uppercase()) {
|
|
1410
|
+
"ENTITLED" -> IapkitPurchaseState.ENTITLED
|
|
1411
|
+
"PENDING_ACKNOWLEDGMENT", "PENDING-ACKNOWLEDGMENT" -> IapkitPurchaseState.PENDING_ACKNOWLEDGMENT
|
|
1412
|
+
"PENDING" -> IapkitPurchaseState.PENDING
|
|
1413
|
+
"CANCELED" -> IapkitPurchaseState.CANCELED
|
|
1414
|
+
"EXPIRED" -> IapkitPurchaseState.EXPIRED
|
|
1415
|
+
"READY_TO_CONSUME", "READY-TO-CONSUME" -> IapkitPurchaseState.READY_TO_CONSUME
|
|
1416
|
+
"CONSUMED" -> IapkitPurchaseState.CONSUMED
|
|
1417
|
+
"INAUTHENTIC" -> IapkitPurchaseState.INAUTHENTIC
|
|
1418
|
+
else -> IapkitPurchaseState.UNKNOWN
|
|
1419
|
+
}
|
|
1420
|
+
}
|
|
1421
|
+
|
|
1422
|
+
private fun mapIapkitStore(storeName: String): IapkitStore {
|
|
1423
|
+
return when (storeName.uppercase()) {
|
|
1424
|
+
"APPLE" -> IapkitStore.APPLE
|
|
1425
|
+
"GOOGLE" -> IapkitStore.GOOGLE
|
|
1426
|
+
else -> IapkitStore.GOOGLE // Default to Google on Android
|
|
1427
|
+
}
|
|
1428
|
+
}
|
|
1429
|
+
|
|
1430
|
+
private fun mapPurchaseVerificationProvider(providerName: String): PurchaseVerificationProvider {
|
|
1431
|
+
return when (providerName.uppercase()) {
|
|
1432
|
+
"IAPKIT" -> PurchaseVerificationProvider.IAPKIT
|
|
1433
|
+
else -> PurchaseVerificationProvider.NONE
|
|
1434
|
+
}
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1327
1437
|
private fun toErrorResult(
|
|
1328
1438
|
error: OpenIAPError,
|
|
1329
1439
|
productId: String? = null,
|
package/ios/HybridRnIap.swift
CHANGED
|
@@ -265,7 +265,22 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
265
265
|
}
|
|
266
266
|
}
|
|
267
267
|
}
|
|
268
|
-
|
|
268
|
+
|
|
269
|
+
func hasActiveSubscriptions(subscriptionIds: [String]?) throws -> Promise<Bool> {
|
|
270
|
+
return Promise.async {
|
|
271
|
+
try self.ensureConnection()
|
|
272
|
+
do {
|
|
273
|
+
RnIapLog.payload("hasActiveSubscriptions", subscriptionIds ?? [])
|
|
274
|
+
let hasActive = try await OpenIapModule.shared.hasActiveSubscriptions(subscriptionIds)
|
|
275
|
+
RnIapLog.result("hasActiveSubscriptions", hasActive)
|
|
276
|
+
return hasActive
|
|
277
|
+
} catch {
|
|
278
|
+
RnIapLog.failure("hasActiveSubscriptions", error: error)
|
|
279
|
+
throw error
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
|
|
269
284
|
func finishTransaction(params: NitroFinishTransactionParams) throws -> Promise<Variant_Bool_NitroPurchaseResult> {
|
|
270
285
|
return Promise.async {
|
|
271
286
|
guard let iosParams = params.ios else { return .first(true) }
|
|
@@ -305,7 +320,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
305
320
|
return Promise.async {
|
|
306
321
|
do {
|
|
307
322
|
RnIapLog.payload("validateReceiptIOS", ["sku": params.sku])
|
|
308
|
-
let props = try OpenIapSerialization.
|
|
323
|
+
let props = try OpenIapSerialization.verifyPurchaseProps(from: ["sku": params.sku])
|
|
309
324
|
let result = try await OpenIapModule.shared.validateReceiptIOS(props)
|
|
310
325
|
var encoded = RnIapHelper.sanitizeDictionary(OpenIapSerialization.encode(result))
|
|
311
326
|
if encoded["receiptData"] != nil {
|
|
@@ -334,6 +349,50 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
334
349
|
}
|
|
335
350
|
}
|
|
336
351
|
|
|
352
|
+
func verifyPurchaseWithProvider(params: NitroVerifyPurchaseWithProviderProps) throws -> Promise<NitroVerifyPurchaseWithProviderResult> {
|
|
353
|
+
return Promise.async {
|
|
354
|
+
do {
|
|
355
|
+
RnIapLog.payload("verifyPurchaseWithProvider", ["provider": params.provider.stringValue])
|
|
356
|
+
// Convert Nitro params to OpenIAP props using JSONSerialization (same as expo-iap)
|
|
357
|
+
// Use stringValue for enum to get proper string representation ("iapkit" instead of numeric rawValue)
|
|
358
|
+
var propsDict: [String: Any] = ["provider": params.provider.stringValue]
|
|
359
|
+
if let iapkit = params.iapkit {
|
|
360
|
+
var iapkitDict: [String: Any] = [:]
|
|
361
|
+
if let apiKey = iapkit.apiKey {
|
|
362
|
+
iapkitDict["apiKey"] = apiKey
|
|
363
|
+
}
|
|
364
|
+
if let apple = iapkit.apple {
|
|
365
|
+
iapkitDict["apple"] = ["jws": apple.jws]
|
|
366
|
+
}
|
|
367
|
+
if let google = iapkit.google {
|
|
368
|
+
iapkitDict["google"] = ["purchaseToken": google.purchaseToken]
|
|
369
|
+
}
|
|
370
|
+
propsDict["iapkit"] = iapkitDict
|
|
371
|
+
}
|
|
372
|
+
// Use JSONSerialization + JSONDecoder like expo-iap does
|
|
373
|
+
let jsonData = try JSONSerialization.data(withJSONObject: propsDict)
|
|
374
|
+
let props = try JSONDecoder().decode(VerifyPurchaseWithProviderProps.self, from: jsonData)
|
|
375
|
+
let result = try await OpenIapModule.shared.verifyPurchaseWithProvider(props)
|
|
376
|
+
RnIapLog.result("verifyPurchaseWithProvider", ["provider": result.provider, "iapkitCount": result.iapkit.count])
|
|
377
|
+
// Convert result to Nitro types
|
|
378
|
+
let nitroIapkitResults = result.iapkit.map { item -> NitroVerifyPurchaseWithIapkitResult in
|
|
379
|
+
NitroVerifyPurchaseWithIapkitResult(
|
|
380
|
+
isValid: item.isValid,
|
|
381
|
+
state: IapkitPurchaseState(fromString: item.state.rawValue) ?? .unknown,
|
|
382
|
+
store: IapkitStore(fromString: item.store.rawValue) ?? .apple
|
|
383
|
+
)
|
|
384
|
+
}
|
|
385
|
+
return NitroVerifyPurchaseWithProviderResult(
|
|
386
|
+
iapkit: nitroIapkitResults,
|
|
387
|
+
provider: PurchaseVerificationProvider(fromString: result.provider.rawValue) ?? .iapkit
|
|
388
|
+
)
|
|
389
|
+
} catch {
|
|
390
|
+
RnIapLog.failure("verifyPurchaseWithProvider", error: error)
|
|
391
|
+
throw PurchaseError.make(code: .receiptFailed, message: error.localizedDescription)
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
|
|
337
396
|
func getStorefront() throws -> Promise<String> {
|
|
338
397
|
return Promise.async {
|
|
339
398
|
do {
|
|
@@ -6,7 +6,7 @@ import { Platform } from 'react-native';
|
|
|
6
6
|
import { RnIapConsole } from "../utils/debug.js";
|
|
7
7
|
|
|
8
8
|
// Internal modules
|
|
9
|
-
import { initConnection, purchaseErrorListener, purchaseUpdatedListener, promotedProductListenerIOS, getAvailablePurchases, finishTransaction as finishTransactionInternal, requestPurchase as requestPurchaseInternal, fetchProducts, validateReceipt as validateReceiptInternal, getActiveSubscriptions, hasActiveSubscriptions, restorePurchases as restorePurchasesTopLevel, getPromotedProductIOS, requestPurchaseOnPromotedProductIOS, checkAlternativeBillingAvailabilityAndroid, showAlternativeBillingDialogAndroid, createAlternativeBillingTokenAndroid, userChoiceBillingListenerAndroid } from "../index.js";
|
|
9
|
+
import { initConnection, purchaseErrorListener, purchaseUpdatedListener, promotedProductListenerIOS, getAvailablePurchases, finishTransaction as finishTransactionInternal, requestPurchase as requestPurchaseInternal, fetchProducts, validateReceipt as validateReceiptInternal, verifyPurchase as verifyPurchaseTopLevel, verifyPurchaseWithProvider as verifyPurchaseWithProviderTopLevel, getActiveSubscriptions, hasActiveSubscriptions, restorePurchases as restorePurchasesTopLevel, getPromotedProductIOS, requestPurchaseOnPromotedProductIOS, checkAlternativeBillingAvailabilityAndroid, showAlternativeBillingDialogAndroid, createAlternativeBillingTokenAndroid, userChoiceBillingListenerAndroid } from "../index.js";
|
|
10
10
|
|
|
11
11
|
// Types
|
|
12
12
|
import { ErrorCode } from "../types.js";
|
|
@@ -138,6 +138,12 @@ export function useIAP(options) {
|
|
|
138
138
|
androidOptions
|
|
139
139
|
});
|
|
140
140
|
}, []);
|
|
141
|
+
const verifyPurchase = useCallback(async options => {
|
|
142
|
+
return verifyPurchaseTopLevel(options);
|
|
143
|
+
}, []);
|
|
144
|
+
const verifyPurchaseWithProvider = useCallback(async options => {
|
|
145
|
+
return verifyPurchaseWithProviderTopLevel(options);
|
|
146
|
+
}, []);
|
|
141
147
|
const initIapWithSubscriptions = useCallback(async () => {
|
|
142
148
|
// Register listeners BEFORE initConnection to avoid race condition
|
|
143
149
|
subscriptionsRef.current.purchaseUpdate = purchaseUpdatedListener(async purchase => {
|
|
@@ -222,6 +228,8 @@ export function useIAP(options) {
|
|
|
222
228
|
fetchProducts: fetchProductsInternal,
|
|
223
229
|
requestPurchase,
|
|
224
230
|
validateReceipt,
|
|
231
|
+
verifyPurchase,
|
|
232
|
+
verifyPurchaseWithProvider,
|
|
225
233
|
restorePurchases: async () => {
|
|
226
234
|
try {
|
|
227
235
|
await restorePurchasesTopLevel();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useState","useRef","Platform","RnIapConsole","initConnection","purchaseErrorListener","purchaseUpdatedListener","promotedProductListenerIOS","getAvailablePurchases","finishTransaction","finishTransactionInternal","requestPurchase","requestPurchaseInternal","fetchProducts","validateReceipt","validateReceiptInternal","getActiveSubscriptions","hasActiveSubscriptions","restorePurchases","restorePurchasesTopLevel","getPromotedProductIOS","requestPurchaseOnPromotedProductIOS","checkAlternativeBillingAvailabilityAndroid","showAlternativeBillingDialogAndroid","createAlternativeBillingTokenAndroid","userChoiceBillingListenerAndroid","ErrorCode","normalizeErrorCodeFromNative","useIAP","options","connected","setConnected","products","setProducts","subscriptions","setSubscriptions","availablePurchases","setAvailablePurchases","promotedProductIOS","setPromotedProductIOS","activeSubscriptions","setActiveSubscriptions","optionsRef","connectedRef","mergeWithDuplicateCheck","existingItems","newItems","getKey","merged","forEach","newItem","isDuplicate","some","existingItem","push","current","subscriptionsRef","subscriptionsRefState","fetchProductsInternal","params","warn","requestType","type","debug","skus","result","items","prevSubscriptions","subscription","id","newProducts","filter","item","newSubscriptions","prevProducts","product","error","getAvailablePurchasesInternal","_skus","alsoPublishToEventListenerIOS","onlyIncludeActiveItemsIOS","getActiveSubscriptionsInternal","subscriptionIds","hasActiveSubscriptionsInternal","args","requestObj","sku","androidOptions","initIapWithSubscriptions","purchaseUpdate","purchase","e","onPurchaseSuccess","purchaseError","mappedError","code","message","productId","undefined","InitConnection","onPurchaseError","OS","onPromotedProductIOS","onUserChoiceBillingAndroid","userChoiceBillingAndroid","details","config","alternativeBillingModeAndroid","remove","currentSubscriptions"],"sourceRoot":"../../../src","sources":["hooks/useIAP.ts"],"mappings":";;AAAA;AACA,SAAQA,WAAW,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,QAAO,OAAO;AAC9D,SAAQC,QAAQ,QAAO,cAAc;AACrC,SAAQC,YAAY,QAAO,mBAAgB;;AAE3C;AACA,SACEC,cAAc,EACdC,qBAAqB,EACrBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,qBAAqB,EACrBC,iBAAiB,IAAIC,yBAAyB,EAC9CC,eAAe,IAAIC,uBAAuB,EAC1CC,aAAa,EACbC,eAAe,IAAIC,uBAAuB,EAC1CC,sBAAsB,EACtBC,sBAAsB,EACtBC,gBAAgB,IAAIC,wBAAwB,EAC5CC,qBAAqB,EACrBC,mCAAmC,EACnCC,0CAA0C,EAC1CC,mCAAmC,EACnCC,oCAAoC,EACpCC,gCAAgC,QAC3B,aAAK;;AAEZ;AACA,SAAQC,SAAS,QAAO,aAAU;
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useState","useRef","Platform","RnIapConsole","initConnection","purchaseErrorListener","purchaseUpdatedListener","promotedProductListenerIOS","getAvailablePurchases","finishTransaction","finishTransactionInternal","requestPurchase","requestPurchaseInternal","fetchProducts","validateReceipt","validateReceiptInternal","verifyPurchase","verifyPurchaseTopLevel","verifyPurchaseWithProvider","verifyPurchaseWithProviderTopLevel","getActiveSubscriptions","hasActiveSubscriptions","restorePurchases","restorePurchasesTopLevel","getPromotedProductIOS","requestPurchaseOnPromotedProductIOS","checkAlternativeBillingAvailabilityAndroid","showAlternativeBillingDialogAndroid","createAlternativeBillingTokenAndroid","userChoiceBillingListenerAndroid","ErrorCode","normalizeErrorCodeFromNative","useIAP","options","connected","setConnected","products","setProducts","subscriptions","setSubscriptions","availablePurchases","setAvailablePurchases","promotedProductIOS","setPromotedProductIOS","activeSubscriptions","setActiveSubscriptions","optionsRef","connectedRef","mergeWithDuplicateCheck","existingItems","newItems","getKey","merged","forEach","newItem","isDuplicate","some","existingItem","push","current","subscriptionsRef","subscriptionsRefState","fetchProductsInternal","params","warn","requestType","type","debug","skus","result","items","prevSubscriptions","subscription","id","newProducts","filter","item","newSubscriptions","prevProducts","product","error","getAvailablePurchasesInternal","_skus","alsoPublishToEventListenerIOS","onlyIncludeActiveItemsIOS","getActiveSubscriptionsInternal","subscriptionIds","hasActiveSubscriptionsInternal","args","requestObj","sku","androidOptions","initIapWithSubscriptions","purchaseUpdate","purchase","e","onPurchaseSuccess","purchaseError","mappedError","code","message","productId","undefined","InitConnection","onPurchaseError","OS","onPromotedProductIOS","onUserChoiceBillingAndroid","userChoiceBillingAndroid","details","config","alternativeBillingModeAndroid","remove","currentSubscriptions"],"sourceRoot":"../../../src","sources":["hooks/useIAP.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -8,6 +8,7 @@ import { NitroModules } from 'react-native-nitro-modules';
|
|
|
8
8
|
|
|
9
9
|
// Internal modules
|
|
10
10
|
|
|
11
|
+
import { ErrorCode } from "./types.js";
|
|
11
12
|
import { convertNitroProductToProduct, convertNitroPurchaseToPurchase, convertProductToProductSubscription, validateNitroProduct, validateNitroPurchase, convertNitroSubscriptionStatusToSubscriptionStatusIOS } from "./utils/type-bridge.js";
|
|
12
13
|
import { parseErrorStringToJsonObj } from "./utils/error.js";
|
|
13
14
|
import { normalizeErrorCodeFromNative, createPurchaseError } from "./utils/errorMapping.js";
|
|
@@ -1010,7 +1011,7 @@ export const consumePurchaseAndroid = async purchaseToken => {
|
|
|
1010
1011
|
* Validate receipt on both iOS and Android platforms
|
|
1011
1012
|
* @param sku - Product SKU
|
|
1012
1013
|
* @param androidOptions - Android-specific validation options (required for Android)
|
|
1013
|
-
* @returns Promise<
|
|
1014
|
+
* @returns Promise<VerifyPurchaseResultIOS | VerifyPurchaseResultAndroid> - Platform-specific receipt validation result
|
|
1014
1015
|
*/
|
|
1015
1016
|
export const validateReceipt = async options => {
|
|
1016
1017
|
const {
|
|
@@ -1075,6 +1076,72 @@ export const validateReceipt = async options => {
|
|
|
1075
1076
|
}
|
|
1076
1077
|
};
|
|
1077
1078
|
|
|
1079
|
+
/**
|
|
1080
|
+
* Verify purchase with the configured providers
|
|
1081
|
+
*
|
|
1082
|
+
* This function uses the native OpenIAP verifyPurchase implementation
|
|
1083
|
+
* which validates purchases using platform-specific methods.
|
|
1084
|
+
* This is an alias for validateReceipt for API consistency with OpenIAP.
|
|
1085
|
+
*
|
|
1086
|
+
* @param options - Receipt validation options containing the SKU
|
|
1087
|
+
* @returns Promise resolving to receipt validation result
|
|
1088
|
+
*/
|
|
1089
|
+
export const verifyPurchase = validateReceipt;
|
|
1090
|
+
|
|
1091
|
+
/**
|
|
1092
|
+
* Verify purchase with a specific provider (e.g., IAPKit)
|
|
1093
|
+
*
|
|
1094
|
+
* This function allows you to verify purchases using external verification
|
|
1095
|
+
* services like IAPKit, which provide additional validation and security.
|
|
1096
|
+
*
|
|
1097
|
+
* @param options - Verification options including provider and credentials
|
|
1098
|
+
* @returns Promise resolving to provider-specific verification result
|
|
1099
|
+
*
|
|
1100
|
+
* @example
|
|
1101
|
+
* ```typescript
|
|
1102
|
+
* const result = await verifyPurchaseWithProvider({
|
|
1103
|
+
* provider: 'iapkit',
|
|
1104
|
+
* iapkit: {
|
|
1105
|
+
* apiKey: 'your-api-key',
|
|
1106
|
+
* apple: { jws: purchase.purchaseToken },
|
|
1107
|
+
* google: { purchaseToken: purchase.purchaseToken },
|
|
1108
|
+
* },
|
|
1109
|
+
* });
|
|
1110
|
+
* ```
|
|
1111
|
+
*/
|
|
1112
|
+
export const verifyPurchaseWithProvider = async options => {
|
|
1113
|
+
try {
|
|
1114
|
+
const result = await IAP.instance.verifyPurchaseWithProvider({
|
|
1115
|
+
provider: options.provider,
|
|
1116
|
+
iapkit: options.iapkit ?? null
|
|
1117
|
+
});
|
|
1118
|
+
// Validate provider - Nitro spec allows 'none' for compatibility, but this function only supports 'iapkit'
|
|
1119
|
+
if (result.provider !== 'iapkit') {
|
|
1120
|
+
throw createPurchaseError({
|
|
1121
|
+
code: ErrorCode.DeveloperError,
|
|
1122
|
+
message: `Unsupported provider: ${result.provider}. Only 'iapkit' is supported.`
|
|
1123
|
+
});
|
|
1124
|
+
}
|
|
1125
|
+
return {
|
|
1126
|
+
provider: result.provider,
|
|
1127
|
+
iapkit: result.iapkit.map(item => ({
|
|
1128
|
+
isValid: item.isValid,
|
|
1129
|
+
state: item.state,
|
|
1130
|
+
store: item.store
|
|
1131
|
+
}))
|
|
1132
|
+
};
|
|
1133
|
+
} catch (error) {
|
|
1134
|
+
RnIapConsole.error('[verifyPurchaseWithProvider] Failed:', error);
|
|
1135
|
+
const parsedError = parseErrorStringToJsonObj(error);
|
|
1136
|
+
throw createPurchaseError({
|
|
1137
|
+
code: parsedError.code,
|
|
1138
|
+
message: parsedError.message,
|
|
1139
|
+
responseCode: parsedError.responseCode,
|
|
1140
|
+
debugMessage: parsedError.debugMessage
|
|
1141
|
+
});
|
|
1142
|
+
}
|
|
1143
|
+
};
|
|
1144
|
+
|
|
1078
1145
|
/**
|
|
1079
1146
|
* Sync iOS purchases with App Store (iOS only)
|
|
1080
1147
|
* @returns Promise<boolean>
|