fedimint-web-sdk icon indicating copy to clipboard operation
fedimint-web-sdk copied to clipboard

Update RPC types to have consistent `status` key

Open alexlwn123 opened this issue 1 year ago • 4 comments

Currently, the subscribeLnReceive and subscribeLnPay functions return a status with the following types:

type LnPayState =
  | 'created'
  | 'canceled'
  | { funded: { block_height: number } }
  | { waiting_for_refund: { error_reason: string } }
  | 'awaiting_change'
  | { Success: { preimage: string } }
  | { refunded: { gateway_error: string } }
  | { unexpected_error: { error_message: string } }
  

type LnReceiveState =
  | 'created'
  | { waiting_for_payment: { invoice: string; timeout: number } }
  | { canceled: { reason: string } }
  | 'funded'
  | 'awaiting_funds'
  | 'claimed'

This makes pattern matching a bit ugly for the SDK because objects and strings are mixed.

Let's changes the types to have a consistent shape:

type LnPayState =
  | { status: 'created' }
  | { status: 'canceled' }
  | { status: 'funded'; block_height: number }
  | { status: 'waiting_for_refund'; error_reason: string }
  | { status: 'awaiting_change' }
  | { status: 'Success'; preimage: string }
  | { status: 'refunded'; gateway_error: string }
  | { status: 'unexpected_error'; error_message: string } 
  
type LnReceiveState =
  | { status: 'created' }
  | { status: 'waiting_for_payment'; invoice: string; timeout: number }
  | { status: 'canceled'; reason: string }
  | { status: 'funded' }
  | { status: 'awaiting_funds' }
  | { status: 'claimed' }

alexlwn123 avatar Oct 22 '24 10:10 alexlwn123

@maan2003

alexlwn123 avatar Oct 22 '24 10:10 alexlwn123

this is not possible, because fedimint commits to the first json representation in the database :/

if we change it, fedimint client will become backwards incompatible

maan2003 avatar Oct 24 '24 21:10 maan2003

Could we just transform the shape before returning it to the caller?

If not, I'll just do that in the javascript

alexlwn123 avatar Oct 25 '24 08:10 alexlwn123

should do it in javascript, I don't want yet another RpcLnPayState(MaybeLoading) in rust.

maan2003 avatar Oct 25 '24 08:10 maan2003