react-native-iap 15.4.0-rc.3 → 15.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -25
- package/android/src/main/java/com/margelo/nitro/iap/ConnectionLifecycleQueue.kt +113 -0
- package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +471 -255
- package/android/src/main/java/com/margelo/nitro/iap/ProductSerialization.kt +98 -0
- package/android/src/main/java/com/margelo/nitro/iap/RnIapLog.kt +23 -1
- package/ios/HybridRnIap.swift +230 -140
- package/ios/RnIapHelper.swift +180 -28
- package/ios/RnIapLog.swift +24 -1
- package/lib/module/hooks/useIAP.js +20 -4
- package/lib/module/hooks/useIAP.js.map +1 -1
- package/lib/module/index.js +151 -46
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.kepler.js +3 -0
- package/lib/module/index.kepler.js.map +1 -1
- package/lib/module/types.js +77 -14
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/error.js +7 -3
- package/lib/module/utils/error.js.map +1 -1
- package/lib/module/utils/errorMapping.js +2 -0
- package/lib/module/utils/errorMapping.js.map +1 -1
- package/lib/module/utils/type-bridge.js +50 -22
- package/lib/module/utils/type-bridge.js.map +1 -1
- package/lib/module/vega-adapter.js +55 -8
- package/lib/module/vega-adapter.js.map +1 -1
- package/lib/typescript/src/hooks/useIAP.d.ts +28 -5
- package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +50 -10
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/index.kepler.d.ts +3 -0
- package/lib/typescript/src/index.kepler.d.ts.map +1 -1
- package/lib/typescript/src/specs/RnIap.nitro.d.ts +98 -26
- package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +279 -59
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/lib/typescript/src/utils/error.d.ts.map +1 -1
- package/lib/typescript/src/utils/errorMapping.d.ts +3 -1
- package/lib/typescript/src/utils/errorMapping.d.ts.map +1 -1
- package/lib/typescript/src/utils/type-bridge.d.ts.map +1 -1
- package/lib/typescript/src/vega-adapter.d.ts.map +1 -1
- package/nitro.json +8 -2
- package/nitrogen/generated/android/NitroIap+autolinking.cmake +4 -1
- package/nitrogen/generated/android/NitroIapOnLoad.cpp +2 -2
- package/nitrogen/generated/android/c++/JAdvancedCommerceInfoIOS.hpp +10 -10
- package/nitrogen/generated/android/c++/JAdvancedCommerceItemDetailsIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JAdvancedCommerceItemIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JAdvancedCommerceRefundIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JAlternativeBillingModeAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JAndroidSubscriptionOfferInput.hpp +2 -2
- package/nitrogen/generated/android/c++/JBillingChoiceImageLayoutAndroid.hpp +61 -0
- package/nitrogen/generated/android/c++/JBillingChoiceScreenTypeAndroid.hpp +61 -0
- package/nitrogen/generated/android/c++/JBillingProgramAndroid.hpp +5 -2
- package/nitrogen/generated/android/c++/JDeveloperBillingLaunchModeAndroid.hpp +61 -0
- package/nitrogen/generated/android/c++/JDeveloperBillingOptionParamsAndroid.hpp +78 -0
- package/nitrogen/generated/android/c++/JDeveloperBillingTypeAndroid.hpp +61 -0
- package/nitrogen/generated/android/c++/JDeveloperProvidedBillingDetailsAndroid.hpp +47 -7
- package/nitrogen/generated/android/c++/JDeveloperProvidedBillingProductAndroid.hpp +72 -0
- package/nitrogen/generated/android/c++/JExternalLinkLaunchModeAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalLinkTypeAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseCustomLinkNoticeResultIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseCustomLinkNoticeTypeIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseCustomLinkTokenResultIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseCustomLinkTokenTypeIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseLinkResultIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseNoticeAction.hpp +2 -2
- package/nitrogen/generated/android/c++/JExternalPurchaseNoticeResultIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_DeveloperProvidedBillingDetailsAndroid.hpp +12 -2
- package/nitrogen/generated/android/c++/JFunc_void_NitroProduct.hpp +2 -2
- package/nitrogen/generated/android/c++/JFunc_void_NitroPurchase.hpp +26 -2
- package/nitrogen/generated/android/c++/JFunc_void_NitroPurchaseResult.hpp +5 -2
- package/nitrogen/generated/android/c++/JFunc_void_UserChoiceBillingDetails.hpp +12 -2
- package/nitrogen/generated/android/c++/JHybridRnIapSpec.cpp +160 -48
- package/nitrogen/generated/android/c++/JHybridRnIapSpec.hpp +7 -4
- package/nitrogen/generated/android/c++/JIapPlatform.hpp +2 -2
- package/nitrogen/generated/android/c++/JIapStore.hpp +2 -2
- package/nitrogen/generated/android/c++/JIapkitPurchaseState.hpp +2 -2
- package/nitrogen/generated/android/c++/JInAppMessageCategoryAndroid.hpp +58 -0
- package/nitrogen/generated/android/c++/JInAppMessageResponseCodeAndroid.hpp +58 -0
- package/nitrogen/generated/android/c++/JInitConnectionConfig.hpp +9 -3
- package/nitrogen/generated/android/c++/JNitroActiveSubscription.hpp +7 -2
- package/nitrogen/generated/android/c++/JNitroAvailablePurchasesAndroidOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroAvailablePurchasesAndroidType.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroAvailablePurchasesIosOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroAvailablePurchasesOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroBillingChoiceInfoAndroid.hpp +66 -0
- package/nitrogen/generated/android/c++/JNitroBillingProgramAvailabilityResultAndroid.hpp +20 -5
- package/nitrogen/generated/android/c++/JNitroBillingProgramInformationDialogParamsAndroid.hpp +63 -0
- package/nitrogen/generated/android/c++/JNitroBillingProgramReportingDetailsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroBillingResultAndroid.hpp +72 -0
- package/nitrogen/generated/android/c++/JNitroDeepLinkOptionsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroDiscountAmountAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroDiscountDisplayInfoAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroFinishTransactionAndroidParams.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroFinishTransactionIosParams.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroFinishTransactionParams.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroGetBillingChoiceInfoParamsAndroid.hpp +74 -0
- package/nitrogen/generated/android/c++/JNitroInAppMessageParamsAndroid.hpp +64 -0
- package/nitrogen/generated/android/c++/JNitroInAppMessageResultAndroid.hpp +68 -0
- package/nitrogen/generated/android/c++/JNitroLaunchExternalLinkParamsAndroid.hpp +12 -3
- package/nitrogen/generated/android/c++/JNitroLimitedQuantityInfoAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroOneTimePurchaseOfferDetail.hpp +15 -11
- package/nitrogen/generated/android/c++/JNitroPreorderDetailsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroProduct.hpp +15 -3
- package/nitrogen/generated/android/c++/JNitroPurchase.hpp +53 -5
- package/nitrogen/generated/android/c++/JNitroPurchaseRequest.hpp +9 -2
- package/nitrogen/generated/android/c++/JNitroPurchaseResult.hpp +46 -5
- package/nitrogen/generated/android/c++/JNitroReceiptValidationAppleOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroReceiptValidationGoogleOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroReceiptValidationHorizonOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroReceiptValidationParams.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroReceiptValidationResultAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroReceiptValidationResultIOS.hpp +26 -2
- package/nitrogen/generated/android/c++/JNitroRenewalInfoIOS.hpp +16 -3
- package/nitrogen/generated/android/c++/JNitroRentalDetailsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroRequestPurchaseAndroid.hpp +26 -11
- package/nitrogen/generated/android/c++/JNitroRequestPurchaseIos.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroSubscriptionStatus.hpp +15 -9
- package/nitrogen/generated/android/c++/JNitroValidTimeWindowAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitAmazonProps.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitAppleProps.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitGoogleProps.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitProps.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithIapkitResult.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithProviderError.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithProviderProps.hpp +2 -2
- package/nitrogen/generated/android/c++/JNitroVerifyPurchaseWithProviderResult.hpp +2 -2
- package/nitrogen/generated/android/c++/JPaymentModeIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JPendingPurchaseUpdateAndroid.hpp +10 -10
- package/nitrogen/generated/android/c++/JProductType.hpp +58 -0
- package/nitrogen/generated/android/c++/JPromotionalOfferJwsInputIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JPurchase.hpp +3 -3
- package/nitrogen/generated/android/c++/JPurchaseAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JPurchaseIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JPurchaseOfferIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JPurchaseState.hpp +2 -2
- package/nitrogen/generated/android/c++/JPurchaseUpdatedListenerOptions.hpp +2 -2
- package/nitrogen/generated/android/c++/JPurchaseVerificationProvider.hpp +2 -2
- package/nitrogen/generated/android/c++/JRenewalCommitmentInfoIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JRenewalInfoIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JRequestPurchaseResult.cpp +4 -4
- package/nitrogen/generated/android/c++/JRequestPurchaseResult.hpp +9 -9
- package/nitrogen/generated/android/c++/JSubResponseCodeAndroid.hpp +61 -0
- package/nitrogen/generated/android/c++/JSubscriptionBillingPlanTypeIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JSubscriptionProductReplacementParamsAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JSubscriptionReplacementModeAndroid.hpp +2 -2
- package/nitrogen/generated/android/c++/JTransactionCommitmentInfoIOS.hpp +2 -2
- package/nitrogen/generated/android/c++/JUserChoiceBillingDetails.hpp +29 -11
- package/nitrogen/generated/android/c++/JVariant_Boolean_NitroPurchaseResult.hpp +6 -3
- package/nitrogen/generated/android/c++/JVariant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.hpp +27 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_AdvancedCommerceInfoIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_AdvancedCommerceItemDetailsIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_AdvancedCommerceRefundIOS_.cpp +4 -4
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_AdvancedCommerceRefundIOS_.hpp +7 -7
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_AndroidSubscriptionOfferInput_.cpp +4 -4
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_AndroidSubscriptionOfferInput_.hpp +7 -7
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_DeveloperProvidedBillingProductAndroid_.cpp +35 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_DeveloperProvidedBillingProductAndroid_.hpp +86 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_InAppMessageCategoryAndroid_.cpp +35 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_InAppMessageCategoryAndroid_.hpp +81 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_NitroOneTimePurchaseOfferDetail_.cpp +4 -4
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_NitroOneTimePurchaseOfferDetail_.hpp +7 -7
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_NitroSubscriptionStatus_.cpp +4 -4
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_NitroSubscriptionStatus_.hpp +16 -10
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_NitroVerifyPurchaseWithProviderError_.cpp +4 -4
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_NitroVerifyPurchaseWithProviderError_.hpp +7 -7
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_String_.cpp +4 -4
- package/nitrogen/generated/android/c++/JVariant_NullType_Array_String_.hpp +7 -7
- package/nitrogen/generated/android/c++/JVariant_NullType_Boolean.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_DeveloperBillingOptionParamsAndroid.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_DeveloperBillingOptionParamsAndroid.hpp +78 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_Double.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_InitConnectionConfig.hpp +5 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_Map_String__String_.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroAvailablePurchasesAndroidOptions.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroAvailablePurchasesIosOptions.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroDiscountAmountAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroDiscountDisplayInfoAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroFinishTransactionAndroidParams.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroFinishTransactionIosParams.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroInAppMessageParamsAndroid.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroInAppMessageParamsAndroid.hpp +76 -0
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroLimitedQuantityInfoAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroPreorderDetailsAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroProduct.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroPurchase.hpp +27 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroReceiptValidationAppleOptions.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroReceiptValidationGoogleOptions.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroReceiptValidationHorizonOptions.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroRenewalInfoIOS.hpp +8 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroRentalDetailsAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroRequestPurchaseAndroid.hpp +10 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroRequestPurchaseIos.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroValidTimeWindowAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroVerifyPurchaseWithIapkitAmazonProps.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroVerifyPurchaseWithIapkitAppleProps.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroVerifyPurchaseWithIapkitGoogleProps.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroVerifyPurchaseWithIapkitProps.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroVerifyPurchaseWithIapkitResult.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_PendingPurchaseUpdateAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_PromotionalOfferJwsInputIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_PurchaseOfferIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_RenewalCommitmentInfoIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_RenewalInfoIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_String.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_SubscriptionProductReplacementParamsAndroid.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_TransactionCommitmentInfoIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JVariant_NullType_WinBackOfferInputIOS.hpp +3 -3
- package/nitrogen/generated/android/c++/JWinBackOfferInputIOS.hpp +2 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/AdvancedCommerceInfoIOS.kt +27 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/AdvancedCommerceItemDetailsIOS.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/AdvancedCommerceItemIOS.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/AdvancedCommerceRefundIOS.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/AndroidSubscriptionOfferInput.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/BillingChoiceImageLayoutAndroid.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/BillingChoiceScreenTypeAndroid.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/BillingProgramAndroid.kt +2 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/DeveloperBillingLaunchModeAndroid.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/DeveloperBillingOptionParamsAndroid.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/DeveloperBillingTypeAndroid.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/DeveloperProvidedBillingDetailsAndroid.kt +32 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/DeveloperProvidedBillingProductAndroid.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/ExternalPurchaseCustomLinkNoticeResultIOS.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/ExternalPurchaseCustomLinkTokenResultIOS.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/ExternalPurchaseLinkResultIOS.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/ExternalPurchaseNoticeResultIOS.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/HybridRnIapSpec.kt +14 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/InAppMessageCategoryAndroid.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/InAppMessageResponseCodeAndroid.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/InitConnectionConfig.kt +22 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroActiveSubscription.kt +39 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAvailablePurchasesAndroidOptions.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAvailablePurchasesIosOptions.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAvailablePurchasesOptions.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroBillingChoiceInfoAndroid.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroBillingProgramAvailabilityResultAndroid.kt +29 -4
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroBillingProgramInformationDialogParamsAndroid.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroBillingProgramReportingDetailsAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroBillingResultAndroid.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroDeepLinkOptionsAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroDiscountAmountAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroDiscountDisplayInfoAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroFinishTransactionAndroidParams.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroFinishTransactionIosParams.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroFinishTransactionParams.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroGetBillingChoiceInfoParamsAndroid.kt +61 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroInAppMessageParamsAndroid.kt +51 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroInAppMessageResultAndroid.kt +56 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroLaunchExternalLinkParamsAndroid.kt +27 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroLimitedQuantityInfoAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroOneTimePurchaseOfferDetail.kt +42 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPreorderDetailsAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroProduct.kt +96 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchase.kt +128 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchaseRequest.kt +19 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchaseResult.kt +49 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationAppleOptions.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationGoogleOptions.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationHorizonOptions.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationParams.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationResultAndroid.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationResultIOS.kt +19 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroRenewalInfoIOS.kt +45 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroRentalDetailsAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroRequestPurchaseAndroid.kt +41 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroRequestPurchaseIos.kt +31 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroSubscriptionStatus.kt +19 -2
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroValidTimeWindowAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitAmazonProps.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitAppleProps.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitGoogleProps.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitProps.kt +19 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithIapkitResult.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithProviderError.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithProviderProps.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroVerifyPurchaseWithProviderResult.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PendingPurchaseUpdateAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/ProductType.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PromotionalOfferJwsInputIOS.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Purchase.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseAndroid.kt +55 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseIOS.kt +85 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseOfferIOS.kt +17 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/PurchaseUpdatedListenerOptions.kt +13 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/RenewalCommitmentInfoIOS.kt +21 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/RenewalInfoIOS.kt +37 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/RequestPurchaseResult.kt +20 -9
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/SubResponseCodeAndroid.kt +24 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/SubscriptionProductReplacementParamsAndroid.kt +15 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/TransactionCommitmentInfoIOS.kt +19 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/UserChoiceBillingDetails.kt +28 -3
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_Boolean_NitroPurchaseResult.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_AdvancedCommerceInfoIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_AdvancedCommerceItemDetailsIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_AdvancedCommerceRefundIOS_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_AndroidSubscriptionOfferInput_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_DeveloperProvidedBillingProductAndroid_.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_InAppMessageCategoryAndroid_.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_NitroOneTimePurchaseOfferDetail_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_NitroSubscriptionStatus_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_NitroVerifyPurchaseWithProviderError_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Array_String_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Boolean.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_DeveloperBillingOptionParamsAndroid.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Double.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_InitConnectionConfig.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_Map_String__String_.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroAvailablePurchasesAndroidOptions.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroAvailablePurchasesIosOptions.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroDiscountAmountAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroDiscountDisplayInfoAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroFinishTransactionAndroidParams.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroFinishTransactionIosParams.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroInAppMessageParamsAndroid.kt +62 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroLimitedQuantityInfoAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroPreorderDetailsAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroProduct.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroPurchase.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroReceiptValidationAppleOptions.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroReceiptValidationGoogleOptions.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroReceiptValidationHorizonOptions.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroRenewalInfoIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroRentalDetailsAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroRequestPurchaseAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroRequestPurchaseIos.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroValidTimeWindowAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroVerifyPurchaseWithIapkitAmazonProps.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroVerifyPurchaseWithIapkitAppleProps.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroVerifyPurchaseWithIapkitGoogleProps.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroVerifyPurchaseWithIapkitProps.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroVerifyPurchaseWithIapkitResult.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_PendingPurchaseUpdateAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_PromotionalOfferJwsInputIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_PurchaseOfferIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_RenewalCommitmentInfoIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_RenewalInfoIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_String.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_SubscriptionProductReplacementParamsAndroid.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_TransactionCommitmentInfoIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_WinBackOfferInputIOS.kt +16 -7
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/WinBackOfferInputIOS.kt +13 -0
- package/nitrogen/generated/ios/NitroIap+autolinking.rb +2 -0
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.cpp +24 -0
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.hpp +441 -47
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Umbrella.hpp +48 -3
- package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.hpp +75 -6
- package/nitrogen/generated/ios/swift/BillingChoiceImageLayoutAndroid.swift +44 -0
- package/nitrogen/generated/ios/swift/BillingChoiceScreenTypeAndroid.swift +44 -0
- package/nitrogen/generated/ios/swift/BillingProgramAndroid.swift +4 -0
- package/nitrogen/generated/ios/swift/DeveloperBillingLaunchModeAndroid.swift +44 -0
- package/nitrogen/generated/ios/swift/DeveloperBillingOptionParamsAndroid.swift +114 -0
- package/nitrogen/generated/ios/swift/DeveloperBillingTypeAndroid.swift +44 -0
- package/nitrogen/generated/ios/swift/DeveloperProvidedBillingDetailsAndroid.swift +121 -4
- package/nitrogen/generated/ios/swift/DeveloperProvidedBillingProductAndroid.swift +71 -0
- package/nitrogen/generated/ios/swift/Func_void_NitroBillingChoiceInfoAndroid.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_NitroBillingResultAndroid.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_NitroInAppMessageResultAndroid.swift +46 -0
- package/nitrogen/generated/ios/swift/HybridRnIapSpec.swift +5 -2
- package/nitrogen/generated/ios/swift/HybridRnIapSpec_cxx.swift +85 -9
- package/nitrogen/generated/ios/swift/InAppMessageCategoryAndroid.swift +40 -0
- package/nitrogen/generated/ios/swift/InAppMessageResponseCodeAndroid.swift +40 -0
- package/nitrogen/generated/ios/swift/InitConnectionConfig.swift +12 -1
- package/nitrogen/generated/ios/swift/NitroBillingChoiceInfoAndroid.swift +66 -0
- package/nitrogen/generated/ios/swift/NitroBillingProgramAvailabilityResultAndroid.swift +50 -2
- package/nitrogen/generated/ios/swift/NitroBillingProgramInformationDialogParamsAndroid.swift +34 -0
- package/nitrogen/generated/ios/swift/NitroBillingResultAndroid.swift +77 -0
- package/nitrogen/generated/ios/swift/NitroGetBillingChoiceInfoParamsAndroid.swift +71 -0
- package/nitrogen/generated/ios/swift/NitroInAppMessageParamsAndroid.swift +67 -0
- package/nitrogen/generated/ios/swift/NitroInAppMessageResultAndroid.swift +66 -0
- package/nitrogen/generated/ios/swift/NitroLaunchExternalLinkParamsAndroid.swift +39 -2
- package/nitrogen/generated/ios/swift/NitroOneTimePurchaseOfferDetail.swift +39 -2
- package/nitrogen/generated/ios/swift/NitroProduct.swift +113 -2
- package/nitrogen/generated/ios/swift/NitroPurchase.swift +204 -2
- package/nitrogen/generated/ios/swift/NitroPurchaseResult.swift +90 -1
- package/nitrogen/generated/ios/swift/NitroRenewalInfoIOS.swift +49 -1
- package/nitrogen/generated/ios/swift/NitroRequestPurchaseAndroid.swift +75 -1
- package/nitrogen/generated/ios/swift/NitroSubscriptionStatus.swift +11 -11
- package/nitrogen/generated/ios/swift/ProductType.swift +40 -0
- package/nitrogen/generated/ios/swift/Purchase.swift +12 -0
- package/nitrogen/generated/ios/swift/RequestPurchaseResult.swift +14 -0
- package/nitrogen/generated/ios/swift/SubResponseCodeAndroid.swift +44 -0
- package/nitrogen/generated/ios/swift/UserChoiceBillingDetails.swift +82 -2
- package/nitrogen/generated/ios/swift/Variant_Bool_NitroPurchaseResult.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_AdvancedCommerceInfoIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_AdvancedCommerceItemDetailsIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Bool.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_DeveloperBillingOptionParamsAndroid.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Dictionary_String__String_.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_Double.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_InitConnectionConfig.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroAvailablePurchasesAndroidOptions.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroAvailablePurchasesIosOptions.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroDiscountAmountAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroDiscountDisplayInfoAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroFinishTransactionAndroidParams.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroFinishTransactionIosParams.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroInAppMessageParamsAndroid.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroLimitedQuantityInfoAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroPreorderDetailsAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroProduct.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroPurchase.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroReceiptValidationAppleOptions.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroReceiptValidationGoogleOptions.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroReceiptValidationHorizonOptions.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroRenewalInfoIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroRentalDetailsAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroRequestPurchaseAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroRequestPurchaseIos.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroValidTimeWindowAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroVerifyPurchaseWithIapkitAmazonProps.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroVerifyPurchaseWithIapkitAppleProps.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroVerifyPurchaseWithIapkitGoogleProps.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroVerifyPurchaseWithIapkitProps.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroVerifyPurchaseWithIapkitResult.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_PendingPurchaseUpdateAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_PromotionalOfferJwsInputIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_PurchaseOfferIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_RenewalCommitmentInfoIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_RenewalInfoIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_String.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_SubscriptionProductReplacementParamsAndroid.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_TransactionCommitmentInfoIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType_WinBackOfferInputIOS.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__AdvancedCommerceRefundIOS_.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__AndroidSubscriptionOfferInput_.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__DeveloperProvidedBillingProductAndroid_.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__InAppMessageCategoryAndroid_.swift +30 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__NitroOneTimePurchaseOfferDetail_.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__NitroSubscriptionStatus_.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__NitroVerifyPurchaseWithProviderError_.swift +12 -0
- package/nitrogen/generated/ios/swift/Variant_NullType__String_.swift +12 -0
- package/nitrogen/generated/shared/c++/AdvancedCommerceInfoIOS.hpp +1 -1
- package/nitrogen/generated/shared/c++/AdvancedCommerceItemIOS.hpp +1 -1
- package/nitrogen/generated/shared/c++/BillingChoiceImageLayoutAndroid.hpp +80 -0
- package/nitrogen/generated/shared/c++/BillingChoiceScreenTypeAndroid.hpp +80 -0
- package/nitrogen/generated/shared/c++/BillingProgramAndroid.hpp +4 -0
- package/nitrogen/generated/shared/c++/DeveloperBillingLaunchModeAndroid.hpp +80 -0
- package/nitrogen/generated/shared/c++/DeveloperBillingOptionParamsAndroid.hpp +103 -0
- package/nitrogen/generated/shared/c++/DeveloperBillingTypeAndroid.hpp +80 -0
- package/nitrogen/generated/shared/c++/DeveloperProvidedBillingDetailsAndroid.hpp +25 -7
- package/nitrogen/generated/shared/c++/DeveloperProvidedBillingProductAndroid.hpp +96 -0
- package/nitrogen/generated/shared/c++/HybridRnIapSpec.cpp +3 -0
- package/nitrogen/generated/shared/c++/HybridRnIapSpec.hpp +26 -2
- package/nitrogen/generated/shared/c++/InAppMessageCategoryAndroid.hpp +76 -0
- package/nitrogen/generated/shared/c++/InAppMessageResponseCodeAndroid.hpp +76 -0
- package/nitrogen/generated/shared/c++/InitConnectionConfig.hpp +8 -1
- package/nitrogen/generated/shared/c++/NitroBillingChoiceInfoAndroid.hpp +90 -0
- package/nitrogen/generated/shared/c++/NitroBillingProgramAvailabilityResultAndroid.hpp +16 -2
- package/nitrogen/generated/shared/c++/NitroBillingProgramInformationDialogParamsAndroid.hpp +89 -0
- package/nitrogen/generated/shared/c++/NitroBillingResultAndroid.hpp +96 -0
- package/nitrogen/generated/shared/c++/NitroGetBillingChoiceInfoParamsAndroid.hpp +99 -0
- package/nitrogen/generated/shared/c++/NitroInAppMessageParamsAndroid.hpp +88 -0
- package/nitrogen/generated/shared/c++/NitroInAppMessageResultAndroid.hpp +92 -0
- package/nitrogen/generated/shared/c++/NitroLaunchExternalLinkParamsAndroid.hpp +9 -2
- package/nitrogen/generated/shared/c++/NitroOneTimePurchaseOfferDetail.hpp +6 -2
- package/nitrogen/generated/shared/c++/NitroProduct.hpp +14 -2
- package/nitrogen/generated/shared/c++/NitroPurchase.hpp +40 -3
- package/nitrogen/generated/shared/c++/NitroPurchaseRequest.hpp +1 -1
- package/nitrogen/generated/shared/c++/NitroPurchaseResult.hpp +27 -4
- package/nitrogen/generated/shared/c++/NitroReceiptValidationResultIOS.hpp +1 -1
- package/nitrogen/generated/shared/c++/NitroRenewalInfoIOS.hpp +15 -2
- package/nitrogen/generated/shared/c++/NitroRequestPurchaseAndroid.hpp +13 -2
- package/nitrogen/generated/shared/c++/NitroSubscriptionStatus.hpp +8 -8
- package/nitrogen/generated/shared/c++/NitroVerifyPurchaseWithProviderResult.hpp +1 -1
- package/nitrogen/generated/shared/c++/PendingPurchaseUpdateAndroid.hpp +1 -1
- package/nitrogen/generated/shared/c++/ProductType.hpp +76 -0
- package/nitrogen/generated/shared/c++/PurchaseAndroid.hpp +1 -1
- package/nitrogen/generated/shared/c++/PurchaseIOS.hpp +1 -1
- package/nitrogen/generated/shared/c++/SubResponseCodeAndroid.hpp +80 -0
- package/nitrogen/generated/shared/c++/UserChoiceBillingDetails.hpp +16 -3
- package/openiap-versions.json +3 -3
- package/package.json +8 -5
- package/src/hooks/useIAP.ts +70 -4
- package/src/index.kepler.ts +9 -0
- package/src/index.ts +268 -120
- package/src/specs/RnIap.nitro.ts +141 -27
- package/src/types.ts +294 -59
- package/src/utils/error.ts +11 -8
- package/src/utils/errorMapping.ts +9 -1
- package/src/utils/type-bridge.ts +63 -42
- package/src/vega-adapter.ts +112 -15
- package/nitrogen/generated/android/c++/JNitroSubscriptionRenewalInfo.hpp +0 -83
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroSubscriptionRenewalInfo.cpp +0 -26
- package/nitrogen/generated/android/c++/JVariant_NullType_NitroSubscriptionRenewalInfo.hpp +0 -75
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroSubscriptionRenewalInfo.kt +0 -53
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NullType_NitroSubscriptionRenewalInfo.kt +0 -53
- package/nitrogen/generated/ios/swift/NitroSubscriptionRenewalInfo.swift +0 -182
- package/nitrogen/generated/ios/swift/Variant_NullType_NitroSubscriptionRenewalInfo.swift +0 -18
- package/nitrogen/generated/shared/c++/NitroSubscriptionRenewalInfo.hpp +0 -106
|
@@ -18,7 +18,7 @@ import dev.hyo.openiap.ProductRequest
|
|
|
18
18
|
import dev.hyo.openiap.ProductSubscriptionAndroid
|
|
19
19
|
import dev.hyo.openiap.ProductSubscriptionAndroidOfferDetails
|
|
20
20
|
import dev.hyo.openiap.ProductCommon
|
|
21
|
-
import dev.hyo.openiap.ProductType
|
|
21
|
+
import dev.hyo.openiap.ProductType as OpenIapProductType
|
|
22
22
|
import dev.hyo.openiap.Purchase as OpenIapPurchase
|
|
23
23
|
import dev.hyo.openiap.PurchaseAndroid
|
|
24
24
|
import dev.hyo.openiap.RequestPurchaseAndroidProps
|
|
@@ -28,6 +28,7 @@ import dev.hyo.openiap.RequestPurchaseResultPurchase
|
|
|
28
28
|
import dev.hyo.openiap.RequestPurchaseResultPurchases
|
|
29
29
|
import dev.hyo.openiap.RequestSubscriptionAndroidProps
|
|
30
30
|
import dev.hyo.openiap.RequestSubscriptionPropsByPlatforms
|
|
31
|
+
import dev.hyo.openiap.SubResponseCodeAndroid as OpenIapSubResponseCodeAndroid
|
|
31
32
|
import dev.hyo.openiap.SubscriptionProductReplacementParamsAndroid as OpenIapSubscriptionProductReplacementParams
|
|
32
33
|
import dev.hyo.openiap.SubscriptionReplacementModeAndroid as OpenIapSubscriptionReplacementMode
|
|
33
34
|
import dev.hyo.openiap.VerifyPurchaseGoogleOptions
|
|
@@ -37,7 +38,17 @@ import dev.hyo.openiap.InitConnectionConfig as OpenIapInitConnectionConfig
|
|
|
37
38
|
import dev.hyo.openiap.listener.OpenIapPurchaseErrorListener
|
|
38
39
|
import dev.hyo.openiap.listener.OpenIapPurchaseUpdateListener
|
|
39
40
|
import dev.hyo.openiap.listener.OpenIapUserChoiceBillingListener
|
|
41
|
+
import dev.hyo.openiap.BillingChoiceImageLayoutAndroid as OpenIapBillingChoiceImageLayout
|
|
42
|
+
import dev.hyo.openiap.BillingChoiceScreenTypeAndroid as OpenIapBillingChoiceScreenType
|
|
43
|
+
import dev.hyo.openiap.BillingProgramInformationDialogParamsAndroid as OpenIapBillingProgramInformationDialogParams
|
|
40
44
|
import dev.hyo.openiap.BillingProgramAndroid as OpenIapBillingProgramAndroid
|
|
45
|
+
import dev.hyo.openiap.DeveloperBillingTypeAndroid as OpenIapDeveloperBillingType
|
|
46
|
+
import dev.hyo.openiap.DeveloperBillingLaunchModeAndroid as OpenIapDeveloperBillingLaunchMode
|
|
47
|
+
import dev.hyo.openiap.DeveloperBillingOptionParamsAndroid as OpenIapDeveloperBillingOptionParams
|
|
48
|
+
import dev.hyo.openiap.GetBillingChoiceInfoParamsAndroid as OpenIapGetBillingChoiceInfoParams
|
|
49
|
+
import dev.hyo.openiap.InAppMessageCategoryAndroid as OpenIapInAppMessageCategory
|
|
50
|
+
import dev.hyo.openiap.InAppMessageParamsAndroid as OpenIapInAppMessageParams
|
|
51
|
+
import dev.hyo.openiap.InAppMessageResponseCodeAndroid as OpenIapInAppMessageResponseCode
|
|
41
52
|
import dev.hyo.openiap.LaunchExternalLinkParamsAndroid as OpenIapLaunchExternalLinkParams
|
|
42
53
|
import dev.hyo.openiap.ExternalLinkLaunchModeAndroid as OpenIapExternalLinkLaunchMode
|
|
43
54
|
import dev.hyo.openiap.ExternalLinkTypeAndroid as OpenIapExternalLinkType
|
|
@@ -47,7 +58,6 @@ import java.util.Locale
|
|
|
47
58
|
import kotlin.coroutines.cancellation.CancellationException
|
|
48
59
|
import kotlinx.coroutines.Dispatchers
|
|
49
60
|
import kotlinx.coroutines.withContext
|
|
50
|
-
import kotlinx.coroutines.CompletableDeferred
|
|
51
61
|
import org.json.JSONArray
|
|
52
62
|
import org.json.JSONObject
|
|
53
63
|
|
|
@@ -55,7 +65,7 @@ import org.json.JSONObject
|
|
|
55
65
|
* Custom exception for OpenIAP errors that only includes the error JSON without stack traces.
|
|
56
66
|
* This ensures clean error messages are passed to JavaScript without Java/Kotlin stack traces.
|
|
57
67
|
*/
|
|
58
|
-
class OpenIapException(private val errorJson: String) : Exception() {
|
|
68
|
+
class OpenIapException(private val errorJson: String, cause: Throwable? = null) : Exception(cause) {
|
|
59
69
|
override val message: String
|
|
60
70
|
get() = errorJson
|
|
61
71
|
|
|
@@ -67,6 +77,15 @@ class OpenIapException(private val errorJson: String) : Exception() {
|
|
|
67
77
|
}
|
|
68
78
|
}
|
|
69
79
|
|
|
80
|
+
internal suspend fun endRnConnectionWithCleanup(
|
|
81
|
+
endConnection: suspend () -> Boolean,
|
|
82
|
+
cleanup: () -> Unit,
|
|
83
|
+
): Boolean = try {
|
|
84
|
+
endConnection()
|
|
85
|
+
} finally {
|
|
86
|
+
cleanup()
|
|
87
|
+
}
|
|
88
|
+
|
|
70
89
|
class HybridRnIap : HybridRnIapSpec() {
|
|
71
90
|
private data class PurchaseUpdatedListenerRegistration(
|
|
72
91
|
val token: Double,
|
|
@@ -92,14 +111,24 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
92
111
|
private val subscriptionBillingIssueListeners = mutableListOf<(NitroPurchase) -> Unit>()
|
|
93
112
|
private var listenersAttached = false
|
|
94
113
|
private var isInitialized = false
|
|
95
|
-
private
|
|
96
|
-
private val initLock = Any()
|
|
114
|
+
private val connectionLifecycleQueue = ConnectionLifecycleQueue()
|
|
97
115
|
|
|
98
116
|
// Connection methods
|
|
99
117
|
// Variant wrapper helpers for nitrogen 0.35.0 compatibility
|
|
100
118
|
private fun String?.wrapVariant(): Variant_NullType_String? = this?.let { Variant_NullType_String.Second(it) }
|
|
101
119
|
private fun Double?.wrapVariant(): Variant_NullType_Double? = this?.let { Variant_NullType_Double.Second(it) }
|
|
102
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
|
+
}
|
|
103
132
|
private fun Variant_NullType_String?.unwrapString(): String? = (this as? Variant_NullType_String.Second)?.value
|
|
104
133
|
private fun Variant_NullType_Double?.unwrapDouble(): Double? = (this as? Variant_NullType_Double.Second)?.value
|
|
105
134
|
private fun Variant_NullType_Boolean?.unwrapBool(): Boolean? = (this as? Variant_NullType_Boolean.Second)?.value
|
|
@@ -109,14 +138,10 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
109
138
|
}
|
|
110
139
|
|
|
111
140
|
override fun initConnection(config: Variant_NullType_InitConnectionConfig?): Promise<Boolean> {
|
|
112
|
-
|
|
113
|
-
|
|
141
|
+
val configValue = (config as? Variant_NullType_InitConnectionConfig.Second)?.value
|
|
142
|
+
val performInit: suspend () -> Boolean = initOperation@{
|
|
114
143
|
RnIapLog.payload("initConnection", configValue)
|
|
115
|
-
|
|
116
|
-
if (isInitialized) {
|
|
117
|
-
RnIapLog.result("initConnection", true)
|
|
118
|
-
return@async true
|
|
119
|
-
}
|
|
144
|
+
if (isInitialized) return@initOperation true
|
|
120
145
|
|
|
121
146
|
// CRITICAL: Set Activity BEFORE calling initConnection
|
|
122
147
|
// Horizon SDK needs Activity to initialize OVRPlatform with proper returnComponent
|
|
@@ -151,28 +176,14 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
151
176
|
)
|
|
152
177
|
}
|
|
153
178
|
|
|
154
|
-
// Single-flight: capture or create the shared Deferred atomically
|
|
155
|
-
val wasExisting = synchronized(initLock) {
|
|
156
|
-
if (initDeferred == null) {
|
|
157
|
-
initDeferred = CompletableDeferred()
|
|
158
|
-
false
|
|
159
|
-
} else true
|
|
160
|
-
}
|
|
161
|
-
if (wasExisting) {
|
|
162
|
-
val result = initDeferred!!.await()
|
|
163
|
-
RnIapLog.result("initConnection.await", result)
|
|
164
|
-
return@async result
|
|
165
|
-
}
|
|
166
|
-
|
|
167
179
|
try {
|
|
168
180
|
if (!listenersAttached) {
|
|
169
|
-
listenersAttached = true
|
|
170
181
|
RnIapLog.payload("listeners.attach", null)
|
|
171
182
|
openIap.addPurchaseUpdateListener(OpenIapPurchaseUpdateListener { p ->
|
|
172
183
|
runCatching {
|
|
173
184
|
RnIapLog.result(
|
|
174
185
|
"purchaseUpdatedListener",
|
|
175
|
-
mapOf("
|
|
186
|
+
mapOf("productId" to p.productId)
|
|
176
187
|
)
|
|
177
188
|
sendPurchaseUpdate(convertToNitroPurchase(p))
|
|
178
189
|
}.onFailure { RnIapLog.failure("purchaseUpdatedListener", it) }
|
|
@@ -194,26 +205,61 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
194
205
|
"userChoiceBillingListener",
|
|
195
206
|
mapOf("products" to details.products, "token" to details.externalTransactionToken)
|
|
196
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()
|
|
197
217
|
val nitroDetails = UserChoiceBillingDetails(
|
|
198
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
|
+
},
|
|
199
232
|
products = details.products.toTypedArray()
|
|
200
233
|
)
|
|
201
234
|
sendUserChoiceBilling(nitroDetails)
|
|
202
235
|
}.onFailure { RnIapLog.failure("userChoiceBillingListener", it) }
|
|
203
236
|
})
|
|
204
|
-
// Developer Provided Billing listener (External Payments
|
|
237
|
+
// Developer Provided Billing listener (External Payments 8.3.0+, Billing Choice 9.1.0+)
|
|
205
238
|
openIap.addDeveloperProvidedBillingListener(OpenIapDeveloperProvidedBillingListener { details ->
|
|
206
239
|
runCatching {
|
|
207
240
|
RnIapLog.result(
|
|
208
241
|
"developerProvidedBillingListener",
|
|
209
|
-
mapOf("
|
|
242
|
+
mapOf("productCount" to details.products.size)
|
|
210
243
|
)
|
|
211
244
|
val nitroDetails = DeveloperProvidedBillingDetailsAndroid(
|
|
212
|
-
externalTransactionToken = details.externalTransactionToken
|
|
245
|
+
externalTransactionToken = details.externalTransactionToken.wrapVariant(),
|
|
246
|
+
linkUri = details.linkUri.wrapVariant(),
|
|
247
|
+
originalExternalTransactionId = details.originalExternalTransactionId.wrapVariant(),
|
|
248
|
+
products = details.products.map { product ->
|
|
249
|
+
DeveloperProvidedBillingProductAndroid(
|
|
250
|
+
id = product.id,
|
|
251
|
+
offerToken = product.offerToken.wrapVariant(),
|
|
252
|
+
type = when (product.type) {
|
|
253
|
+
OpenIapProductType.InApp -> ProductType.IN_APP
|
|
254
|
+
OpenIapProductType.Subs -> ProductType.SUBS
|
|
255
|
+
}
|
|
256
|
+
)
|
|
257
|
+
}.toTypedArray()
|
|
213
258
|
)
|
|
214
259
|
sendDeveloperProvidedBilling(nitroDetails)
|
|
215
260
|
}.onFailure { RnIapLog.failure("developerProvidedBillingListener", it) }
|
|
216
261
|
})
|
|
262
|
+
listenersAttached = true
|
|
217
263
|
RnIapLog.result("listeners.attach", "attached")
|
|
218
264
|
}
|
|
219
265
|
} catch (err: CancellationException) {
|
|
@@ -230,18 +276,10 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
230
276
|
messageOverride = "Failed to register billing listeners: $errorMessage"
|
|
231
277
|
)
|
|
232
278
|
)
|
|
233
|
-
synchronized(initLock) {
|
|
234
|
-
initDeferred?.let { deferred ->
|
|
235
|
-
if (!deferred.isCompleted) deferred.completeExceptionally(wrapped)
|
|
236
|
-
}
|
|
237
|
-
initDeferred = null
|
|
238
|
-
}
|
|
239
279
|
isInitialized = false
|
|
240
280
|
throw wrapped
|
|
241
281
|
}
|
|
242
282
|
|
|
243
|
-
// We created it above; reuse the shared instance
|
|
244
|
-
val deferred = initDeferred!!
|
|
245
283
|
try {
|
|
246
284
|
// Convert Nitro config to OpenIAP config
|
|
247
285
|
// Note: enableBillingProgramAndroid is passed to OpenIapInitConnectionConfig
|
|
@@ -255,6 +293,9 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
255
293
|
},
|
|
256
294
|
enableBillingProgramAndroid = configValue.enableBillingProgramAndroid?.let { program ->
|
|
257
295
|
mapBillingProgram(program)
|
|
296
|
+
},
|
|
297
|
+
billingChoiceScreenTypeAndroid = configValue.billingChoiceScreenTypeAndroid?.let { type ->
|
|
298
|
+
mapBillingChoiceScreenTypeToOpenIap(type)
|
|
258
299
|
}
|
|
259
300
|
)
|
|
260
301
|
}
|
|
@@ -263,6 +304,8 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
263
304
|
withContext(Dispatchers.Main) {
|
|
264
305
|
openIap.initConnection(openIapConfig)
|
|
265
306
|
}
|
|
307
|
+
} catch (err: CancellationException) {
|
|
308
|
+
throw err
|
|
266
309
|
} catch (err: Throwable) {
|
|
267
310
|
val error = OpenIapError.InitConnection
|
|
268
311
|
RnIapLog.failure("initConnection.native", err)
|
|
@@ -284,42 +327,57 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
284
327
|
)
|
|
285
328
|
)
|
|
286
329
|
}
|
|
287
|
-
isInitialized = true
|
|
288
|
-
deferred.complete(true)
|
|
289
|
-
RnIapLog.result("initConnection", true)
|
|
290
330
|
true
|
|
291
331
|
} catch (e: Exception) {
|
|
292
|
-
// Complete exceptionally so all concurrent awaiters receive the same failure
|
|
293
|
-
if (!deferred.isCompleted) deferred.completeExceptionally(e)
|
|
294
|
-
isInitialized = false
|
|
295
332
|
RnIapLog.failure("initConnection", e)
|
|
296
333
|
throw e
|
|
297
|
-
} finally {
|
|
298
|
-
initDeferred = null
|
|
299
334
|
}
|
|
300
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
|
+
}
|
|
301
347
|
}
|
|
302
348
|
|
|
303
349
|
override fun endConnection(): Promise<Boolean> {
|
|
304
|
-
|
|
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) {
|
|
305
358
|
RnIapLog.payload("endConnection", null)
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
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()
|
|
323
381
|
}
|
|
324
382
|
}
|
|
325
383
|
|
|
@@ -478,6 +536,11 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
478
536
|
}
|
|
479
537
|
?: emptyList()
|
|
480
538
|
val normalizedOffers = subscriptionOffers.takeIf { it.isNotEmpty() }
|
|
539
|
+
val developerBillingOption =
|
|
540
|
+
(androidRequest.developerBillingOption as?
|
|
541
|
+
Variant_NullType_DeveloperBillingOptionParamsAndroid.Second)
|
|
542
|
+
?.value
|
|
543
|
+
?.let(::mapDeveloperBillingOption)
|
|
481
544
|
|
|
482
545
|
val requestProps = when (queryType) {
|
|
483
546
|
ProductQueryType.Subs -> {
|
|
@@ -495,6 +558,8 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
495
558
|
isOfferPersonalized = androidRequest.isOfferPersonalized.unwrapBool(),
|
|
496
559
|
obfuscatedAccountId = androidRequest.obfuscatedAccountId.unwrapString(),
|
|
497
560
|
obfuscatedProfileId = androidRequest.obfuscatedProfileId.unwrapString(),
|
|
561
|
+
developerBillingOption = developerBillingOption,
|
|
562
|
+
originalExternalTransactionId = androidRequest.originalExternalTransactionId.unwrapString(),
|
|
498
563
|
purchaseToken = androidRequest.purchaseToken.unwrapString(),
|
|
499
564
|
replacementMode = replacementMode,
|
|
500
565
|
skus = androidRequest.skus.toList(),
|
|
@@ -503,7 +568,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
503
568
|
)
|
|
504
569
|
RequestPurchaseProps(
|
|
505
570
|
request = RequestPurchaseProps.Request.Subscription(
|
|
506
|
-
RequestSubscriptionPropsByPlatforms(
|
|
571
|
+
RequestSubscriptionPropsByPlatforms(google = androidProps)
|
|
507
572
|
),
|
|
508
573
|
type = ProductQueryType.Subs
|
|
509
574
|
)
|
|
@@ -513,12 +578,13 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
513
578
|
isOfferPersonalized = androidRequest.isOfferPersonalized.unwrapBool(),
|
|
514
579
|
obfuscatedAccountId = androidRequest.obfuscatedAccountId.unwrapString(),
|
|
515
580
|
obfuscatedProfileId = androidRequest.obfuscatedProfileId.unwrapString(),
|
|
581
|
+
developerBillingOption = developerBillingOption,
|
|
516
582
|
offerToken = androidRequest.offerToken.unwrapString(),
|
|
517
583
|
skus = androidRequest.skus.toList()
|
|
518
584
|
)
|
|
519
585
|
RequestPurchaseProps(
|
|
520
586
|
request = RequestPurchaseProps.Request.Purchase(
|
|
521
|
-
RequestPurchasePropsByPlatforms(
|
|
587
|
+
RequestPurchasePropsByPlatforms(google = androidProps)
|
|
522
588
|
),
|
|
523
589
|
type = ProductQueryType.InApp
|
|
524
590
|
)
|
|
@@ -538,14 +604,13 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
538
604
|
openIap.requestPurchase(requestProps)
|
|
539
605
|
}
|
|
540
606
|
val purchases = result.purchasesOrEmpty()
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
}
|
|
607
|
+
RnIapLog.result(
|
|
608
|
+
"requestPurchase.native",
|
|
609
|
+
mapOf(
|
|
610
|
+
"purchaseCount" to purchases.size,
|
|
611
|
+
"productIds" to purchases.map { it.productId }
|
|
612
|
+
)
|
|
613
|
+
)
|
|
549
614
|
|
|
550
615
|
defaultResult
|
|
551
616
|
} catch (e: Exception) {
|
|
@@ -605,7 +670,10 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
605
670
|
}
|
|
606
671
|
RnIapLog.result(
|
|
607
672
|
"getAvailablePurchases",
|
|
608
|
-
|
|
673
|
+
mapOf(
|
|
674
|
+
"purchaseCount" to result.size,
|
|
675
|
+
"productIds" to result.map { it.productId }
|
|
676
|
+
)
|
|
609
677
|
)
|
|
610
678
|
result.map { convertToNitroPurchase(it) }.toTypedArray()
|
|
611
679
|
}
|
|
@@ -718,7 +786,12 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
718
786
|
debugMessage = "Missing purchaseToken",
|
|
719
787
|
code = OpenIapError.toCode(OpenIapError.DeveloperError()),
|
|
720
788
|
message = "Missing purchaseToken",
|
|
721
|
-
purchaseToken = null
|
|
789
|
+
purchaseToken = null,
|
|
790
|
+
productId = null,
|
|
791
|
+
productIds = null,
|
|
792
|
+
productType = null,
|
|
793
|
+
isEmptyProductList = null,
|
|
794
|
+
subResponseCodeAndroid = null
|
|
722
795
|
)
|
|
723
796
|
)
|
|
724
797
|
}
|
|
@@ -734,7 +807,12 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
734
807
|
debugMessage = e.message,
|
|
735
808
|
code = OpenIapError.toCode(err),
|
|
736
809
|
message = e.message?.takeIf { it.isNotBlank() } ?: err.message,
|
|
737
|
-
purchaseToken = purchaseToken
|
|
810
|
+
purchaseToken = purchaseToken,
|
|
811
|
+
productId = null,
|
|
812
|
+
productIds = null,
|
|
813
|
+
productType = null,
|
|
814
|
+
isEmptyProductList = null,
|
|
815
|
+
subResponseCodeAndroid = null
|
|
738
816
|
)
|
|
739
817
|
)
|
|
740
818
|
}
|
|
@@ -751,7 +829,12 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
751
829
|
debugMessage = null,
|
|
752
830
|
code = "0",
|
|
753
831
|
message = "OK",
|
|
754
|
-
purchaseToken = purchaseToken
|
|
832
|
+
purchaseToken = purchaseToken,
|
|
833
|
+
productId = null,
|
|
834
|
+
productIds = null,
|
|
835
|
+
productType = null,
|
|
836
|
+
isEmptyProductList = null,
|
|
837
|
+
subResponseCodeAndroid = null
|
|
755
838
|
)
|
|
756
839
|
)
|
|
757
840
|
RnIapLog.result("finishTransaction", mapOf("success" to true))
|
|
@@ -765,7 +848,12 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
765
848
|
debugMessage = e.message,
|
|
766
849
|
code = OpenIapError.toCode(err),
|
|
767
850
|
message = e.message?.takeIf { it.isNotBlank() } ?: err.message,
|
|
768
|
-
purchaseToken = null
|
|
851
|
+
purchaseToken = null,
|
|
852
|
+
productId = null,
|
|
853
|
+
productIds = null,
|
|
854
|
+
productType = null,
|
|
855
|
+
isEmptyProductList = null,
|
|
856
|
+
subResponseCodeAndroid = null
|
|
769
857
|
)
|
|
770
858
|
)
|
|
771
859
|
}
|
|
@@ -778,11 +866,30 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
778
866
|
ensureConnection()
|
|
779
867
|
RnIapLog.payload("getStorefront", null)
|
|
780
868
|
val value = openIap.getStorefront()
|
|
869
|
+
if (value.isBlank()) {
|
|
870
|
+
throw OpenIapError.ServiceUnavailable(
|
|
871
|
+
"Storefront lookup returned no country code"
|
|
872
|
+
)
|
|
873
|
+
}
|
|
781
874
|
RnIapLog.result("getStorefront", value)
|
|
782
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))
|
|
783
882
|
} catch (e: Exception) {
|
|
784
883
|
RnIapLog.failure("getStorefront", e)
|
|
785
|
-
|
|
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
|
+
)
|
|
786
893
|
}
|
|
787
894
|
}
|
|
788
895
|
}
|
|
@@ -879,7 +986,12 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
879
986
|
debugMessage = debugMessage,
|
|
880
987
|
code = errorCode,
|
|
881
988
|
message = message,
|
|
882
|
-
purchaseToken = null
|
|
989
|
+
purchaseToken = null,
|
|
990
|
+
productId = sku,
|
|
991
|
+
productIds = null,
|
|
992
|
+
productType = null,
|
|
993
|
+
isEmptyProductList = null,
|
|
994
|
+
subResponseCodeAndroid = null
|
|
883
995
|
)
|
|
884
996
|
}
|
|
885
997
|
|
|
@@ -924,111 +1036,21 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
924
1036
|
}
|
|
925
1037
|
|
|
926
1038
|
private fun serializeSubscriptionOffers(offers: List<ProductSubscriptionAndroidOfferDetails>): String {
|
|
927
|
-
|
|
928
|
-
offers.forEach { offer ->
|
|
929
|
-
val offerJson = JSONObject()
|
|
930
|
-
offerJson.put("basePlanId", offer.basePlanId)
|
|
931
|
-
offerJson.put("offerId", offer.offerId)
|
|
932
|
-
offerJson.put("offerTags", JSONArray(offer.offerTags))
|
|
933
|
-
offerJson.put("offerToken", offer.offerToken)
|
|
934
|
-
|
|
935
|
-
val phasesArray = JSONArray()
|
|
936
|
-
offer.pricingPhases.pricingPhaseList.forEach { phase ->
|
|
937
|
-
val phaseJson = JSONObject()
|
|
938
|
-
phaseJson.put("billingCycleCount", phase.billingCycleCount)
|
|
939
|
-
phaseJson.put("billingPeriod", phase.billingPeriod)
|
|
940
|
-
phaseJson.put("formattedPrice", phase.formattedPrice)
|
|
941
|
-
phaseJson.put("priceAmountMicros", phase.priceAmountMicros)
|
|
942
|
-
phaseJson.put("priceCurrencyCode", phase.priceCurrencyCode)
|
|
943
|
-
phaseJson.put("recurrenceMode", phase.recurrenceMode)
|
|
944
|
-
phasesArray.put(phaseJson)
|
|
945
|
-
}
|
|
946
|
-
|
|
947
|
-
val pricingPhasesJson = JSONObject()
|
|
948
|
-
pricingPhasesJson.put("pricingPhaseList", phasesArray)
|
|
949
|
-
offerJson.put("pricingPhases", pricingPhasesJson)
|
|
950
|
-
|
|
951
|
-
array.put(offerJson)
|
|
952
|
-
}
|
|
953
|
-
return array.toString()
|
|
1039
|
+
return JSONArray(legacySubscriptionOfferMaps(offers)).toString()
|
|
954
1040
|
}
|
|
955
1041
|
|
|
956
1042
|
/**
|
|
957
1043
|
* Serialize standardized SubscriptionOffer list to JSON string (OpenIAP 1.3.10+)
|
|
958
1044
|
*/
|
|
959
1045
|
private fun serializeStandardizedSubscriptionOffers(offers: List<dev.hyo.openiap.SubscriptionOffer>): String {
|
|
960
|
-
|
|
961
|
-
offers.forEach { offer ->
|
|
962
|
-
val offerJson = JSONObject()
|
|
963
|
-
offerJson.put("id", offer.id)
|
|
964
|
-
offerJson.put("displayPrice", offer.displayPrice)
|
|
965
|
-
offerJson.put("price", offer.price)
|
|
966
|
-
offerJson.put("type", offer.type.rawValue)
|
|
967
|
-
offer.currency?.let { offerJson.put("currency", it) }
|
|
968
|
-
offer.basePlanIdAndroid?.let { offerJson.put("basePlanIdAndroid", it) }
|
|
969
|
-
offer.offerTokenAndroid?.let { offerJson.put("offerTokenAndroid", it) }
|
|
970
|
-
offer.offerTagsAndroid?.let { offerJson.put("offerTagsAndroid", JSONArray(it)) }
|
|
971
|
-
offer.paymentMode?.let { offerJson.put("paymentMode", it.rawValue) }
|
|
972
|
-
offer.periodCount?.let { offerJson.put("periodCount", it) }
|
|
973
|
-
offer.numberOfPeriodsIOS?.let { offerJson.put("numberOfPeriodsIOS", it) }
|
|
974
|
-
offer.period?.let { period ->
|
|
975
|
-
val periodJson = JSONObject()
|
|
976
|
-
periodJson.put("unit", period.unit.rawValue)
|
|
977
|
-
periodJson.put("value", period.value)
|
|
978
|
-
offerJson.put("period", periodJson)
|
|
979
|
-
}
|
|
980
|
-
offer.pricingPhasesAndroid?.let { phases ->
|
|
981
|
-
val phasesJson = JSONObject()
|
|
982
|
-
val phaseList = JSONArray()
|
|
983
|
-
phases.pricingPhaseList.forEach { phase ->
|
|
984
|
-
val phaseJson = JSONObject()
|
|
985
|
-
phaseJson.put("billingCycleCount", phase.billingCycleCount)
|
|
986
|
-
phaseJson.put("billingPeriod", phase.billingPeriod)
|
|
987
|
-
phaseJson.put("formattedPrice", phase.formattedPrice)
|
|
988
|
-
phaseJson.put("priceAmountMicros", phase.priceAmountMicros)
|
|
989
|
-
phaseJson.put("priceCurrencyCode", phase.priceCurrencyCode)
|
|
990
|
-
phaseJson.put("recurrenceMode", phase.recurrenceMode)
|
|
991
|
-
phaseList.put(phaseJson)
|
|
992
|
-
}
|
|
993
|
-
phasesJson.put("pricingPhaseList", phaseList)
|
|
994
|
-
offerJson.put("pricingPhasesAndroid", phasesJson)
|
|
995
|
-
}
|
|
996
|
-
array.put(offerJson)
|
|
997
|
-
}
|
|
998
|
-
return array.toString()
|
|
1046
|
+
return JSONArray(subscriptionOfferMaps(offers)).toString()
|
|
999
1047
|
}
|
|
1000
1048
|
|
|
1001
1049
|
/**
|
|
1002
1050
|
* Serialize standardized DiscountOffer list to JSON string (OpenIAP 1.3.10+)
|
|
1003
1051
|
*/
|
|
1004
1052
|
private fun serializeStandardizedDiscountOffers(offers: List<dev.hyo.openiap.DiscountOffer>): String {
|
|
1005
|
-
|
|
1006
|
-
offers.forEach { offer ->
|
|
1007
|
-
val offerJson = JSONObject()
|
|
1008
|
-
offerJson.put("currency", offer.currency)
|
|
1009
|
-
offerJson.put("displayPrice", offer.displayPrice)
|
|
1010
|
-
offerJson.put("price", offer.price)
|
|
1011
|
-
offer.id?.let { offerJson.put("id", it) }
|
|
1012
|
-
offer.offerTagsAndroid?.let { offerJson.put("offerTagsAndroid", JSONArray(it)) }
|
|
1013
|
-
offer.offerTokenAndroid?.let { offerJson.put("offerTokenAndroid", it) }
|
|
1014
|
-
offer.discountAmountMicrosAndroid?.let { offerJson.put("discountAmountMicrosAndroid", it) }
|
|
1015
|
-
offer.formattedDiscountAmountAndroid?.let { offerJson.put("formattedDiscountAmountAndroid", it) }
|
|
1016
|
-
offer.fullPriceMicrosAndroid?.let { offerJson.put("fullPriceMicrosAndroid", it) }
|
|
1017
|
-
offer.limitedQuantityInfoAndroid?.let { info ->
|
|
1018
|
-
val infoJson = JSONObject()
|
|
1019
|
-
infoJson.put("maximumQuantity", info.maximumQuantity)
|
|
1020
|
-
infoJson.put("remainingQuantity", info.remainingQuantity)
|
|
1021
|
-
offerJson.put("limitedQuantityInfoAndroid", infoJson)
|
|
1022
|
-
}
|
|
1023
|
-
offer.validTimeWindowAndroid?.let { window ->
|
|
1024
|
-
val windowJson = JSONObject()
|
|
1025
|
-
windowJson.put("startTimeMillis", window.startTimeMillis)
|
|
1026
|
-
windowJson.put("endTimeMillis", window.endTimeMillis)
|
|
1027
|
-
offerJson.put("validTimeWindowAndroid", windowJson)
|
|
1028
|
-
}
|
|
1029
|
-
array.put(offerJson)
|
|
1030
|
-
}
|
|
1031
|
-
return array.toString()
|
|
1053
|
+
return JSONArray(discountOfferMaps(offers)).toString()
|
|
1032
1054
|
}
|
|
1033
1055
|
|
|
1034
1056
|
private fun convertToNitroProduct(product: ProductCommon): NitroProduct {
|
|
@@ -1044,64 +1066,9 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1044
1066
|
}
|
|
1045
1067
|
|
|
1046
1068
|
val subscriptionOffersJson = subscriptionOffers.takeIf { it.isNotEmpty() }?.let { serializeSubscriptionOffers(it) }
|
|
1047
|
-
val oneTimeOffersNitro = oneTimeOffers
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
priceAmountMicros = otp.priceAmountMicros,
|
|
1051
|
-
priceCurrencyCode = otp.priceCurrencyCode,
|
|
1052
|
-
offerId = otp.offerId.wrapVariant(),
|
|
1053
|
-
offerToken = otp.offerToken,
|
|
1054
|
-
offerTags = otp.offerTags.toTypedArray(),
|
|
1055
|
-
fullPriceMicros = otp.fullPriceMicros.wrapVariant(),
|
|
1056
|
-
discountDisplayInfo = otp.discountDisplayInfo?.let { discount ->
|
|
1057
|
-
Variant_NullType_NitroDiscountDisplayInfoAndroid.Second(
|
|
1058
|
-
NitroDiscountDisplayInfoAndroid(
|
|
1059
|
-
percentageDiscount = discount.percentageDiscount?.toDouble().wrapVariant(),
|
|
1060
|
-
discountAmount = discount.discountAmount?.let { amount ->
|
|
1061
|
-
Variant_NullType_NitroDiscountAmountAndroid.Second(
|
|
1062
|
-
NitroDiscountAmountAndroid(
|
|
1063
|
-
discountAmountMicros = amount.discountAmountMicros,
|
|
1064
|
-
formattedDiscountAmount = amount.formattedDiscountAmount
|
|
1065
|
-
)
|
|
1066
|
-
)
|
|
1067
|
-
}
|
|
1068
|
-
)
|
|
1069
|
-
)
|
|
1070
|
-
},
|
|
1071
|
-
validTimeWindow = otp.validTimeWindow?.let { window ->
|
|
1072
|
-
Variant_NullType_NitroValidTimeWindowAndroid.Second(
|
|
1073
|
-
NitroValidTimeWindowAndroid(
|
|
1074
|
-
startTimeMillis = window.startTimeMillis,
|
|
1075
|
-
endTimeMillis = window.endTimeMillis
|
|
1076
|
-
)
|
|
1077
|
-
)
|
|
1078
|
-
},
|
|
1079
|
-
limitedQuantityInfo = otp.limitedQuantityInfo?.let { info ->
|
|
1080
|
-
Variant_NullType_NitroLimitedQuantityInfoAndroid.Second(
|
|
1081
|
-
NitroLimitedQuantityInfoAndroid(
|
|
1082
|
-
maximumQuantity = info.maximumQuantity.toDouble(),
|
|
1083
|
-
remainingQuantity = info.remainingQuantity.toDouble()
|
|
1084
|
-
)
|
|
1085
|
-
)
|
|
1086
|
-
},
|
|
1087
|
-
preorderDetailsAndroid = otp.preorderDetailsAndroid?.let { preorder ->
|
|
1088
|
-
Variant_NullType_NitroPreorderDetailsAndroid.Second(
|
|
1089
|
-
NitroPreorderDetailsAndroid(
|
|
1090
|
-
preorderPresaleEndTimeMillis = preorder.preorderPresaleEndTimeMillis,
|
|
1091
|
-
preorderReleaseTimeMillis = preorder.preorderReleaseTimeMillis
|
|
1092
|
-
)
|
|
1093
|
-
)
|
|
1094
|
-
},
|
|
1095
|
-
rentalDetailsAndroid = otp.rentalDetailsAndroid?.let { rental ->
|
|
1096
|
-
Variant_NullType_NitroRentalDetailsAndroid.Second(
|
|
1097
|
-
NitroRentalDetailsAndroid(
|
|
1098
|
-
rentalExpirationPeriod = rental.rentalExpirationPeriod?.let { Variant_NullType_String.Second(it) },
|
|
1099
|
-
rentalPeriod = rental.rentalPeriod
|
|
1100
|
-
)
|
|
1101
|
-
)
|
|
1102
|
-
}
|
|
1103
|
-
)
|
|
1104
|
-
}?.toTypedArray()
|
|
1069
|
+
val oneTimeOffersNitro = oneTimeOffers
|
|
1070
|
+
?.map { it.toNitroOneTimePurchaseOfferDetail() }
|
|
1071
|
+
?.toTypedArray()
|
|
1105
1072
|
|
|
1106
1073
|
var originalPriceAndroid: String? = null
|
|
1107
1074
|
var originalPriceAmountMicrosAndroid: Double? = null
|
|
@@ -1111,7 +1078,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1111
1078
|
var subscriptionPeriodAndroid: String? = null
|
|
1112
1079
|
var freeTrialPeriodAndroid: String? = null
|
|
1113
1080
|
|
|
1114
|
-
if (product.type ==
|
|
1081
|
+
if (product.type == OpenIapProductType.InApp) {
|
|
1115
1082
|
oneTimeOffers?.firstOrNull()?.let { otp ->
|
|
1116
1083
|
originalPriceAndroid = otp.formattedPrice
|
|
1117
1084
|
originalPriceAmountMicrosAndroid = otp.priceAmountMicros.toDoubleOrNull()
|
|
@@ -1177,6 +1144,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1177
1144
|
id = product.id,
|
|
1178
1145
|
title = product.title,
|
|
1179
1146
|
description = product.description,
|
|
1147
|
+
debugDescription = product.nitroDebugDescription(),
|
|
1180
1148
|
type = product.type.rawValue,
|
|
1181
1149
|
displayName = product.displayName.wrapVariant(),
|
|
1182
1150
|
displayPrice = product.displayPrice,
|
|
@@ -1186,6 +1154,8 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1186
1154
|
typeIOS = null,
|
|
1187
1155
|
isFamilyShareableIOS = null,
|
|
1188
1156
|
jsonRepresentationIOS = null,
|
|
1157
|
+
pricingTermsIOS = null,
|
|
1158
|
+
subscriptionInfoIOS = null,
|
|
1189
1159
|
discountsIOS = null,
|
|
1190
1160
|
subscriptionPeriodUnitIOS = null,
|
|
1191
1161
|
subscriptionPeriodNumberIOS = null,
|
|
@@ -1225,11 +1195,16 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1225
1195
|
productId = purchase.productId,
|
|
1226
1196
|
transactionDate = purchase.transactionDate,
|
|
1227
1197
|
purchaseToken = purchase.purchaseToken.wrapVariant(),
|
|
1198
|
+
currentPlanId = purchase.currentPlanId.wrapVariant(),
|
|
1199
|
+
ids = purchase.ids.wrapVariant(),
|
|
1228
1200
|
platform = IapPlatform.ANDROID,
|
|
1229
1201
|
store = mapIapStore(purchase.store),
|
|
1230
1202
|
quantity = purchase.quantity.toDouble(),
|
|
1231
1203
|
purchaseState = mapPurchaseState(purchase.purchaseState),
|
|
1232
1204
|
isAutoRenewing = purchase.isAutoRenewing,
|
|
1205
|
+
advancedCommerceInfoIOS = null,
|
|
1206
|
+
billingPlanTypeIOS = null,
|
|
1207
|
+
commitmentInfoIOS = null,
|
|
1233
1208
|
quantityIOS = null,
|
|
1234
1209
|
originalTransactionDateIOS = null,
|
|
1235
1210
|
originalTransactionIdentifierIOS = null,
|
|
@@ -1262,7 +1237,8 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1262
1237
|
obfuscatedAccountIdAndroid = androidPurchase?.obfuscatedAccountIdAndroid.wrapVariant(),
|
|
1263
1238
|
obfuscatedProfileIdAndroid = androidPurchase?.obfuscatedProfileIdAndroid.wrapVariant(),
|
|
1264
1239
|
developerPayloadAndroid = androidPurchase?.developerPayloadAndroid.wrapVariant(),
|
|
1265
|
-
isSuspendedAndroid = androidPurchase?.isSuspendedAndroid.wrapVariant()
|
|
1240
|
+
isSuspendedAndroid = androidPurchase?.isSuspendedAndroid.wrapVariant(),
|
|
1241
|
+
pendingPurchaseUpdateAndroid = androidPurchase?.pendingPurchaseUpdateAndroid.wrapVariant()
|
|
1266
1242
|
)
|
|
1267
1243
|
}
|
|
1268
1244
|
|
|
@@ -1333,10 +1309,10 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1333
1309
|
}
|
|
1334
1310
|
}
|
|
1335
1311
|
|
|
1336
|
-
override fun buyPromotedProductIOS(): Promise<
|
|
1312
|
+
override fun buyPromotedProductIOS(): Promise<Boolean> {
|
|
1337
1313
|
return Promise.async {
|
|
1338
1314
|
// Android doesn't have promoted products like iOS App Store
|
|
1339
|
-
|
|
1315
|
+
false
|
|
1340
1316
|
}
|
|
1341
1317
|
}
|
|
1342
1318
|
|
|
@@ -1418,11 +1394,17 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1418
1394
|
|
|
1419
1395
|
// Call OpenIAP's verifyPurchase - this makes the actual Google Play API call
|
|
1420
1396
|
val verifyResult = openIap.verifyPurchase(props)
|
|
1421
|
-
RnIapLog.result("validateReceipt", verifyResult.toString())
|
|
1422
1397
|
|
|
1423
1398
|
// Cast to Android result type (on Android, verifyPurchase returns VerifyPurchaseResultAndroid)
|
|
1424
1399
|
val androidResult = verifyResult as? VerifyPurchaseResultAndroid
|
|
1425
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
|
+
)
|
|
1426
1408
|
|
|
1427
1409
|
// Convert OpenIAP result to Nitro result
|
|
1428
1410
|
val result = NitroReceiptValidationResultAndroid(
|
|
@@ -1631,7 +1613,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1631
1613
|
} catch (err: Throwable) {
|
|
1632
1614
|
RnIapLog.failure("checkAlternativeBillingAvailabilityAndroid", err)
|
|
1633
1615
|
val errorType = parseOpenIapError(err)
|
|
1634
|
-
throw OpenIapException(toErrorJson(errorType, debugMessage = err.message))
|
|
1616
|
+
throw OpenIapException(toErrorJson(errorType, debugMessage = err.message), err)
|
|
1635
1617
|
}
|
|
1636
1618
|
}
|
|
1637
1619
|
}
|
|
@@ -1653,7 +1635,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1653
1635
|
} catch (err: Throwable) {
|
|
1654
1636
|
RnIapLog.failure("showAlternativeBillingDialogAndroid", err)
|
|
1655
1637
|
val errorType = parseOpenIapError(err)
|
|
1656
|
-
throw OpenIapException(toErrorJson(errorType, debugMessage = err.message))
|
|
1638
|
+
throw OpenIapException(toErrorJson(errorType, debugMessage = err.message), err)
|
|
1657
1639
|
}
|
|
1658
1640
|
}
|
|
1659
1641
|
}
|
|
@@ -1669,12 +1651,15 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1669
1651
|
val token = withContext(Dispatchers.Main) {
|
|
1670
1652
|
openIap.createAlternativeBillingReportingToken()
|
|
1671
1653
|
}
|
|
1672
|
-
RnIapLog.result(
|
|
1654
|
+
RnIapLog.result(
|
|
1655
|
+
"createAlternativeBillingTokenAndroid",
|
|
1656
|
+
if (token.isNullOrBlank()) "<empty>" else "<token>"
|
|
1657
|
+
)
|
|
1673
1658
|
token?.let { Variant_NullType_String.Second(it) } ?: Variant_NullType_String.First(NullType.NULL)
|
|
1674
1659
|
} catch (err: Throwable) {
|
|
1675
1660
|
RnIapLog.failure("createAlternativeBillingTokenAndroid", err)
|
|
1676
1661
|
val errorType = parseOpenIapError(err)
|
|
1677
|
-
throw OpenIapException(toErrorJson(errorType, debugMessage = err.message))
|
|
1662
|
+
throw OpenIapException(toErrorJson(errorType, debugMessage = err.message), err)
|
|
1678
1663
|
}
|
|
1679
1664
|
}
|
|
1680
1665
|
}
|
|
@@ -1726,15 +1711,19 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1726
1711
|
private var subscriptionBillingIssueNativeListener: dev.hyo.openiap.listener.OpenIapSubscriptionBillingIssueListener? = null
|
|
1727
1712
|
|
|
1728
1713
|
override fun addSubscriptionBillingIssueListener(listener: (purchase: NitroPurchase) -> Unit) {
|
|
1729
|
-
synchronized(
|
|
1730
|
-
subscriptionBillingIssueListeners
|
|
1714
|
+
synchronized(subscriptionBillingIssueAttachLock) {
|
|
1715
|
+
synchronized(subscriptionBillingIssueListeners) {
|
|
1716
|
+
subscriptionBillingIssueListeners.add(listener)
|
|
1717
|
+
}
|
|
1718
|
+
attachSubscriptionBillingIssueIfNeeded()
|
|
1731
1719
|
}
|
|
1732
|
-
attachSubscriptionBillingIssueIfNeeded()
|
|
1733
1720
|
}
|
|
1734
1721
|
|
|
1735
1722
|
override fun removeSubscriptionBillingIssueListener(listener: (purchase: NitroPurchase) -> Unit) {
|
|
1736
|
-
synchronized(
|
|
1737
|
-
subscriptionBillingIssueListeners
|
|
1723
|
+
synchronized(subscriptionBillingIssueAttachLock) {
|
|
1724
|
+
synchronized(subscriptionBillingIssueListeners) {
|
|
1725
|
+
subscriptionBillingIssueListeners.remove(listener)
|
|
1726
|
+
}
|
|
1738
1727
|
}
|
|
1739
1728
|
}
|
|
1740
1729
|
|
|
@@ -1766,6 +1755,15 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1766
1755
|
}
|
|
1767
1756
|
}
|
|
1768
1757
|
|
|
1758
|
+
private fun clearSubscriptionBillingIssueListeners() {
|
|
1759
|
+
synchronized(subscriptionBillingIssueAttachLock) {
|
|
1760
|
+
synchronized(subscriptionBillingIssueListeners) {
|
|
1761
|
+
subscriptionBillingIssueListeners.clear()
|
|
1762
|
+
}
|
|
1763
|
+
detachSubscriptionBillingIssueIfNeeded()
|
|
1764
|
+
}
|
|
1765
|
+
}
|
|
1766
|
+
|
|
1769
1767
|
// -------------------------------------------------------------------------
|
|
1770
1768
|
// Billing Programs API (Android 8.2.0+)
|
|
1771
1769
|
// -------------------------------------------------------------------------
|
|
@@ -1794,25 +1792,66 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1794
1792
|
val result = openIapStore.isBillingProgramAvailable(openIapProgram)
|
|
1795
1793
|
val nitroResult = NitroBillingProgramAvailabilityResultAndroid(
|
|
1796
1794
|
billingProgram = program,
|
|
1797
|
-
|
|
1795
|
+
choiceScreenType = result.choiceScreenType?.let { mapBillingChoiceScreenType(it) },
|
|
1796
|
+
isAvailable = result.isAvailable,
|
|
1797
|
+
isExternalLinkAvailable = result.isExternalLinkAvailable.wrapVariant()
|
|
1798
1798
|
)
|
|
1799
1799
|
RnIapLog.result("isBillingProgramAvailableAndroid", mapOf("isAvailable" to result.isAvailable))
|
|
1800
1800
|
nitroResult
|
|
1801
1801
|
} catch (err: Throwable) {
|
|
1802
1802
|
RnIapLog.failure("isBillingProgramAvailableAndroid", err)
|
|
1803
1803
|
val errorType = parseOpenIapError(err)
|
|
1804
|
-
throw OpenIapException(toErrorJson(errorType, debugMessage = err.message))
|
|
1804
|
+
throw OpenIapException(toErrorJson(errorType, debugMessage = err.message), err)
|
|
1805
1805
|
}
|
|
1806
1806
|
}
|
|
1807
1807
|
}
|
|
1808
1808
|
|
|
1809
|
-
override fun
|
|
1809
|
+
override fun getBillingChoiceInfoAndroid(params: NitroGetBillingChoiceInfoParamsAndroid): Promise<NitroBillingChoiceInfoAndroid> {
|
|
1810
1810
|
return Promise.async {
|
|
1811
|
-
RnIapLog.payload("
|
|
1811
|
+
RnIapLog.payload("getBillingChoiceInfoAndroid", mapOf(
|
|
1812
|
+
"billingProgram" to params.billingProgram.name,
|
|
1813
|
+
"playBillingChoiceImageLayout" to params.playBillingChoiceImageLayout.name,
|
|
1814
|
+
"userLocale" to params.userLocale.unwrapString()
|
|
1815
|
+
))
|
|
1816
|
+
try {
|
|
1817
|
+
ensureConnection()
|
|
1818
|
+
val result = openIapStore.getBillingChoiceInfo(
|
|
1819
|
+
OpenIapGetBillingChoiceInfoParams(
|
|
1820
|
+
billingProgram = mapBillingProgram(params.billingProgram),
|
|
1821
|
+
playBillingChoiceImageLayout = mapBillingChoiceImageLayout(params.playBillingChoiceImageLayout),
|
|
1822
|
+
userLocale = params.userLocale.unwrapString()
|
|
1823
|
+
)
|
|
1824
|
+
)
|
|
1825
|
+
val nitroResult = NitroBillingChoiceInfoAndroid(
|
|
1826
|
+
playBillingChoiceImageUrl = result.playBillingChoiceImageUrl,
|
|
1827
|
+
playBillingLoyaltyInfo = result.playBillingLoyaltyInfo.wrapVariant()
|
|
1828
|
+
)
|
|
1829
|
+
RnIapLog.result("getBillingChoiceInfoAndroid", mapOf("hasImageUrl" to result.playBillingChoiceImageUrl.isNotBlank()))
|
|
1830
|
+
nitroResult
|
|
1831
|
+
} catch (err: Throwable) {
|
|
1832
|
+
RnIapLog.failure("getBillingChoiceInfoAndroid", err)
|
|
1833
|
+
val errorType = parseOpenIapError(err)
|
|
1834
|
+
throw OpenIapException(toErrorJson(errorType, debugMessage = err.message), err)
|
|
1835
|
+
}
|
|
1836
|
+
}
|
|
1837
|
+
}
|
|
1838
|
+
|
|
1839
|
+
override fun createBillingProgramReportingDetailsAndroid(
|
|
1840
|
+
program: BillingProgramAndroid,
|
|
1841
|
+
developerBillingType: DeveloperBillingTypeAndroid?
|
|
1842
|
+
): Promise<NitroBillingProgramReportingDetailsAndroid> {
|
|
1843
|
+
return Promise.async {
|
|
1844
|
+
RnIapLog.payload(
|
|
1845
|
+
"createBillingProgramReportingDetailsAndroid",
|
|
1846
|
+
mapOf("program" to program.name, "developerBillingType" to developerBillingType?.name)
|
|
1847
|
+
)
|
|
1812
1848
|
try {
|
|
1813
1849
|
ensureConnection()
|
|
1814
1850
|
val openIapProgram = mapBillingProgram(program)
|
|
1815
|
-
val result = openIapStore.createBillingProgramReportingDetails(
|
|
1851
|
+
val result = openIapStore.createBillingProgramReportingDetails(
|
|
1852
|
+
openIapProgram,
|
|
1853
|
+
mapDeveloperBillingType(developerBillingType)
|
|
1854
|
+
)
|
|
1816
1855
|
val nitroResult = NitroBillingProgramReportingDetailsAndroid(
|
|
1817
1856
|
billingProgram = program,
|
|
1818
1857
|
externalTransactionToken = result.externalTransactionToken
|
|
@@ -1822,7 +1861,75 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1822
1861
|
} catch (err: Throwable) {
|
|
1823
1862
|
RnIapLog.failure("createBillingProgramReportingDetailsAndroid", err)
|
|
1824
1863
|
val errorType = parseOpenIapError(err)
|
|
1825
|
-
throw OpenIapException(toErrorJson(errorType, debugMessage = err.message))
|
|
1864
|
+
throw OpenIapException(toErrorJson(errorType, debugMessage = err.message), err)
|
|
1865
|
+
}
|
|
1866
|
+
}
|
|
1867
|
+
}
|
|
1868
|
+
|
|
1869
|
+
override fun showBillingProgramInformationDialogAndroid(
|
|
1870
|
+
params: NitroBillingProgramInformationDialogParamsAndroid
|
|
1871
|
+
): Promise<NitroBillingResultAndroid> {
|
|
1872
|
+
return Promise.async {
|
|
1873
|
+
RnIapLog.payload("showBillingProgramInformationDialogAndroid", mapOf("program" to params.billingProgram.name))
|
|
1874
|
+
try {
|
|
1875
|
+
ensureConnection()
|
|
1876
|
+
val activity = withContext(Dispatchers.Main) {
|
|
1877
|
+
runCatching { context.currentActivity }.getOrNull()
|
|
1878
|
+
} ?: throw OpenIapException(toErrorJson(OpenIapError.DeveloperError(), debugMessage = "Activity not available"))
|
|
1879
|
+
val result = withContext(Dispatchers.Main) {
|
|
1880
|
+
openIapStore.showBillingProgramInformationDialog(
|
|
1881
|
+
activity,
|
|
1882
|
+
OpenIapBillingProgramInformationDialogParams(
|
|
1883
|
+
billingProgram = mapBillingProgram(params.billingProgram),
|
|
1884
|
+
externalTransactionToken = params.externalTransactionToken
|
|
1885
|
+
)
|
|
1886
|
+
)
|
|
1887
|
+
}
|
|
1888
|
+
RnIapLog.result("showBillingProgramInformationDialogAndroid", mapOf("responseCode" to result.responseCode))
|
|
1889
|
+
NitroBillingResultAndroid(
|
|
1890
|
+
responseCode = result.responseCode.toDouble(),
|
|
1891
|
+
debugMessage = result.debugMessage.wrapVariant(),
|
|
1892
|
+
subResponseCode = mapSubResponseCode(result.subResponseCode)
|
|
1893
|
+
)
|
|
1894
|
+
} catch (err: Throwable) {
|
|
1895
|
+
RnIapLog.failure("showBillingProgramInformationDialogAndroid", err)
|
|
1896
|
+
val errorType = parseOpenIapError(err)
|
|
1897
|
+
throw OpenIapException(toErrorJson(errorType, debugMessage = err.message), err)
|
|
1898
|
+
}
|
|
1899
|
+
}
|
|
1900
|
+
}
|
|
1901
|
+
|
|
1902
|
+
override fun showInAppMessagesAndroid(
|
|
1903
|
+
params: Variant_NullType_NitroInAppMessageParamsAndroid?
|
|
1904
|
+
): Promise<NitroInAppMessageResultAndroid> {
|
|
1905
|
+
return Promise.async {
|
|
1906
|
+
val messageParams = params?.asSecondOrNull()
|
|
1907
|
+
val categories = messageParams?.categories?.asSecondOrNull()
|
|
1908
|
+
RnIapLog.payload("showInAppMessagesAndroid", mapOf("categories" to categories?.map { it.name }))
|
|
1909
|
+
try {
|
|
1910
|
+
ensureConnection()
|
|
1911
|
+
val activity = withContext(Dispatchers.Main) {
|
|
1912
|
+
runCatching { context.currentActivity }.getOrNull()
|
|
1913
|
+
} ?: throw OpenIapException(toErrorJson(OpenIapError.DeveloperError(), debugMessage = "Activity not available"))
|
|
1914
|
+
val result = withContext(Dispatchers.Main) {
|
|
1915
|
+
openIapStore.showInAppMessages(
|
|
1916
|
+
activity,
|
|
1917
|
+
messageParams?.let {
|
|
1918
|
+
OpenIapInAppMessageParams(
|
|
1919
|
+
categories = categories?.map { category -> mapInAppMessageCategory(category) }
|
|
1920
|
+
)
|
|
1921
|
+
}
|
|
1922
|
+
)
|
|
1923
|
+
}
|
|
1924
|
+
RnIapLog.result("showInAppMessagesAndroid", mapOf("responseCode" to result.responseCode.name))
|
|
1925
|
+
NitroInAppMessageResultAndroid(
|
|
1926
|
+
responseCode = mapInAppMessageResponseCode(result.responseCode),
|
|
1927
|
+
purchaseToken = result.purchaseToken.wrapVariant()
|
|
1928
|
+
)
|
|
1929
|
+
} catch (err: Throwable) {
|
|
1930
|
+
RnIapLog.failure("showInAppMessagesAndroid", err)
|
|
1931
|
+
val errorType = parseOpenIapError(err)
|
|
1932
|
+
throw OpenIapException(toErrorJson(errorType, debugMessage = err.message), err)
|
|
1826
1933
|
}
|
|
1827
1934
|
}
|
|
1828
1935
|
}
|
|
@@ -1844,6 +1951,7 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1844
1951
|
|
|
1845
1952
|
val openIapParams = OpenIapLaunchExternalLinkParams(
|
|
1846
1953
|
billingProgram = mapBillingProgram(params.billingProgram),
|
|
1954
|
+
externalTransactionToken = params.externalTransactionToken.unwrapString(),
|
|
1847
1955
|
launchMode = mapExternalLinkLaunchMode(params.launchMode),
|
|
1848
1956
|
linkType = mapExternalLinkType(params.linkType),
|
|
1849
1957
|
linkUri = params.linkUri
|
|
@@ -1870,6 +1978,86 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1870
1978
|
BillingProgramAndroid.EXTERNAL_OFFER -> OpenIapBillingProgramAndroid.ExternalOffer
|
|
1871
1979
|
BillingProgramAndroid.EXTERNAL_PAYMENTS -> OpenIapBillingProgramAndroid.ExternalPayments
|
|
1872
1980
|
BillingProgramAndroid.USER_CHOICE_BILLING -> OpenIapBillingProgramAndroid.UserChoiceBilling
|
|
1981
|
+
BillingProgramAndroid.BILLING_CHOICE -> OpenIapBillingProgramAndroid.BillingChoice
|
|
1982
|
+
}
|
|
1983
|
+
}
|
|
1984
|
+
|
|
1985
|
+
private fun mapBillingChoiceImageLayout(layout: BillingChoiceImageLayoutAndroid): OpenIapBillingChoiceImageLayout {
|
|
1986
|
+
return when (layout) {
|
|
1987
|
+
BillingChoiceImageLayoutAndroid.RECTANGULAR_FOUR_BY_ONE -> OpenIapBillingChoiceImageLayout.RectangularFourByOne
|
|
1988
|
+
BillingChoiceImageLayoutAndroid.RECTANGULAR_THREE_BY_ONE -> OpenIapBillingChoiceImageLayout.RectangularThreeByOne
|
|
1989
|
+
BillingChoiceImageLayoutAndroid.RECTANGULAR_TWO_BY_TWO -> OpenIapBillingChoiceImageLayout.RectangularTwoByTwo
|
|
1990
|
+
}
|
|
1991
|
+
}
|
|
1992
|
+
|
|
1993
|
+
private fun mapBillingChoiceScreenType(type: OpenIapBillingChoiceScreenType): BillingChoiceScreenTypeAndroid {
|
|
1994
|
+
return when (type) {
|
|
1995
|
+
OpenIapBillingChoiceScreenType.Unspecified -> BillingChoiceScreenTypeAndroid.UNSPECIFIED
|
|
1996
|
+
OpenIapBillingChoiceScreenType.DeveloperRendered -> BillingChoiceScreenTypeAndroid.DEVELOPER_RENDERED
|
|
1997
|
+
OpenIapBillingChoiceScreenType.GoogleRendered -> BillingChoiceScreenTypeAndroid.GOOGLE_RENDERED
|
|
1998
|
+
}
|
|
1999
|
+
}
|
|
2000
|
+
|
|
2001
|
+
private fun mapBillingChoiceScreenTypeToOpenIap(
|
|
2002
|
+
type: BillingChoiceScreenTypeAndroid
|
|
2003
|
+
): OpenIapBillingChoiceScreenType {
|
|
2004
|
+
return when (type) {
|
|
2005
|
+
BillingChoiceScreenTypeAndroid.UNSPECIFIED -> OpenIapBillingChoiceScreenType.Unspecified
|
|
2006
|
+
BillingChoiceScreenTypeAndroid.DEVELOPER_RENDERED -> OpenIapBillingChoiceScreenType.DeveloperRendered
|
|
2007
|
+
BillingChoiceScreenTypeAndroid.GOOGLE_RENDERED -> OpenIapBillingChoiceScreenType.GoogleRendered
|
|
2008
|
+
}
|
|
2009
|
+
}
|
|
2010
|
+
|
|
2011
|
+
private fun mapDeveloperBillingType(type: DeveloperBillingTypeAndroid?): OpenIapDeveloperBillingType? {
|
|
2012
|
+
return when (type) {
|
|
2013
|
+
null, DeveloperBillingTypeAndroid.DEVELOPER_BILLING_TYPE_UNSPECIFIED -> null
|
|
2014
|
+
DeveloperBillingTypeAndroid.IN_APP -> OpenIapDeveloperBillingType.InApp
|
|
2015
|
+
DeveloperBillingTypeAndroid.EXTERNAL_LINK -> OpenIapDeveloperBillingType.ExternalLink
|
|
2016
|
+
}
|
|
2017
|
+
}
|
|
2018
|
+
|
|
2019
|
+
private fun mapSubResponseCode(
|
|
2020
|
+
code: OpenIapSubResponseCodeAndroid?
|
|
2021
|
+
): SubResponseCodeAndroid? = when (code) {
|
|
2022
|
+
null -> null
|
|
2023
|
+
OpenIapSubResponseCodeAndroid.NoApplicableSubResponseCode ->
|
|
2024
|
+
SubResponseCodeAndroid.NO_APPLICABLE_SUB_RESPONSE_CODE
|
|
2025
|
+
OpenIapSubResponseCodeAndroid.PaymentDeclinedDueToInsufficientFunds ->
|
|
2026
|
+
SubResponseCodeAndroid.PAYMENT_DECLINED_DUE_TO_INSUFFICIENT_FUNDS
|
|
2027
|
+
OpenIapSubResponseCodeAndroid.UserIneligible ->
|
|
2028
|
+
SubResponseCodeAndroid.USER_INELIGIBLE
|
|
2029
|
+
}
|
|
2030
|
+
|
|
2031
|
+
private fun mapDeveloperBillingOption(
|
|
2032
|
+
option: DeveloperBillingOptionParamsAndroid
|
|
2033
|
+
): OpenIapDeveloperBillingOptionParams {
|
|
2034
|
+
val launchMode = when (option.launchMode) {
|
|
2035
|
+
null -> null
|
|
2036
|
+
DeveloperBillingLaunchModeAndroid.UNSPECIFIED -> OpenIapDeveloperBillingLaunchMode.Unspecified
|
|
2037
|
+
DeveloperBillingLaunchModeAndroid.LAUNCH_IN_EXTERNAL_BROWSER_OR_APP ->
|
|
2038
|
+
OpenIapDeveloperBillingLaunchMode.LaunchInExternalBrowserOrApp
|
|
2039
|
+
DeveloperBillingLaunchModeAndroid.CALLER_WILL_LAUNCH_LINK ->
|
|
2040
|
+
OpenIapDeveloperBillingLaunchMode.CallerWillLaunchLink
|
|
2041
|
+
}
|
|
2042
|
+
return OpenIapDeveloperBillingOptionParams(
|
|
2043
|
+
billingProgram = mapBillingProgram(option.billingProgram),
|
|
2044
|
+
externalTransactionToken = option.externalTransactionToken.unwrapString(),
|
|
2045
|
+
launchMode = launchMode,
|
|
2046
|
+
linkUri = option.linkUri.unwrapString()
|
|
2047
|
+
)
|
|
2048
|
+
}
|
|
2049
|
+
|
|
2050
|
+
private fun mapInAppMessageCategory(category: InAppMessageCategoryAndroid): OpenIapInAppMessageCategory {
|
|
2051
|
+
return when (category) {
|
|
2052
|
+
InAppMessageCategoryAndroid.UNKNOWN_IN_APP_MESSAGE_CATEGORY_ID -> OpenIapInAppMessageCategory.UnknownInAppMessageCategoryId
|
|
2053
|
+
InAppMessageCategoryAndroid.TRANSACTIONAL -> OpenIapInAppMessageCategory.Transactional
|
|
2054
|
+
}
|
|
2055
|
+
}
|
|
2056
|
+
|
|
2057
|
+
private fun mapInAppMessageResponseCode(code: OpenIapInAppMessageResponseCode): InAppMessageResponseCodeAndroid {
|
|
2058
|
+
return when (code) {
|
|
2059
|
+
OpenIapInAppMessageResponseCode.NoActionNeeded -> InAppMessageResponseCodeAndroid.NO_ACTION_NEEDED
|
|
2060
|
+
OpenIapInAppMessageResponseCode.SubscriptionStatusUpdated -> InAppMessageResponseCodeAndroid.SUBSCRIPTION_STATUS_UPDATED
|
|
1873
2061
|
}
|
|
1874
2062
|
}
|
|
1875
2063
|
|
|
@@ -1966,6 +2154,13 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1966
2154
|
?: OpenIapError.Companion.defaultMessage(code)
|
|
1967
2155
|
val diagnostics = error.toJSON()
|
|
1968
2156
|
val responseCode = (diagnostics["responseCode"] as? Number)?.toInt()
|
|
2157
|
+
val diagnosticProductId = productId
|
|
2158
|
+
?: diagnostics["productId"] as? String
|
|
2159
|
+
?: when (error) {
|
|
2160
|
+
is OpenIapError.ProductNotFound -> error.productId
|
|
2161
|
+
is OpenIapError.SkuNotFound -> error.sku
|
|
2162
|
+
else -> null
|
|
2163
|
+
}
|
|
1969
2164
|
val productIds = diagnostics["productIds"] as? List<*>
|
|
1970
2165
|
val productType = diagnostics["productType"] as? String
|
|
1971
2166
|
val isEmptyProductList = diagnostics["isEmptyProductList"] as? Boolean
|
|
@@ -1975,15 +2170,18 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
1975
2170
|
"message" to message
|
|
1976
2171
|
)
|
|
1977
2172
|
|
|
1978
|
-
errorMap["responseCode"] =
|
|
2173
|
+
responseCode?.let { errorMap["responseCode"] = it }
|
|
1979
2174
|
debugMessage
|
|
1980
2175
|
?.let { errorMap["debugMessage"] = it }
|
|
1981
2176
|
?: (diagnostics["debugMessage"] as? String)?.let { errorMap["debugMessage"] = it }
|
|
1982
2177
|
?: error.message?.let { errorMap["debugMessage"] = it }
|
|
1983
|
-
|
|
2178
|
+
diagnosticProductId?.let { errorMap["productId"] = it }
|
|
1984
2179
|
if (!productIds.isNullOrEmpty()) errorMap["productIds"] = productIds
|
|
1985
2180
|
productType?.let { errorMap["productType"] = it }
|
|
1986
2181
|
isEmptyProductList?.let { errorMap["isEmptyProductList"] = it }
|
|
2182
|
+
(diagnostics["subResponseCodeAndroid"] as? String)?.let {
|
|
2183
|
+
errorMap["subResponseCodeAndroid"] = it
|
|
2184
|
+
}
|
|
1987
2185
|
|
|
1988
2186
|
return try {
|
|
1989
2187
|
JSONObject(errorMap).toString()
|
|
@@ -2053,12 +2251,30 @@ class HybridRnIap : HybridRnIapSpec() {
|
|
|
2053
2251
|
val diagnostics = error.toJSON()
|
|
2054
2252
|
val responseCode = (diagnostics["responseCode"] as? Number)?.toDouble()
|
|
2055
2253
|
val diagnosticMessage = diagnostics["debugMessage"] as? String
|
|
2254
|
+
val diagnosticProductId = productId
|
|
2255
|
+
?: diagnostics["productId"] as? String
|
|
2256
|
+
?: when (error) {
|
|
2257
|
+
is OpenIapError.ProductNotFound -> error.productId
|
|
2258
|
+
is OpenIapError.SkuNotFound -> error.sku
|
|
2259
|
+
else -> null
|
|
2260
|
+
}
|
|
2261
|
+
val productIds = (diagnostics["productIds"] as? Iterable<*>)
|
|
2262
|
+
?.filterIsInstance<String>()
|
|
2263
|
+
?.toTypedArray()
|
|
2264
|
+
val subResponseCode = (diagnostics["subResponseCodeAndroid"] as? String)?.let {
|
|
2265
|
+
runCatching { OpenIapSubResponseCodeAndroid.fromJson(it) }.getOrNull()
|
|
2266
|
+
}
|
|
2056
2267
|
return NitroPurchaseResult(
|
|
2057
2268
|
responseCode = responseCode ?: -1.0,
|
|
2058
2269
|
debugMessage = debugMessage ?: diagnosticMessage ?: error.message,
|
|
2059
2270
|
code = code,
|
|
2060
2271
|
message = message,
|
|
2061
|
-
purchaseToken = null
|
|
2272
|
+
purchaseToken = null,
|
|
2273
|
+
productId = diagnosticProductId,
|
|
2274
|
+
productIds = productIds,
|
|
2275
|
+
productType = diagnostics["productType"] as? String,
|
|
2276
|
+
isEmptyProductList = diagnostics["isEmptyProductList"] as? Boolean,
|
|
2277
|
+
subResponseCodeAndroid = mapSubResponseCode(subResponseCode)
|
|
2062
2278
|
)
|
|
2063
2279
|
}
|
|
2064
2280
|
}
|