1use bitcoin::address::NetworkUnchecked;
2use bitcoin::{Address, Txid};
3use fedimint_gateway_common::{
4 ADDRESS_ENDPOINT, ADDRESS_RECHECK_ENDPOINT, BACKUP_ENDPOINT, BackupPayload,
5 CLOSE_CHANNELS_WITH_PEER_ENDPOINT, CONFIGURATION_ENDPOINT, CONNECT_FED_ENDPOINT,
6 CREATE_BOLT11_INVOICE_FOR_OPERATOR_ENDPOINT, CREATE_BOLT12_OFFER_FOR_OPERATOR_ENDPOINT,
7 ChannelInfo, CloseChannelsWithPeerRequest, CloseChannelsWithPeerResponse, ConfigPayload,
8 ConnectFedPayload, CreateInvoiceForOperatorPayload, CreateOfferPayload, CreateOfferResponse,
9 DepositAddressPayload, DepositAddressRecheckPayload, FederationInfo, GATEWAY_INFO_ENDPOINT,
10 GET_BALANCES_ENDPOINT, GET_INVOICE_ENDPOINT, GET_LN_ONCHAIN_ADDRESS_ENDPOINT, GatewayBalances,
11 GatewayFedConfig, GatewayInfo, GetInvoiceRequest, GetInvoiceResponse, LEAVE_FED_ENDPOINT,
12 LIST_CHANNELS_ENDPOINT, LIST_TRANSACTIONS_ENDPOINT, LeaveFedPayload, ListTransactionsPayload,
13 ListTransactionsResponse, MNEMONIC_ENDPOINT, MnemonicResponse, OPEN_CHANNEL_ENDPOINT,
14 OpenChannelRequest, PAY_INVOICE_FOR_OPERATOR_ENDPOINT, PAY_OFFER_FOR_OPERATOR_ENDPOINT,
15 PAYMENT_LOG_ENDPOINT, PAYMENT_SUMMARY_ENDPOINT, PayInvoiceForOperatorPayload, PayOfferPayload,
16 PayOfferResponse, PaymentLogPayload, PaymentLogResponse, PaymentSummaryPayload,
17 PaymentSummaryResponse, RECEIVE_ECASH_ENDPOINT, ReceiveEcashPayload, ReceiveEcashResponse,
18 SEND_ONCHAIN_ENDPOINT, SET_FEES_ENDPOINT, SPEND_ECASH_ENDPOINT, STOP_ENDPOINT,
19 SendOnchainRequest, SetFeesPayload, SpendEcashPayload, SpendEcashResponse, WITHDRAW_ENDPOINT,
20 WithdrawPayload, WithdrawResponse,
21};
22use fedimint_ln_common::client::{GatewayRpcClient, GatewayRpcResult};
23use lightning_invoice::Bolt11Invoice;
24
25pub async fn get_info(client: &GatewayRpcClient) -> GatewayRpcResult<GatewayInfo> {
26 client.call_get(GATEWAY_INFO_ENDPOINT).await
27}
28
29pub async fn get_config(
30 client: &GatewayRpcClient,
31 payload: ConfigPayload,
32) -> GatewayRpcResult<GatewayFedConfig> {
33 client.call_post(CONFIGURATION_ENDPOINT, payload).await
34}
35
36pub async fn get_deposit_address(
37 client: &GatewayRpcClient,
38 payload: DepositAddressPayload,
39) -> GatewayRpcResult<Address<NetworkUnchecked>> {
40 client.call_post(ADDRESS_ENDPOINT, payload).await
41}
42
43pub async fn withdraw(
44 client: &GatewayRpcClient,
45 payload: WithdrawPayload,
46) -> GatewayRpcResult<WithdrawResponse> {
47 client.call_post(WITHDRAW_ENDPOINT, payload).await
48}
49
50pub async fn connect_federation(
51 client: &GatewayRpcClient,
52 payload: ConnectFedPayload,
53) -> GatewayRpcResult<FederationInfo> {
54 client.call_post(CONNECT_FED_ENDPOINT, payload).await
55}
56
57pub async fn leave_federation(
58 client: &GatewayRpcClient,
59 payload: LeaveFedPayload,
60) -> GatewayRpcResult<FederationInfo> {
61 client.call_post(LEAVE_FED_ENDPOINT, payload).await
62}
63
64pub async fn backup(client: &GatewayRpcClient, payload: BackupPayload) -> GatewayRpcResult<()> {
65 client.call_post(BACKUP_ENDPOINT, payload).await
66}
67
68pub async fn set_fees(client: &GatewayRpcClient, payload: SetFeesPayload) -> GatewayRpcResult<()> {
69 client.call_post(SET_FEES_ENDPOINT, payload).await
70}
71
72pub async fn create_invoice_for_self(
73 client: &GatewayRpcClient,
74 payload: CreateInvoiceForOperatorPayload,
75) -> GatewayRpcResult<Bolt11Invoice> {
76 client
77 .call_post(CREATE_BOLT11_INVOICE_FOR_OPERATOR_ENDPOINT, payload)
78 .await
79}
80
81pub async fn pay_invoice(
82 client: &GatewayRpcClient,
83 payload: PayInvoiceForOperatorPayload,
84) -> GatewayRpcResult<String> {
85 client
86 .call_post(PAY_INVOICE_FOR_OPERATOR_ENDPOINT, payload)
87 .await
88}
89
90pub async fn get_ln_onchain_address(
91 client: &GatewayRpcClient,
92) -> GatewayRpcResult<Address<NetworkUnchecked>> {
93 client.call_get(GET_LN_ONCHAIN_ADDRESS_ENDPOINT).await
94}
95
96pub async fn open_channel(
97 client: &GatewayRpcClient,
98 payload: OpenChannelRequest,
99) -> GatewayRpcResult<Txid> {
100 client.call_post(OPEN_CHANNEL_ENDPOINT, payload).await
101}
102
103pub async fn close_channels_with_peer(
104 client: &GatewayRpcClient,
105 payload: CloseChannelsWithPeerRequest,
106) -> GatewayRpcResult<CloseChannelsWithPeerResponse> {
107 client
108 .call_post(CLOSE_CHANNELS_WITH_PEER_ENDPOINT, payload)
109 .await
110}
111
112pub async fn list_channels(client: &GatewayRpcClient) -> GatewayRpcResult<Vec<ChannelInfo>> {
113 client.call_get(LIST_CHANNELS_ENDPOINT).await
114}
115
116pub async fn send_onchain(
117 client: &GatewayRpcClient,
118 payload: SendOnchainRequest,
119) -> GatewayRpcResult<Txid> {
120 client.call_post(SEND_ONCHAIN_ENDPOINT, payload).await
121}
122
123pub async fn recheck_address(
124 client: &GatewayRpcClient,
125 payload: DepositAddressRecheckPayload,
126) -> GatewayRpcResult<serde_json::Value> {
127 client.call_post(ADDRESS_RECHECK_ENDPOINT, payload).await
128}
129
130pub async fn spend_ecash(
131 client: &GatewayRpcClient,
132 payload: SpendEcashPayload,
133) -> GatewayRpcResult<SpendEcashResponse> {
134 client.call_post(SPEND_ECASH_ENDPOINT, payload).await
135}
136
137pub async fn receive_ecash(
138 client: &GatewayRpcClient,
139 payload: ReceiveEcashPayload,
140) -> GatewayRpcResult<ReceiveEcashResponse> {
141 client.call_post(RECEIVE_ECASH_ENDPOINT, payload).await
142}
143
144pub async fn get_balances(client: &GatewayRpcClient) -> GatewayRpcResult<GatewayBalances> {
145 client.call_get(GET_BALANCES_ENDPOINT).await
146}
147
148pub async fn get_mnemonic(client: &GatewayRpcClient) -> GatewayRpcResult<MnemonicResponse> {
149 client.call_get(MNEMONIC_ENDPOINT).await
150}
151
152pub async fn stop(client: &GatewayRpcClient) -> GatewayRpcResult<()> {
153 client.call_get(STOP_ENDPOINT).await
154}
155
156pub async fn payment_log(
157 client: &GatewayRpcClient,
158 payload: PaymentLogPayload,
159) -> GatewayRpcResult<PaymentLogResponse> {
160 client.call_post(PAYMENT_LOG_ENDPOINT, payload).await
161}
162
163pub async fn payment_summary(
164 client: &GatewayRpcClient,
165 payload: PaymentSummaryPayload,
166) -> GatewayRpcResult<PaymentSummaryResponse> {
167 client.call_post(PAYMENT_SUMMARY_ENDPOINT, payload).await
168}
169
170pub async fn get_invoice(
171 client: &GatewayRpcClient,
172 payload: GetInvoiceRequest,
173) -> GatewayRpcResult<Option<GetInvoiceResponse>> {
174 client.call_post(GET_INVOICE_ENDPOINT, payload).await
175}
176
177pub async fn list_transactions(
178 client: &GatewayRpcClient,
179 payload: ListTransactionsPayload,
180) -> GatewayRpcResult<ListTransactionsResponse> {
181 client.call_post(LIST_TRANSACTIONS_ENDPOINT, payload).await
182}
183
184pub async fn create_offer(
185 client: &GatewayRpcClient,
186 payload: CreateOfferPayload,
187) -> GatewayRpcResult<CreateOfferResponse> {
188 client
189 .call_post(CREATE_BOLT12_OFFER_FOR_OPERATOR_ENDPOINT, payload)
190 .await
191}
192
193pub async fn pay_offer(
194 client: &GatewayRpcClient,
195 payload: PayOfferPayload,
196) -> GatewayRpcResult<PayOfferResponse> {
197 client
198 .call_post(PAY_OFFER_FOR_OPERATOR_ENDPOINT, payload)
199 .await
200}