react-native-iap 15.5.4 → 15.6.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 (39) hide show
  1. package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +135 -11
  2. package/android/src/main/java/com/margelo/nitro/iap/PendingEventBuffer.kt +86 -0
  3. package/ios/HybridRnIap.swift +6 -0
  4. package/lib/module/hooks/useIAP.js +8 -2
  5. package/lib/module/hooks/useIAP.js.map +1 -1
  6. package/lib/module/index.js +33 -0
  7. package/lib/module/index.js.map +1 -1
  8. package/lib/module/index.kepler.js +1 -0
  9. package/lib/module/index.kepler.js.map +1 -1
  10. package/lib/module/types.js.map +1 -1
  11. package/lib/module/vega-adapter.js +3 -0
  12. package/lib/module/vega-adapter.js.map +1 -1
  13. package/lib/typescript/src/hooks/useIAP.d.ts +2 -0
  14. package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
  15. package/lib/typescript/src/index.d.ts +19 -0
  16. package/lib/typescript/src/index.d.ts.map +1 -1
  17. package/lib/typescript/src/index.kepler.d.ts +1 -0
  18. package/lib/typescript/src/index.kepler.d.ts.map +1 -1
  19. package/lib/typescript/src/specs/RnIap.nitro.d.ts +8 -0
  20. package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -1
  21. package/lib/typescript/src/types.d.ts +15 -0
  22. package/lib/typescript/src/types.d.ts.map +1 -1
  23. package/lib/typescript/src/vega-adapter.d.ts.map +1 -1
  24. package/nitrogen/generated/android/c++/JHybridRnIapSpec.cpp +16 -0
  25. package/nitrogen/generated/android/c++/JHybridRnIapSpec.hpp +1 -0
  26. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/HybridRnIapSpec.kt +4 -0
  27. package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.hpp +8 -0
  28. package/nitrogen/generated/ios/swift/HybridRnIapSpec.swift +1 -0
  29. package/nitrogen/generated/ios/swift/HybridRnIapSpec_cxx.swift +19 -0
  30. package/nitrogen/generated/shared/c++/HybridRnIapSpec.cpp +1 -0
  31. package/nitrogen/generated/shared/c++/HybridRnIapSpec.hpp +1 -0
  32. package/openiap-versions.json +2 -2
  33. package/package.json +1 -1
  34. package/src/hooks/useIAP.ts +8 -0
  35. package/src/index.kepler.ts +4 -0
  36. package/src/index.ts +35 -0
  37. package/src/specs/RnIap.nitro.ts +9 -0
  38. package/src/types.ts +15 -0
  39. package/src/vega-adapter.ts +4 -0
@@ -86,6 +86,26 @@ internal suspend fun endRnConnectionWithCleanup(
86
86
  cleanup()
87
87
  }
88
88
 
89
+ /**
90
+ * Removes the singleton JS fan-out listener without relying on callback identity.
91
+ * Nitro creates a fresh Kotlin callback wrapper for each bridge invocation, so
92
+ * the wrapper received by remove is not equal to the one received by add.
93
+ */
94
+ internal fun <T> removeSingletonBridgeListener(
95
+ registeredListeners: MutableList<T>,
96
+ @Suppress("UNUSED_PARAMETER") removalWrapper: T,
97
+ ) {
98
+ synchronized(registeredListeners) {
99
+ registeredListeners.clear()
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Bound for the pending purchase-event queues, matching expo-iap's
105
+ * ExpoIapHelper.MAX_BUFFERED_EVENTS. Oldest entries are dropped on overflow.
106
+ */
107
+ private const val MAX_PENDING_EVENTS = 200
108
+
89
109
  class HybridRnIap : HybridRnIapSpec() {
90
110
  private data class PurchaseUpdatedListenerRegistration(
91
111
  val token: Double,
@@ -105,6 +125,26 @@ class HybridRnIap : HybridRnIapSpec() {
105
125
  private val purchaseUpdatedListeners = mutableListOf<PurchaseUpdatedListenerRegistration>()
106
126
  private var nextPurchaseUpdatedListenerToken = 1.0
107
127
  private val purchaseErrorListeners = mutableListOf<(NitroPurchaseResult) -> Unit>()
128
+
129
+ // Pending purchase events buffered while ZERO bridge listeners are attached
130
+ // (GitHub issue #166). Mirrors expo-iap's ExpoIapHelper.emitOrQueue bounded
131
+ // queue (MAX_BUFFERED_EVENTS = 200, drop-oldest on overflow); expo buffers
132
+ // purchase errors the same way, so both channels queue here. Covers:
133
+ // 1. events fired during initConnection before JS listeners attach
134
+ // (e.g. the already-owned recovery republish), and
135
+ // 2. events fired while all screens are unmounted, flushed on remount.
136
+ // Queued events are flushed FIFO using a listener snapshot per batch. A
137
+ // listener added during a flush receives later arrivals, but not backlog
138
+ // that predates its registration.
139
+ // Like expo (which clears its queue when the connection lifecycle ends),
140
+ // endConnection clears these queues; they survive plain unmount/remount
141
+ // because useIAP keeps the connection alive across screens.
142
+ private val pendingPurchaseUpdates = PendingEventBuffer<NitroPurchase>(MAX_PENDING_EVENTS) {
143
+ RnIapLog.warn("pendingPurchaseUpdates overflow; dropping oldest")
144
+ }
145
+ private val pendingPurchaseErrors = PendingEventBuffer<NitroPurchaseResult>(MAX_PENDING_EVENTS) {
146
+ RnIapLog.warn("pendingPurchaseErrors overflow; dropping oldest")
147
+ }
108
148
  private val promotedProductListenersIOS = mutableListOf<(NitroProduct) -> Unit>()
109
149
  private val userChoiceBillingListenersAndroid = mutableListOf<(UserChoiceBillingDetails) -> Unit>()
110
150
  private val developerProvidedBillingListenersAndroid = mutableListOf<(DeveloperProvidedBillingDetailsAndroid) -> Unit>()
@@ -362,11 +402,18 @@ class HybridRnIap : HybridRnIapSpec() {
362
402
  productTypeBySku.clear()
363
403
  isInitialized = false
364
404
  // Native listener sets persist; clear only bridge callbacks.
405
+ // Pending event queues are cleared with them: like expo-iap
406
+ // (whose buffer resets when the connection lifecycle ends),
407
+ // buffered events do not survive an explicit endConnection.
365
408
  synchronized(purchaseUpdatedListeners) {
366
409
  purchaseUpdatedListeners.clear()
367
410
  nextPurchaseUpdatedListenerToken = 1.0
411
+ pendingPurchaseUpdates.clear()
412
+ }
413
+ synchronized(purchaseErrorListeners) {
414
+ purchaseErrorListeners.clear()
415
+ pendingPurchaseErrors.clear()
368
416
  }
369
- synchronized(purchaseErrorListeners) { purchaseErrorListeners.clear() }
370
417
  promotedProductListenersIOS.clear()
371
418
  synchronized(userChoiceBillingListenersAndroid) { userChoiceBillingListenersAndroid.clear() }
372
419
  synchronized(developerProvidedBillingListenersAndroid) { developerProvidedBillingListenersAndroid.clear() }
@@ -891,18 +938,59 @@ class HybridRnIap : HybridRnIapSpec() {
891
938
  listener: (purchase: NitroPurchase) -> Unit,
892
939
  options: PurchaseUpdatedListenerOptions?
893
940
  ): Double {
894
- return synchronized(purchaseUpdatedListeners) {
941
+ val (token, shouldFlush) = synchronized(purchaseUpdatedListeners) {
895
942
  val token = nextPurchaseUpdatedListenerToken
896
943
  nextPurchaseUpdatedListenerToken += 1.0
897
944
  purchaseUpdatedListeners.add(PurchaseUpdatedListenerRegistration(token, listener))
898
- token
945
+ val shouldFlush = pendingPurchaseUpdates.beginFlushIfNeeded()
946
+ token to shouldFlush
899
947
  }
948
+ if (shouldFlush) flushPendingPurchaseUpdates()
949
+ return token
900
950
  }
901
951
 
902
952
  override fun addPurchaseErrorListener(listener: (error: NitroPurchaseResult) -> Unit) {
903
- synchronized(purchaseErrorListeners) {
953
+ val shouldFlush = synchronized(purchaseErrorListeners) {
904
954
  purchaseErrorListeners.add(listener)
955
+ pendingPurchaseErrors.beginFlushIfNeeded()
905
956
  }
957
+ if (shouldFlush) flushPendingPurchaseErrors()
958
+ }
959
+
960
+ private fun flushPendingPurchaseUpdates() {
961
+ drainPendingEvents(
962
+ takeDelivery = {
963
+ synchronized(purchaseUpdatedListeners) {
964
+ pendingPurchaseUpdates.takeBatchOrFinish()?.let { backlog ->
965
+ PendingEventDelivery(
966
+ events = backlog,
967
+ listeners = purchaseUpdatedListeners.map { it.listener },
968
+ )
969
+ }
970
+ }
971
+ },
972
+ onDeliveryFailure = {
973
+ RnIapLog.failure("purchaseUpdatedListener.flush", it)
974
+ }
975
+ )
976
+ }
977
+
978
+ private fun flushPendingPurchaseErrors() {
979
+ drainPendingEvents(
980
+ takeDelivery = {
981
+ synchronized(purchaseErrorListeners) {
982
+ pendingPurchaseErrors.takeBatchOrFinish()?.let { backlog ->
983
+ PendingEventDelivery(
984
+ events = backlog,
985
+ listeners = ArrayList(purchaseErrorListeners),
986
+ )
987
+ }
988
+ }
989
+ },
990
+ onDeliveryFailure = {
991
+ RnIapLog.failure("purchaseErrorListener.flush", it)
992
+ }
993
+ )
906
994
  }
907
995
 
908
996
  override fun removePurchaseUpdatedListener(token: Double) {
@@ -912,9 +1000,10 @@ class HybridRnIap : HybridRnIapSpec() {
912
1000
  }
913
1001
 
914
1002
  override fun removePurchaseErrorListener(listener: (error: NitroPurchaseResult) -> Unit) {
915
- synchronized(purchaseErrorListeners) {
916
- purchaseErrorListeners.remove(listener)
917
- }
1003
+ // The JS layer registers one native fan-out callback and calls remove
1004
+ // only after its final JS subscriber detaches. Clearing also matches
1005
+ // iOS and removes stale registrations left by earlier remounts.
1006
+ removeSingletonBridgeListener(purchaseErrorListeners, listener)
918
1007
  }
919
1008
 
920
1009
  override fun addPromotedProductListenerIOS(listener: (product: NitroProduct) -> Unit) {
@@ -935,7 +1024,10 @@ class HybridRnIap : HybridRnIapSpec() {
935
1024
  // Helper methods
936
1025
 
937
1026
  /**
938
- * Send purchase update event to listeners
1027
+ * Send purchase update event to listeners.
1028
+ * With zero listeners attached the event is buffered (bounded, drop-oldest)
1029
+ * instead of dropped, and flushed FIFO when a listener registers.
1030
+ * Events delivered to at least one listener are never queued.
939
1031
  */
940
1032
  private fun sendPurchaseUpdate(purchase: NitroPurchase) {
941
1033
  RnIapLog.result(
@@ -943,20 +1035,32 @@ class HybridRnIap : HybridRnIapSpec() {
943
1035
  mapOf("productId" to purchase.productId, "platform" to purchase.platform)
944
1036
  )
945
1037
  val snapshot = synchronized(purchaseUpdatedListeners) {
946
- purchaseUpdatedListeners.map { it.listener }
1038
+ if (pendingPurchaseUpdates.enqueueIfNeeded(purchaseUpdatedListeners.isNotEmpty(), purchase)) {
1039
+ emptyList()
1040
+ } else {
1041
+ purchaseUpdatedListeners.map { it.listener }
1042
+ }
947
1043
  }
948
1044
  snapshot.forEach { it(purchase) }
949
1045
  }
950
1046
 
951
1047
  /**
952
- * Send purchase error event to listeners
1048
+ * Send purchase error event to listeners.
1049
+ * Mirrors sendPurchaseUpdate: buffered (bounded, drop-oldest) while zero
1050
+ * listeners are attached, flushed FIFO when a listener registers.
953
1051
  */
954
1052
  private fun sendPurchaseError(error: NitroPurchaseResult) {
955
1053
  RnIapLog.result(
956
1054
  "sendPurchaseError",
957
1055
  mapOf("code" to error.code, "message" to error.message)
958
1056
  )
959
- val snapshot = synchronized(purchaseErrorListeners) { ArrayList(purchaseErrorListeners) }
1057
+ val snapshot = synchronized(purchaseErrorListeners) {
1058
+ if (pendingPurchaseErrors.enqueueIfNeeded(purchaseErrorListeners.isNotEmpty(), error)) {
1059
+ emptyList()
1060
+ } else {
1061
+ ArrayList(purchaseErrorListeners)
1062
+ }
1063
+ }
960
1064
  snapshot.forEach { it(error) }
961
1065
  }
962
1066
 
@@ -1983,6 +2087,26 @@ class HybridRnIap : HybridRnIapSpec() {
1983
2087
  }
1984
2088
  }
1985
2089
 
2090
+ override fun openRedeemOfferCodeAndroid(): Promise<Boolean> {
2091
+ return Promise.async {
2092
+ RnIapLog.payload("openRedeemOfferCodeAndroid", null)
2093
+ try {
2094
+ withContext(Dispatchers.Main) {
2095
+ runCatching { context.currentActivity }.getOrNull()?.let(openIap::setActivity)
2096
+ }
2097
+ val handler = openIap.mutationHandlers.openRedeemOfferCodeAndroid
2098
+ ?: throw OpenIapError.FeatureNotSupported()
2099
+ val result = handler()
2100
+ RnIapLog.result("openRedeemOfferCodeAndroid", result)
2101
+ result
2102
+ } catch (err: Throwable) {
2103
+ RnIapLog.failure("openRedeemOfferCodeAndroid", err)
2104
+ val errorType = parseOpenIapError(err)
2105
+ throw OpenIapException(toErrorJson(errorType, debugMessage = err.message), err)
2106
+ }
2107
+ }
2108
+ }
2109
+
1986
2110
  // Billing Programs helper functions
1987
2111
  private fun mapBillingProgram(program: BillingProgramAndroid): OpenIapBillingProgramAndroid {
1988
2112
  return when (program) {
@@ -0,0 +1,86 @@
1
+ package com.margelo.nitro.iap
2
+
3
+ /**
4
+ * Bounded FIFO used while a bridge has no listener or is flushing a backlog.
5
+ *
6
+ * This class is intentionally not synchronized. Callers must invoke every
7
+ * method while holding the same lock that protects their listener registry so
8
+ * listener changes and queue state remain atomic.
9
+ */
10
+ internal class PendingEventBuffer<T>(
11
+ private val capacity: Int,
12
+ private val onOverflow: () -> Unit,
13
+ ) {
14
+ private val events = ArrayDeque<T>()
15
+ private var isFlushing = false
16
+
17
+ init {
18
+ require(capacity > 0) { "capacity must be greater than zero" }
19
+ }
20
+
21
+ /** Returns true when [event] was queued instead of delivered live. */
22
+ fun enqueueIfNeeded(
23
+ hasListeners: Boolean,
24
+ event: T,
25
+ ): Boolean {
26
+ if (hasListeners && !isFlushing) return false
27
+
28
+ if (events.size >= capacity) {
29
+ events.removeFirst()
30
+ onOverflow()
31
+ }
32
+ events.addLast(event)
33
+ return true
34
+ }
35
+
36
+ /** Marks the buffer as flushing when a pending backlog exists. */
37
+ fun beginFlushIfNeeded(): Boolean {
38
+ if (isFlushing || events.isEmpty()) return false
39
+ isFlushing = true
40
+ return true
41
+ }
42
+
43
+ /**
44
+ * Takes the current FIFO batch. A null result completes the flush and lets
45
+ * subsequent events resume live delivery.
46
+ */
47
+ fun takeBatchOrFinish(): List<T>? {
48
+ if (events.isEmpty()) {
49
+ isFlushing = false
50
+ return null
51
+ }
52
+ return events.toList().also { events.clear() }
53
+ }
54
+
55
+ fun clear() {
56
+ events.clear()
57
+ isFlushing = false
58
+ }
59
+ }
60
+
61
+ internal data class PendingEventDelivery<T>(
62
+ val events: List<T>,
63
+ val listeners: List<(T) -> Unit>,
64
+ )
65
+
66
+ /**
67
+ * Drains FIFO batches against a fresh listener snapshot for each batch.
68
+ *
69
+ * Events already present when a flush begins go only to listeners registered
70
+ * for that batch. Listeners added while callbacks run are included in the next
71
+ * batch, so they receive events that arrived after their registration without
72
+ * receiving the earlier backlog.
73
+ */
74
+ internal fun <T> drainPendingEvents(
75
+ takeDelivery: () -> PendingEventDelivery<T>?,
76
+ onDeliveryFailure: (Throwable) -> Unit,
77
+ ) {
78
+ while (true) {
79
+ val delivery = takeDelivery() ?: return
80
+ delivery.events.forEach { event ->
81
+ delivery.listeners.forEach { listener ->
82
+ runCatching { listener(event) }.onFailure(onDeliveryFailure)
83
+ }
84
+ }
85
+ }
86
+ }
@@ -1506,6 +1506,12 @@ class HybridRnIap: HybridRnIapSpec {
1506
1506
  }
1507
1507
  }
1508
1508
 
1509
+ func openRedeemOfferCodeAndroid() throws -> Promise<Bool> {
1510
+ return Promise.async {
1511
+ throw OpenIapException.make(code: .featureNotSupported, message: "Offer-code redemption is Android-only")
1512
+ }
1513
+ }
1514
+
1509
1515
  // MARK: - External Purchase (iOS 16.0+)
1510
1516
 
1511
1517
  func canPresentExternalPurchaseNoticeIOS() throws -> Promise<Bool> {
@@ -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, verifyPurchase as verifyPurchaseTopLevel, verifyPurchaseWithProvider as verifyPurchaseWithProviderTopLevel, getActiveSubscriptions, hasActiveSubscriptions, syncIOS, getPromotedProductIOS, requestPurchaseOnPromotedProductIOS, checkAlternativeBillingAvailabilityAndroid, showAlternativeBillingDialogAndroid, createAlternativeBillingTokenAndroid, getBillingChoiceInfoAndroid, isBillingProgramAvailableAndroid, createBillingProgramReportingDetailsAndroid, launchExternalLinkAndroid, showBillingProgramInformationDialogAndroid, showInAppMessagesAndroid, userChoiceBillingListenerAndroid, developerProvidedBillingListenerAndroid, subscriptionBillingIssueListener, isStandardIOS } 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, syncIOS, getPromotedProductIOS, requestPurchaseOnPromotedProductIOS, checkAlternativeBillingAvailabilityAndroid, showAlternativeBillingDialogAndroid, createAlternativeBillingTokenAndroid, getBillingChoiceInfoAndroid, isBillingProgramAvailableAndroid, createBillingProgramReportingDetailsAndroid, launchExternalLinkAndroid, showBillingProgramInformationDialogAndroid, showInAppMessagesAndroid, openRedeemOfferCodeAndroid, userChoiceBillingListenerAndroid, developerProvidedBillingListenerAndroid, subscriptionBillingIssueListener, isStandardIOS } from "../index.js";
10
10
 
11
11
  // Types
12
12
  import { ErrorCode } from "../types.js";
@@ -264,10 +264,15 @@ export function useIAP(options) {
264
264
  return;
265
265
  }
266
266
  if (!result) {
267
+ cleanupListeners();
267
268
  setConnected(false);
268
269
  RnIapConsole.warn('[useIAP] initConnection returned false');
269
270
  return;
270
271
  }
272
+
273
+ // Android retains events emitted during connection setup in bounded
274
+ // native queues; registration flushes that backlog after Nitro is ready.
275
+ // Other platforms preserve the existing post-init listener ordering.
271
276
  registerListeners();
272
277
  setConnected(true);
273
278
  } catch (error) {
@@ -343,7 +348,8 @@ export function useIAP(options) {
343
348
  createBillingProgramReportingDetailsAndroid,
344
349
  launchExternalLinkAndroid,
345
350
  showBillingProgramInformationDialogAndroid,
346
- showInAppMessagesAndroid
351
+ showInAppMessagesAndroid,
352
+ openRedeemOfferCodeAndroid
347
353
  } : {})
348
354
  };
349
355
  }
@@ -1 +1 @@
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","syncIOS","getPromotedProductIOS","requestPurchaseOnPromotedProductIOS","checkAlternativeBillingAvailabilityAndroid","showAlternativeBillingDialogAndroid","createAlternativeBillingTokenAndroid","getBillingChoiceInfoAndroid","isBillingProgramAvailableAndroid","createBillingProgramReportingDetailsAndroid","launchExternalLinkAndroid","showBillingProgramInformationDialogAndroid","showInAppMessagesAndroid","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","alternativeBillingModeAndroid","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","initConnection","purchaseErrorListener","purchaseUpdatedListener","promotedProductListenerIOS","getAvailablePurchases","finishTransaction","finishTransactionInternal","requestPurchase","requestPurchaseInternal","fetchProducts","validateReceipt","validateReceiptInternal","verifyPurchase","verifyPurchaseTopLevel","verifyPurchaseWithProvider","verifyPurchaseWithProviderTopLevel","getActiveSubscriptions","hasActiveSubscriptions","syncIOS","getPromotedProductIOS","requestPurchaseOnPromotedProductIOS","checkAlternativeBillingAvailabilityAndroid","showAlternativeBillingDialogAndroid","createAlternativeBillingTokenAndroid","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","alternativeBillingModeAndroid","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":[]}
@@ -310,6 +310,14 @@ export const purchaseErrorListener = listener => {
310
310
  return {
311
311
  remove: () => {
312
312
  purchaseErrorJsListeners.delete(listener);
313
+ if (purchaseErrorJsListeners.size === 0 && purchaseErrorNativeAttached) {
314
+ try {
315
+ IAP.instance.removePurchaseErrorListener(purchaseErrorNativeHandler);
316
+ purchaseErrorNativeAttached = false;
317
+ } catch (e) {
318
+ RnIapConsole.warn('[purchaseErrorListener] native remove failed:', e);
319
+ }
320
+ }
313
321
  }
314
322
  };
315
323
  };
@@ -1595,6 +1603,31 @@ export const consumePurchaseAndroid = async purchaseToken => {
1595
1603
  }
1596
1604
  };
1597
1605
 
1606
+ /**
1607
+ * Open the Google Play offer/promo code redemption page (Android only).
1608
+ * On Google Play builds, launches the Play Store redeem page so the user can
1609
+ * enter a code. Returns false on store flavors without an equivalent flow.
1610
+ * Does not require the billing client to be initialized. Reconcile purchases
1611
+ * when the app resumes because listener delivery depends on connection state.
1612
+ *
1613
+ * @returns Promise<boolean> - true when the redemption page was launched
1614
+ * @platform Android
1615
+ *
1616
+ * @example
1617
+ * ```typescript
1618
+ * await openRedeemOfferCodeAndroid();
1619
+ * // Reconcile with getAvailablePurchases() when the app resumes.
1620
+ * ```
1621
+ *
1622
+ * @see {@link https://openiap.dev/docs/apis/android/open-redeem-offer-code-android}
1623
+ */
1624
+ export const openRedeemOfferCodeAndroid = async () => {
1625
+ if (Platform.OS !== 'android') {
1626
+ throw new Error('openRedeemOfferCodeAndroid is only supported on Android');
1627
+ }
1628
+ return IAP.instance.openRedeemOfferCodeAndroid();
1629
+ };
1630
+
1598
1631
  // ============================================================================
1599
1632
  // iOS-SPECIFIC FUNCTIONS
1600
1633
  // ============================================================================