From 0a3da2082b09455819db8b97f08271cdbdb17198 Mon Sep 17 00:00:00 2001 From: boufni95 Date: Fri, 20 Oct 2023 18:09:32 +0200 Subject: [PATCH] notifications --- proto/autogenerated/client.md | 323 ++-- proto/autogenerated/debug.txt | 2293 ++++++++++++------------ proto/autogenerated/ts/nostr_client.ts | 114 +- proto/autogenerated/ts/types.ts | 1528 ++++++++-------- proto/protoc-gen-pub | Bin 9056054 -> 9056054 bytes proto/service/structs.proto | 1 + src/services/main/index.ts | 27 + src/services/serverMethods/index.ts | 3 + 8 files changed, 2168 insertions(+), 2121 deletions(-) diff --git a/proto/autogenerated/client.md b/proto/autogenerated/client.md index 10ef0516..58573597 100644 --- a/proto/autogenerated/client.md +++ b/proto/autogenerated/client.md @@ -95,9 +95,9 @@ The nostr server will send back a message response, and inside the body there wi - __User__: - expected context content + - __user_id__: _string_ - __app_id__: _string_ - __app_user_id__: _string_ - - __user_id__: _string_ - __Admin__: - expected context content @@ -372,64 +372,14 @@ The nostr server will send back a message response, and inside the body there wi ## Messages ### The content of requests and response from the methods -### SetMockAppUserBalanceRequest - - __user_identifier__: _string_ +### LndGetInfoResponse + - __alias__: _string_ + +### SendAppUserToAppUserPaymentRequest + - __from_user_identifier__: _string_ + - __to_user_identifier__: _string_ - __amount__: _number_ -### LndGetInfoRequest - - __nodeId__: _number_ - -### AddAppUserInvoiceRequest - - __receiver_identifier__: _string_ - - __payer_identifier__: _string_ - - __http_callback_url__: _string_ - - __invoice_req__: _[NewInvoiceRequest](#NewInvoiceRequest)_ - -### GetAppUserLNURLInfoRequest - - __user_identifier__: _string_ - - __base_url_override__: _string_ - -### Product - - __id__: _string_ - - __name__: _string_ - - __price_sats__: _number_ - -### PayAddressRequest - - __address__: _string_ - - __amoutSats__: _number_ - - __satsPerVByte__: _number_ - -### HandleLnurlPayResponse - - __pr__: _string_ - - __routes__: ARRAY of: _[Empty](#Empty)_ - -### GetUserOperationsRequest - - __latestIncomingInvoice__: _number_ - - __latestOutgoingInvoice__: _number_ - - __latestIncomingTx__: _number_ - - __latestOutgoingTx__: _number_ - - __latestIncomingUserToUserPayment__: _number_ - - __latestOutgoingUserToUserPayment__: _number_ - -### NewAddressResponse - - __address__: _string_ - -### NewInvoiceRequest - - __amountSats__: _number_ - - __memo__: _string_ - -### AddProductRequest - - __name__: _string_ - - __price_sats__: _number_ - -### UserOperations - - __fromIndex__: _number_ - - __toIndex__: _number_ - - __operations__: ARRAY of: _[UserOperation](#UserOperation)_ - -### PayAddressResponse - - __txId__: _string_ - ### LnurlPayInfoResponse - __tag__: _string_ - __callback__: _string_ @@ -437,91 +387,12 @@ The nostr server will send back a message response, and inside the body there wi - __minSendable__: _number_ - __metadata__: _string_ -### UserInfo - - __userId__: _string_ - - __balance__: _number_ - -### SendAppUserToAppPaymentRequest - - __from_user_identifier__: _string_ - - __amount__: _number_ - -### SetMockAppBalanceRequest - - __amount__: _number_ - -### OpenChannelRequest - - __destination__: _string_ - - __fundingAmount__: _number_ - - __pushAmount__: _number_ - - __closeAddress__: _string_ - -### GetUserOperationsResponse - - __latestOutgoingInvoiceOperations__: _[UserOperations](#UserOperations)_ - - __latestIncomingInvoiceOperations__: _[UserOperations](#UserOperations)_ - - __latestOutgoingTxOperations__: _[UserOperations](#UserOperations)_ - - __latestIncomingTxOperations__: _[UserOperations](#UserOperations)_ - - __latestOutgoingUserToUserPayemnts__: _[UserOperations](#UserOperations)_ - - __latestIncomingUserToUserPayemnts__: _[UserOperations](#UserOperations)_ - -### LiveUserOperation - - __id__: _string_ - -### LndGetInfoResponse - - __alias__: _string_ - -### AuthApp - - __app__: _[Application](#Application)_ - - __auth_token__: _string_ - -### SendAppUserToAppUserPaymentRequest - - __from_user_identifier__: _string_ - - __to_user_identifier__: _string_ - - __amount__: _number_ - -### AddAppInvoiceRequest - - __payer_identifier__: _string_ - - __http_callback_url__: _string_ - - __invoice_req__: _[NewInvoiceRequest](#NewInvoiceRequest)_ - -### PayAppUserInvoiceResponse - - __preimage__: _string_ - - __amount_paid__: _number_ - ### NewAddressRequest - __addressType__: _[AddressType](#AddressType)_ -### NewInvoiceResponse - - __invoice__: _string_ - -### PayInvoiceRequest - - __invoice__: _string_ - - __amount__: _number_ - -### AddAppRequest - - __name__: _string_ - - __allow_user_creation__: _boolean_ - -### Application - - __name__: _string_ - - __id__: _string_ - - __balance__: _number_ - - __npub__: _string_ - -### AppUser - - __identifier__: _string_ - - __info__: _[UserInfo](#UserInfo)_ - - __max_withdrawable__: _number_ - -### GetProductBuyLinkResponse - - __link__: _string_ - -### PayAppUserInvoiceRequest - - __user_identifier__: _string_ - - __invoice__: _string_ - - __amount__: _number_ - -### PayInvoiceResponse - - __preimage__: _string_ - - __amount_paid__: _number_ +### LnurlLinkResponse + - __lnurl__: _string_ + - __k1__: _string_ ### LnurlWithdrawInfoResponse - __tag__: _string_ @@ -533,46 +404,176 @@ The nostr server will send back a message response, and inside the body there wi - __balanceCheck__: _string_ - __payLink__: _string_ +### UserInfo + - __userId__: _string_ + - __balance__: _number_ + +### GetUserOperationsResponse + - __latestOutgoingInvoiceOperations__: _[UserOperations](#UserOperations)_ + - __latestIncomingInvoiceOperations__: _[UserOperations](#UserOperations)_ + - __latestOutgoingTxOperations__: _[UserOperations](#UserOperations)_ + - __latestIncomingTxOperations__: _[UserOperations](#UserOperations)_ + - __latestOutgoingUserToUserPayemnts__: _[UserOperations](#UserOperations)_ + - __latestIncomingUserToUserPayemnts__: _[UserOperations](#UserOperations)_ + +### Application + - __name__: _string_ + - __id__: _string_ + - __balance__: _number_ + - __npub__: _string_ + +### NewInvoiceResponse + - __invoice__: _string_ + +### PayInvoiceResponse + - __preimage__: _string_ + - __amount_paid__: _number_ + ### UserOperation - __paidAtUnix__: _number_ - __type__: _[UserOperationType](#UserOperationType)_ - __inbound__: _boolean_ - __amount__: _number_ +### GetAppUserRequest + - __user_identifier__: _string_ + +### OpenChannelRequest + - __destination__: _string_ + - __fundingAmount__: _number_ + - __pushAmount__: _number_ + - __closeAddress__: _string_ + +### GetProductBuyLinkResponse + - __link__: _string_ + +### LndGetInfoRequest + - __nodeId__: _number_ + +### AuthAppRequest + - __name__: _string_ + - __allow_user_creation__: _boolean_ *this field is optional + +### AuthApp + - __app__: _[Application](#Application)_ + - __auth_token__: _string_ + +### PayInvoiceRequest + - __invoice__: _string_ + - __amount__: _number_ + +### AddProductRequest + - __name__: _string_ + - __price_sats__: _number_ + +### EncryptionExchangeRequest + - __publicKey__: _string_ + - __deviceId__: _string_ + +### AddAppUserInvoiceRequest + - __receiver_identifier__: _string_ + - __payer_identifier__: _string_ + - __http_callback_url__: _string_ + - __invoice_req__: _[NewInvoiceRequest](#NewInvoiceRequest)_ + +### PayAppUserInvoiceRequest + - __user_identifier__: _string_ + - __invoice__: _string_ + - __amount__: _number_ + +### SendAppUserToAppPaymentRequest + - __from_user_identifier__: _string_ + - __amount__: _number_ + +### SetMockAppUserBalanceRequest + - __user_identifier__: _string_ + - __amount__: _number_ + +### PayAddressRequest + - __address__: _string_ + - __amoutSats__: _number_ + - __satsPerVByte__: _number_ + +### GetUserOperationsRequest + - __latestIncomingInvoice__: _number_ + - __latestOutgoingInvoice__: _number_ + - __latestIncomingTx__: _number_ + - __latestOutgoingTx__: _number_ + - __latestIncomingUserToUserPayment__: _number_ + - __latestOutgoingUserToUserPayment__: _number_ + +### SetMockInvoiceAsPaidRequest + - __invoice__: _string_ + - __amount__: _number_ + +### AddAppInvoiceRequest + - __payer_identifier__: _string_ + - __http_callback_url__: _string_ + - __invoice_req__: _[NewInvoiceRequest](#NewInvoiceRequest)_ + +### GetAppUserLNURLInfoRequest + - __user_identifier__: _string_ + - __base_url_override__: _string_ + +### SetMockAppBalanceRequest + - __amount__: _number_ + +### NewAddressResponse + - __address__: _string_ + +### DecodeInvoiceRequest + - __invoice__: _string_ + +### OpenChannelResponse + - __channelId__: _string_ + +### HandleLnurlPayResponse + - __pr__: _string_ + - __routes__: ARRAY of: _[Empty](#Empty)_ + +### Product + - __id__: _string_ + - __name__: _string_ + - __price_sats__: _number_ + +### LiveUserOperation + - __id__: _string_ + - __operation__: _[UserOperation](#UserOperation)_ + ### Empty +### AddAppRequest + - __name__: _string_ + - __allow_user_creation__: _boolean_ + ### AddAppUserRequest - __identifier__: _string_ - __fail_if_exists__: _boolean_ - __balance__: _number_ -### GetAppUserRequest - - __user_identifier__: _string_ +### AppUser + - __identifier__: _string_ + - __info__: _[UserInfo](#UserInfo)_ + - __max_withdrawable__: _number_ -### DecodeInvoiceRequest - - __invoice__: _string_ +### PayAppUserInvoiceResponse + - __preimage__: _string_ + - __amount_paid__: _number_ + +### PayAddressResponse + - __txId__: _string_ + +### NewInvoiceRequest + - __amountSats__: _number_ + - __memo__: _string_ ### DecodeInvoiceResponse - __amount__: _number_ -### OpenChannelResponse - - __channelId__: _string_ - -### LnurlLinkResponse - - __lnurl__: _string_ - - __k1__: _string_ - -### EncryptionExchangeRequest - - __publicKey__: _string_ - - __deviceId__: _string_ - -### SetMockInvoiceAsPaidRequest - - __invoice__: _string_ - - __amount__: _number_ - -### AuthAppRequest - - __name__: _string_ - - __allow_user_creation__: _boolean_ *this field is optional +### UserOperations + - __fromIndex__: _number_ + - __toIndex__: _number_ + - __operations__: ARRAY of: _[UserOperation](#UserOperation)_ ## Enums ### The enumerators used in the messages diff --git a/proto/autogenerated/debug.txt b/proto/autogenerated/debug.txt index 49d5c02c..6e32095a 100644 --- a/proto/autogenerated/debug.txt +++ b/proto/autogenerated/debug.txt @@ -1,5 +1,5 @@ ([]*main.Method) (len=35 cap=64) { - (*main.Method)(0xc0002f2500)({ + (*main.Method)(0xc0002c4500)({ in: (main.MethodMessage) { name: (string) (len=17) "LndGetInfoRequest", hasZeroFields: (bool) false @@ -9,8 +9,8 @@ name: (string) (len=18) "LndGetInfoResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000518180)({ - authType: (*main.supportedAuth)(0xc0004d5680)({ + opts: (*main.methodOptions)(0xc000084660)({ + authType: (*main.supportedAuth)(0xc0001b0300)({ id: (string) (len=5) "admin", name: (string) (len=5) "Admin", encrypted: (bool) false, @@ -28,7 +28,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2780)({ + (*main.Method)(0xc0002c4780)({ in: (main.MethodMessage) { name: (string) (len=13) "AddAppRequest", hasZeroFields: (bool) false @@ -38,8 +38,8 @@ name: (string) (len=7) "AuthApp", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000518300)({ - authType: (*main.supportedAuth)(0xc0004d5710)({ + opts: (*main.methodOptions)(0xc000084840)({ + authType: (*main.supportedAuth)(0xc0001b0390)({ id: (string) (len=5) "admin", name: (string) (len=5) "Admin", encrypted: (bool) false, @@ -57,7 +57,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2910)({ + (*main.Method)(0xc0002c4910)({ in: (main.MethodMessage) { name: (string) (len=14) "AuthAppRequest", hasZeroFields: (bool) false @@ -67,8 +67,8 @@ name: (string) (len=7) "AuthApp", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000518480)({ - authType: (*main.supportedAuth)(0xc0004d57a0)({ + opts: (*main.methodOptions)(0xc0000849c0)({ + authType: (*main.supportedAuth)(0xc0001b0420)({ id: (string) (len=5) "admin", name: (string) (len=5) "Admin", encrypted: (bool) false, @@ -86,7 +86,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2960)({ + (*main.Method)(0xc0002c4960)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -96,8 +96,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc000518600)({ - authType: (*main.supportedAuth)(0xc0004d5830)({ + opts: (*main.methodOptions)(0xc000084b40)({ + authType: (*main.supportedAuth)(0xc0001b04b0)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", encrypted: (bool) false, @@ -114,7 +114,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f29b0)({ + (*main.Method)(0xc0002c49b0)({ in: (main.MethodMessage) { name: (string) (len=25) "EncryptionExchangeRequest", hasZeroFields: (bool) false @@ -124,8 +124,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc000518780)({ - authType: (*main.supportedAuth)(0xc0004d58f0)({ + opts: (*main.methodOptions)(0xc000084cc0)({ + authType: (*main.supportedAuth)(0xc0001b0570)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", encrypted: (bool) false, @@ -142,7 +142,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2a00)({ + (*main.Method)(0xc0002c4a00)({ in: (main.MethodMessage) { name: (string) (len=27) "SetMockInvoiceAsPaidRequest", hasZeroFields: (bool) false @@ -152,8 +152,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc000518960)({ - authType: (*main.supportedAuth)(0xc0004d5980)({ + opts: (*main.methodOptions)(0xc000084ea0)({ + authType: (*main.supportedAuth)(0xc0001b0600)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", encrypted: (bool) false, @@ -170,7 +170,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2aa0)({ + (*main.Method)(0xc0002c4aa0)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -180,8 +180,8 @@ name: (string) (len=25) "LnurlWithdrawInfoResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000518cc0)({ - authType: (*main.supportedAuth)(0xc0004d5ad0)({ + opts: (*main.methodOptions)(0xc0000852c0)({ + authType: (*main.supportedAuth)(0xc0001b0750)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", encrypted: (bool) false, @@ -200,7 +200,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2b40)({ + (*main.Method)(0xc0002c4b40)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -210,8 +210,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc000519020)({ - authType: (*main.supportedAuth)(0xc0004d5c20)({ + opts: (*main.methodOptions)(0xc0001c2120)({ + authType: (*main.supportedAuth)(0xc0001b08a0)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", encrypted: (bool) false, @@ -231,7 +231,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2be0)({ + (*main.Method)(0xc0002c4be0)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -241,8 +241,8 @@ name: (string) (len=20) "LnurlPayInfoResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000519380)({ - authType: (*main.supportedAuth)(0xc0004d5d40)({ + opts: (*main.methodOptions)(0xc0001c2480)({ + authType: (*main.supportedAuth)(0xc0001b09c0)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", encrypted: (bool) false, @@ -261,7 +261,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2c80)({ + (*main.Method)(0xc0002c4c80)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -271,8 +271,8 @@ name: (string) (len=22) "HandleLnurlPayResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc0005196e0)({ - authType: (*main.supportedAuth)(0xc0004d5e90)({ + opts: (*main.methodOptions)(0xc0001c27e0)({ + authType: (*main.supportedAuth)(0xc0001b0b10)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", encrypted: (bool) false, @@ -292,7 +292,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2cd0)({ + (*main.Method)(0xc0002c4cd0)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -302,8 +302,8 @@ name: (string) (len=11) "Application", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000519860)({ - authType: (*main.supportedAuth)(0xc0004d5f20)({ + opts: (*main.methodOptions)(0xc0001c2960)({ + authType: (*main.supportedAuth)(0xc0001b0ba0)({ id: (string) (len=3) "app", name: (string) (len=3) "App", encrypted: (bool) false, @@ -321,7 +321,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2d70)({ + (*main.Method)(0xc0002c4d70)({ in: (main.MethodMessage) { name: (string) (len=17) "AddAppUserRequest", hasZeroFields: (bool) false @@ -331,8 +331,8 @@ name: (string) (len=7) "AppUser", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc0005199e0)({ - authType: (*main.supportedAuth)(0xc0004d5fb0)({ + opts: (*main.methodOptions)(0xc0001c2ae0)({ + authType: (*main.supportedAuth)(0xc0001b0c30)({ id: (string) (len=3) "app", name: (string) (len=3) "App", encrypted: (bool) false, @@ -350,7 +350,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2e10)({ + (*main.Method)(0xc0002c4e10)({ in: (main.MethodMessage) { name: (string) (len=20) "AddAppInvoiceRequest", hasZeroFields: (bool) false @@ -360,8 +360,8 @@ name: (string) (len=18) "NewInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000519b60)({ - authType: (*main.supportedAuth)(0xc000100270)({ + opts: (*main.methodOptions)(0xc0001c2c60)({ + authType: (*main.supportedAuth)(0xc0001b0cc0)({ id: (string) (len=3) "app", name: (string) (len=3) "App", encrypted: (bool) false, @@ -379,7 +379,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2e60)({ + (*main.Method)(0xc0002c4e60)({ in: (main.MethodMessage) { name: (string) (len=24) "AddAppUserInvoiceRequest", hasZeroFields: (bool) false @@ -389,8 +389,8 @@ name: (string) (len=18) "NewInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000519d40)({ - authType: (*main.supportedAuth)(0xc000100330)({ + opts: (*main.methodOptions)(0xc0001c2e40)({ + authType: (*main.supportedAuth)(0xc0001b0d50)({ id: (string) (len=3) "app", name: (string) (len=3) "App", encrypted: (bool) false, @@ -408,7 +408,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2f00)({ + (*main.Method)(0xc0002c4f00)({ in: (main.MethodMessage) { name: (string) (len=17) "GetAppUserRequest", hasZeroFields: (bool) false @@ -418,8 +418,8 @@ name: (string) (len=7) "AppUser", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000519ec0)({ - authType: (*main.supportedAuth)(0xc0001006c0)({ + opts: (*main.methodOptions)(0xc0001c2fc0)({ + authType: (*main.supportedAuth)(0xc0001b0de0)({ id: (string) (len=3) "app", name: (string) (len=3) "App", encrypted: (bool) false, @@ -437,7 +437,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2fa0)({ + (*main.Method)(0xc0002c4fa0)({ in: (main.MethodMessage) { name: (string) (len=24) "PayAppUserInvoiceRequest", hasZeroFields: (bool) false @@ -447,8 +447,8 @@ name: (string) (len=25) "PayAppUserInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00006c540)({ - authType: (*main.supportedAuth)(0xc000100e10)({ + opts: (*main.methodOptions)(0xc0001c3140)({ + authType: (*main.supportedAuth)(0xc0001b0e70)({ id: (string) (len=3) "app", name: (string) (len=3) "App", encrypted: (bool) false, @@ -466,7 +466,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f2ff0)({ + (*main.Method)(0xc0002c4ff0)({ in: (main.MethodMessage) { name: (string) (len=34) "SendAppUserToAppUserPaymentRequest", hasZeroFields: (bool) false @@ -476,8 +476,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc00006c780)({ - authType: (*main.supportedAuth)(0xc000100ed0)({ + opts: (*main.methodOptions)(0xc0001c3320)({ + authType: (*main.supportedAuth)(0xc0001b0f00)({ id: (string) (len=3) "app", name: (string) (len=3) "App", encrypted: (bool) false, @@ -495,7 +495,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f3090)({ + (*main.Method)(0xc0002c5090)({ in: (main.MethodMessage) { name: (string) (len=30) "SendAppUserToAppPaymentRequest", hasZeroFields: (bool) false @@ -505,8 +505,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc00006c900)({ - authType: (*main.supportedAuth)(0xc000100f60)({ + opts: (*main.methodOptions)(0xc0001c34a0)({ + authType: (*main.supportedAuth)(0xc0001b0f90)({ id: (string) (len=3) "app", name: (string) (len=3) "App", encrypted: (bool) false, @@ -524,7 +524,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f30e0)({ + (*main.Method)(0xc0002c50e0)({ in: (main.MethodMessage) { name: (string) (len=26) "GetAppUserLNURLInfoRequest", hasZeroFields: (bool) false @@ -534,8 +534,8 @@ name: (string) (len=20) "LnurlPayInfoResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00006ca80)({ - authType: (*main.supportedAuth)(0xc000101140)({ + opts: (*main.methodOptions)(0xc0001c3620)({ + authType: (*main.supportedAuth)(0xc0001b1020)({ id: (string) (len=3) "app", name: (string) (len=3) "App", encrypted: (bool) false, @@ -553,7 +553,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f3130)({ + (*main.Method)(0xc0002c5130)({ in: (main.MethodMessage) { name: (string) (len=28) "SetMockAppUserBalanceRequest", hasZeroFields: (bool) false @@ -563,8 +563,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc00006cc00)({ - authType: (*main.supportedAuth)(0xc0001011d0)({ + opts: (*main.methodOptions)(0xc0001c37a0)({ + authType: (*main.supportedAuth)(0xc0001b10b0)({ id: (string) (len=3) "app", name: (string) (len=3) "App", encrypted: (bool) false, @@ -582,7 +582,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f3180)({ + (*main.Method)(0xc0002c5180)({ in: (main.MethodMessage) { name: (string) (len=24) "SetMockAppBalanceRequest", hasZeroFields: (bool) false @@ -592,8 +592,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc00006cde0)({ - authType: (*main.supportedAuth)(0xc000101260)({ + opts: (*main.methodOptions)(0xc0001c3980)({ + authType: (*main.supportedAuth)(0xc0001b1140)({ id: (string) (len=3) "app", name: (string) (len=3) "App", encrypted: (bool) false, @@ -611,7 +611,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f31d0)({ + (*main.Method)(0xc0002c51d0)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -621,15 +621,15 @@ name: (string) (len=8) "UserInfo", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00006d020)({ - authType: (*main.supportedAuth)(0xc000101320)({ + opts: (*main.methodOptions)(0xc0001c3b60)({ + authType: (*main.supportedAuth)(0xc0001b1200)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, context: (map[string]string) (len=3) { - (string) (len=6) "app_id": (string) (len=6) "string", (string) (len=11) "app_user_id": (string) (len=6) "string", - (string) (len=7) "user_id": (string) (len=6) "string" + (string) (len=7) "user_id": (string) (len=6) "string", + (string) (len=6) "app_id": (string) (len=6) "string" } }), method: (string) (len=4) "post", @@ -642,7 +642,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f3270)({ + (*main.Method)(0xc0002c5270)({ in: (main.MethodMessage) { name: (string) (len=17) "AddProductRequest", hasZeroFields: (bool) false @@ -652,8 +652,8 @@ name: (string) (len=7) "Product", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00006d260)({ - authType: (*main.supportedAuth)(0xc0001013b0)({ + opts: (*main.methodOptions)(0xc0001c3d40)({ + authType: (*main.supportedAuth)(0xc0001b1290)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, @@ -673,7 +673,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f32c0)({ + (*main.Method)(0xc0002c52c0)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -683,15 +683,15 @@ name: (string) (len=18) "NewInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00055c1e0)({ - authType: (*main.supportedAuth)(0xc0001014d0)({ + opts: (*main.methodOptions)(0xc0001c41e0)({ + authType: (*main.supportedAuth)(0xc0001b13b0)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, context: (map[string]string) (len=3) { - (string) (len=7) "user_id": (string) (len=6) "string", (string) (len=6) "app_id": (string) (len=6) "string", - (string) (len=11) "app_user_id": (string) (len=6) "string" + (string) (len=11) "app_user_id": (string) (len=6) "string", + (string) (len=7) "user_id": (string) (len=6) "string" } }), method: (string) (len=3) "get", @@ -706,7 +706,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f3310)({ + (*main.Method)(0xc0002c5310)({ in: (main.MethodMessage) { name: (string) (len=24) "GetUserOperationsRequest", hasZeroFields: (bool) false @@ -716,15 +716,15 @@ name: (string) (len=25) "GetUserOperationsResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00055c3c0)({ - authType: (*main.supportedAuth)(0xc000101560)({ + opts: (*main.methodOptions)(0xc0001c43c0)({ + authType: (*main.supportedAuth)(0xc0001b1440)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, context: (map[string]string) (len=3) { + (string) (len=7) "user_id": (string) (len=6) "string", (string) (len=6) "app_id": (string) (len=6) "string", - (string) (len=11) "app_user_id": (string) (len=6) "string", - (string) (len=7) "user_id": (string) (len=6) "string" + (string) (len=11) "app_user_id": (string) (len=6) "string" } }), method: (string) (len=4) "post", @@ -737,7 +737,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f33b0)({ + (*main.Method)(0xc0002c53b0)({ in: (main.MethodMessage) { name: (string) (len=17) "NewAddressRequest", hasZeroFields: (bool) false @@ -747,15 +747,15 @@ name: (string) (len=18) "NewAddressResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00055c5a0)({ - authType: (*main.supportedAuth)(0xc0001015f0)({ + opts: (*main.methodOptions)(0xc0001c45a0)({ + authType: (*main.supportedAuth)(0xc0001b14d0)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, context: (map[string]string) (len=3) { + (string) (len=7) "user_id": (string) (len=6) "string", (string) (len=6) "app_id": (string) (len=6) "string", - (string) (len=11) "app_user_id": (string) (len=6) "string", - (string) (len=7) "user_id": (string) (len=6) "string" + (string) (len=11) "app_user_id": (string) (len=6) "string" } }), method: (string) (len=4) "post", @@ -768,7 +768,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f3450)({ + (*main.Method)(0xc0002c5450)({ in: (main.MethodMessage) { name: (string) (len=17) "PayAddressRequest", hasZeroFields: (bool) false @@ -778,15 +778,15 @@ name: (string) (len=18) "PayAddressResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00055c780)({ - authType: (*main.supportedAuth)(0xc000101680)({ + opts: (*main.methodOptions)(0xc0001c4780)({ + authType: (*main.supportedAuth)(0xc0001b1560)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, context: (map[string]string) (len=3) { - (string) (len=6) "app_id": (string) (len=6) "string", (string) (len=11) "app_user_id": (string) (len=6) "string", - (string) (len=7) "user_id": (string) (len=6) "string" + (string) (len=7) "user_id": (string) (len=6) "string", + (string) (len=6) "app_id": (string) (len=6) "string" } }), method: (string) (len=4) "post", @@ -799,7 +799,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f34f0)({ + (*main.Method)(0xc0002c54f0)({ in: (main.MethodMessage) { name: (string) (len=17) "NewInvoiceRequest", hasZeroFields: (bool) false @@ -809,15 +809,15 @@ name: (string) (len=18) "NewInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00055c960)({ - authType: (*main.supportedAuth)(0xc000101890)({ + opts: (*main.methodOptions)(0xc0001c4960)({ + authType: (*main.supportedAuth)(0xc0001b15f0)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, context: (map[string]string) (len=3) { + (string) (len=11) "app_user_id": (string) (len=6) "string", (string) (len=7) "user_id": (string) (len=6) "string", - (string) (len=6) "app_id": (string) (len=6) "string", - (string) (len=11) "app_user_id": (string) (len=6) "string" + (string) (len=6) "app_id": (string) (len=6) "string" } }), method: (string) (len=4) "post", @@ -830,7 +830,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f3590)({ + (*main.Method)(0xc0002c5590)({ in: (main.MethodMessage) { name: (string) (len=20) "DecodeInvoiceRequest", hasZeroFields: (bool) false @@ -840,15 +840,15 @@ name: (string) (len=21) "DecodeInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00055cb40)({ - authType: (*main.supportedAuth)(0xc000101920)({ + opts: (*main.methodOptions)(0xc0001c4b40)({ + authType: (*main.supportedAuth)(0xc0001b1680)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, context: (map[string]string) (len=3) { + (string) (len=7) "user_id": (string) (len=6) "string", (string) (len=6) "app_id": (string) (len=6) "string", - (string) (len=11) "app_user_id": (string) (len=6) "string", - (string) (len=7) "user_id": (string) (len=6) "string" + (string) (len=11) "app_user_id": (string) (len=6) "string" } }), method: (string) (len=4) "post", @@ -861,7 +861,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f3630)({ + (*main.Method)(0xc0002c5630)({ in: (main.MethodMessage) { name: (string) (len=17) "PayInvoiceRequest", hasZeroFields: (bool) false @@ -871,15 +871,15 @@ name: (string) (len=18) "PayInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00055cd20)({ - authType: (*main.supportedAuth)(0xc000101b30)({ + opts: (*main.methodOptions)(0xc0001c4d20)({ + authType: (*main.supportedAuth)(0xc0001b1710)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, context: (map[string]string) (len=3) { + (string) (len=7) "user_id": (string) (len=6) "string", (string) (len=6) "app_id": (string) (len=6) "string", - (string) (len=11) "app_user_id": (string) (len=6) "string", - (string) (len=7) "user_id": (string) (len=6) "string" + (string) (len=11) "app_user_id": (string) (len=6) "string" } }), method: (string) (len=4) "post", @@ -892,7 +892,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f36d0)({ + (*main.Method)(0xc0002c56d0)({ in: (main.MethodMessage) { name: (string) (len=18) "OpenChannelRequest", hasZeroFields: (bool) false @@ -902,15 +902,15 @@ name: (string) (len=19) "OpenChannelResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00055cf00)({ - authType: (*main.supportedAuth)(0xc000101e00)({ + opts: (*main.methodOptions)(0xc0001c4f00)({ + authType: (*main.supportedAuth)(0xc0001b17a0)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, context: (map[string]string) (len=3) { - (string) (len=6) "app_id": (string) (len=6) "string", (string) (len=11) "app_user_id": (string) (len=6) "string", - (string) (len=7) "user_id": (string) (len=6) "string" + (string) (len=7) "user_id": (string) (len=6) "string", + (string) (len=6) "app_id": (string) (len=6) "string" } }), method: (string) (len=4) "post", @@ -923,7 +923,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f3770)({ + (*main.Method)(0xc0002c5770)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -933,15 +933,15 @@ name: (string) (len=17) "LnurlLinkResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00055d0e0)({ - authType: (*main.supportedAuth)(0xc000246000)({ + opts: (*main.methodOptions)(0xc0001c50e0)({ + authType: (*main.supportedAuth)(0xc0001b1830)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, context: (map[string]string) (len=3) { + (string) (len=7) "user_id": (string) (len=6) "string", (string) (len=6) "app_id": (string) (len=6) "string", - (string) (len=11) "app_user_id": (string) (len=6) "string", - (string) (len=7) "user_id": (string) (len=6) "string" + (string) (len=11) "app_user_id": (string) (len=6) "string" } }), method: (string) (len=3) "get", @@ -954,7 +954,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f3810)({ + (*main.Method)(0xc0002c5810)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -964,8 +964,8 @@ name: (string) (len=17) "LnurlLinkResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00055d2c0)({ - authType: (*main.supportedAuth)(0xc000246090)({ + opts: (*main.methodOptions)(0xc0001c52c0)({ + authType: (*main.supportedAuth)(0xc0001b18c0)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, @@ -985,7 +985,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f38b0)({ + (*main.Method)(0xc0002c58b0)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -995,15 +995,15 @@ name: (string) (len=17) "LnurlLinkResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00055d4a0)({ - authType: (*main.supportedAuth)(0xc000246690)({ + opts: (*main.methodOptions)(0xc0001c54a0)({ + authType: (*main.supportedAuth)(0xc0001b1950)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, context: (map[string]string) (len=3) { - (string) (len=6) "app_id": (string) (len=6) "string", (string) (len=11) "app_user_id": (string) (len=6) "string", - (string) (len=7) "user_id": (string) (len=6) "string" + (string) (len=7) "user_id": (string) (len=6) "string", + (string) (len=6) "app_id": (string) (len=6) "string" } }), method: (string) (len=4) "post", @@ -1016,7 +1016,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f3950)({ + (*main.Method)(0xc0002c5950)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -1026,15 +1026,15 @@ name: (string) (len=17) "LiveUserOperation", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00055d680)({ - authType: (*main.supportedAuth)(0xc000246810)({ + opts: (*main.methodOptions)(0xc0001c5680)({ + authType: (*main.supportedAuth)(0xc0001b19e0)({ id: (string) (len=4) "user", name: (string) (len=4) "User", encrypted: (bool) false, context: (map[string]string) (len=3) { + (string) (len=7) "user_id": (string) (len=6) "string", (string) (len=6) "app_id": (string) (len=6) "string", - (string) (len=11) "app_user_id": (string) (len=6) "string", - (string) (len=7) "user_id": (string) (len=6) "string" + (string) (len=11) "app_user_id": (string) (len=6) "string" } }), method: (string) (len=4) "post", @@ -1050,7 +1050,7 @@ } ([]*main.Enum) (len=2 cap=2) { - (*main.Enum)(0xc0004d4db0)({ + (*main.Enum)(0xc00018da10)({ name: (string) (len=11) "AddressType", values: ([]main.EnumValue) (len=3 cap=4) { (main.EnumValue) { @@ -1067,7 +1067,7 @@ } } }), - (*main.Enum)(0xc0004d4e10)({ + (*main.Enum)(0xc00018da70)({ name: (string) (len=17) "UserOperationType", values: ([]main.EnumValue) (len=6 cap=8) { (main.EnumValue) { @@ -1099,488 +1099,11 @@ } (map[string]*main.Message) (len=46) { - (string) (len=18) "NewAddressResponse": (*main.Message)(0xc00043c7c0)({ - fullName: (string) (len=18) "NewAddressResponse", - name: (string) (len=18) "NewAddressResponse", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc000401dd0)({ - name: (string) (len=7) "address", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=17) "NewInvoiceRequest": (*main.Message)(0xc00043c880)({ - fullName: (string) (len=17) "NewInvoiceRequest", - name: (string) (len=17) "NewInvoiceRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc000401ec0)({ - name: (string) (len=10) "amountSats", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc000401ef0)({ - name: (string) (len=4) "memo", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=17) "AddProductRequest": (*main.Message)(0xc00043cdc0)({ - fullName: (string) (len=17) "AddProductRequest", - name: (string) (len=17) "AddProductRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004d4c30)({ - name: (string) (len=4) "name", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4c60)({ - name: (string) (len=10) "price_sats", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=18) "PayAddressResponse": (*main.Message)(0xc00043c840)({ - fullName: (string) (len=18) "PayAddressResponse", - name: (string) (len=18) "PayAddressResponse", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc000401e90)({ - name: (string) (len=4) "txId", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=20) "LnurlPayInfoResponse": (*main.Message)(0xc00043cb80)({ - fullName: (string) (len=20) "LnurlPayInfoResponse", - name: (string) (len=20) "LnurlPayInfoResponse", - fields: ([]*main.Field) (len=5 cap=8) { - (*main.Field)(0xc0004d46f0)({ - name: (string) (len=3) "tag", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4720)({ - name: (string) (len=8) "callback", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4750)({ - name: (string) (len=11) "maxSendable", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4780)({ - name: (string) (len=11) "minSendable", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d47b0)({ - name: (string) (len=8) "metadata", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=8) "UserInfo": (*main.Message)(0xc00043cc00)({ - fullName: (string) (len=8) "UserInfo", - name: (string) (len=8) "UserInfo", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004d4840)({ - name: (string) (len=6) "userId", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4870)({ - name: (string) (len=7) "balance", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=14) "UserOperations": (*main.Message)(0xc00043cd00)({ - fullName: (string) (len=14) "UserOperations", - name: (string) (len=14) "UserOperations", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc0004d4a80)({ - name: (string) (len=9) "fromIndex", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4ab0)({ - name: (string) (len=7) "toIndex", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4ae0)({ - name: (string) (len=10) "operations", - kind: (string) (len=13) "UserOperation", - isMap: (bool) false, - isArray: (bool) true, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }) - } - }), - (string) (len=25) "GetUserOperationsResponse": (*main.Message)(0xc00043cd80)({ - fullName: (string) (len=25) "GetUserOperationsResponse", - name: (string) (len=25) "GetUserOperationsResponse", - fields: ([]*main.Field) (len=6 cap=8) { - (*main.Field)(0xc0004d4b10)({ - name: (string) (len=31) "latestOutgoingInvoiceOperations", - kind: (string) (len=14) "UserOperations", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4b40)({ - name: (string) (len=31) "latestIncomingInvoiceOperations", - kind: (string) (len=14) "UserOperations", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4b70)({ - name: (string) (len=26) "latestOutgoingTxOperations", - kind: (string) (len=14) "UserOperations", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4ba0)({ - name: (string) (len=26) "latestIncomingTxOperations", - kind: (string) (len=14) "UserOperations", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4bd0)({ - name: (string) (len=32) "latestOutgoingUserToUserPayemnts", - kind: (string) (len=14) "UserOperations", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4c00)({ - name: (string) (len=32) "latestIncomingUserToUserPayemnts", - kind: (string) (len=14) "UserOperations", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }) - } - }), - (string) (len=17) "LiveUserOperation": (*main.Message)(0xc00043ce80)({ - fullName: (string) (len=17) "LiveUserOperation", - name: (string) (len=17) "LiveUserOperation", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004d4d50)({ - name: (string) (len=2) "id", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=18) "LndGetInfoResponse": (*main.Message)(0xc00043c340)({ - fullName: (string) (len=18) "LndGetInfoResponse", - name: (string) (len=18) "LndGetInfoResponse", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc000401620)({ - name: (string) (len=5) "alias", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=7) "AuthApp": (*main.Message)(0xc00043c440)({ - fullName: (string) (len=7) "AuthApp", - name: (string) (len=7) "AuthApp", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004017d0)({ - name: (string) (len=3) "app", - kind: (string) (len=11) "Application", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }), - (*main.Field)(0xc000401800)({ - name: (string) (len=10) "auth_token", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=34) "SendAppUserToAppUserPaymentRequest": (*main.Message)(0xc00043c640)({ - fullName: (string) (len=34) "SendAppUserToAppUserPaymentRequest", - name: (string) (len=34) "SendAppUserToAppUserPaymentRequest", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc000401bc0)({ - name: (string) (len=20) "from_user_identifier", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc000401bf0)({ - name: (string) (len=18) "to_user_identifier", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc000401c20)({ - name: (string) (len=6) "amount", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=30) "SendAppUserToAppPaymentRequest": (*main.Message)(0xc00043c680)({ - fullName: (string) (len=30) "SendAppUserToAppPaymentRequest", - name: (string) (len=30) "SendAppUserToAppPaymentRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc000401c50)({ - name: (string) (len=20) "from_user_identifier", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc000401c80)({ - name: (string) (len=6) "amount", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=24) "SetMockAppBalanceRequest": (*main.Message)(0xc00043c740)({ - fullName: (string) (len=24) "SetMockAppBalanceRequest", - name: (string) (len=24) "SetMockAppBalanceRequest", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc000401d70)({ - name: (string) (len=6) "amount", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=18) "OpenChannelRequest": (*main.Message)(0xc00043ca00)({ - fullName: (string) (len=18) "OpenChannelRequest", - name: (string) (len=18) "OpenChannelRequest", - fields: ([]*main.Field) (len=4 cap=4) { - (*main.Field)(0xc0004d4420)({ - name: (string) (len=11) "destination", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4450)({ - name: (string) (len=13) "fundingAmount", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4480)({ - name: (string) (len=10) "pushAmount", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d44b0)({ - name: (string) (len=12) "closeAddress", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=18) "NewInvoiceResponse": (*main.Message)(0xc00043c8c0)({ - fullName: (string) (len=18) "NewInvoiceResponse", - name: (string) (len=18) "NewInvoiceResponse", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc000401f20)({ - name: (string) (len=7) "invoice", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=17) "PayInvoiceRequest": (*main.Message)(0xc00043c980)({ - fullName: (string) (len=17) "PayInvoiceRequest", - name: (string) (len=17) "PayInvoiceRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc000401fb0)({ - name: (string) (len=7) "invoice", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4390)({ - name: (string) (len=6) "amount", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=13) "AddAppRequest": (*main.Message)(0xc00043c380)({ - fullName: (string) (len=13) "AddAppRequest", - name: (string) (len=13) "AddAppRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc000401650)({ - name: (string) (len=4) "name", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc000401680)({ - name: (string) (len=19) "allow_user_creation", - kind: (string) (len=4) "bool", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=11) "Application": (*main.Message)(0xc00043c400)({ + (string) (len=11) "Application": (*main.Message)(0xc000436580)({ fullName: (string) (len=11) "Application", name: (string) (len=11) "Application", fields: ([]*main.Field) (len=4 cap=4) { - (*main.Field)(0xc000401710)({ + (*main.Field)(0xc00018c6f0)({ name: (string) (len=4) "name", kind: (string) (len=6) "string", isMap: (bool) false, @@ -1589,7 +1112,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc000401740)({ + (*main.Field)(0xc00018c720)({ name: (string) (len=2) "id", kind: (string) (len=6) "string", isMap: (bool) false, @@ -1598,7 +1121,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc000401770)({ + (*main.Field)(0xc00018c750)({ name: (string) (len=7) "balance", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -1607,7 +1130,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc0004017a0)({ + (*main.Field)(0xc00018c780)({ name: (string) (len=4) "npub", kind: (string) (len=6) "string", isMap: (bool) false, @@ -1618,77 +1141,26 @@ }) } }), - (string) (len=7) "AppUser": (*main.Message)(0xc00043c4c0)({ - fullName: (string) (len=7) "AppUser", - name: (string) (len=7) "AppUser", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc0004018c0)({ - name: (string) (len=10) "identifier", + (string) (len=18) "NewInvoiceResponse": (*main.Message)(0xc000436a40)({ + fullName: (string) (len=18) "NewInvoiceResponse", + name: (string) (len=18) "NewInvoiceResponse", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc00018cf00)({ + name: (string) (len=7) "invoice", kind: (string) (len=6) "string", isMap: (bool) false, isArray: (bool) false, isEnum: (bool) false, isMessage: (bool) false, isOptional: (bool) false - }), - (*main.Field)(0xc0004018f0)({ - name: (string) (len=4) "info", - kind: (string) (len=8) "UserInfo", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }), - (*main.Field)(0xc000401920)({ - name: (string) (len=16) "max_withdrawable", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false }) } }), - (string) (len=20) "AddAppInvoiceRequest": (*main.Message)(0xc00043c500)({ - fullName: (string) (len=20) "AddAppInvoiceRequest", - name: (string) (len=20) "AddAppInvoiceRequest", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc000401950)({ - name: (string) (len=16) "payer_identifier", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc000401980)({ - name: (string) (len=17) "http_callback_url", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004019b0)({ - name: (string) (len=11) "invoice_req", - kind: (string) (len=17) "NewInvoiceRequest", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }) - } - }), - (string) (len=25) "PayAppUserInvoiceResponse": (*main.Message)(0xc00043c600)({ - fullName: (string) (len=25) "PayAppUserInvoiceResponse", - name: (string) (len=25) "PayAppUserInvoiceResponse", + (string) (len=18) "PayInvoiceResponse": (*main.Message)(0xc000436b40)({ + fullName: (string) (len=18) "PayInvoiceResponse", + name: (string) (len=18) "PayInvoiceResponse", fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc000401b60)({ + (*main.Field)(0xc00018cff0)({ name: (string) (len=8) "preimage", kind: (string) (len=6) "string", isMap: (bool) false, @@ -1697,7 +1169,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc000401b90)({ + (*main.Field)(0xc00018d020)({ name: (string) (len=11) "amount_paid", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -1708,26 +1180,110 @@ }) } }), - (string) (len=17) "NewAddressRequest": (*main.Message)(0xc00043c780)({ - fullName: (string) (len=17) "NewAddressRequest", - name: (string) (len=17) "NewAddressRequest", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc000401da0)({ - name: (string) (len=11) "addressType", - kind: (string) (len=11) "AddressType", + (string) (len=13) "UserOperation": (*main.Message)(0xc000436e40)({ + fullName: (string) (len=13) "UserOperation", + name: (string) (len=13) "UserOperation", + fields: ([]*main.Field) (len=4 cap=4) { + (*main.Field)(0xc00018d5f0)({ + name: (string) (len=10) "paidAtUnix", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d620)({ + name: (string) (len=4) "type", + kind: (string) (len=17) "UserOperationType", isMap: (bool) false, isArray: (bool) false, isEnum: (bool) true, isMessage: (bool) false, isOptional: (bool) false + }), + (*main.Field)(0xc00018d650)({ + name: (string) (len=7) "inbound", + kind: (string) (len=4) "bool", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d680)({ + name: (string) (len=6) "amount", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false }) } }), - (string) (len=25) "GetProductBuyLinkResponse": (*main.Message)(0xc00043ce40)({ + (string) (len=17) "GetAppUserRequest": (*main.Message)(0xc000436700)({ + fullName: (string) (len=17) "GetAppUserRequest", + name: (string) (len=17) "GetAppUserRequest", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc00018ca80)({ + name: (string) (len=15) "user_identifier", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=18) "OpenChannelRequest": (*main.Message)(0xc000436b80)({ + fullName: (string) (len=18) "OpenChannelRequest", + name: (string) (len=18) "OpenChannelRequest", + fields: ([]*main.Field) (len=4 cap=4) { + (*main.Field)(0xc00018d050)({ + name: (string) (len=11) "destination", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d080)({ + name: (string) (len=13) "fundingAmount", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d0b0)({ + name: (string) (len=10) "pushAmount", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d0e0)({ + name: (string) (len=12) "closeAddress", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=25) "GetProductBuyLinkResponse": (*main.Message)(0xc000436fc0)({ fullName: (string) (len=25) "GetProductBuyLinkResponse", name: (string) (len=25) "GetProductBuyLinkResponse", fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004d4d20)({ + (*main.Field)(0xc00018d950)({ name: (string) (len=4) "link", kind: (string) (len=6) "string", isMap: (bool) false, @@ -1738,382 +1294,11 @@ }) } }), - (string) (len=13) "UserOperation": (*main.Message)(0xc00043ccc0)({ - fullName: (string) (len=13) "UserOperation", - name: (string) (len=13) "UserOperation", - fields: ([]*main.Field) (len=4 cap=4) { - (*main.Field)(0xc0004d49c0)({ - name: (string) (len=10) "paidAtUnix", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d49f0)({ - name: (string) (len=4) "type", - kind: (string) (len=17) "UserOperationType", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) true, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4a20)({ - name: (string) (len=7) "inbound", - kind: (string) (len=4) "bool", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4a50)({ - name: (string) (len=6) "amount", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=5) "Empty": (*main.Message)(0xc00043c240)({ - fullName: (string) (len=5) "Empty", - name: (string) (len=5) "Empty", - fields: ([]*main.Field) - }), - (string) (len=17) "AddAppUserRequest": (*main.Message)(0xc00043c480)({ - fullName: (string) (len=17) "AddAppUserRequest", - name: (string) (len=17) "AddAppUserRequest", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc000401830)({ - name: (string) (len=10) "identifier", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc000401860)({ - name: (string) (len=14) "fail_if_exists", - kind: (string) (len=4) "bool", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc000401890)({ - name: (string) (len=7) "balance", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=17) "GetAppUserRequest": (*main.Message)(0xc00043c580)({ - fullName: (string) (len=17) "GetAppUserRequest", - name: (string) (len=17) "GetAppUserRequest", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc000401aa0)({ - name: (string) (len=15) "user_identifier", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=24) "PayAppUserInvoiceRequest": (*main.Message)(0xc00043c5c0)({ - fullName: (string) (len=24) "PayAppUserInvoiceRequest", - name: (string) (len=24) "PayAppUserInvoiceRequest", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc000401ad0)({ - name: (string) (len=15) "user_identifier", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc000401b00)({ - name: (string) (len=7) "invoice", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc000401b30)({ - name: (string) (len=6) "amount", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=18) "PayInvoiceResponse": (*main.Message)(0xc00043c9c0)({ - fullName: (string) (len=18) "PayInvoiceResponse", - name: (string) (len=18) "PayInvoiceResponse", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004d43c0)({ - name: (string) (len=8) "preimage", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d43f0)({ - name: (string) (len=11) "amount_paid", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=25) "LnurlWithdrawInfoResponse": (*main.Message)(0xc00043cb00)({ - fullName: (string) (len=25) "LnurlWithdrawInfoResponse", - name: (string) (len=25) "LnurlWithdrawInfoResponse", - fields: ([]*main.Field) (len=8 cap=8) { - (*main.Field)(0xc0004d4570)({ - name: (string) (len=3) "tag", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d45a0)({ - name: (string) (len=8) "callback", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d45d0)({ - name: (string) (len=2) "k1", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4600)({ - name: (string) (len=18) "defaultDescription", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4630)({ - name: (string) (len=15) "minWithdrawable", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4660)({ - name: (string) (len=15) "maxWithdrawable", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4690)({ - name: (string) (len=12) "balanceCheck", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d46c0)({ - name: (string) (len=7) "payLink", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=17) "LnurlLinkResponse": (*main.Message)(0xc00043ca80)({ - fullName: (string) (len=17) "LnurlLinkResponse", - name: (string) (len=17) "LnurlLinkResponse", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004d4510)({ - name: (string) (len=5) "lnurl", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4540)({ - name: (string) (len=2) "k1", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=25) "EncryptionExchangeRequest": (*main.Message)(0xc00043c280)({ - fullName: (string) (len=25) "EncryptionExchangeRequest", - name: (string) (len=25) "EncryptionExchangeRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc000401530)({ - name: (string) (len=9) "publicKey", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc000401560)({ - name: (string) (len=8) "deviceId", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=27) "SetMockInvoiceAsPaidRequest": (*main.Message)(0xc00043c300)({ - fullName: (string) (len=27) "SetMockInvoiceAsPaidRequest", - name: (string) (len=27) "SetMockInvoiceAsPaidRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004015c0)({ - name: (string) (len=7) "invoice", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004015f0)({ - name: (string) (len=6) "amount", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=14) "AuthAppRequest": (*main.Message)(0xc00043c3c0)({ - fullName: (string) (len=14) "AuthAppRequest", - name: (string) (len=14) "AuthAppRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004016b0)({ - name: (string) (len=4) "name", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004016e0)({ - name: (string) (len=19) "allow_user_creation", - kind: (string) (len=4) "bool", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) true - }) - } - }), - (string) (len=20) "DecodeInvoiceRequest": (*main.Message)(0xc00043c900)({ - fullName: (string) (len=20) "DecodeInvoiceRequest", - name: (string) (len=20) "DecodeInvoiceRequest", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc000401f50)({ - name: (string) (len=7) "invoice", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=21) "DecodeInvoiceResponse": (*main.Message)(0xc00043c940)({ - fullName: (string) (len=21) "DecodeInvoiceResponse", - name: (string) (len=21) "DecodeInvoiceResponse", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc000401f80)({ - name: (string) (len=6) "amount", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=19) "OpenChannelResponse": (*main.Message)(0xc00043ca40)({ - fullName: (string) (len=19) "OpenChannelResponse", - name: (string) (len=19) "OpenChannelResponse", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004d44e0)({ - name: (string) (len=9) "channelId", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=17) "LndGetInfoRequest": (*main.Message)(0xc00043c2c0)({ + (string) (len=17) "LndGetInfoRequest": (*main.Message)(0xc000436440)({ fullName: (string) (len=17) "LndGetInfoRequest", name: (string) (len=17) "LndGetInfoRequest", fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc000401590)({ + (*main.Field)(0xc00018c570)({ name: (string) (len=6) "nodeId", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -2124,12 +1309,12 @@ }) } }), - (string) (len=24) "AddAppUserInvoiceRequest": (*main.Message)(0xc00043c540)({ - fullName: (string) (len=24) "AddAppUserInvoiceRequest", - name: (string) (len=24) "AddAppUserInvoiceRequest", - fields: ([]*main.Field) (len=4 cap=4) { - (*main.Field)(0xc0004019e0)({ - name: (string) (len=19) "receiver_identifier", + (string) (len=14) "AuthAppRequest": (*main.Message)(0xc000436540)({ + fullName: (string) (len=14) "AuthAppRequest", + name: (string) (len=14) "AuthAppRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018c690)({ + name: (string) (len=4) "name", kind: (string) (len=6) "string", isMap: (bool) false, isArray: (bool) false, @@ -2137,50 +1322,32 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc000401a10)({ - name: (string) (len=16) "payer_identifier", - kind: (string) (len=6) "string", + (*main.Field)(0xc00018c6c0)({ + name: (string) (len=19) "allow_user_creation", + kind: (string) (len=4) "bool", isMap: (bool) false, isArray: (bool) false, isEnum: (bool) false, isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc000401a40)({ - name: (string) (len=17) "http_callback_url", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc000401a70)({ - name: (string) (len=11) "invoice_req", - kind: (string) (len=17) "NewInvoiceRequest", + isOptional: (bool) true + }) + } + }), + (string) (len=7) "AuthApp": (*main.Message)(0xc0004365c0)({ + fullName: (string) (len=7) "AuthApp", + name: (string) (len=7) "AuthApp", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018c7b0)({ + name: (string) (len=3) "app", + kind: (string) (len=11) "Application", isMap: (bool) false, isArray: (bool) false, isEnum: (bool) false, isMessage: (bool) true, isOptional: (bool) false - }) - } - }), - (string) (len=26) "GetAppUserLNURLInfoRequest": (*main.Message)(0xc00043c6c0)({ - fullName: (string) (len=26) "GetAppUserLNURLInfoRequest", - name: (string) (len=26) "GetAppUserLNURLInfoRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc000401cb0)({ - name: (string) (len=15) "user_identifier", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false }), - (*main.Field)(0xc000401ce0)({ - name: (string) (len=17) "base_url_override", + (*main.Field)(0xc00018c7e0)({ + name: (string) (len=10) "auth_token", kind: (string) (len=6) "string", isMap: (bool) false, isArray: (bool) false, @@ -2190,12 +1357,12 @@ }) } }), - (string) (len=28) "SetMockAppUserBalanceRequest": (*main.Message)(0xc00043c700)({ - fullName: (string) (len=28) "SetMockAppUserBalanceRequest", - name: (string) (len=28) "SetMockAppUserBalanceRequest", + (string) (len=17) "PayInvoiceRequest": (*main.Message)(0xc000436b00)({ + fullName: (string) (len=17) "PayInvoiceRequest", + name: (string) (len=17) "PayInvoiceRequest", fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc000401d10)({ - name: (string) (len=15) "user_identifier", + (*main.Field)(0xc00018cf90)({ + name: (string) (len=7) "invoice", kind: (string) (len=6) "string", isMap: (bool) false, isArray: (bool) false, @@ -2203,7 +1370,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc000401d40)({ + (*main.Field)(0xc00018cfc0)({ name: (string) (len=6) "amount", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -2214,11 +1381,182 @@ }) } }), - (string) (len=17) "PayAddressRequest": (*main.Message)(0xc00043c800)({ + (string) (len=17) "AddProductRequest": (*main.Message)(0xc000436f40)({ + fullName: (string) (len=17) "AddProductRequest", + name: (string) (len=17) "AddProductRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018d860)({ + name: (string) (len=4) "name", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d890)({ + name: (string) (len=10) "price_sats", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=25) "EncryptionExchangeRequest": (*main.Message)(0xc000436400)({ + fullName: (string) (len=25) "EncryptionExchangeRequest", + name: (string) (len=25) "EncryptionExchangeRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018c510)({ + name: (string) (len=9) "publicKey", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018c540)({ + name: (string) (len=8) "deviceId", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=24) "AddAppUserInvoiceRequest": (*main.Message)(0xc0004366c0)({ + fullName: (string) (len=24) "AddAppUserInvoiceRequest", + name: (string) (len=24) "AddAppUserInvoiceRequest", + fields: ([]*main.Field) (len=4 cap=4) { + (*main.Field)(0xc00018c9c0)({ + name: (string) (len=19) "receiver_identifier", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018c9f0)({ + name: (string) (len=16) "payer_identifier", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018ca20)({ + name: (string) (len=17) "http_callback_url", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018ca50)({ + name: (string) (len=11) "invoice_req", + kind: (string) (len=17) "NewInvoiceRequest", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }) + } + }), + (string) (len=24) "PayAppUserInvoiceRequest": (*main.Message)(0xc000436740)({ + fullName: (string) (len=24) "PayAppUserInvoiceRequest", + name: (string) (len=24) "PayAppUserInvoiceRequest", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc00018cab0)({ + name: (string) (len=15) "user_identifier", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018cae0)({ + name: (string) (len=7) "invoice", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018cb10)({ + name: (string) (len=6) "amount", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=30) "SendAppUserToAppPaymentRequest": (*main.Message)(0xc000436800)({ + fullName: (string) (len=30) "SendAppUserToAppPaymentRequest", + name: (string) (len=30) "SendAppUserToAppPaymentRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018cc30)({ + name: (string) (len=20) "from_user_identifier", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018cc60)({ + name: (string) (len=6) "amount", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=28) "SetMockAppUserBalanceRequest": (*main.Message)(0xc000436880)({ + fullName: (string) (len=28) "SetMockAppUserBalanceRequest", + name: (string) (len=28) "SetMockAppUserBalanceRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018ccf0)({ + name: (string) (len=15) "user_identifier", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018cd20)({ + name: (string) (len=6) "amount", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=17) "PayAddressRequest": (*main.Message)(0xc000436980)({ fullName: (string) (len=17) "PayAddressRequest", name: (string) (len=17) "PayAddressRequest", fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc000401e00)({ + (*main.Field)(0xc00018cde0)({ name: (string) (len=7) "address", kind: (string) (len=6) "string", isMap: (bool) false, @@ -2227,7 +1565,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc000401e30)({ + (*main.Field)(0xc00018ce10)({ name: (string) (len=9) "amoutSats", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -2236,7 +1574,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc000401e60)({ + (*main.Field)(0xc00018ce40)({ name: (string) (len=12) "satsPerVByte", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -2247,35 +1585,11 @@ }) } }), - (string) (len=22) "HandleLnurlPayResponse": (*main.Message)(0xc00043cbc0)({ - fullName: (string) (len=22) "HandleLnurlPayResponse", - name: (string) (len=22) "HandleLnurlPayResponse", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004d47e0)({ - name: (string) (len=2) "pr", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004d4810)({ - name: (string) (len=6) "routes", - kind: (string) (len=5) "Empty", - isMap: (bool) false, - isArray: (bool) true, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }) - } - }), - (string) (len=24) "GetUserOperationsRequest": (*main.Message)(0xc00043cc80)({ + (string) (len=24) "GetUserOperationsRequest": (*main.Message)(0xc000436e00)({ fullName: (string) (len=24) "GetUserOperationsRequest", name: (string) (len=24) "GetUserOperationsRequest", fields: ([]*main.Field) (len=6 cap=8) { - (*main.Field)(0xc0004d48a0)({ + (*main.Field)(0xc00018d4d0)({ name: (string) (len=21) "latestIncomingInvoice", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -2284,7 +1598,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc0004d48d0)({ + (*main.Field)(0xc00018d500)({ name: (string) (len=21) "latestOutgoingInvoice", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -2293,7 +1607,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc0004d4900)({ + (*main.Field)(0xc00018d530)({ name: (string) (len=16) "latestIncomingTx", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -2302,7 +1616,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc0004d4930)({ + (*main.Field)(0xc00018d560)({ name: (string) (len=16) "latestOutgoingTx", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -2311,7 +1625,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc0004d4960)({ + (*main.Field)(0xc00018d590)({ name: (string) (len=31) "latestIncomingUserToUserPayment", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -2320,7 +1634,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc0004d4990)({ + (*main.Field)(0xc00018d5c0)({ name: (string) (len=31) "latestOutgoingUserToUserPayment", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -2331,11 +1645,176 @@ }) } }), - (string) (len=7) "Product": (*main.Message)(0xc00043ce00)({ + (string) (len=22) "HandleLnurlPayResponse": (*main.Message)(0xc000436d40)({ + fullName: (string) (len=22) "HandleLnurlPayResponse", + name: (string) (len=22) "HandleLnurlPayResponse", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018d410)({ + name: (string) (len=2) "pr", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d440)({ + name: (string) (len=6) "routes", + kind: (string) (len=5) "Empty", + isMap: (bool) false, + isArray: (bool) true, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }) + } + }), + (string) (len=27) "SetMockInvoiceAsPaidRequest": (*main.Message)(0xc000436480)({ + fullName: (string) (len=27) "SetMockInvoiceAsPaidRequest", + name: (string) (len=27) "SetMockInvoiceAsPaidRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018c5a0)({ + name: (string) (len=7) "invoice", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018c5d0)({ + name: (string) (len=6) "amount", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=20) "AddAppInvoiceRequest": (*main.Message)(0xc000436680)({ + fullName: (string) (len=20) "AddAppInvoiceRequest", + name: (string) (len=20) "AddAppInvoiceRequest", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc00018c930)({ + name: (string) (len=16) "payer_identifier", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018c960)({ + name: (string) (len=17) "http_callback_url", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018c990)({ + name: (string) (len=11) "invoice_req", + kind: (string) (len=17) "NewInvoiceRequest", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }) + } + }), + (string) (len=26) "GetAppUserLNURLInfoRequest": (*main.Message)(0xc000436840)({ + fullName: (string) (len=26) "GetAppUserLNURLInfoRequest", + name: (string) (len=26) "GetAppUserLNURLInfoRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018cc90)({ + name: (string) (len=15) "user_identifier", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018ccc0)({ + name: (string) (len=17) "base_url_override", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=24) "SetMockAppBalanceRequest": (*main.Message)(0xc0004368c0)({ + fullName: (string) (len=24) "SetMockAppBalanceRequest", + name: (string) (len=24) "SetMockAppBalanceRequest", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc00018cd50)({ + name: (string) (len=6) "amount", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=18) "NewAddressResponse": (*main.Message)(0xc000436940)({ + fullName: (string) (len=18) "NewAddressResponse", + name: (string) (len=18) "NewAddressResponse", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc00018cdb0)({ + name: (string) (len=7) "address", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=20) "DecodeInvoiceRequest": (*main.Message)(0xc000436a80)({ + fullName: (string) (len=20) "DecodeInvoiceRequest", + name: (string) (len=20) "DecodeInvoiceRequest", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc00018cf30)({ + name: (string) (len=7) "invoice", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=19) "OpenChannelResponse": (*main.Message)(0xc000436bc0)({ + fullName: (string) (len=19) "OpenChannelResponse", + name: (string) (len=19) "OpenChannelResponse", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc00018d110)({ + name: (string) (len=9) "channelId", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=7) "Product": (*main.Message)(0xc000436f80)({ fullName: (string) (len=7) "Product", name: (string) (len=7) "Product", fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc0004d4c90)({ + (*main.Field)(0xc00018d8c0)({ name: (string) (len=2) "id", kind: (string) (len=6) "string", isMap: (bool) false, @@ -2344,7 +1823,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc0004d4cc0)({ + (*main.Field)(0xc00018d8f0)({ name: (string) (len=4) "name", kind: (string) (len=6) "string", isMap: (bool) false, @@ -2353,7 +1832,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc0004d4cf0)({ + (*main.Field)(0xc00018d920)({ name: (string) (len=10) "price_sats", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -2363,6 +1842,536 @@ isOptional: (bool) false }) } + }), + (string) (len=17) "LiveUserOperation": (*main.Message)(0xc000437000)({ + fullName: (string) (len=17) "LiveUserOperation", + name: (string) (len=17) "LiveUserOperation", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018d980)({ + name: (string) (len=2) "id", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d9b0)({ + name: (string) (len=9) "operation", + kind: (string) (len=13) "UserOperation", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }) + } + }), + (string) (len=21) "DecodeInvoiceResponse": (*main.Message)(0xc000436ac0)({ + fullName: (string) (len=21) "DecodeInvoiceResponse", + name: (string) (len=21) "DecodeInvoiceResponse", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc00018cf60)({ + name: (string) (len=6) "amount", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=5) "Empty": (*main.Message)(0xc0004363c0)({ + fullName: (string) (len=5) "Empty", + name: (string) (len=5) "Empty", + fields: ([]*main.Field) + }), + (string) (len=13) "AddAppRequest": (*main.Message)(0xc000436500)({ + fullName: (string) (len=13) "AddAppRequest", + name: (string) (len=13) "AddAppRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018c630)({ + name: (string) (len=4) "name", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018c660)({ + name: (string) (len=19) "allow_user_creation", + kind: (string) (len=4) "bool", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=17) "AddAppUserRequest": (*main.Message)(0xc000436600)({ + fullName: (string) (len=17) "AddAppUserRequest", + name: (string) (len=17) "AddAppUserRequest", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc00018c810)({ + name: (string) (len=10) "identifier", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018c840)({ + name: (string) (len=14) "fail_if_exists", + kind: (string) (len=4) "bool", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018c870)({ + name: (string) (len=7) "balance", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=7) "AppUser": (*main.Message)(0xc000436640)({ + fullName: (string) (len=7) "AppUser", + name: (string) (len=7) "AppUser", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc00018c8a0)({ + name: (string) (len=10) "identifier", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018c8d0)({ + name: (string) (len=4) "info", + kind: (string) (len=8) "UserInfo", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }), + (*main.Field)(0xc00018c900)({ + name: (string) (len=16) "max_withdrawable", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=25) "PayAppUserInvoiceResponse": (*main.Message)(0xc000436780)({ + fullName: (string) (len=25) "PayAppUserInvoiceResponse", + name: (string) (len=25) "PayAppUserInvoiceResponse", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018cb40)({ + name: (string) (len=8) "preimage", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018cb70)({ + name: (string) (len=11) "amount_paid", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=18) "PayAddressResponse": (*main.Message)(0xc0004369c0)({ + fullName: (string) (len=18) "PayAddressResponse", + name: (string) (len=18) "PayAddressResponse", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc00018ce70)({ + name: (string) (len=4) "txId", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=17) "NewInvoiceRequest": (*main.Message)(0xc000436a00)({ + fullName: (string) (len=17) "NewInvoiceRequest", + name: (string) (len=17) "NewInvoiceRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018cea0)({ + name: (string) (len=10) "amountSats", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018ced0)({ + name: (string) (len=4) "memo", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=14) "UserOperations": (*main.Message)(0xc000436e80)({ + fullName: (string) (len=14) "UserOperations", + name: (string) (len=14) "UserOperations", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc00018d6b0)({ + name: (string) (len=9) "fromIndex", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d6e0)({ + name: (string) (len=7) "toIndex", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d710)({ + name: (string) (len=10) "operations", + kind: (string) (len=13) "UserOperation", + isMap: (bool) false, + isArray: (bool) true, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }) + } + }), + (string) (len=18) "LndGetInfoResponse": (*main.Message)(0xc0004364c0)({ + fullName: (string) (len=18) "LndGetInfoResponse", + name: (string) (len=18) "LndGetInfoResponse", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc00018c600)({ + name: (string) (len=5) "alias", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=34) "SendAppUserToAppUserPaymentRequest": (*main.Message)(0xc0004367c0)({ + fullName: (string) (len=34) "SendAppUserToAppUserPaymentRequest", + name: (string) (len=34) "SendAppUserToAppUserPaymentRequest", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc00018cba0)({ + name: (string) (len=20) "from_user_identifier", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018cbd0)({ + name: (string) (len=18) "to_user_identifier", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018cc00)({ + name: (string) (len=6) "amount", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=20) "LnurlPayInfoResponse": (*main.Message)(0xc000436d00)({ + fullName: (string) (len=20) "LnurlPayInfoResponse", + name: (string) (len=20) "LnurlPayInfoResponse", + fields: ([]*main.Field) (len=5 cap=8) { + (*main.Field)(0xc00018d320)({ + name: (string) (len=3) "tag", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d350)({ + name: (string) (len=8) "callback", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d380)({ + name: (string) (len=11) "maxSendable", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d3b0)({ + name: (string) (len=11) "minSendable", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d3e0)({ + name: (string) (len=8) "metadata", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=17) "NewAddressRequest": (*main.Message)(0xc000436900)({ + fullName: (string) (len=17) "NewAddressRequest", + name: (string) (len=17) "NewAddressRequest", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc00018cd80)({ + name: (string) (len=11) "addressType", + kind: (string) (len=11) "AddressType", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) true, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=17) "LnurlLinkResponse": (*main.Message)(0xc000436c00)({ + fullName: (string) (len=17) "LnurlLinkResponse", + name: (string) (len=17) "LnurlLinkResponse", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018d140)({ + name: (string) (len=5) "lnurl", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d170)({ + name: (string) (len=2) "k1", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=25) "LnurlWithdrawInfoResponse": (*main.Message)(0xc000436c80)({ + fullName: (string) (len=25) "LnurlWithdrawInfoResponse", + name: (string) (len=25) "LnurlWithdrawInfoResponse", + fields: ([]*main.Field) (len=8 cap=8) { + (*main.Field)(0xc00018d1a0)({ + name: (string) (len=3) "tag", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d1d0)({ + name: (string) (len=8) "callback", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d200)({ + name: (string) (len=2) "k1", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d230)({ + name: (string) (len=18) "defaultDescription", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d260)({ + name: (string) (len=15) "minWithdrawable", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d290)({ + name: (string) (len=15) "maxWithdrawable", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d2c0)({ + name: (string) (len=12) "balanceCheck", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d2f0)({ + name: (string) (len=7) "payLink", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=8) "UserInfo": (*main.Message)(0xc000436d80)({ + fullName: (string) (len=8) "UserInfo", + name: (string) (len=8) "UserInfo", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc00018d470)({ + name: (string) (len=6) "userId", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d4a0)({ + name: (string) (len=7) "balance", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=25) "GetUserOperationsResponse": (*main.Message)(0xc000436f00)({ + fullName: (string) (len=25) "GetUserOperationsResponse", + name: (string) (len=25) "GetUserOperationsResponse", + fields: ([]*main.Field) (len=6 cap=8) { + (*main.Field)(0xc00018d740)({ + name: (string) (len=31) "latestOutgoingInvoiceOperations", + kind: (string) (len=14) "UserOperations", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d770)({ + name: (string) (len=31) "latestIncomingInvoiceOperations", + kind: (string) (len=14) "UserOperations", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d7a0)({ + name: (string) (len=26) "latestOutgoingTxOperations", + kind: (string) (len=14) "UserOperations", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d7d0)({ + name: (string) (len=26) "latestIncomingTxOperations", + kind: (string) (len=14) "UserOperations", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d800)({ + name: (string) (len=32) "latestOutgoingUserToUserPayemnts", + kind: (string) (len=14) "UserOperations", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }), + (*main.Field)(0xc00018d830)({ + name: (string) (len=32) "latestIncomingUserToUserPayemnts", + kind: (string) (len=14) "UserOperations", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }) + } }) } diff --git a/proto/autogenerated/ts/nostr_client.ts b/proto/autogenerated/ts/nostr_client.ts index 0b49b77c..81a71f38 100644 --- a/proto/autogenerated/ts/nostr_client.ts +++ b/proto/autogenerated/ts/nostr_client.ts @@ -8,207 +8,207 @@ export type NostrClientParams = { retrieveNostrUserAuth: () => Promise checkResult?: true } -export default (params: NostrClientParams, send: (to: string, message: NostrRequest) => Promise, subscribe: (to: string, message: NostrRequest, cb: (res: any) => void) => void) => ({ - GetUserInfo: async (): Promise => { +export default (params: NostrClientParams, send: (to:string, message: NostrRequest) => Promise, subscribe: (to:string, message: NostrRequest, cb:(res:any)=> void) => void) => ({ + GetUserInfo: async (): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} - const data = await send(params.pubDestination, { rpcName: 'GetUserInfo', authIdentifier: auth, ...nostrRequest }) + const data = await send(params.pubDestination, {rpcName:'GetUserInfo',authIdentifier:auth, ...nostrRequest }) if (data.status === 'ERROR' && typeof data.reason === 'string') return data - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.UserInfoValidate(result) if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } } return { status: 'ERROR', reason: 'invalid response' } }, - AddProduct: async (request: Types.AddProductRequest): Promise => { + AddProduct: async (request: Types.AddProductRequest): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} nostrRequest.body = request - const data = await send(params.pubDestination, { rpcName: 'AddProduct', authIdentifier: auth, ...nostrRequest }) + const data = await send(params.pubDestination, {rpcName:'AddProduct',authIdentifier:auth, ...nostrRequest }) if (data.status === 'ERROR' && typeof data.reason === 'string') return data - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.ProductValidate(result) if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } } return { status: 'ERROR', reason: 'invalid response' } }, - NewProductInvoice: async (query: Types.NewProductInvoice_Query): Promise => { + NewProductInvoice: async (query: Types.NewProductInvoice_Query): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} nostrRequest.query = query - const data = await send(params.pubDestination, { rpcName: 'NewProductInvoice', authIdentifier: auth, ...nostrRequest }) + const data = await send(params.pubDestination, {rpcName:'NewProductInvoice',authIdentifier:auth, ...nostrRequest }) if (data.status === 'ERROR' && typeof data.reason === 'string') return data - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.NewInvoiceResponseValidate(result) if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } } return { status: 'ERROR', reason: 'invalid response' } }, - GetUserOperations: async (request: Types.GetUserOperationsRequest): Promise => { + GetUserOperations: async (request: Types.GetUserOperationsRequest): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} nostrRequest.body = request - const data = await send(params.pubDestination, { rpcName: 'GetUserOperations', authIdentifier: auth, ...nostrRequest }) + const data = await send(params.pubDestination, {rpcName:'GetUserOperations',authIdentifier:auth, ...nostrRequest }) if (data.status === 'ERROR' && typeof data.reason === 'string') return data - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.GetUserOperationsResponseValidate(result) if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } } return { status: 'ERROR', reason: 'invalid response' } }, - NewAddress: async (request: Types.NewAddressRequest): Promise => { + NewAddress: async (request: Types.NewAddressRequest): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} nostrRequest.body = request - const data = await send(params.pubDestination, { rpcName: 'NewAddress', authIdentifier: auth, ...nostrRequest }) + const data = await send(params.pubDestination, {rpcName:'NewAddress',authIdentifier:auth, ...nostrRequest }) if (data.status === 'ERROR' && typeof data.reason === 'string') return data - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.NewAddressResponseValidate(result) if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } } return { status: 'ERROR', reason: 'invalid response' } }, - PayAddress: async (request: Types.PayAddressRequest): Promise => { + PayAddress: async (request: Types.PayAddressRequest): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} nostrRequest.body = request - const data = await send(params.pubDestination, { rpcName: 'PayAddress', authIdentifier: auth, ...nostrRequest }) + const data = await send(params.pubDestination, {rpcName:'PayAddress',authIdentifier:auth, ...nostrRequest }) if (data.status === 'ERROR' && typeof data.reason === 'string') return data - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.PayAddressResponseValidate(result) if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } } return { status: 'ERROR', reason: 'invalid response' } }, - NewInvoice: async (request: Types.NewInvoiceRequest): Promise => { + NewInvoice: async (request: Types.NewInvoiceRequest): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} nostrRequest.body = request - const data = await send(params.pubDestination, { rpcName: 'NewInvoice', authIdentifier: auth, ...nostrRequest }) + const data = await send(params.pubDestination, {rpcName:'NewInvoice',authIdentifier:auth, ...nostrRequest }) if (data.status === 'ERROR' && typeof data.reason === 'string') return data - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.NewInvoiceResponseValidate(result) if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } } return { status: 'ERROR', reason: 'invalid response' } }, - DecodeInvoice: async (request: Types.DecodeInvoiceRequest): Promise => { + DecodeInvoice: async (request: Types.DecodeInvoiceRequest): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} nostrRequest.body = request - const data = await send(params.pubDestination, { rpcName: 'DecodeInvoice', authIdentifier: auth, ...nostrRequest }) + const data = await send(params.pubDestination, {rpcName:'DecodeInvoice',authIdentifier:auth, ...nostrRequest }) if (data.status === 'ERROR' && typeof data.reason === 'string') return data - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.DecodeInvoiceResponseValidate(result) if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } } return { status: 'ERROR', reason: 'invalid response' } }, - PayInvoice: async (request: Types.PayInvoiceRequest): Promise => { + PayInvoice: async (request: Types.PayInvoiceRequest): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} nostrRequest.body = request - const data = await send(params.pubDestination, { rpcName: 'PayInvoice', authIdentifier: auth, ...nostrRequest }) + const data = await send(params.pubDestination, {rpcName:'PayInvoice',authIdentifier:auth, ...nostrRequest }) if (data.status === 'ERROR' && typeof data.reason === 'string') return data - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.PayInvoiceResponseValidate(result) if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } } return { status: 'ERROR', reason: 'invalid response' } }, - OpenChannel: async (request: Types.OpenChannelRequest): Promise => { + OpenChannel: async (request: Types.OpenChannelRequest): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} nostrRequest.body = request - const data = await send(params.pubDestination, { rpcName: 'OpenChannel', authIdentifier: auth, ...nostrRequest }) + const data = await send(params.pubDestination, {rpcName:'OpenChannel',authIdentifier:auth, ...nostrRequest }) if (data.status === 'ERROR' && typeof data.reason === 'string') return data - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.OpenChannelResponseValidate(result) if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } } return { status: 'ERROR', reason: 'invalid response' } }, - GetLnurlWithdrawLink: async (): Promise => { + GetLnurlWithdrawLink: async (): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} - const data = await send(params.pubDestination, { rpcName: 'GetLnurlWithdrawLink', authIdentifier: auth, ...nostrRequest }) + const data = await send(params.pubDestination, {rpcName:'GetLnurlWithdrawLink',authIdentifier:auth, ...nostrRequest }) if (data.status === 'ERROR' && typeof data.reason === 'string') return data - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.LnurlLinkResponseValidate(result) if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } } return { status: 'ERROR', reason: 'invalid response' } }, - GetLnurlPayLink: async (): Promise => { + GetLnurlPayLink: async (): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} - const data = await send(params.pubDestination, { rpcName: 'GetLnurlPayLink', authIdentifier: auth, ...nostrRequest }) + const data = await send(params.pubDestination, {rpcName:'GetLnurlPayLink',authIdentifier:auth, ...nostrRequest }) if (data.status === 'ERROR' && typeof data.reason === 'string') return data - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.LnurlLinkResponseValidate(result) if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } } return { status: 'ERROR', reason: 'invalid response' } }, - GetLNURLChannelLink: async (): Promise => { + GetLNURLChannelLink: async (): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} - const data = await send(params.pubDestination, { rpcName: 'GetLNURLChannelLink', authIdentifier: auth, ...nostrRequest }) + const data = await send(params.pubDestination, {rpcName:'GetLNURLChannelLink',authIdentifier:auth, ...nostrRequest }) if (data.status === 'ERROR' && typeof data.reason === 'string') return data - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.LnurlLinkResponseValidate(result) if (error === null) { return { status: 'OK', ...result } } else return { status: 'ERROR', reason: error.message } } return { status: 'ERROR', reason: 'invalid response' } }, - GetLiveUserOperations: async (cb: (res: ResultError | ({ status: 'OK' } & Types.LiveUserOperation)) => void): Promise => { + GetLiveUserOperations: async (cb: (res:ResultError | ({ status: 'OK' }& Types.LiveUserOperation)) => void): Promise => { const auth = await params.retrieveNostrUserAuth() if (auth === null) throw new Error('retrieveNostrUserAuth() returned null') const nostrRequest: NostrRequest = {} - subscribe(params.pubDestination, { rpcName: 'GetLiveUserOperations', authIdentifier: auth, ...nostrRequest }, (data) => { + subscribe(params.pubDestination, {rpcName:'GetLiveUserOperations',authIdentifier:auth, ...nostrRequest }, (data) => { if (data.status === 'ERROR' && typeof data.reason === 'string') return cb(data) - if (data.status === 'OK') { + if (data.status === 'OK') { const result = data - if (!params.checkResult) return { status: 'OK', ...result } + if(!params.checkResult) return { status: 'OK', ...result } const error = Types.LiveUserOperationValidate(result) if (error === null) { return cb({ status: 'OK', ...result }) } else return cb({ status: 'ERROR', reason: error.message }) } diff --git a/proto/autogenerated/ts/types.ts b/proto/autogenerated/ts/types.ts index f4194175..6125dfd2 100644 --- a/proto/autogenerated/ts/types.ts +++ b/proto/autogenerated/ts/types.ts @@ -232,7 +232,7 @@ export type ServerMethods = { GetLnurlWithdrawLink?: (ctx: GetLnurlWithdrawLink_Context) => Promise GetLnurlPayLink?: (ctx: GetLnurlPayLink_Context) => Promise GetLNURLChannelLink?: (ctx: GetLNURLChannelLink_Context) => Promise - GetLiveUserOperations?: (ctx: GetLiveUserOperations_Context, cb:(res: LiveUserOperation, err:Error)=> void) => void + GetLiveUserOperations?: (ctx: GetLiveUserOperations_Context, cb:(res: LiveUserOperation, err:Error|null)=> void) => void } export enum AddressType { @@ -261,38 +261,125 @@ export type OptionsBaseMessage = { allOptionalsAreSet?: true } -export type NewInvoiceResponse = { - invoice: string +export type GetUserOperationsRequest = { + latestIncomingInvoice: number + latestOutgoingInvoice: number + latestIncomingTx: number + latestOutgoingTx: number + latestIncomingUserToUserPayment: number + latestOutgoingUserToUserPayment: number } -export const NewInvoiceResponseOptionalFields: [] = [] -export type NewInvoiceResponseOptions = OptionsBaseMessage & { +export const GetUserOperationsRequestOptionalFields: [] = [] +export type GetUserOperationsRequestOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - invoice_CustomCheck?: (v: string) => boolean + latestIncomingInvoice_CustomCheck?: (v: number) => boolean + latestOutgoingInvoice_CustomCheck?: (v: number) => boolean + latestIncomingTx_CustomCheck?: (v: number) => boolean + latestOutgoingTx_CustomCheck?: (v: number) => boolean + latestIncomingUserToUserPayment_CustomCheck?: (v: number) => boolean + latestOutgoingUserToUserPayment_CustomCheck?: (v: number) => boolean } -export const NewInvoiceResponseValidate = (o?: NewInvoiceResponse, opts: NewInvoiceResponseOptions = {}, path: string = 'NewInvoiceResponse::root.'): Error | null => { +export const GetUserOperationsRequestValidate = (o?: GetUserOperationsRequest, opts: GetUserOperationsRequestOptions = {}, path: string = 'GetUserOperationsRequest::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - if (typeof o.invoice !== 'string') return new Error(`${path}.invoice: is not a string`) - if (opts.invoice_CustomCheck && !opts.invoice_CustomCheck(o.invoice)) return new Error(`${path}.invoice: custom check failed`) + if (typeof o.latestIncomingInvoice !== 'number') return new Error(`${path}.latestIncomingInvoice: is not a number`) + if (opts.latestIncomingInvoice_CustomCheck && !opts.latestIncomingInvoice_CustomCheck(o.latestIncomingInvoice)) return new Error(`${path}.latestIncomingInvoice: custom check failed`) + + if (typeof o.latestOutgoingInvoice !== 'number') return new Error(`${path}.latestOutgoingInvoice: is not a number`) + if (opts.latestOutgoingInvoice_CustomCheck && !opts.latestOutgoingInvoice_CustomCheck(o.latestOutgoingInvoice)) return new Error(`${path}.latestOutgoingInvoice: custom check failed`) + + if (typeof o.latestIncomingTx !== 'number') return new Error(`${path}.latestIncomingTx: is not a number`) + if (opts.latestIncomingTx_CustomCheck && !opts.latestIncomingTx_CustomCheck(o.latestIncomingTx)) return new Error(`${path}.latestIncomingTx: custom check failed`) + + if (typeof o.latestOutgoingTx !== 'number') return new Error(`${path}.latestOutgoingTx: is not a number`) + if (opts.latestOutgoingTx_CustomCheck && !opts.latestOutgoingTx_CustomCheck(o.latestOutgoingTx)) return new Error(`${path}.latestOutgoingTx: custom check failed`) + + if (typeof o.latestIncomingUserToUserPayment !== 'number') return new Error(`${path}.latestIncomingUserToUserPayment: is not a number`) + if (opts.latestIncomingUserToUserPayment_CustomCheck && !opts.latestIncomingUserToUserPayment_CustomCheck(o.latestIncomingUserToUserPayment)) return new Error(`${path}.latestIncomingUserToUserPayment: custom check failed`) + + if (typeof o.latestOutgoingUserToUserPayment !== 'number') return new Error(`${path}.latestOutgoingUserToUserPayment: is not a number`) + if (opts.latestOutgoingUserToUserPayment_CustomCheck && !opts.latestOutgoingUserToUserPayment_CustomCheck(o.latestOutgoingUserToUserPayment)) return new Error(`${path}.latestOutgoingUserToUserPayment: custom check failed`) return null } -export type PayInvoiceRequest = { +export type EncryptionExchangeRequest = { + publicKey: string + deviceId: string +} +export const EncryptionExchangeRequestOptionalFields: [] = [] +export type EncryptionExchangeRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + publicKey_CustomCheck?: (v: string) => boolean + deviceId_CustomCheck?: (v: string) => boolean +} +export const EncryptionExchangeRequestValidate = (o?: EncryptionExchangeRequest, opts: EncryptionExchangeRequestOptions = {}, path: string = 'EncryptionExchangeRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.publicKey !== 'string') return new Error(`${path}.publicKey: is not a string`) + if (opts.publicKey_CustomCheck && !opts.publicKey_CustomCheck(o.publicKey)) return new Error(`${path}.publicKey: custom check failed`) + + if (typeof o.deviceId !== 'string') return new Error(`${path}.deviceId: is not a string`) + if (opts.deviceId_CustomCheck && !opts.deviceId_CustomCheck(o.deviceId)) return new Error(`${path}.deviceId: custom check failed`) + + return null +} + +export type AddAppUserInvoiceRequest = { + receiver_identifier: string + payer_identifier: string + http_callback_url: string + invoice_req: NewInvoiceRequest +} +export const AddAppUserInvoiceRequestOptionalFields: [] = [] +export type AddAppUserInvoiceRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + receiver_identifier_CustomCheck?: (v: string) => boolean + payer_identifier_CustomCheck?: (v: string) => boolean + http_callback_url_CustomCheck?: (v: string) => boolean + invoice_req_Options?: NewInvoiceRequestOptions +} +export const AddAppUserInvoiceRequestValidate = (o?: AddAppUserInvoiceRequest, opts: AddAppUserInvoiceRequestOptions = {}, path: string = 'AddAppUserInvoiceRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.receiver_identifier !== 'string') return new Error(`${path}.receiver_identifier: is not a string`) + if (opts.receiver_identifier_CustomCheck && !opts.receiver_identifier_CustomCheck(o.receiver_identifier)) return new Error(`${path}.receiver_identifier: custom check failed`) + + if (typeof o.payer_identifier !== 'string') return new Error(`${path}.payer_identifier: is not a string`) + if (opts.payer_identifier_CustomCheck && !opts.payer_identifier_CustomCheck(o.payer_identifier)) return new Error(`${path}.payer_identifier: custom check failed`) + + if (typeof o.http_callback_url !== 'string') return new Error(`${path}.http_callback_url: is not a string`) + if (opts.http_callback_url_CustomCheck && !opts.http_callback_url_CustomCheck(o.http_callback_url)) return new Error(`${path}.http_callback_url: custom check failed`) + + const invoice_reqErr = NewInvoiceRequestValidate(o.invoice_req, opts.invoice_req_Options, `${path}.invoice_req`) + if (invoice_reqErr !== null) return invoice_reqErr + + + return null +} + +export type PayAppUserInvoiceRequest = { + user_identifier: string invoice: string amount: number } -export const PayInvoiceRequestOptionalFields: [] = [] -export type PayInvoiceRequestOptions = OptionsBaseMessage & { +export const PayAppUserInvoiceRequestOptionalFields: [] = [] +export type PayAppUserInvoiceRequestOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] + user_identifier_CustomCheck?: (v: string) => boolean invoice_CustomCheck?: (v: string) => boolean amount_CustomCheck?: (v: number) => boolean } -export const PayInvoiceRequestValidate = (o?: PayInvoiceRequest, opts: PayInvoiceRequestOptions = {}, path: string = 'PayInvoiceRequest::root.'): Error | null => { +export const PayAppUserInvoiceRequestValidate = (o?: PayAppUserInvoiceRequest, opts: PayAppUserInvoiceRequestOptions = {}, path: string = 'PayAppUserInvoiceRequest::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + if (typeof o.user_identifier !== 'string') return new Error(`${path}.user_identifier: is not a string`) + if (opts.user_identifier_CustomCheck && !opts.user_identifier_CustomCheck(o.user_identifier)) return new Error(`${path}.user_identifier: custom check failed`) + if (typeof o.invoice !== 'string') return new Error(`${path}.invoice: is not a string`) if (opts.invoice_CustomCheck && !opts.invoice_CustomCheck(o.invoice)) return new Error(`${path}.invoice: custom check failed`) @@ -302,87 +389,145 @@ export const PayInvoiceRequestValidate = (o?: PayInvoiceRequest, opts: PayInvoic return null } -export type AddAppRequest = { - name: string - allow_user_creation: boolean +export type SendAppUserToAppPaymentRequest = { + from_user_identifier: string + amount: number } -export const AddAppRequestOptionalFields: [] = [] -export type AddAppRequestOptions = OptionsBaseMessage & { +export const SendAppUserToAppPaymentRequestOptionalFields: [] = [] +export type SendAppUserToAppPaymentRequestOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - name_CustomCheck?: (v: string) => boolean - allow_user_creation_CustomCheck?: (v: boolean) => boolean + from_user_identifier_CustomCheck?: (v: string) => boolean + amount_CustomCheck?: (v: number) => boolean } -export const AddAppRequestValidate = (o?: AddAppRequest, opts: AddAppRequestOptions = {}, path: string = 'AddAppRequest::root.'): Error | null => { +export const SendAppUserToAppPaymentRequestValidate = (o?: SendAppUserToAppPaymentRequest, opts: SendAppUserToAppPaymentRequestOptions = {}, path: string = 'SendAppUserToAppPaymentRequest::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - if (typeof o.name !== 'string') return new Error(`${path}.name: is not a string`) - if (opts.name_CustomCheck && !opts.name_CustomCheck(o.name)) return new Error(`${path}.name: custom check failed`) + if (typeof o.from_user_identifier !== 'string') return new Error(`${path}.from_user_identifier: is not a string`) + if (opts.from_user_identifier_CustomCheck && !opts.from_user_identifier_CustomCheck(o.from_user_identifier)) return new Error(`${path}.from_user_identifier: custom check failed`) - if (typeof o.allow_user_creation !== 'boolean') return new Error(`${path}.allow_user_creation: is not a boolean`) - if (opts.allow_user_creation_CustomCheck && !opts.allow_user_creation_CustomCheck(o.allow_user_creation)) return new Error(`${path}.allow_user_creation: custom check failed`) + if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) + if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) return null } -export type Application = { - name: string - id: string - balance: number - npub: string +export type SetMockAppUserBalanceRequest = { + user_identifier: string + amount: number } -export const ApplicationOptionalFields: [] = [] -export type ApplicationOptions = OptionsBaseMessage & { +export const SetMockAppUserBalanceRequestOptionalFields: [] = [] +export type SetMockAppUserBalanceRequestOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - name_CustomCheck?: (v: string) => boolean - id_CustomCheck?: (v: string) => boolean - balance_CustomCheck?: (v: number) => boolean - npub_CustomCheck?: (v: string) => boolean + user_identifier_CustomCheck?: (v: string) => boolean + amount_CustomCheck?: (v: number) => boolean } -export const ApplicationValidate = (o?: Application, opts: ApplicationOptions = {}, path: string = 'Application::root.'): Error | null => { +export const SetMockAppUserBalanceRequestValidate = (o?: SetMockAppUserBalanceRequest, opts: SetMockAppUserBalanceRequestOptions = {}, path: string = 'SetMockAppUserBalanceRequest::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - if (typeof o.name !== 'string') return new Error(`${path}.name: is not a string`) - if (opts.name_CustomCheck && !opts.name_CustomCheck(o.name)) return new Error(`${path}.name: custom check failed`) + if (typeof o.user_identifier !== 'string') return new Error(`${path}.user_identifier: is not a string`) + if (opts.user_identifier_CustomCheck && !opts.user_identifier_CustomCheck(o.user_identifier)) return new Error(`${path}.user_identifier: custom check failed`) - if (typeof o.id !== 'string') return new Error(`${path}.id: is not a string`) - if (opts.id_CustomCheck && !opts.id_CustomCheck(o.id)) return new Error(`${path}.id: custom check failed`) - - if (typeof o.balance !== 'number') return new Error(`${path}.balance: is not a number`) - if (opts.balance_CustomCheck && !opts.balance_CustomCheck(o.balance)) return new Error(`${path}.balance: custom check failed`) - - if (typeof o.npub !== 'string') return new Error(`${path}.npub: is not a string`) - if (opts.npub_CustomCheck && !opts.npub_CustomCheck(o.npub)) return new Error(`${path}.npub: custom check failed`) + if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) + if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) return null } -export type AppUser = { - identifier: string - info: UserInfo - max_withdrawable: number +export type PayAddressRequest = { + address: string + amoutSats: number + satsPerVByte: number } -export const AppUserOptionalFields: [] = [] -export type AppUserOptions = OptionsBaseMessage & { +export const PayAddressRequestOptionalFields: [] = [] +export type PayAddressRequestOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - identifier_CustomCheck?: (v: string) => boolean - info_Options?: UserInfoOptions - max_withdrawable_CustomCheck?: (v: number) => boolean + address_CustomCheck?: (v: string) => boolean + amoutSats_CustomCheck?: (v: number) => boolean + satsPerVByte_CustomCheck?: (v: number) => boolean } -export const AppUserValidate = (o?: AppUser, opts: AppUserOptions = {}, path: string = 'AppUser::root.'): Error | null => { +export const PayAddressRequestValidate = (o?: PayAddressRequest, opts: PayAddressRequestOptions = {}, path: string = 'PayAddressRequest::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - if (typeof o.identifier !== 'string') return new Error(`${path}.identifier: is not a string`) - if (opts.identifier_CustomCheck && !opts.identifier_CustomCheck(o.identifier)) return new Error(`${path}.identifier: custom check failed`) + if (typeof o.address !== 'string') return new Error(`${path}.address: is not a string`) + if (opts.address_CustomCheck && !opts.address_CustomCheck(o.address)) return new Error(`${path}.address: custom check failed`) - const infoErr = UserInfoValidate(o.info, opts.info_Options, `${path}.info`) - if (infoErr !== null) return infoErr - + if (typeof o.amoutSats !== 'number') return new Error(`${path}.amoutSats: is not a number`) + if (opts.amoutSats_CustomCheck && !opts.amoutSats_CustomCheck(o.amoutSats)) return new Error(`${path}.amoutSats: custom check failed`) - if (typeof o.max_withdrawable !== 'number') return new Error(`${path}.max_withdrawable: is not a number`) - if (opts.max_withdrawable_CustomCheck && !opts.max_withdrawable_CustomCheck(o.max_withdrawable)) return new Error(`${path}.max_withdrawable: custom check failed`) + if (typeof o.satsPerVByte !== 'number') return new Error(`${path}.satsPerVByte: is not a number`) + if (opts.satsPerVByte_CustomCheck && !opts.satsPerVByte_CustomCheck(o.satsPerVByte)) return new Error(`${path}.satsPerVByte: custom check failed`) + + return null +} + +export type OpenChannelResponse = { + channelId: string +} +export const OpenChannelResponseOptionalFields: [] = [] +export type OpenChannelResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + channelId_CustomCheck?: (v: string) => boolean +} +export const OpenChannelResponseValidate = (o?: OpenChannelResponse, opts: OpenChannelResponseOptions = {}, path: string = 'OpenChannelResponse::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.channelId !== 'string') return new Error(`${path}.channelId: is not a string`) + if (opts.channelId_CustomCheck && !opts.channelId_CustomCheck(o.channelId)) return new Error(`${path}.channelId: custom check failed`) + + return null +} + +export type HandleLnurlPayResponse = { + pr: string + routes: Empty[] +} +export const HandleLnurlPayResponseOptionalFields: [] = [] +export type HandleLnurlPayResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + pr_CustomCheck?: (v: string) => boolean + routes_ItemOptions?: EmptyOptions + routes_CustomCheck?: (v: Empty[]) => boolean +} +export const HandleLnurlPayResponseValidate = (o?: HandleLnurlPayResponse, opts: HandleLnurlPayResponseOptions = {}, path: string = 'HandleLnurlPayResponse::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.pr !== 'string') return new Error(`${path}.pr: is not a string`) + if (opts.pr_CustomCheck && !opts.pr_CustomCheck(o.pr)) return new Error(`${path}.pr: custom check failed`) + + if (!Array.isArray(o.routes)) return new Error(`${path}.routes: is not an array`) + for (let index = 0; index < o.routes.length; index++) { + const routesErr = EmptyValidate(o.routes[index], opts.routes_ItemOptions, `${path}.routes[${index}]`) + if (routesErr !== null) return routesErr + } + if (opts.routes_CustomCheck && !opts.routes_CustomCheck(o.routes)) return new Error(`${path}.routes: custom check failed`) + + return null +} + +export type SetMockInvoiceAsPaidRequest = { + invoice: string + amount: number +} +export const SetMockInvoiceAsPaidRequestOptionalFields: [] = [] +export type SetMockInvoiceAsPaidRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + invoice_CustomCheck?: (v: string) => boolean + amount_CustomCheck?: (v: number) => boolean +} +export const SetMockInvoiceAsPaidRequestValidate = (o?: SetMockInvoiceAsPaidRequest, opts: SetMockInvoiceAsPaidRequestOptions = {}, path: string = 'SetMockInvoiceAsPaidRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.invoice !== 'string') return new Error(`${path}.invoice: is not a string`) + if (opts.invoice_CustomCheck && !opts.invoice_CustomCheck(o.invoice)) return new Error(`${path}.invoice: custom check failed`) + + if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) + if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) return null } @@ -416,91 +561,169 @@ export const AddAppInvoiceRequestValidate = (o?: AddAppInvoiceRequest, opts: Add return null } -export type PayAppUserInvoiceResponse = { - preimage: string - amount_paid: number +export type GetAppUserLNURLInfoRequest = { + user_identifier: string + base_url_override: string } -export const PayAppUserInvoiceResponseOptionalFields: [] = [] -export type PayAppUserInvoiceResponseOptions = OptionsBaseMessage & { +export const GetAppUserLNURLInfoRequestOptionalFields: [] = [] +export type GetAppUserLNURLInfoRequestOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - preimage_CustomCheck?: (v: string) => boolean - amount_paid_CustomCheck?: (v: number) => boolean + user_identifier_CustomCheck?: (v: string) => boolean + base_url_override_CustomCheck?: (v: string) => boolean } -export const PayAppUserInvoiceResponseValidate = (o?: PayAppUserInvoiceResponse, opts: PayAppUserInvoiceResponseOptions = {}, path: string = 'PayAppUserInvoiceResponse::root.'): Error | null => { +export const GetAppUserLNURLInfoRequestValidate = (o?: GetAppUserLNURLInfoRequest, opts: GetAppUserLNURLInfoRequestOptions = {}, path: string = 'GetAppUserLNURLInfoRequest::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - if (typeof o.preimage !== 'string') return new Error(`${path}.preimage: is not a string`) - if (opts.preimage_CustomCheck && !opts.preimage_CustomCheck(o.preimage)) return new Error(`${path}.preimage: custom check failed`) + if (typeof o.user_identifier !== 'string') return new Error(`${path}.user_identifier: is not a string`) + if (opts.user_identifier_CustomCheck && !opts.user_identifier_CustomCheck(o.user_identifier)) return new Error(`${path}.user_identifier: custom check failed`) - if (typeof o.amount_paid !== 'number') return new Error(`${path}.amount_paid: is not a number`) - if (opts.amount_paid_CustomCheck && !opts.amount_paid_CustomCheck(o.amount_paid)) return new Error(`${path}.amount_paid: custom check failed`) + if (typeof o.base_url_override !== 'string') return new Error(`${path}.base_url_override: is not a string`) + if (opts.base_url_override_CustomCheck && !opts.base_url_override_CustomCheck(o.base_url_override)) return new Error(`${path}.base_url_override: custom check failed`) return null } -export type NewAddressRequest = { - addressType: AddressType -} -export const NewAddressRequestOptionalFields: [] = [] -export type NewAddressRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - addressType_CustomCheck?: (v: AddressType) => boolean -} -export const NewAddressRequestValidate = (o?: NewAddressRequest, opts: NewAddressRequestOptions = {}, path: string = 'NewAddressRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (!enumCheckAddressType(o.addressType)) return new Error(`${path}.addressType: is not a valid AddressType`) - if (opts.addressType_CustomCheck && !opts.addressType_CustomCheck(o.addressType)) return new Error(`${path}.addressType: custom check failed`) - - return null -} - -export type GetProductBuyLinkResponse = { - link: string -} -export const GetProductBuyLinkResponseOptionalFields: [] = [] -export type GetProductBuyLinkResponseOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - link_CustomCheck?: (v: string) => boolean -} -export const GetProductBuyLinkResponseValidate = (o?: GetProductBuyLinkResponse, opts: GetProductBuyLinkResponseOptions = {}, path: string = 'GetProductBuyLinkResponse::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.link !== 'string') return new Error(`${path}.link: is not a string`) - if (opts.link_CustomCheck && !opts.link_CustomCheck(o.link)) return new Error(`${path}.link: custom check failed`) - - return null -} - -export type UserOperation = { - paidAtUnix: number - type: UserOperationType - inbound: boolean +export type SetMockAppBalanceRequest = { amount: number } -export const UserOperationOptionalFields: [] = [] -export type UserOperationOptions = OptionsBaseMessage & { +export const SetMockAppBalanceRequestOptionalFields: [] = [] +export type SetMockAppBalanceRequestOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - paidAtUnix_CustomCheck?: (v: number) => boolean - type_CustomCheck?: (v: UserOperationType) => boolean - inbound_CustomCheck?: (v: boolean) => boolean amount_CustomCheck?: (v: number) => boolean } -export const UserOperationValidate = (o?: UserOperation, opts: UserOperationOptions = {}, path: string = 'UserOperation::root.'): Error | null => { +export const SetMockAppBalanceRequestValidate = (o?: SetMockAppBalanceRequest, opts: SetMockAppBalanceRequestOptions = {}, path: string = 'SetMockAppBalanceRequest::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - if (typeof o.paidAtUnix !== 'number') return new Error(`${path}.paidAtUnix: is not a number`) - if (opts.paidAtUnix_CustomCheck && !opts.paidAtUnix_CustomCheck(o.paidAtUnix)) return new Error(`${path}.paidAtUnix: custom check failed`) + if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) + if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) - if (!enumCheckUserOperationType(o.type)) return new Error(`${path}.type: is not a valid UserOperationType`) - if (opts.type_CustomCheck && !opts.type_CustomCheck(o.type)) return new Error(`${path}.type: custom check failed`) + return null +} - if (typeof o.inbound !== 'boolean') return new Error(`${path}.inbound: is not a boolean`) - if (opts.inbound_CustomCheck && !opts.inbound_CustomCheck(o.inbound)) return new Error(`${path}.inbound: custom check failed`) +export type NewAddressResponse = { + address: string +} +export const NewAddressResponseOptionalFields: [] = [] +export type NewAddressResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + address_CustomCheck?: (v: string) => boolean +} +export const NewAddressResponseValidate = (o?: NewAddressResponse, opts: NewAddressResponseOptions = {}, path: string = 'NewAddressResponse::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.address !== 'string') return new Error(`${path}.address: is not a string`) + if (opts.address_CustomCheck && !opts.address_CustomCheck(o.address)) return new Error(`${path}.address: custom check failed`) + + return null +} + +export type DecodeInvoiceRequest = { + invoice: string +} +export const DecodeInvoiceRequestOptionalFields: [] = [] +export type DecodeInvoiceRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + invoice_CustomCheck?: (v: string) => boolean +} +export const DecodeInvoiceRequestValidate = (o?: DecodeInvoiceRequest, opts: DecodeInvoiceRequestOptions = {}, path: string = 'DecodeInvoiceRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.invoice !== 'string') return new Error(`${path}.invoice: is not a string`) + if (opts.invoice_CustomCheck && !opts.invoice_CustomCheck(o.invoice)) return new Error(`${path}.invoice: custom check failed`) + + return null +} + +export type Product = { + id: string + name: string + price_sats: number +} +export const ProductOptionalFields: [] = [] +export type ProductOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + id_CustomCheck?: (v: string) => boolean + name_CustomCheck?: (v: string) => boolean + price_sats_CustomCheck?: (v: number) => boolean +} +export const ProductValidate = (o?: Product, opts: ProductOptions = {}, path: string = 'Product::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.id !== 'string') return new Error(`${path}.id: is not a string`) + if (opts.id_CustomCheck && !opts.id_CustomCheck(o.id)) return new Error(`${path}.id: custom check failed`) + + if (typeof o.name !== 'string') return new Error(`${path}.name: is not a string`) + if (opts.name_CustomCheck && !opts.name_CustomCheck(o.name)) return new Error(`${path}.name: custom check failed`) + + if (typeof o.price_sats !== 'number') return new Error(`${path}.price_sats: is not a number`) + if (opts.price_sats_CustomCheck && !opts.price_sats_CustomCheck(o.price_sats)) return new Error(`${path}.price_sats: custom check failed`) + + return null +} + +export type LiveUserOperation = { + id: string + operation: UserOperation +} +export const LiveUserOperationOptionalFields: [] = [] +export type LiveUserOperationOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + id_CustomCheck?: (v: string) => boolean + operation_Options?: UserOperationOptions +} +export const LiveUserOperationValidate = (o?: LiveUserOperation, opts: LiveUserOperationOptions = {}, path: string = 'LiveUserOperation::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.id !== 'string') return new Error(`${path}.id: is not a string`) + if (opts.id_CustomCheck && !opts.id_CustomCheck(o.id)) return new Error(`${path}.id: custom check failed`) + + const operationErr = UserOperationValidate(o.operation, opts.operation_Options, `${path}.operation`) + if (operationErr !== null) return operationErr + + + return null +} + +export type NewInvoiceRequest = { + amountSats: number + memo: string +} +export const NewInvoiceRequestOptionalFields: [] = [] +export type NewInvoiceRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + amountSats_CustomCheck?: (v: number) => boolean + memo_CustomCheck?: (v: string) => boolean +} +export const NewInvoiceRequestValidate = (o?: NewInvoiceRequest, opts: NewInvoiceRequestOptions = {}, path: string = 'NewInvoiceRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.amountSats !== 'number') return new Error(`${path}.amountSats: is not a number`) + if (opts.amountSats_CustomCheck && !opts.amountSats_CustomCheck(o.amountSats)) return new Error(`${path}.amountSats: custom check failed`) + + if (typeof o.memo !== 'string') return new Error(`${path}.memo: is not a string`) + if (opts.memo_CustomCheck && !opts.memo_CustomCheck(o.memo)) return new Error(`${path}.memo: custom check failed`) + + return null +} + +export type DecodeInvoiceResponse = { + amount: number +} +export const DecodeInvoiceResponseOptionalFields: [] = [] +export type DecodeInvoiceResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + amount_CustomCheck?: (v: number) => boolean +} +export const DecodeInvoiceResponseValidate = (o?: DecodeInvoiceResponse, opts: DecodeInvoiceResponseOptions = {}, path: string = 'DecodeInvoiceResponse::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) @@ -521,6 +744,29 @@ export const EmptyValidate = (o?: Empty, opts: EmptyOptions = {}, path: string = return null } +export type AddAppRequest = { + name: string + allow_user_creation: boolean +} +export const AddAppRequestOptionalFields: [] = [] +export type AddAppRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + name_CustomCheck?: (v: string) => boolean + allow_user_creation_CustomCheck?: (v: boolean) => boolean +} +export const AddAppRequestValidate = (o?: AddAppRequest, opts: AddAppRequestOptions = {}, path: string = 'AddAppRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.name !== 'string') return new Error(`${path}.name: is not a string`) + if (opts.name_CustomCheck && !opts.name_CustomCheck(o.name)) return new Error(`${path}.name: custom check failed`) + + if (typeof o.allow_user_creation !== 'boolean') return new Error(`${path}.allow_user_creation: is not a boolean`) + if (opts.allow_user_creation_CustomCheck && !opts.allow_user_creation_CustomCheck(o.allow_user_creation)) return new Error(`${path}.allow_user_creation: custom check failed`) + + return null +} + export type AddAppUserRequest = { identifier: string fail_if_exists: boolean @@ -549,63 +795,46 @@ export const AddAppUserRequestValidate = (o?: AddAppUserRequest, opts: AddAppUse return null } -export type GetAppUserRequest = { - user_identifier: string +export type AppUser = { + identifier: string + info: UserInfo + max_withdrawable: number } -export const GetAppUserRequestOptionalFields: [] = [] -export type GetAppUserRequestOptions = OptionsBaseMessage & { +export const AppUserOptionalFields: [] = [] +export type AppUserOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - user_identifier_CustomCheck?: (v: string) => boolean + identifier_CustomCheck?: (v: string) => boolean + info_Options?: UserInfoOptions + max_withdrawable_CustomCheck?: (v: number) => boolean } -export const GetAppUserRequestValidate = (o?: GetAppUserRequest, opts: GetAppUserRequestOptions = {}, path: string = 'GetAppUserRequest::root.'): Error | null => { +export const AppUserValidate = (o?: AppUser, opts: AppUserOptions = {}, path: string = 'AppUser::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - if (typeof o.user_identifier !== 'string') return new Error(`${path}.user_identifier: is not a string`) - if (opts.user_identifier_CustomCheck && !opts.user_identifier_CustomCheck(o.user_identifier)) return new Error(`${path}.user_identifier: custom check failed`) + if (typeof o.identifier !== 'string') return new Error(`${path}.identifier: is not a string`) + if (opts.identifier_CustomCheck && !opts.identifier_CustomCheck(o.identifier)) return new Error(`${path}.identifier: custom check failed`) + + const infoErr = UserInfoValidate(o.info, opts.info_Options, `${path}.info`) + if (infoErr !== null) return infoErr + + + if (typeof o.max_withdrawable !== 'number') return new Error(`${path}.max_withdrawable: is not a number`) + if (opts.max_withdrawable_CustomCheck && !opts.max_withdrawable_CustomCheck(o.max_withdrawable)) return new Error(`${path}.max_withdrawable: custom check failed`) return null } -export type PayAppUserInvoiceRequest = { - user_identifier: string - invoice: string - amount: number -} -export const PayAppUserInvoiceRequestOptionalFields: [] = [] -export type PayAppUserInvoiceRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - user_identifier_CustomCheck?: (v: string) => boolean - invoice_CustomCheck?: (v: string) => boolean - amount_CustomCheck?: (v: number) => boolean -} -export const PayAppUserInvoiceRequestValidate = (o?: PayAppUserInvoiceRequest, opts: PayAppUserInvoiceRequestOptions = {}, path: string = 'PayAppUserInvoiceRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.user_identifier !== 'string') return new Error(`${path}.user_identifier: is not a string`) - if (opts.user_identifier_CustomCheck && !opts.user_identifier_CustomCheck(o.user_identifier)) return new Error(`${path}.user_identifier: custom check failed`) - - if (typeof o.invoice !== 'string') return new Error(`${path}.invoice: is not a string`) - if (opts.invoice_CustomCheck && !opts.invoice_CustomCheck(o.invoice)) return new Error(`${path}.invoice: custom check failed`) - - if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) - if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) - - return null -} - -export type PayInvoiceResponse = { +export type PayAppUserInvoiceResponse = { preimage: string amount_paid: number } -export const PayInvoiceResponseOptionalFields: [] = [] -export type PayInvoiceResponseOptions = OptionsBaseMessage & { +export const PayAppUserInvoiceResponseOptionalFields: [] = [] +export type PayAppUserInvoiceResponseOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] preimage_CustomCheck?: (v: string) => boolean amount_paid_CustomCheck?: (v: number) => boolean } -export const PayInvoiceResponseValidate = (o?: PayInvoiceResponse, opts: PayInvoiceResponseOptions = {}, path: string = 'PayInvoiceResponse::root.'): Error | null => { +export const PayAppUserInvoiceResponseValidate = (o?: PayAppUserInvoiceResponse, opts: PayAppUserInvoiceResponseOptions = {}, path: string = 'PayAppUserInvoiceResponse::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') @@ -618,6 +847,182 @@ export const PayInvoiceResponseValidate = (o?: PayInvoiceResponse, opts: PayInvo return null } +export type PayAddressResponse = { + txId: string +} +export const PayAddressResponseOptionalFields: [] = [] +export type PayAddressResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + txId_CustomCheck?: (v: string) => boolean +} +export const PayAddressResponseValidate = (o?: PayAddressResponse, opts: PayAddressResponseOptions = {}, path: string = 'PayAddressResponse::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.txId !== 'string') return new Error(`${path}.txId: is not a string`) + if (opts.txId_CustomCheck && !opts.txId_CustomCheck(o.txId)) return new Error(`${path}.txId: custom check failed`) + + return null +} + +export type UserOperations = { + fromIndex: number + toIndex: number + operations: UserOperation[] +} +export const UserOperationsOptionalFields: [] = [] +export type UserOperationsOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + fromIndex_CustomCheck?: (v: number) => boolean + toIndex_CustomCheck?: (v: number) => boolean + operations_ItemOptions?: UserOperationOptions + operations_CustomCheck?: (v: UserOperation[]) => boolean +} +export const UserOperationsValidate = (o?: UserOperations, opts: UserOperationsOptions = {}, path: string = 'UserOperations::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.fromIndex !== 'number') return new Error(`${path}.fromIndex: is not a number`) + if (opts.fromIndex_CustomCheck && !opts.fromIndex_CustomCheck(o.fromIndex)) return new Error(`${path}.fromIndex: custom check failed`) + + if (typeof o.toIndex !== 'number') return new Error(`${path}.toIndex: is not a number`) + if (opts.toIndex_CustomCheck && !opts.toIndex_CustomCheck(o.toIndex)) return new Error(`${path}.toIndex: custom check failed`) + + if (!Array.isArray(o.operations)) return new Error(`${path}.operations: is not an array`) + for (let index = 0; index < o.operations.length; index++) { + const operationsErr = UserOperationValidate(o.operations[index], opts.operations_ItemOptions, `${path}.operations[${index}]`) + if (operationsErr !== null) return operationsErr + } + if (opts.operations_CustomCheck && !opts.operations_CustomCheck(o.operations)) return new Error(`${path}.operations: custom check failed`) + + return null +} + +export type LndGetInfoResponse = { + alias: string +} +export const LndGetInfoResponseOptionalFields: [] = [] +export type LndGetInfoResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + alias_CustomCheck?: (v: string) => boolean +} +export const LndGetInfoResponseValidate = (o?: LndGetInfoResponse, opts: LndGetInfoResponseOptions = {}, path: string = 'LndGetInfoResponse::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.alias !== 'string') return new Error(`${path}.alias: is not a string`) + if (opts.alias_CustomCheck && !opts.alias_CustomCheck(o.alias)) return new Error(`${path}.alias: custom check failed`) + + return null +} + +export type SendAppUserToAppUserPaymentRequest = { + from_user_identifier: string + to_user_identifier: string + amount: number +} +export const SendAppUserToAppUserPaymentRequestOptionalFields: [] = [] +export type SendAppUserToAppUserPaymentRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + from_user_identifier_CustomCheck?: (v: string) => boolean + to_user_identifier_CustomCheck?: (v: string) => boolean + amount_CustomCheck?: (v: number) => boolean +} +export const SendAppUserToAppUserPaymentRequestValidate = (o?: SendAppUserToAppUserPaymentRequest, opts: SendAppUserToAppUserPaymentRequestOptions = {}, path: string = 'SendAppUserToAppUserPaymentRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.from_user_identifier !== 'string') return new Error(`${path}.from_user_identifier: is not a string`) + if (opts.from_user_identifier_CustomCheck && !opts.from_user_identifier_CustomCheck(o.from_user_identifier)) return new Error(`${path}.from_user_identifier: custom check failed`) + + if (typeof o.to_user_identifier !== 'string') return new Error(`${path}.to_user_identifier: is not a string`) + if (opts.to_user_identifier_CustomCheck && !opts.to_user_identifier_CustomCheck(o.to_user_identifier)) return new Error(`${path}.to_user_identifier: custom check failed`) + + if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) + if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) + + return null +} + +export type LnurlPayInfoResponse = { + tag: string + callback: string + maxSendable: number + minSendable: number + metadata: string +} +export const LnurlPayInfoResponseOptionalFields: [] = [] +export type LnurlPayInfoResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + tag_CustomCheck?: (v: string) => boolean + callback_CustomCheck?: (v: string) => boolean + maxSendable_CustomCheck?: (v: number) => boolean + minSendable_CustomCheck?: (v: number) => boolean + metadata_CustomCheck?: (v: string) => boolean +} +export const LnurlPayInfoResponseValidate = (o?: LnurlPayInfoResponse, opts: LnurlPayInfoResponseOptions = {}, path: string = 'LnurlPayInfoResponse::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.tag !== 'string') return new Error(`${path}.tag: is not a string`) + if (opts.tag_CustomCheck && !opts.tag_CustomCheck(o.tag)) return new Error(`${path}.tag: custom check failed`) + + if (typeof o.callback !== 'string') return new Error(`${path}.callback: is not a string`) + if (opts.callback_CustomCheck && !opts.callback_CustomCheck(o.callback)) return new Error(`${path}.callback: custom check failed`) + + if (typeof o.maxSendable !== 'number') return new Error(`${path}.maxSendable: is not a number`) + if (opts.maxSendable_CustomCheck && !opts.maxSendable_CustomCheck(o.maxSendable)) return new Error(`${path}.maxSendable: custom check failed`) + + if (typeof o.minSendable !== 'number') return new Error(`${path}.minSendable: is not a number`) + if (opts.minSendable_CustomCheck && !opts.minSendable_CustomCheck(o.minSendable)) return new Error(`${path}.minSendable: custom check failed`) + + if (typeof o.metadata !== 'string') return new Error(`${path}.metadata: is not a string`) + if (opts.metadata_CustomCheck && !opts.metadata_CustomCheck(o.metadata)) return new Error(`${path}.metadata: custom check failed`) + + return null +} + +export type NewAddressRequest = { + addressType: AddressType +} +export const NewAddressRequestOptionalFields: [] = [] +export type NewAddressRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + addressType_CustomCheck?: (v: AddressType) => boolean +} +export const NewAddressRequestValidate = (o?: NewAddressRequest, opts: NewAddressRequestOptions = {}, path: string = 'NewAddressRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (!enumCheckAddressType(o.addressType)) return new Error(`${path}.addressType: is not a valid AddressType`) + if (opts.addressType_CustomCheck && !opts.addressType_CustomCheck(o.addressType)) return new Error(`${path}.addressType: custom check failed`) + + return null +} + +export type LnurlLinkResponse = { + lnurl: string + k1: string +} +export const LnurlLinkResponseOptionalFields: [] = [] +export type LnurlLinkResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + lnurl_CustomCheck?: (v: string) => boolean + k1_CustomCheck?: (v: string) => boolean +} +export const LnurlLinkResponseValidate = (o?: LnurlLinkResponse, opts: LnurlLinkResponseOptions = {}, path: string = 'LnurlLinkResponse::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.lnurl !== 'string') return new Error(`${path}.lnurl: is not a string`) + if (opts.lnurl_CustomCheck && !opts.lnurl_CustomCheck(o.lnurl)) return new Error(`${path}.lnurl: custom check failed`) + + if (typeof o.k1 !== 'string') return new Error(`${path}.k1: is not a string`) + if (opts.k1_CustomCheck && !opts.k1_CustomCheck(o.k1)) return new Error(`${path}.k1: custom check failed`) + + return null +} + export type LnurlWithdrawInfoResponse = { tag: string callback: string @@ -671,498 +1076,6 @@ export const LnurlWithdrawInfoResponseValidate = (o?: LnurlWithdrawInfoResponse, return null } -export type LnurlLinkResponse = { - lnurl: string - k1: string -} -export const LnurlLinkResponseOptionalFields: [] = [] -export type LnurlLinkResponseOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - lnurl_CustomCheck?: (v: string) => boolean - k1_CustomCheck?: (v: string) => boolean -} -export const LnurlLinkResponseValidate = (o?: LnurlLinkResponse, opts: LnurlLinkResponseOptions = {}, path: string = 'LnurlLinkResponse::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.lnurl !== 'string') return new Error(`${path}.lnurl: is not a string`) - if (opts.lnurl_CustomCheck && !opts.lnurl_CustomCheck(o.lnurl)) return new Error(`${path}.lnurl: custom check failed`) - - if (typeof o.k1 !== 'string') return new Error(`${path}.k1: is not a string`) - if (opts.k1_CustomCheck && !opts.k1_CustomCheck(o.k1)) return new Error(`${path}.k1: custom check failed`) - - return null -} - -export type EncryptionExchangeRequest = { - publicKey: string - deviceId: string -} -export const EncryptionExchangeRequestOptionalFields: [] = [] -export type EncryptionExchangeRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - publicKey_CustomCheck?: (v: string) => boolean - deviceId_CustomCheck?: (v: string) => boolean -} -export const EncryptionExchangeRequestValidate = (o?: EncryptionExchangeRequest, opts: EncryptionExchangeRequestOptions = {}, path: string = 'EncryptionExchangeRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.publicKey !== 'string') return new Error(`${path}.publicKey: is not a string`) - if (opts.publicKey_CustomCheck && !opts.publicKey_CustomCheck(o.publicKey)) return new Error(`${path}.publicKey: custom check failed`) - - if (typeof o.deviceId !== 'string') return new Error(`${path}.deviceId: is not a string`) - if (opts.deviceId_CustomCheck && !opts.deviceId_CustomCheck(o.deviceId)) return new Error(`${path}.deviceId: custom check failed`) - - return null -} - -export type SetMockInvoiceAsPaidRequest = { - invoice: string - amount: number -} -export const SetMockInvoiceAsPaidRequestOptionalFields: [] = [] -export type SetMockInvoiceAsPaidRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - invoice_CustomCheck?: (v: string) => boolean - amount_CustomCheck?: (v: number) => boolean -} -export const SetMockInvoiceAsPaidRequestValidate = (o?: SetMockInvoiceAsPaidRequest, opts: SetMockInvoiceAsPaidRequestOptions = {}, path: string = 'SetMockInvoiceAsPaidRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.invoice !== 'string') return new Error(`${path}.invoice: is not a string`) - if (opts.invoice_CustomCheck && !opts.invoice_CustomCheck(o.invoice)) return new Error(`${path}.invoice: custom check failed`) - - if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) - if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) - - return null -} - -export type AuthAppRequest = { - name: string - allow_user_creation?: boolean -} -export type AuthAppRequestOptionalField = 'allow_user_creation' -export const AuthAppRequestOptionalFields: AuthAppRequestOptionalField[] = ['allow_user_creation'] -export type AuthAppRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: AuthAppRequestOptionalField[] - name_CustomCheck?: (v: string) => boolean - allow_user_creation_CustomCheck?: (v?: boolean) => boolean -} -export const AuthAppRequestValidate = (o?: AuthAppRequest, opts: AuthAppRequestOptions = {}, path: string = 'AuthAppRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.name !== 'string') return new Error(`${path}.name: is not a string`) - if (opts.name_CustomCheck && !opts.name_CustomCheck(o.name)) return new Error(`${path}.name: custom check failed`) - - if ((o.allow_user_creation || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('allow_user_creation')) && typeof o.allow_user_creation !== 'boolean') return new Error(`${path}.allow_user_creation: is not a boolean`) - if (opts.allow_user_creation_CustomCheck && !opts.allow_user_creation_CustomCheck(o.allow_user_creation)) return new Error(`${path}.allow_user_creation: custom check failed`) - - return null -} - -export type DecodeInvoiceRequest = { - invoice: string -} -export const DecodeInvoiceRequestOptionalFields: [] = [] -export type DecodeInvoiceRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - invoice_CustomCheck?: (v: string) => boolean -} -export const DecodeInvoiceRequestValidate = (o?: DecodeInvoiceRequest, opts: DecodeInvoiceRequestOptions = {}, path: string = 'DecodeInvoiceRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.invoice !== 'string') return new Error(`${path}.invoice: is not a string`) - if (opts.invoice_CustomCheck && !opts.invoice_CustomCheck(o.invoice)) return new Error(`${path}.invoice: custom check failed`) - - return null -} - -export type DecodeInvoiceResponse = { - amount: number -} -export const DecodeInvoiceResponseOptionalFields: [] = [] -export type DecodeInvoiceResponseOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - amount_CustomCheck?: (v: number) => boolean -} -export const DecodeInvoiceResponseValidate = (o?: DecodeInvoiceResponse, opts: DecodeInvoiceResponseOptions = {}, path: string = 'DecodeInvoiceResponse::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) - if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) - - return null -} - -export type OpenChannelResponse = { - channelId: string -} -export const OpenChannelResponseOptionalFields: [] = [] -export type OpenChannelResponseOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - channelId_CustomCheck?: (v: string) => boolean -} -export const OpenChannelResponseValidate = (o?: OpenChannelResponse, opts: OpenChannelResponseOptions = {}, path: string = 'OpenChannelResponse::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.channelId !== 'string') return new Error(`${path}.channelId: is not a string`) - if (opts.channelId_CustomCheck && !opts.channelId_CustomCheck(o.channelId)) return new Error(`${path}.channelId: custom check failed`) - - return null -} - -export type LndGetInfoRequest = { - nodeId: number -} -export const LndGetInfoRequestOptionalFields: [] = [] -export type LndGetInfoRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - nodeId_CustomCheck?: (v: number) => boolean -} -export const LndGetInfoRequestValidate = (o?: LndGetInfoRequest, opts: LndGetInfoRequestOptions = {}, path: string = 'LndGetInfoRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.nodeId !== 'number') return new Error(`${path}.nodeId: is not a number`) - if (opts.nodeId_CustomCheck && !opts.nodeId_CustomCheck(o.nodeId)) return new Error(`${path}.nodeId: custom check failed`) - - return null -} - -export type AddAppUserInvoiceRequest = { - receiver_identifier: string - payer_identifier: string - http_callback_url: string - invoice_req: NewInvoiceRequest -} -export const AddAppUserInvoiceRequestOptionalFields: [] = [] -export type AddAppUserInvoiceRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - receiver_identifier_CustomCheck?: (v: string) => boolean - payer_identifier_CustomCheck?: (v: string) => boolean - http_callback_url_CustomCheck?: (v: string) => boolean - invoice_req_Options?: NewInvoiceRequestOptions -} -export const AddAppUserInvoiceRequestValidate = (o?: AddAppUserInvoiceRequest, opts: AddAppUserInvoiceRequestOptions = {}, path: string = 'AddAppUserInvoiceRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.receiver_identifier !== 'string') return new Error(`${path}.receiver_identifier: is not a string`) - if (opts.receiver_identifier_CustomCheck && !opts.receiver_identifier_CustomCheck(o.receiver_identifier)) return new Error(`${path}.receiver_identifier: custom check failed`) - - if (typeof o.payer_identifier !== 'string') return new Error(`${path}.payer_identifier: is not a string`) - if (opts.payer_identifier_CustomCheck && !opts.payer_identifier_CustomCheck(o.payer_identifier)) return new Error(`${path}.payer_identifier: custom check failed`) - - if (typeof o.http_callback_url !== 'string') return new Error(`${path}.http_callback_url: is not a string`) - if (opts.http_callback_url_CustomCheck && !opts.http_callback_url_CustomCheck(o.http_callback_url)) return new Error(`${path}.http_callback_url: custom check failed`) - - const invoice_reqErr = NewInvoiceRequestValidate(o.invoice_req, opts.invoice_req_Options, `${path}.invoice_req`) - if (invoice_reqErr !== null) return invoice_reqErr - - - return null -} - -export type GetAppUserLNURLInfoRequest = { - user_identifier: string - base_url_override: string -} -export const GetAppUserLNURLInfoRequestOptionalFields: [] = [] -export type GetAppUserLNURLInfoRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - user_identifier_CustomCheck?: (v: string) => boolean - base_url_override_CustomCheck?: (v: string) => boolean -} -export const GetAppUserLNURLInfoRequestValidate = (o?: GetAppUserLNURLInfoRequest, opts: GetAppUserLNURLInfoRequestOptions = {}, path: string = 'GetAppUserLNURLInfoRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.user_identifier !== 'string') return new Error(`${path}.user_identifier: is not a string`) - if (opts.user_identifier_CustomCheck && !opts.user_identifier_CustomCheck(o.user_identifier)) return new Error(`${path}.user_identifier: custom check failed`) - - if (typeof o.base_url_override !== 'string') return new Error(`${path}.base_url_override: is not a string`) - if (opts.base_url_override_CustomCheck && !opts.base_url_override_CustomCheck(o.base_url_override)) return new Error(`${path}.base_url_override: custom check failed`) - - return null -} - -export type SetMockAppUserBalanceRequest = { - user_identifier: string - amount: number -} -export const SetMockAppUserBalanceRequestOptionalFields: [] = [] -export type SetMockAppUserBalanceRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - user_identifier_CustomCheck?: (v: string) => boolean - amount_CustomCheck?: (v: number) => boolean -} -export const SetMockAppUserBalanceRequestValidate = (o?: SetMockAppUserBalanceRequest, opts: SetMockAppUserBalanceRequestOptions = {}, path: string = 'SetMockAppUserBalanceRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.user_identifier !== 'string') return new Error(`${path}.user_identifier: is not a string`) - if (opts.user_identifier_CustomCheck && !opts.user_identifier_CustomCheck(o.user_identifier)) return new Error(`${path}.user_identifier: custom check failed`) - - if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) - if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) - - return null -} - -export type PayAddressRequest = { - address: string - amoutSats: number - satsPerVByte: number -} -export const PayAddressRequestOptionalFields: [] = [] -export type PayAddressRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - address_CustomCheck?: (v: string) => boolean - amoutSats_CustomCheck?: (v: number) => boolean - satsPerVByte_CustomCheck?: (v: number) => boolean -} -export const PayAddressRequestValidate = (o?: PayAddressRequest, opts: PayAddressRequestOptions = {}, path: string = 'PayAddressRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.address !== 'string') return new Error(`${path}.address: is not a string`) - if (opts.address_CustomCheck && !opts.address_CustomCheck(o.address)) return new Error(`${path}.address: custom check failed`) - - if (typeof o.amoutSats !== 'number') return new Error(`${path}.amoutSats: is not a number`) - if (opts.amoutSats_CustomCheck && !opts.amoutSats_CustomCheck(o.amoutSats)) return new Error(`${path}.amoutSats: custom check failed`) - - if (typeof o.satsPerVByte !== 'number') return new Error(`${path}.satsPerVByte: is not a number`) - if (opts.satsPerVByte_CustomCheck && !opts.satsPerVByte_CustomCheck(o.satsPerVByte)) return new Error(`${path}.satsPerVByte: custom check failed`) - - return null -} - -export type HandleLnurlPayResponse = { - pr: string - routes: Empty[] -} -export const HandleLnurlPayResponseOptionalFields: [] = [] -export type HandleLnurlPayResponseOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - pr_CustomCheck?: (v: string) => boolean - routes_ItemOptions?: EmptyOptions - routes_CustomCheck?: (v: Empty[]) => boolean -} -export const HandleLnurlPayResponseValidate = (o?: HandleLnurlPayResponse, opts: HandleLnurlPayResponseOptions = {}, path: string = 'HandleLnurlPayResponse::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.pr !== 'string') return new Error(`${path}.pr: is not a string`) - if (opts.pr_CustomCheck && !opts.pr_CustomCheck(o.pr)) return new Error(`${path}.pr: custom check failed`) - - if (!Array.isArray(o.routes)) return new Error(`${path}.routes: is not an array`) - for (let index = 0; index < o.routes.length; index++) { - const routesErr = EmptyValidate(o.routes[index], opts.routes_ItemOptions, `${path}.routes[${index}]`) - if (routesErr !== null) return routesErr - } - if (opts.routes_CustomCheck && !opts.routes_CustomCheck(o.routes)) return new Error(`${path}.routes: custom check failed`) - - return null -} - -export type GetUserOperationsRequest = { - latestIncomingInvoice: number - latestOutgoingInvoice: number - latestIncomingTx: number - latestOutgoingTx: number - latestIncomingUserToUserPayment: number - latestOutgoingUserToUserPayment: number -} -export const GetUserOperationsRequestOptionalFields: [] = [] -export type GetUserOperationsRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - latestIncomingInvoice_CustomCheck?: (v: number) => boolean - latestOutgoingInvoice_CustomCheck?: (v: number) => boolean - latestIncomingTx_CustomCheck?: (v: number) => boolean - latestOutgoingTx_CustomCheck?: (v: number) => boolean - latestIncomingUserToUserPayment_CustomCheck?: (v: number) => boolean - latestOutgoingUserToUserPayment_CustomCheck?: (v: number) => boolean -} -export const GetUserOperationsRequestValidate = (o?: GetUserOperationsRequest, opts: GetUserOperationsRequestOptions = {}, path: string = 'GetUserOperationsRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.latestIncomingInvoice !== 'number') return new Error(`${path}.latestIncomingInvoice: is not a number`) - if (opts.latestIncomingInvoice_CustomCheck && !opts.latestIncomingInvoice_CustomCheck(o.latestIncomingInvoice)) return new Error(`${path}.latestIncomingInvoice: custom check failed`) - - if (typeof o.latestOutgoingInvoice !== 'number') return new Error(`${path}.latestOutgoingInvoice: is not a number`) - if (opts.latestOutgoingInvoice_CustomCheck && !opts.latestOutgoingInvoice_CustomCheck(o.latestOutgoingInvoice)) return new Error(`${path}.latestOutgoingInvoice: custom check failed`) - - if (typeof o.latestIncomingTx !== 'number') return new Error(`${path}.latestIncomingTx: is not a number`) - if (opts.latestIncomingTx_CustomCheck && !opts.latestIncomingTx_CustomCheck(o.latestIncomingTx)) return new Error(`${path}.latestIncomingTx: custom check failed`) - - if (typeof o.latestOutgoingTx !== 'number') return new Error(`${path}.latestOutgoingTx: is not a number`) - if (opts.latestOutgoingTx_CustomCheck && !opts.latestOutgoingTx_CustomCheck(o.latestOutgoingTx)) return new Error(`${path}.latestOutgoingTx: custom check failed`) - - if (typeof o.latestIncomingUserToUserPayment !== 'number') return new Error(`${path}.latestIncomingUserToUserPayment: is not a number`) - if (opts.latestIncomingUserToUserPayment_CustomCheck && !opts.latestIncomingUserToUserPayment_CustomCheck(o.latestIncomingUserToUserPayment)) return new Error(`${path}.latestIncomingUserToUserPayment: custom check failed`) - - if (typeof o.latestOutgoingUserToUserPayment !== 'number') return new Error(`${path}.latestOutgoingUserToUserPayment: is not a number`) - if (opts.latestOutgoingUserToUserPayment_CustomCheck && !opts.latestOutgoingUserToUserPayment_CustomCheck(o.latestOutgoingUserToUserPayment)) return new Error(`${path}.latestOutgoingUserToUserPayment: custom check failed`) - - return null -} - -export type Product = { - id: string - name: string - price_sats: number -} -export const ProductOptionalFields: [] = [] -export type ProductOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - id_CustomCheck?: (v: string) => boolean - name_CustomCheck?: (v: string) => boolean - price_sats_CustomCheck?: (v: number) => boolean -} -export const ProductValidate = (o?: Product, opts: ProductOptions = {}, path: string = 'Product::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.id !== 'string') return new Error(`${path}.id: is not a string`) - if (opts.id_CustomCheck && !opts.id_CustomCheck(o.id)) return new Error(`${path}.id: custom check failed`) - - if (typeof o.name !== 'string') return new Error(`${path}.name: is not a string`) - if (opts.name_CustomCheck && !opts.name_CustomCheck(o.name)) return new Error(`${path}.name: custom check failed`) - - if (typeof o.price_sats !== 'number') return new Error(`${path}.price_sats: is not a number`) - if (opts.price_sats_CustomCheck && !opts.price_sats_CustomCheck(o.price_sats)) return new Error(`${path}.price_sats: custom check failed`) - - return null -} - -export type NewAddressResponse = { - address: string -} -export const NewAddressResponseOptionalFields: [] = [] -export type NewAddressResponseOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - address_CustomCheck?: (v: string) => boolean -} -export const NewAddressResponseValidate = (o?: NewAddressResponse, opts: NewAddressResponseOptions = {}, path: string = 'NewAddressResponse::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.address !== 'string') return new Error(`${path}.address: is not a string`) - if (opts.address_CustomCheck && !opts.address_CustomCheck(o.address)) return new Error(`${path}.address: custom check failed`) - - return null -} - -export type NewInvoiceRequest = { - amountSats: number - memo: string -} -export const NewInvoiceRequestOptionalFields: [] = [] -export type NewInvoiceRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - amountSats_CustomCheck?: (v: number) => boolean - memo_CustomCheck?: (v: string) => boolean -} -export const NewInvoiceRequestValidate = (o?: NewInvoiceRequest, opts: NewInvoiceRequestOptions = {}, path: string = 'NewInvoiceRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.amountSats !== 'number') return new Error(`${path}.amountSats: is not a number`) - if (opts.amountSats_CustomCheck && !opts.amountSats_CustomCheck(o.amountSats)) return new Error(`${path}.amountSats: custom check failed`) - - if (typeof o.memo !== 'string') return new Error(`${path}.memo: is not a string`) - if (opts.memo_CustomCheck && !opts.memo_CustomCheck(o.memo)) return new Error(`${path}.memo: custom check failed`) - - return null -} - -export type AddProductRequest = { - name: string - price_sats: number -} -export const AddProductRequestOptionalFields: [] = [] -export type AddProductRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - name_CustomCheck?: (v: string) => boolean - price_sats_CustomCheck?: (v: number) => boolean -} -export const AddProductRequestValidate = (o?: AddProductRequest, opts: AddProductRequestOptions = {}, path: string = 'AddProductRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.name !== 'string') return new Error(`${path}.name: is not a string`) - if (opts.name_CustomCheck && !opts.name_CustomCheck(o.name)) return new Error(`${path}.name: custom check failed`) - - if (typeof o.price_sats !== 'number') return new Error(`${path}.price_sats: is not a number`) - if (opts.price_sats_CustomCheck && !opts.price_sats_CustomCheck(o.price_sats)) return new Error(`${path}.price_sats: custom check failed`) - - return null -} - -export type PayAddressResponse = { - txId: string -} -export const PayAddressResponseOptionalFields: [] = [] -export type PayAddressResponseOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - txId_CustomCheck?: (v: string) => boolean -} -export const PayAddressResponseValidate = (o?: PayAddressResponse, opts: PayAddressResponseOptions = {}, path: string = 'PayAddressResponse::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.txId !== 'string') return new Error(`${path}.txId: is not a string`) - if (opts.txId_CustomCheck && !opts.txId_CustomCheck(o.txId)) return new Error(`${path}.txId: custom check failed`) - - return null -} - -export type LnurlPayInfoResponse = { - tag: string - callback: string - maxSendable: number - minSendable: number - metadata: string -} -export const LnurlPayInfoResponseOptionalFields: [] = [] -export type LnurlPayInfoResponseOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - tag_CustomCheck?: (v: string) => boolean - callback_CustomCheck?: (v: string) => boolean - maxSendable_CustomCheck?: (v: number) => boolean - minSendable_CustomCheck?: (v: number) => boolean - metadata_CustomCheck?: (v: string) => boolean -} -export const LnurlPayInfoResponseValidate = (o?: LnurlPayInfoResponse, opts: LnurlPayInfoResponseOptions = {}, path: string = 'LnurlPayInfoResponse::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.tag !== 'string') return new Error(`${path}.tag: is not a string`) - if (opts.tag_CustomCheck && !opts.tag_CustomCheck(o.tag)) return new Error(`${path}.tag: custom check failed`) - - if (typeof o.callback !== 'string') return new Error(`${path}.callback: is not a string`) - if (opts.callback_CustomCheck && !opts.callback_CustomCheck(o.callback)) return new Error(`${path}.callback: custom check failed`) - - if (typeof o.maxSendable !== 'number') return new Error(`${path}.maxSendable: is not a number`) - if (opts.maxSendable_CustomCheck && !opts.maxSendable_CustomCheck(o.maxSendable)) return new Error(`${path}.maxSendable: custom check failed`) - - if (typeof o.minSendable !== 'number') return new Error(`${path}.minSendable: is not a number`) - if (opts.minSendable_CustomCheck && !opts.minSendable_CustomCheck(o.minSendable)) return new Error(`${path}.minSendable: custom check failed`) - - if (typeof o.metadata !== 'string') return new Error(`${path}.metadata: is not a string`) - if (opts.metadata_CustomCheck && !opts.metadata_CustomCheck(o.metadata)) return new Error(`${path}.metadata: custom check failed`) - - return null -} - export type UserInfo = { userId: string balance: number @@ -1186,39 +1099,6 @@ export const UserInfoValidate = (o?: UserInfo, opts: UserInfoOptions = {}, path: return null } -export type UserOperations = { - fromIndex: number - toIndex: number - operations: UserOperation[] -} -export const UserOperationsOptionalFields: [] = [] -export type UserOperationsOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - fromIndex_CustomCheck?: (v: number) => boolean - toIndex_CustomCheck?: (v: number) => boolean - operations_ItemOptions?: UserOperationOptions - operations_CustomCheck?: (v: UserOperation[]) => boolean -} -export const UserOperationsValidate = (o?: UserOperations, opts: UserOperationsOptions = {}, path: string = 'UserOperations::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.fromIndex !== 'number') return new Error(`${path}.fromIndex: is not a number`) - if (opts.fromIndex_CustomCheck && !opts.fromIndex_CustomCheck(o.fromIndex)) return new Error(`${path}.fromIndex: custom check failed`) - - if (typeof o.toIndex !== 'number') return new Error(`${path}.toIndex: is not a number`) - if (opts.toIndex_CustomCheck && !opts.toIndex_CustomCheck(o.toIndex)) return new Error(`${path}.toIndex: custom check failed`) - - if (!Array.isArray(o.operations)) return new Error(`${path}.operations: is not an array`) - for (let index = 0; index < o.operations.length; index++) { - const operationsErr = UserOperationValidate(o.operations[index], opts.operations_ItemOptions, `${path}.operations[${index}]`) - if (operationsErr !== null) return operationsErr - } - if (opts.operations_CustomCheck && !opts.operations_CustomCheck(o.operations)) return new Error(`${path}.operations: custom check failed`) - - return null -} - export type GetUserOperationsResponse = { latestOutgoingInvoiceOperations: UserOperations latestIncomingInvoiceOperations: UserOperations @@ -1268,87 +1148,106 @@ export const GetUserOperationsResponseValidate = (o?: GetUserOperationsResponse, return null } -export type LiveUserOperation = { +export type Application = { + name: string id: string + balance: number + npub: string } -export const LiveUserOperationOptionalFields: [] = [] -export type LiveUserOperationOptions = OptionsBaseMessage & { +export const ApplicationOptionalFields: [] = [] +export type ApplicationOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] + name_CustomCheck?: (v: string) => boolean id_CustomCheck?: (v: string) => boolean + balance_CustomCheck?: (v: number) => boolean + npub_CustomCheck?: (v: string) => boolean } -export const LiveUserOperationValidate = (o?: LiveUserOperation, opts: LiveUserOperationOptions = {}, path: string = 'LiveUserOperation::root.'): Error | null => { +export const ApplicationValidate = (o?: Application, opts: ApplicationOptions = {}, path: string = 'Application::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + if (typeof o.name !== 'string') return new Error(`${path}.name: is not a string`) + if (opts.name_CustomCheck && !opts.name_CustomCheck(o.name)) return new Error(`${path}.name: custom check failed`) + if (typeof o.id !== 'string') return new Error(`${path}.id: is not a string`) if (opts.id_CustomCheck && !opts.id_CustomCheck(o.id)) return new Error(`${path}.id: custom check failed`) + if (typeof o.balance !== 'number') return new Error(`${path}.balance: is not a number`) + if (opts.balance_CustomCheck && !opts.balance_CustomCheck(o.balance)) return new Error(`${path}.balance: custom check failed`) + + if (typeof o.npub !== 'string') return new Error(`${path}.npub: is not a string`) + if (opts.npub_CustomCheck && !opts.npub_CustomCheck(o.npub)) return new Error(`${path}.npub: custom check failed`) + return null } -export type LndGetInfoResponse = { - alias: string +export type NewInvoiceResponse = { + invoice: string } -export const LndGetInfoResponseOptionalFields: [] = [] -export type LndGetInfoResponseOptions = OptionsBaseMessage & { +export const NewInvoiceResponseOptionalFields: [] = [] +export type NewInvoiceResponseOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - alias_CustomCheck?: (v: string) => boolean + invoice_CustomCheck?: (v: string) => boolean } -export const LndGetInfoResponseValidate = (o?: LndGetInfoResponse, opts: LndGetInfoResponseOptions = {}, path: string = 'LndGetInfoResponse::root.'): Error | null => { +export const NewInvoiceResponseValidate = (o?: NewInvoiceResponse, opts: NewInvoiceResponseOptions = {}, path: string = 'NewInvoiceResponse::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - if (typeof o.alias !== 'string') return new Error(`${path}.alias: is not a string`) - if (opts.alias_CustomCheck && !opts.alias_CustomCheck(o.alias)) return new Error(`${path}.alias: custom check failed`) + if (typeof o.invoice !== 'string') return new Error(`${path}.invoice: is not a string`) + if (opts.invoice_CustomCheck && !opts.invoice_CustomCheck(o.invoice)) return new Error(`${path}.invoice: custom check failed`) return null } -export type AuthApp = { - app: Application - auth_token: string +export type PayInvoiceResponse = { + preimage: string + amount_paid: number } -export const AuthAppOptionalFields: [] = [] -export type AuthAppOptions = OptionsBaseMessage & { +export const PayInvoiceResponseOptionalFields: [] = [] +export type PayInvoiceResponseOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - app_Options?: ApplicationOptions - auth_token_CustomCheck?: (v: string) => boolean + preimage_CustomCheck?: (v: string) => boolean + amount_paid_CustomCheck?: (v: number) => boolean } -export const AuthAppValidate = (o?: AuthApp, opts: AuthAppOptions = {}, path: string = 'AuthApp::root.'): Error | null => { +export const PayInvoiceResponseValidate = (o?: PayInvoiceResponse, opts: PayInvoiceResponseOptions = {}, path: string = 'PayInvoiceResponse::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - const appErr = ApplicationValidate(o.app, opts.app_Options, `${path}.app`) - if (appErr !== null) return appErr - + if (typeof o.preimage !== 'string') return new Error(`${path}.preimage: is not a string`) + if (opts.preimage_CustomCheck && !opts.preimage_CustomCheck(o.preimage)) return new Error(`${path}.preimage: custom check failed`) - if (typeof o.auth_token !== 'string') return new Error(`${path}.auth_token: is not a string`) - if (opts.auth_token_CustomCheck && !opts.auth_token_CustomCheck(o.auth_token)) return new Error(`${path}.auth_token: custom check failed`) + if (typeof o.amount_paid !== 'number') return new Error(`${path}.amount_paid: is not a number`) + if (opts.amount_paid_CustomCheck && !opts.amount_paid_CustomCheck(o.amount_paid)) return new Error(`${path}.amount_paid: custom check failed`) return null } -export type SendAppUserToAppUserPaymentRequest = { - from_user_identifier: string - to_user_identifier: string +export type UserOperation = { + paidAtUnix: number + type: UserOperationType + inbound: boolean amount: number } -export const SendAppUserToAppUserPaymentRequestOptionalFields: [] = [] -export type SendAppUserToAppUserPaymentRequestOptions = OptionsBaseMessage & { +export const UserOperationOptionalFields: [] = [] +export type UserOperationOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - from_user_identifier_CustomCheck?: (v: string) => boolean - to_user_identifier_CustomCheck?: (v: string) => boolean + paidAtUnix_CustomCheck?: (v: number) => boolean + type_CustomCheck?: (v: UserOperationType) => boolean + inbound_CustomCheck?: (v: boolean) => boolean amount_CustomCheck?: (v: number) => boolean } -export const SendAppUserToAppUserPaymentRequestValidate = (o?: SendAppUserToAppUserPaymentRequest, opts: SendAppUserToAppUserPaymentRequestOptions = {}, path: string = 'SendAppUserToAppUserPaymentRequest::root.'): Error | null => { +export const UserOperationValidate = (o?: UserOperation, opts: UserOperationOptions = {}, path: string = 'UserOperation::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - if (typeof o.from_user_identifier !== 'string') return new Error(`${path}.from_user_identifier: is not a string`) - if (opts.from_user_identifier_CustomCheck && !opts.from_user_identifier_CustomCheck(o.from_user_identifier)) return new Error(`${path}.from_user_identifier: custom check failed`) + if (typeof o.paidAtUnix !== 'number') return new Error(`${path}.paidAtUnix: is not a number`) + if (opts.paidAtUnix_CustomCheck && !opts.paidAtUnix_CustomCheck(o.paidAtUnix)) return new Error(`${path}.paidAtUnix: custom check failed`) - if (typeof o.to_user_identifier !== 'string') return new Error(`${path}.to_user_identifier: is not a string`) - if (opts.to_user_identifier_CustomCheck && !opts.to_user_identifier_CustomCheck(o.to_user_identifier)) return new Error(`${path}.to_user_identifier: custom check failed`) + if (!enumCheckUserOperationType(o.type)) return new Error(`${path}.type: is not a valid UserOperationType`) + if (opts.type_CustomCheck && !opts.type_CustomCheck(o.type)) return new Error(`${path}.type: custom check failed`) + + if (typeof o.inbound !== 'boolean') return new Error(`${path}.inbound: is not a boolean`) + if (opts.inbound_CustomCheck && !opts.inbound_CustomCheck(o.inbound)) return new Error(`${path}.inbound: custom check failed`) if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) @@ -1356,43 +1255,20 @@ export const SendAppUserToAppUserPaymentRequestValidate = (o?: SendAppUserToAppU return null } -export type SendAppUserToAppPaymentRequest = { - from_user_identifier: string - amount: number +export type GetAppUserRequest = { + user_identifier: string } -export const SendAppUserToAppPaymentRequestOptionalFields: [] = [] -export type SendAppUserToAppPaymentRequestOptions = OptionsBaseMessage & { +export const GetAppUserRequestOptionalFields: [] = [] +export type GetAppUserRequestOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - from_user_identifier_CustomCheck?: (v: string) => boolean - amount_CustomCheck?: (v: number) => boolean + user_identifier_CustomCheck?: (v: string) => boolean } -export const SendAppUserToAppPaymentRequestValidate = (o?: SendAppUserToAppPaymentRequest, opts: SendAppUserToAppPaymentRequestOptions = {}, path: string = 'SendAppUserToAppPaymentRequest::root.'): Error | null => { +export const GetAppUserRequestValidate = (o?: GetAppUserRequest, opts: GetAppUserRequestOptions = {}, path: string = 'GetAppUserRequest::root.'): Error | null => { if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - if (typeof o.from_user_identifier !== 'string') return new Error(`${path}.from_user_identifier: is not a string`) - if (opts.from_user_identifier_CustomCheck && !opts.from_user_identifier_CustomCheck(o.from_user_identifier)) return new Error(`${path}.from_user_identifier: custom check failed`) - - if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) - if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) - - return null -} - -export type SetMockAppBalanceRequest = { - amount: number -} -export const SetMockAppBalanceRequestOptionalFields: [] = [] -export type SetMockAppBalanceRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - amount_CustomCheck?: (v: number) => boolean -} -export const SetMockAppBalanceRequestValidate = (o?: SetMockAppBalanceRequest, opts: SetMockAppBalanceRequestOptions = {}, path: string = 'SetMockAppBalanceRequest::root.'): Error | null => { - if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') - if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') - - if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) - if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) + if (typeof o.user_identifier !== 'string') return new Error(`${path}.user_identifier: is not a string`) + if (opts.user_identifier_CustomCheck && !opts.user_identifier_CustomCheck(o.user_identifier)) return new Error(`${path}.user_identifier: custom check failed`) return null } @@ -1430,3 +1306,133 @@ export const OpenChannelRequestValidate = (o?: OpenChannelRequest, opts: OpenCha return null } +export type GetProductBuyLinkResponse = { + link: string +} +export const GetProductBuyLinkResponseOptionalFields: [] = [] +export type GetProductBuyLinkResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + link_CustomCheck?: (v: string) => boolean +} +export const GetProductBuyLinkResponseValidate = (o?: GetProductBuyLinkResponse, opts: GetProductBuyLinkResponseOptions = {}, path: string = 'GetProductBuyLinkResponse::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.link !== 'string') return new Error(`${path}.link: is not a string`) + if (opts.link_CustomCheck && !opts.link_CustomCheck(o.link)) return new Error(`${path}.link: custom check failed`) + + return null +} + +export type LndGetInfoRequest = { + nodeId: number +} +export const LndGetInfoRequestOptionalFields: [] = [] +export type LndGetInfoRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + nodeId_CustomCheck?: (v: number) => boolean +} +export const LndGetInfoRequestValidate = (o?: LndGetInfoRequest, opts: LndGetInfoRequestOptions = {}, path: string = 'LndGetInfoRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.nodeId !== 'number') return new Error(`${path}.nodeId: is not a number`) + if (opts.nodeId_CustomCheck && !opts.nodeId_CustomCheck(o.nodeId)) return new Error(`${path}.nodeId: custom check failed`) + + return null +} + +export type AuthAppRequest = { + name: string + allow_user_creation?: boolean +} +export type AuthAppRequestOptionalField = 'allow_user_creation' +export const AuthAppRequestOptionalFields: AuthAppRequestOptionalField[] = ['allow_user_creation'] +export type AuthAppRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: AuthAppRequestOptionalField[] + name_CustomCheck?: (v: string) => boolean + allow_user_creation_CustomCheck?: (v?: boolean) => boolean +} +export const AuthAppRequestValidate = (o?: AuthAppRequest, opts: AuthAppRequestOptions = {}, path: string = 'AuthAppRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.name !== 'string') return new Error(`${path}.name: is not a string`) + if (opts.name_CustomCheck && !opts.name_CustomCheck(o.name)) return new Error(`${path}.name: custom check failed`) + + if ((o.allow_user_creation || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('allow_user_creation')) && typeof o.allow_user_creation !== 'boolean') return new Error(`${path}.allow_user_creation: is not a boolean`) + if (opts.allow_user_creation_CustomCheck && !opts.allow_user_creation_CustomCheck(o.allow_user_creation)) return new Error(`${path}.allow_user_creation: custom check failed`) + + return null +} + +export type AuthApp = { + app: Application + auth_token: string +} +export const AuthAppOptionalFields: [] = [] +export type AuthAppOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + app_Options?: ApplicationOptions + auth_token_CustomCheck?: (v: string) => boolean +} +export const AuthAppValidate = (o?: AuthApp, opts: AuthAppOptions = {}, path: string = 'AuthApp::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + const appErr = ApplicationValidate(o.app, opts.app_Options, `${path}.app`) + if (appErr !== null) return appErr + + + if (typeof o.auth_token !== 'string') return new Error(`${path}.auth_token: is not a string`) + if (opts.auth_token_CustomCheck && !opts.auth_token_CustomCheck(o.auth_token)) return new Error(`${path}.auth_token: custom check failed`) + + return null +} + +export type PayInvoiceRequest = { + invoice: string + amount: number +} +export const PayInvoiceRequestOptionalFields: [] = [] +export type PayInvoiceRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + invoice_CustomCheck?: (v: string) => boolean + amount_CustomCheck?: (v: number) => boolean +} +export const PayInvoiceRequestValidate = (o?: PayInvoiceRequest, opts: PayInvoiceRequestOptions = {}, path: string = 'PayInvoiceRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.invoice !== 'string') return new Error(`${path}.invoice: is not a string`) + if (opts.invoice_CustomCheck && !opts.invoice_CustomCheck(o.invoice)) return new Error(`${path}.invoice: custom check failed`) + + if (typeof o.amount !== 'number') return new Error(`${path}.amount: is not a number`) + if (opts.amount_CustomCheck && !opts.amount_CustomCheck(o.amount)) return new Error(`${path}.amount: custom check failed`) + + return null +} + +export type AddProductRequest = { + name: string + price_sats: number +} +export const AddProductRequestOptionalFields: [] = [] +export type AddProductRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + name_CustomCheck?: (v: string) => boolean + price_sats_CustomCheck?: (v: number) => boolean +} +export const AddProductRequestValidate = (o?: AddProductRequest, opts: AddProductRequestOptions = {}, path: string = 'AddProductRequest::root.'): Error | null => { + if (opts.checkOptionalsAreSet && opts.allOptionalsAreSet) return new Error(path + ': only one of checkOptionalsAreSet or allOptionalNonDefault can be set for each message') + if (typeof o !== 'object' || o === null) return new Error(path + ': object is not an instance of an object or is null') + + if (typeof o.name !== 'string') return new Error(`${path}.name: is not a string`) + if (opts.name_CustomCheck && !opts.name_CustomCheck(o.name)) return new Error(`${path}.name: custom check failed`) + + if (typeof o.price_sats !== 'number') return new Error(`${path}.price_sats: is not a number`) + if (opts.price_sats_CustomCheck && !opts.price_sats_CustomCheck(o.price_sats)) return new Error(`${path}.price_sats: custom check failed`) + + return null +} + diff --git a/proto/protoc-gen-pub b/proto/protoc-gen-pub index 6cbea3d491593cbd02d353d4c38a06d21bc6bdae..9a6936521f074a328be98c3ef68b886ce98001b8 100755 GIT binary patch delta 37415 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 C>5CWu diff --git a/proto/service/structs.proto b/proto/service/structs.proto index 3e73b50f..14e84578 100644 --- a/proto/service/structs.proto +++ b/proto/service/structs.proto @@ -256,4 +256,5 @@ message GetProductBuyLinkResponse { message LiveUserOperation { string id = 1; + UserOperation operation = 2; } \ No newline at end of file diff --git a/src/services/main/index.ts b/src/services/main/index.ts index fd06ebc5..3f072e6f 100644 --- a/src/services/main/index.ts +++ b/src/services/main/index.ts @@ -1,3 +1,4 @@ +import crypto from 'crypto' import fetch from "node-fetch" import Storage, { LoadStorageSettingsFromEnv } from '../storage/index.js' import * as Types from '../../../proto/autogenerated/ts/types.js' @@ -45,6 +46,7 @@ export default class { applicationManager: ApplicationManager appUserManager: AppUserManager paymentManager: PaymentManager + paymentSubs: Record void) | null> = {} constructor(settings: MainSettings) { this.settings = settings @@ -66,6 +68,7 @@ export default class { // This call will fail if the transaction is already registered const addedTx = await this.storage.paymentStorage.AddAddressReceivingTransaction(userAddress, txOutput.hash, txOutput.index, amount, fee, tx) await this.storage.userStorage.IncrementUserBalance(userAddress.user.user_id, addedTx.paid_amount - fee, tx) + this.triggerSubs(userAddress.user.user_id, { amount, paidAtUnix: Date.now() / 1000, inbound: true, type: Types.UserOperationType.INCOMING_TX }) } catch { } @@ -96,6 +99,7 @@ export default class { } await this.triggerPaidCallback(log, userInvoice.callbackUrl) + this.triggerSubs(userInvoice.user.user_id, { amount, paidAtUnix: Date.now() / 1000, inbound: true, type: Types.UserOperationType.INCOMING_INVOICE }) log("paid invoice processed successfully") } catch (err: any) { log("ERROR", "cannot process paid invoice", err.message || "") @@ -113,4 +117,27 @@ export default class { log("error sending paid callback for invoice", err.message || "") } } + + triggerSubs(userId: string, op: Types.UserOperation) { + const sub = this.paymentSubs[userId] + if (!sub) { + return + } + sub(op) + } + + async SubToPayment(ctx: Types.UserContext, cb: (res: Types.LiveUserOperation, err: Error | null) => void) { + const sub = this.paymentSubs[ctx.user_id] + if (sub) { + return + } + const app = await this.storage.applicationStorage.GetApplication(ctx.app_id) + const log = getLogger({ appName: app.name, userId: ctx.user_id }) + const appUser = await this.storage.applicationStorage.GetApplicationUser(app, ctx.app_user_id) + + this.paymentSubs[ctx.user_id] = (op) => { + const rand = crypto.randomBytes(32).toString('hex') + cb({ id: rand, operation: op }, null) + } + } } \ No newline at end of file diff --git a/src/services/serverMethods/index.ts b/src/services/serverMethods/index.ts index 2fdb4a66..b48e5350 100644 --- a/src/services/serverMethods/index.ts +++ b/src/services/serverMethods/index.ts @@ -176,6 +176,9 @@ export default (mainHandler: Main): Types.ServerMethods => { }, SetMockAppBalance: async (ctx, req) => { await mainHandler.applicationManager.SetMockAppBalance(ctx.app_id, req) + }, + GetLiveUserOperations: async (ctx, cb) => { + mainHandler.SubToPayment(ctx, cb) } } } \ No newline at end of file