diff --git a/examples/example.go b/examples/example.go index eecdcab..f1f22ce 100644 --- a/examples/example.go +++ b/examples/example.go @@ -79,14 +79,16 @@ func main() { transactionsConnection, err := account.GetTransactions( client.Requester, &count, // first - nil, //after + nil, // after nil, // types nil, // after_date nil, // before_date &network, // bitcoin_network nil, // lightning_node_id nil, // statuses - nil, //exclude_failures + nil, // exclude_failures + nil, // min_amount + nil, // max_amount ) if err != nil { fmt.Printf("get transactions failed: %v", err) @@ -127,14 +129,16 @@ func main() { transactionsConnection, err = account.GetTransactions( client.Requester, &pageSize, // first - after, //after + after, // after nil, // types nil, // after_date nil, // before_date &network, // bitcoin_network nil, // lightning_node_id nil, // statuses - nil, //exclude_failures + nil, // exclude_failures + nil, // min_amount + nil, // max_amount ) fmt.Printf("We got %v transactions for the page (iteration #%v)\n", transactionsConnection.Count, iterations) if *transactionsConnection.PageInfo.HasNextPage { @@ -153,14 +157,16 @@ func main() { transactionsConnection, err = account.GetTransactions( client.Requester, &count, // first - nil, //after + nil, // after nil, // types &afterDate, // after_date nil, // before_date &network, // bitcoin_network nil, // lightning_node_id nil, // statuses - nil, //exclude_failures + nil, // exclude_failures + nil, // min_amount + nil, // max_amount ) fmt.Printf("We had %v transactions in the past 24 hours.", transactionsConnection.Count) fmt.Println() diff --git a/objects/account.go b/objects/account.go index 85ca4a1..e6c1188 100644 --- a/objects/account.go +++ b/objects/account.go @@ -734,11 +734,11 @@ func (obj Account) GetChannels(requester *requester.Requester, bitcoinNetwork Bi return result, nil } -func (obj Account) GetTransactions(requester *requester.Requester, first *int64, after *string, types *[]TransactionType, afterDate *time.Time, beforeDate *time.Time, bitcoinNetwork *BitcoinNetwork, lightningNodeId *string, statuses *[]TransactionStatus, excludeFailures *TransactionFailures) (*AccountToTransactionsConnection, error) { - query := `query FetchAccountToTransactionsConnection($entity_id: ID!, $first: Int, $after: String, $types: [TransactionType!], $after_date: DateTime, $before_date: DateTime, $bitcoin_network: BitcoinNetwork, $lightning_node_id: ID, $statuses: [TransactionStatus!], $exclude_failures: TransactionFailures) { +func (obj Account) GetTransactions(requester *requester.Requester, first *int64, after *string, types *[]TransactionType, afterDate *time.Time, beforeDate *time.Time, bitcoinNetwork *BitcoinNetwork, lightningNodeId *string, statuses *[]TransactionStatus, excludeFailures *TransactionFailures, maxAmount *CurrencyAmountInput, minAmount *CurrencyAmountInput) (*AccountToTransactionsConnection, error) { + query := `query FetchAccountToTransactionsConnection($entity_id: ID!, $first: Int, $after: String, $types: [TransactionType!], $after_date: DateTime, $before_date: DateTime, $bitcoin_network: BitcoinNetwork, $lightning_node_id: ID, $statuses: [TransactionStatus!], $exclude_failures: TransactionFailures, $max_amount: CurrencyAmountInput, $min_amount: CurrencyAmountInput) { entity(id: $entity_id) { ... on Account { - transactions(, first: $first, after: $after, types: $types, after_date: $after_date, before_date: $before_date, bitcoin_network: $bitcoin_network, lightning_node_id: $lightning_node_id, statuses: $statuses, exclude_failures: $exclude_failures) { + transactions(, first: $first, after: $after, types: $types, after_date: $after_date, before_date: $before_date, bitcoin_network: $bitcoin_network, lightning_node_id: $lightning_node_id, statuses: $statuses, exclude_failures: $exclude_failures, max_amount: $max_amount, min_amount: $min_amount) { __typename account_to_transactions_connection_count: count account_to_transactions_connection_page_info: page_info { @@ -1337,6 +1337,8 @@ func (obj Account) GetTransactions(requester *requester.Requester, first *int64, "lightning_node_id": lightningNodeId, "statuses": statuses, "exclude_failures": excludeFailures, + "max_amount": maxAmount, + "min_amount": minAmount, } response, err := requester.ExecuteGraphql(query, variables, nil) @@ -1351,11 +1353,11 @@ func (obj Account) GetTransactions(requester *requester.Requester, first *int64, return result, nil } -func (obj Account) GetPaymentRequests(requester *requester.Requester, first *int64, after *string, afterDate *time.Time, beforeDate *time.Time, bitcoinNetwork *BitcoinNetwork, lightningNodeId *string) (*AccountToPaymentRequestsConnection, error) { - query := `query FetchAccountToPaymentRequestsConnection($entity_id: ID!, $first: Int, $after: String, $after_date: DateTime, $before_date: DateTime, $bitcoin_network: BitcoinNetwork, $lightning_node_id: ID) { +func (obj Account) GetPaymentRequests(requester *requester.Requester, first *int64, after *string, afterDate *time.Time, beforeDate *time.Time, bitcoinNetwork *BitcoinNetwork, lightningNodeId *string, maxAmount *CurrencyAmountInput, minAmount *CurrencyAmountInput) (*AccountToPaymentRequestsConnection, error) { + query := `query FetchAccountToPaymentRequestsConnection($entity_id: ID!, $first: Int, $after: String, $after_date: DateTime, $before_date: DateTime, $bitcoin_network: BitcoinNetwork, $lightning_node_id: ID, $max_amount: CurrencyAmountInput, $min_amount: CurrencyAmountInput) { entity(id: $entity_id) { ... on Account { - payment_requests(, first: $first, after: $after, after_date: $after_date, before_date: $before_date, bitcoin_network: $bitcoin_network, lightning_node_id: $lightning_node_id) { + payment_requests(, first: $first, after: $after, after_date: $after_date, before_date: $before_date, bitcoin_network: $bitcoin_network, lightning_node_id: $lightning_node_id, max_amount: $max_amount, min_amount: $min_amount) { __typename account_to_payment_requests_connection_count: count account_to_payment_requests_connection_page_info: page_info { @@ -1688,6 +1690,8 @@ func (obj Account) GetPaymentRequests(requester *requester.Requester, first *int "before_date": beforeDate, "bitcoin_network": bitcoinNetwork, "lightning_node_id": lightningNodeId, + "max_amount": maxAmount, + "min_amount": minAmount, } response, err := requester.ExecuteGraphql(query, variables, nil) @@ -1702,11 +1706,11 @@ func (obj Account) GetPaymentRequests(requester *requester.Requester, first *int return result, nil } -func (obj Account) GetWithdrawalRequests(requester *requester.Requester, first *int64, after *string, bitcoinNetworks *[]BitcoinNetwork, statuses *[]WithdrawalRequestStatus, nodeIds *[]string, idempotencyKeys *[]string, afterDate *time.Time, beforeDate *time.Time) (*AccountToWithdrawalRequestsConnection, error) { - query := `query FetchAccountToWithdrawalRequestsConnection($entity_id: ID!, $first: Int, $after: String, $bitcoin_networks: [BitcoinNetwork!], $statuses: [WithdrawalRequestStatus!], $node_ids: [ID!], $idempotency_keys: [String!], $after_date: DateTime, $before_date: DateTime) { +func (obj Account) GetWithdrawalRequests(requester *requester.Requester, first *int64, after *string, bitcoinNetworks *[]BitcoinNetwork, statuses *[]WithdrawalRequestStatus, nodeIds *[]string, idempotencyKeys *[]string, afterDate *time.Time, beforeDate *time.Time, maxAmount *CurrencyAmountInput, minAmount *CurrencyAmountInput) (*AccountToWithdrawalRequestsConnection, error) { + query := `query FetchAccountToWithdrawalRequestsConnection($entity_id: ID!, $first: Int, $after: String, $bitcoin_networks: [BitcoinNetwork!], $statuses: [WithdrawalRequestStatus!], $node_ids: [ID!], $idempotency_keys: [String!], $after_date: DateTime, $before_date: DateTime, $max_amount: CurrencyAmountInput, $min_amount: CurrencyAmountInput) { entity(id: $entity_id) { ... on Account { - withdrawal_requests(, first: $first, after: $after, bitcoin_networks: $bitcoin_networks, statuses: $statuses, node_ids: $node_ids, idempotency_keys: $idempotency_keys, after_date: $after_date, before_date: $before_date) { + withdrawal_requests(, first: $first, after: $after, bitcoin_networks: $bitcoin_networks, statuses: $statuses, node_ids: $node_ids, idempotency_keys: $idempotency_keys, after_date: $after_date, before_date: $before_date, max_amount: $max_amount, min_amount: $min_amount) { __typename account_to_withdrawal_requests_connection_count: count account_to_withdrawal_requests_connection_page_info: page_info { @@ -1785,6 +1789,8 @@ func (obj Account) GetWithdrawalRequests(requester *requester.Requester, first * "idempotency_keys": idempotencyKeys, "after_date": afterDate, "before_date": beforeDate, + "max_amount": maxAmount, + "min_amount": minAmount, } response, err := requester.ExecuteGraphql(query, variables, nil) diff --git a/objects/all_entities.go b/objects/all_entities.go index 6c41829..c3ceba0 100644 --- a/objects/all_entities.go +++ b/objects/all_entities.go @@ -47,6 +47,9 @@ const ( ... on LightsparkNodeWithRemoteSigning { ...LightsparkNodeWithRemoteSigningFragment } + ... on Offer { + ...OfferFragment + } ... on OutgoingPayment { ...OutgoingPaymentFragment } @@ -90,6 +93,7 @@ const ( InvoiceFragment + LightsparkNodeWithOSKFragment + LightsparkNodeWithRemoteSigningFragment + + OfferFragment + OutgoingPaymentFragment + OutgoingPaymentAttemptFragment + RoutingTransactionFragment + diff --git a/objects/create_offer_input.go b/objects/create_offer_input.go new file mode 100644 index 0000000..6a90b25 --- /dev/null +++ b/objects/create_offer_input.go @@ -0,0 +1,14 @@ +// Copyright ©, 2023-present, Lightspark Group, Inc. - All Rights Reserved +package objects + +type CreateOfferInput struct { + + // NodeId The node from which to create the offer. + NodeId string `json:"create_offer_input_node_id"` + + // AmountMsats The amount for which the offer should be created, in millisatoshis. Setting the amount to 0 will allow the payer to specify an amount. + AmountMsats *int64 `json:"create_offer_input_amount_msats"` + + // Description A short description of the offer. + Description *string `json:"create_offer_input_description"` +} diff --git a/objects/create_offer_output.go b/objects/create_offer_output.go new file mode 100644 index 0000000..e9a1b75 --- /dev/null +++ b/objects/create_offer_output.go @@ -0,0 +1,19 @@ +// Copyright ©, 2023-present, Lightspark Group, Inc. - All Rights Reserved +package objects + +import "github.com/lightsparkdev/go-sdk/types" + +type CreateOfferOutput struct { + Offer types.EntityWrapper `json:"create_offer_output_offer"` +} + +const ( + CreateOfferOutputFragment = ` +fragment CreateOfferOutputFragment on CreateOfferOutput { + __typename + create_offer_output_offer: offer { + id + } +} +` +) diff --git a/objects/create_test_mode_invoice_input.go b/objects/create_test_mode_invoice_input.go index 3b1e8a1..3400427 100644 --- a/objects/create_test_mode_invoice_input.go +++ b/objects/create_test_mode_invoice_input.go @@ -2,11 +2,16 @@ package objects type CreateTestModeInvoiceInput struct { + + // LocalNodeId The local node from which to create the invoice. LocalNodeId string `json:"create_test_mode_invoice_input_local_node_id"` + // AmountMsats The amount for which the invoice should be created, in millisatoshis. Setting the amount to 0 will allow the payer to specify an amount. AmountMsats int64 `json:"create_test_mode_invoice_input_amount_msats"` + // Memo An optional memo to include in the invoice. Memo *string `json:"create_test_mode_invoice_input_memo"` + // InvoiceType The type of invoice to create. InvoiceType *InvoiceType `json:"create_test_mode_invoice_input_invoice_type"` } diff --git a/objects/currency_amount_input.go b/objects/currency_amount_input.go new file mode 100644 index 0000000..1a99f9c --- /dev/null +++ b/objects/currency_amount_input.go @@ -0,0 +1,8 @@ +// Copyright ©, 2023-present, Lightspark Group, Inc. - All Rights Reserved +package objects + +type CurrencyAmountInput struct { + Value int64 `json:"currency_amount_input_value"` + + Unit CurrencyUnit `json:"currency_amount_input_unit"` +} diff --git a/objects/entity.go b/objects/entity.go index d9ca8b1..666e60c 100644 --- a/objects/entity.go +++ b/objects/entity.go @@ -118,6 +118,12 @@ func EntityUnmarshal(data map[string]interface{}) (Entity, error) { return nil, err } return lightsparkNodeWithRemoteSigning, nil + case "Offer": + var offer Offer + if err := json.Unmarshal(dataJSON, &offer); err != nil { + return nil, err + } + return offer, nil case "OutgoingPayment": var outgoingPayment OutgoingPayment if err := json.Unmarshal(dataJSON, &outgoingPayment); err != nil { diff --git a/objects/offer.go b/objects/offer.go new file mode 100644 index 0000000..8e0665a --- /dev/null +++ b/objects/offer.go @@ -0,0 +1,69 @@ +// Copyright ©, 2023-present, Lightspark Group, Inc. - All Rights Reserved +package objects + +import "time" + +// Offer This object represents a BOLT #12 offer (https://github.com/lightning/bolts/blob/master/12-offer-encoding.md) created by a Lightspark Node. You can retrieve this object to receive relevant payment information for a specific offer generated by a Lightspark node. +type Offer struct { + + // Id The unique identifier of this entity across all Lightspark systems. Should be treated as an opaque string. + Id string `json:"offer_id"` + + // CreatedAt The date and time when the entity was first created. + CreatedAt time.Time `json:"offer_created_at"` + + // UpdatedAt The date and time when the entity was last updated. + UpdatedAt time.Time `json:"offer_updated_at"` + + // EncodedOffer The BOLT12 encoded offer. Starts with 'lno'. + EncodedOffer string `json:"offer_encoded_offer"` + + // Amount The amount of the offer. If null, the payer chooses the amount. + Amount *CurrencyAmount `json:"offer_amount"` + + // Description The description of the offer. + Description *string `json:"offer_description"` + + // Typename The typename of the object + Typename string `json:"__typename"` +} + +const ( + OfferFragment = ` +fragment OfferFragment on Offer { + __typename + offer_id: id + offer_created_at: created_at + offer_updated_at: updated_at + offer_encoded_offer: encoded_offer + offer_amount: amount { + __typename + currency_amount_original_value: original_value + currency_amount_original_unit: original_unit + currency_amount_preferred_currency_unit: preferred_currency_unit + currency_amount_preferred_currency_value_rounded: preferred_currency_value_rounded + currency_amount_preferred_currency_value_approx: preferred_currency_value_approx + } + offer_description: description +} +` +) + +// GetId The unique identifier of this entity across all Lightspark systems. Should be treated as an opaque string. +func (obj Offer) GetId() string { + return obj.Id +} + +// GetCreatedAt The date and time when the entity was first created. +func (obj Offer) GetCreatedAt() time.Time { + return obj.CreatedAt +} + +// GetUpdatedAt The date and time when the entity was last updated. +func (obj Offer) GetUpdatedAt() time.Time { + return obj.UpdatedAt +} + +func (obj Offer) GetTypename() string { + return obj.Typename +} diff --git a/objects/pay_test_mode_invoice_input.go b/objects/pay_test_mode_invoice_input.go new file mode 100644 index 0000000..ff00632 --- /dev/null +++ b/objects/pay_test_mode_invoice_input.go @@ -0,0 +1,26 @@ +// Copyright ©, 2023-present, Lightspark Group, Inc. - All Rights Reserved +package objects + +type PayTestModeInvoiceInput struct { + + // NodeId The node from where you want to send the payment. + NodeId string `json:"pay_test_mode_invoice_input_node_id"` + + // EncodedInvoice The invoice you want to pay (as defined by the BOLT11 standard). + EncodedInvoice string `json:"pay_test_mode_invoice_input_encoded_invoice"` + + // TimeoutSecs The timeout in seconds that we will try to make the payment. + TimeoutSecs int64 `json:"pay_test_mode_invoice_input_timeout_secs"` + + // MaximumFeesMsats The maximum amount of fees that you want to pay for this payment to be sent, expressed in msats. + MaximumFeesMsats int64 `json:"pay_test_mode_invoice_input_maximum_fees_msats"` + + // FailureReason The failure reason to trigger for the payment. If not set, pay_invoice will be called. + FailureReason *PaymentFailureReason `json:"pay_test_mode_invoice_input_failure_reason"` + + // AmountMsats The amount you will pay for this invoice, expressed in msats. It should ONLY be set when the invoice amount is zero. + AmountMsats *int64 `json:"pay_test_mode_invoice_input_amount_msats"` + + // IdempotencyKey The idempotency key of the request. The same result will be returned for the same idempotency key. + IdempotencyKey *string `json:"pay_test_mode_invoice_input_idempotency_key"` +}