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.
- package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +163 -15
- package/android/src/main/java/com/margelo/nitro/iap/PendingEventBuffer.kt +86 -0
- package/android/src/main/java/com/margelo/nitro/iap/RnIapLog.kt +13 -0
- package/ios/HybridRnIap.swift +31 -4
- package/ios/RnIapHelper.swift +3 -2
- package/ios/RnIapLog.swift +14 -0
- package/lib/module/hooks/useIAP.js +8 -2
- package/lib/module/hooks/useIAP.js.map +1 -1
- package/lib/module/index.js +105 -30
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.kepler.js +72 -5
- package/lib/module/index.kepler.js.map +1 -1
- package/lib/module/kit-api.js +78 -3
- package/lib/module/kit-api.js.map +1 -1
- package/lib/module/types.js +29 -25
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/deprecation.js +15 -0
- package/lib/module/utils/deprecation.js.map +1 -0
- package/lib/module/utils/platform-request.js +28 -0
- package/lib/module/utils/platform-request.js.map +1 -0
- package/lib/module/utils/type-bridge.js +9 -4
- package/lib/module/utils/type-bridge.js.map +1 -1
- package/lib/module/vega-adapter.js +34 -22
- package/lib/module/vega-adapter.js.map +1 -1
- package/lib/typescript/src/hooks/useIAP.d.ts +16 -2
- package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +56 -12
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/index.kepler.d.ts +50 -4
- package/lib/typescript/src/index.kepler.d.ts.map +1 -1
- package/lib/typescript/src/kit-api.d.ts +18 -8
- package/lib/typescript/src/kit-api.d.ts.map +1 -1
- package/lib/typescript/src/specs/RnIap.nitro.d.ts +32 -6
- package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +119 -175
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/utils/deprecation.d.ts +3 -0
- package/lib/typescript/src/utils/deprecation.d.ts.map +1 -0
- package/lib/typescript/src/utils/platform-request.d.ts +12 -0
- package/lib/typescript/src/utils/platform-request.d.ts.map +1 -0
- package/lib/typescript/src/utils/type-bridge.d.ts.map +1 -1
- package/lib/typescript/src/vega-adapter.d.ts +1 -0
- package/lib/typescript/src/vega-adapter.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JHybridRnIapSpec.cpp +16 -0
- package/nitrogen/generated/android/c++/JHybridRnIapSpec.hpp +1 -0
- package/nitrogen/generated/android/c++/JNitroPurchase.hpp +5 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/HybridRnIapSpec.kt +4 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchase.kt +7 -2
- package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.hpp +8 -0
- package/nitrogen/generated/ios/swift/HybridRnIapSpec.swift +1 -0
- package/nitrogen/generated/ios/swift/HybridRnIapSpec_cxx.swift +19 -0
- package/nitrogen/generated/ios/swift/NitroPurchase.swift +39 -2
- package/nitrogen/generated/shared/c++/HybridRnIapSpec.cpp +1 -0
- package/nitrogen/generated/shared/c++/HybridRnIapSpec.hpp +1 -0
- package/nitrogen/generated/shared/c++/NitroPurchase.hpp +5 -1
- package/openiap-versions.json +3 -3
- package/package.json +1 -1
- package/src/hooks/useIAP.ts +22 -2
- package/src/index.kepler.ts +86 -8
- package/src/index.ts +139 -47
- package/src/kit-api.ts +136 -13
- package/src/specs/RnIap.nitro.ts +33 -6
- package/src/types.ts +130 -203
- package/src/utils/deprecation.ts +16 -0
- package/src/utils/platform-request.ts +37 -0
- package/src/utils/type-bridge.ts +20 -4
- package/src/vega-adapter.ts +50 -24
- package/lib/module/hooks/useWebhookEvents.js +0 -113
- package/lib/module/hooks/useWebhookEvents.js.map +0 -1
- package/lib/module/webhook-client.js +0 -164
- package/lib/module/webhook-client.js.map +0 -1
- package/lib/typescript/src/hooks/useWebhookEvents.d.ts +0 -55
- package/lib/typescript/src/hooks/useWebhookEvents.d.ts.map +0 -1
- package/lib/typescript/src/webhook-client.d.ts +0 -82
- package/lib/typescript/src/webhook-client.d.ts.map +0 -1
- package/src/hooks/useWebhookEvents.ts +0 -180
- 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 =
|
|
452
|
-
|
|
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
|
-
"
|
|
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.
|
|
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
|
-
|
|
964
|
+
val (token, shouldFlush) = synchronized(purchaseUpdatedListeners) {
|
|
895
965
|
val token = nextPurchaseUpdatedListenerToken
|
|
896
966
|
nextPurchaseUpdatedListenerToken += 1.0
|
|
897
967
|
purchaseUpdatedListeners.add(PurchaseUpdatedListenerRegistration(token, listener))
|
|
898
|
-
|
|
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
|
-
|
|
916
|
-
|
|
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.
|
|
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) {
|
|
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) {
|
package/ios/HybridRnIap.swift
CHANGED
|
@@ -129,7 +129,11 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
129
129
|
queryTypes = [.inApp, .subs]
|
|
130
130
|
} else {
|
|
131
131
|
if normalizedType == "inapp" {
|
|
132
|
-
RnIapLog.
|
|
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
|
-
"
|
|
182
|
-
"
|
|
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
|
|
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> {
|
package/ios/RnIapHelper.swift
CHANGED
|
@@ -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["
|
|
493
|
-
renewalOfferId: wrapString(dictionary["
|
|
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
|
}
|
package/ios/RnIapLog.swift
CHANGED
|
@@ -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":[]}
|