mirror of
https://github.com/aljazceru/breez-sdk-liquid.git
synced 2026-01-22 23:44:27 +01:00
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:
@@ -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())
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user