react-native-iap 9.0.0-beta7 → 9.0.0-beta9

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 (91) hide show
  1. package/README.md +4 -20
  2. package/RNIap.podspec +33 -18
  3. package/android/build.gradle +137 -38
  4. package/android/gradle.properties +8 -0
  5. package/android/src/play/java/com/dooboolab/RNIap/RNIapModule.kt +55 -54
  6. package/android/src/play/java/com/dooboolab/RNIap/RNIapPackage.kt +0 -1
  7. package/android/src/testPlay/java/com/dooboolab/RNIap/{RNIapModuleTestV4.kt → RNIapModuleTest.kt} +48 -34
  8. package/ios/RNIapIos-Bridging-Header.h +2 -0
  9. package/ios/RNIapIos.m +14 -1
  10. package/ios/RNIapIos.swift +903 -881
  11. package/ios/{RNIap.xcodeproj → RNIapIos.xcodeproj}/project.pbxproj +29 -116
  12. package/lib/commonjs/__test__/iap.test.js +21 -0
  13. package/lib/commonjs/__test__/iap.test.js.map +1 -0
  14. package/lib/commonjs/hooks/useIAP.js +78 -0
  15. package/lib/commonjs/hooks/useIAP.js.map +1 -0
  16. package/lib/commonjs/hooks/withIAPContext.js +92 -0
  17. package/lib/commonjs/hooks/withIAPContext.js.map +1 -0
  18. package/lib/commonjs/iap.js +585 -0
  19. package/lib/commonjs/iap.js.map +1 -0
  20. package/lib/commonjs/index.js +59 -0
  21. package/lib/commonjs/index.js.map +1 -0
  22. package/lib/commonjs/types/amazon.js +2 -0
  23. package/lib/commonjs/types/amazon.js.map +1 -0
  24. package/lib/commonjs/types/android.js +55 -0
  25. package/lib/commonjs/types/android.js.map +1 -0
  26. package/lib/commonjs/types/apple.js +165 -0
  27. package/lib/commonjs/types/apple.js.map +1 -0
  28. package/lib/commonjs/types/index.js +59 -0
  29. package/lib/commonjs/types/index.js.map +1 -0
  30. package/lib/module/__test__/iap.test.js +17 -0
  31. package/lib/module/__test__/iap.test.js.map +1 -0
  32. package/lib/module/hooks/useIAP.js +68 -0
  33. package/lib/module/hooks/useIAP.js.map +1 -0
  34. package/lib/module/hooks/withIAPContext.js +76 -0
  35. package/lib/module/hooks/withIAPContext.js.map +1 -0
  36. package/lib/module/iap.js +493 -0
  37. package/lib/module/iap.js.map +1 -0
  38. package/lib/module/index.js +6 -0
  39. package/lib/module/index.js.map +1 -0
  40. package/lib/module/types/amazon.js +2 -0
  41. package/lib/module/types/amazon.js.map +1 -0
  42. package/lib/module/types/android.js +44 -0
  43. package/lib/module/types/android.js.map +1 -0
  44. package/lib/module/types/apple.js +153 -0
  45. package/lib/module/types/apple.js.map +1 -0
  46. package/lib/module/types/index.js +48 -0
  47. package/lib/module/types/index.js.map +1 -0
  48. package/{src → lib/typescript}/__test__/iap.test.d.ts +0 -0
  49. package/{src → lib/typescript}/hooks/useIAP.d.ts +1 -1
  50. package/{src → lib/typescript}/hooks/withIAPContext.d.ts +1 -1
  51. package/{src → lib/typescript}/iap.d.ts +13 -11
  52. package/{src → lib/typescript}/index.d.ts +2 -1
  53. package/{src → lib/typescript}/types/amazon.d.ts +0 -0
  54. package/{src → lib/typescript}/types/android.d.ts +0 -0
  55. package/{src → lib/typescript}/types/apple.d.ts +0 -0
  56. package/{src → lib/typescript}/types/index.d.ts +23 -4
  57. package/package.json +84 -57
  58. package/src/__test__/iap.test.ts +20 -0
  59. package/src/hooks/useIAP.ts +130 -0
  60. package/src/hooks/withIAPContext.tsx +160 -0
  61. package/src/iap.ts +699 -0
  62. package/src/{index.js → index.ts} +4 -1
  63. package/src/types/amazon.ts +23 -0
  64. package/src/types/android.ts +51 -0
  65. package/src/types/apple.ts +467 -0
  66. package/src/types/index.ts +209 -0
  67. package/.editorconfig +0 -10
  68. package/.flowconfig +0 -11
  69. package/.monolinterrc +0 -3
  70. package/.prettierignore +0 -6
  71. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  72. package/android/gradle/wrapper/gradle-wrapper.properties +0 -6
  73. package/android/gradlew +0 -160
  74. package/android/gradlew.bat +0 -90
  75. package/android/src/play/java/com/dooboolab/RNIap/RNIapModuleInterface.kt +0 -44
  76. package/android/src/play/java/com/dooboolab/RNIap/RNIapModuleV4.kt +0 -658
  77. package/babel.config.js +0 -12
  78. package/index.d.ts +0 -3
  79. package/index.js +0 -3
  80. package/index.js.flow +0 -9
  81. package/ios/RNIap.xcodeproj/xcshareddata/xcschemes/RNIap.xcscheme +0 -80
  82. package/jest.config.js +0 -190
  83. package/src/__test__/iap.test.js +0 -59
  84. package/src/hooks/useIAP.js +0 -141
  85. package/src/hooks/withIAPContext.js +0 -150
  86. package/src/iap.js +0 -638
  87. package/src/types/amazon.js +0 -1
  88. package/src/types/android.js +0 -22
  89. package/src/types/apple.js +0 -165
  90. package/src/types/index.js +0 -40
  91. package/test/mocks/react-native-modules.js +0 -14
@@ -4,8 +4,11 @@ import com.android.billingclient.api.BillingClient
4
4
  import com.android.billingclient.api.BillingClientStateListener
5
5
  import com.android.billingclient.api.BillingResult
6
6
  import com.android.billingclient.api.ConsumeResponseListener
7
+ import com.android.billingclient.api.ProductDetails
8
+ import com.android.billingclient.api.ProductDetailsResponseListener
7
9
  import com.android.billingclient.api.Purchase
8
10
  import com.android.billingclient.api.PurchasesResponseListener
11
+ import com.android.billingclient.api.QueryPurchasesParams
9
12
  import com.android.billingclient.api.SkuDetailsResponseListener
10
13
  import com.facebook.react.bridge.Arguments
11
14
  import com.facebook.react.bridge.Promise
@@ -30,7 +33,7 @@ import org.junit.Assert.assertTrue
30
33
  import org.junit.Before
31
34
  import org.junit.Test
32
35
 
33
- class RNIapModuleTestV4 {
36
+ class RNIapModuleTest {
34
37
 
35
38
  @MockK
36
39
  lateinit var context: ReactApplicationContext
@@ -44,14 +47,14 @@ class RNIapModuleTestV4 {
44
47
  @MockK
45
48
  lateinit var availability: GoogleApiAvailability
46
49
 
47
- private lateinit var module: RNIapModuleV4
50
+ private lateinit var module: RNIapModule
48
51
 
49
52
  @Before
50
53
  fun setUp() {
51
54
  MockKAnnotations.init(this, relaxUnitFun = true)
52
55
  every { builder.setListener(any()) } returns builder
53
56
  every { builder.build() } returns billingClient
54
- module = RNIapModuleV4(context, builder, availability)
57
+ module = RNIapModule(context, builder, availability)
55
58
  }
56
59
 
57
60
  @Test
@@ -134,7 +137,7 @@ class RNIapModuleTestV4 {
134
137
  every { billingClient.isReady } returns true
135
138
  val promise = mockk<Promise>(relaxed = true)
136
139
  val listener = slot<PurchasesResponseListener>()
137
- every { billingClient.queryPurchasesAsync(any<String>(), capture(listener)) } answers {
140
+ every { billingClient.queryPurchasesAsync(any<QueryPurchasesParams>(), capture(listener)) } answers {
138
141
  listener.captured.onQueryPurchasesResponse(BillingResult.newBuilder().build(), listOf())
139
142
  }
140
143
  module.initConnection(mockk())
@@ -150,7 +153,7 @@ class RNIapModuleTestV4 {
150
153
  every { billingClient.isReady } returns true
151
154
  val promise = mockk<Promise>(relaxed = true)
152
155
  val listener = slot<PurchasesResponseListener>()
153
- every { billingClient.queryPurchasesAsync(any<String>(), capture(listener)) } answers {
156
+ every { billingClient.queryPurchasesAsync(any<QueryPurchasesParams>(), capture(listener)) } answers {
154
157
  listener.captured.onQueryPurchasesResponse(
155
158
  BillingResult.newBuilder().build(),
156
159
  listOf(
@@ -207,30 +210,39 @@ class RNIapModuleTestV4 {
207
210
  every { availability.isGooglePlayServicesAvailable(any()) } returns ConnectionResult.SUCCESS
208
211
  every { billingClient.isReady } returns true
209
212
  val promise = mockk<Promise>(relaxed = true)
210
- val listener = slot<SkuDetailsResponseListener>()
211
- every { billingClient.querySkuDetailsAsync(any(), capture(listener)) } answers {
212
- listener.captured.onSkuDetailsResponse(
213
+ val listener = slot<ProductDetailsResponseListener>()
214
+ every { billingClient.queryProductDetailsAsync(any(), capture(listener)) } answers {
215
+ listener.captured.onProductDetailsResponse(
213
216
  BillingResult.newBuilder().build(),
214
217
  listOf(
215
218
  mockk {
216
- every { sku } returns "sku1"
217
- every { introductoryPriceAmountMicros } returns 0
218
- every { priceAmountMicros } returns 1
219
- every { priceCurrencyCode } returns "USD"
220
- every { type } returns "sub"
221
- every { price } returns "$10.0"
222
- every { title } returns "My product"
223
- every { description } returns "My desc"
224
- every { introductoryPrice } returns "$5.0"
225
- every { zzc() } returns "com.mypackage"
226
- every { originalPrice } returns "$13.0"
227
- every { subscriptionPeriod } returns "3 months"
228
- every { freeTrialPeriod } returns "1 week"
229
- every { introductoryPriceCycles } returns 1
230
- every { introductoryPricePeriod } returns "1"
231
- every { iconUrl } returns "http://myicon.com/icon"
232
- every { originalJson } returns "{}"
233
- every { originalPriceAmountMicros } returns 2
219
+ every { productId } returns "sku1"
220
+
221
+ every { title } returns "title2"
222
+ every { description } returns "My product"
223
+
224
+ every { productType } returns "sub"
225
+ every { name } returns "name of product"
226
+ every { oneTimePurchaseOfferDetails } returns mockk {
227
+ every { priceCurrencyCode} returns "my code"
228
+ every {formattedPrice} returns "$20.00"
229
+ every { priceAmountMicros } returns 20000
230
+
231
+ }
232
+ every { subscriptionOfferDetails } returns listOf( mockk {
233
+ every { offerToken } returns "sToken"
234
+ every { offerTags } returns listOf("offerTag1","offerTag2")
235
+ every { pricingPhases} returns mockk{
236
+ every { pricingPhaseList } returns listOf(mockk{
237
+ every { formattedPrice } returns "$13.0"
238
+ every { priceCurrencyCode } returns "USD"
239
+ every { billingPeriod } returns "1 week"
240
+ every { billingCycleCount } returns 1
241
+ every { priceAmountMicros } returns 13000
242
+ every { recurrenceMode } returns 2
243
+ })
244
+ }
245
+ })
234
246
  }
235
247
  )
236
248
  )
@@ -242,19 +254,21 @@ class RNIapModuleTestV4 {
242
254
  }
243
255
  mockkStatic(Arguments::class)
244
256
 
245
- val itemsMap = mockk<WritableMap>()
246
- val itemsArr = mockk<WritableArray>()
247
- every { Arguments.createMap() } returns itemsMap
248
- every { Arguments.createArray() } returns itemsArr
249
- every { itemsMap.putString(any(), any()) } just runs
257
+ val itemsMap = mockk<WritableMap>(relaxed = true)
250
258
  var itemsSize = 0
251
- every { itemsArr.pushMap(any()) } answers {
252
- itemsSize++
259
+ val itemsArr = mockk<WritableArray>{
260
+ every { pushString(any()) } just runs
261
+ every { pushMap(any()) } answers {
262
+ itemsSize++
263
+ }
253
264
  }
265
+ every { Arguments.createMap() } returns itemsMap
266
+ every { Arguments.createArray() } returns itemsArr
267
+
254
268
  module.initConnection(mockk())
255
269
  module.getItemsByType("subs", skus, promise)
256
270
  verify { promise.resolve(any()) }
257
- assertEquals(itemsSize, 1)
271
+ assertEquals(3, itemsSize)
258
272
  }
259
273
 
260
274
  @Test
@@ -0,0 +1,2 @@
1
+ #import <React/RCTBridgeModule.h>
2
+ #import <React/RCTViewManager.h>
package/ios/RNIapIos.m CHANGED
@@ -3,23 +3,28 @@
3
3
  #import <React/RCTBridgeModule.h>
4
4
 
5
5
  @interface RCT_EXTERN_MODULE (RNIapIos, NSObject)
6
+
6
7
  RCT_EXTERN_METHOD(initConnection:
7
8
  (RCTPromiseResolveBlock)resolve
8
9
  reject:(RCTPromiseRejectBlock)reject)
10
+
9
11
  RCT_EXTERN_METHOD(endConnection:
10
12
  (RCTPromiseResolveBlock)resolve
11
13
  reject:(RCTPromiseRejectBlock)reject)
14
+
12
15
  RCT_EXTERN_METHOD(getItems:
13
16
  (NSArray*)skus
14
17
  resolve:(RCTPromiseResolveBlock)resolve
15
18
  reject:(RCTPromiseRejectBlock)reject)
19
+
16
20
  RCT_EXTERN_METHOD(getAvailableItems:
17
21
  (RCTPromiseResolveBlock)resolve
18
22
  reject:(RCTPromiseRejectBlock)reject)
23
+
19
24
  RCT_EXTERN_METHOD(buyProduct:
20
25
  (NSString*)sku
21
26
  andDangerouslyFinishTransactionAutomatically:(BOOL)andDangerouslyFinishTransactionAutomatically
22
- applicationUsername:(NSString)applicationUsername
27
+ applicationUsername:(NSString*)applicationUsername
23
28
  resolve:(RCTPromiseResolveBlock)resolve
24
29
  reject:(RCTPromiseRejectBlock)reject)
25
30
  RCT_EXTERN_METHOD(buyProductWithOffer:
@@ -33,17 +38,22 @@ RCT_EXTERN_METHOD(buyProductWithQuantityIOS:
33
38
  quantity:(NSInteger)quantity
34
39
  resolve:(RCTPromiseResolveBlock)resolve
35
40
  reject:(RCTPromiseRejectBlock)reject)
41
+
36
42
  RCT_EXTERN_METHOD(clearTransaction:
37
43
  (RCTPromiseResolveBlock)resolve
38
44
  reject:(RCTPromiseRejectBlock)reject)
45
+
39
46
  RCT_EXTERN_METHOD(clearProducts:
40
47
  (RCTPromiseResolveBlock)resolve
41
48
  reject:(RCTPromiseRejectBlock)reject)
49
+
42
50
  RCT_EXTERN_METHOD(promotedProduct:
43
51
  (RCTPromiseResolveBlock)resolve
44
52
  reject:(RCTPromiseRejectBlock)reject)
53
+
45
54
  RCT_EXTERN_METHOD(buyPromotedProduct:(RCTPromiseResolveBlock)resolve
46
55
  reject:(RCTPromiseRejectBlock)reject)
56
+
47
57
  RCT_EXTERN_METHOD(requestReceipt:
48
58
  (BOOL)refresh
49
59
  resolve:(RCTPromiseResolveBlock)resolve
@@ -52,10 +62,13 @@ RCT_EXTERN_METHOD(finishTransaction:
52
62
  (NSString*)transactionIdentifier
53
63
  resolve:(RCTPromiseResolveBlock)resolve
54
64
  reject:(RCTPromiseRejectBlock)reject)
65
+
55
66
  RCT_EXTERN_METHOD(getPendingTransactions:
56
67
  (RCTPromiseResolveBlock)resolve
57
68
  reject:(RCTPromiseRejectBlock)reject)
69
+
58
70
  RCT_EXTERN_METHOD(presentCodeRedemptionSheet:
59
71
  (RCTPromiseResolveBlock)resolve
60
72
  reject:(RCTPromiseRejectBlock)reject)
73
+
61
74
  @end