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.
Files changed (75) hide show
  1. package/README.md +4 -32
  2. package/android/gradle.properties +3 -3
  3. package/android/src/main/cpp/cpp-adapter.cpp +4 -1
  4. package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +21 -13
  5. package/android/src/main/java/com/margelo/nitro/iap/NitroIapPackage.java +2 -6
  6. package/ios/HybridRnIap.swift +11 -6
  7. package/ios/RnIapHelper.swift +33 -1
  8. package/lib/module/hooks/useIAP.js +34 -13
  9. package/lib/module/hooks/useIAP.js.map +1 -1
  10. package/lib/module/index.js +17 -25
  11. package/lib/module/index.js.map +1 -1
  12. package/lib/module/index.kepler.js +3 -2
  13. package/lib/module/index.kepler.js.map +1 -1
  14. package/lib/module/types.js.map +1 -1
  15. package/lib/module/utils/available-purchases.js +59 -0
  16. package/lib/module/utils/available-purchases.js.map +1 -0
  17. package/lib/module/utils/type-bridge.js +56 -6
  18. package/lib/module/utils/type-bridge.js.map +1 -1
  19. package/lib/module/vega-adapter.js +13 -7
  20. package/lib/module/vega-adapter.js.map +1 -1
  21. package/lib/typescript/src/hooks/useIAP.d.ts +1 -3
  22. package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
  23. package/lib/typescript/src/index.d.ts +9 -11
  24. package/lib/typescript/src/index.d.ts.map +1 -1
  25. package/lib/typescript/src/index.kepler.d.ts +7 -7
  26. package/lib/typescript/src/index.kepler.d.ts.map +1 -1
  27. package/lib/typescript/src/specs/RnIap.nitro.d.ts +3 -1
  28. package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -1
  29. package/lib/typescript/src/types.d.ts +11 -0
  30. package/lib/typescript/src/types.d.ts.map +1 -1
  31. package/lib/typescript/src/utils/available-purchases.d.ts +8 -0
  32. package/lib/typescript/src/utils/available-purchases.d.ts.map +1 -0
  33. package/lib/typescript/src/utils/error.d.ts +1 -1
  34. package/lib/typescript/src/utils/error.d.ts.map +1 -1
  35. package/lib/typescript/src/utils/errorMapping.d.ts +1 -1
  36. package/lib/typescript/src/utils/errorMapping.d.ts.map +1 -1
  37. package/lib/typescript/src/utils/purchase.d.ts +1 -1
  38. package/lib/typescript/src/utils/purchase.d.ts.map +1 -1
  39. package/lib/typescript/src/utils/type-bridge.d.ts +2 -2
  40. package/lib/typescript/src/utils/type-bridge.d.ts.map +1 -1
  41. package/lib/typescript/src/utils.d.ts +1 -1
  42. package/lib/typescript/src/utils.d.ts.map +1 -1
  43. package/lib/typescript/src/vega-adapter.d.ts +1 -1
  44. package/lib/typescript/src/vega-adapter.d.ts.map +1 -1
  45. package/lib/typescript/src/vega.d.ts +1 -1
  46. package/lib/typescript/src/vega.d.ts.map +1 -1
  47. package/lib/typescript/src/vega.kepler.d.ts +1 -1
  48. package/lib/typescript/src/vega.kepler.d.ts.map +1 -1
  49. package/nitrogen/generated/android/c++/JNitroPurchase.hpp +11 -3
  50. package/nitrogen/generated/android/c++/JPurchaseAndroid.hpp +11 -3
  51. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_DeveloperProvidedBillingDetailsAndroid.kt +0 -2
  52. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_NitroProduct.kt +0 -2
  53. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_NitroPurchase.kt +0 -2
  54. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_NitroPurchaseResult.kt +0 -2
  55. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_UserChoiceBillingDetails.kt +0 -2
  56. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/HybridRnIapSpec.kt +2 -0
  57. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchase.kt +14 -4
  58. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseAndroid.kt +14 -4
  59. package/nitrogen/generated/ios/swift/NitroPurchase.swift +75 -1
  60. package/nitrogen/generated/ios/swift/PurchaseAndroid.swift +75 -1
  61. package/nitrogen/generated/shared/c++/NitroPurchase.hpp +10 -2
  62. package/nitrogen/generated/shared/c++/PurchaseAndroid.hpp +10 -2
  63. package/openiap-versions.json +3 -3
  64. package/package.json +34 -37
  65. package/src/hooks/useIAP.ts +72 -41
  66. package/src/index.kepler.ts +5 -9
  67. package/src/index.ts +33 -61
  68. package/src/specs/RnIap.nitro.ts +2 -0
  69. package/src/types.ts +11 -0
  70. package/src/utils/available-purchases.ts +73 -0
  71. package/src/utils/type-bridge.ts +84 -11
  72. package/src/vega-adapter.ts +24 -3
  73. package/lib/module/types/react-test-renderer.d.js +0 -2
  74. package/lib/module/types/react-test-renderer.d.js.map +0 -1
  75. 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.64 or later
94
- - Node.js 16 or later
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 21+ for Android apps
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 Version Requirement:** This library requires Kotlin 2.2+. Configure your project's Kotlin version:
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.2.0
1
+ NitroIap_kotlinVersion=2.4.10
2
2
  NitroIap_androidGradlePluginVersion=8.13.2
3
- NitroIap_coroutinesVersion=1.9.0
4
- NitroIap_playServicesBaseVersion=18.5.0
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 margelo::nitro::iap::initialize(vm);
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 for nitrogen 0.35.0 compatibility
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 ?: OpenIapError.defaultMessage(code)
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
- sendPurchaseError(
646
- toErrorResult(
647
- error = OpenIapError.PurchaseFailed(),
648
- debugMessage = e.message,
649
- messageOverride = e.message
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?.takeIf { it.isNotBlank() }
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?.let { errorMap["debugMessage"] = it }
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?.takeIf { it.isNotBlank() }
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 TurboReactPackage {
12
+ public class NitroIapPackage extends BaseReactPackage {
17
13
  @Nullable
18
14
  @Override
19
15
  public NativeModule getModule(String name, ReactApplicationContext reactContext) {
@@ -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(OpenIapSerialization.purchases(purchases))
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(subscriptions.map { OpenIapSerialization.encode($0) })
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(OpenIapSerialization.purchases(unionPurchases))
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
- return []
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(OpenIapSerialization.purchases(unionPurchases))
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(OpenIapSerialization.purchases(unionPurchases))
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 {
@@ -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(true);
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
- return [];
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
- return false;
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
- try {
152
- if (Platform.OS === 'ios') {
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":"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","ignoreList":[]}
@@ -2,8 +2,7 @@
2
2
 
3
3
  // External dependencies
4
4
  import { Platform } from 'react-native';
5
- // Side-effect import ensures Nitro installs its dispatcher before IAP is used (no-op in tests)
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
- // Note: BillingProgramAndroid, ExternalLinkLaunchModeAndroid, and ExternalLinkTypeAndroid
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
- const validPurchases = nitroPurchases.filter(validateNitroPurchase);
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
- const validPurchases = nitroPurchases.filter(validateNitroPurchase);
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
- const validPurchases = allNitroPurchases.filter(validateNitroPurchase);
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.map(convertNitroPurchaseToPurchase).filter(purchase => purchase.store === 'apple');
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.map(convertNitroPurchaseToPurchase).filter(purchase => purchase.store === 'apple');
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.map(convertNitroPurchaseToPurchase).filter(purchase => purchase.store === 'apple');
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,