@0xinsider/mcp 2.0.0 → 2.1.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 +12 -4
- package/dist/catalog.generated.d.ts +4 -0
- package/dist/catalog.generated.d.ts.map +1 -1
- package/dist/catalog.generated.js +5 -0
- package/dist/catalog.generated.js.map +1 -1
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/product-cli/client.d.ts +9 -0
- package/dist/product-cli/client.d.ts.map +1 -0
- package/dist/product-cli/client.js +78 -0
- package/dist/product-cli/client.js.map +1 -0
- package/dist/product-cli/index.d.ts.map +1 -1
- package/dist/product-cli/index.js +4 -22
- package/dist/product-cli/index.js.map +1 -1
- package/dist/product-cli/oauth.d.ts +1 -1
- package/dist/product-cli/oauth.d.ts.map +1 -1
- package/dist/product-cli/oauth.js +4 -3
- package/dist/product-cli/oauth.js.map +1 -1
- package/dist/product-cli/storage.d.ts +1 -1
- package/dist/product-cli/storage.d.ts.map +1 -1
- package/dist/product-cli/storage.js +17 -8
- package/dist/product-cli/storage.js.map +1 -1
- package/dist/sdk/client.d.ts +18 -1
- package/dist/sdk/client.d.ts.map +1 -1
- package/dist/sdk/client.js +20 -0
- package/dist/sdk/client.js.map +1 -1
- package/dist/sdk/index.d.ts +1 -1
- package/dist/sdk/index.d.ts.map +1 -1
- package/dist/sdk/schema.d.ts +223 -6
- package/dist/sdk/schema.d.ts.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/read-parity.d.ts +1 -0
- package/dist/tools/read-parity.d.ts.map +1 -1
- package/dist/tools/read-parity.js +33 -0
- package/dist/tools/read-parity.js.map +1 -1
- package/package.json +1 -1
package/dist/sdk/schema.d.ts
CHANGED
|
@@ -128,6 +128,37 @@ export type Candle = {
|
|
|
128
128
|
/** Close price in provider [0, 1] units (last observed point in the bucket). */
|
|
129
129
|
c: number;
|
|
130
130
|
};
|
|
131
|
+
/** Model-wide readiness, read in the same database snapshot as category_records. Individual category rows retain their own status. */
|
|
132
|
+
export type CategorySkillModelReadiness = {
|
|
133
|
+
status: "live" | "insufficient" | "stale" | "unknown" | "degraded";
|
|
134
|
+
model_version: string;
|
|
135
|
+
taxonomy_version: string;
|
|
136
|
+
observation_started_at: string;
|
|
137
|
+
as_of: string;
|
|
138
|
+
source_last_success_at: string | null;
|
|
139
|
+
};
|
|
140
|
+
/** Forward-only category evidence from observed Polymarket taker fills. Status is category eligibility, not a global letter grade or a guarantee of positive edge. Scores are probability differences. Unknown and degraded rows withhold scores. Coverage is partial; observation counts are not lifetime market counts. */
|
|
141
|
+
export type CategorySkillV2 = {
|
|
142
|
+
status: "live" | "insufficient" | "stale" | "unknown" | "degraded";
|
|
143
|
+
model_version: string;
|
|
144
|
+
taxonomy_version: string | null;
|
|
145
|
+
platform: "polymarket";
|
|
146
|
+
scope: "observed_goldsky_primary_taker_fill";
|
|
147
|
+
source_coverage: "partial_whale_threshold_fills" | "graded_wallet_fills";
|
|
148
|
+
canonical_category: string;
|
|
149
|
+
as_of: string;
|
|
150
|
+
source_last_success_at: string | null;
|
|
151
|
+
observation_started_at: string;
|
|
152
|
+
latest_observation_at: string | null;
|
|
153
|
+
independent_event_count: number;
|
|
154
|
+
resolved_condition_count: number;
|
|
155
|
+
unresolved_observation_count: number;
|
|
156
|
+
edge_mean: number | null;
|
|
157
|
+
edge_sd: number | null;
|
|
158
|
+
edge_se: number | null;
|
|
159
|
+
edge_lower_95: number | null;
|
|
160
|
+
brier_event_avg: number | null;
|
|
161
|
+
};
|
|
131
162
|
export type ContentSearchResult = {
|
|
132
163
|
/** Backend-owned stable editorial content identifier. */
|
|
133
164
|
content_id: string;
|
|
@@ -191,6 +222,8 @@ export type CounterpartyParticipant = {
|
|
|
191
222
|
resolution_source?: string | null;
|
|
192
223
|
display_name?: string | null;
|
|
193
224
|
grade?: string | null;
|
|
225
|
+
/** Latest nonfuture recorded wallet-wide trade time for the tracked trader supplying this participant's grade. Omitted when unavailable; not the receipt time or the owner EOA's activity. Trader context is read with the response and is not frozen by execution membership snapshots. */
|
|
226
|
+
last_traded_at?: string;
|
|
194
227
|
/** 0xinsider profile path segment for this participant, present only when the execution wallet has a tracked trader: `@<username>` when that username resolves to the trader alone, otherwise the trader's lowercase wallet. Percent-encode the part after `@` and append to `https://0xinsider.com/profile/`. */
|
|
195
228
|
profile_segment?: string | null;
|
|
196
229
|
maker_fill_count: number;
|
|
@@ -363,12 +396,19 @@ export type ExportSourceRange = {
|
|
|
363
396
|
latest_market_activity_at?: string | null;
|
|
364
397
|
};
|
|
365
398
|
export type ExportVolumeReconciliation = {
|
|
399
|
+
/** Verified full-history both-sides USD cash volume. Null without coverage; the local activity numerator may cover only a subset of history. */
|
|
366
400
|
provider_lifetime_volume?: number | null;
|
|
367
401
|
exported_activity_volume: number;
|
|
368
402
|
exported_market_cost_basis: number;
|
|
369
403
|
provider_activity_volume_gap?: number | null;
|
|
370
404
|
activity_volume_coverage?: number | null;
|
|
371
405
|
};
|
|
406
|
+
/** Current category evidence, independent of the global grade. Pick of the Day stamps only the served display roster; frozen entry snapshots remain unchanged. */
|
|
407
|
+
export type HolderCategoryEvidence = {
|
|
408
|
+
status: "live" | "insufficient" | "stale" | "unknown" | "degraded";
|
|
409
|
+
canonical_category?: string;
|
|
410
|
+
skill?: CategorySkillV2;
|
|
411
|
+
};
|
|
372
412
|
export type LargeExportPolicy = {
|
|
373
413
|
mode: "v1_async_export";
|
|
374
414
|
current_internal_route: string;
|
|
@@ -396,10 +436,35 @@ export type LargePosition = {
|
|
|
396
436
|
id: string;
|
|
397
437
|
/** Provider discriminator. Always polymarket. */
|
|
398
438
|
platform: "polymarket";
|
|
399
|
-
/**
|
|
439
|
+
/** Provider currentValue in USD for the outcome named by outcome_label / token_id, and for that outcome only. Null means the provider supplied no value for this leg, not a zero position. combined_value_usd carries the wallet's whole-market total. */
|
|
400
440
|
total_size_usd?: number | null;
|
|
401
|
-
/** Provider
|
|
441
|
+
/** Provider unrealized mark-to-market P&L (Polymarket cashPnl) for that same one outcome. Null means unavailable, not break-even. */
|
|
402
442
|
position_unrealized_pnl?: number | null;
|
|
443
|
+
/** The wallet's currentValue across every outcome it holds in this market. Equals total_size_usd unless is_two_sided is true, and is the value the feed ranked this row by. */
|
|
444
|
+
combined_value_usd?: number | null;
|
|
445
|
+
/** The wallet's unrealized P&L across every outcome it holds in this market. Equals position_unrealized_pnl unless is_two_sided is true. */
|
|
446
|
+
combined_unrealized_pnl?: number | null;
|
|
447
|
+
/** Whether the wallet holds shares on both outcomes of this market. */
|
|
448
|
+
is_two_sided: boolean;
|
|
449
|
+
/** Every outcome the wallet holds, primary first. holdings[0] restates the top-level per-outcome fields; a further entry is a leg those fields do not describe. No amount here is a share-proportional slice of a both-sides total. */
|
|
450
|
+
holdings: ({
|
|
451
|
+
/** 0 = Yes, 1 = No. */
|
|
452
|
+
outcome_index: number;
|
|
453
|
+
/** The market's label for this outcome. */
|
|
454
|
+
outcome_label?: string | null;
|
|
455
|
+
/** Polymarket CLOB token id for this outcome; null for an unsynced market. */
|
|
456
|
+
token_id: string | null;
|
|
457
|
+
/** Shares held on this outcome. */
|
|
458
|
+
share_count: number;
|
|
459
|
+
/** Provider average entry price for this outcome. */
|
|
460
|
+
avg_entry_price?: number | null;
|
|
461
|
+
/** Provider mark price for this outcome. */
|
|
462
|
+
current_price?: number | null;
|
|
463
|
+
/** Provider currentValue for this outcome. Null means unavailable, not zero. */
|
|
464
|
+
value_usd?: number | null;
|
|
465
|
+
/** Provider unrealized P&L for this outcome. Null means unavailable, not break-even. */
|
|
466
|
+
unrealized_pnl?: number | null;
|
|
467
|
+
})[];
|
|
403
468
|
/** Live share count for this position. */
|
|
404
469
|
share_count: number;
|
|
405
470
|
/** Volume-weighted entry price. */
|
|
@@ -412,7 +477,7 @@ export type LargePosition = {
|
|
|
412
477
|
token_id?: string | null;
|
|
413
478
|
/** Legs collapsed into this representative row for one (wallet, event, outcome side) group. 1 means standalone. */
|
|
414
479
|
event_leg_count: number;
|
|
415
|
-
/**
|
|
480
|
+
/** Sum of the collapsed sibling legs' own holding values for this (wallet, event) group; equals total_size_usd when event_leg_count = 1, and null when any member's value is unknown. */
|
|
416
481
|
event_total_value_usd?: number | null;
|
|
417
482
|
first_seen_at: string;
|
|
418
483
|
last_updated_at: string;
|
|
@@ -447,8 +512,9 @@ export type LeaderboardEntry = {
|
|
|
447
512
|
score?: number | null;
|
|
448
513
|
/** All-time P&L in USD (total_pnl), including unrealized open positions. Kept for back-compat; prefer realized_pnl for the banked figure. */
|
|
449
514
|
pnl?: number | null;
|
|
450
|
-
/**
|
|
515
|
+
/** Native realized P&L plus credited maker and taker rebates in USD, with fees already included. The exact numeric value is truncated toward zero to cents before JSON conversion. Wallets without a native snapshot retain their historical stored realized P&L. Omitted when the native snapshot has no net realized value. */
|
|
451
516
|
realized_pnl?: number | null;
|
|
517
|
+
/** Full-history both-sides USD cash volume from a verified Polymarket user-volume observation. Omitted without coverage. */
|
|
452
518
|
volume?: number | null;
|
|
453
519
|
markets_traded?: number | null;
|
|
454
520
|
win_rate?: number | null;
|
|
@@ -631,8 +697,26 @@ export type PickHolder = {
|
|
|
631
697
|
shares: number;
|
|
632
698
|
/** This wallet's win rate in the pick's canonical category bucket (the pick's `category` field, e.g. Basketball -- label the rate with it, never with the narrower `display_category` league): the share of the wallet's resolved markets in that category whose realized P&L closed positive, as a 0..1 fraction. Present only with `category_win_rate_status` = `measured`, on `display_holders` entries, and only when the wallet clears the resolved-market floor; recomputed at serve time from the current category read model, not frozen with the pick. Absent on `holders` entries, legacy rows, and payloads predating the field. */
|
|
633
699
|
category_win_rate?: number | null;
|
|
700
|
+
/** The two counts `category_win_rate` is the ratio of, read from the same row: `wins / decided` equals the rate. Counts every resolved Polymarket market the wallet traded in the pick's canonical category, at any position size; the counts are rebuilt daily. Present only with `category_win_rate_status` = `measured`; absent otherwise and on payloads predating the field. */
|
|
701
|
+
category_win_record?: {
|
|
702
|
+
/** Resolved markets in the category that this wallet closed with a profit. */
|
|
703
|
+
wins: number;
|
|
704
|
+
/** Resolved markets in the category that this wallet closed with a profit or a loss. A market resolved at zero realized P&L is in neither count. */
|
|
705
|
+
decided: number;
|
|
706
|
+
};
|
|
634
707
|
/** Why `category_win_rate` is present or absent on a `display_holders` entry: `measured` (rate present), `not_enough_data` (the wallet is below the resolved-market floor of 5 in the category), or `unavailable` (the annotation read failed; retry later). Absent entirely on `holders` entries, legacy rows, and payloads predating the field -- absence means the roster was never annotated, not a small sample. */
|
|
635
708
|
category_win_rate_status?: "measured" | "not_enough_data" | "unavailable";
|
|
709
|
+
/** Days since this wallet's first trade. Stamped at serve time from the wallet's current trader record, never frozen with the pick. The five badge fields are present together, and only for a wallet that carries at least one badge; all absent means no badge, or a body cached before the fields shipped. */
|
|
710
|
+
wallet_age_days?: number | null;
|
|
711
|
+
/** True when the wallet's first trade was under 30 days ago. Stamped at serve time from the wallet's current trader record, never frozen with the pick. The five badge fields are present together, and only for a wallet that carries at least one badge; all absent means no badge, or a body cached before the fields shipped. */
|
|
712
|
+
is_new_wallet?: boolean;
|
|
713
|
+
/** Distinct markets this wallet has traded. Stamped at serve time from the wallet's current trader record, never frozen with the pick. The five badge fields are present together, and only for a wallet that carries at least one badge; all absent means no badge, or a body cached before the fields shipped. */
|
|
714
|
+
markets_traded?: number | null;
|
|
715
|
+
/** True when the wallet has traded 10,000 or more distinct markets, the breadth floor 0xinsider uses to mark automated wallets. It is a breadth rule, not proof of automation. Stamped at serve time from the wallet's current trader record, never frozen with the pick. The five badge fields are present together, and only for a wallet that carries at least one badge; all absent means no badge, or a body cached before the fields shipped. */
|
|
716
|
+
is_bot?: boolean;
|
|
717
|
+
/** The wallet's X handle from its Polymarket profile, normalized to 1-15 characters of [A-Za-z0-9_] with no `@`. Link it as `https://x.com/<handle>`. Stamped at serve time from the wallet's current trader record, never frozen with the pick. The five badge fields are present together, and only for a wallet that carries at least one badge; all absent means no badge, or a body cached before the fields shipped. */
|
|
718
|
+
x_username?: string | null;
|
|
719
|
+
category_evidence?: HolderCategoryEvidence;
|
|
636
720
|
};
|
|
637
721
|
export type PickOfTheDay = {
|
|
638
722
|
/** Always 'full' for an authenticated Pro key. */
|
|
@@ -861,6 +945,25 @@ export type PickOfTheDayArchiveEntry = {
|
|
|
861
945
|
/** Backend-formatted signed unit score, present exactly when unit_score is present. */
|
|
862
946
|
unit_score_display?: string;
|
|
863
947
|
};
|
|
948
|
+
/** The frozen identity of the pick, exactly as the hash was taken over it. Served byte for byte as it was hashed -- keys sorted by UTF-8 byte value, no insignificant whitespace -- so a verifier concatenates and hashes with nothing to reconstruct. Property order below is the wire order. The outcome is deliberately NOT part of it: surviving a corrected outcome unchanged is the case the commitment exists for. Worked example: {"backed_price":"0.545000","condition_id":"0xabc","kickoff":"2026-09-20T23:05:00Z","pick_date":"2026-09-20","pick_outcome_index":1,"pick_outcome_label":"Lakers","pick_rank":1,"platform":"polymarket"} with the nonce 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f hashes to 44d18fa5e2aa3a2bf3c971dcc9317c8ccbdfd5480a4773b6d8ffd5fbeeea84dc. */
|
|
949
|
+
export type PickOfTheDayCommitmentPayload = {
|
|
950
|
+
/** Frozen pre-game price of the backed side, 0..1, as the plain decimal text of the stored NUMERIC at full stored precision, trailing zeros included. A string, never a number: a float round-trip would change the bytes and break the hash. Deliberately not normalized -- 0.545000 stays "0.545000". */
|
|
951
|
+
backed_price: string;
|
|
952
|
+
/** Provider condition id of the backed market. */
|
|
953
|
+
condition_id: string;
|
|
954
|
+
/** Frozen provider kickoff, whole seconds, UTC, literal Z. Fixed precision, never a shortest-lossless rendering. */
|
|
955
|
+
kickoff: string;
|
|
956
|
+
/** ET product day (YYYY-MM-DD). */
|
|
957
|
+
pick_date: string;
|
|
958
|
+
/** Index of the backed outcome within the market. */
|
|
959
|
+
pick_outcome_index: 0 | 1;
|
|
960
|
+
/** Frozen display label of the backed outcome. */
|
|
961
|
+
pick_outcome_label: string;
|
|
962
|
+
/** 1-based daily slot. */
|
|
963
|
+
pick_rank: number;
|
|
964
|
+
/** Provider platform. */
|
|
965
|
+
platform: string;
|
|
966
|
+
};
|
|
864
967
|
export type PickOfTheDayHitRate = {
|
|
865
968
|
/** Number of decided picks that won. */
|
|
866
969
|
wins: number;
|
|
@@ -934,6 +1037,109 @@ export type PickOfTheDayHitRate = {
|
|
|
934
1037
|
hit_rate_pct: number;
|
|
935
1038
|
}[];
|
|
936
1039
|
};
|
|
1040
|
+
/** The commitment ledger: every published pick, ascending, in the state its commitment is actually in. The counts are derived from entries in the same pass that builds it. */
|
|
1041
|
+
export type PickOfTheDayLedger = {
|
|
1042
|
+
/** One entry per published (pick_date, pick_rank), ascending by pick_date then pick_rank. */
|
|
1043
|
+
entries: PickOfTheDayLedgerEntry[];
|
|
1044
|
+
/** Number of entries, all states included. */
|
|
1045
|
+
entry_count: number;
|
|
1046
|
+
/** Entries committed to and not yet settled. */
|
|
1047
|
+
sealed_count: number;
|
|
1048
|
+
/** Entries committed to and verifiable now. */
|
|
1049
|
+
opened_count: number;
|
|
1050
|
+
/** Entries carrying no commitment, so provable by nothing: the honest size of the unprovable part of the record. It only stops growing; no pick is ever retro-sealed. */
|
|
1051
|
+
uncommitted_count: number;
|
|
1052
|
+
};
|
|
1053
|
+
/** One ledger entry. Read `state` to know which shape you have; the three are disjoint. */
|
|
1054
|
+
export type PickOfTheDayLedgerEntry = PickOfTheDayLedgerSealedEntry | PickOfTheDayLedgerOpenedEntry | PickOfTheDayLedgerUncommittedEntry;
|
|
1055
|
+
/** A settled pick whose commitment is open: the nonce plus the exact payload the hash was taken over. Concatenate the payload bytes as received with the decoded nonce and sha256 them to reproduce commitment_hash. */
|
|
1056
|
+
export type PickOfTheDayLedgerOpenedEntry = {
|
|
1057
|
+
state: "opened";
|
|
1058
|
+
/** ET product day the pick belongs to (YYYY-MM-DD). */
|
|
1059
|
+
pick_date: string;
|
|
1060
|
+
/** 1-based daily slot within the product day. */
|
|
1061
|
+
pick_rank: number;
|
|
1062
|
+
/** sha256(canonical_json(payload) || nonce), lowercase hex, no 0x prefix. Publishable the moment the pick releases: without the nonce it is not invertible. */
|
|
1063
|
+
commitment_hash: string;
|
|
1064
|
+
/** The 32-byte nonce the hash was taken over, lowercase hex, no 0x prefix. Secret while the pick is live: a pick payload is low entropy, so a published nonce on a live pick would hand out the backed side. */
|
|
1065
|
+
commitment_nonce: string;
|
|
1066
|
+
/** The construction the hash was taken with, stated in the response so a verifier never has to guess the serialization. */
|
|
1067
|
+
commitment_algo: "sha256(canonical_json(payload)||nonce)";
|
|
1068
|
+
/** When the hash was frozen. Always strictly before kickoff: a pick that reaches kickoff unsealed stays unsealed forever, because a seal written after the game started would be a backdated proof. */
|
|
1069
|
+
sealed_at: string;
|
|
1070
|
+
/** When outcome was LAST written to a settled value, or null when that instant is unknown. It moves with a corrected market re-mapping an already-settled pick, while commitment_hash stays untouched -- which is how a mirror that keeps history sees a correction. */
|
|
1071
|
+
resolved_at: string | null;
|
|
1072
|
+
/** The frozen provider kickoff in the canonical payload form: whole seconds, UTC, literal Z. This exact string reappears inside payload.kickoff when the pick opens. */
|
|
1073
|
+
kickoff: string;
|
|
1074
|
+
payload: PickOfTheDayCommitmentPayload;
|
|
1075
|
+
/** How the pick settled. Never pending: a pending pick is a sealed entry. */
|
|
1076
|
+
outcome: "win" | "loss" | "void";
|
|
1077
|
+
/** Frozen matchup, for a reader. */
|
|
1078
|
+
matchup: string;
|
|
1079
|
+
/** Frozen canonical sport bucket used for selection calibration (Basketball, MMA), not the exact public league identity; the archive owns that. */
|
|
1080
|
+
category: string;
|
|
1081
|
+
/** The pick's public page. */
|
|
1082
|
+
permalink: string;
|
|
1083
|
+
};
|
|
1084
|
+
/** A published pick that has not settled. Carries the commitment and nothing that states a side or a price: no nonce, no payload, no outcome. Publishable the instant the pick releases. */
|
|
1085
|
+
export type PickOfTheDayLedgerSealedEntry = {
|
|
1086
|
+
state: "sealed";
|
|
1087
|
+
/** ET product day the pick belongs to (YYYY-MM-DD). */
|
|
1088
|
+
pick_date: string;
|
|
1089
|
+
/** 1-based daily slot within the product day. */
|
|
1090
|
+
pick_rank: number;
|
|
1091
|
+
/** sha256(canonical_json(payload) || nonce), lowercase hex, no 0x prefix. Publishable the moment the pick releases: without the nonce it is not invertible. */
|
|
1092
|
+
commitment_hash: string;
|
|
1093
|
+
/** The construction the hash was taken with, stated in the response so a verifier never has to guess the serialization. */
|
|
1094
|
+
commitment_algo: "sha256(canonical_json(payload)||nonce)";
|
|
1095
|
+
/** When the hash was frozen. Always strictly before kickoff: a pick that reaches kickoff unsealed stays unsealed forever, because a seal written after the game started would be a backdated proof. */
|
|
1096
|
+
sealed_at: string;
|
|
1097
|
+
/** The frozen provider kickoff in the canonical payload form: whole seconds, UTC, literal Z. This exact string reappears inside payload.kickoff when the pick opens. */
|
|
1098
|
+
kickoff: string;
|
|
1099
|
+
/** The pick's public page. */
|
|
1100
|
+
permalink: string;
|
|
1101
|
+
};
|
|
1102
|
+
/** A published pick with no commitment: it predates the scheme, or it reached kickoff unsealed. Nothing here is evidence of WHEN the pick was made. It is emitted rather than skipped, because a ledger with holes where the unprovable picks were would silently flatter the record. Once the pick settles, payload names its market, side and price, so the outcome can still be checked against the market's own resolution. */
|
|
1103
|
+
export type PickOfTheDayLedgerUncommittedEntry = {
|
|
1104
|
+
state: "uncommitted";
|
|
1105
|
+
/** ET product day the pick belongs to (YYYY-MM-DD). */
|
|
1106
|
+
pick_date: string;
|
|
1107
|
+
/** 1-based daily slot within the product day. */
|
|
1108
|
+
pick_rank: number;
|
|
1109
|
+
/** Always true: this pick has no commitment and never will. */
|
|
1110
|
+
pre_commitment: true;
|
|
1111
|
+
/** How the pick settled, or pending. */
|
|
1112
|
+
outcome: "pending" | "win" | "loss" | "void";
|
|
1113
|
+
/** Frozen matchup, for a reader. */
|
|
1114
|
+
matchup: string;
|
|
1115
|
+
/** Frozen canonical sport bucket used for selection calibration (Basketball, MMA), not the exact public league identity; the archive owns that. */
|
|
1116
|
+
category: string;
|
|
1117
|
+
/** When outcome was LAST written to a settled value, or null when that instant is unknown. It moves with a corrected market re-mapping an already-settled pick, while commitment_hash stays untouched -- which is how a mirror that keeps history sees a correction. */
|
|
1118
|
+
resolved_at: string | null;
|
|
1119
|
+
/** The pick's market, side and price once it has settled; null while it is pending, and null for a settled pick whose stored row lacks one of these columns. Not hashed: nothing was committed over these values, which is what pre_commitment: true says. */
|
|
1120
|
+
payload: PickOfTheDayUncommittedPayload | null;
|
|
1121
|
+
/** The pick's public page. */
|
|
1122
|
+
permalink: string;
|
|
1123
|
+
};
|
|
1124
|
+
/** A settled uncommitted pick's market, side and price. The same eight fields as PickOfTheDayCommitmentPayload, in the same key order, so a settled pick's side and price sit under payload whatever the entry's state. It is NOT a commitment: no hash was taken over it before the game, and it proves nothing about when the pick was made. */
|
|
1125
|
+
export type PickOfTheDayUncommittedPayload = {
|
|
1126
|
+
/** Frozen pre-game price of the backed side, 0..1, as the plain decimal text of the stored NUMERIC at full stored precision, trailing zeros included -- rendered exactly as the commitment payload renders it. */
|
|
1127
|
+
backed_price: string;
|
|
1128
|
+
/** Provider condition id of the backed market. */
|
|
1129
|
+
condition_id: string;
|
|
1130
|
+
/** Frozen provider kickoff, UTC, literal Z; null when no kickoff was frozen. Whole seconds render exactly as the commitment payload does; a sub-second instant keeps its fraction rather than being truncated, since nothing here is hashed. */
|
|
1131
|
+
kickoff: string | null;
|
|
1132
|
+
/** ET product day (YYYY-MM-DD). */
|
|
1133
|
+
pick_date: string;
|
|
1134
|
+
/** Index of the backed outcome within the market. */
|
|
1135
|
+
pick_outcome_index: 0 | 1;
|
|
1136
|
+
/** Frozen display label of the backed outcome. */
|
|
1137
|
+
pick_outcome_label: string;
|
|
1138
|
+
/** 1-based daily slot. */
|
|
1139
|
+
pick_rank: number;
|
|
1140
|
+
/** Provider platform. */
|
|
1141
|
+
platform: string;
|
|
1142
|
+
};
|
|
937
1143
|
/** Provider-first sports context for a Pick of the Day market: team crests, league branding, and live score. Team logos and league logo are provider-owned (Polymarket /teams crests for clubs, country flags for national teams and tennis players); no local derivation. */
|
|
938
1144
|
export type PickSportsContext = {
|
|
939
1145
|
/** League or competition display name (e.g. "Premier League"). */
|
|
@@ -1485,7 +1691,7 @@ export type Trader = {
|
|
|
1485
1691
|
rank?: number | null;
|
|
1486
1692
|
pnl: {
|
|
1487
1693
|
total?: number | null;
|
|
1488
|
-
/** For pnl.realized, expand=trust marks a matching native accounting snapshot as computed: native Polymarket realized P&L plus credited maker and taker rebates, with fees already included. Without a matching native accounting snapshot, pnl.realized is omitted and its trust metadata is unavailable. Raw total P&L is never substituted for realized P&L. */
|
|
1694
|
+
/** For pnl.realized, expand=trust marks a matching native accounting snapshot as computed: native Polymarket realized P&L plus credited maker and taker rebates, with fees already included. The exact numeric value is truncated toward zero to cents before conversion to a JSON number. Without a matching native accounting snapshot, pnl.realized is omitted and its trust metadata is unavailable. Raw total P&L is never substituted for realized P&L. */
|
|
1489
1695
|
realized?: number | null;
|
|
1490
1696
|
unrealized?: number | null;
|
|
1491
1697
|
/** DEPRECATED, always null. The local pnl_7d rollup over-counted P&L (#5416 class) and is no longer emitted. Read the provider-native weekly window from GET /api/trader/{address}/profile-summary instead. */
|
|
@@ -1497,6 +1703,7 @@ export type Trader = {
|
|
|
1497
1703
|
markets_traded?: number | null;
|
|
1498
1704
|
win_rate?: number | null;
|
|
1499
1705
|
daily_win_rate?: number | null;
|
|
1706
|
+
/** Full-history both-sides USD cash volume from Polymarket user-volume. Omitted without a verified observation; never leaderboard shares. Volume freshness is unknown in this DTO and does not use synced_at. */
|
|
1500
1707
|
total_volume?: number | null;
|
|
1501
1708
|
};
|
|
1502
1709
|
strategy?: {
|
|
@@ -1533,6 +1740,9 @@ export type Trader = {
|
|
|
1533
1740
|
sync_status?: string | null;
|
|
1534
1741
|
/** Field-level trust metadata. Present only when expand=trust or expand[]=trust is requested. */
|
|
1535
1742
|
trust?: TraderTrust;
|
|
1743
|
+
/** Current evidence for observed and known categories (expand=categories or expand[]=categories). Omitted unless expanded. Includes insufficient, stale, unknown and degraded rows; absence of a category is not proof of skill. The global grade is unchanged. */
|
|
1744
|
+
category_records?: CategorySkillV2[];
|
|
1745
|
+
category_skill_model?: CategorySkillModelReadiness;
|
|
1536
1746
|
};
|
|
1537
1747
|
export type TraderContext = {
|
|
1538
1748
|
trader: Trader;
|
|
@@ -1698,6 +1908,8 @@ export type TraderTrust = {
|
|
|
1698
1908
|
last_active: TrustMetadata;
|
|
1699
1909
|
synced_at: TrustMetadata;
|
|
1700
1910
|
sync_status: TrustMetadata;
|
|
1911
|
+
category_records: TrustMetadata;
|
|
1912
|
+
category_skill_model: TrustMetadata;
|
|
1701
1913
|
};
|
|
1702
1914
|
export type TrendingWallet = {
|
|
1703
1915
|
/** Prefixed trader ID (`trd_...`). */
|
|
@@ -1712,7 +1924,10 @@ export type TrendingWallet = {
|
|
|
1712
1924
|
platform: "polymarket";
|
|
1713
1925
|
/** Polymarket weekly/monthly P&L for the wallet in USD, taken from Polymarket's canonical leaderboard (data-api.polymarket.com/v1/leaderboard?timePeriod=week|month&orderBy=PNL). This is the ranking axis and the rows are returned in Polymarket's by-PNL order; it is the provider's number, not a locally summed realized-leaf total. */
|
|
1714
1926
|
trending_pnl_usd: number;
|
|
1715
|
-
|
|
1927
|
+
/** Both-sides cash volume over the window in USD, from Polymarket GET /v2/user-volume (volume_usdc). Omitted when Polymarket served no volume for the wallet: an absent observation, never zero. Polymarket tracks volume in whole UTC days, so this window is the whole-day span covering the requested one, which is not the exact span trending_pnl_usd was scored over. */
|
|
1928
|
+
window_volume_usd?: number;
|
|
1929
|
+
/** Both-sides traded volume over the window in SHARES, from the Polymarket leaderboard row, whose own schema states the figure is never USD. Omitted when the row carried none. */
|
|
1930
|
+
window_volume_shares?: number;
|
|
1716
1931
|
window_markets_traded: number;
|
|
1717
1932
|
/** Distinct in-window UTC trade days from our trades (0 if the winner is not in our DB). */
|
|
1718
1933
|
window_trade_days: number;
|
|
@@ -1969,6 +2184,7 @@ export interface OperationData {
|
|
|
1969
2184
|
getMonthlyReportSnapshot: ReportSnapshot;
|
|
1970
2185
|
getPickOfTheDay: PickOfTheDay;
|
|
1971
2186
|
getPickOfTheDayArchive: PickOfTheDayArchive;
|
|
2187
|
+
getPickOfTheDayLedger: PickOfTheDayLedger;
|
|
1972
2188
|
getPlatforms: Platforms;
|
|
1973
2189
|
getPositionTimeline: PositionTimelineEvent[];
|
|
1974
2190
|
getPositionTimelineById: PositionTimelineEvent[];
|
|
@@ -2106,6 +2322,7 @@ export interface OperationQuery {
|
|
|
2106
2322
|
};
|
|
2107
2323
|
getPickOfTheDay: Record<string, never>;
|
|
2108
2324
|
getPickOfTheDayArchive: Record<string, never>;
|
|
2325
|
+
getPickOfTheDayLedger: Record<string, never>;
|
|
2109
2326
|
getPlatforms: Record<string, never>;
|
|
2110
2327
|
getPositionTimeline: {
|
|
2111
2328
|
/** Market condition_id. One timeline per (trader, market). */
|