// NOTE TO REACT-NATIVE-TURBO-LND CONTRIBUTORS:
// This file is automatically generated by the protoc plugin inside the
// protoc-generator folder.
// Any changes to this file should be made there instead.
#pragma once

// Windows
#if defined(_WIN32) && __has_include("windows-jsi/ReactNativeTurboLndJSI.h")
#include "windows-jsi/ReactNativeTurboLndJSI.h"
// Apple
#elif __has_include(<React-Codegen/RNTurboLndSpecJSI.h>)
#include <React-Codegen/RNTurboLndSpecJSI.h>
// Android
#elif __has_include("RNTurboLndSpecJSI.h")
#include "RNTurboLndSpecJSI.h"
#endif

#include <memory>
#include <string>

#include <react/bridging/Promise.h>

namespace facebook::react {

class TurboLndModule : public NativeTurboLndCxxSpec<TurboLndModule> {
 public:
  explicit TurboLndModule(std::shared_ptr<CallInvoker> jsInvoker);

  static void promiseOnResponseStatic(void* context, const char* data, int length);
  static void promiseOnErrorStatic(void* context, const char* error);
  static void startOnResponseStatic(void* context, const char* data, int length);
  static void callbackOnResponseStatic(void* context, const char* data, int length);
  static void callbackOnErrorStatic(void* context, const char* error);


  facebook::react::AsyncPromise<std::string> start(jsi::Runtime &rt, jsi::String args);

  facebook::react::AsyncPromise<std::string> walletBalance(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> channelBalance(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> getTransactions(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> estimateFee(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> sendCoins(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> listUnspent(jsi::Runtime &rt, jsi::String data);

  facebook::jsi::Function subscribeTransactions(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> sendMany(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> newAddress(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signMessage(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> verifyMessage(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> connectPeer(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> disconnectPeer(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> listPeers(jsi::Runtime &rt, jsi::String data);

  facebook::jsi::Function subscribePeerEvents(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> getInfo(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> getDebugInfo(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> getRecoveryInfo(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> pendingChannels(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> listChannels(jsi::Runtime &rt, jsi::String data);

  facebook::jsi::Function subscribeChannelEvents(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> closedChannels(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> openChannelSync(jsi::Runtime &rt, jsi::String data);

  facebook::jsi::Function openChannel(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> batchOpenChannel(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> fundingStateStep(jsi::Runtime &rt, jsi::String data);

  jsi::Object channelAcceptor(jsi::Runtime &rt, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::jsi::Function closeChannel(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> abandonChannel(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> addInvoice(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> listInvoices(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> lookupInvoice(jsi::Runtime &rt, jsi::String data);

  facebook::jsi::Function subscribeInvoices(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> deleteCanceledInvoice(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> decodePayReq(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> listPayments(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> deletePayment(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> deleteAllPayments(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> describeGraph(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> getNodeMetrics(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> getChanInfo(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> getNodeInfo(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> queryRoutes(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> getNetworkInfo(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> stopDaemon(jsi::Runtime &rt, jsi::String data);

  facebook::jsi::Function subscribeChannelGraph(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> debugLevel(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> feeReport(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> updateChannelPolicy(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> forwardingHistory(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> exportChannelBackup(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> exportAllChannelBackups(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> verifyChanBackup(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> restoreChannelBackups(jsi::Runtime &rt, jsi::String data);

  facebook::jsi::Function subscribeChannelBackups(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> bakeMacaroon(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> listMacaroonIDs(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> deleteMacaroonID(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> listPermissions(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> checkMacaroonPermissions(jsi::Runtime &rt, jsi::String data);

  jsi::Object registerRPCMiddleware(jsi::Runtime &rt, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> sendCustomMessage(jsi::Runtime &rt, jsi::String data);

  facebook::jsi::Function subscribeCustomMessages(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> sendOnionMessage(jsi::Runtime &rt, jsi::String data);

  facebook::jsi::Function subscribeOnionMessages(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> listAliases(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> lookupHtlcResolution(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> genSeed(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> initWallet(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> unlockWallet(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> changePassword(jsi::Runtime &rt, jsi::String data);

  facebook::jsi::Function subscribeState(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> getState(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> autopilotStatus(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> autopilotModifyStatus(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> autopilotQueryScores(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> autopilotSetScores(jsi::Runtime &rt, jsi::String data);

  facebook::jsi::Function chainNotifierRegisterConfirmationsNtfn(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::jsi::Function chainNotifierRegisterSpendNtfn(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::jsi::Function chainNotifierRegisterBlockEpochNtfn(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::jsi::Function invoicesSubscribeSingleInvoice(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> invoicesCancelInvoice(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> invoicesAddHoldInvoice(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> invoicesSettleInvoice(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> invoicesLookupInvoiceV2(jsi::Runtime &rt, jsi::String data);

  jsi::Object invoicesHtlcModifier(jsi::Runtime &rt, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> neutrinoKitStatus(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> neutrinoKitAddPeer(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> neutrinoKitDisconnectPeer(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> neutrinoKitIsBanned(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> neutrinoKitGetBlockHeader(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> neutrinoKitGetBlock(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> neutrinoKitGetCFilter(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> neutrinoKitGetBlockHash(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> peersUpdateNodeAnnouncement(jsi::Runtime &rt, jsi::String data);

  facebook::jsi::Function routerSendPaymentV2(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::jsi::Function routerTrackPaymentV2(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::jsi::Function routerTrackPayments(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> routerEstimateRouteFee(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> routerSendToRouteV2(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> routerResetMissionControl(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> routerQueryMissionControl(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> routerXImportMissionControl(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> routerGetMissionControlConfig(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> routerSetMissionControlConfig(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> routerQueryProbability(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> routerBuildRoute(jsi::Runtime &rt, jsi::String data);

  facebook::jsi::Function routerSubscribeHtlcEvents(jsi::Runtime &rt, jsi::String data, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  jsi::Object routerHtlcInterceptor(jsi::Runtime &rt, AsyncCallback<std::string> onResponse, AsyncCallback<std::string> onError);

  facebook::react::AsyncPromise<std::string> routerUpdateChanStatus(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> routerXAddLocalChanAliases(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> routerXDeleteLocalChanAliases(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> routerXFindBaseLocalChanAlias(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> routerDeleteForwardingHistory(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signerSignOutputRaw(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signerComputeInputScript(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signerSignMessage(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signerVerifyMessage(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signerDeriveSharedKey(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signerMuSig2CombineKeys(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signerMuSig2CreateSession(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signerMuSig2RegisterNonces(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signerMuSig2RegisterCombinedNonce(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signerMuSig2GetCombinedNonce(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signerMuSig2Sign(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signerMuSig2CombineSig(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> signerMuSig2Cleanup(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> versionerGetVersion(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitListUnspent(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitLeaseOutput(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitReleaseOutput(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitListLeases(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitDeriveNextKey(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitDeriveKey(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitNextAddr(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitGetTransaction(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitListAccounts(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitRequiredReserve(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitListAddresses(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitSignMessageWithAddr(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitVerifyMessageWithAddr(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitImportAccount(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitImportPublicKey(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitImportTapscript(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitPublishTransaction(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitSubmitPackage(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitRemoveTransaction(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitSendOutputs(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitEstimateFee(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitPendingSweeps(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitBumpFee(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitBumpForceCloseFee(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitListSweeps(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitLabelTransaction(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitFundPsbt(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitSignPsbt(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> walletKitFinalizePsbt(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> watchtowerGetInfo(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> watchtowerClientAddTower(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> watchtowerClientRemoveTower(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> watchtowerClientDeactivateTower(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> watchtowerClientTerminateSession(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> watchtowerClientListTowers(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> watchtowerClientGetTowerInfo(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> watchtowerClientStats(jsi::Runtime &rt, jsi::String data);

  facebook::react::AsyncPromise<std::string> watchtowerClientPolicy(jsi::Runtime &rt, jsi::String data);


};

} // namespace facebook::react
