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.
Files changed (241) hide show
  1. package/README.md +434 -71
  2. package/android/.gradle/8.9/checksums/checksums.lock +0 -0
  3. package/android/.gradle/8.9/fileChanges/last-build.bin +0 -0
  4. package/android/.gradle/8.9/fileHashes/fileHashes.lock +0 -0
  5. package/android/.gradle/8.9/gc.properties +0 -0
  6. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  7. package/android/.gradle/buildOutputCleanup/cache.properties +2 -0
  8. package/android/.gradle/vcs-1/gc.properties +0 -0
  9. package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
  10. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/results.bin +1 -0
  11. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/BuildConfig.dex +0 -0
  12. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameCheckoutActivity$Companion.dex +0 -0
  13. package/android/build/.transforms/{3db830673120be833016e77c88c53305/transformed/debug → 5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex}/com/framepayments/reactnativeframe/FrameCheckoutActivity$tryShowCheckout$1.dex +0 -0
  14. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameCheckoutActivity.dex +0 -0
  15. package/android/build/.transforms/{3db830673120be833016e77c88c53305/transformed/debug → 5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex}/com/framepayments/reactnativeframe/FrameFlowActivity$CartItemDto.dex +0 -0
  16. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameFlowActivity$Companion.dex +0 -0
  17. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameFlowActivity$parseCartItems$type$1.dex +0 -0
  18. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameFlowActivity.dex +0 -0
  19. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameGooglePayActivity$Companion.dex +0 -0
  20. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameGooglePayActivity.dex +0 -0
  21. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameOnboardingActivity$Companion.dex +0 -0
  22. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameOnboardingActivity$parseCapabilities$type$1.dex +0 -0
  23. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameOnboardingActivity.dex +0 -0
  24. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameSDKModule$Companion.dex +0 -0
  25. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameSDKModule.dex +0 -0
  26. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/FrameSDKPackage.dex +0 -0
  27. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/framepayments/reactnativeframe/JsonConvertersKt.dex +0 -0
  28. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameCheckoutActivity$$InternalSyntheticLambda$2$28045340ca5b91151bb937065eeb5817c0f8f911bb460e6e7ed8bb228b67ee83$0.globals +0 -0
  29. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameFlowActivity$$InternalSyntheticLambda$2$467cdf1dabffeaa07b76e313efb66791f50d3ff264e427e91d1358ac5865a7a9$0.globals +0 -0
  30. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameFlowActivity$$InternalSyntheticLambda$2$d15cc37cc08a853958a9c0baad49f7fce1ef84e92db9baa5103646939a0fe3e5$0.globals +0 -0
  31. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameFlowActivity$$InternalSyntheticLambda$2$ee6ef8e6758d1b8e67a54e3fecfb200ac5e867541a69809ec1db49f74ffcada1$0.globals +0 -0
  32. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameGooglePayActivity$$InternalSyntheticLambda$2$46cecf303f126f7c9f20b615fc49b2714ec2eb4f046ae009cfdbce53a1759f18$0.globals +0 -0
  33. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameGooglePayActivity$$InternalSyntheticLambda$2$46cecf303f126f7c9f20b615fc49b2714ec2eb4f046ae009cfdbce53a1759f18$1.globals +0 -0
  34. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameGooglePayActivity$$InternalSyntheticLambda$2$46cecf303f126f7c9f20b615fc49b2714ec2eb4f046ae009cfdbce53a1759f18$2.globals +0 -0
  35. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameGooglePayActivity$$InternalSyntheticLambda$2$cdad629ad452b3c7f7de1310d225629dafa75285ad515d55f056371066170154$0.globals +0 -0
  36. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameOnboardingActivity$$InternalSyntheticLambda$2$5d91d018c63f48735ba5e2a00b14bd815f4ce248aa924e4a58bf6addce311837$0.globals +0 -0
  37. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameOnboardingActivity$$InternalSyntheticLambda$2$c9ac604bc80e3afcbfad7417717ae97568874f4e33246863c0d688abb3e89865$0.globals +0 -0
  38. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameSDKModule$$InternalSyntheticLambda$2$1f479ca48bf3a1c66ff65b38aaaef67a97119b29ddce703f8104188682007f0d$0.globals +0 -0
  39. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameSDKModule$$InternalSyntheticLambda$2$984ab30558bc904ed37602fa6e3ebf28f1ed69df6712b31b00c4f26fc26d3b70$0.globals +0 -0
  40. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameSDKModule$$InternalSyntheticLambda$2$f4a55b70e496f422e1e03998843d62c7208f0229c2d5d080706056e98810c892$0.globals +0 -0
  41. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameSDKModule$$InternalSyntheticLambda$2$f8d46f7169c404d37a1d505f19439b83090fbed62b5bdaf1e86717fdddebf622$0.globals +0 -0
  42. package/android/build/.transforms/5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_global-synthetics/com/framepayments/reactnativeframe/FrameSDKModule$$InternalSyntheticLambda$2$f8d46f7169c404d37a1d505f19439b83090fbed62b5bdaf1e86717fdddebf622$1.globals +0 -0
  43. package/android/build/generated/source/buildConfig/debug/com/framepayments/reactnativeframe/BuildConfig.java +10 -0
  44. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +26 -0
  45. package/android/build/intermediates/aar_metadata/debug/{aar-metadata.properties → writeDebugAarMetadata/aar-metadata.properties} +2 -1
  46. package/android/build/intermediates/android_res_source_set_path_map/debug/mapDebugSourceSetPaths/file-map.txt +10 -0
  47. package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
  48. package/android/build/intermediates/compile_r_class_jar/debug/generateDebugRFile/R.jar +0 -0
  49. package/android/build/intermediates/compile_symbol_list/debug/generateDebugRFile/R.txt +2 -0
  50. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -1
  51. package/android/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values/values.xml +10 -0
  52. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +6 -1
  53. package/android/build/intermediates/incremental/{packageDebugAssets → mergeDebugAssets}/merger.xml +1 -1
  54. package/android/build/intermediates/java_res/debug/processDebugJavaRes/out/META-INF/framepayments-react-native_debug.kotlin_module +0 -0
  55. package/android/build/intermediates/javac/debug/compileDebugJavaWithJavac/classes/com/framepayments/reactnativeframe/BuildConfig.class +0 -0
  56. package/android/build/intermediates/local_only_symbol_list/debug/parseDebugLocalResources/R-def.txt +4 -0
  57. package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +45 -0
  58. package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +26 -0
  59. package/android/build/intermediates/nested_resources_validation_report/debug/generateDebugResources/nestedResourcesValidationReport.txt +1 -0
  60. package/android/build/intermediates/packaged_res/debug/packageDebugResources/values/values.xml +10 -0
  61. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/META-INF/framepayments-react-native_debug.kotlin_module +0 -0
  62. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/BuildConfig.class +0 -0
  63. package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameCheckoutActivity$Companion.class +0 -0
  64. package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameCheckoutActivity$tryShowCheckout$1.class +0 -0
  65. package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameCheckoutActivity.class +0 -0
  66. package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameFlowActivity$CartItemDto.class +0 -0
  67. package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameFlowActivity$Companion.class +0 -0
  68. package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameFlowActivity$parseCartItems$type$1.class +0 -0
  69. package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameFlowActivity.class +0 -0
  70. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameGooglePayActivity$Companion.class +0 -0
  71. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameGooglePayActivity.class +0 -0
  72. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameOnboardingActivity$Companion.class +0 -0
  73. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameOnboardingActivity$parseCapabilities$type$1.class +0 -0
  74. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameOnboardingActivity.class +0 -0
  75. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameSDKModule$Companion.class +0 -0
  76. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/FrameSDKModule.class +0 -0
  77. package/android/build/intermediates/runtime_library_classes_dir/debug/{com → bundleLibRuntimeToDirDebug/com}/framepayments/reactnativeframe/FrameSDKPackage.class +0 -0
  78. package/android/build/intermediates/runtime_library_classes_dir/debug/bundleLibRuntimeToDirDebug/com/framepayments/reactnativeframe/JsonConvertersKt.class +0 -0
  79. package/android/build/intermediates/symbol_list_with_package_name/debug/generateDebugRFile/package-aware-r.txt +3 -0
  80. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  81. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  82. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  83. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  84. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  85. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  86. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  87. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  88. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  89. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  90. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  91. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  92. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  93. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  94. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  95. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  96. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  97. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  98. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
  99. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
  100. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
  101. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
  102. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
  103. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
  104. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  105. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  106. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  107. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  108. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  109. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  110. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab +0 -0
  111. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream +0 -0
  112. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.keystream.len +0 -0
  113. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.len +0 -0
  114. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab.values.at +0 -0
  115. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i +0 -0
  116. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/package-parts.tab_i.len +0 -0
  117. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  118. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  119. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  120. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  121. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  122. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  123. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  124. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  125. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  126. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  127. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  128. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  129. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  130. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  131. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  132. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  133. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  134. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  135. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  136. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  137. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  138. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  139. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  140. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  141. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +1 -1
  142. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  143. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  144. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  145. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  146. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  147. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  148. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  149. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
  150. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  151. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  152. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  153. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  154. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  155. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  156. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  157. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  158. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  159. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  160. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  161. package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
  162. package/android/build/outputs/logs/manifest-merger-debug-report.txt +21 -5
  163. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  164. package/android/build/tmp/kotlin-classes/debug/META-INF/framepayments-react-native_debug.kotlin_module +0 -0
  165. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameCheckoutActivity$Companion.class +0 -0
  166. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameCheckoutActivity$tryShowCheckout$1.class +0 -0
  167. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameCheckoutActivity.class +0 -0
  168. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameFlowActivity$CartItemDto.class +0 -0
  169. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameFlowActivity$Companion.class +0 -0
  170. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameFlowActivity$parseCartItems$type$1.class +0 -0
  171. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameFlowActivity.class +0 -0
  172. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameGooglePayActivity$Companion.class +0 -0
  173. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameGooglePayActivity.class +0 -0
  174. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameOnboardingActivity$Companion.class +0 -0
  175. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameOnboardingActivity$parseCapabilities$type$1.class +0 -0
  176. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameOnboardingActivity.class +0 -0
  177. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameSDKModule$Companion.class +0 -0
  178. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameSDKModule.class +0 -0
  179. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/FrameSDKPackage.class +0 -0
  180. package/android/build/tmp/kotlin-classes/debug/com/framepayments/reactnativeframe/JsonConvertersKt.class +0 -0
  181. package/android/build.gradle +22 -24
  182. package/android/src/main/AndroidManifest.xml +10 -2
  183. package/android/src/main/java/com/framepayments/reactnativeframe/FrameFlowActivity.kt +2 -2
  184. package/android/src/main/java/com/framepayments/reactnativeframe/FrameGooglePayActivity.kt +148 -0
  185. package/android/src/main/java/com/framepayments/reactnativeframe/FrameOnboardingActivity.kt +68 -0
  186. package/android/src/main/java/com/framepayments/reactnativeframe/FrameSDKModule.kt +115 -33
  187. package/android/src/main/java/com/framepayments/reactnativeframe/JsonConverters.kt +39 -0
  188. package/android/src/main/res/values/frame_styles.xml +15 -0
  189. package/ios/ApplePayPresenter.swift +155 -0
  190. package/ios/FrameReactNative.podspec +10 -4
  191. package/ios/FrameSDKBridge.m +33 -4
  192. package/ios/FrameSDKBridge.swift +160 -26
  193. package/lib/components/FrameApplePayButton.d.ts +30 -0
  194. package/lib/components/FrameApplePayButton.d.ts.map +1 -0
  195. package/lib/components/FrameApplePayButton.js +42 -0
  196. package/lib/components/FrameGooglePayButton.d.ts +28 -0
  197. package/lib/components/FrameGooglePayButton.d.ts.map +1 -0
  198. package/lib/components/FrameGooglePayButton.js +24 -0
  199. package/lib/components/index.d.ts +5 -0
  200. package/lib/components/index.d.ts.map +1 -0
  201. package/lib/components/index.js +2 -0
  202. package/lib/index.d.ts +9 -4
  203. package/lib/index.d.ts.map +1 -1
  204. package/lib/index.js +13 -4
  205. package/lib/native.d.ts +9 -2
  206. package/lib/native.d.ts.map +1 -1
  207. package/lib/native.js +28 -4
  208. package/lib/types.d.ts +102 -7
  209. package/lib/types.d.ts.map +1 -1
  210. package/package.json +10 -15
  211. package/src/__tests__/native.test.ts +51 -14
  212. package/src/index.ts +44 -5
  213. package/src/native.ts +71 -6
  214. package/src/types.ts +133 -7
  215. package/android/build/.transforms/3db830673120be833016e77c88c53305/results.bin +0 -1
  216. package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameCheckoutActivity$Companion.dex +0 -0
  217. package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameCheckoutActivity.dex +0 -0
  218. package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameFlowActivity$Companion.dex +0 -0
  219. package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameFlowActivity$parseCartItems$type$1.dex +0 -0
  220. package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameFlowActivity.dex +0 -0
  221. package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameSDKModule.dex +0 -0
  222. package/android/build/.transforms/3db830673120be833016e77c88c53305/transformed/debug/com/framepayments/reactnativeframe/FrameSDKPackage.dex +0 -0
  223. package/android/build/.transforms/e32bd1e24a69eac3ebaf0c3a5e659207/results.bin +0 -1
  224. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +0 -18
  225. package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
  226. package/android/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
  227. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
  228. package/android/build/intermediates/java_res/debug/out/META-INF/framepayments-react-native_debug.kotlin_module +0 -0
  229. package/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +0 -2
  230. package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +0 -27
  231. package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +0 -18
  232. package/android/build/intermediates/runtime_library_classes_dir/debug/META-INF/framepayments-react-native_debug.kotlin_module +0 -0
  233. package/android/build/intermediates/runtime_library_classes_dir/debug/com/framepayments/reactnativeframe/FrameSDKModule.class +0 -0
  234. package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
  235. package/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +0 -1
  236. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  237. /package/android/{build/intermediates/compile_symbol_list/debug/R.txt → .gradle/8.9/dependencies-accessors/gc.properties} +0 -0
  238. /package/android/build/.transforms/{3db830673120be833016e77c88c53305/transformed/debug → 5a2061641b1fc5518a336681809507bc/transformed/bundleLibRuntimeToDirDebug}/desugar_graph.bin +0 -0
  239. /package/android/build/intermediates/aapt_friendly_merged_manifests/debug/{aapt → processDebugManifest/aapt}/output-metadata.json +0 -0
  240. /package/android/build/intermediates/annotation_processor_list/debug/{annotationProcessors.json → javaPreCompileDebug/annotationProcessors.json} +0 -0
  241. /package/android/build/intermediates/navigation_json/debug/{navigation.json → extractDeepLinksDebug/navigation.json} +0 -0
@@ -0,0 +1,39 @@
1
+ package com.framepayments.reactnativeframe
2
+
3
+ import com.facebook.react.bridge.WritableNativeArray
4
+ import com.facebook.react.bridge.WritableNativeMap
5
+ import org.json.JSONArray
6
+ import org.json.JSONObject
7
+
8
+ internal fun jsonObjectToWritableMap(obj: JSONObject): WritableNativeMap {
9
+ val map = WritableNativeMap()
10
+ for (key in obj.keys()) {
11
+ if (obj.isNull(key)) continue
12
+ when (val v = obj.get(key)) {
13
+ is String -> map.putString(key, v)
14
+ is Int -> map.putInt(key, v)
15
+ is Long -> map.putDouble(key, v.toDouble())
16
+ is Double -> map.putDouble(key, v)
17
+ is Boolean -> map.putBoolean(key, v)
18
+ is JSONObject -> map.putMap(key, jsonObjectToWritableMap(v))
19
+ is JSONArray -> map.putArray(key, jsonArrayToWritableArray(v))
20
+ }
21
+ }
22
+ return map
23
+ }
24
+
25
+ internal fun jsonArrayToWritableArray(arr: JSONArray): WritableNativeArray {
26
+ val list = WritableNativeArray()
27
+ for (i in 0 until arr.length()) {
28
+ when (val v = arr.get(i)) {
29
+ is String -> list.pushString(v)
30
+ is Int -> list.pushInt(v)
31
+ is Long -> list.pushDouble(v.toDouble())
32
+ is Double -> list.pushDouble(v)
33
+ is Boolean -> list.pushBoolean(v)
34
+ is JSONObject -> list.pushMap(jsonObjectToWritableMap(v))
35
+ is JSONArray -> list.pushArray(jsonArrayToWritableArray(v))
36
+ }
37
+ }
38
+ return list
39
+ }
@@ -0,0 +1,15 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <resources>
3
+ <!-- Material theme used by all Frame host activities. Required because the Frame SDK's
4
+ GooglePayButton extends MaterialButton, which inflates only under a Theme.MaterialComponents
5
+ descendant. -->
6
+ <style name="Theme.Frame.NoActionBar" parent="Theme.MaterialComponents.Light.NoActionBar" />
7
+
8
+ <!-- Translucent variant for the hidden FrameGooglePayActivity host. -->
9
+ <style name="Theme.Frame.GooglePay.Translucent" parent="Theme.MaterialComponents.Light.NoActionBar">
10
+ <item name="android:windowBackground">@android:color/transparent</item>
11
+ <item name="android:windowIsTranslucent">true</item>
12
+ <item name="android:windowNoTitle">true</item>
13
+ <item name="android:backgroundDimEnabled">false</item>
14
+ </style>
15
+ </resources>
@@ -0,0 +1,155 @@
1
+ //
2
+ // ApplePayPresenter.swift
3
+ // FrameReactNative
4
+ //
5
+ // Programmatic Apple Pay presentation for Frame.presentApplePay(). Wraps
6
+ // PKPaymentAuthorizationController + ApplePayAPI + ChargeIntentsAPI directly
7
+ // so we can detect the user-cancel path (PKPaymentAuthorizationController's
8
+ // didFinish fires for both success and cancel; the underlying SDK's view
9
+ // model only delivers success, so we re-implement that flow here).
10
+ //
11
+
12
+ import Foundation
13
+ import PassKit
14
+ import Frame
15
+
16
+ @MainActor
17
+ final class ApplePayPresenter: NSObject, PKPaymentAuthorizationControllerDelegate {
18
+
19
+ private let amount: Int
20
+ private let currency: String
21
+ private let owner: FrameApplePayViewModel.PaymentMethodOwner
22
+ private let merchantId: String
23
+ private let resolve: (Any?) -> Void
24
+ private let reject: (String, String, Error?) -> Void
25
+
26
+ // Set to true once we've delivered a definitive result (success or backend
27
+ // failure). When didFinish fires without this set, treat as user cancel.
28
+ private var didDeliverResult = false
29
+
30
+ // Strong self-retain across the async PassKit flow. Released on didFinish.
31
+ private var retainCycle: ApplePayPresenter?
32
+
33
+ private static let supportedNetworks: [PKPaymentNetwork] = [
34
+ .visa, .masterCard, .amex, .discover, .JCB
35
+ ]
36
+
37
+ init(amount: Int,
38
+ currency: String,
39
+ owner: FrameApplePayViewModel.PaymentMethodOwner,
40
+ merchantId: String,
41
+ resolve: @escaping (Any?) -> Void,
42
+ reject: @escaping (String, String, Error?) -> Void) {
43
+ self.amount = amount
44
+ self.currency = currency
45
+ self.owner = owner
46
+ self.merchantId = merchantId
47
+ self.resolve = resolve
48
+ self.reject = reject
49
+ }
50
+
51
+ static func canMakePayments() -> Bool {
52
+ PKPaymentAuthorizationController.canMakePayments(usingNetworks: supportedNetworks)
53
+ }
54
+
55
+ func present() {
56
+ let request = PKPaymentRequest()
57
+ request.merchantIdentifier = merchantId
58
+ request.supportedNetworks = Self.supportedNetworks
59
+ request.merchantCapabilities = .threeDSecure
60
+ request.countryCode = "US"
61
+ request.currencyCode = currency.uppercased()
62
+ request.requiredBillingContactFields = [.postalAddress, .name, .emailAddress]
63
+ request.paymentSummaryItems = [
64
+ PKPaymentSummaryItem(
65
+ label: "Total",
66
+ amount: NSDecimalNumber(value: Double(amount) / 100.0)
67
+ )
68
+ ]
69
+
70
+ let controller = PKPaymentAuthorizationController(paymentRequest: request)
71
+ controller.delegate = self
72
+ retainCycle = self
73
+ Task { await controller.present() }
74
+ }
75
+
76
+ // MARK: - PKPaymentAuthorizationControllerDelegate
77
+
78
+ func paymentAuthorizationController(
79
+ _ controller: PKPaymentAuthorizationController,
80
+ didAuthorizePayment payment: PKPayment
81
+ ) async -> PKPaymentAuthorizationResult {
82
+ do {
83
+ let (paymentMethod, methodError): (FrameObjects.PaymentMethod?, NetworkingError?)
84
+ switch owner {
85
+ case .customer(let customerId):
86
+ (paymentMethod, methodError) = try await ApplePayAPI.createPaymentMethodWithCustomerId(
87
+ from: payment, customerId: customerId
88
+ )
89
+ case .account(let accountId):
90
+ (paymentMethod, methodError) = try await ApplePayAPI.createPaymentMethodWithAccountId(
91
+ from: payment, accountId: accountId
92
+ )
93
+ }
94
+
95
+ guard let paymentMethodId = paymentMethod?.id else {
96
+ deliverFailure(code: "PAYMENT_METHOD_FAILED", error: methodError)
97
+ return PKPaymentAuthorizationResult(status: .failure, errors: nil)
98
+ }
99
+
100
+ let request: ChargeIntentsRequests.CreateChargeIntentRequest
101
+ switch owner {
102
+ case .customer(let customerId):
103
+ request = ChargeIntentsRequests.CreateChargeIntentRequest(
104
+ amount: amount, currency: currency, customer: customerId,
105
+ paymentMethod: paymentMethodId, confirm: true, authorizationMode: .automatic
106
+ )
107
+ case .account(let accountId):
108
+ request = ChargeIntentsRequests.CreateChargeIntentRequest(
109
+ amount: amount, currency: currency, account: accountId,
110
+ paymentMethod: paymentMethodId, confirm: true, authorizationMode: .automatic
111
+ )
112
+ }
113
+ let (chargeIntent, chargeError) = try await ChargeIntentsAPI.createChargeIntent(request: request)
114
+
115
+ if let chargeIntent {
116
+ deliverSuccess(chargeIntent)
117
+ return PKPaymentAuthorizationResult(status: .success, errors: nil)
118
+ } else {
119
+ deliverFailure(code: "CHARGE_INTENT_FAILED", error: chargeError)
120
+ return PKPaymentAuthorizationResult(status: .failure, errors: nil)
121
+ }
122
+ } catch {
123
+ deliverFailure(code: "PAYMENT_FAILED", error: error)
124
+ return PKPaymentAuthorizationResult(status: .failure, errors: nil)
125
+ }
126
+ }
127
+
128
+ func paymentAuthorizationControllerDidFinish(_ controller: PKPaymentAuthorizationController) {
129
+ controller.dismiss()
130
+ if !didDeliverResult {
131
+ reject("USER_CANCELED", "User dismissed Apple Pay sheet without authorizing", nil)
132
+ didDeliverResult = true
133
+ }
134
+ retainCycle = nil
135
+ }
136
+
137
+ // MARK: - Result delivery
138
+
139
+ private func deliverSuccess(_ intent: FrameObjects.ChargeIntent) {
140
+ guard !didDeliverResult else { return }
141
+ didDeliverResult = true
142
+ if let dict = FrameSDKBridge.encodeChargeIntent(intent) {
143
+ resolve(dict)
144
+ } else {
145
+ reject("ENCODE_ERROR", "Failed to encode charge intent", nil)
146
+ }
147
+ }
148
+
149
+ private func deliverFailure(code: String, error: Error?) {
150
+ guard !didDeliverResult else { return }
151
+ didDeliverResult = true
152
+ let message = error?.localizedDescription ?? "Apple Pay failed"
153
+ reject(code, message, error)
154
+ }
155
+ }
@@ -16,10 +16,16 @@ Pod::Spec.new do |s|
16
16
 
17
17
  s.dependency 'React-Core'
18
18
 
19
- # Frame-iOS SDK must be available to the app. Add via Swift Package Manager in Xcode:
20
- # File → Add Package Dependencies → https://github.com/Frame-Payments/frame-ios
21
- # Our native code imports Frame; ensure the app target links Frame-iOS (SPM).
22
- # If Frame-iOS is provided as a pod in the future, uncomment:
19
+ # Frame-iOS SDK (Frame + FrameOnboarding) must be available to the app.
20
+ #
21
+ # SPM users (RN >= 0.73): add framepayments-react-native via Swift Package Manager.
22
+ # Frame and FrameOnboarding are declared as dependencies in Package.swift and resolve
23
+ # automatically — no manual step required.
24
+ #
25
+ # CocoaPods users: add frame-ios manually via Xcode:
26
+ # File → Add Package Dependencies → https://github.com/Frame-Payments/frame-ios
27
+ # Add both the "Frame-iOS" and "Frame-Onboarding" products to your app target.
28
+ # If Frame-iOS is published as a pod in the future, replace the above with:
23
29
  # s.dependency 'Frame-iOS'
24
30
 
25
31
  install_modules_dependencies(s) if respond_to?(:install_modules_dependencies)
@@ -25,7 +25,8 @@
25
25
 
26
26
  @interface RCT_EXTERN_MODULE(FrameSDK, FrameSDKModule)
27
27
 
28
- RCT_EXTERN_METHOD(initialize:(NSString *)apiKey
28
+ RCT_EXTERN_METHOD(initialize:(NSString *)secretKey
29
+ publishableKey:(NSString *)publishableKey
29
30
  debugMode:(BOOL)debugMode
30
31
  resolver:(RCTPromiseResolveBlock)resolve
31
32
  rejecter:(RCTPromiseRejectBlock)reject)
@@ -41,6 +42,19 @@ RCT_EXTERN_METHOD(presentCart:(id)customerId
41
42
  resolver:(RCTPromiseResolveBlock)resolve
42
43
  rejecter:(RCTPromiseRejectBlock)reject)
43
44
 
45
+ RCT_EXTERN_METHOD(presentOnboarding:(id)accountId
46
+ capabilities:(NSArray *)capabilities
47
+ resolver:(RCTPromiseResolveBlock)resolve
48
+ rejecter:(RCTPromiseRejectBlock)reject)
49
+
50
+ RCT_EXTERN_METHOD(presentApplePay:(NSString *)ownerType
51
+ ownerId:(NSString *)ownerId
52
+ amount:(nonnull NSNumber *)amount
53
+ currency:(NSString *)currency
54
+ merchantId:(NSString *)merchantId
55
+ resolver:(RCTPromiseResolveBlock)resolve
56
+ rejecter:(RCTPromiseRejectBlock)reject)
57
+
44
58
  @end
45
59
 
46
60
  @implementation FrameSDK
@@ -52,8 +66,8 @@ RCT_EXTERN_METHOD(presentCart:(id)customerId
52
66
  return YES;
53
67
  }
54
68
 
55
- - (void)initialize:(NSString *)apiKey debugMode:(BOOL)debugMode resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject {
56
- [[[ObjCFrameSDKBridge alloc] init] initialize:apiKey debugMode:debugMode resolver:resolve rejecter:reject];
69
+ - (void)initialize:(NSString *)secretKey publishableKey:(NSString *)publishableKey debugMode:(BOOL)debugMode resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject {
70
+ [[[ObjCFrameSDKBridge alloc] init] initialize:secretKey publishableKey:publishableKey debugMode:debugMode resolver:resolve rejecter:reject];
57
71
  }
58
72
 
59
73
  - (void)presentCheckout:(id)customerId amount:(NSNumber *)amount resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject {
@@ -75,8 +89,23 @@ RCT_EXTERN_METHOD(presentCart:(id)customerId
75
89
  reject(@"NO_ROOT_VC", @"Could not find root view controller to present cart", nil);
76
90
  return;
77
91
  }
78
- [[[ObjCFrameSDKBridge alloc] init] presentCartFrom:topVC customerId:customerId items:items shippingAmountInCents:shippingAmountInCents resolver:resolve rejecter:reject];
92
+ [[[ObjCFrameSDKBridge alloc] init] presentCartFrom:topVC customerId:customerId items:items shippingAmountInCents:shippingAmountInCents.integerValue resolver:resolve rejecter:reject];
79
93
  });
80
94
  }
81
95
 
96
+ - (void)presentOnboarding:(id)accountId capabilities:(NSArray *)capabilities resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject {
97
+ dispatch_async(dispatch_get_main_queue(), ^{
98
+ UIViewController *topVC = FrameGetTopViewController();
99
+ if (!topVC) {
100
+ reject(@"NO_ROOT_VC", @"Could not find root view controller to present onboarding", nil);
101
+ return;
102
+ }
103
+ [[[ObjCFrameSDKBridge alloc] init] presentOnboardingFrom:topVC accountId:accountId capabilities:capabilities resolver:resolve rejecter:reject];
104
+ });
105
+ }
106
+
107
+ - (void)presentApplePay:(NSString *)ownerType ownerId:(NSString *)ownerId amount:(NSNumber *)amount currency:(NSString *)currency merchantId:(NSString *)merchantId resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject {
108
+ [[[ObjCFrameSDKBridge alloc] init] presentApplePay:ownerType ownerId:ownerId amount:amount.intValue currency:currency merchantId:merchantId resolver:resolve rejecter:reject];
109
+ }
110
+
82
111
  @end
@@ -10,6 +10,7 @@ import React
10
10
  import UIKit
11
11
  import SwiftUI
12
12
  import Frame
13
+ import FrameOnboarding
13
14
 
14
15
  @objc(ObjCFrameSDKBridge)
15
16
  public class FrameSDKBridge: NSObject {
@@ -19,9 +20,9 @@ public class FrameSDKBridge: NSObject {
19
20
  }
20
21
 
21
22
  @objc public
22
- func initialize(_ apiKey: String, debugMode: Bool, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
23
+ func initialize(_ secretKey: String, publishableKey: String, debugMode: Bool, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
23
24
  DispatchQueue.main.async {
24
- FrameNetworking.shared.initializeWithAPIKey(apiKey, debugMode: debugMode)
25
+ FrameNetworking.shared.initializeWithAPIKey(secretKey, publishableKey: publishableKey, debugMode: debugMode)
25
26
  resolve(nil)
26
27
  }
27
28
  }
@@ -40,13 +41,66 @@ public class FrameSDKBridge: NSObject {
40
41
  presentCartOnMain(from: viewController, customerId: customerId as? String, cartItems: cartItems, shippingAmountInCents: shippingAmountInCents, resolve: resolve, reject: reject)
41
42
  }
42
43
 
44
+ @objc public
45
+ func presentOnboarding(from viewController: UIViewController, accountId: NSObject?, capabilities: NSArray, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
46
+ let parsedCapabilities = parseCapabilities(capabilities)
47
+ let accountIdString = accountId as? String
48
+ presentOnboardingOnMain(from: viewController, accountId: accountIdString, capabilities: parsedCapabilities, resolve: resolve, reject: reject)
49
+ }
50
+
51
+ @objc public
52
+ func presentApplePay(_ ownerType: String, ownerId: String, amount: Int, currency: String, merchantId: String, resolver resolve: @escaping RCTPromiseResolveBlock, rejecter reject: @escaping RCTPromiseRejectBlock) {
53
+ DispatchQueue.main.async {
54
+ Task { @MainActor in
55
+ let owner: FrameApplePayViewModel.PaymentMethodOwner
56
+ switch ownerType {
57
+ case "customer": owner = .customer(ownerId)
58
+ case "account": owner = .account(ownerId)
59
+ default:
60
+ reject("INVALID_OWNER", "owner.type must be 'customer' or 'account'", nil)
61
+ return
62
+ }
63
+ guard !ownerId.isEmpty else {
64
+ reject("INVALID_OWNER", "owner.id must be non-empty", nil)
65
+ return
66
+ }
67
+ guard !merchantId.isEmpty else {
68
+ reject("INVALID_MERCHANT_ID", "merchantId must be non-empty", nil)
69
+ return
70
+ }
71
+ guard ApplePayPresenter.canMakePayments() else {
72
+ reject("APPLE_PAY_UNAVAILABLE", "This device cannot make Apple Pay payments", nil)
73
+ return
74
+ }
75
+ guard DeviceAttestationManager.shared.isDeviceAttested else {
76
+ // Kick off attestation asynchronously so the next attempt has a chance to succeed.
77
+ Task { try? await DeviceAttestationManager.shared.attestDevice() }
78
+ reject("NOT_ATTESTED", "Device attestation has not completed yet. Please try again.", nil)
79
+ return
80
+ }
81
+
82
+ let presenter = ApplePayPresenter(
83
+ amount: amount,
84
+ currency: currency,
85
+ owner: owner,
86
+ merchantId: merchantId,
87
+ resolve: { resolve($0) },
88
+ reject: { code, message, error in reject(code, message, error) }
89
+ )
90
+ presenter.present()
91
+ }
92
+ }
93
+ }
94
+
95
+ // MARK: - Private helpers
96
+
43
97
  private func presentCheckoutOnMain(from top: UIViewController, customerId: String?, amount: Int, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
44
- let delegate = CheckoutDismissDelegate(resolve: resolve, reject: reject)
45
- let checkoutView = FrameCheckoutView(
98
+ var hosting: CheckoutHostingController!
99
+ hosting = CheckoutHostingController(rootView: FrameCheckoutView(
46
100
  customerId: customerId,
47
101
  paymentAmount: amount,
48
- checkoutCallback: { [weak delegate] chargeIntent in
49
- delegate?.didComplete = true
102
+ checkoutCallback: { [weak hosting] chargeIntent in
103
+ hosting?.didComplete = true
50
104
  top.dismiss(animated: true)
51
105
  DispatchQueue.main.async {
52
106
  if let dict = Self.encodeChargeIntent(chargeIntent) {
@@ -56,18 +110,22 @@ public class FrameSDKBridge: NSObject {
56
110
  }
57
111
  }
58
112
  }
59
- )
60
- let hosting = UIHostingController(rootView: checkoutView)
113
+ ))
114
+ hosting.onCancel = {
115
+ DispatchQueue.main.async {
116
+ reject("USER_CANCELED", "User dismissed checkout without completing payment", nil)
117
+ }
118
+ }
61
119
  hosting.modalPresentationStyle = UIModalPresentationStyle.pageSheet
62
120
  if let sheet = hosting.sheetPresentationController {
63
121
  sheet.detents = [UISheetPresentationController.Detent.large()]
64
122
  }
65
- objc_setAssociatedObject(hosting, &checkoutDismissKey, delegate, .OBJC_ASSOCIATION_RETAIN)
66
- hosting.presentationController?.delegate = delegate
67
- top.present(hosting, animated: true)
123
+ top.present(hosting, animated: true) {
124
+ hosting.presentationController?.delegate = hosting
125
+ }
68
126
  }
69
127
 
70
- private static func encodeChargeIntent(_ intent: FrameObjects.ChargeIntent) -> [String: Any]? {
128
+ internal static func encodeChargeIntent(_ intent: FrameObjects.ChargeIntent) -> [String: Any]? {
71
129
  guard let data = try? JSONEncoder().encode(intent) else { return nil }
72
130
  return try? JSONSerialization.jsonObject(with: data) as? [String: Any]
73
131
  }
@@ -92,6 +150,16 @@ public class FrameSDKBridge: NSObject {
92
150
  return result
93
151
  }
94
152
 
153
+ private func parseCapabilities(_ capabilities: NSArray) -> [FrameObjects.Capabilities] {
154
+ var result: [FrameObjects.Capabilities] = []
155
+ for item in capabilities {
156
+ guard let raw = item as? String,
157
+ let cap = FrameObjects.Capabilities(rawValue: raw) else { continue }
158
+ result.append(cap)
159
+ }
160
+ return result
161
+ }
162
+
95
163
  private func presentCartOnMain(from top: UIViewController, customerId: String?, cartItems: [RNFrameCartItem], shippingAmountInCents: Int, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
96
164
  let cartView = FrameCartView(
97
165
  customer: nil,
@@ -106,27 +174,73 @@ public class FrameSDKBridge: NSObject {
106
174
  // When the sheet is dismissed (swipe or close), resolve. Note: FrameCartView does not expose ChargeIntent from nested checkout.
107
175
  let delegate = CartDismissDelegate(resolve: resolve)
108
176
  objc_setAssociatedObject(hosting, &cartDismissKey, delegate, .OBJC_ASSOCIATION_RETAIN)
109
- hosting.presentationController?.delegate = delegate
110
- top.present(hosting, animated: true)
177
+ top.present(hosting, animated: true) {
178
+ hosting.presentationController?.delegate = delegate
179
+ }
180
+ }
181
+
182
+ private func presentOnboardingOnMain(from top: UIViewController, accountId: String?, capabilities: [FrameObjects.Capabilities], resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
183
+ let hosting = OnboardingHostingController(
184
+ rootView: OnboardingContainerView(
185
+ accountId: accountId,
186
+ requiredCapabilities: capabilities
187
+ )
188
+ )
189
+ hosting.modalPresentationStyle = UIModalPresentationStyle.pageSheet
190
+ if let sheet = hosting.sheetPresentationController {
191
+ sheet.detents = [UISheetPresentationController.Detent.large()]
192
+ }
193
+ let delegate = OnboardingDismissDelegate(hosting: hosting, resolve: resolve)
194
+ objc_setAssociatedObject(hosting, &onboardingDismissKey, delegate, .OBJC_ASSOCIATION_RETAIN)
195
+ hosting.onProgrammaticDismiss = { [weak delegate] in
196
+ delegate?.finish(completed: true)
197
+ }
198
+ top.present(hosting, animated: true) {
199
+ hosting.presentationController?.delegate = delegate
200
+ }
111
201
  }
112
202
  }
113
203
 
114
- private final class CheckoutDismissDelegate: NSObject, UIAdaptivePresentationControllerDelegate {
115
- let resolve: RCTPromiseResolveBlock
116
- let reject: RCTPromiseRejectBlock
204
+ // MARK: - CheckoutHostingController
205
+
206
+ private final class CheckoutHostingController: UIHostingController<FrameCheckoutView>, UIAdaptivePresentationControllerDelegate {
117
207
  var didComplete = false
118
- init(resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock) {
119
- self.resolve = resolve
120
- self.reject = reject
208
+ var onCancel: (() -> Void)?
209
+ private var cancelled = false
210
+
211
+ func cancel() {
212
+ guard !didComplete, !cancelled else { return }
213
+ cancelled = true
214
+ onCancel?()
121
215
  }
216
+
217
+ override func viewDidDisappear(_ animated: Bool) {
218
+ super.viewDidDisappear(animated)
219
+ cancel()
220
+ }
221
+
122
222
  func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {
123
- guard !didComplete else { return }
124
- DispatchQueue.main.async { [reject] in
125
- reject("USER_CANCELED", "User dismissed checkout without completing payment", nil)
126
- }
223
+ cancel()
224
+ }
225
+ }
226
+
227
+ // MARK: - OnboardingHostingController
228
+
229
+ private final class OnboardingHostingController<V: View>: UIHostingController<V> {
230
+ var programmaticDismiss = false
231
+ var onProgrammaticDismiss: (() -> Void)?
232
+
233
+ override func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
234
+ programmaticDismiss = true
235
+ super.dismiss(animated: flag, completion: { [weak self] in
236
+ self?.onProgrammaticDismiss?()
237
+ completion?()
238
+ })
127
239
  }
128
240
  }
129
241
 
242
+ // MARK: - Delegates
243
+
130
244
  private final class CartDismissDelegate: NSObject, UIAdaptivePresentationControllerDelegate {
131
245
  let resolve: RCTPromiseResolveBlock
132
246
  init(resolve: @escaping RCTPromiseResolveBlock) { self.resolve = resolve }
@@ -137,6 +251,26 @@ private final class CartDismissDelegate: NSObject, UIAdaptivePresentationControl
137
251
  }
138
252
  }
139
253
 
140
- private var cartDismissKey: UInt8 = 0
141
- private var checkoutDismissKey: UInt8 = 0
254
+ private final class OnboardingDismissDelegate: NSObject, UIAdaptivePresentationControllerDelegate {
255
+ let resolve: RCTPromiseResolveBlock
256
+ var didFinish = false
142
257
 
258
+ init(hosting: OnboardingHostingController<OnboardingContainerView>, resolve: @escaping RCTPromiseResolveBlock) {
259
+ self.resolve = resolve
260
+ }
261
+
262
+ func finish(completed: Bool) {
263
+ guard !didFinish else { return }
264
+ didFinish = true
265
+ DispatchQueue.main.async { [resolve, completed] in
266
+ resolve(["status": completed ? "completed" : "cancelled"])
267
+ }
268
+ }
269
+
270
+ func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {
271
+ finish(completed: false)
272
+ }
273
+ }
274
+
275
+ private var cartDismissKey: UInt8 = 0
276
+ private var onboardingDismissKey: UInt8 = 0
@@ -0,0 +1,30 @@
1
+ /**
2
+ * <FrameApplePayButton /> — iOS-only React Native view that wraps Frame iOS SDK's
3
+ * native FrameApplePayButton (PassKit + automatic device attestation).
4
+ *
5
+ * On non-iOS platforms this component renders nothing, so consumers can place it
6
+ * unconditionally in their JSX.
7
+ */
8
+ import * as React from 'react';
9
+ import { type NativeSyntheticEvent, type ViewProps } from 'react-native';
10
+ import type { ApplePayButtonStyle, ApplePayButtonType, ApplePayOwner, FrameApplePayResultEvent } from '../types';
11
+ export interface FrameApplePayButtonProps extends ViewProps {
12
+ /** Payment amount in cents. */
13
+ amount: number;
14
+ /** ISO 4217 currency code. Defaults to 'usd'. */
15
+ currency?: string;
16
+ /** Customer or account that owns the resulting payment method. */
17
+ owner: ApplePayOwner;
18
+ /** Apple Pay merchant ID configured in your Apple Developer account. */
19
+ merchantId: string;
20
+ /** When true, the button renders a "Or" divider beneath itself for inline checkout layouts. */
21
+ addCheckoutDivider?: boolean;
22
+ /** PassKit button type. Defaults to 'buy'. */
23
+ buttonType?: ApplePayButtonType;
24
+ /** PassKit button style. Defaults to 'black'. */
25
+ buttonStyle?: ApplePayButtonStyle;
26
+ /** Fired when payment completes, fails, or the button reports an error. */
27
+ onResult: (event: NativeSyntheticEvent<FrameApplePayResultEvent>) => void;
28
+ }
29
+ export declare const FrameApplePayButton: React.FC<FrameApplePayButtonProps>;
30
+ //# sourceMappingURL=FrameApplePayButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrameApplePayButton.d.ts","sourceRoot":"","sources":["../../src/components/FrameApplePayButton.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,wBAAwB,EACzB,MAAM,UAAU,CAAC;AAElB,MAAM,WAAW,wBAAyB,SAAQ,SAAS;IACzD,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,KAAK,EAAE,aAAa,CAAC;IACrB,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,+FAA+F;IAC/F,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,8CAA8C;IAC9C,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,iDAAiD;IACjD,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,2EAA2E;IAC3E,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,wBAAwB,CAAC,KAAK,IAAI,CAAC;CAC3E;AA+BD,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAclE,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * <FrameApplePayButton /> — iOS-only React Native view that wraps Frame iOS SDK's
3
+ * native FrameApplePayButton (PassKit + automatic device attestation).
4
+ *
5
+ * On non-iOS platforms this component renders nothing, so consumers can place it
6
+ * unconditionally in their JSX.
7
+ */
8
+ import * as React from 'react';
9
+ import { Platform, StyleSheet, requireNativeComponent, } from 'react-native';
10
+ const NativeFrameApplePayButton = Platform.OS === 'ios'
11
+ ? requireNativeComponent('FrameApplePayButtonView')
12
+ : null;
13
+ let warnedAboutOwner = false;
14
+ function warnIfBadOwner(owner) {
15
+ if (!owner ||
16
+ (owner.type !== 'customer' && owner.type !== 'account') ||
17
+ typeof owner.id !== 'string' ||
18
+ owner.id.length === 0) {
19
+ if (!warnedAboutOwner) {
20
+ warnedAboutOwner = true;
21
+ // eslint-disable-next-line no-console
22
+ console.warn('[FrameApplePayButton] `owner` must be { type: "customer" | "account", id: string }. The button will not render until a valid owner is provided.');
23
+ }
24
+ return false;
25
+ }
26
+ return true;
27
+ }
28
+ export const FrameApplePayButton = (props) => {
29
+ if (Platform.OS !== 'ios' || NativeFrameApplePayButton === null) {
30
+ return null;
31
+ }
32
+ if (!warnIfBadOwner(props.owner)) {
33
+ return null;
34
+ }
35
+ const { style, ...rest } = props;
36
+ return (<NativeFrameApplePayButton {...rest} style={[styles.button, style]}/>);
37
+ };
38
+ const styles = StyleSheet.create({
39
+ button: {
40
+ height: 50,
41
+ },
42
+ });
@@ -0,0 +1,28 @@
1
+ /**
2
+ * <FrameGooglePayButton /> — Android-only React Native view that wraps Frame Android SDK's
3
+ * native FrameGooglePayButton (Google Pay PaymentsClient + readiness check).
4
+ *
5
+ * On non-Android platforms this component renders nothing, so consumers can place it
6
+ * unconditionally in their JSX.
7
+ */
8
+ import * as React from 'react';
9
+ import { type NativeSyntheticEvent, type ViewProps } from 'react-native';
10
+ import type { FrameGooglePayResultEvent } from '../types';
11
+ export interface FrameGooglePayButtonProps extends ViewProps {
12
+ /** Payment amount in cents. */
13
+ amountCents: number;
14
+ /** Optional Frame customer ID to associate the resulting payment method with. */
15
+ customerId?: string;
16
+ /** ISO 4217 currency code. Defaults to 'USD'. */
17
+ currencyCode?: string;
18
+ /** Optional override for the Google Pay merchant ID. */
19
+ googlePayMerchantId?: string;
20
+ /** Fired when payment completes, fails, or the user cancels the Google Pay sheet. */
21
+ onResult: (event: NativeSyntheticEvent<FrameGooglePayResultEvent>) => void;
22
+ /** Fired when Google Pay readiness changes (button shows/hides itself accordingly). */
23
+ onReadinessChanged?: (event: NativeSyntheticEvent<{
24
+ isReady: boolean;
25
+ }>) => void;
26
+ }
27
+ export declare const FrameGooglePayButton: React.FC<FrameGooglePayButtonProps>;
28
+ //# sourceMappingURL=FrameGooglePayButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrameGooglePayButton.d.ts","sourceRoot":"","sources":["../../src/components/FrameGooglePayButton.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAIL,KAAK,oBAAoB,EACzB,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAE1D,MAAM,WAAW,yBAA0B,SAAQ,SAAS;IAC1D,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qFAAqF;IACrF,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,yBAAyB,CAAC,KAAK,IAAI,CAAC;IAC3E,uFAAuF;IACvF,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,KAAK,IAAI,CAAC;CAClF;AAOD,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAWpE,CAAC"}