@ampersend_ai/ampersend-sdk 0.0.22 → 0.0.25

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 (102) hide show
  1. package/dist/ampersend/agent-client.d.ts +81 -0
  2. package/dist/ampersend/agent-client.d.ts.map +1 -0
  3. package/dist/ampersend/agent-client.js +104 -0
  4. package/dist/ampersend/agent-client.js.map +1 -0
  5. package/dist/ampersend/agent.d.ts +119 -0
  6. package/dist/ampersend/agent.d.ts.map +1 -0
  7. package/dist/ampersend/agent.js +99 -0
  8. package/dist/ampersend/agent.js.map +1 -0
  9. package/dist/ampersend/client.d.ts +32 -8
  10. package/dist/ampersend/client.d.ts.map +1 -1
  11. package/dist/ampersend/client.js +81 -3
  12. package/dist/ampersend/client.js.map +1 -1
  13. package/dist/ampersend/curated-agent.d.ts +3 -3
  14. package/dist/ampersend/curated-agent.d.ts.map +1 -1
  15. package/dist/ampersend/curated-agent.js +1 -1
  16. package/dist/ampersend/curated-agent.js.map +1 -1
  17. package/dist/ampersend/index.d.ts +2 -0
  18. package/dist/ampersend/index.d.ts.map +1 -1
  19. package/dist/ampersend/index.js +4 -0
  20. package/dist/ampersend/index.js.map +1 -1
  21. package/dist/ampersend/marketplace.d.ts +20 -14
  22. package/dist/ampersend/marketplace.d.ts.map +1 -1
  23. package/dist/ampersend/marketplace.js +23 -49
  24. package/dist/ampersend/marketplace.js.map +1 -1
  25. package/dist/ampersend/treasurer.d.ts +4 -0
  26. package/dist/ampersend/treasurer.d.ts.map +1 -1
  27. package/dist/ampersend/treasurer.js +2 -2
  28. package/dist/ampersend/treasurer.js.map +1 -1
  29. package/dist/ampersend/types.d.ts +35 -6
  30. package/dist/ampersend/types.d.ts.map +1 -1
  31. package/dist/ampersend/types.js +17 -1
  32. package/dist/ampersend/types.js.map +1 -1
  33. package/dist/cli/ampersend.js +45 -2
  34. package/dist/cli/ampersend.js.map +1 -1
  35. package/dist/cli/commands/agent.d.ts +22 -0
  36. package/dist/cli/commands/agent.d.ts.map +1 -0
  37. package/dist/cli/commands/agent.js +144 -0
  38. package/dist/cli/commands/agent.js.map +1 -0
  39. package/dist/cli/commands/card.d.ts +125 -0
  40. package/dist/cli/commands/card.d.ts.map +1 -0
  41. package/dist/cli/commands/card.js +399 -0
  42. package/dist/cli/commands/card.js.map +1 -0
  43. package/dist/cli/commands/fetch.d.ts +76 -2
  44. package/dist/cli/commands/fetch.d.ts.map +1 -1
  45. package/dist/cli/commands/fetch.js +208 -128
  46. package/dist/cli/commands/fetch.js.map +1 -1
  47. package/dist/cli/commands/fund.d.ts +3 -0
  48. package/dist/cli/commands/fund.d.ts.map +1 -0
  49. package/dist/cli/commands/fund.js +22 -0
  50. package/dist/cli/commands/fund.js.map +1 -0
  51. package/dist/cli/commands/marketplace.d.ts +3 -0
  52. package/dist/cli/commands/marketplace.d.ts.map +1 -1
  53. package/dist/cli/commands/marketplace.js +23 -4
  54. package/dist/cli/commands/marketplace.js.map +1 -1
  55. package/dist/cli/commands/version.d.ts +3 -0
  56. package/dist/cli/commands/version.d.ts.map +1 -0
  57. package/dist/cli/commands/version.js +12 -0
  58. package/dist/cli/commands/version.js.map +1 -0
  59. package/dist/cli/config.d.ts +58 -0
  60. package/dist/cli/config.d.ts.map +1 -1
  61. package/dist/cli/config.js +105 -1
  62. package/dist/cli/config.js.map +1 -1
  63. package/dist/index.d.ts +2 -0
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +1 -0
  66. package/dist/index.js.map +1 -1
  67. package/dist/mcp/proxy/cli.js +1 -0
  68. package/dist/mcp/proxy/cli.js.map +1 -1
  69. package/dist/mcp/proxy/factory.d.ts +2 -0
  70. package/dist/mcp/proxy/factory.d.ts.map +1 -1
  71. package/dist/mcp/proxy/factory.js +10 -1
  72. package/dist/mcp/proxy/factory.js.map +1 -1
  73. package/dist/mcp/proxy/server/init.js +1 -1
  74. package/dist/mcp/proxy/server/init.js.map +1 -1
  75. package/dist/mcp/proxy/server/server.d.ts +3 -1
  76. package/dist/mcp/proxy/server/server.d.ts.map +1 -1
  77. package/dist/mcp/proxy/server/server.js +5 -2
  78. package/dist/mcp/proxy/server/server.js.map +1 -1
  79. package/dist/mcp/proxy/types.d.ts +7 -0
  80. package/dist/mcp/proxy/types.d.ts.map +1 -1
  81. package/dist/mcp/proxy/types.js.map +1 -1
  82. package/dist/version.d.ts +3 -1
  83. package/dist/version.d.ts.map +1 -1
  84. package/dist/version.js +3 -1
  85. package/dist/version.js.map +1 -1
  86. package/dist/x402/http/factory.d.ts +2 -0
  87. package/dist/x402/http/factory.d.ts.map +1 -1
  88. package/dist/x402/http/factory.js +1 -0
  89. package/dist/x402/http/factory.js.map +1 -1
  90. package/dist/x402/index.d.ts +2 -0
  91. package/dist/x402/index.d.ts.map +1 -1
  92. package/dist/x402/index.js +2 -0
  93. package/dist/x402/index.js.map +1 -1
  94. package/dist/x402/siwx.d.ts +55 -0
  95. package/dist/x402/siwx.d.ts.map +1 -0
  96. package/dist/x402/siwx.js +122 -0
  97. package/dist/x402/siwx.js.map +1 -0
  98. package/dist/x402/wallets/smart-account/cosigned.d.ts +9 -2
  99. package/dist/x402/wallets/smart-account/cosigned.d.ts.map +1 -1
  100. package/dist/x402/wallets/smart-account/cosigned.js +13 -4
  101. package/dist/x402/wallets/smart-account/cosigned.js.map +1 -1
  102. package/package.json +3 -2
@@ -1,20 +1,63 @@
1
1
  #!/usr/bin/env node
2
- import { Command } from "commander";
2
+ import { Command, CommanderError } from "commander";
3
3
  import { VERSION } from "../version.js";
4
+ import { registerAgentCommand } from "./commands/agent.js";
5
+ import { registerCardCommand } from "./commands/card.js";
4
6
  import { registerConfigCommand } from "./commands/config.js";
5
7
  import { registerFetchCommand } from "./commands/fetch.js";
8
+ import { registerFundCommand } from "./commands/fund.js";
6
9
  import { registerMarketplaceCommand } from "./commands/marketplace.js";
7
10
  import { registerSetupCommand } from "./commands/setup.js";
11
+ import { registerVersionCommand } from "./commands/version.js";
12
+ import { err } from "./envelope.js";
13
+ // Map Commander's internal error codes to envelope codes. Anything not listed
14
+ // here falls back to "CLI_USAGE_ERROR" so we never emit a raw stderr line that
15
+ // breaks the documented JSON-only output contract.
16
+ const COMMANDER_ERROR_CODES = {
17
+ "commander.unknownOption": "UNKNOWN_OPTION",
18
+ "commander.unknownCommand": "UNKNOWN_COMMAND",
19
+ "commander.missingArgument": "MISSING_ARGUMENT",
20
+ "commander.missingMandatoryOptionValue": "MISSING_OPTION",
21
+ "commander.optionMissingArgument": "MISSING_OPTION_ARGUMENT",
22
+ "commander.invalidArgument": "INVALID_ARGUMENT",
23
+ "commander.conflictingOption": "CONFLICTING_OPTION",
24
+ "commander.excessArguments": "EXCESS_ARGUMENTS",
25
+ };
8
26
  async function main() {
9
27
  const program = new Command().name("ampersend").description("Command-line interface for ampersend").version(VERSION);
28
+ // Without exitOverride, Commander prints "error: unknown option '--foo'" to
29
+ // stderr and exits — bypassing our JSON envelope. Catch its CommanderError
30
+ // and re-throw so main()'s catch can format it. Help and version are not
31
+ // failures; let them exit cleanly. configureOutput silences Commander's
32
+ // own stderr line so the envelope is the only thing on the wire.
33
+ program.exitOverride((commanderErr) => {
34
+ if (commanderErr.code === "commander.helpDisplayed" || commanderErr.code === "commander.version") {
35
+ process.exit(commanderErr.exitCode);
36
+ }
37
+ throw commanderErr;
38
+ });
39
+ program.configureOutput({
40
+ outputError: () => { },
41
+ });
10
42
  registerConfigCommand(program);
11
43
  registerSetupCommand(program);
12
44
  registerFetchCommand(program);
45
+ registerAgentCommand(program);
46
+ registerCardCommand(program);
47
+ registerFundCommand(program);
13
48
  registerMarketplaceCommand(program);
49
+ registerVersionCommand(program);
14
50
  await program.parseAsync();
15
51
  }
16
52
  main().catch((error) => {
17
- console.error(`Fatal: ${error instanceof Error ? error.message : String(error)}`);
53
+ if (error instanceof CommanderError) {
54
+ const code = COMMANDER_ERROR_CODES[error.code] ?? "CLI_USAGE_ERROR";
55
+ const message = error.message.replace(/^error:\s*/, "");
56
+ console.log(JSON.stringify(err(code, message), null, 2));
57
+ process.exit(error.exitCode || 1);
58
+ }
59
+ const message = error instanceof Error ? error.message : String(error);
60
+ console.log(JSON.stringify(err("CLI_FATAL", message), null, 2));
18
61
  process.exit(1);
19
62
  });
20
63
  //# sourceMappingURL=ampersend.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ampersend.js","sourceRoot":"","sources":["../../src/cli/ampersend.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAE1D,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAEpH,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC9B,oBAAoB,CAAC,OAAO,CAAC,CAAA;IAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAA;IAC7B,0BAA0B,CAAC,OAAO,CAAC,CAAA;IAEnC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAA;AAC5B,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"ampersend.js","sourceRoot":"","sources":["../../src/cli/ampersend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { Command } from "commander";
2
+ import { AgentReadClient } from "../../ampersend/index.ts";
3
+ interface BaseOptions {
4
+ raw: boolean;
5
+ }
6
+ /** Build an `AgentReadClient` from local config, or print an envelope-style error and exit. */
7
+ export declare function buildClient(): AgentReadClient;
8
+ /**
9
+ * Wrap a read call so success/failure both print the standard envelope.
10
+ * `--raw` mode prints the inner payload directly for scripting; the
11
+ * default JSON envelope is what the skill expects.
12
+ *
13
+ * BigInt is serialised as a decimal string — JSON has no native bigint
14
+ * and the DTOs decode wire strings into bigint values, so we have to
15
+ * project them back out when printing.
16
+ */
17
+ export declare function emit(label: string, options: BaseOptions, run: () => Promise<unknown>): Promise<void>;
18
+ export declare function parsePreset(value: string | undefined): "1d" | "30d" | "all" | undefined;
19
+ export declare function parseIntFlag(name: string, value: string | undefined, max?: number): number | undefined;
20
+ export declare function registerAgentCommand(program: Command): void;
21
+ export {};
22
+ //# sourceMappingURL=agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAExC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAI1D,UAAU,WAAW;IACnB,GAAG,EAAE,OAAO,CAAA;CACb;AAID,+FAA+F;AAC/F,wBAAgB,WAAW,IAAI,eAAe,CAY7C;AAED;;;;;;;;GAQG;AACH,wBAAsB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAc1G;AAMD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CASvF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CActG;AAID,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwE3D"}
@@ -0,0 +1,144 @@
1
+ import { AgentReadClient } from "../../ampersend/index.js";
2
+ import { DEFAULT_API_URL, loadCredentials } from "../config.js";
3
+ import { err, ok } from "../envelope.js";
4
+ const VALID_PRESETS = new Set(["1d", "30d", "all"]);
5
+ /** Build an `AgentReadClient` from local config, or print an envelope-style error and exit. */
6
+ export function buildClient() {
7
+ const result = loadCredentials();
8
+ if (!result.ok) {
9
+ console.log(JSON.stringify(result.error, null, 2));
10
+ process.exit(1);
11
+ }
12
+ const { agentAccount, agentKey, apiUrl } = result.credentials;
13
+ return new AgentReadClient({
14
+ baseUrl: apiUrl ?? DEFAULT_API_URL,
15
+ agentAddress: agentAccount,
16
+ sessionKeyPrivateKey: agentKey,
17
+ });
18
+ }
19
+ /**
20
+ * Wrap a read call so success/failure both print the standard envelope.
21
+ * `--raw` mode prints the inner payload directly for scripting; the
22
+ * default JSON envelope is what the skill expects.
23
+ *
24
+ * BigInt is serialised as a decimal string — JSON has no native bigint
25
+ * and the DTOs decode wire strings into bigint values, so we have to
26
+ * project them back out when printing.
27
+ */
28
+ export async function emit(label, options, run) {
29
+ try {
30
+ const data = await run();
31
+ const payload = options.raw ? data : ok(data);
32
+ console.log(JSON.stringify(payload, bigintReplacer, 2));
33
+ }
34
+ catch (error) {
35
+ const message = error instanceof Error ? error.message : String(error);
36
+ if (options.raw) {
37
+ console.error(`Error: ${message}`);
38
+ }
39
+ else {
40
+ console.log(JSON.stringify(err("AGENT_READ_ERROR", `${label}: ${message}`), null, 2));
41
+ }
42
+ process.exit(1);
43
+ }
44
+ }
45
+ function bigintReplacer(_key, value) {
46
+ return typeof value === "bigint" ? value.toString() : value;
47
+ }
48
+ export function parsePreset(value) {
49
+ if (value === undefined)
50
+ return undefined;
51
+ if (!VALID_PRESETS.has(value)) {
52
+ console.log(JSON.stringify(err("INVALID_PRESET", `Invalid --preset: ${value}. Must be one of: 1d, 30d, all`), null, 2));
53
+ process.exit(1);
54
+ }
55
+ return value;
56
+ }
57
+ export function parseIntFlag(name, value, max) {
58
+ if (value === undefined)
59
+ return undefined;
60
+ // Strict regex before parseInt: parseInt("1.5") === 1 silently drops the
61
+ // fraction, and parseInt(" 5 ") accepts whitespace.
62
+ if (!/^[1-9]\d*$/.test(value)) {
63
+ console.log(JSON.stringify(err("INVALID_FLAG", `--${name} must be a positive integer`), null, 2));
64
+ process.exit(1);
65
+ }
66
+ const n = Number.parseInt(value, 10);
67
+ if (max !== undefined && n > max) {
68
+ console.log(JSON.stringify(err("INVALID_FLAG", `--${name} must be ≤ ${max}`), null, 2));
69
+ process.exit(1);
70
+ }
71
+ return n;
72
+ }
73
+ const PRESET_DESCRIPTION = "Timerange: 1d (today), 30d (last 30 days), or all";
74
+ export function registerAgentCommand(program) {
75
+ const agent = program
76
+ .command("agent")
77
+ .description("Read the calling agent's own state (server-authoritative)")
78
+ .option("--raw", "Print only the inner data, no JSON envelope", false)
79
+ .action(async (options) => {
80
+ await emit("getSelf", options, () => buildClient().getSelf());
81
+ });
82
+ agent
83
+ .command("spend-config")
84
+ .description("Show spending policy (per-tx, daily, monthly limits, auto-topup)")
85
+ .option("--raw", "Print only the inner data, no JSON envelope", false)
86
+ .action(async (options) => {
87
+ await emit("spend-config", options, () => buildClient().getSpendConfig());
88
+ });
89
+ agent
90
+ .command("auto-collect-config")
91
+ .description("Show auto-collect (earnings sweep) configuration")
92
+ .option("--raw", "Print only the inner data, no JSON envelope", false)
93
+ .action(async (options) => {
94
+ await emit("auto-collect-config", options, () => buildClient().getAutoCollectConfig());
95
+ });
96
+ agent
97
+ .command("authorized-sellers")
98
+ .description("Show the seller allowlist this agent is permitted to pay")
99
+ .option("--raw", "Print only the inner data, no JSON envelope", false)
100
+ .action(async (options) => {
101
+ await emit("authorized-sellers", options, () => buildClient().getAuthorizedSellers());
102
+ });
103
+ agent
104
+ .command("payments")
105
+ .description("Show outgoing payments")
106
+ .option("--raw", "Print only the inner data, no JSON envelope", false)
107
+ .option("--preset <preset>", PRESET_DESCRIPTION)
108
+ .action(async (options) => {
109
+ await emit("payments", options, () => {
110
+ const preset = parsePreset(options.preset);
111
+ return buildClient().getPayments(preset ? { preset } : {});
112
+ });
113
+ });
114
+ agent
115
+ .command("activity")
116
+ .description("Show unified spend + earn activity, paginated")
117
+ .option("--raw", "Print only the inner data, no JSON envelope", false)
118
+ .option("--preset <preset>", PRESET_DESCRIPTION)
119
+ .option("--limit <n>", "Items per page (max 200, default 20)")
120
+ .option("--page <n>", "Page number (1-indexed, default 1)")
121
+ .action(async (options) => {
122
+ await emit("activity", options, () => {
123
+ const params = {};
124
+ const preset = parsePreset(options.preset);
125
+ if (preset !== undefined)
126
+ params.preset = preset;
127
+ const limit = parseIntFlag("limit", options.limit, 200);
128
+ if (limit !== undefined)
129
+ params.limit = limit;
130
+ const page = parseIntFlag("page", options.page);
131
+ if (page !== undefined)
132
+ params.page = page;
133
+ return buildClient().getActivity(params);
134
+ });
135
+ });
136
+ agent
137
+ .command("owner")
138
+ .description("Show the owner's narrow projection ({ user_id, wallet_address })")
139
+ .option("--raw", "Print only the inner data, no JSON envelope", false)
140
+ .action(async (options) => {
141
+ await emit("owner", options, () => buildClient().getOwner());
142
+ });
143
+ }
144
+ //# sourceMappingURL=agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../src/cli/commands/agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import type { Command } from "commander";
2
+ import { Schema } from "effect";
3
+ import { type JsonEnvelope } from "../envelope.ts";
4
+ /**
5
+ * One card as returned by `/get-card-data`. Secrets live under `card_details`
6
+ * and only once the card is ready; expiry is split into `exp_month`/`exp_year`.
7
+ * `available_balance` (vs `usd_amount`) tells you how much has been spent.
8
+ * Tolerant: we decode only the fields we surface and let Effect strip the rest.
9
+ */
10
+ declare const LasoCardData: Schema.Struct<{
11
+ card_id: typeof Schema.String;
12
+ status: typeof Schema.String;
13
+ usd_amount: Schema.optional<typeof Schema.Number>;
14
+ timestamp: Schema.optional<typeof Schema.Number>;
15
+ card_type: Schema.optional<typeof Schema.String>;
16
+ card_details: Schema.optional<Schema.Struct<{
17
+ card_number: Schema.optional<typeof Schema.String>;
18
+ exp_month: Schema.optional<typeof Schema.String>;
19
+ exp_year: Schema.optional<typeof Schema.String>;
20
+ cvv: Schema.optional<typeof Schema.String>;
21
+ available_balance: Schema.optional<typeof Schema.Number>;
22
+ }>>;
23
+ transactions: Schema.optional<Schema.Array$<Schema.Struct<{
24
+ amount: Schema.optional<Schema.Union<[typeof Schema.Number, typeof Schema.String]>>;
25
+ date: Schema.optional<Schema.Union<[typeof Schema.String, typeof Schema.Number]>>;
26
+ description: Schema.optional<typeof Schema.String>;
27
+ is_credit: Schema.optional<typeof Schema.Boolean>;
28
+ }>>>;
29
+ }>;
30
+ /** A decoded Laso card record (raw Laso field names). */
31
+ type LasoCard = typeof LasoCardData.Type;
32
+ interface IssueOptions {
33
+ amount?: string;
34
+ raw: boolean;
35
+ }
36
+ interface DetailsOptions {
37
+ pay: boolean;
38
+ reveal: boolean;
39
+ raw: boolean;
40
+ }
41
+ interface ListOptions {
42
+ pay: boolean;
43
+ raw: boolean;
44
+ }
45
+ /**
46
+ * Validate and normalize the `--amount` flag. Returns the trimmed USD string
47
+ * (Laso wants it verbatim in the query) or an error envelope. Rejects
48
+ * non-numeric, non-positive, and out-of-range values up front so we never
49
+ * spend on a request Laso would bounce.
50
+ */
51
+ declare function validateAmount(raw: string | undefined): JsonEnvelope<string>;
52
+ /** A transaction as surfaced to the agent (load, spends, refunds). Not masked. */
53
+ interface TransactionView {
54
+ amount?: number | string;
55
+ date?: string | number;
56
+ description?: string;
57
+ is_credit?: boolean;
58
+ }
59
+ /**
60
+ * A card as surfaced to the agent. A stable shape independent of Laso's wire
61
+ * format: `pan`/`cvv`/`expiry` regardless of how Laso nests them. Secrets are
62
+ * present only on a ready card, and masked unless `--reveal`.
63
+ *
64
+ * `amount` is the original load; `balance` is what's spendable now. Usage is
65
+ * read from the pair: unused when `balance === amount`, spent = `amount - balance`.
66
+ */
67
+ interface CardView {
68
+ card_id: string;
69
+ status: string;
70
+ amount?: number;
71
+ balance?: number;
72
+ ordered_at?: string;
73
+ card_type?: string;
74
+ pan?: string;
75
+ cvv?: string;
76
+ expiry?: string;
77
+ transactions?: ReadonlyArray<TransactionView>;
78
+ }
79
+ /**
80
+ * Normalize a decoded Laso card into the agent-facing view. Flattens the
81
+ * `card_details` nesting, composes `expiry` from `exp_month`/`exp_year`
82
+ * (e.g. "09" + "26" → "09/26"), surfaces `balance` (available_balance) next to
83
+ * `amount`, and converts the order `timestamp` (Unix ms) to an ISO string.
84
+ *
85
+ * `includeTransactions` is false for `list` (keep it compact) and true for
86
+ * `details`. Balance/secrets/transactions appear only on ready cards.
87
+ */
88
+ declare function toCardView(card: LasoCard, includeTransactions?: boolean): CardView;
89
+ /**
90
+ * Mask a PAN to its last four digits in groups of four: e.g. `4242424242424242`
91
+ * → `•••• •••• •••• 4242`. Tolerates spaces/dashes in the input and short
92
+ * inputs (fewer than four digits are shown as-is behind a single dot group).
93
+ */
94
+ declare function maskPan(pan: string): string;
95
+ /**
96
+ * Apply masking to an agent-facing card view unless `reveal` is set. Only the
97
+ * two secrets — PAN and CVV — are masked; everything else (including `expiry`,
98
+ * which isn't a secret on its own) passes through. Returns a copy.
99
+ */
100
+ declare function maskCard(card: CardView, reveal: boolean): CardView;
101
+ /** Compute a token's expiry ISO string from `/auth`'s `expires_in` (seconds). */
102
+ declare function tokenExpiry(expiresInSeconds: number | undefined): string;
103
+ /**
104
+ * `card issue --amount <usd>`: order a card. This is the stated-amount spend,
105
+ * so there is no --pay flag. Returns `{ card_id, status, payment }`; the agent
106
+ * polls `details <id>` until `status: "ready"`.
107
+ */
108
+ declare function executeIssue(options: IssueOptions): Promise<void>;
109
+ /**
110
+ * `card details <id> [--pay] [--reveal]`: fetch one card's status and (once
111
+ * ready) its data. A still-provisioning card returns `ok:true` with
112
+ * `status: "pending"` and no card data — not an error.
113
+ */
114
+ declare function executeDetails(id: string, options: DetailsOptions): Promise<void>;
115
+ /**
116
+ * `card list [--pay]`: all issued cards (always masked). Same token rules as
117
+ * `details`.
118
+ */
119
+ declare function executeList(options: ListOptions): Promise<void>;
120
+ /**
121
+ * Register the `card` subcommand on a Commander program.
122
+ */
123
+ export declare function registerCardCommand(program: Command): void;
124
+ export { executeDetails, executeIssue, executeList, maskCard, maskPan, toCardView, tokenExpiry, validateAmount };
125
+ //# sourceMappingURL=card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/card.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAG/B,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAwE3D;;;;;GAKG;AACH,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;EAgBhB,CAAA;AAYF,yDAAyD;AACzD,KAAK,QAAQ,GAAG,OAAO,YAAY,CAAC,IAAI,CAAA;AAKxC,UAAU,YAAY;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,EAAE,OAAO,CAAA;CACb;AAED,UAAU,cAAc;IACtB,GAAG,EAAE,OAAO,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,GAAG,EAAE,OAAO,CAAA;CACb;AAED,UAAU,WAAW;IACnB,GAAG,EAAE,OAAO,CAAA;IACZ,GAAG,EAAE,OAAO,CAAA;CACb;AAED;;;;;GAKG;AACH,iBAAS,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC,CAerE;AAED,kFAAkF;AAClF,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;;;;;GAOG;AACH,UAAU,QAAQ;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,YAAY,CAAC,EAAE,aAAa,CAAC,eAAe,CAAC,CAAA;CAC9C;AAED;;;;;;;;GAQG;AACH,iBAAS,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,mBAAmB,UAAQ,GAAG,QAAQ,CAuBzE;AAED;;;;GAIG;AACH,iBAAS,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIpC;AAED;;;;GAIG;AACH,iBAAS,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,CAO3D;AAED,iFAAiF;AACjF,iBAAS,WAAW,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGjE;AAwFD;;;;GAIG;AACH,iBAAe,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyChE;AAED;;;;GAIG;AACH,iBAAe,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBhF;AAED;;;GAGG;AACH,iBAAe,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB9D;AAgBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+B1D;AAED,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,CAAA"}