react-native-iap 13.0.4 → 14.0.0-rc.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 (381) hide show
  1. package/NitroIap.podspec +33 -0
  2. package/README.md +163 -51
  3. package/android/CMakeLists.txt +32 -0
  4. package/android/build.gradle +107 -138
  5. package/android/fix-prefab.gradle +51 -0
  6. package/android/gradle.properties +5 -13
  7. package/android/src/main/AndroidManifest.xml +1 -4
  8. package/android/src/main/cpp/cpp-adapter.cpp +6 -0
  9. package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +843 -0
  10. package/android/src/main/java/com/margelo/nitro/iap/NitroIapPackage.java +33 -0
  11. package/android/src/main/java/com/margelo/nitro/iap/Types.kt +173 -0
  12. package/ios/Bridge.h +8 -0
  13. package/ios/ErrorUtils.swift +153 -0
  14. package/ios/HybridRnIap.swift +1326 -0
  15. package/ios/ProductStore.swift +33 -0
  16. package/ios/reactnativeiap.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  17. package/ios/reactnativeiap.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  18. package/lib/module/helpers/subscription.js +56 -0
  19. package/lib/module/helpers/subscription.js.map +1 -0
  20. package/lib/module/hooks/useIAP.js +175 -123
  21. package/lib/module/hooks/useIAP.js.map +1 -1
  22. package/lib/module/index.js +1015 -9
  23. package/lib/module/index.js.map +1 -1
  24. package/lib/module/package.json +1 -0
  25. package/lib/module/specs/RnIap.nitro.js +4 -0
  26. package/lib/{commonjs/modules/common.js.map → module/specs/RnIap.nitro.js.map} +1 -1
  27. package/lib/module/types.js +187 -0
  28. package/lib/module/types.js.map +1 -0
  29. package/lib/module/utils/error.js +80 -0
  30. package/lib/module/utils/error.js.map +1 -0
  31. package/lib/module/utils/type-bridge.js +202 -0
  32. package/lib/module/utils/type-bridge.js.map +1 -0
  33. package/lib/typescript/package.json +1 -0
  34. package/lib/typescript/plugin/src/withIAP.d.ts +2 -7
  35. package/lib/typescript/plugin/src/withIAP.d.ts.map +1 -1
  36. package/lib/typescript/scripts/check-nitro-versions.d.ts +3 -0
  37. package/lib/typescript/scripts/check-nitro-versions.d.ts.map +1 -0
  38. package/lib/typescript/src/helpers/subscription.d.ts +14 -0
  39. package/lib/typescript/src/helpers/subscription.d.ts.map +1 -0
  40. package/lib/typescript/src/hooks/useIAP.d.ts +42 -26
  41. package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
  42. package/lib/typescript/src/index.d.ts +356 -8
  43. package/lib/typescript/src/index.d.ts.map +1 -1
  44. package/lib/typescript/src/specs/RnIap.nitro.d.ts +404 -0
  45. package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -0
  46. package/lib/typescript/src/types.d.ts +544 -0
  47. package/lib/typescript/src/types.d.ts.map +1 -0
  48. package/lib/typescript/src/utils/error.d.ts +30 -0
  49. package/lib/typescript/src/utils/error.d.ts.map +1 -0
  50. package/lib/typescript/src/utils/type-bridge.d.ts +40 -0
  51. package/lib/typescript/src/utils/type-bridge.d.ts.map +1 -0
  52. package/nitro.json +17 -0
  53. package/nitrogen/generated/android/NitroIap+autolinking.cmake +80 -0
  54. package/nitrogen/generated/android/NitroIap+autolinking.gradle +27 -0
  55. package/nitrogen/generated/android/NitroIapOnLoad.cpp +50 -0
  56. package/nitrogen/generated/android/NitroIapOnLoad.hpp +25 -0
  57. package/nitrogen/generated/android/c++/JFunc_void_NitroProduct.hpp +78 -0
  58. package/nitrogen/generated/android/c++/JFunc_void_NitroPurchase.hpp +78 -0
  59. package/nitrogen/generated/android/c++/JFunc_void_NitroPurchaseResult.hpp +78 -0
  60. package/nitrogen/generated/android/c++/JHybridRnIapSpec.cpp +577 -0
  61. package/nitrogen/generated/android/c++/JHybridRnIapSpec.hpp +93 -0
  62. package/nitrogen/generated/android/c++/JNitroAndroidReceiptValidationOptions.hpp +66 -0
  63. package/nitrogen/generated/android/c++/JNitroAvailablePurchasesAndroidOptions.hpp +54 -0
  64. package/nitrogen/generated/android/c++/JNitroAvailablePurchasesIosOptions.hpp +65 -0
  65. package/nitrogen/generated/android/c++/JNitroAvailablePurchasesOptions.hpp +62 -0
  66. package/nitrogen/generated/android/c++/JNitroFinishTransactionAndroidParams.hpp +58 -0
  67. package/nitrogen/generated/android/c++/JNitroFinishTransactionIosParams.hpp +53 -0
  68. package/nitrogen/generated/android/c++/JNitroFinishTransactionParams.hpp +62 -0
  69. package/nitrogen/generated/android/c++/JNitroProduct.hpp +154 -0
  70. package/nitrogen/generated/android/c++/JNitroPurchase.hpp +122 -0
  71. package/nitrogen/generated/android/c++/JNitroPurchaseRequest.hpp +66 -0
  72. package/nitrogen/generated/android/c++/JNitroPurchaseResult.hpp +70 -0
  73. package/nitrogen/generated/android/c++/JNitroReceiptValidationParams.hpp +60 -0
  74. package/nitrogen/generated/android/c++/JNitroReceiptValidationResultAndroid.hpp +122 -0
  75. package/nitrogen/generated/android/c++/JNitroReceiptValidationResultIOS.hpp +68 -0
  76. package/nitrogen/generated/android/c++/JNitroRequestPurchaseAndroid.hpp +115 -0
  77. package/nitrogen/generated/android/c++/JNitroRequestPurchaseIos.hpp +84 -0
  78. package/nitrogen/generated/android/c++/JNitroSubscriptionOffer.hpp +57 -0
  79. package/nitrogen/generated/android/c++/JNitroSubscriptionRenewalInfo.hpp +74 -0
  80. package/nitrogen/generated/android/c++/JNitroSubscriptionStatus.hpp +64 -0
  81. package/nitrogen/generated/android/c++/JVariant_Boolean_NitroPurchaseResult.cpp +26 -0
  82. package/nitrogen/generated/android/c++/JVariant_Boolean_NitroPurchaseResult.hpp +71 -0
  83. package/nitrogen/generated/android/c++/JVariant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.cpp +26 -0
  84. package/nitrogen/generated/android/c++/JVariant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.hpp +75 -0
  85. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_NitroProduct.kt +81 -0
  86. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_NitroPurchase.kt +81 -0
  87. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_NitroPurchaseResult.kt +81 -0
  88. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/HybridRnIapSpec.kt +198 -0
  89. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAndroidReceiptValidationOptions.kt +38 -0
  90. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAvailablePurchasesAndroidOptions.kt +29 -0
  91. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAvailablePurchasesIosOptions.kt +38 -0
  92. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAvailablePurchasesOptions.kt +32 -0
  93. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroFinishTransactionAndroidParams.kt +32 -0
  94. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroFinishTransactionIosParams.kt +29 -0
  95. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroFinishTransactionParams.kt +32 -0
  96. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroIapOnLoad.kt +35 -0
  97. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroProduct.kt +104 -0
  98. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchase.kt +80 -0
  99. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchaseRequest.kt +32 -0
  100. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchaseResult.kt +41 -0
  101. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationParams.kt +32 -0
  102. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationResultAndroid.kt +80 -0
  103. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationResultIOS.kt +38 -0
  104. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroRequestPurchaseAndroid.kt +47 -0
  105. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroRequestPurchaseIos.kt +41 -0
  106. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroSubscriptionOffer.kt +32 -0
  107. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroSubscriptionRenewalInfo.kt +44 -0
  108. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroSubscriptionStatus.kt +35 -0
  109. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_Boolean_NitroPurchaseResult.kt +42 -0
  110. package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.kt +42 -0
  111. package/nitrogen/generated/ios/NitroIap+autolinking.rb +60 -0
  112. package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.cpp +152 -0
  113. package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.hpp +1061 -0
  114. package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Umbrella.hpp +107 -0
  115. package/nitrogen/generated/ios/NitroIapAutolinking.mm +33 -0
  116. package/nitrogen/generated/ios/NitroIapAutolinking.swift +25 -0
  117. package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.cpp +11 -0
  118. package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.hpp +355 -0
  119. package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
  120. package/nitrogen/generated/ios/swift/Func_void_NitroProduct.swift +47 -0
  121. package/nitrogen/generated/ios/swift/Func_void_NitroPurchase.swift +47 -0
  122. package/nitrogen/generated/ios/swift/Func_void_NitroPurchaseResult.swift +47 -0
  123. package/nitrogen/generated/ios/swift/Func_void_bool.swift +47 -0
  124. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +47 -0
  125. package/nitrogen/generated/ios/swift/Func_void_std__optional_NitroProduct_.swift +54 -0
  126. package/nitrogen/generated/ios/swift/Func_void_std__optional_NitroPurchase_.swift +54 -0
  127. package/nitrogen/generated/ios/swift/Func_void_std__optional_std__string_.swift +54 -0
  128. package/nitrogen/generated/ios/swift/Func_void_std__optional_std__vector_NitroSubscriptionStatus__.swift +54 -0
  129. package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
  130. package/nitrogen/generated/ios/swift/Func_void_std__variant_NitroReceiptValidationResultIOS__NitroReceiptValidationResultAndroid_.swift +59 -0
  131. package/nitrogen/generated/ios/swift/Func_void_std__variant_bool__NitroPurchaseResult_.swift +59 -0
  132. package/nitrogen/generated/ios/swift/Func_void_std__vector_NitroProduct_.swift +47 -0
  133. package/nitrogen/generated/ios/swift/Func_void_std__vector_NitroPurchase_.swift +47 -0
  134. package/nitrogen/generated/ios/swift/HybridRnIapSpec.swift +78 -0
  135. package/nitrogen/generated/ios/swift/HybridRnIapSpec_cxx.swift +750 -0
  136. package/nitrogen/generated/ios/swift/NitroAndroidReceiptValidationOptions.swift +80 -0
  137. package/nitrogen/generated/ios/swift/NitroAvailablePurchasesAndroidOptions.swift +54 -0
  138. package/nitrogen/generated/ios/swift/NitroAvailablePurchasesIosOptions.swift +116 -0
  139. package/nitrogen/generated/ios/swift/NitroAvailablePurchasesOptions.swift +84 -0
  140. package/nitrogen/generated/ios/swift/NitroFinishTransactionAndroidParams.swift +58 -0
  141. package/nitrogen/generated/ios/swift/NitroFinishTransactionIosParams.swift +35 -0
  142. package/nitrogen/generated/ios/swift/NitroFinishTransactionParams.swift +84 -0
  143. package/nitrogen/generated/ios/swift/NitroProduct.swift +653 -0
  144. package/nitrogen/generated/ios/swift/NitroPurchase.swift +453 -0
  145. package/nitrogen/generated/ios/swift/NitroPurchaseRequest.swift +84 -0
  146. package/nitrogen/generated/ios/swift/NitroPurchaseResult.swift +117 -0
  147. package/nitrogen/generated/ios/swift/NitroReceiptValidationParams.swift +65 -0
  148. package/nitrogen/generated/ios/swift/NitroReceiptValidationResultAndroid.swift +258 -0
  149. package/nitrogen/generated/ios/swift/NitroReceiptValidationResultIOS.swift +87 -0
  150. package/nitrogen/generated/ios/swift/NitroRequestPurchaseAndroid.swift +225 -0
  151. package/nitrogen/generated/ios/swift/NitroRequestPurchaseIos.swift +161 -0
  152. package/nitrogen/generated/ios/swift/NitroSubscriptionOffer.swift +46 -0
  153. package/nitrogen/generated/ios/swift/NitroSubscriptionRenewalInfo.swift +152 -0
  154. package/nitrogen/generated/ios/swift/NitroSubscriptionStatus.swift +76 -0
  155. package/nitrogen/generated/ios/swift/Variant_Bool_NitroPurchaseResult.swift +18 -0
  156. package/nitrogen/generated/ios/swift/Variant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.swift +18 -0
  157. package/nitrogen/generated/shared/c++/HybridRnIapSpec.cpp +50 -0
  158. package/nitrogen/generated/shared/c++/HybridRnIapSpec.hpp +125 -0
  159. package/nitrogen/generated/shared/c++/NitroAndroidReceiptValidationOptions.hpp +80 -0
  160. package/nitrogen/generated/shared/c++/NitroAvailablePurchasesAndroidOptions.hpp +68 -0
  161. package/nitrogen/generated/shared/c++/NitroAvailablePurchasesIosOptions.hpp +79 -0
  162. package/nitrogen/generated/shared/c++/NitroAvailablePurchasesOptions.hpp +76 -0
  163. package/nitrogen/generated/shared/c++/NitroFinishTransactionAndroidParams.hpp +72 -0
  164. package/nitrogen/generated/shared/c++/NitroFinishTransactionIosParams.hpp +67 -0
  165. package/nitrogen/generated/shared/c++/NitroFinishTransactionParams.hpp +76 -0
  166. package/nitrogen/generated/shared/c++/NitroProduct.hpp +168 -0
  167. package/nitrogen/generated/shared/c++/NitroPurchase.hpp +136 -0
  168. package/nitrogen/generated/shared/c++/NitroPurchaseRequest.hpp +76 -0
  169. package/nitrogen/generated/shared/c++/NitroPurchaseResult.hpp +84 -0
  170. package/nitrogen/generated/shared/c++/NitroReceiptValidationParams.hpp +74 -0
  171. package/nitrogen/generated/shared/c++/NitroReceiptValidationResultAndroid.hpp +136 -0
  172. package/nitrogen/generated/shared/c++/NitroReceiptValidationResultIOS.hpp +82 -0
  173. package/nitrogen/generated/shared/c++/NitroRequestPurchaseAndroid.hpp +95 -0
  174. package/nitrogen/generated/shared/c++/NitroRequestPurchaseIos.hpp +85 -0
  175. package/nitrogen/generated/shared/c++/NitroSubscriptionOffer.hpp +71 -0
  176. package/nitrogen/generated/shared/c++/NitroSubscriptionRenewalInfo.hpp +88 -0
  177. package/nitrogen/generated/shared/c++/NitroSubscriptionStatus.hpp +78 -0
  178. package/package.json +145 -104
  179. package/plugin/build/src/withIAP.d.ts +3 -0
  180. package/plugin/build/src/withIAP.js +81 -0
  181. package/plugin/build/tsconfig.tsbuildinfo +1 -0
  182. package/plugin/build/withIAP.d.ts +2 -7
  183. package/plugin/build/withIAP.js +62 -51
  184. package/plugin/src/withIAP.ts +119 -0
  185. package/plugin/tsconfig.json +18 -0
  186. package/plugin/tsconfig.tsbuildinfo +1 -0
  187. package/src/helpers/subscription.ts +65 -0
  188. package/src/hooks/useIAP.ts +361 -222
  189. package/src/index.ts +1194 -9
  190. package/src/specs/RnIap.nitro.ts +501 -0
  191. package/src/types.ts +680 -0
  192. package/src/utils/error.ts +97 -0
  193. package/src/utils/type-bridge.ts +209 -0
  194. package/LICENSE +0 -21
  195. package/RNIap.podspec +0 -36
  196. package/android/src/amazon/AndroidManifest.xml +0 -14
  197. package/android/src/amazon/java/com/dooboolab/rniap/EventSender.kt +0 -10
  198. package/android/src/amazon/java/com/dooboolab/rniap/PurchasingServiceProxy.kt +0 -29
  199. package/android/src/amazon/java/com/dooboolab/rniap/PurchasingServiceProxyAmazonImpl.kt +0 -31
  200. package/android/src/amazon/java/com/dooboolab/rniap/RNIapActivityListener.kt +0 -55
  201. package/android/src/amazon/java/com/dooboolab/rniap/RNIapAmazonListener.kt +0 -325
  202. package/android/src/amazon/java/com/dooboolab/rniap/RNIapAmazonModule.kt +0 -244
  203. package/android/src/amazon/java/com/dooboolab/rniap/RNIapPackage.kt +0 -17
  204. package/android/src/amazon/java/com/dooboolab/rniap/modifysubscription/RNIapAmazonModifySubscriptionListener.kt +0 -88
  205. package/android/src/amazon/java/com/dooboolab/rniap/utils/Extensions.kt +0 -22
  206. package/android/src/main/java/com/dooboolab/rniap/PromiseUtils.kt +0 -62
  207. package/android/src/main/java/com/dooboolab/rniap/PromiseUtlis.kt +0 -43
  208. package/android/src/play/java/com/dooboolab/rniap/PlayUtils.kt +0 -114
  209. package/android/src/play/java/com/dooboolab/rniap/RNIapActivityListener.kt +0 -15
  210. package/android/src/play/java/com/dooboolab/rniap/RNIapModule.kt +0 -911
  211. package/android/src/play/java/com/dooboolab/rniap/RNIapPackage.kt +0 -17
  212. package/android/src/testAmazon/java/com/dooboolab/rniap/RNIapAmazonModuleTest.kt +0 -170
  213. package/app.plugin.js +0 -1
  214. package/ios/IapSerializationUtils.swift +0 -290
  215. package/ios/IapTypes.swift +0 -56
  216. package/ios/IapUtils.swift +0 -40
  217. package/ios/LatestPromiseKeeper.swift +0 -52
  218. package/ios/RNIapIos-Bridging-Header.h +0 -2
  219. package/ios/RNIapIos.m +0 -69
  220. package/ios/RNIapIos.swift +0 -868
  221. package/ios/RNIapIos.xcodeproj/project.pbxproj +0 -289
  222. package/ios/RNIapIosSk2.m +0 -126
  223. package/ios/RNIapIosSk2.swift +0 -1413
  224. package/ios/ThreadSafe.swift +0 -18
  225. package/lib/commonjs/eventEmitter.js +0 -195
  226. package/lib/commonjs/eventEmitter.js.map +0 -1
  227. package/lib/commonjs/hooks/index.js +0 -17
  228. package/lib/commonjs/hooks/index.js.map +0 -1
  229. package/lib/commonjs/hooks/useIAP.js +0 -203
  230. package/lib/commonjs/hooks/useIAP.js.map +0 -1
  231. package/lib/commonjs/hooks/withIAPContext.js +0 -95
  232. package/lib/commonjs/hooks/withIAPContext.js.map +0 -1
  233. package/lib/commonjs/iap.js +0 -836
  234. package/lib/commonjs/iap.js.map +0 -1
  235. package/lib/commonjs/index.js +0 -105
  236. package/lib/commonjs/index.js.map +0 -1
  237. package/lib/commonjs/internal/enhancedFetch.js +0 -26
  238. package/lib/commonjs/internal/enhancedFetch.js.map +0 -1
  239. package/lib/commonjs/internal/fillProductsWithAdditionalData.js +0 -50
  240. package/lib/commonjs/internal/fillProductsWithAdditionalData.js.map +0 -1
  241. package/lib/commonjs/internal/index.js +0 -39
  242. package/lib/commonjs/internal/index.js.map +0 -1
  243. package/lib/commonjs/internal/platform.js +0 -119
  244. package/lib/commonjs/internal/platform.js.map +0 -1
  245. package/lib/commonjs/modules/amazon.js +0 -50
  246. package/lib/commonjs/modules/amazon.js.map +0 -1
  247. package/lib/commonjs/modules/android.js +0 -92
  248. package/lib/commonjs/modules/android.js.map +0 -1
  249. package/lib/commonjs/modules/common.js +0 -2
  250. package/lib/commonjs/modules/index.js +0 -50
  251. package/lib/commonjs/modules/index.js.map +0 -1
  252. package/lib/commonjs/modules/ios.js +0 -160
  253. package/lib/commonjs/modules/ios.js.map +0 -1
  254. package/lib/commonjs/modules/iosSk2.js +0 -113
  255. package/lib/commonjs/modules/iosSk2.js.map +0 -1
  256. package/lib/commonjs/purchaseError.js +0 -170
  257. package/lib/commonjs/purchaseError.js.map +0 -1
  258. package/lib/commonjs/types/amazon.js +0 -2
  259. package/lib/commonjs/types/amazon.js.map +0 -1
  260. package/lib/commonjs/types/android.js +0 -67
  261. package/lib/commonjs/types/android.js.map +0 -1
  262. package/lib/commonjs/types/apple.js +0 -24
  263. package/lib/commonjs/types/apple.js.map +0 -1
  264. package/lib/commonjs/types/appleSk2.js +0 -137
  265. package/lib/commonjs/types/appleSk2.js.map +0 -1
  266. package/lib/commonjs/types/index.js +0 -67
  267. package/lib/commonjs/types/index.js.map +0 -1
  268. package/lib/commonjs/utils/errorMapping.js +0 -83
  269. package/lib/commonjs/utils/errorMapping.js.map +0 -1
  270. package/lib/commonjs/utils/typeGuards.js +0 -74
  271. package/lib/commonjs/utils/typeGuards.js.map +0 -1
  272. package/lib/module/eventEmitter.js +0 -185
  273. package/lib/module/eventEmitter.js.map +0 -1
  274. package/lib/module/hooks/index.js +0 -2
  275. package/lib/module/hooks/index.js.map +0 -1
  276. package/lib/module/hooks/withIAPContext.js +0 -86
  277. package/lib/module/hooks/withIAPContext.js.map +0 -1
  278. package/lib/module/iap.js +0 -805
  279. package/lib/module/iap.js.map +0 -1
  280. package/lib/module/internal/enhancedFetch.js +0 -19
  281. package/lib/module/internal/enhancedFetch.js.map +0 -1
  282. package/lib/module/internal/fillProductsWithAdditionalData.js +0 -43
  283. package/lib/module/internal/fillProductsWithAdditionalData.js.map +0 -1
  284. package/lib/module/internal/index.js +0 -4
  285. package/lib/module/internal/index.js.map +0 -1
  286. package/lib/module/internal/platform.js +0 -102
  287. package/lib/module/internal/platform.js.map +0 -1
  288. package/lib/module/modules/amazon.js +0 -42
  289. package/lib/module/modules/amazon.js.map +0 -1
  290. package/lib/module/modules/android.js +0 -81
  291. package/lib/module/modules/android.js.map +0 -1
  292. package/lib/module/modules/common.js +0 -2
  293. package/lib/module/modules/common.js.map +0 -1
  294. package/lib/module/modules/index.js +0 -5
  295. package/lib/module/modules/index.js.map +0 -1
  296. package/lib/module/modules/ios.js +0 -145
  297. package/lib/module/modules/ios.js.map +0 -1
  298. package/lib/module/modules/iosSk2.js +0 -96
  299. package/lib/module/modules/iosSk2.js.map +0 -1
  300. package/lib/module/purchaseError.js +0 -164
  301. package/lib/module/purchaseError.js.map +0 -1
  302. package/lib/module/types/amazon.js +0 -2
  303. package/lib/module/types/amazon.js.map +0 -1
  304. package/lib/module/types/android.js +0 -63
  305. package/lib/module/types/android.js.map +0 -1
  306. package/lib/module/types/apple.js +0 -17
  307. package/lib/module/types/apple.js.map +0 -1
  308. package/lib/module/types/appleSk2.js +0 -129
  309. package/lib/module/types/appleSk2.js.map +0 -1
  310. package/lib/module/types/index.js +0 -75
  311. package/lib/module/types/index.js.map +0 -1
  312. package/lib/module/utils/errorMapping.js +0 -75
  313. package/lib/module/utils/errorMapping.js.map +0 -1
  314. package/lib/module/utils/typeGuards.js +0 -61
  315. package/lib/module/utils/typeGuards.js.map +0 -1
  316. package/lib/typescript/src/eventEmitter.d.ts +0 -151
  317. package/lib/typescript/src/eventEmitter.d.ts.map +0 -1
  318. package/lib/typescript/src/hooks/index.d.ts +0 -2
  319. package/lib/typescript/src/hooks/index.d.ts.map +0 -1
  320. package/lib/typescript/src/hooks/withIAPContext.d.ts +0 -27
  321. package/lib/typescript/src/hooks/withIAPContext.d.ts.map +0 -1
  322. package/lib/typescript/src/iap.d.ts +0 -503
  323. package/lib/typescript/src/iap.d.ts.map +0 -1
  324. package/lib/typescript/src/internal/enhancedFetch.d.ts +0 -6
  325. package/lib/typescript/src/internal/enhancedFetch.d.ts.map +0 -1
  326. package/lib/typescript/src/internal/fillProductsWithAdditionalData.d.ts +0 -7
  327. package/lib/typescript/src/internal/fillProductsWithAdditionalData.d.ts.map +0 -1
  328. package/lib/typescript/src/internal/index.d.ts +0 -4
  329. package/lib/typescript/src/internal/index.d.ts.map +0 -1
  330. package/lib/typescript/src/internal/platform.d.ts +0 -27
  331. package/lib/typescript/src/internal/platform.d.ts.map +0 -1
  332. package/lib/typescript/src/modules/amazon.d.ts +0 -55
  333. package/lib/typescript/src/modules/amazon.d.ts.map +0 -1
  334. package/lib/typescript/src/modules/android.d.ts +0 -74
  335. package/lib/typescript/src/modules/android.d.ts.map +0 -1
  336. package/lib/typescript/src/modules/common.d.ts +0 -14
  337. package/lib/typescript/src/modules/common.d.ts.map +0 -1
  338. package/lib/typescript/src/modules/index.d.ts +0 -5
  339. package/lib/typescript/src/modules/index.d.ts.map +0 -1
  340. package/lib/typescript/src/modules/ios.d.ts +0 -117
  341. package/lib/typescript/src/modules/ios.d.ts.map +0 -1
  342. package/lib/typescript/src/modules/iosSk2.d.ts +0 -140
  343. package/lib/typescript/src/modules/iosSk2.d.ts.map +0 -1
  344. package/lib/typescript/src/purchaseError.d.ts +0 -133
  345. package/lib/typescript/src/purchaseError.d.ts.map +0 -1
  346. package/lib/typescript/src/types/amazon.d.ts +0 -33
  347. package/lib/typescript/src/types/amazon.d.ts.map +0 -1
  348. package/lib/typescript/src/types/android.d.ts +0 -66
  349. package/lib/typescript/src/types/android.d.ts.map +0 -1
  350. package/lib/typescript/src/types/apple.d.ts +0 -27
  351. package/lib/typescript/src/types/apple.d.ts.map +0 -1
  352. package/lib/typescript/src/types/appleSk2.d.ts +0 -129
  353. package/lib/typescript/src/types/appleSk2.d.ts.map +0 -1
  354. package/lib/typescript/src/types/index.d.ts +0 -302
  355. package/lib/typescript/src/types/index.d.ts.map +0 -1
  356. package/lib/typescript/src/utils/errorMapping.d.ts +0 -29
  357. package/lib/typescript/src/utils/errorMapping.d.ts.map +0 -1
  358. package/lib/typescript/src/utils/typeGuards.d.ts +0 -53
  359. package/lib/typescript/src/utils/typeGuards.d.ts.map +0 -1
  360. package/src/eventEmitter.ts +0 -212
  361. package/src/hooks/index.ts +0 -1
  362. package/src/hooks/withIAPContext.tsx +0 -179
  363. package/src/iap.ts +0 -1046
  364. package/src/internal/enhancedFetch.ts +0 -25
  365. package/src/internal/fillProductsWithAdditionalData.ts +0 -47
  366. package/src/internal/index.ts +0 -3
  367. package/src/internal/platform.ts +0 -135
  368. package/src/modules/amazon.ts +0 -94
  369. package/src/modules/android.ts +0 -179
  370. package/src/modules/common.ts +0 -16
  371. package/src/modules/index.ts +0 -4
  372. package/src/modules/ios.ts +0 -229
  373. package/src/modules/iosSk2.ts +0 -194
  374. package/src/purchaseError.ts +0 -196
  375. package/src/types/amazon.ts +0 -40
  376. package/src/types/android.ts +0 -89
  377. package/src/types/apple.ts +0 -44
  378. package/src/types/appleSk2.ts +0 -275
  379. package/src/types/index.ts +0 -379
  380. package/src/utils/errorMapping.ts +0 -88
  381. package/src/utils/typeGuards.ts +0 -90
@@ -0,0 +1,501 @@
1
+ import type { HybridObject } from 'react-native-nitro-modules'
2
+
3
+ // ╔══════════════════════════════════════════════════════════════════════════╗
4
+ // ║ PARAMS ║
5
+ // ╚══════════════════════════════════════════════════════════════════════════╝
6
+
7
+ // Receipt validation parameters
8
+
9
+ /**
10
+ * Android-specific receipt validation options
11
+ */
12
+ export interface NitroAndroidReceiptValidationOptions {
13
+ packageName: string
14
+ productToken: string
15
+ accessToken: string
16
+ isSub?: boolean
17
+ }
18
+
19
+ /**
20
+ * Receipt validation parameters
21
+ */
22
+ export interface NitroReceiptValidationParams {
23
+ sku: string
24
+ androidOptions?: NitroAndroidReceiptValidationOptions
25
+ }
26
+
27
+ // Purchase request parameters
28
+
29
+ /**
30
+ * iOS-specific purchase request parameters
31
+ */
32
+ interface NitroRequestPurchaseIos {
33
+ sku: string
34
+ andDangerouslyFinishTransactionAutomatically?: boolean
35
+ appAccountToken?: string
36
+ quantity?: number
37
+ withOffer?: Record<string, string>
38
+ }
39
+
40
+ /**
41
+ * Android subscription offer structure
42
+ */
43
+ interface NitroSubscriptionOffer {
44
+ sku: string
45
+ offerToken: string
46
+ }
47
+
48
+ /**
49
+ * Android-specific purchase request parameters
50
+ */
51
+ interface NitroRequestPurchaseAndroid {
52
+ skus: string[]
53
+ obfuscatedAccountIdAndroid?: string
54
+ obfuscatedProfileIdAndroid?: string
55
+ isOfferPersonalized?: boolean
56
+ subscriptionOffers?: NitroSubscriptionOffer[]
57
+ replacementModeAndroid?: number
58
+ purchaseTokenAndroid?: string
59
+ }
60
+
61
+ /**
62
+ * Unified purchase request with platform-specific options
63
+ */
64
+ interface NitroPurchaseRequest {
65
+ ios?: NitroRequestPurchaseIos
66
+ android?: NitroRequestPurchaseAndroid
67
+ }
68
+
69
+ // Available purchases parameters
70
+
71
+ /**
72
+ * iOS-specific options for getting available purchases
73
+ */
74
+ interface NitroAvailablePurchasesIosOptions {
75
+ alsoPublishToEventListener?: boolean // @deprecated Use alsoPublishToEventListenerIOS
76
+ onlyIncludeActiveItems?: boolean // @deprecated Use onlyIncludeActiveItemsIOS
77
+ alsoPublishToEventListenerIOS?: boolean
78
+ onlyIncludeActiveItemsIOS?: boolean
79
+ }
80
+
81
+ /**
82
+ * Android-specific options for getting available purchases
83
+ */
84
+ interface NitroAvailablePurchasesAndroidOptions {
85
+ type?: string // 'inapp' or 'subs'
86
+ }
87
+
88
+ /**
89
+ * Unified available purchases options with platform-specific parameters
90
+ */
91
+ interface NitroAvailablePurchasesOptions {
92
+ ios?: NitroAvailablePurchasesIosOptions
93
+ android?: NitroAvailablePurchasesAndroidOptions
94
+ }
95
+
96
+ // Transaction finish parameters
97
+
98
+ /**
99
+ * iOS-specific parameters for finishing a transaction
100
+ */
101
+ interface NitroFinishTransactionIosParams {
102
+ transactionId: string
103
+ }
104
+
105
+ /**
106
+ * Android-specific parameters for finishing a transaction
107
+ */
108
+ interface NitroFinishTransactionAndroidParams {
109
+ purchaseToken: string
110
+ isConsumable?: boolean
111
+ }
112
+
113
+ /**
114
+ * Unified finish transaction parameters with platform-specific options
115
+ */
116
+ interface NitroFinishTransactionParams {
117
+ ios?: NitroFinishTransactionIosParams
118
+ android?: NitroFinishTransactionAndroidParams
119
+ }
120
+
121
+ // ╔══════════════════════════════════════════════════════════════════════════╗
122
+ // ║ TYPES ║
123
+ // ╚══════════════════════════════════════════════════════════════════════════╝
124
+
125
+ /**
126
+ * Subscription renewal information (iOS only)
127
+ */
128
+ export interface NitroSubscriptionRenewalInfo {
129
+ autoRenewStatus: boolean
130
+ autoRenewPreference?: string
131
+ expirationReason?: number
132
+ gracePeriodExpirationDate?: number
133
+ currentProductID?: string
134
+ platform: string
135
+ }
136
+
137
+ /**
138
+ * Subscription status information (iOS only)
139
+ */
140
+ export interface NitroSubscriptionStatus {
141
+ state: number
142
+ platform: string
143
+ renewalInfo?: NitroSubscriptionRenewalInfo
144
+ }
145
+
146
+ /**
147
+ * Purchase result structure for Android operations
148
+ */
149
+ export interface NitroPurchaseResult {
150
+ responseCode: number
151
+ debugMessage?: string
152
+ code: string
153
+ message: string
154
+ purchaseToken?: string
155
+ }
156
+
157
+ /**
158
+ * iOS receipt validation result
159
+ */
160
+ export interface NitroReceiptValidationResultIOS {
161
+ isValid: boolean
162
+ receiptData: string
163
+ jwsRepresentation: string
164
+ latestTransaction?: NitroPurchase
165
+ }
166
+
167
+ /**
168
+ * Android receipt validation result
169
+ */
170
+ export interface NitroReceiptValidationResultAndroid {
171
+ autoRenewing: boolean
172
+ betaProduct: boolean
173
+ cancelDate: number | null
174
+ cancelReason: string
175
+ deferredDate: number | null
176
+ deferredSku: number | null
177
+ freeTrialEndDate: number
178
+ gracePeriodEndDate: number
179
+ parentProductId: string
180
+ productId: string
181
+ productType: string
182
+ purchaseDate: number
183
+ quantity: number
184
+ receiptId: string
185
+ renewalDate: number
186
+ term: string
187
+ termSku: string
188
+ testTransaction: boolean
189
+ }
190
+
191
+ /**
192
+ * Purchase data structure returned from native
193
+ */
194
+ export interface NitroPurchase {
195
+ // Common fields
196
+ id: string
197
+ productId: string
198
+ transactionDate: number
199
+ purchaseToken?: string
200
+ platform: string
201
+
202
+ // iOS specific fields
203
+ quantityIOS?: number
204
+ originalTransactionDateIOS?: number
205
+ originalTransactionIdentifierIOS?: string
206
+ appAccountToken?: string
207
+
208
+ // Android specific fields
209
+ purchaseTokenAndroid?: string
210
+ dataAndroid?: string
211
+ signatureAndroid?: string
212
+ autoRenewingAndroid?: boolean
213
+ purchaseStateAndroid?: number
214
+ isAcknowledgedAndroid?: boolean
215
+ packageNameAndroid?: string
216
+ obfuscatedAccountIdAndroid?: string
217
+ obfuscatedProfileIdAndroid?: string
218
+ }
219
+
220
+ /**
221
+ * Product data structure returned from native
222
+ */
223
+ export interface NitroProduct {
224
+ // Common fields
225
+ id: string
226
+ title: string
227
+ description: string
228
+ type: string
229
+ displayName?: string
230
+ displayPrice?: string
231
+ currency?: string
232
+ price?: number
233
+ platform: string
234
+
235
+ // iOS specific fields
236
+ isFamilyShareable?: boolean
237
+ jsonRepresentation?: string
238
+ subscriptionPeriodUnitIOS?: string
239
+ subscriptionPeriodNumberIOS?: number
240
+ introductoryPriceIOS?: string
241
+ introductoryPriceAsAmountIOS?: number
242
+ introductoryPricePaymentModeIOS?: string
243
+ introductoryPriceNumberOfPeriodsIOS?: number
244
+ introductoryPriceSubscriptionPeriodIOS?: string
245
+
246
+ // Android specific fields
247
+ originalPrice?: string
248
+ originalPriceAmountMicros?: number
249
+ introductoryPriceValue?: number
250
+ introductoryPriceCycles?: number
251
+ introductoryPricePeriod?: string
252
+ subscriptionPeriod?: string
253
+ freeTrialPeriod?: string
254
+ subscriptionOfferDetailsAndroid?: string // Android subscription offer details as JSON string
255
+ }
256
+
257
+ // ╔══════════════════════════════════════════════════════════════════════════╗
258
+ // ║ MAIN INTERFACE ║
259
+ // ╚══════════════════════════════════════════════════════════════════════════╝
260
+
261
+ /**
262
+ * Main RnIap HybridObject interface for native bridge
263
+ */
264
+ export interface RnIap
265
+ extends HybridObject<{ ios: 'swift'; android: 'kotlin' }> {
266
+ // Connection methods
267
+
268
+ /**
269
+ * Initialize connection to the store
270
+ * @returns Promise<boolean> - true if connection successful
271
+ */
272
+ initConnection(): Promise<boolean>
273
+
274
+ /**
275
+ * End connection to the store
276
+ * @returns Promise<boolean> - true if disconnection successful
277
+ */
278
+ endConnection(): Promise<boolean>
279
+
280
+ // Product methods
281
+
282
+ /**
283
+ * Fetch products from the store
284
+ * @param skus - Array of product SKUs to fetch
285
+ * @param type - Type of products: 'inapp' or 'subs'
286
+ * @returns Promise<NitroProduct[]> - Array of products from the store
287
+ */
288
+ fetchProducts(skus: string[], type: string): Promise<NitroProduct[]>
289
+
290
+ // Purchase methods (unified)
291
+
292
+ /**
293
+ * Request a purchase (unified method for both platforms)
294
+ * ⚠️ Important: This is an event-based operation, not promise-based.
295
+ * Listen for events through purchaseUpdatedListener or purchaseErrorListener.
296
+ * @param request - Platform-specific purchase request parameters
297
+ * @returns Promise<void> - Always returns void, listen for events instead
298
+ */
299
+ requestPurchase(request: NitroPurchaseRequest): Promise<void>
300
+
301
+ /**
302
+ * Get available purchases (unified method for both platforms)
303
+ * @param options - Platform-specific options for getting available purchases
304
+ * @returns Promise<NitroPurchase[]> - Array of available purchases
305
+ */
306
+ getAvailablePurchases(
307
+ options?: NitroAvailablePurchasesOptions
308
+ ): Promise<NitroPurchase[]>
309
+
310
+ /**
311
+ * Finish a transaction (unified method for both platforms)
312
+ * @param params - Platform-specific transaction finish parameters
313
+ * @returns Promise<NitroPurchaseResult | boolean> - Result (Android) or success flag (iOS)
314
+ */
315
+ finishTransaction(
316
+ params: NitroFinishTransactionParams
317
+ ): Promise<NitroPurchaseResult | boolean>
318
+
319
+ // Event listener methods
320
+
321
+ /**
322
+ * Add a listener for purchase updates
323
+ * @param listener - Function to call when a purchase is updated
324
+ */
325
+ addPurchaseUpdatedListener(listener: (purchase: NitroPurchase) => void): void
326
+
327
+ /**
328
+ * Add a listener for purchase errors
329
+ * @param listener - Function to call when a purchase error occurs
330
+ */
331
+ addPurchaseErrorListener(listener: (error: NitroPurchaseResult) => void): void
332
+
333
+ /**
334
+ * Remove a purchase updated listener
335
+ * @param listener - Function to remove from listeners
336
+ */
337
+ removePurchaseUpdatedListener(
338
+ listener: (purchase: NitroPurchase) => void
339
+ ): void
340
+
341
+ /**
342
+ * Remove a purchase error listener
343
+ * @param listener - Function to remove from listeners
344
+ */
345
+ removePurchaseErrorListener(
346
+ listener: (error: NitroPurchaseResult) => void
347
+ ): void
348
+
349
+ /**
350
+ * Add a listener for iOS promoted product events
351
+ * @param listener - Function to call when a promoted product is selected in the App Store
352
+ * @platform iOS
353
+ */
354
+ addPromotedProductListenerIOS(listener: (product: NitroProduct) => void): void
355
+
356
+ /**
357
+ * Remove a promoted product listener
358
+ * @param listener - Function to remove from listeners
359
+ * @platform iOS
360
+ */
361
+ removePromotedProductListenerIOS(
362
+ listener: (product: NitroProduct) => void
363
+ ): void
364
+
365
+ /**
366
+ * Get the storefront identifier for the user's App Store account (iOS only)
367
+ * @returns Promise<string> - The storefront identifier (e.g., 'USA' for United States)
368
+ * @platform iOS
369
+ */
370
+ getStorefrontIOS(): Promise<string>
371
+
372
+ /**
373
+ * Get the original app transaction ID if the app was purchased from the App Store (iOS only)
374
+ * @returns Promise<string | null> - The original app transaction ID or null if not purchased
375
+ * @platform iOS
376
+ */
377
+ getAppTransactionIOS(): Promise<string | null>
378
+
379
+ /**
380
+ * Request the promoted product from the App Store (iOS only)
381
+ * @returns Promise<NitroProduct | null> - The promoted product or null if none available
382
+ * @platform iOS
383
+ */
384
+ requestPromotedProductIOS(): Promise<NitroProduct | null>
385
+
386
+ /**
387
+ * Buy the promoted product from the App Store (iOS only)
388
+ * @returns Promise<void>
389
+ * @platform iOS
390
+ */
391
+ buyPromotedProductIOS(): Promise<void>
392
+
393
+ /**
394
+ * Present the code redemption sheet for offer codes (iOS only)
395
+ * @returns Promise<boolean> - True if the sheet was presented successfully
396
+ * @platform iOS
397
+ */
398
+ presentCodeRedemptionSheetIOS(): Promise<boolean>
399
+
400
+ /**
401
+ * Clear unfinished transactions (iOS only)
402
+ * @returns Promise<void>
403
+ * @platform iOS
404
+ */
405
+ clearTransactionIOS(): Promise<void>
406
+
407
+ /**
408
+ * Begin a refund request for a product (iOS 15+ only)
409
+ * @param sku - The product SKU to refund
410
+ * @returns Promise<string | null> - The refund status or null if not available
411
+ * @platform iOS
412
+ */
413
+ beginRefundRequestIOS(sku: string): Promise<string | null>
414
+
415
+ /**
416
+ * Get subscription status for a product (iOS only)
417
+ * @param sku - The product SKU
418
+ * @returns Promise<NitroSubscriptionStatus[] | null> - Array of subscription status objects
419
+ * @platform iOS
420
+ */
421
+ subscriptionStatusIOS(sku: string): Promise<NitroSubscriptionStatus[] | null>
422
+
423
+ /**
424
+ * Get current entitlement for a product (iOS only)
425
+ * @param sku - The product SKU
426
+ * @returns Promise<NitroPurchase | null> - Current entitlement or null
427
+ * @platform iOS
428
+ */
429
+ currentEntitlementIOS(sku: string): Promise<NitroPurchase | null>
430
+
431
+ /**
432
+ * Get latest transaction for a product (iOS only)
433
+ * @param sku - The product SKU
434
+ * @returns Promise<NitroPurchase | null> - Latest transaction or null
435
+ * @platform iOS
436
+ */
437
+ latestTransactionIOS(sku: string): Promise<NitroPurchase | null>
438
+
439
+ /**
440
+ * Get pending transactions (iOS only)
441
+ * @returns Promise<NitroPurchase[]> - Array of pending transactions
442
+ * @platform iOS
443
+ */
444
+ getPendingTransactionsIOS(): Promise<NitroPurchase[]>
445
+
446
+ /**
447
+ * Sync with the App Store (iOS only)
448
+ * @returns Promise<boolean> - Success flag
449
+ * @platform iOS
450
+ */
451
+ syncIOS(): Promise<boolean>
452
+
453
+ /**
454
+ * Show manage subscriptions screen (iOS only)
455
+ * @returns Promise<boolean> - Success flag
456
+ * @platform iOS
457
+ */
458
+ showManageSubscriptionsIOS(): Promise<boolean>
459
+
460
+ /**
461
+ * Check if user is eligible for intro offer (iOS only)
462
+ * @param groupID - The subscription group ID
463
+ * @returns Promise<boolean> - Eligibility status
464
+ * @platform iOS
465
+ */
466
+ isEligibleForIntroOfferIOS(groupID: string): Promise<boolean>
467
+
468
+ /**
469
+ * Get receipt data (iOS only)
470
+ * @returns Promise<string> - Base64 encoded receipt data
471
+ * @platform iOS
472
+ */
473
+ getReceiptDataIOS(): Promise<string>
474
+
475
+ /**
476
+ * Check if transaction is verified (iOS only)
477
+ * @param sku - The product SKU
478
+ * @returns Promise<boolean> - Verification status
479
+ * @platform iOS
480
+ */
481
+ isTransactionVerifiedIOS(sku: string): Promise<boolean>
482
+
483
+ /**
484
+ * Get transaction JWS representation (iOS only)
485
+ * @param sku - The product SKU
486
+ * @returns Promise<string | null> - JWS representation or null
487
+ * @platform iOS
488
+ */
489
+ getTransactionJwsIOS(sku: string): Promise<string | null>
490
+
491
+ /**
492
+ * Validate a receipt on the appropriate platform
493
+ * @param params - Receipt validation parameters including SKU and platform-specific options
494
+ * @returns Promise<NitroReceiptValidationResultIOS | NitroReceiptValidationResultAndroid> - Platform-specific validation result
495
+ */
496
+ validateReceipt(
497
+ params: NitroReceiptValidationParams
498
+ ): Promise<
499
+ NitroReceiptValidationResultIOS | NitroReceiptValidationResultAndroid
500
+ >
501
+ }