madeonsol-x402 3.2.0 → 4.0.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/LICENSE +21 -21
- package/README.md +14 -4
- package/dist/index.d.ts +14 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -16
- package/dist/index.js.map +1 -1
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js +3 -1
- package/dist/stream.js.map +1 -1
- package/dist/types.d.ts +318 -32
- 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
|
@@ -563,7 +563,9 @@ export interface DeployerAlertsParams {
|
|
|
563
563
|
/** v2.10: every event the registry accepts (src/lib/webhook-events.ts VALID_EVENTS); earlier types listed only the first four. */
|
|
564
564
|
export type WebhookEvent = "kol:trade" | "kol:coordination" | "deployer:alert" | "deployer:bond" | "wallet_tracker:event" | "sniper:deploy" | "rhc:kol_trade" | "token:surge" | "token:revival"
|
|
565
565
|
/** Realtime developer sells / buys / token transfers (PRO+; identity fields ULTRA+). Dedupe on payload `id`. */
|
|
566
|
-
| "dev:activity"
|
|
566
|
+
| "dev:activity"
|
|
567
|
+
/** Robinhood Chain developer buys / sells only (never transfers), PRO+, projected per tier like dev:activity. */
|
|
568
|
+
| "rhc:dev_activity";
|
|
567
569
|
export interface WebhookFilters {
|
|
568
570
|
min_sol?: number;
|
|
569
571
|
action?: "buy" | "sell";
|
|
@@ -580,7 +582,10 @@ export interface WebhookFilters {
|
|
|
580
582
|
/** dev:activity only. */
|
|
581
583
|
types?: Array<"dev_sell" | "dev_buy" | "dev_token_transfer_out" | "dev_token_transfer_in">;
|
|
582
584
|
token_mints?: string[];
|
|
585
|
+
/** dev:activity (base58) and rhc:dev_activity (0x, case-insensitive): deployer_wallet or actor_wallet. */
|
|
583
586
|
deployers?: string[];
|
|
587
|
+
/** rhc:dev_activity only: 0x token addresses. */
|
|
588
|
+
addresses?: string[];
|
|
584
589
|
/** ULTRA/BUSINESS custom conditions (max 10). */
|
|
585
590
|
conditions?: WebhookCondition[];
|
|
586
591
|
}
|
|
@@ -665,6 +670,17 @@ export interface StreamToken {
|
|
|
665
670
|
/** Human-readable lifetime statement ("This token does not expire. …"). */
|
|
666
671
|
lifetime?: string;
|
|
667
672
|
ws_url: string;
|
|
673
|
+
/** Present only for activated ShredPrism and ULTRA/BUSINESS/ENTERPRISE. */
|
|
674
|
+
early_ws_url?: string;
|
|
675
|
+
early_stream?: {
|
|
676
|
+
channels: "early:deploys"[];
|
|
677
|
+
subscribe_example: {
|
|
678
|
+
type: "subscribe";
|
|
679
|
+
channels: "early:deploys"[];
|
|
680
|
+
};
|
|
681
|
+
execution_status: "unknown";
|
|
682
|
+
note: string;
|
|
683
|
+
};
|
|
668
684
|
/** DEX trade stream URL — only present for Ultra tier subscribers */
|
|
669
685
|
dex_ws_url?: string;
|
|
670
686
|
/** Human-readable connect instructions. */
|
|
@@ -1249,6 +1265,18 @@ export interface TokenCapTableResponse {
|
|
|
1249
1265
|
summary: CapTableSummary;
|
|
1250
1266
|
/** v1.23.4 — trade-coverage disclosure (keyed route; absent on the x402 mirror and older cached responses). */
|
|
1251
1267
|
coverage?: TradeCoverage;
|
|
1268
|
+
/** 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. */
|
|
1269
|
+
ranks_completeness?: {
|
|
1270
|
+
ranks_complete: "observed_from_launch" | "gap_overlap" | "not_verified" | "no_ranks";
|
|
1271
|
+
rank_basis: "first_persisted_buys_at_or_above_floor";
|
|
1272
|
+
window: {
|
|
1273
|
+
from: string;
|
|
1274
|
+
to: string;
|
|
1275
|
+
} | null;
|
|
1276
|
+
gaps_overlapping: number;
|
|
1277
|
+
open_slots: number;
|
|
1278
|
+
gaps_in_open_slots: number;
|
|
1279
|
+
};
|
|
1252
1280
|
}
|
|
1253
1281
|
export interface TokenBuyerQualityResponse {
|
|
1254
1282
|
mint: string;
|
|
@@ -1577,6 +1605,10 @@ export interface BundleSummary {
|
|
|
1577
1605
|
buy_volume: number;
|
|
1578
1606
|
/** Swap-derived net position (proxy for on-chain balance). */
|
|
1579
1607
|
tokens_held: number;
|
|
1608
|
+
/** 2026-10 (COV-23) — `swap_only` = token transfers are not applied: a member that transferred tokens out and sold elsewhere still reads as holding. Absent on older responses. */
|
|
1609
|
+
holdings_basis?: "swap_only" | "swap_and_transfers";
|
|
1610
|
+
/** 2026-10 (COV-23) — how cohort membership is decided today: ≥3 wallets buying in one ingest batch with the same block_time second (not the same slot). Absent on older responses. */
|
|
1611
|
+
bundle_detection?: "same_batch_block_time_second";
|
|
1580
1612
|
}
|
|
1581
1613
|
/**
|
|
1582
1614
|
* One wallet in the bundle cohort. `rank`…`is_kol` are returned on PRO (top-10)
|
|
@@ -1641,15 +1673,37 @@ export interface CopyTradeSubscription {
|
|
|
1641
1673
|
created_at: string;
|
|
1642
1674
|
updated_at?: string;
|
|
1643
1675
|
/**
|
|
1644
|
-
* Source wallets that are tracked KOL wallets
|
|
1645
|
-
*
|
|
1676
|
+
* Source wallets that are tracked KOL wallets, read at response time. Under
|
|
1677
|
+
* `source_admission: "any_wallet"` (production since 2026-10-04) this is KOL
|
|
1678
|
+
* enrichment only; under the legacy `"kol_only"` engine only these produce signals.
|
|
1679
|
+
* @deprecated 2026-10-04, kept and still filled. `null` when the tracking lookup failed (see `warnings`).
|
|
1646
1680
|
* Returned by servers from 2026-09-25 on; absent on older ones.
|
|
1647
1681
|
*/
|
|
1648
1682
|
source_wallets_tracked?: string[] | null;
|
|
1649
|
-
/**
|
|
1683
|
+
/**
|
|
1684
|
+
* Source wallets that are NOT tracked KOL wallets. Under
|
|
1685
|
+
* `source_admission: "any_wallet"` they fire like any other wallet (no
|
|
1686
|
+
* Wallet Tracker entry or quota needed); under the legacy `"kol_only"` engine
|
|
1687
|
+
* they never produce a signal.
|
|
1688
|
+
* @deprecated 2026-10-04 — KOL membership is enrichment only; kept and still filled.
|
|
1689
|
+
*/
|
|
1650
1690
|
source_wallets_untracked?: string[] | null;
|
|
1651
|
-
/** Present when at least one wallet is untracked, or tracking could not be determined. */
|
|
1691
|
+
/** Present when at least one wallet is untracked (legacy kol_only only), or tracking could not be determined. */
|
|
1652
1692
|
warnings?: CopyTradeRuleWarning[];
|
|
1693
|
+
/**
|
|
1694
|
+
* Whether the rule can fire right now, separate from `is_active`. Legacy
|
|
1695
|
+
* `kol_only`: `eligible` | `no_tracked_sources` | `unknown`. Server
|
|
1696
|
+
* 2026-10-04 `any_wallet`: `eligible`, or an infrastructure state —
|
|
1697
|
+
* `monitoring_pending` (rule changed after the engine's last load, live
|
|
1698
|
+
* within seconds), `monitoring_unavailable` (engine / trade stream not
|
|
1699
|
+
* reporting; it fires nothing then, see `monitoring_reasons`),
|
|
1700
|
+
* `source_capacity_unavailable`.
|
|
1701
|
+
*/
|
|
1702
|
+
operational_state?: "eligible" | "monitoring_pending" | "monitoring_unavailable" | "source_capacity_unavailable" | "no_tracked_sources" | "unknown";
|
|
1703
|
+
/** Server 2026-10-04 — which trades the RUNNING engine admits. Absent = unknown (legacy kol_only semantics). */
|
|
1704
|
+
source_admission?: "kol_only" | "any_wallet";
|
|
1705
|
+
/** Server 2026-10-04 — present only with `monitoring_unavailable`: e.g. `trade_stream_stale`, `source_producer_stale`, `map_stale`, `engine_state_stale`. */
|
|
1706
|
+
monitoring_reasons?: string[];
|
|
1653
1707
|
}
|
|
1654
1708
|
/** A non-fatal note on a copy-trade rule. The rule is saved unchanged. */
|
|
1655
1709
|
export interface CopyTradeRuleWarning {
|
|
@@ -1661,9 +1715,10 @@ export interface CopyTradeRuleWarning {
|
|
|
1661
1715
|
*
|
|
1662
1716
|
* `source_wallets`: the per-rule limit is set by your tier and enforced by the
|
|
1663
1717
|
* server (Pro 5, Ultra 50, Business and Enterprise 250; `GET /me` reports
|
|
1664
|
-
* yours as `copytrade_wallets_per_rule`).
|
|
1665
|
-
*
|
|
1666
|
-
*
|
|
1718
|
+
* yours as `copytrade_wallets_per_rule`). Any valid Solana wallet can be a
|
|
1719
|
+
* source, KOL or not (`source_admission: "any_wallet"`, production since
|
|
1720
|
+
* 2026-10-04; no Wallet Tracker quota used). On a server still running the
|
|
1721
|
+
* legacy `"kol_only"` engine only tracked KOL wallets (`GET /kol/wallets`) fire.
|
|
1667
1722
|
*/
|
|
1668
1723
|
export interface CopyTradeCreateParams {
|
|
1669
1724
|
name?: string;
|
|
@@ -1744,6 +1799,14 @@ export interface CopyTradeSignal extends McDeltaFields {
|
|
|
1744
1799
|
market_cap_usd?: number | null;
|
|
1745
1800
|
/** v1.5 — current last-trade price (USD). */
|
|
1746
1801
|
last_price_usd?: number | null;
|
|
1802
|
+
/** Present once copy-trade identity v2 is active: the independent action this signal copies (null on identity_version 1 rows). Dedupe on id or economic_action_id, never on tx_signature. */
|
|
1803
|
+
economic_action_id?: string | null;
|
|
1804
|
+
/** Present once copy-trade identity v2 is active: the followed wallet that performed the action. */
|
|
1805
|
+
source_actor?: string | null;
|
|
1806
|
+
/** Present once copy-trade identity v2 is active: other followed wallets in the same action. */
|
|
1807
|
+
co_actors?: string[];
|
|
1808
|
+
/** Present once copy-trade identity v2 is active: 1 = per (rule, tx), 2 = per (rule, economic action). */
|
|
1809
|
+
identity_version?: 1 | 2;
|
|
1747
1810
|
}
|
|
1748
1811
|
export interface CopyTradeSignalsParams {
|
|
1749
1812
|
subscription_id?: number;
|
|
@@ -1755,6 +1818,22 @@ export interface CopyTradeSignalsParams {
|
|
|
1755
1818
|
min_mc_usd?: number;
|
|
1756
1819
|
/** Keep signals whose source trade's market cap (USD) was at most this. Drops unknown-MC signals. */
|
|
1757
1820
|
max_mc_usd?: number;
|
|
1821
|
+
/** `next_cursor` from the previous page — opaque strict (fired_at, id) keyset. The MC band is applied before limit and cursor. */
|
|
1822
|
+
cursor?: string;
|
|
1823
|
+
}
|
|
1824
|
+
export interface CopyTradeSignalsResponse {
|
|
1825
|
+
signals: CopyTradeSignal[];
|
|
1826
|
+
/** Pass as `cursor` for the next (older) page; null at the end. */
|
|
1827
|
+
next_cursor?: string | null;
|
|
1828
|
+
/** false only when your signals ran out. */
|
|
1829
|
+
has_more?: boolean;
|
|
1830
|
+
/** Present with min_mc_usd / max_mc_usd; scan_truncated=true means more matches MAY exist past next_cursor. */
|
|
1831
|
+
scan?: {
|
|
1832
|
+
post_filtered: boolean;
|
|
1833
|
+
scanned: number;
|
|
1834
|
+
scan_truncated: boolean;
|
|
1835
|
+
scan_budget: number;
|
|
1836
|
+
};
|
|
1758
1837
|
}
|
|
1759
1838
|
export interface WalletTrackerEntry {
|
|
1760
1839
|
wallet_address: string;
|
|
@@ -2402,6 +2481,15 @@ export interface TokenSummary {
|
|
|
2402
2481
|
/** v1.24 — VERIFIED LP evidence only; null = unknown (every token today). Was a supply-burn proxy before. */
|
|
2403
2482
|
lp_burned?: boolean | null;
|
|
2404
2483
|
lp_burn_status?: LpBurnStatus;
|
|
2484
|
+
/**
|
|
2485
|
+
* D-22 — burned + non-cancelable LOCKED share of the LP (0–100), from LP
|
|
2486
|
+
* evidence; null = unknown (never 0 for unknown). `lp_burnt_pct` stays burn-only.
|
|
2487
|
+
*/
|
|
2488
|
+
lp_secured_pct?: number | null;
|
|
2489
|
+
/** permanent = burn and/or permanent locks only; temporary = only time-limited locks; mixed = both; null = nothing secured or unknown. */
|
|
2490
|
+
lp_secured_basis?: "permanent" | "temporary" | "mixed" | null;
|
|
2491
|
+
/** Earliest end of a counted TEMPORARY LP lock (ISO); null when none. Permanent locks have no date. */
|
|
2492
|
+
lp_locked_until?: string | null;
|
|
2405
2493
|
token_supply_burn_detected?: boolean | null;
|
|
2406
2494
|
}
|
|
2407
2495
|
export interface TokensListResponse {
|
|
@@ -2463,6 +2551,8 @@ export interface AlmostBondedToken {
|
|
|
2463
2551
|
name: string | null;
|
|
2464
2552
|
/** Launch venue: pump.fun curve or bonk/LetsBonk (Raydium LaunchLab). */
|
|
2465
2553
|
launchpad?: "pumpfun" | "launchlab";
|
|
2554
|
+
/** 2026-10 — where `launchpad` came from: `primary_dex`, or the token's single curve pool in `token_pools` when primary_dex is unset. */
|
|
2555
|
+
venue_source?: "primary_dex" | "token_pools";
|
|
2466
2556
|
/** Bonding-curve progress %, from on-chain real_token_reserves depletion. */
|
|
2467
2557
|
progress_pct: number | null;
|
|
2468
2558
|
/** Δprogress per minute; null until a 5m-ago snapshot exists. */
|
|
@@ -2553,6 +2643,13 @@ export interface WalletClassification {
|
|
|
2553
2643
|
kol_name: string | null;
|
|
2554
2644
|
bot_confidence: "low" | "medium" | "high" | "none" | null;
|
|
2555
2645
|
dump_cluster: DumpClusterStats | null;
|
|
2646
|
+
/** 2026-10 (COV-25) — whether each flag's rule actually evaluated this wallet. evaluated=false → the boolean is "no evidence", not "verified clean". */
|
|
2647
|
+
label_coverage?: Record<"sniper" | "bundler" | "dumper" | "kol", LabelCoverageEntry>;
|
|
2648
|
+
}
|
|
2649
|
+
export type LabelCoverageReason = "flagged" | "rule_evaluated" | "insufficient_sample" | "not_checked_budget" | "sample_unavailable" | "population_not_checked" | "no_cohort_stats" | "registry";
|
|
2650
|
+
export interface LabelCoverageEntry {
|
|
2651
|
+
evaluated: boolean;
|
|
2652
|
+
reason: LabelCoverageReason;
|
|
2556
2653
|
}
|
|
2557
2654
|
export interface WalletBatchClassifyResponse {
|
|
2558
2655
|
/** Launch-pipeline scope disclosure (absent ≠ clean). */
|
|
@@ -2560,6 +2657,15 @@ export interface WalletBatchClassifyResponse {
|
|
|
2560
2657
|
wallets: WalletClassification[];
|
|
2561
2658
|
count: number;
|
|
2562
2659
|
as_of: string;
|
|
2660
|
+
/** 2026-10 (COV-25) — label rule version, e.g. `wallet-labels/368-v1`. */
|
|
2661
|
+
rule_version?: string;
|
|
2662
|
+
/** 2026-10 (COV-25) — one sentence per label: population + window. */
|
|
2663
|
+
evidence_horizon?: {
|
|
2664
|
+
sniper: string;
|
|
2665
|
+
bundler: string;
|
|
2666
|
+
dumper: string;
|
|
2667
|
+
kol: string;
|
|
2668
|
+
};
|
|
2563
2669
|
}
|
|
2564
2670
|
export interface WalletTopToken {
|
|
2565
2671
|
token_mint: string;
|
|
@@ -2682,6 +2788,40 @@ export interface WalletOpenPosition {
|
|
|
2682
2788
|
unrealized_pct: number | null;
|
|
2683
2789
|
first_buy_at: string | null;
|
|
2684
2790
|
buys_in_position: number;
|
|
2791
|
+
/** 2026-10 (COV-21) — positions are FIFO-open DEX buys (trade position), not a proven holding. */
|
|
2792
|
+
position_basis?: "swap_derived";
|
|
2793
|
+
holding_status?: "verified" | "unverified";
|
|
2794
|
+
holding_unverified_reason?: "not_checked" | "no_fresh_snapshot" | "snapshot_unreadable" | "snapshot_older_than_trades" | "decimals_mismatch" | "balance_invalid" | null;
|
|
2795
|
+
/** partial = a verified balance exceeds the trade position; the excess arrived without a swap and has no cost basis. */
|
|
2796
|
+
cost_basis_status?: "known" | "partial";
|
|
2797
|
+
/** Present (non-null) only when holding_status = verified. */
|
|
2798
|
+
holding?: WalletPositionHolding | null;
|
|
2799
|
+
}
|
|
2800
|
+
/** 2026-10 (COV-21) — proven on-chain holding for one swap-derived position. */
|
|
2801
|
+
export interface WalletPositionHolding {
|
|
2802
|
+
status: "HELD" | "PARTIALLY_REDUCED" | "TRANSFERRED_OR_DISPOSED" | "EXTERNAL_INFLOW";
|
|
2803
|
+
onchain_balance: number;
|
|
2804
|
+
held_known_amount: number;
|
|
2805
|
+
external_inflow_amount: number;
|
|
2806
|
+
cost_basis_held_sol: number;
|
|
2807
|
+
unrealized_known_sol: number | null;
|
|
2808
|
+
/** Cost of FIFO lots no longer in the wallet. Outcome unknown: neither realized nor unrealized. */
|
|
2809
|
+
cost_basis_not_held_sol: number;
|
|
2810
|
+
verified_at: string;
|
|
2811
|
+
source: "wallet_holdings_cache";
|
|
2812
|
+
}
|
|
2813
|
+
/** 2026-10 (COV-21) — summary of the proven-holding check over the returned open positions. */
|
|
2814
|
+
export interface WalletHoldingCheck {
|
|
2815
|
+
mode: "off" | "cache";
|
|
2816
|
+
source: "wallet_holdings_cache" | null;
|
|
2817
|
+
verified_at: string | null;
|
|
2818
|
+
verified: number;
|
|
2819
|
+
unverified: number;
|
|
2820
|
+
held: number;
|
|
2821
|
+
partially_reduced: number;
|
|
2822
|
+
transferred_or_disposed: number;
|
|
2823
|
+
external_inflow: number;
|
|
2824
|
+
note: string;
|
|
2685
2825
|
}
|
|
2686
2826
|
export interface WalletPnlResponse {
|
|
2687
2827
|
address: string;
|
|
@@ -2698,8 +2838,14 @@ export interface WalletPnlResponse {
|
|
|
2698
2838
|
trades_through_same_second?: number;
|
|
2699
2839
|
partial?: true;
|
|
2700
2840
|
analyzed_trades?: number;
|
|
2701
|
-
partial_reason?: string;
|
|
2841
|
+
partial_reason?: string; /** 2026-10 (COV-21) — tokens with sells beyond in-window buys; excluded from realized PnL. */
|
|
2842
|
+
sells_without_cost_basis?: {
|
|
2843
|
+
tokens: number;
|
|
2844
|
+
cost_basis: "unknown";
|
|
2845
|
+
};
|
|
2702
2846
|
};
|
|
2847
|
+
/** 2026-10 (COV-21) — proven-holding check summary. Absent on older responses. */
|
|
2848
|
+
holding_check?: WalletHoldingCheck;
|
|
2703
2849
|
cache_hit?: boolean;
|
|
2704
2850
|
computed_at?: string;
|
|
2705
2851
|
ttl_seconds?: number;
|
|
@@ -2713,6 +2859,8 @@ export interface WalletPnlResponse {
|
|
|
2713
2859
|
export interface WalletPositionsResponse {
|
|
2714
2860
|
address: string;
|
|
2715
2861
|
positions: WalletOpenPosition[];
|
|
2862
|
+
/** 2026-10 (COV-21) — proven-holding check summary. Absent on older responses. */
|
|
2863
|
+
holding_check?: WalletHoldingCheck;
|
|
2716
2864
|
cache_hit?: boolean;
|
|
2717
2865
|
computed_at?: string | null;
|
|
2718
2866
|
ttl_seconds?: number | null;
|
|
@@ -2940,18 +3088,34 @@ export interface TokenTopTradersResponse {
|
|
|
2940
3088
|
export interface SniperRecentParams {
|
|
2941
3089
|
/** Only deploys detected after this ISO-8601 timestamp. */
|
|
2942
3090
|
since?: string;
|
|
2943
|
-
/** Filter by deployer reputation tier (
|
|
3091
|
+
/** Filter by deployer reputation tier (ULTRA/BUSINESS/ENTERPRISE). */
|
|
2944
3092
|
deployer_tier?: "elite" | "good" | "moderate" | "rising" | "cold" | "unranked";
|
|
2945
3093
|
/** Minimum deployer lifetime bond rate (0–1). */
|
|
2946
3094
|
min_bond_rate?: number;
|
|
2947
3095
|
/** Max results, 1–200 (default 50). */
|
|
2948
3096
|
limit?: number;
|
|
2949
|
-
/**
|
|
3097
|
+
/** Keyed ULTRA/BUSINESS/ENTERPRISE: narrow to your custom deployer watchlist. Keyless sniper access is retired. */
|
|
2950
3098
|
watchlist?: boolean;
|
|
2951
3099
|
}
|
|
2952
|
-
/**
|
|
2953
|
-
|
|
3100
|
+
/** Encoded v1 requests. Missing bits are null, not zero; these are not execution measurements. */
|
|
3101
|
+
export interface EarlyTransactionConfig {
|
|
3102
|
+
config_mask: number;
|
|
3103
|
+
priority_fee_lamports: string | null;
|
|
3104
|
+
compute_unit_limit: number | null;
|
|
3105
|
+
loaded_accounts_data_size_limit: number | null;
|
|
3106
|
+
heap_size: number | null;
|
|
3107
|
+
}
|
|
3108
|
+
/** Early instruction observation. Execution is unknown until separately resolved.
|
|
3109
|
+
* No guaranteed timing lead. Deduplicate by event_id, never by mint alone. */
|
|
2954
3110
|
export interface SniperDeploy {
|
|
3111
|
+
event_id?: string;
|
|
3112
|
+
source?: "shredprism" | "deshred";
|
|
3113
|
+
outer_instruction_index?: number | null;
|
|
3114
|
+
observation_stage?: "observed";
|
|
3115
|
+
execution_status?: "unknown" | "succeeded" | "failed" | "unresolved";
|
|
3116
|
+
transaction_version?: "legacy" | 0 | 1 | null;
|
|
3117
|
+
transaction_config?: EarlyTransactionConfig | null;
|
|
3118
|
+
fee_payer?: string | null;
|
|
2955
3119
|
mint: string;
|
|
2956
3120
|
name: string | null;
|
|
2957
3121
|
symbol: string | null;
|
|
@@ -2962,7 +3126,7 @@ export interface SniperDeploy {
|
|
|
2962
3126
|
detection_region: string;
|
|
2963
3127
|
detection_confirmed: boolean;
|
|
2964
3128
|
/** Deployer attribution: 'unverified' | 'confirmed' | 'corrected' (mig 313). */
|
|
2965
|
-
attribution_status?:
|
|
3129
|
+
attribution_status?: "unverified" | "confirmed" | "corrected" | null;
|
|
2966
3130
|
attribution_checked_at?: string | null;
|
|
2967
3131
|
deployer_tier: string | null;
|
|
2968
3132
|
deployer_bond_rate: number | null;
|
|
@@ -2976,6 +3140,12 @@ export interface SniperDeploy {
|
|
|
2976
3140
|
* settle window has passed — absent, not zero. */
|
|
2977
3141
|
footprint?: SniperFootprint | null;
|
|
2978
3142
|
}
|
|
3143
|
+
export interface SniperByDeployerResponse {
|
|
3144
|
+
coverage?: LaunchCoverage;
|
|
3145
|
+
deployer: string;
|
|
3146
|
+
deploys: SniperDeploy[];
|
|
3147
|
+
count: number;
|
|
3148
|
+
}
|
|
2979
3149
|
export interface SniperRecentResponse {
|
|
2980
3150
|
/** Launch-pipeline scope disclosure (absent ≠ clean). */
|
|
2981
3151
|
coverage?: LaunchCoverage;
|
|
@@ -3032,18 +3202,24 @@ export interface TokenDepthParams {
|
|
|
3032
3202
|
export interface TokenDepthQuote {
|
|
3033
3203
|
/** The requested buy size, in SOL. */
|
|
3034
3204
|
size_sol: number;
|
|
3035
|
-
/**
|
|
3036
|
-
|
|
3205
|
+
/**
|
|
3206
|
+
* Concentrated depth models only (server flag): "filled" | "pool_liquidity_exhausted"
|
|
3207
|
+
* (partial fill reported) | "exceeds_loaded_bins" | "price_out_of_range" (numbers null).
|
|
3208
|
+
*/
|
|
3209
|
+
status?: "filled" | "pool_liquidity_exhausted" | "exceeds_loaded_bins" | "exceeds_loaded_ticks" | "price_out_of_range";
|
|
3210
|
+
/** Tokens received for that buy (UI units, fee-adjusted). null only on a concentrated pool whose status is not quotable. */
|
|
3211
|
+
tokens_out: number | null;
|
|
3037
3212
|
/** Average execution price in SOL per token. */
|
|
3038
|
-
avg_price_sol: number;
|
|
3213
|
+
avg_price_sol: number | null;
|
|
3039
3214
|
/** Post-trade spot-price move, % (rounded to 2 decimals). */
|
|
3040
|
-
price_impact_pct: number;
|
|
3215
|
+
price_impact_pct: number | null;
|
|
3041
3216
|
}
|
|
3042
3217
|
/** SOL required to move the pool's spot price by 1% / 5% / 10%. */
|
|
3043
3218
|
export interface TokenDepthToMovePrice {
|
|
3044
|
-
|
|
3045
|
-
"
|
|
3046
|
-
"
|
|
3219
|
+
/** null on a concentrated pool when the loaded window does not reach that price. */
|
|
3220
|
+
"1pct": number | null;
|
|
3221
|
+
"5pct": number | null;
|
|
3222
|
+
"10pct": number | null;
|
|
3047
3223
|
}
|
|
3048
3224
|
/** Fields shared by supported and unsupported depth pools. */
|
|
3049
3225
|
export interface TokenDepthPoolBase {
|
|
@@ -3062,9 +3238,28 @@ export interface TokenDepthPoolBase {
|
|
|
3062
3238
|
* `reserves_age_ms` since the last swap). */
|
|
3063
3239
|
export interface TokenDepthPool extends TokenDepthPoolBase {
|
|
3064
3240
|
depth_available: true;
|
|
3241
|
+
/** "constant_product" | "curve" | "concentrated" (the last only with a concentrated depth model enabled). */
|
|
3065
3242
|
model: string;
|
|
3243
|
+
/** Concentrated pools only: the program-exact model that produced the numbers. */
|
|
3244
|
+
model_detail?: "meteora_dlmm_bins" | "raydium_clmm_ticks" | "meteora_damm_v2_full_range";
|
|
3245
|
+
/** Meteora DAMM v2 only: the proven Pool account (pool_address is the vault). */
|
|
3246
|
+
pool_account?: string;
|
|
3066
3247
|
/** Swap fee, % (e.g. 0.25). */
|
|
3067
3248
|
fee_pct: number;
|
|
3249
|
+
/** "observed_event" (PumpSwap virtual-reserve model) | "dynamic_fee_at_quote_time" (Meteora DLMM base + variable fee). Absent = static venue fee. */
|
|
3250
|
+
fee_basis?: "observed_event" | "dynamic_fee_at_quote_time" | "amm_config_at_quote_time";
|
|
3251
|
+
/** Meteora DLMM only: the loaded bin range and its slot; quotes never walk outside it. */
|
|
3252
|
+
bins_window?: {
|
|
3253
|
+
from_bin: number;
|
|
3254
|
+
to_bin: number;
|
|
3255
|
+
slot: number;
|
|
3256
|
+
};
|
|
3257
|
+
/** Raydium CLMM only: the loaded tick range [from_tick, to_tick) in the buy direction and its slot. */
|
|
3258
|
+
ticks_window?: {
|
|
3259
|
+
from_tick: number;
|
|
3260
|
+
to_tick: number;
|
|
3261
|
+
slot: number;
|
|
3262
|
+
};
|
|
3068
3263
|
source: "stream" | "live_rpc";
|
|
3069
3264
|
/** Age of the reserves snapshot (0 for live_rpc). */
|
|
3070
3265
|
reserves_age_ms: number;
|
|
@@ -3108,6 +3303,13 @@ export interface TokenDepthResponse {
|
|
|
3108
3303
|
evaluated: number;
|
|
3109
3304
|
truncated: boolean;
|
|
3110
3305
|
};
|
|
3306
|
+
/** Only with a concentrated depth model enabled: largest known pool vs the reported pool; routing is single-pool only. */
|
|
3307
|
+
pool_selection?: {
|
|
3308
|
+
largest_known_pool: string;
|
|
3309
|
+
largest_known_pool_supported: boolean;
|
|
3310
|
+
primary_pool: string | null;
|
|
3311
|
+
routing: "single_pool_only";
|
|
3312
|
+
};
|
|
3111
3313
|
}
|
|
3112
3314
|
/** Wallet-intelligence labels on a holder. Empty = unknown to us, NOT verified clean. */
|
|
3113
3315
|
export type TokenHolderLabel = "deployer" | "kol" | "early_buyer" | "buyer" | "bundle" | "bot" | "dump_cluster";
|
|
@@ -3228,7 +3430,10 @@ export interface TokenHoldersResponse {
|
|
|
3228
3430
|
};
|
|
3229
3431
|
}
|
|
3230
3432
|
/** Locker program a contract lives under. LP locks are NOT covered (token / vesting locks only). */
|
|
3231
|
-
|
|
3433
|
+
/** smithii_vesting / sablier_lockup are served only while listed in the response's meta.programs (verified admission). */
|
|
3434
|
+
export type TokenLockProgram = "streamflow" | "jupiter_lock" | "bonfida_vesting" | "smithii_vesting" | "sablier_lockup";
|
|
3435
|
+
/** sablier_lockup only: `current` = recipient proven by the latest read; anything else = recipient null (unknown / burned). */
|
|
3436
|
+
export type TokenLockHolderStatus = "current" | "lost_proof" | "never_proven" | "burned" | "anomaly";
|
|
3232
3437
|
/** `lock` = whole amount released at one date; `vesting` = cliff and/or periodic release. */
|
|
3233
3438
|
export type TokenLockKind = "lock" | "vesting";
|
|
3234
3439
|
/** Contract status, derived at request time from the on-chain schedule + withdrawn/cancelled state. */
|
|
@@ -3297,7 +3502,14 @@ export interface TokenLock {
|
|
|
3297
3502
|
mint: string;
|
|
3298
3503
|
/** Creator / locker. Bonfida has none on-chain. */
|
|
3299
3504
|
sender: string | null;
|
|
3505
|
+
/** sablier_lockup: the CURRENT proven stream-NFT holder only, null otherwise (see holder_status). smithii_vesting: null for merkle receivers. */
|
|
3300
3506
|
recipient: string | null;
|
|
3507
|
+
/** sablier_lockup only (null for other programs). */
|
|
3508
|
+
holder_status: TokenLockHolderStatus | null;
|
|
3509
|
+
/** sablier_lockup only: last holder a read proved — provenance, NOT the recipient unless holder_status is current. */
|
|
3510
|
+
last_proven_holder: string | null;
|
|
3511
|
+
/** sablier_lockup only: slot of the read that last proved last_proven_holder. */
|
|
3512
|
+
holder_proven_at_slot: number | null;
|
|
3301
3513
|
name: string | null;
|
|
3302
3514
|
/** Deposited amount. */
|
|
3303
3515
|
amount_raw: string;
|
|
@@ -3314,11 +3526,13 @@ export interface TokenLock {
|
|
|
3314
3526
|
locked_pct_of_supply: number | null;
|
|
3315
3527
|
unlocked_raw: string;
|
|
3316
3528
|
unlocked: number | null;
|
|
3317
|
-
/** Claimed so far, read from the contract's own state (
|
|
3318
|
-
withdrawn_raw: string;
|
|
3529
|
+
/** Claimed so far, read from the contract's own state; null when the program does not expose it (withdrawn_tracked false: smithii_vesting). */
|
|
3530
|
+
withdrawn_raw: string | null;
|
|
3319
3531
|
withdrawn: number | null;
|
|
3320
|
-
/**
|
|
3321
|
-
|
|
3532
|
+
/** false = withdrawn / claimable are unknown (null), not zero. */
|
|
3533
|
+
withdrawn_tracked: boolean;
|
|
3534
|
+
/** Unlocked but not yet withdrawn; null when withdrawn is not tracked. */
|
|
3535
|
+
claimable_raw: string | null;
|
|
3322
3536
|
claimable: number | null;
|
|
3323
3537
|
start_at: string | null;
|
|
3324
3538
|
cliff_at: string | null;
|
|
@@ -4540,6 +4754,14 @@ export interface DeployerActivityEvent {
|
|
|
4540
4754
|
transfer_count?: number;
|
|
4541
4755
|
sample_tx_ids?: string[];
|
|
4542
4756
|
first_tx?: string | null;
|
|
4757
|
+
/** Developer token transfers: number of counterparties of this (tx, mint, direction, actor) aggregate; null on rows stored before 2026-10-06. */
|
|
4758
|
+
counterparty_count?: number | null;
|
|
4759
|
+
/** Developer token transfers: true when re-derived from the chain after a delivery gap (never delivered live); `at` is then chain time. */
|
|
4760
|
+
recovered?: boolean;
|
|
4761
|
+
/** With `recovered: true`: when the recovery stored the event. */
|
|
4762
|
+
recovered_at?: string | null;
|
|
4763
|
+
/** Developer token transfers: true when classified after a short creator lookup; `at` stays the receive time. */
|
|
4764
|
+
late_classified?: boolean;
|
|
4543
4765
|
}
|
|
4544
4766
|
export interface DeployerActivityFamilyCoverage {
|
|
4545
4767
|
source: string;
|
|
@@ -4556,11 +4778,20 @@ export interface DeployerActivityFamilyCoverage {
|
|
|
4556
4778
|
boundary_known: boolean;
|
|
4557
4779
|
/** Set when the family was not queried because it cannot apply (a wallet with no attributed launch has no dev trades). */
|
|
4558
4780
|
skipped_reason?: "no_attributed_launch";
|
|
4781
|
+
/** dev_trades only, only while archive reads are enabled and the window reaches below the online boundary. */
|
|
4782
|
+
archive?: {
|
|
4783
|
+
read: "ok" | "not_needed" | "failed";
|
|
4784
|
+
served: boolean;
|
|
4785
|
+
reason: DeployerActivityArchiveReason | null;
|
|
4786
|
+
missing_months: string[];
|
|
4787
|
+
months_read: string[];
|
|
4788
|
+
};
|
|
4559
4789
|
}
|
|
4560
4790
|
export interface DeployerActivityRange {
|
|
4561
4791
|
from: string | null;
|
|
4562
4792
|
to: string | null;
|
|
4563
4793
|
}
|
|
4794
|
+
export type DeployerActivityArchiveReason = "archive_unavailable" | "archive_timeout" | "archive_contract_mismatch" | "archive_ledger_unavailable" | "archive_months_missing";
|
|
4564
4795
|
/** Requested vs online vs archive-only history (archive reads are a planned follow-up). */
|
|
4565
4796
|
export interface DeployerActivityHistoryPlan {
|
|
4566
4797
|
requested: DeployerActivityRange & {
|
|
@@ -4575,7 +4806,8 @@ export interface DeployerActivityHistoryPlan {
|
|
|
4575
4806
|
};
|
|
4576
4807
|
archive_only: (DeployerActivityRange & {
|
|
4577
4808
|
served: boolean;
|
|
4578
|
-
reason: "archive_reads_not_enabled";
|
|
4809
|
+
reason: "archive_reads_not_enabled" | DeployerActivityArchiveReason | null;
|
|
4810
|
+
missing_months?: string[];
|
|
4579
4811
|
}) | null;
|
|
4580
4812
|
}
|
|
4581
4813
|
/**
|
|
@@ -4616,12 +4848,66 @@ export interface DeployerActivityResponse {
|
|
|
4616
4848
|
future_events_dropped: number;
|
|
4617
4849
|
note: string;
|
|
4618
4850
|
};
|
|
4619
|
-
/**
|
|
4620
|
-
|
|
4621
|
-
|
|
4622
|
-
|
|
4623
|
-
|
|
4851
|
+
/**
|
|
4852
|
+
* ULTRA/BUSINESS only, absent on PRO. Currently always not_available with
|
|
4853
|
+
* reason identity_stitching_not_released. When released: read from the
|
|
4854
|
+
* offline identity graph, `not_available` with another reason whenever the
|
|
4855
|
+
* graph is stale or fails a consistency check. Never means "operates alone".
|
|
4856
|
+
*/
|
|
4857
|
+
identity?: DeployerActivityIdentityUnavailable | DeployerActivityIdentity;
|
|
4858
|
+
}
|
|
4859
|
+
export interface DeployerActivityIdentityUnavailable {
|
|
4860
|
+
status: "not_available";
|
|
4861
|
+
reason: "identity_stitching_not_released" | "builder_never_ran" | "builder_stale" | "builder_rule_mismatch" | "builder_gate_failed" | "identity_not_active" | "identity_inconsistent" | "evidence_missing" | "member_excluded" | "identity_lookup_failed";
|
|
4862
|
+
note: string;
|
|
4863
|
+
}
|
|
4864
|
+
export interface DeployerActivityIdentityMember {
|
|
4865
|
+
wallet: string;
|
|
4866
|
+
role: string;
|
|
4867
|
+
confidence: "confirmed" | "strong" | "probable";
|
|
4868
|
+
path_len: number;
|
|
4869
|
+
best_evidence_class: string | null;
|
|
4870
|
+
evidence_count: number;
|
|
4871
|
+
is_anchor: boolean;
|
|
4872
|
+
}
|
|
4873
|
+
export interface DeployerActivityIdentity {
|
|
4874
|
+
status: "linked" | "no_strong_evidence";
|
|
4875
|
+
scope: "builder_one_hop";
|
|
4876
|
+
rule_version: string;
|
|
4877
|
+
identity_id: string | null;
|
|
4878
|
+
/** members + 1 (the asked wallet). */
|
|
4879
|
+
wallet_count: number;
|
|
4880
|
+
anchor: string | null;
|
|
4881
|
+
self: Omit<DeployerActivityIdentityMember, "wallet"> | null;
|
|
4882
|
+
members: DeployerActivityIdentityMember[];
|
|
4883
|
+
related: Array<{
|
|
4884
|
+
wallet: string;
|
|
4885
|
+
evidence_class: string;
|
|
4886
|
+
strength: "context";
|
|
4887
|
+
basis: string;
|
|
4888
|
+
}>;
|
|
4889
|
+
evidence: Array<{
|
|
4890
|
+
wallet_a: string;
|
|
4891
|
+
wallet_b: string;
|
|
4892
|
+
evidence_class: string;
|
|
4893
|
+
direction: "a_to_b" | "symmetric";
|
|
4894
|
+
observed_at: string;
|
|
4895
|
+
time_basis: "chain" | "ingest" | "chain_or_ingest";
|
|
4896
|
+
tx_ids: string[];
|
|
4897
|
+
token_mint: string | null;
|
|
4898
|
+
strength: "confirmed" | "strong" | "probable" | "context";
|
|
4899
|
+
basis: string;
|
|
4900
|
+
rule_version: string;
|
|
4901
|
+
}>;
|
|
4902
|
+
builder: {
|
|
4903
|
+
run_id: number;
|
|
4904
|
+
built_at: string;
|
|
4905
|
+
age_seconds: number;
|
|
4906
|
+
stale_after_seconds: number;
|
|
4907
|
+
hub_floor: number | null;
|
|
4624
4908
|
};
|
|
4909
|
+
disclaimer: string;
|
|
4910
|
+
coverage_note: string;
|
|
4625
4911
|
}
|
|
4626
4912
|
export interface DeployerActivityParams {
|
|
4627
4913
|
/** Clamped server-side to 100 (PRO, ULTRA) or 500 (BUSINESS). */
|