@predge/whale-data-mcp 0.1.10 → 0.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/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # @predge/whale-data-mcp
2
2
 
3
- MCP server that exposes the **Predge Whale Data** x402 API (Polymarket whale
4
- trades + smart-money signals) as tools. Payment is handled **under the hood**:
3
+ MCP server that exposes the **Predge** API at `https://api.predge.io`
4
+ (Polymarket whale trades, smart-money signals, signed attestations, and free
5
+ signed UMA settlement risk) as tools. Payment is handled **under the hood**:
5
6
  each paid tool call signs a USDC micropayment via an x402 client — the agent
6
7
  just calls the tool and gets data back. You supply a funded buyer key.
7
8
 
@@ -38,7 +39,8 @@ claude mcp add predge-whale-data \
38
39
  }
39
40
  ```
40
41
 
41
- That's it — the agent gets **19 tools** (18 paid routes + 1 free discovery tool).
42
+ That's it — the agent gets **21 tools** (18 paid routes + 3 free tools: discovery,
43
+ settlement risk, record verification). The free tools need no key at all.
42
44
  No API keys, no account; the buyer key pays USDC per call on Base or Solana. Fund it
43
45
  with a few dollars of USDC (the facilitator pays gas, so no ETH/SOL needed).
44
46
 
@@ -70,10 +72,13 @@ integration guide (ElizaOS, Claude, raw x402 for non-MCP stacks, spend caps): **
70
72
  | Tool | Price | Returns |
71
73
  |---|---|---|
72
74
  | `predge_list_endpoints` | **free** | API description + every endpoint with its price/schema (call first) |
75
+ | `predge_settlement_risk` | **free** | Signed live UMA settlement risk for one Polymarket market, read from Polygon: UMA state, current proposal + challenge window, every dispute, UMA-vote status, bulletin-board updates, on-chain resolution, `risk_level` (ok\|watch\|caution\|resolved), `segment_dispute_rate`, `settlement_estimate_available`. The `settlement_estimate` itself is paid: `predge_settlement_estimate`. The tool re-verifies the ed25519 signature and returns `{ verification, record }`. Param: `market` (condition id, numeric market id, or slug). 60 req/min per IP |
76
+ | `predge_settlement_estimate` | ~$0.02 | Same signed settlement-risk record **with** `settlement_estimate` (statistic from 2026 Polymarket UMA disputes, not advice). `GET /v1/settlement-risk/:market/estimate`. Check `settlement_estimate_available` in the free record first. Returns `{ verification, record }`. Param: `market` |
77
+ | `predge_verify_record` | **free** | Offline check of any Predge signed record (`predge-attest-v1`): `C(payload) == canonical`, `sha256(canonical) == content_hash`, ed25519 signature, `envelope_signature`, and signer listed active in [`predge-keys.json`](https://api.predge.io/.well-known/predge-keys.json). Param: `record` (JSON string) |
73
78
  | `predge_whales_latest` | ~$0.005 | Latest whale trades ≥$10k (15-min delay). Param: `limit` (1-100) |
74
79
  | `predge_whale_market` | ~$0.01 | 7-day whale activity for one market. Param: `condition_id` |
75
80
  | `predge_signals_daily` | ~$0.02 | 24h digest: top markets, net flow, largest bets |
76
- | `predge_wallets_leaderboard` | ~$0.01 | Wallets by realized win rate. Params: `window` (7d\|30d), `limit` |
81
+ | `predge_wallets_leaderboard` | ~$0.01 | Wallets ranked by edge over resolved markets. Params: `window` (7d\|30d), `limit` |
77
82
  | `predge_wallet_profile` | ~$0.01 | Wallet score, win rates, categories, last 20 trades. Param: `address` |
78
83
  | `predge_markets_movers` | ~$0.005 | Largest YES-price moves. Param: `window` (1h\|6h\|24h) |
79
84
  | `predge_signals_consensus` | ~$0.03 | Edge-verified smart-money net flow + direction per market |
@@ -89,9 +94,20 @@ integration guide (ElizaOS, Claude, raw x402 for non-MCP stacks, spend caps): **
89
94
  | `predge_wallets_compare` | ~$0.02 | Compare 2-10 wallets side-by-side + market overlap. Param: `addresses` |
90
95
  | `predge_market_history` | ~$0.01 | Price/volume history for one market. Params: `condition_id`, `window` (7d\|30d\|all) |
91
96
 
92
- Every paid result includes a note with the on-chain settle tx. The two Kalshi routes
93
- (anonymous institutional flow) are not yet exposed as tools — they activate when Kalshi
94
- ingest is enabled; raw x402/HTTP already reaches them.
97
+ Every paid result includes a note with the on-chain settle tx. Not exposed as tools
98
+ (raw x402/HTTP reaches them; see `predge_list_endpoints`): the Kalshi flow routes, the
99
+ `/v1/markets/:id/edge` polling pulse, the `/v1/onchain/*` routes, and the signed-calls /
100
+ stakes / track-record routes. The old `/v1/signal` route is paused (503) and has no tool.
101
+
102
+ ### Verifying signed records yourself
103
+
104
+ Every Predge signed record carries an `attestation` envelope. The rule is published at
105
+ [data.predge.io/canonicalization.md](https://data.predge.io/canonicalization.md):
106
+ `canonical` is the payload as JSON with keys sorted at every level and no whitespace;
107
+ `content_hash = sha256(canonical)`; `signature` is ed25519 over the UTF-8 bytes of
108
+ `canonical`; the signer must be an active key in
109
+ `https://api.predge.io/.well-known/predge-keys.json` (attestation kid `13fa3d18a369e6c7`).
110
+ `src/verify.ts` implements this with `node:crypto` only.
95
111
 
96
112
  ## Config (env)
97
113
 
@@ -107,11 +123,15 @@ facilitator pays the network fee on either rail — the wallet needs USDC only.
107
123
  | `X402_NETWORK` | `base` | Base network: `base` = mainnet (real USDC), `base-sepolia` only against a testnet deployment. |
108
124
  | `X402_SOLANA_NETWORK` | matches `X402_NETWORK` | `solana` (mainnet) or `solana-devnet`. |
109
125
  | `SOLANA_RPC_URL` | @x402/svm default | Optional custom Solana RPC (public mainnet-beta is rate-limited). |
110
- | `PREDGE_BASE_URL` | prod API | `https://x402-api-production-266e.up.railway.app`. Override to point at another deployment. |
126
+ | `PREDGE_BASE_URL` | `https://api.predge.io` | Override to point at another deployment. `PREDGE_API_URL` is accepted as an alias. Signatures are always checked against the key set on `api.predge.io`. |
111
127
  | `MAX_PRICE_USD` | `0.05` | Any call priced above this is refused **before** paying. |
112
- | `PREDGE_MCP_USER_AGENT` | `predge-whale-data-mcp/0.1.1` | Sent on every request (lets the API attribute MCP traffic). |
128
+ | `PREDGE_MCP_USER_AGENT` | `predge-whale-data-mcp/<version>` | Sent on every request (lets the API attribute MCP traffic). |
129
+
130
+ > The free tools (`predge_list_endpoints`, `predge_settlement_risk`, `predge_verify_record`) work without any key.
113
131
 
114
- > The free `predge_list_endpoints` tool works without any key.
132
+ > **Upgrading from 0.1.10 or older:** those versions default to a decommissioned API
133
+ > host and every call fails with 404. Upgrade to 0.2.0 (`npx -y @predge/whale-data-mcp@latest`),
134
+ > or set `PREDGE_BASE_URL=https://api.predge.io`.
115
135
 
116
136
  ### Testnet
117
137
 
@@ -142,8 +162,10 @@ cd whale-data-mcp && npm install && npm run build
142
162
  ## Verify locally
143
163
 
144
164
  ```bash
165
+ npm test # unit tests (no network, no payment)
145
166
  npm run inspect # list tools (no payment)
146
167
  node dist/dev-list-tools.js predge_list_endpoints # free call against prod
168
+ node dist/dev-list-tools.js predge_settlement_risk '{"market":"<condition id or slug>"}' # free, signed
147
169
  # paid call (spends real USDC on mainnet):
148
170
  BUYER_PRIVATE_KEY=0x… X402_NETWORK=base node dist/dev-list-tools.js predge_whales_latest '{"limit":2}'
149
171
  ```
package/dist/config.js CHANGED
@@ -80,8 +80,12 @@ function numEnv(name, def) {
80
80
  return n;
81
81
  }
82
82
  const network = caip2(process.env.X402_NETWORK ?? "base");
83
+ /** Package version; keep in sync with package.json (checked by `npm test`). */
84
+ export const VERSION = "0.2.1";
85
+ /** Live Predge API. Override with PREDGE_BASE_URL (or its alias PREDGE_API_URL). */
86
+ export const DEFAULT_BASE_URL = "https://api.predge.io";
83
87
  export const config = {
84
- baseUrl: (process.env.PREDGE_BASE_URL ?? "https://x402-api-production-266e.up.railway.app").replace(/\/+$/, ""),
88
+ baseUrl: (process.env.PREDGE_BASE_URL?.trim() || process.env.PREDGE_API_URL?.trim() || DEFAULT_BASE_URL).replace(/\/+$/, ""),
85
89
  // EVM (Base) buyer. Optional so the server + free discovery tool work without
86
90
  // a key; paid tools fail clearly if NO key (EVM or Solana) is set.
87
91
  buyerKey: process.env.BUYER_PRIVATE_KEY,
@@ -99,7 +103,7 @@ export const config = {
99
103
  // Optional custom Solana RPC (the public mainnet-beta endpoint is rate-limited).
100
104
  solanaRpcUrl: process.env.SOLANA_RPC_URL?.trim() || undefined,
101
105
  maxPriceUsd: numEnv("MAX_PRICE_USD", 0.05),
102
- userAgent: process.env.PREDGE_MCP_USER_AGENT ?? "predge-whale-data-mcp/0.1.1",
106
+ userAgent: process.env.PREDGE_MCP_USER_AGENT ?? `predge-whale-data-mcp/${VERSION}`,
103
107
  };
104
108
  export const IS_TESTNET = config.network !== "eip155:8453";
105
109
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/pay.js CHANGED
@@ -106,15 +106,17 @@ export async function payGet(path) {
106
106
  }
107
107
  return { data, paid };
108
108
  }
109
- /** GET a FREE route (no payment) — used by the discovery tool. */
109
+ /** GET a FREE route (no payment) — discovery, settlement risk, key set. */
110
110
  export async function freeGet(path) {
111
111
  const res = await fetch(`${config.baseUrl}${path}`, {
112
112
  method: "GET",
113
113
  headers: { "user-agent": config.userAgent },
114
114
  signal: AbortSignal.timeout(15_000),
115
115
  });
116
- if (!res.ok)
117
- throw new Error(`upstream ${res.status}`);
116
+ if (!res.ok) {
117
+ const body = await res.text().catch(() => "");
118
+ throw new Error(`upstream ${res.status}${body ? `: ${body.slice(0, 300)}` : ""}`);
119
+ }
118
120
  return res.json();
119
121
  }
120
122
  //# sourceMappingURL=pay.js.map
package/dist/pay.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"pay.js","sourceRoot":"","sources":["../src/pay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pay.js","sourceRoot":"","sources":["../src/pay.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -11,8 +11,9 @@
11
11
  */
12
12
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
13
13
  import { z } from "zod";
14
- import { config, IS_TESTNET } from "./config.js";
14
+ import { config, IS_TESTNET, VERSION, DEFAULT_BASE_URL } from "./config.js";
15
15
  import { payGet, freeGet, PaymentError } from "./pay.js";
16
+ import { extractEnvelope, verifyEnvelope, KEYS_PATH } from "./verify.js";
16
17
  function ok(data, paid) {
17
18
  const note = paid
18
19
  ? `\n\n_paid via x402: tx ${paid.settle_tx ?? "?"} on ${paid.network ?? config.network}_`
@@ -39,9 +40,34 @@ async function paid(path) {
39
40
  const CONDITION_ID = z
40
41
  .string()
41
42
  .regex(/^[0-9a-zA-Z_:.-]{1,255}$/, "Polymarket conditionId (0x-hex) or platform market id");
43
+ // Polymarket condition id (0x + 64 hex), numeric market id, or market slug.
44
+ const SETTLEMENT_MARKET = z
45
+ .string()
46
+ .regex(/^(0x[0-9a-fA-F]{64}|\d{1,12}|[a-z0-9][a-z0-9-]{0,200})$/, "condition id (0x+64 hex), market id or slug");
47
+ // The Predge key set is always read from the canonical host, even when
48
+ // PREDGE_BASE_URL points elsewhere: it decides whose signature counts.
49
+ const KEYS_URL = `${DEFAULT_BASE_URL}${KEYS_PATH}`;
50
+ let keyCache = null;
51
+ async function predgeKeys() {
52
+ if (keyCache && Date.now() - keyCache.at < 10 * 60_000)
53
+ return keyCache.keys;
54
+ try {
55
+ const res = await fetch(KEYS_URL, { headers: { "user-agent": config.userAgent }, signal: AbortSignal.timeout(10_000) });
56
+ if (!res.ok)
57
+ return keyCache?.keys ?? null;
58
+ const body = (await res.json());
59
+ if (!Array.isArray(body.keys))
60
+ return keyCache?.keys ?? null;
61
+ keyCache = { at: Date.now(), keys: body.keys };
62
+ return body.keys;
63
+ }
64
+ catch {
65
+ return keyCache?.keys ?? null;
66
+ }
67
+ }
42
68
  const ADDRESS = z.string().regex(/^0x[0-9a-fA-F]{40}$/, "0x-prefixed 40-hex EVM address");
43
69
  export function buildServer() {
44
- const server = new McpServer({ name: "predge-whale-data", version: "0.1.0" }, {
70
+ const server = new McpServer({ name: "predge-whale-data", version: VERSION }, {
45
71
  instructions: "Polymarket whale trades and smart-money signals from Predge, sold per call over x402. " +
46
72
  "Flagships — one ed25519 signing primitive across four verticals, all verifiable OFFLINE " +
47
73
  "against Predge's published key: predge_attest (resolved Polymarket outcome), " +
@@ -51,7 +77,9 @@ export function buildServer() {
51
77
  "ground a wager on tamper-evident truth. " +
52
78
  `Tools pay USDC automatically on ${IS_TESTNET ? "Base Sepolia testnet" : "Base mainnet"} from the ` +
53
79
  "configured buyer key (max $" + config.maxPriceUsd.toFixed(3) + "/call). Data is delayed 15 minutes. " +
54
- "Call predge_list_endpoints first (free) to see prices and schemas.",
80
+ "Call predge_list_endpoints first (free) to see prices and schemas. " +
81
+ "Free and signed: predge_settlement_risk (live UMA dispute/settlement risk for a Polymarket market); " +
82
+ "predge_verify_record checks any Predge signed record offline.",
55
83
  });
56
84
  // --- free discovery -----------------------------------------------------
57
85
  server.registerTool("predge_list_endpoints", {
@@ -87,7 +115,7 @@ export function buildServer() {
87
115
  }, async () => paid("/v1/signals/daily"));
88
116
  server.registerTool("predge_wallets_leaderboard", {
89
117
  title: "Wallet win-rate leaderboard",
90
- description: "PAID (~$0.01). Top wallets by realized win rate over resolved markets. " +
118
+ description: "PAID (~$0.01). Top wallets over resolved markets, ranked by edge (win rate vs. entry price), not raw win rate. " +
91
119
  "Params: window (7d|30d, default 30d), limit (1-100, default 50).",
92
120
  inputSchema: {
93
121
  window: z.enum(["7d", "30d"]).optional(),
@@ -236,6 +264,81 @@ export function buildServer() {
236
264
  "normalized to the YES side) plus recent prints. Params: condition_id, window (7d|30d|all, default 30d).",
237
265
  inputSchema: { condition_id: CONDITION_ID, window: z.enum(["7d", "30d", "all"]).optional() },
238
266
  }, async ({ condition_id, window }) => paid(`/v1/markets/${encodeURIComponent(condition_id)}/history${window ? `?window=${window}` : ""}`));
267
+ // --- free: signed live UMA settlement risk --------------------------------
268
+ server.registerTool("predge_settlement_risk", {
269
+ title: "Settlement risk — signed live UMA dispute status (free)",
270
+ description: "FREE, no key or payment. Live UMA settlement risk for one Polymarket market, read from UMA's " +
271
+ "Optimistic Oracle and Polymarket's UMA CTF adapter on Polygon: uma_state, current proposal and " +
272
+ "challenge window, every dispute, whether it went to a UMA vote, bulletin-board updates, on-chain " +
273
+ "resolution, risk_level (ok|watch|caution|resolved) with a one-line recommendation, plus the " +
274
+ "segment_dispute_rate statistic and a settlement_estimate_available flag. The settlement_estimate " +
275
+ "itself is NOT in this free record: it is sold by predge_settlement_estimate " +
276
+ "(GET /v1/settlement-risk/:market/estimate, ~$0.02). The record is ed25519-signed " +
277
+ "(predge-attest-v1); this tool re-checks the signature, content hash and signer key and returns " +
278
+ "the result under `verification`. A dispute blocks a proposal; it does not by itself change the " +
279
+ "outcome. 404 unknown_market and 422 unsupported_* are NOT 'no risk' answers. Rate limit 60/min per IP. " +
280
+ "Param: market (condition id 0x+64 hex, numeric market id, or slug).",
281
+ inputSchema: { market: SETTLEMENT_MARKET },
282
+ }, async ({ market }) => {
283
+ try {
284
+ const record = await freeGet(`/v1/settlement-risk/${encodeURIComponent(market)}`);
285
+ let verification;
286
+ try {
287
+ verification = verifyEnvelope(extractEnvelope(record), await predgeKeys());
288
+ }
289
+ catch (e) {
290
+ verification = { valid: false, error: e instanceof Error ? e.message : String(e) };
291
+ }
292
+ return ok({ verification, record }, null);
293
+ }
294
+ catch (e) {
295
+ return fail(e);
296
+ }
297
+ });
298
+ // --- paid: signed settlement-risk record WITH settlement_estimate ---------
299
+ server.registerTool("predge_settlement_estimate", {
300
+ title: "Settlement risk + settlement_estimate — signed (paid)",
301
+ description: "PAID (~$0.02 via x402). The same signed live UMA settlement-risk record as the free " +
302
+ "predge_settlement_risk tool, WITH settlement_estimate: a statistic computed from 2026 Polymarket " +
303
+ "UMA disputes (market price before the first dispute + market type). A statistic, not advice. " +
304
+ "GET /v1/settlement-risk/:market/estimate. The tool re-checks the ed25519 signature and returns " +
305
+ "`{ verification, record }`. Call predge_settlement_risk first (free) and check " +
306
+ "settlement_estimate_available before paying. Param: market (condition id 0x+64 hex, numeric market id, or slug).",
307
+ inputSchema: { market: SETTLEMENT_MARKET },
308
+ }, async ({ market }) => {
309
+ try {
310
+ const { data: record, paid: receipt } = await payGet(`/v1/settlement-risk/${encodeURIComponent(market)}/estimate`);
311
+ let verification;
312
+ try {
313
+ verification = verifyEnvelope(extractEnvelope(record), await predgeKeys());
314
+ }
315
+ catch (e) {
316
+ verification = { valid: false, error: e instanceof Error ? e.message : String(e) };
317
+ }
318
+ return ok({ verification, record }, receipt);
319
+ }
320
+ catch (e) {
321
+ return fail(e);
322
+ }
323
+ });
324
+ // --- free: offline signature check for any Predge signed record ----------
325
+ server.registerTool("predge_verify_record", {
326
+ title: "Verify a Predge signed record (free, offline)",
327
+ description: "FREE. Checks a Predge signed record (predge-attest-v1) without trusting the API: payload " +
328
+ "re-canonicalises to `canonical`, sha256(canonical) == content_hash, ed25519 signature over " +
329
+ "canonical, envelope_signature when present, and that public_key is an active key in " +
330
+ "api.predge.io/.well-known/predge-keys.json (the only network call; it is cached). Works on " +
331
+ "responses from predge_settlement_risk, predge_attest, predge_sports_attest, predge_kalshi_attest, " +
332
+ "predge_wallet_attest, or a bare `attestation` envelope. Param: record (the JSON, as a string).",
333
+ inputSchema: { record: z.string().min(2).max(1_000_000) },
334
+ }, async ({ record }) => {
335
+ try {
336
+ return ok(verifyEnvelope(extractEnvelope(record), await predgeKeys()), null);
337
+ }
338
+ catch (e) {
339
+ return fail(e);
340
+ }
341
+ });
239
342
  return server;
240
343
  }
241
344
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC;AAQzF,SAAS,EAAE,CAAC,IAAa,EAAE,IAAa;IACtC,MAAM,IAAI,GAAG,IAAI;QACf,CAAC,CAAC,0BAA2B,IAA+B,CAAC,SAAS,IAAI,GAAG,OAAQ,IAA6B,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,GAAG;QAC/I,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC3C,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC;QACnH,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,EAA6B;KAC7D,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,CAAU;IACtB,MAAM,GAAG,GAAG,CAAC,YAAY,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC/E,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAY;IAC9B,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,YAAY,GAAG,CAAC;KACnB,MAAM,EAAE;KACR,KAAK,CAAC,0BAA0B,EAAE,uDAAuD,CAAC,CAAC;AAC9F,4EAA4E;AAC5E,MAAM,iBAAiB,GAAG,CAAC;KACxB,MAAM,EAAE;KACR,KAAK,CAAC,yDAAyD,EAAE,6CAA6C,CAAC,CAAC;AAEnH,uEAAuE;AACvE,uEAAuE;AACvE,MAAM,QAAQ,GAAG,GAAG,gBAAgB,GAAG,SAAS,EAAE,CAAC;AACnD,IAAI,QAAQ,GAA6C,IAAI,CAAC;AAC9D,KAAK,UAAU,UAAU;IACvB,IAAI,QAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM;QAAE,OAAO,QAAQ,CAAC,IAAI,CAAC;IAC7E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC;QAC3C,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA2B,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC;QAC7D,QAAQ,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,EAAE,IAAI,IAAI,IAAI,CAAC;IAChC,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,qBAAqB,EAAE,gCAAgC,CAAC,CAAC;AAE1F,MAAM,UAAU,WAAW;IACzB,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,EAAE,EAC/C;QACE,YAAY,EACV,wFAAwF;YACxF,0FAA0F;YAC1F,+EAA+E;YAC/E,iGAAiG;YACjG,kGAAkG;YAClG,gGAAgG;YAChG,0CAA0C;YAC1C,mCAAmC,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,cAAc,YAAY;YACnG,6BAA6B,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,sCAAsC;YACtG,qEAAqE;YACrE,sGAAsG;YACtG,+DAA+D;KAClE,CACF,CAAC;IAEF,2EAA2E;IAC3E,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,uCAAuC;QAC9C,WAAW,EACT,8FAA8F;YAC9F,6EAA6E;QAC/E,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE;QACT,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,2EAA2E;IAC3E,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,oGAAoG;YACpG,gFAAgF;QAClF,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;KACpE,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,+BAA+B;QACtC,WAAW,EACT,oGAAoG;YACpG,iDAAiD;QACnD,WAAW,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE;KAC5C,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,CAC1F,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,gGAAgG;QAClG,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,CACtC,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACT,iHAAiH;YACjH,kEAAkE;QACpE,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;YACxC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE;SACnD;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,MAAM;YAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACpC,IAAI,KAAK;YAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,8FAA8F;YAC9F,sDAAsD;QACxD,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;KAClC,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAC1E,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,qFAAqF;YACrF,wCAAwC;QAC1C,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE;KAChE,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACrF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,0BAA0B,EAC1B;QACE,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,gGAAgG;YAChG,+DAA+D;QACjE,WAAW,EAAE,EAAE;KAChB,EACD,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAC1C,CAAC;IAEF,2EAA2E;IAC3E,MAAM,CAAC,YAAY,CACjB,eAAe,EACf;QACE,KAAK,EAAE,yDAAyD;QAChE,WAAW,EACT,2FAA2F;YAC3F,4FAA4F;YAC5F,iGAAiG;YACjG,4FAA4F;YAC5F,+FAA+F;YAC/F,iGAAiG;QACnG,WAAW,EAAE;YACX,YAAY,EAAE,YAAY;YAC1B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;SACvC;KACF,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,EAAE,CAC/B,IAAI,CAAC,cAAc,kBAAkB,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACvF,CAAC;IAEF,4EAA4E;IAC5E,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,oEAAoE;QAC3E,WAAW,EACT,4FAA4F;YAC5F,6FAA6F;YAC7F,+FAA+F;YAC/F,8FAA8F;YAC9F,iGAAiG;YACjG,iGAAiG;YACjG,sEAAsE;YACtE,2FAA2F;YAC3F,uDAAuD;QACzD,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;gBACb,KAAK;gBACL,MAAM;gBACN,KAAK;gBACL,kBAAkB;gBAClB,KAAK;gBACL,KAAK;gBACL,KAAK;gBACL,KAAK;gBACL,kBAAkB;gBAClB,QAAQ;aACT,CAAC;YACF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,wBAAwB,EAAE,mBAAmB,CAAC;YACzE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;SAC7C;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,CACrC,IAAI,CACF,qBAAqB,kBAAkB,CAAC,MAAM,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAC7E,MAAM,CAAC,CAAC,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EACrD,EAAE,CACH,CACJ,CAAC;IAEF,2EAA2E;IAC3E,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,0EAA0E;QACjF,WAAW,EACT,2FAA2F;YAC3F,6FAA6F;YAC7F,2FAA2F;YAC3F,8FAA8F;YAC9F,8FAA8F;YAC9F,gGAAgG;YAChG,yFAAyF;YACzF,8CAA8C;QAChD,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,yBAAyB,EAAE,sBAAsB,CAAC;YAC3E,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE;SACvC;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CACzB,IAAI,CAAC,qBAAqB,kBAAkB,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACxF,CAAC;IAEF,2EAA2E;IAC3E,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,qEAAqE;QAC5E,WAAW,EACT,+FAA+F;YAC/F,0FAA0F;YAC1F,gGAAgG;YAChG,2FAA2F;YAC3F,+FAA+F;YAC/F,gDAAgD;QAClD,WAAW,EAAE;YACX,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;SACzC;KACF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAC5B,IAAI,CAAC,eAAe,kBAAkB,CAAC,OAAO,CAAC,UAAU,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChG,CAAC;IAEF,2EAA2E;IAC3E,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,2FAA2F;YAC3F,mFAAmF;QACrF,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE;KAC1D,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACnF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,+BAA+B,EAC/B;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACT,+FAA+F;YAC/F,gGAAgG;QAClG,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;KACrD,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAClF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,mCAAmC,EACnC;QACE,KAAK,EAAE,wCAAwC;QAC/C,WAAW,EACT,0FAA0F;YAC1F,wFAAwF;QAC1F,WAAW,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;KACrD,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,yBAAyB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CACtF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,mCAAmC;QAC1C,WAAW,EACT,kGAAkG;YAClG,0FAA0F;QAC5F,WAAW,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE;KAC5C,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC,CAC3F,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,kCAAkC;QACzC,WAAW,EACT,2FAA2F;YAC3F,2DAA2D;QAC7D,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE;KACpF,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAC5B,IAAI,CAAC,eAAe,kBAAkB,CAAC,OAAO,CAAC,WAAW,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACjG,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,8BAA8B;QACrC,WAAW,EACT,+FAA+F;YAC/F,8DAA8D;QAChE,WAAW,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;KAC5D,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CACtB,IAAI,CAAC,iCAAiC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CACvF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACT,wFAAwF;YACxF,yGAAyG;QAC3G,WAAW,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE;KAC7F,EACD,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,EAAE,CACjC,IAAI,CAAC,eAAe,kBAAkB,CAAC,YAAY,CAAC,WAAW,MAAM,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACtG,CAAC;IAEF,6EAA6E;IAC7E,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,yDAAyD;QAChE,WAAW,EACT,+FAA+F;YAC/F,iGAAiG;YACjG,mGAAmG;YACnG,8FAA8F;YAC9F,mGAAmG;YACnG,8EAA8E;YAC9E,mFAAmF;YACnF,iGAAiG;YACjG,iGAAiG;YACjG,yGAAyG;YACzG,qEAAqE;QACvE,WAAW,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE;KAC3C,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,uBAAuB,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAClF,IAAI,YAAqB,CAAC;YAC1B,IAAI,CAAC;gBACH,YAAY,GAAG,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,UAAU,EAAE,CAAC,CAAC;YAC7E,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,YAAY,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACrF,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,6EAA6E;IAC7E,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,uDAAuD;QAC9D,WAAW,EACT,sFAAsF;YACtF,mGAAmG;YACnG,+FAA+F;YAC/F,iGAAiG;YACjG,iFAAiF;YACjF,kHAAkH;QACpH,WAAW,EAAE,EAAE,MAAM,EAAE,iBAAiB,EAAE;KAC3C,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAClD,uBAAuB,kBAAkB,CAAC,MAAM,CAAC,WAAW,CAC7D,CAAC;YACF,IAAI,YAAqB,CAAC;YAC1B,IAAI,CAAC;gBACH,YAAY,GAAG,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,UAAU,EAAE,CAAC,CAAC;YAC7E,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,YAAY,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACrF,CAAC;YACD,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,4EAA4E;IAC5E,MAAM,CAAC,YAAY,CACjB,sBAAsB,EACtB;QACE,KAAK,EAAE,+CAA+C;QACtD,WAAW,EACT,2FAA2F;YAC3F,6FAA6F;YAC7F,sFAAsF;YACtF,6FAA6F;YAC7F,oGAAoG;YACpG,gGAAgG;QAClG,WAAW,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;KAC1D,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/dist/verify.js ADDED
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Offline checker for Predge signed records (`predge-attest-v1` envelopes).
3
+ * Rule: https://data.predge.io/canonicalization.md
4
+ *
5
+ * 1. C(payload) === canonical (the object you read is what was signed)
6
+ * 2. sha256(canonical) === content_hash (when the envelope carries one)
7
+ * 3. ed25519(signature, canonical, public_key)
8
+ * 4. envelope_signature over C(envelope minus envelope_signature) (when present)
9
+ * 5. public_key is listed with active:true in the Predge key set
10
+ *
11
+ * Uses node:crypto only (no extra dependencies). The key set is passed in, so
12
+ * the checks themselves need no network.
13
+ */
14
+ import { createHash, createPublicKey, verify as edVerify } from "node:crypto";
15
+ export const KEYS_PATH = "/.well-known/predge-keys.json";
16
+ /** Predge canonical JSON: keys sorted at every level, no whitespace, JSON.stringify strings. */
17
+ export function canonicalJson(v) {
18
+ if (v === null || typeof v !== "object")
19
+ return JSON.stringify(v);
20
+ if (Array.isArray(v))
21
+ return `[${v.map(canonicalJson).join(",")}]`;
22
+ const o = v;
23
+ return `{${Object.keys(o)
24
+ .filter((k) => o[k] !== undefined)
25
+ .sort()
26
+ .map((k) => `${JSON.stringify(k)}:${canonicalJson(o[k])}`)
27
+ .join(",")}}`;
28
+ }
29
+ export function sha256Hex(s) {
30
+ return createHash("sha256").update(s, "utf8").digest("hex");
31
+ }
32
+ const SPKI_ED25519_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
33
+ const HEX64 = /^[0-9a-f]{64}$/i;
34
+ const HEX128 = /^[0-9a-f]{128}$/i;
35
+ export function ed25519Verify(publicKeyHex, message, signatureHex) {
36
+ if (!HEX64.test(publicKeyHex) || !HEX128.test(signatureHex))
37
+ return false;
38
+ try {
39
+ const key = createPublicKey({
40
+ format: "der",
41
+ type: "spki",
42
+ key: Buffer.concat([SPKI_ED25519_PREFIX, Buffer.from(publicKeyHex, "hex")]),
43
+ });
44
+ return edVerify(null, Buffer.from(message, "utf8"), key, Buffer.from(signatureHex, "hex"));
45
+ }
46
+ catch {
47
+ return false;
48
+ }
49
+ }
50
+ /** Accepts a full API response ({attestation: {...}}), a bare envelope, or a JSON string of either. */
51
+ export function extractEnvelope(record) {
52
+ const r = typeof record === "string" ? JSON.parse(record) : record;
53
+ if (!r || typeof r !== "object")
54
+ throw new Error("record must be a JSON object");
55
+ const o = r;
56
+ const env = (o.attestation && typeof o.attestation === "object" ? o.attestation : o);
57
+ if (typeof env.canonical !== "string" || typeof env.signature !== "string" || typeof env.public_key !== "string") {
58
+ throw new Error("no signed envelope found (need canonical, signature, public_key — usually under `attestation`)");
59
+ }
60
+ return env;
61
+ }
62
+ export function verifyEnvelope(envelope, keys) {
63
+ const checks = [];
64
+ const canonical = envelope.canonical;
65
+ const pub = envelope.public_key.toLowerCase();
66
+ const hash = sha256Hex(canonical);
67
+ if (envelope.payload !== undefined) {
68
+ const rebuilt = canonicalJson(envelope.payload) === canonical;
69
+ checks.push({ name: "payload_rebuilds_canonical", pass: rebuilt, detail: rebuilt ? undefined : "C(payload) != canonical" });
70
+ }
71
+ else {
72
+ checks.push({ name: "payload_rebuilds_canonical", pass: null, detail: "no payload field; trust canonical only" });
73
+ }
74
+ if (typeof envelope.content_hash === "string") {
75
+ const ok = envelope.content_hash.toLowerCase() === hash;
76
+ checks.push({ name: "content_hash", pass: ok, detail: ok ? undefined : `sha256(canonical)=${hash}` });
77
+ }
78
+ else {
79
+ checks.push({ name: "content_hash", pass: null, detail: `not in envelope; sha256(canonical)=${hash}` });
80
+ }
81
+ checks.push({ name: "signature", pass: ed25519Verify(pub, canonical, envelope.signature) });
82
+ if (typeof envelope.envelope_signature === "string") {
83
+ const { envelope_signature, ...rest } = envelope;
84
+ checks.push({ name: "envelope_signature", pass: ed25519Verify(pub, canonicalJson(rest), envelope_signature) });
85
+ }
86
+ else {
87
+ checks.push({ name: "envelope_signature", pass: null, detail: "route does not sign the envelope" });
88
+ }
89
+ if (keys) {
90
+ const listed = keys.find((k) => k.public_key?.toLowerCase() === pub);
91
+ const ok = Boolean(listed && listed.active === true);
92
+ checks.push({
93
+ name: "key_in_predge_key_set",
94
+ pass: ok,
95
+ detail: listed ? (ok ? `kid ${listed.kid ?? pub.slice(0, 16)}` : "key listed but not active") : "public_key is NOT a Predge key",
96
+ });
97
+ }
98
+ else {
99
+ checks.push({ name: "key_in_predge_key_set", pass: false, detail: "key set unavailable; signer not confirmed" });
100
+ }
101
+ return {
102
+ valid: checks.every((c) => c.pass !== false),
103
+ checks,
104
+ kid: pub.slice(0, 16),
105
+ content_hash: hash,
106
+ };
107
+ }
108
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE9E,MAAM,CAAC,MAAM,SAAS,GAAG,+BAA+B,CAAC;AAkCzD,gGAAgG;AAChG,MAAM,UAAU,aAAa,CAAC,CAAU;IACtC,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACnE,MAAM,CAAC,GAAG,CAA4B,CAAC;IACvC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;SACtB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;SACjC,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SACzD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;AAC3E,MAAM,KAAK,GAAG,iBAAiB,CAAC;AAChC,MAAM,MAAM,GAAG,kBAAkB,CAAC;AAElC,MAAM,UAAU,aAAa,CAAC,YAAoB,EAAE,OAAe,EAAE,YAAoB;IACvF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1E,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,eAAe,CAAC;YAC1B,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,MAAM;YACZ,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;SAC5E,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7F,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,MAAM,CAAC,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAa,CAAC,CAAC,CAAC,MAAM,CAAC;IAChF,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACjF,MAAM,CAAC,GAAG,CAA4B,CAAC;IACvC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAa,CAAC;IACjG,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,SAAS,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACjH,MAAM,IAAI,KAAK,CAAC,gGAAgG,CAAC,CAAC;IACpH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,QAAkB,EAAE,IAAwB;IACzE,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAmB,CAAC;IAC/C,MAAM,GAAG,GAAI,QAAQ,CAAC,UAAqB,CAAC,WAAW,EAAE,CAAC;IAC1D,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAElC,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAC9H,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,wCAAwC,EAAE,CAAC,CAAC;IACpH,CAAC;IAED,IAAI,OAAO,QAAQ,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC;QACxD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,qBAAqB,IAAI,EAAE,EAAE,CAAC,CAAC;IACxG,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,sCAAsC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1G,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,aAAa,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAmB,CAAC,EAAE,CAAC,CAAC;IAEtG,IAAI,OAAO,QAAQ,CAAC,kBAAkB,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,aAAa,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,kCAAkC,EAAE,CAAC,CAAC;IACtG,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;QACrE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,uBAAuB;YAC7B,IAAI,EAAE,EAAE;YACR,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,gCAAgC;SACjI,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,uBAAuB,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,2CAA2C,EAAE,CAAC,CAAC;IACnH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;QAC5C,MAAM;QACN,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACrB,YAAY,EAAE,IAAI;KACnB,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@predge/whale-data-mcp",
3
- "version": "0.1.10",
4
- "description": "MCP server exposing the Predge Whale Data x402 API (Polymarket whale trades + smart-money signals) as tools. Pays USDC per call under the hood via an x402 client; the operator supplies a funded buyer key.",
3
+ "version": "0.2.1",
4
+ "description": "MCP server exposing the Predge Whale Data x402 API (Polymarket whale trades, smart-money signals, signed attestations and free signed UMA settlement risk) as tools. Pays USDC per call under the hood via an x402 client; the operator supplies a funded buyer key.",
5
5
  "mcpName": "io.github.predgeAI/whale-data-mcp",
6
6
  "type": "module",
7
7
  "license": "MIT",
@@ -42,7 +42,8 @@
42
42
  "typecheck": "tsc -p tsconfig.json --noEmit",
43
43
  "dev": "tsx src/index.ts",
44
44
  "inspect": "tsx src/dev-list-tools.ts",
45
- "prepublishOnly": "npm run build"
45
+ "test": "tsx --test test/verify.test.ts test/server.test.ts",
46
+ "prepublishOnly": "npm run typecheck && npm test && npm run build"
46
47
  },
47
48
  "publishConfig": {
48
49
  "access": "public"