react-native-iap 15.4.0 → 15.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/com/margelo/nitro/iap/ConnectionLifecycleQueue.kt +113 -0
- package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +222 -87
- package/android/src/main/java/com/margelo/nitro/iap/RnIapLog.kt +23 -1
- package/ios/HybridRnIap.swift +214 -139
- package/ios/RnIapHelper.swift +150 -26
- package/ios/RnIapLog.swift +24 -1
- package/lib/module/hooks/useIAP.js +1 -1
- package/lib/module/hooks/useIAP.js.map +1 -1
- package/lib/module/index.js +47 -28
- package/lib/module/index.js.map +1 -1
- package/lib/module/types.js +11 -9
- 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 +28 -19
- package/lib/module/utils/type-bridge.js.map +1 -1
- package/lib/module/vega-adapter.js +108 -12
- package/lib/module/vega-adapter.js.map +1 -1
- package/lib/typescript/src/hooks/useIAP.d.ts +3 -3
- package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/RnIap.nitro.d.ts +27 -19
- package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +65 -26
- 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 +1 -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 +2 -2
- package/nitrogen/generated/android/c++/JBillingChoiceScreenTypeAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JBillingProgramAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JDeveloperBillingLaunchModeAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JDeveloperBillingOptionParamsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JDeveloperBillingTypeAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JDeveloperProvidedBillingDetailsAndroid.hpp +10 -10
- package/nitrogen/generated/android/c++/JDeveloperProvidedBillingProductAndroid.hpp +2 -2
- 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 +2 -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 +51 -54
- package/nitrogen/generated/android/c++/JHybridRnIapSpec.hpp +3 -3
- 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 +2 -2
- package/nitrogen/generated/android/c++/JInAppMessageResponseCodeAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JInitConnectionConfig.hpp +2 -2
- 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 +2 -2
- package/nitrogen/generated/android/c++/JNitroBillingProgramAvailabilityResultAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroBillingProgramInformationDialogParamsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroBillingProgramReportingDetailsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroBillingResultAndroid.hpp +2 -2
- 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 +2 -2
- package/nitrogen/generated/android/c++/JNitroInAppMessageParamsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroInAppMessageResultAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroLaunchExternalLinkParamsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroLimitedQuantityInfoAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroOneTimePurchaseOfferDetail.hpp +10 -10
- package/nitrogen/generated/android/c++/JNitroPreorderDetailsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroProduct.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroPurchase.hpp +53 -5
- package/nitrogen/generated/android/c++/JNitroPurchaseRequest.hpp +2 -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 +10 -10
- 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 +7 -3
- 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 +2 -2
- 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 +2 -2
- 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 +4 -4
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_InAppMessageCategoryAndroid_.hpp +7 -7
- 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.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_InitConnectionConfig.hpp +3 -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.hpp +3 -3
- 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 +3 -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/DeveloperBillingOptionParamsAndroid.kt +19 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/DeveloperProvidedBillingDetailsAndroid.kt +19 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/DeveloperProvidedBillingProductAndroid.kt +17 -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 +1 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/InitConnectionConfig.kt +17 -0
- 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 +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroBillingProgramAvailabilityResultAndroid.kt +19 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroBillingProgramInformationDialogParamsAndroid.kt +15 -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 +17 -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 +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroInAppMessageParamsAndroid.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroInAppMessageResultAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroLaunchExternalLinkParamsAndroid.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroLimitedQuantityInfoAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroOneTimePurchaseOfferDetail.kt +37 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPreorderDetailsAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroProduct.kt +85 -0
- 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 +33 -0
- 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 +26 -2
- 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/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/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 +16 -7
- 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 +16 -7
- 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 +16 -7
- 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.hpp +85 -73
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Umbrella.hpp +0 -3
- package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.hpp +7 -10
- package/nitrogen/generated/ios/swift/HybridRnIapSpec.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridRnIapSpec_cxx.swift +7 -7
- 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/NitroSubscriptionStatus.swift +11 -11
- package/nitrogen/generated/ios/swift/NitroVerifyPurchaseWithIapkitProps.swift +38 -1
- package/nitrogen/generated/ios/swift/Purchase.swift +12 -0
- package/nitrogen/generated/ios/swift/RequestPurchaseResult.swift +14 -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 +12 -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 +12 -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 +12 -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++/DeveloperProvidedBillingDetailsAndroid.hpp +1 -1
- package/nitrogen/generated/shared/c++/HybridRnIapSpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/NitroInAppMessageParamsAndroid.hpp +1 -1
- package/nitrogen/generated/shared/c++/NitroOneTimePurchaseOfferDetail.hpp +1 -1
- package/nitrogen/generated/shared/c++/NitroProduct.hpp +1 -1
- 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 +1 -1
- package/nitrogen/generated/shared/c++/NitroSubscriptionStatus.hpp +8 -8
- package/nitrogen/generated/shared/c++/NitroVerifyPurchaseWithIapkitProps.hpp +5 -1
- package/nitrogen/generated/shared/c++/NitroVerifyPurchaseWithProviderResult.hpp +1 -1
- package/nitrogen/generated/shared/c++/PendingPurchaseUpdateAndroid.hpp +1 -1
- package/nitrogen/generated/shared/c++/PurchaseAndroid.hpp +1 -1
- package/nitrogen/generated/shared/c++/PurchaseIOS.hpp +1 -1
- 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 +7 -4
- package/src/index.ts +59 -39
- package/src/specs/RnIap.nitro.ts +31 -19
- package/src/types.ts +65 -26
- package/src/utils/error.ts +11 -8
- package/src/utils/errorMapping.ts +9 -1
- package/src/utils/type-bridge.ts +37 -40
- package/src/vega-adapter.ts +191 -26
- 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
|
@@ -3,9 +3,25 @@ package com.margelo.nitro.iap
|
|
|
3
3
|
import android.util.Log
|
|
4
4
|
import org.json.JSONArray
|
|
5
5
|
import org.json.JSONObject
|
|
6
|
+
import java.util.Locale
|
|
6
7
|
|
|
7
8
|
internal object RnIapLog {
|
|
8
9
|
private const val TAG = "RnIap"
|
|
10
|
+
private val SENSITIVE_KEY_FRAGMENTS = setOf(
|
|
11
|
+
"token",
|
|
12
|
+
"apikey",
|
|
13
|
+
"secret",
|
|
14
|
+
"jws",
|
|
15
|
+
"receiptid",
|
|
16
|
+
"userid",
|
|
17
|
+
"password",
|
|
18
|
+
"bearer"
|
|
19
|
+
)
|
|
20
|
+
private val SENSITIVE_AUTH_KEYS = setOf(
|
|
21
|
+
"auth",
|
|
22
|
+
"authorization",
|
|
23
|
+
"authheader"
|
|
24
|
+
)
|
|
9
25
|
|
|
10
26
|
fun payload(name: String, payload: Any?) {
|
|
11
27
|
debug("$name payload: ${stringify(payload)}")
|
|
@@ -52,10 +68,16 @@ internal object RnIapLog {
|
|
|
52
68
|
}
|
|
53
69
|
|
|
54
70
|
private fun sanitizeMap(source: Map<*, *>): Map<String, Any?> {
|
|
71
|
+
fun isSensitiveKey(key: String): Boolean {
|
|
72
|
+
val normalized = key.lowercase(Locale.ROOT).filter { it.isLetterOrDigit() }
|
|
73
|
+
return SENSITIVE_KEY_FRAGMENTS.any { normalized.contains(it) } ||
|
|
74
|
+
normalized in SENSITIVE_AUTH_KEYS
|
|
75
|
+
}
|
|
76
|
+
|
|
55
77
|
val sanitized = linkedMapOf<String, Any?>()
|
|
56
78
|
for ((rawKey, rawValue) in source) {
|
|
57
79
|
val key = rawKey as? String ?: continue
|
|
58
|
-
if (key
|
|
80
|
+
if (isSensitiveKey(key)) {
|
|
59
81
|
sanitized[key] = "hidden"
|
|
60
82
|
continue
|
|
61
83
|
}
|
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)
|
|
@@ -440,6 +452,9 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
440
452
|
} else if let plistApiKey = Bundle.main.object(forInfoDictionaryKey: "IAPKitAPIKey") as? String {
|
|
441
453
|
iapkitDict["apiKey"] = plistApiKey
|
|
442
454
|
}
|
|
455
|
+
if case .second(let baseUrl) = iapkit.baseUrl {
|
|
456
|
+
iapkitDict["baseUrl"] = baseUrl
|
|
457
|
+
}
|
|
443
458
|
if case .second(let apple) = iapkit.apple {
|
|
444
459
|
iapkitDict["apple"] = ["jws": apple.jws]
|
|
445
460
|
}
|
|
@@ -590,12 +605,13 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
590
605
|
return try getPromotedProductIOS()
|
|
591
606
|
}
|
|
592
607
|
|
|
593
|
-
func buyPromotedProductIOS() throws -> Promise<
|
|
608
|
+
func buyPromotedProductIOS() throws -> Promise<Bool> {
|
|
594
609
|
return Promise.async {
|
|
595
610
|
do {
|
|
596
611
|
RnIapLog.payload("buyPromotedProductIOS", nil)
|
|
597
612
|
let ok = try await OpenIapModule.shared.requestPurchaseOnPromotedProductIOS()
|
|
598
613
|
RnIapLog.result("buyPromotedProductIOS", ok)
|
|
614
|
+
return ok
|
|
599
615
|
} catch let purchaseError as PurchaseError {
|
|
600
616
|
RnIapLog.failure("buyPromotedProductIOS", error: purchaseError)
|
|
601
617
|
throw OpenIapException.from(purchaseError)
|
|
@@ -623,14 +639,9 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
623
639
|
|
|
624
640
|
func clearTransactionIOS() throws -> Promise<Void> {
|
|
625
641
|
return Promise.async {
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
RnIapLog.result("clearTransactionIOS", ok)
|
|
630
|
-
} catch {
|
|
631
|
-
// ignore
|
|
632
|
-
RnIapLog.failure("clearTransactionIOS", error: error)
|
|
633
|
-
}
|
|
642
|
+
RnIapLog.payload("clearTransactionIOS", nil)
|
|
643
|
+
let ok = try await OpenIapModule.shared.clearTransactionIOS()
|
|
644
|
+
RnIapLog.result("clearTransactionIOS", ok)
|
|
634
645
|
}
|
|
635
646
|
}
|
|
636
647
|
|
|
@@ -654,11 +665,13 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
654
665
|
stateValue = 0
|
|
655
666
|
}
|
|
656
667
|
let platform = payload["platform"] as? String ?? "ios"
|
|
657
|
-
var renewalInfo:
|
|
668
|
+
var renewalInfo: Variant_NullType_NitroRenewalInfoIOS? = nil
|
|
658
669
|
if let renewalPayload = payload["renewalInfo"] as? [String: Any?] {
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
670
|
+
renewalInfo = RnIapHelper.wrapRenewalInfo(
|
|
671
|
+
RnIapHelper.convertRenewalInfoFromOpenIAP(
|
|
672
|
+
RnIapHelper.sanitizeDictionary(renewalPayload)
|
|
673
|
+
)
|
|
674
|
+
)
|
|
662
675
|
}
|
|
663
676
|
return NitroSubscriptionStatus(state: stateValue, platform: platform, renewalInfo: renewalInfo)
|
|
664
677
|
}
|
|
@@ -763,8 +776,9 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
763
776
|
payloadUpdates[identifier] = raw
|
|
764
777
|
}
|
|
765
778
|
}
|
|
779
|
+
let updates = payloadUpdates
|
|
766
780
|
await MainActor.run {
|
|
767
|
-
for (key, value) in
|
|
781
|
+
for (key, value) in updates {
|
|
768
782
|
self.purchasePayloadById[key] = value
|
|
769
783
|
}
|
|
770
784
|
}
|
|
@@ -802,17 +816,10 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
802
816
|
return Promise.async {
|
|
803
817
|
try self.ensureConnection()
|
|
804
818
|
do {
|
|
805
|
-
// Trigger system UI
|
|
806
819
|
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))
|
|
820
|
+
let changedPurchases = try await OpenIapModule.shared.showManageSubscriptionsIOS()
|
|
821
|
+
let unionPurchases = changedPurchases.map { OpenIAP.Purchase.purchaseIos($0) }
|
|
822
|
+
let payloads = RnIapHelper.sanitizeArray(OpenIapSerialization.purchases(unionPurchases))
|
|
816
823
|
RnIapLog.result("showManageSubscriptionsIOS", payloads)
|
|
817
824
|
return payloads.map { RnIapHelper.convertPurchaseDictionary($0) }
|
|
818
825
|
} catch let purchaseError as PurchaseError {
|
|
@@ -953,12 +960,19 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
953
960
|
}
|
|
954
961
|
|
|
955
962
|
func addPromotedProductListenerIOS(listener: @escaping (NitroProduct) -> Void) throws {
|
|
956
|
-
listenerLock.withLock {
|
|
963
|
+
let epoch = listenerLock.withLock {
|
|
964
|
+
promotedProductListeners.append(listener)
|
|
965
|
+
return isInitialized ? connectionEpoch : nil
|
|
966
|
+
}
|
|
967
|
+
guard let epoch else { return }
|
|
968
|
+
attachPromotedProductSubIfNeeded(expectedEpoch: epoch)
|
|
957
969
|
|
|
958
970
|
// If a promoted product is already available from OpenIAP, notify immediately
|
|
959
971
|
Task {
|
|
972
|
+
guard self.isCurrentConnection(epoch) else { return }
|
|
960
973
|
RnIapLog.payload("promotedProductListenerIOS.fetch", nil)
|
|
961
974
|
if let product = try? await OpenIapModule.shared.getPromotedProductIOS() {
|
|
975
|
+
guard self.isCurrentConnection(epoch) else { return }
|
|
962
976
|
let payload = RnIapHelper.sanitizeDictionary(OpenIapSerialization.encode(product))
|
|
963
977
|
RnIapLog.result("promotedProductListenerIOS.fetch", payload)
|
|
964
978
|
let nitro = RnIapHelper.convertProductDictionary(payload)
|
|
@@ -979,7 +993,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
979
993
|
) throws -> Double {
|
|
980
994
|
let dedupeTransactionIOS = purchaseUpdatedDedupeTransactionIOS(from: options)
|
|
981
995
|
let receiveDuplicateTransactionUpdatesIOS = !dedupeTransactionIOS
|
|
982
|
-
let token = listenerLock.withLock {
|
|
996
|
+
let (token, epoch) = listenerLock.withLock {
|
|
983
997
|
let token = nextPurchaseUpdatedListenerToken
|
|
984
998
|
nextPurchaseUpdatedListenerToken += 1
|
|
985
999
|
|
|
@@ -993,13 +1007,15 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
993
1007
|
purchaseUpdatedListeners.append((token: token, listener: listener))
|
|
994
1008
|
}
|
|
995
1009
|
purchaseUpdatedListenerRegistrations.append(registration)
|
|
996
|
-
return token
|
|
1010
|
+
return (token, isInitialized ? connectionEpoch : nil)
|
|
997
1011
|
}
|
|
998
1012
|
|
|
999
|
-
if
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1013
|
+
if let epoch {
|
|
1014
|
+
if receiveDuplicateTransactionUpdatesIOS {
|
|
1015
|
+
attachDuplicatePurchaseUpdatedSubIfNeeded(expectedEpoch: epoch)
|
|
1016
|
+
} else {
|
|
1017
|
+
attachPurchaseUpdatedSubIfNeeded(expectedEpoch: epoch)
|
|
1018
|
+
}
|
|
1003
1019
|
}
|
|
1004
1020
|
return token
|
|
1005
1021
|
}
|
|
@@ -1015,7 +1031,13 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1015
1031
|
}
|
|
1016
1032
|
|
|
1017
1033
|
func addPurchaseErrorListener(listener: @escaping (NitroPurchaseResult) -> Void) throws {
|
|
1018
|
-
listenerLock.withLock {
|
|
1034
|
+
let epoch = listenerLock.withLock {
|
|
1035
|
+
purchaseErrorListeners.append(listener)
|
|
1036
|
+
return isInitialized ? connectionEpoch : nil
|
|
1037
|
+
}
|
|
1038
|
+
if let epoch {
|
|
1039
|
+
attachPurchaseErrorSubIfNeeded(expectedEpoch: epoch)
|
|
1040
|
+
}
|
|
1019
1041
|
}
|
|
1020
1042
|
|
|
1021
1043
|
private func purchaseUpdatedDedupeTransactionIOS(
|
|
@@ -1066,8 +1088,13 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1066
1088
|
}
|
|
1067
1089
|
|
|
1068
1090
|
func addSubscriptionBillingIssueListener(listener: @escaping (NitroPurchase) -> Void) throws {
|
|
1069
|
-
listenerLock.withLock {
|
|
1070
|
-
|
|
1091
|
+
let epoch = listenerLock.withLock {
|
|
1092
|
+
subscriptionBillingIssueListeners.append(listener)
|
|
1093
|
+
return isInitialized ? connectionEpoch : nil
|
|
1094
|
+
}
|
|
1095
|
+
if let epoch {
|
|
1096
|
+
attachSubscriptionBillingIssueSubIfNeeded(expectedEpoch: epoch)
|
|
1097
|
+
}
|
|
1071
1098
|
}
|
|
1072
1099
|
|
|
1073
1100
|
func removeSubscriptionBillingIssueListener(listener: @escaping (NitroPurchase) -> Void) throws {
|
|
@@ -1076,10 +1103,35 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1076
1103
|
|
|
1077
1104
|
// MARK: - Private Helper Methods
|
|
1078
1105
|
|
|
1079
|
-
private func
|
|
1080
|
-
|
|
1106
|
+
private func enqueueLifecycleOperation<T>(
|
|
1107
|
+
_ operation: @escaping () async throws -> T
|
|
1108
|
+
) -> Task<T, Error> {
|
|
1109
|
+
lifecycleLock.withLock {
|
|
1110
|
+
let predecessor = lifecycleTail
|
|
1111
|
+
let task = Task<T, Error> {
|
|
1112
|
+
if let predecessor {
|
|
1113
|
+
await predecessor.value
|
|
1114
|
+
}
|
|
1115
|
+
return try await operation()
|
|
1116
|
+
}
|
|
1117
|
+
lifecycleTail = Task { _ = try? await task.value }
|
|
1118
|
+
return task
|
|
1119
|
+
}
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1122
|
+
private func attachListenersIfNeeded(epoch: UInt64) {
|
|
1123
|
+
attachPurchaseUpdatedSubIfNeeded(expectedEpoch: epoch)
|
|
1124
|
+
attachDuplicatePurchaseUpdatedSubIfNeeded(expectedEpoch: epoch)
|
|
1125
|
+
attachPurchaseErrorSubIfNeeded(expectedEpoch: epoch)
|
|
1126
|
+
attachPromotedProductSubIfNeeded(expectedEpoch: epoch)
|
|
1127
|
+
attachSubscriptionBillingIssueSubIfNeeded(expectedEpoch: epoch)
|
|
1128
|
+
}
|
|
1081
1129
|
|
|
1082
|
-
|
|
1130
|
+
private func attachPurchaseErrorSubIfNeeded(expectedEpoch: UInt64) {
|
|
1131
|
+
listenerLock.withLock {
|
|
1132
|
+
guard isInitialized,
|
|
1133
|
+
connectionEpoch == expectedEpoch,
|
|
1134
|
+
purchaseErrorSub == nil else { return }
|
|
1083
1135
|
RnIapLog.payload("purchaseErrorListener.register", nil)
|
|
1084
1136
|
purchaseErrorSub = OpenIapModule.shared.purchaseErrorListener { [weak self] error in
|
|
1085
1137
|
guard let self else {
|
|
@@ -1087,20 +1139,27 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1087
1139
|
return
|
|
1088
1140
|
}
|
|
1089
1141
|
Task { @MainActor in
|
|
1142
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1090
1143
|
let payload = RnIapHelper.sanitizeDictionary(OpenIapSerialization.encode(error))
|
|
1091
1144
|
RnIapLog.result("purchaseErrorListener", payload)
|
|
1092
1145
|
let nitroError = RnIapHelper.makePurchaseErrorResult(
|
|
1093
1146
|
code: error.code,
|
|
1094
1147
|
message: error.message,
|
|
1095
|
-
error.productId
|
|
1148
|
+
error.productId,
|
|
1149
|
+
debugMessage: error.debugMessage
|
|
1096
1150
|
)
|
|
1097
1151
|
self.sendPurchaseError(nitroError, productId: error.productId)
|
|
1098
1152
|
}
|
|
1099
1153
|
}
|
|
1100
1154
|
RnIapLog.result("purchaseErrorListener.register", "attached")
|
|
1101
1155
|
}
|
|
1156
|
+
}
|
|
1102
1157
|
|
|
1103
|
-
|
|
1158
|
+
private func attachPromotedProductSubIfNeeded(expectedEpoch: UInt64) {
|
|
1159
|
+
listenerLock.withLock {
|
|
1160
|
+
guard isInitialized,
|
|
1161
|
+
connectionEpoch == expectedEpoch,
|
|
1162
|
+
promotedProductSub == nil else { return }
|
|
1104
1163
|
RnIapLog.payload("promotedProductListenerIOS.register", nil)
|
|
1105
1164
|
promotedProductSub = OpenIapModule.shared.promotedProductListenerIOS { [weak self] productId in
|
|
1106
1165
|
guard let self else {
|
|
@@ -1108,6 +1167,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1108
1167
|
return
|
|
1109
1168
|
}
|
|
1110
1169
|
Task {
|
|
1170
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1111
1171
|
RnIapLog.payload("promotedProductListenerIOS", ["productId": productId])
|
|
1112
1172
|
do {
|
|
1113
1173
|
let request = try OpenIapSerialization.productRequest(skus: [productId], type: .all)
|
|
@@ -1115,6 +1175,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1115
1175
|
let payloads = RnIapHelper.sanitizeArray(OpenIapSerialization.products(result))
|
|
1116
1176
|
RnIapLog.result("fetchProducts", payloads)
|
|
1117
1177
|
if let payload = payloads.first {
|
|
1178
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1118
1179
|
let nitro = RnIapHelper.convertProductDictionary(payload)
|
|
1119
1180
|
let snapshot = self.listenerLock.withLock { Array(self.promotedProductListeners) }
|
|
1120
1181
|
await MainActor.run {
|
|
@@ -1122,6 +1183,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1122
1183
|
}
|
|
1123
1184
|
}
|
|
1124
1185
|
} catch {
|
|
1186
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1125
1187
|
RnIapLog.failure("promotedProductListenerIOS", error: error)
|
|
1126
1188
|
let id = productId
|
|
1127
1189
|
let snapshot = self.listenerLock.withLock { Array(self.promotedProductListeners) }
|
|
@@ -1136,11 +1198,11 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1136
1198
|
}
|
|
1137
1199
|
}
|
|
1138
1200
|
|
|
1139
|
-
private func attachPurchaseUpdatedSubIfNeeded() {
|
|
1201
|
+
private func attachPurchaseUpdatedSubIfNeeded(expectedEpoch: UInt64) {
|
|
1140
1202
|
listenerLock.withLock {
|
|
1141
|
-
guard
|
|
1142
|
-
|
|
1143
|
-
|
|
1203
|
+
guard isInitialized,
|
|
1204
|
+
connectionEpoch == expectedEpoch,
|
|
1205
|
+
purchaseUpdatedSub == nil else { return }
|
|
1144
1206
|
RnIapLog.payload("purchaseUpdatedListener.register", nil)
|
|
1145
1207
|
purchaseUpdatedSub = OpenIapModule.shared.purchaseUpdatedListener { [weak self] openIapPurchase in
|
|
1146
1208
|
guard let self else {
|
|
@@ -1148,6 +1210,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1148
1210
|
return
|
|
1149
1211
|
}
|
|
1150
1212
|
Task { @MainActor in
|
|
1213
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1151
1214
|
let rawPayload = OpenIapSerialization.purchase(openIapPurchase)
|
|
1152
1215
|
let payload = RnIapHelper.sanitizeDictionary(rawPayload)
|
|
1153
1216
|
RnIapLog.result("purchaseUpdatedListener", payload)
|
|
@@ -1162,11 +1225,12 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1162
1225
|
}
|
|
1163
1226
|
}
|
|
1164
1227
|
|
|
1165
|
-
private func attachDuplicatePurchaseUpdatedSubIfNeeded() {
|
|
1228
|
+
private func attachDuplicatePurchaseUpdatedSubIfNeeded(expectedEpoch: UInt64) {
|
|
1166
1229
|
listenerLock.withLock {
|
|
1167
|
-
guard
|
|
1168
|
-
|
|
1169
|
-
|
|
1230
|
+
guard isInitialized,
|
|
1231
|
+
connectionEpoch == expectedEpoch,
|
|
1232
|
+
purchaseUpdatedDuplicateSub == nil,
|
|
1233
|
+
!purchaseUpdatedDuplicateListeners.isEmpty else { return }
|
|
1170
1234
|
RnIapLog.payload("purchaseUpdatedListener.register.duplicates", nil)
|
|
1171
1235
|
let options = OpenIAP.PurchaseUpdatedListenerOptions(
|
|
1172
1236
|
dedupeTransactionIOS: false
|
|
@@ -1177,6 +1241,7 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1177
1241
|
return
|
|
1178
1242
|
}
|
|
1179
1243
|
Task { @MainActor in
|
|
1244
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1180
1245
|
let rawPayload = OpenIapSerialization.purchase(openIapPurchase)
|
|
1181
1246
|
let payload = RnIapHelper.sanitizeDictionary(rawPayload)
|
|
1182
1247
|
RnIapLog.result("purchaseUpdatedListener.duplicates", payload)
|
|
@@ -1191,32 +1256,46 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1191
1256
|
}
|
|
1192
1257
|
}
|
|
1193
1258
|
|
|
1194
|
-
private func attachSubscriptionBillingIssueSubIfNeeded() {
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1259
|
+
private func attachSubscriptionBillingIssueSubIfNeeded(expectedEpoch: UInt64) {
|
|
1260
|
+
listenerLock.withLock {
|
|
1261
|
+
guard isInitialized,
|
|
1262
|
+
connectionEpoch == expectedEpoch,
|
|
1263
|
+
subscriptionBillingIssueSub == nil,
|
|
1264
|
+
!subscriptionBillingIssueListeners.isEmpty else { return }
|
|
1265
|
+
RnIapLog.payload("subscriptionBillingIssueListener.register", nil)
|
|
1266
|
+
subscriptionBillingIssueSub = OpenIapModule.shared.subscriptionBillingIssueListener { [weak self] openIapPurchase in
|
|
1267
|
+
guard let self else {
|
|
1268
|
+
RnIapLog.warn("subscriptionBillingIssueListener: HybridRnIap deallocated, event dropped")
|
|
1269
|
+
return
|
|
1270
|
+
}
|
|
1271
|
+
Task { @MainActor in
|
|
1272
|
+
guard self.isCurrentConnection(expectedEpoch) else { return }
|
|
1273
|
+
let payload = RnIapHelper.sanitizeDictionary(OpenIapSerialization.purchase(openIapPurchase))
|
|
1274
|
+
RnIapLog.result("subscriptionBillingIssueListener", payload)
|
|
1275
|
+
let nitro = RnIapHelper.convertPurchaseDictionary(payload)
|
|
1276
|
+
let snapshot: [(NitroPurchase) -> Void] = self.listenerLock.withLock {
|
|
1277
|
+
Array(self.subscriptionBillingIssueListeners)
|
|
1278
|
+
}
|
|
1279
|
+
for listener in snapshot { listener(nitro) }
|
|
1208
1280
|
}
|
|
1209
|
-
for l in snapshot { l(nitro) }
|
|
1210
1281
|
}
|
|
1282
|
+
RnIapLog.result("subscriptionBillingIssueListener.register", "attached")
|
|
1211
1283
|
}
|
|
1212
|
-
RnIapLog.result("subscriptionBillingIssueListener.register", "attached")
|
|
1213
1284
|
}
|
|
1214
1285
|
|
|
1215
1286
|
private func ensureConnection() throws {
|
|
1216
|
-
guard
|
|
1287
|
+
guard isConnectionInitialized() else {
|
|
1217
1288
|
throw OpenIapException.make(code: .initConnection, message: "Connection not initialized. Call initConnection() first.")
|
|
1218
1289
|
}
|
|
1219
1290
|
}
|
|
1291
|
+
|
|
1292
|
+
private func isConnectionInitialized() -> Bool {
|
|
1293
|
+
listenerLock.withLock { isInitialized }
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
private func isCurrentConnection(_ epoch: UInt64) -> Bool {
|
|
1297
|
+
listenerLock.withLock { isInitialized && connectionEpoch == epoch }
|
|
1298
|
+
}
|
|
1220
1299
|
|
|
1221
1300
|
private func sendPurchaseUpdate(_ purchase: NitroPurchase, includeDuplicateListeners: Bool) {
|
|
1222
1301
|
let snapshot: [(NitroPurchase) -> Void] = listenerLock.withLock {
|
|
@@ -1259,7 +1338,12 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1259
1338
|
debugMessage: error.debugMessage,
|
|
1260
1339
|
code: error.code,
|
|
1261
1340
|
message: error.message,
|
|
1262
|
-
purchaseToken: nil
|
|
1341
|
+
purchaseToken: nil,
|
|
1342
|
+
productId: error.productId,
|
|
1343
|
+
productIds: error.productIds,
|
|
1344
|
+
productType: error.productType,
|
|
1345
|
+
isEmptyProductList: error.isEmptyProductList,
|
|
1346
|
+
subResponseCodeAndroid: error.subResponseCodeAndroid
|
|
1263
1347
|
)
|
|
1264
1348
|
} else {
|
|
1265
1349
|
sanitized = error
|
|
@@ -1274,60 +1358,51 @@ class HybridRnIap: HybridRnIapSpec {
|
|
|
1274
1358
|
sendPurchaseError(error, productId: productId)
|
|
1275
1359
|
}
|
|
1276
1360
|
|
|
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)
|
|
1361
|
+
private func detachConnectionState() -> [(label: String, subscription: Subscription)] {
|
|
1317
1362
|
listenerLock.withLock {
|
|
1363
|
+
connectionEpoch &+= 1
|
|
1364
|
+
isInitialized = false
|
|
1365
|
+
|
|
1366
|
+
var subscriptions: [(label: String, subscription: Subscription)] = []
|
|
1367
|
+
if let purchaseUpdatedSub {
|
|
1368
|
+
subscriptions.append(("purchaseUpdated", purchaseUpdatedSub))
|
|
1369
|
+
}
|
|
1370
|
+
if let purchaseUpdatedDuplicateSub {
|
|
1371
|
+
subscriptions.append(("purchaseUpdatedDuplicate", purchaseUpdatedDuplicateSub))
|
|
1372
|
+
}
|
|
1373
|
+
if let purchaseErrorSub {
|
|
1374
|
+
subscriptions.append(("purchaseError", purchaseErrorSub))
|
|
1375
|
+
}
|
|
1376
|
+
if let promotedProductSub {
|
|
1377
|
+
subscriptions.append(("promotedProduct", promotedProductSub))
|
|
1378
|
+
}
|
|
1379
|
+
if let subscriptionBillingIssueSub {
|
|
1380
|
+
subscriptions.append(("subscriptionBillingIssue", subscriptionBillingIssueSub))
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
purchaseUpdatedSub = nil
|
|
1384
|
+
purchaseUpdatedDuplicateSub = nil
|
|
1385
|
+
purchaseErrorSub = nil
|
|
1386
|
+
promotedProductSub = nil
|
|
1387
|
+
subscriptionBillingIssueSub = nil
|
|
1318
1388
|
purchaseUpdatedListeners.removeAll()
|
|
1319
1389
|
purchaseUpdatedDuplicateListeners.removeAll()
|
|
1320
1390
|
purchaseUpdatedListenerRegistrations.removeAll()
|
|
1321
|
-
nextPurchaseUpdatedListenerToken = 1
|
|
1322
1391
|
purchaseErrorListeners.removeAll()
|
|
1323
1392
|
promotedProductListeners.removeAll()
|
|
1324
1393
|
subscriptionBillingIssueListeners.removeAll()
|
|
1325
1394
|
lastPurchaseErrorKey = nil
|
|
1326
1395
|
lastPurchaseErrorTimestamp = 0
|
|
1396
|
+
return subscriptions
|
|
1327
1397
|
}
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1398
|
+
}
|
|
1399
|
+
|
|
1400
|
+
private func removeSubscriptions(
|
|
1401
|
+
_ subscriptions: [(label: String, subscription: Subscription)]
|
|
1402
|
+
) {
|
|
1403
|
+
for subscription in subscriptions {
|
|
1404
|
+
RnIapLog.payload("removeListener", subscription.label)
|
|
1405
|
+
OpenIapModule.shared.removeListener(subscription.subscription)
|
|
1331
1406
|
}
|
|
1332
1407
|
}
|
|
1333
1408
|
|