@codespar/cli 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -2
- package/dist/api.js +20 -5
- package/dist/api.js.map +1 -1
- package/dist/commands/charge.js +55 -0
- package/dist/commands/charge.js.map +1 -0
- package/dist/commands/connect.js +30 -7
- package/dist/commands/connect.js.map +1 -1
- package/dist/commands/discover.js +78 -0
- package/dist/commands/discover.js.map +1 -0
- package/dist/commands/execute.js +1 -1
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/issue.js +62 -0
- package/dist/commands/issue.js.map +1 -0
- package/dist/commands/ledger.js +64 -0
- package/dist/commands/ledger.js.map +1 -0
- package/dist/commands/login.js +32 -7
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/logs.js +1 -0
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/mandate.js +85 -0
- package/dist/commands/mandate.js.map +1 -0
- package/dist/commands/meta-input.js +33 -0
- package/dist/commands/meta-input.js.map +1 -0
- package/dist/commands/payment-status.js +80 -0
- package/dist/commands/payment-status.js.map +1 -0
- package/dist/commands/ship.js +53 -0
- package/dist/commands/ship.js.map +1 -0
- package/dist/commands/spend.js +41 -0
- package/dist/commands/spend.js.map +1 -0
- package/dist/commands/verification-status.js +82 -0
- package/dist/commands/verification-status.js.map +1 -0
- package/dist/commands/wizard.js +107 -0
- package/dist/commands/wizard.js.map +1 -0
- package/dist/index.js +184 -17
- package/dist/index.js.map +1 -1
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -43,6 +43,14 @@ codespar init my-agent
|
|
|
43
43
|
| `tools list` | List tools (filter by `--server`) |
|
|
44
44
|
| `tools show <name>` | Show a tool's full input/output schema |
|
|
45
45
|
| `execute <tool>` | Run a single tool call in a throwaway session |
|
|
46
|
+
| `discover <query>` | Search the catalog for tools matching a use case |
|
|
47
|
+
| `charge` | Issue an inbound charge via `codespar_charge` |
|
|
48
|
+
| `ship` | Generate label / quote rates / track via `codespar_ship` |
|
|
49
|
+
| `ledger` | Post entries / read balances / create accounts via `codespar_ledger` |
|
|
50
|
+
| `issue` | Issue / freeze / read agent spend cards via `codespar_issue` |
|
|
51
|
+
| `payment-status <id>` | Poll async settlement status (add `--stream`) |
|
|
52
|
+
| `verification-status <id>` | Poll async KYC status (add `--stream`) |
|
|
53
|
+
| `wizard [server]` | Connection wizard — required secrets, connect URL, next steps |
|
|
46
54
|
| `sessions list` | List recent sessions (filter by `--status`, `--limit`) |
|
|
47
55
|
| `sessions show <id>` | Show session details (add `--logs` for tool calls) |
|
|
48
56
|
| `sessions close <id>` | Close an active session |
|
|
@@ -59,13 +67,14 @@ codespar init my-agent
|
|
|
59
67
|
| `--json` | Machine-readable JSON output (pipe into `jq`) |
|
|
60
68
|
| `--api-key <key>` | Override the stored key |
|
|
61
69
|
| `--base-url <url>` | Point at a custom API (staging, self-hosted) |
|
|
70
|
+
| `--project <id>` | Scope requests to a project (multi-project orgs) |
|
|
62
71
|
|
|
63
72
|
## Configuration
|
|
64
73
|
|
|
65
74
|
Resolution order (first match wins):
|
|
66
75
|
|
|
67
|
-
1. Command-line flags (`--api-key`, `--base-url`)
|
|
68
|
-
2. Environment variables (`CODESPAR_API_KEY`, `CODESPAR_BASE_URL`)
|
|
76
|
+
1. Command-line flags (`--api-key`, `--base-url`, `--project`)
|
|
77
|
+
2. Environment variables (`CODESPAR_API_KEY`, `CODESPAR_BASE_URL`, `CODESPAR_PROJECT`)
|
|
69
78
|
3. Config file at `~/.codespar/config.json` (chmod 600)
|
|
70
79
|
|
|
71
80
|
## Templates
|
package/dist/api.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CliError } from "./config.js";
|
|
2
|
+
import { VERSION } from "./version.js";
|
|
2
3
|
/**
|
|
3
4
|
* Thin fetch wrapper around the CodeSpar REST API. The SDK doesn't expose
|
|
4
5
|
* every endpoint the CLI needs (catalog listings, session bookkeeping),
|
|
@@ -6,8 +7,10 @@ import { CliError } from "./config.js";
|
|
|
6
7
|
*/
|
|
7
8
|
export class ApiClient {
|
|
8
9
|
config;
|
|
10
|
+
timeoutMs;
|
|
9
11
|
constructor(config) {
|
|
10
12
|
this.config = config;
|
|
13
|
+
this.timeoutMs = config.timeoutMs ?? 30_000;
|
|
11
14
|
}
|
|
12
15
|
async get(path, query) {
|
|
13
16
|
return this.request("GET", path, undefined, query);
|
|
@@ -26,21 +29,33 @@ export class ApiClient {
|
|
|
26
29
|
url.searchParams.set(k, v);
|
|
27
30
|
}
|
|
28
31
|
}
|
|
32
|
+
const headers = {
|
|
33
|
+
Authorization: `Bearer ${this.config.apiKey}`,
|
|
34
|
+
"Content-Type": "application/json",
|
|
35
|
+
"User-Agent": `codespar-cli/${VERSION}`,
|
|
36
|
+
};
|
|
37
|
+
if (this.config.project)
|
|
38
|
+
headers["x-codespar-project"] = this.config.project;
|
|
39
|
+
const controller = new AbortController();
|
|
40
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
29
41
|
let res;
|
|
30
42
|
try {
|
|
31
43
|
res = await fetch(url, {
|
|
32
44
|
method,
|
|
33
|
-
headers
|
|
34
|
-
Authorization: `Bearer ${this.config.apiKey}`,
|
|
35
|
-
"Content-Type": "application/json",
|
|
36
|
-
"User-Agent": "codespar-cli/0.1.0",
|
|
37
|
-
},
|
|
45
|
+
headers,
|
|
38
46
|
body: body !== undefined ? JSON.stringify(body) : undefined,
|
|
47
|
+
signal: controller.signal,
|
|
39
48
|
});
|
|
40
49
|
}
|
|
41
50
|
catch (err) {
|
|
51
|
+
if (err.name === "AbortError") {
|
|
52
|
+
throw new CliError(`Request to ${method} ${url.pathname} timed out after ${this.timeoutMs}ms.`);
|
|
53
|
+
}
|
|
42
54
|
throw new CliError(`Network error calling ${method} ${url.pathname}: ${err.message}`);
|
|
43
55
|
}
|
|
56
|
+
finally {
|
|
57
|
+
clearTimeout(timer);
|
|
58
|
+
}
|
|
44
59
|
if (!res.ok) {
|
|
45
60
|
let detail = "";
|
|
46
61
|
try {
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { CodeSpar } from "@codespar/sdk";
|
|
2
|
+
import { CliError } from "../config.js";
|
|
3
|
+
import { info, json, success } from "../output.js";
|
|
4
|
+
import { resolveMetaInput } from "./meta-input.js";
|
|
5
|
+
const EXAMPLE = '{"amount":50,"currency":"BRL","method":"pix","description":"Test","buyer":{"name":"Ana"}}';
|
|
6
|
+
/**
|
|
7
|
+
* Wraps `session.charge(args)`. The meta-tool router picks the rail,
|
|
8
|
+
* so no `--server` is needed — we open the session with `servers: []`.
|
|
9
|
+
* Args are read from `--input` (JSON string) or `--input-file` (path).
|
|
10
|
+
*/
|
|
11
|
+
export async function chargeCommand(opts) {
|
|
12
|
+
const args = (await resolveMetaInput(opts, "charge", EXAMPLE));
|
|
13
|
+
validateChargeArgs(args);
|
|
14
|
+
const userId = opts.user ?? "cli-user";
|
|
15
|
+
const cs = new CodeSpar({ apiKey: opts.apiKey, baseUrl: opts.baseUrl, projectId: opts.project });
|
|
16
|
+
const session = await cs.create(userId, { servers: [] });
|
|
17
|
+
try {
|
|
18
|
+
const result = await session.charge(args);
|
|
19
|
+
if (opts.json) {
|
|
20
|
+
json(result);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
success(`charge ${result.id} → ${result.status}`);
|
|
24
|
+
info(`Amount: ${result.amount} ${result.currency} · method: ${result.method}`);
|
|
25
|
+
if (result.charge_url)
|
|
26
|
+
info(`Charge URL: ${result.charge_url}`);
|
|
27
|
+
if (result.pix_qr_code)
|
|
28
|
+
info(`Pix QR (truncated): ${result.pix_qr_code.slice(0, 40)}...`);
|
|
29
|
+
if (result.pix_copy_paste) {
|
|
30
|
+
info("Pix copy-paste:");
|
|
31
|
+
process.stdout.write(`\n${result.pix_copy_paste}\n\n`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
await session.close();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function validateChargeArgs(args) {
|
|
39
|
+
if (typeof args.amount !== "number") {
|
|
40
|
+
throw new CliError("charge.amount must be a number (major units).");
|
|
41
|
+
}
|
|
42
|
+
if (!args.currency || typeof args.currency !== "string") {
|
|
43
|
+
throw new CliError("charge.currency is required (e.g. BRL).");
|
|
44
|
+
}
|
|
45
|
+
if (!args.method) {
|
|
46
|
+
throw new CliError("charge.method is required (pix | boleto | card).");
|
|
47
|
+
}
|
|
48
|
+
if (!args.buyer || typeof args.buyer !== "object" || !args.buyer.name) {
|
|
49
|
+
throw new CliError("charge.buyer.name is required.");
|
|
50
|
+
}
|
|
51
|
+
if (!args.description) {
|
|
52
|
+
throw new CliError("charge.description is required.");
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=charge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"charge.js","sourceRoot":"","sources":["../../src/commands/charge.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/connect.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { execFile } from "node:child_process";
|
|
2
2
|
import { promisify } from "node:util";
|
|
3
3
|
import { CliError } from "../config.js";
|
|
4
4
|
import { info, json, success, table } from "../output.js";
|
|
5
|
-
const
|
|
5
|
+
const execFileAsync = promisify(execFile);
|
|
6
6
|
export async function listConnectionsCommand(client, opts) {
|
|
7
7
|
const data = await client.get("/v1/connections", {
|
|
8
8
|
user_id: opts.user,
|
|
@@ -94,12 +94,35 @@ export async function revokeConnectCommand(client, serverOrId, opts) {
|
|
|
94
94
|
* `xdg-open` on Linux, `start` on Windows. Intentionally minimal — we
|
|
95
95
|
* don't bring in `open`/`openurl` npm packages just for this.
|
|
96
96
|
*/
|
|
97
|
+
/**
|
|
98
|
+
* Parse + validate that `url` is a real http(s) URL before handing it to the
|
|
99
|
+
* OS browser-opener. Rejects malformed URLs and non-http(s) schemes
|
|
100
|
+
* (file://, javascript:, ...). Exported for testing.
|
|
101
|
+
*/
|
|
102
|
+
export function assertHttpUrl(url) {
|
|
103
|
+
let parsed;
|
|
104
|
+
try {
|
|
105
|
+
parsed = new URL(url);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
throw new CliError(`Refusing to open a malformed URL: ${url}`);
|
|
109
|
+
}
|
|
110
|
+
if (parsed.protocol !== "https:" && parsed.protocol !== "http:") {
|
|
111
|
+
throw new CliError(`Refusing to open a non-http(s) URL (${parsed.protocol}).`);
|
|
112
|
+
}
|
|
113
|
+
return parsed;
|
|
114
|
+
}
|
|
97
115
|
async function openInBrowser(url) {
|
|
98
|
-
|
|
99
|
-
|
|
116
|
+
// Pass the URL as a literal argv (execFile, no shell) so a Connect Link
|
|
117
|
+
// carrying shell metacharacters — `$(...)`, backticks — can't inject a
|
|
118
|
+
// command. Double-quoting it under exec() did NOT prevent that ($ and
|
|
119
|
+
// backticks are still live inside double quotes).
|
|
120
|
+
const parsed = assertHttpUrl(url);
|
|
121
|
+
const [cmd, args] = process.platform === "darwin"
|
|
122
|
+
? ["open", [parsed.href]]
|
|
100
123
|
: process.platform === "win32"
|
|
101
|
-
?
|
|
102
|
-
:
|
|
103
|
-
await
|
|
124
|
+
? ["cmd", ["/c", "start", "", parsed.href]]
|
|
125
|
+
: ["xdg-open", [parsed.href]];
|
|
126
|
+
await execFileAsync(cmd, args);
|
|
104
127
|
}
|
|
105
128
|
//# sourceMappingURL=connect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { CodeSpar } from "@codespar/sdk";
|
|
2
|
+
import { CliError } from "../config.js";
|
|
3
|
+
import { c, info, json, table } from "../output.js";
|
|
4
|
+
/**
|
|
5
|
+
* Wraps `session.discover(useCase)`. Discover spans the whole catalog,
|
|
6
|
+
* so we open a session with `servers: []` — no per-server connection
|
|
7
|
+
* is required. The default `--limit` is 10 (server clamps to 1..20).
|
|
8
|
+
*/
|
|
9
|
+
export async function discoverCommand(query, opts) {
|
|
10
|
+
if (!query) {
|
|
11
|
+
throw new CliError("A search query is required. Example: `codespar discover \"issue an NF-e\"`");
|
|
12
|
+
}
|
|
13
|
+
const limit = opts.limit ? Number(opts.limit) : undefined;
|
|
14
|
+
if (limit !== undefined && (!Number.isFinite(limit) || limit <= 0)) {
|
|
15
|
+
throw new CliError("--limit must be a positive integer.");
|
|
16
|
+
}
|
|
17
|
+
const userId = opts.user ?? "cli-user";
|
|
18
|
+
const cs = new CodeSpar({ apiKey: opts.apiKey, baseUrl: opts.baseUrl, projectId: opts.project });
|
|
19
|
+
const session = await cs.create(userId, { servers: [] });
|
|
20
|
+
try {
|
|
21
|
+
const discoverOpts = {};
|
|
22
|
+
if (opts.category)
|
|
23
|
+
discoverOpts.category = opts.category;
|
|
24
|
+
if (opts.country)
|
|
25
|
+
discoverOpts.country = opts.country;
|
|
26
|
+
if (limit !== undefined)
|
|
27
|
+
discoverOpts.limit = limit;
|
|
28
|
+
const result = await session.discover(query, discoverOpts);
|
|
29
|
+
if (opts.json) {
|
|
30
|
+
json(result);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
renderDiscoverResult(result, limit ?? 10);
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
await session.close();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function renderDiscoverResult(result, displayLimit) {
|
|
40
|
+
info(`Strategy: ${result.search_strategy} · use_case: ${JSON.stringify(result.use_case)}`);
|
|
41
|
+
const rows = [];
|
|
42
|
+
const matches = [];
|
|
43
|
+
if (result.recommended)
|
|
44
|
+
matches.push(result.recommended);
|
|
45
|
+
for (const m of result.related) {
|
|
46
|
+
if (matches.length >= displayLimit)
|
|
47
|
+
break;
|
|
48
|
+
matches.push(m);
|
|
49
|
+
}
|
|
50
|
+
if (matches.length === 0) {
|
|
51
|
+
process.stderr.write(c.dim("(no matches)\n"));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
matches.forEach((m, idx) => {
|
|
55
|
+
const score = m.cosine_distance !== null
|
|
56
|
+
? (1 - m.cosine_distance).toFixed(3)
|
|
57
|
+
: m.trigram_similarity !== null
|
|
58
|
+
? m.trigram_similarity.toFixed(3)
|
|
59
|
+
: "-";
|
|
60
|
+
const desc = m.description.length > 60 ? m.description.slice(0, 57) + "..." : m.description;
|
|
61
|
+
rows.push([
|
|
62
|
+
String(idx + 1),
|
|
63
|
+
score,
|
|
64
|
+
`${m.server_id}.${m.tool_name}`,
|
|
65
|
+
m.connection_status,
|
|
66
|
+
desc,
|
|
67
|
+
]);
|
|
68
|
+
});
|
|
69
|
+
table(["#", "SCORE", "SERVER.TOOL", "CONN", "DESCRIPTION"], rows);
|
|
70
|
+
if (result.next_steps.length > 0) {
|
|
71
|
+
process.stdout.write("\n");
|
|
72
|
+
info("Next steps:");
|
|
73
|
+
for (const step of result.next_steps) {
|
|
74
|
+
process.stdout.write(` - ${step}\n`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=discover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/execute.js
CHANGED
|
@@ -13,7 +13,7 @@ export async function executeCommand(toolName, opts) {
|
|
|
13
13
|
throw new CliError("--server is required (e.g. --server asaas)");
|
|
14
14
|
const input = await resolveInput(opts);
|
|
15
15
|
const userId = opts.user ?? "cli-user";
|
|
16
|
-
const cs = new CodeSpar({ apiKey: opts.apiKey, baseUrl: opts.baseUrl });
|
|
16
|
+
const cs = new CodeSpar({ apiKey: opts.apiKey, baseUrl: opts.baseUrl, projectId: opts.project });
|
|
17
17
|
const session = await cs.create(userId, { servers: [opts.server] });
|
|
18
18
|
try {
|
|
19
19
|
const result = await session.execute(toolName, input);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/commands/execute.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { CodeSpar } from "@codespar/sdk";
|
|
2
|
+
import { CliError } from "../config.js";
|
|
3
|
+
import { info, json, success } from "../output.js";
|
|
4
|
+
import { resolveMetaInput } from "./meta-input.js";
|
|
5
|
+
const EXAMPLE = '{"action":"card-virtual","cardholder_id":"usr_123","program_id":"afg_123"}';
|
|
6
|
+
/**
|
|
7
|
+
* Wraps `session.issue(args)` — issue a virtual/physical agent spend card,
|
|
8
|
+
* freeze/unfreeze/cancel one, or read a card's status (Pomelo). The
|
|
9
|
+
* meta-tool router resolves the rail, so no `--server`.
|
|
10
|
+
*/
|
|
11
|
+
export async function issueCommand(opts) {
|
|
12
|
+
const args = (await resolveMetaInput(opts, "issue", EXAMPLE));
|
|
13
|
+
validateIssueArgs(args);
|
|
14
|
+
const userId = opts.user ?? "cli-user";
|
|
15
|
+
const cs = new CodeSpar({
|
|
16
|
+
apiKey: opts.apiKey,
|
|
17
|
+
baseUrl: opts.baseUrl,
|
|
18
|
+
projectId: opts.project,
|
|
19
|
+
});
|
|
20
|
+
const session = await cs.create(userId, { servers: [] });
|
|
21
|
+
try {
|
|
22
|
+
const result = await session.issue(args);
|
|
23
|
+
if (opts.json) {
|
|
24
|
+
json(result);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
success(`issue ${args.action} → ${result.status ?? "ok"}`);
|
|
28
|
+
if (result.id)
|
|
29
|
+
info(`Card id: ${result.id}`);
|
|
30
|
+
if (result.card_type)
|
|
31
|
+
info(`Type: ${result.card_type}`);
|
|
32
|
+
if (result.last_four)
|
|
33
|
+
info(`Last four: ${result.last_four}`);
|
|
34
|
+
if (result.cardholder_id)
|
|
35
|
+
info(`Cardholder: ${result.cardholder_id}`);
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
await session.close();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function validateIssueArgs(args) {
|
|
42
|
+
const actions = ["card-virtual", "card-physical", "card-control", "card-get"];
|
|
43
|
+
if (!args.action || !actions.includes(args.action)) {
|
|
44
|
+
throw new CliError(`issue.action must be one of: ${actions.join(", ")}.`);
|
|
45
|
+
}
|
|
46
|
+
if (args.action === "card-virtual" || args.action === "card-physical") {
|
|
47
|
+
if (!args.cardholder_id)
|
|
48
|
+
throw new CliError("issue.cardholder_id is required to issue a card.");
|
|
49
|
+
if (!args.program_id)
|
|
50
|
+
throw new CliError("issue.program_id is required to issue a card.");
|
|
51
|
+
}
|
|
52
|
+
if (args.action === "card-physical" && !args.shipping_address) {
|
|
53
|
+
throw new CliError("issue.shipping_address is required when action=card-physical.");
|
|
54
|
+
}
|
|
55
|
+
if ((args.action === "card-control" || args.action === "card-get") && !args.card_id) {
|
|
56
|
+
throw new CliError("issue.card_id is required when action=card-control | card-get.");
|
|
57
|
+
}
|
|
58
|
+
if (args.action === "card-control" && !args.control) {
|
|
59
|
+
throw new CliError("issue.control (freeze | unfreeze | cancel) is required when action=card-control.");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=issue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue.js","sourceRoot":"","sources":["../../src/commands/issue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { CodeSpar } from "@codespar/sdk";
|
|
2
|
+
import { CliError } from "../config.js";
|
|
3
|
+
import { info, json, success } from "../output.js";
|
|
4
|
+
import { resolveMetaInput } from "./meta-input.js";
|
|
5
|
+
const EXAMPLE = '{"action":"entry","asset":"BRL","source":[{"account":"@external/BRL","amount":12500}],"destination":[{"account":"@wallet/user_1","amount":12500}],"description":"top-up"}';
|
|
6
|
+
/**
|
|
7
|
+
* Wraps `session.ledger(args)` — post a double-entry transaction, read an
|
|
8
|
+
* account balance, or create an account against the tenant's self-hosted
|
|
9
|
+
* Midaz ledger. The meta-tool router resolves the rail, so no `--server`.
|
|
10
|
+
*/
|
|
11
|
+
export async function ledgerCommand(opts) {
|
|
12
|
+
const args = (await resolveMetaInput(opts, "ledger", EXAMPLE));
|
|
13
|
+
validateLedgerArgs(args);
|
|
14
|
+
const userId = opts.user ?? "cli-user";
|
|
15
|
+
const cs = new CodeSpar({
|
|
16
|
+
apiKey: opts.apiKey,
|
|
17
|
+
baseUrl: opts.baseUrl,
|
|
18
|
+
projectId: opts.project,
|
|
19
|
+
});
|
|
20
|
+
const session = await cs.create(userId, { servers: [] });
|
|
21
|
+
try {
|
|
22
|
+
const result = await session.ledger(args);
|
|
23
|
+
if (opts.json) {
|
|
24
|
+
json(result);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
success(`ledger ${args.action} → ${result.status ?? "ok"}`);
|
|
28
|
+
if (result.id)
|
|
29
|
+
info(`Id: ${result.id}`);
|
|
30
|
+
if (result.account_id)
|
|
31
|
+
info(`Account: ${result.account_id}`);
|
|
32
|
+
if (result.alias)
|
|
33
|
+
info(`Alias: ${result.alias}`);
|
|
34
|
+
if (result.balances !== undefined) {
|
|
35
|
+
info("Balances:");
|
|
36
|
+
process.stdout.write(JSON.stringify(result.balances, null, 2) + "\n");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
finally {
|
|
40
|
+
await session.close();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function validateLedgerArgs(args) {
|
|
44
|
+
if (!args.action || !["entry", "balance", "account"].includes(args.action)) {
|
|
45
|
+
throw new CliError("ledger.action must be one of: entry, balance, account.");
|
|
46
|
+
}
|
|
47
|
+
if (args.action === "entry") {
|
|
48
|
+
if (!args.asset)
|
|
49
|
+
throw new CliError("ledger.asset is required when action=entry.");
|
|
50
|
+
if (!args.source || args.source.length === 0) {
|
|
51
|
+
throw new CliError("ledger.source must be a non-empty array when action=entry.");
|
|
52
|
+
}
|
|
53
|
+
if (!args.destination || args.destination.length === 0) {
|
|
54
|
+
throw new CliError("ledger.destination must be a non-empty array when action=entry.");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (args.action === "balance" && !args.account) {
|
|
58
|
+
throw new CliError("ledger.account (id) is required when action=balance.");
|
|
59
|
+
}
|
|
60
|
+
if (args.action === "account" && !args.asset) {
|
|
61
|
+
throw new CliError("ledger.asset is required when action=account.");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=ledger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/commands/ledger.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.js
CHANGED
|
@@ -3,6 +3,37 @@ import { stdin as input, stdout as output } from "node:process";
|
|
|
3
3
|
import { saveConfig, CliError } from "../config.js";
|
|
4
4
|
import { ApiClient } from "../api.js";
|
|
5
5
|
import { success, info } from "../output.js";
|
|
6
|
+
/**
|
|
7
|
+
* Read a secret from the TTY without echoing it. The API key is a
|
|
8
|
+
* credential — echoing it leaves the key in terminal scrollback and any
|
|
9
|
+
* screen-share. Overrides readline's `_writeToOutput` to show the prompt
|
|
10
|
+
* once and swallow the echoed keystrokes (the standard dependency-free
|
|
11
|
+
* Node password-prompt technique). On non-TTY input (a piped key) there is
|
|
12
|
+
* no echo to suppress, so we read plainly.
|
|
13
|
+
*/
|
|
14
|
+
async function promptSecret(promptText) {
|
|
15
|
+
const rl = createInterface({ input, output });
|
|
16
|
+
if (output.isTTY) {
|
|
17
|
+
const rlAny = rl;
|
|
18
|
+
let shownPrompt = false;
|
|
19
|
+
rlAny._writeToOutput = (s) => {
|
|
20
|
+
void s;
|
|
21
|
+
if (!shownPrompt) {
|
|
22
|
+
output.write(promptText);
|
|
23
|
+
shownPrompt = true;
|
|
24
|
+
}
|
|
25
|
+
// Everything after the prompt is the echoed secret — swallow it.
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
return await rl.question(promptText);
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
if (output.isTTY)
|
|
33
|
+
output.write("\n");
|
|
34
|
+
rl.close();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
6
37
|
/**
|
|
7
38
|
* Store an API key on disk. If `--api-key` is passed we use it directly;
|
|
8
39
|
* otherwise we prompt the user interactively. After saving we call
|
|
@@ -13,13 +44,7 @@ export async function loginCommand(opts) {
|
|
|
13
44
|
let apiKey = opts.apiKey;
|
|
14
45
|
if (!apiKey) {
|
|
15
46
|
info("Get your API key at https://codespar.dev/dashboard/settings?tab=api-keys");
|
|
16
|
-
|
|
17
|
-
try {
|
|
18
|
-
apiKey = (await rl.question("API key: ")).trim();
|
|
19
|
-
}
|
|
20
|
-
finally {
|
|
21
|
-
rl.close();
|
|
22
|
-
}
|
|
47
|
+
apiKey = (await promptSecret("API key: ")).trim();
|
|
23
48
|
}
|
|
24
49
|
if (!apiKey)
|
|
25
50
|
throw new CliError("API key is required.");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAO7C
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/logs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
|