@0xinsider/mcp 1.0.2 → 1.0.9

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.
Files changed (52) hide show
  1. package/README.md +44 -7
  2. package/dist/cli-lib.d.ts +9 -0
  3. package/dist/cli-lib.d.ts.map +1 -1
  4. package/dist/cli-lib.js +210 -68
  5. package/dist/cli-lib.js.map +1 -1
  6. package/dist/client.d.ts +5 -0
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +30 -4
  9. package/dist/client.js.map +1 -1
  10. package/dist/constants.d.ts +2 -1
  11. package/dist/constants.d.ts.map +1 -1
  12. package/dist/constants.js +25 -1
  13. package/dist/constants.js.map +1 -1
  14. package/dist/prompts/index.js +1 -1
  15. package/dist/server.d.ts.map +1 -1
  16. package/dist/server.js +32 -2
  17. package/dist/server.js.map +1 -1
  18. package/dist/tools/explore-markets.d.ts +36 -0
  19. package/dist/tools/explore-markets.d.ts.map +1 -0
  20. package/dist/tools/explore-markets.js +77 -0
  21. package/dist/tools/explore-markets.js.map +1 -0
  22. package/dist/tools/get-insider-radar.js +1 -1
  23. package/dist/tools/get-large-positions.d.ts +21 -0
  24. package/dist/tools/get-large-positions.d.ts.map +1 -0
  25. package/dist/tools/get-large-positions.js +68 -0
  26. package/dist/tools/get-large-positions.js.map +1 -0
  27. package/dist/tools/get-position-timeline.d.ts +24 -0
  28. package/dist/tools/get-position-timeline.d.ts.map +1 -0
  29. package/dist/tools/get-position-timeline.js +79 -0
  30. package/dist/tools/get-position-timeline.js.map +1 -0
  31. package/dist/tools/get-positions.d.ts +21 -0
  32. package/dist/tools/get-positions.d.ts.map +1 -0
  33. package/dist/tools/get-positions.js +68 -0
  34. package/dist/tools/get-positions.js.map +1 -0
  35. package/dist/tools/get-trader-pnl.d.ts +6 -0
  36. package/dist/tools/get-trader-pnl.d.ts.map +1 -0
  37. package/dist/tools/get-trader-pnl.js +39 -0
  38. package/dist/tools/get-trader-pnl.js.map +1 -0
  39. package/dist/tools/get-trader.d.ts.map +1 -1
  40. package/dist/tools/get-trader.js +4 -3
  41. package/dist/tools/get-trader.js.map +1 -1
  42. package/dist/tools/get-trending-wallets.d.ts +15 -0
  43. package/dist/tools/get-trending-wallets.d.ts.map +1 -0
  44. package/dist/tools/get-trending-wallets.js +56 -0
  45. package/dist/tools/get-trending-wallets.js.map +1 -0
  46. package/dist/tools/get-whale-trades.js +1 -1
  47. package/dist/tools/get-whale-trades.js.map +1 -1
  48. package/dist/tools/read-parity.d.ts +20 -0
  49. package/dist/tools/read-parity.d.ts.map +1 -0
  50. package/dist/tools/read-parity.js +493 -0
  51. package/dist/tools/read-parity.js.map +1 -0
  52. package/package.json +3 -1
package/README.md CHANGED
@@ -2,7 +2,14 @@
2
2
 
3
3
  MCP server for [0xinsider](https://0xinsider.com) — prediction market intelligence for AI agents.
4
4
 
5
- Gives your AI agent access to trader grades, whale trades, smart money signals, market intelligence, and insider detection across prediction markets.
5
+ Gives your AI agent access to trader grades, whale trades, smart money signals, market intelligence, and insider-radar flags across prediction markets.
6
+
7
+ ## Two ways to connect
8
+
9
+ - **Remote HTTP (no install)** — `POST https://api.0xinsider.com/api/v1/mcp` with `Authorization: Bearer oxi_sk_live_...`. Implements the MCP Streamable HTTP transport (protocolVersion `2025-11-25`). Works with MCP clients that speak HTTP and can send headers. `?token=` remains a legacy URL-only compatibility path, but prefer headers because URL secrets can leak through shell history, browser history, proxy logs, and crash reports. 31 read-only public V1 tools -- the 29 the stdio server exposes plus the remote-only `get_report` and `search_content` -- same rate limits, same billing.
10
+ - **Stdio (this npm package)** — run `npx -y @0xinsider/mcp` locally for Claude Code / Cursor / Codex / Gemini CLI. Best when the client can launch a child process and you prefer to keep the API key out of URLs.
11
+
12
+ The stdio server exposes these 29 read-only tools (the remote HTTP endpoint additionally exposes the remote-only `get_report` and `search_content`, 31 total): `get_leaderboard`, `get_trader`, `batch_get_traders`, `get_whale_trades`, `get_whale_trade`, `get_whale_trades_history`, `get_market_intel`, `batch_get_market_intel`, `get_smart_money_flows`, `get_sharp_money_flows`, `get_market_snapshot`, `get_insider_radar`, `get_insider_radar_flag`, `get_positions`, `get_position_timeline`, `get_position_timeline_by_id`, `search_markets`, `explore_markets`, `get_event_replay_since`, `list_webhooks`, `get_webhook`, `get_daily_report_snapshot`, `get_weekly_report_snapshot`, `get_monthly_report_snapshot`, `get_trader_export_snapshot`, `get_platforms`, `get_large_positions`, `get_trending_wallets`, `get_trader_pnl`.
6
13
 
7
14
  ## Quick Start
8
15
 
@@ -12,6 +19,8 @@ Gives your AI agent access to trader grades, whale trades, smart money signals,
12
19
  npx -y @0xinsider/mcp init
13
20
  ```
14
21
 
22
+ `init` reads the key without echoing it. For non-interactive setup, set `OXINSIDER_API_KEY` in the process environment or pipe the key on stdin. Do not pass the key as a command-line argument.
23
+
15
24
  Or manually add to `~/.claude/settings.json`:
16
25
 
17
26
  ```json
@@ -65,7 +74,7 @@ OXINSIDER_API_KEY = "oxi_sk_live_..."
65
74
 
66
75
  ### Gemini CLI
67
76
 
68
- `npx -y @0xinsider/mcp init` can also configure Gemini CLI automatically when the `gemini` command is installed.
77
+ `npx -y @0xinsider/mcp init` detects Gemini CLI when the `gemini` command is installed and prints a manual config template.
69
78
 
70
79
  Or add to `~/.gemini/settings.json`:
71
80
 
@@ -87,9 +96,7 @@ Or add to `~/.gemini/settings.json`:
87
96
 
88
97
  Any client that supports stdio transport:
89
98
 
90
- ```bash
91
- OXINSIDER_API_KEY=oxi_sk_live_... npx -y @0xinsider/mcp
92
- ```
99
+ Set `OXINSIDER_API_KEY` in the process environment before starting the stdio server. Do not pass the key as a command-line argument.
93
100
 
94
101
  Need the command list? Run:
95
102
 
@@ -99,18 +106,48 @@ npx -y @0xinsider/mcp --help
99
106
 
100
107
  ## API Key
101
108
 
102
- Get your API key at [0xinsider.com/developers](https://0xinsider.com/developers). Requires an Insider subscription.
109
+ Get your API key at [0xinsider.com/developers](https://0xinsider.com/developers). Requires a Pro subscription.
110
+
111
+ ## Security
112
+
113
+ `init` never prints the API key. If an older version wrote the key to recorded terminal output, rotate the key before you use the new configuration.
103
114
 
104
115
  ## Tools
105
116
 
117
+ <!-- The `batch_get_traders` and `batch_get_market_intel` rows below are GENERATED: they
118
+ publish the batch item cap, which is owned by `MAX_BATCH_ITEMS` in
119
+ `backend/src/api_v1/handlers/batch.rs` (#8103). Do not hand-edit those two rows; a
120
+ `cd web && npm run generate:api-policy` run rewrites them. Every other row is written by
121
+ hand. Markers are not used here because an HTML comment inside a table breaks it. -->
122
+
106
123
  | Tool | Description |
107
124
  |------|-------------|
108
125
  | `get_trader` | Look up a trader by wallet address or username — grade, P&L, win rate, strategy, quant metrics |
126
+ | `batch_get_traders` | Look up 1-25 traders in one call with per-item results and batch-item quota |
109
127
  | `get_whale_trades` | Recent large trades with signal scoring, filterable by size/category/grade |
128
+ | `get_whale_trade` | Read one whale trade by wt_ ID or raw whale_alerts.id |
129
+ | `get_whale_trades_history` | Replay historical whale trades with cursor, market, trader, category, grade, platform, and time filters |
110
130
  | `get_leaderboard` | Top-ranked traders (S/A/B grades) with optional category/strategy filters |
111
131
  | `search_markets` | Search prediction markets by keyword |
132
+ | `explore_markets` | Browse whale-active markets with facets and grouped discovery entries |
112
133
  | `get_market_intel` | Smart money flow analysis for a specific market |
113
- | `get_insider_radar` | Suspicious trading pattern detection |
134
+ | `batch_get_market_intel` | Fetch market intelligence for 1-25 condition IDs in one call |
135
+ | `get_smart_money_flows` | Deprecated alias of `get_sharp_money_flows` (byte-identical); kept for backward compatibility |
136
+ | `get_sharp_money_flows` | Ranked sharp-money flow discovery across markets (timeframe, category, platform, min-grade, direction filters) |
137
+ | `get_market_snapshot` | Live market-card snapshot with outcomes, liquidity, sports context, and freshness state |
138
+ | `get_positions` | Current positions with trader, market, value, side, P&L, and freshness context |
139
+ | `get_position_timeline` | Per-market trader fills with running amount and average entry price |
140
+ | `get_position_timeline_by_id` | Per-market trader fills using an internal trader ID alias |
141
+ | `get_insider_radar` | Suspicious trading pattern flags |
142
+ | `get_insider_radar_flag` | Read one insider-radar flag by rf_ ID or raw radar_flags.id |
143
+ | `get_event_replay_since` | Durable public event replay after an opaque cursor |
144
+ | `list_webhooks` | Read webhook endpoints owned by the authenticated API-key user |
145
+ | `get_webhook` | Read one webhook endpoint by ID |
146
+ | `get_daily_report_snapshot` | Read a dated daily whale-activity report snapshot |
147
+ | `get_weekly_report_snapshot` | Read a weekly whale-activity report snapshot by week token or date range |
148
+ | `get_monthly_report_snapshot` | Read a monthly whale-activity report snapshot |
149
+ | `get_trader_export_snapshot` | Read trader export metadata without starting an export job |
150
+ | `get_platforms` | Provider capability matrix: which platforms support grade, P&L, strategy, timeline, whale signal, insider radar, and market snapshot |
114
151
 
115
152
  ## Resources
116
153
 
package/dist/cli-lib.d.ts CHANGED
@@ -4,6 +4,9 @@ export type Environment = {
4
4
  type: EnvironmentType;
5
5
  configPath: string;
6
6
  };
7
+ type JsonValue = string | number | boolean | null | JsonValue[] | {
8
+ [key: string]: JsonValue;
9
+ };
7
10
  type McpConfig = {
8
11
  command: string;
9
12
  args: string[];
@@ -11,8 +14,14 @@ type McpConfig = {
11
14
  };
12
15
  export declare function buildMcpConfig(apiKey: string): McpConfig;
13
16
  export declare function formatCodexToml(apiKey: string): string;
17
+ export declare function buildMcpConfigTemplate(): McpConfig;
18
+ export declare function formatCodexTomlTemplate(): string;
14
19
  export declare function resolveCliCommand(args: readonly string[]): CliCommand;
15
20
  export declare function detectEnvironments(home?: string): Environment[];
21
+ export declare function readJsonFile(path: string): Record<string, JsonValue>;
22
+ export declare function writeJsonFile(path: string, data: Record<string, JsonValue>): void;
23
+ export declare function addJsonMcpServer(configPath: string, apiKey: string): void;
24
+ export declare function addCodexMcpServer(configPath: string, apiKey: string): void;
16
25
  export declare function runCli(args: readonly string[]): Promise<void>;
17
26
  export {};
18
27
  //# sourceMappingURL=cli-lib.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-lib.d.ts","sourceRoot":"","sources":["../src/cli-lib.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,CAAC;AAEhF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAIF,KAAK,SAAS,GAAG;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,CAAC;AAEF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAQxD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQtD;AAOD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAarE;AA0BD,wBAAgB,kBAAkB,CAChC,IAAI,SAAoD,GACvD,WAAW,EAAE,CAwBf;AAoLD,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBnE"}
1
+ {"version":3,"file":"cli-lib.d.ts","sourceRoot":"","sources":["../src/cli-lib.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,CAAC;AAEhF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAE/F,KAAK,SAAS,GAAG;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B,CAAC;AASF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAQxD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQtD;AAED,wBAAgB,sBAAsB,IAAI,SAAS,CAElD;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAOD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CAarE;AAuLD,wBAAgB,kBAAkB,CAChC,IAAI,SAAoD,GACvD,WAAW,EAAE,CAwBf;AAiCD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAYpE;AAWD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,IAAI,CAEjF;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CASzE;AA2CD,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAM1E;AA6CD,wBAAsB,MAAM,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBnE"}
package/dist/cli-lib.js CHANGED
@@ -1,9 +1,14 @@
1
1
  import { spawnSync } from "node:child_process";
2
- import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
2
+ import { chmodSync, existsSync, mkdirSync, readFileSync, writeFileSync, } from "node:fs";
3
3
  import { dirname, join } from "node:path";
4
4
  import { createInterface } from "node:readline";
5
5
  import { API_KEY_ENV_VAR, DEVELOPERS_URL, MCP_NPX_ARGS, MCP_NPX_COMMAND, PACKAGE_NAME, SERVER_NAME, } from "./constants.js";
6
6
  import { runServer } from "./server.js";
7
+ const API_KEY_PREFIX = "oxi_sk_live_";
8
+ const API_KEY_CONFIG_PLACEHOLDER = "<YOUR_OXINSIDER_API_KEY>";
9
+ function asError(error) {
10
+ return error instanceof Error ? error : new Error(String(error));
11
+ }
7
12
  export function buildMcpConfig(apiKey) {
8
13
  return {
9
14
  command: MCP_NPX_COMMAND,
@@ -22,6 +27,12 @@ args = [${MCP_NPX_ARGS.map((arg) => JSON.stringify(arg)).join(", ")}]
22
27
  ${API_KEY_ENV_VAR} = ${JSON.stringify(apiKey)}
23
28
  `;
24
29
  }
30
+ export function buildMcpConfigTemplate() {
31
+ return buildMcpConfig(API_KEY_CONFIG_PLACEHOLDER);
32
+ }
33
+ export function formatCodexTomlTemplate() {
34
+ return formatCodexToml(API_KEY_CONFIG_PLACEHOLDER);
35
+ }
25
36
  function commandExists(command, args = ["--version"]) {
26
37
  const result = spawnSync(command, args, { stdio: "ignore" });
27
38
  return !result.error && result.status === 0;
@@ -44,15 +55,21 @@ function printHelp() {
44
55
 
45
56
  Usage:
46
57
  npx -y ${PACKAGE_NAME} init
47
- ${API_KEY_ENV_VAR}=oxi_sk_live_... npx -y ${PACKAGE_NAME}
58
+ npx -y ${PACKAGE_NAME}
48
59
 
49
60
  Commands:
50
61
  init Detect Claude Code, Cursor, Codex, or Gemini CLI and write MCP config
51
62
  serve Start the stdio MCP server (default)
52
63
  help Show this message
64
+
65
+ Environment:
66
+ ${API_KEY_ENV_VAR} API key for the stdio server or non-interactive init
53
67
  `);
54
68
  }
55
69
  function ask(question) {
70
+ if (!process.stdin.isTTY) {
71
+ return Promise.reject(new Error("Interactive input requires a TTY."));
72
+ }
56
73
  const rl = createInterface({ input: process.stdin, output: process.stdout });
57
74
  return new Promise((resolve) => {
58
75
  rl.question(question, (answer) => {
@@ -61,6 +78,143 @@ function ask(question) {
61
78
  });
62
79
  });
63
80
  }
81
+ function askSecret(question) {
82
+ if (!process.stdin.isTTY || typeof process.stdin.setRawMode !== "function") {
83
+ return Promise.reject(new Error("Hidden API key input requires a TTY."));
84
+ }
85
+ const previousRawMode = process.stdin.isRaw;
86
+ return new Promise((resolve, reject) => {
87
+ let value = "";
88
+ let settled = false;
89
+ let rawModeChanged = false;
90
+ const onData = (chunk) => {
91
+ for (const character of String(chunk)) {
92
+ if (character === "\r" || character === "\n") {
93
+ finish();
94
+ return;
95
+ }
96
+ if (character === "\u0003") {
97
+ finish(new Error("API key input interrupted by SIGINT."));
98
+ return;
99
+ }
100
+ if (character === "\u0004") {
101
+ finish(new Error("API key input ended before completion."));
102
+ return;
103
+ }
104
+ if (character === "\b" || character === "\u007f") {
105
+ value = value.slice(0, -1);
106
+ continue;
107
+ }
108
+ if (character === "\u0015") {
109
+ value = "";
110
+ continue;
111
+ }
112
+ if (character >= " " && character !== "\u007f") {
113
+ value += character;
114
+ }
115
+ }
116
+ };
117
+ const onError = (error) => finish(error);
118
+ const onEnd = () => finish(new Error("API key input ended before completion."));
119
+ const onSigint = () => finish(new Error("API key input interrupted by SIGINT."));
120
+ const onSigterm = () => finish(new Error("API key input interrupted by SIGTERM."));
121
+ const restore = () => {
122
+ process.stdin.removeListener("data", onData);
123
+ process.stdin.removeListener("error", onError);
124
+ process.stdin.removeListener("end", onEnd);
125
+ process.removeListener("SIGINT", onSigint);
126
+ process.removeListener("SIGTERM", onSigterm);
127
+ let restoreError;
128
+ if (rawModeChanged) {
129
+ try {
130
+ process.stdin.setRawMode(previousRawMode);
131
+ rawModeChanged = false;
132
+ }
133
+ catch (error) {
134
+ restoreError = error;
135
+ }
136
+ }
137
+ try {
138
+ process.stdin.pause();
139
+ }
140
+ catch (error) {
141
+ restoreError ??= error;
142
+ }
143
+ try {
144
+ process.stdout.write("\n");
145
+ }
146
+ catch (error) {
147
+ restoreError ??= error;
148
+ }
149
+ if (restoreError) {
150
+ throw asError(restoreError);
151
+ }
152
+ };
153
+ function finish(error) {
154
+ if (settled)
155
+ return;
156
+ settled = true;
157
+ try {
158
+ restore();
159
+ }
160
+ catch (restoreError) {
161
+ reject(asError(restoreError));
162
+ return;
163
+ }
164
+ if (error) {
165
+ reject(error);
166
+ }
167
+ else {
168
+ resolve(value.trim());
169
+ }
170
+ }
171
+ try {
172
+ process.stdin.setRawMode(true);
173
+ rawModeChanged = true;
174
+ process.stdin.on("data", onData);
175
+ process.stdin.on("error", onError);
176
+ process.stdin.once("end", onEnd);
177
+ process.once("SIGINT", onSigint);
178
+ process.once("SIGTERM", onSigterm);
179
+ process.stdin.resume();
180
+ process.stdout.write(question);
181
+ }
182
+ catch (error) {
183
+ finish(asError(error));
184
+ }
185
+ });
186
+ }
187
+ async function readPipedApiKey() {
188
+ const chunks = [];
189
+ for await (const chunk of process.stdin) {
190
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
191
+ }
192
+ return Buffer.concat(chunks).toString("utf8").trim();
193
+ }
194
+ async function readApiKey() {
195
+ const configured = process.env[API_KEY_ENV_VAR]?.trim();
196
+ if (configured)
197
+ return configured;
198
+ if (process.stdin.isTTY && typeof process.stdin.setRawMode === "function") {
199
+ return askSecret("Enter your 0xinsider API key (input hidden): ");
200
+ }
201
+ if (!process.stdin.isTTY) {
202
+ const piped = await readPipedApiKey();
203
+ if (piped)
204
+ return piped;
205
+ }
206
+ throw new Error(`API key input needs a TTY. Set ${API_KEY_ENV_VAR} or pipe the key on stdin. Do not pass the key as a command-line argument. Get a key at ${DEVELOPERS_URL}.`);
207
+ }
208
+ function validateApiKey(apiKey) {
209
+ const normalized = apiKey.trim();
210
+ if (!normalized) {
211
+ throw new Error(`API key is required. Get one at ${DEVELOPERS_URL}.`);
212
+ }
213
+ if (!normalized.startsWith(API_KEY_PREFIX) || /\s/.test(normalized)) {
214
+ throw new Error(`Invalid API key format. Keys start with ${API_KEY_PREFIX}`);
215
+ }
216
+ return normalized;
217
+ }
64
218
  export function detectEnvironments(home = process.env.HOME ?? process.env.USERPROFILE ?? "") {
65
219
  const environments = [];
66
220
  const claudeDir = join(home, ".claude");
@@ -111,30 +265,33 @@ async function chooseEnvironment(environments) {
111
265
  function isJsonRecord(value) {
112
266
  return typeof value === "object" && value !== null && !Array.isArray(value);
113
267
  }
114
- function readJsonFile(path) {
268
+ export function readJsonFile(path) {
115
269
  if (!existsSync(path))
116
270
  return {};
117
271
  try {
118
272
  const parsed = JSON.parse(readFileSync(path, "utf-8"));
119
273
  if (!isJsonRecord(parsed)) {
120
- console.error(`Warning: ${path} does not contain a JSON object, treating as empty`);
121
- return {};
274
+ throw new Error(`${path} does not contain a JSON object`);
122
275
  }
123
276
  return parsed;
124
277
  }
125
278
  catch (error) {
126
- console.error(`Warning: failed to parse ${path}:`, error);
127
- return {};
279
+ const message = error instanceof Error ? error.message : String(error);
280
+ throw new Error(`Refusing to update malformed MCP config ${path}: ${message}`);
128
281
  }
129
282
  }
130
- function writeJsonFile(path, data) {
283
+ function writeTextFileRestricted(path, data) {
131
284
  const dir = dirname(path);
132
285
  if (!existsSync(dir)) {
133
286
  mkdirSync(dir, { recursive: true });
134
287
  }
135
- writeFileSync(path, JSON.stringify(data, null, 2) + "\n");
288
+ writeFileSync(path, data, { mode: 0o600 });
289
+ chmodSync(path, 0o600);
290
+ }
291
+ export function writeJsonFile(path, data) {
292
+ writeTextFileRestricted(path, JSON.stringify(data, null, 2) + "\n");
136
293
  }
137
- function addJsonMcpServer(configPath, apiKey) {
294
+ export function addJsonMcpServer(configPath, apiKey) {
138
295
  const config = readJsonFile(configPath);
139
296
  const existing = config.mcpServers;
140
297
  const mcpServers = isJsonRecord(existing) ? existing : {};
@@ -143,85 +300,70 @@ function addJsonMcpServer(configPath, apiKey) {
143
300
  writeJsonFile(configPath, config);
144
301
  console.log(`\nAdded ${SERVER_NAME} MCP server to ${configPath}`);
145
302
  }
146
- function printManualInstructions(apiKey) {
303
+ function printManualInstructions() {
147
304
  console.log("\nClaude Code / Cursor / Gemini CLI JSON:\n");
148
- console.log(JSON.stringify({ mcpServers: { [SERVER_NAME]: buildMcpConfig(apiKey) } }, null, 2));
305
+ console.log(JSON.stringify({ mcpServers: { [SERVER_NAME]: buildMcpConfigTemplate() } }, null, 2));
149
306
  console.log("\nCodex TOML (~/.codex/config.toml):\n");
150
- console.log(formatCodexToml(apiKey));
307
+ console.log(formatCodexTomlTemplate());
308
+ console.log("Replace the placeholder with your API key in the config file. Do not paste the key into a command or terminal output.");
151
309
  }
152
- function addCodexMcpServer(apiKey) {
153
- spawnSync("codex", ["mcp", "remove", SERVER_NAME], {
154
- stdio: "ignore",
155
- });
156
- const result = spawnSync("codex", [
157
- "mcp",
158
- "add",
159
- SERVER_NAME,
160
- "--env",
161
- `${API_KEY_ENV_VAR}=${apiKey}`,
162
- "--",
163
- MCP_NPX_COMMAND,
164
- ...MCP_NPX_ARGS,
165
- ], {
166
- stdio: "inherit",
167
- });
168
- if (result.error) {
169
- throw result.error;
170
- }
171
- if (result.status !== 0) {
172
- throw new Error(`codex mcp add failed with exit code ${result.status ?? "unknown"}`);
173
- }
174
- }
175
- function addGeminiMcpServer(apiKey) {
176
- const result = spawnSync("gemini", [
177
- "mcp",
178
- "add",
179
- "--scope",
180
- "user",
181
- SERVER_NAME,
182
- "--env",
183
- `${API_KEY_ENV_VAR}=${apiKey}`,
184
- "--",
185
- MCP_NPX_COMMAND,
186
- ...MCP_NPX_ARGS,
187
- ], {
188
- stdio: "inherit",
189
- });
190
- if (result.error) {
191
- throw result.error;
192
- }
193
- if (result.status !== 0) {
194
- throw new Error(`gemini mcp add failed with exit code ${result.status ?? "unknown"}`);
310
+ function stripCodexServerBlocks(source) {
311
+ const serverHeaders = new Set([
312
+ `[mcp_servers.${SERVER_NAME}]`,
313
+ `[mcp_servers."${SERVER_NAME}"]`,
314
+ ]);
315
+ const envHeaders = new Set([
316
+ `[mcp_servers.${SERVER_NAME}.env]`,
317
+ `[mcp_servers."${SERVER_NAME}".env]`,
318
+ ]);
319
+ const output = [];
320
+ let skipping = false;
321
+ for (const line of source.split(/\r?\n/)) {
322
+ const trimmed = line.trim();
323
+ if (serverHeaders.has(trimmed) || envHeaders.has(trimmed)) {
324
+ skipping = true;
325
+ continue;
326
+ }
327
+ if (skipping && /^\[.+\]$/.test(trimmed)) {
328
+ skipping = false;
329
+ }
330
+ if (!skipping) {
331
+ output.push(line);
332
+ }
195
333
  }
334
+ return output.join("\n").trimEnd();
335
+ }
336
+ export function addCodexMcpServer(configPath, apiKey) {
337
+ const existing = existsSync(configPath) ? readFileSync(configPath, "utf-8") : "";
338
+ const withoutExistingServer = stripCodexServerBlocks(existing);
339
+ const nextConfig = `${withoutExistingServer}${withoutExistingServer ? "\n\n" : ""}${formatCodexToml(apiKey)}`;
340
+ writeTextFileRestricted(configPath, nextConfig);
341
+ }
342
+ function printGeminiManualInstructions() {
343
+ console.log("\nGemini CLI auto-setup is not run because its MCP helper requires passing env values through process arguments.");
344
+ printManualInstructions();
196
345
  }
197
346
  async function runSetup() {
198
347
  console.log(`${SERVER_NAME} MCP Server Setup\n`);
199
- const apiKey = await ask(`Enter your 0xinsider API key (oxi_sk_live_...): `);
200
- if (!apiKey) {
201
- throw new Error(`API key is required. Get one at ${DEVELOPERS_URL}`);
202
- }
203
- if (!apiKey.startsWith("oxi_sk_live_")) {
204
- throw new Error("Invalid API key format. Keys start with oxi_sk_live_");
205
- }
348
+ const apiKey = validateApiKey(await readApiKey());
206
349
  const env = await chooseEnvironment(detectEnvironments());
207
350
  if (!env) {
208
351
  console.log("\nCould not detect Claude Code, Cursor, Codex, or Gemini CLI. Here are manual instructions:");
209
- printManualInstructions(apiKey);
352
+ printManualInstructions();
210
353
  return;
211
354
  }
212
355
  const confirm = await ask(`Detected ${environmentLabel(env.type)}. Add ${SERVER_NAME} MCP server? (Y/n): `);
213
356
  if (confirm.toLowerCase() === "n") {
214
- printManualInstructions(apiKey);
357
+ printManualInstructions();
215
358
  return;
216
359
  }
217
360
  if (env.type === "codex") {
218
- addCodexMcpServer(apiKey);
361
+ addCodexMcpServer(env.configPath, apiKey);
219
362
  console.log(`\nAdded ${SERVER_NAME} MCP server to ${env.configPath}`);
220
363
  return;
221
364
  }
222
365
  if (env.type === "gemini-cli") {
223
- addGeminiMcpServer(apiKey);
224
- console.log(`\nAdded ${SERVER_NAME} MCP server to ${env.configPath}`);
366
+ printGeminiManualInstructions();
225
367
  return;
226
368
  }
227
369
  addJsonMcpServer(env.configPath, apiKey);
@@ -1 +1 @@
1
- {"version":3,"file":"cli-lib.js","sourceRoot":"","sources":["../src/cli-lib.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli-lib.js","sourceRoot":"","sources":["../src/cli-lib.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -9,11 +9,14 @@ interface ApiResponse {
9
9
  has_more?: boolean;
10
10
  next_cursor?: string | null;
11
11
  total?: number | null;
12
+ facets?: unknown;
12
13
  error?: {
13
14
  code: string;
14
15
  message: string;
15
16
  doc_url?: string;
16
17
  param?: string;
18
+ reason?: string;
19
+ retry_at?: string;
17
20
  };
18
21
  }
19
22
  export declare class ApiClient {
@@ -21,6 +24,8 @@ export declare class ApiClient {
21
24
  private readonly baseUrl;
22
25
  constructor(apiKey: string, baseUrl?: string);
23
26
  request(path: string, params?: Record<string, string | number | undefined>, repeatedParams?: Record<string, string[]>): Promise<ApiResponse>;
27
+ post(path: string, body: unknown): Promise<ApiResponse>;
28
+ private decodeResponse;
24
29
  }
25
30
  export declare class ApiError extends Error {
26
31
  readonly status: number;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7E;AAMD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAKtC,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,EACpD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACxC,OAAO,CAAC,WAAW,CAAC;CAqDxB;AAED,qBAAa,QAAS,SAAQ,KAAK;aAEf,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,MAAM;gBADZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAEpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QAGf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAMD,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;IAKtC,OAAO,CACX,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,EACpD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACxC,OAAO,CAAC,WAAW,CAAC;IA6BjB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;YAgB/C,cAAc;CAsC7B;AAED,qBAAa,QAAS,SAAQ,KAAK;aAEf,MAAM,EAAE,MAAM;aACd,IAAI,EAAE,MAAM;gBADZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM;CAKlB"}
package/dist/client.js CHANGED
@@ -33,6 +33,23 @@ export class ApiClient {
33
33
  "User-Agent": `@0xinsider/mcp/${VERSION}`,
34
34
  },
35
35
  });
36
+ return this.decodeResponse(response, path);
37
+ }
38
+ async post(path, body) {
39
+ const url = new URL(`${this.baseUrl}${path}`);
40
+ const response = await fetch(url.toString(), {
41
+ method: "POST",
42
+ headers: {
43
+ Authorization: `Bearer ${this.apiKey}`,
44
+ Accept: "application/json",
45
+ "Content-Type": "application/json",
46
+ "User-Agent": `@0xinsider/mcp/${VERSION}`,
47
+ },
48
+ body: JSON.stringify(body),
49
+ });
50
+ return this.decodeResponse(response, path);
51
+ }
52
+ async decodeResponse(response, path) {
36
53
  const body = await response.json();
37
54
  if (!isApiResponse(body)) {
38
55
  throw new ApiError(response.status, "invalid_response", `Unexpected API response format from ${path}`);
@@ -41,10 +58,19 @@ export class ApiClient {
41
58
  const code = body.error?.code ?? "unknown_error";
42
59
  const message = body.error?.message ?? `HTTP ${response.status}`;
43
60
  const docUrl = body.error?.doc_url;
44
- let errorText = `Error (${code}): ${message}`;
45
- if (code === "rate_limited") {
46
- const retryAfter = response.headers.get("retry-after");
47
- errorText += retryAfter ? ` Retry after ${retryAfter}s.` : "";
61
+ const reason = body.error?.reason;
62
+ // Surface `reason` when present: `Error (not_found)` tells an agent nothing,
63
+ // while `Error (not_found/pick_not_released)` tells it the pick is not out YET.
64
+ let errorText = `Error (${reason ? `${code}/${reason}` : code}): ${message}`;
65
+ // Retry-After on EVERY retryable error, not just rate_limited (#7209). The pick
66
+ // 404 carries it, and dropping it here would leave our own MCP tool unable to do
67
+ // what our own docs tell callers to do -- schedule instead of poll.
68
+ const retryAfter = response.headers.get("retry-after");
69
+ if (retryAfter) {
70
+ errorText += ` Retry after ${retryAfter}s.`;
71
+ }
72
+ if (body.error?.retry_at) {
73
+ errorText += ` Not available before ${body.error.retry_at}.`;
48
74
  }
49
75
  if (code === "subscription_required") {
50
76
  errorText += " Upgrade at https://0xinsider.com/pricing";
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAwBvD,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,QAAQ,IAAI,KAAK,CAAC;AAC1E,CAAC;AAED,MAAM,OAAO,SAAS;IACH,MAAM,CAAS;IACf,OAAO,CAAS;IAEjC,YAAY,MAAc,EAAE,OAAgB;QAC1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,IAAI,YAAY,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,IAAY,EACZ,MAAoD,EACpD,cAAyC;QAEzC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;QAC9C,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAClD,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAC1C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,cAAc,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC3D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YAC3C,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;gBACtC,MAAM,EAAE,kBAAkB;gBAC1B,YAAY,EAAE,kBAAkB,OAAO,EAAE;aAC1C;SACF,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,IAAa;QACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;YAC3C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;gBACtC,MAAM,EAAE,kBAAkB;gBAC1B,cAAc,EAAE,kBAAkB;gBAClC,YAAY,EAAE,kBAAkB,OAAO,EAAE;aAC1C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,QAAkB,EAAE,IAAY;QAC3D,MAAM,IAAI,GAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,EAAE,uCAAuC,IAAI,EAAE,CAAC,CAAC;QACzG,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,eAAe,CAAC;YACjD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC;YACjE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC;YAEnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC;YAClC,6EAA6E;YAC7E,gFAAgF;YAChF,IAAI,SAAS,GAAG,UAAU,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,OAAO,EAAE,CAAC;YAE7E,gFAAgF;YAChF,iFAAiF;YACjF,oEAAoE;YACpE,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACvD,IAAI,UAAU,EAAE,CAAC;gBACf,SAAS,IAAI,gBAAgB,UAAU,IAAI,CAAC;YAC9C,CAAC;YACD,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC;gBACzB,SAAS,IAAI,yBAAyB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC;YAC/D,CAAC;YACD,IAAI,IAAI,KAAK,uBAAuB,EAAE,CAAC;gBACrC,SAAS,IAAI,2CAA2C,CAAC;YAC3D,CAAC;YACD,IAAI,MAAM,EAAE,CAAC;gBACX,SAAS,IAAI,UAAU,MAAM,EAAE,CAAC;YAClC,CAAC;YAED,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEf;IACA;IAFlB,YACkB,MAAc,EACd,IAAY,EAC5B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,WAAM,GAAN,MAAM,CAAQ;QACd,SAAI,GAAJ,IAAI,CAAQ;QAI5B,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF"}