diff --git a/modules/runes/api/httphandler/get_balances_by_address.go b/modules/runes/api/httphandler/get_balances_by_address.go index 25f6ff9..12579f9 100644 --- a/modules/runes/api/httphandler/get_balances_by_address.go +++ b/modules/runes/api/httphandler/get_balances_by_address.go @@ -1,6 +1,8 @@ package httphandler import ( + "net/url" + "github.com/cockroachdb/errors" "github.com/gaze-network/indexer-network/common/errs" "github.com/gaze-network/indexer-network/modules/runes/internal/entity" @@ -22,13 +24,20 @@ const ( getBalancesDefaultLimit = 100 ) -func (r getBalancesRequest) Validate() error { +func (r *getBalancesRequest) Validate() error { var errList []error if r.Wallet == "" { errList = append(errList, errors.New("'wallet' is required")) } - if r.Id != "" && !isRuneIdOrRuneName(r.Id) { - errList = append(errList, errors.New("'id' is not valid rune id or rune name")) + if r.Id != "" { + id, err := url.QueryUnescape(r.Id) + if err != nil { + return errors.WithStack(err) + } + r.Id = id + if !isRuneIdOrRuneName(r.Id) { + errList = append(errList, errors.Errorf("id '%s' is not valid rune id or rune name", r.Id)) + } } if r.Limit < 0 { errList = append(errList, errors.New("'limit' must be non-negative")) diff --git a/modules/runes/api/httphandler/get_balances_by_address_batch.go b/modules/runes/api/httphandler/get_balances_by_address_batch.go index aa60188..2f244cc 100644 --- a/modules/runes/api/httphandler/get_balances_by_address_batch.go +++ b/modules/runes/api/httphandler/get_balances_by_address_batch.go @@ -40,7 +40,7 @@ func (r getBalancesBatchRequest) Validate() error { errList = append(errList, errors.Errorf("queries[%d]: 'wallet' is required", i)) } if query.Id != "" && !isRuneIdOrRuneName(query.Id) { - errList = append(errList, errors.Errorf("queries[%d]: 'id' is not valid rune id or rune name", i)) + errList = append(errList, errors.Errorf("queries[%d]: id '%s' is not valid rune id or rune name", i, query.Id)) } if query.Limit < 0 { errList = append(errList, errors.Errorf("queries[%d]: 'limit' must be non-negative", i)) diff --git a/modules/runes/api/httphandler/get_holders.go b/modules/runes/api/httphandler/get_holders.go index 134bb4a..b0c1885 100644 --- a/modules/runes/api/httphandler/get_holders.go +++ b/modules/runes/api/httphandler/get_holders.go @@ -3,6 +3,7 @@ package httphandler import ( "bytes" "encoding/hex" + "net/url" "slices" "github.com/cockroachdb/errors" @@ -24,10 +25,15 @@ const ( getHoldersMaxLimit = 1000 ) -func (r getHoldersRequest) Validate() error { +func (r *getHoldersRequest) Validate() error { var errList []error + id, err := url.QueryUnescape(r.Id) + if err != nil { + return errors.WithStack(err) + } + r.Id = id if !isRuneIdOrRuneName(r.Id) { - errList = append(errList, errors.New("'id' is not valid rune id or rune name")) + errList = append(errList, errors.Errorf("id '%s' is not valid rune id or rune name", r.Id)) } if r.Limit < 0 { errList = append(errList, errors.New("'limit' must be non-negative")) diff --git a/modules/runes/api/httphandler/get_token_info.go b/modules/runes/api/httphandler/get_token_info.go index e73bdd3..2e86345 100644 --- a/modules/runes/api/httphandler/get_token_info.go +++ b/modules/runes/api/httphandler/get_token_info.go @@ -1,6 +1,7 @@ package httphandler import ( + "net/url" "slices" "github.com/cockroachdb/errors" @@ -17,10 +18,15 @@ type getTokenInfoRequest struct { BlockHeight uint64 `query:"blockHeight"` } -func (r getTokenInfoRequest) Validate() error { +func (r *getTokenInfoRequest) Validate() error { var errList []error + id, err := url.QueryUnescape(r.Id) + if err != nil { + return errors.WithStack(err) + } + r.Id = id if !isRuneIdOrRuneName(r.Id) { - errList = append(errList, errors.New("'id' is not valid rune id or rune name")) + errList = append(errList, errors.Errorf("id '%s' is not valid rune id or rune name", r.Id)) } return errs.WithPublicMessage(errors.Join(errList...), "validation error") } diff --git a/modules/runes/api/httphandler/get_transactions.go b/modules/runes/api/httphandler/get_transactions.go index 1f9158f..c7f00f1 100644 --- a/modules/runes/api/httphandler/get_transactions.go +++ b/modules/runes/api/httphandler/get_transactions.go @@ -4,6 +4,7 @@ import ( "cmp" "encoding/hex" "fmt" + "net/url" "slices" "github.com/btcsuite/btcd/chaincfg/chainhash" @@ -27,10 +28,17 @@ const ( getTransactionsMaxLimit = 3000 ) -func (r getTransactionsRequest) Validate() error { +func (r *getTransactionsRequest) Validate() error { var errList []error - if r.Id != "" && !isRuneIdOrRuneName(r.Id) { - errList = append(errList, errors.New("'id' is not valid rune id or rune name")) + if r.Id != "" { + id, err := url.QueryUnescape(r.Id) + if err != nil { + return errors.WithStack(err) + } + r.Id = id + if !isRuneIdOrRuneName(r.Id) { + errList = append(errList, errors.Errorf("id '%s' is not valid rune id or rune name", r.Id)) + } } if r.FromBlock < -1 { errList = append(errList, errors.Errorf("invalid fromBlock range")) diff --git a/modules/runes/api/httphandler/get_utxos_by_address.go b/modules/runes/api/httphandler/get_utxos_by_address.go index a302675..b41a1e7 100644 --- a/modules/runes/api/httphandler/get_utxos_by_address.go +++ b/modules/runes/api/httphandler/get_utxos_by_address.go @@ -1,6 +1,8 @@ package httphandler import ( + "net/url" + "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/cockroachdb/errors" "github.com/gaze-network/indexer-network/common/errs" @@ -22,13 +24,20 @@ const ( getUTXOsMaxLimit = 3000 ) -func (r getUTXOsRequest) Validate() error { +func (r *getUTXOsRequest) Validate() error { var errList []error if r.Wallet == "" { errList = append(errList, errors.New("'wallet' is required")) } - if r.Id != "" && !isRuneIdOrRuneName(r.Id) { - errList = append(errList, errors.New("'id' is not valid rune id or rune name")) + if r.Id != "" { + id, err := url.QueryUnescape(r.Id) + if err != nil { + return errors.WithStack(err) + } + r.Id = id + if !isRuneIdOrRuneName(r.Id) { + errList = append(errList, errors.Errorf("id '%s' is not valid rune id or rune name", r.Id)) + } } if r.Limit < 0 { errList = append(errList, errors.New("'limit' must be non-negative"))