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
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
package com.margelo.nitro.iap
|
|
2
|
+
|
|
3
|
+
import kotlinx.coroutines.CompletableDeferred
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Preserves invocation order for connection lifecycle calls before their
|
|
7
|
+
* coroutine bodies are scheduled. Consecutive init calls share one flight;
|
|
8
|
+
* an intervening end call invalidates that flight and closes the join window.
|
|
9
|
+
*/
|
|
10
|
+
internal class ConnectionLifecycleQueue {
|
|
11
|
+
internal class Invocation<T> internal constructor(
|
|
12
|
+
private val awaitResult: suspend () -> T,
|
|
13
|
+
) {
|
|
14
|
+
suspend fun await(): T = awaitResult()
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
private data class InitFlight(
|
|
18
|
+
val predecessor: CompletableDeferred<Unit>,
|
|
19
|
+
val completion: CompletableDeferred<Unit>,
|
|
20
|
+
val result: CompletableDeferred<Boolean>,
|
|
21
|
+
var invalidation: Throwable? = null,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
private val lock = Any()
|
|
25
|
+
private var tail = CompletableDeferred(Unit)
|
|
26
|
+
private var joinableInit: InitFlight? = null
|
|
27
|
+
|
|
28
|
+
fun enqueueInit(
|
|
29
|
+
operation: suspend () -> Boolean,
|
|
30
|
+
onCommitted: (Boolean) -> Unit,
|
|
31
|
+
onFailed: (Throwable) -> Unit,
|
|
32
|
+
): Invocation<Boolean> {
|
|
33
|
+
synchronized(lock) {
|
|
34
|
+
joinableInit?.let { flight ->
|
|
35
|
+
return Invocation { flight.result.await() }
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
val completion = CompletableDeferred<Unit>()
|
|
39
|
+
val flight =
|
|
40
|
+
InitFlight(
|
|
41
|
+
predecessor = tail,
|
|
42
|
+
completion = completion,
|
|
43
|
+
result = CompletableDeferred(),
|
|
44
|
+
)
|
|
45
|
+
tail = completion
|
|
46
|
+
joinableInit = flight
|
|
47
|
+
|
|
48
|
+
return Invocation {
|
|
49
|
+
try {
|
|
50
|
+
flight.predecessor.await()
|
|
51
|
+
synchronized(lock) { flight.invalidation }?.let { throw it }
|
|
52
|
+
|
|
53
|
+
val value = operation()
|
|
54
|
+
val committed =
|
|
55
|
+
synchronized(lock) {
|
|
56
|
+
if (flight.invalidation == null) {
|
|
57
|
+
onCommitted(value)
|
|
58
|
+
flight.result.complete(value)
|
|
59
|
+
true
|
|
60
|
+
} else {
|
|
61
|
+
false
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (!committed) {
|
|
65
|
+
throw synchronized(lock) {
|
|
66
|
+
checkNotNull(flight.invalidation)
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
} catch (error: Throwable) {
|
|
70
|
+
val effectiveError =
|
|
71
|
+
synchronized(lock) {
|
|
72
|
+
flight.invalidation ?: error
|
|
73
|
+
}
|
|
74
|
+
runCatching { onFailed(effectiveError) }
|
|
75
|
+
flight.result.completeExceptionally(effectiveError)
|
|
76
|
+
} finally {
|
|
77
|
+
synchronized(lock) {
|
|
78
|
+
if (joinableInit === flight) joinableInit = null
|
|
79
|
+
}
|
|
80
|
+
flight.completion.complete(Unit)
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
flight.result.await()
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
fun enqueueEnd(
|
|
89
|
+
pendingInitError: Throwable,
|
|
90
|
+
operation: suspend () -> Boolean,
|
|
91
|
+
): Invocation<Boolean> {
|
|
92
|
+
val predecessor: CompletableDeferred<Unit>
|
|
93
|
+
val completion = CompletableDeferred<Unit>()
|
|
94
|
+
synchronized(lock) {
|
|
95
|
+
joinableInit?.let { flight ->
|
|
96
|
+
flight.invalidation = pendingInitError
|
|
97
|
+
flight.result.completeExceptionally(pendingInitError)
|
|
98
|
+
}
|
|
99
|
+
joinableInit = null
|
|
100
|
+
predecessor = tail
|
|
101
|
+
tail = completion
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return Invocation {
|
|
105
|
+
try {
|
|
106
|
+
predecessor.await()
|
|
107
|
+
operation()
|
|
108
|
+
} finally {
|
|
109
|
+
completion.complete(Unit)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -58,7 +58,6 @@ import java.util.Locale
|
|
|
58
58
|
import kotlin.coroutines.cancellation.CancellationException
|
|
59
59
|
import kotlinx.coroutines.Dispatchers
|
|
60
60
|
import kotlinx.coroutines.withContext
|
|
61
|
-
import kotlinx.coroutines.CompletableDeferred
|
|
62
61
|
import org.json.JSONArray
|
|
63
62
|
import org.json.JSONObject
|
|
64
63
|
|
|
@@ -78,6 +77,15 @@ class OpenIapException(private val errorJson: String, cause: Throwable? = null)
|
|
|
78
77
|
}
|
|
79
78
|
}
|
|
80
79
|
|
|
80
|
+
internal suspend fun endRnConnectionWithCleanup(
|
|
81
|
+
endConnection: suspend () -> Boolean,
|
|
82
|
+
cleanup: () -> Unit,
|
|
83
|
+
): Boolean = try {
|
|
84
|
+
endConnection()
|
|
85
|
+
} finally {
|
|
86
|
+
cleanup()
|
|
87
|
+
}
|
|
88
|
+
|
|
81
89
|
class HybridRnIap : HybridRnIapSpec() {
|
|
82
90
|
private data class PurchaseUpdatedListenerRegistration(
|
|
83
91
|
val token: Double,
|
|
@@ -103,14 +111,24 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
103
111
|
private val subscriptionBillingIssueListeners = mutableListOf<(NitroPurchase) -> Unit>()
|
|
104
112
|
private var listenersAttached = false
|
|
105
113
|
private var isInitialized = false
|
|
106
|
-
private
|
|
107
|
-
private val initLock = Any()
|
|
114
|
+
private val connectionLifecycleQueue = ConnectionLifecycleQueue()
|
|
108
115
|
|
|
109
116
|
// Connection methods
|
|
110
117
|
// Variant wrapper helpers for nitrogen 0.35.0 compatibility
|
|
111
118
|
private fun String?.wrapVariant(): Variant_NullType_String? = this?.let { Variant_NullType_String.Second(it) }
|
|
112
119
|
private fun Double?.wrapVariant(): Variant_NullType_Double? = this?.let { Variant_NullType_Double.Second(it) }
|
|
113
120
|
private fun Boolean?.wrapVariant(): Variant_NullType_Boolean? = this?.let { Variant_NullType_Boolean.Second(it) }
|
|
121
|
+
private fun List<String>?.wrapVariant(): Variant_NullType_Array_String_? =
|
|
122
|
+
this?.let { Variant_NullType_Array_String_.Second(it.toTypedArray()) }
|
|
123
|
+
private fun dev.hyo.openiap.PendingPurchaseUpdateAndroid?.wrapVariant(): Variant_NullType_PendingPurchaseUpdateAndroid? =
|
|
124
|
+
this?.let {
|
|
125
|
+
Variant_NullType_PendingPurchaseUpdateAndroid.Second(
|
|
126
|
+
PendingPurchaseUpdateAndroid(
|
|
127
|
+
products = it.products.toTypedArray(),
|
|
128
|
+
purchaseToken = it.purchaseToken
|
|
129
|
+
)
|
|
130
|
+
)
|
|
131
|
+
}
|
|
114
132
|
private fun Variant_NullType_String?.unwrapString(): String? = (this as? Variant_NullType_String.Second)?.value
|
|
115
133
|
private fun Variant_NullType_Double?.unwrapDouble(): Double? = (this as? Variant_NullType_Double.Second)?.value
|
|
116
134
|
private fun Variant_NullType_Boolean?.unwrapBool(): Boolean? = (this as? Variant_NullType_Boolean.Second)?.value
|
|
@@ -120,14 +138,10 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
120
138
|
}
|
|
121
139
|
|
|
122
140
|
override fun initConnection(config: Variant_NullType_InitConnectionConfig?): Promise<Boolean> {
|
|
123
|
-
|
|
124
|
-
|
|
141
|
+
val configValue = (config as? Variant_NullType_InitConnectionConfig.Second)?.value
|
|
142
|
+
val performInit: suspend () -> Boolean = initOperation@{
|
|
125
143
|
RnIapLog.payload("initConnection", configValue)
|
|
126
|
-
|
|
127
|
-
if (isInitialized) {
|
|
128
|
-
RnIapLog.result("initConnection", true)
|
|
129
|
-
return@async true
|
|
130
|
-
}
|
|
144
|
+
if (isInitialized) return@initOperation true
|
|
131
145
|
|
|
132
146
|
// CRITICAL: Set Activity BEFORE calling initConnection
|
|
133
147
|
// Horizon SDK needs Activity to initialize OVRPlatform with proper returnComponent
|
|
@@ -162,28 +176,14 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
162
176
|
)
|
|
163
177
|
}
|
|
164
178
|
|
|
165
|
-
// Single-flight: capture or create the shared Deferred atomically
|
|
166
|
-
val wasExisting = synchronized(initLock) {
|
|
167
|
-
if (initDeferred == null) {
|
|
168
|
-
initDeferred = CompletableDeferred()
|
|
169
|
-
false
|
|
170
|
-
} else true
|
|
171
|
-
}
|
|
172
|
-
if (wasExisting) {
|
|
173
|
-
val result = initDeferred!!.await()
|
|
174
|
-
RnIapLog.result("initConnection.await", result)
|
|
175
|
-
return@async result
|
|
176
|
-
}
|
|
177
|
-
|
|
178
179
|
try {
|
|
179
180
|
if (!listenersAttached) {
|
|
180
|
-
listenersAttached = true
|
|
181
181
|
RnIapLog.payload("listeners.attach", null)
|
|
182
182
|
openIap.addPurchaseUpdateListener(OpenIapPurchaseUpdateListener { p ->
|
|
183
183
|
runCatching {
|
|
184
184
|
RnIapLog.result(
|
|
185
185
|
"purchaseUpdatedListener",
|
|
186
|
-
mapOf("
|
|
186
|
+
mapOf("productId" to p.productId)
|
|
187
187
|
)
|
|
188
188
|
sendPurchaseUpdate(convertToNitroPurchase(p))
|
|
189
189
|
}.onFailure { RnIapLog.failure("purchaseUpdatedListener", it) }
|
|
@@ -205,8 +205,30 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
205
205
|
"userChoiceBillingListener",
|
|
206
206
|
mapOf("products" to details.products, "token" to details.externalTransactionToken)
|
|
207
207
|
)
|
|
208
|
+
val originalTransactionId = runCatching {
|
|
209
|
+
details.javaClass
|
|
210
|
+
.getMethod("getOriginalExternalTransactionId")
|
|
211
|
+
.invoke(details) as? String
|
|
212
|
+
}.getOrNull()
|
|
213
|
+
val productDetails = runCatching {
|
|
214
|
+
(details.javaClass.getMethod("getProductDetailsAndroid").invoke(details) as? List<*>)
|
|
215
|
+
?.mapNotNull { it as? dev.hyo.openiap.DeveloperProvidedBillingProductAndroid }
|
|
216
|
+
}.getOrNull()
|
|
208
217
|
val nitroDetails = UserChoiceBillingDetails(
|
|
209
218
|
externalTransactionToken = details.externalTransactionToken,
|
|
219
|
+
originalExternalTransactionId = originalTransactionId.wrapVariant(),
|
|
220
|
+
productDetailsAndroid = productDetails?.map { product ->
|
|
221
|
+
DeveloperProvidedBillingProductAndroid(
|
|
222
|
+
id = product.id,
|
|
223
|
+
offerToken = product.offerToken.wrapVariant(),
|
|
224
|
+
type = when (product.type) {
|
|
225
|
+
OpenIapProductType.InApp -> ProductType.IN_APP
|
|
226
|
+
OpenIapProductType.Subs -> ProductType.SUBS
|
|
227
|
+
}
|
|
228
|
+
)
|
|
229
|
+
}?.toTypedArray()?.let {
|
|
230
|
+
Variant_NullType_Array_DeveloperProvidedBillingProductAndroid_.Second(it)
|
|
231
|
+
},
|
|
210
232
|
products = details.products.toTypedArray()
|
|
211
233
|
)
|
|
212
234
|
sendUserChoiceBilling(nitroDetails)
|
|
@@ -237,6 +259,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
237
259
|
sendDeveloperProvidedBilling(nitroDetails)
|
|
238
260
|
}.onFailure { RnIapLog.failure("developerProvidedBillingListener", it) }
|
|
239
261
|
})
|
|
262
|
+
listenersAttached = true
|
|
240
263
|
RnIapLog.result("listeners.attach", "attached")
|
|
241
264
|
}
|
|
242
265
|
} catch (err: CancellationException) {
|
|
@@ -253,18 +276,10 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
253
276
|
messageOverride = "Failed to register billing listeners: $errorMessage"
|
|
254
277
|
)
|
|
255
278
|
)
|
|
256
|
-
synchronized(initLock) {
|
|
257
|
-
initDeferred?.let { deferred ->
|
|
258
|
-
if (!deferred.isCompleted) deferred.completeExceptionally(wrapped)
|
|
259
|
-
}
|
|
260
|
-
initDeferred = null
|
|
261
|
-
}
|
|
262
279
|
isInitialized = false
|
|
263
280
|
throw wrapped
|
|
264
281
|
}
|
|
265
282
|
|
|
266
|
-
// We created it above; reuse the shared instance
|
|
267
|
-
val deferred = initDeferred!!
|
|
268
283
|
try {
|
|
269
284
|
// Convert Nitro config to OpenIAP config
|
|
270
285
|
// Note: enableBillingProgramAndroid is passed to OpenIapInitConnectionConfig
|
|
@@ -289,6 +304,8 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
289
304
|
withContext(Dispatchers.Main) {
|
|
290
305
|
openIap.initConnection(openIapConfig)
|
|
291
306
|
}
|
|
307
|
+
} catch (err: CancellationException) {
|
|
308
|
+
throw err
|
|
292
309
|
} catch (err: Throwable) {
|
|
293
310
|
val error = OpenIapError.InitConnection
|
|
294
311
|
RnIapLog.failure("initConnection.native", err)
|
|
@@ -310,42 +327,57 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
310
327
|
)
|
|
311
328
|
)
|
|
312
329
|
}
|
|
313
|
-
isInitialized = true
|
|
314
|
-
deferred.complete(true)
|
|
315
|
-
RnIapLog.result("initConnection", true)
|
|
316
330
|
true
|
|
317
331
|
} catch (e: Exception) {
|
|
318
|
-
// Complete exceptionally so all concurrent awaiters receive the same failure
|
|
319
|
-
if (!deferred.isCompleted) deferred.completeExceptionally(e)
|
|
320
|
-
isInitialized = false
|
|
321
332
|
RnIapLog.failure("initConnection", e)
|
|
322
333
|
throw e
|
|
323
|
-
} finally {
|
|
324
|
-
initDeferred = null
|
|
325
334
|
}
|
|
326
335
|
}
|
|
336
|
+
val invocation = connectionLifecycleQueue.enqueueInit(
|
|
337
|
+
operation = performInit,
|
|
338
|
+
onCommitted = { value ->
|
|
339
|
+
isInitialized = value
|
|
340
|
+
RnIapLog.result("initConnection", value)
|
|
341
|
+
},
|
|
342
|
+
onFailed = { isInitialized = false }
|
|
343
|
+
)
|
|
344
|
+
return Promise.async {
|
|
345
|
+
invocation.await()
|
|
346
|
+
}
|
|
327
347
|
}
|
|
328
348
|
|
|
329
349
|
override fun endConnection(): Promise<Boolean> {
|
|
330
|
-
|
|
350
|
+
val pendingInitError = OpenIapException(
|
|
351
|
+
toErrorJson(
|
|
352
|
+
error = OpenIapError.ServiceDisconnected(
|
|
353
|
+
"Connection ended while initialization was in progress"
|
|
354
|
+
)
|
|
355
|
+
)
|
|
356
|
+
)
|
|
357
|
+
val invocation = connectionLifecycleQueue.enqueueEnd(pendingInitError) {
|
|
331
358
|
RnIapLog.payload("endConnection", null)
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
359
|
+
val result = endRnConnectionWithCleanup(
|
|
360
|
+
endConnection = { openIap.endConnection() },
|
|
361
|
+
cleanup = {
|
|
362
|
+
productTypeBySku.clear()
|
|
363
|
+
isInitialized = false
|
|
364
|
+
// Native listener sets persist; clear only bridge callbacks.
|
|
365
|
+
synchronized(purchaseUpdatedListeners) {
|
|
366
|
+
purchaseUpdatedListeners.clear()
|
|
367
|
+
nextPurchaseUpdatedListenerToken = 1.0
|
|
368
|
+
}
|
|
369
|
+
synchronized(purchaseErrorListeners) { purchaseErrorListeners.clear() }
|
|
370
|
+
promotedProductListenersIOS.clear()
|
|
371
|
+
synchronized(userChoiceBillingListenersAndroid) { userChoiceBillingListenersAndroid.clear() }
|
|
372
|
+
synchronized(developerProvidedBillingListenersAndroid) { developerProvidedBillingListenersAndroid.clear() }
|
|
373
|
+
clearSubscriptionBillingIssueListeners()
|
|
374
|
+
},
|
|
375
|
+
)
|
|
376
|
+
RnIapLog.result("endConnection", result)
|
|
377
|
+
result
|
|
378
|
+
}
|
|
379
|
+
return Promise.async {
|
|
380
|
+
invocation.await()
|
|
349
381
|
}
|
|
350
382
|
}
|
|
351
383
|
|
|
@@ -572,14 +604,13 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
572
604
|
openIap.requestPurchase(requestProps)
|
|
573
605
|
}
|
|
574
606
|
val purchases = result.purchasesOrEmpty()
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
}
|
|
607
|
+
RnIapLog.result(
|
|
608
|
+
"requestPurchase.native",
|
|
609
|
+
mapOf(
|
|
610
|
+
"purchaseCount" to purchases.size,
|
|
611
|
+
"productIds" to purchases.map { it.productId }
|
|
612
|
+
)
|
|
613
|
+
)
|
|
583
614
|
|
|
584
615
|
defaultResult
|
|
585
616
|
} catch (e: Exception) {
|
|
@@ -639,7 +670,10 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
639
670
|
}
|
|
640
671
|
RnIapLog.result(
|
|
641
672
|
"getAvailablePurchases",
|
|
642
|
-
|
|
673
|
+
mapOf(
|
|
674
|
+
"purchaseCount" to result.size,
|
|
675
|
+
"productIds" to result.map { it.productId }
|
|
676
|
+
)
|
|
643
677
|
)
|
|
644
678
|
result.map { convertToNitroPurchase(it) }.toTypedArray()
|
|
645
679
|
}
|
|
@@ -752,7 +786,12 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
752
786
|
debugMessage = "Missing purchaseToken",
|
|
753
787
|
code = OpenIapError.toCode(OpenIapError.DeveloperError()),
|
|
754
788
|
message = "Missing purchaseToken",
|
|
755
|
-
purchaseToken = null
|
|
789
|
+
purchaseToken = null,
|
|
790
|
+
productId = null,
|
|
791
|
+
productIds = null,
|
|
792
|
+
productType = null,
|
|
793
|
+
isEmptyProductList = null,
|
|
794
|
+
subResponseCodeAndroid = null
|
|
756
795
|
)
|
|
757
796
|
)
|
|
758
797
|
}
|
|
@@ -768,7 +807,12 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
768
807
|
debugMessage = e.message,
|
|
769
808
|
code = OpenIapError.toCode(err),
|
|
770
809
|
message = e.message?.takeIf { it.isNotBlank() } ?: err.message,
|
|
771
|
-
purchaseToken = purchaseToken
|
|
810
|
+
purchaseToken = purchaseToken,
|
|
811
|
+
productId = null,
|
|
812
|
+
productIds = null,
|
|
813
|
+
productType = null,
|
|
814
|
+
isEmptyProductList = null,
|
|
815
|
+
subResponseCodeAndroid = null
|
|
772
816
|
)
|
|
773
817
|
)
|
|
774
818
|
}
|
|
@@ -785,7 +829,12 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
785
829
|
debugMessage = null,
|
|
786
830
|
code = "0",
|
|
787
831
|
message = "OK",
|
|
788
|
-
purchaseToken = purchaseToken
|
|
832
|
+
purchaseToken = purchaseToken,
|
|
833
|
+
productId = null,
|
|
834
|
+
productIds = null,
|
|
835
|
+
productType = null,
|
|
836
|
+
isEmptyProductList = null,
|
|
837
|
+
subResponseCodeAndroid = null
|
|
789
838
|
)
|
|
790
839
|
)
|
|
791
840
|
RnIapLog.result("finishTransaction", mapOf("success" to true))
|
|
@@ -799,7 +848,12 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
799
848
|
debugMessage = e.message,
|
|
800
849
|
code = OpenIapError.toCode(err),
|
|
801
850
|
message = e.message?.takeIf { it.isNotBlank() } ?: err.message,
|
|
802
|
-
purchaseToken = null
|
|
851
|
+
purchaseToken = null,
|
|
852
|
+
productId = null,
|
|
853
|
+
productIds = null,
|
|
854
|
+
productType = null,
|
|
855
|
+
isEmptyProductList = null,
|
|
856
|
+
subResponseCodeAndroid = null
|
|
803
857
|
)
|
|
804
858
|
)
|
|
805
859
|
}
|
|
@@ -812,11 +866,30 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
812
866
|
ensureConnection()
|
|
813
867
|
RnIapLog.payload("getStorefront", null)
|
|
814
868
|
val value = openIap.getStorefront()
|
|
869
|
+
if (value.isBlank()) {
|
|
870
|
+
throw OpenIapError.ServiceUnavailable(
|
|
871
|
+
"Storefront lookup returned no country code"
|
|
872
|
+
)
|
|
873
|
+
}
|
|
815
874
|
RnIapLog.result("getStorefront", value)
|
|
816
875
|
value
|
|
876
|
+
} catch (e: OpenIapException) {
|
|
877
|
+
RnIapLog.failure("getStorefront", e)
|
|
878
|
+
throw e
|
|
879
|
+
} catch (e: OpenIapError) {
|
|
880
|
+
RnIapLog.failure("getStorefront", e)
|
|
881
|
+
throw OpenIapException(toErrorJson(e))
|
|
817
882
|
} catch (e: Exception) {
|
|
818
883
|
RnIapLog.failure("getStorefront", e)
|
|
819
|
-
|
|
884
|
+
val error = OpenIapError.ServiceUnavailable(e.message)
|
|
885
|
+
throw OpenIapException(
|
|
886
|
+
toErrorJson(
|
|
887
|
+
error = error,
|
|
888
|
+
debugMessage = e.message,
|
|
889
|
+
messageOverride = "Failed to get storefront"
|
|
890
|
+
),
|
|
891
|
+
e
|
|
892
|
+
)
|
|
820
893
|
}
|
|
821
894
|
}
|
|
822
895
|
}
|
|
@@ -913,7 +986,12 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
913
986
|
debugMessage = debugMessage,
|
|
914
987
|
code = errorCode,
|
|
915
988
|
message = message,
|
|
916
|
-
purchaseToken = null
|
|
989
|
+
purchaseToken = null,
|
|
990
|
+
productId = sku,
|
|
991
|
+
productIds = null,
|
|
992
|
+
productType = null,
|
|
993
|
+
isEmptyProductList = null,
|
|
994
|
+
subResponseCodeAndroid = null
|
|
917
995
|
)
|
|
918
996
|
}
|
|
919
997
|
|
|
@@ -1117,11 +1195,16 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1117
1195
|
productId = purchase.productId,
|
|
1118
1196
|
transactionDate = purchase.transactionDate,
|
|
1119
1197
|
purchaseToken = purchase.purchaseToken.wrapVariant(),
|
|
1198
|
+
currentPlanId = purchase.currentPlanId.wrapVariant(),
|
|
1199
|
+
ids = purchase.ids.wrapVariant(),
|
|
1120
1200
|
platform = IapPlatform.ANDROID,
|
|
1121
1201
|
store = mapIapStore(purchase.store),
|
|
1122
1202
|
quantity = purchase.quantity.toDouble(),
|
|
1123
1203
|
purchaseState = mapPurchaseState(purchase.purchaseState),
|
|
1124
1204
|
isAutoRenewing = purchase.isAutoRenewing,
|
|
1205
|
+
advancedCommerceInfoIOS = null,
|
|
1206
|
+
billingPlanTypeIOS = null,
|
|
1207
|
+
commitmentInfoIOS = null,
|
|
1125
1208
|
quantityIOS = null,
|
|
1126
1209
|
originalTransactionDateIOS = null,
|
|
1127
1210
|
originalTransactionIdentifierIOS = null,
|
|
@@ -1154,7 +1237,8 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1154
1237
|
obfuscatedAccountIdAndroid = androidPurchase?.obfuscatedAccountIdAndroid.wrapVariant(),
|
|
1155
1238
|
obfuscatedProfileIdAndroid = androidPurchase?.obfuscatedProfileIdAndroid.wrapVariant(),
|
|
1156
1239
|
developerPayloadAndroid = androidPurchase?.developerPayloadAndroid.wrapVariant(),
|
|
1157
|
-
isSuspendedAndroid = androidPurchase?.isSuspendedAndroid.wrapVariant()
|
|
1240
|
+
isSuspendedAndroid = androidPurchase?.isSuspendedAndroid.wrapVariant(),
|
|
1241
|
+
pendingPurchaseUpdateAndroid = androidPurchase?.pendingPurchaseUpdateAndroid.wrapVariant()
|
|
1158
1242
|
)
|
|
1159
1243
|
}
|
|
1160
1244
|
|
|
@@ -1225,10 +1309,10 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1225
1309
|
}
|
|
1226
1310
|
}
|
|
1227
1311
|
|
|
1228
|
-
override fun buyPromotedProductIOS(): Promise<
|
|
1312
|
+
override fun buyPromotedProductIOS(): Promise<Boolean> {
|
|
1229
1313
|
return Promise.async {
|
|
1230
1314
|
// Android doesn't have promoted products like iOS App Store
|
|
1231
|
-
|
|
1315
|
+
false
|
|
1232
1316
|
}
|
|
1233
1317
|
}
|
|
1234
1318
|
|
|
@@ -1310,11 +1394,17 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1310
1394
|
|
|
1311
1395
|
// Call OpenIAP's verifyPurchase - this makes the actual Google Play API call
|
|
1312
1396
|
val verifyResult = openIap.verifyPurchase(props)
|
|
1313
|
-
RnIapLog.result("validateReceipt", verifyResult.toString())
|
|
1314
1397
|
|
|
1315
1398
|
// Cast to Android result type (on Android, verifyPurchase returns VerifyPurchaseResultAndroid)
|
|
1316
1399
|
val androidResult = verifyResult as? VerifyPurchaseResultAndroid
|
|
1317
1400
|
?: throw OpenIapException(toErrorJson(OpenIapError.InvalidPurchaseVerification, debugMessage = "Unexpected result type from verifyPurchase"))
|
|
1401
|
+
RnIapLog.result(
|
|
1402
|
+
"validateReceipt",
|
|
1403
|
+
mapOf(
|
|
1404
|
+
"productId" to androidResult.productId,
|
|
1405
|
+
"testTransaction" to androidResult.testTransaction
|
|
1406
|
+
)
|
|
1407
|
+
)
|
|
1318
1408
|
|
|
1319
1409
|
// Convert OpenIAP result to Nitro result
|
|
1320
1410
|
val result = NitroReceiptValidationResultAndroid(
|
|
@@ -1372,6 +1462,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1372
1462
|
// Use provided apiKey, or fallback to host app AndroidManifest meta-data.
|
|
1373
1463
|
val apiKey = iapkit.apiKey.unwrapString() ?: getIapkitApiKeyFromManifest()
|
|
1374
1464
|
apiKey?.let { iapkitMap["apiKey"] = it }
|
|
1465
|
+
iapkit.baseUrl.unwrapString()?.let { iapkitMap["baseUrl"] = it }
|
|
1375
1466
|
(iapkit.google as? Variant_NullType_NitroVerifyPurchaseWithIapkitGoogleProps.Second)?.value?.let { google ->
|
|
1376
1467
|
iapkitMap["google"] = mapOf("purchaseToken" to google.purchaseToken)
|
|
1377
1468
|
}
|
|
@@ -1561,7 +1652,10 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1561
1652
|
val token = withContext(Dispatchers.Main) {
|
|
1562
1653
|
openIap.createAlternativeBillingReportingToken()
|
|
1563
1654
|
}
|
|
1564
|
-
RnIapLog.result(
|
|
1655
|
+
RnIapLog.result(
|
|
1656
|
+
"createAlternativeBillingTokenAndroid",
|
|
1657
|
+
if (token.isNullOrBlank()) "<empty>" else "<token>"
|
|
1658
|
+
)
|
|
1565
1659
|
token?.let { Variant_NullType_String.Second(it) } ?: Variant_NullType_String.First(NullType.NULL)
|
|
1566
1660
|
} catch (err: Throwable) {
|
|
1567
1661
|
RnIapLog.failure("createAlternativeBillingTokenAndroid", err)
|
|
@@ -1618,15 +1712,19 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1618
1712
|
private var subscriptionBillingIssueNativeListener: dev.hyo.openiap.listener.OpenIapSubscriptionBillingIssueListener? = null
|
|
1619
1713
|
|
|
1620
1714
|
override fun addSubscriptionBillingIssueListener(listener: (purchase: NitroPurchase) -> Unit) {
|
|
1621
|
-
synchronized(
|
|
1622
|
-
subscriptionBillingIssueListeners
|
|
1715
|
+
synchronized(subscriptionBillingIssueAttachLock) {
|
|
1716
|
+
synchronized(subscriptionBillingIssueListeners) {
|
|
1717
|
+
subscriptionBillingIssueListeners.add(listener)
|
|
1718
|
+
}
|
|
1719
|
+
attachSubscriptionBillingIssueIfNeeded()
|
|
1623
1720
|
}
|
|
1624
|
-
attachSubscriptionBillingIssueIfNeeded()
|
|
1625
1721
|
}
|
|
1626
1722
|
|
|
1627
1723
|
override fun removeSubscriptionBillingIssueListener(listener: (purchase: NitroPurchase) -> Unit) {
|
|
1628
|
-
synchronized(
|
|
1629
|
-
subscriptionBillingIssueListeners
|
|
1724
|
+
synchronized(subscriptionBillingIssueAttachLock) {
|
|
1725
|
+
synchronized(subscriptionBillingIssueListeners) {
|
|
1726
|
+
subscriptionBillingIssueListeners.remove(listener)
|
|
1727
|
+
}
|
|
1630
1728
|
}
|
|
1631
1729
|
}
|
|
1632
1730
|
|
|
@@ -1658,6 +1756,15 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1658
1756
|
}
|
|
1659
1757
|
}
|
|
1660
1758
|
|
|
1759
|
+
private fun clearSubscriptionBillingIssueListeners() {
|
|
1760
|
+
synchronized(subscriptionBillingIssueAttachLock) {
|
|
1761
|
+
synchronized(subscriptionBillingIssueListeners) {
|
|
1762
|
+
subscriptionBillingIssueListeners.clear()
|
|
1763
|
+
}
|
|
1764
|
+
detachSubscriptionBillingIssueIfNeeded()
|
|
1765
|
+
}
|
|
1766
|
+
}
|
|
1767
|
+
|
|
1661
1768
|
// -------------------------------------------------------------------------
|
|
1662
1769
|
// Billing Programs API (Android 8.2.0+)
|
|
1663
1770
|
// -------------------------------------------------------------------------
|
|
@@ -2048,6 +2155,13 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
2048
2155
|
?: OpenIapError.Companion.defaultMessage(code)
|
|
2049
2156
|
val diagnostics = error.toJSON()
|
|
2050
2157
|
val responseCode = (diagnostics["responseCode"] as? Number)?.toInt()
|
|
2158
|
+
val diagnosticProductId = productId
|
|
2159
|
+
?: diagnostics["productId"] as? String
|
|
2160
|
+
?: when (error) {
|
|
2161
|
+
is OpenIapError.ProductNotFound -> error.productId
|
|
2162
|
+
is OpenIapError.SkuNotFound -> error.sku
|
|
2163
|
+
else -> null
|
|
2164
|
+
}
|
|
2051
2165
|
val productIds = diagnostics["productIds"] as? List<*>
|
|
2052
2166
|
val productType = diagnostics["productType"] as? String
|
|
2053
2167
|
val isEmptyProductList = diagnostics["isEmptyProductList"] as? Boolean
|
|
@@ -2057,15 +2171,18 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
2057
2171
|
"message" to message
|
|
2058
2172
|
)
|
|
2059
2173
|
|
|
2060
|
-
errorMap["responseCode"] =
|
|
2174
|
+
responseCode?.let { errorMap["responseCode"] = it }
|
|
2061
2175
|
debugMessage
|
|
2062
2176
|
?.let { errorMap["debugMessage"] = it }
|
|
2063
2177
|
?: (diagnostics["debugMessage"] as? String)?.let { errorMap["debugMessage"] = it }
|
|
2064
2178
|
?: error.message?.let { errorMap["debugMessage"] = it }
|
|
2065
|
-
|
|
2179
|
+
diagnosticProductId?.let { errorMap["productId"] = it }
|
|
2066
2180
|
if (!productIds.isNullOrEmpty()) errorMap["productIds"] = productIds
|
|
2067
2181
|
productType?.let { errorMap["productType"] = it }
|
|
2068
2182
|
isEmptyProductList?.let { errorMap["isEmptyProductList"] = it }
|
|
2183
|
+
(diagnostics["subResponseCodeAndroid"] as? String)?.let {
|
|
2184
|
+
errorMap["subResponseCodeAndroid"] = it
|
|
2185
|
+
}
|
|
2069
2186
|
|
|
2070
2187
|
return try {
|
|
2071
2188
|
JSONObject(errorMap).toString()
|
|
@@ -2135,12 +2252,30 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
2135
2252
|
val diagnostics = error.toJSON()
|
|
2136
2253
|
val responseCode = (diagnostics["responseCode"] as? Number)?.toDouble()
|
|
2137
2254
|
val diagnosticMessage = diagnostics["debugMessage"] as? String
|
|
2255
|
+
val diagnosticProductId = productId
|
|
2256
|
+
?: diagnostics["productId"] as? String
|
|
2257
|
+
?: when (error) {
|
|
2258
|
+
is OpenIapError.ProductNotFound -> error.productId
|
|
2259
|
+
is OpenIapError.SkuNotFound -> error.sku
|
|
2260
|
+
else -> null
|
|
2261
|
+
}
|
|
2262
|
+
val productIds = (diagnostics["productIds"] as? Iterable<*>)
|
|
2263
|
+
?.filterIsInstance<String>()
|
|
2264
|
+
?.toTypedArray()
|
|
2265
|
+
val subResponseCode = (diagnostics["subResponseCodeAndroid"] as? String)?.let {
|
|
2266
|
+
runCatching { OpenIapSubResponseCodeAndroid.fromJson(it) }.getOrNull()
|
|
2267
|
+
}
|
|
2138
2268
|
return NitroPurchaseResult(
|
|
2139
2269
|
responseCode = responseCode ?: -1.0,
|
|
2140
2270
|
debugMessage = debugMessage ?: diagnosticMessage ?: error.message,
|
|
2141
2271
|
code = code,
|
|
2142
2272
|
message = message,
|
|
2143
|
-
purchaseToken = null
|
|
2273
|
+
purchaseToken = null,
|
|
2274
|
+
productId = diagnosticProductId,
|
|
2275
|
+
productIds = productIds,
|
|
2276
|
+
productType = diagnostics["productType"] as? String,
|
|
2277
|
+
isEmptyProductList = diagnostics["isEmptyProductList"] as? Boolean,
|
|
2278
|
+
subResponseCodeAndroid = mapSubResponseCode(subResponseCode)
|
|
2144
2279
|
)
|
|
2145
2280
|
}
|
|
2146
2281
|
}
|