@dopemarkets/agent 0.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/bin/dope.js ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ // Bin entry for the `dope` command.
3
+ //
4
+ // Once installed via `npm install -g @dopemarkets/agent`, this is the file that
5
+ // runs when the user types `dope`. We just forward to the compiled
6
+ // dispatcher in dist/index.js.
7
+
8
+ require('../dist/index.js');
@@ -0,0 +1,13 @@
1
+ import { DopeClient } from '@dopemarkets/agent-client';
2
+ import { type StoredCredential } from './credentials.js';
3
+ import { type CliOutput } from './output.js';
4
+ export declare function getCredentialOrExit(out: CliOutput): StoredCredential;
5
+ export declare function buildClient(cred: StoredCredential): DopeClient;
6
+ /**
7
+ * Convenience for the common pattern: load credential (exit if not logged
8
+ * in, respecting JSON-mode), build client, return both.
9
+ */
10
+ export declare function authedClient(out: CliOutput): {
11
+ client: DopeClient;
12
+ cred: StoredCredential;
13
+ };
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ // Single funnel for "load credential + construct DopeClient". Used by
3
+ // every authenticated command so we have one place to enforce the
4
+ // "must be logged in" precondition.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getCredentialOrExit = getCredentialOrExit;
7
+ exports.buildClient = buildClient;
8
+ exports.authedClient = authedClient;
9
+ const agent_client_1 = require("@dopemarkets/agent-client");
10
+ const credentials_js_1 = require("./credentials.js");
11
+ const output_js_1 = require("./output.js");
12
+ function getCredentialOrExit(out) {
13
+ const cred = (0, credentials_js_1.loadCredential)();
14
+ if (!cred) {
15
+ (0, output_js_1.emitError)(out, { error_code: 'AUTH_REQUIRED', message: 'Not logged in. Run `dope login` first.' }, 2);
16
+ }
17
+ return cred;
18
+ }
19
+ function buildClient(cred) {
20
+ return new agent_client_1.DopeClient({
21
+ baseUrl: cred.base_url,
22
+ credential: {
23
+ agent_key_id: cred.agent_key_id,
24
+ wallet_pubkey: cred.wallet_pubkey,
25
+ public_key_hex: cred.public_key_hex,
26
+ private_key_hex: cred.private_key_hex,
27
+ },
28
+ clientVersion: 'dope-cli/0.1.0',
29
+ });
30
+ }
31
+ /**
32
+ * Convenience for the common pattern: load credential (exit if not logged
33
+ * in, respecting JSON-mode), build client, return both.
34
+ */
35
+ function authedClient(out) {
36
+ const cred = getCredentialOrExit(out);
37
+ const client = buildClient(cred);
38
+ return { client, cred };
39
+ }
40
+ //# sourceMappingURL=client_factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client_factory.js","sourceRoot":"","sources":["../src/client_factory.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,kEAAkE;AAClE,oCAAoC;;AAMpC,kDAUC;AAED,kCAWC;AAMD,oCAIC;AArCD,4DAAuD;AACvD,qDAAyE;AACzE,2CAAwD;AAExD,SAAgB,mBAAmB,CAAC,GAAc;IAChD,MAAM,IAAI,GAAG,IAAA,+BAAc,GAAE,CAAC;IAC9B,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAA,qBAAS,EACP,GAAG,EACH,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,wCAAwC,EAAE,EAClF,CAAC,CACF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,WAAW,CAAC,IAAsB;IAChD,OAAO,IAAI,yBAAU,CAAC;QACpB,OAAO,EAAE,IAAI,CAAC,QAAQ;QACtB,UAAU,EAAE;YACV,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,eAAe,EAAE,IAAI,CAAC,eAAe;SACtC;QACD,aAAa,EAAE,gBAAgB;KAChC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAC,GAAc;IACzC,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type CliOutput } from '../output.js';
2
+ export declare function runAgentKeyList(rest: string[], out: CliOutput): Promise<void>;
3
+ export declare function runAgentKeyRevoke(rest: string[], out: CliOutput): Promise<void>;
4
+ export declare function runAgentKeyCreateHint(out: CliOutput): void;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ // `dope agent-key {list,revoke}`. The third command (`create`) is just
3
+ // `dope login` — conceptually the same flow — so we forward there with
4
+ // a friendly note.
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runAgentKeyList = runAgentKeyList;
7
+ exports.runAgentKeyRevoke = runAgentKeyRevoke;
8
+ exports.runAgentKeyCreateHint = runAgentKeyCreateHint;
9
+ const agent_client_1 = require("@dopemarkets/agent-client");
10
+ const client_factory_js_1 = require("../client_factory.js");
11
+ const output_js_1 = require("../output.js");
12
+ const util_js_1 = require("../util.js");
13
+ async function runAgentKeyList(rest, out) {
14
+ const { flags } = (0, util_js_1.parseArgs)(rest);
15
+ const status = typeof flags['status'] === 'string' ? flags['status'] : undefined;
16
+ const limit = typeof flags['limit'] === 'string' ? Number(flags['limit']) : undefined;
17
+ const { client } = (0, client_factory_js_1.authedClient)(out);
18
+ try {
19
+ const result = await client.listAgentKeys({ status, limit });
20
+ (0, output_js_1.emitOk)(out, result, () => {
21
+ if (result.agent_keys.length === 0)
22
+ return 'No Agent Keys.';
23
+ return result.agent_keys
24
+ .map((k) => `${k.agent_key_id.slice(0, 8)}… ${k.name.padEnd(20)} ${k.status.padEnd(10)} ` +
25
+ `expires=${k.expires_at}\n permissions: ${k.permissions.join(', ')}\n limits: ` +
26
+ `${(0, output_js_1.usd)(k.limits.max_premium_usdc)}/stack · ${(0, output_js_1.usd)(k.limits.max_daily_premium_usdc)}/day`)
27
+ .join('\n\n');
28
+ });
29
+ }
30
+ catch (err) {
31
+ handleApiError(err, out);
32
+ }
33
+ }
34
+ async function runAgentKeyRevoke(rest, out) {
35
+ const { positionals, flags } = (0, util_js_1.parseArgs)(rest);
36
+ const id = positionals[0];
37
+ if (!id) {
38
+ return (0, output_js_1.emitError)(out, {
39
+ error_code: 'INVALID_REQUEST',
40
+ message: 'Usage: dope agent-key revoke <agent_key_id> [--reason "..."]',
41
+ });
42
+ }
43
+ const reason = typeof flags['reason'] === 'string' ? flags['reason'] : undefined;
44
+ const { client } = (0, client_factory_js_1.authedClient)(out);
45
+ try {
46
+ const result = await client.revokeAgentKey(id, reason);
47
+ (0, output_js_1.emitOk)(out, result, () => [(0, output_js_1.row)('Revoked:', result.agent_key_id), 'DOPE-side revocation is immediate.'].join('\n'));
48
+ }
49
+ catch (err) {
50
+ handleApiError(err, out);
51
+ }
52
+ }
53
+ function runAgentKeyCreateHint(out) {
54
+ (0, output_js_1.emitOk)(out, { ok: true, hint: 'Run `dope login` to create a new Agent Key.' }, 'Creating an Agent Key is the same flow as `dope login`. Run that.\n' +
55
+ 'Use --name to label the install, e.g. `dope login --name "Cursor"`.');
56
+ }
57
+ function handleApiError(err, out) {
58
+ if (err instanceof agent_client_1.DopeAgentError) {
59
+ return (0, output_js_1.emitError)(out, { error_code: err.code, message: err.message, details: err.body });
60
+ }
61
+ return (0, output_js_1.emitError)(out, { error_code: 'SERVICE_UNAVAILABLE', message: err.message });
62
+ }
63
+ //# sourceMappingURL=agent_key.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent_key.js","sourceRoot":"","sources":["../../src/commands/agent_key.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type CliOutput } from '../output.js';
2
+ export declare function runBalance(out: CliOutput): Promise<void>;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ // `dope balance` — USDC balance subset.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.runBalance = runBalance;
5
+ const agent_client_1 = require("@dopemarkets/agent-client");
6
+ const client_factory_js_1 = require("../client_factory.js");
7
+ const output_js_1 = require("../output.js");
8
+ async function runBalance(out) {
9
+ const { client } = (0, client_factory_js_1.authedClient)(out);
10
+ try {
11
+ const result = await client.getBalance();
12
+ (0, output_js_1.emitOk)(out, result, () => [
13
+ (0, output_js_1.row)('Wallet:', result.wallet_pubkey),
14
+ (0, output_js_1.row)('Available:', (0, output_js_1.usd)(result.balance.available_usdc)),
15
+ (0, output_js_1.row)('Reserved:', (0, output_js_1.usd)(result.balance.reserved_usdc)),
16
+ (0, output_js_1.row)('Committed:', (0, output_js_1.usd)(result.balance.committed_usdc)),
17
+ (0, output_js_1.row)('Total:', (0, output_js_1.usd)(result.balance.total_usdc)),
18
+ ].join('\n'));
19
+ }
20
+ catch (err) {
21
+ if (err instanceof agent_client_1.DopeAgentError) {
22
+ return (0, output_js_1.emitError)(out, { error_code: err.code, message: err.message, details: err.body });
23
+ }
24
+ return (0, output_js_1.emitError)(out, { error_code: 'SERVICE_UNAVAILABLE', message: err.message });
25
+ }
26
+ }
27
+ //# sourceMappingURL=balance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../src/commands/balance.ts"],"names":[],"mappings":";AAAA,wCAAwC;;AAMxC,gCAmBC;AAvBD,4DAA2D;AAC3D,4DAAoD;AACpD,4CAA2E;AAEpE,KAAK,UAAU,UAAU,CAAC,GAAc;IAC7C,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,gCAAY,EAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QACzC,IAAA,kBAAM,EAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CACvB;YACE,IAAA,eAAG,EAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC;YACpC,IAAA,eAAG,EAAC,YAAY,EAAE,IAAA,eAAG,EAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACrD,IAAA,eAAG,EAAC,WAAW,EAAE,IAAA,eAAG,EAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACnD,IAAA,eAAG,EAAC,YAAY,EAAE,IAAA,eAAG,EAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YACrD,IAAA,eAAG,EAAC,QAAQ,EAAE,IAAA,eAAG,EAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;SAC9C,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,6BAAc,EAAE,CAAC;YAClC,OAAO,IAAA,qBAAS,EAAC,GAAG,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,OAAO,IAAA,qBAAS,EAAC,GAAG,EAAE,EAAE,UAAU,EAAE,qBAAqB,EAAE,OAAO,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAChG,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type CliOutput } from '../output.js';
2
+ export interface LoginArgs {
3
+ name?: string;
4
+ baseUrl?: string;
5
+ maxPremiumUsdc?: number;
6
+ maxDailyPremiumUsdc?: number;
7
+ maxPayoutPerStackUsdc?: number;
8
+ expiresDays?: number;
9
+ quoteOnly?: boolean;
10
+ noBrowser?: boolean;
11
+ }
12
+ export declare function runLogin(args: LoginArgs, out: CliOutput): Promise<void>;
13
+ /** Parse `dope login [args]` invocation flags. */
14
+ export declare function parseLoginArgs(rest: string[]): LoginArgs;
@@ -0,0 +1,172 @@
1
+ "use strict";
2
+ // `dope login` — the load-bearing command.
3
+ //
4
+ // Flow:
5
+ // 1. Generate a fresh P-256 keypair locally.
6
+ // 2. POST /agent/login/init with the public key and requested limits.
7
+ // Backend returns a device_code (CLI's secret), user_code (short
8
+ // typeable), and verification_url.
9
+ // 3. Print the URL and try to open the browser. User authenticates with
10
+ // passkey, sees authorization screen, taps approve. Browser installs
11
+ // the matching Turnkey API-key authenticator on the user's sub-org.
12
+ // 4. Poll /agent/login/exchange every poll_interval_seconds. Once the
13
+ // server returns 'authorized', we have the agent_key_id, the user's
14
+ // wallet_pubkey, and (since the exchange response was extended) the
15
+ // Turnkey sub_org_id needed for activation signing.
16
+ // 5. Save the credential locally to ~/.dope/credentials.json (0600),
17
+ // including the `turnkey` block that `dope stack activate` needs to
18
+ // sign via the installed authenticator on the user's sub-org. The
19
+ // wallet_pubkey doubles as the Turnkey Solana wallet address.
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.runLogin = runLogin;
22
+ exports.parseLoginArgs = parseLoginArgs;
23
+ const agent_client_1 = require("@dopemarkets/agent-client");
24
+ const credentials_js_1 = require("../credentials.js");
25
+ const output_js_1 = require("../output.js");
26
+ const util_js_1 = require("../util.js");
27
+ const DEFAULT_BASE_URL = process.env.DOPE_BASE_URL || 'https://dope-backend-production.up.railway.app';
28
+ const DEFAULT_LIMITS = {
29
+ max_premium_usdc: 20,
30
+ max_daily_premium_usdc: 100,
31
+ max_payout_per_stack_usdc: 1000,
32
+ expires_days: 7,
33
+ };
34
+ const DEFAULT_PERMISSIONS = [
35
+ 'read:account',
36
+ 'read:markets',
37
+ 'read:stacks',
38
+ 'quote:stack',
39
+ 'activate:stack',
40
+ ];
41
+ async function runLogin(args, out) {
42
+ const baseUrl = args.baseUrl || DEFAULT_BASE_URL;
43
+ const name = args.name || 'default';
44
+ const permissions = args.quoteOnly
45
+ ? ['read:account', 'read:markets', 'read:stacks', 'quote:stack']
46
+ : DEFAULT_PERMISSIONS;
47
+ const limits = {
48
+ max_premium_usdc: args.maxPremiumUsdc ?? DEFAULT_LIMITS.max_premium_usdc,
49
+ max_daily_premium_usdc: args.maxDailyPremiumUsdc ?? DEFAULT_LIMITS.max_daily_premium_usdc,
50
+ max_payout_per_stack_usdc: args.maxPayoutPerStackUsdc ?? DEFAULT_LIMITS.max_payout_per_stack_usdc,
51
+ expires_days: args.expiresDays ?? DEFAULT_LIMITS.expires_days,
52
+ };
53
+ const keypair = (0, agent_client_1.generateP256Keypair)();
54
+ if (!out.json) {
55
+ process.stderr.write(`Starting login for "${name}" against ${baseUrl}…\n`);
56
+ }
57
+ const login = new agent_client_1.DopeLoginClient({ baseUrl });
58
+ let initResp;
59
+ try {
60
+ initResp = await login.init({
61
+ name,
62
+ public_key_hex: keypair.publicKeyHex,
63
+ permissions: [...permissions],
64
+ max_premium_usdc: limits.max_premium_usdc,
65
+ max_daily_premium_usdc: limits.max_daily_premium_usdc,
66
+ max_payout_per_stack_usdc: limits.max_payout_per_stack_usdc,
67
+ expires_days: limits.expires_days,
68
+ client_type: 'cli',
69
+ });
70
+ }
71
+ catch (err) {
72
+ return handleApiError(err, out);
73
+ }
74
+ if (!out.json) {
75
+ process.stderr.write('\n');
76
+ process.stderr.write('Open this URL in your browser to authorize:\n');
77
+ process.stderr.write(` ${initResp.verification_url}\n`);
78
+ process.stderr.write(`(code: ${initResp.user_code})\n\n`);
79
+ if (!args.noBrowser) {
80
+ const opened = (0, util_js_1.openInBrowser)(initResp.verification_url);
81
+ if (opened)
82
+ process.stderr.write('Browser opened. Waiting for approval…\n');
83
+ else
84
+ process.stderr.write('Could not open browser automatically. Visit the URL above.\n');
85
+ }
86
+ else {
87
+ process.stderr.write('Waiting for approval…\n');
88
+ }
89
+ }
90
+ // Poll exchange until terminal state. AUTHORIZATION_PENDING means keep
91
+ // waiting; anything else is terminal.
92
+ const pollMs = Math.max(1, initResp.poll_interval_seconds) * 1000;
93
+ const deadline = Date.now() + initResp.expires_in_seconds * 1000;
94
+ let exchangeResp;
95
+ while (true) {
96
+ if (Date.now() > deadline) {
97
+ return (0, output_js_1.emitError)(out, { error_code: 'LOGIN_SESSION_EXPIRED', message: 'Authorization timed out.' }, 2);
98
+ }
99
+ try {
100
+ exchangeResp = await login.exchange(initResp.device_code);
101
+ break;
102
+ }
103
+ catch (err) {
104
+ if (err instanceof agent_client_1.DopeAgentError && err.code === 'AUTHORIZATION_PENDING') {
105
+ await (0, util_js_1.sleep)(pollMs);
106
+ continue;
107
+ }
108
+ return handleApiError(err, out);
109
+ }
110
+ }
111
+ const expiresAt = new Date(Date.now() + limits.expires_days * 86400 * 1000).toISOString();
112
+ // sub_org_id will only be missing for old-backend deployments that
113
+ // haven't been redeployed with the exchange-response extension, or in
114
+ // the unlikely case of a non-passkey approval. In either case we still
115
+ // save the credential — read-only commands (`balance`, `markets`, etc.)
116
+ // work fine without it — but `stack activate` will surface a clear
117
+ // re-login error.
118
+ const turnkey = exchangeResp.sub_org_id != null
119
+ ? { sub_org_id: exchangeResp.sub_org_id, wallet_address: exchangeResp.wallet_pubkey }
120
+ : undefined;
121
+ (0, credentials_js_1.saveCredential)({
122
+ name,
123
+ agent_key_id: exchangeResp.agent_key_id,
124
+ wallet_pubkey: exchangeResp.wallet_pubkey,
125
+ public_key_hex: keypair.publicKeyHex,
126
+ private_key_hex: keypair.privateKeyHex,
127
+ turnkey,
128
+ base_url: baseUrl,
129
+ expires_at: expiresAt,
130
+ created_at: new Date().toISOString(),
131
+ });
132
+ (0, output_js_1.emitOk)(out, {
133
+ ok: true,
134
+ name,
135
+ agent_key_id: exchangeResp.agent_key_id,
136
+ wallet_pubkey: exchangeResp.wallet_pubkey,
137
+ base_url: baseUrl,
138
+ expires_at: expiresAt,
139
+ }, () => [
140
+ '',
141
+ `Authorized as "${name}".`,
142
+ (0, output_js_1.row)('Agent Key:', exchangeResp.agent_key_id),
143
+ (0, output_js_1.row)('Wallet:', exchangeResp.wallet_pubkey),
144
+ (0, output_js_1.row)('Backend:', baseUrl),
145
+ (0, output_js_1.row)('Expires:', expiresAt),
146
+ '',
147
+ `Limits: ${(0, output_js_1.usd)(limits.max_premium_usdc)}/stack · ${(0, output_js_1.usd)(limits.max_daily_premium_usdc)}/day · max payout ${(0, output_js_1.usd)(limits.max_payout_per_stack_usdc)}`,
148
+ '',
149
+ 'Next: try `dope balance` or `dope stack list`.',
150
+ ].join('\n'));
151
+ }
152
+ function handleApiError(err, out) {
153
+ if (err instanceof agent_client_1.DopeAgentError) {
154
+ return (0, output_js_1.emitError)(out, { error_code: err.code, message: err.message, details: err.body }, 1);
155
+ }
156
+ return (0, output_js_1.emitError)(out, { error_code: 'SERVICE_UNAVAILABLE', message: err.message }, 1);
157
+ }
158
+ /** Parse `dope login [args]` invocation flags. */
159
+ function parseLoginArgs(rest) {
160
+ const { flags } = (0, util_js_1.parseArgs)(rest);
161
+ return {
162
+ name: typeof flags['name'] === 'string' ? flags['name'] : undefined,
163
+ baseUrl: typeof flags['base-url'] === 'string' ? flags['base-url'] : undefined,
164
+ maxPremiumUsdc: typeof flags['max-premium'] === 'string' ? Number(flags['max-premium']) : undefined,
165
+ maxDailyPremiumUsdc: typeof flags['daily-limit'] === 'string' ? Number(flags['daily-limit']) : undefined,
166
+ maxPayoutPerStackUsdc: typeof flags['max-payout'] === 'string' ? Number(flags['max-payout']) : undefined,
167
+ expiresDays: typeof flags['expires'] === 'string' ? Number(flags['expires']) : undefined,
168
+ quoteOnly: flags['quote-only'] === true,
169
+ noBrowser: flags['no-browser'] === true,
170
+ };
171
+ }
172
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { type CliOutput } from '../output.js';
2
+ export declare function runMarketsSearch(rest: string[], out: CliOutput): Promise<void>;
3
+ export declare function runMarketsShow(rest: string[], out: CliOutput): Promise<void>;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ // `dope markets search` + `dope markets show`.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.runMarketsSearch = runMarketsSearch;
5
+ exports.runMarketsShow = runMarketsShow;
6
+ const agent_client_1 = require("@dopemarkets/agent-client");
7
+ const client_factory_js_1 = require("../client_factory.js");
8
+ const output_js_1 = require("../output.js");
9
+ const util_js_1 = require("../util.js");
10
+ async function runMarketsSearch(rest, out) {
11
+ const { positionals, flags } = (0, util_js_1.parseArgs)(rest);
12
+ const q = positionals[0] || (typeof flags['q'] === 'string' ? flags['q'] : undefined);
13
+ const { client } = (0, client_factory_js_1.authedClient)(out);
14
+ try {
15
+ const result = await client.searchMarkets({
16
+ q,
17
+ category: typeof flags['category'] === 'string' ? flags['category'] : undefined,
18
+ min_liquidity: typeof flags['min-liquidity'] === 'string' ? Number(flags['min-liquidity']) : undefined,
19
+ closes_before: typeof flags['closes-before'] === 'string' ? flags['closes-before'] : undefined,
20
+ closes_after: typeof flags['closes-after'] === 'string' ? flags['closes-after'] : undefined,
21
+ limit: typeof flags['limit'] === 'string' ? Number(flags['limit']) : undefined,
22
+ cursor: typeof flags['cursor'] === 'string' ? flags['cursor'] : undefined,
23
+ });
24
+ (0, output_js_1.emitOk)(out, result, () => {
25
+ if (result.markets.length === 0)
26
+ return 'No markets matched.';
27
+ return result.markets
28
+ .map((m) => [
29
+ `${m.market_id.slice(0, 14)}… [${m.category || '—'}] vol=${m.volume_usdc}`,
30
+ ` ${m.title}`,
31
+ ` bid=${m.bid ?? '—'} ask=${m.ask ?? '—'} spread=${m.spread ?? '—'} mid=${m.price ?? '—'}`,
32
+ m.source_url ? ` ${m.source_url}` : null,
33
+ ]
34
+ .filter(Boolean)
35
+ .join('\n'))
36
+ .join('\n\n');
37
+ });
38
+ }
39
+ catch (err) {
40
+ handleApiError(err, out);
41
+ }
42
+ }
43
+ async function runMarketsShow(rest, out) {
44
+ const { positionals } = (0, util_js_1.parseArgs)(rest);
45
+ const marketId = positionals[0];
46
+ if (!marketId) {
47
+ return (0, output_js_1.emitError)(out, { error_code: 'INVALID_REQUEST', message: 'Missing market_id' });
48
+ }
49
+ const { client } = (0, client_factory_js_1.authedClient)(out);
50
+ try {
51
+ const result = await client.getMarket(marketId);
52
+ (0, output_js_1.emitOk)(out, result, () => {
53
+ const m = result.market;
54
+ return [
55
+ (0, output_js_1.row)('Market:', m.market_id),
56
+ (0, output_js_1.row)('Title:', m.title),
57
+ (0, output_js_1.row)('Venue:', m.venue),
58
+ (0, output_js_1.row)('Category:', m.category || '—'),
59
+ (0, output_js_1.row)('Outcomes:', m.outcomes.join(' / ')),
60
+ (0, output_js_1.row)('Price:', m.price ?? '—'),
61
+ (0, output_js_1.row)('Bid / Ask:', `${m.bid ?? '—'} / ${m.ask ?? '—'}`),
62
+ (0, output_js_1.row)('Spread:', m.spread ?? '—'),
63
+ (0, output_js_1.row)('Liquidity:', `$${m.liquidity_usdc}`),
64
+ (0, output_js_1.row)('Volume:', `$${m.volume_usdc} (24h $${m.volume_24h_usdc})`),
65
+ (0, output_js_1.row)('Close:', m.close_time || '—'),
66
+ (0, output_js_1.row)('Status:', m.resolution_status),
67
+ (0, output_js_1.row)('Eligible:', m.eligible ? 'yes' : 'no'),
68
+ m.source_url ? (0, output_js_1.row)('URL:', m.source_url) : '',
69
+ ]
70
+ .filter(Boolean)
71
+ .join('\n');
72
+ });
73
+ }
74
+ catch (err) {
75
+ handleApiError(err, out);
76
+ }
77
+ }
78
+ function handleApiError(err, out) {
79
+ if (err instanceof agent_client_1.DopeAgentError) {
80
+ return (0, output_js_1.emitError)(out, { error_code: err.code, message: err.message, details: err.body });
81
+ }
82
+ return (0, output_js_1.emitError)(out, { error_code: 'SERVICE_UNAVAILABLE', message: err.message });
83
+ }
84
+ //# sourceMappingURL=markets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markets.js","sourceRoot":"","sources":["../../src/commands/markets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type CliOutput } from '../output.js';
2
+ export declare function runMcpInstall(rest: string[], out: CliOutput): void;
3
+ export declare function runMcpStart(_rest: string[], out: CliOutput): void;
4
+ export declare function runMcpStatus(_rest: string[], out: CliOutput): void;