react-native-iap 16.0.1 → 16.1.0
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 +4 -32
- package/android/gradle.properties +3 -3
- package/android/src/main/cpp/cpp-adapter.cpp +4 -1
- package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +21 -13
- package/android/src/main/java/com/margelo/nitro/iap/NitroIapPackage.java +2 -6
- package/ios/HybridRnIap.swift +11 -6
- package/ios/RnIapHelper.swift +33 -1
- package/lib/module/hooks/useIAP.js +34 -13
- package/lib/module/hooks/useIAP.js.map +1 -1
- package/lib/module/index.js +17 -25
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.kepler.js +3 -2
- package/lib/module/index.kepler.js.map +1 -1
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/available-purchases.js +59 -0
- package/lib/module/utils/available-purchases.js.map +1 -0
- package/lib/module/utils/type-bridge.js +56 -6
- package/lib/module/utils/type-bridge.js.map +1 -1
- package/lib/module/vega-adapter.js +13 -7
- package/lib/module/vega-adapter.js.map +1 -1
- package/lib/typescript/src/hooks/useIAP.d.ts +1 -3
- package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +9 -11
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/index.kepler.d.ts +7 -7
- package/lib/typescript/src/index.kepler.d.ts.map +1 -1
- package/lib/typescript/src/specs/RnIap.nitro.d.ts +3 -1
- package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +11 -0
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/utils/available-purchases.d.ts +8 -0
- package/lib/typescript/src/utils/available-purchases.d.ts.map +1 -0
- package/lib/typescript/src/utils/error.d.ts +1 -1
- package/lib/typescript/src/utils/error.d.ts.map +1 -1
- package/lib/typescript/src/utils/errorMapping.d.ts +1 -1
- package/lib/typescript/src/utils/errorMapping.d.ts.map +1 -1
- package/lib/typescript/src/utils/purchase.d.ts +1 -1
- package/lib/typescript/src/utils/purchase.d.ts.map +1 -1
- package/lib/typescript/src/utils/type-bridge.d.ts +2 -2
- package/lib/typescript/src/utils/type-bridge.d.ts.map +1 -1
- package/lib/typescript/src/utils.d.ts +1 -1
- package/lib/typescript/src/utils.d.ts.map +1 -1
- package/lib/typescript/src/vega-adapter.d.ts +1 -1
- package/lib/typescript/src/vega-adapter.d.ts.map +1 -1
- package/lib/typescript/src/vega.d.ts +1 -1
- package/lib/typescript/src/vega.d.ts.map +1 -1
- package/lib/typescript/src/vega.kepler.d.ts +1 -1
- package/lib/typescript/src/vega.kepler.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JNitroPurchase.hpp +11 -3
- package/nitrogen/generated/android/c++/JPurchaseAndroid.hpp +11 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_DeveloperProvidedBillingDetailsAndroid.kt +0 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_NitroProduct.kt +0 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_NitroPurchase.kt +0 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_NitroPurchaseResult.kt +0 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_UserChoiceBillingDetails.kt +0 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/HybridRnIapSpec.kt +2 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchase.kt +14 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseAndroid.kt +14 -4
- package/nitrogen/generated/ios/swift/NitroPurchase.swift +75 -1
- package/nitrogen/generated/ios/swift/PurchaseAndroid.swift +75 -1
- package/nitrogen/generated/shared/c++/NitroPurchase.hpp +10 -2
- package/nitrogen/generated/shared/c++/PurchaseAndroid.hpp +10 -2
- package/openiap-versions.json +3 -3
- package/package.json +34 -37
- package/src/hooks/useIAP.ts +72 -41
- package/src/index.kepler.ts +5 -9
- package/src/index.ts +33 -61
- package/src/specs/RnIap.nitro.ts +2 -0
- package/src/types.ts +11 -0
- package/src/utils/available-purchases.ts +73 -0
- package/src/utils/type-bridge.ts +84 -11
- package/src/vega-adapter.ts +24 -3
- package/lib/module/types/react-test-renderer.d.js +0 -2
- package/lib/module/types/react-test-renderer.d.js.map +0 -1
- package/src/types/react-test-renderer.d.ts +0 -7
package/README.md
CHANGED
|
@@ -10,21 +10,6 @@
|
|
|
10
10
|
<a href="https://openiap.dev"><img src="https://raw.githubusercontent.com/hyodotdev/openiap/main/logo.png" alt="Open IAP" height="40" /></a>
|
|
11
11
|
</div>
|
|
12
12
|
|
|
13
|
-
## 🎨 Promotion
|
|
14
|
-
|
|
15
|
-
<div align="center">
|
|
16
|
-
<a href="https://hyodotdev.github.io/kstyled">
|
|
17
|
-
<img src="https://hyodotdev.github.io/kstyled/img/logo.png" alt="kstyled Logo" width="120" />
|
|
18
|
-
</a>
|
|
19
|
-
|
|
20
|
-
**Compile-time CSS-in-JS for React Native**
|
|
21
|
-
|
|
22
|
-
✨ Banishing runtime overhead, one style at a time with **[kstyled](https://hyodotdev.github.io/kstyled)** - fully type-safe styling that compiles away.
|
|
23
|
-
|
|
24
|
-
🚀 **[Explore kstyled →](https://hyodotdev.github.io/kstyled)**
|
|
25
|
-
|
|
26
|
-
</div>
|
|
27
|
-
|
|
28
13
|
## 📚 Documentation
|
|
29
14
|
|
|
30
15
|
**[📖 Visit our comprehensive documentation site →](https://openiap.dev/docs/setup/react-native)**
|
|
@@ -90,29 +75,16 @@ React Native IAP is built with a modern architecture that emphasizes:
|
|
|
90
75
|
|
|
91
76
|
Before installing React Native IAP, make sure you have:
|
|
92
77
|
|
|
93
|
-
- React Native 0.
|
|
94
|
-
- Node.js
|
|
78
|
+
- React Native 0.79 or later
|
|
79
|
+
- Node.js 18 or later (and any higher minimum required by your React Native version)
|
|
95
80
|
- iOS 15+ for iOS apps (StoreKit 2 requirement)
|
|
96
|
-
- Android API level
|
|
81
|
+
- Android API level 23+ for the library (and any higher minimum required by React Native)
|
|
97
82
|
|
|
98
83
|
### Post Installation
|
|
99
84
|
|
|
100
85
|
#### Android Configuration
|
|
101
86
|
|
|
102
|
-
**Kotlin
|
|
103
|
-
|
|
104
|
-
In your root `android/build.gradle`:
|
|
105
|
-
|
|
106
|
-
```gradle
|
|
107
|
-
buildscript {
|
|
108
|
-
ext {
|
|
109
|
-
kotlinVersion = "2.2.0"
|
|
110
|
-
}
|
|
111
|
-
dependencies {
|
|
112
|
-
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
```
|
|
87
|
+
**Kotlin compatibility:** React Native IAP uses the Kotlin and Android Gradle Plugin versions supplied by the host React Native project. Do not force the standalone OpenIAP fallback (`2.4.10`) into an older React Native template; keep the compiler line supported by that React Native release. The fallback is used only when the library is built outside a host that supplies those versions.
|
|
116
88
|
|
|
117
89
|
#### iOS Configuration
|
|
118
90
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
NitroIap_kotlinVersion=2.
|
|
1
|
+
NitroIap_kotlinVersion=2.4.10
|
|
2
2
|
NitroIap_androidGradlePluginVersion=8.13.2
|
|
3
|
-
NitroIap_coroutinesVersion=1.
|
|
4
|
-
NitroIap_playServicesBaseVersion=18.
|
|
3
|
+
NitroIap_coroutinesVersion=1.11.0
|
|
4
|
+
NitroIap_playServicesBaseVersion=18.10.0
|
|
5
5
|
NitroIap_junitVersion=4.13.2
|
|
6
6
|
NitroIap_minSdkVersion=23
|
|
7
7
|
NitroIap_targetSdkVersion=36
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#include <jni.h>
|
|
2
|
+
#include <fbjni/fbjni.h>
|
|
2
3
|
|
|
3
4
|
#ifdef ANDROID
|
|
4
5
|
#undef ANDROID
|
|
@@ -10,5 +11,7 @@
|
|
|
10
11
|
#include "NitroIapOnLoad.hpp"
|
|
11
12
|
|
|
12
13
|
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
|
|
13
|
-
return
|
|
14
|
+
return facebook::jni::initialize(vm, []() {
|
|
15
|
+
margelo::nitro::iap::registerAllNatives();
|
|
16
|
+
});
|
|
14
17
|
}
|
|
@@ -153,7 +153,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
153
153
|
private val connectionLifecycleQueue = ConnectionLifecycleQueue()
|
|
154
154
|
|
|
155
155
|
// Connection methods
|
|
156
|
-
// Variant wrapper helpers
|
|
156
|
+
// Variant wrapper helpers shared by the generated Nitrogen bindings.
|
|
157
157
|
private fun String?.wrapVariant(): Variant_NullType_String? = this?.let { Variant_NullType_String.Second(it) }
|
|
158
158
|
private fun Double?.wrapVariant(): Variant_NullType_Double? = this?.let { Variant_NullType_Double.Second(it) }
|
|
159
159
|
private fun Boolean?.wrapVariant(): Variant_NullType_Boolean? = this?.let { Variant_NullType_Boolean.Second(it) }
|
|
@@ -229,7 +229,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
229
229
|
})
|
|
230
230
|
openIap.addPurchaseErrorListener(OpenIapPurchaseErrorListener { e ->
|
|
231
231
|
val code = OpenIapError.toCode(e)
|
|
232
|
-
val message = e.message
|
|
232
|
+
val message = e.message
|
|
233
233
|
runCatching {
|
|
234
234
|
RnIapLog.result(
|
|
235
235
|
"purchaseErrorListener",
|
|
@@ -512,6 +512,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
512
512
|
return@async defaultResult
|
|
513
513
|
}
|
|
514
514
|
|
|
515
|
+
var reachedOpenIapRequest = false
|
|
515
516
|
try {
|
|
516
517
|
ensureConnection()
|
|
517
518
|
|
|
@@ -628,6 +629,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
628
629
|
)
|
|
629
630
|
|
|
630
631
|
val result = withContext(Dispatchers.Main) {
|
|
632
|
+
reachedOpenIapRequest = true
|
|
631
633
|
openIap.requestPurchase(requestProps)
|
|
632
634
|
}
|
|
633
635
|
val purchases = result.purchasesOrEmpty()
|
|
@@ -640,15 +642,19 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
640
642
|
)
|
|
641
643
|
|
|
642
644
|
defaultResult
|
|
645
|
+
} catch (e: CancellationException) {
|
|
646
|
+
throw e
|
|
643
647
|
} catch (e: Exception) {
|
|
644
648
|
RnIapLog.failure("requestPurchase", e)
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
649
|
+
if (!reachedOpenIapRequest) {
|
|
650
|
+
sendPurchaseError(
|
|
651
|
+
toErrorResult(
|
|
652
|
+
error = OpenIapError.PurchaseFailed(),
|
|
653
|
+
debugMessage = e.message,
|
|
654
|
+
messageOverride = e.message
|
|
655
|
+
)
|
|
650
656
|
)
|
|
651
|
-
|
|
657
|
+
}
|
|
652
658
|
defaultResult
|
|
653
659
|
}
|
|
654
660
|
}
|
|
@@ -1306,7 +1312,9 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1306
1312
|
obfuscatedProfileIdAndroid = androidPurchase?.obfuscatedProfileIdAndroid.wrapVariant(),
|
|
1307
1313
|
developerPayloadAndroid = androidPurchase?.developerPayloadAndroid.wrapVariant(),
|
|
1308
1314
|
isSuspendedAndroid = androidPurchase?.isSuspendedAndroid.wrapVariant(),
|
|
1309
|
-
pendingPurchaseUpdateAndroid = androidPurchase?.pendingPurchaseUpdateAndroid.wrapVariant()
|
|
1315
|
+
pendingPurchaseUpdateAndroid = androidPurchase?.pendingPurchaseUpdateAndroid.wrapVariant(),
|
|
1316
|
+
userIdAmazon = androidPurchase?.userIdAmazon.wrapVariant(),
|
|
1317
|
+
userMarketplaceAmazon = androidPurchase?.userMarketplaceAmazon.wrapVariant()
|
|
1310
1318
|
)
|
|
1311
1319
|
}
|
|
1312
1320
|
|
|
@@ -1565,7 +1573,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1565
1573
|
val nitroErrors = result.errors?.map { error ->
|
|
1566
1574
|
NitroVerifyPurchaseWithProviderError(
|
|
1567
1575
|
code = error.code?.let { Variant_NullType_String.Second(it) },
|
|
1568
|
-
message = error.message
|
|
1576
|
+
message = error.message
|
|
1569
1577
|
)
|
|
1570
1578
|
}?.toTypedArray()
|
|
1571
1579
|
|
|
@@ -2163,7 +2171,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
2163
2171
|
): String {
|
|
2164
2172
|
val code = OpenIapError.Companion.toCode(error)
|
|
2165
2173
|
val message = messageOverride?.takeIf { it.isNotBlank() }
|
|
2166
|
-
?: error.message
|
|
2174
|
+
?: error.message.takeIf { it.isNotBlank() }
|
|
2167
2175
|
?: OpenIapError.Companion.defaultMessage(code)
|
|
2168
2176
|
val diagnostics = error.toJSON()
|
|
2169
2177
|
val responseCode = (diagnostics["responseCode"] as? Number)?.toInt()
|
|
@@ -2187,7 +2195,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
2187
2195
|
debugMessage
|
|
2188
2196
|
?.let { errorMap["debugMessage"] = it }
|
|
2189
2197
|
?: (diagnostics["debugMessage"] as? String)?.let { errorMap["debugMessage"] = it }
|
|
2190
|
-
?: error.message
|
|
2198
|
+
?: error.message.let { errorMap["debugMessage"] = it }
|
|
2191
2199
|
diagnosticProductId?.let { errorMap["productId"] = it }
|
|
2192
2200
|
if (!productIds.isNullOrEmpty()) errorMap["productIds"] = productIds
|
|
2193
2201
|
productType?.let { errorMap["productType"] = it }
|
|
@@ -2259,7 +2267,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
2259
2267
|
): NitroPurchaseResult {
|
|
2260
2268
|
val code = OpenIapError.Companion.toCode(error)
|
|
2261
2269
|
val message = messageOverride?.takeIf { it.isNotBlank() }
|
|
2262
|
-
?: error.message
|
|
2270
|
+
?: error.message.takeIf { it.isNotBlank() }
|
|
2263
2271
|
?: OpenIapError.Companion.defaultMessage(code)
|
|
2264
2272
|
val diagnostics = error.toJSON()
|
|
2265
2273
|
val responseCode = (diagnostics["responseCode"] as? Number)?.toDouble()
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
package com.margelo.nitro.iap;
|
|
2
2
|
|
|
3
|
-
import android.util.Log;
|
|
4
|
-
|
|
5
3
|
import androidx.annotation.Nullable;
|
|
6
4
|
|
|
5
|
+
import com.facebook.react.BaseReactPackage;
|
|
7
6
|
import com.facebook.react.bridge.NativeModule;
|
|
8
7
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
9
8
|
import com.facebook.react.module.model.ReactModuleInfoProvider;
|
|
10
|
-
import com.facebook.react.TurboReactPackage;
|
|
11
|
-
import com.margelo.nitro.core.HybridObject;
|
|
12
9
|
|
|
13
10
|
import java.util.HashMap;
|
|
14
|
-
import java.util.function.Supplier;
|
|
15
11
|
|
|
16
|
-
public class NitroIapPackage extends
|
|
12
|
+
public class NitroIapPackage extends BaseReactPackage {
|
|
17
13
|
@Nullable
|
|
18
14
|
@Override
|
|
19
15
|
public NativeModule getModule(String name, ReactApplicationContext reactContext) {
|
package/ios/HybridRnIap.swift
CHANGED
|
@@ -311,7 +311,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
311
311
|
let purchaseOptions = try OpenIapSerialization.purchaseOptions(from: optionsDictionary)
|
|
312
312
|
RnIapLog.payload("getAvailablePurchases", optionsDictionary)
|
|
313
313
|
let purchases = try await OpenIapModule.shared.getAvailablePurchases(purchaseOptions)
|
|
314
|
-
let payloads = RnIapHelper.sanitizeArray(
|
|
314
|
+
let payloads = RnIapHelper.sanitizeArray(try RnIapHelper.purchasesRequired(purchases))
|
|
315
315
|
RnIapLog.result("getAvailablePurchases", payloads)
|
|
316
316
|
return payloads.map { RnIapHelper.convertPurchaseDictionary($0) }
|
|
317
317
|
} catch let purchaseError as PurchaseError {
|
|
@@ -331,7 +331,9 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
331
331
|
RnIapLog.payload("getActiveSubscriptions", subscriptionIds ?? [])
|
|
332
332
|
// Call OpenIAP's native getActiveSubscriptions - includes renewalInfoIOS!
|
|
333
333
|
let subscriptions = try await OpenIapModule.shared.getActiveSubscriptions(subscriptionIds)
|
|
334
|
-
let payloads = RnIapHelper.sanitizeArray(
|
|
334
|
+
let payloads = RnIapHelper.sanitizeArray(
|
|
335
|
+
try subscriptions.map { try RnIapHelper.encodeRequired($0) }
|
|
336
|
+
)
|
|
335
337
|
RnIapLog.result("getActiveSubscriptions", payloads)
|
|
336
338
|
return payloads.map { RnIapHelper.convertActiveSubscriptionDictionary($0) }
|
|
337
339
|
} catch let purchaseError as PurchaseError {
|
|
@@ -761,12 +763,15 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
761
763
|
}
|
|
762
764
|
}
|
|
763
765
|
}
|
|
764
|
-
let payloads = RnIapHelper.sanitizeArray(
|
|
766
|
+
let payloads = RnIapHelper.sanitizeArray(try RnIapHelper.purchasesRequired(unionPurchases))
|
|
765
767
|
RnIapLog.result("getPendingTransactionsIOS", payloads)
|
|
766
768
|
return payloads.map { RnIapHelper.convertPurchaseDictionary($0) }
|
|
769
|
+
} catch let purchaseError as PurchaseError {
|
|
770
|
+
RnIapLog.failure("getPendingTransactionsIOS", error: purchaseError)
|
|
771
|
+
throw OpenIapException.from(purchaseError)
|
|
767
772
|
} catch {
|
|
768
773
|
RnIapLog.failure("getPendingTransactionsIOS", error: error)
|
|
769
|
-
|
|
774
|
+
throw OpenIapException.make(code: .serviceError, message: error.localizedDescription)
|
|
770
775
|
}
|
|
771
776
|
}
|
|
772
777
|
}
|
|
@@ -792,7 +797,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
792
797
|
self.purchasePayloadById[key] = value
|
|
793
798
|
}
|
|
794
799
|
}
|
|
795
|
-
let payloads = RnIapHelper.sanitizeArray(
|
|
800
|
+
let payloads = RnIapHelper.sanitizeArray(try RnIapHelper.purchasesRequired(unionPurchases))
|
|
796
801
|
RnIapLog.result("getAllTransactionsIOS", payloads)
|
|
797
802
|
return payloads.map { RnIapHelper.convertPurchaseDictionary($0) }
|
|
798
803
|
} catch let purchaseError as PurchaseError {
|
|
@@ -829,7 +834,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
829
834
|
RnIapLog.payload("showManageSubscriptionsIOS", nil)
|
|
830
835
|
let changedPurchases = try await OpenIapModule.shared.showManageSubscriptionsIOS()
|
|
831
836
|
let unionPurchases = changedPurchases.map { OpenIAP.Purchase.purchaseIos($0) }
|
|
832
|
-
let payloads = RnIapHelper.sanitizeArray(
|
|
837
|
+
let payloads = RnIapHelper.sanitizeArray(try RnIapHelper.purchasesRequired(unionPurchases))
|
|
833
838
|
RnIapLog.result("showManageSubscriptionsIOS", payloads)
|
|
834
839
|
return payloads.map { RnIapHelper.convertPurchaseDictionary($0) }
|
|
835
840
|
} catch let purchaseError as PurchaseError {
|
package/ios/RnIapHelper.swift
CHANGED
|
@@ -65,6 +65,36 @@ enum RnIapHelper {
|
|
|
65
65
|
array.map { sanitizeDictionary($0) }
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
+
// The currently published native OpenIAP package reports an encoding
|
|
69
|
+
// failure as an empty dictionary. Reject that sentinel so a partial batch
|
|
70
|
+
// can never be surfaced as a successful query.
|
|
71
|
+
static func encodeRequired<T: Encodable>(_ value: T) throws -> [String: Any] {
|
|
72
|
+
let encoded = OpenIapSerialization.encode(value)
|
|
73
|
+
guard !encoded.isEmpty else {
|
|
74
|
+
throw PurchaseError.make(
|
|
75
|
+
code: .billingResponseJsonParseError,
|
|
76
|
+
message: "Failed to serialize native \(T.self) payload"
|
|
77
|
+
)
|
|
78
|
+
}
|
|
79
|
+
return encoded
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// The currently published native OpenIAP package reports an encoding
|
|
83
|
+
// failure as an empty dictionary. Reject that sentinel so a partial batch
|
|
84
|
+
// can never be surfaced as a successful purchase query.
|
|
85
|
+
static func purchasesRequired(_ purchases: [OpenIAP.Purchase]) throws -> [[String: Any]] {
|
|
86
|
+
try purchases.map { purchase in
|
|
87
|
+
let encoded = OpenIapSerialization.purchase(purchase)
|
|
88
|
+
guard !encoded.isEmpty else {
|
|
89
|
+
throw PurchaseError.make(
|
|
90
|
+
code: .billingResponseJsonParseError,
|
|
91
|
+
message: "Failed to serialize native purchase payload"
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
return encoded
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
68
98
|
// MARK: - Variant wrapper helpers
|
|
69
99
|
|
|
70
100
|
static func wrapString(_ value: String?) -> Variant_NullType_String? {
|
|
@@ -429,7 +459,9 @@ enum RnIapHelper {
|
|
|
429
459
|
obfuscatedProfileIdAndroid: nil,
|
|
430
460
|
developerPayloadAndroid: nil,
|
|
431
461
|
isSuspendedAndroid: nil,
|
|
432
|
-
pendingPurchaseUpdateAndroid: nil
|
|
462
|
+
pendingPurchaseUpdateAndroid: nil,
|
|
463
|
+
userIdAmazon: nil,
|
|
464
|
+
userMarketplaceAmazon: nil
|
|
433
465
|
)
|
|
434
466
|
}
|
|
435
467
|
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import { useCallback, useEffect, useState, useRef } from 'react';
|
|
5
5
|
import { Platform } from 'react-native';
|
|
6
6
|
import { RnIapConsole } from "../utils/debug.js";
|
|
7
|
+
import { createPurchaseError } from "../utils/errorMapping.js";
|
|
7
8
|
|
|
8
9
|
// Internal modules
|
|
9
10
|
import { initConnection, purchaseErrorListener, purchaseUpdatedListener, promotedProductListenerIOS, getAvailablePurchases, finishTransaction as finishTransactionInternal, requestPurchase as requestPurchaseInternal, fetchProducts, verifyPurchase as verifyPurchaseTopLevel, verifyPurchaseWithProvider as verifyPurchaseWithProviderTopLevel, getActiveSubscriptions, hasActiveSubscriptions, syncIOS, getPromotedProductIOS, getBillingChoiceInfoAndroid, isBillingProgramAvailableAndroid, createBillingProgramReportingDetailsAndroid, launchExternalLinkAndroid, showBillingProgramInformationDialogAndroid, showInAppMessagesAndroid, openRedeemOfferCodeAndroid, userChoiceBillingListenerAndroid, developerProvidedBillingListenerAndroid, subscriptionBillingIssueListener, isStandardIOS } from "../index.js";
|
|
@@ -47,7 +48,8 @@ export function useIAP(options) {
|
|
|
47
48
|
const subscriptionsRef = useRef({});
|
|
48
49
|
|
|
49
50
|
// Track if component is mounted to prevent listener leaks on early unmount
|
|
50
|
-
const isMountedRef = useRef(
|
|
51
|
+
const isMountedRef = useRef(false);
|
|
52
|
+
const initializationGenerationRef = useRef(0);
|
|
51
53
|
const subscriptionsRefState = useRef([]);
|
|
52
54
|
useEffect(() => {
|
|
53
55
|
subscriptionsRefState.current = subscriptions;
|
|
@@ -112,6 +114,7 @@ export function useIAP(options) {
|
|
|
112
114
|
} catch (error) {
|
|
113
115
|
RnIapConsole.error('Error fetching available purchases:', error);
|
|
114
116
|
invokeOnError(error);
|
|
117
|
+
throw error;
|
|
115
118
|
}
|
|
116
119
|
}, [invokeOnError]);
|
|
117
120
|
const getActiveSubscriptionsInternal = useCallback(async subscriptionIds => {
|
|
@@ -124,7 +127,7 @@ export function useIAP(options) {
|
|
|
124
127
|
} catch (error) {
|
|
125
128
|
RnIapConsole.error('Error getting active subscriptions:', error);
|
|
126
129
|
invokeOnError(error);
|
|
127
|
-
|
|
130
|
+
throw error;
|
|
128
131
|
}
|
|
129
132
|
}, [invokeOnError]);
|
|
130
133
|
const hasActiveSubscriptionsInternal = useCallback(async subscriptionIds => {
|
|
@@ -133,7 +136,7 @@ export function useIAP(options) {
|
|
|
133
136
|
} catch (error) {
|
|
134
137
|
RnIapConsole.error('Error checking active subscriptions:', error);
|
|
135
138
|
invokeOnError(error);
|
|
136
|
-
|
|
139
|
+
throw error;
|
|
137
140
|
}
|
|
138
141
|
}, [invokeOnError]);
|
|
139
142
|
const finishTransaction = useCallback(async args => {
|
|
@@ -148,15 +151,26 @@ export function useIAP(options) {
|
|
|
148
151
|
await requestPurchaseInternal(requestObj);
|
|
149
152
|
}, []);
|
|
150
153
|
const restorePurchases = useCallback(async options => {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
await syncIOS();
|
|
154
|
+
if (Platform.OS === 'ios') {
|
|
155
|
+
try {
|
|
156
|
+
const synced = await syncIOS();
|
|
157
|
+
if (!synced) {
|
|
158
|
+
throw createPurchaseError({
|
|
159
|
+
code: ErrorCode.SyncError,
|
|
160
|
+
message: 'App Store purchase sync did not complete',
|
|
161
|
+
platform: 'ios'
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
} catch (error) {
|
|
165
|
+
RnIapConsole.warn('Failed to restore purchases:', error);
|
|
166
|
+
invokeOnError(error);
|
|
167
|
+
throw error;
|
|
154
168
|
}
|
|
155
|
-
await getAvailablePurchasesInternal(options);
|
|
156
|
-
} catch (error) {
|
|
157
|
-
RnIapConsole.warn('Failed to restore purchases:', error);
|
|
158
|
-
invokeOnError(error);
|
|
159
169
|
}
|
|
170
|
+
|
|
171
|
+
// The query helper reports and rethrows its own error, avoiding a second
|
|
172
|
+
// onError call while keeping restore failure observable to the caller.
|
|
173
|
+
await getAvailablePurchasesInternal(options);
|
|
160
174
|
}, [getAvailablePurchasesInternal, invokeOnError]);
|
|
161
175
|
const verifyPurchase = useCallback(async options => {
|
|
162
176
|
return verifyPurchaseTopLevel(options);
|
|
@@ -256,11 +270,14 @@ export function useIAP(options) {
|
|
|
256
270
|
subscriptionsRef.current.developerProvidedBillingAndroid = undefined;
|
|
257
271
|
subscriptionsRef.current.subscriptionBillingIssue = undefined;
|
|
258
272
|
}, []);
|
|
259
|
-
const initIapWithSubscriptions = useCallback(async
|
|
273
|
+
const initIapWithSubscriptions = useCallback(async generation => {
|
|
274
|
+
if (!isMountedRef.current || initializationGenerationRef.current !== generation) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
260
277
|
const config = buildAndroidConfig();
|
|
261
278
|
try {
|
|
262
279
|
const result = await initConnection(config);
|
|
263
|
-
if (!isMountedRef.current) {
|
|
280
|
+
if (!isMountedRef.current || initializationGenerationRef.current !== generation) {
|
|
264
281
|
return;
|
|
265
282
|
}
|
|
266
283
|
if (!result) {
|
|
@@ -276,6 +293,9 @@ export function useIAP(options) {
|
|
|
276
293
|
registerListeners();
|
|
277
294
|
setConnected(true);
|
|
278
295
|
} catch (error) {
|
|
296
|
+
if (!isMountedRef.current || initializationGenerationRef.current !== generation) {
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
279
299
|
RnIapConsole.error('initConnection failed:', error);
|
|
280
300
|
cleanupListeners();
|
|
281
301
|
if (isMountedRef.current) {
|
|
@@ -309,8 +329,9 @@ export function useIAP(options) {
|
|
|
309
329
|
}
|
|
310
330
|
}, [buildAndroidConfig, registerListeners, cleanupListeners, invokeOnError]);
|
|
311
331
|
useEffect(() => {
|
|
332
|
+
const generation = ++initializationGenerationRef.current;
|
|
312
333
|
isMountedRef.current = true;
|
|
313
|
-
initIapWithSubscriptions();
|
|
334
|
+
void Promise.resolve().then(() => initIapWithSubscriptions(generation));
|
|
314
335
|
return () => {
|
|
315
336
|
isMountedRef.current = false;
|
|
316
337
|
cleanupListeners();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useCallback","useEffect","useState","useRef","Platform","RnIapConsole","initConnection","purchaseErrorListener","purchaseUpdatedListener","promotedProductListenerIOS","getAvailablePurchases","finishTransaction","finishTransactionInternal","requestPurchase","requestPurchaseInternal","fetchProducts","verifyPurchase","verifyPurchaseTopLevel","verifyPurchaseWithProvider","verifyPurchaseWithProviderTopLevel","getActiveSubscriptions","hasActiveSubscriptions","syncIOS","getPromotedProductIOS","getBillingChoiceInfoAndroid","isBillingProgramAvailableAndroid","createBillingProgramReportingDetailsAndroid","launchExternalLinkAndroid","showBillingProgramInformationDialogAndroid","showInAppMessagesAndroid","openRedeemOfferCodeAndroid","userChoiceBillingListenerAndroid","developerProvidedBillingListenerAndroid","subscriptionBillingIssueListener","isStandardIOS","ErrorCode","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","isMountedRef","subscriptionsRefState","invokeOnError","error","onError","Error","String","fetchProductsInternal","params","warn","requestType","type","debug","skus","result","length","items","prevSubscriptions","subscription","id","newProducts","filter","item","newSubscriptions","prevProducts","product","getAvailablePurchasesInternal","alsoPublishToEventListenerIOS","onlyIncludeActiveItemsIOS","includeSuspendedAndroid","getActiveSubscriptionsInternal","subscriptionIds","hasActiveSubscriptionsInternal","args","requestObj","restorePurchases","OS","buildAndroidConfig","config","enableBillingProgramAndroid","billingChoiceScreenTypeAndroid","registerListeners","purchaseUpdate","purchase","e","onPurchaseSuccess","purchaseUpdatedListenerOptions","purchaseError","code","InitConnection","onPurchaseError","onPromotedProductIOS","onUserChoiceBillingAndroid","userChoiceBillingAndroid","details","onDeveloperProvidedBillingAndroid","developerProvidedBillingAndroid","subscriptionBillingIssue","onSubscriptionBillingIssue","cleanupListeners","remove","undefined","initIapWithSubscriptions","reconnect"],"sourceRoot":"../../../src","sources":["hooks/useIAP.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useCallback","useEffect","useState","useRef","Platform","RnIapConsole","createPurchaseError","initConnection","purchaseErrorListener","purchaseUpdatedListener","promotedProductListenerIOS","getAvailablePurchases","finishTransaction","finishTransactionInternal","requestPurchase","requestPurchaseInternal","fetchProducts","verifyPurchase","verifyPurchaseTopLevel","verifyPurchaseWithProvider","verifyPurchaseWithProviderTopLevel","getActiveSubscriptions","hasActiveSubscriptions","syncIOS","getPromotedProductIOS","getBillingChoiceInfoAndroid","isBillingProgramAvailableAndroid","createBillingProgramReportingDetailsAndroid","launchExternalLinkAndroid","showBillingProgramInformationDialogAndroid","showInAppMessagesAndroid","openRedeemOfferCodeAndroid","userChoiceBillingListenerAndroid","developerProvidedBillingListenerAndroid","subscriptionBillingIssueListener","isStandardIOS","ErrorCode","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","isMountedRef","initializationGenerationRef","subscriptionsRefState","invokeOnError","error","onError","Error","String","fetchProductsInternal","params","warn","requestType","type","debug","skus","result","length","items","prevSubscriptions","subscription","id","newProducts","filter","item","newSubscriptions","prevProducts","product","getAvailablePurchasesInternal","alsoPublishToEventListenerIOS","onlyIncludeActiveItemsIOS","includeSuspendedAndroid","getActiveSubscriptionsInternal","subscriptionIds","hasActiveSubscriptionsInternal","args","requestObj","restorePurchases","OS","synced","code","SyncError","message","platform","buildAndroidConfig","config","enableBillingProgramAndroid","billingChoiceScreenTypeAndroid","registerListeners","purchaseUpdate","purchase","e","onPurchaseSuccess","purchaseUpdatedListenerOptions","purchaseError","InitConnection","onPurchaseError","onPromotedProductIOS","onUserChoiceBillingAndroid","userChoiceBillingAndroid","details","onDeveloperProvidedBillingAndroid","developerProvidedBillingAndroid","subscriptionBillingIssue","onSubscriptionBillingIssue","cleanupListeners","remove","undefined","initIapWithSubscriptions","generation","reconnect","Promise","resolve","then"],"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;AAC3C,SAAQC,mBAAmB,QAAO,0BAAuB;;AAEzD;AACA,SACEC,cAAc,EACdC,qBAAqB,EACrBC,uBAAuB,EACvBC,0BAA0B,EAC1BC,qBAAqB,EACrBC,iBAAiB,IAAIC,yBAAyB,EAC9CC,eAAe,IAAIC,uBAAuB,EAC1CC,aAAa,EACbC,cAAc,IAAIC,sBAAsB,EACxCC,0BAA0B,IAAIC,kCAAkC,EAChEC,sBAAsB,EACtBC,sBAAsB,EACtBC,OAAO,EACPC,qBAAqB,EACrBC,2BAA2B,EAC3BC,gCAAgC,EAChCC,2CAA2C,EAC3CC,yBAAyB,EACzBC,0CAA0C,EAC1CC,wBAAwB,EACxBC,0BAA0B,EAC1BC,gCAAgC,EAChCC,uCAAuC,EACvCC,gCAAgC,EAChCC,aAAa,QACR,aAAK;;AAEZ;AACA,SAAQC,SAAS,QAAO,aAAU;;AAwBlC;;AA8OA;AACA;AACA;AACA;AACA,OAAO,SAASC,MAAMA,CAACC,OAAuB,EAAU;EACtD,MAAM,CAACC,SAAS,EAAEC,YAAY,CAAC,GAAGtC,QAAQ,CAAU,KAAK,CAAC;EAC1D,MAAM,CAACuC,QAAQ,EAAEC,WAAW,CAAC,GAAGxC,QAAQ,CAAY,EAAE,CAAC;EACvD,MAAM,CAACyC,aAAa,EAAEC,gBAAgB,CAAC,GAAG1C,QAAQ,CAAwB,EAAE,CAAC;EAC7E,MAAM,CAAC2C,kBAAkB,EAAEC,qBAAqB,CAAC,GAAG5C,QAAQ,CAAa,EAAE,CAAC;EAC5E,MAAM,CAAC6C,kBAAkB,EAAEC,qBAAqB,CAAC,GAAG9C,QAAQ,CAAU,CAAC;EACvE,MAAM,CAAC+C,mBAAmB,EAAEC,sBAAsB,CAAC,GAAGhD,QAAQ,CAE5D,EAAE,CAAC;EAEL,MAAMiD,UAAU,GAAGhD,MAAM,CAA4BmC,OAAO,CAAC;EAC7D,MAAMc,YAAY,GAAGjD,MAAM,CAAU,KAAK,CAAC;;EAE3C;EACA,MAAMkD,uBAAuB,GAAGrD,WAAW,CACzC,CACEsD,aAAkB,EAClBC,QAAa,EACbC,MAA2B,KACnB;IACR,MAAMC,MAAM,GAAG,CAAC,GAAGH,aAAa,CAAC;IACjCC,QAAQ,CAACG,OAAO,CAAEC,OAAO,IAAK;MAC5B,MAAMC,WAAW,GAAGH,MAAM,CAACI,IAAI,CAC5BC,YAAY,IAAKN,MAAM,CAACM,YAAY,CAAC,KAAKN,MAAM,CAACG,OAAO,CAC3D,CAAC;MACD,IAAI,CAACC,WAAW,EAAE;QAChBH,MAAM,CAACM,IAAI,CAACJ,OAAO,CAAC;MACtB;IACF,CAAC,CAAC;IACF,OAAOF,MAAM;EACf,CAAC,EACD,EACF,CAAC;EAEDxD,SAAS,CAAC,MAAM;IACdkD,UAAU,CAACa,OAAO,GAAG1B,OAAO;EAC9B,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEbrC,SAAS,CAAC,MAAM;IACdmD,YAAY,CAACY,OAAO,GAAGzB,SAAS;EAClC,CAAC,EAAE,CAACA,SAAS,CAAC,CAAC;EAEf,MAAM0B,gBAAgB,GAAG9D,MAAM,CAO5B,CAAC,CAAC,CAAC;;EAEN;EACA,MAAM+D,YAAY,GAAG/D,MAAM,CAAU,KAAK,CAAC;EAC3C,MAAMgE,2BAA2B,GAAGhE,MAAM,CAAC,CAAC,CAAC;EAE7C,MAAMiE,qBAAqB,GAAGjE,MAAM,CAAwB,EAAE,CAAC;EAE/DF,SAAS,CAAC,MAAM;IACdmE,qBAAqB,CAACJ,OAAO,GAAGrB,aAAa;EAC/C,CAAC,EAAE,CAACA,aAAa,CAAC,CAAC;;EAEnB;EACA,MAAM0B,aAAa,GAAGrE,WAAW,CAAEsE,KAAc,IAAK;IACpD,IAAInB,UAAU,CAACa,OAAO,EAAEO,OAAO,EAAE;MAC/BpB,UAAU,CAACa,OAAO,CAACO,OAAO,CACxBD,KAAK,YAAYE,KAAK,GAAGF,KAAK,GAAG,IAAIE,KAAK,CAACC,MAAM,CAACH,KAAK,CAAC,CAC1D,CAAC;IACH;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMI,qBAAqB,GAAG1E,WAAW,CACvC,MAAO2E,MAGN,IAAoB;IACnB,IAAI,CAACvB,YAAY,CAACY,OAAO,EAAE;MACzB3D,YAAY,CAACuE,IAAI,CACf,2DACF,CAAC;MACD;IACF;IACA,IAAI;MACF,MAAMC,WAAW,GAAGF,MAAM,CAACG,IAAI,IAAI,QAAQ;MAC3CzE,YAAY,CAAC0E,KAAK,CAAC,sCAAsC,EAAE;QACzDC,IAAI,EAAEL,MAAM,CAACK,IAAI;QACjBF,IAAI,EAAED;MACR,CAAC,CAAC;MACF,MAAMI,MAAM,GAAG,MAAMjE,aAAa,CAAC;QACjCgE,IAAI,EAAEL,MAAM,CAACK,IAAI;QACjBF,IAAI,EAAED;MACR,CAAC,CAAC;MACFxE,YAAY,CAAC0E,KAAK,CAChB,+BAA+B,EAC/BE,MAAM,EAAEC,MAAM,IAAI,CACpB,CAAC;MACD,MAAMC,KAAK,GAAIF,MAAM,IAAI,EAAwC;;MAEjE;MACA,IAAIJ,WAAW,KAAK,MAAM,EAAE;QAC1B;QACAjC,gBAAgB,CAAEwC,iBAAwC,IACxD/B,uBAAuB,CACrB+B,iBAAiB,EACjBD,KAAK,EACJE,YAAiC,IAAKA,YAAY,CAACC,EACtD,CACF,CAAC;QACD;MACF;MAEA,IAAIT,WAAW,KAAK,KAAK,EAAE;QACzB;QACA,MAAMU,WAAW,GAAGJ,KAAK,CAACK,MAAM,CAC7BC,IAAI,IAAsBA,IAAI,CAACX,IAAI,KAAK,QAC3C,CAAC;QACD,MAAMY,gBAAgB,GAAGP,KAAK,CAACK,MAAM,CAClCC,IAAI,IAAkCA,IAAI,CAACX,IAAI,KAAK,MACvD,CAAC;QAEDpC,WAAW,CAAEiD,YAAuB,IAClCtC,uBAAuB,CACrBsC,YAAY,EACZJ,WAAW,EACVK,OAAgB,IAAKA,OAAO,CAACN,EAChC,CACF,CAAC;QACD1C,gBAAgB,CAAEwC,iBAAwC,IACxD/B,uBAAuB,CACrB+B,iBAAiB,EACjBM,gBAAgB,EACfL,YAAiC,IAAKA,YAAY,CAACC,EACtD,CACF,CAAC;QACD;MACF;;MAEA;MACA5C,WAAW,CAAEiD,YAAuB,IAClCtC,uBAAuB,CACrBsC,YAAY,EACZR,KAAK,EACJS,OAAgB,IAAKA,OAAO,CAACN,EAChC,CACF,CAAC;IACH,CAAC,CAAC,OAAOhB,KAAK,EAAE;MACdjE,YAAY,CAACiE,KAAK,CAAC,0BAA0B,EAAEA,KAAK,CAAC;MACrDD,aAAa,CAACC,KAAK,CAAC;IACtB;EACF,CAAC,EACD,CAACjB,uBAAuB,EAAEgB,aAAa,CACzC,CAAC;EAED,MAAMwB,6BAA6B,GAAG7F,WAAW,CAC/C,MAAOsC,OAAyB,IAAoB;IAClD,IAAI;MACF,MAAM2C,MAAM,GAAG,MAAMtE,qBAAqB,CAAC;QACzCmF,6BAA6B,EAC3BxD,OAAO,EAAEwD,6BAA6B,IAAI,KAAK;QACjDC,yBAAyB,EAAEzD,OAAO,EAAEyD,yBAAyB,IAAI,IAAI;QACrEC,uBAAuB,EAAE1D,OAAO,EAAE0D,uBAAuB,IAAI;MAC/D,CAAC,CAAC;MACF,IAAI9B,YAAY,CAACF,OAAO,EAAE;QACxBlB,qBAAqB,CAACmC,MAAM,CAAC;MAC/B;IACF,CAAC,CAAC,OAAOX,KAAK,EAAE;MACdjE,YAAY,CAACiE,KAAK,CAAC,qCAAqC,EAAEA,KAAK,CAAC;MAChED,aAAa,CAACC,KAAK,CAAC;MACpB,MAAMA,KAAK;IACb;EACF,CAAC,EACD,CAACD,aAAa,CAChB,CAAC;EAED,MAAM4B,8BAA8B,GAAGjG,WAAW,CAChD,MAAOkG,eAA0B,IAAoC;IACnE,IAAI;MACF,MAAMjB,MAAM,GAAG,MAAM5D,sBAAsB,CAAC6E,eAAe,CAAC;MAC5D,IAAIhC,YAAY,CAACF,OAAO,EAAE;QACxBd,sBAAsB,CAAC+B,MAAM,CAAC;MAChC;MACA,OAAOA,MAAM;IACf,CAAC,CAAC,OAAOX,KAAK,EAAE;MACdjE,YAAY,CAACiE,KAAK,CAAC,qCAAqC,EAAEA,KAAK,CAAC;MAChED,aAAa,CAACC,KAAK,CAAC;MACpB,MAAMA,KAAK;IACb;EACF,CAAC,EACD,CAACD,aAAa,CAChB,CAAC;EAED,MAAM8B,8BAA8B,GAAGnG,WAAW,CAChD,MAAOkG,eAA0B,IAAuB;IACtD,IAAI;MACF,OAAO,MAAM5E,sBAAsB,CAAC4E,eAAe,CAAC;IACtD,CAAC,CAAC,OAAO5B,KAAK,EAAE;MACdjE,YAAY,CAACiE,KAAK,CAAC,sCAAsC,EAAEA,KAAK,CAAC;MACjED,aAAa,CAACC,KAAK,CAAC;MACpB,MAAMA,KAAK;IACb;EACF,CAAC,EACD,CAACD,aAAa,CAChB,CAAC;EAED,MAAMzD,iBAAiB,GAAGZ,WAAW,CACnC,MAAOoG,IAAmC,IAAoB;IAC5D;IACA;IACA;IACA;IACA;IACA,MAAMvF,yBAAyB,CAACuF,IAAI,CAAC;EACvC,CAAC,EACD,EACF,CAAC;EAED,MAAMtF,eAAe,GAAGd,WAAW,CACjC,MAAOqG,UAAgC,IAAoB;IACzD,MAAMtF,uBAAuB,CAACsF,UAAU,CAAC;EAC3C,CAAC,EACD,EACF,CAAC;EAED,MAAMC,gBAAgB,GAAGtG,WAAW,CAClC,MAAOsC,OAAyB,IAAoB;IAClD,IAAIlC,QAAQ,CAACmG,EAAE,KAAK,KAAK,EAAE;MACzB,IAAI;QACF,MAAMC,MAAM,GAAG,MAAMjF,OAAO,CAAC,CAAC;QAC9B,IAAI,CAACiF,MAAM,EAAE;UACX,MAAMlG,mBAAmB,CAAC;YACxBmG,IAAI,EAAErE,SAAS,CAACsE,SAAS;YACzBC,OAAO,EAAE,0CAA0C;YACnDC,QAAQ,EAAE;UACZ,CAAC,CAAC;QACJ;MACF,CAAC,CAAC,OAAOtC,KAAK,EAAE;QACdjE,YAAY,CAACuE,IAAI,CAAC,8BAA8B,EAAEN,KAAK,CAAC;QACxDD,aAAa,CAACC,KAAK,CAAC;QACpB,MAAMA,KAAK;MACb;IACF;;IAEA;IACA;IACA,MAAMuB,6BAA6B,CAACvD,OAAO,CAAC;EAC9C,CAAC,EACD,CAACuD,6BAA6B,EAAExB,aAAa,CAC/C,CAAC;EAED,MAAMpD,cAAc,GAAGjB,WAAW,CAChC,MAAOsC,OAA4B,IAAoC;IACrE,OAAOpB,sBAAsB,CAACoB,OAAO,CAAC;EACxC,CAAC,EACD,EACF,CAAC;EAED,MAAMnB,0BAA0B,GAAGnB,WAAW,CAC5C,MACEsC,OAAwC,IACM;IAC9C,OAAOlB,kCAAkC,CAACkB,OAAO,CAAC;EACpD,CAAC,EACD,EACF,CAAC;;EAED;EACA,MAAMuE,kBAAkB,GAAG7G,WAAW,CAAC,MAAM;IAC3C,IAAI8G,MAKS;IAEb,IAAI1G,QAAQ,CAACmG,EAAE,KAAK,SAAS,EAAE;MAC7B,IAAIpD,UAAU,CAACa,OAAO,EAAE+C,2BAA2B,EAAE;QACnDD,MAAM,GAAG;UACPC,2BAA2B,EACzB5D,UAAU,CAACa,OAAO,CAAC+C,2BAA2B;UAChD,IAAI5D,UAAU,CAACa,OAAO,CAACgD,8BAA8B,GACjD;YACEA,8BAA8B,EAC5B7D,UAAU,CAACa,OAAO,CAACgD;UACvB,CAAC,GACD,CAAC,CAAC;QACR,CAAC;MACH;IACF;IAEA,OAAOF,MAAM;EACf,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,MAAMG,iBAAiB,GAAGjH,WAAW,CAAC,MAAM;IAC1C,IAAI,CAACiE,gBAAgB,CAACD,OAAO,CAACkD,cAAc,EAAE;MAC5CjD,gBAAgB,CAACD,OAAO,CAACkD,cAAc,GAAGzG,uBAAuB,CAC/D,MAAO0G,QAAkB,IAAK;QAC5B,IAAI;UACF,MAAMlB,8BAA8B,CAAC,CAAC;UACtC,MAAMJ,6BAA6B,CAAC,CAAC;QACvC,CAAC,CAAC,OAAOuB,CAAC,EAAE;UACV/G,YAAY,CAACuE,IAAI,CAAC,wCAAwC,EAAEwC,CAAC,CAAC;QAChE;;QAEA;QACA;QACA;QACA;QACA,IAAIjE,UAAU,CAACa,OAAO,EAAEqD,iBAAiB,EAAE;UACzClE,UAAU,CAACa,OAAO,CAACqD,iBAAiB,CAACF,QAAQ,CAAC;QAChD;MACF,CAAC,EACDhE,UAAU,CAACa,OAAO,EAAEsD,8BACtB,CAAC;IACH;IAEA,IAAI,CAACrD,gBAAgB,CAACD,OAAO,CAACuD,aAAa,EAAE;MAC3CtD,gBAAgB,CAACD,OAAO,CAACuD,aAAa,GAAG/G,qBAAqB,CAC3D8D,KAAK,IAAK;QACT,IACEA,KAAK,CAACmC,IAAI,KAAKrE,SAAS,CAACoF,cAAc,IACvC,CAACpE,YAAY,CAACY,OAAO,EACrB;UACA;QACF;QACA,IAAIb,UAAU,CAACa,OAAO,EAAEyD,eAAe,EAAE;UACvCtE,UAAU,CAACa,OAAO,CAACyD,eAAe,CAACnD,KAAK,CAAC;QAC3C;MACF,CACF,CAAC;IACH;IAEA,IAAInC,aAAa,CAAC,CAAC,IAAI,CAAC8B,gBAAgB,CAACD,OAAO,CAACjB,kBAAkB,EAAE;MACnEkB,gBAAgB,CAACD,OAAO,CAACjB,kBAAkB,GAAGrC,0BAA0B,CACrEkF,OAAgB,IAAK;QACpB5C,qBAAqB,CAAC4C,OAAO,CAAC;QAC9B,IAAIzC,UAAU,CAACa,OAAO,EAAE0D,oBAAoB,EAAE;UAC5CvE,UAAU,CAACa,OAAO,CAAC0D,oBAAoB,CAAC9B,OAAO,CAAC;QAClD;MACF,CACF,CAAC;IACH;IAEA,IACExF,QAAQ,CAACmG,EAAE,KAAK,SAAS,IACzBpD,UAAU,CAACa,OAAO,EAAE2D,0BAA0B,IAC9C,CAAC1D,gBAAgB,CAACD,OAAO,CAAC4D,wBAAwB,EAClD;MACA3D,gBAAgB,CAACD,OAAO,CAAC4D,wBAAwB,GAC/C5F,gCAAgC,CAAE6F,OAAO,IAAK;QAC5C,IAAI1E,UAAU,CAACa,OAAO,EAAE2D,0BAA0B,EAAE;UAClDxE,UAAU,CAACa,OAAO,CAAC2D,0BAA0B,CAACE,OAAO,CAAC;QACxD;MACF,CAAC,CAAC;IACN;IAEA,IACEzH,QAAQ,CAACmG,EAAE,KAAK,SAAS,IACzBpD,UAAU,CAACa,OAAO,EAAE8D,iCAAiC,IACrD,CAAC7D,gBAAgB,CAACD,OAAO,CAAC+D,+BAA+B,EACzD;MACA9D,gBAAgB,CAACD,OAAO,CAAC+D,+BAA+B,GACtD9F,uCAAuC,CAAE4F,OAAO,IAAK;QACnD1E,UAAU,CAACa,OAAO,EAAE8D,iCAAiC,GAAGD,OAAO,CAAC;MAClE,CAAC,CAAC;IACN;;IAEA;IACA;IACA,IAAI,CAAC5D,gBAAgB,CAACD,OAAO,CAACgE,wBAAwB,EAAE;MACtD/D,gBAAgB,CAACD,OAAO,CAACgE,wBAAwB,GAC/C9F,gCAAgC,CAAEiF,QAAkB,IAAK;QACvDhE,UAAU,CAACa,OAAO,EAAEiE,0BAA0B,GAAGd,QAAQ,CAAC;MAC5D,CAAC,CAAC;IACN;EACF,CAAC,EAAE,CAAClB,8BAA8B,EAAEJ,6BAA6B,CAAC,CAAC;;EAEnE;EACA,MAAMqC,gBAAgB,GAAGlI,WAAW,CAAC,MAAM;IACzCiE,gBAAgB,CAACD,OAAO,CAACkD,cAAc,EAAEiB,MAAM,CAAC,CAAC;IACjDlE,gBAAgB,CAACD,OAAO,CAACuD,aAAa,EAAEY,MAAM,CAAC,CAAC;IAChDlE,gBAAgB,CAACD,OAAO,CAACjB,kBAAkB,EAAEoF,MAAM,CAAC,CAAC;IACrDlE,gBAAgB,CAACD,OAAO,CAAC4D,wBAAwB,EAAEO,MAAM,CAAC,CAAC;IAC3DlE,gBAAgB,CAACD,OAAO,CAAC+D,+BAA+B,EAAEI,MAAM,CAAC,CAAC;IAClElE,gBAAgB,CAACD,OAAO,CAACgE,wBAAwB,EAAEG,MAAM,CAAC,CAAC;IAC3DlE,gBAAgB,CAACD,OAAO,CAACkD,cAAc,GAAGkB,SAAS;IACnDnE,gBAAgB,CAACD,OAAO,CAACuD,aAAa,GAAGa,SAAS;IAClDnE,gBAAgB,CAACD,OAAO,CAACjB,kBAAkB,GAAGqF,SAAS;IACvDnE,gBAAgB,CAACD,OAAO,CAAC4D,wBAAwB,GAAGQ,SAAS;IAC7DnE,gBAAgB,CAACD,OAAO,CAAC+D,+BAA+B,GAAGK,SAAS;IACpEnE,gBAAgB,CAACD,OAAO,CAACgE,wBAAwB,GAAGI,SAAS;EAC/D,CAAC,EAAE,EAAE,CAAC;EAEN,MAAMC,wBAAwB,GAAGrI,WAAW,CAC1C,MAAOsI,UAAkB,IAAoB;IAC3C,IACE,CAACpE,YAAY,CAACF,OAAO,IACrBG,2BAA2B,CAACH,OAAO,KAAKsE,UAAU,EAClD;MACA;IACF;IAEA,MAAMxB,MAAM,GAAGD,kBAAkB,CAAC,CAAC;IAEnC,IAAI;MACF,MAAM5B,MAAM,GAAG,MAAM1E,cAAc,CAACuG,MAAM,CAAC;MAE3C,IACE,CAAC5C,YAAY,CAACF,OAAO,IACrBG,2BAA2B,CAACH,OAAO,KAAKsE,UAAU,EAClD;QACA;MACF;MAEA,IAAI,CAACrD,MAAM,EAAE;QACXiD,gBAAgB,CAAC,CAAC;QAClB1F,YAAY,CAAC,KAAK,CAAC;QACnBnC,YAAY,CAACuE,IAAI,CAAC,wCAAwC,CAAC;QAC3D;MACF;;MAEA;MACA;MACA;MACAqC,iBAAiB,CAAC,CAAC;MACnBzE,YAAY,CAAC,IAAI,CAAC;IACpB,CAAC,CAAC,OAAO8B,KAAK,EAAE;MACd,IACE,CAACJ,YAAY,CAACF,OAAO,IACrBG,2BAA2B,CAACH,OAAO,KAAKsE,UAAU,EAClD;QACA;MACF;MACAjI,YAAY,CAACiE,KAAK,CAAC,wBAAwB,EAAEA,KAAK,CAAC;MACnD4D,gBAAgB,CAAC,CAAC;MAClB,IAAIhE,YAAY,CAACF,OAAO,EAAE;QACxBxB,YAAY,CAAC,KAAK,CAAC;MACrB;MACA6B,aAAa,CAACC,KAAK,CAAC;IACtB;EACF,CAAC,EACD,CAACuC,kBAAkB,EAAEI,iBAAiB,EAAEiB,gBAAgB,EAAE7D,aAAa,CACzE,CAAC;EAED,MAAMkE,SAAS,GAAGvI,WAAW,CAAC,YAA8B;IAC1D,MAAM8G,MAAM,GAAGD,kBAAkB,CAAC,CAAC;IAEnC,IAAI;MACF,MAAM5B,MAAM,GAAG,MAAM1E,cAAc,CAACuG,MAAM,CAAC;MAE3C,IAAI,CAAC5C,YAAY,CAACF,OAAO,EAAE;QACzB,OAAO,KAAK;MACd;MAEA,IAAIiB,MAAM,EAAE;QACVgC,iBAAiB,CAAC,CAAC;QACnBzE,YAAY,CAAC,IAAI,CAAC;QAClB,OAAO,IAAI;MACb;MAEAA,YAAY,CAAC,KAAK,CAAC;MACnB,OAAO,KAAK;IACd,CAAC,CAAC,OAAO8B,KAAK,EAAE;MACdjE,YAAY,CAACiE,KAAK,CAAC,4BAA4B,EAAEA,KAAK,CAAC;MACvD4D,gBAAgB,CAAC,CAAC;MAClB,IAAIhE,YAAY,CAACF,OAAO,EAAE;QACxBxB,YAAY,CAAC,KAAK,CAAC;MACrB;MACA6B,aAAa,CAACC,KAAK,CAAC;MACpB,OAAO,KAAK;IACd;EACF,CAAC,EAAE,CAACuC,kBAAkB,EAAEI,iBAAiB,EAAEiB,gBAAgB,EAAE7D,aAAa,CAAC,CAAC;EAE5EpE,SAAS,CAAC,MAAM;IACd,MAAMqI,UAAU,GAAG,EAAEnE,2BAA2B,CAACH,OAAO;IACxDE,YAAY,CAACF,OAAO,GAAG,IAAI;IAC3B,KAAKwE,OAAO,CAACC,OAAO,CAAC,CAAC,CAACC,IAAI,CAAC,MAAML,wBAAwB,CAACC,UAAU,CAAC,CAAC;IAEvE,OAAO,MAAM;MACXpE,YAAY,CAACF,OAAO,GAAG,KAAK;MAC5BkE,gBAAgB,CAAC,CAAC;MAClB;MACA1F,YAAY,CAAC,KAAK,CAAC;IACrB,CAAC;EACH,CAAC,EAAE,CAAC6F,wBAAwB,EAAEH,gBAAgB,CAAC,CAAC;EAEhD,OAAO;IACL3F,SAAS;IACTE,QAAQ;IACRE,aAAa;IACb/B,iBAAiB;IACjBiC,kBAAkB;IAClBE,kBAAkB;IAClBE,mBAAmB;IACnBtC,qBAAqB,EAAEkF,6BAA6B;IACpD7E,aAAa,EAAE0D,qBAAqB;IACpC5D,eAAe;IACfG,cAAc;IACdE,0BAA0B;IAC1BmF,gBAAgB;IAChB9E,qBAAqB;IACrBH,sBAAsB,EAAE4E,8BAA8B;IACtD3E,sBAAsB,EAAE6E,8BAA8B;IACtDoC,SAAS;IACT;IACA,IAAInI,QAAQ,CAACmG,EAAE,KAAK,SAAS,GACzB;MACE9E,2BAA2B;MAC3BC,gCAAgC;MAChCC,2CAA2C;MAC3CC,yBAAyB;MACzBC,0CAA0C;MAC1CC,wBAAwB;MACxBC;IACF,CAAC,GACD,CAAC,CAAC;EACR,CAAC;AACH","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
// External dependencies
|
|
4
4
|
import { Platform } from 'react-native';
|
|
5
|
-
//
|
|
6
|
-
import 'react-native-nitro-modules';
|
|
5
|
+
// Importing NitroModules installs its dispatcher before IAP is used (no-op in tests).
|
|
7
6
|
import { NitroModules } from 'react-native-nitro-modules';
|
|
8
7
|
|
|
9
8
|
// Internal modules
|
|
@@ -15,15 +14,15 @@ import { normalizeErrorCodeFromNative, createPurchaseError, DUPLICATE_PURCHASE_C
|
|
|
15
14
|
import { RnIapConsole } from "./utils/debug.js";
|
|
16
15
|
import { getSuccessFromPurchaseVariant } from "./utils/purchase.js";
|
|
17
16
|
import { parseAppTransactionPayload } from "./utils.js";
|
|
17
|
+
import { convertAndroidPurchasesOrThrow, convertApplePurchasesOrThrow } from "./utils/available-purchases.js";
|
|
18
18
|
import { getVegaIapModule, isVegaOS } from "./vega.js";
|
|
19
19
|
|
|
20
20
|
// ------------------------------
|
|
21
21
|
// Billing Programs API (Android 8.2.0+)
|
|
22
22
|
// ------------------------------
|
|
23
23
|
|
|
24
|
-
//
|
|
24
|
+
// BillingProgramAndroid, ExternalLinkLaunchModeAndroid, and ExternalLinkTypeAndroid
|
|
25
25
|
// are exported from './types' (auto-generated from openiap-gql).
|
|
26
|
-
// Import them here for use in this file's interfaces and functions.
|
|
27
26
|
|
|
28
27
|
// Export all types
|
|
29
28
|
|
|
@@ -698,11 +697,7 @@ export const getAvailablePurchases = async options => {
|
|
|
698
697
|
}
|
|
699
698
|
};
|
|
700
699
|
const nitroPurchases = await IAP.instance.getAvailablePurchases(nitroOptions);
|
|
701
|
-
|
|
702
|
-
if (validPurchases.length !== nitroPurchases.length) {
|
|
703
|
-
RnIapConsole.warn(`[getAvailablePurchases] Some purchases failed validation: ${nitroPurchases.length - validPurchases.length} invalid`);
|
|
704
|
-
}
|
|
705
|
-
return validPurchases.map(convertNitroPurchaseToPurchase);
|
|
700
|
+
return convertApplePurchasesOrThrow(nitroPurchases);
|
|
706
701
|
} else if (isAndroidStoreRuntime()) {
|
|
707
702
|
const includeSuspended = Boolean(options?.includeSuspendedAndroid ?? false);
|
|
708
703
|
if (isVegaOS()) {
|
|
@@ -711,11 +706,7 @@ export const getAvailablePurchases = async options => {
|
|
|
711
706
|
includeSuspended
|
|
712
707
|
}
|
|
713
708
|
});
|
|
714
|
-
|
|
715
|
-
if (validPurchases.length !== nitroPurchases.length) {
|
|
716
|
-
RnIapConsole.warn(`[getAvailablePurchases] Some Vega purchases failed validation: ${nitroPurchases.length - validPurchases.length} invalid`);
|
|
717
|
-
}
|
|
718
|
-
return validPurchases.map(convertNitroPurchaseToPurchase);
|
|
709
|
+
return convertAndroidPurchasesOrThrow(nitroPurchases);
|
|
719
710
|
}
|
|
720
711
|
|
|
721
712
|
// For Android Play/Horizon/Fire OS, query in-app items and subscriptions separately.
|
|
@@ -731,14 +722,8 @@ export const getAvailablePurchases = async options => {
|
|
|
731
722
|
includeSuspended
|
|
732
723
|
}
|
|
733
724
|
});
|
|
734
|
-
|
|
735
|
-
// Validate and convert both sets of purchases
|
|
736
725
|
const allNitroPurchases = [...inappNitroPurchases, ...subsNitroPurchases];
|
|
737
|
-
|
|
738
|
-
if (validPurchases.length !== allNitroPurchases.length) {
|
|
739
|
-
RnIapConsole.warn(`[getAvailablePurchases] Some Android purchases failed validation: ${allNitroPurchases.length - validPurchases.length} invalid`);
|
|
740
|
-
}
|
|
741
|
-
return validPurchases.map(convertNitroPurchaseToPurchase);
|
|
726
|
+
return convertAndroidPurchasesOrThrow(allNitroPurchases);
|
|
742
727
|
} else {
|
|
743
728
|
throw unsupportedPlatformError();
|
|
744
729
|
}
|
|
@@ -960,7 +945,7 @@ export const getPendingTransactionsIOS = async () => {
|
|
|
960
945
|
}
|
|
961
946
|
try {
|
|
962
947
|
const nitroPurchases = await IAP.instance.getPendingTransactionsIOS();
|
|
963
|
-
return nitroPurchases
|
|
948
|
+
return convertApplePurchasesOrThrow(nitroPurchases);
|
|
964
949
|
} catch (error) {
|
|
965
950
|
const parsedError = parseErrorAndLogIfNeeded('[getPendingTransactionsIOS] Failed:', error);
|
|
966
951
|
throw createPurchaseError({
|
|
@@ -983,7 +968,7 @@ export const getAllTransactionsIOS = async () => {
|
|
|
983
968
|
}
|
|
984
969
|
try {
|
|
985
970
|
const nitroPurchases = await IAP.instance.getAllTransactionsIOS();
|
|
986
|
-
return nitroPurchases
|
|
971
|
+
return convertApplePurchasesOrThrow(nitroPurchases);
|
|
987
972
|
} catch (error) {
|
|
988
973
|
const parsedError = parseErrorAndLogIfNeeded('[getAllTransactionsIOS] Failed:', error);
|
|
989
974
|
throw createPurchaseError({
|
|
@@ -1008,7 +993,7 @@ export const showManageSubscriptionsIOS = async () => {
|
|
|
1008
993
|
}
|
|
1009
994
|
try {
|
|
1010
995
|
const nitroPurchases = await IAP.instance.showManageSubscriptionsIOS();
|
|
1011
|
-
return nitroPurchases
|
|
996
|
+
return convertApplePurchasesOrThrow(nitroPurchases);
|
|
1012
997
|
} catch (error) {
|
|
1013
998
|
const parsedError = parseErrorAndLogIfNeeded('[showManageSubscriptionsIOS] Failed:', error);
|
|
1014
999
|
throw createPurchaseError({
|
|
@@ -1215,7 +1200,14 @@ export const endConnection = async () => {
|
|
|
1215
1200
|
export const restorePurchases = async () => {
|
|
1216
1201
|
try {
|
|
1217
1202
|
if (Platform.OS === 'ios') {
|
|
1218
|
-
await syncIOS();
|
|
1203
|
+
const synced = await syncIOS();
|
|
1204
|
+
if (!synced) {
|
|
1205
|
+
throw createPurchaseError({
|
|
1206
|
+
code: ErrorCode.SyncError,
|
|
1207
|
+
message: 'App Store purchase sync did not complete',
|
|
1208
|
+
platform: 'ios'
|
|
1209
|
+
});
|
|
1210
|
+
}
|
|
1219
1211
|
}
|
|
1220
1212
|
await getAvailablePurchases({
|
|
1221
1213
|
alsoPublishToEventListenerIOS: false,
|