Skip to content

Instantly share code, notes, and snippets.

@HenryNguyen5
Created April 2, 2019 00:47
Show Gist options
  • Save HenryNguyen5/f93a593f97be64690f2f536f471c8433 to your computer and use it in GitHub Desktop.
Save HenryNguyen5/f93a593f97be64690f2f536f471c8433 to your computer and use it in GitHub Desktop.
interface WebLNProvider {
getInfo;
sendPayment;
makeInvoice;
signMessage;
verifyMessage;
}
type WebLNMethod = { [k in keyof WebLNProvider]: k };
type MethodHandler<Field extends keyof Methods, Methods extends any> = (data: {
method: Field;
args: Parameters<Methods[Field]>;
}) => ReturnType<Methods[Field]>;
export type FallbackMethodHandler2 = {
[K in keyof WebLNMethod]: MethodHandler<K, WebLNProvider>
}[keyof WebLNMethod];
export type FallbackMethodHandler3 = {
[K in keyof WebLNProvider]: (data: {
method: K;
args: Parameters<WebLNProvider[K]>;
}) => ReturnType<WebLNProvider[K]>
}[keyof WebLNProvider];
export type FallbackMethodHandler = {
(data: {
method: WebLNMethod["getInfo"];
args: Parameters<WebLNProvider["getInfo"]>;
}): ReturnType<WebLNProvider["getInfo"]>;
(data: {
method: WebLNMethod["sendPayment"];
args: Parameters<WebLNProvider["sendPayment"]>;
}): ReturnType<WebLNProvider["sendPayment"]>;
(data: {
method: WebLNMethod["makeInvoice"];
args: Parameters<WebLNProvider["makeInvoice"]>;
}): ReturnType<WebLNProvider["makeInvoice"]>;
(data: {
method: WebLNMethod["signMessage"];
args: Parameters<WebLNProvider["signMessage"]>;
}): ReturnType<WebLNProvider["signMessage"]>;
(data: {
method: WebLNMethod["verifyMessage"];
args: Parameters<WebLNProvider["verifyMessage"]>;
}): ReturnType<WebLNProvider["verifyMessage"]>;
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment