madeonsol-x402 4.3.0 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/dist/index.d.ts +41 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +28 -8
- package/dist/index.js.map +1 -1
- package/dist/stream.d.ts +2 -2
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +6 -2
- package/dist/stream.js.map +1 -1
- package/dist/terminal-watch.d.ts +40 -0
- package/dist/terminal-watch.d.ts.map +1 -1
- package/dist/terminal-watch.js +148 -13
- package/dist/terminal-watch.js.map +1 -1
- package/dist/types.d.ts +627 -28
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/dist/types.d.ts
CHANGED
|
@@ -6,7 +6,9 @@ export interface KolTrade {
|
|
|
6
6
|
token_name: string | null;
|
|
7
7
|
token_symbol: string | null;
|
|
8
8
|
action: "buy" | "sell";
|
|
9
|
-
|
|
9
|
+
/** SOL size of the trade. `null` on a sell whose SOL proceeds are unknown (they went to
|
|
10
|
+
* another wallet or cannot be proven; since 2026-10-18). The sell still happened. Never read null as 0. */
|
|
11
|
+
sol_amount: number | null;
|
|
10
12
|
token_amount: number;
|
|
11
13
|
/** Token market cap in USD at the moment of trade (real-time, sourced from
|
|
12
14
|
* our in-memory price tracker — not the Dexscreener spot which lags). */
|
|
@@ -423,7 +425,20 @@ export interface FirstTouchSubscriptionCreateResponse {
|
|
|
423
425
|
* below are REST-only. (The x402 route still sends deprecated wallet_address / pnl_sol /
|
|
424
426
|
* total_buy_sol / total_sell_sol aliases until 2026-11-03; they are not typed.)
|
|
425
427
|
*/
|
|
426
|
-
|
|
428
|
+
/**
|
|
429
|
+
* Migration 512 — realized-PnL completeness of a KOL. A KOL sell whose SOL proceeds went to another
|
|
430
|
+
* wallet (or cannot be proven) still reduces holdings, but its position is left out of PnL, win rate,
|
|
431
|
+
* ROI and rankings (never booked as 0 proceeds or a loss). Same vocabulary as /wallet/{address}/pnl.
|
|
432
|
+
*/
|
|
433
|
+
export interface KolPnlCompletenessFields {
|
|
434
|
+
completeness?: "complete" | "incomplete";
|
|
435
|
+
incomplete_reasons?: Array<"proceeds_unattributed">;
|
|
436
|
+
/** Positions excluded from realized PnL / win rate / ROI because a sell's proceeds are unknown. */
|
|
437
|
+
unknown_realizations?: number;
|
|
438
|
+
/** KOL sells with unknown proceeds (sol_amount null) in the window. */
|
|
439
|
+
unknown_proceeds_sells?: number;
|
|
440
|
+
}
|
|
441
|
+
export interface KolLeaderboardEntry extends KolPnlCompletenessFields {
|
|
427
442
|
wallet: string;
|
|
428
443
|
name: string;
|
|
429
444
|
/** Realized (cost-basis) PnL in SOL, 6 decimals. */
|
|
@@ -433,6 +448,20 @@ export interface KolLeaderboardEntry {
|
|
|
433
448
|
buy_count: number;
|
|
434
449
|
sell_count: number;
|
|
435
450
|
win_rate: number | null;
|
|
451
|
+
/** Migration 526 (TR-14): present when win_rate is the full-history FIFO win rate (same number as the KOL profile). */
|
|
452
|
+
win_rate_method?: "fifo_full_history" | "unavailable";
|
|
453
|
+
/** not_computed_for_period: FIFO covers 7d / 30d only; other periods serve win_rate null. */
|
|
454
|
+
win_rate_status?: "available" | "partial" | "insufficient_sample" | "no_known_positions" | "no_closed_positions" | "unavailable" | "not_computed_for_period";
|
|
455
|
+
win_rate_window?: "7d" | "30d" | null;
|
|
456
|
+
win_rate_rule_version?: string | null;
|
|
457
|
+
/** Win-rate denominator (known closed positions) for win_rate_window. */
|
|
458
|
+
closed_positions_known?: number | null;
|
|
459
|
+
/** Closed positions with an unproven realization: never a win or loss, not in the denominator. */
|
|
460
|
+
unknown_realizations_winrate?: number | null;
|
|
461
|
+
win_rate_computed_at?: string | null;
|
|
462
|
+
/** classifier_076 = roster classifier; otherwise the auto tag and its method. */
|
|
463
|
+
strategy_tag_source?: "classifier_076" | "fifo_auto_v2" | "in_window_auto_512" | null;
|
|
464
|
+
auto_strategy_tag_source?: "fifo_auto_v2" | "in_window_auto_512";
|
|
436
465
|
/** v1.12 — median hold time in minutes over the last 30 days. */
|
|
437
466
|
median_hold_minutes_30d?: number | null;
|
|
438
467
|
/** v1.12 — percentile rank (0-100) of early entry quality over the last 30 days. */
|
|
@@ -796,6 +825,10 @@ export interface HotToken {
|
|
|
796
825
|
total_buy_sol: number;
|
|
797
826
|
total_sell_sol: number;
|
|
798
827
|
net_flow: number;
|
|
828
|
+
/** Sells with unknown proceeds left out of total_sell_sol / net flow (never counted as 0 SOL); null = not measured. */
|
|
829
|
+
unknown_proceeds_sells?: number | null;
|
|
830
|
+
/** false when unknown_proceeds_sells > 0; null = not measured. */
|
|
831
|
+
sell_sol_complete?: boolean | null;
|
|
799
832
|
first_kol_buy_at?: string | null;
|
|
800
833
|
first_kol_buy_age_minutes: number | null;
|
|
801
834
|
/** Last KOL buy in the period (REST). */
|
|
@@ -967,7 +1000,7 @@ export interface KolEntryOrderParams {
|
|
|
967
1000
|
limit?: number;
|
|
968
1001
|
}
|
|
969
1002
|
/** One requested wallet. `found: false` (not an active KOL) carries only `wallet` + `found`. */
|
|
970
|
-
export interface KolCompareProfile {
|
|
1003
|
+
export interface KolCompareProfile extends KolPnlCompletenessFields {
|
|
971
1004
|
wallet: string;
|
|
972
1005
|
found: boolean;
|
|
973
1006
|
name?: string;
|
|
@@ -994,7 +1027,37 @@ export interface KolCompareProfile {
|
|
|
994
1027
|
percentile_pnl_30d?: number | null;
|
|
995
1028
|
percentile_winrate_30d?: number | null;
|
|
996
1029
|
percentile_early_entry_30d?: number | null;
|
|
997
|
-
|
|
1030
|
+
/** Migration 512 — 7-day positions excluded from the 7-day PnL metrics (unknown proceeds). Under migration 526 (winrate_method present): the FIFO 7-day unknown realizations; the PnL counter moves to pnl_unknown_realizations_7d. */
|
|
1031
|
+
unknown_realizations_7d?: number;
|
|
1032
|
+
/** Migration 526 (TR-14): present once the FIFO win rate is served. Absent = the in-window method. */
|
|
1033
|
+
winrate_method?: "fifo_full_history" | "unavailable";
|
|
1034
|
+
/** Status of winrate_30d. */
|
|
1035
|
+
winrate_status?: KolWinrateStatus;
|
|
1036
|
+
winrate_status_7d?: KolWinrateStatus;
|
|
1037
|
+
winrate_status_30d?: KolWinrateStatus;
|
|
1038
|
+
/** Minimum known closed positions before a win rate is published. */
|
|
1039
|
+
winrate_min_known?: number;
|
|
1040
|
+
winrate_rule_version?: string | null;
|
|
1041
|
+
winrate_definition?: string;
|
|
1042
|
+
/** Win-rate denominator: completed buy lots whose realization is proven. */
|
|
1043
|
+
closed_positions_known_7d?: number;
|
|
1044
|
+
closed_positions_known_30d?: number;
|
|
1045
|
+
/** All completed buy lots in the window: known + unknown realizations. */
|
|
1046
|
+
closed_positions_all_7d?: number;
|
|
1047
|
+
closed_positions_all_30d?: number;
|
|
1048
|
+
/** Closed positions with an unproven realization: never a win or loss, not in the denominator. */
|
|
1049
|
+
unknown_realizations_30d?: number;
|
|
1050
|
+
/** Migration 526: the in-window 7-day PnL counter (positions excluded from pnl_7d for unknown proceeds). */
|
|
1051
|
+
pnl_unknown_realizations_7d?: number;
|
|
1052
|
+
/** opening_inventory_unproven / consideration_unknown / closure_unproven (KOL_WINRATE_SOURCE=fifo only). */
|
|
1053
|
+
unknown_by_reason_30d?: Record<string, number> | null;
|
|
1054
|
+
winrate_computed_at?: string | null;
|
|
1055
|
+
/** classifier_076 = roster classifier; otherwise the auto tag and its method. */
|
|
1056
|
+
strategy_tag_source?: "classifier_076" | "fifo_auto_v2" | "in_window_auto_512" | null;
|
|
1057
|
+
auto_strategy_tag_source?: "fifo_auto_v2" | "in_window_auto_512";
|
|
1058
|
+
}
|
|
1059
|
+
/** Migration 526 (TR-14) win-rate status vocabulary. */
|
|
1060
|
+
export type KolWinrateStatus = "available" | "partial" | "insufficient_sample" | "no_known_positions" | "no_closed_positions" | "unavailable";
|
|
998
1061
|
export interface KolCompareOverlapToken {
|
|
999
1062
|
token_mint: string;
|
|
1000
1063
|
token_symbol: string | null;
|
|
@@ -1119,6 +1182,10 @@ export interface AlphaLeaderboardEntry {
|
|
|
1119
1182
|
/** v1.24 — null (not 0) when the entry-MC aggregate failed. */
|
|
1120
1183
|
entry_mc_samples?: number | null;
|
|
1121
1184
|
avg_entry_mc_usd?: number | null;
|
|
1185
|
+
/** 2026-10 (migration 511) — early-buyer pairs whose realization is unknown (a sell whose proceeds went to another wallet); excluded from win_rate, net_pnl_sol and roi. null before migration 511. */
|
|
1186
|
+
unknown_realizations?: number | null;
|
|
1187
|
+
/** 2026-10 (migration 511) — SOL bought on those pairs, left out of net_pnl_sol and roi. */
|
|
1188
|
+
unknown_cost_basis_sol?: number | null;
|
|
1122
1189
|
}
|
|
1123
1190
|
export interface AlphaLeaderboardResponse {
|
|
1124
1191
|
/** Launch-pipeline scope disclosure (absent ≠ clean). */
|
|
@@ -1153,18 +1220,28 @@ export interface AlphaWalletSummary {
|
|
|
1153
1220
|
last_seen: string;
|
|
1154
1221
|
bot_confidence: "low" | "medium" | "high" | "none";
|
|
1155
1222
|
bot_signals: string[];
|
|
1223
|
+
/** 2026-10 (migration 511) — early-buyer pairs whose realization is unknown (a sell whose proceeds went to another wallet); excluded from win_rate, net_pnl_sol and roi. null before migration 511. */
|
|
1224
|
+
unknown_realizations?: number | null;
|
|
1225
|
+
/** 2026-10 (migration 511) — SOL bought on those pairs, left out of net_pnl_sol and roi. */
|
|
1226
|
+
unknown_cost_basis_sol?: number | null;
|
|
1156
1227
|
}
|
|
1157
1228
|
export interface AlphaWalletToken {
|
|
1158
1229
|
token_mint: string;
|
|
1159
1230
|
rank: number;
|
|
1160
|
-
|
|
1231
|
+
/** null = the first buy's SOL consideration is unknown (never reported as 0). */
|
|
1232
|
+
first_buy_sol: number | null;
|
|
1233
|
+
/** "unknown_consideration" exactly when first_buy_sol is null. */
|
|
1234
|
+
first_buy_sol_status: "measured" | "unknown_consideration";
|
|
1161
1235
|
first_buy_at: string;
|
|
1162
|
-
|
|
1236
|
+
/** null when first_buy_sol is null (the first buy's cost is unknown), never the priced buys alone or 0. */
|
|
1237
|
+
total_sol_bought: number | null;
|
|
1163
1238
|
total_sol_sold: number;
|
|
1164
|
-
|
|
1239
|
+
/** 2026-10 (migration 508) — null when the realization is unknown (a sell whose proceeds went to another wallet, price_status proceeds_unattributed); never reported as 0. */
|
|
1240
|
+
realized_pnl_sol: number | null;
|
|
1165
1241
|
buy_count: number;
|
|
1166
1242
|
sell_count: number;
|
|
1167
|
-
|
|
1243
|
+
/** 2026-10 (migration 508) — "unknown" when realized_pnl_sol is null: neither a win nor a loss. */
|
|
1244
|
+
result: "win" | "loss" | "open" | "unknown";
|
|
1168
1245
|
}
|
|
1169
1246
|
export interface AlphaWalletResponse {
|
|
1170
1247
|
/** Launch-pipeline scope disclosure (absent ≠ clean). */
|
|
@@ -1193,8 +1270,11 @@ export type BuyerQualitySignal = "positive" | "neutral" | "negative";
|
|
|
1193
1270
|
export interface CapTableBuyer {
|
|
1194
1271
|
rank: number;
|
|
1195
1272
|
wallet: string;
|
|
1196
|
-
|
|
1197
|
-
|
|
1273
|
+
/** null = the first buy's SOL consideration is unknown (never reported as 0). */
|
|
1274
|
+
first_buy_sol: number | null;
|
|
1275
|
+
/** "unknown_consideration" exactly when first_buy_sol is null. */
|
|
1276
|
+
first_buy_sol_status: "measured" | "unknown_consideration";
|
|
1277
|
+
first_buy_at: string | null;
|
|
1198
1278
|
/** Realized PnL on this token from confirmed swaps; null when unknown. */
|
|
1199
1279
|
realized_pnl_sol?: number | null;
|
|
1200
1280
|
total_sol_bought?: number | null;
|
|
@@ -1203,6 +1283,28 @@ export interface CapTableBuyer {
|
|
|
1203
1283
|
first_sell_at?: string | null;
|
|
1204
1284
|
/** first_sell_at == null (swap-ledger scoped: a plain transfer out still reads as holding). */
|
|
1205
1285
|
still_holding?: boolean;
|
|
1286
|
+
/** 2026-10, only with verify_current_balances=true (ULTRA+): the current balance of this mint. */
|
|
1287
|
+
balance_now?: {
|
|
1288
|
+
amount_raw: string;
|
|
1289
|
+
decimals: number | null;
|
|
1290
|
+
amount: string;
|
|
1291
|
+
holding: boolean;
|
|
1292
|
+
token_accounts: number;
|
|
1293
|
+
slot: number;
|
|
1294
|
+
};
|
|
1295
|
+
/** 2026-10, only with verify_current_balances=true: the balance (unlike still_holding, the swap ledger). */
|
|
1296
|
+
holding_status?: "verified_nonzero" | "verified_zero";
|
|
1297
|
+
/** 2026-10, only with verify_current_balances=true: zero balance although no sell is on the swap ledger. */
|
|
1298
|
+
exited_without_sell?: boolean;
|
|
1299
|
+
/** 2026-10, only with include_scout_scores=true: KOL buyers' scout score as of first_buy_at (no hindsight); null for non-KOLs. */
|
|
1300
|
+
scout_score?: {
|
|
1301
|
+
as_of: string;
|
|
1302
|
+
first_touches_30d: number;
|
|
1303
|
+
avg_followers_4h: number | null;
|
|
1304
|
+
swarm_3plus_pct: number | null;
|
|
1305
|
+
swarm_5plus_pct: number | null;
|
|
1306
|
+
scout_tier: "S" | "A" | "B" | "C" | null;
|
|
1307
|
+
} | null;
|
|
1206
1308
|
is_bundle: boolean;
|
|
1207
1309
|
is_kol: boolean;
|
|
1208
1310
|
kol_name: string | null;
|
|
@@ -1267,6 +1369,22 @@ export interface TokenCapTableResponse {
|
|
|
1267
1369
|
/** v1.23.4 — trade-coverage disclosure (keyed route; absent on the x402 mirror and older cached responses). */
|
|
1268
1370
|
coverage?: TradeCoverage;
|
|
1269
1371
|
/** 2026-10 — whether early-buyer ranks 1..20 can be trusted (a recorded ingest gap overlapping launch→last ranked buy means a true early buyer may be missing). Absent on older responses. */
|
|
1372
|
+
/** 2026-10, only with include_scout_scores=true. */
|
|
1373
|
+
scout_scores_status?: "ok" | "unavailable" | "timeout" | "error";
|
|
1374
|
+
scout_scores_note?: string;
|
|
1375
|
+
/** 2026-10, only with verify_current_balances=true (ULTRA+), after every scored buyer was read. */
|
|
1376
|
+
onchain_balance_verification?: {
|
|
1377
|
+
source: string;
|
|
1378
|
+
checked_at: string;
|
|
1379
|
+
slot_min: number;
|
|
1380
|
+
slot_max: number;
|
|
1381
|
+
verified_wallets: number;
|
|
1382
|
+
complete: boolean;
|
|
1383
|
+
verified_still_holding: number;
|
|
1384
|
+
verified_exited: number;
|
|
1385
|
+
exited_without_sell: number;
|
|
1386
|
+
note: string;
|
|
1387
|
+
};
|
|
1270
1388
|
ranks_completeness?: {
|
|
1271
1389
|
ranks_complete: "observed_from_launch" | "gap_overlap" | "not_verified" | "no_ranks";
|
|
1272
1390
|
rank_basis: "first_persisted_buys_at_or_above_floor";
|
|
@@ -1281,6 +1399,17 @@ export interface TokenCapTableResponse {
|
|
|
1281
1399
|
}
|
|
1282
1400
|
export interface TokenBuyerQualityResponse {
|
|
1283
1401
|
mint: string;
|
|
1402
|
+
/** 2026-10, REST only with include_balances=true (PRO+): the dump-cluster early buyers' CURRENT holdings; totals only when every member was read. */
|
|
1403
|
+
dump_cluster_held_now?: {
|
|
1404
|
+
cohort_size: number;
|
|
1405
|
+
members: number;
|
|
1406
|
+
held_now: Record<string, unknown>;
|
|
1407
|
+
wallets: Array<{
|
|
1408
|
+
wallet: string;
|
|
1409
|
+
balance_now: Record<string, unknown> | null;
|
|
1410
|
+
}>;
|
|
1411
|
+
note: string;
|
|
1412
|
+
};
|
|
1284
1413
|
score: number;
|
|
1285
1414
|
confidence: BuyerQualityConfidence;
|
|
1286
1415
|
signal: BuyerQualitySignal;
|
|
@@ -1543,6 +1672,16 @@ export interface Candle {
|
|
|
1543
1672
|
close_liquidity_usd?: number | null;
|
|
1544
1673
|
high_mc_usd?: number | null;
|
|
1545
1674
|
low_mc_usd?: number | null;
|
|
1675
|
+
/** Known data-quality issue for this candle (2026-10-27); null = no known issue. OHLCV is never altered. */
|
|
1676
|
+
quality?: CandleQuality | null;
|
|
1677
|
+
}
|
|
1678
|
+
/** Per-candle data-quality status. On rolled-up timeframes the worst status of the 1-minute buckets inside. */
|
|
1679
|
+
export interface CandleQuality {
|
|
1680
|
+
status: "contaminated_proven" | "contaminated_suspected" | "unknown";
|
|
1681
|
+
/** Machine-readable cause, e.g. "clmm_v2_create_as_swap". */
|
|
1682
|
+
reason: string;
|
|
1683
|
+
/** 1-minute buckets inside this candle that are listed. */
|
|
1684
|
+
flagged_minutes: number;
|
|
1546
1685
|
}
|
|
1547
1686
|
/** 1-minute-derived OHLC candles for a token. PRO/ULTRA only. */
|
|
1548
1687
|
export interface CandlesResponse {
|
|
@@ -1554,6 +1693,8 @@ export interface CandlesResponse {
|
|
|
1554
1693
|
/** True when ULTRA net-flow/liquidity fields are populated on each candle. */
|
|
1555
1694
|
net_flow_included: boolean;
|
|
1556
1695
|
candles: Candle[];
|
|
1696
|
+
/** false = the quality lookup failed, so a null candle quality means not checked (2026-10-27). */
|
|
1697
|
+
quality_checked?: boolean;
|
|
1557
1698
|
/** true = the page budget ran out before `limit` candles or `from` was reached; covered_from is then the oldest instant actually searched. */
|
|
1558
1699
|
truncated?: boolean;
|
|
1559
1700
|
covered_from?: string;
|
|
@@ -1633,6 +1774,96 @@ export interface BundleWallet {
|
|
|
1633
1774
|
win_rate?: number | null;
|
|
1634
1775
|
bot_confidence?: string | null;
|
|
1635
1776
|
tokens_held?: number;
|
|
1777
|
+
/** 2026-10, only with include_balances=true: current balance of the mint; null when the cohort read failed. */
|
|
1778
|
+
balance_now?: {
|
|
1779
|
+
amount_raw: string;
|
|
1780
|
+
decimals: number | null;
|
|
1781
|
+
amount: string;
|
|
1782
|
+
holding: boolean;
|
|
1783
|
+
token_accounts: number;
|
|
1784
|
+
slot: number;
|
|
1785
|
+
} | null;
|
|
1786
|
+
}
|
|
1787
|
+
export type InsiderFlowNullReason = "unpriced_trades" | "firehose_gap" | "gap_state_unverified" | "not_captured" | "capture_unverified" | "no_buy_volume" | "buy_volume_incomplete" | "liquidity_unknown" | "liquidity_stale" | "sol_price_unavailable";
|
|
1788
|
+
/** One cohort (or the deduplicated `insiders` union) in one window. Every amount is null when the window is `not_captured`. */
|
|
1789
|
+
export interface InsiderFlowCohort {
|
|
1790
|
+
wallets_trading: number | null;
|
|
1791
|
+
wallets_selling: number | null;
|
|
1792
|
+
buy_trades: number | null;
|
|
1793
|
+
sell_trades: number | null;
|
|
1794
|
+
/** Proven SOL spent on buys; unpriced trades are excluded and counted in unpriced_trades. */
|
|
1795
|
+
buy_sol: number | null;
|
|
1796
|
+
sell_sol: number | null;
|
|
1797
|
+
sell_tokens: number | null;
|
|
1798
|
+
unpriced_trades: number | null;
|
|
1799
|
+
amounts: "complete" | "partial" | null;
|
|
1800
|
+
/** sell_sol - buy_sol (positive = net selling); null when amounts are partial or the window overlaps a capture gap. */
|
|
1801
|
+
net_sell_sol: number | null;
|
|
1802
|
+
net_sell_usd: number | null;
|
|
1803
|
+
/** PERCENT of every proven buy in the window. */
|
|
1804
|
+
net_sell_pct_of_buy_volume: number | null;
|
|
1805
|
+
/** PERCENT of the token liquidity in USD. */
|
|
1806
|
+
net_sell_pct_of_liquidity: number | null;
|
|
1807
|
+
null_reasons: Partial<Record<"net_sell_sol" | "net_sell_usd" | "net_sell_pct_of_buy_volume" | "net_sell_pct_of_liquidity", InsiderFlowNullReason>>;
|
|
1808
|
+
}
|
|
1809
|
+
export interface InsiderFlowWindow {
|
|
1810
|
+
from: string;
|
|
1811
|
+
to: string;
|
|
1812
|
+
seconds: number;
|
|
1813
|
+
status: "ok" | "no_trades" | "gap_overlap" | "gap_unverified" | "not_captured" | "capture_unverified";
|
|
1814
|
+
market: {
|
|
1815
|
+
buy_trades: number | null;
|
|
1816
|
+
sell_trades: number | null;
|
|
1817
|
+
buy_sol: number | null;
|
|
1818
|
+
sell_sol: number | null;
|
|
1819
|
+
unpriced_trades: number | null;
|
|
1820
|
+
};
|
|
1821
|
+
insiders: InsiderFlowCohort;
|
|
1822
|
+
by_cohort: {
|
|
1823
|
+
creator?: InsiderFlowCohort;
|
|
1824
|
+
early_buyers?: InsiderFlowCohort;
|
|
1825
|
+
bundlers?: InsiderFlowCohort;
|
|
1826
|
+
kols?: InsiderFlowCohort;
|
|
1827
|
+
};
|
|
1828
|
+
}
|
|
1829
|
+
/** GET /tokens/{mint}/insider-flow (PRO+): net selling by creator, early buyers, bundlers and KOLs over 5 and 15 minutes. */
|
|
1830
|
+
export interface TokenInsiderFlowResponse {
|
|
1831
|
+
mint: string;
|
|
1832
|
+
as_of: string;
|
|
1833
|
+
rule_version: string;
|
|
1834
|
+
time_basis: "ingest_clock";
|
|
1835
|
+
windows: Record<string, InsiderFlowWindow>;
|
|
1836
|
+
cohorts: {
|
|
1837
|
+
creator?: {
|
|
1838
|
+
status: "known" | "platform_signer" | "not_recorded";
|
|
1839
|
+
wallet?: string | null;
|
|
1840
|
+
};
|
|
1841
|
+
early_buyers?: {
|
|
1842
|
+
status: "recorded" | "not_recorded";
|
|
1843
|
+
wallets?: number;
|
|
1844
|
+
};
|
|
1845
|
+
bundlers?: {
|
|
1846
|
+
status: "detected" | "none_detected" | "not_measured";
|
|
1847
|
+
wallets?: number;
|
|
1848
|
+
};
|
|
1849
|
+
kols?: {
|
|
1850
|
+
status: "matched_on_trades";
|
|
1851
|
+
note?: string;
|
|
1852
|
+
};
|
|
1853
|
+
};
|
|
1854
|
+
completeness: Record<string, unknown>;
|
|
1855
|
+
liquidity: {
|
|
1856
|
+
liquidity_usd?: number | null;
|
|
1857
|
+
updated_at?: string | null;
|
|
1858
|
+
status?: "ok" | "unknown" | "stale" | "no_primary_pool";
|
|
1859
|
+
};
|
|
1860
|
+
sol_usd: {
|
|
1861
|
+
price?: number | null;
|
|
1862
|
+
source?: string;
|
|
1863
|
+
status?: "ok" | "unavailable";
|
|
1864
|
+
};
|
|
1865
|
+
coverage: Record<string, unknown>;
|
|
1866
|
+
note: string;
|
|
1636
1867
|
}
|
|
1637
1868
|
/**
|
|
1638
1869
|
* Bundle-cohort holdings for a token. `held_pct_of_supply` (net held / circulating
|
|
@@ -1643,6 +1874,23 @@ export interface BundleWallet {
|
|
|
1643
1874
|
export interface TokenBundleResponse {
|
|
1644
1875
|
mint: string;
|
|
1645
1876
|
bundle: BundleSummary;
|
|
1877
|
+
/** 2026-10, only with include_balances=true (PRO+): balance-based held figures; totals only when complete. */
|
|
1878
|
+
held_now?: {
|
|
1879
|
+
source: "solana_rpc_getTokenAccountsByOwner";
|
|
1880
|
+
checked_at: string;
|
|
1881
|
+
wallets: number;
|
|
1882
|
+
verified_wallets: number;
|
|
1883
|
+
holding_wallets: number;
|
|
1884
|
+
complete: boolean;
|
|
1885
|
+
incomplete_reason: string | null;
|
|
1886
|
+
slot_min: number | null;
|
|
1887
|
+
slot_max: number | null;
|
|
1888
|
+
tokens_held_raw: string | null;
|
|
1889
|
+
tokens_held: string | null;
|
|
1890
|
+
/** RATIO in [0, 1] of circulating_supply_raw. */
|
|
1891
|
+
held_pct_of_supply: number | null;
|
|
1892
|
+
supply_basis: "circulating_supply_raw" | null;
|
|
1893
|
+
};
|
|
1646
1894
|
wallets: BundleWallet[];
|
|
1647
1895
|
/** v1.23.4 — trade-coverage disclosure (keyed route; absent on older cached responses). */
|
|
1648
1896
|
coverage?: TradeCoverage;
|
|
@@ -2100,6 +2348,10 @@ export interface KolConsensus {
|
|
|
2100
2348
|
net_flow_sol: number;
|
|
2101
2349
|
total_buy_sol: number;
|
|
2102
2350
|
total_sell_sol: number;
|
|
2351
|
+
/** Sells with unknown proceeds left out of total_sell_sol / net flow (never counted as 0 SOL); null = not measured. */
|
|
2352
|
+
unknown_proceeds_sells?: number | null;
|
|
2353
|
+
/** false when unknown_proceeds_sells > 0; null = not measured. */
|
|
2354
|
+
sell_sol_complete?: boolean | null;
|
|
2103
2355
|
first_kol_buy_at: string | null;
|
|
2104
2356
|
last_kol_buy_at: string | null;
|
|
2105
2357
|
first_touch_wallet: string | null;
|
|
@@ -2178,6 +2430,8 @@ export interface TokenSnapshot {
|
|
|
2178
2430
|
price_sol: number | null;
|
|
2179
2431
|
vwap_price_usd?: number | null;
|
|
2180
2432
|
vwap_price_sol?: number | null;
|
|
2433
|
+
/** Why the VWAP fields are null, or "ok" (2026-10-15): an implausible VWAP is withheld, never served. */
|
|
2434
|
+
vwap_status?: "ok" | "unavailable" | "no_price_reference" | "implausible_vs_price";
|
|
2181
2435
|
market_cap: number | null;
|
|
2182
2436
|
fdv_usd: number | null;
|
|
2183
2437
|
liquidity_usd: number | null;
|
|
@@ -2601,7 +2855,20 @@ export interface WalletStats {
|
|
|
2601
2855
|
sold_sol: number;
|
|
2602
2856
|
unique_tokens: number;
|
|
2603
2857
|
window_days: number;
|
|
2858
|
+
/** 2026-10 (migration 508) — cost basis consumed by sells whose proceeds went to another wallet. Not in realized PnL or ROI (neither a loss nor a gain). 0 when complete. Absent on older servers. */
|
|
2859
|
+
unknown_realized_cost_basis_sol?: number;
|
|
2860
|
+
/** 2026-10 (migration 508) — sells with price_status proceeds_unattributed. Absent on older servers. */
|
|
2861
|
+
unattributed_sells?: number;
|
|
2604
2862
|
}
|
|
2863
|
+
/**
|
|
2864
|
+
* 2026-10 (migration 508) — realized-PnL completeness. NOT the same field as
|
|
2865
|
+
* `coverage.completeness` (source-coverage verification, `"not_verified"`):
|
|
2866
|
+
* this one says whether realized PnL / ROI include every sell's proceeds.
|
|
2867
|
+
*/
|
|
2868
|
+
export type RealizedPnlCompleteness = "complete" | "incomplete";
|
|
2869
|
+
export type RealizedPnlIncompleteReason = "proceeds_unattributed" | "unknown_consideration" | "missing_cost_basis";
|
|
2870
|
+
/** known = no unattributed sell; partial = some; unknown = every sell unattributed (outcome unknown, not a loss). */
|
|
2871
|
+
export type RealizedStatus = "known" | "partial" | "unknown";
|
|
2605
2872
|
/** Rolling dump-cluster stats for a wallet (trailing 42 days, refreshed daily).
|
|
2606
2873
|
* A "dump cohort" is a first-20 buyer appearance on a token that peaked <15min
|
|
2607
2874
|
* after deploy. `null` on the parent means no cohort record for the wallet. */
|
|
@@ -2681,10 +2948,15 @@ export interface WalletTopToken {
|
|
|
2681
2948
|
sells: number;
|
|
2682
2949
|
sol_in: number;
|
|
2683
2950
|
sol_out: number;
|
|
2951
|
+
/** Known basis only (migration 508): unattributed sells are excluded, see unknown_realized_cost_basis_sol. */
|
|
2684
2952
|
realized_pnl_sol: number;
|
|
2685
2953
|
current_mc_usd: number | null;
|
|
2686
2954
|
peak_mc_usd: number | null;
|
|
2687
2955
|
last_traded_at: string;
|
|
2956
|
+
/** 2026-10 (migration 508). Absent on older servers. */
|
|
2957
|
+
unknown_realized_cost_basis_sol?: number;
|
|
2958
|
+
unattributed_sells?: number;
|
|
2959
|
+
realized_status?: RealizedStatus;
|
|
2688
2960
|
}
|
|
2689
2961
|
export interface WalletTradingStyle {
|
|
2690
2962
|
total_trades: number;
|
|
@@ -2715,9 +2987,14 @@ export interface WalletRecentTrade {
|
|
|
2715
2987
|
tx_signature: string;
|
|
2716
2988
|
}
|
|
2717
2989
|
export interface WalletStatsResponse {
|
|
2718
|
-
/** Trade-data coverage disclosure. */
|
|
2990
|
+
/** Trade-data coverage disclosure (its `completeness` is source coverage, not realized PnL). */
|
|
2719
2991
|
coverage?: TradeCoverage;
|
|
2720
2992
|
address: string;
|
|
2993
|
+
/** 2026-10 (migration 508) — realized-PnL completeness over stats + top_tokens. Absent on older servers. */
|
|
2994
|
+
completeness?: RealizedPnlCompleteness;
|
|
2995
|
+
incomplete_reasons?: RealizedPnlIncompleteReason[];
|
|
2996
|
+
/** 2026-10 — fixed sentence: realized PnL and ROI cover the known basis only. */
|
|
2997
|
+
pnl_basis_note?: string;
|
|
2721
2998
|
stats: WalletStats | null;
|
|
2722
2999
|
flags: WalletFlags;
|
|
2723
3000
|
top_tokens?: WalletTopToken[];
|
|
@@ -2746,6 +3023,10 @@ export interface WalletPnlSummary {
|
|
|
2746
3023
|
total_pnl_sol: number;
|
|
2747
3024
|
total_bought_sol: number;
|
|
2748
3025
|
total_sold_sol: number;
|
|
3026
|
+
/** 2026-10 (migration 508) — cost basis of FIFO lots consumed by disposals whose realization is unknown (proceeds_unattributed sells). Not in realized_sol: neither a loss nor a gain. 0 when complete. Absent on analyses cached before the field existed. */
|
|
3027
|
+
unknown_realized_cost_basis_sol?: number;
|
|
3028
|
+
/** Migration 516 (not yet enabled): proven single-event SOL tips inside the basis / proceeds above; tips shared by 2+ trades of one tx are in notes.unallocated_tx_costs. */
|
|
3029
|
+
tips_sol?: number;
|
|
2749
3030
|
wins: number;
|
|
2750
3031
|
losses: number;
|
|
2751
3032
|
win_rate: number | null;
|
|
@@ -2780,15 +3061,21 @@ export interface WalletClosedPosition {
|
|
|
2780
3061
|
pnl_sol: number;
|
|
2781
3062
|
roi_pct: number | null;
|
|
2782
3063
|
hold_minutes: number | null;
|
|
2783
|
-
|
|
3064
|
+
/** 2026-10 (migration 508) — "unknown": at least one disposal's realization is unknown; not a win, not a loss, not in win_rate / profit_factor; sorted after the known positions. */
|
|
3065
|
+
result: "win" | "loss" | "breakeven" | "unknown";
|
|
3066
|
+
/** 2026-10 (migration 508) — known | partial (pnl_sol is the known part) | unknown. Absent on analyses cached before the field existed. */
|
|
3067
|
+
realized_status?: "known" | "partial" | "unknown";
|
|
3068
|
+
/** 2026-10 (migration 508) — basis of the lots consumed by unknown disposals of this token; not in pnl_sol. */
|
|
3069
|
+
unknown_realized_cost_basis_sol?: number;
|
|
2784
3070
|
first_trade: string | null;
|
|
2785
3071
|
last_trade: string | null;
|
|
2786
3072
|
}
|
|
2787
3073
|
export interface WalletOpenPosition {
|
|
2788
3074
|
token_mint: string;
|
|
2789
3075
|
token_amount: number;
|
|
2790
|
-
|
|
2791
|
-
|
|
3076
|
+
/** null when cost_basis_status is unknown. */
|
|
3077
|
+
cost_basis_sol: number | null;
|
|
3078
|
+
avg_entry_price_sol: number | null;
|
|
2792
3079
|
current_price_sol: number | null;
|
|
2793
3080
|
current_value_sol: number | null;
|
|
2794
3081
|
unrealized_sol: number | null;
|
|
@@ -2799,8 +3086,9 @@ export interface WalletOpenPosition {
|
|
|
2799
3086
|
position_basis?: "swap_derived";
|
|
2800
3087
|
holding_status?: "verified" | "unverified";
|
|
2801
3088
|
holding_unverified_reason?: "not_checked" | "no_fresh_snapshot" | "snapshot_unreadable" | "snapshot_older_than_trades" | "decimals_mismatch" | "balance_invalid" | null;
|
|
2802
|
-
/** partial = a verified balance exceeds the trade position; the excess arrived without a swap and has no cost basis.
|
|
2803
|
-
|
|
3089
|
+
/** partial = a verified balance exceeds the trade position; the excess arrived without a swap and has no cost basis.
|
|
3090
|
+
* unknown = part of the position was bought with unknown consideration: cost_basis_sol / avg_entry_price_sol / unrealized_* are null. */
|
|
3091
|
+
cost_basis_status?: "known" | "partial" | "unknown";
|
|
2804
3092
|
/** Present (non-null) only when holding_status = verified. */
|
|
2805
3093
|
holding?: WalletPositionHolding | null;
|
|
2806
3094
|
}
|
|
@@ -2810,10 +3098,10 @@ export interface WalletPositionHolding {
|
|
|
2810
3098
|
onchain_balance: number;
|
|
2811
3099
|
held_known_amount: number;
|
|
2812
3100
|
external_inflow_amount: number;
|
|
2813
|
-
cost_basis_held_sol: number;
|
|
3101
|
+
cost_basis_held_sol: number | null;
|
|
2814
3102
|
unrealized_known_sol: number | null;
|
|
2815
3103
|
/** Cost of FIFO lots no longer in the wallet. Outcome unknown: neither realized nor unrealized. */
|
|
2816
|
-
cost_basis_not_held_sol: number;
|
|
3104
|
+
cost_basis_not_held_sol: number | null;
|
|
2817
3105
|
verified_at: string;
|
|
2818
3106
|
source: "wallet_holdings_cache";
|
|
2819
3107
|
}
|
|
@@ -2833,6 +3121,9 @@ export interface WalletHoldingCheck {
|
|
|
2833
3121
|
export interface WalletPnlResponse {
|
|
2834
3122
|
address: string;
|
|
2835
3123
|
window_days: number;
|
|
3124
|
+
/** 2026-10 (migration 508) — "incomplete" when at least one disposal's realized PnL is unknown (a sell whose proceeds went to another wallet, price_status proceeds_unattributed; or unknown consideration). Lots are consumed (holdings right), the realization is excluded from realized_sol / win_rate / best-worst, never booked as 0 proceeds. Absent on analyses cached before the field existed. */
|
|
3125
|
+
completeness?: "complete" | "incomplete";
|
|
3126
|
+
incomplete_reasons?: Array<"proceeds_unattributed" | "unknown_consideration" | "missing_cost_basis">;
|
|
2836
3127
|
summary: WalletPnlSummary;
|
|
2837
3128
|
pnl_curve: WalletPnlCurvePoint[];
|
|
2838
3129
|
closed_positions: WalletClosedPosition[];
|
|
@@ -2849,6 +3140,16 @@ export interface WalletPnlResponse {
|
|
|
2849
3140
|
sells_without_cost_basis?: {
|
|
2850
3141
|
tokens: number;
|
|
2851
3142
|
cost_basis: "unknown";
|
|
3143
|
+
}; /** 2026-10 (migration 508) — disposals whose realization is unknown; their basis is excluded from every realized figure. */
|
|
3144
|
+
unknown_realizations?: {
|
|
3145
|
+
proceeds_unattributed_sells: number;
|
|
3146
|
+
tokens: number;
|
|
3147
|
+
unknown_realized_cost_basis_sol: number;
|
|
3148
|
+
realized_pnl: "excluded";
|
|
3149
|
+
}; /** Migration 516 (not yet enabled): SOL tips in no basis and no realized PnL (shared by 2+ trades of one tx, never split; or on a trade with unknown realization). */
|
|
3150
|
+
unallocated_tx_costs?: {
|
|
3151
|
+
count: number;
|
|
3152
|
+
sol: number;
|
|
2852
3153
|
};
|
|
2853
3154
|
};
|
|
2854
3155
|
/** 2026-10 (COV-21) — proven-holding check summary. Absent on older responses. */
|
|
@@ -2865,6 +3166,12 @@ export interface WalletPnlResponse {
|
|
|
2865
3166
|
}
|
|
2866
3167
|
export interface WalletPositionsResponse {
|
|
2867
3168
|
address: string;
|
|
3169
|
+
/** 2026-10 (migration 508) — realized-PnL completeness of the wallet, same values as /pnl (NOT coverage.completeness). Absent on older servers. */
|
|
3170
|
+
completeness?: RealizedPnlCompleteness;
|
|
3171
|
+
incomplete_reasons?: RealizedPnlIncompleteReason[];
|
|
3172
|
+
summary?: {
|
|
3173
|
+
unknown_realized_cost_basis_sol: number;
|
|
3174
|
+
};
|
|
2868
3175
|
positions: WalletOpenPosition[];
|
|
2869
3176
|
/** 2026-10 (COV-21) — proven-holding check summary. Absent on older responses. */
|
|
2870
3177
|
holding_check?: WalletHoldingCheck;
|
|
@@ -2933,7 +3240,10 @@ export interface WalletTrade {
|
|
|
2933
3240
|
tx_signature: string;
|
|
2934
3241
|
token_mint: string;
|
|
2935
3242
|
action: "buy" | "sell";
|
|
2936
|
-
|
|
3243
|
+
/** SOL moved by this trade. `null` = the SOL consideration is unproven
|
|
3244
|
+
* (`event.price_status` "quote_unpriced" or "proceeds_unattributed"); `0` = a measured zero.
|
|
3245
|
+
* Since 2026-10-28 an unproven amount is never served as 0. */
|
|
3246
|
+
sol_amount: number | null;
|
|
2937
3247
|
token_amount: number;
|
|
2938
3248
|
/** This trade's executed price — `sol_amount / token_amount`. Added 2026-08-16;
|
|
2939
3249
|
* this route returned amounts and no price before. See {@link TokenTrade}. */
|
|
@@ -2946,6 +3256,10 @@ export interface WalletTrade {
|
|
|
2946
3256
|
market_price_usd: number | null;
|
|
2947
3257
|
block_time: number;
|
|
2948
3258
|
traded_at: string;
|
|
3259
|
+
/** Exact on-chain amounts — see {@link TradeRawAmounts}. Present once exact amounts are enabled server-side. */
|
|
3260
|
+
amounts?: TradeRawAmounts;
|
|
3261
|
+
/** Event identity + attribution labels — see {@link TradeEventFacts}. Present once event reads are enabled server-side. */
|
|
3262
|
+
event?: TradeEventFacts;
|
|
2949
3263
|
}
|
|
2950
3264
|
export interface WalletTradesResponse {
|
|
2951
3265
|
/** Trade-data coverage disclosure. */
|
|
@@ -2993,7 +3307,10 @@ export interface TokenTrade {
|
|
|
2993
3307
|
tx_signature: string;
|
|
2994
3308
|
wallet_address: string;
|
|
2995
3309
|
action: "buy" | "sell";
|
|
2996
|
-
|
|
3310
|
+
/** SOL moved by this trade. `null` = the SOL consideration is unproven
|
|
3311
|
+
* (`event.price_status` "quote_unpriced" or "proceeds_unattributed"); `0` = a measured zero.
|
|
3312
|
+
* Since 2026-10-28 an unproven amount is never served as 0. */
|
|
3313
|
+
sol_amount: number | null;
|
|
2997
3314
|
token_amount: number;
|
|
2998
3315
|
/** THIS TRADE's executed price: `sol_amount / token_amount`, so it reconciles
|
|
2999
3316
|
* exactly with the amounts on the same row and with the PnL endpoints.
|
|
@@ -3020,6 +3337,88 @@ export interface TokenTrade {
|
|
|
3020
3337
|
slot: number | null;
|
|
3021
3338
|
block_time: number;
|
|
3022
3339
|
traded_at: string;
|
|
3340
|
+
/** Exact on-chain amounts — see {@link TradeRawAmounts}. Present once exact amounts are enabled server-side. */
|
|
3341
|
+
amounts?: TradeRawAmounts;
|
|
3342
|
+
/** Event identity + attribution labels — see {@link TradeEventFacts}. Present once event reads are enabled server-side. */
|
|
3343
|
+
event?: TradeEventFacts;
|
|
3344
|
+
}
|
|
3345
|
+
/** Event identity and attribution labels of one Solana trade row (migration 493).
|
|
3346
|
+
* Every field null = a netted legacy row (one row per transaction, wallet and mint),
|
|
3347
|
+
* which is every row stored today. Labels are open-ended strings: treat an
|
|
3348
|
+
* unrecognised value as "not proven". Never deduplicate on
|
|
3349
|
+
* (tx_signature, wallet_address); event rows of one transaction differ in event_id. */
|
|
3350
|
+
export interface TradeEventFacts {
|
|
3351
|
+
/** `signature:outer_ix[.inner_ix]`; null = netted row. */
|
|
3352
|
+
event_id: string | null;
|
|
3353
|
+
/** "signer" | "non_signer" | "unproven" (excluded from wallet-scoped reads); null = legacy row. */
|
|
3354
|
+
trader_status: string | null;
|
|
3355
|
+
/** null = priced | "quote_unpriced" | "proceeds_unattributed": with either label sol_amount is NOT the
|
|
3356
|
+
* consideration and price_sol / price_usd are null. */
|
|
3357
|
+
price_status: string | null;
|
|
3358
|
+
/** "chain" | "ingest_clock"; null = legacy row (ingest clock). */
|
|
3359
|
+
block_time_source: string | null;
|
|
3360
|
+
/** Migrations 515/516 (not yet enabled): proven economic settlement of an event row; null = netted / nothing proven. */
|
|
3361
|
+
settlement?: TradeSettlement | null;
|
|
3362
|
+
/** Migrations 515/516 (not yet enabled): roles the tx proves; `wallet` only for a proven signer. */
|
|
3363
|
+
parties?: TradeEventParty[];
|
|
3364
|
+
}
|
|
3365
|
+
/** Amounts are exact base-unit decimal strings (parse with BigInt). */
|
|
3366
|
+
export interface TradeSettlement {
|
|
3367
|
+
/** "custody_fee" | "custody_forward" | "router_funded" (later "direct" | "split_parties" | "pumpfun_multihop"); null = only tips / fees. */
|
|
3368
|
+
route: string | null;
|
|
3369
|
+
amount: {
|
|
3370
|
+
mint: string;
|
|
3371
|
+
amount_raw: string;
|
|
3372
|
+
} | null;
|
|
3373
|
+
gross_token_amount_raw: string | null;
|
|
3374
|
+
pool_quote: {
|
|
3375
|
+
mint: string;
|
|
3376
|
+
amount_raw: string;
|
|
3377
|
+
} | null;
|
|
3378
|
+
/** Facts only: a router_fee / pumpswap_cashback fee is never part of the trade's amounts, price, volume, cost basis or PnL. program / recipient / payer: router_fee + pumpswap_cashback only (payer = this trade's wallet, else null); recipient_account: pumpswap_cashback only. */
|
|
3379
|
+
fees: Array<{
|
|
3380
|
+
kind: "funding_fee" | "route_fee_sol" | "router_fee" | "pumpswap_cashback" | (string & {});
|
|
3381
|
+
mint: string;
|
|
3382
|
+
amount_raw: string;
|
|
3383
|
+
program?: string;
|
|
3384
|
+
recipient?: string;
|
|
3385
|
+
recipient_account?: string;
|
|
3386
|
+
payer?: string | null;
|
|
3387
|
+
}>;
|
|
3388
|
+
tips: Array<{
|
|
3389
|
+
amount_raw: string;
|
|
3390
|
+
mint: string;
|
|
3391
|
+
recipient: string;
|
|
3392
|
+
instruction_index: number;
|
|
3393
|
+
}>;
|
|
3394
|
+
/** 1 = the tips are in this trade's PnL basis; 2+ = unallocated (never split). */
|
|
3395
|
+
tips_shared_by_events: number | null;
|
|
3396
|
+
}
|
|
3397
|
+
export interface TradeEventParty {
|
|
3398
|
+
role: string;
|
|
3399
|
+
ordinal: number;
|
|
3400
|
+
is_signer: boolean | null;
|
|
3401
|
+
/** Only when is_signer is true. */
|
|
3402
|
+
wallet: string | null;
|
|
3403
|
+
mint: string | null;
|
|
3404
|
+
amount_raw: string | null;
|
|
3405
|
+
}
|
|
3406
|
+
/** Exact amounts of one Solana trade (#508). Integers are decimal STRINGS (u64
|
|
3407
|
+
* base units exceed the JS number range; parse with BigInt).
|
|
3408
|
+
* `raw_known: false` = a row stored before exact amounts existed: every field
|
|
3409
|
+
* is null = UNKNOWN, never 0. `sol_amount` / `token_amount` on the row keep their
|
|
3410
|
+
* meaning (gross SOL incl. fee/rent; 6-decimal rounded UI amount). */
|
|
3411
|
+
export interface TradeRawAmounts {
|
|
3412
|
+
/** |net change of the traded mint|, base units (token_amount = token_raw / 10^token_decimals, exact). */
|
|
3413
|
+
token_raw: string | null;
|
|
3414
|
+
token_decimals: number | null;
|
|
3415
|
+
/** Signed lamports (negative = paid), tx fee + token-account rent excluded; null unless SOL is the proven settlement. */
|
|
3416
|
+
sol_net_lamports: string | null;
|
|
3417
|
+
/** The one non-SOL token moved the other way (USDC, PUMP, an xStock …); quote and SOL both null = settlement unknown. */
|
|
3418
|
+
quote_mint: string | null;
|
|
3419
|
+
quote_raw: string | null;
|
|
3420
|
+
quote_decimals: number | null;
|
|
3421
|
+
raw_known: boolean;
|
|
3023
3422
|
}
|
|
3024
3423
|
/** Mint-scoped trade tape. `coverage` is the honesty block: the tape starts
|
|
3025
3424
|
* 2026-04-12 (`history_start`, unix sec) and is pump.fun-pipeline scoped
|
|
@@ -3061,12 +3460,23 @@ export interface TokenTopTrader {
|
|
|
3061
3460
|
sells: number;
|
|
3062
3461
|
bought_sol: number;
|
|
3063
3462
|
sold_sol: number;
|
|
3463
|
+
/** Realized SOL PnL on the matched portion; cost basis per `cost_method`. */
|
|
3064
3464
|
realized_pnl_sol: number;
|
|
3065
|
-
|
|
3066
|
-
|
|
3067
|
-
|
|
3465
|
+
/** null when still holding a token we cannot price (never valued at 0). */
|
|
3466
|
+
unrealized_pnl_sol: number | null;
|
|
3467
|
+
total_pnl_sol: number | null;
|
|
3468
|
+
held_value_sol: number | null;
|
|
3068
3469
|
roi: number | null;
|
|
3069
3470
|
still_holding: boolean;
|
|
3471
|
+
/** FIFO only: tokens sold without an observed earlier buy (proceeds excluded from realized PnL). null under average_cost. */
|
|
3472
|
+
unmatched_sell_tokens?: number | null;
|
|
3473
|
+
/** FIFO only: every sold token matched an observed buy. null under average_cost. */
|
|
3474
|
+
cost_basis_complete?: boolean | null;
|
|
3475
|
+
/** 2026-10 (migration 508) — basis consumed by sells whose proceeds went to another wallet; not in realized_pnl_sol / roi. Absent on older servers. */
|
|
3476
|
+
unknown_realized_cost_basis_sol?: number;
|
|
3477
|
+
unattributed_sells?: number;
|
|
3478
|
+
/** "unknown" = every sell unattributed: the outcome is unknown, this wallet is not a loser. */
|
|
3479
|
+
realized_status?: RealizedStatus;
|
|
3070
3480
|
first_trade_at: string;
|
|
3071
3481
|
last_trade_at: string;
|
|
3072
3482
|
is_kol: boolean;
|
|
@@ -3081,12 +3491,20 @@ export interface TokenTopTradersResponse {
|
|
|
3081
3491
|
mint: string;
|
|
3082
3492
|
sort: "pnl" | "roi";
|
|
3083
3493
|
window_days: number;
|
|
3494
|
+
/** "fifo" = same cost basis as /wallet/{address}/pnl; "average_cost" = legacy fallback (overstates profit on unmatched sells). */
|
|
3495
|
+
cost_method?: "fifo" | "average_cost";
|
|
3496
|
+
cost_method_note?: string;
|
|
3497
|
+
/** 2026-10 (migration 508) — realized-PnL completeness of the returned page (NOT coverage.completeness). Absent on older servers. */
|
|
3498
|
+
completeness?: RealizedPnlCompleteness;
|
|
3499
|
+
incomplete_reasons?: RealizedPnlIncompleteReason[];
|
|
3084
3500
|
traders: TokenTopTrader[];
|
|
3085
3501
|
summary: {
|
|
3086
3502
|
returned: number;
|
|
3087
3503
|
known_kols: number;
|
|
3088
3504
|
known_alpha_wallets: number;
|
|
3089
3505
|
net_realized_pnl_sol: number;
|
|
3506
|
+
unknown_realized_cost_basis_sol?: number;
|
|
3507
|
+
unattributed_sells?: number;
|
|
3090
3508
|
};
|
|
3091
3509
|
/** v1.23.4 — trade-coverage disclosure; when `in_scope` is false an empty
|
|
3092
3510
|
* `traders` list means "outside the write-gate", not "nobody traded". */
|
|
@@ -3468,7 +3886,10 @@ export interface SniperDeploy {
|
|
|
3468
3886
|
deployer_runner_rate?: number | null;
|
|
3469
3887
|
deployer_labeled_tokens?: number | null;
|
|
3470
3888
|
confirmed_on_chain: boolean | null;
|
|
3889
|
+
/** ShredPrism: FIRST observed successful confirmed-or-stronger outcome (observation time, not consensus time). Current status = confirmed_on_chain / execution_status. */
|
|
3471
3890
|
confirmed_at: string | null;
|
|
3891
|
+
/** ShredPrism: first observed successful finalized outcome; null for legacy deshred rows. */
|
|
3892
|
+
finalized_at?: string | null;
|
|
3472
3893
|
/** v1.21 — slot-window snipe rollup (slots [-1..+3]). Null until the ~10-min
|
|
3473
3894
|
* settle window has passed — absent, not zero. */
|
|
3474
3895
|
footprint?: SniperFootprint | null;
|
|
@@ -3487,6 +3908,28 @@ export interface SniperRecentResponse {
|
|
|
3487
3908
|
data_age_seconds: number | null;
|
|
3488
3909
|
/** Present (true) only when watchlist=true and your watchlist is empty. */
|
|
3489
3910
|
watchlist_empty?: boolean;
|
|
3911
|
+
/** Which rows are still STORED per source (retention, not detection coverage). Nothing is
|
|
3912
|
+
* stored inside `gap`: legacy deshred ended at the 2026-10-06 switch; ShredPrism rows are deleted after 6 h. */
|
|
3913
|
+
history?: SniperHistory;
|
|
3914
|
+
}
|
|
3915
|
+
export interface SniperHistory {
|
|
3916
|
+
sources: Array<{
|
|
3917
|
+
source: "deshred";
|
|
3918
|
+
status: "retired";
|
|
3919
|
+
newest_row_at: string;
|
|
3920
|
+
} | {
|
|
3921
|
+
source: "shredprism";
|
|
3922
|
+
status: "live";
|
|
3923
|
+
retention_hours: number;
|
|
3924
|
+
retained_from: string;
|
|
3925
|
+
}>;
|
|
3926
|
+
gap: {
|
|
3927
|
+
from: string;
|
|
3928
|
+
to: string;
|
|
3929
|
+
} | null;
|
|
3930
|
+
source_switch_date: string;
|
|
3931
|
+
confirmed_at_semantics: string;
|
|
3932
|
+
note: string;
|
|
3490
3933
|
}
|
|
3491
3934
|
/** One DEX pool a token trades in. `is_active` distinguishes live vs parked venues. */
|
|
3492
3935
|
export interface TokenPool {
|
|
@@ -3651,7 +4094,34 @@ export interface TokenDepthResponse {
|
|
|
3651
4094
|
};
|
|
3652
4095
|
}
|
|
3653
4096
|
/** Wallet-intelligence labels on a holder. Empty = unknown to us, NOT verified clean. */
|
|
3654
|
-
|
|
4097
|
+
/** sniper / bundler_wallet / dumper / alpha_tracked appear only with `include_wallet_flags=true`. Empty labels = unknown to us, not verified clean. */
|
|
4098
|
+
export type TokenHolderLabel = "deployer" | "kol" | "early_buyer" | "buyer" | "bundle" | "bot" | "dump_cluster" | "sniper" | "bundler_wallet" | "dumper" | "alpha_tracked";
|
|
4099
|
+
/** Per label: `evaluated: false` means insufficient evidence, NOT a verified negative. */
|
|
4100
|
+
export type WalletFlagLabelCoverage = Record<string, {
|
|
4101
|
+
evaluated: boolean;
|
|
4102
|
+
reason?: string;
|
|
4103
|
+
}>;
|
|
4104
|
+
/** Per-holder flags, only with `include_wallet_flags=true` (TR-07). Null when the flag sources were unavailable. */
|
|
4105
|
+
export interface TokenHolderWalletFlags {
|
|
4106
|
+
is_sniper: boolean;
|
|
4107
|
+
is_bundler: boolean;
|
|
4108
|
+
is_dumper: boolean;
|
|
4109
|
+
is_kol: boolean;
|
|
4110
|
+
is_alpha_tracked: boolean;
|
|
4111
|
+
is_bot_high_confidence: boolean;
|
|
4112
|
+
label_coverage: WalletFlagLabelCoverage;
|
|
4113
|
+
}
|
|
4114
|
+
/** Top-level flag status, only with `include_wallet_flags=true`. */
|
|
4115
|
+
export interface WalletFlagsMeta {
|
|
4116
|
+
status: "available" | "partial" | "unavailable";
|
|
4117
|
+
rule_version?: string;
|
|
4118
|
+
note?: string;
|
|
4119
|
+
[key: string]: unknown;
|
|
4120
|
+
}
|
|
4121
|
+
export interface TokenHoldersParams {
|
|
4122
|
+
/** Opt in to per-holder `wallet_flags` + `wallet_flags_meta` (PRO+, tier-disclosed rows only). */
|
|
4123
|
+
include_wallet_flags?: boolean;
|
|
4124
|
+
}
|
|
3655
4125
|
/** One ranked holder (owner wallet, token accounts merged). */
|
|
3656
4126
|
export interface TokenHolder {
|
|
3657
4127
|
rank: number;
|
|
@@ -3670,6 +4140,8 @@ export interface TokenHolder {
|
|
|
3670
4140
|
early_buyer_rank: number | null;
|
|
3671
4141
|
bot_confidence: "none" | "low" | "medium" | "high" | null;
|
|
3672
4142
|
historical_win_rate: number | null;
|
|
4143
|
+
/** Only with `include_wallet_flags=true`; null when the flag sources were unavailable. */
|
|
4144
|
+
wallet_flags?: TokenHolderWalletFlags | null;
|
|
3673
4145
|
}
|
|
3674
4146
|
/**
|
|
3675
4147
|
* An owner EXCLUDED from the circulating denominator, named where we can:
|
|
@@ -3700,6 +4172,10 @@ export interface TokenHoldersConcentration {
|
|
|
3700
4172
|
token_accounts_nonzero: number | null;
|
|
3701
4173
|
/** Raw u64 as STRINGS. */
|
|
3702
4174
|
supply_raw: string | null;
|
|
4175
|
+
/** Where supply_raw came from: the mint account read in this request (normal), the cache, or getTokenSupply. null when withheld. */
|
|
4176
|
+
supply_source?: "mint_account" | "token_prices_cache" | "rpc_token_supply" | null;
|
|
4177
|
+
/** false = no supply consistent with the disclosed balances; every percentage is then null. */
|
|
4178
|
+
supply_consistent?: boolean;
|
|
3703
4179
|
circulating_raw: string | null;
|
|
3704
4180
|
decimals: number | null;
|
|
3705
4181
|
/** Shares over the circulating denominator (supply minus excluded). top50/top100 are null on the top-20 fallback. */
|
|
@@ -3767,6 +4243,8 @@ export interface TokenHoldersResponse {
|
|
|
3767
4243
|
census_fallback_reason: string | null;
|
|
3768
4244
|
note: string;
|
|
3769
4245
|
};
|
|
4246
|
+
/** Only with `include_wallet_flags=true`. */
|
|
4247
|
+
wallet_flags_meta?: WalletFlagsMeta;
|
|
3770
4248
|
}
|
|
3771
4249
|
/** Locker program a contract lives under. LP locks are NOT covered (token / vesting locks only). */
|
|
3772
4250
|
/** smithii_vesting / sablier_lockup are served only while listed in the response's meta.programs (verified admission). */
|
|
@@ -4065,7 +4543,7 @@ export interface TokenFeedPagination {
|
|
|
4065
4543
|
/** Pass as `before` to page back. */
|
|
4066
4544
|
next_before: string | null;
|
|
4067
4545
|
}
|
|
4068
|
-
/** The locks feed's pagination: adds the strict keyset cursor and the post-filter scan meta.
|
|
4546
|
+
/** The locks feed's pagination: adds the strict keyset cursor and the post-filter scan meta. */
|
|
4069
4547
|
export interface TokenLocksFeedPagination extends TokenFeedPagination {
|
|
4070
4548
|
/** v1.24 — pass as `cursor` to page back without skipping same-timestamp rows; null = end. */
|
|
4071
4549
|
next_cursor?: string | null;
|
|
@@ -4693,11 +5171,13 @@ export interface TokenFeeClaimsParams {
|
|
|
4693
5171
|
social_platform?: number;
|
|
4694
5172
|
/** Platform-native numeric user id. */
|
|
4695
5173
|
social_user_id?: string;
|
|
4696
|
-
/** Amount floor in SOL. */
|
|
5174
|
+
/** Amount floor in SOL; only SOL-quoted events match. */
|
|
4697
5175
|
min_sol?: number;
|
|
4698
5176
|
/** ISO date-time (use `pagination.next_since`). */
|
|
4699
5177
|
since?: string;
|
|
4700
|
-
/**
|
|
5178
|
+
/** Opaque lossless backward-page cursor (pagination.next_cursor). */
|
|
5179
|
+
cursor?: string;
|
|
5180
|
+
/** Legacy strict timestamp bound; can skip same-timestamp events. */
|
|
4701
5181
|
before?: string;
|
|
4702
5182
|
/** 1–100, default 50. */
|
|
4703
5183
|
limit?: number;
|
|
@@ -4743,7 +5223,9 @@ export interface TokenFeeClaimEvent {
|
|
|
4743
5223
|
/** GET /tokens/fee-claims — pump.fun fee-event feed, newest first. **History starts 2026-08-17.** PRO+, keyed only. */
|
|
4744
5224
|
export interface TokenFeeClaimsResponse {
|
|
4745
5225
|
events: TokenFeeClaimEvent[];
|
|
4746
|
-
pagination: TokenFeedPagination
|
|
5226
|
+
pagination: TokenFeedPagination & {
|
|
5227
|
+
next_cursor: string | null;
|
|
5228
|
+
};
|
|
4747
5229
|
/** Pointer to the `token:fee_claims` WS channel (event `token:fee_claim`). */
|
|
4748
5230
|
stream: TokenFeedStreamPointer;
|
|
4749
5231
|
meta?: Record<string, unknown>;
|
|
@@ -4819,7 +5301,10 @@ export interface TokenSurgeEarlyBuyers {
|
|
|
4819
5301
|
count: number;
|
|
4820
5302
|
/** Early buyers that bought in the same block. */
|
|
4821
5303
|
bundled: number;
|
|
5304
|
+
/** null when any cohort first buy has an unknown SOL cost (never summed as 0); see cohort_sol_unknown_ranks. */
|
|
4822
5305
|
cohort_sol: number | null;
|
|
5306
|
+
/** Cohort wallets whose first-buy SOL cost is unknown (0 = cohort_sol is complete). Absent on fires before 2026-10-27. */
|
|
5307
|
+
cohort_sol_unknown_ranks?: number;
|
|
4823
5308
|
/** Cohort wallets that have already sold. */
|
|
4824
5309
|
sold: number;
|
|
4825
5310
|
/** Cohort wallets that are known sniper wallets. */
|
|
@@ -5205,6 +5690,21 @@ export interface DeployerActivityFamilyCoverage {
|
|
|
5205
5690
|
missing_months: string[];
|
|
5206
5691
|
months_read: string[];
|
|
5207
5692
|
};
|
|
5693
|
+
/** launches only (2026-10-18): per supported launchpad, whether this window is fully held. The family-level complete / complete_from follow the strictest of these boundaries. A boundary is known coverage, not proof every transaction arrived. */
|
|
5694
|
+
launchpads?: DeployerActivityLaunchpadCoverage[];
|
|
5695
|
+
/** launches only: NOT supported launchpads (moonit, boop, heaven); their launches never appear and do not affect complete. */
|
|
5696
|
+
launchpads_not_indexed?: string[];
|
|
5697
|
+
}
|
|
5698
|
+
export interface DeployerActivityLaunchpadCoverage {
|
|
5699
|
+
launchpad: "pumpfun" | "raydium_launchlab" | "meteora_dbc";
|
|
5700
|
+
/** true when the window starts at or after this launchpad's boundary. */
|
|
5701
|
+
complete: boolean;
|
|
5702
|
+
/** Later of the window start and the boundary (pump.fun / LaunchLab unbonded: 2026-07-03T05:00Z; Meteora DBC: 2026-10-03T16:32:57Z). */
|
|
5703
|
+
complete_from: string;
|
|
5704
|
+
/** What exists before complete_from: bonded launches only, or nothing. */
|
|
5705
|
+
before_complete_from: "bonded_only" | "none";
|
|
5706
|
+
/** Launches that never reach a creator's timeline (Bags via a known relayer), or null. */
|
|
5707
|
+
creator_gaps: string | null;
|
|
5208
5708
|
}
|
|
5209
5709
|
export interface DeployerActivityRange {
|
|
5210
5710
|
from: string | null;
|
|
@@ -5512,6 +6012,26 @@ export interface DeployerTokensParams {
|
|
|
5512
6012
|
offset?: number;
|
|
5513
6013
|
/** true = only tokens that graduated (bonded_at set); total / has_more count the bonded set. */
|
|
5514
6014
|
only_bonded?: boolean;
|
|
6015
|
+
/** Opt in to `launches_24h` (distinct launches observed in our index over a rolling UTC 24 h window). */
|
|
6016
|
+
include_launches_24h?: boolean;
|
|
6017
|
+
}
|
|
6018
|
+
/**
|
|
6019
|
+
* Launches observed in OUR index over a rolling UTC 24 h window (TR-03).
|
|
6020
|
+
* Indexed observations only, not a chain-complete count. `count` is null
|
|
6021
|
+
* (never 0) unless `status` is `observed`.
|
|
6022
|
+
*/
|
|
6023
|
+
export interface DeployerLaunches24h {
|
|
6024
|
+
window_start: string;
|
|
6025
|
+
window_end: string;
|
|
6026
|
+
count: number | null;
|
|
6027
|
+
status: "observed" | "source_unavailable" | "over_budget" | "source_incomplete" | "untracked_deployer";
|
|
6028
|
+
completeness: "indexed_observations_only";
|
|
6029
|
+
provenance?: string;
|
|
6030
|
+
row_cap_per_source?: number;
|
|
6031
|
+
source_rows?: {
|
|
6032
|
+
bonded?: number;
|
|
6033
|
+
pending?: number;
|
|
6034
|
+
};
|
|
5515
6035
|
}
|
|
5516
6036
|
/** `GET /deployer-hunter/{wallet}/tokens` — newest bond first. */
|
|
5517
6037
|
export interface DeployerTokensResponse {
|
|
@@ -5525,6 +6045,8 @@ export interface DeployerTokensResponse {
|
|
|
5525
6045
|
offset: number;
|
|
5526
6046
|
has_more: boolean;
|
|
5527
6047
|
coverage?: LaunchCoverage;
|
|
6048
|
+
/** Present only with `include_launches_24h=true`. */
|
|
6049
|
+
launches_24h?: DeployerLaunches24h;
|
|
5528
6050
|
}
|
|
5529
6051
|
export interface DeployerAlertStatsParams {
|
|
5530
6052
|
/** Lookback window, e.g. `24h`, `7d`, `30d`. */
|
|
@@ -5652,4 +6174,81 @@ export interface RecentBondsResponse extends FreeTierDelayMeta {
|
|
|
5652
6174
|
/** Pass back as `since` to fetch only newer bonds. */
|
|
5653
6175
|
next_since?: string | null;
|
|
5654
6176
|
}
|
|
6177
|
+
/** Filters for the `token:bundles` channel (all optional, AND-combined; invalid values reject the channel). */
|
|
6178
|
+
export interface TokenBundlesFilters {
|
|
6179
|
+
/** Only these mints (at most 250). */
|
|
6180
|
+
mints?: string[];
|
|
6181
|
+
/** Minimum distinct buyers in the cluster (3-50, count at detection). */
|
|
6182
|
+
min_wallets?: number;
|
|
6183
|
+
/** Minimum buyers new to the token (3-50). */
|
|
6184
|
+
min_new_wallets?: number;
|
|
6185
|
+
/** launch = within 5 minutes of the token's first sighting. */
|
|
6186
|
+
phases?: Array<"launch" | "later" | "unknown">;
|
|
6187
|
+
/** Only clusters where one transaction carried 3+ of the buyers. */
|
|
6188
|
+
atomic_only?: boolean;
|
|
6189
|
+
/** Only these event types (default both). */
|
|
6190
|
+
bundle_events?: Array<"token:bundle_cluster" | "token:bundle_exit">;
|
|
6191
|
+
}
|
|
6192
|
+
/**
|
|
6193
|
+
* `token:bundle_cluster` on WS `token:bundles` (PRO+): one NEW coordinated buy
|
|
6194
|
+
* cluster on a Solana token, launch or later: one slot where >= 3 wallets
|
|
6195
|
+
* bought and >= 3 of them had never bought the token before. Only stored buys
|
|
6196
|
+
* count (0.05 SOL / $3.50 persistence floor). `wallet_count` is the count at
|
|
6197
|
+
* detection; a cluster is announced once. Evidence, not a verdict. For the
|
|
6198
|
+
* share of supply these wallets hold now call `tokenBundleShare()`.
|
|
6199
|
+
*/
|
|
6200
|
+
export interface TokenBundleClusterEvent {
|
|
6201
|
+
/** bundle_cluster_events row id (dedupe key). */
|
|
6202
|
+
id: number;
|
|
6203
|
+
chain: "solana";
|
|
6204
|
+
mint: string;
|
|
6205
|
+
slot: number;
|
|
6206
|
+
/** First buy of the cluster (ISO). */
|
|
6207
|
+
at: string;
|
|
6208
|
+
minutes_after_launch: number | null;
|
|
6209
|
+
phase: "launch" | "later" | "unknown";
|
|
6210
|
+
launch_at: string | null;
|
|
6211
|
+
wallet_count: number;
|
|
6212
|
+
new_wallets: number;
|
|
6213
|
+
/** Transactions carrying 3+ of the buyers (definitively coordinated). */
|
|
6214
|
+
atomic_txs: number;
|
|
6215
|
+
sol_volume: number | null;
|
|
6216
|
+
token_volume: number | null;
|
|
6217
|
+
/** Up to 50 buyer wallets. */
|
|
6218
|
+
wallets: string[];
|
|
6219
|
+
/** When bundle-watch detected it (ISO). */
|
|
6220
|
+
detected_at: string;
|
|
6221
|
+
}
|
|
6222
|
+
/**
|
|
6223
|
+
* `token:bundle_exit` on WS `token:bundles` (PRO+): an announced cluster's
|
|
6224
|
+
* wallets have sold `threshold_pct` (25 / 50 / 90 / 100) % of what they bought
|
|
6225
|
+
* IN the cluster, each threshold once. Carries the cluster's own fields, so the
|
|
6226
|
+
* channel filters apply alike. Only sells by the bundle wallets themselves,
|
|
6227
|
+
* followed for 7 days after detection; first 50 wallets of a larger cluster.
|
|
6228
|
+
*/
|
|
6229
|
+
export interface TokenBundleExitEvent extends Omit<TokenBundleClusterEvent, "sol_volume" | "token_volume" | "wallets"> {
|
|
6230
|
+
cluster_id: number;
|
|
6231
|
+
cluster_detected_at: string | null;
|
|
6232
|
+
threshold_pct: 25 | 50 | 90 | 100;
|
|
6233
|
+
wallets_tracked: number;
|
|
6234
|
+
wallets_sold: number;
|
|
6235
|
+
/** Wallets that sold at least 99 % of their cluster buy. */
|
|
6236
|
+
wallets_exited: number;
|
|
6237
|
+
bought_tokens: number;
|
|
6238
|
+
sold_tokens: number;
|
|
6239
|
+
/** sum over wallets of min(sold, bought) / bought, 0..1. */
|
|
6240
|
+
sold_pct: number | null;
|
|
6241
|
+
realized_sol: number;
|
|
6242
|
+
/** 2026-10 (migration 511) — "incomplete" when a recorded sell has unknown proceeds: its tokens count in sold_pct, its proceeds are not in realized_sol (never 0). null = not measured. */
|
|
6243
|
+
realized_status?: "complete" | "incomplete" | null;
|
|
6244
|
+
unknown_proceeds_sells?: number | null;
|
|
6245
|
+
last_sell_at: string | null;
|
|
6246
|
+
recent_sells: Array<{
|
|
6247
|
+
wallet: string;
|
|
6248
|
+
tx_signature: string;
|
|
6249
|
+
tokens: number | null;
|
|
6250
|
+
sol: number | null;
|
|
6251
|
+
at: string;
|
|
6252
|
+
}>;
|
|
6253
|
+
}
|
|
5655
6254
|
//# sourceMappingURL=types.d.ts.map
|