Add request, response to API methods (#153)

* Add request, response to get_info()

* Add request, response to prepare_send_payment()

* Add request, response to restore()

* Add request, response to connect()

* Update lib/bindings/src/breez_liquid_sdk.udl

Co-authored-by: Ross Savage <551697+dangeross@users.noreply.github.com>

* Update lib/bindings/src/breez_liquid_sdk.udl

Co-authored-by: Ross Savage <551697+dangeross@users.noreply.github.com>

* Update lib/core/src/bindings.rs

Co-authored-by: Ross Savage <551697+dangeross@users.noreply.github.com>

* Fix bindings.rs call

* Update connect to handle ConnectRequest

---------

Co-authored-by: Ross Savage <551697+dangeross@users.noreply.github.com>
Co-authored-by: Ross Savage <hello@satimoto.com>
This commit is contained in:
ok300
2024-05-03 08:48:03 +00:00
committed by GitHub
parent 92542876e5
commit 708a3526c7
20 changed files with 581 additions and 223 deletions

View File

@@ -3,6 +3,116 @@ import breez_liquid_sdk.*
import com.facebook.react.bridge.*
import java.util.*
fun asConnectRequest(connectRequest: ReadableMap): ConnectRequest? {
if (!validateMandatoryFields(
connectRequest,
arrayOf(
"mnemonic",
"network",
),
)
) {
return null
}
val mnemonic = connectRequest.getString("mnemonic")!!
val dataDir = if (hasNonNullKey(connectRequest, "dataDir")) connectRequest.getString("dataDir") else null
val network = connectRequest.getString("network")?.let { asNetwork(it) }!!
return ConnectRequest(
mnemonic,
dataDir,
network,
)
}
fun readableMapOf(connectRequest: ConnectRequest): ReadableMap {
return readableMapOf(
"mnemonic" to connectRequest.mnemonic,
"dataDir" to connectRequest.dataDir,
"network" to connectRequest.network.name.lowercase(),
)
}
fun asConnectRequestList(arr: ReadableArray): List<ConnectRequest> {
val list = ArrayList<ConnectRequest>()
for (value in arr.toArrayList()) {
when (value) {
is ReadableMap -> list.add(asConnectRequest(value)!!)
else -> throw LsSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
}
}
return list
}
fun asGetInfoRequest(getInfoRequest: ReadableMap): GetInfoRequest? {
if (!validateMandatoryFields(
getInfoRequest,
arrayOf(
"withScan",
),
)
) {
return null
}
val withScan = getInfoRequest.getBoolean("withScan")
return GetInfoRequest(
withScan,
)
}
fun readableMapOf(getInfoRequest: GetInfoRequest): ReadableMap {
return readableMapOf(
"withScan" to getInfoRequest.withScan,
)
}
fun asGetInfoRequestList(arr: ReadableArray): List<GetInfoRequest> {
val list = ArrayList<GetInfoRequest>()
for (value in arr.toArrayList()) {
when (value) {
is ReadableMap -> list.add(asGetInfoRequest(value)!!)
else -> throw LsSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
}
}
return list
}
fun asGetInfoResponse(getInfoResponse: ReadableMap): GetInfoResponse? {
if (!validateMandatoryFields(
getInfoResponse,
arrayOf(
"balanceSat",
"pubkey",
),
)
) {
return null
}
val balanceSat = getInfoResponse.getDouble("balanceSat").toULong()
val pubkey = getInfoResponse.getString("pubkey")!!
return GetInfoResponse(
balanceSat,
pubkey,
)
}
fun readableMapOf(getInfoResponse: GetInfoResponse): ReadableMap {
return readableMapOf(
"balanceSat" to getInfoResponse.balanceSat,
"pubkey" to getInfoResponse.pubkey,
)
}
fun asGetInfoResponseList(arr: ReadableArray): List<GetInfoResponse> {
val list = ArrayList<GetInfoResponse>()
for (value in arr.toArrayList()) {
when (value) {
is ReadableMap -> list.add(asGetInfoResponse(value)!!)
else -> throw LsSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
}
}
return list
}
fun asPrepareReceiveRequest(prepareReceiveRequest: ReadableMap): PrepareReceiveRequest? {
if (!validateMandatoryFields(
prepareReceiveRequest,
@@ -77,6 +187,39 @@ fun asPrepareReceiveResponseList(arr: ReadableArray): List<PrepareReceiveRespons
return list
}
fun asPrepareSendRequest(prepareSendRequest: ReadableMap): PrepareSendRequest? {
if (!validateMandatoryFields(
prepareSendRequest,
arrayOf(
"invoice",
),
)
) {
return null
}
val invoice = prepareSendRequest.getString("invoice")!!
return PrepareSendRequest(
invoice,
)
}
fun readableMapOf(prepareSendRequest: PrepareSendRequest): ReadableMap {
return readableMapOf(
"invoice" to prepareSendRequest.invoice,
)
}
fun asPrepareSendRequestList(arr: ReadableArray): List<PrepareSendRequest> {
val list = ArrayList<PrepareSendRequest>()
for (value in arr.toArrayList()) {
when (value) {
is ReadableMap -> list.add(asPrepareSendRequest(value)!!)
else -> throw LsSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
}
}
return list
}
fun asPrepareSendResponse(prepareSendResponse: ReadableMap): PrepareSendResponse? {
if (!validateMandatoryFields(
prepareSendResponse,
@@ -167,6 +310,37 @@ fun asReceivePaymentResponseList(arr: ReadableArray): List<ReceivePaymentRespons
return list
}
fun asRestoreRequest(restoreRequest: ReadableMap): RestoreRequest? {
if (!validateMandatoryFields(
restoreRequest,
arrayOf(),
)
) {
return null
}
val backupPath = if (hasNonNullKey(restoreRequest, "backupPath")) restoreRequest.getString("backupPath") else null
return RestoreRequest(
backupPath,
)
}
fun readableMapOf(restoreRequest: RestoreRequest): ReadableMap {
return readableMapOf(
"backupPath" to restoreRequest.backupPath,
)
}
fun asRestoreRequestList(arr: ReadableArray): List<RestoreRequest> {
val list = ArrayList<RestoreRequest>()
for (value in arr.toArrayList()) {
when (value) {
is ReadableMap -> list.add(asRestoreRequest(value)!!)
else -> throw LsSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
}
}
return list
}
fun asSendPaymentResponse(sendPaymentResponse: ReadableMap): SendPaymentResponse? {
if (!validateMandatoryFields(
sendPaymentResponse,
@@ -200,43 +374,6 @@ fun asSendPaymentResponseList(arr: ReadableArray): List<SendPaymentResponse> {
return list
}
fun asWalletInfo(walletInfo: ReadableMap): WalletInfo? {
if (!validateMandatoryFields(
walletInfo,
arrayOf(
"balanceSat",
"pubkey",
),
)
) {
return null
}
val balanceSat = walletInfo.getDouble("balanceSat").toULong()
val pubkey = walletInfo.getString("pubkey")!!
return WalletInfo(
balanceSat,
pubkey,
)
}
fun readableMapOf(walletInfo: WalletInfo): ReadableMap {
return readableMapOf(
"balanceSat" to walletInfo.balanceSat,
"pubkey" to walletInfo.pubkey,
)
}
fun asWalletInfoList(arr: ReadableArray): List<WalletInfo> {
val list = ArrayList<WalletInfo>()
for (value in arr.toArrayList()) {
when (value) {
is ReadableMap -> list.add(asWalletInfo(value)!!)
else -> throw LsSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
}
}
return list
}
fun asNetwork(type: String): Network {
return Network.valueOf(type.uppercase())
}

View File

@@ -41,9 +41,7 @@ class BreezLiquidSDKModule(reactContext: ReactApplicationContext) : ReactContext
@ReactMethod
fun connect(
mnemonic: String,
dataDir: String,
network: String,
req: ReadableMap,
promise: Promise,
) {
if (bindingWallet != null) {
@@ -53,9 +51,14 @@ class BreezLiquidSDKModule(reactContext: ReactApplicationContext) : ReactContext
executor.execute {
try {
val dataDirTmp = dataDir.takeUnless { it.isEmpty() } ?: run { reactApplicationContext.filesDir.toString() + "/breezLiquidSdk" }
val networkTmp = asNetwork(network)
bindingWallet = connect(mnemonic, dataDirTmp, networkTmp)
var connectRequest =
asConnectRequest(
req,
) ?: run { throw LsSdkException.Generic(errMissingMandatoryField("req", "ConnectRequest")) }
connectRequest.dataDir = connectRequest.dataDir.takeUnless {
it.isEmpty()
} ?: run { reactApplicationContext.filesDir.toString() + "/breezLiquidSdk" }
bindingWallet = connect(connectRequest)
promise.resolve(readableMapOf("status" to "ok"))
} catch (e: Exception) {
promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e)
@@ -65,12 +68,16 @@ class BreezLiquidSDKModule(reactContext: ReactApplicationContext) : ReactContext
@ReactMethod
fun getInfo(
withScan: Boolean,
req: ReadableMap,
promise: Promise,
) {
executor.execute {
try {
val res = getBindingWallet().getInfo(withScan)
val getInfoRequest =
asGetInfoRequest(
req,
) ?: run { throw LsSdkException.Generic(errMissingMandatoryField("req", "GetInfoRequest")) }
val res = getBindingWallet().getInfo(getInfoRequest)
promise.resolve(readableMapOf(res))
} catch (e: Exception) {
promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e)
@@ -80,12 +87,16 @@ class BreezLiquidSDKModule(reactContext: ReactApplicationContext) : ReactContext
@ReactMethod
fun prepareSendPayment(
invoice: String,
req: ReadableMap,
promise: Promise,
) {
executor.execute {
try {
val res = getBindingWallet().prepareSendPayment(invoice)
val prepareSendRequest =
asPrepareSendRequest(req) ?: run {
throw LsSdkException.Generic(errMissingMandatoryField("req", "PrepareSendRequest"))
}
val res = getBindingWallet().prepareSendPayment(prepareSendRequest)
promise.resolve(readableMapOf(res))
} catch (e: Exception) {
promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e)
@@ -164,13 +175,16 @@ class BreezLiquidSDKModule(reactContext: ReactApplicationContext) : ReactContext
@ReactMethod
fun restore(
backupPath: String,
req: ReadableMap,
promise: Promise,
) {
executor.execute {
try {
val backupPathTmp = backupPath.takeUnless { it.isEmpty() }
getBindingWallet().restore(backupPathTmp)
val restoreRequest =
asRestoreRequest(
req,
) ?: run { throw LsSdkException.Generic(errMissingMandatoryField("req", "RestoreRequest")) }
getBindingWallet().restore(restoreRequest)
promise.resolve(readableMapOf("status" to "ok"))
} catch (e: Exception) {
promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e)