diff --git a/android/src/main/java/com/boltreactnativesdk/BoltReactNativeSdkPackage.kt b/android/src/main/java/com/boltreactnativesdk/BoltReactNativeSdkPackage.kt index 8a1aacf..813a4ca 100644 --- a/android/src/main/java/com/boltreactnativesdk/BoltReactNativeSdkPackage.kt +++ b/android/src/main/java/com/boltreactnativesdk/BoltReactNativeSdkPackage.kt @@ -9,10 +9,11 @@ import com.facebook.react.uimanager.ViewManager class BoltReactNativeSdkPackage : BaseReactPackage() { override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? { - return if (name == BoltReactNativeSdkModule.NAME) { - BoltReactNativeSdkModule(reactContext) - } else { - null + return when (name) { + BoltReactNativeSdkModule.NAME -> BoltReactNativeSdkModule(reactContext) + GooglePayModule.NAME -> GooglePayModule(reactContext) + NetworkingModule.NAME -> NetworkingModule(reactContext) + else -> null } } @@ -25,6 +26,22 @@ class BoltReactNativeSdkPackage : BaseReactPackage() { needsEagerInit = false, isCxxModule = false, isTurboModule = true + ), + GooglePayModule.NAME to ReactModuleInfo( + name = GooglePayModule.NAME, + className = GooglePayModule.NAME, + canOverrideExistingModule = false, + needsEagerInit = false, + isCxxModule = false, + isTurboModule = false + ), + NetworkingModule.NAME to ReactModuleInfo( + name = NetworkingModule.NAME, + className = NetworkingModule.NAME, + canOverrideExistingModule = false, + needsEagerInit = false, + isCxxModule = false, + isTurboModule = false ) ) } diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index a3a8c99..1f81a34 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -1,5 +1,5 @@ PODS: - - BoltReactNativeSdk (0.5.4): + - BoltReactNativeSdk (0.5.5): - hermes-engine - RCTRequired - RCTTypeSafety @@ -2063,82 +2063,82 @@ EXTERNAL SOURCES: :path: "../../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - BoltReactNativeSdk: 864da565871dba0ae2e0844e77cd58297c068af7 + BoltReactNativeSdk: 7c0e547a3dcd436f8fb53cfb03b3181b6a639506 FBLazyVector: c12d2108050e27952983d565a232f6f7b1ad5e69 hermes-engine: f4f579ea06f83a03800993f3f445a5025f78f893 RCTDeprecation: 3280799c14232a56e5a44f92981a8ee33bc69fd9 RCTRequired: 9854a51b0f65ccf43ea0b744df4d70fce339db32 RCTSwiftUI: 96986e49a4fdc2c2103929dee2641e1b57edf33d - RCTSwiftUIWrapper: e3eed9f50cad9f171e4487e2ff18a9caa4d46bfb + RCTSwiftUIWrapper: 55e482219b78c2c652123fea845a6b1716fa97e7 RCTTypeSafety: e9ba155357c236764934054ee2d393fd76e7b36b React: 7ef36630d07638043a134a7dd2ec17e0be10fc3c React-callinvoker: af4e8fe1d60ab63dd8d74c2a68988064c2848954 - React-Core: c0fb1df65eb0ed7a8633841831f05f93c3eb3aff + React-Core: c609976c034ba9556bef9850a571a71bd458d73f React-Core-prebuilt: 928f6ec2b2d866ee5c4029942c412ae36485ad98 - React-CoreModules: 7dfe7962360355f1547c85ab52e1fc4b57f17127 - React-cxxreact: 9e9c7f1710bc58abebf924813b5e825b99adb8e5 + React-CoreModules: 0ea85f3b3f4b8cbfb3afacd2ed85458fb878517a + React-cxxreact: 6752bab77c0599d6136e2b8b9b64b4a7d316d401 React-debug: 38389b86e3570558ec73dd4cbc0cd2f2eec47a51 - React-defaultsnativemodule: a326ccbb71369762888a6be09a23fa5bce2bdb6a - React-domnativemodule: 8394c7b535d1b484b1eab677e00b086507cd906a - React-Fabric: 682dafd75455062590cd1f63c79199cf72ff27d9 - React-FabricComponents: 11b13a53213cd1aaca3bf7f4c61c669617b26b5f - React-FabricImage: 706c27e82f77b77db96ab3a19009ddb5e777967f - React-featureflags: c2898fb2f93ab92cfd9f294b4531d2884e7cfc7e - React-featureflagsnativemodule: 1edf93adfa12ba4f15d07079c1675b55ff579477 - React-graphics: 57d042385bfef5104aafeab189f43b8d6145013b - React-hermes: 96d2d439f0477a93fe8e801664088eccc07a16ff - React-idlecallbacksnativemodule: ab4dc6c3657f434f82c568ca83c963791e783f6a - React-ImageManager: f39057f375cf3f98255fb751df3865a91f2755c1 - React-intersectionobservernativemodule: 54ce679b183149fd9566a79211f2f54dc0a6fd1f - React-jserrorhandler: 2e92acff04ac815c6066c7cc08ea302610045db1 - React-jsi: dc97891e1ee7fa17cad01cd150c50f21e04bd51b - React-jsiexecutor: e1543ba5a8be761331c8158d91211079cc5b73a2 - React-jsinspector: 7a1d86673986db6666cacc8b95e92125397ab6ea - React-jsinspectorcdp: 38a0c116fd4965abf29261721db9b903923cb723 - React-jsinspectornetwork: cfeace6b40f13ba82980ba7cb730847a35675c7f - React-jsinspectortracing: 5507411117e51751dba0543cdee7916eb0388693 - React-jsitooling: e3a2df9043ab7b9ad11bbbfe4b33eb6762514f05 - React-jsitracing: ad179fab1c1e08a57fcdb840b7021b453f7a2b6d - React-logger: e40cc24a61d3a54c09bf4e83d5556b3b9d4c90aa - React-Mapbuffer: 53f28c81b84767a0b2fb4c0109dd7e4571226f76 - React-microtasksnativemodule: ddaf25a8d69f694bc880fb6055e34d79f1d50138 - react-native-webview: a0107c12442bf2ac454d509f615daef00f34df47 - React-NativeModulesApple: 14a8919451154ede904f2bca84b27703a09028ba - React-networking: 46c0037f9202c1919493b78662a47cbe13022fdd + React-defaultsnativemodule: c1c25636322de460083d9291bc813067aa706552 + React-domnativemodule: d1734e540ea9344ec1a024de5704d39063935049 + React-Fabric: 48a292ed21257b0d9639e3c4cc49047a2c8a7f8f + React-FabricComponents: 932d81e7e2de71c25a63c1832f76f123e1a091f3 + React-FabricImage: adbb7b606e96add2785646a1c81e285367f0d249 + React-featureflags: 2a6f0a8f885559e1192e8bb0c173de638529df20 + React-featureflagsnativemodule: 255521af601b622048ec50b5dbf104cc886762a8 + React-graphics: ddca902e78ca64a824c31d206b083a3f207d6d06 + React-hermes: b5df3aebd45da232c6e8c9d925260e9d64122d03 + React-idlecallbacksnativemodule: fb05344181eeb52c5fd54597599b6e71b05dcf21 + React-ImageManager: 4861de430733ee8cf9fd06acb9fdf65d8d551f9d + React-intersectionobservernativemodule: 6699faee489b3439a4961270e880d814690f4eea + React-jserrorhandler: a3a9796a152ddd2712403d7cd7903624003db4b6 + React-jsi: 2c0a2219dacbdf776c5c911fae6f8923813d1ff2 + React-jsiexecutor: 0c4082df04719e747ae6d728e4e238ef1de16457 + React-jsinspector: f4d6e379303d120888cd1e15e3e7e1b2b4d41b37 + React-jsinspectorcdp: 0147c000c3a9e05082d974fdb05f8fc0c470787d + React-jsinspectornetwork: d5e1b2d72d1a205aee8141906735bd85c4cb9a7c + React-jsinspectortracing: 8d52e3fcb00cf6c4fcdeac0ec7b10bfe819693e1 + React-jsitooling: 455d72275baff87bd39a8a1b315e0bd8b13fa8e9 + React-jsitracing: 5a15b0ecc476e47533236dbbf2b6e670d6d8aa41 + React-logger: 9e51e01455f15cb3ef87a09a1ec773cdb22d56c1 + React-Mapbuffer: 92b99e450e8ff598b27d6e4db3a75e04fd45e9a9 + React-microtasksnativemodule: 2fe0f2bd2840dedbd66c0ac249c64f977f39cc18 + react-native-webview: 3e303e80cadb5f17118c8c1502aa398e9287e415 + React-NativeModulesApple: 44a9474594566cd03659f92e38f42599c6b9dee4 + React-networking: db73d91466cb134fcbdaaa579fb2de14e2c2ea01 React-oscompat: b924b8609d06899f00ab1aa813b0cde9c5e12771 - React-perflogger: c3bb13800f795287e73a8c1991a2b8e5008ea3d0 - React-performancecdpmetrics: 851d2b18ba3d3d8cfb309bf468e5e93e46601122 - React-performancetimeline: 0a960aee139987151d2976813c47bef17dea3d3a + React-perflogger: 8afbf1c6c0e6d8f869cb2917492db19dc212312d + React-performancecdpmetrics: 9034e89102afda66d6c6fcb43233c24f3927fa78 + React-performancetimeline: 7860aafe1782694fa6b5ce7bae0dfd199fe049f7 React-RCTActionSheet: 21fbcd85f552d5d6575453d2e8c149535d9c6f46 - React-RCTAnimation: 2c8cb9508864bb15e9f8fe86242d8918f05278e9 - React-RCTAppDelegate: 1d52e34d25f5f1bed5c07e0717c40dc572a80010 - React-RCTBlob: bc487ebb909c23920af75c842b1405edba61b8ea - React-RCTFabric: 7de87d2635b95171a06d9fffd907c4ac17823ef2 - React-RCTFBReactNativeSpec: b3936c48bf5262dc57ba28f8c8208cd1b570964c - React-RCTImage: a591fc9f08dc6c7b63b9fb34f51a7c1f32bd9595 - React-RCTLinking: cb9553b27de77a63beb4e3ce95f82aa8f3bed602 - React-RCTNetwork: 576ba853aef49628238b4840e969217b826af156 - React-RCTRuntime: e0aa5ea63ba4e06c9028da5ae8b05cf72bc8a1ea - React-RCTSettings: 8caa15edae452a5c4cd064569d5357a2bee8de15 - React-RCTText: af9a1c8d7c135c4d3ffa2de253ca95544234a521 - React-RCTVibration: c1dd36479ca1c1a59d16db81e5a994e9be06a68b + React-RCTAnimation: e8840d9f68bbbcf766909d738b021d2c0df1be36 + React-RCTAppDelegate: 0a491adac54f255d549656cc016c61102aaddfb7 + React-RCTBlob: f3eceaf519cf0f7f159bb653b3431b26c956400f + React-RCTFabric: 6278c2bc45c4b5685f7d7027d86343048b3d906b + React-RCTFBReactNativeSpec: ba5c77a9658d3acb7cbc5653162661df1d63ed25 + React-RCTImage: 928e5125c8e5407f3c6c62d51593eb8000fb2a36 + React-RCTLinking: 80c236e6e837d297750aac8da269fab24d4e0fc1 + React-RCTNetwork: 9554720800c31ec6608ed8047a314252e40008ac + React-RCTRuntime: d37d53534c207677f86df9b9cb30b7dde8857327 + React-RCTSettings: 52a066ceedda0253d75755909ee14a11972b16dc + React-RCTText: dd2964c3f003549ef3ce9ac5b7966d1c79dc5875 + React-RCTVibration: dc9e7490a0e270b1ec905c13714434c809a276fa React-rendererconsistency: 32e7b98c05a3f237ecb524add21190036962e868 - React-renderercss: d65e9232e5033cd9c07b13fa429ce925b8143bd7 - React-rendererdebug: 25c6151116b7ea1f78af72afc64f2066ad29a61d - React-RuntimeApple: e036929884cc0d8088fe8a5a2d210e068d35e608 - React-RuntimeCore: 0c8a252051fe6b627f5147ac5b6a5298951472a8 - React-runtimeexecutor: 0765dddf1842e23e87ad13b2cb1bb72bb9005aeb - React-RuntimeHermes: 44cd4fdc4afa44fa782ddce8600e3cc90215fbc5 - React-runtimescheduler: 1966ff307933cdbafd480cb3aa1fdc90d9a6d539 - React-timing: 94c4a44dd2d10e4fc51fd42654fd5f67d68247ad - React-utils: 172d467a9c037d5ed51ee6eeaa6ad30ca1ebe1b1 - React-webperformancenativemodule: 9e3c5032dd30bf6418b741ab54ad26187b1c94c3 - ReactAppDependencyProvider: 625d2f6d9d5ef01acc9dfe2b5385504bbffd2ad0 - ReactCodegen: 2c233c1ca1755450b9811832826a8c13ef17638f - ReactCommon: cc0e38600f82487c5fe5d29150abb6fa9d981986 + React-renderercss: b5f27fdea2162033c44af42bd9da7eefb08603a6 + React-rendererdebug: 09e9a23444c9319c965d7f981f8f2d57d2f88428 + React-RuntimeApple: 7c2c6aff02da8f1d89c211baa0a98bb76b01dfed + React-RuntimeCore: 4b3688f2ddcaf644f8e645ec45b4d77ec9cf58f9 + React-runtimeexecutor: 8540253f799008af0485a9ec417b001e73a9dede + React-RuntimeHermes: abc8b8b62dec3d3f5d685d586dd4b2381fc36ea8 + React-runtimescheduler: a64d5a112f8f8bc58af6f3e3382452f6f91002c6 + React-timing: 1f40175beb4b55fa3f6de9f947cd7ed9275deb25 + React-utils: e157d1837edbb842b9c0201a6a144a4d3d395246 + React-webperformancenativemodule: 295dde5803df595cd9a266f44e4371bbf12a600e + ReactAppDependencyProvider: 6b7e8d8d974ed13fb66698d82c30c5e70c1f7d3a + ReactCodegen: 94936a2ae84049f797b4151aa12159ff64bc1c4f + ReactCommon: 92b53b0bd7f7d86154dc9f512c1ea5dee717cc72 ReactNativeDependencies: b8b12fb3347b90af7b2c3e42cd477e08639b9221 - Yoga: 0a3b1e85da3524bdc3e0161818c8881ad363f97b + Yoga: 772166513f9cd2d61a6251d0dacbbfaa5b537479 PODFILE CHECKSUM: 78bd2dac40336e9182d79665ac99612bed756d64 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/ios/ApplePayModule.mm b/ios/ApplePayModule.mm new file mode 100644 index 0000000..f26337f --- /dev/null +++ b/ios/ApplePayModule.mm @@ -0,0 +1,11 @@ +#import + +@interface RCT_EXTERN_MODULE(BoltApplePay, NSObject) +RCT_EXTERN_METHOD(canMakePayments:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject) +RCT_EXTERN_METHOD(requestPayment:(NSString *)configJson + publishableKey:(NSString *)publishableKey + baseUrl:(NSString *)baseUrl + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject) +@end diff --git a/ios/NetworkingModule.mm b/ios/NetworkingModule.mm new file mode 100644 index 0000000..97aa0c1 --- /dev/null +++ b/ios/NetworkingModule.mm @@ -0,0 +1,10 @@ +#import + +@interface RCT_EXTERN_MODULE(BoltNetworking, NSObject) +RCT_EXTERN_METHOD(request:(NSString *)method + url:(NSString *)url + headers:(NSString *)headers + body:(NSString *)body + resolve:(RCTPromiseResolveBlock)resolve + reject:(RCTPromiseRejectBlock)reject) +@end diff --git a/package.json b/package.json index a576173..065264a 100644 --- a/package.json +++ b/package.json @@ -109,6 +109,11 @@ "jsSrcsDir": "src", "android": { "javaPackageName": "com.boltreactnativesdk" + }, + "ios": { + "componentProvider": { + "BoltApplePayButton": "ApplePayButtonComponentView" + } } }, "dependencies": { diff --git a/src/native/NativeApplePayButton.android.ts b/src/native/NativeApplePayButton.android.ts new file mode 100644 index 0000000..795f529 --- /dev/null +++ b/src/native/NativeApplePayButton.android.ts @@ -0,0 +1,4 @@ +// Android stub — BoltApplePayButton is not registered on Android (iOS only). +// Metro resolves this file on Android instead of NativeApplePayButton.ts, +// preventing codegenNativeComponent('BoltApplePayButton') from being called. +export default null as any; diff --git a/src/native/NativeGooglePayButton.ios.ts b/src/native/NativeGooglePayButton.ios.ts new file mode 100644 index 0000000..e4256e5 --- /dev/null +++ b/src/native/NativeGooglePayButton.ios.ts @@ -0,0 +1,4 @@ +// iOS stub — BoltGooglePayButton is not registered on iOS (Android only). +// Metro resolves this file on iOS instead of NativeGooglePayButton.ts, +// preventing codegenNativeComponent('BoltGooglePayButton') from being called. +export default null as any;