react-native-iap 15.5.4 → 15.6.1

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 (77) hide show
  1. package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +163 -15
  2. package/android/src/main/java/com/margelo/nitro/iap/PendingEventBuffer.kt +86 -0
  3. package/android/src/main/java/com/margelo/nitro/iap/RnIapLog.kt +13 -0
  4. package/ios/HybridRnIap.swift +31 -4
  5. package/ios/RnIapHelper.swift +3 -2
  6. package/ios/RnIapLog.swift +14 -0
  7. package/lib/module/hooks/useIAP.js +8 -2
  8. package/lib/module/hooks/useIAP.js.map +1 -1
  9. package/lib/module/index.js +105 -30
  10. package/lib/module/index.js.map +1 -1
  11. package/lib/module/index.kepler.js +72 -5
  12. package/lib/module/index.kepler.js.map +1 -1
  13. package/lib/module/kit-api.js +78 -3
  14. package/lib/module/kit-api.js.map +1 -1
  15. package/lib/module/types.js +29 -25
  16. package/lib/module/types.js.map +1 -1
  17. package/lib/module/utils/deprecation.js +15 -0
  18. package/lib/module/utils/deprecation.js.map +1 -0
  19. package/lib/module/utils/platform-request.js +28 -0
  20. package/lib/module/utils/platform-request.js.map +1 -0
  21. package/lib/module/utils/type-bridge.js +9 -4
  22. package/lib/module/utils/type-bridge.js.map +1 -1
  23. package/lib/module/vega-adapter.js +34 -22
  24. package/lib/module/vega-adapter.js.map +1 -1
  25. package/lib/typescript/src/hooks/useIAP.d.ts +16 -2
  26. package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
  27. package/lib/typescript/src/index.d.ts +56 -12
  28. package/lib/typescript/src/index.d.ts.map +1 -1
  29. package/lib/typescript/src/index.kepler.d.ts +50 -4
  30. package/lib/typescript/src/index.kepler.d.ts.map +1 -1
  31. package/lib/typescript/src/kit-api.d.ts +18 -8
  32. package/lib/typescript/src/kit-api.d.ts.map +1 -1
  33. package/lib/typescript/src/specs/RnIap.nitro.d.ts +32 -6
  34. package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -1
  35. package/lib/typescript/src/types.d.ts +119 -175
  36. package/lib/typescript/src/types.d.ts.map +1 -1
  37. package/lib/typescript/src/utils/deprecation.d.ts +3 -0
  38. package/lib/typescript/src/utils/deprecation.d.ts.map +1 -0
  39. package/lib/typescript/src/utils/platform-request.d.ts +12 -0
  40. package/lib/typescript/src/utils/platform-request.d.ts.map +1 -0
  41. package/lib/typescript/src/utils/type-bridge.d.ts.map +1 -1
  42. package/lib/typescript/src/vega-adapter.d.ts +1 -0
  43. package/lib/typescript/src/vega-adapter.d.ts.map +1 -1
  44. package/nitrogen/generated/android/c++/JHybridRnIapSpec.cpp +16 -0
  45. package/nitrogen/generated/android/c++/JHybridRnIapSpec.hpp +1 -0
  46. package/nitrogen/generated/android/c++/JNitroPurchase.hpp +5 -1
  47. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/HybridRnIapSpec.kt +4 -0
  48. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchase.kt +7 -2
  49. package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.hpp +8 -0
  50. package/nitrogen/generated/ios/swift/HybridRnIapSpec.swift +1 -0
  51. package/nitrogen/generated/ios/swift/HybridRnIapSpec_cxx.swift +19 -0
  52. package/nitrogen/generated/ios/swift/NitroPurchase.swift +39 -2
  53. package/nitrogen/generated/shared/c++/HybridRnIapSpec.cpp +1 -0
  54. package/nitrogen/generated/shared/c++/HybridRnIapSpec.hpp +1 -0
  55. package/nitrogen/generated/shared/c++/NitroPurchase.hpp +5 -1
  56. package/openiap-versions.json +3 -3
  57. package/package.json +1 -1
  58. package/src/hooks/useIAP.ts +22 -2
  59. package/src/index.kepler.ts +86 -8
  60. package/src/index.ts +139 -47
  61. package/src/kit-api.ts +136 -13
  62. package/src/specs/RnIap.nitro.ts +33 -6
  63. package/src/types.ts +130 -203
  64. package/src/utils/deprecation.ts +16 -0
  65. package/src/utils/platform-request.ts +37 -0
  66. package/src/utils/type-bridge.ts +20 -4
  67. package/src/vega-adapter.ts +50 -24
  68. package/lib/module/hooks/useWebhookEvents.js +0 -113
  69. package/lib/module/hooks/useWebhookEvents.js.map +0 -1
  70. package/lib/module/webhook-client.js +0 -164
  71. package/lib/module/webhook-client.js.map +0 -1
  72. package/lib/typescript/src/hooks/useWebhookEvents.d.ts +0 -55
  73. package/lib/typescript/src/hooks/useWebhookEvents.d.ts.map +0 -1
  74. package/lib/typescript/src/webhook-client.d.ts +0 -82
  75. package/lib/typescript/src/webhook-client.d.ts.map +0 -1
  76. package/src/hooks/useWebhookEvents.ts +0 -180
  77. package/src/webhook-client.ts +0 -312
@@ -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() }
@@ -398,6 +445,13 @@ class HybridRnIap : HybridRnIapSpec() {
398
445
 
399
446
  ensureConnection()
400
447
 
448
+ if (type.trim().lowercase(Locale.US) == "inapp") {
449
+ RnIapLog.deprecation(
450
+ "product-type.inapp",
451
+ "fetchProducts received legacy type 'inapp'; forwarding as 'in-app'. " +
452
+ "The alias will be removed in react-native-iap 16.0.0."
453
+ )
454
+ }
401
455
  val queryType = parseProductQueryType(type)
402
456
  val skusList = skus.toList()
403
457
 
@@ -448,14 +502,26 @@ class HybridRnIap : HybridRnIapSpec() {
448
502
  return Promise.async {
449
503
  val defaultResult = RequestPurchaseResult.create(emptyArray<com.margelo.nitro.iap.Purchase>())
450
504
 
451
- val androidRequest = (request.android as? Variant_NullType_NitroRequestPurchaseAndroid.Second)?.value
452
- ?: (request.google as? Variant_NullType_NitroRequestPurchaseAndroid.Second)?.value
505
+ val androidRequest =
506
+ if (request.google != null) {
507
+ (request.google as? Variant_NullType_NitroRequestPurchaseAndroid.Second)?.value
508
+ } else {
509
+ (request.android as? Variant_NullType_NitroRequestPurchaseAndroid.Second)
510
+ ?.value
511
+ ?.also {
512
+ RnIapLog.deprecation(
513
+ "request-purchase.android",
514
+ "`request.android` is deprecated and will be removed in react-native-iap 16.0.0. Use `request.google` instead."
515
+ )
516
+ }
517
+ }
453
518
 
454
519
  RnIapLog.payload(
455
520
  "requestPurchase",
456
521
  mapOf(
457
522
  "androidSkus" to (androidRequest?.skus?.toList() ?: emptyList()),
458
- "hasIOS" to (request.ios != null)
523
+ "hasApple" to (request.apple != null),
524
+ "hasLegacyIOS" to (request.ios != null)
459
525
  )
460
526
  )
461
527
 
@@ -632,7 +698,11 @@ class HybridRnIap : HybridRnIapSpec() {
632
698
  val typeName = androidOptions?.type?.name?.lowercase(java.util.Locale.ROOT)
633
699
  val normalizedType = when (typeName) {
634
700
  "inapp" -> {
635
- RnIapLog.warn("getAvailablePurchases received legacy type 'inapp'; forwarding as 'in-app'")
701
+ RnIapLog.deprecation(
702
+ "product-type.inapp",
703
+ "getAvailablePurchases received legacy type 'inapp'; forwarding as 'in-app'. " +
704
+ "The alias will be removed in react-native-iap 16.0.0."
705
+ )
636
706
  "in-app"
637
707
  }
638
708
  "in-app", "subs" -> typeName
@@ -891,18 +961,59 @@ class HybridRnIap : HybridRnIapSpec() {
891
961
  listener: (purchase: NitroPurchase) -> Unit,
892
962
  options: PurchaseUpdatedListenerOptions?
893
963
  ): Double {
894
- return synchronized(purchaseUpdatedListeners) {
964
+ val (token, shouldFlush) = synchronized(purchaseUpdatedListeners) {
895
965
  val token = nextPurchaseUpdatedListenerToken
896
966
  nextPurchaseUpdatedListenerToken += 1.0
897
967
  purchaseUpdatedListeners.add(PurchaseUpdatedListenerRegistration(token, listener))
898
- token
968
+ val shouldFlush = pendingPurchaseUpdates.beginFlushIfNeeded()
969
+ token to shouldFlush
899
970
  }
971
+ if (shouldFlush) flushPendingPurchaseUpdates()
972
+ return token
900
973
  }
901
974
 
902
975
  override fun addPurchaseErrorListener(listener: (error: NitroPurchaseResult) -> Unit) {
903
- synchronized(purchaseErrorListeners) {
976
+ val shouldFlush = synchronized(purchaseErrorListeners) {
904
977
  purchaseErrorListeners.add(listener)
978
+ pendingPurchaseErrors.beginFlushIfNeeded()
905
979
  }
980
+ if (shouldFlush) flushPendingPurchaseErrors()
981
+ }
982
+
983
+ private fun flushPendingPurchaseUpdates() {
984
+ drainPendingEvents(
985
+ takeDelivery = {
986
+ synchronized(purchaseUpdatedListeners) {
987
+ pendingPurchaseUpdates.takeBatchOrFinish()?.let { backlog ->
988
+ PendingEventDelivery(
989
+ events = backlog,
990
+ listeners = purchaseUpdatedListeners.map { it.listener },
991
+ )
992
+ }
993
+ }
994
+ },
995
+ onDeliveryFailure = {
996
+ RnIapLog.failure("purchaseUpdatedListener.flush", it)
997
+ }
998
+ )
999
+ }
1000
+
1001
+ private fun flushPendingPurchaseErrors() {
1002
+ drainPendingEvents(
1003
+ takeDelivery = {
1004
+ synchronized(purchaseErrorListeners) {
1005
+ pendingPurchaseErrors.takeBatchOrFinish()?.let { backlog ->
1006
+ PendingEventDelivery(
1007
+ events = backlog,
1008
+ listeners = ArrayList(purchaseErrorListeners),
1009
+ )
1010
+ }
1011
+ }
1012
+ },
1013
+ onDeliveryFailure = {
1014
+ RnIapLog.failure("purchaseErrorListener.flush", it)
1015
+ }
1016
+ )
906
1017
  }
907
1018
 
908
1019
  override fun removePurchaseUpdatedListener(token: Double) {
@@ -912,9 +1023,10 @@ class HybridRnIap : HybridRnIapSpec() {
912
1023
  }
913
1024
 
914
1025
  override fun removePurchaseErrorListener(listener: (error: NitroPurchaseResult) -> Unit) {
915
- synchronized(purchaseErrorListeners) {
916
- purchaseErrorListeners.remove(listener)
917
- }
1026
+ // The JS layer registers one native fan-out callback and calls remove
1027
+ // only after its final JS subscriber detaches. Clearing also matches
1028
+ // iOS and removes stale registrations left by earlier remounts.
1029
+ removeSingletonBridgeListener(purchaseErrorListeners, listener)
918
1030
  }
919
1031
 
920
1032
  override fun addPromotedProductListenerIOS(listener: (product: NitroProduct) -> Unit) {
@@ -935,7 +1047,10 @@ class HybridRnIap : HybridRnIapSpec() {
935
1047
  // Helper methods
936
1048
 
937
1049
  /**
938
- * Send purchase update event to listeners
1050
+ * Send purchase update event to listeners.
1051
+ * With zero listeners attached the event is buffered (bounded, drop-oldest)
1052
+ * instead of dropped, and flushed FIFO when a listener registers.
1053
+ * Events delivered to at least one listener are never queued.
939
1054
  */
940
1055
  private fun sendPurchaseUpdate(purchase: NitroPurchase) {
941
1056
  RnIapLog.result(
@@ -943,20 +1058,32 @@ class HybridRnIap : HybridRnIapSpec() {
943
1058
  mapOf("productId" to purchase.productId, "platform" to purchase.platform)
944
1059
  )
945
1060
  val snapshot = synchronized(purchaseUpdatedListeners) {
946
- purchaseUpdatedListeners.map { it.listener }
1061
+ if (pendingPurchaseUpdates.enqueueIfNeeded(purchaseUpdatedListeners.isNotEmpty(), purchase)) {
1062
+ emptyList()
1063
+ } else {
1064
+ purchaseUpdatedListeners.map { it.listener }
1065
+ }
947
1066
  }
948
1067
  snapshot.forEach { it(purchase) }
949
1068
  }
950
1069
 
951
1070
  /**
952
- * Send purchase error event to listeners
1071
+ * Send purchase error event to listeners.
1072
+ * Mirrors sendPurchaseUpdate: buffered (bounded, drop-oldest) while zero
1073
+ * listeners are attached, flushed FIFO when a listener registers.
953
1074
  */
954
1075
  private fun sendPurchaseError(error: NitroPurchaseResult) {
955
1076
  RnIapLog.result(
956
1077
  "sendPurchaseError",
957
1078
  mapOf("code" to error.code, "message" to error.message)
958
1079
  )
959
- val snapshot = synchronized(purchaseErrorListeners) { ArrayList(purchaseErrorListeners) }
1080
+ val snapshot = synchronized(purchaseErrorListeners) {
1081
+ if (pendingPurchaseErrors.enqueueIfNeeded(purchaseErrorListeners.isNotEmpty(), error)) {
1082
+ emptyList()
1083
+ } else {
1084
+ ArrayList(purchaseErrorListeners)
1085
+ }
1086
+ }
960
1087
  snapshot.forEach { it(error) }
961
1088
  }
962
1089
 
@@ -1181,6 +1308,7 @@ class HybridRnIap : HybridRnIapSpec() {
1181
1308
  }
1182
1309
  return NitroPurchase(
1183
1310
  id = purchase.id,
1311
+ transactionId = androidPurchase?.transactionId.wrapVariant(),
1184
1312
  productId = purchase.productId,
1185
1313
  transactionDate = purchase.transactionDate,
1186
1314
  purchaseToken = purchase.purchaseToken.wrapVariant(),
@@ -1983,6 +2111,26 @@ class HybridRnIap : HybridRnIapSpec() {
1983
2111
  }
1984
2112
  }
1985
2113
 
2114
+ override fun openRedeemOfferCodeAndroid(): Promise<Boolean> {
2115
+ return Promise.async {
2116
+ RnIapLog.payload("openRedeemOfferCodeAndroid", null)
2117
+ try {
2118
+ withContext(Dispatchers.Main) {
2119
+ runCatching { context.currentActivity }.getOrNull()?.let(openIap::setActivity)
2120
+ }
2121
+ val handler = openIap.mutationHandlers.openRedeemOfferCodeAndroid
2122
+ ?: throw OpenIapError.FeatureNotSupported()
2123
+ val result = handler()
2124
+ RnIapLog.result("openRedeemOfferCodeAndroid", result)
2125
+ result
2126
+ } catch (err: Throwable) {
2127
+ RnIapLog.failure("openRedeemOfferCodeAndroid", err)
2128
+ val errorType = parseOpenIapError(err)
2129
+ throw OpenIapException(toErrorJson(errorType, debugMessage = err.message), err)
2130
+ }
2131
+ }
2132
+ }
2133
+
1986
2134
  // Billing Programs helper functions
1987
2135
  private fun mapBillingProgram(program: BillingProgramAndroid): OpenIapBillingProgramAndroid {
1988
2136
  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
+ }
@@ -3,10 +3,14 @@ package com.margelo.nitro.iap
3
3
  import android.util.Log
4
4
  import org.json.JSONArray
5
5
  import org.json.JSONObject
6
+ import java.util.Collections
6
7
  import java.util.Locale
8
+ import java.util.concurrent.ConcurrentHashMap
7
9
 
8
10
  internal object RnIapLog {
9
11
  private const val TAG = "RnIap"
12
+ private val emittedDeprecations: MutableSet<String> =
13
+ Collections.newSetFromMap(ConcurrentHashMap())
10
14
  private val SENSITIVE_KEY_FRAGMENTS = setOf(
11
15
  "token",
12
16
  "apikey",
@@ -45,6 +49,15 @@ internal object RnIapLog {
45
49
  Log.w(TAG, message)
46
50
  }
47
51
 
52
+ fun deprecation(
53
+ key: String,
54
+ message: String,
55
+ ) {
56
+ if (emittedDeprecations.add(key)) {
57
+ Log.w(TAG, message)
58
+ }
59
+ }
60
+
48
61
  private fun stringify(value: Any?): String {
49
62
  val sanitized = sanitize(value) ?: return "null"
50
63
  return when (sanitized) {
@@ -129,7 +129,11 @@ class HybridRnIap: HybridRnIapSpec {
129
129
  queryTypes = [.inApp, .subs]
130
130
  } else {
131
131
  if normalizedType == "inapp" {
132
- RnIapLog.warn("fetchProducts received legacy type 'inapp'; forwarding as 'in-app'")
132
+ RnIapLog.deprecation(
133
+ "product-type.inapp",
134
+ "fetchProducts received legacy type 'inapp'; forwarding as 'in-app'. " +
135
+ "The alias will be removed in react-native-iap 16.0.0."
136
+ )
133
137
  }
134
138
  queryTypes = [RnIapHelper.parseProductQueryType(type)]
135
139
  }
@@ -178,13 +182,30 @@ class HybridRnIap: HybridRnIapSpec {
178
182
  let defaultResult: RequestPurchaseResult = .fourth([])
179
183
  RnIapLog.payload(
180
184
  "requestPurchase", [
181
- "hasIOS": request.ios != nil,
182
- "hasAndroid": request.android != nil
185
+ "hasApple": request.apple != nil,
186
+ "hasGoogle": request.google != nil,
187
+ "hasLegacyIOS": request.ios != nil,
188
+ "hasLegacyAndroid": request.android != nil
183
189
  ]
184
190
  )
185
191
 
186
192
  let iosRequest: NitroRequestPurchaseIos
187
- if case .second(let unwrapped) = request.ios {
193
+ if let canonicalApple = request.apple {
194
+ guard case .second(let unwrapped) = canonicalApple else {
195
+ let error = RnIapHelper.makePurchaseErrorResult(
196
+ code: .developerError,
197
+ message: "No iOS request provided"
198
+ )
199
+ self.sendPurchaseError(error, productId: nil)
200
+ return defaultResult
201
+ }
202
+ iosRequest = unwrapped
203
+ } else if case .second(let unwrapped) = request.ios {
204
+ RnIapLog.deprecation(
205
+ "request-purchase.ios",
206
+ "`request.ios` is deprecated and will be removed in react-native-iap 16.0.0. " +
207
+ "Use `request.apple` instead."
208
+ )
188
209
  iosRequest = unwrapped
189
210
  } else {
190
211
  let error = RnIapHelper.makePurchaseErrorResult(
@@ -1506,6 +1527,12 @@ class HybridRnIap: HybridRnIapSpec {
1506
1527
  }
1507
1528
  }
1508
1529
 
1530
+ func openRedeemOfferCodeAndroid() throws -> Promise<Bool> {
1531
+ return Promise.async {
1532
+ throw OpenIapException.make(code: .featureNotSupported, message: "Offer-code redemption is Android-only")
1533
+ }
1534
+ }
1535
+
1509
1536
  // MARK: - External Purchase (iOS 16.0+)
1510
1537
 
1511
1538
  func canPresentExternalPurchaseNoticeIOS() throws -> Promise<Bool> {
@@ -392,6 +392,7 @@ enum RnIapHelper {
392
392
 
393
393
  return NitroPurchase(
394
394
  id: dictionary["id"] as? String ?? "",
395
+ transactionId: wrapString(dictionary["transactionId"] as? String),
395
396
  productId: dictionary["productId"] as? String ?? "",
396
397
  transactionDate: doubleValue(dictionary["transactionDate"]) ?? 0,
397
398
  purchaseToken: wrapString(dictionary["purchaseToken"] as? String),
@@ -489,8 +490,8 @@ enum RnIapHelper {
489
490
  priceIncreaseStatus: wrapString(dictionary["priceIncreaseStatus"] as? String),
490
491
  renewalBillingPlanType: (dictionary["renewalBillingPlanType"] as? String)
491
492
  .flatMap(SubscriptionBillingPlanTypeIOS.init(fromString:)),
492
- renewalOfferType: wrapString(dictionary["offerType"] as? String),
493
- renewalOfferId: wrapString(dictionary["offerIdentifier"] as? String),
493
+ renewalOfferType: wrapString(dictionary["renewalOfferType"] as? String),
494
+ renewalOfferId: wrapString(dictionary["renewalOfferId"] as? String),
494
495
  jsonRepresentation: wrapString(dictionary["jsonRepresentation"] as? String)
495
496
  )
496
497
  }
@@ -36,6 +36,8 @@ enum RnIapLog {
36
36
  }()
37
37
 
38
38
  private static var customHandler: ((Level, String) -> Void)?
39
+ private static let deprecationLock = NSLock()
40
+ private static var emittedDeprecations = Set<String>()
39
41
 
40
42
  static func setEnabled(_ enabled: Bool) {
41
43
  isEnabled = enabled
@@ -50,6 +52,15 @@ enum RnIapLog {
50
52
  static func warn(_ message: String) { log(.warn, message) }
51
53
  static func error(_ message: String) { log(.error, message) }
52
54
 
55
+ static func deprecation(_ key: String, _ message: String) {
56
+ deprecationLock.lock()
57
+ let inserted = emittedDeprecations.insert(key).inserted
58
+ deprecationLock.unlock()
59
+ guard inserted else { return }
60
+
61
+ emit(.warn, message)
62
+ }
63
+
53
64
  static func payload(_ name: String, _ payload: Any?) {
54
65
  debug("\(name) payload: \(stringify(payload))")
55
66
  }
@@ -64,7 +75,10 @@ enum RnIapLog {
64
75
 
65
76
  private static func log(_ level: Level, _ message: String) {
66
77
  guard isEnabled else { return }
78
+ emit(level, message)
79
+ }
67
80
 
81
+ private static func emit(_ level: Level, _ message: String) {
68
82
  if let handler = customHandler {
69
83
  handler(level, message)
70
84
  return
@@ -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":[]}