madeonsol-x402 3.1.0 → 3.2.1
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 +7 -1
- package/dist/index.d.ts +13 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -0
- 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 +408 -21
- 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
|
@@ -561,7 +561,11 @@ export interface DeployerAlertsParams {
|
|
|
561
561
|
min_kol_buys?: number;
|
|
562
562
|
}
|
|
563
563
|
/** v2.10: every event the registry accepts (src/lib/webhook-events.ts VALID_EVENTS); earlier types listed only the first four. */
|
|
564
|
-
export type WebhookEvent = "kol:trade" | "kol:coordination" | "deployer:alert" | "deployer:bond" | "wallet_tracker:event" | "sniper:deploy" | "rhc:kol_trade" | "token:surge" | "token:revival"
|
|
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
|
+
/** Realtime developer sells / buys / token transfers (PRO+; identity fields ULTRA+). Dedupe on payload `id`. */
|
|
566
|
+
| "dev:activity"
|
|
567
|
+
/** Robinhood Chain developer buys / sells only (never transfers), PRO+, projected per tier like dev:activity. */
|
|
568
|
+
| "rhc:dev_activity";
|
|
565
569
|
export interface WebhookFilters {
|
|
566
570
|
min_sol?: number;
|
|
567
571
|
action?: "buy" | "sell";
|
|
@@ -575,6 +579,13 @@ export interface WebhookFilters {
|
|
|
575
579
|
exclude_flags?: string[];
|
|
576
580
|
min_mc_usd?: number;
|
|
577
581
|
max_mc_usd?: number;
|
|
582
|
+
/** dev:activity only. */
|
|
583
|
+
types?: Array<"dev_sell" | "dev_buy" | "dev_token_transfer_out" | "dev_token_transfer_in">;
|
|
584
|
+
token_mints?: string[];
|
|
585
|
+
/** dev:activity (base58) and rhc:dev_activity (0x, case-insensitive): deployer_wallet or actor_wallet. */
|
|
586
|
+
deployers?: string[];
|
|
587
|
+
/** rhc:dev_activity only: 0x token addresses. */
|
|
588
|
+
addresses?: string[];
|
|
578
589
|
/** ULTRA/BUSINESS custom conditions (max 10). */
|
|
579
590
|
conditions?: WebhookCondition[];
|
|
580
591
|
}
|
|
@@ -1243,6 +1254,18 @@ export interface TokenCapTableResponse {
|
|
|
1243
1254
|
summary: CapTableSummary;
|
|
1244
1255
|
/** v1.23.4 — trade-coverage disclosure (keyed route; absent on the x402 mirror and older cached responses). */
|
|
1245
1256
|
coverage?: TradeCoverage;
|
|
1257
|
+
/** 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. */
|
|
1258
|
+
ranks_completeness?: {
|
|
1259
|
+
ranks_complete: "observed_from_launch" | "gap_overlap" | "not_verified" | "no_ranks";
|
|
1260
|
+
rank_basis: "first_persisted_buys_at_or_above_floor";
|
|
1261
|
+
window: {
|
|
1262
|
+
from: string;
|
|
1263
|
+
to: string;
|
|
1264
|
+
} | null;
|
|
1265
|
+
gaps_overlapping: number;
|
|
1266
|
+
open_slots: number;
|
|
1267
|
+
gaps_in_open_slots: number;
|
|
1268
|
+
};
|
|
1246
1269
|
}
|
|
1247
1270
|
export interface TokenBuyerQualityResponse {
|
|
1248
1271
|
mint: string;
|
|
@@ -1571,6 +1594,10 @@ export interface BundleSummary {
|
|
|
1571
1594
|
buy_volume: number;
|
|
1572
1595
|
/** Swap-derived net position (proxy for on-chain balance). */
|
|
1573
1596
|
tokens_held: number;
|
|
1597
|
+
/** 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. */
|
|
1598
|
+
holdings_basis?: "swap_only" | "swap_and_transfers";
|
|
1599
|
+
/** 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. */
|
|
1600
|
+
bundle_detection?: "same_batch_block_time_second";
|
|
1574
1601
|
}
|
|
1575
1602
|
/**
|
|
1576
1603
|
* One wallet in the bundle cohort. `rank`…`is_kol` are returned on PRO (top-10)
|
|
@@ -1635,15 +1662,37 @@ export interface CopyTradeSubscription {
|
|
|
1635
1662
|
created_at: string;
|
|
1636
1663
|
updated_at?: string;
|
|
1637
1664
|
/**
|
|
1638
|
-
* Source wallets that are tracked KOL wallets
|
|
1639
|
-
*
|
|
1665
|
+
* Source wallets that are tracked KOL wallets, read at response time. Under
|
|
1666
|
+
* `source_admission: "any_wallet"` (production since 2026-10-04) this is KOL
|
|
1667
|
+
* enrichment only; under the legacy `"kol_only"` engine only these produce signals.
|
|
1668
|
+
* @deprecated 2026-10-04, kept and still filled. `null` when the tracking lookup failed (see `warnings`).
|
|
1640
1669
|
* Returned by servers from 2026-09-25 on; absent on older ones.
|
|
1641
1670
|
*/
|
|
1642
1671
|
source_wallets_tracked?: string[] | null;
|
|
1643
|
-
/**
|
|
1672
|
+
/**
|
|
1673
|
+
* Source wallets that are NOT tracked KOL wallets. Under
|
|
1674
|
+
* `source_admission: "any_wallet"` they fire like any other wallet (no
|
|
1675
|
+
* Wallet Tracker entry or quota needed); under the legacy `"kol_only"` engine
|
|
1676
|
+
* they never produce a signal.
|
|
1677
|
+
* @deprecated 2026-10-04 — KOL membership is enrichment only; kept and still filled.
|
|
1678
|
+
*/
|
|
1644
1679
|
source_wallets_untracked?: string[] | null;
|
|
1645
|
-
/** Present when at least one wallet is untracked, or tracking could not be determined. */
|
|
1680
|
+
/** Present when at least one wallet is untracked (legacy kol_only only), or tracking could not be determined. */
|
|
1646
1681
|
warnings?: CopyTradeRuleWarning[];
|
|
1682
|
+
/**
|
|
1683
|
+
* Whether the rule can fire right now, separate from `is_active`. Legacy
|
|
1684
|
+
* `kol_only`: `eligible` | `no_tracked_sources` | `unknown`. Server
|
|
1685
|
+
* 2026-10-04 `any_wallet`: `eligible`, or an infrastructure state —
|
|
1686
|
+
* `monitoring_pending` (rule changed after the engine's last load, live
|
|
1687
|
+
* within seconds), `monitoring_unavailable` (engine / trade stream not
|
|
1688
|
+
* reporting; it fires nothing then, see `monitoring_reasons`),
|
|
1689
|
+
* `source_capacity_unavailable`.
|
|
1690
|
+
*/
|
|
1691
|
+
operational_state?: "eligible" | "monitoring_pending" | "monitoring_unavailable" | "source_capacity_unavailable" | "no_tracked_sources" | "unknown";
|
|
1692
|
+
/** Server 2026-10-04 — which trades the RUNNING engine admits. Absent = unknown (legacy kol_only semantics). */
|
|
1693
|
+
source_admission?: "kol_only" | "any_wallet";
|
|
1694
|
+
/** Server 2026-10-04 — present only with `monitoring_unavailable`: e.g. `trade_stream_stale`, `source_producer_stale`, `map_stale`, `engine_state_stale`. */
|
|
1695
|
+
monitoring_reasons?: string[];
|
|
1647
1696
|
}
|
|
1648
1697
|
/** A non-fatal note on a copy-trade rule. The rule is saved unchanged. */
|
|
1649
1698
|
export interface CopyTradeRuleWarning {
|
|
@@ -1655,9 +1704,10 @@ export interface CopyTradeRuleWarning {
|
|
|
1655
1704
|
*
|
|
1656
1705
|
* `source_wallets`: the per-rule limit is set by your tier and enforced by the
|
|
1657
1706
|
* server (Pro 5, Ultra 50, Business and Enterprise 250; `GET /me` reports
|
|
1658
|
-
* yours as `copytrade_wallets_per_rule`).
|
|
1659
|
-
*
|
|
1660
|
-
*
|
|
1707
|
+
* yours as `copytrade_wallets_per_rule`). Any valid Solana wallet can be a
|
|
1708
|
+
* source, KOL or not (`source_admission: "any_wallet"`, production since
|
|
1709
|
+
* 2026-10-04; no Wallet Tracker quota used). On a server still running the
|
|
1710
|
+
* legacy `"kol_only"` engine only tracked KOL wallets (`GET /kol/wallets`) fire.
|
|
1661
1711
|
*/
|
|
1662
1712
|
export interface CopyTradeCreateParams {
|
|
1663
1713
|
name?: string;
|
|
@@ -1738,6 +1788,14 @@ export interface CopyTradeSignal extends McDeltaFields {
|
|
|
1738
1788
|
market_cap_usd?: number | null;
|
|
1739
1789
|
/** v1.5 — current last-trade price (USD). */
|
|
1740
1790
|
last_price_usd?: number | null;
|
|
1791
|
+
/** 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. */
|
|
1792
|
+
economic_action_id?: string | null;
|
|
1793
|
+
/** Present once copy-trade identity v2 is active: the followed wallet that performed the action. */
|
|
1794
|
+
source_actor?: string | null;
|
|
1795
|
+
/** Present once copy-trade identity v2 is active: other followed wallets in the same action. */
|
|
1796
|
+
co_actors?: string[];
|
|
1797
|
+
/** Present once copy-trade identity v2 is active: 1 = per (rule, tx), 2 = per (rule, economic action). */
|
|
1798
|
+
identity_version?: 1 | 2;
|
|
1741
1799
|
}
|
|
1742
1800
|
export interface CopyTradeSignalsParams {
|
|
1743
1801
|
subscription_id?: number;
|
|
@@ -1749,6 +1807,22 @@ export interface CopyTradeSignalsParams {
|
|
|
1749
1807
|
min_mc_usd?: number;
|
|
1750
1808
|
/** Keep signals whose source trade's market cap (USD) was at most this. Drops unknown-MC signals. */
|
|
1751
1809
|
max_mc_usd?: number;
|
|
1810
|
+
/** `next_cursor` from the previous page — opaque strict (fired_at, id) keyset. The MC band is applied before limit and cursor. */
|
|
1811
|
+
cursor?: string;
|
|
1812
|
+
}
|
|
1813
|
+
export interface CopyTradeSignalsResponse {
|
|
1814
|
+
signals: CopyTradeSignal[];
|
|
1815
|
+
/** Pass as `cursor` for the next (older) page; null at the end. */
|
|
1816
|
+
next_cursor?: string | null;
|
|
1817
|
+
/** false only when your signals ran out. */
|
|
1818
|
+
has_more?: boolean;
|
|
1819
|
+
/** Present with min_mc_usd / max_mc_usd; scan_truncated=true means more matches MAY exist past next_cursor. */
|
|
1820
|
+
scan?: {
|
|
1821
|
+
post_filtered: boolean;
|
|
1822
|
+
scanned: number;
|
|
1823
|
+
scan_truncated: boolean;
|
|
1824
|
+
scan_budget: number;
|
|
1825
|
+
};
|
|
1752
1826
|
}
|
|
1753
1827
|
export interface WalletTrackerEntry {
|
|
1754
1828
|
wallet_address: string;
|
|
@@ -2396,6 +2470,15 @@ export interface TokenSummary {
|
|
|
2396
2470
|
/** v1.24 — VERIFIED LP evidence only; null = unknown (every token today). Was a supply-burn proxy before. */
|
|
2397
2471
|
lp_burned?: boolean | null;
|
|
2398
2472
|
lp_burn_status?: LpBurnStatus;
|
|
2473
|
+
/**
|
|
2474
|
+
* D-22 — burned + non-cancelable LOCKED share of the LP (0–100), from LP
|
|
2475
|
+
* evidence; null = unknown (never 0 for unknown). `lp_burnt_pct` stays burn-only.
|
|
2476
|
+
*/
|
|
2477
|
+
lp_secured_pct?: number | null;
|
|
2478
|
+
/** permanent = burn and/or permanent locks only; temporary = only time-limited locks; mixed = both; null = nothing secured or unknown. */
|
|
2479
|
+
lp_secured_basis?: "permanent" | "temporary" | "mixed" | null;
|
|
2480
|
+
/** Earliest end of a counted TEMPORARY LP lock (ISO); null when none. Permanent locks have no date. */
|
|
2481
|
+
lp_locked_until?: string | null;
|
|
2399
2482
|
token_supply_burn_detected?: boolean | null;
|
|
2400
2483
|
}
|
|
2401
2484
|
export interface TokensListResponse {
|
|
@@ -2457,6 +2540,8 @@ export interface AlmostBondedToken {
|
|
|
2457
2540
|
name: string | null;
|
|
2458
2541
|
/** Launch venue: pump.fun curve or bonk/LetsBonk (Raydium LaunchLab). */
|
|
2459
2542
|
launchpad?: "pumpfun" | "launchlab";
|
|
2543
|
+
/** 2026-10 — where `launchpad` came from: `primary_dex`, or the token's single curve pool in `token_pools` when primary_dex is unset. */
|
|
2544
|
+
venue_source?: "primary_dex" | "token_pools";
|
|
2460
2545
|
/** Bonding-curve progress %, from on-chain real_token_reserves depletion. */
|
|
2461
2546
|
progress_pct: number | null;
|
|
2462
2547
|
/** Δprogress per minute; null until a 5m-ago snapshot exists. */
|
|
@@ -2547,6 +2632,13 @@ export interface WalletClassification {
|
|
|
2547
2632
|
kol_name: string | null;
|
|
2548
2633
|
bot_confidence: "low" | "medium" | "high" | "none" | null;
|
|
2549
2634
|
dump_cluster: DumpClusterStats | null;
|
|
2635
|
+
/** 2026-10 (COV-25) — whether each flag's rule actually evaluated this wallet. evaluated=false → the boolean is "no evidence", not "verified clean". */
|
|
2636
|
+
label_coverage?: Record<"sniper" | "bundler" | "dumper" | "kol", LabelCoverageEntry>;
|
|
2637
|
+
}
|
|
2638
|
+
export type LabelCoverageReason = "flagged" | "rule_evaluated" | "insufficient_sample" | "not_checked_budget" | "sample_unavailable" | "population_not_checked" | "no_cohort_stats" | "registry";
|
|
2639
|
+
export interface LabelCoverageEntry {
|
|
2640
|
+
evaluated: boolean;
|
|
2641
|
+
reason: LabelCoverageReason;
|
|
2550
2642
|
}
|
|
2551
2643
|
export interface WalletBatchClassifyResponse {
|
|
2552
2644
|
/** Launch-pipeline scope disclosure (absent ≠ clean). */
|
|
@@ -2554,6 +2646,15 @@ export interface WalletBatchClassifyResponse {
|
|
|
2554
2646
|
wallets: WalletClassification[];
|
|
2555
2647
|
count: number;
|
|
2556
2648
|
as_of: string;
|
|
2649
|
+
/** 2026-10 (COV-25) — label rule version, e.g. `wallet-labels/368-v1`. */
|
|
2650
|
+
rule_version?: string;
|
|
2651
|
+
/** 2026-10 (COV-25) — one sentence per label: population + window. */
|
|
2652
|
+
evidence_horizon?: {
|
|
2653
|
+
sniper: string;
|
|
2654
|
+
bundler: string;
|
|
2655
|
+
dumper: string;
|
|
2656
|
+
kol: string;
|
|
2657
|
+
};
|
|
2557
2658
|
}
|
|
2558
2659
|
export interface WalletTopToken {
|
|
2559
2660
|
token_mint: string;
|
|
@@ -2676,6 +2777,40 @@ export interface WalletOpenPosition {
|
|
|
2676
2777
|
unrealized_pct: number | null;
|
|
2677
2778
|
first_buy_at: string | null;
|
|
2678
2779
|
buys_in_position: number;
|
|
2780
|
+
/** 2026-10 (COV-21) — positions are FIFO-open DEX buys (trade position), not a proven holding. */
|
|
2781
|
+
position_basis?: "swap_derived";
|
|
2782
|
+
holding_status?: "verified" | "unverified";
|
|
2783
|
+
holding_unverified_reason?: "not_checked" | "no_fresh_snapshot" | "snapshot_unreadable" | "snapshot_older_than_trades" | "decimals_mismatch" | "balance_invalid" | null;
|
|
2784
|
+
/** partial = a verified balance exceeds the trade position; the excess arrived without a swap and has no cost basis. */
|
|
2785
|
+
cost_basis_status?: "known" | "partial";
|
|
2786
|
+
/** Present (non-null) only when holding_status = verified. */
|
|
2787
|
+
holding?: WalletPositionHolding | null;
|
|
2788
|
+
}
|
|
2789
|
+
/** 2026-10 (COV-21) — proven on-chain holding for one swap-derived position. */
|
|
2790
|
+
export interface WalletPositionHolding {
|
|
2791
|
+
status: "HELD" | "PARTIALLY_REDUCED" | "TRANSFERRED_OR_DISPOSED" | "EXTERNAL_INFLOW";
|
|
2792
|
+
onchain_balance: number;
|
|
2793
|
+
held_known_amount: number;
|
|
2794
|
+
external_inflow_amount: number;
|
|
2795
|
+
cost_basis_held_sol: number;
|
|
2796
|
+
unrealized_known_sol: number | null;
|
|
2797
|
+
/** Cost of FIFO lots no longer in the wallet. Outcome unknown: neither realized nor unrealized. */
|
|
2798
|
+
cost_basis_not_held_sol: number;
|
|
2799
|
+
verified_at: string;
|
|
2800
|
+
source: "wallet_holdings_cache";
|
|
2801
|
+
}
|
|
2802
|
+
/** 2026-10 (COV-21) — summary of the proven-holding check over the returned open positions. */
|
|
2803
|
+
export interface WalletHoldingCheck {
|
|
2804
|
+
mode: "off" | "cache";
|
|
2805
|
+
source: "wallet_holdings_cache" | null;
|
|
2806
|
+
verified_at: string | null;
|
|
2807
|
+
verified: number;
|
|
2808
|
+
unverified: number;
|
|
2809
|
+
held: number;
|
|
2810
|
+
partially_reduced: number;
|
|
2811
|
+
transferred_or_disposed: number;
|
|
2812
|
+
external_inflow: number;
|
|
2813
|
+
note: string;
|
|
2679
2814
|
}
|
|
2680
2815
|
export interface WalletPnlResponse {
|
|
2681
2816
|
address: string;
|
|
@@ -2692,8 +2827,14 @@ export interface WalletPnlResponse {
|
|
|
2692
2827
|
trades_through_same_second?: number;
|
|
2693
2828
|
partial?: true;
|
|
2694
2829
|
analyzed_trades?: number;
|
|
2695
|
-
partial_reason?: string;
|
|
2830
|
+
partial_reason?: string; /** 2026-10 (COV-21) — tokens with sells beyond in-window buys; excluded from realized PnL. */
|
|
2831
|
+
sells_without_cost_basis?: {
|
|
2832
|
+
tokens: number;
|
|
2833
|
+
cost_basis: "unknown";
|
|
2834
|
+
};
|
|
2696
2835
|
};
|
|
2836
|
+
/** 2026-10 (COV-21) — proven-holding check summary. Absent on older responses. */
|
|
2837
|
+
holding_check?: WalletHoldingCheck;
|
|
2697
2838
|
cache_hit?: boolean;
|
|
2698
2839
|
computed_at?: string;
|
|
2699
2840
|
ttl_seconds?: number;
|
|
@@ -2707,6 +2848,8 @@ export interface WalletPnlResponse {
|
|
|
2707
2848
|
export interface WalletPositionsResponse {
|
|
2708
2849
|
address: string;
|
|
2709
2850
|
positions: WalletOpenPosition[];
|
|
2851
|
+
/** 2026-10 (COV-21) — proven-holding check summary. Absent on older responses. */
|
|
2852
|
+
holding_check?: WalletHoldingCheck;
|
|
2710
2853
|
cache_hit?: boolean;
|
|
2711
2854
|
computed_at?: string | null;
|
|
2712
2855
|
ttl_seconds?: number | null;
|
|
@@ -3026,18 +3169,24 @@ export interface TokenDepthParams {
|
|
|
3026
3169
|
export interface TokenDepthQuote {
|
|
3027
3170
|
/** The requested buy size, in SOL. */
|
|
3028
3171
|
size_sol: number;
|
|
3029
|
-
/**
|
|
3030
|
-
|
|
3172
|
+
/**
|
|
3173
|
+
* Concentrated depth models only (server flag): "filled" | "pool_liquidity_exhausted"
|
|
3174
|
+
* (partial fill reported) | "exceeds_loaded_bins" | "price_out_of_range" (numbers null).
|
|
3175
|
+
*/
|
|
3176
|
+
status?: "filled" | "pool_liquidity_exhausted" | "exceeds_loaded_bins" | "exceeds_loaded_ticks" | "price_out_of_range";
|
|
3177
|
+
/** Tokens received for that buy (UI units, fee-adjusted). null only on a concentrated pool whose status is not quotable. */
|
|
3178
|
+
tokens_out: number | null;
|
|
3031
3179
|
/** Average execution price in SOL per token. */
|
|
3032
|
-
avg_price_sol: number;
|
|
3180
|
+
avg_price_sol: number | null;
|
|
3033
3181
|
/** Post-trade spot-price move, % (rounded to 2 decimals). */
|
|
3034
|
-
price_impact_pct: number;
|
|
3182
|
+
price_impact_pct: number | null;
|
|
3035
3183
|
}
|
|
3036
3184
|
/** SOL required to move the pool's spot price by 1% / 5% / 10%. */
|
|
3037
3185
|
export interface TokenDepthToMovePrice {
|
|
3038
|
-
|
|
3039
|
-
"
|
|
3040
|
-
"
|
|
3186
|
+
/** null on a concentrated pool when the loaded window does not reach that price. */
|
|
3187
|
+
"1pct": number | null;
|
|
3188
|
+
"5pct": number | null;
|
|
3189
|
+
"10pct": number | null;
|
|
3041
3190
|
}
|
|
3042
3191
|
/** Fields shared by supported and unsupported depth pools. */
|
|
3043
3192
|
export interface TokenDepthPoolBase {
|
|
@@ -3056,9 +3205,28 @@ export interface TokenDepthPoolBase {
|
|
|
3056
3205
|
* `reserves_age_ms` since the last swap). */
|
|
3057
3206
|
export interface TokenDepthPool extends TokenDepthPoolBase {
|
|
3058
3207
|
depth_available: true;
|
|
3208
|
+
/** "constant_product" | "curve" | "concentrated" (the last only with a concentrated depth model enabled). */
|
|
3059
3209
|
model: string;
|
|
3210
|
+
/** Concentrated pools only: the program-exact model that produced the numbers. */
|
|
3211
|
+
model_detail?: "meteora_dlmm_bins" | "raydium_clmm_ticks" | "meteora_damm_v2_full_range";
|
|
3212
|
+
/** Meteora DAMM v2 only: the proven Pool account (pool_address is the vault). */
|
|
3213
|
+
pool_account?: string;
|
|
3060
3214
|
/** Swap fee, % (e.g. 0.25). */
|
|
3061
3215
|
fee_pct: number;
|
|
3216
|
+
/** "observed_event" (PumpSwap virtual-reserve model) | "dynamic_fee_at_quote_time" (Meteora DLMM base + variable fee). Absent = static venue fee. */
|
|
3217
|
+
fee_basis?: "observed_event" | "dynamic_fee_at_quote_time" | "amm_config_at_quote_time";
|
|
3218
|
+
/** Meteora DLMM only: the loaded bin range and its slot; quotes never walk outside it. */
|
|
3219
|
+
bins_window?: {
|
|
3220
|
+
from_bin: number;
|
|
3221
|
+
to_bin: number;
|
|
3222
|
+
slot: number;
|
|
3223
|
+
};
|
|
3224
|
+
/** Raydium CLMM only: the loaded tick range [from_tick, to_tick) in the buy direction and its slot. */
|
|
3225
|
+
ticks_window?: {
|
|
3226
|
+
from_tick: number;
|
|
3227
|
+
to_tick: number;
|
|
3228
|
+
slot: number;
|
|
3229
|
+
};
|
|
3062
3230
|
source: "stream" | "live_rpc";
|
|
3063
3231
|
/** Age of the reserves snapshot (0 for live_rpc). */
|
|
3064
3232
|
reserves_age_ms: number;
|
|
@@ -3102,6 +3270,13 @@ export interface TokenDepthResponse {
|
|
|
3102
3270
|
evaluated: number;
|
|
3103
3271
|
truncated: boolean;
|
|
3104
3272
|
};
|
|
3273
|
+
/** Only with a concentrated depth model enabled: largest known pool vs the reported pool; routing is single-pool only. */
|
|
3274
|
+
pool_selection?: {
|
|
3275
|
+
largest_known_pool: string;
|
|
3276
|
+
largest_known_pool_supported: boolean;
|
|
3277
|
+
primary_pool: string | null;
|
|
3278
|
+
routing: "single_pool_only";
|
|
3279
|
+
};
|
|
3105
3280
|
}
|
|
3106
3281
|
/** Wallet-intelligence labels on a holder. Empty = unknown to us, NOT verified clean. */
|
|
3107
3282
|
export type TokenHolderLabel = "deployer" | "kol" | "early_buyer" | "buyer" | "bundle" | "bot" | "dump_cluster";
|
|
@@ -3222,7 +3397,10 @@ export interface TokenHoldersResponse {
|
|
|
3222
3397
|
};
|
|
3223
3398
|
}
|
|
3224
3399
|
/** Locker program a contract lives under. LP locks are NOT covered (token / vesting locks only). */
|
|
3225
|
-
|
|
3400
|
+
/** smithii_vesting / sablier_lockup are served only while listed in the response's meta.programs (verified admission). */
|
|
3401
|
+
export type TokenLockProgram = "streamflow" | "jupiter_lock" | "bonfida_vesting" | "smithii_vesting" | "sablier_lockup";
|
|
3402
|
+
/** sablier_lockup only: `current` = recipient proven by the latest read; anything else = recipient null (unknown / burned). */
|
|
3403
|
+
export type TokenLockHolderStatus = "current" | "lost_proof" | "never_proven" | "burned" | "anomaly";
|
|
3226
3404
|
/** `lock` = whole amount released at one date; `vesting` = cliff and/or periodic release. */
|
|
3227
3405
|
export type TokenLockKind = "lock" | "vesting";
|
|
3228
3406
|
/** Contract status, derived at request time from the on-chain schedule + withdrawn/cancelled state. */
|
|
@@ -3291,7 +3469,14 @@ export interface TokenLock {
|
|
|
3291
3469
|
mint: string;
|
|
3292
3470
|
/** Creator / locker. Bonfida has none on-chain. */
|
|
3293
3471
|
sender: string | null;
|
|
3472
|
+
/** sablier_lockup: the CURRENT proven stream-NFT holder only, null otherwise (see holder_status). smithii_vesting: null for merkle receivers. */
|
|
3294
3473
|
recipient: string | null;
|
|
3474
|
+
/** sablier_lockup only (null for other programs). */
|
|
3475
|
+
holder_status: TokenLockHolderStatus | null;
|
|
3476
|
+
/** sablier_lockup only: last holder a read proved — provenance, NOT the recipient unless holder_status is current. */
|
|
3477
|
+
last_proven_holder: string | null;
|
|
3478
|
+
/** sablier_lockup only: slot of the read that last proved last_proven_holder. */
|
|
3479
|
+
holder_proven_at_slot: number | null;
|
|
3295
3480
|
name: string | null;
|
|
3296
3481
|
/** Deposited amount. */
|
|
3297
3482
|
amount_raw: string;
|
|
@@ -3308,11 +3493,13 @@ export interface TokenLock {
|
|
|
3308
3493
|
locked_pct_of_supply: number | null;
|
|
3309
3494
|
unlocked_raw: string;
|
|
3310
3495
|
unlocked: number | null;
|
|
3311
|
-
/** Claimed so far, read from the contract's own state (
|
|
3312
|
-
withdrawn_raw: string;
|
|
3496
|
+
/** Claimed so far, read from the contract's own state; null when the program does not expose it (withdrawn_tracked false: smithii_vesting). */
|
|
3497
|
+
withdrawn_raw: string | null;
|
|
3313
3498
|
withdrawn: number | null;
|
|
3314
|
-
/**
|
|
3315
|
-
|
|
3499
|
+
/** false = withdrawn / claimable are unknown (null), not zero. */
|
|
3500
|
+
withdrawn_tracked: boolean;
|
|
3501
|
+
/** Unlocked but not yet withdrawn; null when withdrawn is not tracked. */
|
|
3502
|
+
claimable_raw: string | null;
|
|
3316
3503
|
claimable: number | null;
|
|
3317
3504
|
start_at: string | null;
|
|
3318
3505
|
cliff_at: string | null;
|
|
@@ -4490,6 +4677,206 @@ export interface DeployerRewardsResponse {
|
|
|
4490
4677
|
note: string;
|
|
4491
4678
|
};
|
|
4492
4679
|
}
|
|
4680
|
+
export type DeployerActivityEventType = "launch" | "dev_buy" | "dev_sell" | "creator_transferred" | "fee_claim" | "funding_in" | "capital_out";
|
|
4681
|
+
/**
|
|
4682
|
+
* One event of a deployer's activity timeline. Fields present depend on
|
|
4683
|
+
* `type`; addresses are raw facts of the concrete event, never identity claims.
|
|
4684
|
+
*/
|
|
4685
|
+
export interface DeployerActivityEvent {
|
|
4686
|
+
id: string;
|
|
4687
|
+
type: DeployerActivityEventType;
|
|
4688
|
+
/** Time of the event itself (the window applies to this). */
|
|
4689
|
+
at: string;
|
|
4690
|
+
time_basis: "chain" | "ingest" | "chain_or_ingest";
|
|
4691
|
+
mint?: string | null;
|
|
4692
|
+
name?: string | null;
|
|
4693
|
+
symbol?: string | null;
|
|
4694
|
+
launchpad?: string | null;
|
|
4695
|
+
bonded_at?: string | null;
|
|
4696
|
+
/** launch: whether the creator paid the create fee (null = unknown). The payer address is never in this response. */
|
|
4697
|
+
fee_payer_is_creator?: boolean | null;
|
|
4698
|
+
external_fee_payer?: boolean | null;
|
|
4699
|
+
dev_buy_sol?: number | null;
|
|
4700
|
+
dev_buy_tokens?: number | null;
|
|
4701
|
+
dev_buy_supply_pct?: number | null;
|
|
4702
|
+
own_token?: boolean;
|
|
4703
|
+
sol?: number | null;
|
|
4704
|
+
tokens?: number | null;
|
|
4705
|
+
price_usd?: number | null;
|
|
4706
|
+
first_at?: string | null;
|
|
4707
|
+
last_at?: string | null;
|
|
4708
|
+
aggregate?: boolean;
|
|
4709
|
+
from?: string | null;
|
|
4710
|
+
to?: string | null;
|
|
4711
|
+
direction?: "in" | "out";
|
|
4712
|
+
initiated_by?: "creator" | "platform_admin" | "other_signer" | "unknown";
|
|
4713
|
+
tx?: string;
|
|
4714
|
+
kind?: "direct" | "social";
|
|
4715
|
+
amount_raw?: string | null;
|
|
4716
|
+
quote_mint?: string | null;
|
|
4717
|
+
source?: string;
|
|
4718
|
+
recipient?: string;
|
|
4719
|
+
asset?: string;
|
|
4720
|
+
decimals?: number | null;
|
|
4721
|
+
transfer_count?: number;
|
|
4722
|
+
sample_tx_ids?: string[];
|
|
4723
|
+
first_tx?: string | null;
|
|
4724
|
+
}
|
|
4725
|
+
export interface DeployerActivityFamilyCoverage {
|
|
4726
|
+
source: string;
|
|
4727
|
+
retention: string;
|
|
4728
|
+
scope?: string;
|
|
4729
|
+
truncated: boolean;
|
|
4730
|
+
loaded: boolean;
|
|
4731
|
+
/** false: part of the window lies outside the online store (trade months only in the archive), or the boundary is unknown. */
|
|
4732
|
+
complete: boolean;
|
|
4733
|
+
/** Earliest instant the online store answers this family completely. */
|
|
4734
|
+
complete_from: string | null;
|
|
4735
|
+
/** Before this instant events exist only in the archive (not served yet); null when the window does not cross it. */
|
|
4736
|
+
archive_required_before: string | null;
|
|
4737
|
+
boundary_known: boolean;
|
|
4738
|
+
/** Set when the family was not queried because it cannot apply (a wallet with no attributed launch has no dev trades). */
|
|
4739
|
+
skipped_reason?: "no_attributed_launch";
|
|
4740
|
+
/** dev_trades only, only while archive reads are enabled and the window reaches below the online boundary. */
|
|
4741
|
+
archive?: {
|
|
4742
|
+
read: "ok" | "not_needed" | "failed";
|
|
4743
|
+
served: boolean;
|
|
4744
|
+
reason: DeployerActivityArchiveReason | null;
|
|
4745
|
+
missing_months: string[];
|
|
4746
|
+
months_read: string[];
|
|
4747
|
+
};
|
|
4748
|
+
}
|
|
4749
|
+
export interface DeployerActivityRange {
|
|
4750
|
+
from: string | null;
|
|
4751
|
+
to: string | null;
|
|
4752
|
+
}
|
|
4753
|
+
export type DeployerActivityArchiveReason = "archive_unavailable" | "archive_timeout" | "archive_contract_mismatch" | "archive_ledger_unavailable" | "archive_months_missing";
|
|
4754
|
+
/** Requested vs online vs archive-only history (archive reads are a planned follow-up). */
|
|
4755
|
+
export interface DeployerActivityHistoryPlan {
|
|
4756
|
+
requested: DeployerActivityRange & {
|
|
4757
|
+
source: "since_param" | "plan_default";
|
|
4758
|
+
};
|
|
4759
|
+
effective: DeployerActivityRange & {
|
|
4760
|
+
clamped: boolean;
|
|
4761
|
+
max_days: number | null;
|
|
4762
|
+
};
|
|
4763
|
+
online: DeployerActivityRange & {
|
|
4764
|
+
served: boolean;
|
|
4765
|
+
};
|
|
4766
|
+
archive_only: (DeployerActivityRange & {
|
|
4767
|
+
served: boolean;
|
|
4768
|
+
reason: "archive_reads_not_enabled" | DeployerActivityArchiveReason | null;
|
|
4769
|
+
missing_months?: string[];
|
|
4770
|
+
}) | null;
|
|
4771
|
+
}
|
|
4772
|
+
/**
|
|
4773
|
+
* GET /deployer-hunter/{wallet}/activity — PRO+, KEYED (v1) only. Feature-flagged
|
|
4774
|
+
* server-side (503 `feature_disabled` until enabled).
|
|
4775
|
+
*/
|
|
4776
|
+
export interface DeployerActivityResponse {
|
|
4777
|
+
wallet: string;
|
|
4778
|
+
is_deployer: boolean;
|
|
4779
|
+
deployer: {
|
|
4780
|
+
tier: string | null;
|
|
4781
|
+
first_deploy_at: string | null;
|
|
4782
|
+
last_deploy_at: string | null;
|
|
4783
|
+
} | null;
|
|
4784
|
+
plan: {
|
|
4785
|
+
entitlement: "pro" | "ultra" | "business";
|
|
4786
|
+
window_days: number | null;
|
|
4787
|
+
max_limit: number;
|
|
4788
|
+
history: DeployerActivityHistoryPlan;
|
|
4789
|
+
};
|
|
4790
|
+
window: {
|
|
4791
|
+
since: string | null;
|
|
4792
|
+
until: string;
|
|
4793
|
+
max_days: number | null;
|
|
4794
|
+
applies_to: "event_time";
|
|
4795
|
+
};
|
|
4796
|
+
events: DeployerActivityEvent[];
|
|
4797
|
+
pagination: {
|
|
4798
|
+
limit: number;
|
|
4799
|
+
requested_limit: number;
|
|
4800
|
+
limit_capped: boolean;
|
|
4801
|
+
next_cursor: string | null;
|
|
4802
|
+
has_more: boolean;
|
|
4803
|
+
};
|
|
4804
|
+
coverage: {
|
|
4805
|
+
status: "observed" | "partial";
|
|
4806
|
+
families: Record<string, DeployerActivityFamilyCoverage>;
|
|
4807
|
+
future_events_dropped: number;
|
|
4808
|
+
note: string;
|
|
4809
|
+
};
|
|
4810
|
+
/**
|
|
4811
|
+
* ULTRA/BUSINESS only, absent on PRO. Currently always not_available with
|
|
4812
|
+
* reason identity_stitching_not_released. When released: read from the
|
|
4813
|
+
* offline identity graph, `not_available` with another reason whenever the
|
|
4814
|
+
* graph is stale or fails a consistency check. Never means "operates alone".
|
|
4815
|
+
*/
|
|
4816
|
+
identity?: DeployerActivityIdentityUnavailable | DeployerActivityIdentity;
|
|
4817
|
+
}
|
|
4818
|
+
export interface DeployerActivityIdentityUnavailable {
|
|
4819
|
+
status: "not_available";
|
|
4820
|
+
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";
|
|
4821
|
+
note: string;
|
|
4822
|
+
}
|
|
4823
|
+
export interface DeployerActivityIdentityMember {
|
|
4824
|
+
wallet: string;
|
|
4825
|
+
role: string;
|
|
4826
|
+
confidence: "confirmed" | "strong" | "probable";
|
|
4827
|
+
path_len: number;
|
|
4828
|
+
best_evidence_class: string | null;
|
|
4829
|
+
evidence_count: number;
|
|
4830
|
+
is_anchor: boolean;
|
|
4831
|
+
}
|
|
4832
|
+
export interface DeployerActivityIdentity {
|
|
4833
|
+
status: "linked" | "no_strong_evidence";
|
|
4834
|
+
scope: "builder_one_hop";
|
|
4835
|
+
rule_version: string;
|
|
4836
|
+
identity_id: string | null;
|
|
4837
|
+
/** members + 1 (the asked wallet). */
|
|
4838
|
+
wallet_count: number;
|
|
4839
|
+
anchor: string | null;
|
|
4840
|
+
self: Omit<DeployerActivityIdentityMember, "wallet"> | null;
|
|
4841
|
+
members: DeployerActivityIdentityMember[];
|
|
4842
|
+
related: Array<{
|
|
4843
|
+
wallet: string;
|
|
4844
|
+
evidence_class: string;
|
|
4845
|
+
strength: "context";
|
|
4846
|
+
basis: string;
|
|
4847
|
+
}>;
|
|
4848
|
+
evidence: Array<{
|
|
4849
|
+
wallet_a: string;
|
|
4850
|
+
wallet_b: string;
|
|
4851
|
+
evidence_class: string;
|
|
4852
|
+
direction: "a_to_b" | "symmetric";
|
|
4853
|
+
observed_at: string;
|
|
4854
|
+
time_basis: "chain" | "ingest" | "chain_or_ingest";
|
|
4855
|
+
tx_ids: string[];
|
|
4856
|
+
token_mint: string | null;
|
|
4857
|
+
strength: "confirmed" | "strong" | "probable" | "context";
|
|
4858
|
+
basis: string;
|
|
4859
|
+
rule_version: string;
|
|
4860
|
+
}>;
|
|
4861
|
+
builder: {
|
|
4862
|
+
run_id: number;
|
|
4863
|
+
built_at: string;
|
|
4864
|
+
age_seconds: number;
|
|
4865
|
+
stale_after_seconds: number;
|
|
4866
|
+
hub_floor: number | null;
|
|
4867
|
+
};
|
|
4868
|
+
disclaimer: string;
|
|
4869
|
+
coverage_note: string;
|
|
4870
|
+
}
|
|
4871
|
+
export interface DeployerActivityParams {
|
|
4872
|
+
/** Clamped server-side to 100 (PRO, ULTRA) or 500 (BUSINESS). */
|
|
4873
|
+
limit?: number;
|
|
4874
|
+
cursor?: string;
|
|
4875
|
+
/** Requested window start (ISO 8601); clamped to the plan window. */
|
|
4876
|
+
since?: string;
|
|
4877
|
+
/** Comma list of event types. */
|
|
4878
|
+
types?: string;
|
|
4879
|
+
}
|
|
4493
4880
|
/** Reputation grade — the deployers.tier CHECK set (migration 031). `unranked` = too few deploys to grade, not "bad". (Earlier types listed "neutral" / "spammer", which are Robinhood Chain tiers and never appear here.) */
|
|
4494
4881
|
export type DeployerTier = "elite" | "good" | "moderate" | "rising" | "cold" | "unranked";
|
|
4495
4882
|
export interface DeployerTierCounts {
|