@certen.io/cli 0.5.0 → 0.7.1

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 (87) hide show
  1. package/CHANGELOG.md +431 -0
  2. package/README.md +232 -160
  3. package/dist/chains.d.ts +67 -0
  4. package/dist/chains.js +242 -0
  5. package/dist/chains.js.map +1 -0
  6. package/dist/commands/admin.js +49 -4
  7. package/dist/commands/admin.js.map +1 -1
  8. package/dist/commands/auth.js +145 -12
  9. package/dist/commands/auth.js.map +1 -1
  10. package/dist/commands/billing.js +648 -40
  11. package/dist/commands/billing.js.map +1 -1
  12. package/dist/commands/call.d.ts +2 -0
  13. package/dist/commands/call.js +168 -0
  14. package/dist/commands/call.js.map +1 -0
  15. package/dist/commands/chains.d.ts +2 -0
  16. package/dist/commands/chains.js +123 -0
  17. package/dist/commands/chains.js.map +1 -0
  18. package/dist/commands/doctor.d.ts +2 -0
  19. package/dist/commands/doctor.js +171 -0
  20. package/dist/commands/doctor.js.map +1 -0
  21. package/dist/commands/errors-catalogue.d.ts +2 -0
  22. package/dist/commands/errors-catalogue.js +83 -0
  23. package/dist/commands/errors-catalogue.js.map +1 -0
  24. package/dist/commands/identity.js +269 -19
  25. package/dist/commands/identity.js.map +1 -1
  26. package/dist/commands/init.d.ts +2 -0
  27. package/dist/commands/init.js +307 -0
  28. package/dist/commands/init.js.map +1 -0
  29. package/dist/commands/keys.js +2 -0
  30. package/dist/commands/keys.js.map +1 -1
  31. package/dist/commands/oauth-clients.d.ts +2 -0
  32. package/dist/commands/oauth-clients.js +131 -0
  33. package/dist/commands/oauth-clients.js.map +1 -0
  34. package/dist/commands/orgs.d.ts +2 -0
  35. package/dist/commands/orgs.js +117 -0
  36. package/dist/commands/orgs.js.map +1 -0
  37. package/dist/commands/pending.d.ts +19 -0
  38. package/dist/commands/pending.js +117 -15
  39. package/dist/commands/pending.js.map +1 -1
  40. package/dist/commands/portfolio.js +34 -1
  41. package/dist/commands/portfolio.js.map +1 -1
  42. package/dist/commands/proof.d.ts +2 -0
  43. package/dist/commands/proof.js +400 -0
  44. package/dist/commands/proof.js.map +1 -0
  45. package/dist/commands/signup.d.ts +14 -0
  46. package/dist/commands/signup.js +271 -0
  47. package/dist/commands/signup.js.map +1 -0
  48. package/dist/commands/transaction.js +139 -21
  49. package/dist/commands/transaction.js.map +1 -1
  50. package/dist/commands/webhooks.d.ts +2 -0
  51. package/dist/commands/webhooks.js +200 -0
  52. package/dist/commands/webhooks.js.map +1 -0
  53. package/dist/commands/whoami.d.ts +16 -0
  54. package/dist/commands/whoami.js +98 -0
  55. package/dist/commands/whoami.js.map +1 -0
  56. package/dist/config.d.ts +56 -0
  57. package/dist/config.js +51 -0
  58. package/dist/config.js.map +1 -1
  59. package/dist/errors.d.ts +14 -1
  60. package/dist/errors.js +15 -1
  61. package/dist/errors.js.map +1 -1
  62. package/dist/funding-guard.d.ts +40 -0
  63. package/dist/funding-guard.js +120 -0
  64. package/dist/funding-guard.js.map +1 -0
  65. package/dist/help-root.d.ts +2 -0
  66. package/dist/help-root.js +94 -0
  67. package/dist/help-root.js.map +1 -0
  68. package/dist/index.js +27 -0
  69. package/dist/index.js.map +1 -1
  70. package/dist/output.d.ts +23 -0
  71. package/dist/output.js +46 -0
  72. package/dist/output.js.map +1 -1
  73. package/dist/passphrase.d.ts +18 -0
  74. package/dist/passphrase.js +35 -3
  75. package/dist/passphrase.js.map +1 -1
  76. package/dist/payment-uri.d.ts +76 -0
  77. package/dist/payment-uri.js +135 -0
  78. package/dist/payment-uri.js.map +1 -0
  79. package/dist/signer.js +6 -3
  80. package/dist/signer.js.map +1 -1
  81. package/dist/solidity-args.d.ts +31 -0
  82. package/dist/solidity-args.js +111 -0
  83. package/dist/solidity-args.js.map +1 -0
  84. package/dist/wait.d.ts +79 -0
  85. package/dist/wait.js +168 -0
  86. package/dist/wait.js.map +1 -0
  87. package/package.json +5 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proof.js","sourceRoot":"","sources":["../../src/commands/proof.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { Command } from 'commander';
2
+ /**
3
+ * The device flow, exported so `certen init` can run it as its credential step rather than
4
+ * telling the user to go and run another command first. One flow, two entry points.
5
+ */
6
+ export declare function runDeviceFlow(opts: {
7
+ browser: boolean;
8
+ keyring: boolean;
9
+ timeoutMs?: number;
10
+ }): Promise<{
11
+ prefix: string;
12
+ orgId?: string;
13
+ }>;
14
+ export declare function registerSignupCommands(program: Command): void;
@@ -0,0 +1,271 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { hostname, userInfo } from 'node:os';
3
+ import { CertenClient, CertenError, redeemRegistrationToken, selfSignup } from '@certen.io/sdk';
4
+ import { resolveSigner } from '../signer.js';
5
+ import { getApiUrl, getPortalUrl, setApiKey, readConfig } from '../config.js';
6
+ import { printOutput, hint, human, isJsonMode } from '../output.js';
7
+ import { CliError, UsageError, EXIT } from '../errors.js';
8
+ /**
9
+ * `certen signup` / `certen login` — obtain an API key without copying a secret.
10
+ *
11
+ * This closes the last step of onboarding that required leaving the terminal. Before it, the
12
+ * first credential could only be minted in a browser and carried back by hand: sign in, click
13
+ * create, select the key, copy it, paste it into `certen auth login`. Four steps in another
14
+ * application, and a long-lived secret through the clipboard and usually into shell history.
15
+ *
16
+ * This is the OAuth 2.0 device authorization grant (RFC 8628). The CLI asks the gateway for a
17
+ * code, the human approves it in a portal session they already trust, and the CLI collects the
18
+ * key over its own channel. **The key is never displayed and never pasted.**
19
+ *
20
+ * Approval and denial are not driven from here. They need a Firebase portal session, and the
21
+ * gateway refuses an approval carrying `X-API-Key` — so a machine key cannot escalate itself into
22
+ * minting more keys, and this command must not imply that it could.
23
+ */
24
+ const sleep = (ms) => new Promise((r) => { setTimeout(r, ms); });
25
+ /** A name the approver will recognise on the portal screen. */
26
+ function deviceName() {
27
+ try {
28
+ return `certen-cli@${userInfo().username}-${hostname()}`.slice(0, 120);
29
+ }
30
+ catch {
31
+ return 'certen-cli';
32
+ }
33
+ }
34
+ /**
35
+ * Translate an SDK error into a CLI failure that names the cause.
36
+ *
37
+ * The two statuses worth distinguishing are the ones a user could otherwise misdiagnose: a 404
38
+ * means this gateway predates the feature, not that the code was mistyped, and a 403 means
39
+ * self-service is switched off rather than that anything was refused.
40
+ */
41
+ function translate(err, url) {
42
+ if (err instanceof CertenError) {
43
+ if (err.status === 0) {
44
+ // Nothing was submitted, so exit 3 and a retry is safe.
45
+ throw new CliError(`Could not reach ${url}: ${err.message}`, 'NETWORK_ERROR', EXIT.UNREACHABLE, true);
46
+ }
47
+ if (err.status === 403) {
48
+ throw new CliError('This gateway does not have self-service onboarding enabled, so it cannot authorize a '
49
+ + `device. Mint a key in the portal instead: ${getPortalUrl()}`, 'SELF_SERVICE_DISABLED', EXIT.FAILED);
50
+ }
51
+ if (err.status === 404) {
52
+ throw new CliError('This gateway does not support device authorization. It is probably running a build from '
53
+ + `before the feature shipped. Mint a key at ${getPortalUrl()}`, 'DEVICE_FLOW_UNSUPPORTED', EXIT.FAILED);
54
+ }
55
+ throw new CliError(`${url} returned ${err.status}: ${err.message}`, 'DEVICE_FLOW_FAILED', EXIT.FAILED, err.isRetryable);
56
+ }
57
+ throw err;
58
+ }
59
+ /** Best effort. A browser that will not open is an inconvenience, never a failure. */
60
+ function openBrowser(url) {
61
+ const command = process.platform === 'win32' ? 'cmd'
62
+ : process.platform === 'darwin' ? 'open' : 'xdg-open';
63
+ const args = process.platform === 'win32' ? ['/c', 'start', '', url] : [url];
64
+ try {
65
+ spawn(command, args, { detached: true, stdio: 'ignore' }).unref();
66
+ }
67
+ catch {
68
+ // Ignored: the URL is printed either way, and it is the printed one people actually use.
69
+ }
70
+ }
71
+ /**
72
+ * The device flow, exported so `certen init` can run it as its credential step rather than
73
+ * telling the user to go and run another command first. One flow, two entry points.
74
+ */
75
+ export async function runDeviceFlow(opts) {
76
+ const apiUrl = getApiUrl().replace(/\/+$/, '');
77
+ // These two calls are public; the key field is required by the constructor and unused by them.
78
+ const client = new CertenClient({ apiKey: 'device-flow', baseUrl: apiUrl });
79
+ const start = await client.device
80
+ .start({ deviceName: deviceName() })
81
+ .catch((err) => translate(err, `${apiUrl}/v1/portal/device`));
82
+ // RFC 8628 defines `verification_uri_complete` precisely so the code never has to be typed, and
83
+ // the gateway sends one. It was being handed to the browser and withheld from the terminal — so
84
+ // anyone the browser could not serve, which is every SSH session, container, WSL shell and CI
85
+ // job, got the bare URL and a code to retype. Those are the users with the most friction and the
86
+ // least patience for it, and `openBrowser` says as much three lines up: "it is the printed one
87
+ // people actually use."
88
+ const approvalUrl = start.verification_uri_complete ?? start.verification_uri;
89
+ const carriesCode = Boolean(start.verification_uri_complete);
90
+ if (!isJsonMode()) {
91
+ human('');
92
+ human(` Your code: ${start.user_code}`);
93
+ human('');
94
+ if (carriesCode) {
95
+ // The code is still shown above: it is what appears on the approval screen, and checking that
96
+ // the two match is how someone confirms they are approving THIS terminal and not another.
97
+ human(' Approve it here — the link carries the code:');
98
+ human(` ${approvalUrl}`);
99
+ }
100
+ else {
101
+ human(` Open ${start.verification_uri} and enter it.`);
102
+ }
103
+ human('');
104
+ if (opts.browser)
105
+ human(' Opening your browser. If nothing happens, use the link above.');
106
+ human(' Nothing is granted until you approve it there. Ctrl-C is safe.');
107
+ human('');
108
+ }
109
+ if (opts.browser)
110
+ openBrowser(approvalUrl);
111
+ const intervalMs = Math.max(1, start.interval || 5) * 1000;
112
+ const deadline = Date.now() + (opts.timeoutMs ?? (start.expires_in || 600) * 1000);
113
+ let announced = false;
114
+ for (;;) {
115
+ if (Date.now() >= deadline) {
116
+ throw new CliError(`The code ${start.user_code} expired before it was approved. Nothing was created. `
117
+ + 'Run the command again for a fresh one.', 'DEVICE_CODE_EXPIRED', EXIT.FAILED);
118
+ }
119
+ await sleep(intervalMs);
120
+ const poll = await client.device
121
+ .poll(start.device_code)
122
+ .catch((err) => translate(err, `${apiUrl}/v1/portal/device`));
123
+ if (poll.status === 'pending') {
124
+ if (!announced && !isJsonMode()) {
125
+ human(' Waiting for approval...');
126
+ announced = true;
127
+ }
128
+ continue;
129
+ }
130
+ if (poll.status === 'denied') {
131
+ throw new CliError('That request was denied in the portal. No key was created.', 'DEVICE_CODE_DENIED', EXIT.FAILED);
132
+ }
133
+ if (poll.status === 'expired') {
134
+ throw new CliError(`The code ${start.user_code} expired. Nothing was created. Run the command again.`, 'DEVICE_CODE_EXPIRED', EXIT.FAILED);
135
+ }
136
+ if (poll.status === 'claimed') {
137
+ // Someone else collected the key with this code. Alarming rather than reassuring, and worth
138
+ // saying so plainly.
139
+ throw new CliError('This code has already been used to collect a key — but not by this command. '
140
+ + `If that was not you, revoke it now: ${getPortalUrl()}`, 'DEVICE_CODE_ALREADY_CLAIMED', EXIT.FAILED);
141
+ }
142
+ if (poll.status === 'approved' && poll.api_key) {
143
+ await setApiKey(poll.api_key, opts.keyring);
144
+ return { prefix: poll.key_prefix ?? poll.api_key.substring(0, 12), orgId: poll.org_id };
145
+ }
146
+ // Approved with no key is not a state the gateway should produce; treating it as success
147
+ // would store `undefined` as a credential.
148
+ throw new CliError('The gateway approved the device but returned no key.', 'DEVICE_FLOW_FAILED', EXIT.FAILED);
149
+ }
150
+ }
151
+ export function registerSignupCommands(program) {
152
+ const attach = (name, description) => {
153
+ program
154
+ .command(name)
155
+ .description(description)
156
+ .option('--with-key <name>', 'Sign up by proving you hold a local signing key — no browser, no waiting')
157
+ .option('--org-name <name>', 'Name for the organization (with --with-key)')
158
+ .option('--token <token>', 'Redeem a registration token instead of waiting for a human to approve a browser')
159
+ .option('--no-browser', 'Do not try to open a browser; just print the URL')
160
+ .option('--no-keyring', 'Store the key in ~/.certen/config.json instead of the OS keyring')
161
+ .option('--timeout <minutes>', 'How long to wait for approval')
162
+ .action(async (opts) => {
163
+ const existing = readConfig();
164
+ if (process.env.CERTEN_API_KEY) {
165
+ // The env var wins over stored config everywhere else, so a key obtained here would be
166
+ // written and then ignored — a confusing no-op rather than an error.
167
+ throw new UsageError('CERTEN_API_KEY is set, and it takes precedence over any key saved here. '
168
+ + 'Unset it first if you want to replace it.', 'API_KEY_ENV_SET');
169
+ }
170
+ // Self-service, with nobody in the loop at all — not a human at a browser, and not one at
171
+ // CERTEN handing out a token. CERTEN is non-custodial, so the anchor is a key the caller
172
+ // already holds and we never see: `certen keys` made it, the private half stays here, and
173
+ // the only thing that crosses the wire is a signature over a nonce.
174
+ if (opts.withKey) {
175
+ const signer = await resolveSigner(opts.withKey);
176
+ const redeemed = await selfSignup({
177
+ publicKey: signer.publicKey,
178
+ // The nonce arrives as hex and must be signed as BYTES. `signHash` does exactly that,
179
+ // which is why the key format lines up with no conversion here.
180
+ sign: (nonceHex) => signer.sign(nonceHex),
181
+ orgName: opts.orgName,
182
+ }, { baseUrl: getApiUrl() });
183
+ await setApiKey(redeemed.api_key, opts.keyring !== false && existing.storage === 'keyring');
184
+ printOutput({
185
+ org_id: redeemed.org.id,
186
+ org_name: redeemed.org.name,
187
+ plan: redeemed.org.plan,
188
+ key_prefix: redeemed.key_prefix,
189
+ permissions: redeemed.permissions,
190
+ signed_with: opts.withKey,
191
+ api_url: getApiUrl(),
192
+ });
193
+ if (!isJsonMode()) {
194
+ human('');
195
+ human(` Organization ${redeemed.org.name} created, and this machine is signed in.`);
196
+ human(` ${redeemed.org.id}`);
197
+ human('');
198
+ human(` Proved with your local key "${opts.withKey}". CERTEN never saw the private half,`);
199
+ human(' and that key is the only thing that could have created this organization.');
200
+ human('');
201
+ human(' The API key is stored here and was returned once.');
202
+ hint(`certen init --key ${opts.withKey} # identity, chains, and a check that it works`);
203
+ }
204
+ return;
205
+ }
206
+ // The unattended path. The device flow is correct for a person at a terminal and is a wall
207
+ // for everything else: it prints a code and waits, indefinitely, for somebody to open a
208
+ // browser. A registration token carries the same authority, granted in advance by a human
209
+ // who already decided this organization should exist — so CI, a platform provisioning its
210
+ // customers, and an agent starting up can all get their first credential with nobody
211
+ // present.
212
+ if (opts.token) {
213
+ const redeemed = await redeemRegistrationToken(opts.token, { baseUrl: getApiUrl() });
214
+ await setApiKey(redeemed.api_key, opts.keyring !== false && existing.storage === 'keyring');
215
+ printOutput({
216
+ org_id: redeemed.org.id,
217
+ org_name: redeemed.org.name,
218
+ plan: redeemed.org.plan,
219
+ key_prefix: redeemed.key_prefix,
220
+ permissions: redeemed.permissions,
221
+ api_url: getApiUrl(),
222
+ });
223
+ if (!isJsonMode()) {
224
+ human('');
225
+ human(` Organization ${redeemed.org.name} created, and this machine is signed in.`);
226
+ human(` ${redeemed.org.id}`);
227
+ human('');
228
+ // Said explicitly because the token is single-use: there is no second redemption to
229
+ // fall back on if the key is lost between here and the next command.
230
+ human(' The key is stored on this machine. It was returned once, and the token that');
231
+ human(' produced it is now spent.');
232
+ hint('certen init # signing key, identity, and a check that it all works');
233
+ }
234
+ return;
235
+ }
236
+ let timeoutMs;
237
+ if (opts.timeout !== undefined) {
238
+ const minutes = Number(opts.timeout);
239
+ if (!Number.isFinite(minutes) || minutes <= 0) {
240
+ throw new UsageError('--timeout must be a positive number of minutes', 'INVALID_TIMEOUT');
241
+ }
242
+ timeoutMs = minutes * 60_000;
243
+ }
244
+ const result = await runDeviceFlow({
245
+ browser: opts.browser !== false,
246
+ // Match however this machine already stores credentials, rather than silently moving
247
+ // them between the keyring and a file.
248
+ keyring: opts.keyring !== false && existing.storage === 'keyring',
249
+ timeoutMs,
250
+ });
251
+ printOutput({
252
+ key_prefix: `${result.prefix}...`,
253
+ org_id: result.orgId ?? null,
254
+ api_url: getApiUrl(),
255
+ storage: readConfig().storage ?? 'file',
256
+ });
257
+ if (isJsonMode())
258
+ return;
259
+ human('');
260
+ human(' Authorized. The key was written straight to this machine — it was never displayed.');
261
+ human('');
262
+ hint('Next: certen init');
263
+ });
264
+ };
265
+ // Two names for one flow. "Sign up" and "log in" are the same act to the gateway — a Firebase
266
+ // session either exists or gets created — and making the user pick correctly before they know
267
+ // which they are would be a decision with no consequence.
268
+ attach('login', 'Get an API key for this machine by approving it in the portal');
269
+ attach('signup', 'Create an account and get an API key for this machine (same as login)');
270
+ }
271
+ //# sourceMappingURL=signup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signup.js","sourceRoot":"","sources":["../../src/commands/signup.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,12 @@ import { Option } from 'commander';
2
2
  import { readFileSync } from 'node:fs';
3
3
  import { CertenClient } from '@certen.io/sdk';
4
4
  import { getApiKey, getApiUrl } from '../config.js';
5
- import { printOutput } from '../output.js';
5
+ import { printOutput, hint, human, isJsonMode } from '../output.js';
6
6
  import { resolveSigner } from '../signer.js';
7
+ import { assertChain } from '../chains.js';
8
+ import { CliError, UsageError, EXIT } from '../errors.js';
9
+ import { resolveWait, parseWaitBudget, waitForTransaction, TX_WAIT } from '../wait.js';
10
+ import { assertFundedForValue } from '../funding-guard.js';
7
11
  async function getClient() {
8
12
  return new CertenClient({ apiKey: await getApiKey(), baseUrl: getApiUrl() });
9
13
  }
@@ -11,10 +15,13 @@ async function getClient() {
11
15
  * Pull the hash to sign out of an intent response.
12
16
  *
13
17
  * The gateway returns snake_case on the wire (`signing_data.hash_to_sign`), which is what the
14
- * live OpenAPI spec documents and what `execute.ts` reads. The SDK's `TransactionResponse` type
15
- * declares camelCase `signingData.dataToSign` and `return data` performs no transformation, so
16
- * the declared type does not describe the value. Both spellings are accepted here rather than
17
- * betting on which one a given gateway build emits.
18
+ * spec documents, what `execute.ts` reads, and — since the SDK's `CreateTransactionResponse` was
19
+ * corrected what the declared type says too. The camelCase branch below is retained only as a
20
+ * tolerance for an older gateway build, NOT because the SDK type disagrees; it no longer does.
21
+ *
22
+ * (This comment previously claimed the SDK declared `signingData.dataToSign`. That was true once
23
+ * and is not now. A comment describing a bug that has been fixed is worse than no comment: it
24
+ * argues for defensive code nobody can justify from the current source.)
18
25
  */
19
26
  function hashToSign(result) {
20
27
  const r = result;
@@ -24,6 +31,32 @@ function intentIdOf(result) {
24
31
  const r = result;
25
32
  return r.intent_id ?? r.intentId;
26
33
  }
34
+ /**
35
+ * Name the next command once an intent has settled.
36
+ *
37
+ * The proof is what the intent was FOR — it is the artifact handed to a counterparty — and until
38
+ * now nothing in the CLI ever mentioned it. `certen proof` arrives in Phase 3; the hint points at
39
+ * it either way, because the sequence is the thing worth teaching and the command is imminent.
40
+ */
41
+ function emitTerminalHints(result, intentId) {
42
+ if (isJsonMode())
43
+ return;
44
+ const status = String(result.status ?? '');
45
+ const proofId = result.proof_id;
46
+ if (['completed', 'delivered', 'proven'].includes(status)) {
47
+ human('');
48
+ human(` Intent ${intentId} is ${status}.`);
49
+ hint('');
50
+ hint(proofId
51
+ ? `Next: certen proof get ${proofId}`
52
+ : `Next: certen proof get ${intentId}`);
53
+ return;
54
+ }
55
+ if (status && status !== 'failed' && status !== 'error') {
56
+ hint('');
57
+ hint(`Still ${status}. Follow it with: certen tx status ${intentId} --wait`);
58
+ }
59
+ }
27
60
  export function registerTransactionCommands(program) {
28
61
  const tx = program.command('tx').description('Transaction lifecycle');
29
62
  tx
@@ -38,7 +71,11 @@ export function registerTransactionCommands(program) {
38
71
  .option('--to-chain <chain>', 'Destination chain, e.g. ethereum-sepolia')
39
72
  .option('--from <address>', 'Source address (the identity ADI or its abstract account)')
40
73
  .option('--to <address>', 'Destination address')
41
- .option('--amount <amount>', 'Amount in base units (wei) pass as a string')
74
+ // WHOLE units, not base units. "1" is one ETH. This said "base units (wei)"
75
+ // until 2026-08-11 — the inverse, and inverted in the dangerous direction:
76
+ // someone passing "1" to mean one wei moves a whole ETH, which on a funded
77
+ // account succeeds silently.
78
+ .option('--amount <amount>', 'Amount in whole units — "1" = 1 ETH, "0.5" = half. Pass as a string')
42
79
  .option('--token <symbol>', 'Token symbol')
43
80
  .option('--contract-address <addr...>', 'Contract addresses this intent touches')
44
81
  .option('--signer-key-page <url>', 'Which key page signs, e.g. acc://org.acme/book/2')
@@ -48,22 +85,56 @@ export function registerTransactionCommands(program) {
48
85
  .addOption(new Option('--proof-class <class>', 'When the proof runs: on_demand starts now (~60-110s); on_cadence batches it (cheaper, slower)').choices(['on_demand', 'on_cadence']))
49
86
  .option('--idempotency-key <key>', 'Idempotency key (one is generated if omitted)')
50
87
  .option('--sign-with <key>', 'Local key: sign the returned hash and submit it in one step')
88
+ .option('--wait', 'Wait for the proof cycle to reach a terminal state (default off with --json)')
89
+ .option('--no-wait', 'Return as soon as the signature is submitted')
90
+ .option('--timeout <minutes>', `How long to wait (default ${TX_WAIT.timeoutMin})`)
91
+ .option('--poll-interval <seconds>', `How often to check (default ${TX_WAIT.intervalSec})`)
92
+ .option('--force', 'Submit even if the abstract account has no gas to execute with')
51
93
  .action(async (opts) => {
52
94
  const client = await getClient();
53
95
  // Resolve (and unlock) the signer BEFORE opening the intent. Prompting for a passphrase
54
96
  // after the intent exists would leave an unsigned intent behind every time someone
55
97
  // mistypes it or hits Ctrl-C at the prompt.
98
+ // Chains are checked before the signer is unlocked, so a typo costs a message rather than a
99
+ // passphrase prompt followed by a gateway rejection.
100
+ if (opts.toChain)
101
+ assertChain(opts.toChain, '--to-chain');
102
+ // `--from-chain` defaults to `accumulate`, which is not an EVM chain and is not in the
103
+ // supported set; only validate it when the caller named an EVM chain explicitly.
104
+ if (opts.fromChain && opts.fromChain !== 'accumulate')
105
+ assertChain(opts.fromChain, '--from-chain');
106
+ const wait = resolveWait();
107
+ const budget = parseWaitBudget(opts.timeout, opts.pollInterval, TX_WAIT);
56
108
  const signer = opts.signWith ? await resolveSigner(opts.signWith) : null;
57
109
  let intent;
58
110
  if (opts.intent) {
59
111
  const raw = opts.intent.startsWith('@')
60
112
  ? readFileSync(opts.intent.slice(1), 'utf8')
61
113
  : opts.intent;
62
- intent = JSON.parse(raw);
114
+ try {
115
+ intent = JSON.parse(raw);
116
+ }
117
+ catch (err) {
118
+ const where = opts.intent.startsWith('@') ? opts.intent.slice(1) : '--intent';
119
+ throw new UsageError(`${where} is not valid JSON: ${err instanceof Error ? err.message : String(err)}`, 'INVALID_INTENT_JSON');
120
+ }
63
121
  }
64
122
  else {
65
- if (!opts.to || !opts.amount) {
66
- throw new Error('give --intent, or all of --to and --amount (plus --to-chain) for a simple transfer');
123
+ // `--from` belongs in this list. The gateway rejects a native transfer without
124
+ // `fromAddress` ("Native transfer intent is missing required field(s): fromAddress"), so
125
+ // omitting it was always a failure — just one that cost a round trip and arrived phrased
126
+ // in the API's field names rather than the flags the user typed.
127
+ const missing = [
128
+ !opts.toChain && '--to-chain',
129
+ !opts.from && '--from',
130
+ !opts.to && '--to',
131
+ !opts.amount && '--amount',
132
+ ].filter(Boolean);
133
+ if (missing.length > 0) {
134
+ throw new UsageError(`A simple transfer needs ${missing.join(', ')}. `
135
+ + 'Give all of --to-chain, --from, --to and --amount, or pass --intent for a '
136
+ + 'multi-leg or contract-call intent. '
137
+ + '--from is the identity\'s abstract account on the source chain (certen portfolio shows it).', 'INCOMPLETE_INTENT');
67
138
  }
68
139
  intent = {
69
140
  fromChain: opts.fromChain,
@@ -74,6 +145,11 @@ export function registerTransactionCommands(program) {
74
145
  tokenSymbol: opts.token,
75
146
  };
76
147
  }
148
+ // Checked after the intent is assembled and BEFORE it is opened: an intent that cannot
149
+ // execute should never exist. See funding-guard.ts for why this only ever refuses on a
150
+ // positively observed zero.
151
+ const executionChain = (intent.toChain ?? intent.to_chain ?? opts.toChain);
152
+ await assertFundedForValue(client, opts.identity, executionChain, intent, Boolean(opts.force));
77
153
  const result = await client.transaction.create({
78
154
  identityId: opts.identity,
79
155
  intent,
@@ -93,14 +169,25 @@ export function registerTransactionCommands(program) {
93
169
  // Provider mode (the gateway holds a key) returns no signing data. Printing the intent and
94
170
  // stopping is honest; pretending we signed something we never saw is not.
95
171
  printOutput(result);
96
- throw new Error('Intent opened but returned no hash to sign this gateway is in provider mode for that '
97
- + 'identity, so --sign-with does not apply. The intent above was created.');
172
+ // Not a usage error: the invocation was well-formed and the gateway accepted it. The
173
+ // intent exists. This is an operation that could not be completed the way it was asked
174
+ // for, which is exactly what exit 1 means.
175
+ throw new CliError('Intent opened but returned no hash to sign — this gateway is in provider mode for that '
176
+ + 'identity, so --sign-with does not apply. The intent above was created.', 'NO_SIGNING_DATA', EXIT.FAILED);
98
177
  }
99
178
  const signed = await client.transaction.submitSignature(intentId, {
100
179
  signature: signer.sign(hash),
101
180
  publicKey: signer.publicKey,
102
181
  });
103
- printOutput(signed);
182
+ if (!wait) {
183
+ printOutput(signed);
184
+ hint('');
185
+ hint(`The proof cycle runs now (60-110s). Check with: certen tx status ${intentId}`);
186
+ return;
187
+ }
188
+ const final = await waitForTransaction(client, intentId, budget);
189
+ printOutput(final);
190
+ emitTerminalHints(final, intentId);
104
191
  });
105
192
  tx
106
193
  .command('sign <id>')
@@ -116,11 +203,12 @@ export function registerTransactionCommands(program) {
116
203
  let signature;
117
204
  let publicKey;
118
205
  if (opts.signWith) {
119
- if (opts.signature)
120
- throw new Error('Pass either --sign-with or --signature, not both.');
206
+ if (opts.signature) {
207
+ throw new UsageError('Pass either --sign-with or --signature, not both.', 'CONFLICTING_SIGNING_FLAGS');
208
+ }
121
209
  if (!opts.hash) {
122
- throw new Error('--sign-with needs --hash <hex> (the signing_data.hash_to_sign from `tx create`). '
123
- + 'Or use `tx create --sign-with` to do both in one step.');
210
+ throw new UsageError('--sign-with needs --hash <hex> (the signing_data.hash_to_sign from `tx create`). '
211
+ + 'Or use `tx create --sign-with` to do both in one step.', 'MISSING_HASH');
124
212
  }
125
213
  const signer = await resolveSigner(opts.signWith);
126
214
  signature = signer.sign(opts.hash);
@@ -128,7 +216,7 @@ export function registerTransactionCommands(program) {
128
216
  }
129
217
  else {
130
218
  if (!opts.signature || !opts.publicKey) {
131
- throw new Error('Provide --sign-with <key> --hash <hex>, or both --signature and --public-key.');
219
+ throw new UsageError('Provide --sign-with <key> --hash <hex>, or both --signature and --public-key.', 'MISSING_SIGNATURE');
132
220
  }
133
221
  signature = opts.signature;
134
222
  publicKey = opts.publicKey;
@@ -139,19 +227,49 @@ export function registerTransactionCommands(program) {
139
227
  });
140
228
  tx
141
229
  .command('status <id>')
142
- .description('Get transaction status')
143
- .action(async (id) => {
230
+ .description('Get transaction status, optionally waiting for it to settle')
231
+ // `status` defaults to a single read in BOTH modes — unlike `create`. Asking "what is it now"
232
+ // and asking "tell me when it is done" are different questions, and a status command that
233
+ // silently blocked for seven minutes would be the wrong answer to the first one.
234
+ .option('--wait', 'Poll until the intent reaches a terminal state')
235
+ .option('--timeout <minutes>', `How long to wait with --wait (default ${TX_WAIT.timeoutMin})`)
236
+ .option('--poll-interval <seconds>', `How often to check (default ${TX_WAIT.intervalSec})`)
237
+ .action(async (id, opts) => {
238
+ const budget = parseWaitBudget(opts.timeout, opts.pollInterval, TX_WAIT);
144
239
  const client = await getClient();
145
- const result = await client.transaction.get(id);
146
- printOutput(result);
240
+ if (!opts.wait) {
241
+ const result = await client.transaction.get(id);
242
+ printOutput(result);
243
+ emitTerminalHints(result, id);
244
+ return;
245
+ }
246
+ const final = await waitForTransaction(client, id, budget);
247
+ printOutput(final);
248
+ emitTerminalHints(final, id);
147
249
  });
148
250
  tx
149
251
  .command('list')
150
252
  .description('List transactions')
151
253
  .option('--limit <n>', 'Max results', parseInt)
152
254
  .option('--offset <n>', 'Offset', parseInt)
255
+ // Paging by hand is the kind of arithmetic a CLI should absorb. Without this, answering "how
256
+ // many intents failed this month" from the terminal meant a loop incrementing --offset and
257
+ // knowing when to stop — and getting that wrong reads as "there were none".
258
+ .option('--all', 'Fetch every page, not just the first')
153
259
  .action(async (opts) => {
154
260
  const client = await getClient();
261
+ if (opts.all) {
262
+ if (opts.offset !== undefined) {
263
+ throw new UsageError('--all starts from the beginning, so --offset has no meaning with it. Use one or the other.', 'CONFLICTING_PAGING_FLAGS');
264
+ }
265
+ const transactions = [];
266
+ // --limit is the PAGE size here, not a cap: the whole point of --all is that the caller
267
+ // stops thinking about page boundaries.
268
+ for await (const tx of client.transaction.listAll(opts.limit ?? 100))
269
+ transactions.push(tx);
270
+ printOutput({ transactions });
271
+ return;
272
+ }
155
273
  const result = await client.transaction.list({
156
274
  limit: opts.limit,
157
275
  offset: opts.offset,
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/commands/transaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,KAAK,UAAU,SAAS;IACtB,OAAO,IAAI,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,UAAU,CAAC,MAAe;IACjC,MAAM,CAAC,GAAG,MAGT,CAAC;IACF,OAAO,CAAC,CAAC,YAAY,EAAE,YAAY,IAAI,CAAC,CAAC,WAAW,EAAE,UAAU,IAAI,CAAC,CAAC,WAAW,EAAE,UAAU,CAAC;AAChG,CAAC;AAED,SAAS,UAAU,CAAC,MAAe;IACjC,MAAM,CAAC,GAAG,MAAmD,CAAC;IAC9D,OAAO,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;IAEtE,EAAE;SACC,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,gFAAgF,CAAC;QAC9F,qGAAqG;QACrG,iGAAiG;QACjG,uDAAuD;SACtD,cAAc,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SACvD,MAAM,CAAC,iBAAiB,EAAE,qEAAqE,CAAC;SAChG,MAAM,CAAC,sBAAsB,EAAE,cAAc,EAAE,YAAY,CAAC;SAC5D,MAAM,CAAC,oBAAoB,EAAE,0CAA0C,CAAC;SACxE,MAAM,CAAC,kBAAkB,EAAE,2DAA2D,CAAC;SACvF,MAAM,CAAC,gBAAgB,EAAE,qBAAqB,CAAC;SAC/C,MAAM,CAAC,mBAAmB,EAAE,+CAA+C,CAAC;SAC5E,MAAM,CAAC,kBAAkB,EAAE,cAAc,CAAC;SAC1C,MAAM,CAAC,8BAA8B,EAAE,wCAAwC,CAAC;SAChF,MAAM,CAAC,yBAAyB,EAAE,kDAAkD,CAAC;SACrF,MAAM,CAAC,2BAA2B,EAAE,uCAAuC,CAAC;QAC7E,+FAA+F;QAC/F,6EAA6E;SAC5E,SAAS,CACR,IAAI,MAAM,CACR,uBAAuB,EACvB,+FAA+F,CAChG,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CACvC;SACA,MAAM,CAAC,yBAAyB,EAAE,+CAA+C,CAAC;SAClF,MAAM,CAAC,mBAAmB,EAAE,6DAA6D,CAAC;SAC1F,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QAEjC,wFAAwF;QACxF,mFAAmF;QACnF,4CAA4C;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEzE,IAAI,MAA+B,CAAC;QACpC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;gBACrC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;gBAC5C,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YAChB,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;YACxG,CAAC;YACD,MAAM,GAAG;gBACP,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,WAAW,EAAE,IAAI,CAAC,IAAI;gBACtB,SAAS,EAAE,IAAI,CAAC,EAAE;gBAClB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC3B,WAAW,EAAE,IAAI,CAAC,KAAK;aACxB,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;YAC7C,UAAU,EAAE,IAAI,CAAC,QAAQ;YACzB,MAAM;YACN,iBAAiB,EAAE,IAAI,CAAC,eAAe;YACvC,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,MAAM,EAAE,SAAS;YAC1D,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,WAAW,CAAC,MAA4C,CAAC,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACvB,2FAA2F;YAC3F,0EAA0E;YAC1E,WAAW,CAAC,MAA4C,CAAC,CAAC;YAC1D,MAAM,IAAI,KAAK,CACb,yFAAyF;kBACvF,wEAAwE,CAC3E,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE;YAChE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAC;QACH,WAAW,CAAC,MAA4C,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEL,EAAE;SACC,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,sCAAsC,CAAC;SACnD,MAAM,CAAC,mBAAmB,EAAE,uCAAuC,CAAC;SACpE,MAAM,CAAC,cAAc,EAAE,4DAA4D,CAAC;SACpF,MAAM,CAAC,mBAAmB,EAAE,mDAAmD,CAAC;SAChF,MAAM,CAAC,oBAAoB,EAAE,6CAA6C,CAAC;SAC3E,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,IAAI,EAAE,EAAE;QACjC,2FAA2F;QAC3F,yFAAyF;QACzF,0CAA0C;QAC1C,IAAI,SAAiB,CAAC;QACtB,IAAI,SAAiB,CAAC;QAEtB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACzF,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,mFAAmF;sBACjF,wDAAwD,CAC3D,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClD,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACvC,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;YACnG,CAAC;YACD,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QACtF,WAAW,CAAC,MAA4C,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEL,EAAE;SACC,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,wBAAwB,CAAC;SACrC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChD,WAAW,CAAC,MAA4C,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEL,EAAE;SACC,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC;SAC9C,MAAM,CAAC,cAAc,EAAE,QAAQ,EAAE,QAAQ,CAAC;SAC1C,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;YAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;QACH,WAAW,CAAC,MAA4C,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/commands/transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerWebhookCommands(program: Command): void;