react-native-iap 15.4.0-rc.3 → 15.4.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/README.md +23 -25
- package/android/src/main/java/com/margelo/nitro/iap/ConnectionLifecycleQueue.kt +113 -0
- package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +471 -255
- package/android/src/main/java/com/margelo/nitro/iap/ProductSerialization.kt +98 -0
- package/android/src/main/java/com/margelo/nitro/iap/RnIapLog.kt +23 -1
- package/ios/HybridRnIap.swift +230 -140
- package/ios/RnIapHelper.swift +180 -28
- package/ios/RnIapLog.swift +24 -1
- package/lib/module/hooks/useIAP.js +20 -4
- package/lib/module/hooks/useIAP.js.map +1 -1
- package/lib/module/index.js +151 -46
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.kepler.js +3 -0
- package/lib/module/index.kepler.js.map +1 -1
- package/lib/module/types.js +77 -14
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/error.js +7 -3
- package/lib/module/utils/error.js.map +1 -1
- package/lib/module/utils/errorMapping.js +2 -0
- package/lib/module/utils/errorMapping.js.map +1 -1
- package/lib/module/utils/type-bridge.js +50 -22
- package/lib/module/utils/type-bridge.js.map +1 -1
- package/lib/module/vega-adapter.js +55 -8
- package/lib/module/vega-adapter.js.map +1 -1
- package/lib/typescript/src/hooks/useIAP.d.ts +28 -5
- package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +50 -10
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/index.kepler.d.ts +3 -0
- package/lib/typescript/src/index.kepler.d.ts.map +1 -1
- package/lib/typescript/src/specs/RnIap.nitro.d.ts +98 -26
- package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +279 -59
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/utils/error.d.ts.map +1 -1
- package/lib/typescript/src/utils/errorMapping.d.ts +3 -1
- package/lib/typescript/src/utils/errorMapping.d.ts.map +1 -1
- package/lib/typescript/src/utils/type-bridge.d.ts.map +1 -1
- package/lib/typescript/src/vega-adapter.d.ts.map +1 -1
- package/nitro.json +8 -2
- package/nitrogen/generated/android/NitroIap+autolinking.cmake +4 -1
- package/nitrogen/generated/android/NitroIapOnLoad.cpp +2 -2
- package/nitrogen/generated/android/c++/JAdvancedCommerceInfoIOS.hpp +10 -10
- package/nitrogen/generated/android/c++/JAdvancedCommerceItemDetailsIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JAdvancedCommerceItemIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JAdvancedCommerceRefundIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JAlternativeBillingModeAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JAndroidSubscriptionOfferInput.hpp +2 -2
- package/nitrogen/generated/android/c++/JBillingChoiceImageLayoutAndroid.hpp +61 -0
- package/nitrogen/generated/android/c++/JBillingChoiceScreenTypeAndroid.hpp +61 -0
- package/nitrogen/generated/android/c++/JBillingProgramAndroid.hpp +5 -2
- package/nitrogen/generated/android/c++/JDeveloperBillingLaunchModeAndroid.hpp +61 -0
- package/nitrogen/generated/android/c++/JDeveloperBillingOptionParamsAndroid.hpp +78 -0
- package/nitrogen/generated/android/c++/JDeveloperBillingTypeAndroid.hpp +61 -0
- package/nitrogen/generated/android/c++/JDeveloperProvidedBillingDetailsAndroid.hpp +47 -7
- package/nitrogen/generated/android/c++/JDeveloperProvidedBillingProductAndroid.hpp +72 -0
- package/nitrogen/generated/android/c++/JExternalLinkLaunchModeAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalLinkTypeAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseCustomLinkNoticeResultIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseCustomLinkNoticeTypeIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseCustomLinkTokenResultIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseCustomLinkTokenTypeIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseLinkResultIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseNoticeAction.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseNoticeResultIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_DeveloperProvidedBillingDetailsAndroid.hpp +12 -2
- package/nitrogen/generated/android/c++/JFunc_void_NitroProduct.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_NitroPurchase.hpp +26 -2
- package/nitrogen/generated/android/c++/JFunc_void_NitroPurchaseResult.hpp +5 -2
- package/nitrogen/generated/android/c++/JFunc_void_UserChoiceBillingDetails.hpp +12 -2
- package/nitrogen/generated/android/c++/JHybridRnIapSpec.cpp +160 -48
- package/nitrogen/generated/android/c++/JHybridRnIapSpec.hpp +7 -4
- package/nitrogen/generated/android/c++/JIapPlatform.hpp +2 -2
- package/nitrogen/generated/android/c++/JIapStore.hpp +2 -2
- package/nitrogen/generated/android/c++/JIapkitPurchaseState.hpp +2 -2
- package/nitrogen/generated/android/c++/JInAppMessageCategoryAndroid.hpp +58 -0
- package/nitrogen/generated/android/c++/JInAppMessageResponseCodeAndroid.hpp +58 -0
- package/nitrogen/generated/android/c++/JInitConnectionConfig.hpp +9 -3
- package/nitrogen/generated/android/c++/JNitroActiveSubscription.hpp +7 -2
- package/nitrogen/generated/android/c++/JNitroAvailablePurchasesAndroidOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroAvailablePurchasesAndroidType.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroAvailablePurchasesIosOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroAvailablePurchasesOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroBillingChoiceInfoAndroid.hpp +66 -0
- package/nitrogen/generated/android/c++/JNitroBillingProgramAvailabilityResultAndroid.hpp +20 -5
- package/nitrogen/generated/android/c++/JNitroBillingProgramInformationDialogParamsAndroid.hpp +63 -0
- package/nitrogen/generated/android/c++/JNitroBillingProgramReportingDetailsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroBillingResultAndroid.hpp +72 -0
- package/nitrogen/generated/android/c++/JNitroDeepLinkOptionsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroDiscountAmountAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroDiscountDisplayInfoAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroFinishTransactionAndroidParams.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroFinishTransactionIosParams.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroFinishTransactionParams.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroGetBillingChoiceInfoParamsAndroid.hpp +74 -0
- package/nitrogen/generated/android/c++/JNitroInAppMessageParamsAndroid.hpp +64 -0
- package/nitrogen/generated/android/c++/JNitroInAppMessageResultAndroid.hpp +68 -0
- package/nitrogen/generated/android/c++/JNitroLaunchExternalLinkParamsAndroid.hpp +12 -3
- package/nitrogen/generated/android/c++/JNitroLimitedQuantityInfoAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroOneTimePurchaseOfferDetail.hpp +15 -11
- package/nitrogen/generated/android/c++/JNitroPreorderDetailsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroProduct.hpp +15 -3
- package/nitrogen/generated/android/c++/JNitroPurchase.hpp +53 -5
- package/nitrogen/generated/android/c++/JNitroPurchaseRequest.hpp +9 -2
- package/nitrogen/generated/android/c++/JNitroPurchaseResult.hpp +46 -5
- package/nitrogen/generated/android/c++/JNitroReceiptValidationAppleOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroReceiptValidationGoogleOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroReceiptValidationHorizonOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroReceiptValidationParams.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroReceiptValidationResultAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroReceiptValidationResultIOS.hpp +26 -2
- package/nitrogen/generated/android/c++/JNitroRenewalInfoIOS.hpp +16 -3
- package/nitrogen/generated/android/c++/JNitroRentalDetailsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroRequestPurchaseAndroid.hpp +26 -11
- package/nitrogen/generated/android/c++/JNitroRequestPurchaseIos.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroSubscriptionStatus.hpp +15 -9
- package/nitrogen/generated/android/c++/JNitroValidTimeWindowAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitAmazonProps.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitAppleProps.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitGoogleProps.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitProps.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitResult.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithProviderError.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithProviderProps.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithProviderResult.hpp +2 -2
- package/nitrogen/generated/android/c++/JPaymentModeIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JPendingPurchaseUpdateAndroid.hpp +10 -10
- package/nitrogen/generated/android/c++/JProductType.hpp +58 -0
- package/nitrogen/generated/android/c++/JPromotionalOfferJwsInputIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JPurchase.hpp +3 -3
- package/nitrogen/generated/android/c++/JPurchaseAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JPurchaseIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JPurchaseOfferIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JPurchaseState.hpp +2 -2
- package/nitrogen/generated/android/c++/JPurchaseUpdatedListenerOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JPurchaseVerificationProvider.hpp +2 -2
- package/nitrogen/generated/android/c++/JRenewalCommitmentInfoIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JRenewalInfoIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JRequestPurchaseResult.cpp +4 -4
- package/nitrogen/generated/android/c++/JRequestPurchaseResult.hpp +9 -9
- package/nitrogen/generated/android/c++/JSubResponseCodeAndroid.hpp +61 -0
- package/nitrogen/generated/android/c++/JSubscriptionBillingPlanTypeIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JSubscriptionProductReplacementParamsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JSubscriptionReplacementModeAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JTransactionCommitmentInfoIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JUserChoiceBillingDetails.hpp +29 -11
- package/nitrogen/generated/android/c++/JVariant_Boolean_NitroPurchaseResult.hpp +6 -3
- package/nitrogen/generated/android/c++/JVariant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.hpp +27 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_AdvancedCommerceInfoIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_AdvancedCommerceItemDetailsIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_AdvancedCommerceRefundIOS_.cpp +4 -4
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_AdvancedCommerceRefundIOS_.hpp +7 -7
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_AndroidSubscriptionOfferInput_.cpp +4 -4
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_AndroidSubscriptionOfferInput_.hpp +7 -7
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_DeveloperProvidedBillingProductAndroid_.cpp +35 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_DeveloperProvidedBillingProductAndroid_.hpp +86 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_InAppMessageCategoryAndroid_.cpp +35 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_InAppMessageCategoryAndroid_.hpp +81 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_NitroOneTimePurchaseOfferDetail_.cpp +4 -4
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_NitroOneTimePurchaseOfferDetail_.hpp +7 -7
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_NitroSubscriptionStatus_.cpp +4 -4
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_NitroSubscriptionStatus_.hpp +16 -10
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_NitroVerifyPurchaseWithProviderError_.cpp +4 -4
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_NitroVerifyPurchaseWithProviderError_.hpp +7 -7
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_String_.cpp +4 -4
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_String_.hpp +7 -7
- package/nitrogen/generated/android/c++/JVariant_NullType_Boolean.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_DeveloperBillingOptionParamsAndroid.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DeveloperBillingOptionParamsAndroid.hpp +78 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_InitConnectionConfig.hpp +5 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_Map_String__String_.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroAvailablePurchasesAndroidOptions.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroAvailablePurchasesIosOptions.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroDiscountAmountAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroDiscountDisplayInfoAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroFinishTransactionAndroidParams.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroFinishTransactionIosParams.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroInAppMessageParamsAndroid.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroInAppMessageParamsAndroid.hpp +76 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroLimitedQuantityInfoAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroPreorderDetailsAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroProduct.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroPurchase.hpp +27 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroReceiptValidationAppleOptions.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroReceiptValidationGoogleOptions.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroReceiptValidationHorizonOptions.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroRenewalInfoIOS.hpp +8 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroRentalDetailsAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroRequestPurchaseAndroid.hpp +10 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroRequestPurchaseIos.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroValidTimeWindowAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroVerifyPurchaseWithIapkitAmazonProps.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroVerifyPurchaseWithIapkitAppleProps.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroVerifyPurchaseWithIapkitGoogleProps.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroVerifyPurchaseWithIapkitProps.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroVerifyPurchaseWithIapkitResult.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_PendingPurchaseUpdateAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_PromotionalOfferJwsInputIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_PurchaseOfferIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_RenewalCommitmentInfoIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_RenewalInfoIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_String.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_SubscriptionProductReplacementParamsAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_TransactionCommitmentInfoIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_WinBackOfferInputIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JWinBackOfferInputIOS.hpp +2 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/AdvancedCommerceInfoIOS.kt +27 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/AdvancedCommerceItemDetailsIOS.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/AdvancedCommerceItemIOS.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/AdvancedCommerceRefundIOS.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/AndroidSubscriptionOfferInput.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/BillingChoiceImageLayoutAndroid.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/BillingChoiceScreenTypeAndroid.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/BillingProgramAndroid.kt +2 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/DeveloperBillingLaunchModeAndroid.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/DeveloperBillingOptionParamsAndroid.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/DeveloperBillingTypeAndroid.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/DeveloperProvidedBillingDetailsAndroid.kt +32 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/DeveloperProvidedBillingProductAndroid.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/ExternalPurchaseCustomLinkNoticeResultIOS.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/ExternalPurchaseCustomLinkTokenResultIOS.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/ExternalPurchaseLinkResultIOS.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/ExternalPurchaseNoticeResultIOS.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/HybridRnIapSpec.kt +14 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/InAppMessageCategoryAndroid.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/InAppMessageResponseCodeAndroid.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/InitConnectionConfig.kt +22 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroActiveSubscription.kt +39 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAvailablePurchasesAndroidOptions.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAvailablePurchasesIosOptions.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAvailablePurchasesOptions.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroBillingChoiceInfoAndroid.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroBillingProgramAvailabilityResultAndroid.kt +29 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroBillingProgramInformationDialogParamsAndroid.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroBillingProgramReportingDetailsAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroBillingResultAndroid.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroDeepLinkOptionsAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroDiscountAmountAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroDiscountDisplayInfoAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroFinishTransactionAndroidParams.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroFinishTransactionIosParams.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroFinishTransactionParams.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroGetBillingChoiceInfoParamsAndroid.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroInAppMessageParamsAndroid.kt +51 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroInAppMessageResultAndroid.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroLaunchExternalLinkParamsAndroid.kt +27 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroLimitedQuantityInfoAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroOneTimePurchaseOfferDetail.kt +42 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPreorderDetailsAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroProduct.kt +96 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchase.kt +128 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchaseRequest.kt +19 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchaseResult.kt +49 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationAppleOptions.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationGoogleOptions.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationHorizonOptions.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationParams.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationResultAndroid.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationResultIOS.kt +19 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroRenewalInfoIOS.kt +45 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroRentalDetailsAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroRequestPurchaseAndroid.kt +41 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroRequestPurchaseIos.kt +31 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroSubscriptionStatus.kt +19 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroValidTimeWindowAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitAmazonProps.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitAppleProps.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitGoogleProps.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitProps.kt +19 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitResult.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithProviderError.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithProviderProps.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithProviderResult.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PendingPurchaseUpdateAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/ProductType.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PromotionalOfferJwsInputIOS.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Purchase.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseAndroid.kt +55 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseIOS.kt +85 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseOfferIOS.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseUpdatedListenerOptions.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/RenewalCommitmentInfoIOS.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/RenewalInfoIOS.kt +37 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/RequestPurchaseResult.kt +20 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/SubResponseCodeAndroid.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/SubscriptionProductReplacementParamsAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/TransactionCommitmentInfoIOS.kt +19 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/UserChoiceBillingDetails.kt +28 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_Boolean_NitroPurchaseResult.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_AdvancedCommerceInfoIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_AdvancedCommerceItemDetailsIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_AdvancedCommerceRefundIOS_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_AndroidSubscriptionOfferInput_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_DeveloperProvidedBillingProductAndroid_.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_InAppMessageCategoryAndroid_.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_NitroOneTimePurchaseOfferDetail_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_NitroSubscriptionStatus_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_NitroVerifyPurchaseWithProviderError_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_String_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Boolean.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_DeveloperBillingOptionParamsAndroid.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Double.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_InitConnectionConfig.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Map_String__String_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroAvailablePurchasesAndroidOptions.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroAvailablePurchasesIosOptions.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroDiscountAmountAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroDiscountDisplayInfoAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroFinishTransactionAndroidParams.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroFinishTransactionIosParams.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroInAppMessageParamsAndroid.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroLimitedQuantityInfoAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroPreorderDetailsAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroProduct.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroPurchase.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroReceiptValidationAppleOptions.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroReceiptValidationGoogleOptions.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroReceiptValidationHorizonOptions.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroRenewalInfoIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroRentalDetailsAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroRequestPurchaseAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroRequestPurchaseIos.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroValidTimeWindowAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroVerifyPurchaseWithIapkitAmazonProps.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroVerifyPurchaseWithIapkitAppleProps.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroVerifyPurchaseWithIapkitGoogleProps.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroVerifyPurchaseWithIapkitProps.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroVerifyPurchaseWithIapkitResult.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_PendingPurchaseUpdateAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_PromotionalOfferJwsInputIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_PurchaseOfferIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_RenewalCommitmentInfoIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_RenewalInfoIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_String.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_SubscriptionProductReplacementParamsAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_TransactionCommitmentInfoIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_WinBackOfferInputIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/WinBackOfferInputIOS.kt +13 -0
- package/nitrogen/generated/ios/NitroIap+autolinking.rb +2 -0
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.cpp +24 -0
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.hpp +441 -47
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Umbrella.hpp +48 -3
- package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.hpp +75 -6
- package/nitrogen/generated/ios/swift/BillingChoiceImageLayoutAndroid.swift +44 -0
- package/nitrogen/generated/ios/swift/BillingChoiceScreenTypeAndroid.swift +44 -0
- package/nitrogen/generated/ios/swift/BillingProgramAndroid.swift +4 -0
- package/nitrogen/generated/ios/swift/DeveloperBillingLaunchModeAndroid.swift +44 -0
- package/nitrogen/generated/ios/swift/DeveloperBillingOptionParamsAndroid.swift +114 -0
- package/nitrogen/generated/ios/swift/DeveloperBillingTypeAndroid.swift +44 -0
- package/nitrogen/generated/ios/swift/DeveloperProvidedBillingDetailsAndroid.swift +121 -4
- package/nitrogen/generated/ios/swift/DeveloperProvidedBillingProductAndroid.swift +71 -0
- package/nitrogen/generated/ios/swift/Func_void_NitroBillingChoiceInfoAndroid.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_NitroBillingResultAndroid.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_NitroInAppMessageResultAndroid.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridRnIapSpec.swift +5 -2
- package/nitrogen/generated/ios/swift/HybridRnIapSpec_cxx.swift +85 -9
- package/nitrogen/generated/ios/swift/InAppMessageCategoryAndroid.swift +40 -0
- package/nitrogen/generated/ios/swift/InAppMessageResponseCodeAndroid.swift +40 -0
- package/nitrogen/generated/ios/swift/InitConnectionConfig.swift +12 -1
- package/nitrogen/generated/ios/swift/NitroBillingChoiceInfoAndroid.swift +66 -0
- package/nitrogen/generated/ios/swift/NitroBillingProgramAvailabilityResultAndroid.swift +50 -2
- package/nitrogen/generated/ios/swift/NitroBillingProgramInformationDialogParamsAndroid.swift +34 -0
- package/nitrogen/generated/ios/swift/NitroBillingResultAndroid.swift +77 -0
- package/nitrogen/generated/ios/swift/NitroGetBillingChoiceInfoParamsAndroid.swift +71 -0
- package/nitrogen/generated/ios/swift/NitroInAppMessageParamsAndroid.swift +67 -0
- package/nitrogen/generated/ios/swift/NitroInAppMessageResultAndroid.swift +66 -0
- package/nitrogen/generated/ios/swift/NitroLaunchExternalLinkParamsAndroid.swift +39 -2
- package/nitrogen/generated/ios/swift/NitroOneTimePurchaseOfferDetail.swift +39 -2
- package/nitrogen/generated/ios/swift/NitroProduct.swift +113 -2
- package/nitrogen/generated/ios/swift/NitroPurchase.swift +204 -2
- package/nitrogen/generated/ios/swift/NitroPurchaseResult.swift +90 -1
- package/nitrogen/generated/ios/swift/NitroRenewalInfoIOS.swift +49 -1
- package/nitrogen/generated/ios/swift/NitroRequestPurchaseAndroid.swift +75 -1
- package/nitrogen/generated/ios/swift/NitroSubscriptionStatus.swift +11 -11
- package/nitrogen/generated/ios/swift/ProductType.swift +40 -0
- package/nitrogen/generated/ios/swift/Purchase.swift +12 -0
- package/nitrogen/generated/ios/swift/RequestPurchaseResult.swift +14 -0
- package/nitrogen/generated/ios/swift/SubResponseCodeAndroid.swift +44 -0
- package/nitrogen/generated/ios/swift/UserChoiceBillingDetails.swift +82 -2
- package/nitrogen/generated/ios/swift/Variant_Bool_NitroPurchaseResult.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_AdvancedCommerceInfoIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_AdvancedCommerceItemDetailsIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Bool.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_DeveloperBillingOptionParamsAndroid.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Dictionary_String__String_.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_InitConnectionConfig.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroAvailablePurchasesAndroidOptions.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroAvailablePurchasesIosOptions.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroDiscountAmountAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroDiscountDisplayInfoAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroFinishTransactionAndroidParams.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroFinishTransactionIosParams.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroInAppMessageParamsAndroid.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroLimitedQuantityInfoAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroPreorderDetailsAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroProduct.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroPurchase.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroReceiptValidationAppleOptions.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroReceiptValidationGoogleOptions.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroReceiptValidationHorizonOptions.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroRenewalInfoIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroRentalDetailsAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroRequestPurchaseAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroRequestPurchaseIos.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroValidTimeWindowAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroVerifyPurchaseWithIapkitAmazonProps.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroVerifyPurchaseWithIapkitAppleProps.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroVerifyPurchaseWithIapkitGoogleProps.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroVerifyPurchaseWithIapkitProps.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroVerifyPurchaseWithIapkitResult.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_PendingPurchaseUpdateAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_PromotionalOfferJwsInputIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_PurchaseOfferIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_RenewalCommitmentInfoIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_RenewalInfoIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_String.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_SubscriptionProductReplacementParamsAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_TransactionCommitmentInfoIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_WinBackOfferInputIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__AdvancedCommerceRefundIOS_.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__AndroidSubscriptionOfferInput_.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__DeveloperProvidedBillingProductAndroid_.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__InAppMessageCategoryAndroid_.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__NitroOneTimePurchaseOfferDetail_.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__NitroSubscriptionStatus_.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__NitroVerifyPurchaseWithProviderError_.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__String_.swift +12 -0
- package/nitrogen/generated/shared/c++/AdvancedCommerceInfoIOS.hpp +1 -1
- package/nitrogen/generated/shared/c++/AdvancedCommerceItemIOS.hpp +1 -1
- package/nitrogen/generated/shared/c++/BillingChoiceImageLayoutAndroid.hpp +80 -0
- package/nitrogen/generated/shared/c++/BillingChoiceScreenTypeAndroid.hpp +80 -0
- package/nitrogen/generated/shared/c++/BillingProgramAndroid.hpp +4 -0
- package/nitrogen/generated/shared/c++/DeveloperBillingLaunchModeAndroid.hpp +80 -0
- package/nitrogen/generated/shared/c++/DeveloperBillingOptionParamsAndroid.hpp +103 -0
- package/nitrogen/generated/shared/c++/DeveloperBillingTypeAndroid.hpp +80 -0
- package/nitrogen/generated/shared/c++/DeveloperProvidedBillingDetailsAndroid.hpp +25 -7
- package/nitrogen/generated/shared/c++/DeveloperProvidedBillingProductAndroid.hpp +96 -0
- package/nitrogen/generated/shared/c++/HybridRnIapSpec.cpp +3 -0
- package/nitrogen/generated/shared/c++/HybridRnIapSpec.hpp +26 -2
- package/nitrogen/generated/shared/c++/InAppMessageCategoryAndroid.hpp +76 -0
- package/nitrogen/generated/shared/c++/InAppMessageResponseCodeAndroid.hpp +76 -0
- package/nitrogen/generated/shared/c++/InitConnectionConfig.hpp +8 -1
- package/nitrogen/generated/shared/c++/NitroBillingChoiceInfoAndroid.hpp +90 -0
- package/nitrogen/generated/shared/c++/NitroBillingProgramAvailabilityResultAndroid.hpp +16 -2
- package/nitrogen/generated/shared/c++/NitroBillingProgramInformationDialogParamsAndroid.hpp +89 -0
- package/nitrogen/generated/shared/c++/NitroBillingResultAndroid.hpp +96 -0
- package/nitrogen/generated/shared/c++/NitroGetBillingChoiceInfoParamsAndroid.hpp +99 -0
- package/nitrogen/generated/shared/c++/NitroInAppMessageParamsAndroid.hpp +88 -0
- package/nitrogen/generated/shared/c++/NitroInAppMessageResultAndroid.hpp +92 -0
- package/nitrogen/generated/shared/c++/NitroLaunchExternalLinkParamsAndroid.hpp +9 -2
- package/nitrogen/generated/shared/c++/NitroOneTimePurchaseOfferDetail.hpp +6 -2
- package/nitrogen/generated/shared/c++/NitroProduct.hpp +14 -2
- package/nitrogen/generated/shared/c++/NitroPurchase.hpp +40 -3
- package/nitrogen/generated/shared/c++/NitroPurchaseRequest.hpp +1 -1
- package/nitrogen/generated/shared/c++/NitroPurchaseResult.hpp +27 -4
- package/nitrogen/generated/shared/c++/NitroReceiptValidationResultIOS.hpp +1 -1
- package/nitrogen/generated/shared/c++/NitroRenewalInfoIOS.hpp +15 -2
- package/nitrogen/generated/shared/c++/NitroRequestPurchaseAndroid.hpp +13 -2
- package/nitrogen/generated/shared/c++/NitroSubscriptionStatus.hpp +8 -8
- package/nitrogen/generated/shared/c++/NitroVerifyPurchaseWithProviderResult.hpp +1 -1
- package/nitrogen/generated/shared/c++/PendingPurchaseUpdateAndroid.hpp +1 -1
- package/nitrogen/generated/shared/c++/ProductType.hpp +76 -0
- package/nitrogen/generated/shared/c++/PurchaseAndroid.hpp +1 -1
- package/nitrogen/generated/shared/c++/PurchaseIOS.hpp +1 -1
- package/nitrogen/generated/shared/c++/SubResponseCodeAndroid.hpp +80 -0
- package/nitrogen/generated/shared/c++/UserChoiceBillingDetails.hpp +16 -3
- package/openiap-versions.json +3 -3
- package/package.json +8 -5
- package/src/hooks/useIAP.ts +70 -4
- package/src/index.kepler.ts +9 -0
- package/src/index.ts +268 -120
- package/src/specs/RnIap.nitro.ts +141 -27
- package/src/types.ts +294 -59
- package/src/utils/error.ts +11 -8
- package/src/utils/errorMapping.ts +9 -1
- package/src/utils/type-bridge.ts +63 -42
- package/src/vega-adapter.ts +112 -15
- package/nitrogen/generated/android/c++/JNitroSubscriptionRenewalInfo.hpp +0 -83
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroSubscriptionRenewalInfo.cpp +0 -26
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroSubscriptionRenewalInfo.hpp +0 -75
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroSubscriptionRenewalInfo.kt +0 -53
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroSubscriptionRenewalInfo.kt +0 -53
- package/nitrogen/generated/ios/swift/NitroSubscriptionRenewalInfo.swift +0 -182
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroSubscriptionRenewalInfo.swift +0 -18
- package/nitrogen/generated/shared/c++/NitroSubscriptionRenewalInfo.hpp +0 -106
package/ios/HybridRnIap.swift
CHANGED
|
@@ -15,9 +15,8 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
// MARK: - Properties
|
|
18
|
-
private var updateListenerTask: Task<Void, Never>?
|
|
19
18
|
private var isInitialized: Bool = false
|
|
20
|
-
private var
|
|
19
|
+
private var connectionEpoch: UInt64 = 0
|
|
21
20
|
private var productTypeBySku: [String: String] = [:]
|
|
22
21
|
// OpenIAP event subscriptions
|
|
23
22
|
private var purchaseUpdatedSub: Subscription?
|
|
@@ -38,6 +37,8 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
38
37
|
private var purchasePayloadById: [String: [String: Any]] = [:]
|
|
39
38
|
// Thread safety lock for listener arrays and error dedup state
|
|
40
39
|
private let listenerLock = NSLock()
|
|
40
|
+
private let lifecycleLock = NSLock()
|
|
41
|
+
private var lifecycleTail: Task<Void, Never>?
|
|
41
42
|
|
|
42
43
|
// MARK: - Initialization
|
|
43
44
|
|
|
@@ -45,57 +46,68 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
45
46
|
super.init()
|
|
46
47
|
}
|
|
47
48
|
|
|
48
|
-
deinit {
|
|
49
|
-
updateListenerTask?.cancel()
|
|
50
|
-
}
|
|
51
|
-
|
|
52
49
|
// MARK: - Public Methods (Cross-platform)
|
|
53
50
|
|
|
54
51
|
|
|
55
52
|
|
|
56
53
|
func initConnection(config: Variant_NullType_InitConnectionConfig?) throws -> Promise<Bool> {
|
|
57
|
-
|
|
54
|
+
let operation = enqueueLifecycleOperation {
|
|
58
55
|
let configValue: InitConnectionConfig? = {
|
|
59
56
|
if case .second(let c) = config { return c }
|
|
60
57
|
return nil
|
|
61
58
|
}()
|
|
62
59
|
RnIapLog.payload("initConnection", configValue?.alternativeBillingModeAndroid)
|
|
63
|
-
self.
|
|
64
|
-
|
|
65
|
-
if self.isInitialized || self.isInitializing {
|
|
66
|
-
RnIapLog.result("initConnection", true)
|
|
67
|
-
return true
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
self.isInitializing = true
|
|
60
|
+
let epoch = self.listenerLock.withLock { self.connectionEpoch }
|
|
71
61
|
|
|
72
62
|
do {
|
|
73
63
|
// Note: iOS doesn't support alternative billing config parameter
|
|
74
64
|
// Config is ignored on iOS platform
|
|
75
65
|
let ok = try await OpenIapModule.shared.initConnection()
|
|
76
66
|
RnIapLog.result("initConnection", ok)
|
|
77
|
-
self.
|
|
78
|
-
|
|
67
|
+
let isCurrent = self.listenerLock.withLock {
|
|
68
|
+
guard self.connectionEpoch == epoch else { return false }
|
|
69
|
+
self.isInitialized = ok
|
|
70
|
+
return true
|
|
71
|
+
}
|
|
72
|
+
guard isCurrent else { return false }
|
|
73
|
+
if ok {
|
|
74
|
+
self.attachListenersIfNeeded(epoch: epoch)
|
|
75
|
+
}
|
|
79
76
|
return ok
|
|
80
77
|
} catch {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
78
|
+
let isCurrent = self.listenerLock.withLock {
|
|
79
|
+
guard self.connectionEpoch == epoch else { return false }
|
|
80
|
+
self.isInitialized = false
|
|
81
|
+
return true
|
|
82
|
+
}
|
|
83
|
+
if isCurrent {
|
|
84
|
+
RnIapLog.failure("initConnection", error: error)
|
|
85
|
+
let err = RnIapHelper.makePurchaseErrorResult(
|
|
86
|
+
code: .initConnection,
|
|
87
|
+
message: error.localizedDescription
|
|
88
|
+
)
|
|
89
|
+
self.sendPurchaseError(err, productId: nil)
|
|
90
|
+
}
|
|
89
91
|
return false
|
|
90
92
|
}
|
|
91
93
|
}
|
|
94
|
+
return Promise.async { try await operation.value }
|
|
92
95
|
}
|
|
93
96
|
|
|
94
97
|
func endConnection() throws -> Promise<Bool> {
|
|
95
|
-
|
|
96
|
-
self.
|
|
97
|
-
|
|
98
|
+
let operation = enqueueLifecycleOperation {
|
|
99
|
+
let subscriptions = self.detachConnectionState()
|
|
100
|
+
self.removeSubscriptions(subscriptions)
|
|
101
|
+
await MainActor.run {
|
|
102
|
+
self.productTypeBySku.removeAll()
|
|
103
|
+
self.purchasePayloadById.removeAll()
|
|
104
|
+
}
|
|
105
|
+
RnIapLog.payload("endConnection", nil)
|
|
106
|
+
let result = try await OpenIapModule.shared.endConnection()
|
|
107
|
+
RnIapLog.result("endConnection", result)
|
|
108
|
+
return result
|
|
98
109
|
}
|
|
110
|
+
return Promise.async { try await operation.value }
|
|
99
111
|
}
|
|
100
112
|
|
|
101
113
|
func fetchProducts(skus: [String], type: String) throws -> Promise<[NitroProduct]> {
|
|
@@ -183,7 +195,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
183
195
|
return defaultResult
|
|
184
196
|
}
|
|
185
197
|
|
|
186
|
-
guard self.
|
|
198
|
+
guard self.isConnectionInitialized() else {
|
|
187
199
|
let err = RnIapHelper.makePurchaseErrorResult(
|
|
188
200
|
code: .initConnection,
|
|
189
201
|
message: "IAP store connection not initialized",
|
|
@@ -368,7 +380,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
368
380
|
let purchaseInput = try OpenIapSerialization.purchaseInput(from: purchasePayload)
|
|
369
381
|
_ = try await OpenIapModule.shared.finishTransaction(purchase: purchaseInput, isConsumable: nil)
|
|
370
382
|
RnIapLog.result("finishTransaction", true)
|
|
371
|
-
await MainActor.run {
|
|
383
|
+
_ = await MainActor.run {
|
|
372
384
|
self.purchasePayloadById.removeValue(forKey: iosParams.transactionId)
|
|
373
385
|
}
|
|
374
386
|
return .first(true)
|
|
@@ -590,12 +602,13 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
590
602
|
return try getPromotedProductIOS()
|
|
591
603
|
}
|
|
592
604
|
|
|
593
|
-
func buyPromotedProductIOS() throws -> Promise<
|
|
605
|
+
func buyPromotedProductIOS() throws -> Promise<Bool> {
|
|
594
606
|
return Promise.async {
|
|
595
607
|
do {
|
|
596
608
|
RnIapLog.payload("buyPromotedProductIOS", nil)
|
|
597
609
|
let ok = try await OpenIapModule.shared.requestPurchaseOnPromotedProductIOS()
|
|
598
610
|
RnIapLog.result("buyPromotedProductIOS", ok)
|
|
611
|
+
return ok
|
|
599
612
|
} catch let purchaseError as PurchaseError {
|
|
600
613
|
RnIapLog.failure("buyPromotedProductIOS", error: purchaseError)
|
|
601
614
|
throw OpenIapException.from(purchaseError)
|
|
@@ -623,14 +636,9 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
623
636
|
|
|
624
637
|
func clearTransactionIOS() throws -> Promise<Void> {
|
|
625
638
|
return Promise.async {
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
RnIapLog.result("clearTransactionIOS", ok)
|
|
630
|
-
} catch {
|
|
631
|
-
// ignore
|
|
632
|
-
RnIapLog.failure("clearTransactionIOS", error: error)
|
|
633
|
-
}
|
|
639
|
+
RnIapLog.payload("clearTransactionIOS", nil)
|
|
640
|
+
let ok = try await OpenIapModule.shared.clearTransactionIOS()
|
|
641
|
+
RnIapLog.result("clearTransactionIOS", ok)
|
|
634
642
|
}
|
|
635
643
|
}
|
|
636
644
|
|
|
@@ -654,11 +662,13 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
654
662
|
stateValue = 0
|
|
655
663
|
}
|
|
656
664
|
let platform = payload["platform"] as? String ?? "ios"
|
|
657
|
-
var renewalInfo:
|
|
665
|
+
var renewalInfo: Variant_NullType_NitroRenewalInfoIOS? = nil
|
|
658
666
|
if let renewalPayload = payload["renewalInfo"] as? [String: Any?] {
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
667
|
+
renewalInfo = RnIapHelper.wrapRenewalInfo(
|
|
668
|
+
RnIapHelper.convertRenewalInfoFromOpenIAP(
|
|
669
|
+
RnIapHelper.sanitizeDictionary(renewalPayload)
|
|
670
|
+
)
|
|
671
|
+
)
|
|
662
672
|
}
|
|
663
673
|
return NitroSubscriptionStatus(state: stateValue, platform: platform, renewalInfo: renewalInfo)
|
|
664
674
|
}
|
|
@@ -763,8 +773,9 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
763
773
|
payloadUpdates[identifier] = raw
|
|
764
774
|
}
|
|
765
775
|
}
|
|
776
|
+
let updates = payloadUpdates
|
|
766
777
|
await MainActor.run {
|
|
767
|
-
for (key, value) in
|
|
778
|
+
for (key, value) in updates {
|
|
768
779
|
self.purchasePayloadById[key] = value
|
|
769
780
|
}
|
|
770
781
|
}
|
|
@@ -802,17 +813,10 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
802
813
|
return Promise.async {
|
|
803
814
|
try self.ensureConnection()
|
|
804
815
|
do {
|
|
805
|
-
// Trigger system UI
|
|
806
816
|
RnIapLog.payload("showManageSubscriptionsIOS", nil)
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
let
|
|
810
|
-
"alsoPublishToEventListenerIOS": false,
|
|
811
|
-
"onlyIncludeActiveItemsIOS": true
|
|
812
|
-
]
|
|
813
|
-
let iosOptions = try OpenIapSerialization.purchaseOptions(from: optionsDictionary)
|
|
814
|
-
let purchases = try await OpenIapModule.shared.getAvailablePurchases(iosOptions)
|
|
815
|
-
let payloads = RnIapHelper.sanitizeArray(OpenIapSerialization.purchases(purchases))
|
|
817
|
+
let changedPurchases = try await OpenIapModule.shared.showManageSubscriptionsIOS()
|
|
818
|
+
let unionPurchases = changedPurchases.map { OpenIAP.Purchase.purchaseIos($0) }
|
|
819
|
+
let payloads = RnIapHelper.sanitizeArray(OpenIapSerialization.purchases(unionPurchases))
|
|
816
820
|
RnIapLog.result("showManageSubscriptionsIOS", payloads)
|
|
817
821
|
return payloads.map { RnIapHelper.convertPurchaseDictionary($0) }
|
|
818
822
|
} catch let purchaseError as PurchaseError {
|
|
@@ -953,12 +957,19 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
953
957
|
}
|
|
954
958
|
|
|
955
959
|
func addPromotedProductListenerIOS(listener: @escaping (NitroProduct) -> Void) throws {
|
|
956
|
-
listenerLock.withLock {
|
|
960
|
+
let epoch = listenerLock.withLock {
|
|
961
|
+
promotedProductListeners.append(listener)
|
|
962
|
+
return isInitialized ? connectionEpoch : nil
|
|
963
|
+
}
|
|
964
|
+
guard let epoch else { return }
|
|
965
|
+
attachPromotedProductSubIfNeeded(expectedEpoch: epoch)
|
|
957
966
|
|
|
958
967
|
// If a promoted product is already available from OpenIAP, notify immediately
|
|
959
968
|
Task {
|
|
969
|
+
guard self.isCurrentConnection(epoch) else { return }
|
|
960
970
|
RnIapLog.payload("promotedProductListenerIOS.fetch", nil)
|
|
961
971
|
if let product = try? await OpenIapModule.shared.getPromotedProductIOS() {
|
|
972
|
+
guard self.isCurrentConnection(epoch) else { return }
|
|
962
973
|
let payload = RnIapHelper.sanitizeDictionary(OpenIapSerialization.encode(product))
|
|
963
974
|
RnIapLog.result("promotedProductListenerIOS.fetch", payload)
|
|
964
975
|
let nitro = RnIapHelper.convertProductDictionary(payload)
|
|
@@ -979,7 +990,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
979
990
|
) throws -> Double {
|
|
980
991
|
let dedupeTransactionIOS = purchaseUpdatedDedupeTransactionIOS(from: options)
|
|
981
992
|
let receiveDuplicateTransactionUpdatesIOS = !dedupeTransactionIOS
|
|
982
|
-
let token = listenerLock.withLock {
|
|
993
|
+
let (token, epoch) = listenerLock.withLock {
|
|
983
994
|
let token = nextPurchaseUpdatedListenerToken
|
|
984
995
|
nextPurchaseUpdatedListenerToken += 1
|
|
985
996
|
|
|
@@ -993,13 +1004,15 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
993
1004
|
purchaseUpdatedListeners.append((token: token, listener: listener))
|
|
994
1005
|
}
|
|
995
1006
|
purchaseUpdatedListenerRegistrations.append(registration)
|
|
996
|
-
return token
|
|
1007
|
+
return (token, isInitialized ? connectionEpoch : nil)
|
|
997
1008
|
}
|
|
998
1009
|
|
|
999
|
-
if
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1010
|
+
if let epoch {
|
|
1011
|
+
if receiveDuplicateTransactionUpdatesIOS {
|
|
1012
|
+
attachDuplicatePurchaseUpdatedSubIfNeeded(expectedEpoch: epoch)
|
|
1013
|
+
} else {
|
|
1014
|
+
attachPurchaseUpdatedSubIfNeeded(expectedEpoch: epoch)
|
|
1015
|
+
}
|
|
1003
1016
|
}
|
|
1004
1017
|
return token
|
|
1005
1018
|
}
|
|
@@ -1015,7 +1028,13 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1015
1028
|
}
|
|
1016
1029
|
|
|
1017
1030
|
func addPurchaseErrorListener(listener: @escaping (NitroPurchaseResult) -> Void) throws {
|
|
1018
|
-
listenerLock.withLock {
|
|
1031
|
+
let epoch = listenerLock.withLock {
|
|
1032
|
+
purchaseErrorListeners.append(listener)
|
|
1033
|
+
return isInitialized ? connectionEpoch : nil
|
|
1034
|
+
}
|
|
1035
|
+
if let epoch {
|
|
1036
|
+
attachPurchaseErrorSubIfNeeded(expectedEpoch: epoch)
|
|
1037
|
+
}
|
|
1019
1038
|
}
|
|
1020
1039
|
|
|
1021
1040
|
private func purchaseUpdatedDedupeTransactionIOS(
|
|
@@ -1066,8 +1085,13 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1066
1085
|
}
|
|
1067
1086
|
|
|
1068
1087
|
func addSubscriptionBillingIssueListener(listener: @escaping (NitroPurchase) -> Void) throws {
|
|
1069
|
-
listenerLock.withLock {
|
|
1070
|
-
|
|
1088
|
+
let epoch = listenerLock.withLock {
|
|
1089
|
+
subscriptionBillingIssueListeners.append(listener)
|
|
1090
|
+
return isInitialized ? connectionEpoch : nil
|
|
1091
|
+
}
|
|
1092
|
+
if let epoch {
|
|
1093
|
+
attachSubscriptionBillingIssueSubIfNeeded(expectedEpoch: epoch)
|
|
1094
|
+
}
|
|
1071
1095
|
}
|
|
1072
1096
|
|
|
1073
1097
|
func removeSubscriptionBillingIssueListener(listener: @escaping (NitroPurchase) -> Void) throws {
|
|
@@ -1076,10 +1100,35 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1076
1100
|
|
|
1077
1101
|
// MARK: - Private Helper Methods
|
|
1078
1102
|
|
|
1079
|
-
private func
|
|
1080
|
-
|
|
1103
|
+
private func enqueueLifecycleOperation<T>(
|
|
1104
|
+
_ operation: @escaping () async throws -> T
|
|
1105
|
+
) -> Task<T, Error> {
|
|
1106
|
+
lifecycleLock.withLock {
|
|
1107
|
+
let predecessor = lifecycleTail
|
|
1108
|
+
let task = Task<T, Error> {
|
|
1109
|
+
if let predecessor {
|
|
1110
|
+
await predecessor.value
|
|
1111
|
+
}
|
|
1112
|
+
return try await operation()
|
|
1113
|
+
}
|
|
1114
|
+
lifecycleTail = Task { _ = try? await task.value }
|
|
1115
|
+
return task
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1119
|
+
private func attachListenersIfNeeded(epoch: UInt64) {
|
|
1120
|
+
attachPurchaseUpdatedSubIfNeeded(expectedEpoch: epoch)
|
|
1121
|
+
attachDuplicatePurchaseUpdatedSubIfNeeded(expectedEpoch: epoch)
|
|
1122
|
+
attachPurchaseErrorSubIfNeeded(expectedEpoch: epoch)
|
|
1123
|
+
attachPromotedProductSubIfNeeded(expectedEpoch: epoch)
|
|
1124
|
+
attachSubscriptionBillingIssueSubIfNeeded(expectedEpoch: epoch)
|
|
1125
|
+
}
|
|
1081
1126
|
|
|
1082
|
-
|
|
1127
|
+
private func attachPurchaseErrorSubIfNeeded(expectedEpoch: UInt64) {
|
|
1128
|
+
listenerLock.withLock {
|
|
1129
|
+
guard isInitialized,
|
|
1130
|
+
connectionEpoch == expectedEpoch,
|
|
1131
|
+
purchaseErrorSub == nil else { return }
|
|
1083
1132
|
RnIapLog.payload("purchaseErrorListener.register", nil)
|
|
1084
1133
|
purchaseErrorSub = OpenIapModule.shared.purchaseErrorListener { [weak self] error in
|
|
1085
1134
|
guard let self else {
|
|
@@ -1087,20 +1136,27 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1087
1136
|
return
|
|
1088
1137
|
}
|
|
1089
1138
|
Task { @MainActor in
|
|
1139
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1090
1140
|
let payload = RnIapHelper.sanitizeDictionary(OpenIapSerialization.encode(error))
|
|
1091
1141
|
RnIapLog.result("purchaseErrorListener", payload)
|
|
1092
1142
|
let nitroError = RnIapHelper.makePurchaseErrorResult(
|
|
1093
1143
|
code: error.code,
|
|
1094
1144
|
message: error.message,
|
|
1095
|
-
error.productId
|
|
1145
|
+
error.productId,
|
|
1146
|
+
debugMessage: error.debugMessage
|
|
1096
1147
|
)
|
|
1097
1148
|
self.sendPurchaseError(nitroError, productId: error.productId)
|
|
1098
1149
|
}
|
|
1099
1150
|
}
|
|
1100
1151
|
RnIapLog.result("purchaseErrorListener.register", "attached")
|
|
1101
1152
|
}
|
|
1153
|
+
}
|
|
1102
1154
|
|
|
1103
|
-
|
|
1155
|
+
private func attachPromotedProductSubIfNeeded(expectedEpoch: UInt64) {
|
|
1156
|
+
listenerLock.withLock {
|
|
1157
|
+
guard isInitialized,
|
|
1158
|
+
connectionEpoch == expectedEpoch,
|
|
1159
|
+
promotedProductSub == nil else { return }
|
|
1104
1160
|
RnIapLog.payload("promotedProductListenerIOS.register", nil)
|
|
1105
1161
|
promotedProductSub = OpenIapModule.shared.promotedProductListenerIOS { [weak self] productId in
|
|
1106
1162
|
guard let self else {
|
|
@@ -1108,6 +1164,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1108
1164
|
return
|
|
1109
1165
|
}
|
|
1110
1166
|
Task {
|
|
1167
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1111
1168
|
RnIapLog.payload("promotedProductListenerIOS", ["productId": productId])
|
|
1112
1169
|
do {
|
|
1113
1170
|
let request = try OpenIapSerialization.productRequest(skus: [productId], type: .all)
|
|
@@ -1115,6 +1172,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1115
1172
|
let payloads = RnIapHelper.sanitizeArray(OpenIapSerialization.products(result))
|
|
1116
1173
|
RnIapLog.result("fetchProducts", payloads)
|
|
1117
1174
|
if let payload = payloads.first {
|
|
1175
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1118
1176
|
let nitro = RnIapHelper.convertProductDictionary(payload)
|
|
1119
1177
|
let snapshot = self.listenerLock.withLock { Array(self.promotedProductListeners) }
|
|
1120
1178
|
await MainActor.run {
|
|
@@ -1122,6 +1180,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1122
1180
|
}
|
|
1123
1181
|
}
|
|
1124
1182
|
} catch {
|
|
1183
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1125
1184
|
RnIapLog.failure("promotedProductListenerIOS", error: error)
|
|
1126
1185
|
let id = productId
|
|
1127
1186
|
let snapshot = self.listenerLock.withLock { Array(self.promotedProductListeners) }
|
|
@@ -1136,11 +1195,11 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1136
1195
|
}
|
|
1137
1196
|
}
|
|
1138
1197
|
|
|
1139
|
-
private func attachPurchaseUpdatedSubIfNeeded() {
|
|
1198
|
+
private func attachPurchaseUpdatedSubIfNeeded(expectedEpoch: UInt64) {
|
|
1140
1199
|
listenerLock.withLock {
|
|
1141
|
-
guard
|
|
1142
|
-
|
|
1143
|
-
|
|
1200
|
+
guard isInitialized,
|
|
1201
|
+
connectionEpoch == expectedEpoch,
|
|
1202
|
+
purchaseUpdatedSub == nil else { return }
|
|
1144
1203
|
RnIapLog.payload("purchaseUpdatedListener.register", nil)
|
|
1145
1204
|
purchaseUpdatedSub = OpenIapModule.shared.purchaseUpdatedListener { [weak self] openIapPurchase in
|
|
1146
1205
|
guard let self else {
|
|
@@ -1148,6 +1207,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1148
1207
|
return
|
|
1149
1208
|
}
|
|
1150
1209
|
Task { @MainActor in
|
|
1210
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1151
1211
|
let rawPayload = OpenIapSerialization.purchase(openIapPurchase)
|
|
1152
1212
|
let payload = RnIapHelper.sanitizeDictionary(rawPayload)
|
|
1153
1213
|
RnIapLog.result("purchaseUpdatedListener", payload)
|
|
@@ -1162,11 +1222,12 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1162
1222
|
}
|
|
1163
1223
|
}
|
|
1164
1224
|
|
|
1165
|
-
private func attachDuplicatePurchaseUpdatedSubIfNeeded() {
|
|
1225
|
+
private func attachDuplicatePurchaseUpdatedSubIfNeeded(expectedEpoch: UInt64) {
|
|
1166
1226
|
listenerLock.withLock {
|
|
1167
|
-
guard
|
|
1168
|
-
|
|
1169
|
-
|
|
1227
|
+
guard isInitialized,
|
|
1228
|
+
connectionEpoch == expectedEpoch,
|
|
1229
|
+
purchaseUpdatedDuplicateSub == nil,
|
|
1230
|
+
!purchaseUpdatedDuplicateListeners.isEmpty else { return }
|
|
1170
1231
|
RnIapLog.payload("purchaseUpdatedListener.register.duplicates", nil)
|
|
1171
1232
|
let options = OpenIAP.PurchaseUpdatedListenerOptions(
|
|
1172
1233
|
dedupeTransactionIOS: false
|
|
@@ -1177,6 +1238,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1177
1238
|
return
|
|
1178
1239
|
}
|
|
1179
1240
|
Task { @MainActor in
|
|
1241
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1180
1242
|
let rawPayload = OpenIapSerialization.purchase(openIapPurchase)
|
|
1181
1243
|
let payload = RnIapHelper.sanitizeDictionary(rawPayload)
|
|
1182
1244
|
RnIapLog.result("purchaseUpdatedListener.duplicates", payload)
|
|
@@ -1191,32 +1253,46 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1191
1253
|
}
|
|
1192
1254
|
}
|
|
1193
1255
|
|
|
1194
|
-
private func attachSubscriptionBillingIssueSubIfNeeded() {
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1256
|
+
private func attachSubscriptionBillingIssueSubIfNeeded(expectedEpoch: UInt64) {
|
|
1257
|
+
listenerLock.withLock {
|
|
1258
|
+
guard isInitialized,
|
|
1259
|
+
connectionEpoch == expectedEpoch,
|
|
1260
|
+
subscriptionBillingIssueSub == nil,
|
|
1261
|
+
!subscriptionBillingIssueListeners.isEmpty else { return }
|
|
1262
|
+
RnIapLog.payload("subscriptionBillingIssueListener.register", nil)
|
|
1263
|
+
subscriptionBillingIssueSub = OpenIapModule.shared.subscriptionBillingIssueListener { [weak self] openIapPurchase in
|
|
1264
|
+
guard let self else {
|
|
1265
|
+
RnIapLog.warn("subscriptionBillingIssueListener: HybridRnIap deallocated, event dropped")
|
|
1266
|
+
return
|
|
1267
|
+
}
|
|
1268
|
+
Task { @MainActor in
|
|
1269
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1270
|
+
let payload = RnIapHelper.sanitizeDictionary(OpenIapSerialization.purchase(openIapPurchase))
|
|
1271
|
+
RnIapLog.result("subscriptionBillingIssueListener", payload)
|
|
1272
|
+
let nitro = RnIapHelper.convertPurchaseDictionary(payload)
|
|
1273
|
+
let snapshot: [(NitroPurchase) -> Void] = self.listenerLock.withLock {
|
|
1274
|
+
Array(self.subscriptionBillingIssueListeners)
|
|
1275
|
+
}
|
|
1276
|
+
for listener in snapshot { listener(nitro) }
|
|
1208
1277
|
}
|
|
1209
|
-
for l in snapshot { l(nitro) }
|
|
1210
1278
|
}
|
|
1279
|
+
RnIapLog.result("subscriptionBillingIssueListener.register", "attached")
|
|
1211
1280
|
}
|
|
1212
|
-
RnIapLog.result("subscriptionBillingIssueListener.register", "attached")
|
|
1213
1281
|
}
|
|
1214
1282
|
|
|
1215
1283
|
private func ensureConnection() throws {
|
|
1216
|
-
guard
|
|
1284
|
+
guard isConnectionInitialized() else {
|
|
1217
1285
|
throw OpenIapException.make(code: .initConnection, message: "Connection not initialized. Call initConnection() first.")
|
|
1218
1286
|
}
|
|
1219
1287
|
}
|
|
1288
|
+
|
|
1289
|
+
private func isConnectionInitialized() -> Bool {
|
|
1290
|
+
listenerLock.withLock { isInitialized }
|
|
1291
|
+
}
|
|
1292
|
+
|
|
1293
|
+
private func isCurrentConnection(_ epoch: UInt64) -> Bool {
|
|
1294
|
+
listenerLock.withLock { isInitialized && connectionEpoch == epoch }
|
|
1295
|
+
}
|
|
1220
1296
|
|
|
1221
1297
|
private func sendPurchaseUpdate(_ purchase: NitroPurchase, includeDuplicateListeners: Bool) {
|
|
1222
1298
|
let snapshot: [(NitroPurchase) -> Void] = listenerLock.withLock {
|
|
@@ -1259,7 +1335,12 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1259
1335
|
debugMessage: error.debugMessage,
|
|
1260
1336
|
code: error.code,
|
|
1261
1337
|
message: error.message,
|
|
1262
|
-
purchaseToken: nil
|
|
1338
|
+
purchaseToken: nil,
|
|
1339
|
+
productId: error.productId,
|
|
1340
|
+
productIds: error.productIds,
|
|
1341
|
+
productType: error.productType,
|
|
1342
|
+
isEmptyProductList: error.isEmptyProductList,
|
|
1343
|
+
subResponseCodeAndroid: error.subResponseCodeAndroid
|
|
1263
1344
|
)
|
|
1264
1345
|
} else {
|
|
1265
1346
|
sanitized = error
|
|
@@ -1274,60 +1355,51 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1274
1355
|
sendPurchaseError(error, productId: productId)
|
|
1275
1356
|
}
|
|
1276
1357
|
|
|
1277
|
-
private func
|
|
1278
|
-
// Cancel transaction listener if any
|
|
1279
|
-
updateListenerTask?.cancel()
|
|
1280
|
-
updateListenerTask = nil
|
|
1281
|
-
isInitialized = false
|
|
1282
|
-
isInitializing = false
|
|
1283
|
-
|
|
1284
|
-
// Remove OpenIAP listeners & end connection
|
|
1285
|
-
if let sub = purchaseUpdatedSub {
|
|
1286
|
-
RnIapLog.payload("removeListener", "purchaseUpdated")
|
|
1287
|
-
OpenIapModule.shared.removeListener(sub)
|
|
1288
|
-
}
|
|
1289
|
-
if let sub = purchaseUpdatedDuplicateSub {
|
|
1290
|
-
RnIapLog.payload("removeListener", "purchaseUpdatedDuplicate")
|
|
1291
|
-
OpenIapModule.shared.removeListener(sub)
|
|
1292
|
-
}
|
|
1293
|
-
if let sub = purchaseErrorSub {
|
|
1294
|
-
RnIapLog.payload("removeListener", "purchaseError")
|
|
1295
|
-
OpenIapModule.shared.removeListener(sub)
|
|
1296
|
-
}
|
|
1297
|
-
if let sub = promotedProductSub {
|
|
1298
|
-
RnIapLog.payload("removeListener", "promotedProduct")
|
|
1299
|
-
OpenIapModule.shared.removeListener(sub)
|
|
1300
|
-
}
|
|
1301
|
-
if let sub = subscriptionBillingIssueSub {
|
|
1302
|
-
RnIapLog.payload("removeListener", "subscriptionBillingIssue")
|
|
1303
|
-
OpenIapModule.shared.removeListener(sub)
|
|
1304
|
-
}
|
|
1305
|
-
purchaseUpdatedSub = nil
|
|
1306
|
-
purchaseUpdatedDuplicateSub = nil
|
|
1307
|
-
purchaseErrorSub = nil
|
|
1308
|
-
promotedProductSub = nil
|
|
1309
|
-
subscriptionBillingIssueSub = nil
|
|
1310
|
-
Task {
|
|
1311
|
-
RnIapLog.payload("endConnection", nil)
|
|
1312
|
-
let result = try? await OpenIapModule.shared.endConnection()
|
|
1313
|
-
RnIapLog.result("endConnection", result as Any)
|
|
1314
|
-
}
|
|
1315
|
-
|
|
1316
|
-
// Clear event listeners, error dedup state, and delivery state (thread-safe)
|
|
1358
|
+
private func detachConnectionState() -> [(label: String, subscription: Subscription)] {
|
|
1317
1359
|
listenerLock.withLock {
|
|
1360
|
+
connectionEpoch &+= 1
|
|
1361
|
+
isInitialized = false
|
|
1362
|
+
|
|
1363
|
+
var subscriptions: [(label: String, subscription: Subscription)] = []
|
|
1364
|
+
if let purchaseUpdatedSub {
|
|
1365
|
+
subscriptions.append(("purchaseUpdated", purchaseUpdatedSub))
|
|
1366
|
+
}
|
|
1367
|
+
if let purchaseUpdatedDuplicateSub {
|
|
1368
|
+
subscriptions.append(("purchaseUpdatedDuplicate", purchaseUpdatedDuplicateSub))
|
|
1369
|
+
}
|
|
1370
|
+
if let purchaseErrorSub {
|
|
1371
|
+
subscriptions.append(("purchaseError", purchaseErrorSub))
|
|
1372
|
+
}
|
|
1373
|
+
if let promotedProductSub {
|
|
1374
|
+
subscriptions.append(("promotedProduct", promotedProductSub))
|
|
1375
|
+
}
|
|
1376
|
+
if let subscriptionBillingIssueSub {
|
|
1377
|
+
subscriptions.append(("subscriptionBillingIssue", subscriptionBillingIssueSub))
|
|
1378
|
+
}
|
|
1379
|
+
|
|
1380
|
+
purchaseUpdatedSub = nil
|
|
1381
|
+
purchaseUpdatedDuplicateSub = nil
|
|
1382
|
+
purchaseErrorSub = nil
|
|
1383
|
+
promotedProductSub = nil
|
|
1384
|
+
subscriptionBillingIssueSub = nil
|
|
1318
1385
|
purchaseUpdatedListeners.removeAll()
|
|
1319
1386
|
purchaseUpdatedDuplicateListeners.removeAll()
|
|
1320
1387
|
purchaseUpdatedListenerRegistrations.removeAll()
|
|
1321
|
-
nextPurchaseUpdatedListenerToken = 1
|
|
1322
1388
|
purchaseErrorListeners.removeAll()
|
|
1323
1389
|
promotedProductListeners.removeAll()
|
|
1324
1390
|
subscriptionBillingIssueListeners.removeAll()
|
|
1325
1391
|
lastPurchaseErrorKey = nil
|
|
1326
1392
|
lastPurchaseErrorTimestamp = 0
|
|
1393
|
+
return subscriptions
|
|
1327
1394
|
}
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1397
|
+
private func removeSubscriptions(
|
|
1398
|
+
_ subscriptions: [(label: String, subscription: Subscription)]
|
|
1399
|
+
) {
|
|
1400
|
+
for subscription in subscriptions {
|
|
1401
|
+
RnIapLog.payload("removeListener", subscription.label)
|
|
1402
|
+
OpenIapModule.shared.removeListener(subscription.subscription)
|
|
1331
1403
|
}
|
|
1332
1404
|
}
|
|
1333
1405
|
|
|
@@ -1385,12 +1457,30 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1385
1457
|
}
|
|
1386
1458
|
}
|
|
1387
1459
|
|
|
1388
|
-
func
|
|
1460
|
+
func getBillingChoiceInfoAndroid(params: NitroGetBillingChoiceInfoParamsAndroid) throws -> Promise<NitroBillingChoiceInfoAndroid> {
|
|
1461
|
+
return Promise.async {
|
|
1462
|
+
throw OpenIapException.make(code: .featureNotSupported, message: "Billing Choice API is Android-only")
|
|
1463
|
+
}
|
|
1464
|
+
}
|
|
1465
|
+
|
|
1466
|
+
func createBillingProgramReportingDetailsAndroid(program: BillingProgramAndroid, developerBillingType: DeveloperBillingTypeAndroid?) throws -> Promise<NitroBillingProgramReportingDetailsAndroid> {
|
|
1389
1467
|
return Promise.async {
|
|
1390
1468
|
throw OpenIapException.make(code: .featureNotSupported, message: "Billing Programs API is Android-only")
|
|
1391
1469
|
}
|
|
1392
1470
|
}
|
|
1393
1471
|
|
|
1472
|
+
func showBillingProgramInformationDialogAndroid(params: NitroBillingProgramInformationDialogParamsAndroid) throws -> Promise<NitroBillingResultAndroid> {
|
|
1473
|
+
return Promise.async {
|
|
1474
|
+
throw OpenIapException.make(code: .featureNotSupported, message: "Billing Choice API is Android-only")
|
|
1475
|
+
}
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
func showInAppMessagesAndroid(params: Variant_NullType_NitroInAppMessageParamsAndroid?) throws -> Promise<NitroInAppMessageResultAndroid> {
|
|
1479
|
+
return Promise.async {
|
|
1480
|
+
throw OpenIapException.make(code: .featureNotSupported, message: "In-app messages are Android-only")
|
|
1481
|
+
}
|
|
1482
|
+
}
|
|
1483
|
+
|
|
1394
1484
|
func launchExternalLinkAndroid(params: NitroLaunchExternalLinkParamsAndroid) throws -> Promise<Bool> {
|
|
1395
1485
|
return Promise.async {
|
|
1396
1486
|
throw OpenIapException.make(code: .featureNotSupported, message: "Billing Programs API is Android-only")
|