cards402 0.4.2 → 0.4.5

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.
@@ -1,2 +1,13 @@
1
+ export { deriveDefaultWalletName as _deriveDefaultWalletName };
2
+ /**
3
+ * Derive a unique, deterministic wallet name from the agent label and
4
+ * claim code. Two different claims always produce different names, so
5
+ * running `cards402 onboard` multiple times on the same machine gives
6
+ * each agent its own OWS wallet file instead of silently reusing the
7
+ * previous agent's private keys. The claim-code suffix is what makes
8
+ * it unique; the label is just there to make the vault file readable
9
+ * on disk.
10
+ */
11
+ declare function deriveDefaultWalletName(claim: string, label: string | null): string;
1
12
  export declare function onboardCommand(argv: string[]): Promise<number>;
2
13
  //# sourceMappingURL=onboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AA4DA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAiHpE"}
1
+ {"version":3,"file":"onboard.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,uBAAuB,IAAI,wBAAwB,EAAE,CAAC;AAkE/D;;;;;;;;GAQG;AACH,iBAAS,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAgB5E;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA6IpE"}
@@ -12,6 +12,7 @@
12
12
  // "Awaiting deposit" in their dashboard immediately.
13
13
  // 5. Print the Stellar address + next steps.
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports._deriveDefaultWalletName = deriveDefaultWalletName;
15
16
  exports.onboardCommand = onboardCommand;
16
17
  const config_1 = require("../config");
17
18
  const ows_1 = require("../ows");
@@ -36,12 +37,20 @@ function parseArgs(argv) {
36
37
  out.apiBase = argv[++i];
37
38
  else if (arg.startsWith('--api-base='))
38
39
  out.apiBase = arg.slice('--api-base='.length);
40
+ else if (arg === '--vault-path')
41
+ out.vaultPath = argv[++i];
42
+ else if (arg.startsWith('--vault-path='))
43
+ out.vaultPath = arg.slice('--vault-path='.length);
44
+ else if (arg === '--passphrase-env')
45
+ out.passphraseEnv = argv[++i];
46
+ else if (arg.startsWith('--passphrase-env='))
47
+ out.passphraseEnv = arg.slice('--passphrase-env='.length);
39
48
  }
40
49
  return out;
41
50
  }
42
51
  function usage() {
43
52
  process.stderr
44
- .write(`Usage: cards402 onboard --claim <code> [--wallet-name <name>] [--api-base <url>]
53
+ .write(`Usage: cards402 onboard --claim <code> [--wallet-name <name>] [--vault-path <path>] [--passphrase-env <ENVNAME>] [--api-base <url>]
45
54
 
46
55
  Exchanges a one-time claim code (from the cards402 dashboard) for an
47
56
  api key, creates an OWS Stellar wallet, and registers its address with
@@ -52,12 +61,51 @@ is auto-loaded by the SDK on subsequent runs. You do NOT need to paste
52
61
  the api key into any env var yourself.
53
62
 
54
63
  Options:
55
- --claim <code> One-time claim code from the dashboard. Required.
56
- --wallet-name <name> Name for the OWS wallet. Default: cards402-agent
57
- --api-base <url> Override the default https://api.cards402.com/v1
58
- -h, --help Show this message
64
+ --claim <code> One-time claim code from the dashboard. Required.
65
+ --wallet-name <name> Name for the OWS wallet. If omitted, a unique
66
+ name is derived from the agent label + the
67
+ claim code so two separate agents on the same
68
+ machine can't accidentally share a wallet.
69
+ --vault-path <path> Override the default ~/.ows/wallets vault location.
70
+ USE THIS if you're running on ephemeral storage
71
+ (Lambda, Cloud Run, scratch containers) — point
72
+ it at a persistent volume. Lost vault = lost funds.
73
+ Persisted to config so subsequent purchase/wallet
74
+ commands use the same vault automatically.
75
+ --passphrase-env <ENVNAME> Name of the environment variable that holds the
76
+ OWS passphrase (e.g. CARDS402_OWS_PASSPHRASE). The
77
+ passphrase value is read from process.env at call
78
+ time; only the variable NAME is persisted to
79
+ ~/.cards402/config.json, never the value itself.
80
+ --api-base <url> Override the default https://api.cards402.com/v1
81
+ -h, --help Show this message
59
82
  `);
60
83
  }
84
+ /**
85
+ * Derive a unique, deterministic wallet name from the agent label and
86
+ * claim code. Two different claims always produce different names, so
87
+ * running `cards402 onboard` multiple times on the same machine gives
88
+ * each agent its own OWS wallet file instead of silently reusing the
89
+ * previous agent's private keys. The claim-code suffix is what makes
90
+ * it unique; the label is just there to make the vault file readable
91
+ * on disk.
92
+ */
93
+ function deriveDefaultWalletName(claim, label) {
94
+ // Strip the `c402_` prefix (if present), take the first 8 hex chars
95
+ // for a short-but-unique suffix. The claim code is cryptographically
96
+ // random — 8 hex chars = 32 bits, collision probability negligible
97
+ // at any realistic fleet size.
98
+ const raw = claim.replace(/^c402_/i, '');
99
+ const suffix = raw.slice(0, 8).toLowerCase();
100
+ // Slugify label: lowercase, replace non-alnum with -, collapse
101
+ // repeats, trim hyphens, cap length. Falls back to `agent` if empty.
102
+ const slug = (label ?? 'agent')
103
+ .toLowerCase()
104
+ .replace(/[^a-z0-9]+/g, '-')
105
+ .replace(/^-+|-+$/g, '')
106
+ .slice(0, 24) || 'agent';
107
+ return `cards402-${slug}-${suffix}`;
108
+ }
61
109
  async function onboardCommand(argv) {
62
110
  const args = parseArgs(argv);
63
111
  if (args.help) {
@@ -70,7 +118,10 @@ async function onboardCommand(argv) {
70
118
  return 2;
71
119
  }
72
120
  const apiBase = args.apiBase || process.env.CARDS402_BASE_URL || 'https://api.cards402.com/v1';
73
- const walletName = args.walletName || 'cards402-agent';
121
+ // We can't derive the default wallet name until AFTER the claim is
122
+ // redeemed (we need the label). So we start with the explicit
123
+ // --wallet-name override, and if it wasn't passed we compute a
124
+ // unique default after step 1.
74
125
  // Step 1 — trade claim code for api key.
75
126
  process.stdout.write('→ Claiming agent credentials…\n');
76
127
  let claimResponse;
@@ -92,12 +143,31 @@ async function onboardCommand(argv) {
92
143
  process.stderr.write(`error: network failure during claim: ${String(err)}\n`);
93
144
  return 1;
94
145
  }
146
+ // Resolve wallet name: explicit override wins, otherwise derive from
147
+ // the agent label + the claim code so every onboarding run produces
148
+ // a distinct wallet. This closes the "second agent inherited the
149
+ // first agent's wallet" bug where both claims used the static
150
+ // default 'cards402-agent' name.
151
+ const walletName = args.walletName || deriveDefaultWalletName(args.claim, claimResponse.label);
152
+ // F12: resolve passphrase from the named env var. Only the var NAME
153
+ // is persisted to config; the value never touches disk in cards402.
154
+ let passphrase;
155
+ if (args.passphraseEnv) {
156
+ passphrase = process.env[args.passphraseEnv];
157
+ if (!passphrase) {
158
+ process.stderr.write(`error: --passphrase-env ${args.passphraseEnv} is set but the env var is empty.\n` +
159
+ `Set ${args.passphraseEnv} to your chosen passphrase before running onboard.\n`);
160
+ return 2;
161
+ }
162
+ }
95
163
  // Step 2 — persist config so the SDK finds it on next run.
96
164
  const { path: configPath } = (0, config_1.saveCards402Config)({
97
165
  api_key: claimResponse.api_key,
98
166
  api_url: claimResponse.api_url || apiBase,
99
167
  webhook_secret: claimResponse.webhook_secret,
100
168
  wallet_name: walletName,
169
+ vault_path: args.vaultPath,
170
+ passphrase_env: args.passphraseEnv,
101
171
  created_at: new Date().toISOString(),
102
172
  });
103
173
  process.stdout.write(`✓ Credentials saved to ${configPath} (chmod 0600)\n`);
@@ -110,7 +180,7 @@ async function onboardCommand(argv) {
110
180
  await client.reportStatus('initializing', { detail: 'creating wallet' }).catch(() => { });
111
181
  let publicKey;
112
182
  try {
113
- const created = (0, ows_1.createOWSWallet)(walletName);
183
+ const created = (0, ows_1.createOWSWallet)(walletName, passphrase, args.vaultPath);
114
184
  publicKey = created.publicKey;
115
185
  }
116
186
  catch (err) {
@@ -118,10 +188,14 @@ async function onboardCommand(argv) {
118
188
  return 1;
119
189
  }
120
190
  process.stdout.write(`✓ Wallet "${walletName}" ready\n`);
191
+ if (args.vaultPath)
192
+ process.stdout.write(` vault: ${args.vaultPath}\n`);
193
+ if (args.passphraseEnv)
194
+ process.stdout.write(` passphrase: read from $${args.passphraseEnv}\n`);
121
195
  // Step 4 — check balance (may 404 on an unactivated account; that's fine).
122
196
  let balance = { xlm: '0', usdc: '0' };
123
197
  try {
124
- balance = await (0, ows_1.getOWSBalance)(walletName);
198
+ balance = await (0, ows_1.getOWSBalance)(walletName, args.vaultPath);
125
199
  }
126
200
  catch {
127
201
  /* account not yet activated on-chain — normal on first run */
@@ -1 +1 @@
1
- {"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"onboard.js","sourceRoot":"","sources":["../../src/commands/onboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=onboard.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboard.test.d.ts","sourceRoot":"","sources":["../../src/commands/onboard.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ // Unit tests for the onboard command's wallet-name derivation. The
3
+ // helper is the load-bearing piece that fixes the "second agent reuses
4
+ // the first agent's OWS wallet" bug — the test exists to keep that
5
+ // behaviour locked in across future edits.
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const vitest_1 = require("vitest");
8
+ const onboard_1 = require("./onboard");
9
+ (0, vitest_1.describe)('deriveDefaultWalletName', () => {
10
+ const claimA = 'c402_a1b2c3d4e5f607080910111213141516171819202122232425262728293031';
11
+ const claimB = 'c402_ff00112233445566778899aabbccddeeff00112233445566778899aabbccdd';
12
+ (0, vitest_1.it)('produces a name prefixed with cards402-', () => {
13
+ (0, vitest_1.expect)((0, onboard_1._deriveDefaultWalletName)(claimA, 'research-bot')).toMatch(/^cards402-/);
14
+ });
15
+ (0, vitest_1.it)('includes a slugified version of the label', () => {
16
+ (0, vitest_1.expect)((0, onboard_1._deriveDefaultWalletName)(claimA, 'Research Bot v2!')).toContain('research-bot-v2');
17
+ });
18
+ (0, vitest_1.it)('falls back to "agent" when the label is null', () => {
19
+ (0, vitest_1.expect)((0, onboard_1._deriveDefaultWalletName)(claimA, null)).toContain('agent');
20
+ });
21
+ (0, vitest_1.it)('falls back to "agent" when the label is empty', () => {
22
+ (0, vitest_1.expect)((0, onboard_1._deriveDefaultWalletName)(claimA, '')).toContain('agent');
23
+ });
24
+ (0, vitest_1.it)('produces different names for different claims — even with the same label', () => {
25
+ const a = (0, onboard_1._deriveDefaultWalletName)(claimA, 'research-bot');
26
+ const b = (0, onboard_1._deriveDefaultWalletName)(claimB, 'research-bot');
27
+ (0, vitest_1.expect)(a).not.toBe(b);
28
+ });
29
+ (0, vitest_1.it)('is deterministic — same inputs always yield the same name', () => {
30
+ (0, vitest_1.expect)((0, onboard_1._deriveDefaultWalletName)(claimA, 'research-bot')).toBe((0, onboard_1._deriveDefaultWalletName)(claimA, 'research-bot'));
31
+ });
32
+ (0, vitest_1.it)('accepts a claim without the c402_ prefix', () => {
33
+ const raw = (0, onboard_1._deriveDefaultWalletName)(claimA, 'x');
34
+ const noPrefix = (0, onboard_1._deriveDefaultWalletName)(claimA.replace(/^c402_/, ''), 'x');
35
+ (0, vitest_1.expect)(raw).toBe(noPrefix);
36
+ });
37
+ (0, vitest_1.it)('caps the label slug so a long label does not blow out the path', () => {
38
+ const long = 'a'.repeat(200);
39
+ const name = (0, onboard_1._deriveDefaultWalletName)(claimA, long);
40
+ // cards402- + slug (<=24) + - + 8-hex = ~42 chars max
41
+ (0, vitest_1.expect)(name.length).toBeLessThanOrEqual(48);
42
+ });
43
+ (0, vitest_1.it)('never contains characters unsafe for a filesystem vault path', () => {
44
+ const name = (0, onboard_1._deriveDefaultWalletName)(claimA, '../../evil/$(whoami)');
45
+ (0, vitest_1.expect)(name).toMatch(/^cards402-[a-z0-9-]+$/);
46
+ });
47
+ });
48
+ //# sourceMappingURL=onboard.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboard.test.js","sourceRoot":"","sources":["../../src/commands/onboard.test.ts"],"names":[],"mappings":";AAAA,mEAAmE;AACnE,uEAAuE;AACvE,mEAAmE;AACnE,2CAA2C;;AAE3C,mCAA8C;AAC9C,uCAAqD;AAErD,IAAA,iBAAQ,EAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,MAAM,MAAM,GAAG,qEAAqE,CAAC;IACrF,MAAM,MAAM,GAAG,qEAAqE,CAAC;IAErF,IAAA,WAAE,EAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,IAAA,eAAM,EAAC,IAAA,kCAAwB,EAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,IAAA,eAAM,EAAC,IAAA,kCAAwB,EAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,IAAA,eAAM,EAAC,IAAA,kCAAwB,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,IAAA,eAAM,EAAC,IAAA,kCAAwB,EAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,0EAA0E,EAAE,GAAG,EAAE;QAClF,MAAM,CAAC,GAAG,IAAA,kCAAwB,EAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC3D,MAAM,CAAC,GAAG,IAAA,kCAAwB,EAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAA,eAAM,EAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,IAAA,eAAM,EAAC,IAAA,kCAAwB,EAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,IAAI,CAC3D,IAAA,kCAAwB,EAAC,MAAM,EAAE,cAAc,CAAC,CACjD,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,GAAG,GAAG,IAAA,kCAAwB,EAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAA,kCAAwB,EAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7E,IAAA,eAAM,EAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAA,kCAAwB,EAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACpD,sDAAsD;QACtD,IAAA,eAAM,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,IAAI,GAAG,IAAA,kCAAwB,EAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;QACtE,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"purchase.d.ts","sourceRoot":"","sources":["../../src/commands/purchase.ts"],"names":[],"mappings":"AAuHA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA+ErE"}
1
+ {"version":3,"file":"purchase.d.ts","sourceRoot":"","sources":["../../src/commands/purchase.ts"],"names":[],"mappings":"AAqIA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAyIrE"}
@@ -79,6 +79,14 @@ function parseArgs(argv) {
79
79
  out.walletName = argv[++i];
80
80
  else if (arg.startsWith('--wallet-name='))
81
81
  out.walletName = arg.slice('--wallet-name='.length);
82
+ else if (arg === '--vault-path')
83
+ out.vaultPath = argv[++i];
84
+ else if (arg.startsWith('--vault-path='))
85
+ out.vaultPath = arg.slice('--vault-path='.length);
86
+ else if (arg === '--passphrase-env')
87
+ out.passphraseEnv = argv[++i];
88
+ else if (arg.startsWith('--passphrase-env='))
89
+ out.passphraseEnv = arg.slice('--passphrase-env='.length);
82
90
  else if (arg === '--resume')
83
91
  out.resume = argv[++i];
84
92
  else if (arg.startsWith('--resume='))
@@ -92,14 +100,21 @@ function usage() {
92
100
 
93
101
  Buys a virtual Visa card for the given USD value using the credentials
94
102
  and wallet set up by 'cards402 onboard'. Reads ~/.cards402/config.json
95
- for the api key and wallet name, so you don't need to pass either.
103
+ for the api key, wallet name, vault path, and passphrase env var.
96
104
 
97
105
  Options:
98
- -a, --amount <USDC> Card value in USD (decimal string). Required for new purchases.
99
- --asset xlm|usdc Which asset to pay with. Default: xlm
100
- --wallet-name <name> Override the wallet name from config.json
101
- --resume <order-id> Resume a purchase that failed mid-flight. Omit --amount.
102
- -h, --help Show this message
106
+ -a, --amount <USDC> Card value in USD. Required for new purchases.
107
+ --asset xlm|usdc Which asset to pay with. Default: auto — picks
108
+ USDC if the wallet has enough USDC to cover the
109
+ order, otherwise pays in XLM. Pass an explicit
110
+ value to force one.
111
+ --wallet-name <name> Override the wallet name from config.json
112
+ --vault-path <path> Override the vault path from config.json
113
+ --passphrase-env <ENVNAME> Override the passphrase env var from config.json.
114
+ The passphrase value is read from process.env at
115
+ call time and never logged.
116
+ --resume <order-id> Resume a purchase that failed mid-flight. Omit --amount.
117
+ -h, --help Show this message
103
118
 
104
119
  Examples:
105
120
  cards402 purchase --amount 10 # $10 card paid in XLM
@@ -173,7 +188,60 @@ Your operator can mint a claim code from https://cards402.com/dashboard.
173
188
  return 1;
174
189
  }
175
190
  const walletName = args.walletName || config.wallet_name || 'cards402-agent';
176
- const paymentAsset = args.asset ?? 'xlm';
191
+ // F12: vault_path and passphrase_env both come from config first, then
192
+ // CLI overrides. The passphrase value is read from process.env at call
193
+ // time; only the env var NAME is ever stored in config.
194
+ const vaultPath = args.vaultPath ?? config.vault_path;
195
+ const passphraseEnv = args.passphraseEnv ?? config.passphrase_env;
196
+ const passphrase = passphraseEnv ? process.env[passphraseEnv] : undefined;
197
+ if (passphraseEnv && !passphrase) {
198
+ process.stderr.write(`error: --passphrase-env ${passphraseEnv} is set in config but the env var is empty.\n` +
199
+ `Set ${passphraseEnv} to your wallet passphrase before running purchase.\n`);
200
+ return 2;
201
+ }
202
+ // Resolve the payment asset. If the user didn't pass --asset we auto-pick
203
+ // based on what the wallet actually holds — agents that try to pay in an
204
+ // asset they have no balance for is the #1 failure mode in early piloting.
205
+ // Rule:
206
+ // - explicit --asset wins always
207
+ // - on resume, asset doesn't matter (the order is already paid or
208
+ // waiting for an existing payment)
209
+ // - otherwise: pick USDC if the wallet has enough USDC to cover the
210
+ // order, else pick XLM
211
+ let paymentAsset;
212
+ if (args.asset) {
213
+ paymentAsset = args.asset;
214
+ }
215
+ else if (args.resume) {
216
+ paymentAsset = 'xlm'; // unused on resume, any value is fine
217
+ }
218
+ else {
219
+ try {
220
+ const bal = await (0, ows_1.getOWSBalance)(walletName, vaultPath);
221
+ const usdcBal = parseFloat(bal.usdc || '0');
222
+ const wantUsdc = parseFloat(args.amount || '0');
223
+ if (usdcBal >= wantUsdc && wantUsdc > 0) {
224
+ paymentAsset = 'usdc';
225
+ process.stdout.write(`→ Auto-picked USDC (wallet has ${usdcBal.toFixed(2)} USDC; covers $${wantUsdc.toFixed(2)})\n`);
226
+ }
227
+ else {
228
+ paymentAsset = 'xlm';
229
+ if (usdcBal > 0) {
230
+ process.stdout.write(`→ Auto-picked XLM (wallet has only ${usdcBal.toFixed(2)} USDC; needs $${wantUsdc.toFixed(2)})\n`);
231
+ }
232
+ else {
233
+ process.stdout.write(`→ Auto-picked XLM (no USDC in wallet)\n`);
234
+ }
235
+ }
236
+ }
237
+ catch {
238
+ // Horizon down or unactivated wallet — fall back to XLM (no
239
+ // trustline required) and let payViaContractOWS surface the real
240
+ // error if the wallet really has nothing.
241
+ paymentAsset = 'xlm';
242
+ process.stdout.write(`→ Could not read balance from Horizon — defaulting to XLM. Pass --asset usdc to override.\n`);
243
+ }
244
+ }
177
245
  if (args.resume) {
178
246
  process.stdout.write(`→ Resuming order ${args.resume}…\n`);
179
247
  }
@@ -188,6 +256,8 @@ Your operator can mint a claim code from https://cards402.com/dashboard.
188
256
  // amount is unused on resume but the type requires it; pass '0' safely.
189
257
  amountUsdc: args.amount ?? '0',
190
258
  paymentAsset,
259
+ passphrase,
260
+ vaultPath,
191
261
  ...(args.resume ? { resume: args.resume } : {}),
192
262
  });
193
263
  clearLastOrder();
@@ -1 +1 @@
1
- {"version":3,"file":"purchase.js","sourceRoot":"","sources":["../../src/commands/purchase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"purchase.js","sourceRoot":"","sources":["../../src/commands/purchase.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAqBA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8DnE"}
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAiCA,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA+DnE"}
@@ -8,17 +8,31 @@ exports.walletCommand = walletCommand;
8
8
  const config_1 = require("../config");
9
9
  const ows_1 = require("../ows");
10
10
  function usage() {
11
- process.stderr.write(`Usage: cards402 wallet <subcommand>
11
+ process.stderr
12
+ .write(`Usage: cards402 wallet <subcommand> [--vault-path <path>] [--name <walletname>]
12
13
 
13
14
  Subcommands:
14
15
  address Print the Stellar address for this agent's wallet
15
16
  balance Print the wallet's XLM and USDC balances from Horizon
16
17
  -h, --help Show this message
17
18
 
18
- Both subcommands read ~/.cards402/config.json for the wallet name, so
19
- you don't need to pass anything after 'cards402 onboard'.
19
+ Both subcommands read ~/.cards402/config.json for the wallet name and
20
+ vault path so you don't need to pass anything after 'cards402 onboard'.
21
+ Override either with --name=<walletname> / --vault-path=<path>.
20
22
  `);
21
23
  }
24
+ function parseFlag(rest, short) {
25
+ for (let i = 0; i < rest.length; i++) {
26
+ const arg = rest[i];
27
+ if (!arg)
28
+ continue;
29
+ if (arg === short)
30
+ return rest[i + 1];
31
+ if (arg.startsWith(`${short}=`))
32
+ return arg.slice(short.length + 1);
33
+ }
34
+ return undefined;
35
+ }
22
36
  async function walletCommand(argv) {
23
37
  const [sub, ...rest] = argv;
24
38
  if (!sub || sub === '-h' || sub === '--help' || sub === 'help') {
@@ -30,10 +44,12 @@ async function walletCommand(argv) {
30
44
  process.stderr.write("error: no cards402 config found. Run 'cards402 onboard --claim <code>' first.\n");
31
45
  return 1;
32
46
  }
33
- const walletName = rest.find((a) => a.startsWith('--name='))?.slice(7) || config.wallet_name || 'cards402-agent';
47
+ const walletName = parseFlag(rest, '--name') || config.wallet_name || 'cards402-agent';
48
+ // F12: vault_path comes from config first, CLI flag overrides.
49
+ const vaultPath = parseFlag(rest, '--vault-path') || config.vault_path;
34
50
  if (sub === 'address') {
35
51
  try {
36
- const publicKey = (0, ows_1.getOWSPublicKey)(walletName);
52
+ const publicKey = (0, ows_1.getOWSPublicKey)(walletName, vaultPath);
37
53
  process.stdout.write(`${publicKey}\n`);
38
54
  return 0;
39
55
  }
@@ -44,8 +60,8 @@ async function walletCommand(argv) {
44
60
  }
45
61
  if (sub === 'balance') {
46
62
  try {
47
- const publicKey = (0, ows_1.getOWSPublicKey)(walletName);
48
- const bal = await (0, ows_1.getOWSBalance)(walletName);
63
+ const publicKey = (0, ows_1.getOWSPublicKey)(walletName, vaultPath);
64
+ const bal = await (0, ows_1.getOWSBalance)(walletName, vaultPath);
49
65
  process.stdout.write(`address: ${publicKey}\n`);
50
66
  process.stdout.write(`xlm: ${bal.xlm}\n`);
51
67
  process.stdout.write(`usdc: ${bal.usdc}\n`);
@@ -56,7 +72,7 @@ async function walletCommand(argv) {
56
72
  // Horizon 404 on a brand-new unactivated wallet — show zeros.
57
73
  if (msg.includes('Not Found') || msg.includes('404')) {
58
74
  try {
59
- const publicKey = (0, ows_1.getOWSPublicKey)(walletName);
75
+ const publicKey = (0, ows_1.getOWSPublicKey)(walletName, vaultPath);
60
76
  process.stdout.write(`address: ${publicKey}\n`);
61
77
  process.stdout.write(`xlm: 0 (unactivated — send >= 1 XLM)\n`);
62
78
  process.stdout.write(`usdc: 0\n`);
@@ -1 +1 @@
1
- {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -4,6 +4,16 @@ export interface Cards402Config {
4
4
  webhook_secret?: string | null;
5
5
  wallet_name?: string;
6
6
  vault_path?: string;
7
+ /**
8
+ * Adversarial audit F12: the NAME of the environment variable that
9
+ * holds the OWS wallet passphrase, NOT the passphrase value itself.
10
+ * Subsequent CLI commands read this field, look up
11
+ * `process.env[passphrase_env]` at call time, and pass the value to
12
+ * the OWS layer. We never persist the passphrase value to disk —
13
+ * a config dump alone gives an attacker the api key but not the
14
+ * keys to the wallet vault.
15
+ */
16
+ passphrase_env?: string;
7
17
  created_at: string;
8
18
  }
9
19
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAUD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAS7E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAMhG;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,GAAE;IACJ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL;IAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAe7D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAUD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAS7E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAMhG;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,GAAE;IACJ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL;IAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAe7D"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,sEAAsE;AACtE,uEAAuE;AACvE,EAAE;AACF,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,mEAAmE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BnE,gDASC;AAMD,gDAMC;AAQD,gDAoBC;AA1ED,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAWzB,SAAS,gBAAgB;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa,CAAC,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,UAAmB;IACpD,MAAM,CAAC,GAAG,UAAU,IAAI,iBAAiB,EAAE,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,MAAsB,EAAE,UAAmB;IAC5E,MAAM,CAAC,GAAG,UAAU,IAAI,iBAAiB,EAAE,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAChC,OAGI,EAAE;IAEN,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;IACzF,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACjC,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;YACpC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;SACvD,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;IACjC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";AAAA,sEAAsE;AACtE,sEAAsE;AACtE,uEAAuE;AACvE,EAAE;AACF,oEAAoE;AACpE,oEAAoE;AACpE,oEAAoE;AACpE,mEAAmE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCnE,gDASC;AAMD,gDAMC;AAQD,gDAoBC;AApFD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAqBzB,SAAS,gBAAgB;IACvB,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AACjF,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,aAAa,CAAC,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,UAAmB;IACpD,MAAM,CAAC,GAAG,UAAU,IAAI,iBAAiB,EAAE,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAmB,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,MAAsB,EAAE,UAAmB;IAC5E,MAAM,CAAC,GAAG,UAAU,IAAI,iBAAiB,EAAE,CAAC;IAC5C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5B,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,kBAAkB,CAChC,OAGI,EAAE;IAEN,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;IACzF,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACjC,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB;YACpC,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;SACvD,CAAC;IACJ,CAAC;IACD,MAAM,GAAG,GAAG,kBAAkB,EAAE,CAAC;IACjC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AACtD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cards402",
3
- "version": "0.4.2",
3
+ "version": "0.4.5",
4
4
  "description": "Virtual Visa cards for AI agents — pay USDC or XLM on Stellar, get a card in ~60s",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -64,6 +64,12 @@
64
64
  "@ctx.com/stellar-ows-core": "^1.3.0-stellar",
65
65
  "@stellar/stellar-sdk": "^15.0.1"
66
66
  },
67
+ "optionalDependencies": {
68
+ "@ctx.com/stellar-ows-core-linux-x64-gnu": "1.3.0-stellar",
69
+ "@ctx.com/stellar-ows-core-linux-arm64-gnu": "1.3.0-stellar",
70
+ "@ctx.com/stellar-ows-core-darwin-x64": "1.3.0-stellar",
71
+ "@ctx.com/stellar-ows-core-darwin-arm64": "1.3.0-stellar"
72
+ },
67
73
  "devDependencies": {
68
74
  "@types/node": "^22.0.0",
69
75
  "@vitest/coverage-v8": "^4.1.3",