@codespar/cli 0.4.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.
Files changed (38) hide show
  1. package/README.md +11 -2
  2. package/dist/api.js +20 -5
  3. package/dist/api.js.map +1 -1
  4. package/dist/commands/charge.js +4 -32
  5. package/dist/commands/charge.js.map +1 -1
  6. package/dist/commands/connect.js +30 -7
  7. package/dist/commands/connect.js.map +1 -1
  8. package/dist/commands/discover.js +1 -1
  9. package/dist/commands/discover.js.map +1 -1
  10. package/dist/commands/execute.js +1 -1
  11. package/dist/commands/execute.js.map +1 -1
  12. package/dist/commands/issue.js +62 -0
  13. package/dist/commands/issue.js.map +1 -0
  14. package/dist/commands/ledger.js +64 -0
  15. package/dist/commands/ledger.js.map +1 -0
  16. package/dist/commands/login.js +32 -7
  17. package/dist/commands/login.js.map +1 -1
  18. package/dist/commands/logs.js +1 -0
  19. package/dist/commands/logs.js.map +1 -1
  20. package/dist/commands/mandate.js +85 -0
  21. package/dist/commands/mandate.js.map +1 -0
  22. package/dist/commands/meta-input.js +33 -0
  23. package/dist/commands/meta-input.js.map +1 -0
  24. package/dist/commands/payment-status.js +1 -2
  25. package/dist/commands/payment-status.js.map +1 -1
  26. package/dist/commands/ship.js +4 -32
  27. package/dist/commands/ship.js.map +1 -1
  28. package/dist/commands/spend.js +41 -0
  29. package/dist/commands/spend.js.map +1 -0
  30. package/dist/commands/verification-status.js +1 -2
  31. package/dist/commands/verification-status.js.map +1 -1
  32. package/dist/commands/wizard.js +1 -1
  33. package/dist/commands/wizard.js.map +1 -1
  34. package/dist/index.js +102 -53
  35. package/dist/index.js.map +1 -1
  36. package/dist/version.js +8 -0
  37. package/dist/version.js.map +1 -0
  38. 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":"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"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -1,17 +1,18 @@
1
- import { readFile } from "node:fs/promises";
2
1
  import { CodeSpar } from "@codespar/sdk";
3
2
  import { CliError } from "../config.js";
4
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"}}';
5
6
  /**
6
7
  * Wraps `session.charge(args)`. The meta-tool router picks the rail,
7
8
  * so no `--server` is needed — we open the session with `servers: []`.
8
9
  * Args are read from `--input` (JSON string) or `--input-file` (path).
9
10
  */
10
11
  export async function chargeCommand(opts) {
11
- const args = await resolveChargeInput(opts);
12
+ const args = (await resolveMetaInput(opts, "charge", EXAMPLE));
12
13
  validateChargeArgs(args);
13
14
  const userId = opts.user ?? "cli-user";
14
- const cs = new CodeSpar({ apiKey: opts.apiKey, baseUrl: opts.baseUrl });
15
+ const cs = new CodeSpar({ apiKey: opts.apiKey, baseUrl: opts.baseUrl, projectId: opts.project });
15
16
  const session = await cs.create(userId, { servers: [] });
16
17
  try {
17
18
  const result = await session.charge(args);
@@ -29,40 +30,11 @@ export async function chargeCommand(opts) {
29
30
  info("Pix copy-paste:");
30
31
  process.stdout.write(`\n${result.pix_copy_paste}\n\n`);
31
32
  }
32
- process.stdout.write(JSON.stringify(result, null, 2) + "\n");
33
33
  }
34
34
  finally {
35
35
  await session.close();
36
36
  }
37
37
  }
38
- async function resolveChargeInput(opts) {
39
- if (opts.input && opts.inputFile) {
40
- throw new CliError("Pass either --input or --input-file, not both.");
41
- }
42
- if (!opts.input && !opts.inputFile) {
43
- throw new CliError("charge requires --input '<json>' or --input-file <path>. " +
44
- 'Example: --input \'{"amount":50,"currency":"BRL","method":"pix","description":"Test","buyer":{"name":"Ana"}}\'');
45
- }
46
- const raw = opts.inputFile
47
- ? await readFile(opts.inputFile, "utf-8")
48
- : opts.input;
49
- const source = opts.inputFile ?? "--input";
50
- return parseJsonObject(raw, source);
51
- }
52
- function parseJsonObject(raw, source) {
53
- try {
54
- const parsed = JSON.parse(raw);
55
- if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
56
- throw new CliError(`${source} must be a JSON object.`);
57
- }
58
- return parsed;
59
- }
60
- catch (err) {
61
- if (err instanceof CliError)
62
- throw err;
63
- throw new CliError(`${source} is not valid JSON: ${err.message}`);
64
- }
65
- }
66
38
  function validateChargeArgs(args) {
67
39
  if (typeof args.amount !== "number") {
68
40
  throw new CliError("charge.amount must be a number (major units).");
@@ -1 +1 @@
1
- {"version":3,"file":"charge.js","sourceRoot":"","sources":["../../src/commands/charge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"charge.js","sourceRoot":"","sources":["../../src/commands/charge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,MAAM,OAAO,GACX,2FAA2F,CAAC;AAY9F;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAA0B;IAC5D,MAAM,IAAI,GAAG,CAAC,MAAM,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAA0B,CAAC;IACxF,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;IACvC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACjG,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,MAAM,GAAiB,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAExD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QAED,OAAO,CAAC,UAAU,MAAM,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD,IAAI,CACF,WAAW,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,gBAAgB,MAAM,CAAC,MAAM,EAAE,CAC3E,CAAC;QACF,IAAI,MAAM,CAAC,UAAU;YAAE,IAAI,CAAC,eAAe,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,WAAW;YAAE,IAAI,CAAC,uBAAuB,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAC1F,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,IAAI,CAAC,iBAAiB,CAAC,CAAC;YACxB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,cAAc,MAAM,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAgB;IAC1C,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,QAAQ,CAAC,+CAA+C,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxD,MAAM,IAAI,QAAQ,CAAC,yCAAyC,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QACjB,MAAM,IAAI,QAAQ,CAAC,kDAAkD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACtE,MAAM,IAAI,QAAQ,CAAC,gCAAgC,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QACtB,MAAM,IAAI,QAAQ,CAAC,iCAAiC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
@@ -1,8 +1,8 @@
1
- import { exec } from "node:child_process";
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 execAsync = promisify(exec);
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
- const cmd = process.platform === "darwin"
99
- ? `open ${JSON.stringify(url)}`
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
- ? `start "" ${JSON.stringify(url)}`
102
- : `xdg-open ${JSON.stringify(url)}`;
103
- await execAsync(cmd);
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,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1D,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAyBlC,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,MAAiB,EAAE,IAAiB;IAC/E,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAgC,iBAAiB,EAAE;QAC9E,OAAO,EAAE,IAAI,CAAC,IAAI;QAClB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IAED,KAAK,CACH,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,EAC1D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG;QAC1E,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG;KACvE,CAAC,CACH,CAAC;AACJ,CAAC;AAUD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAiB,EACjB,MAAc,EACd,IAAkB;IAElB,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,QAAQ,CAAC,iEAAiE,CAAC,CAAC;IAEnG,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;IACvC,qEAAqE;IACrE,iEAAiE;IACjE,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,uCAAuC,CAAC;IAEhF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAgB,mBAAmB,EAAE;QAChE,SAAS,EAAE,MAAM;QACjB,OAAO,EAAE,MAAM;QACf,YAAY,EAAE,WAAW;QACzB,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,OAAO;IACT,CAAC;IAED,IAAI,CAAC,WAAW,MAAM,aAAa,MAAM,GAAG,CAAC,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,aAAa,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IAElE,sEAAsE;IACtE,qEAAqE;IACrE,mEAAmE;IACnE,kEAAkE;IAClE,MAAM,UAAU,GACd,IAAI,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEvD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAChD,iDAAiD;QACnD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,0EAA0E,CAAC,CAAC;IACnF,CAAC;SAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,oEAAoE,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAOD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAiB,EACjB,UAAkB,EAClB,IAAmB;IAEnB,IAAI,CAAC,UAAU;QAAE,MAAM,IAAI,QAAQ,CAAC,yEAAyE,CAAC,CAAC;IAE/G,wEAAwE;IACxE,sEAAsE;IACtE,0EAA0E;IAC1E,IAAI,YAAY,GAAG,UAAU,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAgC,iBAAiB,EAAE;YAC9E,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,UAAU;YACrB,MAAM,EAAE,WAAW;SACpB,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,QAAQ,CAAC,oCAAoC,UAAU,eAAe,MAAM,IAAI,CAAC,CAAC;QAC9F,CAAC;QACD,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;IACzC,CAAC;IAED,MAAM,MAAM,CAAC,IAAI,CAAC,mBAAmB,kBAAkB,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACpF,OAAO,CAAC,sBAAsB,YAAY,GAAG,CAAC,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,aAAa,CAAC,GAAW;IACtC,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;QAC/B,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;YACnC,CAAC,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IAC1C,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC"}
1
+ {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ export async function discoverCommand(query, opts) {
15
15
  throw new CliError("--limit must be a positive integer.");
16
16
  }
17
17
  const userId = opts.user ?? "cli-user";
18
- const cs = new CodeSpar({ apiKey: opts.apiKey, baseUrl: opts.baseUrl });
18
+ const cs = new CodeSpar({ apiKey: opts.apiKey, baseUrl: opts.baseUrl, projectId: opts.project });
19
19
  const session = await cs.create(userId, { servers: [] });
20
20
  try {
21
21
  const discoverOpts = {};
@@ -1 +1 @@
1
- {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/commands/discover.ts"],"names":[],"mappings":"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"}
@@ -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;AAY7C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,IAAoB;IACzE,IAAI,CAAC,QAAQ;QAAE,MAAM,IAAI,QAAQ,CAAC,iFAAiF,CAAC,CAAC;IACrH,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,QAAQ,CAAC,4CAA4C,CAAC,CAAC;IAEnF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;IAEvC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEpE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEtD,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,QAAQ,iBAAiB,MAAM,CAAC,QAAQ,IAAI,GAAG,IAAI,CAAC,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,MAAM,CAAC,KAAK,IAAI,eAAe,IAAI,CAAC,CAAC;QACjF,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/D,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAoB;IAC9C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,QAAQ,CAAC,gDAAgD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpD,OAAO,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACxD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAAC,GAAW,EAAE,MAAc;IAC5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;QAC1C,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3E,MAAM,IAAI,QAAQ,CAAC,GAAG,MAAM,yBAAyB,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,MAAiC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,QAAQ;YAAE,MAAM,GAAG,CAAC;QACvC,MAAM,IAAI,QAAQ,CAAC,GAAG,MAAM,uBAAwB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,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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"}
@@ -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
- const rl = createInterface({ input, output });
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":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -21,6 +21,7 @@ export async function tailLogsCommand(config, opts) {
21
21
  headers: {
22
22
  Authorization: `Bearer ${config.apiKey}`,
23
23
  Accept: "text/event-stream",
24
+ ...(config.project ? { "x-codespar-project": config.project } : {}),
24
25
  },
25
26
  });
26
27
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,85 @@
1
+ import { ApiClient } from "../api.js";
2
+ import { CliError } from "../config.js";
3
+ import { info, json, kv, success } from "../output.js";
4
+ /**
5
+ * Create a consumer mandate — the agent's "allowance / wallet" — end to end.
6
+ *
7
+ * Runs the directed-pay consent flow the way an org backend would:
8
+ * 1. POST /v1/consents/init (authed) mints a one-shot token carrying the
9
+ * intent (purpose, caps, currency, allowlist).
10
+ * 2. POST /v1/consents/:token/submit (public) provisions the consumer funding
11
+ * source and signs the mandate with the consumer secret.
12
+ * Prints the mandate id you then hand to `codespar spend`. The consumer's
13
+ * on-chain wallet (for usdc-onchain) is derived from the consumer id, so the
14
+ * same consumer keeps the same wallet across mandates.
15
+ */
16
+ export async function mandateCreateCommand(opts) {
17
+ if (!opts.consumer)
18
+ throw new CliError("--consumer <id> is required.");
19
+ if (!opts.agent)
20
+ throw new CliError("--agent <id> is required.");
21
+ if (!opts.purpose)
22
+ throw new CliError("--purpose <text> is required.");
23
+ const allowlist = (opts.payee ?? "")
24
+ .split(",")
25
+ .map((s) => s.trim())
26
+ .filter(Boolean);
27
+ if (allowlist.length === 0) {
28
+ throw new CliError("--payee is required (allowlisted payee: x402 URL, EVM address, or Pix key; comma-separated for several).");
29
+ }
30
+ const capMinor = Number(opts.cap);
31
+ const perTxMinor = Number(opts.perTxCap);
32
+ const ttl = Number(opts.ttl);
33
+ if (!Number.isInteger(capMinor) || capMinor <= 0) {
34
+ throw new CliError("--cap must be a positive integer in minor units (cents).");
35
+ }
36
+ if (!Number.isInteger(perTxMinor) || perTxMinor <= 0) {
37
+ throw new CliError("--per-tx-cap must be a positive integer in minor units (cents).");
38
+ }
39
+ if (!Number.isInteger(ttl) || ttl <= 0) {
40
+ throw new CliError("--ttl must be a positive integer (seconds).");
41
+ }
42
+ const client = new ApiClient({
43
+ apiKey: opts.apiKey,
44
+ baseUrl: opts.baseUrl,
45
+ project: opts.project,
46
+ });
47
+ // 1. Mint the consent token (authed).
48
+ const init = await client.post("/v1/consents/init", {
49
+ agent_id: opts.agent,
50
+ intent: {
51
+ purpose: opts.purpose,
52
+ cap_minor: capMinor,
53
+ per_tx_cap_minor: perTxMinor,
54
+ currency: opts.currency,
55
+ mandate_ttl_seconds: ttl,
56
+ merchant_allowlist: allowlist,
57
+ merchant_pin_kind: opts.pinKind,
58
+ },
59
+ });
60
+ // 2. Submit the consumer side → funding source + signed mandate (public; the
61
+ // token in the URL is the auth, so an extra bearer header is ignored).
62
+ const submit = await client.post(`/v1/consents/${encodeURIComponent(init.token)}/submit`, {
63
+ consumer_id: opts.consumer,
64
+ rail: opts.rail,
65
+ provider_token: opts.providerToken ?? `${opts.rail}:${opts.consumer}`,
66
+ });
67
+ if (opts.json) {
68
+ json(submit);
69
+ return;
70
+ }
71
+ const mandateId = submit.mandate_id ?? "(unknown)";
72
+ success("mandate created");
73
+ kv([
74
+ ["mandate", mandateId],
75
+ ["consumer", opts.consumer],
76
+ ["agent", opts.agent],
77
+ ["purpose", opts.purpose],
78
+ ["allowlist", allowlist.join(", ")],
79
+ ["per-tx cap", `${perTxMinor} ${opts.currency} (minor)`],
80
+ ["total cap", `${capMinor} ${opts.currency} (minor)`],
81
+ ["rail", opts.rail],
82
+ ]);
83
+ info(`Spend against it:\n codespar spend --mandate ${mandateId} --payee ${allowlist[0]} --amount 1 --agent ${opts.agent}`);
84
+ }
85
+ //# sourceMappingURL=mandate.js.map