From 9b8e1c32c82f7dc2767b4aa9afa1bd438d139472 Mon Sep 17 00:00:00 2001 From: boufni95 Date: Fri, 22 Dec 2023 16:58:02 +0100 Subject: [PATCH] fix start metric --- proto/autogenerated/client.md | 402 +-- proto/autogenerated/debug.txt | 3836 ++++++++++----------- proto/autogenerated/ts/express_server.ts | 84 +- proto/autogenerated/ts/nostr_transport.ts | 6 +- proto/autogenerated/ts/types.ts | 2640 +++++++------- proto/protoc-gen-pub | Bin 9077870 -> 9077870 bytes proto/service/structs.proto | 2 +- src/nostrMiddleware.ts | 2 +- src/services/metrics/index.ts | 4 +- src/services/nostr/handler.ts | 4 +- 10 files changed, 3491 insertions(+), 3489 deletions(-) diff --git a/proto/autogenerated/client.md b/proto/autogenerated/client.md index d97b4acf..27cde225 100644 --- a/proto/autogenerated/client.md +++ b/proto/autogenerated/client.md @@ -105,9 +105,9 @@ The nostr server will send back a message response, and inside the body there wi - __User__: - expected context content - - __app_id__: _string_ - __app_user_id__: _string_ - __user_id__: _string_ + - __app_id__: _string_ - __Admin__: - expected context content @@ -432,10 +432,33 @@ 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 -### AppsMetricsRequest - - __from_unix__: _number_ *this field is optional - - __to_unix__: _number_ *this field is optional - - __include_operations__: _boolean_ *this field is optional +### SetMockAppUserBalanceRequest + - __user_identifier__: _string_ + - __amount__: _number_ + +### PayAddressRequest + - __address__: _string_ + - __amoutSats__: _number_ + - __satsPerVByte__: _number_ + +### OpenChannelRequest + - __destination__: _string_ + - __fundingAmount__: _number_ + - __pushAmount__: _number_ + - __closeAddress__: _string_ + +### GetProductBuyLinkResponse + - __link__: _string_ + +### RelaysMigration + - __relays__: ARRAY of: _string_ + +### Empty + +### AddAppUserRequest + - __identifier__: _string_ + - __fail_if_exists__: _boolean_ + - __balance__: _number_ ### PayAddressResponse - __txId__: _string_ @@ -443,40 +466,37 @@ The nostr server will send back a message response, and inside the body there wi - __service_fee__: _number_ - __network_fee__: _number_ -### PayInvoiceResponse - - __preimage__: _string_ - - __amount_paid__: _number_ - - __operation_id__: _string_ - - __service_fee__: _number_ - - __network_fee__: _number_ +### NewAddressRequest + - __addressType__: _[AddressType](#AddressType)_ -### ChainBalanceEvent - - __block_height__: _number_ - - __confirmed_balance__: _number_ - - __unconfirmed_balance__: _number_ - - __total_balance__: _number_ - -### SetMockInvoiceAsPaidRequest +### DecodeInvoiceRequest - __invoice__: _string_ - - __amount__: _number_ -### AppUser - - __identifier__: _string_ - - __info__: _[UserInfo](#UserInfo)_ - - __max_withdrawable__: _number_ +### LnurlLinkResponse + - __lnurl__: _string_ + - __k1__: _string_ -### Product - - __id__: _string_ +### MigrationUpdate + - __closure__: _[ClosureMigration](#ClosureMigration)_ *this field is optional + - __relays__: _[RelaysMigration](#RelaysMigration)_ *this field is optional + +### LndNodeMetrics + - __channels_balance_events__: ARRAY of: _[ChannelBalanceEvent](#ChannelBalanceEvent)_ + - __chain_balance_events__: ARRAY of: _[ChainBalanceEvent](#ChainBalanceEvent)_ + - __routing_events__: ARRAY of: _[RoutingEvent](#RoutingEvent)_ + +### AuthAppRequest - __name__: _string_ - - __price_sats__: _number_ + - __allow_user_creation__: _boolean_ *this field is optional -### GetProductBuyLinkResponse - - __link__: _string_ - -### Empty +### Application + - __name__: _string_ + - __id__: _string_ + - __balance__: _number_ + - __npub__: _string_ ### UsageMetric - - __processed_at_nano__: _string_ + - __processed_at_ms__: _number_ - __parsed_in_nano__: _number_ - __auth_in_nano__: _number_ - __validate_in_nano__: _number_ @@ -486,20 +506,58 @@ The nostr server will send back a message response, and inside the body there wi - __nostr__: _boolean_ - __batch_size__: _number_ +### AppMetrics + - __app__: _[Application](#Application)_ + - __users__: _[UsersInfo](#UsersInfo)_ + - __total_received__: _number_ + - __total_spent__: _number_ + - __total_available__: _number_ + - __unpaid_invoices__: _number_ + - __operations__: ARRAY of: _[UserOperation](#UserOperation)_ + +### UserOperations + - __fromIndex__: _number_ + - __toIndex__: _number_ + - __operations__: ARRAY of: _[UserOperation](#UserOperation)_ + +### GetUserOperationsResponse + - __latestOutgoingInvoiceOperations__: _[UserOperations](#UserOperations)_ + - __latestIncomingInvoiceOperations__: _[UserOperations](#UserOperations)_ + - __latestOutgoingTxOperations__: _[UserOperations](#UserOperations)_ + - __latestIncomingTxOperations__: _[UserOperations](#UserOperations)_ + - __latestOutgoingUserToUserPayemnts__: _[UserOperations](#UserOperations)_ + - __latestIncomingUserToUserPayemnts__: _[UserOperations](#UserOperations)_ + ### LndMetrics - __nodes__: ARRAY of: _[LndNodeMetrics](#LndNodeMetrics)_ -### UsersInfo - - __total__: _number_ - - __no_balance__: _number_ - - __negative_balance__: _number_ - - __always_been_inactive__: _number_ - - __balance_avg__: _number_ - - __balance_median__: _number_ +### GetAppUserLNURLInfoRequest + - __user_identifier__: _string_ + - __base_url_override__: _string_ -### NewInvoiceRequest - - __amountSats__: _number_ - - __memo__: _string_ +### PayInvoiceRequest + - __invoice__: _string_ + - __amount__: _number_ + +### UserOperation + - __paidAtUnix__: _number_ + - __type__: _[UserOperationType](#UserOperationType)_ + - __inbound__: _boolean_ + - __amount__: _number_ + - __identifier__: _string_ + - __operationId__: _string_ + - __service_fee__: _number_ + - __network_fee__: _number_ + - __confirmed__: _boolean_ + +### EncryptionExchangeRequest + - __publicKey__: _string_ + - __deviceId__: _string_ + +### AddAppInvoiceRequest + - __payer_identifier__: _string_ + - __http_callback_url__: _string_ + - __invoice_req__: _[NewInvoiceRequest](#NewInvoiceRequest)_ ### GetUserOperationsRequest - __latestIncomingInvoice__: _number_ @@ -509,39 +567,20 @@ The nostr server will send back a message response, and inside the body there wi - __latestIncomingUserToUserPayment__: _number_ - __latestOutgoingUserToUserPayment__: _number_ -### UserOperations - - __fromIndex__: _number_ - - __toIndex__: _number_ - - __operations__: ARRAY of: _[UserOperation](#UserOperation)_ +### UsersInfo + - __total__: _number_ + - __no_balance__: _number_ + - __negative_balance__: _number_ + - __always_been_inactive__: _number_ + - __balance_avg__: _number_ + - __balance_median__: _number_ -### RelaysMigration - - __relays__: ARRAY of: _string_ - -### GetAppUserRequest - - __user_identifier__: _string_ - -### PayAddressRequest - - __address__: _string_ - - __amoutSats__: _number_ - - __satsPerVByte__: _number_ - -### AuthApp - - __app__: _[Application](#Application)_ - - __auth_token__: _string_ - -### SetMockAppUserBalanceRequest - - __user_identifier__: _string_ +### SendAppUserToAppPaymentRequest + - __from_user_identifier__: _string_ - __amount__: _number_ -### NewInvoiceResponse - - __invoice__: _string_ - -### OpenChannelResponse - - __channelId__: _string_ - -### EncryptionExchangeRequest - - __publicKey__: _string_ - - __deviceId__: _string_ +### DecodeInvoiceResponse + - __amount__: _number_ ### RoutingEvent - __incoming_channel_id__: _number_ @@ -557,25 +596,11 @@ The nostr server will send back a message response, and inside the body there wi - __offchain__: _boolean_ - __forward_fail_event__: _boolean_ -### OpenChannelRequest - - __destination__: _string_ - - __fundingAmount__: _number_ - - __pushAmount__: _number_ - - __closeAddress__: _string_ +### LndGetInfoRequest + - __nodeId__: _number_ -### LndMetricsRequest - - __from_unix__: _number_ *this field is optional - - __to_unix__: _number_ *this field is optional - -### Application - - __name__: _string_ - - __id__: _string_ - - __balance__: _number_ - - __npub__: _string_ - -### SendAppUserToAppPaymentRequest - - __from_user_identifier__: _string_ - - __amount__: _number_ +### NewAddressResponse + - __address__: _string_ ### LnurlPayInfoResponse - __tag__: _string_ @@ -586,43 +611,102 @@ The nostr server will send back a message response, and inside the body there wi - __allowsNostr__: _boolean_ - __nostrPubkey__: _string_ -### MigrationUpdate - - __closure__: _[ClosureMigration](#ClosureMigration)_ *this field is optional - - __relays__: _[RelaysMigration](#RelaysMigration)_ *this field is optional +### Product + - __id__: _string_ + - __name__: _string_ + - __price_sats__: _number_ + +### LndGetInfoResponse + - __alias__: _string_ + +### AppUser + - __identifier__: _string_ + - __info__: _[UserInfo](#UserInfo)_ + - __max_withdrawable__: _number_ + +### UserInfo + - __userId__: _string_ + - __balance__: _number_ + - __max_withdrawable__: _number_ + +### OpenChannelResponse + - __channelId__: _string_ + +### AddProductRequest + - __name__: _string_ + - __price_sats__: _number_ + +### AppsMetricsRequest + - __from_unix__: _number_ *this field is optional + - __to_unix__: _number_ *this field is optional + - __include_operations__: _boolean_ *this field is optional + +### SetMockInvoiceAsPaidRequest + - __invoice__: _string_ + - __amount__: _number_ + +### NewInvoiceResponse + - __invoice__: _string_ + +### LiveUserOperation + - __operation__: _[UserOperation](#UserOperation)_ ### ClosureMigration - __closes_at_unix__: _number_ +### UsageMetrics + - __metrics__: ARRAY of: _[UsageMetric](#UsageMetric)_ + +### ChainBalanceEvent + - __block_height__: _number_ + - __confirmed_balance__: _number_ + - __unconfirmed_balance__: _number_ + - __total_balance__: _number_ + +### NewInvoiceRequest + - __amountSats__: _number_ + - __memo__: _string_ + +### PayAppUserInvoiceRequest + - __user_identifier__: _string_ + - __invoice__: _string_ + - __amount__: _number_ + +### SendAppUserToAppUserPaymentRequest + - __from_user_identifier__: _string_ + - __to_user_identifier__: _string_ + - __amount__: _number_ + +### AddAppRequest + - __name__: _string_ + - __allow_user_creation__: _boolean_ + ### AddAppUserInvoiceRequest - __receiver_identifier__: _string_ - __payer_identifier__: _string_ - __http_callback_url__: _string_ - __invoice_req__: _[NewInvoiceRequest](#NewInvoiceRequest)_ -### DecodeInvoiceRequest - - __invoice__: _string_ +### GetAppUserRequest + - __user_identifier__: _string_ -### GetUserOperationsResponse - - __latestOutgoingInvoiceOperations__: _[UserOperations](#UserOperations)_ - - __latestIncomingInvoiceOperations__: _[UserOperations](#UserOperations)_ - - __latestOutgoingTxOperations__: _[UserOperations](#UserOperations)_ - - __latestIncomingTxOperations__: _[UserOperations](#UserOperations)_ - - __latestOutgoingUserToUserPayemnts__: _[UserOperations](#UserOperations)_ - - __latestIncomingUserToUserPayemnts__: _[UserOperations](#UserOperations)_ +### AppsMetrics + - __apps__: ARRAY of: _[AppMetrics](#AppMetrics)_ -### LiveUserOperation - - __operation__: _[UserOperation](#UserOperation)_ +### HandleLnurlPayResponse + - __pr__: _string_ + - __routes__: ARRAY of: _[Empty](#Empty)_ -### UsageMetrics - - __metrics__: ARRAY of: _[UsageMetric](#UsageMetric)_ - -### AuthAppRequest - - __name__: _string_ - - __allow_user_creation__: _boolean_ *this field is optional - -### DecodeInvoiceResponse +### SetMockAppBalanceRequest - __amount__: _number_ +### PayInvoiceResponse + - __preimage__: _string_ + - __amount_paid__: _number_ + - __operation_id__: _string_ + - __service_fee__: _number_ + - __network_fee__: _number_ + ### LnurlWithdrawInfoResponse - __tag__: _string_ - __callback__: _string_ @@ -633,49 +717,9 @@ The nostr server will send back a message response, and inside the body there wi - __balanceCheck__: _string_ - __payLink__: _string_ -### AddAppRequest - - __name__: _string_ - - __allow_user_creation__: _boolean_ - -### AddProductRequest - - __name__: _string_ - - __price_sats__: _number_ - -### NewAddressRequest - - __addressType__: _[AddressType](#AddressType)_ - -### UserInfo - - __userId__: _string_ - - __balance__: _number_ - - __max_withdrawable__: _number_ - -### SendAppUserToAppUserPaymentRequest - - __from_user_identifier__: _string_ - - __to_user_identifier__: _string_ - - __amount__: _number_ - -### UserOperation - - __paidAtUnix__: _number_ - - __type__: _[UserOperationType](#UserOperationType)_ - - __inbound__: _boolean_ - - __amount__: _number_ - - __identifier__: _string_ - - __operationId__: _string_ - - __service_fee__: _number_ - - __network_fee__: _number_ - - __confirmed__: _boolean_ - -### AppMetrics - - __app__: _[Application](#Application)_ - - __users__: _[UsersInfo](#UsersInfo)_ - - __total_received__: _number_ - - __total_spent__: _number_ - - __total_available__: _number_ - - __unpaid_invoices__: _number_ - - __operations__: ARRAY of: _[UserOperation](#UserOperation)_ - -### AppsMetrics - - __apps__: ARRAY of: _[AppMetrics](#AppMetrics)_ +### LndMetricsRequest + - __from_unix__: _number_ *this field is optional + - __to_unix__: _number_ *this field is optional ### ChannelBalanceEvent - __block_height__: _number_ @@ -683,53 +727,9 @@ The nostr server will send back a message response, and inside the body there wi - __local_balance_sats__: _number_ - __remote_balance_sats__: _number_ -### AddAppInvoiceRequest - - __payer_identifier__: _string_ - - __http_callback_url__: _string_ - - __invoice_req__: _[NewInvoiceRequest](#NewInvoiceRequest)_ - -### PayAppUserInvoiceRequest - - __user_identifier__: _string_ - - __invoice__: _string_ - - __amount__: _number_ - -### LndGetInfoRequest - - __nodeId__: _number_ - -### AddAppUserRequest - - __identifier__: _string_ - - __fail_if_exists__: _boolean_ - - __balance__: _number_ - -### GetAppUserLNURLInfoRequest - - __user_identifier__: _string_ - - __base_url_override__: _string_ - -### SetMockAppBalanceRequest - - __amount__: _number_ - -### NewAddressResponse - - __address__: _string_ - -### LndNodeMetrics - - __channels_balance_events__: ARRAY of: _[ChannelBalanceEvent](#ChannelBalanceEvent)_ - - __chain_balance_events__: ARRAY of: _[ChainBalanceEvent](#ChainBalanceEvent)_ - - __routing_events__: ARRAY of: _[RoutingEvent](#RoutingEvent)_ - -### LndGetInfoResponse - - __alias__: _string_ - -### PayInvoiceRequest - - __invoice__: _string_ - - __amount__: _number_ - -### LnurlLinkResponse - - __lnurl__: _string_ - - __k1__: _string_ - -### HandleLnurlPayResponse - - __pr__: _string_ - - __routes__: ARRAY of: _[Empty](#Empty)_ +### AuthApp + - __app__: _[Application](#Application)_ + - __auth_token__: _string_ ## Enums ### The enumerators used in the messages diff --git a/proto/autogenerated/debug.txt b/proto/autogenerated/debug.txt index 57246dc4..3ddce53d 100644 --- a/proto/autogenerated/debug.txt +++ b/proto/autogenerated/debug.txt @@ -1,5 +1,5 @@ ([]*main.Method) (len=41 cap=64) { - (*main.Method)(0xc0002f6730)({ + (*main.Method)(0xc0000761e0)({ 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)(0xc00006c7e0)({ - authType: (*main.supportedAuth)(0xc0004efec0)({ + opts: (*main.methodOptions)(0xc00006d380)({ + authType: (*main.supportedAuth)(0xc000371e90)({ id: (string) (len=5) "admin", name: (string) (len=5) "Admin", context: (map[string]string) (len=1) { @@ -28,7 +28,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f68c0)({ + (*main.Method)(0xc000076280)({ 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)(0xc00006c960)({ - authType: (*main.supportedAuth)(0xc0004eff50)({ + opts: (*main.methodOptions)(0xc00006d500)({ + authType: (*main.supportedAuth)(0xc000371f20)({ id: (string) (len=5) "admin", name: (string) (len=5) "Admin", context: (map[string]string) (len=1) { @@ -57,7 +57,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6960)({ + (*main.Method)(0xc000076320)({ 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)(0xc00006cae0)({ - authType: (*main.supportedAuth)(0xc0004f6000)({ + opts: (*main.methodOptions)(0xc00006d680)({ + authType: (*main.supportedAuth)(0xc000371fb0)({ id: (string) (len=5) "admin", name: (string) (len=5) "Admin", context: (map[string]string) (len=1) { @@ -86,7 +86,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6a00)({ + (*main.Method)(0xc0000763c0)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -96,8 +96,8 @@ name: (string) (len=12) "UsageMetrics", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00006cc60)({ - authType: (*main.supportedAuth)(0xc0004f6090)({ + opts: (*main.methodOptions)(0xc00006d800)({ + authType: (*main.supportedAuth)(0xc00040a060)({ id: (string) (len=7) "metrics", name: (string) (len=7) "Metrics", context: (map[string]string) (len=1) { @@ -115,7 +115,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6aa0)({ + (*main.Method)(0xc000076460)({ in: (main.MethodMessage) { name: (string) (len=18) "AppsMetricsRequest", hasZeroFields: (bool) false @@ -125,8 +125,8 @@ name: (string) (len=11) "AppsMetrics", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00006cde0)({ - authType: (*main.supportedAuth)(0xc0004f6120)({ + opts: (*main.methodOptions)(0xc00006d980)({ + authType: (*main.supportedAuth)(0xc00040a0f0)({ id: (string) (len=7) "metrics", name: (string) (len=7) "Metrics", context: (map[string]string) (len=1) { @@ -144,7 +144,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6b40)({ + (*main.Method)(0xc000076500)({ in: (main.MethodMessage) { name: (string) (len=17) "LndMetricsRequest", hasZeroFields: (bool) false @@ -154,8 +154,8 @@ name: (string) (len=10) "LndMetrics", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00006cf60)({ - authType: (*main.supportedAuth)(0xc0004f61b0)({ + opts: (*main.methodOptions)(0xc00006db00)({ + authType: (*main.supportedAuth)(0xc00040a180)({ id: (string) (len=7) "metrics", name: (string) (len=7) "Metrics", context: (map[string]string) (len=1) { @@ -173,7 +173,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6b90)({ + (*main.Method)(0xc000076550)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -183,8 +183,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc00006d0e0)({ - authType: (*main.supportedAuth)(0xc0004f6240)({ + opts: (*main.methodOptions)(0xc00006dc80)({ + authType: (*main.supportedAuth)(0xc00040a210)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", context: (map[string]string) { @@ -201,7 +201,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6be0)({ + (*main.Method)(0xc0000765a0)({ in: (main.MethodMessage) { name: (string) (len=25) "EncryptionExchangeRequest", hasZeroFields: (bool) false @@ -211,8 +211,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc00006d260)({ - authType: (*main.supportedAuth)(0xc0004f6300)({ + opts: (*main.methodOptions)(0xc00006de00)({ + authType: (*main.supportedAuth)(0xc00040a2d0)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", context: (map[string]string) { @@ -229,7 +229,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6c30)({ + (*main.Method)(0xc0000765f0)({ in: (main.MethodMessage) { name: (string) (len=27) "SetMockInvoiceAsPaidRequest", hasZeroFields: (bool) false @@ -239,8 +239,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc00006d440)({ - authType: (*main.supportedAuth)(0xc0004f6390)({ + opts: (*main.methodOptions)(0xc00033b440)({ + authType: (*main.supportedAuth)(0xc00040a360)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", context: (map[string]string) { @@ -257,7 +257,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6cd0)({ + (*main.Method)(0xc000076690)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -267,8 +267,8 @@ name: (string) (len=25) "LnurlWithdrawInfoResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00006d7a0)({ - authType: (*main.supportedAuth)(0xc0004f64e0)({ + opts: (*main.methodOptions)(0xc00033b7a0)({ + authType: (*main.supportedAuth)(0xc00040a4b0)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", context: (map[string]string) { @@ -287,7 +287,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6d70)({ + (*main.Method)(0xc000076730)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -297,8 +297,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc00006db00)({ - authType: (*main.supportedAuth)(0xc0004f6630)({ + opts: (*main.methodOptions)(0xc00033bb00)({ + authType: (*main.supportedAuth)(0xc00040a600)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", context: (map[string]string) { @@ -318,7 +318,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6e10)({ + (*main.Method)(0xc0000767d0)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -328,8 +328,8 @@ name: (string) (len=20) "LnurlPayInfoResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00006de60)({ - authType: (*main.supportedAuth)(0xc0004f6750)({ + opts: (*main.methodOptions)(0xc00033be60)({ + authType: (*main.supportedAuth)(0xc00040a720)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", context: (map[string]string) { @@ -348,7 +348,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6eb0)({ + (*main.Method)(0xc000076870)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -358,8 +358,8 @@ name: (string) (len=22) "HandleLnurlPayResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00009e720)({ - authType: (*main.supportedAuth)(0xc0004f68a0)({ + opts: (*main.methodOptions)(0xc00009c720)({ + authType: (*main.supportedAuth)(0xc00040a870)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", context: (map[string]string) { @@ -381,7 +381,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6f00)({ + (*main.Method)(0xc0000768c0)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -391,8 +391,8 @@ name: (string) (len=20) "LnurlPayInfoResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00009e8a0)({ - authType: (*main.supportedAuth)(0xc0004f6930)({ + opts: (*main.methodOptions)(0xc00009c8a0)({ + authType: (*main.supportedAuth)(0xc00040a900)({ id: (string) (len=5) "guest", name: (string) (len=5) "Guest", context: (map[string]string) { @@ -411,7 +411,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6f50)({ + (*main.Method)(0xc000076910)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -421,8 +421,8 @@ name: (string) (len=11) "Application", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00009ea20)({ - authType: (*main.supportedAuth)(0xc0004f69c0)({ + opts: (*main.methodOptions)(0xc00009ca20)({ + authType: (*main.supportedAuth)(0xc00040a990)({ id: (string) (len=3) "app", name: (string) (len=3) "App", context: (map[string]string) (len=1) { @@ -440,7 +440,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f6ff0)({ + (*main.Method)(0xc0000769b0)({ in: (main.MethodMessage) { name: (string) (len=17) "AddAppUserRequest", hasZeroFields: (bool) false @@ -450,8 +450,8 @@ name: (string) (len=7) "AppUser", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00009eba0)({ - authType: (*main.supportedAuth)(0xc0004f6a50)({ + opts: (*main.methodOptions)(0xc00009cba0)({ + authType: (*main.supportedAuth)(0xc00040aa20)({ id: (string) (len=3) "app", name: (string) (len=3) "App", context: (map[string]string) (len=1) { @@ -469,7 +469,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7090)({ + (*main.Method)(0xc000076a50)({ in: (main.MethodMessage) { name: (string) (len=20) "AddAppInvoiceRequest", hasZeroFields: (bool) false @@ -479,8 +479,8 @@ name: (string) (len=18) "NewInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00009ed20)({ - authType: (*main.supportedAuth)(0xc0004f6ae0)({ + opts: (*main.methodOptions)(0xc00009cd20)({ + authType: (*main.supportedAuth)(0xc00040aab0)({ id: (string) (len=3) "app", name: (string) (len=3) "App", context: (map[string]string) (len=1) { @@ -498,7 +498,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f70e0)({ + (*main.Method)(0xc000076aa0)({ in: (main.MethodMessage) { name: (string) (len=24) "AddAppUserInvoiceRequest", hasZeroFields: (bool) false @@ -508,8 +508,8 @@ name: (string) (len=18) "NewInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00009ef60)({ - authType: (*main.supportedAuth)(0xc0004f6b70)({ + opts: (*main.methodOptions)(0xc00009cf60)({ + authType: (*main.supportedAuth)(0xc00040ab40)({ id: (string) (len=3) "app", name: (string) (len=3) "App", context: (map[string]string) (len=1) { @@ -527,7 +527,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7180)({ + (*main.Method)(0xc000076b40)({ in: (main.MethodMessage) { name: (string) (len=17) "GetAppUserRequest", hasZeroFields: (bool) false @@ -537,8 +537,8 @@ name: (string) (len=7) "AppUser", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00009f140)({ - authType: (*main.supportedAuth)(0xc0004f6c00)({ + opts: (*main.methodOptions)(0xc00009d140)({ + authType: (*main.supportedAuth)(0xc00040abd0)({ id: (string) (len=3) "app", name: (string) (len=3) "App", context: (map[string]string) (len=1) { @@ -556,7 +556,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7220)({ + (*main.Method)(0xc000076be0)({ in: (main.MethodMessage) { name: (string) (len=24) "PayAppUserInvoiceRequest", hasZeroFields: (bool) false @@ -566,8 +566,8 @@ name: (string) (len=18) "PayInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00009f2c0)({ - authType: (*main.supportedAuth)(0xc0004f6c90)({ + opts: (*main.methodOptions)(0xc00009d2c0)({ + authType: (*main.supportedAuth)(0xc00040ac60)({ id: (string) (len=3) "app", name: (string) (len=3) "App", context: (map[string]string) (len=1) { @@ -585,7 +585,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7270)({ + (*main.Method)(0xc000076c30)({ in: (main.MethodMessage) { name: (string) (len=34) "SendAppUserToAppUserPaymentRequest", hasZeroFields: (bool) false @@ -595,8 +595,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc000504000)({ - authType: (*main.supportedAuth)(0xc0004f6d20)({ + opts: (*main.methodOptions)(0xc000412000)({ + authType: (*main.supportedAuth)(0xc00040acf0)({ id: (string) (len=3) "app", name: (string) (len=3) "App", context: (map[string]string) (len=1) { @@ -614,7 +614,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7310)({ + (*main.Method)(0xc000076cd0)({ in: (main.MethodMessage) { name: (string) (len=30) "SendAppUserToAppPaymentRequest", hasZeroFields: (bool) false @@ -624,8 +624,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc000504180)({ - authType: (*main.supportedAuth)(0xc0004f6db0)({ + opts: (*main.methodOptions)(0xc000412180)({ + authType: (*main.supportedAuth)(0xc00040ad80)({ id: (string) (len=3) "app", name: (string) (len=3) "App", context: (map[string]string) (len=1) { @@ -643,7 +643,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7360)({ + (*main.Method)(0xc000076d20)({ in: (main.MethodMessage) { name: (string) (len=26) "GetAppUserLNURLInfoRequest", hasZeroFields: (bool) false @@ -653,8 +653,8 @@ name: (string) (len=20) "LnurlPayInfoResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000504300)({ - authType: (*main.supportedAuth)(0xc0004f6e40)({ + opts: (*main.methodOptions)(0xc000412300)({ + authType: (*main.supportedAuth)(0xc00040ae10)({ id: (string) (len=3) "app", name: (string) (len=3) "App", context: (map[string]string) (len=1) { @@ -672,7 +672,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f73b0)({ + (*main.Method)(0xc000076d70)({ in: (main.MethodMessage) { name: (string) (len=28) "SetMockAppUserBalanceRequest", hasZeroFields: (bool) false @@ -682,8 +682,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc000504480)({ - authType: (*main.supportedAuth)(0xc0004f6ed0)({ + opts: (*main.methodOptions)(0xc000412480)({ + authType: (*main.supportedAuth)(0xc00040aea0)({ id: (string) (len=3) "app", name: (string) (len=3) "App", context: (map[string]string) (len=1) { @@ -701,7 +701,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7400)({ + (*main.Method)(0xc000076dc0)({ in: (main.MethodMessage) { name: (string) (len=24) "SetMockAppBalanceRequest", hasZeroFields: (bool) false @@ -711,8 +711,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc000504660)({ - authType: (*main.supportedAuth)(0xc0004f6f60)({ + opts: (*main.methodOptions)(0xc000412660)({ + authType: (*main.supportedAuth)(0xc00040af30)({ id: (string) (len=3) "app", name: (string) (len=3) "App", context: (map[string]string) (len=1) { @@ -730,7 +730,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7450)({ + (*main.Method)(0xc000076e10)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -740,14 +740,14 @@ name: (string) (len=8) "UserInfo", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000504840)({ - authType: (*main.supportedAuth)(0xc0004f7020)({ + opts: (*main.methodOptions)(0xc000412840)({ + authType: (*main.supportedAuth)(0xc00040aff0)({ id: (string) (len=4) "user", name: (string) (len=4) "User", 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", @@ -761,7 +761,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f74f0)({ + (*main.Method)(0xc000076eb0)({ in: (main.MethodMessage) { name: (string) (len=17) "AddProductRequest", hasZeroFields: (bool) false @@ -771,8 +771,8 @@ name: (string) (len=7) "Product", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000504a20)({ - authType: (*main.supportedAuth)(0xc0004f70b0)({ + opts: (*main.methodOptions)(0xc000412a20)({ + authType: (*main.supportedAuth)(0xc00040b080)({ id: (string) (len=4) "user", name: (string) (len=4) "User", context: (map[string]string) (len=3) { @@ -792,7 +792,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7540)({ + (*main.Method)(0xc000076f00)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -802,14 +802,14 @@ name: (string) (len=18) "NewInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000504ea0)({ - authType: (*main.supportedAuth)(0xc0004f71d0)({ + opts: (*main.methodOptions)(0xc000412d20)({ + authType: (*main.supportedAuth)(0xc00040b1a0)({ id: (string) (len=4) "user", name: (string) (len=4) "User", 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=3) "get", @@ -825,7 +825,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7590)({ + (*main.Method)(0xc000076f50)({ in: (main.MethodMessage) { name: (string) (len=24) "GetUserOperationsRequest", hasZeroFields: (bool) false @@ -835,8 +835,8 @@ name: (string) (len=25) "GetUserOperationsResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000505080)({ - authType: (*main.supportedAuth)(0xc0004f7260)({ + opts: (*main.methodOptions)(0xc000412f00)({ + authType: (*main.supportedAuth)(0xc00040b230)({ id: (string) (len=4) "user", name: (string) (len=4) "User", context: (map[string]string) (len=3) { @@ -856,7 +856,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7630)({ + (*main.Method)(0xc000076ff0)({ in: (main.MethodMessage) { name: (string) (len=17) "NewAddressRequest", hasZeroFields: (bool) false @@ -866,8 +866,8 @@ name: (string) (len=18) "NewAddressResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000505260)({ - authType: (*main.supportedAuth)(0xc0004f72f0)({ + opts: (*main.methodOptions)(0xc0004130e0)({ + authType: (*main.supportedAuth)(0xc00040b2c0)({ id: (string) (len=4) "user", name: (string) (len=4) "User", context: (map[string]string) (len=3) { @@ -887,7 +887,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f76d0)({ + (*main.Method)(0xc000077090)({ in: (main.MethodMessage) { name: (string) (len=17) "PayAddressRequest", hasZeroFields: (bool) false @@ -897,14 +897,14 @@ name: (string) (len=18) "PayAddressResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000505440)({ - authType: (*main.supportedAuth)(0xc0004f7380)({ + opts: (*main.methodOptions)(0xc0004132c0)({ + authType: (*main.supportedAuth)(0xc00040b350)({ id: (string) (len=4) "user", name: (string) (len=4) "User", 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=4) "post", @@ -918,7 +918,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7770)({ + (*main.Method)(0xc000077130)({ in: (main.MethodMessage) { name: (string) (len=17) "NewInvoiceRequest", hasZeroFields: (bool) false @@ -928,8 +928,8 @@ name: (string) (len=18) "NewInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000505620)({ - authType: (*main.supportedAuth)(0xc0004f7410)({ + opts: (*main.methodOptions)(0xc0004134a0)({ + authType: (*main.supportedAuth)(0xc00040b3e0)({ id: (string) (len=4) "user", name: (string) (len=4) "User", context: (map[string]string) (len=3) { @@ -949,7 +949,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7810)({ + (*main.Method)(0xc0000771d0)({ in: (main.MethodMessage) { name: (string) (len=20) "DecodeInvoiceRequest", hasZeroFields: (bool) false @@ -959,8 +959,8 @@ name: (string) (len=21) "DecodeInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000505800)({ - authType: (*main.supportedAuth)(0xc0004f74a0)({ + opts: (*main.methodOptions)(0xc000413680)({ + authType: (*main.supportedAuth)(0xc00040b470)({ id: (string) (len=4) "user", name: (string) (len=4) "User", context: (map[string]string) (len=3) { @@ -980,7 +980,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f78b0)({ + (*main.Method)(0xc000077270)({ in: (main.MethodMessage) { name: (string) (len=17) "PayInvoiceRequest", hasZeroFields: (bool) false @@ -990,14 +990,14 @@ name: (string) (len=18) "PayInvoiceResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc0005059e0)({ - authType: (*main.supportedAuth)(0xc0004f7530)({ + opts: (*main.methodOptions)(0xc000413860)({ + authType: (*main.supportedAuth)(0xc00040b500)({ id: (string) (len=4) "user", name: (string) (len=4) "User", 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", @@ -1011,7 +1011,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7950)({ + (*main.Method)(0xc000077310)({ in: (main.MethodMessage) { name: (string) (len=18) "OpenChannelRequest", hasZeroFields: (bool) false @@ -1021,8 +1021,8 @@ name: (string) (len=19) "OpenChannelResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000505bc0)({ - authType: (*main.supportedAuth)(0xc0004f75c0)({ + opts: (*main.methodOptions)(0xc000413a40)({ + authType: (*main.supportedAuth)(0xc00040b590)({ id: (string) (len=4) "user", name: (string) (len=4) "User", context: (map[string]string) (len=3) { @@ -1042,7 +1042,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f79f0)({ + (*main.Method)(0xc0000773b0)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -1052,14 +1052,14 @@ name: (string) (len=17) "LnurlLinkResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000505da0)({ - authType: (*main.supportedAuth)(0xc0004f7650)({ + opts: (*main.methodOptions)(0xc000413c20)({ + authType: (*main.supportedAuth)(0xc00040b620)({ id: (string) (len=4) "user", name: (string) (len=4) "User", 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", @@ -1073,7 +1073,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7a90)({ + (*main.Method)(0xc000077450)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -1083,8 +1083,8 @@ name: (string) (len=17) "LnurlLinkResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc000505f80)({ - authType: (*main.supportedAuth)(0xc0004f76e0)({ + opts: (*main.methodOptions)(0xc000413e00)({ + authType: (*main.supportedAuth)(0xc00040b6b0)({ id: (string) (len=4) "user", name: (string) (len=4) "User", context: (map[string]string) (len=3) { @@ -1104,7 +1104,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7b30)({ + (*main.Method)(0xc0000774f0)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -1114,8 +1114,8 @@ name: (string) (len=17) "LnurlLinkResponse", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00050a180)({ - authType: (*main.supportedAuth)(0xc0004f7770)({ + opts: (*main.methodOptions)(0xc0004d0180)({ + authType: (*main.supportedAuth)(0xc00040b740)({ id: (string) (len=4) "user", name: (string) (len=4) "User", context: (map[string]string) (len=3) { @@ -1135,7 +1135,7 @@ }), serverStream: (bool) false }), - (*main.Method)(0xc0002f7bd0)({ + (*main.Method)(0xc000077590)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -1145,8 +1145,8 @@ name: (string) (len=17) "LiveUserOperation", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00050a360)({ - authType: (*main.supportedAuth)(0xc0004f7800)({ + opts: (*main.methodOptions)(0xc0004d0360)({ + authType: (*main.supportedAuth)(0xc00040b7d0)({ id: (string) (len=4) "user", name: (string) (len=4) "User", context: (map[string]string) (len=3) { @@ -1166,7 +1166,7 @@ }), serverStream: (bool) true }), - (*main.Method)(0xc0002f7c70)({ + (*main.Method)(0xc000077630)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -1176,8 +1176,8 @@ name: (string) (len=15) "MigrationUpdate", hasZeroFields: (bool) false }, - opts: (*main.methodOptions)(0xc00050a540)({ - authType: (*main.supportedAuth)(0xc0004f7890)({ + opts: (*main.methodOptions)(0xc0004d0540)({ + authType: (*main.supportedAuth)(0xc00040b860)({ id: (string) (len=4) "user", name: (string) (len=4) "User", context: (map[string]string) (len=3) { @@ -1197,7 +1197,7 @@ }), serverStream: (bool) true }), - (*main.Method)(0xc0002f7cc0)({ + (*main.Method)(0xc000077680)({ in: (main.MethodMessage) { name: (string) (len=5) "Empty", hasZeroFields: (bool) true @@ -1207,8 +1207,8 @@ name: (string) (len=5) "Empty", hasZeroFields: (bool) true }, - opts: (*main.methodOptions)(0xc00050a780)({ - authType: (*main.supportedAuth)(0xc0004f7950)({ + opts: (*main.methodOptions)(0xc0004d0780)({ + authType: (*main.supportedAuth)(0xc00040b920)({ id: (string) (len=4) "user", name: (string) (len=4) "User", context: (map[string]string) (len=3) { @@ -1231,7 +1231,7 @@ } ([]*main.Enum) (len=2 cap=2) { - (*main.Enum)(0xc0004ef590)({ + (*main.Enum)(0xc000371560)({ name: (string) (len=11) "AddressType", values: ([]main.EnumValue) (len=3 cap=4) { (main.EnumValue) { @@ -1248,7 +1248,7 @@ } } }), - (*main.Enum)(0xc0004ef5f0)({ + (*main.Enum)(0xc0003715c0)({ name: (string) (len=17) "UserOperationType", values: ([]main.EnumValue) (len=6 cap=8) { (main.EnumValue) { @@ -1280,686 +1280,11 @@ } (map[string]*main.Message) (len=60) { - (string) (len=12) "UsageMetrics": (*main.Message)(0xc000338c00)({ - fullName: (string) (len=12) "UsageMetrics", - name: (string) (len=12) "UsageMetrics", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc00038b5c0)({ - name: (string) (len=7) "metrics", - kind: (string) (len=11) "UsageMetric", - isMap: (bool) false, - isArray: (bool) true, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }) - } - }), - (string) (len=14) "AuthAppRequest": (*main.Message)(0xc000339080)({ - fullName: (string) (len=14) "AuthAppRequest", - name: (string) (len=14) "AuthAppRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc00038bf20)({ - 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)(0xc00038bf50)({ - 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=21) "DecodeInvoiceResponse": (*main.Message)(0xc0003395c0)({ - fullName: (string) (len=21) "DecodeInvoiceResponse", - name: (string) (len=21) "DecodeInvoiceResponse", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004ee840)({ - 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) "LnurlWithdrawInfoResponse": (*main.Message)(0xc0003397c0)({ - fullName: (string) (len=25) "LnurlWithdrawInfoResponse", - name: (string) (len=25) "LnurlWithdrawInfoResponse", - fields: ([]*main.Field) (len=8 cap=8) { - (*main.Field)(0xc0004eeb10)({ - 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)(0xc0004eeb40)({ - 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)(0xc0004eeb70)({ - 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)(0xc0004eeba0)({ - 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)(0xc0004eebd0)({ - 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)(0xc0004eec00)({ - 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)(0xc0004eec30)({ - 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)(0xc0004eec60)({ - 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=13) "AddAppRequest": (*main.Message)(0xc000339040)({ - fullName: (string) (len=13) "AddAppRequest", - name: (string) (len=13) "AddAppRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc00038bec0)({ - 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)(0xc00038bef0)({ - 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) "AddProductRequest": (*main.Message)(0xc000339ac0)({ - fullName: (string) (len=17) "AddProductRequest", - name: (string) (len=17) "AddProductRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004ef350)({ - 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)(0xc0004ef380)({ - 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=17) "NewAddressRequest": (*main.Message)(0xc000339400)({ - fullName: (string) (len=17) "NewAddressRequest", - name: (string) (len=17) "NewAddressRequest", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004ee5d0)({ - 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=8) "UserInfo": (*main.Message)(0xc0003398c0)({ - fullName: (string) (len=8) "UserInfo", - name: (string) (len=8) "UserInfo", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc0004eee40)({ - 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)(0xc0004eee70)({ - 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 - }), - (*main.Field)(0xc0004eeea0)({ - 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=34) "SendAppUserToAppUserPaymentRequest": (*main.Message)(0xc0003392c0)({ - fullName: (string) (len=34) "SendAppUserToAppUserPaymentRequest", - name: (string) (len=34) "SendAppUserToAppUserPaymentRequest", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc0004ee3f0)({ - 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)(0xc0004ee420)({ - 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)(0xc0004ee450)({ - 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) "UserOperation": (*main.Message)(0xc0003399c0)({ - fullName: (string) (len=13) "UserOperation", - name: (string) (len=13) "UserOperation", - fields: ([]*main.Field) (len=9 cap=16) { - (*main.Field)(0xc0004eeff0)({ - 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)(0xc0004ef020)({ - 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)(0xc0004ef050)({ - 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)(0xc0004ef080)({ - 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 - }), - (*main.Field)(0xc0004ef0b0)({ - 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)(0xc0004ef0e0)({ - name: (string) (len=11) "operationId", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004ef110)({ - name: (string) (len=11) "service_fee", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004ef140)({ - name: (string) (len=11) "network_fee", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004ef170)({ - name: (string) (len=9) "confirmed", - kind: (string) (len=4) "bool", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=10) "AppMetrics": (*main.Message)(0xc000338d40)({ - fullName: (string) (len=10) "AppMetrics", - name: (string) (len=10) "AppMetrics", - fields: ([]*main.Field) (len=7 cap=8) { - (*main.Field)(0xc00038b7a0)({ - 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)(0xc00038b7d0)({ - name: (string) (len=5) "users", - kind: (string) (len=9) "UsersInfo", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b800)({ - name: (string) (len=14) "total_received", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b830)({ - name: (string) (len=11) "total_spent", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b860)({ - name: (string) (len=15) "total_available", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b890)({ - name: (string) (len=15) "unpaid_invoices", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b8c0)({ - 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=11) "AppsMetrics": (*main.Message)(0xc000338d80)({ - fullName: (string) (len=11) "AppsMetrics", - name: (string) (len=11) "AppsMetrics", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc00038b8f0)({ - name: (string) (len=4) "apps", - kind: (string) (len=10) "AppMetrics", - isMap: (bool) false, - isArray: (bool) true, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }) - } - }), - (string) (len=19) "ChannelBalanceEvent": (*main.Message)(0xc000338e80)({ - fullName: (string) (len=19) "ChannelBalanceEvent", - name: (string) (len=19) "ChannelBalanceEvent", - fields: ([]*main.Field) (len=4 cap=4) { - (*main.Field)(0xc00038bbc0)({ - name: (string) (len=12) "block_height", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038bbf0)({ - name: (string) (len=10) "channel_id", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038bc20)({ - name: (string) (len=18) "local_balance_sats", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038bc50)({ - name: (string) (len=19) "remote_balance_sats", - 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)(0xc0003391c0)({ - fullName: (string) (len=20) "AddAppInvoiceRequest", - name: (string) (len=20) "AddAppInvoiceRequest", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc0004ee1e0)({ - 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)(0xc0004ee210)({ - 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)(0xc0004ee240)({ - 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)(0xc000339280)({ - fullName: (string) (len=24) "PayAppUserInvoiceRequest", - name: (string) (len=24) "PayAppUserInvoiceRequest", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc0004ee360)({ - 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)(0xc0004ee390)({ - 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)(0xc0004ee3c0)({ - 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) "LndGetInfoRequest": (*main.Message)(0xc000338f80)({ - fullName: (string) (len=17) "LndGetInfoRequest", - name: (string) (len=17) "LndGetInfoRequest", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc00038be00)({ - name: (string) (len=6) "nodeId", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=17) "AddAppUserRequest": (*main.Message)(0xc000339140)({ - fullName: (string) (len=17) "AddAppUserRequest", - name: (string) (len=17) "AddAppUserRequest", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc0004ee0c0)({ - 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)(0xc0004ee0f0)({ - 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)(0xc0004ee120)({ - 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=26) "GetAppUserLNURLInfoRequest": (*main.Message)(0xc000339340)({ - fullName: (string) (len=26) "GetAppUserLNURLInfoRequest", - name: (string) (len=26) "GetAppUserLNURLInfoRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004ee4e0)({ - 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)(0xc0004ee510)({ - 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)(0xc0003393c0)({ - fullName: (string) (len=24) "SetMockAppBalanceRequest", - name: (string) (len=24) "SetMockAppBalanceRequest", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004ee5a0)({ - 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)(0xc000339440)({ - fullName: (string) (len=18) "NewAddressResponse", - name: (string) (len=18) "NewAddressResponse", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004ee600)({ - 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=14) "LndNodeMetrics": (*main.Message)(0xc000338f00)({ - fullName: (string) (len=14) "LndNodeMetrics", - name: (string) (len=14) "LndNodeMetrics", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc00038bd40)({ - name: (string) (len=23) "channels_balance_events", - kind: (string) (len=19) "ChannelBalanceEvent", - isMap: (bool) false, - isArray: (bool) true, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }), - (*main.Field)(0xc00038bd70)({ - name: (string) (len=20) "chain_balance_events", - kind: (string) (len=17) "ChainBalanceEvent", - isMap: (bool) false, - isArray: (bool) true, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }), - (*main.Field)(0xc00038bda0)({ - name: (string) (len=14) "routing_events", - kind: (string) (len=12) "RoutingEvent", - isMap: (bool) false, - isArray: (bool) true, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }) - } - }), - (string) (len=18) "LndGetInfoResponse": (*main.Message)(0xc000339000)({ + (string) (len=18) "LndGetInfoResponse": (*main.Message)(0xc000492e80)({ fullName: (string) (len=18) "LndGetInfoResponse", name: (string) (len=18) "LndGetInfoResponse", fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc00038be90)({ + (*main.Field)(0xc0001fbe60)({ name: (string) (len=5) "alias", kind: (string) (len=6) "string", isMap: (bool) false, @@ -1970,275 +1295,11 @@ }) } }), - (string) (len=17) "PayInvoiceRequest": (*main.Message)(0xc000339600)({ - fullName: (string) (len=17) "PayInvoiceRequest", - name: (string) (len=17) "PayInvoiceRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004ee870)({ - 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)(0xc0004ee8a0)({ - 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) "LnurlLinkResponse": (*main.Message)(0xc000339740)({ - fullName: (string) (len=17) "LnurlLinkResponse", - name: (string) (len=17) "LnurlLinkResponse", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004eeab0)({ - 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)(0xc0004eeae0)({ - 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=22) "HandleLnurlPayResponse": (*main.Message)(0xc000339880)({ - fullName: (string) (len=22) "HandleLnurlPayResponse", - name: (string) (len=22) "HandleLnurlPayResponse", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004eede0)({ - 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)(0xc0004eee10)({ - 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=18) "AppsMetricsRequest": (*main.Message)(0xc000338c40)({ - fullName: (string) (len=18) "AppsMetricsRequest", - name: (string) (len=18) "AppsMetricsRequest", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc00038b5f0)({ - name: (string) (len=9) "from_unix", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) true - }), - (*main.Field)(0xc00038b620)({ - name: (string) (len=7) "to_unix", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) true - }), - (*main.Field)(0xc00038b650)({ - name: (string) (len=18) "include_operations", - kind: (string) (len=4) "bool", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) true - }) - } - }), - (string) (len=18) "PayAddressResponse": (*main.Message)(0xc0003394c0)({ - fullName: (string) (len=18) "PayAddressResponse", - name: (string) (len=18) "PayAddressResponse", - fields: ([]*main.Field) (len=4 cap=4) { - (*main.Field)(0xc0004ee6c0)({ - 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 - }), - (*main.Field)(0xc0004ee6f0)({ - name: (string) (len=12) "operation_id", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004ee720)({ - name: (string) (len=11) "service_fee", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004ee750)({ - name: (string) (len=11) "network_fee", - 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)(0xc000339680)({ - fullName: (string) (len=18) "PayInvoiceResponse", - name: (string) (len=18) "PayInvoiceResponse", - fields: ([]*main.Field) (len=5 cap=8) { - (*main.Field)(0xc0004ee8d0)({ - 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)(0xc0004ee900)({ - 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 - }), - (*main.Field)(0xc0004ee930)({ - name: (string) (len=12) "operation_id", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004ee960)({ - name: (string) (len=11) "service_fee", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004ee990)({ - name: (string) (len=11) "network_fee", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=17) "ChainBalanceEvent": (*main.Message)(0xc000338ec0)({ - fullName: (string) (len=17) "ChainBalanceEvent", - name: (string) (len=17) "ChainBalanceEvent", - fields: ([]*main.Field) (len=4 cap=4) { - (*main.Field)(0xc00038bc80)({ - name: (string) (len=12) "block_height", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038bcb0)({ - name: (string) (len=17) "confirmed_balance", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038bce0)({ - name: (string) (len=19) "unconfirmed_balance", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038bd10)({ - name: (string) (len=13) "total_balance", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=27) "SetMockInvoiceAsPaidRequest": (*main.Message)(0xc000338fc0)({ - fullName: (string) (len=27) "SetMockInvoiceAsPaidRequest", - name: (string) (len=27) "SetMockInvoiceAsPaidRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc00038be30)({ - 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)(0xc00038be60)({ - 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=7) "AppUser": (*main.Message)(0xc000339180)({ + (string) (len=7) "AppUser": (*main.Message)(0xc000493000)({ fullName: (string) (len=7) "AppUser", name: (string) (len=7) "AppUser", fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc0004ee150)({ + (*main.Field)(0xc000370120)({ name: (string) (len=10) "identifier", kind: (string) (len=6) "string", isMap: (bool) false, @@ -2247,7 +1308,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc0004ee180)({ + (*main.Field)(0xc000370150)({ name: (string) (len=4) "info", kind: (string) (len=8) "UserInfo", isMap: (bool) false, @@ -2256,7 +1317,7 @@ isMessage: (bool) true, isOptional: (bool) false }), - (*main.Field)(0xc0004ee1b0)({ + (*main.Field)(0xc000370180)({ name: (string) (len=16) "max_withdrawable", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -2267,12 +1328,12 @@ }) } }), - (string) (len=7) "Product": (*main.Message)(0xc000339b00)({ - fullName: (string) (len=7) "Product", - name: (string) (len=7) "Product", + (string) (len=8) "UserInfo": (*main.Message)(0xc000493740)({ + fullName: (string) (len=8) "UserInfo", + name: (string) (len=8) "UserInfo", fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc0004ef3b0)({ - name: (string) (len=2) "id", + (*main.Field)(0xc000370e10)({ + name: (string) (len=6) "userId", kind: (string) (len=6) "string", isMap: (bool) false, isArray: (bool) false, @@ -2280,17 +1341,17 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc0004ef3e0)({ - name: (string) (len=4) "name", - kind: (string) (len=6) "string", + (*main.Field)(0xc000370e40)({ + 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 }), - (*main.Field)(0xc0004ef410)({ - name: (string) (len=10) "price_sats", + (*main.Field)(0xc000370e70)({ + name: (string) (len=16) "max_withdrawable", kind: (string) (len=5) "int64", isMap: (bool) false, isArray: (bool) false, @@ -2300,436 +1361,11 @@ }) } }), - (string) (len=25) "GetProductBuyLinkResponse": (*main.Message)(0xc000339b40)({ - fullName: (string) (len=25) "GetProductBuyLinkResponse", - name: (string) (len=25) "GetProductBuyLinkResponse", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004ef440)({ - name: (string) (len=4) "link", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=5) "Empty": (*main.Message)(0xc000338b00)({ - fullName: (string) (len=5) "Empty", - name: (string) (len=5) "Empty", - fields: ([]*main.Field) - }), - (string) (len=11) "UsageMetric": (*main.Message)(0xc000338bc0)({ - fullName: (string) (len=11) "UsageMetric", - name: (string) (len=11) "UsageMetric", - fields: ([]*main.Field) (len=9 cap=16) { - (*main.Field)(0xc00038b410)({ - name: (string) (len=17) "processed_at_nano", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b440)({ - name: (string) (len=14) "parsed_in_nano", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b470)({ - name: (string) (len=12) "auth_in_nano", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b4a0)({ - name: (string) (len=16) "validate_in_nano", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b4d0)({ - name: (string) (len=14) "handle_in_nano", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b500)({ - name: (string) (len=8) "rpc_name", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b530)({ - name: (string) (len=5) "batch", - kind: (string) (len=4) "bool", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b560)({ - name: (string) (len=5) "nostr", - kind: (string) (len=4) "bool", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b590)({ - name: (string) (len=10) "batch_size", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=10) "LndMetrics": (*main.Message)(0xc000338f40)({ - fullName: (string) (len=10) "LndMetrics", - name: (string) (len=10) "LndMetrics", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc00038bdd0)({ - name: (string) (len=5) "nodes", - kind: (string) (len=14) "LndNodeMetrics", - isMap: (bool) false, - isArray: (bool) true, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) false - }) - } - }), - (string) (len=9) "UsersInfo": (*main.Message)(0xc000338cc0)({ - fullName: (string) (len=9) "UsersInfo", - name: (string) (len=9) "UsersInfo", - fields: ([]*main.Field) (len=6 cap=8) { - (*main.Field)(0xc00038b680)({ - name: (string) (len=5) "total", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b6b0)({ - name: (string) (len=10) "no_balance", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b6e0)({ - name: (string) (len=16) "negative_balance", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b710)({ - name: (string) (len=20) "always_been_inactive", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b740)({ - name: (string) (len=11) "balance_avg", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b770)({ - name: (string) (len=14) "balance_median", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=17) "NewInvoiceRequest": (*main.Message)(0xc000339500)({ - fullName: (string) (len=17) "NewInvoiceRequest", - name: (string) (len=17) "NewInvoiceRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004ee780)({ - 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)(0xc0004ee7b0)({ - 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=24) "GetUserOperationsRequest": (*main.Message)(0xc000339940)({ - fullName: (string) (len=24) "GetUserOperationsRequest", - name: (string) (len=24) "GetUserOperationsRequest", - fields: ([]*main.Field) (len=6 cap=8) { - (*main.Field)(0xc0004eeed0)({ - name: (string) (len=21) "latestIncomingInvoice", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004eef00)({ - name: (string) (len=21) "latestOutgoingInvoice", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004eef30)({ - name: (string) (len=16) "latestIncomingTx", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004eef60)({ - name: (string) (len=16) "latestOutgoingTx", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004eef90)({ - name: (string) (len=31) "latestIncomingUserToUserPayment", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004eefc0)({ - name: (string) (len=31) "latestOutgoingUserToUserPayment", - 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)(0xc000339a00)({ - fullName: (string) (len=14) "UserOperations", - name: (string) (len=14) "UserOperations", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc0004ef1a0)({ - 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)(0xc0004ef1d0)({ - 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)(0xc0004ef200)({ - 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=15) "RelaysMigration": (*main.Message)(0xc000339c40)({ - fullName: (string) (len=15) "RelaysMigration", - name: (string) (len=15) "RelaysMigration", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004ef530)({ - name: (string) (len=6) "relays", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) true, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=17) "GetAppUserRequest": (*main.Message)(0xc000339240)({ - fullName: (string) (len=17) "GetAppUserRequest", - name: (string) (len=17) "GetAppUserRequest", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004ee330)({ - 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=17) "PayAddressRequest": (*main.Message)(0xc000339480)({ - fullName: (string) (len=17) "PayAddressRequest", - name: (string) (len=17) "PayAddressRequest", - fields: ([]*main.Field) (len=3 cap=4) { - (*main.Field)(0xc0004ee630)({ - 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 - }), - (*main.Field)(0xc0004ee660)({ - name: (string) (len=9) "amoutSats", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004ee690)({ - name: (string) (len=12) "satsPerVByte", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=7) "AuthApp": (*main.Message)(0xc000339100)({ - fullName: (string) (len=7) "AuthApp", - name: (string) (len=7) "AuthApp", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004ee060)({ - 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)(0xc0004ee090)({ - 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=28) "SetMockAppUserBalanceRequest": (*main.Message)(0xc000339380)({ - fullName: (string) (len=28) "SetMockAppUserBalanceRequest", - name: (string) (len=28) "SetMockAppUserBalanceRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004ee540)({ - 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)(0xc0004ee570)({ - 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) "NewInvoiceResponse": (*main.Message)(0xc000339540)({ - fullName: (string) (len=18) "NewInvoiceResponse", - name: (string) (len=18) "NewInvoiceResponse", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004ee7e0)({ - 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)(0xc000339700)({ + (string) (len=19) "OpenChannelResponse": (*main.Message)(0xc000493580)({ fullName: (string) (len=19) "OpenChannelResponse", name: (string) (len=19) "OpenChannelResponse", fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004eea80)({ + (*main.Field)(0xc000370a50)({ name: (string) (len=9) "channelId", kind: (string) (len=6) "string", isMap: (bool) false, @@ -2740,215 +1376,11 @@ }) } }), - (string) (len=25) "EncryptionExchangeRequest": (*main.Message)(0xc000338b40)({ - fullName: (string) (len=25) "EncryptionExchangeRequest", - name: (string) (len=25) "EncryptionExchangeRequest", + (string) (len=17) "AddProductRequest": (*main.Message)(0xc000493940)({ + fullName: (string) (len=17) "AddProductRequest", + name: (string) (len=17) "AddProductRequest", fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc00038b3b0)({ - 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)(0xc00038b3e0)({ - 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=12) "RoutingEvent": (*main.Message)(0xc000338e40)({ - fullName: (string) (len=12) "RoutingEvent", - name: (string) (len=12) "RoutingEvent", - fields: ([]*main.Field) (len=12 cap=16) { - (*main.Field)(0xc00038b980)({ - name: (string) (len=19) "incoming_channel_id", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b9b0)({ - name: (string) (len=16) "incoming_htlc_id", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038b9e0)({ - name: (string) (len=19) "outgoing_channel_id", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038ba10)({ - name: (string) (len=16) "outgoing_htlc_id", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038ba40)({ - name: (string) (len=12) "timestamp_ns", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038ba70)({ - name: (string) (len=10) "event_type", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038baa0)({ - name: (string) (len=17) "incoming_amt_msat", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038bad0)({ - name: (string) (len=17) "outgoing_amt_msat", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038bb00)({ - name: (string) (len=14) "failure_string", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038bb30)({ - name: (string) (len=7) "settled", - kind: (string) (len=4) "bool", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038bb60)({ - name: (string) (len=8) "offchain", - kind: (string) (len=4) "bool", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc00038bb90)({ - name: (string) (len=18) "forward_fail_event", - kind: (string) (len=4) "bool", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=18) "OpenChannelRequest": (*main.Message)(0xc0003396c0)({ - fullName: (string) (len=18) "OpenChannelRequest", - name: (string) (len=18) "OpenChannelRequest", - fields: ([]*main.Field) (len=4 cap=4) { - (*main.Field)(0xc0004ee9c0)({ - 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)(0xc0004ee9f0)({ - 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)(0xc0004eea20)({ - 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)(0xc0004eea50)({ - 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=17) "LndMetricsRequest": (*main.Message)(0xc000338dc0)({ - fullName: (string) (len=17) "LndMetricsRequest", - name: (string) (len=17) "LndMetricsRequest", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc00038b920)({ - name: (string) (len=9) "from_unix", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) true - }), - (*main.Field)(0xc00038b950)({ - name: (string) (len=7) "to_unix", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) true - }) - } - }), - (string) (len=11) "Application": (*main.Message)(0xc0003390c0)({ - fullName: (string) (len=11) "Application", - name: (string) (len=11) "Application", - fields: ([]*main.Field) (len=4 cap=4) { - (*main.Field)(0xc00038bf80)({ + (*main.Field)(0xc000371320)({ name: (string) (len=4) "name", kind: (string) (len=6) "string", isMap: (bool) false, @@ -2957,41 +1389,56 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc00038bfb0)({ - 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)(0xc0004ee000)({ - name: (string) (len=7) "balance", + (*main.Field)(0xc000371350)({ + 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 - }), - (*main.Field)(0xc0004ee030)({ - name: (string) (len=4) "npub", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false }) } }), - (string) (len=30) "SendAppUserToAppPaymentRequest": (*main.Message)(0xc000339300)({ - fullName: (string) (len=30) "SendAppUserToAppPaymentRequest", - name: (string) (len=30) "SendAppUserToAppPaymentRequest", + (string) (len=18) "AppsMetricsRequest": (*main.Message)(0xc000492ac0)({ + fullName: (string) (len=18) "AppsMetricsRequest", + name: (string) (len=18) "AppsMetricsRequest", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc0001fb5c0)({ + name: (string) (len=9) "from_unix", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) true + }), + (*main.Field)(0xc0001fb5f0)({ + name: (string) (len=7) "to_unix", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) true + }), + (*main.Field)(0xc0001fb620)({ + name: (string) (len=18) "include_operations", + kind: (string) (len=4) "bool", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) true + }) + } + }), + (string) (len=27) "SetMockInvoiceAsPaidRequest": (*main.Message)(0xc000492e40)({ + fullName: (string) (len=27) "SetMockInvoiceAsPaidRequest", + name: (string) (len=27) "SetMockInvoiceAsPaidRequest", fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004ee480)({ - name: (string) (len=20) "from_user_identifier", + (*main.Field)(0xc0001fbe00)({ + name: (string) (len=7) "invoice", kind: (string) (len=6) "string", isMap: (bool) false, isArray: (bool) false, @@ -2999,7 +1446,7 @@ isMessage: (bool) false, isOptional: (bool) false }), - (*main.Field)(0xc0004ee4b0)({ + (*main.Field)(0xc0001fbe30)({ name: (string) (len=6) "amount", kind: (string) (len=5) "int64", isMap: (bool) false, @@ -3010,161 +1457,11 @@ }) } }), - (string) (len=20) "LnurlPayInfoResponse": (*main.Message)(0xc000339840)({ - fullName: (string) (len=20) "LnurlPayInfoResponse", - name: (string) (len=20) "LnurlPayInfoResponse", - fields: ([]*main.Field) (len=7 cap=8) { - (*main.Field)(0xc0004eec90)({ - 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)(0xc0004eecc0)({ - 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)(0xc0004eecf0)({ - 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)(0xc0004eed20)({ - 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)(0xc0004eed50)({ - 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 - }), - (*main.Field)(0xc0004eed80)({ - name: (string) (len=11) "allowsNostr", - kind: (string) (len=4) "bool", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }), - (*main.Field)(0xc0004eedb0)({ - name: (string) (len=11) "nostrPubkey", - kind: (string) (len=6) "string", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=15) "MigrationUpdate": (*main.Message)(0xc000339bc0)({ - fullName: (string) (len=15) "MigrationUpdate", - name: (string) (len=15) "MigrationUpdate", - fields: ([]*main.Field) (len=2 cap=2) { - (*main.Field)(0xc0004ef4a0)({ - name: (string) (len=7) "closure", - kind: (string) (len=16) "ClosureMigration", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) true - }), - (*main.Field)(0xc0004ef4d0)({ - name: (string) (len=6) "relays", - kind: (string) (len=15) "RelaysMigration", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) true, - isOptional: (bool) true - }) - } - }), - (string) (len=16) "ClosureMigration": (*main.Message)(0xc000339c00)({ - fullName: (string) (len=16) "ClosureMigration", - name: (string) (len=16) "ClosureMigration", + (string) (len=18) "NewInvoiceResponse": (*main.Message)(0xc0004933c0)({ + fullName: (string) (len=18) "NewInvoiceResponse", + name: (string) (len=18) "NewInvoiceResponse", fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004ef500)({ - name: (string) (len=14) "closes_at_unix", - kind: (string) (len=5) "int64", - isMap: (bool) false, - isArray: (bool) false, - isEnum: (bool) false, - isMessage: (bool) false, - isOptional: (bool) false - }) - } - }), - (string) (len=24) "AddAppUserInvoiceRequest": (*main.Message)(0xc000339200)({ - fullName: (string) (len=24) "AddAppUserInvoiceRequest", - name: (string) (len=24) "AddAppUserInvoiceRequest", - fields: ([]*main.Field) (len=4 cap=4) { - (*main.Field)(0xc0004ee270)({ - 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)(0xc0004ee2a0)({ - 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)(0xc0004ee2d0)({ - 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)(0xc0004ee300)({ - 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=20) "DecodeInvoiceRequest": (*main.Message)(0xc000339580)({ - fullName: (string) (len=20) "DecodeInvoiceRequest", - name: (string) (len=20) "DecodeInvoiceRequest", - fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004ee810)({ + (*main.Field)(0xc0003707b0)({ name: (string) (len=7) "invoice", kind: (string) (len=6) "string", isMap: (bool) false, @@ -3175,11 +1472,1117 @@ }) } }), - (string) (len=25) "GetUserOperationsResponse": (*main.Message)(0xc000339a80)({ + (string) (len=17) "LiveUserOperation": (*main.Message)(0xc000493a00)({ + fullName: (string) (len=17) "LiveUserOperation", + name: (string) (len=17) "LiveUserOperation", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc000371440)({ + 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=16) "ClosureMigration": (*main.Message)(0xc000493a80)({ + fullName: (string) (len=16) "ClosureMigration", + name: (string) (len=16) "ClosureMigration", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc0003714d0)({ + name: (string) (len=14) "closes_at_unix", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=12) "UsageMetrics": (*main.Message)(0xc000492a80)({ + fullName: (string) (len=12) "UsageMetrics", + name: (string) (len=12) "UsageMetrics", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc0001fb590)({ + name: (string) (len=7) "metrics", + kind: (string) (len=11) "UsageMetric", + isMap: (bool) false, + isArray: (bool) true, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }) + } + }), + (string) (len=17) "ChainBalanceEvent": (*main.Message)(0xc000492d40)({ + fullName: (string) (len=17) "ChainBalanceEvent", + name: (string) (len=17) "ChainBalanceEvent", + fields: ([]*main.Field) (len=4 cap=4) { + (*main.Field)(0xc0001fbc50)({ + name: (string) (len=12) "block_height", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fbc80)({ + name: (string) (len=17) "confirmed_balance", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fbcb0)({ + name: (string) (len=19) "unconfirmed_balance", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fbce0)({ + name: (string) (len=13) "total_balance", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=17) "NewInvoiceRequest": (*main.Message)(0xc000493380)({ + fullName: (string) (len=17) "NewInvoiceRequest", + name: (string) (len=17) "NewInvoiceRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc000370750)({ + 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)(0xc000370780)({ + 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=24) "PayAppUserInvoiceRequest": (*main.Message)(0xc000493100)({ + fullName: (string) (len=24) "PayAppUserInvoiceRequest", + name: (string) (len=24) "PayAppUserInvoiceRequest", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc000370330)({ + 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)(0xc000370360)({ + 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)(0xc000370390)({ + 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=34) "SendAppUserToAppUserPaymentRequest": (*main.Message)(0xc000493140)({ + fullName: (string) (len=34) "SendAppUserToAppUserPaymentRequest", + name: (string) (len=34) "SendAppUserToAppUserPaymentRequest", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc0003703c0)({ + 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)(0xc0003703f0)({ + 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)(0xc000370420)({ + 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)(0xc000492ec0)({ + fullName: (string) (len=13) "AddAppRequest", + name: (string) (len=13) "AddAppRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc0001fbe90)({ + 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)(0xc0001fbec0)({ + 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=24) "AddAppUserInvoiceRequest": (*main.Message)(0xc000493080)({ + fullName: (string) (len=24) "AddAppUserInvoiceRequest", + name: (string) (len=24) "AddAppUserInvoiceRequest", + fields: ([]*main.Field) (len=4 cap=4) { + (*main.Field)(0xc000370240)({ + 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)(0xc000370270)({ + 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)(0xc0003702a0)({ + 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)(0xc0003702d0)({ + 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=17) "GetAppUserRequest": (*main.Message)(0xc0004930c0)({ + fullName: (string) (len=17) "GetAppUserRequest", + name: (string) (len=17) "GetAppUserRequest", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc000370300)({ + 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=11) "AppsMetrics": (*main.Message)(0xc000492c00)({ + fullName: (string) (len=11) "AppsMetrics", + name: (string) (len=11) "AppsMetrics", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc0001fb8c0)({ + name: (string) (len=4) "apps", + kind: (string) (len=10) "AppMetrics", + isMap: (bool) false, + isArray: (bool) true, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }) + } + }), + (string) (len=22) "HandleLnurlPayResponse": (*main.Message)(0xc000493700)({ + fullName: (string) (len=22) "HandleLnurlPayResponse", + name: (string) (len=22) "HandleLnurlPayResponse", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc000370db0)({ + 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)(0xc000370de0)({ + 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) "SetMockAppBalanceRequest": (*main.Message)(0xc000493240)({ + fullName: (string) (len=24) "SetMockAppBalanceRequest", + name: (string) (len=24) "SetMockAppBalanceRequest", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc000370570)({ + 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)(0xc000493500)({ + fullName: (string) (len=18) "PayInvoiceResponse", + name: (string) (len=18) "PayInvoiceResponse", + fields: ([]*main.Field) (len=5 cap=8) { + (*main.Field)(0xc0003708a0)({ + 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)(0xc0003708d0)({ + 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 + }), + (*main.Field)(0xc000370900)({ + name: (string) (len=12) "operation_id", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc000370930)({ + name: (string) (len=11) "service_fee", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc000370960)({ + name: (string) (len=11) "network_fee", + 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)(0xc000493640)({ + fullName: (string) (len=25) "LnurlWithdrawInfoResponse", + name: (string) (len=25) "LnurlWithdrawInfoResponse", + fields: ([]*main.Field) (len=8 cap=8) { + (*main.Field)(0xc000370ae0)({ + 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)(0xc000370b10)({ + 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)(0xc000370b40)({ + 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)(0xc000370b70)({ + 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)(0xc000370ba0)({ + 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)(0xc000370bd0)({ + 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)(0xc000370c00)({ + 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)(0xc000370c30)({ + 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) "LndMetricsRequest": (*main.Message)(0xc000492c40)({ + fullName: (string) (len=17) "LndMetricsRequest", + name: (string) (len=17) "LndMetricsRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc0001fb8f0)({ + name: (string) (len=9) "from_unix", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) true + }), + (*main.Field)(0xc0001fb920)({ + name: (string) (len=7) "to_unix", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) true + }) + } + }), + (string) (len=19) "ChannelBalanceEvent": (*main.Message)(0xc000492d00)({ + fullName: (string) (len=19) "ChannelBalanceEvent", + name: (string) (len=19) "ChannelBalanceEvent", + fields: ([]*main.Field) (len=4 cap=4) { + (*main.Field)(0xc0001fbb90)({ + name: (string) (len=12) "block_height", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fbbc0)({ + name: (string) (len=10) "channel_id", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fbbf0)({ + name: (string) (len=18) "local_balance_sats", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fbc20)({ + name: (string) (len=19) "remote_balance_sats", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=7) "AuthApp": (*main.Message)(0xc000492f80)({ + fullName: (string) (len=7) "AuthApp", + name: (string) (len=7) "AuthApp", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc000370030)({ + 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)(0xc000370060)({ + 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=28) "SetMockAppUserBalanceRequest": (*main.Message)(0xc000493200)({ + fullName: (string) (len=28) "SetMockAppUserBalanceRequest", + name: (string) (len=28) "SetMockAppUserBalanceRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc000370510)({ + 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)(0xc000370540)({ + 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)(0xc000493300)({ + fullName: (string) (len=17) "PayAddressRequest", + name: (string) (len=17) "PayAddressRequest", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc000370600)({ + 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 + }), + (*main.Field)(0xc000370630)({ + name: (string) (len=9) "amoutSats", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc000370660)({ + name: (string) (len=12) "satsPerVByte", + 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)(0xc000493540)({ + fullName: (string) (len=18) "OpenChannelRequest", + name: (string) (len=18) "OpenChannelRequest", + fields: ([]*main.Field) (len=4 cap=4) { + (*main.Field)(0xc000370990)({ + 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)(0xc0003709c0)({ + 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)(0xc0003709f0)({ + 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)(0xc000370a20)({ + 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)(0xc0004939c0)({ + fullName: (string) (len=25) "GetProductBuyLinkResponse", + name: (string) (len=25) "GetProductBuyLinkResponse", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc000371410)({ + name: (string) (len=4) "link", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=15) "RelaysMigration": (*main.Message)(0xc000493ac0)({ + fullName: (string) (len=15) "RelaysMigration", + name: (string) (len=15) "RelaysMigration", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc000371500)({ + name: (string) (len=6) "relays", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) true, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=5) "Empty": (*main.Message)(0xc000492980)({ + fullName: (string) (len=5) "Empty", + name: (string) (len=5) "Empty", + fields: ([]*main.Field) + }), + (string) (len=17) "AddAppUserRequest": (*main.Message)(0xc000492fc0)({ + fullName: (string) (len=17) "AddAppUserRequest", + name: (string) (len=17) "AddAppUserRequest", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc000370090)({ + 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)(0xc0003700c0)({ + 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)(0xc0003700f0)({ + 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=18) "PayAddressResponse": (*main.Message)(0xc000493340)({ + fullName: (string) (len=18) "PayAddressResponse", + name: (string) (len=18) "PayAddressResponse", + fields: ([]*main.Field) (len=4 cap=4) { + (*main.Field)(0xc000370690)({ + 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 + }), + (*main.Field)(0xc0003706c0)({ + name: (string) (len=12) "operation_id", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0003706f0)({ + name: (string) (len=11) "service_fee", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc000370720)({ + name: (string) (len=11) "network_fee", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=17) "NewAddressRequest": (*main.Message)(0xc000493280)({ + fullName: (string) (len=17) "NewAddressRequest", + name: (string) (len=17) "NewAddressRequest", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc0003705a0)({ + 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=20) "DecodeInvoiceRequest": (*main.Message)(0xc000493400)({ + fullName: (string) (len=20) "DecodeInvoiceRequest", + name: (string) (len=20) "DecodeInvoiceRequest", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc0003707e0)({ + 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) "LnurlLinkResponse": (*main.Message)(0xc0004935c0)({ + fullName: (string) (len=17) "LnurlLinkResponse", + name: (string) (len=17) "LnurlLinkResponse", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc000370a80)({ + 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)(0xc000370ab0)({ + 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=15) "MigrationUpdate": (*main.Message)(0xc000493a40)({ + fullName: (string) (len=15) "MigrationUpdate", + name: (string) (len=15) "MigrationUpdate", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc000371470)({ + name: (string) (len=7) "closure", + kind: (string) (len=16) "ClosureMigration", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) true + }), + (*main.Field)(0xc0003714a0)({ + name: (string) (len=6) "relays", + kind: (string) (len=15) "RelaysMigration", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) true + }) + } + }), + (string) (len=14) "LndNodeMetrics": (*main.Message)(0xc000492d80)({ + fullName: (string) (len=14) "LndNodeMetrics", + name: (string) (len=14) "LndNodeMetrics", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc0001fbd10)({ + name: (string) (len=23) "channels_balance_events", + kind: (string) (len=19) "ChannelBalanceEvent", + isMap: (bool) false, + isArray: (bool) true, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fbd40)({ + name: (string) (len=20) "chain_balance_events", + kind: (string) (len=17) "ChainBalanceEvent", + isMap: (bool) false, + isArray: (bool) true, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fbd70)({ + name: (string) (len=14) "routing_events", + kind: (string) (len=12) "RoutingEvent", + isMap: (bool) false, + isArray: (bool) true, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }) + } + }), + (string) (len=14) "AuthAppRequest": (*main.Message)(0xc000492f00)({ + fullName: (string) (len=14) "AuthAppRequest", + name: (string) (len=14) "AuthAppRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc0001fbef0)({ + 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)(0xc0001fbf20)({ + 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=11) "Application": (*main.Message)(0xc000492f40)({ + fullName: (string) (len=11) "Application", + name: (string) (len=11) "Application", + fields: ([]*main.Field) (len=4 cap=4) { + (*main.Field)(0xc0001fbf50)({ + 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)(0xc0001fbf80)({ + 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)(0xc0001fbfb0)({ + 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 + }), + (*main.Field)(0xc000370000)({ + name: (string) (len=4) "npub", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=11) "UsageMetric": (*main.Message)(0xc000492a40)({ + fullName: (string) (len=11) "UsageMetric", + name: (string) (len=11) "UsageMetric", + fields: ([]*main.Field) (len=9 cap=16) { + (*main.Field)(0xc0001fb3e0)({ + name: (string) (len=15) "processed_at_ms", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb410)({ + name: (string) (len=14) "parsed_in_nano", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb440)({ + name: (string) (len=12) "auth_in_nano", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb470)({ + name: (string) (len=16) "validate_in_nano", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb4a0)({ + name: (string) (len=14) "handle_in_nano", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb4d0)({ + name: (string) (len=8) "rpc_name", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb500)({ + name: (string) (len=5) "batch", + kind: (string) (len=4) "bool", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb530)({ + name: (string) (len=5) "nostr", + kind: (string) (len=4) "bool", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb560)({ + name: (string) (len=10) "batch_size", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=10) "AppMetrics": (*main.Message)(0xc000492bc0)({ + fullName: (string) (len=10) "AppMetrics", + name: (string) (len=10) "AppMetrics", + fields: ([]*main.Field) (len=7 cap=8) { + (*main.Field)(0xc0001fb770)({ + 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)(0xc0001fb7a0)({ + name: (string) (len=5) "users", + kind: (string) (len=9) "UsersInfo", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb7d0)({ + name: (string) (len=14) "total_received", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb800)({ + name: (string) (len=11) "total_spent", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb830)({ + name: (string) (len=15) "total_available", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb860)({ + name: (string) (len=15) "unpaid_invoices", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb890)({ + 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=14) "UserOperations": (*main.Message)(0xc000493880)({ + fullName: (string) (len=14) "UserOperations", + name: (string) (len=14) "UserOperations", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc000371170)({ + 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)(0xc0003711a0)({ + 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)(0xc0003711d0)({ + 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)(0xc000493900)({ fullName: (string) (len=25) "GetUserOperationsResponse", name: (string) (len=25) "GetUserOperationsResponse", fields: ([]*main.Field) (len=6 cap=8) { - (*main.Field)(0xc0004ef230)({ + (*main.Field)(0xc000371200)({ name: (string) (len=31) "latestOutgoingInvoiceOperations", kind: (string) (len=14) "UserOperations", isMap: (bool) false, @@ -3188,7 +2591,7 @@ isMessage: (bool) true, isOptional: (bool) false }), - (*main.Field)(0xc0004ef260)({ + (*main.Field)(0xc000371230)({ name: (string) (len=31) "latestIncomingInvoiceOperations", kind: (string) (len=14) "UserOperations", isMap: (bool) false, @@ -3197,7 +2600,7 @@ isMessage: (bool) true, isOptional: (bool) false }), - (*main.Field)(0xc0004ef290)({ + (*main.Field)(0xc000371260)({ name: (string) (len=26) "latestOutgoingTxOperations", kind: (string) (len=14) "UserOperations", isMap: (bool) false, @@ -3206,7 +2609,7 @@ isMessage: (bool) true, isOptional: (bool) false }), - (*main.Field)(0xc0004ef2c0)({ + (*main.Field)(0xc000371290)({ name: (string) (len=26) "latestIncomingTxOperations", kind: (string) (len=14) "UserOperations", isMap: (bool) false, @@ -3215,7 +2618,7 @@ isMessage: (bool) true, isOptional: (bool) false }), - (*main.Field)(0xc0004ef2f0)({ + (*main.Field)(0xc0003712c0)({ name: (string) (len=32) "latestOutgoingUserToUserPayemnts", kind: (string) (len=14) "UserOperations", isMap: (bool) false, @@ -3224,7 +2627,7 @@ isMessage: (bool) true, isOptional: (bool) false }), - (*main.Field)(0xc0004ef320)({ + (*main.Field)(0xc0003712f0)({ name: (string) (len=32) "latestIncomingUserToUserPayemnts", kind: (string) (len=14) "UserOperations", isMap: (bool) false, @@ -3235,13 +2638,205 @@ }) } }), - (string) (len=17) "LiveUserOperation": (*main.Message)(0xc000339b80)({ - fullName: (string) (len=17) "LiveUserOperation", - name: (string) (len=17) "LiveUserOperation", + (string) (len=10) "LndMetrics": (*main.Message)(0xc000492dc0)({ + fullName: (string) (len=10) "LndMetrics", + name: (string) (len=10) "LndMetrics", fields: ([]*main.Field) (len=1 cap=1) { - (*main.Field)(0xc0004ef470)({ - name: (string) (len=9) "operation", - kind: (string) (len=13) "UserOperation", + (*main.Field)(0xc0001fbda0)({ + name: (string) (len=5) "nodes", + kind: (string) (len=14) "LndNodeMetrics", + isMap: (bool) false, + isArray: (bool) true, + isEnum: (bool) false, + isMessage: (bool) true, + isOptional: (bool) false + }) + } + }), + (string) (len=26) "GetAppUserLNURLInfoRequest": (*main.Message)(0xc0004931c0)({ + fullName: (string) (len=26) "GetAppUserLNURLInfoRequest", + name: (string) (len=26) "GetAppUserLNURLInfoRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc0003704b0)({ + 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)(0xc0003704e0)({ + 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=17) "PayInvoiceRequest": (*main.Message)(0xc000493480)({ + fullName: (string) (len=17) "PayInvoiceRequest", + name: (string) (len=17) "PayInvoiceRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc000370840)({ + 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)(0xc000370870)({ + 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) "UserOperation": (*main.Message)(0xc000493840)({ + fullName: (string) (len=13) "UserOperation", + name: (string) (len=13) "UserOperation", + fields: ([]*main.Field) (len=9 cap=16) { + (*main.Field)(0xc000370fc0)({ + 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)(0xc000370ff0)({ + 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)(0xc000371020)({ + 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)(0xc000371050)({ + 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 + }), + (*main.Field)(0xc000371080)({ + 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)(0xc0003710b0)({ + name: (string) (len=11) "operationId", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0003710e0)({ + name: (string) (len=11) "service_fee", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc000371110)({ + name: (string) (len=11) "network_fee", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc000371140)({ + name: (string) (len=9) "confirmed", + kind: (string) (len=4) "bool", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=25) "EncryptionExchangeRequest": (*main.Message)(0xc0004929c0)({ + fullName: (string) (len=25) "EncryptionExchangeRequest", + name: (string) (len=25) "EncryptionExchangeRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc0001fb380)({ + 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)(0xc0001fb3b0)({ + 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=20) "AddAppInvoiceRequest": (*main.Message)(0xc000493040)({ + fullName: (string) (len=20) "AddAppInvoiceRequest", + name: (string) (len=20) "AddAppInvoiceRequest", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc0003701b0)({ + 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)(0xc0003701e0)({ + 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)(0xc000370210)({ + name: (string) (len=11) "invoice_req", + kind: (string) (len=17) "NewInvoiceRequest", isMap: (bool) false, isArray: (bool) false, isEnum: (bool) false, @@ -3249,6 +2844,411 @@ isOptional: (bool) false }) } + }), + (string) (len=24) "GetUserOperationsRequest": (*main.Message)(0xc0004937c0)({ + fullName: (string) (len=24) "GetUserOperationsRequest", + name: (string) (len=24) "GetUserOperationsRequest", + fields: ([]*main.Field) (len=6 cap=8) { + (*main.Field)(0xc000370ea0)({ + name: (string) (len=21) "latestIncomingInvoice", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc000370ed0)({ + name: (string) (len=21) "latestOutgoingInvoice", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc000370f00)({ + name: (string) (len=16) "latestIncomingTx", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc000370f30)({ + name: (string) (len=16) "latestOutgoingTx", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc000370f60)({ + name: (string) (len=31) "latestIncomingUserToUserPayment", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc000370f90)({ + name: (string) (len=31) "latestOutgoingUserToUserPayment", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=9) "UsersInfo": (*main.Message)(0xc000492b40)({ + fullName: (string) (len=9) "UsersInfo", + name: (string) (len=9) "UsersInfo", + fields: ([]*main.Field) (len=6 cap=8) { + (*main.Field)(0xc0001fb650)({ + name: (string) (len=5) "total", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb680)({ + name: (string) (len=10) "no_balance", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb6b0)({ + name: (string) (len=16) "negative_balance", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb6e0)({ + name: (string) (len=20) "always_been_inactive", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb710)({ + name: (string) (len=11) "balance_avg", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb740)({ + name: (string) (len=14) "balance_median", + 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)(0xc000493180)({ + fullName: (string) (len=30) "SendAppUserToAppPaymentRequest", + name: (string) (len=30) "SendAppUserToAppPaymentRequest", + fields: ([]*main.Field) (len=2 cap=2) { + (*main.Field)(0xc000370450)({ + 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)(0xc000370480)({ + 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=21) "DecodeInvoiceResponse": (*main.Message)(0xc000493440)({ + fullName: (string) (len=21) "DecodeInvoiceResponse", + name: (string) (len=21) "DecodeInvoiceResponse", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc000370810)({ + 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=12) "RoutingEvent": (*main.Message)(0xc000492cc0)({ + fullName: (string) (len=12) "RoutingEvent", + name: (string) (len=12) "RoutingEvent", + fields: ([]*main.Field) (len=12 cap=16) { + (*main.Field)(0xc0001fb950)({ + name: (string) (len=19) "incoming_channel_id", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb980)({ + name: (string) (len=16) "incoming_htlc_id", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb9b0)({ + name: (string) (len=19) "outgoing_channel_id", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fb9e0)({ + name: (string) (len=16) "outgoing_htlc_id", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fba10)({ + name: (string) (len=12) "timestamp_ns", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fba40)({ + name: (string) (len=10) "event_type", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fba70)({ + name: (string) (len=17) "incoming_amt_msat", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fbaa0)({ + name: (string) (len=17) "outgoing_amt_msat", + kind: (string) (len=5) "int64", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fbad0)({ + name: (string) (len=14) "failure_string", + kind: (string) (len=6) "string", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fbb00)({ + name: (string) (len=7) "settled", + kind: (string) (len=4) "bool", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fbb30)({ + name: (string) (len=8) "offchain", + kind: (string) (len=4) "bool", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc0001fbb60)({ + name: (string) (len=18) "forward_fail_event", + kind: (string) (len=4) "bool", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }) + } + }), + (string) (len=17) "LndGetInfoRequest": (*main.Message)(0xc000492e00)({ + fullName: (string) (len=17) "LndGetInfoRequest", + name: (string) (len=17) "LndGetInfoRequest", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc0001fbdd0)({ + name: (string) (len=6) "nodeId", + 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)(0xc0004932c0)({ + fullName: (string) (len=18) "NewAddressResponse", + name: (string) (len=18) "NewAddressResponse", + fields: ([]*main.Field) (len=1 cap=1) { + (*main.Field)(0xc0003705d0)({ + 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) "LnurlPayInfoResponse": (*main.Message)(0xc0004936c0)({ + fullName: (string) (len=20) "LnurlPayInfoResponse", + name: (string) (len=20) "LnurlPayInfoResponse", + fields: ([]*main.Field) (len=7 cap=8) { + (*main.Field)(0xc000370c60)({ + 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)(0xc000370c90)({ + 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)(0xc000370cc0)({ + 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)(0xc000370cf0)({ + 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)(0xc000370d20)({ + 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 + }), + (*main.Field)(0xc000370d50)({ + name: (string) (len=11) "allowsNostr", + kind: (string) (len=4) "bool", + isMap: (bool) false, + isArray: (bool) false, + isEnum: (bool) false, + isMessage: (bool) false, + isOptional: (bool) false + }), + (*main.Field)(0xc000370d80)({ + name: (string) (len=11) "nostrPubkey", + 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)(0xc000493980)({ + fullName: (string) (len=7) "Product", + name: (string) (len=7) "Product", + fields: ([]*main.Field) (len=3 cap=4) { + (*main.Field)(0xc000371380)({ + 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)(0xc0003713b0)({ + 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)(0xc0003713e0)({ + 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 + }) + } }) } diff --git a/proto/autogenerated/ts/express_server.ts b/proto/autogenerated/ts/express_server.ts index 817cfbb5..cab06174 100644 --- a/proto/autogenerated/ts/express_server.ts +++ b/proto/autogenerated/ts/express_server.ts @@ -19,7 +19,7 @@ export type ServerOptions = { MetricsAuthGuard: (authorizationHeader?: string) => Promise AppAuthGuard: (authorizationHeader?: string) => Promise } -declare module 'express-serve-static-core' { interface Request { startTime?: bigint, bodySize?: number } } +declare module 'express-serve-static-core' { interface Request { startTime?: bigint, bodySize?: number, startTimeMs: number } } const logErrorAndReturnResponse = (error: Error, response: string, res: Response, logger: Logger, metric: Types.RequestMetric, metricsCallback: (metrics: Types.RequestMetric[]) => void) => { logger.error(error.message || error); metricsCallback([{ ...metric, error: response }]); res.json({ status: 'ERROR', reason: response }) } @@ -29,14 +29,14 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (opts.allowCors) { app.use(cors()) } - app.use((req, _, next) => { req.startTime = process.hrtime.bigint(); next() }) + app.use((req, _, next) => { req.startTime = process.hrtime.bigint(); req.startTimeMs = Date.now(); next() }) app.use(json()) app.use(urlencoded({ extended: true })) if (opts.logMethod) app.use((req, _, next) => { console.log(req.method, req.path); if (opts.logBody) console.log(req.body); next() }) if (!opts.allowNotImplementedMethods && !methods.LndGetInfo) throw new Error('method: LndGetInfo is not implemented') app.post('/api/admin/lnd/getinfo', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'LndGetInfo', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.LndGetInfo) throw new Error('method: LndGetInfo is not implemented') @@ -58,7 +58,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.AddApp) throw new Error('method: AddApp is not implemented') app.post('/api/admin/app/add', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'AddApp', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.AddApp) throw new Error('method: AddApp is not implemented') @@ -80,7 +80,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.AuthApp) throw new Error('method: AuthApp is not implemented') app.post('/api/admin/app/auth', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'AuthApp', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.AuthApp) throw new Error('method: AuthApp is not implemented') @@ -102,7 +102,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.GetUsageMetrics) throw new Error('method: GetUsageMetrics is not implemented') app.post('/api/admin/metrics/usage', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'GetUsageMetrics', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.GetUsageMetrics) throw new Error('method: GetUsageMetrics is not implemented') @@ -121,7 +121,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.GetAppsMetrics) throw new Error('method: GetAppsMetrics is not implemented') app.post('/api/admin/metrics/apps', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'GetAppsMetrics', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.GetAppsMetrics) throw new Error('method: GetAppsMetrics is not implemented') @@ -143,7 +143,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.GetLndMetrics) throw new Error('method: GetLndMetrics is not implemented') app.post('/api/admin/metrics/lnd', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'GetLndMetrics', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.GetLndMetrics) throw new Error('method: GetLndMetrics is not implemented') @@ -165,7 +165,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.Health) throw new Error('method: Health is not implemented') app.get('/api/health', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'Health', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.Health) throw new Error('method: Health is not implemented') @@ -184,7 +184,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.EncryptionExchange) throw new Error('method: EncryptionExchange is not implemented') app.post('/api/encryption/exchange', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'EncryptionExchange', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.EncryptionExchange) throw new Error('method: EncryptionExchange is not implemented') @@ -206,7 +206,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.SetMockInvoiceAsPaid) throw new Error('method: SetMockInvoiceAsPaid is not implemented') app.post('/api/lnd/mock/invoice/paid', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'SetMockInvoiceAsPaid', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.SetMockInvoiceAsPaid) throw new Error('method: SetMockInvoiceAsPaid is not implemented') @@ -228,7 +228,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.GetLnurlWithdrawInfo) throw new Error('method: GetLnurlWithdrawInfo is not implemented') app.get('/api/guest/lnurl_withdraw/info', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'GetLnurlWithdrawInfo', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.GetLnurlWithdrawInfo) throw new Error('method: GetLnurlWithdrawInfo is not implemented') @@ -247,7 +247,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.HandleLnurlWithdraw) throw new Error('method: HandleLnurlWithdraw is not implemented') app.get('/api/guest/lnurl_withdraw/handle', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'HandleLnurlWithdraw', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.HandleLnurlWithdraw) throw new Error('method: HandleLnurlWithdraw is not implemented') @@ -266,7 +266,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.GetLnurlPayInfo) throw new Error('method: GetLnurlPayInfo is not implemented') app.get('/api/guest/lnurl_pay/info', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'GetLnurlPayInfo', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.GetLnurlPayInfo) throw new Error('method: GetLnurlPayInfo is not implemented') @@ -285,7 +285,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.HandleLnurlPay) throw new Error('method: HandleLnurlPay is not implemented') app.get('/api/guest/lnurl_pay/handle', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'HandleLnurlPay', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.HandleLnurlPay) throw new Error('method: HandleLnurlPay is not implemented') @@ -304,7 +304,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.HandleLnurlAddress) throw new Error('method: HandleLnurlAddress is not implemented') app.get('/.well-known/lnurlp/:address_name', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'HandleLnurlAddress', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.HandleLnurlAddress) throw new Error('method: HandleLnurlAddress is not implemented') @@ -323,7 +323,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.GetApp) throw new Error('method: GetApp is not implemented') app.post('/api/app/get', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'GetApp', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.GetApp) throw new Error('method: GetApp is not implemented') @@ -342,7 +342,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.AddAppUser) throw new Error('method: AddAppUser is not implemented') app.post('/api/app/user/add', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'AddAppUser', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.AddAppUser) throw new Error('method: AddAppUser is not implemented') @@ -364,7 +364,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.AddAppInvoice) throw new Error('method: AddAppInvoice is not implemented') app.post('/api/app/add/invoice', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'AddAppInvoice', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.AddAppInvoice) throw new Error('method: AddAppInvoice is not implemented') @@ -386,7 +386,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.AddAppUserInvoice) throw new Error('method: AddAppUserInvoice is not implemented') app.post('/api/app/user/add/invoice', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'AddAppUserInvoice', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.AddAppUserInvoice) throw new Error('method: AddAppUserInvoice is not implemented') @@ -408,7 +408,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.GetAppUser) throw new Error('method: GetAppUser is not implemented') app.post('/api/app/user/get', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'GetAppUser', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.GetAppUser) throw new Error('method: GetAppUser is not implemented') @@ -430,7 +430,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.PayAppUserInvoice) throw new Error('method: PayAppUserInvoice is not implemented') app.post('/api/app/invoice/pay', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'PayAppUserInvoice', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.PayAppUserInvoice) throw new Error('method: PayAppUserInvoice is not implemented') @@ -452,7 +452,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.SendAppUserToAppUserPayment) throw new Error('method: SendAppUserToAppUserPayment is not implemented') app.post('/api/app/user/internal/pay', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'SendAppUserToAppUserPayment', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.SendAppUserToAppUserPayment) throw new Error('method: SendAppUserToAppUserPayment is not implemented') @@ -474,7 +474,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.SendAppUserToAppPayment) throw new Error('method: SendAppUserToAppPayment is not implemented') app.post('/api/app/internal/pay', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'SendAppUserToAppPayment', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.SendAppUserToAppPayment) throw new Error('method: SendAppUserToAppPayment is not implemented') @@ -496,7 +496,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.GetAppUserLNURLInfo) throw new Error('method: GetAppUserLNURLInfo is not implemented') app.post('/api/app/user/lnurl/pay/info', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'GetAppUserLNURLInfo', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.GetAppUserLNURLInfo) throw new Error('method: GetAppUserLNURLInfo is not implemented') @@ -518,7 +518,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.SetMockAppUserBalance) throw new Error('method: SetMockAppUserBalance is not implemented') app.post('/api/app/mock/user/blance/set', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'SetMockAppUserBalance', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.SetMockAppUserBalance) throw new Error('method: SetMockAppUserBalance is not implemented') @@ -540,7 +540,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.SetMockAppBalance) throw new Error('method: SetMockAppBalance is not implemented') app.post('/api/app/mock/blance/set', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'SetMockAppBalance', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.SetMockAppBalance) throw new Error('method: SetMockAppBalance is not implemented') @@ -562,7 +562,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.GetUserInfo) throw new Error('method: GetUserInfo is not implemented') app.post('/api/user/info', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'GetUserInfo', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.GetUserInfo) throw new Error('method: GetUserInfo is not implemented') @@ -581,7 +581,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.AddProduct) throw new Error('method: AddProduct is not implemented') app.post('/api/user/product/add', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'AddProduct', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.AddProduct) throw new Error('method: AddProduct is not implemented') @@ -603,7 +603,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.NewProductInvoice) throw new Error('method: NewProductInvoice is not implemented') app.get('/api/user/product/get/invoice', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'NewProductInvoice', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.NewProductInvoice) throw new Error('method: NewProductInvoice is not implemented') @@ -622,7 +622,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.GetUserOperations) throw new Error('method: GetUserOperations is not implemented') app.post('/api/user/operations', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'GetUserOperations', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.GetUserOperations) throw new Error('method: GetUserOperations is not implemented') @@ -644,7 +644,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.NewAddress) throw new Error('method: NewAddress is not implemented') app.post('/api/user/chain/new', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'NewAddress', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.NewAddress) throw new Error('method: NewAddress is not implemented') @@ -666,7 +666,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.PayAddress) throw new Error('method: PayAddress is not implemented') app.post('/api/user/chain/pay', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'PayAddress', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.PayAddress) throw new Error('method: PayAddress is not implemented') @@ -688,7 +688,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.NewInvoice) throw new Error('method: NewInvoice is not implemented') app.post('/api/user/invoice/new', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'NewInvoice', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.NewInvoice) throw new Error('method: NewInvoice is not implemented') @@ -710,7 +710,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.DecodeInvoice) throw new Error('method: DecodeInvoice is not implemented') app.post('/api/user/invoice/decode', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'DecodeInvoice', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.DecodeInvoice) throw new Error('method: DecodeInvoice is not implemented') @@ -732,7 +732,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.PayInvoice) throw new Error('method: PayInvoice is not implemented') app.post('/api/user/invoice/pay', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'PayInvoice', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.PayInvoice) throw new Error('method: PayInvoice is not implemented') @@ -754,7 +754,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.OpenChannel) throw new Error('method: OpenChannel is not implemented') app.post('/api/user/open/channel', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'OpenChannel', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.OpenChannel) throw new Error('method: OpenChannel is not implemented') @@ -776,7 +776,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.GetLnurlWithdrawLink) throw new Error('method: GetLnurlWithdrawLink is not implemented') app.get('/api/user/lnurl_withdraw/link', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'GetLnurlWithdrawLink', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.GetLnurlWithdrawLink) throw new Error('method: GetLnurlWithdrawLink is not implemented') @@ -795,7 +795,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.GetLnurlPayLink) throw new Error('method: GetLnurlPayLink is not implemented') app.get('/api/user/lnurl_pay/link', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'GetLnurlPayLink', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.GetLnurlPayLink) throw new Error('method: GetLnurlPayLink is not implemented') @@ -814,7 +814,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { if (!opts.allowNotImplementedMethods && !methods.GetLNURLChannelLink) throw new Error('method: GetLNURLChannelLink is not implemented') app.post('/api/user/lnurl_channel/url', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'GetLNURLChannelLink', batch: false, nostr: false, batchSize: 0} - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { if (!methods.GetLNURLChannelLink) throw new Error('method: GetLNURLChannelLink is not implemented') @@ -832,7 +832,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { }) app.post('/api/user/batch', async (req, res) => { const info: Types.RequestInfo = { rpcName: 'BatchUser', batch: true, nostr: false, batchSize: 1 } - const stats: Types.RequestStats = { start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} try { const requests = req.body.requests as Types.UserMethodInputs[] @@ -848,7 +848,7 @@ export default (methods: Types.ServerMethods, opts: ServerOptions) => { for (let i = 0; i < requests.length; i++) { const operation = requests[i] const opInfo: Types.RequestInfo = { rpcName: operation.rpcName, batch: true, nostr: false, batchSize: 0 } - const opStats: Types.RequestStats = { start:req.startTime || 0n, parse: stats.parse, guard: stats.guard, validate: 0n, handle: 0n } + const opStats: Types.RequestStats = { startMs:req.startTimeMs || 0, start:req.startTime || 0n, parse: stats.parse, guard: stats.guard, validate: 0n, handle: 0n } try { switch(operation.rpcName) { case 'GetUserInfo': diff --git a/proto/autogenerated/ts/nostr_transport.ts b/proto/autogenerated/ts/nostr_transport.ts index a60629a5..1e5fba24 100644 --- a/proto/autogenerated/ts/nostr_transport.ts +++ b/proto/autogenerated/ts/nostr_transport.ts @@ -23,10 +23,10 @@ const logErrorAndReturnResponse = (error: Error, response: string, res: NostrRes } export default (methods: Types.ServerMethods, opts: NostrOptions) => { const logger = opts.logger || { log: console.log, error: console.error } - return async (req: NostrRequest, res: NostrResponse, startString: string) => { + return async (req: NostrRequest, res: NostrResponse, startString: string, startMs: number) => { const startTime = BigInt(startString) const info: Types.RequestInfo = { rpcName: req.rpcName || 'unkown', batch: false, nostr: true, batchSize: 0 } - const stats: Types.RequestStats = { start: startTime, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } + const stats: Types.RequestStats = { startMs, start: startTime, parse: process.hrtime.bigint(), guard: 0n, validate: 0n, handle: 0n } let authCtx: Types.AuthContext = {} switch (req.rpcName) { case 'GetUserInfo': @@ -264,7 +264,7 @@ export default (methods: Types.ServerMethods, opts: NostrOptions) => { for (let i = 0; i < requests.length; i++) { const operation = requests[i] const opInfo: Types.RequestInfo = { rpcName: operation.rpcName, batch: true, nostr: true, batchSize: 0 } - const opStats: Types.RequestStats = { start: startTime, parse: stats.parse, guard: stats.guard, validate: 0n, handle: 0n } + const opStats: Types.RequestStats = { startMs, start: startTime, parse: stats.parse, guard: stats.guard, validate: 0n, handle: 0n } try { switch(operation.rpcName) { case 'GetUserInfo': diff --git a/proto/autogenerated/ts/types.ts b/proto/autogenerated/ts/types.ts index 5f02463c..133309e6 100644 --- a/proto/autogenerated/ts/types.ts +++ b/proto/autogenerated/ts/types.ts @@ -2,16 +2,16 @@ export type ResultError = { status: 'ERROR', reason: string } export type RequestInfo = { rpcName: string, batch: boolean, nostr: boolean, batchSize: number } -export type RequestStats = { start:bigint, parse: bigint, guard: bigint, validate: bigint, handle: bigint } +export type RequestStats = { startMs:number, start:bigint, parse: bigint, guard: bigint, validate: bigint, handle: bigint } export type RequestMetric = AuthContext & RequestInfo & RequestStats & { error?: string } export type GuestContext = { } export type GuestMethodInputs = Health_Input | EncryptionExchange_Input | SetMockInvoiceAsPaid_Input | GetLnurlWithdrawInfo_Input | HandleLnurlWithdraw_Input | GetLnurlPayInfo_Input | HandleLnurlPay_Input | HandleLnurlAddress_Input export type GuestMethodOutputs = Health_Output | EncryptionExchange_Output | SetMockInvoiceAsPaid_Output | GetLnurlWithdrawInfo_Output | HandleLnurlWithdraw_Output | GetLnurlPayInfo_Output | HandleLnurlPay_Output | HandleLnurlAddress_Output export type UserContext = { - user_id: string app_id: string app_user_id: string + user_id: string } export type UserMethodInputs = GetUserInfo_Input | AddProduct_Input | NewProductInvoice_Input | GetUserOperations_Input | NewAddress_Input | PayAddress_Input | NewInvoice_Input | DecodeInvoice_Input | PayInvoice_Input | OpenChannel_Input | GetLnurlWithdrawLink_Input | GetLnurlPayLink_Input | GetLNURLChannelLink_Input export type UserMethodOutputs = GetUserInfo_Output | AddProduct_Output | NewProductInvoice_Output | GetUserOperations_Output | NewAddress_Output | PayAddress_Output | NewInvoice_Output | DecodeInvoice_Output | PayInvoice_Output | OpenChannel_Output | GetLnurlWithdrawLink_Output | GetLnurlPayLink_Output | GetLNURLChannelLink_Output @@ -246,48 +246,48 @@ export type OptionsBaseMessage = { allOptionalsAreSet?: true } -export type NewAddressRequest = { - addressType: AddressType +export type GetAppUserRequest = { + user_identifier: string } -export const NewAddressRequestOptionalFields: [] = [] -export type NewAddressRequestOptions = OptionsBaseMessage & { +export const GetAppUserRequestOptionalFields: [] = [] +export type GetAppUserRequestOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - addressType_CustomCheck?: (v: AddressType) => boolean + user_identifier_CustomCheck?: (v: string) => boolean } -export const NewAddressRequestValidate = (o?: NewAddressRequest, opts: NewAddressRequestOptions = {}, path: string = 'NewAddressRequest::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 (!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`) + 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 } -export type UserInfo = { - userId: string - balance: number - max_withdrawable: number +export type PayAppUserInvoiceRequest = { + user_identifier: string + invoice: string + amount: number } -export const UserInfoOptionalFields: [] = [] -export type UserInfoOptions = OptionsBaseMessage & { +export const PayAppUserInvoiceRequestOptionalFields: [] = [] +export type PayAppUserInvoiceRequestOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - userId_CustomCheck?: (v: string) => boolean - balance_CustomCheck?: (v: number) => boolean - max_withdrawable_CustomCheck?: (v: number) => boolean + user_identifier_CustomCheck?: (v: string) => boolean + invoice_CustomCheck?: (v: string) => boolean + amount_CustomCheck?: (v: number) => boolean } -export const UserInfoValidate = (o?: UserInfo, opts: UserInfoOptions = {}, path: string = 'UserInfo::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.userId !== 'string') return new Error(`${path}.userId: is not a string`) - if (opts.userId_CustomCheck && !opts.userId_CustomCheck(o.userId)) return new Error(`${path}.userId: 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.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.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.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.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 } @@ -320,6 +320,997 @@ export const SendAppUserToAppUserPaymentRequestValidate = (o?: SendAppUserToAppU 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 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 AppsMetrics = { + apps: AppMetrics[] +} +export const AppsMetricsOptionalFields: [] = [] +export type AppsMetricsOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + apps_ItemOptions?: AppMetricsOptions + apps_CustomCheck?: (v: AppMetrics[]) => boolean +} +export const AppsMetricsValidate = (o?: AppsMetrics, opts: AppsMetricsOptions = {}, path: string = 'AppsMetrics::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 (!Array.isArray(o.apps)) return new Error(`${path}.apps: is not an array`) + for (let index = 0; index < o.apps.length; index++) { + const appsErr = AppMetricsValidate(o.apps[index], opts.apps_ItemOptions, `${path}.apps[${index}]`) + if (appsErr !== null) return appsErr + } + if (opts.apps_CustomCheck && !opts.apps_CustomCheck(o.apps)) return new Error(`${path}.apps: 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 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 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`) + + return null +} + +export type PayInvoiceResponse = { + preimage: string + amount_paid: number + operation_id: string + service_fee: number + network_fee: number +} +export const PayInvoiceResponseOptionalFields: [] = [] +export type PayInvoiceResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + preimage_CustomCheck?: (v: string) => boolean + amount_paid_CustomCheck?: (v: number) => boolean + operation_id_CustomCheck?: (v: string) => boolean + service_fee_CustomCheck?: (v: number) => boolean + network_fee_CustomCheck?: (v: number) => boolean +} +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') + + 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.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.operation_id !== 'string') return new Error(`${path}.operation_id: is not a string`) + if (opts.operation_id_CustomCheck && !opts.operation_id_CustomCheck(o.operation_id)) return new Error(`${path}.operation_id: custom check failed`) + + if (typeof o.service_fee !== 'number') return new Error(`${path}.service_fee: is not a number`) + if (opts.service_fee_CustomCheck && !opts.service_fee_CustomCheck(o.service_fee)) return new Error(`${path}.service_fee: custom check failed`) + + if (typeof o.network_fee !== 'number') return new Error(`${path}.network_fee: is not a number`) + if (opts.network_fee_CustomCheck && !opts.network_fee_CustomCheck(o.network_fee)) return new Error(`${path}.network_fee: custom check failed`) + + return null +} + +export type LnurlWithdrawInfoResponse = { + tag: string + callback: string + k1: string + defaultDescription: string + minWithdrawable: number + maxWithdrawable: number + balanceCheck: string + payLink: string +} +export const LnurlWithdrawInfoResponseOptionalFields: [] = [] +export type LnurlWithdrawInfoResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + tag_CustomCheck?: (v: string) => boolean + callback_CustomCheck?: (v: string) => boolean + k1_CustomCheck?: (v: string) => boolean + defaultDescription_CustomCheck?: (v: string) => boolean + minWithdrawable_CustomCheck?: (v: number) => boolean + maxWithdrawable_CustomCheck?: (v: number) => boolean + balanceCheck_CustomCheck?: (v: string) => boolean + payLink_CustomCheck?: (v: string) => boolean +} +export const LnurlWithdrawInfoResponseValidate = (o?: LnurlWithdrawInfoResponse, opts: LnurlWithdrawInfoResponseOptions = {}, path: string = 'LnurlWithdrawInfoResponse::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.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`) + + if (typeof o.defaultDescription !== 'string') return new Error(`${path}.defaultDescription: is not a string`) + if (opts.defaultDescription_CustomCheck && !opts.defaultDescription_CustomCheck(o.defaultDescription)) return new Error(`${path}.defaultDescription: custom check failed`) + + if (typeof o.minWithdrawable !== 'number') return new Error(`${path}.minWithdrawable: is not a number`) + if (opts.minWithdrawable_CustomCheck && !opts.minWithdrawable_CustomCheck(o.minWithdrawable)) return new Error(`${path}.minWithdrawable: custom check failed`) + + if (typeof o.maxWithdrawable !== 'number') return new Error(`${path}.maxWithdrawable: is not a number`) + if (opts.maxWithdrawable_CustomCheck && !opts.maxWithdrawable_CustomCheck(o.maxWithdrawable)) return new Error(`${path}.maxWithdrawable: custom check failed`) + + if (typeof o.balanceCheck !== 'string') return new Error(`${path}.balanceCheck: is not a string`) + if (opts.balanceCheck_CustomCheck && !opts.balanceCheck_CustomCheck(o.balanceCheck)) return new Error(`${path}.balanceCheck: custom check failed`) + + if (typeof o.payLink !== 'string') return new Error(`${path}.payLink: is not a string`) + if (opts.payLink_CustomCheck && !opts.payLink_CustomCheck(o.payLink)) return new Error(`${path}.payLink: custom check failed`) + + return null +} + +export type LndMetricsRequest = { + from_unix?: number + to_unix?: number +} +export type LndMetricsRequestOptionalField = 'from_unix' | 'to_unix' +export const LndMetricsRequestOptionalFields: LndMetricsRequestOptionalField[] = ['from_unix', 'to_unix'] +export type LndMetricsRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: LndMetricsRequestOptionalField[] + from_unix_CustomCheck?: (v?: number) => boolean + to_unix_CustomCheck?: (v?: number) => boolean +} +export const LndMetricsRequestValidate = (o?: LndMetricsRequest, opts: LndMetricsRequestOptions = {}, path: string = 'LndMetricsRequest::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 ((o.from_unix || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('from_unix')) && typeof o.from_unix !== 'number') return new Error(`${path}.from_unix: is not a number`) + if (opts.from_unix_CustomCheck && !opts.from_unix_CustomCheck(o.from_unix)) return new Error(`${path}.from_unix: custom check failed`) + + if ((o.to_unix || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('to_unix')) && typeof o.to_unix !== 'number') return new Error(`${path}.to_unix: is not a number`) + if (opts.to_unix_CustomCheck && !opts.to_unix_CustomCheck(o.to_unix)) return new Error(`${path}.to_unix: custom check failed`) + + return null +} + +export type ChannelBalanceEvent = { + block_height: number + channel_id: string + local_balance_sats: number + remote_balance_sats: number +} +export const ChannelBalanceEventOptionalFields: [] = [] +export type ChannelBalanceEventOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + block_height_CustomCheck?: (v: number) => boolean + channel_id_CustomCheck?: (v: string) => boolean + local_balance_sats_CustomCheck?: (v: number) => boolean + remote_balance_sats_CustomCheck?: (v: number) => boolean +} +export const ChannelBalanceEventValidate = (o?: ChannelBalanceEvent, opts: ChannelBalanceEventOptions = {}, path: string = 'ChannelBalanceEvent::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.block_height !== 'number') return new Error(`${path}.block_height: is not a number`) + if (opts.block_height_CustomCheck && !opts.block_height_CustomCheck(o.block_height)) return new Error(`${path}.block_height: custom check failed`) + + if (typeof o.channel_id !== 'string') return new Error(`${path}.channel_id: is not a string`) + if (opts.channel_id_CustomCheck && !opts.channel_id_CustomCheck(o.channel_id)) return new Error(`${path}.channel_id: custom check failed`) + + if (typeof o.local_balance_sats !== 'number') return new Error(`${path}.local_balance_sats: is not a number`) + if (opts.local_balance_sats_CustomCheck && !opts.local_balance_sats_CustomCheck(o.local_balance_sats)) return new Error(`${path}.local_balance_sats: custom check failed`) + + if (typeof o.remote_balance_sats !== 'number') return new Error(`${path}.remote_balance_sats: is not a number`) + if (opts.remote_balance_sats_CustomCheck && !opts.remote_balance_sats_CustomCheck(o.remote_balance_sats)) return new Error(`${path}.remote_balance_sats: 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 PayAddressResponse = { + txId: string + operation_id: string + service_fee: number + network_fee: number +} +export const PayAddressResponseOptionalFields: [] = [] +export type PayAddressResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + txId_CustomCheck?: (v: string) => boolean + operation_id_CustomCheck?: (v: string) => boolean + service_fee_CustomCheck?: (v: number) => boolean + network_fee_CustomCheck?: (v: number) => 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`) + + if (typeof o.operation_id !== 'string') return new Error(`${path}.operation_id: is not a string`) + if (opts.operation_id_CustomCheck && !opts.operation_id_CustomCheck(o.operation_id)) return new Error(`${path}.operation_id: custom check failed`) + + if (typeof o.service_fee !== 'number') return new Error(`${path}.service_fee: is not a number`) + if (opts.service_fee_CustomCheck && !opts.service_fee_CustomCheck(o.service_fee)) return new Error(`${path}.service_fee: custom check failed`) + + if (typeof o.network_fee !== 'number') return new Error(`${path}.network_fee: is not a number`) + if (opts.network_fee_CustomCheck && !opts.network_fee_CustomCheck(o.network_fee)) return new Error(`${path}.network_fee: custom check failed`) + + return null +} + +export type OpenChannelRequest = { + destination: string + fundingAmount: number + pushAmount: number + closeAddress: string +} +export const OpenChannelRequestOptionalFields: [] = [] +export type OpenChannelRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + destination_CustomCheck?: (v: string) => boolean + fundingAmount_CustomCheck?: (v: number) => boolean + pushAmount_CustomCheck?: (v: number) => boolean + closeAddress_CustomCheck?: (v: string) => boolean +} +export const OpenChannelRequestValidate = (o?: OpenChannelRequest, opts: OpenChannelRequestOptions = {}, path: string = 'OpenChannelRequest::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.destination !== 'string') return new Error(`${path}.destination: is not a string`) + if (opts.destination_CustomCheck && !opts.destination_CustomCheck(o.destination)) return new Error(`${path}.destination: custom check failed`) + + if (typeof o.fundingAmount !== 'number') return new Error(`${path}.fundingAmount: is not a number`) + if (opts.fundingAmount_CustomCheck && !opts.fundingAmount_CustomCheck(o.fundingAmount)) return new Error(`${path}.fundingAmount: custom check failed`) + + if (typeof o.pushAmount !== 'number') return new Error(`${path}.pushAmount: is not a number`) + if (opts.pushAmount_CustomCheck && !opts.pushAmount_CustomCheck(o.pushAmount)) return new Error(`${path}.pushAmount: custom check failed`) + + if (typeof o.closeAddress !== 'string') return new Error(`${path}.closeAddress: is not a string`) + if (opts.closeAddress_CustomCheck && !opts.closeAddress_CustomCheck(o.closeAddress)) return new Error(`${path}.closeAddress: 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 RelaysMigration = { + relays: string[] +} +export const RelaysMigrationOptionalFields: [] = [] +export type RelaysMigrationOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + relays_CustomCheck?: (v: string[]) => boolean +} +export const RelaysMigrationValidate = (o?: RelaysMigration, opts: RelaysMigrationOptions = {}, path: string = 'RelaysMigration::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 (!Array.isArray(o.relays)) return new Error(`${path}.relays: is not an array`) + for (let index = 0; index < o.relays.length; index++) { + if (typeof o.relays[index] !== 'string') return new Error(`${path}.relays[${index}]: is not a string`) + } + if (opts.relays_CustomCheck && !opts.relays_CustomCheck(o.relays)) return new Error(`${path}.relays: custom check failed`) + + return null +} + +export type Empty = { +} +export const EmptyOptionalFields: [] = [] +export type EmptyOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] +} +export const EmptyValidate = (o?: Empty, opts: EmptyOptions = {}, path: string = 'Empty::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') + + return null +} + +export type AddAppUserRequest = { + identifier: string + fail_if_exists: boolean + balance: number +} +export const AddAppUserRequestOptionalFields: [] = [] +export type AddAppUserRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + identifier_CustomCheck?: (v: string) => boolean + fail_if_exists_CustomCheck?: (v: boolean) => boolean + balance_CustomCheck?: (v: number) => boolean +} +export const AddAppUserRequestValidate = (o?: AddAppUserRequest, opts: AddAppUserRequestOptions = {}, path: string = 'AddAppUserRequest::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.fail_if_exists !== 'boolean') return new Error(`${path}.fail_if_exists: is not a boolean`) + if (opts.fail_if_exists_CustomCheck && !opts.fail_if_exists_CustomCheck(o.fail_if_exists)) return new Error(`${path}.fail_if_exists: 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`) + + return null +} + +export type Application = { + name: string + id: string + balance: number + npub: string +} +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 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 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 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 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 MigrationUpdate = { + closure?: ClosureMigration + relays?: RelaysMigration +} +export type MigrationUpdateOptionalField = 'closure' | 'relays' +export const MigrationUpdateOptionalFields: MigrationUpdateOptionalField[] = ['closure', 'relays'] +export type MigrationUpdateOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: MigrationUpdateOptionalField[] + closure_Options?: ClosureMigrationOptions + relays_Options?: RelaysMigrationOptions +} +export const MigrationUpdateValidate = (o?: MigrationUpdate, opts: MigrationUpdateOptions = {}, path: string = 'MigrationUpdate::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.closure === 'object' || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('closure')) { + const closureErr = ClosureMigrationValidate(o.closure, opts.closure_Options, `${path}.closure`) + if (closureErr !== null) return closureErr + } + + + if (typeof o.relays === 'object' || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('relays')) { + const relaysErr = RelaysMigrationValidate(o.relays, opts.relays_Options, `${path}.relays`) + if (relaysErr !== null) return relaysErr + } + + + return null +} + +export type LndNodeMetrics = { + channels_balance_events: ChannelBalanceEvent[] + chain_balance_events: ChainBalanceEvent[] + routing_events: RoutingEvent[] +} +export const LndNodeMetricsOptionalFields: [] = [] +export type LndNodeMetricsOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + channels_balance_events_ItemOptions?: ChannelBalanceEventOptions + channels_balance_events_CustomCheck?: (v: ChannelBalanceEvent[]) => boolean + chain_balance_events_ItemOptions?: ChainBalanceEventOptions + chain_balance_events_CustomCheck?: (v: ChainBalanceEvent[]) => boolean + routing_events_ItemOptions?: RoutingEventOptions + routing_events_CustomCheck?: (v: RoutingEvent[]) => boolean +} +export const LndNodeMetricsValidate = (o?: LndNodeMetrics, opts: LndNodeMetricsOptions = {}, path: string = 'LndNodeMetrics::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 (!Array.isArray(o.channels_balance_events)) return new Error(`${path}.channels_balance_events: is not an array`) + for (let index = 0; index < o.channels_balance_events.length; index++) { + const channels_balance_eventsErr = ChannelBalanceEventValidate(o.channels_balance_events[index], opts.channels_balance_events_ItemOptions, `${path}.channels_balance_events[${index}]`) + if (channels_balance_eventsErr !== null) return channels_balance_eventsErr + } + if (opts.channels_balance_events_CustomCheck && !opts.channels_balance_events_CustomCheck(o.channels_balance_events)) return new Error(`${path}.channels_balance_events: custom check failed`) + + if (!Array.isArray(o.chain_balance_events)) return new Error(`${path}.chain_balance_events: is not an array`) + for (let index = 0; index < o.chain_balance_events.length; index++) { + const chain_balance_eventsErr = ChainBalanceEventValidate(o.chain_balance_events[index], opts.chain_balance_events_ItemOptions, `${path}.chain_balance_events[${index}]`) + if (chain_balance_eventsErr !== null) return chain_balance_eventsErr + } + if (opts.chain_balance_events_CustomCheck && !opts.chain_balance_events_CustomCheck(o.chain_balance_events)) return new Error(`${path}.chain_balance_events: custom check failed`) + + if (!Array.isArray(o.routing_events)) return new Error(`${path}.routing_events: is not an array`) + for (let index = 0; index < o.routing_events.length; index++) { + const routing_eventsErr = RoutingEventValidate(o.routing_events[index], opts.routing_events_ItemOptions, `${path}.routing_events[${index}]`) + if (routing_eventsErr !== null) return routing_eventsErr + } + if (opts.routing_events_CustomCheck && !opts.routing_events_CustomCheck(o.routing_events)) return new Error(`${path}.routing_events: 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 UsageMetric = { + processed_at_ms: number + parsed_in_nano: number + auth_in_nano: number + validate_in_nano: number + handle_in_nano: number + rpc_name: string + batch: boolean + nostr: boolean + batch_size: number +} +export const UsageMetricOptionalFields: [] = [] +export type UsageMetricOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + processed_at_ms_CustomCheck?: (v: number) => boolean + parsed_in_nano_CustomCheck?: (v: number) => boolean + auth_in_nano_CustomCheck?: (v: number) => boolean + validate_in_nano_CustomCheck?: (v: number) => boolean + handle_in_nano_CustomCheck?: (v: number) => boolean + rpc_name_CustomCheck?: (v: string) => boolean + batch_CustomCheck?: (v: boolean) => boolean + nostr_CustomCheck?: (v: boolean) => boolean + batch_size_CustomCheck?: (v: number) => boolean +} +export const UsageMetricValidate = (o?: UsageMetric, opts: UsageMetricOptions = {}, path: string = 'UsageMetric::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.processed_at_ms !== 'number') return new Error(`${path}.processed_at_ms: is not a number`) + if (opts.processed_at_ms_CustomCheck && !opts.processed_at_ms_CustomCheck(o.processed_at_ms)) return new Error(`${path}.processed_at_ms: custom check failed`) + + if (typeof o.parsed_in_nano !== 'number') return new Error(`${path}.parsed_in_nano: is not a number`) + if (opts.parsed_in_nano_CustomCheck && !opts.parsed_in_nano_CustomCheck(o.parsed_in_nano)) return new Error(`${path}.parsed_in_nano: custom check failed`) + + if (typeof o.auth_in_nano !== 'number') return new Error(`${path}.auth_in_nano: is not a number`) + if (opts.auth_in_nano_CustomCheck && !opts.auth_in_nano_CustomCheck(o.auth_in_nano)) return new Error(`${path}.auth_in_nano: custom check failed`) + + if (typeof o.validate_in_nano !== 'number') return new Error(`${path}.validate_in_nano: is not a number`) + if (opts.validate_in_nano_CustomCheck && !opts.validate_in_nano_CustomCheck(o.validate_in_nano)) return new Error(`${path}.validate_in_nano: custom check failed`) + + if (typeof o.handle_in_nano !== 'number') return new Error(`${path}.handle_in_nano: is not a number`) + if (opts.handle_in_nano_CustomCheck && !opts.handle_in_nano_CustomCheck(o.handle_in_nano)) return new Error(`${path}.handle_in_nano: custom check failed`) + + if (typeof o.rpc_name !== 'string') return new Error(`${path}.rpc_name: is not a string`) + if (opts.rpc_name_CustomCheck && !opts.rpc_name_CustomCheck(o.rpc_name)) return new Error(`${path}.rpc_name: custom check failed`) + + if (typeof o.batch !== 'boolean') return new Error(`${path}.batch: is not a boolean`) + if (opts.batch_CustomCheck && !opts.batch_CustomCheck(o.batch)) return new Error(`${path}.batch: custom check failed`) + + if (typeof o.nostr !== 'boolean') return new Error(`${path}.nostr: is not a boolean`) + if (opts.nostr_CustomCheck && !opts.nostr_CustomCheck(o.nostr)) return new Error(`${path}.nostr: custom check failed`) + + if (typeof o.batch_size !== 'number') return new Error(`${path}.batch_size: is not a number`) + if (opts.batch_size_CustomCheck && !opts.batch_size_CustomCheck(o.batch_size)) return new Error(`${path}.batch_size: custom check failed`) + + return null +} + +export type AppMetrics = { + app: Application + users: UsersInfo + total_received: number + total_spent: number + total_available: number + unpaid_invoices: number + operations: UserOperation[] +} +export const AppMetricsOptionalFields: [] = [] +export type AppMetricsOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + app_Options?: ApplicationOptions + users_Options?: UsersInfoOptions + total_received_CustomCheck?: (v: number) => boolean + total_spent_CustomCheck?: (v: number) => boolean + total_available_CustomCheck?: (v: number) => boolean + unpaid_invoices_CustomCheck?: (v: number) => boolean + operations_ItemOptions?: UserOperationOptions + operations_CustomCheck?: (v: UserOperation[]) => boolean +} +export const AppMetricsValidate = (o?: AppMetrics, opts: AppMetricsOptions = {}, path: string = 'AppMetrics::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 + + + const usersErr = UsersInfoValidate(o.users, opts.users_Options, `${path}.users`) + if (usersErr !== null) return usersErr + + + if (typeof o.total_received !== 'number') return new Error(`${path}.total_received: is not a number`) + if (opts.total_received_CustomCheck && !opts.total_received_CustomCheck(o.total_received)) return new Error(`${path}.total_received: custom check failed`) + + if (typeof o.total_spent !== 'number') return new Error(`${path}.total_spent: is not a number`) + if (opts.total_spent_CustomCheck && !opts.total_spent_CustomCheck(o.total_spent)) return new Error(`${path}.total_spent: custom check failed`) + + if (typeof o.total_available !== 'number') return new Error(`${path}.total_available: is not a number`) + if (opts.total_available_CustomCheck && !opts.total_available_CustomCheck(o.total_available)) return new Error(`${path}.total_available: custom check failed`) + + if (typeof o.unpaid_invoices !== 'number') return new Error(`${path}.unpaid_invoices: is not a number`) + if (opts.unpaid_invoices_CustomCheck && !opts.unpaid_invoices_CustomCheck(o.unpaid_invoices)) return new Error(`${path}.unpaid_invoices: 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 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 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 + latestOutgoingTxOperations: UserOperations + latestIncomingTxOperations: UserOperations + latestOutgoingUserToUserPayemnts: UserOperations + latestIncomingUserToUserPayemnts: UserOperations +} +export const GetUserOperationsResponseOptionalFields: [] = [] +export type GetUserOperationsResponseOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + latestOutgoingInvoiceOperations_Options?: UserOperationsOptions + latestIncomingInvoiceOperations_Options?: UserOperationsOptions + latestOutgoingTxOperations_Options?: UserOperationsOptions + latestIncomingTxOperations_Options?: UserOperationsOptions + latestOutgoingUserToUserPayemnts_Options?: UserOperationsOptions + latestIncomingUserToUserPayemnts_Options?: UserOperationsOptions +} +export const GetUserOperationsResponseValidate = (o?: GetUserOperationsResponse, opts: GetUserOperationsResponseOptions = {}, path: string = 'GetUserOperationsResponse::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 latestOutgoingInvoiceOperationsErr = UserOperationsValidate(o.latestOutgoingInvoiceOperations, opts.latestOutgoingInvoiceOperations_Options, `${path}.latestOutgoingInvoiceOperations`) + if (latestOutgoingInvoiceOperationsErr !== null) return latestOutgoingInvoiceOperationsErr + + + const latestIncomingInvoiceOperationsErr = UserOperationsValidate(o.latestIncomingInvoiceOperations, opts.latestIncomingInvoiceOperations_Options, `${path}.latestIncomingInvoiceOperations`) + if (latestIncomingInvoiceOperationsErr !== null) return latestIncomingInvoiceOperationsErr + + + const latestOutgoingTxOperationsErr = UserOperationsValidate(o.latestOutgoingTxOperations, opts.latestOutgoingTxOperations_Options, `${path}.latestOutgoingTxOperations`) + if (latestOutgoingTxOperationsErr !== null) return latestOutgoingTxOperationsErr + + + const latestIncomingTxOperationsErr = UserOperationsValidate(o.latestIncomingTxOperations, opts.latestIncomingTxOperations_Options, `${path}.latestIncomingTxOperations`) + if (latestIncomingTxOperationsErr !== null) return latestIncomingTxOperationsErr + + + const latestOutgoingUserToUserPayemntsErr = UserOperationsValidate(o.latestOutgoingUserToUserPayemnts, opts.latestOutgoingUserToUserPayemnts_Options, `${path}.latestOutgoingUserToUserPayemnts`) + if (latestOutgoingUserToUserPayemntsErr !== null) return latestOutgoingUserToUserPayemntsErr + + + const latestIncomingUserToUserPayemntsErr = UserOperationsValidate(o.latestIncomingUserToUserPayemnts, opts.latestIncomingUserToUserPayemnts_Options, `${path}.latestIncomingUserToUserPayemnts`) + if (latestIncomingUserToUserPayemntsErr !== null) return latestIncomingUserToUserPayemntsErr + + + return null +} + +export type LndMetrics = { + nodes: LndNodeMetrics[] +} +export const LndMetricsOptionalFields: [] = [] +export type LndMetricsOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + nodes_ItemOptions?: LndNodeMetricsOptions + nodes_CustomCheck?: (v: LndNodeMetrics[]) => boolean +} +export const LndMetricsValidate = (o?: LndMetrics, opts: LndMetricsOptions = {}, path: string = 'LndMetrics::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 (!Array.isArray(o.nodes)) return new Error(`${path}.nodes: is not an array`) + for (let index = 0; index < o.nodes.length; index++) { + const nodesErr = LndNodeMetricsValidate(o.nodes[index], opts.nodes_ItemOptions, `${path}.nodes[${index}]`) + if (nodesErr !== null) return nodesErr + } + if (opts.nodes_CustomCheck && !opts.nodes_CustomCheck(o.nodes)) return new Error(`${path}.nodes: custom check failed`) + + 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 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 UserOperation = { paidAtUnix: number type: UserOperationType @@ -378,113 +1369,25 @@ export const UserOperationValidate = (o?: UserOperation, opts: UserOperationOpti return null } -export type AppMetrics = { - app: Application - users: UsersInfo - total_received: number - total_spent: number - total_available: number - unpaid_invoices: number - operations: UserOperation[] +export type EncryptionExchangeRequest = { + publicKey: string + deviceId: string } -export const AppMetricsOptionalFields: [] = [] -export type AppMetricsOptions = OptionsBaseMessage & { +export const EncryptionExchangeRequestOptionalFields: [] = [] +export type EncryptionExchangeRequestOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - app_Options?: ApplicationOptions - users_Options?: UsersInfoOptions - total_received_CustomCheck?: (v: number) => boolean - total_spent_CustomCheck?: (v: number) => boolean - total_available_CustomCheck?: (v: number) => boolean - unpaid_invoices_CustomCheck?: (v: number) => boolean - operations_ItemOptions?: UserOperationOptions - operations_CustomCheck?: (v: UserOperation[]) => boolean + publicKey_CustomCheck?: (v: string) => boolean + deviceId_CustomCheck?: (v: string) => boolean } -export const AppMetricsValidate = (o?: AppMetrics, opts: AppMetricsOptions = {}, path: string = 'AppMetrics::root.'): Error | null => { +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') - const appErr = ApplicationValidate(o.app, opts.app_Options, `${path}.app`) - if (appErr !== null) return appErr - + 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`) - const usersErr = UsersInfoValidate(o.users, opts.users_Options, `${path}.users`) - if (usersErr !== null) return usersErr - - - if (typeof o.total_received !== 'number') return new Error(`${path}.total_received: is not a number`) - if (opts.total_received_CustomCheck && !opts.total_received_CustomCheck(o.total_received)) return new Error(`${path}.total_received: custom check failed`) - - if (typeof o.total_spent !== 'number') return new Error(`${path}.total_spent: is not a number`) - if (opts.total_spent_CustomCheck && !opts.total_spent_CustomCheck(o.total_spent)) return new Error(`${path}.total_spent: custom check failed`) - - if (typeof o.total_available !== 'number') return new Error(`${path}.total_available: is not a number`) - if (opts.total_available_CustomCheck && !opts.total_available_CustomCheck(o.total_available)) return new Error(`${path}.total_available: custom check failed`) - - if (typeof o.unpaid_invoices !== 'number') return new Error(`${path}.unpaid_invoices: is not a number`) - if (opts.unpaid_invoices_CustomCheck && !opts.unpaid_invoices_CustomCheck(o.unpaid_invoices)) return new Error(`${path}.unpaid_invoices: 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 AppsMetrics = { - apps: AppMetrics[] -} -export const AppsMetricsOptionalFields: [] = [] -export type AppsMetricsOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - apps_ItemOptions?: AppMetricsOptions - apps_CustomCheck?: (v: AppMetrics[]) => boolean -} -export const AppsMetricsValidate = (o?: AppsMetrics, opts: AppsMetricsOptions = {}, path: string = 'AppsMetrics::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 (!Array.isArray(o.apps)) return new Error(`${path}.apps: is not an array`) - for (let index = 0; index < o.apps.length; index++) { - const appsErr = AppMetricsValidate(o.apps[index], opts.apps_ItemOptions, `${path}.apps[${index}]`) - if (appsErr !== null) return appsErr - } - if (opts.apps_CustomCheck && !opts.apps_CustomCheck(o.apps)) return new Error(`${path}.apps: custom check failed`) - - return null -} - -export type ChannelBalanceEvent = { - block_height: number - channel_id: string - local_balance_sats: number - remote_balance_sats: number -} -export const ChannelBalanceEventOptionalFields: [] = [] -export type ChannelBalanceEventOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - block_height_CustomCheck?: (v: number) => boolean - channel_id_CustomCheck?: (v: string) => boolean - local_balance_sats_CustomCheck?: (v: number) => boolean - remote_balance_sats_CustomCheck?: (v: number) => boolean -} -export const ChannelBalanceEventValidate = (o?: ChannelBalanceEvent, opts: ChannelBalanceEventOptions = {}, path: string = 'ChannelBalanceEvent::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.block_height !== 'number') return new Error(`${path}.block_height: is not a number`) - if (opts.block_height_CustomCheck && !opts.block_height_CustomCheck(o.block_height)) return new Error(`${path}.block_height: custom check failed`) - - if (typeof o.channel_id !== 'string') return new Error(`${path}.channel_id: is not a string`) - if (opts.channel_id_CustomCheck && !opts.channel_id_CustomCheck(o.channel_id)) return new Error(`${path}.channel_id: custom check failed`) - - if (typeof o.local_balance_sats !== 'number') return new Error(`${path}.local_balance_sats: is not a number`) - if (opts.local_balance_sats_CustomCheck && !opts.local_balance_sats_CustomCheck(o.local_balance_sats)) return new Error(`${path}.local_balance_sats: custom check failed`) - - if (typeof o.remote_balance_sats !== 'number') return new Error(`${path}.remote_balance_sats: is not a number`) - if (opts.remote_balance_sats_CustomCheck && !opts.remote_balance_sats_CustomCheck(o.remote_balance_sats)) return new Error(`${path}.remote_balance_sats: 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 } @@ -518,599 +1421,6 @@ export const AddAppInvoiceRequestValidate = (o?: AddAppInvoiceRequest, opts: Add 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 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 AddAppUserRequest = { - identifier: string - fail_if_exists: boolean - balance: number -} -export const AddAppUserRequestOptionalFields: [] = [] -export type AddAppUserRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - identifier_CustomCheck?: (v: string) => boolean - fail_if_exists_CustomCheck?: (v: boolean) => boolean - balance_CustomCheck?: (v: number) => boolean -} -export const AddAppUserRequestValidate = (o?: AddAppUserRequest, opts: AddAppUserRequestOptions = {}, path: string = 'AddAppUserRequest::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.fail_if_exists !== 'boolean') return new Error(`${path}.fail_if_exists: is not a boolean`) - if (opts.fail_if_exists_CustomCheck && !opts.fail_if_exists_CustomCheck(o.fail_if_exists)) return new Error(`${path}.fail_if_exists: 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`) - - 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 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`) - - 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 LndNodeMetrics = { - channels_balance_events: ChannelBalanceEvent[] - chain_balance_events: ChainBalanceEvent[] - routing_events: RoutingEvent[] -} -export const LndNodeMetricsOptionalFields: [] = [] -export type LndNodeMetricsOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - channels_balance_events_ItemOptions?: ChannelBalanceEventOptions - channels_balance_events_CustomCheck?: (v: ChannelBalanceEvent[]) => boolean - chain_balance_events_ItemOptions?: ChainBalanceEventOptions - chain_balance_events_CustomCheck?: (v: ChainBalanceEvent[]) => boolean - routing_events_ItemOptions?: RoutingEventOptions - routing_events_CustomCheck?: (v: RoutingEvent[]) => boolean -} -export const LndNodeMetricsValidate = (o?: LndNodeMetrics, opts: LndNodeMetricsOptions = {}, path: string = 'LndNodeMetrics::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 (!Array.isArray(o.channels_balance_events)) return new Error(`${path}.channels_balance_events: is not an array`) - for (let index = 0; index < o.channels_balance_events.length; index++) { - const channels_balance_eventsErr = ChannelBalanceEventValidate(o.channels_balance_events[index], opts.channels_balance_events_ItemOptions, `${path}.channels_balance_events[${index}]`) - if (channels_balance_eventsErr !== null) return channels_balance_eventsErr - } - if (opts.channels_balance_events_CustomCheck && !opts.channels_balance_events_CustomCheck(o.channels_balance_events)) return new Error(`${path}.channels_balance_events: custom check failed`) - - if (!Array.isArray(o.chain_balance_events)) return new Error(`${path}.chain_balance_events: is not an array`) - for (let index = 0; index < o.chain_balance_events.length; index++) { - const chain_balance_eventsErr = ChainBalanceEventValidate(o.chain_balance_events[index], opts.chain_balance_events_ItemOptions, `${path}.chain_balance_events[${index}]`) - if (chain_balance_eventsErr !== null) return chain_balance_eventsErr - } - if (opts.chain_balance_events_CustomCheck && !opts.chain_balance_events_CustomCheck(o.chain_balance_events)) return new Error(`${path}.chain_balance_events: custom check failed`) - - if (!Array.isArray(o.routing_events)) return new Error(`${path}.routing_events: is not an array`) - for (let index = 0; index < o.routing_events.length; index++) { - const routing_eventsErr = RoutingEventValidate(o.routing_events[index], opts.routing_events_ItemOptions, `${path}.routing_events[${index}]`) - if (routing_eventsErr !== null) return routing_eventsErr - } - if (opts.routing_events_CustomCheck && !opts.routing_events_CustomCheck(o.routing_events)) return new Error(`${path}.routing_events: 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 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 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 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 AppsMetricsRequest = { - from_unix?: number - to_unix?: number - include_operations?: boolean -} -export type AppsMetricsRequestOptionalField = 'from_unix' | 'to_unix' | 'include_operations' -export const AppsMetricsRequestOptionalFields: AppsMetricsRequestOptionalField[] = ['from_unix', 'to_unix', 'include_operations'] -export type AppsMetricsRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: AppsMetricsRequestOptionalField[] - from_unix_CustomCheck?: (v?: number) => boolean - to_unix_CustomCheck?: (v?: number) => boolean - include_operations_CustomCheck?: (v?: boolean) => boolean -} -export const AppsMetricsRequestValidate = (o?: AppsMetricsRequest, opts: AppsMetricsRequestOptions = {}, path: string = 'AppsMetricsRequest::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 ((o.from_unix || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('from_unix')) && typeof o.from_unix !== 'number') return new Error(`${path}.from_unix: is not a number`) - if (opts.from_unix_CustomCheck && !opts.from_unix_CustomCheck(o.from_unix)) return new Error(`${path}.from_unix: custom check failed`) - - if ((o.to_unix || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('to_unix')) && typeof o.to_unix !== 'number') return new Error(`${path}.to_unix: is not a number`) - if (opts.to_unix_CustomCheck && !opts.to_unix_CustomCheck(o.to_unix)) return new Error(`${path}.to_unix: custom check failed`) - - if ((o.include_operations || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('include_operations')) && typeof o.include_operations !== 'boolean') return new Error(`${path}.include_operations: is not a boolean`) - if (opts.include_operations_CustomCheck && !opts.include_operations_CustomCheck(o.include_operations)) return new Error(`${path}.include_operations: custom check failed`) - - return null -} - -export type PayAddressResponse = { - txId: string - operation_id: string - service_fee: number - network_fee: number -} -export const PayAddressResponseOptionalFields: [] = [] -export type PayAddressResponseOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - txId_CustomCheck?: (v: string) => boolean - operation_id_CustomCheck?: (v: string) => boolean - service_fee_CustomCheck?: (v: number) => boolean - network_fee_CustomCheck?: (v: number) => 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`) - - if (typeof o.operation_id !== 'string') return new Error(`${path}.operation_id: is not a string`) - if (opts.operation_id_CustomCheck && !opts.operation_id_CustomCheck(o.operation_id)) return new Error(`${path}.operation_id: custom check failed`) - - if (typeof o.service_fee !== 'number') return new Error(`${path}.service_fee: is not a number`) - if (opts.service_fee_CustomCheck && !opts.service_fee_CustomCheck(o.service_fee)) return new Error(`${path}.service_fee: custom check failed`) - - if (typeof o.network_fee !== 'number') return new Error(`${path}.network_fee: is not a number`) - if (opts.network_fee_CustomCheck && !opts.network_fee_CustomCheck(o.network_fee)) return new Error(`${path}.network_fee: custom check failed`) - - return null -} - -export type PayInvoiceResponse = { - preimage: string - amount_paid: number - operation_id: string - service_fee: number - network_fee: number -} -export const PayInvoiceResponseOptionalFields: [] = [] -export type PayInvoiceResponseOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - preimage_CustomCheck?: (v: string) => boolean - amount_paid_CustomCheck?: (v: number) => boolean - operation_id_CustomCheck?: (v: string) => boolean - service_fee_CustomCheck?: (v: number) => boolean - network_fee_CustomCheck?: (v: number) => boolean -} -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') - - 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.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.operation_id !== 'string') return new Error(`${path}.operation_id: is not a string`) - if (opts.operation_id_CustomCheck && !opts.operation_id_CustomCheck(o.operation_id)) return new Error(`${path}.operation_id: custom check failed`) - - if (typeof o.service_fee !== 'number') return new Error(`${path}.service_fee: is not a number`) - if (opts.service_fee_CustomCheck && !opts.service_fee_CustomCheck(o.service_fee)) return new Error(`${path}.service_fee: custom check failed`) - - if (typeof o.network_fee !== 'number') return new Error(`${path}.network_fee: is not a number`) - if (opts.network_fee_CustomCheck && !opts.network_fee_CustomCheck(o.network_fee)) return new Error(`${path}.network_fee: custom check failed`) - - return null -} - -export type ChainBalanceEvent = { - block_height: number - confirmed_balance: number - unconfirmed_balance: number - total_balance: number -} -export const ChainBalanceEventOptionalFields: [] = [] -export type ChainBalanceEventOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - block_height_CustomCheck?: (v: number) => boolean - confirmed_balance_CustomCheck?: (v: number) => boolean - unconfirmed_balance_CustomCheck?: (v: number) => boolean - total_balance_CustomCheck?: (v: number) => boolean -} -export const ChainBalanceEventValidate = (o?: ChainBalanceEvent, opts: ChainBalanceEventOptions = {}, path: string = 'ChainBalanceEvent::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.block_height !== 'number') return new Error(`${path}.block_height: is not a number`) - if (opts.block_height_CustomCheck && !opts.block_height_CustomCheck(o.block_height)) return new Error(`${path}.block_height: custom check failed`) - - if (typeof o.confirmed_balance !== 'number') return new Error(`${path}.confirmed_balance: is not a number`) - if (opts.confirmed_balance_CustomCheck && !opts.confirmed_balance_CustomCheck(o.confirmed_balance)) return new Error(`${path}.confirmed_balance: custom check failed`) - - if (typeof o.unconfirmed_balance !== 'number') return new Error(`${path}.unconfirmed_balance: is not a number`) - if (opts.unconfirmed_balance_CustomCheck && !opts.unconfirmed_balance_CustomCheck(o.unconfirmed_balance)) return new Error(`${path}.unconfirmed_balance: custom check failed`) - - if (typeof o.total_balance !== 'number') return new Error(`${path}.total_balance: is not a number`) - if (opts.total_balance_CustomCheck && !opts.total_balance_CustomCheck(o.total_balance)) return new Error(`${path}.total_balance: 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 AppUser = { - identifier: string - info: UserInfo - max_withdrawable: number -} -export const AppUserOptionalFields: [] = [] -export type AppUserOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - identifier_CustomCheck?: (v: string) => boolean - info_Options?: UserInfoOptions - max_withdrawable_CustomCheck?: (v: number) => boolean -} -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.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 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 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 Empty = { -} -export const EmptyOptionalFields: [] = [] -export type EmptyOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] -} -export const EmptyValidate = (o?: Empty, opts: EmptyOptions = {}, path: string = 'Empty::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') - - return null -} - -export type UsageMetric = { - processed_at_nano: string - parsed_in_nano: number - auth_in_nano: number - validate_in_nano: number - handle_in_nano: number - rpc_name: string - batch: boolean - nostr: boolean - batch_size: number -} -export const UsageMetricOptionalFields: [] = [] -export type UsageMetricOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - processed_at_nano_CustomCheck?: (v: string) => boolean - parsed_in_nano_CustomCheck?: (v: number) => boolean - auth_in_nano_CustomCheck?: (v: number) => boolean - validate_in_nano_CustomCheck?: (v: number) => boolean - handle_in_nano_CustomCheck?: (v: number) => boolean - rpc_name_CustomCheck?: (v: string) => boolean - batch_CustomCheck?: (v: boolean) => boolean - nostr_CustomCheck?: (v: boolean) => boolean - batch_size_CustomCheck?: (v: number) => boolean -} -export const UsageMetricValidate = (o?: UsageMetric, opts: UsageMetricOptions = {}, path: string = 'UsageMetric::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.processed_at_nano !== 'string') return new Error(`${path}.processed_at_nano: is not a string`) - if (opts.processed_at_nano_CustomCheck && !opts.processed_at_nano_CustomCheck(o.processed_at_nano)) return new Error(`${path}.processed_at_nano: custom check failed`) - - if (typeof o.parsed_in_nano !== 'number') return new Error(`${path}.parsed_in_nano: is not a number`) - if (opts.parsed_in_nano_CustomCheck && !opts.parsed_in_nano_CustomCheck(o.parsed_in_nano)) return new Error(`${path}.parsed_in_nano: custom check failed`) - - if (typeof o.auth_in_nano !== 'number') return new Error(`${path}.auth_in_nano: is not a number`) - if (opts.auth_in_nano_CustomCheck && !opts.auth_in_nano_CustomCheck(o.auth_in_nano)) return new Error(`${path}.auth_in_nano: custom check failed`) - - if (typeof o.validate_in_nano !== 'number') return new Error(`${path}.validate_in_nano: is not a number`) - if (opts.validate_in_nano_CustomCheck && !opts.validate_in_nano_CustomCheck(o.validate_in_nano)) return new Error(`${path}.validate_in_nano: custom check failed`) - - if (typeof o.handle_in_nano !== 'number') return new Error(`${path}.handle_in_nano: is not a number`) - if (opts.handle_in_nano_CustomCheck && !opts.handle_in_nano_CustomCheck(o.handle_in_nano)) return new Error(`${path}.handle_in_nano: custom check failed`) - - if (typeof o.rpc_name !== 'string') return new Error(`${path}.rpc_name: is not a string`) - if (opts.rpc_name_CustomCheck && !opts.rpc_name_CustomCheck(o.rpc_name)) return new Error(`${path}.rpc_name: custom check failed`) - - if (typeof o.batch !== 'boolean') return new Error(`${path}.batch: is not a boolean`) - if (opts.batch_CustomCheck && !opts.batch_CustomCheck(o.batch)) return new Error(`${path}.batch: custom check failed`) - - if (typeof o.nostr !== 'boolean') return new Error(`${path}.nostr: is not a boolean`) - if (opts.nostr_CustomCheck && !opts.nostr_CustomCheck(o.nostr)) return new Error(`${path}.nostr: custom check failed`) - - if (typeof o.batch_size !== 'number') return new Error(`${path}.batch_size: is not a number`) - if (opts.batch_size_CustomCheck && !opts.batch_size_CustomCheck(o.batch_size)) return new Error(`${path}.batch_size: custom check failed`) - - return null -} - -export type LndMetrics = { - nodes: LndNodeMetrics[] -} -export const LndMetricsOptionalFields: [] = [] -export type LndMetricsOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - nodes_ItemOptions?: LndNodeMetricsOptions - nodes_CustomCheck?: (v: LndNodeMetrics[]) => boolean -} -export const LndMetricsValidate = (o?: LndMetrics, opts: LndMetricsOptions = {}, path: string = 'LndMetrics::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 (!Array.isArray(o.nodes)) return new Error(`${path}.nodes: is not an array`) - for (let index = 0; index < o.nodes.length; index++) { - const nodesErr = LndNodeMetricsValidate(o.nodes[index], opts.nodes_ItemOptions, `${path}.nodes[${index}]`) - if (nodesErr !== null) return nodesErr - } - if (opts.nodes_CustomCheck && !opts.nodes_CustomCheck(o.nodes)) return new Error(`${path}.nodes: custom check failed`) - - return null -} - export type UsersInfo = { total: number no_balance: number @@ -1154,212 +1464,22 @@ export const UsersInfoValidate = (o?: UsersInfo, opts: UsersInfoOptions = {}, pa 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 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 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 RelaysMigration = { - relays: string[] -} -export const RelaysMigrationOptionalFields: [] = [] -export type RelaysMigrationOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - relays_CustomCheck?: (v: string[]) => boolean -} -export const RelaysMigrationValidate = (o?: RelaysMigration, opts: RelaysMigrationOptions = {}, path: string = 'RelaysMigration::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 (!Array.isArray(o.relays)) return new Error(`${path}.relays: is not an array`) - for (let index = 0; index < o.relays.length; index++) { - if (typeof o.relays[index] !== 'string') return new Error(`${path}.relays[${index}]: is not a string`) - } - if (opts.relays_CustomCheck && !opts.relays_CustomCheck(o.relays)) return new Error(`${path}.relays: custom check failed`) - - return null -} - -export type GetAppUserRequest = { - user_identifier: string -} -export const GetAppUserRequestOptionalFields: [] = [] -export type GetAppUserRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - user_identifier_CustomCheck?: (v: string) => boolean -} -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.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 -} - -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 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 SetMockAppUserBalanceRequest = { - user_identifier: string +export type SendAppUserToAppPaymentRequest = { + from_user_identifier: string amount: number } -export const SetMockAppUserBalanceRequestOptionalFields: [] = [] -export type SetMockAppUserBalanceRequestOptions = OptionsBaseMessage & { +export const SendAppUserToAppPaymentRequestOptionalFields: [] = [] +export type SendAppUserToAppPaymentRequestOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - user_identifier_CustomCheck?: (v: string) => boolean + from_user_identifier_CustomCheck?: (v: string) => boolean amount_CustomCheck?: (v: number) => boolean } -export const SetMockAppUserBalanceRequestValidate = (o?: SetMockAppUserBalanceRequest, opts: SetMockAppUserBalanceRequestOptions = {}, path: string = 'SetMockAppUserBalanceRequest::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.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.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`) @@ -1367,61 +1487,38 @@ export const SetMockAppUserBalanceRequestValidate = (o?: SetMockAppUserBalanceRe return null } -export type NewInvoiceResponse = { - invoice: string +export type DecodeInvoiceResponse = { + amount: number } -export const NewInvoiceResponseOptionalFields: [] = [] -export type NewInvoiceResponseOptions = OptionsBaseMessage & { +export const DecodeInvoiceResponseOptionalFields: [] = [] +export type DecodeInvoiceResponseOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - invoice_CustomCheck?: (v: string) => boolean + amount_CustomCheck?: (v: number) => boolean } -export const NewInvoiceResponseValidate = (o?: NewInvoiceResponse, opts: NewInvoiceResponseOptions = {}, path: string = 'NewInvoiceResponse::root.'): Error | null => { +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.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 OpenChannelResponse = { - channelId: string +export type NewAddressResponse = { + address: string } -export const OpenChannelResponseOptionalFields: [] = [] -export type OpenChannelResponseOptions = OptionsBaseMessage & { +export const NewAddressResponseOptionalFields: [] = [] +export type NewAddressResponseOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - channelId_CustomCheck?: (v: string) => boolean + address_CustomCheck?: (v: string) => boolean } -export const OpenChannelResponseValidate = (o?: OpenChannelResponse, opts: OpenChannelResponseOptions = {}, path: string = 'OpenChannelResponse::root.'): Error | null => { +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.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 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`) + 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 } @@ -1499,115 +1596,20 @@ export const RoutingEventValidate = (o?: RoutingEvent, opts: RoutingEventOptions return null } -export type OpenChannelRequest = { - destination: string - fundingAmount: number - pushAmount: number - closeAddress: string +export type LndGetInfoRequest = { + nodeId: number } -export const OpenChannelRequestOptionalFields: [] = [] -export type OpenChannelRequestOptions = OptionsBaseMessage & { +export const LndGetInfoRequestOptionalFields: [] = [] +export type LndGetInfoRequestOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - destination_CustomCheck?: (v: string) => boolean - fundingAmount_CustomCheck?: (v: number) => boolean - pushAmount_CustomCheck?: (v: number) => boolean - closeAddress_CustomCheck?: (v: string) => boolean + nodeId_CustomCheck?: (v: number) => boolean } -export const OpenChannelRequestValidate = (o?: OpenChannelRequest, opts: OpenChannelRequestOptions = {}, path: string = 'OpenChannelRequest::root.'): Error | null => { +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.destination !== 'string') return new Error(`${path}.destination: is not a string`) - if (opts.destination_CustomCheck && !opts.destination_CustomCheck(o.destination)) return new Error(`${path}.destination: custom check failed`) - - if (typeof o.fundingAmount !== 'number') return new Error(`${path}.fundingAmount: is not a number`) - if (opts.fundingAmount_CustomCheck && !opts.fundingAmount_CustomCheck(o.fundingAmount)) return new Error(`${path}.fundingAmount: custom check failed`) - - if (typeof o.pushAmount !== 'number') return new Error(`${path}.pushAmount: is not a number`) - if (opts.pushAmount_CustomCheck && !opts.pushAmount_CustomCheck(o.pushAmount)) return new Error(`${path}.pushAmount: custom check failed`) - - if (typeof o.closeAddress !== 'string') return new Error(`${path}.closeAddress: is not a string`) - if (opts.closeAddress_CustomCheck && !opts.closeAddress_CustomCheck(o.closeAddress)) return new Error(`${path}.closeAddress: custom check failed`) - - return null -} - -export type LndMetricsRequest = { - from_unix?: number - to_unix?: number -} -export type LndMetricsRequestOptionalField = 'from_unix' | 'to_unix' -export const LndMetricsRequestOptionalFields: LndMetricsRequestOptionalField[] = ['from_unix', 'to_unix'] -export type LndMetricsRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: LndMetricsRequestOptionalField[] - from_unix_CustomCheck?: (v?: number) => boolean - to_unix_CustomCheck?: (v?: number) => boolean -} -export const LndMetricsRequestValidate = (o?: LndMetricsRequest, opts: LndMetricsRequestOptions = {}, path: string = 'LndMetricsRequest::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 ((o.from_unix || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('from_unix')) && typeof o.from_unix !== 'number') return new Error(`${path}.from_unix: is not a number`) - if (opts.from_unix_CustomCheck && !opts.from_unix_CustomCheck(o.from_unix)) return new Error(`${path}.from_unix: custom check failed`) - - if ((o.to_unix || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('to_unix')) && typeof o.to_unix !== 'number') return new Error(`${path}.to_unix: is not a number`) - if (opts.to_unix_CustomCheck && !opts.to_unix_CustomCheck(o.to_unix)) return new Error(`${path}.to_unix: custom check failed`) - - return null -} - -export type Application = { - name: string - id: string - balance: number - npub: string -} -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 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 SendAppUserToAppPaymentRequest = { - from_user_identifier: string - amount: number -} -export const SendAppUserToAppPaymentRequestOptionalFields: [] = [] -export type SendAppUserToAppPaymentRequestOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - from_user_identifier_CustomCheck?: (v: string) => boolean - amount_CustomCheck?: (v: number) => boolean -} -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.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`) + 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 } @@ -1660,97 +1662,118 @@ export const LnurlPayInfoResponseValidate = (o?: LnurlPayInfoResponse, opts: Lnu return null } -export type MigrationUpdate = { - closure?: ClosureMigration - relays?: RelaysMigration +export type Product = { + id: string + name: string + price_sats: number } -export type MigrationUpdateOptionalField = 'closure' | 'relays' -export const MigrationUpdateOptionalFields: MigrationUpdateOptionalField[] = ['closure', 'relays'] -export type MigrationUpdateOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: MigrationUpdateOptionalField[] - closure_Options?: ClosureMigrationOptions - relays_Options?: RelaysMigrationOptions -} -export const MigrationUpdateValidate = (o?: MigrationUpdate, opts: MigrationUpdateOptions = {}, path: string = 'MigrationUpdate::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.closure === 'object' || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('closure')) { - const closureErr = ClosureMigrationValidate(o.closure, opts.closure_Options, `${path}.closure`) - if (closureErr !== null) return closureErr - } - - - if (typeof o.relays === 'object' || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('relays')) { - const relaysErr = RelaysMigrationValidate(o.relays, opts.relays_Options, `${path}.relays`) - if (relaysErr !== null) return relaysErr - } - - - return null -} - -export type ClosureMigration = { - closes_at_unix: number -} -export const ClosureMigrationOptionalFields: [] = [] -export type ClosureMigrationOptions = OptionsBaseMessage & { +export const ProductOptionalFields: [] = [] +export type ProductOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - closes_at_unix_CustomCheck?: (v: number) => boolean + id_CustomCheck?: (v: string) => boolean + name_CustomCheck?: (v: string) => boolean + price_sats_CustomCheck?: (v: number) => boolean } -export const ClosureMigrationValidate = (o?: ClosureMigration, opts: ClosureMigrationOptions = {}, path: string = 'ClosureMigration::root.'): Error | null => { +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.closes_at_unix !== 'number') return new Error(`${path}.closes_at_unix: is not a number`) - if (opts.closes_at_unix_CustomCheck && !opts.closes_at_unix_CustomCheck(o.closes_at_unix)) return new Error(`${path}.closes_at_unix: 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.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 AddAppUserInvoiceRequest = { - receiver_identifier: string - payer_identifier: string - http_callback_url: string - invoice_req: NewInvoiceRequest +export type UserInfo = { + userId: string + balance: number + max_withdrawable: number } -export const AddAppUserInvoiceRequestOptionalFields: [] = [] -export type AddAppUserInvoiceRequestOptions = OptionsBaseMessage & { +export const UserInfoOptionalFields: [] = [] +export type UserInfoOptions = 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 + userId_CustomCheck?: (v: string) => boolean + balance_CustomCheck?: (v: number) => boolean + max_withdrawable_CustomCheck?: (v: number) => boolean } -export const AddAppUserInvoiceRequestValidate = (o?: AddAppUserInvoiceRequest, opts: AddAppUserInvoiceRequestOptions = {}, path: string = 'AddAppUserInvoiceRequest::root.'): Error | null => { +export const UserInfoValidate = (o?: UserInfo, opts: UserInfoOptions = {}, path: string = 'UserInfo::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.userId !== 'string') return new Error(`${path}.userId: is not a string`) + if (opts.userId_CustomCheck && !opts.userId_CustomCheck(o.userId)) return new Error(`${path}.userId: 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.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.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`) + 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`) - 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 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 AppUser = { + identifier: string + info: UserInfo + max_withdrawable: number +} +export const AppUserOptionalFields: [] = [] +export type AppUserOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + identifier_CustomCheck?: (v: string) => boolean + info_Options?: UserInfoOptions + max_withdrawable_CustomCheck?: (v: number) => boolean +} +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.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 DecodeInvoiceRequest = { +export type NewInvoiceResponse = { invoice: string } -export const DecodeInvoiceRequestOptionalFields: [] = [] -export type DecodeInvoiceRequestOptions = OptionsBaseMessage & { +export const NewInvoiceResponseOptionalFields: [] = [] +export type NewInvoiceResponseOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] invoice_CustomCheck?: (v: string) => boolean } -export const DecodeInvoiceRequestValidate = (o?: DecodeInvoiceRequest, opts: DecodeInvoiceRequestOptions = {}, path: string = 'DecodeInvoiceRequest::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') @@ -1760,211 +1783,20 @@ export const DecodeInvoiceRequestValidate = (o?: DecodeInvoiceRequest, opts: Dec return null } -export type GetUserOperationsResponse = { - latestOutgoingInvoiceOperations: UserOperations - latestIncomingInvoiceOperations: UserOperations - latestOutgoingTxOperations: UserOperations - latestIncomingTxOperations: UserOperations - latestOutgoingUserToUserPayemnts: UserOperations - latestIncomingUserToUserPayemnts: UserOperations +export type OpenChannelResponse = { + channelId: string } -export const GetUserOperationsResponseOptionalFields: [] = [] -export type GetUserOperationsResponseOptions = OptionsBaseMessage & { +export const OpenChannelResponseOptionalFields: [] = [] +export type OpenChannelResponseOptions = OptionsBaseMessage & { checkOptionalsAreSet?: [] - latestOutgoingInvoiceOperations_Options?: UserOperationsOptions - latestIncomingInvoiceOperations_Options?: UserOperationsOptions - latestOutgoingTxOperations_Options?: UserOperationsOptions - latestIncomingTxOperations_Options?: UserOperationsOptions - latestOutgoingUserToUserPayemnts_Options?: UserOperationsOptions - latestIncomingUserToUserPayemnts_Options?: UserOperationsOptions + channelId_CustomCheck?: (v: string) => boolean } -export const GetUserOperationsResponseValidate = (o?: GetUserOperationsResponse, opts: GetUserOperationsResponseOptions = {}, path: string = 'GetUserOperationsResponse::root.'): Error | null => { +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') - const latestOutgoingInvoiceOperationsErr = UserOperationsValidate(o.latestOutgoingInvoiceOperations, opts.latestOutgoingInvoiceOperations_Options, `${path}.latestOutgoingInvoiceOperations`) - if (latestOutgoingInvoiceOperationsErr !== null) return latestOutgoingInvoiceOperationsErr - - - const latestIncomingInvoiceOperationsErr = UserOperationsValidate(o.latestIncomingInvoiceOperations, opts.latestIncomingInvoiceOperations_Options, `${path}.latestIncomingInvoiceOperations`) - if (latestIncomingInvoiceOperationsErr !== null) return latestIncomingInvoiceOperationsErr - - - const latestOutgoingTxOperationsErr = UserOperationsValidate(o.latestOutgoingTxOperations, opts.latestOutgoingTxOperations_Options, `${path}.latestOutgoingTxOperations`) - if (latestOutgoingTxOperationsErr !== null) return latestOutgoingTxOperationsErr - - - const latestIncomingTxOperationsErr = UserOperationsValidate(o.latestIncomingTxOperations, opts.latestIncomingTxOperations_Options, `${path}.latestIncomingTxOperations`) - if (latestIncomingTxOperationsErr !== null) return latestIncomingTxOperationsErr - - - const latestOutgoingUserToUserPayemntsErr = UserOperationsValidate(o.latestOutgoingUserToUserPayemnts, opts.latestOutgoingUserToUserPayemnts_Options, `${path}.latestOutgoingUserToUserPayemnts`) - if (latestOutgoingUserToUserPayemntsErr !== null) return latestOutgoingUserToUserPayemntsErr - - - const latestIncomingUserToUserPayemntsErr = UserOperationsValidate(o.latestIncomingUserToUserPayemnts, opts.latestIncomingUserToUserPayemnts_Options, `${path}.latestIncomingUserToUserPayemnts`) - if (latestIncomingUserToUserPayemntsErr !== null) return latestIncomingUserToUserPayemntsErr - - - return null -} - -export type LiveUserOperation = { - operation: UserOperation -} -export const LiveUserOperationOptionalFields: [] = [] -export type LiveUserOperationOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - 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') - - const operationErr = UserOperationValidate(o.operation, opts.operation_Options, `${path}.operation`) - if (operationErr !== null) return operationErr - - - return null -} - -export type UsageMetrics = { - metrics: UsageMetric[] -} -export const UsageMetricsOptionalFields: [] = [] -export type UsageMetricsOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - metrics_ItemOptions?: UsageMetricOptions - metrics_CustomCheck?: (v: UsageMetric[]) => boolean -} -export const UsageMetricsValidate = (o?: UsageMetrics, opts: UsageMetricsOptions = {}, path: string = 'UsageMetrics::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 (!Array.isArray(o.metrics)) return new Error(`${path}.metrics: is not an array`) - for (let index = 0; index < o.metrics.length; index++) { - const metricsErr = UsageMetricValidate(o.metrics[index], opts.metrics_ItemOptions, `${path}.metrics[${index}]`) - if (metricsErr !== null) return metricsErr - } - if (opts.metrics_CustomCheck && !opts.metrics_CustomCheck(o.metrics)) return new Error(`${path}.metrics: 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 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 LnurlWithdrawInfoResponse = { - tag: string - callback: string - k1: string - defaultDescription: string - minWithdrawable: number - maxWithdrawable: number - balanceCheck: string - payLink: string -} -export const LnurlWithdrawInfoResponseOptionalFields: [] = [] -export type LnurlWithdrawInfoResponseOptions = OptionsBaseMessage & { - checkOptionalsAreSet?: [] - tag_CustomCheck?: (v: string) => boolean - callback_CustomCheck?: (v: string) => boolean - k1_CustomCheck?: (v: string) => boolean - defaultDescription_CustomCheck?: (v: string) => boolean - minWithdrawable_CustomCheck?: (v: number) => boolean - maxWithdrawable_CustomCheck?: (v: number) => boolean - balanceCheck_CustomCheck?: (v: string) => boolean - payLink_CustomCheck?: (v: string) => boolean -} -export const LnurlWithdrawInfoResponseValidate = (o?: LnurlWithdrawInfoResponse, opts: LnurlWithdrawInfoResponseOptions = {}, path: string = 'LnurlWithdrawInfoResponse::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.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`) - - if (typeof o.defaultDescription !== 'string') return new Error(`${path}.defaultDescription: is not a string`) - if (opts.defaultDescription_CustomCheck && !opts.defaultDescription_CustomCheck(o.defaultDescription)) return new Error(`${path}.defaultDescription: custom check failed`) - - if (typeof o.minWithdrawable !== 'number') return new Error(`${path}.minWithdrawable: is not a number`) - if (opts.minWithdrawable_CustomCheck && !opts.minWithdrawable_CustomCheck(o.minWithdrawable)) return new Error(`${path}.minWithdrawable: custom check failed`) - - if (typeof o.maxWithdrawable !== 'number') return new Error(`${path}.maxWithdrawable: is not a number`) - if (opts.maxWithdrawable_CustomCheck && !opts.maxWithdrawable_CustomCheck(o.maxWithdrawable)) return new Error(`${path}.maxWithdrawable: custom check failed`) - - if (typeof o.balanceCheck !== 'string') return new Error(`${path}.balanceCheck: is not a string`) - if (opts.balanceCheck_CustomCheck && !opts.balanceCheck_CustomCheck(o.balanceCheck)) return new Error(`${path}.balanceCheck: custom check failed`) - - if (typeof o.payLink !== 'string') return new Error(`${path}.payLink: is not a string`) - if (opts.payLink_CustomCheck && !opts.payLink_CustomCheck(o.payLink)) return new Error(`${path}.payLink: custom check failed`) - - 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`) + 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 } @@ -1992,3 +1824,171 @@ export const AddProductRequestValidate = (o?: AddProductRequest, opts: AddProduc return null } +export type AppsMetricsRequest = { + from_unix?: number + to_unix?: number + include_operations?: boolean +} +export type AppsMetricsRequestOptionalField = 'from_unix' | 'to_unix' | 'include_operations' +export const AppsMetricsRequestOptionalFields: AppsMetricsRequestOptionalField[] = ['from_unix', 'to_unix', 'include_operations'] +export type AppsMetricsRequestOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: AppsMetricsRequestOptionalField[] + from_unix_CustomCheck?: (v?: number) => boolean + to_unix_CustomCheck?: (v?: number) => boolean + include_operations_CustomCheck?: (v?: boolean) => boolean +} +export const AppsMetricsRequestValidate = (o?: AppsMetricsRequest, opts: AppsMetricsRequestOptions = {}, path: string = 'AppsMetricsRequest::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 ((o.from_unix || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('from_unix')) && typeof o.from_unix !== 'number') return new Error(`${path}.from_unix: is not a number`) + if (opts.from_unix_CustomCheck && !opts.from_unix_CustomCheck(o.from_unix)) return new Error(`${path}.from_unix: custom check failed`) + + if ((o.to_unix || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('to_unix')) && typeof o.to_unix !== 'number') return new Error(`${path}.to_unix: is not a number`) + if (opts.to_unix_CustomCheck && !opts.to_unix_CustomCheck(o.to_unix)) return new Error(`${path}.to_unix: custom check failed`) + + if ((o.include_operations || opts.allOptionalsAreSet || opts.checkOptionalsAreSet?.includes('include_operations')) && typeof o.include_operations !== 'boolean') return new Error(`${path}.include_operations: is not a boolean`) + if (opts.include_operations_CustomCheck && !opts.include_operations_CustomCheck(o.include_operations)) return new Error(`${path}.include_operations: 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 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 LiveUserOperation = { + operation: UserOperation +} +export const LiveUserOperationOptionalFields: [] = [] +export type LiveUserOperationOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + 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') + + const operationErr = UserOperationValidate(o.operation, opts.operation_Options, `${path}.operation`) + if (operationErr !== null) return operationErr + + + return null +} + +export type ClosureMigration = { + closes_at_unix: number +} +export const ClosureMigrationOptionalFields: [] = [] +export type ClosureMigrationOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + closes_at_unix_CustomCheck?: (v: number) => boolean +} +export const ClosureMigrationValidate = (o?: ClosureMigration, opts: ClosureMigrationOptions = {}, path: string = 'ClosureMigration::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.closes_at_unix !== 'number') return new Error(`${path}.closes_at_unix: is not a number`) + if (opts.closes_at_unix_CustomCheck && !opts.closes_at_unix_CustomCheck(o.closes_at_unix)) return new Error(`${path}.closes_at_unix: custom check failed`) + + return null +} + +export type UsageMetrics = { + metrics: UsageMetric[] +} +export const UsageMetricsOptionalFields: [] = [] +export type UsageMetricsOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + metrics_ItemOptions?: UsageMetricOptions + metrics_CustomCheck?: (v: UsageMetric[]) => boolean +} +export const UsageMetricsValidate = (o?: UsageMetrics, opts: UsageMetricsOptions = {}, path: string = 'UsageMetrics::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 (!Array.isArray(o.metrics)) return new Error(`${path}.metrics: is not an array`) + for (let index = 0; index < o.metrics.length; index++) { + const metricsErr = UsageMetricValidate(o.metrics[index], opts.metrics_ItemOptions, `${path}.metrics[${index}]`) + if (metricsErr !== null) return metricsErr + } + if (opts.metrics_CustomCheck && !opts.metrics_CustomCheck(o.metrics)) return new Error(`${path}.metrics: custom check failed`) + + return null +} + +export type ChainBalanceEvent = { + block_height: number + confirmed_balance: number + unconfirmed_balance: number + total_balance: number +} +export const ChainBalanceEventOptionalFields: [] = [] +export type ChainBalanceEventOptions = OptionsBaseMessage & { + checkOptionalsAreSet?: [] + block_height_CustomCheck?: (v: number) => boolean + confirmed_balance_CustomCheck?: (v: number) => boolean + unconfirmed_balance_CustomCheck?: (v: number) => boolean + total_balance_CustomCheck?: (v: number) => boolean +} +export const ChainBalanceEventValidate = (o?: ChainBalanceEvent, opts: ChainBalanceEventOptions = {}, path: string = 'ChainBalanceEvent::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.block_height !== 'number') return new Error(`${path}.block_height: is not a number`) + if (opts.block_height_CustomCheck && !opts.block_height_CustomCheck(o.block_height)) return new Error(`${path}.block_height: custom check failed`) + + if (typeof o.confirmed_balance !== 'number') return new Error(`${path}.confirmed_balance: is not a number`) + if (opts.confirmed_balance_CustomCheck && !opts.confirmed_balance_CustomCheck(o.confirmed_balance)) return new Error(`${path}.confirmed_balance: custom check failed`) + + if (typeof o.unconfirmed_balance !== 'number') return new Error(`${path}.unconfirmed_balance: is not a number`) + if (opts.unconfirmed_balance_CustomCheck && !opts.unconfirmed_balance_CustomCheck(o.unconfirmed_balance)) return new Error(`${path}.unconfirmed_balance: custom check failed`) + + if (typeof o.total_balance !== 'number') return new Error(`${path}.total_balance: is not a number`) + if (opts.total_balance_CustomCheck && !opts.total_balance_CustomCheck(o.total_balance)) return new Error(`${path}.total_balance: custom check failed`) + + return null +} + diff --git a/proto/protoc-gen-pub b/proto/protoc-gen-pub index 87579bb4904e9d8acc7738fa37ff6b35fcd6efb3..a725f736e76808dbc8dfbdf8e942ad58e42ceaa1 100755 GIT binary patch delta 180603 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