@hightop/cli 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/.env.example +11 -0
- package/README.md +126 -0
- package/dist/cli.d.ts +49 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +753 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/package.json +44 -0
package/.env.example
ADDED
package/README.md
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# @hightop/cli
|
|
2
|
+
|
|
3
|
+
Command-line interface for the Hightop Agent API.
|
|
4
|
+
|
|
5
|
+
The executable is `hightop`. The CLI uses `@hightop/sdk` for all Agent API requests and derives normal command coverage from the generated Agent API endpoint catalog.
|
|
6
|
+
|
|
7
|
+
## Configuration
|
|
8
|
+
|
|
9
|
+
Set a base URL and one auth mode for protected commands.
|
|
10
|
+
|
|
11
|
+
Header-key auth:
|
|
12
|
+
|
|
13
|
+
```sh
|
|
14
|
+
export HIGHTOP_BASE_URL=https://api.hightop.com
|
|
15
|
+
export HIGHTOP_AGENT_ID=...
|
|
16
|
+
export HIGHTOP_API_KEY=...
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Bearer-token auth:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
export HIGHTOP_BASE_URL=https://api.hightop.com
|
|
23
|
+
export HIGHTOP_BEARER_TOKEN=...
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Supported environment variables:
|
|
27
|
+
|
|
28
|
+
```txt
|
|
29
|
+
HIGHTOP_BASE_URL
|
|
30
|
+
HIGHTOP_AGENT_ID
|
|
31
|
+
HIGHTOP_API_KEY
|
|
32
|
+
HIGHTOP_BEARER_TOKEN
|
|
33
|
+
HIGHTOP_TIMEOUT_MS
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Equivalent flags are available for local/debug use:
|
|
37
|
+
|
|
38
|
+
```sh
|
|
39
|
+
hightop self --base-url https://api.hightop.com --agent-id ... --api-key ...
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The CLI does not auto-load `.env` files. For local testing, source one into the shell:
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
cp packages/cli/.env.example .env.agent
|
|
46
|
+
# edit .env.agent with real credentials
|
|
47
|
+
set -a
|
|
48
|
+
source .env.agent
|
|
49
|
+
set +a
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Help
|
|
53
|
+
|
|
54
|
+
Global help:
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
hightop --help
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Command-group help:
|
|
61
|
+
|
|
62
|
+
```sh
|
|
63
|
+
hightop x402 --help
|
|
64
|
+
hightop borrow collateral --help
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Endpoint command help:
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
hightop one-off-payments create --help
|
|
71
|
+
hightop webhooks update --help
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
When running from a checkout before publishing, call the built file directly:
|
|
75
|
+
|
|
76
|
+
```sh
|
|
77
|
+
node packages/cli/dist/index.js x402 --help
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Commands
|
|
81
|
+
|
|
82
|
+
Examples:
|
|
83
|
+
|
|
84
|
+
```sh
|
|
85
|
+
hightop self --pretty
|
|
86
|
+
hightop balances --pretty
|
|
87
|
+
hightop operations get <operation-id> --include-onchain --pretty
|
|
88
|
+
hightop borrow repay --asset GREEN --amount-usd 25 --simulate --pretty
|
|
89
|
+
hightop one-off-payments create --to 0x... --asset USDC --amount-usd 25 --simulate --pretty
|
|
90
|
+
hightop webhooks create --url https://example.com/hook --event-types payment.executed,webhook.test --pretty
|
|
91
|
+
hightop x402 quote --url https://example.com/paid-resource --pretty
|
|
92
|
+
hightop raw GET /v1/agent/openapi.json --pretty
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The generated command layer supports all catalogued `/v1/agent/*` endpoints. CLI flags are generated from endpoint query/body field names by converting underscores to dashes, for example `amount_usd` becomes `--amount-usd`.
|
|
96
|
+
|
|
97
|
+
For complex bodies, pass a JSON object:
|
|
98
|
+
|
|
99
|
+
```sh
|
|
100
|
+
hightop x402 sign --body '{"pay_to":"0x...","amount":"1000","target_url":"https://example.com"}'
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Repeated or comma-separated array flags are accepted for known array fields:
|
|
104
|
+
|
|
105
|
+
```sh
|
|
106
|
+
hightop webhooks create --url https://example.com/hook --event-types payment.executed,webhook.test
|
|
107
|
+
hightop earn rewards claim --protocols underscore-earn --protocols ripe-rewards
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Writes
|
|
111
|
+
|
|
112
|
+
For mutating commands, the CLI generates an idempotency key unless `--idempotency-key` is provided. The key is printed in the JSON response so callers can retry the same logical operation intentionally.
|
|
113
|
+
|
|
114
|
+
Use `--simulate` to call `/v1/agent/simulate` instead of broadcasting:
|
|
115
|
+
|
|
116
|
+
```sh
|
|
117
|
+
hightop borrow repay --asset GREEN --amount-usd 25 --simulate --pretty
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Use `--wait` to poll the returned operation until it reaches a terminal state:
|
|
121
|
+
|
|
122
|
+
```sh
|
|
123
|
+
hightop conversions execute --quote-id <quote-id> --wait --pretty
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Public `openapi` and `capabilities json` commands can run without auth, but still require `HIGHTOP_BASE_URL` or `--base-url`.
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { type AgentApiEndpointKey, type AgentApiRequestFor, type AgentApiResponseFor, type AgentApiSimulateRequest, type AgentApiWriteResponse, type HightopAgentClientConfig, type HightopAgentRawRequest } from '@hightop/sdk';
|
|
2
|
+
type WritableOutput = {
|
|
3
|
+
write(chunk: string): unknown;
|
|
4
|
+
};
|
|
5
|
+
export type CliIo = {
|
|
6
|
+
env?: Record<string, string | undefined>;
|
|
7
|
+
stderr: WritableOutput;
|
|
8
|
+
stdout: WritableOutput;
|
|
9
|
+
};
|
|
10
|
+
export type HightopAgentCliClient = {
|
|
11
|
+
request: <Key extends AgentApiEndpointKey>(key: Key, payload?: AgentApiRequestFor<Key>, options?: Record<string, unknown>) => Promise<AgentApiResponseFor<Key>>;
|
|
12
|
+
account: {
|
|
13
|
+
get: () => Promise<unknown>;
|
|
14
|
+
};
|
|
15
|
+
balances: {
|
|
16
|
+
cash: (query?: Record<string, unknown>) => Promise<unknown>;
|
|
17
|
+
list: (query?: Record<string, unknown>) => Promise<unknown>;
|
|
18
|
+
};
|
|
19
|
+
borrow: {
|
|
20
|
+
deleverage: (body: Record<string, unknown>, options: Record<string, unknown>) => Promise<AgentApiWriteResponse>;
|
|
21
|
+
repay: (body: Record<string, unknown>, options: Record<string, unknown>) => Promise<AgentApiWriteResponse>;
|
|
22
|
+
};
|
|
23
|
+
capabilities: {
|
|
24
|
+
get: () => Promise<unknown>;
|
|
25
|
+
};
|
|
26
|
+
conversions: {
|
|
27
|
+
execute: (body: Record<string, unknown>, options: Record<string, unknown>) => Promise<AgentApiWriteResponse>;
|
|
28
|
+
quote: (body: Record<string, unknown>, options: Record<string, unknown>) => Promise<Record<string, unknown> & {
|
|
29
|
+
operation_id?: string;
|
|
30
|
+
}>;
|
|
31
|
+
};
|
|
32
|
+
operations: {
|
|
33
|
+
get: (id: string, query?: Record<string, unknown>) => Promise<unknown>;
|
|
34
|
+
list: (query?: Record<string, unknown>) => Promise<unknown>;
|
|
35
|
+
wait: (id: string, options?: Record<string, unknown>) => Promise<unknown>;
|
|
36
|
+
};
|
|
37
|
+
rawRequest: <Response = unknown>(request: HightopAgentRawRequest) => Promise<Response>;
|
|
38
|
+
self: {
|
|
39
|
+
get: () => Promise<unknown>;
|
|
40
|
+
usage: () => Promise<unknown>;
|
|
41
|
+
};
|
|
42
|
+
simulate: {
|
|
43
|
+
request: (body: AgentApiSimulateRequest) => Promise<unknown>;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
export type HightopAgentCliClientFactory = (config: HightopAgentClientConfig) => HightopAgentCliClient;
|
|
47
|
+
export declare function runCli(argv: string[], io: CliIo, createClient?: HightopAgentCliClientFactory): Promise<number>;
|
|
48
|
+
export {};
|
|
49
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAIA,OAAO,EAML,KAAK,mBAAmB,EAExB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC5B,MAAM,cAAc,CAAA;AAErB,KAAK,cAAc,GAAG;IACpB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,KAAK,GAAG;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACxC,MAAM,EAAE,cAAc,CAAA;IACtB,MAAM,EAAE,cAAc,CAAA;CACvB,CAAA;AA+BD,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,CAAC,GAAG,SAAS,mBAAmB,EACvC,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,EACjC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAA;IACtC,OAAO,EAAE;QACP,GAAG,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;KAC5B,CAAA;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;QAC3D,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KAC5D,CAAA;IACD,MAAM,EAAE;QACN,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;QAC/G,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;KAC3G,CAAA;IACD,YAAY,EAAE;QACZ,GAAG,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;KAC5B,CAAA;IACD,WAAW,EAAE;QACX,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;QAC5G,KAAK,EAAE,CACL,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;YAAE,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAClE,CAAA;IACD,UAAU,EAAE;QACV,GAAG,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;QACtE,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;QAC3D,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KAC1E,CAAA;IACD,UAAU,EAAE,CAAC,QAAQ,GAAG,OAAO,EAAE,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;IACtF,IAAI,EAAE;QACJ,GAAG,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;QAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;KAC9B,CAAA;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;KAC7D,CAAA;CACF,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG,CAAC,MAAM,EAAE,wBAAwB,KAAK,qBAAqB,CAAA;AAw3BtG,wBAAsB,MAAM,CAC1B,IAAI,EAAE,MAAM,EAAE,EACd,EAAE,EAAE,KAAK,EACT,YAAY,GAAE,4BACsD,GACnE,OAAO,CAAC,MAAM,CAAC,CAwBjB"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,753 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { dirname, join } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { agentApiEndpoints, buildAgentApiPath, createIdempotencyKey, HightopAgentClient, HightopAgentSDKError, } from '@hightop/sdk';
|
|
5
|
+
class CliUsageError extends Error {
|
|
6
|
+
constructor(message) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = 'CliUsageError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
const KNOWN_BOOLEAN_REQUEST_FIELDS = [
|
|
12
|
+
'allow_conversion',
|
|
13
|
+
'allow_partial',
|
|
14
|
+
'enabled',
|
|
15
|
+
'move_all',
|
|
16
|
+
'remove_all',
|
|
17
|
+
'repay_all',
|
|
18
|
+
'to_best_available',
|
|
19
|
+
'use_available_cash_first',
|
|
20
|
+
'use_best_available',
|
|
21
|
+
'withdraw_all',
|
|
22
|
+
];
|
|
23
|
+
const BOOLEAN_FLAGS = new Set([
|
|
24
|
+
'help',
|
|
25
|
+
'include-onchain',
|
|
26
|
+
'pretty',
|
|
27
|
+
'repay-all',
|
|
28
|
+
'simulate',
|
|
29
|
+
'version',
|
|
30
|
+
'wait',
|
|
31
|
+
...KNOWN_BOOLEAN_REQUEST_FIELDS.map((field) => field.replace(/_/g, '-')),
|
|
32
|
+
]);
|
|
33
|
+
const PACKAGE_JSON_PATH = join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
|
|
34
|
+
const PUBLIC_NO_AUTH_CLI_ENDPOINT_KEYS = new Set(['GET /v1/agent/openapi.json', 'GET /v1/agent/capabilities.json']);
|
|
35
|
+
function readCliVersion() {
|
|
36
|
+
return JSON.parse(readFileSync(PACKAGE_JSON_PATH, 'utf8')).version;
|
|
37
|
+
}
|
|
38
|
+
function parseArgs(argv) {
|
|
39
|
+
const flags = new Map();
|
|
40
|
+
const positionals = [];
|
|
41
|
+
for (let index = 0; index < argv.length; index += 1) {
|
|
42
|
+
const token = argv[index];
|
|
43
|
+
if (!token.startsWith('--')) {
|
|
44
|
+
positionals.push(token);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const [rawName, inlineValue] = token.slice(2).split(/=(.*)/s, 2);
|
|
48
|
+
const next = argv[index + 1];
|
|
49
|
+
const hasExplicitBooleanValue = BOOLEAN_FLAGS.has(rawName) && (next === 'true' || next === 'false');
|
|
50
|
+
const value = inlineValue ??
|
|
51
|
+
(BOOLEAN_FLAGS.has(rawName)
|
|
52
|
+
? hasExplicitBooleanValue
|
|
53
|
+
? next
|
|
54
|
+
: 'true'
|
|
55
|
+
: next && !next.startsWith('--')
|
|
56
|
+
? next
|
|
57
|
+
: 'true');
|
|
58
|
+
if (inlineValue === undefined &&
|
|
59
|
+
((BOOLEAN_FLAGS.has(rawName) && hasExplicitBooleanValue) ||
|
|
60
|
+
(!BOOLEAN_FLAGS.has(rawName) && next && !next.startsWith('--')))) {
|
|
61
|
+
index += 1;
|
|
62
|
+
}
|
|
63
|
+
const values = flags.get(rawName) ?? [];
|
|
64
|
+
values.push(value);
|
|
65
|
+
flags.set(rawName, values);
|
|
66
|
+
}
|
|
67
|
+
return { flags, positionals };
|
|
68
|
+
}
|
|
69
|
+
function flag(parsed, name) {
|
|
70
|
+
return parsed.flags.get(name)?.at(-1);
|
|
71
|
+
}
|
|
72
|
+
function flagValues(parsed, name) {
|
|
73
|
+
return parsed.flags.get(name) ?? [];
|
|
74
|
+
}
|
|
75
|
+
function hasFlag(parsed, name) {
|
|
76
|
+
return parsed.flags.has(name);
|
|
77
|
+
}
|
|
78
|
+
function endpointSegments(endpoint) {
|
|
79
|
+
return endpoint.path
|
|
80
|
+
.replace(/^\/v1\/agent\/?/, '')
|
|
81
|
+
.split('/')
|
|
82
|
+
.filter(Boolean);
|
|
83
|
+
}
|
|
84
|
+
function endpointPathParamsAfterCommand(endpoint) {
|
|
85
|
+
return endpoint.pathParams.filter((param) => !endpoint.queryParams.includes(param) && !endpoint.bodyParams.includes(param));
|
|
86
|
+
}
|
|
87
|
+
function commandUsage(commandPath, endpoint, pathParamsAfterCommand) {
|
|
88
|
+
const pathSuffix = pathParamsAfterCommand.map((param) => ` <${param}>`).join('');
|
|
89
|
+
const flags = [...endpoint.queryParams, ...endpoint.bodyParams]
|
|
90
|
+
.filter((param) => !endpoint.pathParams.includes(param))
|
|
91
|
+
.map((param) => ` [--${param.replace(/_/g, '-')} <value>]`)
|
|
92
|
+
.join('');
|
|
93
|
+
const submitFlags = endpoint.idempotencyRequired ? ' [--idempotency-key <key>] [--wait] [--simulate]' : '';
|
|
94
|
+
return `hightop ${commandPath.join(' ')}${pathSuffix}${flags}${submitFlags}`;
|
|
95
|
+
}
|
|
96
|
+
function commandFromEndpoint(endpoint) {
|
|
97
|
+
const segments = endpointSegments(endpoint);
|
|
98
|
+
const pathParamsAfterCommand = endpointPathParamsAfterCommand(endpoint);
|
|
99
|
+
const staticSegments = segments.filter((segment) => !segment.startsWith('{'));
|
|
100
|
+
if (endpoint.path === '/v1/agent/capabilities.json') {
|
|
101
|
+
return { commandPath: ['capabilities', 'json'], pathParamsAfterCommand };
|
|
102
|
+
}
|
|
103
|
+
if (endpoint.method === 'GET' && endpoint.pathParams.length === 0) {
|
|
104
|
+
return { commandPath: staticSegments, pathParamsAfterCommand };
|
|
105
|
+
}
|
|
106
|
+
if (endpoint.method === 'GET' && endpoint.pathParams.length > 0) {
|
|
107
|
+
const tail = staticSegments.slice(1);
|
|
108
|
+
if (tail.length > 0) {
|
|
109
|
+
return { commandPath: [staticSegments[0], ...tail], pathParamsAfterCommand };
|
|
110
|
+
}
|
|
111
|
+
return { commandPath: [staticSegments[0], 'get'], pathParamsAfterCommand };
|
|
112
|
+
}
|
|
113
|
+
if (endpoint.method === 'POST') {
|
|
114
|
+
if (endpoint.pathParams.length > 0) {
|
|
115
|
+
return { commandPath: staticSegments, pathParamsAfterCommand };
|
|
116
|
+
}
|
|
117
|
+
if (staticSegments.length === 1) {
|
|
118
|
+
if (staticSegments[0] === 'conversions') {
|
|
119
|
+
return { commandPath: ['conversions', 'execute'], pathParamsAfterCommand };
|
|
120
|
+
}
|
|
121
|
+
return { commandPath: [staticSegments[0], 'create'], pathParamsAfterCommand };
|
|
122
|
+
}
|
|
123
|
+
return { commandPath: staticSegments, pathParamsAfterCommand };
|
|
124
|
+
}
|
|
125
|
+
if (endpoint.method === 'PATCH') {
|
|
126
|
+
return { commandPath: [staticSegments[0], 'update'], pathParamsAfterCommand };
|
|
127
|
+
}
|
|
128
|
+
if (endpoint.method === 'DELETE') {
|
|
129
|
+
return { commandPath: [staticSegments[0], 'delete'], pathParamsAfterCommand };
|
|
130
|
+
}
|
|
131
|
+
return { commandPath: staticSegments, pathParamsAfterCommand };
|
|
132
|
+
}
|
|
133
|
+
function buildCliEndpointCommands() {
|
|
134
|
+
const commands = agentApiEndpoints
|
|
135
|
+
.filter((endpoint) => endpoint.key !== 'POST /v1/agent/simulate')
|
|
136
|
+
.flatMap((endpoint) => {
|
|
137
|
+
const primary = commandFromEndpoint(endpoint);
|
|
138
|
+
const aliases = [primary];
|
|
139
|
+
if (endpoint.key === 'GET /v1/agent/self/usage') {
|
|
140
|
+
aliases.push({ commandPath: ['usage'], pathParamsAfterCommand: [] });
|
|
141
|
+
}
|
|
142
|
+
if (endpoint.method === 'GET' &&
|
|
143
|
+
endpoint.pathParams.length === 0 &&
|
|
144
|
+
endpoint.queryParams.some((param) => param === 'cursor' || param === 'limit')) {
|
|
145
|
+
aliases.push({ commandPath: [...primary.commandPath, 'list'], pathParamsAfterCommand: [] });
|
|
146
|
+
}
|
|
147
|
+
return aliases.map((alias) => ({
|
|
148
|
+
commandPath: alias.commandPath,
|
|
149
|
+
endpoint,
|
|
150
|
+
pathParamsAfterCommand: alias.pathParamsAfterCommand,
|
|
151
|
+
usage: commandUsage(alias.commandPath, endpoint, alias.pathParamsAfterCommand),
|
|
152
|
+
}));
|
|
153
|
+
});
|
|
154
|
+
commands.push({
|
|
155
|
+
commandPath: ['openapi'],
|
|
156
|
+
endpoint: {
|
|
157
|
+
bodyParams: [],
|
|
158
|
+
bodySchema: null,
|
|
159
|
+
description: 'Return the public Agent API OpenAPI document.',
|
|
160
|
+
idempotencyRequired: false,
|
|
161
|
+
key: 'GET /v1/agent/openapi.json',
|
|
162
|
+
method: 'GET',
|
|
163
|
+
path: '/v1/agent/openapi.json',
|
|
164
|
+
pathParams: [],
|
|
165
|
+
queryParams: [],
|
|
166
|
+
requestSchema: null,
|
|
167
|
+
requestType: null,
|
|
168
|
+
responseSchema: null,
|
|
169
|
+
responseType: null,
|
|
170
|
+
routeClass: 'read',
|
|
171
|
+
},
|
|
172
|
+
pathParamsAfterCommand: [],
|
|
173
|
+
usage: 'hightop openapi',
|
|
174
|
+
});
|
|
175
|
+
const seen = new Set();
|
|
176
|
+
return commands.filter((command) => {
|
|
177
|
+
const key = command.commandPath.join(' ');
|
|
178
|
+
if (seen.has(key)) {
|
|
179
|
+
return false;
|
|
180
|
+
}
|
|
181
|
+
seen.add(key);
|
|
182
|
+
return true;
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
const CLI_ENDPOINT_COMMANDS = buildCliEndpointCommands();
|
|
186
|
+
function commandDisplayName(command) {
|
|
187
|
+
const suffix = command.pathParamsAfterCommand.map((param) => ` <${param}>`).join('');
|
|
188
|
+
return `${command.commandPath.join(' ')}${suffix}`;
|
|
189
|
+
}
|
|
190
|
+
function formatGlobalHelp() {
|
|
191
|
+
const commandLines = CLI_ENDPOINT_COMMANDS.map((command) => ({
|
|
192
|
+
description: command.endpoint.description,
|
|
193
|
+
name: commandDisplayName(command),
|
|
194
|
+
}))
|
|
195
|
+
.sort((a, b) => a.name.localeCompare(b.name))
|
|
196
|
+
.map(({ description, name }) => ` ${name.padEnd(42)} ${description}`)
|
|
197
|
+
.join('\n');
|
|
198
|
+
return `Usage:
|
|
199
|
+
hightop [command] [options]
|
|
200
|
+
|
|
201
|
+
Commands:
|
|
202
|
+
${commandLines}
|
|
203
|
+
operations wait <id> Wait for an operation to finish
|
|
204
|
+
raw <method> <path> Call a known Agent API route
|
|
205
|
+
simulate <method> <path> Simulate a write request
|
|
206
|
+
|
|
207
|
+
Global options:
|
|
208
|
+
--base-url <url> Agent API base URL
|
|
209
|
+
--agent-id <id> Agent id for header-key auth
|
|
210
|
+
--api-key <key> API key for header-key auth
|
|
211
|
+
--bearer-token <token> Bearer token auth
|
|
212
|
+
--timeout-ms <ms> Request timeout
|
|
213
|
+
--pretty Pretty-print JSON output
|
|
214
|
+
--version, -v Print CLI version
|
|
215
|
+
--help, -h Print help
|
|
216
|
+
|
|
217
|
+
Environment:
|
|
218
|
+
HIGHTOP_BASE_URL
|
|
219
|
+
HIGHTOP_AGENT_ID
|
|
220
|
+
HIGHTOP_API_KEY
|
|
221
|
+
HIGHTOP_BEARER_TOKEN
|
|
222
|
+
HIGHTOP_TIMEOUT_MS
|
|
223
|
+
|
|
224
|
+
Examples:
|
|
225
|
+
hightop self --pretty
|
|
226
|
+
hightop balances --pretty
|
|
227
|
+
hightop operations get <operation-id> --include-onchain --pretty
|
|
228
|
+
hightop borrow repay --asset GREEN --amount-usd 25 --simulate --pretty
|
|
229
|
+
hightop one-off-payments create --to 0x... --asset USDC --amount-usd 25 --simulate --pretty
|
|
230
|
+
hightop raw GET /v1/agent/openapi.json --pretty
|
|
231
|
+
`;
|
|
232
|
+
}
|
|
233
|
+
function formatCommandHelp(commandPath) {
|
|
234
|
+
if (commandPath.length === 0) {
|
|
235
|
+
return formatGlobalHelp();
|
|
236
|
+
}
|
|
237
|
+
const matches = CLI_ENDPOINT_COMMANDS.filter((command) => commandPath.every((segment, index) => command.commandPath[index] === segment));
|
|
238
|
+
if (matches.length === 0) {
|
|
239
|
+
return `No help found for: hightop ${commandPath.join(' ')}\n\n${formatGlobalHelp()}`;
|
|
240
|
+
}
|
|
241
|
+
const exact = matches.find((command) => command.commandPath.length === commandPath.length);
|
|
242
|
+
if (exact && matches.length === 1) {
|
|
243
|
+
const endpoint = exact.endpoint;
|
|
244
|
+
const requestFlags = [...endpoint.queryParams, ...endpoint.bodyParams].filter((param) => !endpoint.pathParams.includes(param));
|
|
245
|
+
const flagLines = requestFlags.length > 0
|
|
246
|
+
? `\nRequest flags:\n${requestFlags.map((param) => ` --${param.replace(/_/g, '-')} <value>`).join('\n')}\n`
|
|
247
|
+
: '';
|
|
248
|
+
const submitLines = endpoint.idempotencyRequired
|
|
249
|
+
? '\nSubmit options:\n --idempotency-key <key>\n --simulate\n --wait\n --wait-timeout-ms <ms>\n'
|
|
250
|
+
: '';
|
|
251
|
+
return `Usage:
|
|
252
|
+
${exact.usage}
|
|
253
|
+
|
|
254
|
+
Endpoint:
|
|
255
|
+
${endpoint.method} ${endpoint.path}
|
|
256
|
+
|
|
257
|
+
${endpoint.description}
|
|
258
|
+
${flagLines}${submitLines}`;
|
|
259
|
+
}
|
|
260
|
+
return `Usage:
|
|
261
|
+
hightop ${commandPath.join(' ')} <subcommand> [options]
|
|
262
|
+
|
|
263
|
+
Commands:
|
|
264
|
+
${matches
|
|
265
|
+
.map((command) => ` ${commandDisplayName(command).padEnd(42)} ${command.endpoint.description}`)
|
|
266
|
+
.sort()
|
|
267
|
+
.join('\n')}
|
|
268
|
+
`;
|
|
269
|
+
}
|
|
270
|
+
function helpCommandPath(parsed) {
|
|
271
|
+
return parsed.positionals.filter((position) => position !== 'help' && position !== '-h');
|
|
272
|
+
}
|
|
273
|
+
function parsePositiveInteger(value, name) {
|
|
274
|
+
if (value === undefined) {
|
|
275
|
+
return undefined;
|
|
276
|
+
}
|
|
277
|
+
const parsed = Number(value);
|
|
278
|
+
if (!Number.isInteger(parsed) || parsed <= 0) {
|
|
279
|
+
throw new CliUsageError(`${name} must be a positive integer`);
|
|
280
|
+
}
|
|
281
|
+
return parsed;
|
|
282
|
+
}
|
|
283
|
+
function parseJson(value, name) {
|
|
284
|
+
if (value === undefined) {
|
|
285
|
+
return undefined;
|
|
286
|
+
}
|
|
287
|
+
try {
|
|
288
|
+
return JSON.parse(value);
|
|
289
|
+
}
|
|
290
|
+
catch {
|
|
291
|
+
throw new CliUsageError(`${name} must be valid JSON`);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
function parseKeyValueFlags(values, name) {
|
|
295
|
+
const result = {};
|
|
296
|
+
for (const value of values) {
|
|
297
|
+
const separator = value.indexOf('=');
|
|
298
|
+
if (separator <= 0) {
|
|
299
|
+
throw new CliUsageError(`${name} must use key=value`);
|
|
300
|
+
}
|
|
301
|
+
result[value.slice(0, separator)] = value.slice(separator + 1);
|
|
302
|
+
}
|
|
303
|
+
return result;
|
|
304
|
+
}
|
|
305
|
+
function commandAllowsMissingAuth(parsed) {
|
|
306
|
+
if (parsed.positionals[0] === 'raw') {
|
|
307
|
+
const method = parsed.positionals[1]?.toUpperCase();
|
|
308
|
+
const path = parsed.positionals[2];
|
|
309
|
+
return PUBLIC_NO_AUTH_CLI_ENDPOINT_KEYS.has(`${method} ${path}`);
|
|
310
|
+
}
|
|
311
|
+
const match = findCliEndpointCommand(parsed.positionals);
|
|
312
|
+
return match ? PUBLIC_NO_AUTH_CLI_ENDPOINT_KEYS.has(match.command.endpoint.key) : false;
|
|
313
|
+
}
|
|
314
|
+
function resolveConfig(parsed, env, options = {}) {
|
|
315
|
+
const agentId = flag(parsed, 'agent-id') ?? env.HIGHTOP_AGENT_ID;
|
|
316
|
+
const apiKey = flag(parsed, 'api-key') ?? env.HIGHTOP_API_KEY;
|
|
317
|
+
const baseUrl = flag(parsed, 'base-url') ?? env.HIGHTOP_BASE_URL;
|
|
318
|
+
const bearerToken = flag(parsed, 'bearer-token') ?? env.HIGHTOP_BEARER_TOKEN;
|
|
319
|
+
const requireAuth = options.requireAuth ?? true;
|
|
320
|
+
if (!baseUrl) {
|
|
321
|
+
throw new CliUsageError('Missing base URL. Set HIGHTOP_BASE_URL or pass --base-url.');
|
|
322
|
+
}
|
|
323
|
+
if ((agentId || apiKey) && bearerToken) {
|
|
324
|
+
throw new CliUsageError('Configure either agent-id/api-key or bearer-token, not both.');
|
|
325
|
+
}
|
|
326
|
+
if (agentId || apiKey) {
|
|
327
|
+
if (!agentId || !apiKey) {
|
|
328
|
+
throw new CliUsageError('Both agent-id and api-key are required for header-key auth.');
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
else if (!bearerToken && requireAuth) {
|
|
332
|
+
throw new CliUsageError('Missing auth. Set HIGHTOP_AGENT_ID/HIGHTOP_API_KEY or HIGHTOP_BEARER_TOKEN.');
|
|
333
|
+
}
|
|
334
|
+
return {
|
|
335
|
+
apiKey,
|
|
336
|
+
agentId,
|
|
337
|
+
baseUrl,
|
|
338
|
+
bearerToken,
|
|
339
|
+
timeoutMs: parsePositiveInteger(flag(parsed, 'timeout-ms') ?? env.HIGHTOP_TIMEOUT_MS, 'timeout-ms'),
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
function writeJson(output, value, pretty) {
|
|
343
|
+
output.write(`${JSON.stringify(value, null, pretty ? 2 : 0)}\n`);
|
|
344
|
+
}
|
|
345
|
+
function listQuery(parsed) {
|
|
346
|
+
return {
|
|
347
|
+
...parseKeyValueFlags(flagValues(parsed, 'query'), '--query'),
|
|
348
|
+
...(flag(parsed, 'cursor') ? { cursor: flag(parsed, 'cursor') } : {}),
|
|
349
|
+
...(flag(parsed, 'limit') ? { limit: Number(flag(parsed, 'limit')) } : {}),
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
function requiredFlag(parsed, name) {
|
|
353
|
+
const value = flag(parsed, name);
|
|
354
|
+
if (!value || value === 'true') {
|
|
355
|
+
throw new CliUsageError(`--${name} is required`);
|
|
356
|
+
}
|
|
357
|
+
return value;
|
|
358
|
+
}
|
|
359
|
+
function optionalBoolean(parsed, name) {
|
|
360
|
+
const value = flag(parsed, name);
|
|
361
|
+
if (value === undefined) {
|
|
362
|
+
return undefined;
|
|
363
|
+
}
|
|
364
|
+
if (value === 'true') {
|
|
365
|
+
return true;
|
|
366
|
+
}
|
|
367
|
+
if (value === 'false') {
|
|
368
|
+
return false;
|
|
369
|
+
}
|
|
370
|
+
throw new CliUsageError(`--${name} must be true or false`);
|
|
371
|
+
}
|
|
372
|
+
function optionalNumber(parsed, name) {
|
|
373
|
+
const value = flag(parsed, name);
|
|
374
|
+
if (value === undefined) {
|
|
375
|
+
return undefined;
|
|
376
|
+
}
|
|
377
|
+
const parsedValue = Number(value);
|
|
378
|
+
if (!Number.isFinite(parsedValue)) {
|
|
379
|
+
throw new CliUsageError(`--${name} must be a number`);
|
|
380
|
+
}
|
|
381
|
+
return parsedValue;
|
|
382
|
+
}
|
|
383
|
+
function addAmountChoice(parsed, body, options = {}) {
|
|
384
|
+
const amount = flag(parsed, 'amount');
|
|
385
|
+
const amountUsd = flag(parsed, 'amount-usd');
|
|
386
|
+
const allRequested = options.allFlag ? optionalBoolean(parsed, options.allFlag) === true : false;
|
|
387
|
+
const selected = [amount !== undefined, amountUsd !== undefined, allRequested].filter(Boolean).length;
|
|
388
|
+
if (selected !== 1) {
|
|
389
|
+
const choices = options.allFlag ? `--amount, --amount-usd, or --${options.allFlag}` : '--amount or --amount-usd';
|
|
390
|
+
throw new CliUsageError(`Exactly one of ${choices} is required`);
|
|
391
|
+
}
|
|
392
|
+
if (amount !== undefined) {
|
|
393
|
+
body.amount = amount;
|
|
394
|
+
}
|
|
395
|
+
if (amountUsd !== undefined) {
|
|
396
|
+
body.amount_usd = amountUsd;
|
|
397
|
+
}
|
|
398
|
+
if (options.allFlag && allRequested) {
|
|
399
|
+
body[options.allFlag.replace(/-/g, '_')] = true;
|
|
400
|
+
}
|
|
401
|
+
return body;
|
|
402
|
+
}
|
|
403
|
+
function compactObject(value) {
|
|
404
|
+
return Object.fromEntries(Object.entries(value).filter(([, entryValue]) => entryValue !== undefined));
|
|
405
|
+
}
|
|
406
|
+
const NUMBER_REQUEST_FIELDS = new Set([
|
|
407
|
+
'expires_in_seconds',
|
|
408
|
+
'limit',
|
|
409
|
+
'max_timeout_seconds',
|
|
410
|
+
'slippage_percent',
|
|
411
|
+
'timeout_ms',
|
|
412
|
+
'unlock_delay_seconds',
|
|
413
|
+
]);
|
|
414
|
+
const ARRAY_REQUEST_FIELDS = new Set(['event_types', 'protocols']);
|
|
415
|
+
function flagNameForField(field) {
|
|
416
|
+
return field.replace(/_/g, '-');
|
|
417
|
+
}
|
|
418
|
+
function parseRequestValue(field, value) {
|
|
419
|
+
if (value === 'true') {
|
|
420
|
+
return true;
|
|
421
|
+
}
|
|
422
|
+
if (value === 'false') {
|
|
423
|
+
return false;
|
|
424
|
+
}
|
|
425
|
+
if (value === 'null') {
|
|
426
|
+
return null;
|
|
427
|
+
}
|
|
428
|
+
if (NUMBER_REQUEST_FIELDS.has(field)) {
|
|
429
|
+
const numberValue = Number(value);
|
|
430
|
+
if (!Number.isFinite(numberValue)) {
|
|
431
|
+
throw new CliUsageError(`--${flagNameForField(field)} must be a number`);
|
|
432
|
+
}
|
|
433
|
+
return numberValue;
|
|
434
|
+
}
|
|
435
|
+
const firstCharacter = value.trimStart()[0];
|
|
436
|
+
if (firstCharacter === '{' || firstCharacter === '[' || firstCharacter === '"') {
|
|
437
|
+
return parseJson(value, `--${flagNameForField(field)}`);
|
|
438
|
+
}
|
|
439
|
+
return value;
|
|
440
|
+
}
|
|
441
|
+
function requestFieldValue(parsed, field) {
|
|
442
|
+
const values = flagValues(parsed, flagNameForField(field));
|
|
443
|
+
if (values.length === 0) {
|
|
444
|
+
return undefined;
|
|
445
|
+
}
|
|
446
|
+
if (ARRAY_REQUEST_FIELDS.has(field)) {
|
|
447
|
+
if (values.length === 1 && values[0].trim().startsWith('[')) {
|
|
448
|
+
return parseJson(values[0], `--${flagNameForField(field)}`);
|
|
449
|
+
}
|
|
450
|
+
return values.flatMap((value) => value
|
|
451
|
+
.split(',')
|
|
452
|
+
.map((item) => item.trim())
|
|
453
|
+
.filter(Boolean));
|
|
454
|
+
}
|
|
455
|
+
return parseRequestValue(field, values.at(-1));
|
|
456
|
+
}
|
|
457
|
+
function findCliEndpointCommand(positionals) {
|
|
458
|
+
const commands = [...CLI_ENDPOINT_COMMANDS].sort((a, b) => b.commandPath.length - a.commandPath.length);
|
|
459
|
+
for (const command of commands) {
|
|
460
|
+
const matches = command.commandPath.every((segment, index) => positionals[index] === segment);
|
|
461
|
+
if (matches) {
|
|
462
|
+
return {
|
|
463
|
+
command,
|
|
464
|
+
remaining: positionals.slice(command.commandPath.length),
|
|
465
|
+
};
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
return null;
|
|
469
|
+
}
|
|
470
|
+
function buildEndpointPayload(parsed, command, remainingPositionals) {
|
|
471
|
+
if (remainingPositionals.length !== command.pathParamsAfterCommand.length) {
|
|
472
|
+
throw new CliUsageError(`Usage: ${command.usage}`);
|
|
473
|
+
}
|
|
474
|
+
const endpoint = command.endpoint;
|
|
475
|
+
const pathParams = {};
|
|
476
|
+
command.pathParamsAfterCommand.forEach((param, index) => {
|
|
477
|
+
pathParams[param] = remainingPositionals[index];
|
|
478
|
+
});
|
|
479
|
+
const payload = { ...pathParams };
|
|
480
|
+
for (const field of [...endpoint.queryParams, ...endpoint.bodyParams]) {
|
|
481
|
+
if (endpoint.pathParams.includes(field)) {
|
|
482
|
+
continue;
|
|
483
|
+
}
|
|
484
|
+
const value = requestFieldValue(parsed, field);
|
|
485
|
+
if (value !== undefined) {
|
|
486
|
+
payload[field] = value;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
if (endpoint.queryParams.includes('include') && hasFlag(parsed, 'include-onchain')) {
|
|
490
|
+
payload.include = 'onchain';
|
|
491
|
+
}
|
|
492
|
+
const bodyOverride = parseJson(flag(parsed, 'body'), '--body');
|
|
493
|
+
if (bodyOverride !== undefined) {
|
|
494
|
+
if (!bodyOverride || typeof bodyOverride !== 'object' || Array.isArray(bodyOverride)) {
|
|
495
|
+
throw new CliUsageError('--body must be a JSON object for endpoint commands');
|
|
496
|
+
}
|
|
497
|
+
Object.assign(payload, bodyOverride);
|
|
498
|
+
}
|
|
499
|
+
return {
|
|
500
|
+
body: compactObject(Object.fromEntries(endpoint.bodyParams.map((field) => [field, payload[field]]))),
|
|
501
|
+
pathParams,
|
|
502
|
+
payload: compactObject(payload),
|
|
503
|
+
};
|
|
504
|
+
}
|
|
505
|
+
async function executeGeneratedEndpointCommand(client, parsed) {
|
|
506
|
+
const match = findCliEndpointCommand(parsed.positionals);
|
|
507
|
+
if (!match) {
|
|
508
|
+
return { matched: false };
|
|
509
|
+
}
|
|
510
|
+
const { body, pathParams, payload } = buildEndpointPayload(parsed, match.command, match.remaining);
|
|
511
|
+
const endpoint = match.command.endpoint;
|
|
512
|
+
if (endpoint.key === 'GET /v1/agent/openapi.json') {
|
|
513
|
+
return {
|
|
514
|
+
matched: true,
|
|
515
|
+
result: await client.rawRequest({ method: 'GET', path: '/v1/agent/openapi.json' }),
|
|
516
|
+
};
|
|
517
|
+
}
|
|
518
|
+
if (hasFlag(parsed, 'simulate') && endpoint.method !== 'GET') {
|
|
519
|
+
return {
|
|
520
|
+
matched: true,
|
|
521
|
+
result: {
|
|
522
|
+
mode: 'simulate',
|
|
523
|
+
response: await client.simulate.request({
|
|
524
|
+
body,
|
|
525
|
+
method: endpoint.method,
|
|
526
|
+
path: buildAgentApiPath(endpoint.path, pathParams),
|
|
527
|
+
}),
|
|
528
|
+
},
|
|
529
|
+
};
|
|
530
|
+
}
|
|
531
|
+
const options = {};
|
|
532
|
+
let idempotencyKey;
|
|
533
|
+
if (endpoint.idempotencyRequired) {
|
|
534
|
+
idempotencyKey = flag(parsed, 'idempotency-key') ?? createIdempotencyKey();
|
|
535
|
+
options.idempotencyKey = idempotencyKey;
|
|
536
|
+
}
|
|
537
|
+
const response = (await client.request(endpoint.key, payload, options));
|
|
538
|
+
if (!endpoint.idempotencyRequired) {
|
|
539
|
+
return { matched: true, result: response };
|
|
540
|
+
}
|
|
541
|
+
const output = {
|
|
542
|
+
idempotency_key: idempotencyKey,
|
|
543
|
+
mode: 'submit',
|
|
544
|
+
response,
|
|
545
|
+
};
|
|
546
|
+
if (hasFlag(parsed, 'wait') && typeof response.operation_id === 'string') {
|
|
547
|
+
output.wait = await client.operations.wait(response.operation_id, {
|
|
548
|
+
timeoutMs: parsePositiveInteger(flag(parsed, 'wait-timeout-ms'), 'wait-timeout-ms'),
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
return { matched: true, result: output };
|
|
552
|
+
}
|
|
553
|
+
async function submitWrite(parsed, client, input) {
|
|
554
|
+
const body = compactObject(input.body);
|
|
555
|
+
if (hasFlag(parsed, 'simulate')) {
|
|
556
|
+
return {
|
|
557
|
+
mode: 'simulate',
|
|
558
|
+
response: await client.simulate.request({
|
|
559
|
+
body,
|
|
560
|
+
method: input.method,
|
|
561
|
+
path: input.path,
|
|
562
|
+
}),
|
|
563
|
+
};
|
|
564
|
+
}
|
|
565
|
+
const idempotencyKey = flag(parsed, 'idempotency-key') ?? createIdempotencyKey();
|
|
566
|
+
const response = await input.execute(body, { idempotencyKey });
|
|
567
|
+
const output = {
|
|
568
|
+
idempotency_key: idempotencyKey,
|
|
569
|
+
mode: 'submit',
|
|
570
|
+
response,
|
|
571
|
+
};
|
|
572
|
+
if (hasFlag(parsed, 'wait') && typeof response.operation_id === 'string') {
|
|
573
|
+
output.wait = await client.operations.wait(response.operation_id, {
|
|
574
|
+
timeoutMs: parsePositiveInteger(flag(parsed, 'wait-timeout-ms'), 'wait-timeout-ms'),
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
return output;
|
|
578
|
+
}
|
|
579
|
+
async function executeCommand(client, parsed) {
|
|
580
|
+
const [command, subcommand, id] = parsed.positionals;
|
|
581
|
+
if (!command || (command === 'self' && !subcommand)) {
|
|
582
|
+
return client.self.get();
|
|
583
|
+
}
|
|
584
|
+
if (command === 'usage' || (command === 'self' && subcommand === 'usage')) {
|
|
585
|
+
return client.self.usage();
|
|
586
|
+
}
|
|
587
|
+
if (command === 'capabilities' && !subcommand) {
|
|
588
|
+
return client.capabilities.get();
|
|
589
|
+
}
|
|
590
|
+
if (command === 'account') {
|
|
591
|
+
return client.account.get();
|
|
592
|
+
}
|
|
593
|
+
if (command === 'balances') {
|
|
594
|
+
return subcommand === 'cash' ? client.balances.cash(listQuery(parsed)) : client.balances.list(listQuery(parsed));
|
|
595
|
+
}
|
|
596
|
+
if (command === 'borrow') {
|
|
597
|
+
if (subcommand === 'repay') {
|
|
598
|
+
const body = addAmountChoice(parsed, {
|
|
599
|
+
allow_conversion: optionalBoolean(parsed, 'allow-conversion'),
|
|
600
|
+
asset: requiredFlag(parsed, 'asset'),
|
|
601
|
+
source_asset: flag(parsed, 'source-asset'),
|
|
602
|
+
}, { allFlag: 'repay-all' });
|
|
603
|
+
return submitWrite(parsed, client, {
|
|
604
|
+
body,
|
|
605
|
+
execute: (payload, options) => client.borrow.repay(payload, options),
|
|
606
|
+
method: 'POST',
|
|
607
|
+
path: '/v1/agent/borrow/repay',
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
if (subcommand === 'deleverage') {
|
|
611
|
+
const body = {
|
|
612
|
+
allow_conversion: optionalBoolean(parsed, 'allow-conversion'),
|
|
613
|
+
allow_partial: optionalBoolean(parsed, 'allow-partial'),
|
|
614
|
+
max_repay_amount_usd: flag(parsed, 'max-repay-amount-usd'),
|
|
615
|
+
source_asset: flag(parsed, 'source-asset'),
|
|
616
|
+
target_ltv: requiredFlag(parsed, 'target-ltv'),
|
|
617
|
+
use_available_cash_first: optionalBoolean(parsed, 'use-available-cash-first'),
|
|
618
|
+
};
|
|
619
|
+
return submitWrite(parsed, client, {
|
|
620
|
+
body,
|
|
621
|
+
execute: (payload, options) => client.borrow.deleverage(payload, options),
|
|
622
|
+
method: 'POST',
|
|
623
|
+
path: '/v1/agent/borrow/deleverage',
|
|
624
|
+
});
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
if (command === 'conversions') {
|
|
628
|
+
if (subcommand === 'quote') {
|
|
629
|
+
const body = addAmountChoice(parsed, {
|
|
630
|
+
from_asset: requiredFlag(parsed, 'from-asset'),
|
|
631
|
+
from_vault_address: flag(parsed, 'from-vault-address'),
|
|
632
|
+
slippage_percent: optionalNumber(parsed, 'slippage-percent'),
|
|
633
|
+
to_asset: requiredFlag(parsed, 'to-asset'),
|
|
634
|
+
to_vault_address: flag(parsed, 'to-vault-address'),
|
|
635
|
+
});
|
|
636
|
+
return submitWrite(parsed, client, {
|
|
637
|
+
body,
|
|
638
|
+
execute: (payload, options) => client.conversions.quote(payload, options),
|
|
639
|
+
method: 'POST',
|
|
640
|
+
path: '/v1/agent/conversions/quote',
|
|
641
|
+
});
|
|
642
|
+
}
|
|
643
|
+
if (subcommand === 'execute') {
|
|
644
|
+
const body = { quote_id: requiredFlag(parsed, 'quote-id') };
|
|
645
|
+
return submitWrite(parsed, client, {
|
|
646
|
+
body,
|
|
647
|
+
execute: (payload, options) => client.conversions.execute(payload, options),
|
|
648
|
+
method: 'POST',
|
|
649
|
+
path: '/v1/agent/conversions',
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
if (command === 'simulate') {
|
|
654
|
+
const method = subcommand?.toUpperCase();
|
|
655
|
+
if (!method || !['POST', 'PATCH', 'DELETE'].includes(method)) {
|
|
656
|
+
throw new CliUsageError('simulate requires one of POST, PATCH, DELETE');
|
|
657
|
+
}
|
|
658
|
+
if (!id?.startsWith('/v1/agent/')) {
|
|
659
|
+
throw new CliUsageError('simulate path must be a /v1/agent endpoint');
|
|
660
|
+
}
|
|
661
|
+
return client.simulate.request({
|
|
662
|
+
body: parseJson(flag(parsed, 'body'), '--body') ?? {},
|
|
663
|
+
method: method,
|
|
664
|
+
path: id,
|
|
665
|
+
});
|
|
666
|
+
}
|
|
667
|
+
if (command === 'operations') {
|
|
668
|
+
if (subcommand === 'list' || !subcommand) {
|
|
669
|
+
return client.operations.list(listQuery(parsed));
|
|
670
|
+
}
|
|
671
|
+
if (subcommand === 'get') {
|
|
672
|
+
if (!id) {
|
|
673
|
+
throw new CliUsageError('operations get requires an operation id');
|
|
674
|
+
}
|
|
675
|
+
return client.operations.get(id, hasFlag(parsed, 'include-onchain') ? { include: 'onchain' } : {});
|
|
676
|
+
}
|
|
677
|
+
if (subcommand === 'wait') {
|
|
678
|
+
if (!id) {
|
|
679
|
+
throw new CliUsageError('operations wait requires an operation id');
|
|
680
|
+
}
|
|
681
|
+
return client.operations.wait(id, {
|
|
682
|
+
pollIntervalMs: parsePositiveInteger(flag(parsed, 'poll-interval-ms'), 'poll-interval-ms'),
|
|
683
|
+
timeoutMs: parsePositiveInteger(flag(parsed, 'timeout-ms'), 'timeout-ms'),
|
|
684
|
+
});
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
if (command === 'raw') {
|
|
688
|
+
const method = subcommand?.toUpperCase();
|
|
689
|
+
if (!method || !['GET', 'POST', 'PATCH', 'DELETE'].includes(method)) {
|
|
690
|
+
throw new CliUsageError('raw requires one of GET, POST, PATCH, DELETE');
|
|
691
|
+
}
|
|
692
|
+
if (!id?.startsWith('/v1/agent/')) {
|
|
693
|
+
throw new CliUsageError('raw path must be a /v1/agent endpoint');
|
|
694
|
+
}
|
|
695
|
+
const request = {
|
|
696
|
+
body: parseJson(flag(parsed, 'body'), '--body'),
|
|
697
|
+
idempotencyKey: flag(parsed, 'idempotency-key'),
|
|
698
|
+
method: method,
|
|
699
|
+
path: id,
|
|
700
|
+
query: parseKeyValueFlags(flagValues(parsed, 'query'), '--query'),
|
|
701
|
+
};
|
|
702
|
+
return client.rawRequest(request);
|
|
703
|
+
}
|
|
704
|
+
const generated = await executeGeneratedEndpointCommand(client, parsed);
|
|
705
|
+
if (generated.matched) {
|
|
706
|
+
return generated.result;
|
|
707
|
+
}
|
|
708
|
+
throw new CliUsageError(`Unknown command: ${parsed.positionals.join(' ')}`);
|
|
709
|
+
}
|
|
710
|
+
function errorBody(error) {
|
|
711
|
+
if (error instanceof HightopAgentSDKError) {
|
|
712
|
+
return {
|
|
713
|
+
ok: false,
|
|
714
|
+
error: {
|
|
715
|
+
code: error.code ?? 'request_failed',
|
|
716
|
+
details: error.agentError?.details,
|
|
717
|
+
message: error.message,
|
|
718
|
+
status: error.status,
|
|
719
|
+
},
|
|
720
|
+
};
|
|
721
|
+
}
|
|
722
|
+
return {
|
|
723
|
+
ok: false,
|
|
724
|
+
error: {
|
|
725
|
+
code: error instanceof CliUsageError ? 'usage_error' : 'cli_error',
|
|
726
|
+
message: error instanceof Error ? error.message : String(error),
|
|
727
|
+
},
|
|
728
|
+
};
|
|
729
|
+
}
|
|
730
|
+
export async function runCli(argv, io, createClient = (config) => new HightopAgentClient(config)) {
|
|
731
|
+
const parsed = parseArgs(argv);
|
|
732
|
+
const pretty = hasFlag(parsed, 'pretty');
|
|
733
|
+
if (hasFlag(parsed, 'help') || parsed.positionals.includes('-h') || parsed.positionals[0] === 'help') {
|
|
734
|
+
io.stdout.write(formatCommandHelp(helpCommandPath(parsed)));
|
|
735
|
+
return 0;
|
|
736
|
+
}
|
|
737
|
+
if (hasFlag(parsed, 'version') || parsed.positionals.includes('-v')) {
|
|
738
|
+
io.stdout.write(`${readCliVersion()}\n`);
|
|
739
|
+
return 0;
|
|
740
|
+
}
|
|
741
|
+
try {
|
|
742
|
+
const config = resolveConfig(parsed, io.env ?? {}, { requireAuth: !commandAllowsMissingAuth(parsed) });
|
|
743
|
+
const client = createClient(config);
|
|
744
|
+
const result = await executeCommand(client, parsed);
|
|
745
|
+
writeJson(io.stdout, result, pretty);
|
|
746
|
+
return 0;
|
|
747
|
+
}
|
|
748
|
+
catch (error) {
|
|
749
|
+
writeJson(io.stderr, errorBody(error), pretty);
|
|
750
|
+
return error instanceof CliUsageError ? 2 : 1;
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAMA,UAAU,cAAc;IACtB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CAC9B;AAED,wBAAsB,IAAI,CAAC,IAAI,WAAwB,EAAE,MAAM,GAAE,cAA+B,GAAG,OAAO,CAAC,MAAM,CAAC,CAEjH"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { pathToFileURL } from 'node:url';
|
|
3
|
+
import { runCli } from './cli.js';
|
|
4
|
+
export async function main(argv = process.argv.slice(2), output = process.stdout) {
|
|
5
|
+
return runCli(argv, { env: process.env, stderr: process.stderr, stdout: output });
|
|
6
|
+
}
|
|
7
|
+
const isDirectExecution = process.argv[1] ? import.meta.url === pathToFileURL(process.argv[1]).href : false;
|
|
8
|
+
if (isDirectExecution) {
|
|
9
|
+
main().then((exitCode) => {
|
|
10
|
+
process.exitCode = exitCode;
|
|
11
|
+
}, () => {
|
|
12
|
+
process.exitCode = 1;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AAMjC,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAyB,OAAO,CAAC,MAAM;IAC9F,OAAO,MAAM,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;AACnF,CAAC;AAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAA;AAE3G,IAAI,iBAAiB,EAAE,CAAC;IACtB,IAAI,EAAE,CAAC,IAAI,CACT,CAAC,QAAQ,EAAE,EAAE;QACX,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC7B,CAAC,EACD,GAAG,EAAE;QACH,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;IACtB,CAAC,CACF,CAAA;AACH,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hightop/cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"hightop": "./dist/index.js"
|
|
8
|
+
},
|
|
9
|
+
"main": "./dist/index.js",
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"dist",
|
|
19
|
+
".env.example",
|
|
20
|
+
"README.md",
|
|
21
|
+
"package.json"
|
|
22
|
+
],
|
|
23
|
+
"engines": {
|
|
24
|
+
"node": ">=20"
|
|
25
|
+
},
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+ssh://git@github.com/hightophq/hightop-api.git",
|
|
29
|
+
"directory": "packages/cli"
|
|
30
|
+
},
|
|
31
|
+
"publishConfig": {
|
|
32
|
+
"access": "public"
|
|
33
|
+
},
|
|
34
|
+
"scripts": {
|
|
35
|
+
"prebuild": "npm --workspace @hightop/sdk run build",
|
|
36
|
+
"build": "tsc -p tsconfig.build.json",
|
|
37
|
+
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
38
|
+
"lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\" --max-warnings=0",
|
|
39
|
+
"test": "vitest run --config vitest.config.ts"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@hightop/sdk": "0.1.0"
|
|
43
|
+
}
|
|
44
|
+
}
|