react-native-iap 13.0.4 → 14.0.0-rc.2
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/NitroIap.podspec +33 -0
- package/README.md +163 -51
- package/android/CMakeLists.txt +32 -0
- package/android/build.gradle +107 -138
- package/android/fix-prefab.gradle +51 -0
- package/android/gradle.properties +5 -13
- package/android/src/main/AndroidManifest.xml +1 -4
- package/android/src/main/cpp/cpp-adapter.cpp +6 -0
- package/android/src/main/java/com/margelo/nitro/iap/HybridRnIap.kt +843 -0
- package/android/src/main/java/com/margelo/nitro/iap/NitroIapPackage.java +33 -0
- package/android/src/main/java/com/margelo/nitro/iap/Types.kt +173 -0
- package/ios/Bridge.h +8 -0
- package/ios/ErrorUtils.swift +153 -0
- package/ios/HybridRnIap.swift +1326 -0
- package/ios/ProductStore.swift +33 -0
- package/ios/reactnativeiap.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/ios/reactnativeiap.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
- package/lib/module/helpers/subscription.js +56 -0
- package/lib/module/helpers/subscription.js.map +1 -0
- package/lib/module/hooks/useIAP.js +175 -123
- package/lib/module/hooks/useIAP.js.map +1 -1
- package/lib/module/index.js +1015 -9
- package/lib/module/index.js.map +1 -1
- package/lib/module/package.json +1 -0
- package/lib/module/specs/RnIap.nitro.js +4 -0
- package/lib/{commonjs/modules/common.js.map → module/specs/RnIap.nitro.js.map} +1 -1
- package/lib/module/types.js +187 -0
- package/lib/module/types.js.map +1 -0
- package/lib/module/utils/error.js +80 -0
- package/lib/module/utils/error.js.map +1 -0
- package/lib/module/utils/type-bridge.js +202 -0
- package/lib/module/utils/type-bridge.js.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/plugin/src/withIAP.d.ts +2 -7
- package/lib/typescript/plugin/src/withIAP.d.ts.map +1 -1
- package/lib/typescript/scripts/check-nitro-versions.d.ts +3 -0
- package/lib/typescript/scripts/check-nitro-versions.d.ts.map +1 -0
- package/lib/typescript/src/helpers/subscription.d.ts +14 -0
- package/lib/typescript/src/helpers/subscription.d.ts.map +1 -0
- package/lib/typescript/src/hooks/useIAP.d.ts +42 -26
- package/lib/typescript/src/hooks/useIAP.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +356 -8
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/RnIap.nitro.d.ts +404 -0
- package/lib/typescript/src/specs/RnIap.nitro.d.ts.map +1 -0
- package/lib/typescript/src/types.d.ts +544 -0
- package/lib/typescript/src/types.d.ts.map +1 -0
- package/lib/typescript/src/utils/error.d.ts +30 -0
- package/lib/typescript/src/utils/error.d.ts.map +1 -0
- package/lib/typescript/src/utils/type-bridge.d.ts +40 -0
- package/lib/typescript/src/utils/type-bridge.d.ts.map +1 -0
- package/nitro.json +17 -0
- package/nitrogen/generated/android/NitroIap+autolinking.cmake +80 -0
- package/nitrogen/generated/android/NitroIap+autolinking.gradle +27 -0
- package/nitrogen/generated/android/NitroIapOnLoad.cpp +50 -0
- package/nitrogen/generated/android/NitroIapOnLoad.hpp +25 -0
- package/nitrogen/generated/android/c++/JFunc_void_NitroProduct.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void_NitroPurchase.hpp +78 -0
- package/nitrogen/generated/android/c++/JFunc_void_NitroPurchaseResult.hpp +78 -0
- package/nitrogen/generated/android/c++/JHybridRnIapSpec.cpp +577 -0
- package/nitrogen/generated/android/c++/JHybridRnIapSpec.hpp +93 -0
- package/nitrogen/generated/android/c++/JNitroAndroidReceiptValidationOptions.hpp +66 -0
- package/nitrogen/generated/android/c++/JNitroAvailablePurchasesAndroidOptions.hpp +54 -0
- package/nitrogen/generated/android/c++/JNitroAvailablePurchasesIosOptions.hpp +65 -0
- package/nitrogen/generated/android/c++/JNitroAvailablePurchasesOptions.hpp +62 -0
- package/nitrogen/generated/android/c++/JNitroFinishTransactionAndroidParams.hpp +58 -0
- package/nitrogen/generated/android/c++/JNitroFinishTransactionIosParams.hpp +53 -0
- package/nitrogen/generated/android/c++/JNitroFinishTransactionParams.hpp +62 -0
- package/nitrogen/generated/android/c++/JNitroProduct.hpp +154 -0
- package/nitrogen/generated/android/c++/JNitroPurchase.hpp +122 -0
- package/nitrogen/generated/android/c++/JNitroPurchaseRequest.hpp +66 -0
- package/nitrogen/generated/android/c++/JNitroPurchaseResult.hpp +70 -0
- package/nitrogen/generated/android/c++/JNitroReceiptValidationParams.hpp +60 -0
- package/nitrogen/generated/android/c++/JNitroReceiptValidationResultAndroid.hpp +122 -0
- package/nitrogen/generated/android/c++/JNitroReceiptValidationResultIOS.hpp +68 -0
- package/nitrogen/generated/android/c++/JNitroRequestPurchaseAndroid.hpp +115 -0
- package/nitrogen/generated/android/c++/JNitroRequestPurchaseIos.hpp +84 -0
- package/nitrogen/generated/android/c++/JNitroSubscriptionOffer.hpp +57 -0
- package/nitrogen/generated/android/c++/JNitroSubscriptionRenewalInfo.hpp +74 -0
- package/nitrogen/generated/android/c++/JNitroSubscriptionStatus.hpp +64 -0
- package/nitrogen/generated/android/c++/JVariant_Boolean_NitroPurchaseResult.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_Boolean_NitroPurchaseResult.hpp +71 -0
- package/nitrogen/generated/android/c++/JVariant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.cpp +26 -0
- package/nitrogen/generated/android/c++/JVariant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.hpp +75 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_NitroProduct.kt +81 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_NitroPurchase.kt +81 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Func_void_NitroPurchaseResult.kt +81 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/HybridRnIapSpec.kt +198 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAndroidReceiptValidationOptions.kt +38 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAvailablePurchasesAndroidOptions.kt +29 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAvailablePurchasesIosOptions.kt +38 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroAvailablePurchasesOptions.kt +32 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroFinishTransactionAndroidParams.kt +32 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroFinishTransactionIosParams.kt +29 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroFinishTransactionParams.kt +32 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroIapOnLoad.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroProduct.kt +104 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchase.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchaseRequest.kt +32 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroPurchaseResult.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationParams.kt +32 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationResultAndroid.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroReceiptValidationResultIOS.kt +38 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroRequestPurchaseAndroid.kt +47 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroRequestPurchaseIos.kt +41 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroSubscriptionOffer.kt +32 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroSubscriptionRenewalInfo.kt +44 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/NitroSubscriptionStatus.kt +35 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_Boolean_NitroPurchaseResult.kt +42 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/iap/Variant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.kt +42 -0
- package/nitrogen/generated/ios/NitroIap+autolinking.rb +60 -0
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.cpp +152 -0
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Bridge.hpp +1061 -0
- package/nitrogen/generated/ios/NitroIap-Swift-Cxx-Umbrella.hpp +107 -0
- package/nitrogen/generated/ios/NitroIapAutolinking.mm +33 -0
- package/nitrogen/generated/ios/NitroIapAutolinking.swift +25 -0
- package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridRnIapSpecSwift.hpp +355 -0
- package/nitrogen/generated/ios/swift/Func_void.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_NitroProduct.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_NitroPurchase.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_NitroPurchaseResult.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_bool.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_NitroProduct_.swift +54 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_NitroPurchase_.swift +54 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_std__string_.swift +54 -0
- package/nitrogen/generated/ios/swift/Func_void_std__optional_std__vector_NitroSubscriptionStatus__.swift +54 -0
- package/nitrogen/generated/ios/swift/Func_void_std__string.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__variant_NitroReceiptValidationResultIOS__NitroReceiptValidationResultAndroid_.swift +59 -0
- package/nitrogen/generated/ios/swift/Func_void_std__variant_bool__NitroPurchaseResult_.swift +59 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_NitroProduct_.swift +47 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_NitroPurchase_.swift +47 -0
- package/nitrogen/generated/ios/swift/HybridRnIapSpec.swift +78 -0
- package/nitrogen/generated/ios/swift/HybridRnIapSpec_cxx.swift +750 -0
- package/nitrogen/generated/ios/swift/NitroAndroidReceiptValidationOptions.swift +80 -0
- package/nitrogen/generated/ios/swift/NitroAvailablePurchasesAndroidOptions.swift +54 -0
- package/nitrogen/generated/ios/swift/NitroAvailablePurchasesIosOptions.swift +116 -0
- package/nitrogen/generated/ios/swift/NitroAvailablePurchasesOptions.swift +84 -0
- package/nitrogen/generated/ios/swift/NitroFinishTransactionAndroidParams.swift +58 -0
- package/nitrogen/generated/ios/swift/NitroFinishTransactionIosParams.swift +35 -0
- package/nitrogen/generated/ios/swift/NitroFinishTransactionParams.swift +84 -0
- package/nitrogen/generated/ios/swift/NitroProduct.swift +653 -0
- package/nitrogen/generated/ios/swift/NitroPurchase.swift +453 -0
- package/nitrogen/generated/ios/swift/NitroPurchaseRequest.swift +84 -0
- package/nitrogen/generated/ios/swift/NitroPurchaseResult.swift +117 -0
- package/nitrogen/generated/ios/swift/NitroReceiptValidationParams.swift +65 -0
- package/nitrogen/generated/ios/swift/NitroReceiptValidationResultAndroid.swift +258 -0
- package/nitrogen/generated/ios/swift/NitroReceiptValidationResultIOS.swift +87 -0
- package/nitrogen/generated/ios/swift/NitroRequestPurchaseAndroid.swift +225 -0
- package/nitrogen/generated/ios/swift/NitroRequestPurchaseIos.swift +161 -0
- package/nitrogen/generated/ios/swift/NitroSubscriptionOffer.swift +46 -0
- package/nitrogen/generated/ios/swift/NitroSubscriptionRenewalInfo.swift +152 -0
- package/nitrogen/generated/ios/swift/NitroSubscriptionStatus.swift +76 -0
- package/nitrogen/generated/ios/swift/Variant_Bool_NitroPurchaseResult.swift +18 -0
- package/nitrogen/generated/ios/swift/Variant_NitroReceiptValidationResultIOS_NitroReceiptValidationResultAndroid.swift +18 -0
- package/nitrogen/generated/shared/c++/HybridRnIapSpec.cpp +50 -0
- package/nitrogen/generated/shared/c++/HybridRnIapSpec.hpp +125 -0
- package/nitrogen/generated/shared/c++/NitroAndroidReceiptValidationOptions.hpp +80 -0
- package/nitrogen/generated/shared/c++/NitroAvailablePurchasesAndroidOptions.hpp +68 -0
- package/nitrogen/generated/shared/c++/NitroAvailablePurchasesIosOptions.hpp +79 -0
- package/nitrogen/generated/shared/c++/NitroAvailablePurchasesOptions.hpp +76 -0
- package/nitrogen/generated/shared/c++/NitroFinishTransactionAndroidParams.hpp +72 -0
- package/nitrogen/generated/shared/c++/NitroFinishTransactionIosParams.hpp +67 -0
- package/nitrogen/generated/shared/c++/NitroFinishTransactionParams.hpp +76 -0
- package/nitrogen/generated/shared/c++/NitroProduct.hpp +168 -0
- package/nitrogen/generated/shared/c++/NitroPurchase.hpp +136 -0
- package/nitrogen/generated/shared/c++/NitroPurchaseRequest.hpp +76 -0
- package/nitrogen/generated/shared/c++/NitroPurchaseResult.hpp +84 -0
- package/nitrogen/generated/shared/c++/NitroReceiptValidationParams.hpp +74 -0
- package/nitrogen/generated/shared/c++/NitroReceiptValidationResultAndroid.hpp +136 -0
- package/nitrogen/generated/shared/c++/NitroReceiptValidationResultIOS.hpp +82 -0
- package/nitrogen/generated/shared/c++/NitroRequestPurchaseAndroid.hpp +95 -0
- package/nitrogen/generated/shared/c++/NitroRequestPurchaseIos.hpp +85 -0
- package/nitrogen/generated/shared/c++/NitroSubscriptionOffer.hpp +71 -0
- package/nitrogen/generated/shared/c++/NitroSubscriptionRenewalInfo.hpp +88 -0
- package/nitrogen/generated/shared/c++/NitroSubscriptionStatus.hpp +78 -0
- package/package.json +144 -104
- package/plugin/build/src/withIAP.d.ts +3 -0
- package/plugin/build/src/withIAP.js +81 -0
- package/plugin/build/tsconfig.tsbuildinfo +1 -0
- package/plugin/build/withIAP.d.ts +2 -7
- package/plugin/build/withIAP.js +62 -51
- package/plugin/src/withIAP.ts +119 -0
- package/plugin/tsconfig.json +18 -0
- package/plugin/tsconfig.tsbuildinfo +1 -0
- package/src/helpers/subscription.ts +65 -0
- package/src/hooks/useIAP.ts +361 -222
- package/src/index.ts +1194 -9
- package/src/specs/RnIap.nitro.ts +501 -0
- package/src/types.ts +680 -0
- package/src/utils/error.ts +97 -0
- package/src/utils/type-bridge.ts +209 -0
- package/LICENSE +0 -21
- package/RNIap.podspec +0 -36
- package/android/src/amazon/AndroidManifest.xml +0 -14
- package/android/src/amazon/java/com/dooboolab/rniap/EventSender.kt +0 -10
- package/android/src/amazon/java/com/dooboolab/rniap/PurchasingServiceProxy.kt +0 -29
- package/android/src/amazon/java/com/dooboolab/rniap/PurchasingServiceProxyAmazonImpl.kt +0 -31
- package/android/src/amazon/java/com/dooboolab/rniap/RNIapActivityListener.kt +0 -55
- package/android/src/amazon/java/com/dooboolab/rniap/RNIapAmazonListener.kt +0 -325
- package/android/src/amazon/java/com/dooboolab/rniap/RNIapAmazonModule.kt +0 -244
- package/android/src/amazon/java/com/dooboolab/rniap/RNIapPackage.kt +0 -17
- package/android/src/amazon/java/com/dooboolab/rniap/modifysubscription/RNIapAmazonModifySubscriptionListener.kt +0 -88
- package/android/src/amazon/java/com/dooboolab/rniap/utils/Extensions.kt +0 -22
- package/android/src/main/java/com/dooboolab/rniap/PromiseUtils.kt +0 -62
- package/android/src/main/java/com/dooboolab/rniap/PromiseUtlis.kt +0 -43
- package/android/src/play/java/com/dooboolab/rniap/PlayUtils.kt +0 -114
- package/android/src/play/java/com/dooboolab/rniap/RNIapActivityListener.kt +0 -15
- package/android/src/play/java/com/dooboolab/rniap/RNIapModule.kt +0 -911
- package/android/src/play/java/com/dooboolab/rniap/RNIapPackage.kt +0 -17
- package/android/src/testAmazon/java/com/dooboolab/rniap/RNIapAmazonModuleTest.kt +0 -170
- package/app.plugin.js +0 -1
- package/ios/IapSerializationUtils.swift +0 -290
- package/ios/IapTypes.swift +0 -56
- package/ios/IapUtils.swift +0 -40
- package/ios/LatestPromiseKeeper.swift +0 -52
- package/ios/RNIapIos-Bridging-Header.h +0 -2
- package/ios/RNIapIos.m +0 -69
- package/ios/RNIapIos.swift +0 -868
- package/ios/RNIapIos.xcodeproj/project.pbxproj +0 -289
- package/ios/RNIapIosSk2.m +0 -126
- package/ios/RNIapIosSk2.swift +0 -1413
- package/ios/ThreadSafe.swift +0 -18
- package/lib/commonjs/eventEmitter.js +0 -195
- package/lib/commonjs/eventEmitter.js.map +0 -1
- package/lib/commonjs/hooks/index.js +0 -17
- package/lib/commonjs/hooks/index.js.map +0 -1
- package/lib/commonjs/hooks/useIAP.js +0 -203
- package/lib/commonjs/hooks/useIAP.js.map +0 -1
- package/lib/commonjs/hooks/withIAPContext.js +0 -95
- package/lib/commonjs/hooks/withIAPContext.js.map +0 -1
- package/lib/commonjs/iap.js +0 -836
- package/lib/commonjs/iap.js.map +0 -1
- package/lib/commonjs/index.js +0 -105
- package/lib/commonjs/index.js.map +0 -1
- package/lib/commonjs/internal/enhancedFetch.js +0 -26
- package/lib/commonjs/internal/enhancedFetch.js.map +0 -1
- package/lib/commonjs/internal/fillProductsWithAdditionalData.js +0 -50
- package/lib/commonjs/internal/fillProductsWithAdditionalData.js.map +0 -1
- package/lib/commonjs/internal/index.js +0 -39
- package/lib/commonjs/internal/index.js.map +0 -1
- package/lib/commonjs/internal/platform.js +0 -119
- package/lib/commonjs/internal/platform.js.map +0 -1
- package/lib/commonjs/modules/amazon.js +0 -50
- package/lib/commonjs/modules/amazon.js.map +0 -1
- package/lib/commonjs/modules/android.js +0 -92
- package/lib/commonjs/modules/android.js.map +0 -1
- package/lib/commonjs/modules/common.js +0 -2
- package/lib/commonjs/modules/index.js +0 -50
- package/lib/commonjs/modules/index.js.map +0 -1
- package/lib/commonjs/modules/ios.js +0 -160
- package/lib/commonjs/modules/ios.js.map +0 -1
- package/lib/commonjs/modules/iosSk2.js +0 -113
- package/lib/commonjs/modules/iosSk2.js.map +0 -1
- package/lib/commonjs/purchaseError.js +0 -170
- package/lib/commonjs/purchaseError.js.map +0 -1
- package/lib/commonjs/types/amazon.js +0 -2
- package/lib/commonjs/types/amazon.js.map +0 -1
- package/lib/commonjs/types/android.js +0 -67
- package/lib/commonjs/types/android.js.map +0 -1
- package/lib/commonjs/types/apple.js +0 -24
- package/lib/commonjs/types/apple.js.map +0 -1
- package/lib/commonjs/types/appleSk2.js +0 -137
- package/lib/commonjs/types/appleSk2.js.map +0 -1
- package/lib/commonjs/types/index.js +0 -67
- package/lib/commonjs/types/index.js.map +0 -1
- package/lib/commonjs/utils/errorMapping.js +0 -83
- package/lib/commonjs/utils/errorMapping.js.map +0 -1
- package/lib/commonjs/utils/typeGuards.js +0 -74
- package/lib/commonjs/utils/typeGuards.js.map +0 -1
- package/lib/module/eventEmitter.js +0 -185
- package/lib/module/eventEmitter.js.map +0 -1
- package/lib/module/hooks/index.js +0 -2
- package/lib/module/hooks/index.js.map +0 -1
- package/lib/module/hooks/withIAPContext.js +0 -86
- package/lib/module/hooks/withIAPContext.js.map +0 -1
- package/lib/module/iap.js +0 -805
- package/lib/module/iap.js.map +0 -1
- package/lib/module/internal/enhancedFetch.js +0 -19
- package/lib/module/internal/enhancedFetch.js.map +0 -1
- package/lib/module/internal/fillProductsWithAdditionalData.js +0 -43
- package/lib/module/internal/fillProductsWithAdditionalData.js.map +0 -1
- package/lib/module/internal/index.js +0 -4
- package/lib/module/internal/index.js.map +0 -1
- package/lib/module/internal/platform.js +0 -102
- package/lib/module/internal/platform.js.map +0 -1
- package/lib/module/modules/amazon.js +0 -42
- package/lib/module/modules/amazon.js.map +0 -1
- package/lib/module/modules/android.js +0 -81
- package/lib/module/modules/android.js.map +0 -1
- package/lib/module/modules/common.js +0 -2
- package/lib/module/modules/common.js.map +0 -1
- package/lib/module/modules/index.js +0 -5
- package/lib/module/modules/index.js.map +0 -1
- package/lib/module/modules/ios.js +0 -145
- package/lib/module/modules/ios.js.map +0 -1
- package/lib/module/modules/iosSk2.js +0 -96
- package/lib/module/modules/iosSk2.js.map +0 -1
- package/lib/module/purchaseError.js +0 -164
- package/lib/module/purchaseError.js.map +0 -1
- package/lib/module/types/amazon.js +0 -2
- package/lib/module/types/amazon.js.map +0 -1
- package/lib/module/types/android.js +0 -63
- package/lib/module/types/android.js.map +0 -1
- package/lib/module/types/apple.js +0 -17
- package/lib/module/types/apple.js.map +0 -1
- package/lib/module/types/appleSk2.js +0 -129
- package/lib/module/types/appleSk2.js.map +0 -1
- package/lib/module/types/index.js +0 -75
- package/lib/module/types/index.js.map +0 -1
- package/lib/module/utils/errorMapping.js +0 -75
- package/lib/module/utils/errorMapping.js.map +0 -1
- package/lib/module/utils/typeGuards.js +0 -61
- package/lib/module/utils/typeGuards.js.map +0 -1
- package/lib/typescript/src/eventEmitter.d.ts +0 -151
- package/lib/typescript/src/eventEmitter.d.ts.map +0 -1
- package/lib/typescript/src/hooks/index.d.ts +0 -2
- package/lib/typescript/src/hooks/index.d.ts.map +0 -1
- package/lib/typescript/src/hooks/withIAPContext.d.ts +0 -27
- package/lib/typescript/src/hooks/withIAPContext.d.ts.map +0 -1
- package/lib/typescript/src/iap.d.ts +0 -503
- package/lib/typescript/src/iap.d.ts.map +0 -1
- package/lib/typescript/src/internal/enhancedFetch.d.ts +0 -6
- package/lib/typescript/src/internal/enhancedFetch.d.ts.map +0 -1
- package/lib/typescript/src/internal/fillProductsWithAdditionalData.d.ts +0 -7
- package/lib/typescript/src/internal/fillProductsWithAdditionalData.d.ts.map +0 -1
- package/lib/typescript/src/internal/index.d.ts +0 -4
- package/lib/typescript/src/internal/index.d.ts.map +0 -1
- package/lib/typescript/src/internal/platform.d.ts +0 -27
- package/lib/typescript/src/internal/platform.d.ts.map +0 -1
- package/lib/typescript/src/modules/amazon.d.ts +0 -55
- package/lib/typescript/src/modules/amazon.d.ts.map +0 -1
- package/lib/typescript/src/modules/android.d.ts +0 -74
- package/lib/typescript/src/modules/android.d.ts.map +0 -1
- package/lib/typescript/src/modules/common.d.ts +0 -14
- package/lib/typescript/src/modules/common.d.ts.map +0 -1
- package/lib/typescript/src/modules/index.d.ts +0 -5
- package/lib/typescript/src/modules/index.d.ts.map +0 -1
- package/lib/typescript/src/modules/ios.d.ts +0 -117
- package/lib/typescript/src/modules/ios.d.ts.map +0 -1
- package/lib/typescript/src/modules/iosSk2.d.ts +0 -140
- package/lib/typescript/src/modules/iosSk2.d.ts.map +0 -1
- package/lib/typescript/src/purchaseError.d.ts +0 -133
- package/lib/typescript/src/purchaseError.d.ts.map +0 -1
- package/lib/typescript/src/types/amazon.d.ts +0 -33
- package/lib/typescript/src/types/amazon.d.ts.map +0 -1
- package/lib/typescript/src/types/android.d.ts +0 -66
- package/lib/typescript/src/types/android.d.ts.map +0 -1
- package/lib/typescript/src/types/apple.d.ts +0 -27
- package/lib/typescript/src/types/apple.d.ts.map +0 -1
- package/lib/typescript/src/types/appleSk2.d.ts +0 -129
- package/lib/typescript/src/types/appleSk2.d.ts.map +0 -1
- package/lib/typescript/src/types/index.d.ts +0 -302
- package/lib/typescript/src/types/index.d.ts.map +0 -1
- package/lib/typescript/src/utils/errorMapping.d.ts +0 -29
- package/lib/typescript/src/utils/errorMapping.d.ts.map +0 -1
- package/lib/typescript/src/utils/typeGuards.d.ts +0 -53
- package/lib/typescript/src/utils/typeGuards.d.ts.map +0 -1
- package/src/eventEmitter.ts +0 -212
- package/src/hooks/index.ts +0 -1
- package/src/hooks/withIAPContext.tsx +0 -179
- package/src/iap.ts +0 -1046
- package/src/internal/enhancedFetch.ts +0 -25
- package/src/internal/fillProductsWithAdditionalData.ts +0 -47
- package/src/internal/index.ts +0 -3
- package/src/internal/platform.ts +0 -135
- package/src/modules/amazon.ts +0 -94
- package/src/modules/android.ts +0 -179
- package/src/modules/common.ts +0 -16
- package/src/modules/index.ts +0 -4
- package/src/modules/ios.ts +0 -229
- package/src/modules/iosSk2.ts +0 -194
- package/src/purchaseError.ts +0 -196
- package/src/types/amazon.ts +0 -40
- package/src/types/android.ts +0 -89
- package/src/types/apple.ts +0 -44
- package/src/types/appleSk2.ts +0 -275
- package/src/types/index.ts +0 -379
- package/src/utils/errorMapping.ts +0 -88
- package/src/utils/typeGuards.ts +0 -90
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
package com.margelo.nitro.iap;
|
|
2
|
+
|
|
3
|
+
import android.util.Log;
|
|
4
|
+
|
|
5
|
+
import androidx.annotation.Nullable;
|
|
6
|
+
|
|
7
|
+
import com.facebook.react.bridge.NativeModule;
|
|
8
|
+
import com.facebook.react.bridge.ReactApplicationContext;
|
|
9
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider;
|
|
10
|
+
import com.facebook.react.TurboReactPackage;
|
|
11
|
+
import com.margelo.nitro.core.HybridObject;
|
|
12
|
+
|
|
13
|
+
import java.util.HashMap;
|
|
14
|
+
import java.util.function.Supplier;
|
|
15
|
+
|
|
16
|
+
public class NitroIapPackage extends TurboReactPackage {
|
|
17
|
+
@Nullable
|
|
18
|
+
@Override
|
|
19
|
+
public NativeModule getModule(String name, ReactApplicationContext reactContext) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@Override
|
|
24
|
+
public ReactModuleInfoProvider getReactModuleInfoProvider() {
|
|
25
|
+
return () -> {
|
|
26
|
+
return new HashMap<>();
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
static {
|
|
31
|
+
NitroIapOnLoad.initializeNative();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
package com.margelo.nitro.iap
|
|
2
|
+
|
|
3
|
+
import com.android.billingclient.api.BillingClient
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Error codes for IAP operations - centralized error code management
|
|
7
|
+
* Single source of truth for all error codes used across the module
|
|
8
|
+
*/
|
|
9
|
+
object IapErrorCode {
|
|
10
|
+
// Connection and initialization errors
|
|
11
|
+
const val E_NOT_PREPARED = "E_NOT_PREPARED"
|
|
12
|
+
const val E_INIT_CONNECTION = "E_INIT_CONNECTION"
|
|
13
|
+
const val E_SERVICE_DISCONNECTED = "E_SERVICE_DISCONNECTED"
|
|
14
|
+
const val E_ALREADY_PREPARED = "E_ALREADY_PREPARED"
|
|
15
|
+
const val E_CONNECTION_CLOSED = "E_CONNECTION_CLOSED"
|
|
16
|
+
|
|
17
|
+
// Product and purchase errors
|
|
18
|
+
const val E_QUERY_PRODUCT = "E_QUERY_PRODUCT"
|
|
19
|
+
const val E_SKU_NOT_FOUND = "E_SKU_NOT_FOUND"
|
|
20
|
+
const val E_SKU_OFFER_MISMATCH = "E_SKU_OFFER_MISMATCH"
|
|
21
|
+
const val E_PURCHASE_ERROR = "E_PURCHASE_ERROR"
|
|
22
|
+
const val E_USER_CANCELLED = "E_USER_CANCELLED"
|
|
23
|
+
const val E_PENDING = "E_PENDING"
|
|
24
|
+
|
|
25
|
+
// Service and developer errors
|
|
26
|
+
const val E_SERVICE_ERROR = "E_SERVICE_ERROR"
|
|
27
|
+
const val E_DEVELOPER_ERROR = "E_DEVELOPER_ERROR"
|
|
28
|
+
const val E_ITEM_UNAVAILABLE = "E_ITEM_UNAVAILABLE"
|
|
29
|
+
const val E_ALREADY_OWNED = "E_ALREADY_OWNED"
|
|
30
|
+
const val E_ITEM_NOT_OWNED = "E_ITEM_NOT_OWNED"
|
|
31
|
+
|
|
32
|
+
// Network and billing errors
|
|
33
|
+
const val E_NETWORK_ERROR = "E_NETWORK_ERROR"
|
|
34
|
+
const val E_BILLING_UNAVAILABLE = "E_BILLING_UNAVAILABLE"
|
|
35
|
+
const val E_FEATURE_NOT_SUPPORTED = "E_FEATURE_NOT_SUPPORTED"
|
|
36
|
+
const val E_BILLING_RESPONSE_JSON_PARSE_ERROR = "E_BILLING_RESPONSE_JSON_PARSE_ERROR"
|
|
37
|
+
|
|
38
|
+
// Activity and UI errors
|
|
39
|
+
const val E_ACTIVITY_UNAVAILABLE = "E_ACTIVITY_UNAVAILABLE"
|
|
40
|
+
|
|
41
|
+
// User and remote errors
|
|
42
|
+
const val E_USER_ERROR = "E_USER_ERROR"
|
|
43
|
+
const val E_REMOTE_ERROR = "E_REMOTE_ERROR"
|
|
44
|
+
const val E_NOT_ENDED = "E_NOT_ENDED"
|
|
45
|
+
|
|
46
|
+
// Validation errors
|
|
47
|
+
const val E_EMPTY_SKU_LIST = "E_EMPTY_SKU_LIST"
|
|
48
|
+
const val E_RECEIPT_FAILED = "E_RECEIPT_FAILED"
|
|
49
|
+
|
|
50
|
+
// Unknown error
|
|
51
|
+
const val E_UNKNOWN = "E_UNKNOWN"
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Data class for billing error information
|
|
56
|
+
*/
|
|
57
|
+
data class BillingErrorData(
|
|
58
|
+
val code: String,
|
|
59
|
+
val message: String
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Helper object for billing response handling
|
|
64
|
+
*/
|
|
65
|
+
object BillingUtils {
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Get error data from billing response code
|
|
69
|
+
*/
|
|
70
|
+
fun getBillingErrorData(responseCode: Int): BillingErrorData {
|
|
71
|
+
return when (responseCode) {
|
|
72
|
+
BillingClient.BillingResponseCode.OK ->
|
|
73
|
+
BillingErrorData("OK", "Success")
|
|
74
|
+
|
|
75
|
+
BillingClient.BillingResponseCode.USER_CANCELED ->
|
|
76
|
+
BillingErrorData(IapErrorCode.E_USER_CANCELLED, "User cancelled the purchase")
|
|
77
|
+
|
|
78
|
+
BillingClient.BillingResponseCode.SERVICE_UNAVAILABLE ->
|
|
79
|
+
BillingErrorData(IapErrorCode.E_SERVICE_ERROR, "Network connection is down")
|
|
80
|
+
|
|
81
|
+
BillingClient.BillingResponseCode.BILLING_UNAVAILABLE ->
|
|
82
|
+
BillingErrorData(IapErrorCode.E_BILLING_UNAVAILABLE, "Billing API version is not supported for the type requested")
|
|
83
|
+
|
|
84
|
+
BillingClient.BillingResponseCode.ITEM_UNAVAILABLE ->
|
|
85
|
+
BillingErrorData(IapErrorCode.E_ITEM_UNAVAILABLE, "Requested product is not available for purchase")
|
|
86
|
+
|
|
87
|
+
BillingClient.BillingResponseCode.DEVELOPER_ERROR ->
|
|
88
|
+
BillingErrorData(IapErrorCode.E_DEVELOPER_ERROR, "Invalid arguments provided to the API")
|
|
89
|
+
|
|
90
|
+
BillingClient.BillingResponseCode.ERROR ->
|
|
91
|
+
BillingErrorData(IapErrorCode.E_UNKNOWN, "Fatal error during the API action")
|
|
92
|
+
|
|
93
|
+
BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED ->
|
|
94
|
+
BillingErrorData(IapErrorCode.E_ALREADY_OWNED, "Failure to purchase since item is already owned")
|
|
95
|
+
|
|
96
|
+
BillingClient.BillingResponseCode.ITEM_NOT_OWNED ->
|
|
97
|
+
BillingErrorData(IapErrorCode.E_ITEM_NOT_OWNED, "Failure to consume since item is not owned")
|
|
98
|
+
|
|
99
|
+
BillingClient.BillingResponseCode.SERVICE_DISCONNECTED ->
|
|
100
|
+
BillingErrorData(IapErrorCode.E_SERVICE_DISCONNECTED, "Play Store service is not connected now")
|
|
101
|
+
|
|
102
|
+
BillingClient.BillingResponseCode.FEATURE_NOT_SUPPORTED ->
|
|
103
|
+
BillingErrorData(IapErrorCode.E_FEATURE_NOT_SUPPORTED, "The requested feature is not supported by Play Store on the current device")
|
|
104
|
+
|
|
105
|
+
BillingClient.BillingResponseCode.NETWORK_ERROR ->
|
|
106
|
+
BillingErrorData(IapErrorCode.E_NETWORK_ERROR, "A network error occurred during the operation")
|
|
107
|
+
|
|
108
|
+
else ->
|
|
109
|
+
BillingErrorData(IapErrorCode.E_UNKNOWN, "Unknown billing error (code: $responseCode)")
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Get error message for Google Play Services availability
|
|
115
|
+
*/
|
|
116
|
+
fun getPlayServicesErrorMessage(resultCode: Int): String {
|
|
117
|
+
return when (resultCode) {
|
|
118
|
+
com.google.android.gms.common.ConnectionResult.SERVICE_MISSING ->
|
|
119
|
+
"Google Play Services is missing on this device"
|
|
120
|
+
|
|
121
|
+
com.google.android.gms.common.ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED ->
|
|
122
|
+
"Google Play Services needs to be updated"
|
|
123
|
+
|
|
124
|
+
com.google.android.gms.common.ConnectionResult.SERVICE_DISABLED ->
|
|
125
|
+
"Google Play Services is disabled"
|
|
126
|
+
|
|
127
|
+
com.google.android.gms.common.ConnectionResult.SERVICE_INVALID ->
|
|
128
|
+
"Google Play Services is invalid"
|
|
129
|
+
|
|
130
|
+
else ->
|
|
131
|
+
"Google Play Services is not available (error code: $resultCode)"
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Create JSON error string from error data and additional info
|
|
137
|
+
*/
|
|
138
|
+
fun createErrorJson(
|
|
139
|
+
code: String,
|
|
140
|
+
message: String,
|
|
141
|
+
responseCode: Int? = null,
|
|
142
|
+
debugMessage: String? = null,
|
|
143
|
+
productId: String? = null,
|
|
144
|
+
additionalData: Map<String, Any> = emptyMap()
|
|
145
|
+
): String {
|
|
146
|
+
val errorMap = mutableMapOf<String, Any>(
|
|
147
|
+
"code" to code,
|
|
148
|
+
"message" to message
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
responseCode?.let { errorMap["responseCode"] = it }
|
|
152
|
+
debugMessage?.let { errorMap["debugMessage"] = it }
|
|
153
|
+
productId?.let { errorMap["productId"] = it }
|
|
154
|
+
errorMap.putAll(additionalData)
|
|
155
|
+
|
|
156
|
+
return try {
|
|
157
|
+
// Simple JSON serialization for basic types
|
|
158
|
+
val jsonPairs = errorMap.map { (key, value) ->
|
|
159
|
+
val valueStr = when (value) {
|
|
160
|
+
is String -> "\"${value.replace("\"", "\\\"")}\""
|
|
161
|
+
is Number -> value.toString()
|
|
162
|
+
is Boolean -> value.toString()
|
|
163
|
+
else -> "\"$value\""
|
|
164
|
+
}
|
|
165
|
+
"\"$key\":$valueStr"
|
|
166
|
+
}
|
|
167
|
+
"{${jsonPairs.joinToString(",")}}"
|
|
168
|
+
} catch (e: Exception) {
|
|
169
|
+
// Fallback to simple format
|
|
170
|
+
"$code: $message"
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
package/ios/Bridge.h
ADDED
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import StoreKit
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Error utilities for iOS IAP operations
|
|
6
|
+
* Provides centralized error handling and JSON error formatting
|
|
7
|
+
* Matches the error codes from existing react-native-iap implementations
|
|
8
|
+
*/
|
|
9
|
+
struct IapErrorCode {
|
|
10
|
+
// Constants for code usage - safe pattern without force unwrapping
|
|
11
|
+
static let unknown = "E_UNKNOWN"
|
|
12
|
+
static let serviceError = "E_SERVICE_ERROR"
|
|
13
|
+
static let userCancelled = "E_USER_CANCELLED"
|
|
14
|
+
static let userError = "E_USER_ERROR"
|
|
15
|
+
static let itemUnavailable = "E_ITEM_UNAVAILABLE"
|
|
16
|
+
static let remoteError = "E_REMOTE_ERROR"
|
|
17
|
+
static let networkError = "E_NETWORK_ERROR"
|
|
18
|
+
static let receiptFailed = "E_RECEIPT_FAILED"
|
|
19
|
+
static let receiptFinishedFailed = "E_RECEIPT_FINISHED_FAILED"
|
|
20
|
+
static let notPrepared = "E_NOT_PREPARED"
|
|
21
|
+
static let notEnded = "E_NOT_ENDED"
|
|
22
|
+
static let alreadyOwned = "E_ALREADY_OWNED"
|
|
23
|
+
static let developerError = "E_DEVELOPER_ERROR"
|
|
24
|
+
static let purchaseError = "E_PURCHASE_ERROR"
|
|
25
|
+
static let syncError = "E_SYNC_ERROR"
|
|
26
|
+
static let deferredPayment = "E_DEFERRED_PAYMENT"
|
|
27
|
+
static let transactionValidationFailed = "E_TRANSACTION_VALIDATION_FAILED"
|
|
28
|
+
static let billingResponseJsonParseError = "E_BILLING_RESPONSE_JSON_PARSE_ERROR"
|
|
29
|
+
static let interrupted = "E_INTERRUPTED"
|
|
30
|
+
static let iapNotAvailable = "E_IAP_NOT_AVAILABLE"
|
|
31
|
+
static let activityUnavailable = "E_ACTIVITY_UNAVAILABLE"
|
|
32
|
+
static let alreadyPrepared = "E_ALREADY_PREPARED"
|
|
33
|
+
static let pending = "E_PENDING"
|
|
34
|
+
static let connectionClosed = "E_CONNECTION_CLOSED"
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Error data structure for iOS IAP errors
|
|
39
|
+
*/
|
|
40
|
+
struct IapErrorData {
|
|
41
|
+
let code: String
|
|
42
|
+
let message: String
|
|
43
|
+
|
|
44
|
+
init(code: String, message: String) {
|
|
45
|
+
self.code = code
|
|
46
|
+
self.message = message
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Helper class for iOS error handling
|
|
52
|
+
*/
|
|
53
|
+
@available(iOS 15.0, *)
|
|
54
|
+
class ErrorUtils {
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Get error data from StoreKit error
|
|
58
|
+
*/
|
|
59
|
+
static func getStoreKitErrorData(_ error: Error) -> IapErrorData {
|
|
60
|
+
if let storeKitError = error as? StoreKitError {
|
|
61
|
+
return getStoreKitErrorData(storeKitError)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Handle other error types
|
|
65
|
+
if error is CancellationError {
|
|
66
|
+
return IapErrorData(code: IapErrorCode.userCancelled, message: "Purchase was cancelled")
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Fallback for unknown errors
|
|
70
|
+
return IapErrorData(code: IapErrorCode.unknown, message: error.localizedDescription)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Get error data from specific StoreKitError
|
|
75
|
+
*/
|
|
76
|
+
static func getStoreKitErrorData(_ error: StoreKitError) -> IapErrorData {
|
|
77
|
+
switch error {
|
|
78
|
+
case .userCancelled:
|
|
79
|
+
return IapErrorData(code: IapErrorCode.userCancelled, message: "User cancelled the purchase")
|
|
80
|
+
case .networkError:
|
|
81
|
+
return IapErrorData(code: IapErrorCode.networkError, message: "Network error occurred during purchase")
|
|
82
|
+
case .systemError:
|
|
83
|
+
return IapErrorData(code: IapErrorCode.serviceError, message: "System error occurred")
|
|
84
|
+
case .notAvailableInStorefront:
|
|
85
|
+
return IapErrorData(code: IapErrorCode.itemUnavailable, message: "Product not available in current storefront")
|
|
86
|
+
case .notEntitled:
|
|
87
|
+
return IapErrorData(code: IapErrorCode.alreadyOwned, message: "User not entitled to this product")
|
|
88
|
+
default:
|
|
89
|
+
return IapErrorData(code: IapErrorCode.unknown, message: "Unknown StoreKit error: \\(error.localizedDescription)")
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Create JSON error string from error data
|
|
95
|
+
*/
|
|
96
|
+
static func createErrorJson(
|
|
97
|
+
code: String,
|
|
98
|
+
message: String,
|
|
99
|
+
underlyingError: Error? = nil,
|
|
100
|
+
productId: String? = nil,
|
|
101
|
+
additionalData: [String: Any] = [:]
|
|
102
|
+
) -> String {
|
|
103
|
+
var errorMap: [String: Any] = [
|
|
104
|
+
"code": code,
|
|
105
|
+
"message": message
|
|
106
|
+
]
|
|
107
|
+
|
|
108
|
+
if let error = underlyingError {
|
|
109
|
+
errorMap["underlyingError"] = error.localizedDescription
|
|
110
|
+
|
|
111
|
+
// Add NSError specific information if available
|
|
112
|
+
if let nsError = error as NSError? {
|
|
113
|
+
errorMap["domain"] = nsError.domain
|
|
114
|
+
errorMap["errorCode"] = nsError.code
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if let productId = productId {
|
|
119
|
+
errorMap["productId"] = productId
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Add any additional data
|
|
123
|
+
for (key, value) in additionalData {
|
|
124
|
+
errorMap[key] = value
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Convert to JSON
|
|
128
|
+
do {
|
|
129
|
+
let jsonData = try JSONSerialization.data(withJSONObject: errorMap, options: [])
|
|
130
|
+
if let jsonString = String(data: jsonData, encoding: .utf8) {
|
|
131
|
+
return jsonString
|
|
132
|
+
}
|
|
133
|
+
} catch {
|
|
134
|
+
print("[ErrorUtils] Failed to serialize error to JSON: \\(error)")
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Fallback to simple format
|
|
138
|
+
return "\\(code): \\(message)"
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Create JSON error string from Swift Error
|
|
143
|
+
*/
|
|
144
|
+
static func createErrorJson(from error: Error, productId: String? = nil) -> String {
|
|
145
|
+
let errorData = getStoreKitErrorData(error)
|
|
146
|
+
return createErrorJson(
|
|
147
|
+
code: errorData.code,
|
|
148
|
+
message: errorData.message,
|
|
149
|
+
underlyingError: error,
|
|
150
|
+
productId: productId
|
|
151
|
+
)
|
|
152
|
+
}
|
|
153
|
+
}
|