Epic: #1229 · Spec: §3.2, §6.3 · Type: CODE · Estimate: 0.3 day · Depends on: T0.1
Scope
Create lib/airdrop/twitterapi.ts exporting:
```ts
export async function lookupXUser(username: string): Promise<{
display_name: string;
avatar_url: string;
follower_count: number;
x_user_id: string;
bio_snippet: string;
} | null>
```
- Single twitterapi.io call:
GET /v2/users/by/username/{username}
- Cache: 5-min in-memory LRU keyed by username (covers retries/debouncing only, not cross-user dedup — cost is $0.0003/call, marginal gain)
- Handle 404 → return null
- Handle 5xx / network errors → throw (callers handle R16 graceful degradation)
- Use
process.env.TWITTERAPI_IO_KEY
Acceptance
Dependencies
T0.1 (API key in env)
Epic: #1229 · Spec: §3.2, §6.3 · Type: CODE · Estimate: 0.3 day · Depends on: T0.1
Scope
Create
lib/airdrop/twitterapi.tsexporting:```ts
export async function lookupXUser(username: string): Promise<{
display_name: string;
avatar_url: string;
follower_count: number;
x_user_id: string;
bio_snippet: string;
} | null>
```
GET /v2/users/by/username/{username}process.env.TWITTERAPI_IO_KEYAcceptance
Dependencies
T0.1 (API key in env)