framepayments-react-native 1.0.1 → 2.0.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 +434 -71
- package/android/.gradle/8.9/checksums/checksums.lock +0 -0
- package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
- package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/8.9/gc.properties +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
- package/android/.gradle/vcs-1/gc.properties +0 -0
- package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/results.bin +1 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/BuildConfig.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameCheckoutActivity$Companion.dex +0 -0
- package/android/build/.transforms/{3db830673120be833016e77c88c53305/transformed/debug → 5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex}/com/framepayments/reactnativeframe/FrameCheckoutActivity$tryShowCheckout$1.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameCheckoutActivity.dex +0 -0
- package/android/build/.transforms/{3db830673120be833016e77c88c53305/transformed/debug → 5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex}/com/framepayments/reactnativeframe/FrameFlowActivity$CartItemDto.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameFlowActivity$Companion.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameFlowActivity$parseCartItems$type$1.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameFlowActivity.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameGooglePayActivity$Companion.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameGooglePayActivity.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameOnboardingActivity$Companion.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameOnboardingActivity$parseCapabilities$type$1.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameOnboardingActivity.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameSDKModule$Companion.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameSDKModule.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameSDKPackage.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/JsonConvertersKt.dex +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameCheckoutActivity$$InternalSyntheticLambda$2$28045340ca5b91151bb937065eeb5817c0f8f911bb460e6e7ed8bb228b67ee83$0.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameFlowActivity$$InternalSyntheticLambda$2$467cdf1dabffeaa07b76e313efb66791f50d3ff264e427e91d1358ac5865a7a9$0.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameFlowActivity$$InternalSyntheticLambda$2$d15cc37cc08a853958a9c0baad49f7fce1ef84e92db9baa5103646939a0fe3e5$0.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameFlowActivity$$InternalSyntheticLambda$2$ee6ef8e6758d1b8e67a54e3fecfb200ac5e867541a69809ec1db49f74ffcada1$0.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameGooglePayActivity$$InternalSyntheticLambda$2$46cecf303f126f7c9f20b615fc49b2714ec2eb4f046ae009cfdbce53a1759f18$0.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameGooglePayActivity$$InternalSyntheticLambda$2$46cecf303f126f7c9f20b615fc49b2714ec2eb4f046ae009cfdbce53a1759f18$1.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameGooglePayActivity$$InternalSyntheticLambda$2$46cecf303f126f7c9f20b615fc49b2714ec2eb4f046ae009cfdbce53a1759f18$2.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameGooglePayActivity$$InternalSyntheticLambda$2$cdad629ad452b3c7f7de1310d225629dafa75285ad515d55f056371066170154$0.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameOnboardingActivity$$InternalSyntheticLambda$2$5d91d018c63f48735ba5e2a00b14bd815f4ce248aa924e4a58bf6addce311837$0.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameOnboardingActivity$$InternalSyntheticLambda$2$c9ac604bc80e3afcbfad7417717ae97568874f4e33246863c0d688abb3e89865$0.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameSDKModule$$InternalSyntheticLambda$2$1f479ca48bf3a1c66ff65b38aaaef67a97119b29ddce703f8104188682007f0d$0.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameSDKModule$$InternalSyntheticLambda$2$984ab30558bc904ed37602fa6e3ebf28f1ed69df6712b31b00c4f26fc26d3b70$0.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameSDKModule$$InternalSyntheticLambda$2$f4a55b70e496f422e1e03998843d62c7208f0229c2d5d080706056e98810c892$0.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameSDKModule$$InternalSyntheticLambda$2$f8d46f7169c404d37a1d505f19439b83090fbed62b5bdaf1e86717fdddebf622$0.globals +0 -0
- package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameSDKModule$$InternalSyntheticLambda$2$f8d46f7169c404d37a1d505f19439b83090fbed62b5bdaf1e86717fdddebf622$1.globals +0 -0
- package/android/build/generated/source/buildConfig/debug/com/framepayments/reactnativeframe/BuildConfig.java +10 -0
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +26 -0
- package/android/build/intermediates/aar_metadata/debug/{aar-metadata.properties → writeDebugAarMetadata/aar-metadata.properties} +2 -1
- package/android/build/intermediates/android_res_source_set_path_map/debug/mapDebugSourceSetPaths/file-map.txt +10 -0
- package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
- package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
- package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +2 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -1
- package/android/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values/values.xml +10 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +6 -1
- package/android/build/intermediates/incremental/{packageDebugAssets → mergeDebugAssets}/merger.xml +1 -1
- package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/framepayments-react-native_debug.kotlin_module +0 -0
- package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/framepayments/reactnativeframe/BuildConfig.class +0 -0
- package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +4 -0
- package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +45 -0
- package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +26 -0
- package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +1 -0
- package/android/build/intermediates/packaged_res/debug/packageDebugResources/values/values.xml +10 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/framepayments-react-native_debug.kotlin_module +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/BuildConfig.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameCheckoutActivity$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameCheckoutActivity$tryShowCheckout$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameCheckoutActivity.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameFlowActivity$CartItemDto.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameFlowActivity$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameFlowActivity$parseCartItems$type$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameFlowActivity.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameGooglePayActivity$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameGooglePayActivity.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameOnboardingActivity$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameOnboardingActivity$parseCapabilities$type$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameOnboardingActivity.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameSDKModule$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameSDKModule.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameSDKPackage.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/JsonConvertersKt.class +0 -0
- package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +3 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +1 -1
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
- package/android/build/outputs/logs/manifest-merger-debug-report.txt +21 -5
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build/tmp/kotlin-classes/debug/META-INF/framepayments-react-native_debug.kotlin_module +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameCheckoutActivity$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameCheckoutActivity$tryShowCheckout$1.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameCheckoutActivity.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameFlowActivity$CartItemDto.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameFlowActivity$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameFlowActivity$parseCartItems$type$1.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameFlowActivity.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameGooglePayActivity$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameGooglePayActivity.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameOnboardingActivity$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameOnboardingActivity$parseCapabilities$type$1.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameOnboardingActivity.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameSDKModule$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameSDKModule.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameSDKPackage.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/JsonConvertersKt.class +0 -0
- package/android/build.gradle +22 -24
- package/android/src/main/AndroidManifest.xml +10 -2
- package/android/src/main/java/com/framepayments/reactnativeframe/FrameFlowActivity.kt +2 -2
- package/android/src/main/java/com/framepayments/reactnativeframe/FrameGooglePayActivity.kt +148 -0
- package/android/src/main/java/com/framepayments/reactnativeframe/FrameOnboardingActivity.kt +68 -0
- package/android/src/main/java/com/framepayments/reactnativeframe/FrameSDKModule.kt +115 -33
- package/android/src/main/java/com/framepayments/reactnativeframe/JsonConverters.kt +39 -0
- package/android/src/main/res/values/frame_styles.xml +15 -0
- package/ios/ApplePayPresenter.swift +155 -0
- package/ios/FrameReactNative.podspec +10 -4
- package/ios/FrameSDKBridge.m +33 -4
- package/ios/FrameSDKBridge.swift +160 -26
- package/lib/components/FrameApplePayButton.d.ts +30 -0
- package/lib/components/FrameApplePayButton.d.ts.map +1 -0
- package/lib/components/FrameApplePayButton.js +42 -0
- package/lib/components/FrameGooglePayButton.d.ts +28 -0
- package/lib/components/FrameGooglePayButton.d.ts.map +1 -0
- package/lib/components/FrameGooglePayButton.js +24 -0
- package/lib/components/index.d.ts +5 -0
- package/lib/components/index.d.ts.map +1 -0
- package/lib/components/index.js +2 -0
- package/lib/index.d.ts +9 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +13 -4
- package/lib/native.d.ts +9 -2
- package/lib/native.d.ts.map +1 -1
- package/lib/native.js +28 -4
- package/lib/types.d.ts +102 -7
- package/lib/types.d.ts.map +1 -1
- package/package.json +10 -15
- package/src/__tests__/native.test.ts +51 -14
- package/src/index.ts +44 -5
- package/src/native.ts +71 -6
- package/src/types.ts +133 -7
- package/android/build/.transforms/3db830673120be833016e77c88c53305/results.bin +0 -1
- package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameCheckoutActivity$Companion.dex +0 -0
- package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameCheckoutActivity.dex +0 -0
- package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameFlowActivity$Companion.dex +0 -0
- package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameFlowActivity$parseCartItems$type$1.dex +0 -0
- package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameFlowActivity.dex +0 -0
- package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameSDKModule.dex +0 -0
- package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameSDKPackage.dex +0 -0
- package/android/build/.transforms/e32bd1e24a69eac3ebaf0c3a5e659207/results.bin +0 -1
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +0 -18
- package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
- package/android/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
- package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
- package/android/build/intermediates/java_res/debug/out/META-INF/framepayments-react-native_debug.kotlin_module +0 -0
- package/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +0 -2
- package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +0 -27
- package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +0 -18
- package/android/build/intermediates/runtime_library_classes_dir/debug/META-INF/framepayments-react-native_debug.kotlin_module +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/com/framepayments/reactnativeframe/FrameSDKModule.class +0 -0
- package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
- package/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +0 -1
- package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
- /package/android/{build/intermediates/compile_symbol_list/debug/R.txt → .gradle/8.9/dependencies-accessors/gc.properties} +0 -0
- /package/android/build/.transforms/{3db830673120be833016e77c88c53305/transformed/debug → 5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug}/desugar_graph.bin +0 -0
- /package/android/build/intermediates/aapt_friendly_merged_manifests/debug/{aapt → processDebugManifest/aapt}/output-metadata.json +0 -0
- /package/android/build/intermediates/annotation_processor_list/debug/{annotationProcessors.json → javaPreCompileDebug/annotationProcessors.json} +0 -0
- /package/android/build/intermediates/navigation_json/debug/{navigation.json → extractDeepLinksDebug/navigation.json} +0 -0
package/README.md
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
# Frame React Native SDK
|
|
2
2
|
|
|
3
|
-
React Native SDK for [Frame Payments](https://framepayments.com).
|
|
3
|
+
React Native SDK for [Frame Payments](https://framepayments.com). Bridges the native Frame iOS and Android SDKs to provide payment UI (checkout, cart, and onboarding modals) directly in your React Native app. For server-side API operations (customers, charge intents, refunds, etc.), use the [framepayments](https://www.npmjs.com/package/framepayments) Node.js package.
|
|
4
4
|
|
|
5
5
|
## Requirements
|
|
6
6
|
|
|
7
|
-
- React Native >= 0.
|
|
7
|
+
- React Native >= 0.74
|
|
8
8
|
- iOS 17+ / Android 8.0+ (API 26+)
|
|
9
9
|
- A [Frame](https://framepayments.com) account and API key
|
|
10
10
|
|
|
11
|
-
**Tested with:** Frame iOS SDK (SPM) and Frame Android SDK 1.2.x. Other compatible versions may work but are not officially tested.
|
|
12
|
-
|
|
13
11
|
## Installation
|
|
14
12
|
|
|
15
13
|
```bash
|
|
@@ -18,99 +16,414 @@ npm install framepayments-react-native
|
|
|
18
16
|
yarn add framepayments-react-native
|
|
19
17
|
```
|
|
20
18
|
|
|
21
|
-
### iOS
|
|
19
|
+
### iOS setup
|
|
22
20
|
|
|
23
|
-
1.
|
|
24
|
-
```
|
|
25
|
-
https://github.com/Frame-Payments/frame-ios
|
|
26
|
-
```
|
|
27
|
-
Add the **Frame-iOS** package and choose the version or branch you need. The React Native SDK’s native code depends on it; CocoaPods cannot pull it in automatically.
|
|
28
|
-
|
|
29
|
-
2. **Preload Frame on the main thread** (required): Add this to your `AppDelegate.m` or `AppDelegate.mm` **before** calling `[super application:didFinishLaunchingWithOptions:]`:
|
|
30
|
-
```objc
|
|
31
|
-
#import "YourAppName-Swift.h" // Use your app's module name
|
|
32
|
-
// ...
|
|
33
|
-
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
|
34
|
-
{
|
|
35
|
-
[FramePreloader preloadOnMainThread]; // Prevents "Helpers are not supported by the default hub" crash
|
|
36
|
-
return [super application:application didFinishLaunchingWithOptions:launchOptions];
|
|
37
|
-
}
|
|
38
|
-
```
|
|
39
|
-
`FramePreloader` is part of the SDK and loads Frame/Evervault/Sift on the main thread before the React Native bridge initializes.
|
|
21
|
+
#### 1. Add the Frame iOS SDK via Swift Package Manager
|
|
40
22
|
|
|
41
|
-
|
|
23
|
+
The React Native SDK's native layer depends on the Frame iOS SDK, which must be added manually via SPM — CocoaPods cannot pull it in automatically.
|
|
42
24
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
25
|
+
In Xcode: **File → Add Package Dependencies**, enter:
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
https://github.com/Frame-Payments/frame-ios
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Add the **Frame-iOS** package and select the version you need.
|
|
32
|
+
|
|
33
|
+
#### 2. Preload Frame on the main thread
|
|
34
|
+
|
|
35
|
+
Add this to your `AppDelegate.m` or `AppDelegate.mm` **before** `[super application:didFinishLaunchingWithOptions:]`:
|
|
36
|
+
|
|
37
|
+
```objc
|
|
38
|
+
#import "YourAppName-Swift.h" // use your app's module name
|
|
39
|
+
|
|
40
|
+
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
|
41
|
+
{
|
|
42
|
+
[FramePreloader preloadOnMainThread]; // must be first
|
|
43
|
+
return [super application:application didFinishLaunchingWithOptions:launchOptions];
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
This prevents the **"Helpers are not supported by the default hub"** crash, which occurs when Frame/Evervault initializes on a background thread during React Native bridge startup.
|
|
48
|
+
|
|
49
|
+
> If your app module name isn't the default (i.e., not matching the generated `-Swift.h` header), set `FRAME_SWIFT_HEADER=YourApp-Swift.h` in your target's **Preprocessor Macros** in Xcode build settings.
|
|
47
50
|
|
|
48
|
-
|
|
51
|
+
#### 3. Install pods
|
|
49
52
|
|
|
50
|
-
|
|
53
|
+
```bash
|
|
54
|
+
cd ios && pod install && cd ..
|
|
55
|
+
```
|
|
51
56
|
|
|
52
|
-
|
|
57
|
+
### Android setup
|
|
53
58
|
|
|
54
|
-
|
|
59
|
+
No extra steps required. Autolinking handles the native module automatically.
|
|
55
60
|
|
|
56
|
-
|
|
61
|
+
---
|
|
57
62
|
|
|
58
|
-
|
|
63
|
+
## Quick start
|
|
59
64
|
|
|
60
65
|
```ts
|
|
61
66
|
import Frame from 'framepayments-react-native';
|
|
62
67
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
68
|
+
// 1. Initialize once at app startup
|
|
69
|
+
await Frame.initialize({
|
|
70
|
+
secretKey: 'sk_sandbox_...',
|
|
71
|
+
publishableKey: 'pk_sandbox_...',
|
|
72
|
+
debugMode: __DEV__,
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// 2. Present a checkout modal
|
|
76
|
+
const chargeIntent = await Frame.presentCheckout({ amount: 10000 }); // cents
|
|
77
|
+
|
|
78
|
+
// 3. Present a cart flow
|
|
79
|
+
const result = await Frame.presentCart({
|
|
80
|
+
items: [{ id: '1', title: 'Hat', amountInCents: 5000, imageUrl: 'https://...' }],
|
|
81
|
+
shippingAmountInCents: 500,
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
// 4. Present an onboarding flow (KYC, bank account, etc.)
|
|
85
|
+
const onboarding = await Frame.presentOnboarding({
|
|
86
|
+
accountId: 'acct_xxx',
|
|
87
|
+
capabilities: ['kyc', 'bank_account_verification'],
|
|
88
|
+
});
|
|
67
89
|
```
|
|
68
90
|
|
|
69
|
-
|
|
91
|
+
---
|
|
70
92
|
|
|
71
|
-
|
|
93
|
+
## API reference
|
|
94
|
+
|
|
95
|
+
### `Frame.initialize(options)`
|
|
96
|
+
|
|
97
|
+
Initializes the native SDK. Must be called before any `present*` method. Call once at app startup (e.g., in your root component's `useEffect`).
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
await Frame.initialize({
|
|
101
|
+
secretKey: 'sk_sandbox_...', // your Frame secret key
|
|
102
|
+
publishableKey: 'pk_sandbox_...', // your Frame publishable key
|
|
103
|
+
debugMode: false, // set true in development to enable native debug logging
|
|
104
|
+
});
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
| Option | Type | Required | Description |
|
|
108
|
+
|---|---|---|---|
|
|
109
|
+
| `secretKey` | `string` | Yes | Your Frame secret key (`sk_…`). Used for server-style operations. |
|
|
110
|
+
| `publishableKey` | `string` | Yes | Your Frame publishable key (`pk_…`). Used for client-side operations like wallet payments. |
|
|
111
|
+
| `debugMode` | `boolean` | No | Enables native debug logging and routes wallet flows through sandbox/test environments. Default: `false`. |
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### `Frame.presentCheckout(options)`
|
|
116
|
+
|
|
117
|
+
Opens the native checkout modal. Resolves with a `ChargeIntent` when the user completes payment.
|
|
72
118
|
|
|
73
119
|
```ts
|
|
74
120
|
const chargeIntent = await Frame.presentCheckout({
|
|
75
|
-
|
|
76
|
-
|
|
121
|
+
amount: 15000, // required, in cents
|
|
122
|
+
customerId: 'cus_xxx', // optional
|
|
77
123
|
});
|
|
78
124
|
```
|
|
79
125
|
|
|
80
|
-
|
|
126
|
+
| Option | Type | Required | Description |
|
|
127
|
+
|---|---|---|---|
|
|
128
|
+
| `amount` | `number` | Yes | Payment amount in cents |
|
|
129
|
+
| `customerId` | `string` | No | Pre-associate the charge with a Frame customer |
|
|
130
|
+
|
|
131
|
+
**Returns:** [`ChargeIntent`](#chargeintent)
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
### `Frame.presentCart(options)`
|
|
81
136
|
|
|
82
|
-
Opens
|
|
137
|
+
Opens a cart review screen followed by the checkout flow. Resolves when the user completes payment or dismisses.
|
|
83
138
|
|
|
84
139
|
```ts
|
|
85
140
|
const chargeIntent = await Frame.presentCart({
|
|
86
|
-
customerId: 'cus_xxx', // optional
|
|
87
141
|
items: [
|
|
88
|
-
{
|
|
142
|
+
{
|
|
143
|
+
id: '1',
|
|
144
|
+
title: 'Vintage Track Jacket',
|
|
145
|
+
amountInCents: 10000,
|
|
146
|
+
imageUrl: 'https://example.com/jacket.jpg',
|
|
147
|
+
},
|
|
89
148
|
],
|
|
90
149
|
shippingAmountInCents: 500,
|
|
150
|
+
customerId: 'cus_xxx', // optional
|
|
91
151
|
});
|
|
92
152
|
```
|
|
93
153
|
|
|
94
|
-
|
|
154
|
+
| Option | Type | Required | Description |
|
|
155
|
+
|---|---|---|---|
|
|
156
|
+
| `items` | `FrameCartItem[]` | Yes | Array of items to display in the cart |
|
|
157
|
+
| `shippingAmountInCents` | `number` | Yes | Shipping cost in cents |
|
|
158
|
+
| `customerId` | `string` | No | Pre-associate the charge with a Frame customer |
|
|
159
|
+
|
|
160
|
+
**`FrameCartItem` shape:**
|
|
161
|
+
|
|
162
|
+
| Field | Type | Description |
|
|
163
|
+
|---|---|---|
|
|
164
|
+
| `id` | `string` | Unique identifier for the item |
|
|
165
|
+
| `title` | `string` | Display name |
|
|
166
|
+
| `amountInCents` | `number` | Item price in cents |
|
|
167
|
+
| `imageUrl` | `string` | URL of the product image |
|
|
168
|
+
|
|
169
|
+
**Returns:** [`ChargeIntent`](#chargeintent)
|
|
170
|
+
|
|
171
|
+
> **iOS limitation:** On iOS, `presentCart` resolves with an empty object (`{}`) rather than a full `ChargeIntent`. The underlying `FrameCartView` does not expose the charge intent from its nested checkout step. On Android, the full `ChargeIntent` is returned. Always guard with `intent?.id` before using the result.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
### `Frame.presentOnboarding(options)`
|
|
176
|
+
|
|
177
|
+
Opens the native onboarding flow for KYC, identity verification, and payment method setup. Resolves when the user completes or dismisses.
|
|
178
|
+
|
|
179
|
+
```ts
|
|
180
|
+
const result = await Frame.presentOnboarding({
|
|
181
|
+
accountId: 'acct_xxx',
|
|
182
|
+
capabilities: ['kyc', 'bank_account_verification'],
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
if (result.status === 'completed') {
|
|
186
|
+
console.log('Payment method created:', result.paymentMethodId);
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
| Option | Type | Required | Description |
|
|
191
|
+
|---|---|---|---|
|
|
192
|
+
| `accountId` | `string` | No | The Frame account to onboard |
|
|
193
|
+
| `capabilities` | `OnboardingCapability[]` | No | Which onboarding steps to include (see below) |
|
|
194
|
+
|
|
195
|
+
**`capabilities` values:**
|
|
196
|
+
|
|
197
|
+
| Value | Description |
|
|
198
|
+
|---|---|
|
|
199
|
+
| `kyc` | Identity verification |
|
|
200
|
+
| `kyc_prefill` | Pre-populate KYC fields |
|
|
201
|
+
| `phone_verification` | Phone number verification |
|
|
202
|
+
| `age_verification` | Age verification |
|
|
203
|
+
| `address_verification` | Address verification |
|
|
204
|
+
| `geo_compliance` | Geolocation compliance check |
|
|
205
|
+
| `creator_shield` | Creator Shield enrollment |
|
|
206
|
+
| `card_verification` | Card verification |
|
|
207
|
+
| `card_send` | Enable card send capability |
|
|
208
|
+
| `card_receive` | Enable card receive capability |
|
|
209
|
+
| `bank_account_verification` | Bank account verification |
|
|
210
|
+
| `bank_account_send` | Enable bank account send |
|
|
211
|
+
| `bank_account_receive` | Enable bank account receive |
|
|
212
|
+
|
|
213
|
+
**Returns:** `OnboardingResult`
|
|
214
|
+
|
|
215
|
+
| Field | Type | Description |
|
|
216
|
+
|---|---|---|
|
|
217
|
+
| `status` | `'completed' \| 'cancelled'` | Whether the user finished or dismissed the flow |
|
|
218
|
+
| `paymentMethodId` | `string \| undefined` | Set when a payment method was created or verified during the flow |
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
### `Frame.presentApplePay(options)` (iOS)
|
|
223
|
+
|
|
224
|
+
Launches the native Apple Pay sheet, creates a Frame payment method from the authorized payment, and creates and confirms a charge intent. Resolves with the resulting `ChargeIntent`. Render your own button — Apple's `PKPaymentButton`, a community wrapper, or your own design-system component — and call this from its `onPress`.
|
|
225
|
+
|
|
226
|
+
```tsx
|
|
227
|
+
import Frame from 'framepayments-react-native';
|
|
228
|
+
|
|
229
|
+
const intent = await Frame.presentApplePay({
|
|
230
|
+
amount: 15000,
|
|
231
|
+
currency: 'usd',
|
|
232
|
+
owner: { type: 'customer', id: 'cus_xxx' },
|
|
233
|
+
merchantId: 'merchant.com.yourapp',
|
|
234
|
+
});
|
|
235
|
+
console.log('Charge intent:', intent.id);
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
| Option | Type | Required | Description |
|
|
239
|
+
|---|---|---|---|
|
|
240
|
+
| `amount` | `number` | Yes | Payment amount in cents |
|
|
241
|
+
| `currency` | `string` | No | ISO 4217 currency code. Default `'usd'` |
|
|
242
|
+
| `owner` | `{ type: 'customer' \| 'account', id: string }` | Yes | Frame customer or account that owns the resulting payment method |
|
|
243
|
+
| `merchantId` | `string` | Yes | Apple Pay merchant ID configured in your Apple Developer account |
|
|
95
244
|
|
|
96
|
-
The
|
|
245
|
+
The promise rejects with `code: 'USER_CANCELED'` when the user dismisses the sheet, `'APPLE_PAY_UNAVAILABLE'` if the device cannot make Apple Pay payments, `'NOT_ATTESTED'` if device attestation has not completed yet (try again in a moment), and `'PAYMENT_METHOD_FAILED'` / `'CHARGE_INTENT_FAILED'` for backend failures.
|
|
97
246
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
247
|
+
**Required iOS setup:**
|
|
248
|
+
|
|
249
|
+
1. **Apple Pay capability + merchant ID.** Add Apple Pay in your target's *Signing & Capabilities*, and register a merchant ID in your Apple Developer account.
|
|
250
|
+
2. **App Attest entitlement.** The Frame iOS SDK uses Apple's App Attest for device attestation on every Apple Pay payment. Add to your `.entitlements`:
|
|
251
|
+
```xml
|
|
252
|
+
<key>com.apple.developer.devicecheck.appattest-environment</key>
|
|
253
|
+
<string>development</string>
|
|
254
|
+
```
|
|
255
|
+
Use `production` for App Store builds.
|
|
256
|
+
3. **Real device required.** App Attest does not work in the simulator.
|
|
257
|
+
4. **Frame dashboard configuration.** In your Frame dashboard, go to **Settings → Device Attestation** and set your Apple Team ID and the Bundle ID of your iOS app. These must exactly match the app you're running — the backend computes `SHA256("<TeamID>.<BundleID>")` and compares it to the hash signed by the device. If they don't match, payment-method creation fails with `App ID verification failed`.
|
|
258
|
+
|
|
259
|
+
On non-iOS platforms `Frame.presentApplePay` rejects synchronously with a not-supported error.
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
### `Frame.presentGooglePay(options)` (Android)
|
|
264
|
+
|
|
265
|
+
Launches the native Google Pay sheet, creates a Frame payment method from the wallet token, and creates and confirms a charge intent. Resolves with the resulting `ChargeIntent`. Render your own button (Google's `PayButton` from `play-services-pay`, a community wrapper, or your own component) and call this from its `onPress`.
|
|
266
|
+
|
|
267
|
+
```tsx
|
|
268
|
+
import Frame from 'framepayments-react-native';
|
|
269
|
+
|
|
270
|
+
const intent = await Frame.presentGooglePay({
|
|
271
|
+
amountCents: 15000,
|
|
272
|
+
currencyCode: 'USD',
|
|
273
|
+
customerId: 'cus_xxx',
|
|
274
|
+
});
|
|
275
|
+
console.log('Charge intent:', intent.id);
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
| Option | Type | Required | Description |
|
|
279
|
+
|---|---|---|---|
|
|
280
|
+
| `amountCents` | `number` | Yes | Payment amount in cents |
|
|
281
|
+
| `customerId` | `string` | No | Frame customer to associate the payment method with |
|
|
282
|
+
| `currencyCode` | `string` | No | ISO 4217 currency code. Default `'USD'` |
|
|
283
|
+
| `googlePayMerchantId` | `string` | No | Google Pay merchant ID override |
|
|
284
|
+
|
|
285
|
+
The promise rejects with `code: 'USER_CANCELED'` when the user dismisses the sheet, `'GOOGLE_PAY_UNAVAILABLE'` if Google Pay is not ready on the device (no signed-in account, no test card, or Wallet API disabled), and `'PAYMENT_FAILED'` for backend failures.
|
|
286
|
+
|
|
287
|
+
**Required Android setup:**
|
|
288
|
+
|
|
289
|
+
1. **Google Pay metadata.** Add to your app's `AndroidManifest.xml` inside `<application>`:
|
|
290
|
+
```xml
|
|
291
|
+
<meta-data
|
|
292
|
+
android:name="com.google.android.gms.wallet.api.enabled"
|
|
293
|
+
android:value="true" />
|
|
294
|
+
```
|
|
295
|
+
2. **Test environment.** When the SDK is initialized with `debugMode: true`, Google Pay runs in `ENVIRONMENT_TEST`; otherwise it uses `ENVIRONMENT_PRODUCTION`.
|
|
296
|
+
|
|
297
|
+
On non-Android platforms `Frame.presentGooglePay` rejects synchronously with a not-supported error.
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
### Rendering wallet buttons
|
|
302
|
+
|
|
303
|
+
Apple and Google both require their official button artwork (with light/dark variants) — custom-styled buttons can be rejected. Download the assets from [Apple's marketing page](https://developer.apple.com/apple-pay/marketing/) and [Google's brand guidelines page](https://developers.google.com/pay/api/android/guides/brand-guidelines), bundle them in your app, and pick a variant based on the active color scheme:
|
|
304
|
+
|
|
305
|
+
```tsx
|
|
306
|
+
import { Image, Platform, TouchableOpacity, useColorScheme } from 'react-native';
|
|
307
|
+
import Frame from 'framepayments-react-native';
|
|
308
|
+
|
|
309
|
+
export function WalletButton({ amountCents, customerId, merchantId }) {
|
|
310
|
+
const colorScheme = useColorScheme();
|
|
311
|
+
const isDark = colorScheme === 'dark';
|
|
312
|
+
|
|
313
|
+
const onPress = async () => {
|
|
314
|
+
try {
|
|
315
|
+
if (Platform.OS === 'ios') {
|
|
316
|
+
await Frame.presentApplePay({
|
|
317
|
+
amount: amountCents,
|
|
318
|
+
currency: 'usd',
|
|
319
|
+
owner: { type: 'customer', id: customerId },
|
|
320
|
+
merchantId,
|
|
321
|
+
});
|
|
322
|
+
} else {
|
|
323
|
+
await Frame.presentGooglePay({ amountCents, customerId });
|
|
324
|
+
}
|
|
325
|
+
} catch (e: any) {
|
|
326
|
+
if (e.code === 'USER_CANCELED') return;
|
|
327
|
+
// surface the error to your UI
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
const source = Platform.OS === 'ios'
|
|
332
|
+
? (isDark
|
|
333
|
+
? require('./assets/applepay/button_buy_with_light.png')
|
|
334
|
+
: require('./assets/applepay/button_buy_with_dark.png'))
|
|
335
|
+
: (isDark
|
|
336
|
+
? require('./assets/googlepay/button_buy_with_light.png')
|
|
337
|
+
: require('./assets/googlepay/button_buy_with_dark.png'));
|
|
338
|
+
|
|
339
|
+
return (
|
|
340
|
+
<TouchableOpacity onPress={onPress} activeOpacity={0.8} style={{ height: 56 }}>
|
|
341
|
+
<Image source={source} style={{ width: '100%', height: '100%' }} resizeMode="contain" />
|
|
342
|
+
</TouchableOpacity>
|
|
343
|
+
);
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
A complete working example (including loading-state handling) lives in [example/App.tsx](./example/App.tsx).
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
### `ChargeIntent`
|
|
352
|
+
|
|
353
|
+
Returned from `presentCheckout` and `presentCart` (Android only for cart).
|
|
354
|
+
|
|
355
|
+
| Field | Type | Description |
|
|
356
|
+
|---|---|---|
|
|
357
|
+
| `id` | `string` | Unique charge intent ID |
|
|
358
|
+
| `amount` | `number` | Amount in cents |
|
|
359
|
+
| `currency` | `string` | ISO currency code (e.g. `"usd"`) |
|
|
360
|
+
| `status` | `ChargeIntentStatus` | Current status of the intent |
|
|
361
|
+
| `created` | `number` | Unix timestamp |
|
|
362
|
+
| `updated` | `number` | Unix timestamp |
|
|
363
|
+
| `livemode` | `boolean` | `true` in production, `false` in sandbox |
|
|
364
|
+
| `description` | `string \| undefined` | Optional description |
|
|
365
|
+
| `authorizationMode` | `'automatic' \| 'manual' \| undefined` | Capture mode |
|
|
366
|
+
| `failureDescription` | `string \| undefined` | Present when status is `failed` |
|
|
367
|
+
| `customer` | `Customer \| undefined` | Associated customer object |
|
|
368
|
+
| `paymentMethod` | `PaymentMethod \| undefined` | Payment method used |
|
|
369
|
+
| `latestCharge` | `Charge \| undefined` | Most recent charge on this intent |
|
|
370
|
+
|
|
371
|
+
**`ChargeIntentStatus` values:** `pending`, `succeeded`, `failed`, `canceled`, `incomplete`, `disputed`, `refunded`, `reversed`
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
### Error handling
|
|
376
|
+
|
|
377
|
+
All `present*` methods return Promises that reject with an error object containing `code` and `message`.
|
|
101
378
|
|
|
102
379
|
```ts
|
|
380
|
+
import Frame, { ErrorCodes } from 'framepayments-react-native';
|
|
381
|
+
|
|
103
382
|
try {
|
|
104
383
|
const intent = await Frame.presentCheckout({ amount: 10000 });
|
|
384
|
+
// handle success
|
|
105
385
|
} catch (e: any) {
|
|
106
|
-
if (e.code ===
|
|
107
|
-
|
|
386
|
+
if (e.code === ErrorCodes.USER_CANCELED) {
|
|
387
|
+
return; // user dismissed — not an error
|
|
388
|
+
}
|
|
389
|
+
console.error(`[${e.code}] ${e.message}`);
|
|
108
390
|
}
|
|
109
391
|
```
|
|
110
392
|
|
|
111
|
-
|
|
393
|
+
**Error codes (`ErrorCodes`):**
|
|
394
|
+
|
|
395
|
+
| Code | When it's thrown |
|
|
396
|
+
|---|---|
|
|
397
|
+
| `NOT_INITIALIZED` | `present*` called before `Frame.initialize()` |
|
|
398
|
+
| `USER_CANCELED` | User dismissed the modal without completing |
|
|
399
|
+
| `INIT_FAILED` | Native SDK failed to initialize |
|
|
400
|
+
| `NO_ROOT_VC` | iOS: no root view controller available |
|
|
401
|
+
| `NO_ACTIVITY` | Android: no host activity available |
|
|
402
|
+
| `INVALID_ITEMS` | Cart items could not be parsed |
|
|
403
|
+
| `NO_RESULT` | Native activity returned OK but no payload |
|
|
404
|
+
| `PARSE_ERROR` | Could not decode the native response |
|
|
405
|
+
| `ENCODE_ERROR` | iOS: could not encode the charge intent |
|
|
406
|
+
| `NETWORK_ERROR` | Network failure in the native SDK |
|
|
407
|
+
| `API_ERROR` | Frame API returned an error |
|
|
112
408
|
|
|
113
|
-
|
|
409
|
+
You can also use the `isFrameError` and `normalizeToFrameError` utilities for typed error handling:
|
|
410
|
+
|
|
411
|
+
```ts
|
|
412
|
+
import { isFrameError, normalizeToFrameError } from 'framepayments-react-native';
|
|
413
|
+
|
|
414
|
+
try {
|
|
415
|
+
await Frame.presentCheckout({ amount: 5000 });
|
|
416
|
+
} catch (e) {
|
|
417
|
+
const err = normalizeToFrameError(e);
|
|
418
|
+
// err.code, err.message, err.nativeError are all typed strings
|
|
419
|
+
}
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## Server-side API calls
|
|
425
|
+
|
|
426
|
+
For operations that don't involve UI (listing customers, creating charge intents, issuing refunds), install the optional `framepayments` Node.js SDK:
|
|
114
427
|
|
|
115
428
|
```bash
|
|
116
429
|
npm install framepayments
|
|
@@ -119,36 +432,86 @@ npm install framepayments
|
|
|
119
432
|
```ts
|
|
120
433
|
import { FrameSDK } from 'framepayments';
|
|
121
434
|
|
|
122
|
-
const frame = new FrameSDK({ apiKey: '
|
|
435
|
+
const frame = new FrameSDK({ apiKey: 'sk_sandbox_...' });
|
|
436
|
+
|
|
123
437
|
const customers = await frame.customers.list();
|
|
438
|
+
const accounts = await frame.accounts.list();
|
|
439
|
+
const paymentMethods = await frame.paymentMethods.list();
|
|
124
440
|
```
|
|
125
441
|
|
|
442
|
+
> **Security:** Never hardcode your Frame secret key in your app bundle. Fetch it from your own backend after the user authenticates — this keeps the key out of the binary and allows server-side rotation without an app update.
|
|
443
|
+
>
|
|
444
|
+
> ```ts
|
|
445
|
+
> // Fetch from your backend after login
|
|
446
|
+
> const { frameApiKey } = await myBackend.getSessionConfig();
|
|
447
|
+
> const frame = new FrameSDK({ apiKey: frameApiKey });
|
|
448
|
+
> ```
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
126
452
|
## Security
|
|
127
453
|
|
|
128
|
-
- **
|
|
129
|
-
- **
|
|
130
|
-
-
|
|
454
|
+
- **Never bundle your secret key.** Anyone with access to your IPA or APK can extract embedded secrets. Fetch the key from your backend at runtime.
|
|
455
|
+
- **Don't commit keys to source control.** Use environment variables or a secrets manager.
|
|
456
|
+
- **Disable `debugMode` in production** to avoid logging sensitive data to the console.
|
|
457
|
+
- Payment card data is handled entirely by the native Frame SDKs (via Evervault) and never passes through your JavaScript bundle.
|
|
458
|
+
|
|
459
|
+
---
|
|
460
|
+
|
|
461
|
+
## Troubleshooting
|
|
131
462
|
|
|
132
|
-
|
|
463
|
+
### "Helpers are not supported by the default hub" (iOS)
|
|
133
464
|
|
|
134
|
-
|
|
465
|
+
Frame/Evervault loaded on a background thread before the main thread was ready. Fix: add `[FramePreloader preloadOnMainThread]` to your `AppDelegate` before `[super application:didFinishLaunchingWithOptions:]`. See [iOS setup](#ios-setup).
|
|
135
466
|
|
|
136
|
-
|
|
467
|
+
Also ensure the **Frame-iOS** Swift package is added in Xcode (**File → Add Package Dependencies** → `https://github.com/Frame-Payments/frame-ios`).
|
|
137
468
|
|
|
138
|
-
The
|
|
469
|
+
### "The package doesn't seem to be linked"
|
|
139
470
|
|
|
140
|
-
|
|
141
|
-
|
|
471
|
+
- iOS: run `cd ios && pod install`, then rebuild.
|
|
472
|
+
- Android: rebuild the app (`npm run android`).
|
|
473
|
+
- Both: make sure you're running a debug build (not Expo Go), since this SDK uses native modules.
|
|
142
474
|
|
|
143
|
-
|
|
475
|
+
### Spinner stuck after onboarding completes (iOS)
|
|
476
|
+
|
|
477
|
+
Ensure you are using SDK version 1.1.0+. Earlier versions had a bug where programmatic dismiss from the onboarding flow did not resolve the promise.
|
|
478
|
+
|
|
479
|
+
### `presentCart` returns `{}` on iOS
|
|
480
|
+
|
|
481
|
+
This is a known limitation of `FrameCartView` on iOS — it does not expose the `ChargeIntent` from its nested checkout. On Android, the full object is returned. Guard with `intent?.id` before reading the result.
|
|
482
|
+
|
|
483
|
+
### `App ID verification failed` from `presentApplePay`
|
|
484
|
+
|
|
485
|
+
The Frame backend computes `SHA256("<TeamID>.<BundleID>")` from the merchant's dashboard configuration and compares it to the hash signed by the device during attestation. A mismatch returns `App ID verification failed`. Fix: open your Frame dashboard → **Settings → Device Attestation** and confirm both the Apple Team ID and the Bundle ID match the iOS app you're running.
|
|
486
|
+
|
|
487
|
+
### `settings.gradle` build error on Android (RN 0.74+)
|
|
488
|
+
|
|
489
|
+
If you see `Could not read script '.../cli-platform-android/native_modules.gradle'`, remove the `apply from:` line referencing it from your `android/settings.gradle`. This file was removed in newer versions of `@react-native-community/cli-platform-android`; the gradle plugin handles it automatically.
|
|
490
|
+
|
|
491
|
+
---
|
|
492
|
+
|
|
493
|
+
## Example app
|
|
494
|
+
|
|
495
|
+
The [example/](./example) directory contains a full working app demonstrating all SDK features.
|
|
496
|
+
|
|
497
|
+
**Run on iOS:**
|
|
498
|
+
```bash
|
|
499
|
+
cd example
|
|
500
|
+
npm install
|
|
501
|
+
cd ios && pod install && cd ..
|
|
502
|
+
npm run ios
|
|
503
|
+
```
|
|
504
|
+
|
|
505
|
+
**Run on Android:**
|
|
506
|
+
```bash
|
|
507
|
+
cd example
|
|
508
|
+
npm install
|
|
509
|
+
npm run android
|
|
510
|
+
```
|
|
144
511
|
|
|
145
|
-
|
|
512
|
+
The example app covers `initialize`, `presentCheckout`, `presentCart`, `presentOnboarding`, and server-side API calls via `framepayments`.
|
|
146
513
|
|
|
147
|
-
|
|
148
|
-
2. Update `CHANGELOG.md` with the new version and date
|
|
149
|
-
3. Commit and tag: `git tag v1.0.0`
|
|
150
|
-
4. Push and create a GitHub release
|
|
151
|
-
5. Publish: `npm publish --access public` (for scoped packages)
|
|
514
|
+
---
|
|
152
515
|
|
|
153
516
|
## License
|
|
154
517
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
File without changes
|
|
Binary file
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
arguments=--init-script /var/folders/my/2knngz1131q4pq8rnxxjb3_h0000gn/T/db3b08fc4a9ef609cb16b96b200fa13e563f396e9bb1ed0905fdab7bc3bc513b.gradle --init-script /var/folders/my/2knngz1131q4pq8rnxxjb3_h0000gn/T/52cde0cfcf3e28b8b7510e992210d9614505e0911af0c190bd590d7158574963.gradle --init-script /var/folders/my/2knngz1131q4pq8rnxxjb3_h0000gn/T/861a75667e10803d304a058d833cb7404195ca44013d0d61d3b653eb084379b8.gradle --init-script /var/folders/my/2knngz1131q4pq8rnxxjb3_h0000gn/T/68eb1b6516fe21c6fbba58e63c99c3207ccfc918360613709367eecde56fa77f.gradle
|
|
2
|
+
auto.sync=false
|
|
3
|
+
build.scans.enabled=false
|
|
4
|
+
connection.gradle.distribution=GRADLE_DISTRIBUTION(VERSION(8.9))
|
|
5
|
+
connection.project.dir=../../../android
|
|
6
|
+
eclipse.preferences.version=1
|
|
7
|
+
gradle.user.home=
|
|
8
|
+
java.home=/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
|
|
9
|
+
jvm.arguments=
|
|
10
|
+
offline.mode=false
|
|
11
|
+
override.workspace.settings=true
|
|
12
|
+
show.console.view=true
|
|
13
|
+
show.executions.view=true
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
o/bundleLibRuntimeToDirDebug
|