package server import ( "context" "maps" "strings" log "github.com/nacorid/logger" "github.com/nacorid/naco-api/internal/store" x402v2 "github.com/x402-foundation/x402/go/v2" ) func settleHook(ctx context.Context, db *store.Queries, transaction, amount, asset, network, to, from string) error { ret, err := db.SaveTransaction(ctx, store.SaveTransactionParams{ X402TransactionHash: transaction, Amount: amount, Asset: asset, Network: network, Recipient: to, Sender: from, }) var id int64 = 0 if len(ret) > 0 { id = ret[0].ID } fields := log.Fields{ "transaction_id": id, "X402_transaction_hash": transaction, "amount": amount, "asset": asset, "network": network, "recipient": to, "sender": from, } if err != nil { log.WithFields(fields).ErrorWithContext(ctx, "Failed to save transaction", "error", err) return err } log.WithFields(fields).DebugWithContext(ctx, "Saved transaction") return nil } func (s *Server) buildRequirements(amount string, extra map[string]any, scheme string, timeout int) []x402v2.PaymentRequirements { requirements := make([]x402v2.PaymentRequirements, 0, len(s.activeNetworks)) for _, info := range s.activeNetworks { mergedExtra := make(map[string]any) maps.Copy(mergedExtra, extra) maps.Copy(mergedExtra, info.Extra) requirements = append(requirements, x402v2.PaymentRequirements{ Scheme: scheme, Network: info.Network, Asset: info.Asset, Amount: amount, PayTo: s.x402Wallet, MaxTimeoutSeconds: timeout, Extra: mergedExtra, }) } return requirements } func parseActiveNetworks(raw string) []string { parts := strings.Split(raw, ",") var slugs []string for _, part := range parts { trimmed := strings.ToLower(strings.TrimSpace(part)) if trimmed != "" { slugs = append(slugs, trimmed) } } return slugs }