package com.reactnativestripesdk import com.facebook.react.bridge.ReactApplicationContext import com.stripe.android.customersheet.CustomerSheet import kotlinx.coroutines.CompletableDeferred class ReactNativeCustomerSessionProvider( val context: ReactApplicationContext, val intentConfiguration: CustomerSheet.IntentConfiguration, ) : CustomerSheet.CustomerSessionProvider() { private val stripeSdkModule = context.getNativeModule(StripeSdkModule::class.java) internal var provideSetupIntentClientSecretCallback: CompletableDeferred? = null internal var providesCustomerSessionClientSecretCallback: CompletableDeferred? = null override suspend fun intentConfiguration(): Result = Result.success(intentConfiguration) override suspend fun provideSetupIntentClientSecret(customerId: String): Result { CompletableDeferred().also { provideSetupIntentClientSecretCallback = it stripeSdkModule?.eventEmitter?.emitOnCustomerSessionProviderSetupIntentClientSecret() val resultFromJavascript = it.await() return Result.success(resultFromJavascript) } } override suspend fun providesCustomerSessionClientSecret(): Result { CompletableDeferred().also { providesCustomerSessionClientSecretCallback = it stripeSdkModule?.eventEmitter?.emitOnCustomerSessionProviderCustomerSessionClientSecret() val resultFromJavascript = it.await() return Result.success(resultFromJavascript) } } }