@mooring-live/cli 0.0.0-stage → 0.2.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 CHANGED
@@ -1,3 +1,28 @@
1
- # Temporary Holding Version
1
+ # @mooring-live/cli
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ [![npm](https://img.shields.io/npm/v/%40mooring-live%2Fcli)](https://www.npmjs.com/package/@mooring-live/cli)
4
+
5
+ Command-line companion to [`@mooring-live/x402-client`](https://www.npmjs.com/package/@mooring-live/x402-client):
6
+ generate an agent key, inspect a Mooring spending card, and pay an [x402](https://x402.org)-protected
7
+ API from it. A card is a Soroban custom account on Stellar that holds USDC and enforces a periodic
8
+ budget, a per-payment cap, a merchant allowlist and an expiry inside its authorization path.
9
+
10
+ Apache-2.0. **Stellar testnet only** — not audited, not on mainnet.
11
+
12
+ ```sh
13
+ npm i -g @mooring-live/cli
14
+
15
+ mooring keygen --hex # a new agent keypair (--hex prints the signer bytes)
16
+ mooring status --card C… --json # label, policy, period, remaining budget, allowlist
17
+ AGENT_SECRET=S… mooring pay https://api.example.com/weather --card C…
18
+ ```
19
+
20
+ `mooring pay` prints the HTTP status, the settlement transaction hash and the response body.
21
+ A refusal by the card's policy prints `Denied (<reason>) at <stage>` and exits with code **2**,
22
+ so a script can tell a refused payment from a broken one. `--no-precheck` skips the local policy
23
+ mirror (the card still enforces on-chain); `--agent-secret-env <NAME>` reads the secret from a
24
+ different variable; `--network` and `--rpc` select the network.
25
+
26
+ Cards are created and managed by their owner in the web app at https://app.mooring.live.
27
+ Integration guide, error semantics and facilitator constraints:
28
+ [`docs/x402-integration.md`](https://github.com/berkay1532/mooring/blob/main/docs/x402-integration.md).
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from "commander";
3
+ import { createMooringFetch, getSettlement, readCardInfo, readMerchants, type CardInfo } from "@mooring-live/x402-client";
4
+ /** Everything `buildProgram` needs from the outside world; tests inject fakes. */
5
+ export interface CliDeps {
6
+ readCardInfo: typeof readCardInfo;
7
+ readMerchants: typeof readMerchants;
8
+ createMooringFetch: typeof createMooringFetch;
9
+ getSettlement: typeof getSettlement;
10
+ stdout: (line: string) => void;
11
+ }
12
+ export declare function buildProgram(deps?: CliDeps): Command;
13
+ export type { CardInfo };
package/dist/index.js ADDED
@@ -0,0 +1,164 @@
1
+ #!/usr/bin/env node
2
+ import { fileURLToPath } from "node:url";
3
+ import { realpathSync } from "node:fs";
4
+ import path from "node:path";
5
+ import { Keypair } from "@stellar/stellar-sdk";
6
+ import { getNetworkPassphrase, getRpcUrl } from "@x402/stellar";
7
+ import { Command, Option } from "commander";
8
+ import { CardPolicyDenied, DEFAULT_APP_URL, allowMerchantUrl, createMooringFetch, getSettlement, readCardInfo, readMerchants, } from "@mooring-live/x402-client";
9
+ const realDeps = {
10
+ readCardInfo,
11
+ readMerchants,
12
+ createMooringFetch,
13
+ getSettlement,
14
+ stdout: (line) => process.stdout.write(`${line}\n`),
15
+ };
16
+ /** JSON.stringify that renders bigints as strings and byte arrays as hex, instead of throwing or dumping index-keyed objects. */
17
+ function toJson(value) {
18
+ return JSON.stringify(value, (_key, v) => (typeof v === "bigint" ? v.toString() : v instanceof Uint8Array ? Buffer.from(v).toString("hex") : v), 2);
19
+ }
20
+ /** Deep-converts every bigint to a string and every byte array to hex, for table/plain printing. */
21
+ function stringifyBigints(value) {
22
+ if (typeof value === "bigint")
23
+ return value.toString();
24
+ if (value instanceof Uint8Array)
25
+ return Buffer.from(value).toString("hex");
26
+ if (Array.isArray(value))
27
+ return value.map(stringifyBigints);
28
+ if (value && typeof value === "object") {
29
+ return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, stringifyBigints(v)]));
30
+ }
31
+ return value;
32
+ }
33
+ export function buildProgram(deps = realDeps) {
34
+ const program = new Command();
35
+ program
36
+ .name("mooring")
37
+ .description("CLI for Mooring spending cards (Soroban custom accounts on Stellar)")
38
+ .version("0.2.0");
39
+ program
40
+ .command("keygen")
41
+ .description("Generate a new agent keypair for a Mooring card signer")
42
+ .option("--hex", "also print the 32-byte public key as hex, for `create_card --signer`")
43
+ .action((opts) => {
44
+ const kp = Keypair.random();
45
+ deps.stdout(`Public key: ${kp.publicKey()}`);
46
+ deps.stdout(`Secret key: ${kp.secret()}`);
47
+ deps.stdout("WARNING: the secret key is shown once and never stored. Save it now (e.g. as AGENT_SECRET) — Mooring does not keep a copy.");
48
+ if (opts.hex) {
49
+ const hex = Buffer.from(kp.rawPublicKey()).toString("hex");
50
+ deps.stdout(`Signer hex: ${hex}`);
51
+ }
52
+ });
53
+ program
54
+ .command("status")
55
+ .description("Print a card's on-chain info and merchant allowlist")
56
+ .requiredOption("--card <address>", "card contract address (C...)")
57
+ .addOption(new Option("--network <network>", "stellar network").choices(["stellar:testnet", "stellar:pubnet"]).default("stellar:testnet"))
58
+ .option("--rpc <url>", "override the default RPC URL for the network")
59
+ .option("--json", "print machine-readable JSON instead of a table")
60
+ .action(async (opts) => {
61
+ const rpcUrl = getRpcUrl(opts.network, opts.rpc ? { url: opts.rpc } : undefined);
62
+ const passphrase = getNetworkPassphrase(opts.network);
63
+ const [info, merchants] = await Promise.all([
64
+ deps.readCardInfo(rpcUrl, passphrase, opts.card),
65
+ deps.readMerchants(rpcUrl, passphrase, opts.card),
66
+ ]);
67
+ if (opts.json) {
68
+ deps.stdout(toJson({ info, merchants }));
69
+ return;
70
+ }
71
+ deps.stdout(`Label: ${info.label}`);
72
+ deps.stdout(`Card: ${opts.card}`);
73
+ deps.stdout(`Network: ${opts.network}`);
74
+ deps.stdout("Info:");
75
+ deps.stdout(toJson(stringifyBigints(info)));
76
+ deps.stdout("Merchants:");
77
+ deps.stdout(merchants.length ? merchants.map((m) => ` ${m}`).join("\n") : " (none)");
78
+ });
79
+ program
80
+ .command("pay")
81
+ .description("Pay an x402-protected URL from a Mooring card")
82
+ .argument("<url>", "the x402-protected URL to request")
83
+ .requiredOption("--card <address>", "card contract address (C...)")
84
+ .option("--agent-secret-env <name>", "env var holding the agent's Stellar secret key", "AGENT_SECRET")
85
+ .addOption(new Option("--network <network>", "stellar network").choices(["stellar:testnet", "stellar:pubnet"]).default("stellar:testnet"))
86
+ .option("--rpc <url>", "override the default RPC URL for the network")
87
+ .option("--no-precheck", "skip the local policy pre-check before signing")
88
+ .action(async (url, opts) => {
89
+ const secretEnvName = opts.agentSecretEnv ?? "AGENT_SECRET";
90
+ const secret = process.env[secretEnvName];
91
+ if (!secret) {
92
+ deps.stdout(`Missing agent secret: set ${secretEnvName} to the agent's Stellar secret key (S...).`);
93
+ process.exitCode = 2;
94
+ return;
95
+ }
96
+ let agent;
97
+ try {
98
+ agent = Keypair.fromSecret(secret);
99
+ }
100
+ catch {
101
+ deps.stdout(`Invalid agent secret in $${secretEnvName}`);
102
+ process.exitCode = 1;
103
+ return;
104
+ }
105
+ const fetchWithPayment = deps.createMooringFetch({
106
+ card: opts.card,
107
+ agent,
108
+ network: opts.network,
109
+ rpcUrl: opts.rpc,
110
+ precheck: opts.precheck,
111
+ });
112
+ try {
113
+ const res = await fetchWithPayment(url);
114
+ deps.stdout(`HTTP ${res.status}`);
115
+ const settlement = deps.getSettlement(res);
116
+ if (settlement) {
117
+ deps.stdout(`Settlement: ${settlement.transaction} (${settlement.network})`);
118
+ }
119
+ const body = await res.text();
120
+ deps.stdout(body);
121
+ }
122
+ catch (err) {
123
+ if (err instanceof CardPolicyDenied) {
124
+ deps.stdout(`Denied (${err.reason}) at ${err.stage}`);
125
+ if (err.merchant?.url) {
126
+ deps.stdout(`Allow it: ${allowMerchantUrl(DEFAULT_APP_URL, opts.card, err.merchant.url)}`);
127
+ }
128
+ process.exitCode = 2;
129
+ return;
130
+ }
131
+ throw err;
132
+ }
133
+ });
134
+ return program;
135
+ }
136
+ /**
137
+ * Resolves a path through symlinks, falling back to a plain `path.resolve`
138
+ * when the path does not exist (e.g. under test) or cannot be read.
139
+ */
140
+ function realOrResolved(p) {
141
+ try {
142
+ return realpathSync(p);
143
+ }
144
+ catch {
145
+ return path.resolve(p);
146
+ }
147
+ }
148
+ // Robust equivalent of `import.meta.url === \`file://${process.argv[1]}\``:
149
+ // resolves both sides through symlinks before comparing, so it works when the
150
+ // CLI is invoked through its installed bin symlink (npm links `mooring` into
151
+ // `node_modules/.bin`, which points at the package under `node_modules/@mooring-live/cli`,
152
+ // itself a workspace symlink — `fileURLToPath(import.meta.url)` follows all of
153
+ // that back to the real `dist/index.js`, but `process.argv[1]` does not unless
154
+ // resolved the same way). Never runs `parseAsync` when the module is only imported.
155
+ const isMainModule = process.argv[1] !== undefined && fileURLToPath(import.meta.url) === realOrResolved(process.argv[1]);
156
+ if (isMainModule) {
157
+ void buildProgram()
158
+ .parseAsync(process.argv)
159
+ .catch((err) => {
160
+ process.stderr.write(`${err instanceof Error ? err.message : String(err)}\n`);
161
+ process.exitCode = 1;
162
+ });
163
+ }
164
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,aAAa,GAId,MAAM,2BAA2B,CAAC;AAWnC,MAAM,QAAQ,GAAY;IACxB,YAAY;IACZ,aAAa;IACb,kBAAkB;IAClB,aAAa;IACb,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC;CAC5D,CAAC;AAEF,iIAAiI;AACjI,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACtJ,CAAC;AAED,oGAAoG;AACpG,SAAS,gBAAgB,CAAC,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IACvD,IAAI,KAAK,YAAY,UAAU;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7D,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAgB,QAAQ;IACnD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAC9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,qEAAqE,CAAC;SAClF,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,OAAO,EAAE,sEAAsE,CAAC;SACvF,MAAM,CAAC,CAAC,IAAuB,EAAE,EAAE;QAClC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,CAAC,4HAA4H,CAAC,CAAC;QAC1I,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC3D,IAAI,CAAC,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qDAAqD,CAAC;SAClE,cAAc,CAAC,kBAAkB,EAAE,8BAA8B,CAAC;SAClE,SAAS,CACR,IAAI,MAAM,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAC/H;SACA,MAAM,CAAC,aAAa,EAAE,8CAA8C,CAAC;SACrE,MAAM,CAAC,QAAQ,EAAE,gDAAgD,CAAC;SAClE,MAAM,CAAC,KAAK,EAAE,IAA6E,EAAE,EAAE;QAC9F,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACjF,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC1C,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;YAChD,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC;SAClD,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YACzC,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IACzF,CAAC,CAAC,CAAC;IAEL,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,+CAA+C,CAAC;SAC5D,QAAQ,CAAC,OAAO,EAAE,mCAAmC,CAAC;SACtD,cAAc,CAAC,kBAAkB,EAAE,8BAA8B,CAAC;SAClE,MAAM,CAAC,2BAA2B,EAAE,gDAAgD,EAAE,cAAc,CAAC;SACrG,SAAS,CACR,IAAI,MAAM,CAAC,qBAAqB,EAAE,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC,iBAAiB,EAAE,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAC/H;SACA,MAAM,CAAC,aAAa,EAAE,8CAA8C,CAAC;SACrE,MAAM,CAAC,eAAe,EAAE,gDAAgD,CAAC;SACzE,MAAM,CACL,KAAK,EACH,GAAW,EACX,IAMC,EACD,EAAE;QACF,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,CAAC,MAAM,CAAC,6BAA6B,aAAa,4CAA4C,CAAC,CAAC;YACpG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACH,KAAK,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,MAAM,CAAC,4BAA4B,aAAa,EAAE,CAAC,CAAC;YACzD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC/C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK;YACL,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,GAAG;YAChB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAClC,MAAM,UAAU,GAAsB,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC9D,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,eAAe,UAAU,CAAC,WAAW,KAAK,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC;YAC/E,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,gBAAgB,EAAE,CAAC;gBACpC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBACtD,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC;oBACtB,IAAI,CAAC,MAAM,CAAC,aAAa,gBAAgB,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAC7F,CAAC;gBACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC,CACF,CAAC;IAEJ,OAAO,OAAO,CAAC;AACjB,CAAC;AAKD;;;GAGG;AACH,SAAS,cAAc,CAAC,CAAS;IAC/B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,2FAA2F;AAC3F,+EAA+E;AAC/E,+EAA+E;AAC/E,oFAAoF;AACpF,MAAM,YAAY,GAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtG,IAAI,YAAY,EAAE,CAAC;IACjB,KAAK,YAAY,EAAE;SAChB,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC;SACxB,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;QACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACP,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,54 @@
1
1
  {
2
2
  "name": "@mooring-live/cli",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.2.0",
4
+ "description": "CLI for Mooring spending cards on Stellar: generate an agent key, inspect a card, pay an x402 API from it.",
5
+ "private": false,
6
+ "license": "Apache-2.0",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/berkay1532/mooring.git",
10
+ "directory": "packages/cli"
11
+ },
12
+ "homepage": "https://mooring.live",
13
+ "bugs": {
14
+ "url": "https://github.com/berkay1532/mooring/issues"
15
+ },
16
+ "keywords": [
17
+ "stellar",
18
+ "soroban",
19
+ "x402",
20
+ "usdc",
21
+ "ai-agents",
22
+ "cli"
23
+ ],
24
+ "engines": {
25
+ "node": ">=20"
26
+ },
27
+ "publishConfig": {
28
+ "access": "public"
29
+ },
30
+ "type": "module",
31
+ "bin": {
32
+ "mooring": "./dist/index.js"
33
+ },
34
+ "files": [
35
+ "dist",
36
+ "README.md"
37
+ ],
38
+ "scripts": {
39
+ "prepublishOnly": "npm run build",
40
+ "build": "tsc -p tsconfig.json",
41
+ "typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.test.json --noEmit",
42
+ "test": "vitest run"
43
+ },
44
+ "dependencies": {
45
+ "@mooring-live/x402-client": "0.2.0",
46
+ "@stellar/stellar-sdk": "17.0.1",
47
+ "commander": "^12.1.0"
48
+ },
49
+ "devDependencies": {
50
+ "@types/node": "^22.0.0",
51
+ "typescript": "^5.6.0",
52
+ "vitest": "^3.0.0"
53
+ }
54
+ }