Skip to content

bug: --filter silently ignored on perp screener, perp leaderboard, and smart-money perp-trades #447

@Nicolai1205

Description

@Nicolai1205

Summary

--filter is accepted without error across perp commands but silently ignored — the API receives it, discards it, and returns unfiltered results. Users get no indication the filter had no effect.

Reproduction

# Filter for BTC only — expect 1 result, get full unfiltered list starting with HYPE
nansen research perp screener --filter 'token_symbol=BTC' --limit 3

# Filter for a specific trader — expect their trades only, get unrelated traders
nansen research smart-money perp-trades --filter 'trader_address=0x577ae91c7b74f04ddb3a5b399ded8318e9895fd2' --limit 3

Actual output (screener):

token_symbol │ ...
─────────────┼─────
HYPE         │ ...   ← filter ignored, returned top by default sort
xyz:SNDK     │ ...
WLD          │ ...

Expected: Either BTC row only, or an explicit error: --filter is not supported for this endpoint.

Root cause

perpScreener and smartMoneyPerpTrades in src/api.js receive a filters object from the CLI and pass it to the API, but the underlying endpoints do not support server-side filtering. The API silently drops the parameter. The CLI has no guard to reject or warn before the request is made.

The src/schema.json schema for perp screener and perp leaderboard intentionally omits filters from their options — so agents reading the schema correctly won't offer --filter. However, the CLI still accepts the flag globally and passes it through, which misleads interactive users.

Proposed fix

Add a noFilters (or similar) guard in the perp and smart-money perp-trades handlers — identical to the pattern used for historical-token-flow-summary and historical-smart-money-balances (which already error early when unsupported flags are passed):

// src/cli.js — perp screener handler
'screener': () => {
  if (Object.keys(filters).length > 0) {
    throw new NansenError(
      'perp screener does not support --filter. Use --sort to order results.',
      ErrorCode.INVALID_PARAM
    );
  }
  return apiInstance.perpScreener({ orderBy, pagination, days });
},

Same guard for perp leaderboard and smart-money perp-trades.

Why this fix works

It follows the existing early-rejection pattern already in the codebase (e.g. historical-token-flow-summary errors on --page/--limit). Users get an immediate, actionable error instead of silently wrong results. No API change required.

Discovered via

Dogfooding nansen-cli perp commands v1.31.1.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions