fedimint_gateway_client/
lib.rs

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}