mirror of
https://github.com/aljazceru/breez-sdk-liquid.git
synced 2026-01-22 23:44:27 +01:00
Integrate sdk-common (#308)
* Rename Network to LiquidSdkNetwork to avoid naming conflicts with sdk-common * Integrate sdk-common: re-use parse_invoice * Fix UDL bindings tests * Add input parser support * CLI: Add input parser support * Integrate lnurl-pay * Cargo format, re-generate FRB and RN bindings * Duplicate LnUrlPayError, update FRB/UniFFI bindings * Move duplicate LnUrlPayError to FRB bindings.rs * Add support for lnurl-withdraw * Lnurl-withdraw: convert units, incorporate fees * Bump sdk-common, rename InputType::LnUrlError * Bump sdk-common, remove Wrapped prefix from LnUrlPaySuccessData, LnUrlPayResult * LNURL-withdraw: add missing UDL mappings * Add support for LNURL-auth * Move LNURL structs into models.rs * Rename LiquidSdkNetwork to LiquidNetwork * Fix binding tests * Fix tests * Move FRB mirroring structs to bindings.rs * Remove TODO * Bump sdk-common, remove sdk-common dependency on rusqlite * Propagate LiquidNetwork rename into flutter example app * CI: install protobuf before running clippy * CI: add rust cache, protobuf for remaining rust steps
This commit is contained in:
@@ -3,6 +3,42 @@ import breez_liquid_sdk.*
|
||||
import com.facebook.react.bridge.*
|
||||
import java.util.*
|
||||
|
||||
fun asAesSuccessActionDataDecrypted(aesSuccessActionDataDecrypted: ReadableMap): AesSuccessActionDataDecrypted? {
|
||||
if (!validateMandatoryFields(
|
||||
aesSuccessActionDataDecrypted,
|
||||
arrayOf(
|
||||
"description",
|
||||
"plaintext",
|
||||
),
|
||||
)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
val description = aesSuccessActionDataDecrypted.getString("description")!!
|
||||
val plaintext = aesSuccessActionDataDecrypted.getString("plaintext")!!
|
||||
return AesSuccessActionDataDecrypted(
|
||||
description,
|
||||
plaintext,
|
||||
)
|
||||
}
|
||||
|
||||
fun readableMapOf(aesSuccessActionDataDecrypted: AesSuccessActionDataDecrypted): ReadableMap =
|
||||
readableMapOf(
|
||||
"description" to aesSuccessActionDataDecrypted.description,
|
||||
"plaintext" to aesSuccessActionDataDecrypted.plaintext,
|
||||
)
|
||||
|
||||
fun asAesSuccessActionDataDecryptedList(arr: ReadableArray): List<AesSuccessActionDataDecrypted> {
|
||||
val list = ArrayList<AesSuccessActionDataDecrypted>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asAesSuccessActionDataDecrypted(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asBackupRequest(backupRequest: ReadableMap): BackupRequest? {
|
||||
if (!validateMandatoryFields(
|
||||
backupRequest,
|
||||
@@ -33,6 +69,51 @@ fun asBackupRequestList(arr: ReadableArray): List<BackupRequest> {
|
||||
return list
|
||||
}
|
||||
|
||||
fun asBitcoinAddressData(bitcoinAddressData: ReadableMap): BitcoinAddressData? {
|
||||
if (!validateMandatoryFields(
|
||||
bitcoinAddressData,
|
||||
arrayOf(
|
||||
"address",
|
||||
"network",
|
||||
),
|
||||
)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
val address = bitcoinAddressData.getString("address")!!
|
||||
val network = bitcoinAddressData.getString("network")?.let { asNetwork(it) }!!
|
||||
val amountSat = if (hasNonNullKey(bitcoinAddressData, "amountSat")) bitcoinAddressData.getDouble("amountSat").toULong() else null
|
||||
val label = if (hasNonNullKey(bitcoinAddressData, "label")) bitcoinAddressData.getString("label") else null
|
||||
val message = if (hasNonNullKey(bitcoinAddressData, "message")) bitcoinAddressData.getString("message") else null
|
||||
return BitcoinAddressData(
|
||||
address,
|
||||
network,
|
||||
amountSat,
|
||||
label,
|
||||
message,
|
||||
)
|
||||
}
|
||||
|
||||
fun readableMapOf(bitcoinAddressData: BitcoinAddressData): ReadableMap =
|
||||
readableMapOf(
|
||||
"address" to bitcoinAddressData.address,
|
||||
"network" to bitcoinAddressData.network.name.lowercase(),
|
||||
"amountSat" to bitcoinAddressData.amountSat,
|
||||
"label" to bitcoinAddressData.label,
|
||||
"message" to bitcoinAddressData.message,
|
||||
)
|
||||
|
||||
fun asBitcoinAddressDataList(arr: ReadableArray): List<BitcoinAddressData> {
|
||||
val list = ArrayList<BitcoinAddressData>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asBitcoinAddressData(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asConfig(config: ReadableMap): Config? {
|
||||
if (!validateMandatoryFields(
|
||||
config,
|
||||
@@ -53,7 +134,7 @@ fun asConfig(config: ReadableMap): Config? {
|
||||
val liquidElectrumUrl = config.getString("liquidElectrumUrl")!!
|
||||
val bitcoinElectrumUrl = config.getString("bitcoinElectrumUrl")!!
|
||||
val workingDir = config.getString("workingDir")!!
|
||||
val network = config.getString("network")?.let { asNetwork(it) }!!
|
||||
val network = config.getString("network")?.let { asLiquidNetwork(it) }!!
|
||||
val paymentTimeoutSec = config.getDouble("paymentTimeoutSec").toULong()
|
||||
val zeroConfMinFeeRate = config.getDouble("zeroConfMinFeeRate")
|
||||
val zeroConfMaxAmountSat =
|
||||
@@ -254,6 +335,382 @@ fun asLnInvoiceList(arr: ReadableArray): List<LnInvoice> {
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLnUrlAuthRequestData(lnUrlAuthRequestData: ReadableMap): LnUrlAuthRequestData? {
|
||||
if (!validateMandatoryFields(
|
||||
lnUrlAuthRequestData,
|
||||
arrayOf(
|
||||
"k1",
|
||||
"domain",
|
||||
"url",
|
||||
),
|
||||
)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
val k1 = lnUrlAuthRequestData.getString("k1")!!
|
||||
val domain = lnUrlAuthRequestData.getString("domain")!!
|
||||
val url = lnUrlAuthRequestData.getString("url")!!
|
||||
val action = if (hasNonNullKey(lnUrlAuthRequestData, "action")) lnUrlAuthRequestData.getString("action") else null
|
||||
return LnUrlAuthRequestData(
|
||||
k1,
|
||||
domain,
|
||||
url,
|
||||
action,
|
||||
)
|
||||
}
|
||||
|
||||
fun readableMapOf(lnUrlAuthRequestData: LnUrlAuthRequestData): ReadableMap =
|
||||
readableMapOf(
|
||||
"k1" to lnUrlAuthRequestData.k1,
|
||||
"domain" to lnUrlAuthRequestData.domain,
|
||||
"url" to lnUrlAuthRequestData.url,
|
||||
"action" to lnUrlAuthRequestData.action,
|
||||
)
|
||||
|
||||
fun asLnUrlAuthRequestDataList(arr: ReadableArray): List<LnUrlAuthRequestData> {
|
||||
val list = ArrayList<LnUrlAuthRequestData>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asLnUrlAuthRequestData(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLnUrlErrorData(lnUrlErrorData: ReadableMap): LnUrlErrorData? {
|
||||
if (!validateMandatoryFields(
|
||||
lnUrlErrorData,
|
||||
arrayOf(
|
||||
"reason",
|
||||
),
|
||||
)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
val reason = lnUrlErrorData.getString("reason")!!
|
||||
return LnUrlErrorData(
|
||||
reason,
|
||||
)
|
||||
}
|
||||
|
||||
fun readableMapOf(lnUrlErrorData: LnUrlErrorData): ReadableMap =
|
||||
readableMapOf(
|
||||
"reason" to lnUrlErrorData.reason,
|
||||
)
|
||||
|
||||
fun asLnUrlErrorDataList(arr: ReadableArray): List<LnUrlErrorData> {
|
||||
val list = ArrayList<LnUrlErrorData>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asLnUrlErrorData(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLnUrlPayErrorData(lnUrlPayErrorData: ReadableMap): LnUrlPayErrorData? {
|
||||
if (!validateMandatoryFields(
|
||||
lnUrlPayErrorData,
|
||||
arrayOf(
|
||||
"paymentHash",
|
||||
"reason",
|
||||
),
|
||||
)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
val paymentHash = lnUrlPayErrorData.getString("paymentHash")!!
|
||||
val reason = lnUrlPayErrorData.getString("reason")!!
|
||||
return LnUrlPayErrorData(
|
||||
paymentHash,
|
||||
reason,
|
||||
)
|
||||
}
|
||||
|
||||
fun readableMapOf(lnUrlPayErrorData: LnUrlPayErrorData): ReadableMap =
|
||||
readableMapOf(
|
||||
"paymentHash" to lnUrlPayErrorData.paymentHash,
|
||||
"reason" to lnUrlPayErrorData.reason,
|
||||
)
|
||||
|
||||
fun asLnUrlPayErrorDataList(arr: ReadableArray): List<LnUrlPayErrorData> {
|
||||
val list = ArrayList<LnUrlPayErrorData>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asLnUrlPayErrorData(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLnUrlPayRequest(lnUrlPayRequest: ReadableMap): LnUrlPayRequest? {
|
||||
if (!validateMandatoryFields(
|
||||
lnUrlPayRequest,
|
||||
arrayOf(
|
||||
"data",
|
||||
"amountMsat",
|
||||
),
|
||||
)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
val data = lnUrlPayRequest.getMap("data")?.let { asLnUrlPayRequestData(it) }!!
|
||||
val amountMsat = lnUrlPayRequest.getDouble("amountMsat").toULong()
|
||||
val comment = if (hasNonNullKey(lnUrlPayRequest, "comment")) lnUrlPayRequest.getString("comment") else null
|
||||
val paymentLabel = if (hasNonNullKey(lnUrlPayRequest, "paymentLabel")) lnUrlPayRequest.getString("paymentLabel") else null
|
||||
return LnUrlPayRequest(
|
||||
data,
|
||||
amountMsat,
|
||||
comment,
|
||||
paymentLabel,
|
||||
)
|
||||
}
|
||||
|
||||
fun readableMapOf(lnUrlPayRequest: LnUrlPayRequest): ReadableMap =
|
||||
readableMapOf(
|
||||
"data" to readableMapOf(lnUrlPayRequest.data),
|
||||
"amountMsat" to lnUrlPayRequest.amountMsat,
|
||||
"comment" to lnUrlPayRequest.comment,
|
||||
"paymentLabel" to lnUrlPayRequest.paymentLabel,
|
||||
)
|
||||
|
||||
fun asLnUrlPayRequestList(arr: ReadableArray): List<LnUrlPayRequest> {
|
||||
val list = ArrayList<LnUrlPayRequest>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asLnUrlPayRequest(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLnUrlPayRequestData(lnUrlPayRequestData: ReadableMap): LnUrlPayRequestData? {
|
||||
if (!validateMandatoryFields(
|
||||
lnUrlPayRequestData,
|
||||
arrayOf(
|
||||
"callback",
|
||||
"minSendable",
|
||||
"maxSendable",
|
||||
"metadataStr",
|
||||
"commentAllowed",
|
||||
"domain",
|
||||
"allowsNostr",
|
||||
),
|
||||
)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
val callback = lnUrlPayRequestData.getString("callback")!!
|
||||
val minSendable = lnUrlPayRequestData.getDouble("minSendable").toULong()
|
||||
val maxSendable = lnUrlPayRequestData.getDouble("maxSendable").toULong()
|
||||
val metadataStr = lnUrlPayRequestData.getString("metadataStr")!!
|
||||
val commentAllowed = lnUrlPayRequestData.getInt("commentAllowed").toUShort()
|
||||
val domain = lnUrlPayRequestData.getString("domain")!!
|
||||
val allowsNostr = lnUrlPayRequestData.getBoolean("allowsNostr")
|
||||
val nostrPubkey = if (hasNonNullKey(lnUrlPayRequestData, "nostrPubkey")) lnUrlPayRequestData.getString("nostrPubkey") else null
|
||||
val lnAddress = if (hasNonNullKey(lnUrlPayRequestData, "lnAddress")) lnUrlPayRequestData.getString("lnAddress") else null
|
||||
return LnUrlPayRequestData(
|
||||
callback,
|
||||
minSendable,
|
||||
maxSendable,
|
||||
metadataStr,
|
||||
commentAllowed,
|
||||
domain,
|
||||
allowsNostr,
|
||||
nostrPubkey,
|
||||
lnAddress,
|
||||
)
|
||||
}
|
||||
|
||||
fun readableMapOf(lnUrlPayRequestData: LnUrlPayRequestData): ReadableMap =
|
||||
readableMapOf(
|
||||
"callback" to lnUrlPayRequestData.callback,
|
||||
"minSendable" to lnUrlPayRequestData.minSendable,
|
||||
"maxSendable" to lnUrlPayRequestData.maxSendable,
|
||||
"metadataStr" to lnUrlPayRequestData.metadataStr,
|
||||
"commentAllowed" to lnUrlPayRequestData.commentAllowed,
|
||||
"domain" to lnUrlPayRequestData.domain,
|
||||
"allowsNostr" to lnUrlPayRequestData.allowsNostr,
|
||||
"nostrPubkey" to lnUrlPayRequestData.nostrPubkey,
|
||||
"lnAddress" to lnUrlPayRequestData.lnAddress,
|
||||
)
|
||||
|
||||
fun asLnUrlPayRequestDataList(arr: ReadableArray): List<LnUrlPayRequestData> {
|
||||
val list = ArrayList<LnUrlPayRequestData>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asLnUrlPayRequestData(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLnUrlPaySuccessData(lnUrlPaySuccessData: ReadableMap): LnUrlPaySuccessData? {
|
||||
if (!validateMandatoryFields(
|
||||
lnUrlPaySuccessData,
|
||||
arrayOf(
|
||||
"payment",
|
||||
),
|
||||
)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
val successAction =
|
||||
if (hasNonNullKey(lnUrlPaySuccessData, "successAction")) {
|
||||
lnUrlPaySuccessData.getMap("successAction")?.let {
|
||||
asSuccessActionProcessed(it)
|
||||
}
|
||||
} else {
|
||||
null
|
||||
}
|
||||
val payment = lnUrlPaySuccessData.getMap("payment")?.let { asPayment(it) }!!
|
||||
return LnUrlPaySuccessData(
|
||||
successAction,
|
||||
payment,
|
||||
)
|
||||
}
|
||||
|
||||
fun readableMapOf(lnUrlPaySuccessData: LnUrlPaySuccessData): ReadableMap =
|
||||
readableMapOf(
|
||||
"successAction" to lnUrlPaySuccessData.successAction?.let { readableMapOf(it) },
|
||||
"payment" to readableMapOf(lnUrlPaySuccessData.payment),
|
||||
)
|
||||
|
||||
fun asLnUrlPaySuccessDataList(arr: ReadableArray): List<LnUrlPaySuccessData> {
|
||||
val list = ArrayList<LnUrlPaySuccessData>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asLnUrlPaySuccessData(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLnUrlWithdrawRequest(lnUrlWithdrawRequest: ReadableMap): LnUrlWithdrawRequest? {
|
||||
if (!validateMandatoryFields(
|
||||
lnUrlWithdrawRequest,
|
||||
arrayOf(
|
||||
"data",
|
||||
"amountMsat",
|
||||
),
|
||||
)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
val data = lnUrlWithdrawRequest.getMap("data")?.let { asLnUrlWithdrawRequestData(it) }!!
|
||||
val amountMsat = lnUrlWithdrawRequest.getDouble("amountMsat").toULong()
|
||||
val description = if (hasNonNullKey(lnUrlWithdrawRequest, "description")) lnUrlWithdrawRequest.getString("description") else null
|
||||
return LnUrlWithdrawRequest(
|
||||
data,
|
||||
amountMsat,
|
||||
description,
|
||||
)
|
||||
}
|
||||
|
||||
fun readableMapOf(lnUrlWithdrawRequest: LnUrlWithdrawRequest): ReadableMap =
|
||||
readableMapOf(
|
||||
"data" to readableMapOf(lnUrlWithdrawRequest.data),
|
||||
"amountMsat" to lnUrlWithdrawRequest.amountMsat,
|
||||
"description" to lnUrlWithdrawRequest.description,
|
||||
)
|
||||
|
||||
fun asLnUrlWithdrawRequestList(arr: ReadableArray): List<LnUrlWithdrawRequest> {
|
||||
val list = ArrayList<LnUrlWithdrawRequest>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asLnUrlWithdrawRequest(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLnUrlWithdrawRequestData(lnUrlWithdrawRequestData: ReadableMap): LnUrlWithdrawRequestData? {
|
||||
if (!validateMandatoryFields(
|
||||
lnUrlWithdrawRequestData,
|
||||
arrayOf(
|
||||
"callback",
|
||||
"k1",
|
||||
"defaultDescription",
|
||||
"minWithdrawable",
|
||||
"maxWithdrawable",
|
||||
),
|
||||
)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
val callback = lnUrlWithdrawRequestData.getString("callback")!!
|
||||
val k1 = lnUrlWithdrawRequestData.getString("k1")!!
|
||||
val defaultDescription = lnUrlWithdrawRequestData.getString("defaultDescription")!!
|
||||
val minWithdrawable = lnUrlWithdrawRequestData.getDouble("minWithdrawable").toULong()
|
||||
val maxWithdrawable = lnUrlWithdrawRequestData.getDouble("maxWithdrawable").toULong()
|
||||
return LnUrlWithdrawRequestData(
|
||||
callback,
|
||||
k1,
|
||||
defaultDescription,
|
||||
minWithdrawable,
|
||||
maxWithdrawable,
|
||||
)
|
||||
}
|
||||
|
||||
fun readableMapOf(lnUrlWithdrawRequestData: LnUrlWithdrawRequestData): ReadableMap =
|
||||
readableMapOf(
|
||||
"callback" to lnUrlWithdrawRequestData.callback,
|
||||
"k1" to lnUrlWithdrawRequestData.k1,
|
||||
"defaultDescription" to lnUrlWithdrawRequestData.defaultDescription,
|
||||
"minWithdrawable" to lnUrlWithdrawRequestData.minWithdrawable,
|
||||
"maxWithdrawable" to lnUrlWithdrawRequestData.maxWithdrawable,
|
||||
)
|
||||
|
||||
fun asLnUrlWithdrawRequestDataList(arr: ReadableArray): List<LnUrlWithdrawRequestData> {
|
||||
val list = ArrayList<LnUrlWithdrawRequestData>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asLnUrlWithdrawRequestData(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLnUrlWithdrawSuccessData(lnUrlWithdrawSuccessData: ReadableMap): LnUrlWithdrawSuccessData? {
|
||||
if (!validateMandatoryFields(
|
||||
lnUrlWithdrawSuccessData,
|
||||
arrayOf(
|
||||
"invoice",
|
||||
),
|
||||
)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
val invoice = lnUrlWithdrawSuccessData.getMap("invoice")?.let { asLnInvoice(it) }!!
|
||||
return LnUrlWithdrawSuccessData(
|
||||
invoice,
|
||||
)
|
||||
}
|
||||
|
||||
fun readableMapOf(lnUrlWithdrawSuccessData: LnUrlWithdrawSuccessData): ReadableMap =
|
||||
readableMapOf(
|
||||
"invoice" to readableMapOf(lnUrlWithdrawSuccessData.invoice),
|
||||
)
|
||||
|
||||
fun asLnUrlWithdrawSuccessDataList(arr: ReadableArray): List<LnUrlWithdrawSuccessData> {
|
||||
val list = ArrayList<LnUrlWithdrawSuccessData>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asLnUrlWithdrawSuccessData(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLogEntry(logEntry: ReadableMap): LogEntry? {
|
||||
if (!validateMandatoryFields(
|
||||
logEntry,
|
||||
@@ -290,6 +747,38 @@ fun asLogEntryList(arr: ReadableArray): List<LogEntry> {
|
||||
return list
|
||||
}
|
||||
|
||||
fun asMessageSuccessActionData(messageSuccessActionData: ReadableMap): MessageSuccessActionData? {
|
||||
if (!validateMandatoryFields(
|
||||
messageSuccessActionData,
|
||||
arrayOf(
|
||||
"message",
|
||||
),
|
||||
)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
val message = messageSuccessActionData.getString("message")!!
|
||||
return MessageSuccessActionData(
|
||||
message,
|
||||
)
|
||||
}
|
||||
|
||||
fun readableMapOf(messageSuccessActionData: MessageSuccessActionData): ReadableMap =
|
||||
readableMapOf(
|
||||
"message" to messageSuccessActionData.message,
|
||||
)
|
||||
|
||||
fun asMessageSuccessActionDataList(arr: ReadableArray): List<MessageSuccessActionData> {
|
||||
val list = ArrayList<MessageSuccessActionData>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asMessageSuccessActionData(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asPayOnchainRequest(payOnchainRequest: ReadableMap): PayOnchainRequest? {
|
||||
if (!validateMandatoryFields(
|
||||
payOnchainRequest,
|
||||
@@ -780,6 +1269,175 @@ fun asSendPaymentResponseList(arr: ReadableArray): List<SendPaymentResponse> {
|
||||
return list
|
||||
}
|
||||
|
||||
fun asUrlSuccessActionData(urlSuccessActionData: ReadableMap): UrlSuccessActionData? {
|
||||
if (!validateMandatoryFields(
|
||||
urlSuccessActionData,
|
||||
arrayOf(
|
||||
"description",
|
||||
"url",
|
||||
),
|
||||
)
|
||||
) {
|
||||
return null
|
||||
}
|
||||
val description = urlSuccessActionData.getString("description")!!
|
||||
val url = urlSuccessActionData.getString("url")!!
|
||||
return UrlSuccessActionData(
|
||||
description,
|
||||
url,
|
||||
)
|
||||
}
|
||||
|
||||
fun readableMapOf(urlSuccessActionData: UrlSuccessActionData): ReadableMap =
|
||||
readableMapOf(
|
||||
"description" to urlSuccessActionData.description,
|
||||
"url" to urlSuccessActionData.url,
|
||||
)
|
||||
|
||||
fun asUrlSuccessActionDataList(arr: ReadableArray): List<UrlSuccessActionData> {
|
||||
val list = ArrayList<UrlSuccessActionData>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asUrlSuccessActionData(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asAesSuccessActionDataResult(aesSuccessActionDataResult: ReadableMap): AesSuccessActionDataResult? {
|
||||
val type = aesSuccessActionDataResult.getString("type")
|
||||
|
||||
if (type == "decrypted") {
|
||||
return AesSuccessActionDataResult.Decrypted(
|
||||
aesSuccessActionDataResult.getMap("data")?.let { asAesSuccessActionDataDecrypted(it) }!!,
|
||||
)
|
||||
}
|
||||
if (type == "errorStatus") {
|
||||
return AesSuccessActionDataResult.ErrorStatus(aesSuccessActionDataResult.getString("reason")!!)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun readableMapOf(aesSuccessActionDataResult: AesSuccessActionDataResult): ReadableMap? {
|
||||
val map = Arguments.createMap()
|
||||
when (aesSuccessActionDataResult) {
|
||||
is AesSuccessActionDataResult.Decrypted -> {
|
||||
pushToMap(map, "type", "decrypted")
|
||||
pushToMap(map, "data", readableMapOf(aesSuccessActionDataResult.data))
|
||||
}
|
||||
is AesSuccessActionDataResult.ErrorStatus -> {
|
||||
pushToMap(map, "type", "errorStatus")
|
||||
pushToMap(map, "reason", aesSuccessActionDataResult.reason)
|
||||
}
|
||||
}
|
||||
return map
|
||||
}
|
||||
|
||||
fun asAesSuccessActionDataResultList(arr: ReadableArray): List<AesSuccessActionDataResult> {
|
||||
val list = ArrayList<AesSuccessActionDataResult>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asAesSuccessActionDataResult(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asInputType(inputType: ReadableMap): InputType? {
|
||||
val type = inputType.getString("type")
|
||||
|
||||
if (type == "bitcoinAddress") {
|
||||
return InputType.BitcoinAddress(inputType.getMap("address")?.let { asBitcoinAddressData(it) }!!)
|
||||
}
|
||||
if (type == "bolt11") {
|
||||
return InputType.Bolt11(inputType.getMap("invoice")?.let { asLnInvoice(it) }!!)
|
||||
}
|
||||
if (type == "nodeId") {
|
||||
return InputType.NodeId(inputType.getString("nodeId")!!)
|
||||
}
|
||||
if (type == "url") {
|
||||
return InputType.Url(inputType.getString("url")!!)
|
||||
}
|
||||
if (type == "lnUrlPay") {
|
||||
return InputType.LnUrlPay(inputType.getMap("data")?.let { asLnUrlPayRequestData(it) }!!)
|
||||
}
|
||||
if (type == "lnUrlWithdraw") {
|
||||
return InputType.LnUrlWithdraw(inputType.getMap("data")?.let { asLnUrlWithdrawRequestData(it) }!!)
|
||||
}
|
||||
if (type == "lnUrlAuth") {
|
||||
return InputType.LnUrlAuth(inputType.getMap("data")?.let { asLnUrlAuthRequestData(it) }!!)
|
||||
}
|
||||
if (type == "lnUrlError") {
|
||||
return InputType.LnUrlError(inputType.getMap("data")?.let { asLnUrlErrorData(it) }!!)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun readableMapOf(inputType: InputType): ReadableMap? {
|
||||
val map = Arguments.createMap()
|
||||
when (inputType) {
|
||||
is InputType.BitcoinAddress -> {
|
||||
pushToMap(map, "type", "bitcoinAddress")
|
||||
pushToMap(map, "address", readableMapOf(inputType.address))
|
||||
}
|
||||
is InputType.Bolt11 -> {
|
||||
pushToMap(map, "type", "bolt11")
|
||||
pushToMap(map, "invoice", readableMapOf(inputType.invoice))
|
||||
}
|
||||
is InputType.NodeId -> {
|
||||
pushToMap(map, "type", "nodeId")
|
||||
pushToMap(map, "nodeId", inputType.nodeId)
|
||||
}
|
||||
is InputType.Url -> {
|
||||
pushToMap(map, "type", "url")
|
||||
pushToMap(map, "url", inputType.url)
|
||||
}
|
||||
is InputType.LnUrlPay -> {
|
||||
pushToMap(map, "type", "lnUrlPay")
|
||||
pushToMap(map, "data", readableMapOf(inputType.data))
|
||||
}
|
||||
is InputType.LnUrlWithdraw -> {
|
||||
pushToMap(map, "type", "lnUrlWithdraw")
|
||||
pushToMap(map, "data", readableMapOf(inputType.data))
|
||||
}
|
||||
is InputType.LnUrlAuth -> {
|
||||
pushToMap(map, "type", "lnUrlAuth")
|
||||
pushToMap(map, "data", readableMapOf(inputType.data))
|
||||
}
|
||||
is InputType.LnUrlError -> {
|
||||
pushToMap(map, "type", "lnUrlError")
|
||||
pushToMap(map, "data", readableMapOf(inputType.data))
|
||||
}
|
||||
}
|
||||
return map
|
||||
}
|
||||
|
||||
fun asInputTypeList(arr: ReadableArray): List<InputType> {
|
||||
val list = ArrayList<InputType>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asInputType(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLiquidNetwork(type: String): LiquidNetwork = LiquidNetwork.valueOf(camelToUpperSnakeCase(type))
|
||||
|
||||
fun asLiquidNetworkList(arr: ReadableArray): List<LiquidNetwork> {
|
||||
val list = ArrayList<LiquidNetwork>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is String -> list.add(asLiquidNetwork(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLiquidSdkEvent(liquidSdkEvent: ReadableMap): LiquidSdkEvent? {
|
||||
val type = liquidSdkEvent.getString("type")
|
||||
|
||||
@@ -852,6 +1510,126 @@ fun asLiquidSdkEventList(arr: ReadableArray): List<LiquidSdkEvent> {
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLnUrlCallbackStatus(lnUrlCallbackStatus: ReadableMap): LnUrlCallbackStatus? {
|
||||
val type = lnUrlCallbackStatus.getString("type")
|
||||
|
||||
if (type == "ok") {
|
||||
return LnUrlCallbackStatus.Ok
|
||||
}
|
||||
if (type == "errorStatus") {
|
||||
return LnUrlCallbackStatus.ErrorStatus(lnUrlCallbackStatus.getMap("data")?.let { asLnUrlErrorData(it) }!!)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun readableMapOf(lnUrlCallbackStatus: LnUrlCallbackStatus): ReadableMap? {
|
||||
val map = Arguments.createMap()
|
||||
when (lnUrlCallbackStatus) {
|
||||
is LnUrlCallbackStatus.Ok -> {
|
||||
pushToMap(map, "type", "ok")
|
||||
}
|
||||
is LnUrlCallbackStatus.ErrorStatus -> {
|
||||
pushToMap(map, "type", "errorStatus")
|
||||
pushToMap(map, "data", readableMapOf(lnUrlCallbackStatus.data))
|
||||
}
|
||||
}
|
||||
return map
|
||||
}
|
||||
|
||||
fun asLnUrlCallbackStatusList(arr: ReadableArray): List<LnUrlCallbackStatus> {
|
||||
val list = ArrayList<LnUrlCallbackStatus>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asLnUrlCallbackStatus(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLnUrlPayResult(lnUrlPayResult: ReadableMap): LnUrlPayResult? {
|
||||
val type = lnUrlPayResult.getString("type")
|
||||
|
||||
if (type == "endpointSuccess") {
|
||||
return LnUrlPayResult.EndpointSuccess(lnUrlPayResult.getMap("data")?.let { asLnUrlPaySuccessData(it) }!!)
|
||||
}
|
||||
if (type == "endpointError") {
|
||||
return LnUrlPayResult.EndpointError(lnUrlPayResult.getMap("data")?.let { asLnUrlErrorData(it) }!!)
|
||||
}
|
||||
if (type == "payError") {
|
||||
return LnUrlPayResult.PayError(lnUrlPayResult.getMap("data")?.let { asLnUrlPayErrorData(it) }!!)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun readableMapOf(lnUrlPayResult: LnUrlPayResult): ReadableMap? {
|
||||
val map = Arguments.createMap()
|
||||
when (lnUrlPayResult) {
|
||||
is LnUrlPayResult.EndpointSuccess -> {
|
||||
pushToMap(map, "type", "endpointSuccess")
|
||||
pushToMap(map, "data", readableMapOf(lnUrlPayResult.data))
|
||||
}
|
||||
is LnUrlPayResult.EndpointError -> {
|
||||
pushToMap(map, "type", "endpointError")
|
||||
pushToMap(map, "data", readableMapOf(lnUrlPayResult.data))
|
||||
}
|
||||
is LnUrlPayResult.PayError -> {
|
||||
pushToMap(map, "type", "payError")
|
||||
pushToMap(map, "data", readableMapOf(lnUrlPayResult.data))
|
||||
}
|
||||
}
|
||||
return map
|
||||
}
|
||||
|
||||
fun asLnUrlPayResultList(arr: ReadableArray): List<LnUrlPayResult> {
|
||||
val list = ArrayList<LnUrlPayResult>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asLnUrlPayResult(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asLnUrlWithdrawResult(lnUrlWithdrawResult: ReadableMap): LnUrlWithdrawResult? {
|
||||
val type = lnUrlWithdrawResult.getString("type")
|
||||
|
||||
if (type == "ok") {
|
||||
return LnUrlWithdrawResult.Ok(lnUrlWithdrawResult.getMap("data")?.let { asLnUrlWithdrawSuccessData(it) }!!)
|
||||
}
|
||||
if (type == "errorStatus") {
|
||||
return LnUrlWithdrawResult.ErrorStatus(lnUrlWithdrawResult.getMap("data")?.let { asLnUrlErrorData(it) }!!)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun readableMapOf(lnUrlWithdrawResult: LnUrlWithdrawResult): ReadableMap? {
|
||||
val map = Arguments.createMap()
|
||||
when (lnUrlWithdrawResult) {
|
||||
is LnUrlWithdrawResult.Ok -> {
|
||||
pushToMap(map, "type", "ok")
|
||||
pushToMap(map, "data", readableMapOf(lnUrlWithdrawResult.data))
|
||||
}
|
||||
is LnUrlWithdrawResult.ErrorStatus -> {
|
||||
pushToMap(map, "type", "errorStatus")
|
||||
pushToMap(map, "data", readableMapOf(lnUrlWithdrawResult.data))
|
||||
}
|
||||
}
|
||||
return map
|
||||
}
|
||||
|
||||
fun asLnUrlWithdrawResultList(arr: ReadableArray): List<LnUrlWithdrawResult> {
|
||||
val list = ArrayList<LnUrlWithdrawResult>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asLnUrlWithdrawResult(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun asNetwork(type: String): Network = Network.valueOf(camelToUpperSnakeCase(type))
|
||||
|
||||
fun asNetworkList(arr: ReadableArray): List<Network> {
|
||||
@@ -891,6 +1669,51 @@ fun asPaymentTypeList(arr: ReadableArray): List<PaymentType> {
|
||||
return list
|
||||
}
|
||||
|
||||
fun asSuccessActionProcessed(successActionProcessed: ReadableMap): SuccessActionProcessed? {
|
||||
val type = successActionProcessed.getString("type")
|
||||
|
||||
if (type == "aes") {
|
||||
return SuccessActionProcessed.Aes(successActionProcessed.getMap("result")?.let { asAesSuccessActionDataResult(it) }!!)
|
||||
}
|
||||
if (type == "message") {
|
||||
return SuccessActionProcessed.Message(successActionProcessed.getMap("data")?.let { asMessageSuccessActionData(it) }!!)
|
||||
}
|
||||
if (type == "url") {
|
||||
return SuccessActionProcessed.Url(successActionProcessed.getMap("data")?.let { asUrlSuccessActionData(it) }!!)
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
fun readableMapOf(successActionProcessed: SuccessActionProcessed): ReadableMap? {
|
||||
val map = Arguments.createMap()
|
||||
when (successActionProcessed) {
|
||||
is SuccessActionProcessed.Aes -> {
|
||||
pushToMap(map, "type", "aes")
|
||||
pushToMap(map, "result", readableMapOf(successActionProcessed.result))
|
||||
}
|
||||
is SuccessActionProcessed.Message -> {
|
||||
pushToMap(map, "type", "message")
|
||||
pushToMap(map, "data", readableMapOf(successActionProcessed.data))
|
||||
}
|
||||
is SuccessActionProcessed.Url -> {
|
||||
pushToMap(map, "type", "url")
|
||||
pushToMap(map, "data", readableMapOf(successActionProcessed.data))
|
||||
}
|
||||
}
|
||||
return map
|
||||
}
|
||||
|
||||
fun asSuccessActionProcessedList(arr: ReadableArray): List<SuccessActionProcessed> {
|
||||
val list = ArrayList<SuccessActionProcessed>()
|
||||
for (value in arr.toArrayList()) {
|
||||
when (value) {
|
||||
is ReadableMap -> list.add(asSuccessActionProcessed(value)!!)
|
||||
else -> throw LiquidSdkException.Generic(errUnexpectedType("${value::class.java.name}"))
|
||||
}
|
||||
}
|
||||
return list
|
||||
}
|
||||
|
||||
fun readableMapOf(vararg values: Pair<String, *>): ReadableMap {
|
||||
val map = Arguments.createMap()
|
||||
for ((key, value) in values) {
|
||||
|
||||
@@ -61,7 +61,7 @@ class BreezLiquidSDKModule(
|
||||
) {
|
||||
executor.execute {
|
||||
try {
|
||||
val networkTmp = asNetwork(network)
|
||||
val networkTmp = asLiquidNetwork(network)
|
||||
val res = defaultConfig(networkTmp)
|
||||
val workingDir = File(reactApplicationContext.filesDir.toString() + "/breezLiquidSdk")
|
||||
|
||||
@@ -74,13 +74,28 @@ class BreezLiquidSDKModule(
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun parseInvoice(
|
||||
invoice: String,
|
||||
fun parse(
|
||||
input: String,
|
||||
promise: Promise,
|
||||
) {
|
||||
executor.execute {
|
||||
try {
|
||||
val res = parseInvoice(invoice)
|
||||
val res = parse(input)
|
||||
promise.resolve(readableMapOf(res))
|
||||
} catch (e: Exception) {
|
||||
promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun parseInvoice(
|
||||
input: String,
|
||||
promise: Promise,
|
||||
) {
|
||||
executor.execute {
|
||||
try {
|
||||
val res = parseInvoice(input)
|
||||
promise.resolve(readableMapOf(res))
|
||||
} catch (e: Exception) {
|
||||
promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e)
|
||||
@@ -349,4 +364,57 @@ class BreezLiquidSDKModule(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun lnurlPay(
|
||||
req: ReadableMap,
|
||||
promise: Promise,
|
||||
) {
|
||||
executor.execute {
|
||||
try {
|
||||
val lnUrlPayRequest =
|
||||
asLnUrlPayRequest(req) ?: run { throw LiquidSdkException.Generic(errMissingMandatoryField("req", "LnUrlPayRequest")) }
|
||||
val res = getBindingLiquidSdk().lnurlPay(lnUrlPayRequest)
|
||||
promise.resolve(readableMapOf(res))
|
||||
} catch (e: Exception) {
|
||||
promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun lnurlWithdraw(
|
||||
req: ReadableMap,
|
||||
promise: Promise,
|
||||
) {
|
||||
executor.execute {
|
||||
try {
|
||||
val lnUrlWithdrawRequest =
|
||||
asLnUrlWithdrawRequest(req)
|
||||
?: run { throw LiquidSdkException.Generic(errMissingMandatoryField("req", "LnUrlWithdrawRequest")) }
|
||||
val res = getBindingLiquidSdk().lnurlWithdraw(lnUrlWithdrawRequest)
|
||||
promise.resolve(readableMapOf(res))
|
||||
} catch (e: Exception) {
|
||||
promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ReactMethod
|
||||
fun lnurlAuth(
|
||||
reqData: ReadableMap,
|
||||
promise: Promise,
|
||||
) {
|
||||
executor.execute {
|
||||
try {
|
||||
val lnUrlAuthRequestData =
|
||||
asLnUrlAuthRequestData(reqData)
|
||||
?: run { throw LiquidSdkException.Generic(errMissingMandatoryField("reqData", "LnUrlAuthRequestData")) }
|
||||
val res = getBindingLiquidSdk().lnurlAuth(lnUrlAuthRequestData)
|
||||
promise.resolve(readableMapOf(res))
|
||||
} catch (e: Exception) {
|
||||
promise.reject(e.javaClass.simpleName.replace("Exception", "Error"), e.message, e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user