@allscale/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/README.md +482 -0
  2. package/bin/dev.js +11 -0
  3. package/bin/run-oclif.js +69 -0
  4. package/bin/run.js +6 -0
  5. package/dist/commands/build-info.js +16 -0
  6. package/dist/commands/claim-link/claim.js +17 -0
  7. package/dist/commands/claim-link/create.js +75 -0
  8. package/dist/commands/claim-link/get.js +18 -0
  9. package/dist/commands/claim-link/list.js +18 -0
  10. package/dist/commands/claim-link/preview.js +18 -0
  11. package/dist/commands/claim-link/status.js +17 -0
  12. package/dist/commands/describe.js +16 -0
  13. package/dist/commands/device-login.js +40 -0
  14. package/dist/commands/invoice/get.js +18 -0
  15. package/dist/commands/invoice/list.js +19 -0
  16. package/dist/commands/invoice/pay.js +66 -0
  17. package/dist/commands/invoice/received.js +19 -0
  18. package/dist/commands/invoice/send.js +167 -0
  19. package/dist/commands/invoice/sent.js +18 -0
  20. package/dist/commands/invoice/update.js +18 -0
  21. package/dist/commands/logout.js +17 -0
  22. package/dist/commands/operations.js +16 -0
  23. package/dist/commands/otp-login.js +23 -0
  24. package/dist/commands/otp-send.js +17 -0
  25. package/dist/commands/payout/send.js +23 -0
  26. package/dist/commands/payout/status.js +18 -0
  27. package/dist/commands/scope.js +22 -0
  28. package/dist/commands/store/create.js +28 -0
  29. package/dist/commands/transaction/get.js +18 -0
  30. package/dist/commands/transaction/list.js +18 -0
  31. package/dist/commands/wallet/list.js +18 -0
  32. package/dist/commands/wallet/send.js +63 -0
  33. package/dist/commands/whoami.js +18 -0
  34. package/dist/hooks/version-suffix.js +2 -0
  35. package/dist/index.js +17 -0
  36. package/dist/lib/help.js +3 -0
  37. package/oclif.manifest.json +3329 -0
  38. package/package.json +135 -0
@@ -0,0 +1,3329 @@
1
+ {
2
+ "commands": {
3
+ "build-info": {
4
+ "aliases": [],
5
+ "args": {},
6
+ "description": "Show which API base (if any) this build is bound to, and its signing-key id. Never prints the signing key itself — only its (non-secret, already-forgeable) id.",
7
+ "examples": [
8
+ "$ allscale build-info"
9
+ ],
10
+ "flags": {
11
+ "json": {
12
+ "description": "Format output as json.",
13
+ "helpGroup": "GLOBAL",
14
+ "name": "json",
15
+ "allowNo": false,
16
+ "type": "boolean"
17
+ },
18
+ "profile": {
19
+ "description": "Named profile from ~/.allscale/config.toml",
20
+ "helpGroup": "GLOBAL",
21
+ "name": "profile",
22
+ "hasDynamicHelp": false,
23
+ "multiple": false,
24
+ "type": "option"
25
+ },
26
+ "token": {
27
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
28
+ "helpGroup": "GLOBAL",
29
+ "hidden": true,
30
+ "name": "token",
31
+ "hasDynamicHelp": false,
32
+ "multiple": false,
33
+ "type": "option"
34
+ },
35
+ "api-base": {
36
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
37
+ "helpGroup": "GLOBAL",
38
+ "hidden": true,
39
+ "name": "api-base",
40
+ "hasDynamicHelp": false,
41
+ "multiple": false,
42
+ "type": "option"
43
+ },
44
+ "insecure-storage": {
45
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
46
+ "helpGroup": "GLOBAL",
47
+ "name": "insecure-storage",
48
+ "allowNo": false,
49
+ "type": "boolean"
50
+ }
51
+ },
52
+ "hasDynamicHelp": false,
53
+ "hiddenAliases": [],
54
+ "id": "build-info",
55
+ "pluginAlias": "@allscale/cli",
56
+ "pluginName": "@allscale/cli",
57
+ "pluginType": "core",
58
+ "strict": true,
59
+ "enableJsonFlag": true,
60
+ "legacyStagingNoticeShown": false,
61
+ "emitsOwnOutput": false,
62
+ "requiresEscapeHatch": false,
63
+ "requiresInput": false,
64
+ "isLocalOnly": true,
65
+ "isESM": false,
66
+ "relativePath": [
67
+ "dist",
68
+ "commands",
69
+ "build-info.js"
70
+ ]
71
+ },
72
+ "describe": {
73
+ "aliases": [],
74
+ "args": {
75
+ "name": {
76
+ "description": "Operation name",
77
+ "name": "name",
78
+ "required": true
79
+ }
80
+ },
81
+ "description": "Show full type info for one operation: args, return type, default-selection example document. Disabled by default (exit 10); set ALLSCALE_ALLOW_RAW=1 to enable.",
82
+ "examples": [
83
+ "$ allscale describe business",
84
+ "$ allscale describe create_payment"
85
+ ],
86
+ "flags": {
87
+ "json": {
88
+ "description": "Format output as json.",
89
+ "helpGroup": "GLOBAL",
90
+ "name": "json",
91
+ "allowNo": false,
92
+ "type": "boolean"
93
+ },
94
+ "profile": {
95
+ "description": "Named profile from ~/.allscale/config.toml",
96
+ "helpGroup": "GLOBAL",
97
+ "name": "profile",
98
+ "hasDynamicHelp": false,
99
+ "multiple": false,
100
+ "type": "option"
101
+ },
102
+ "token": {
103
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
104
+ "helpGroup": "GLOBAL",
105
+ "hidden": true,
106
+ "name": "token",
107
+ "hasDynamicHelp": false,
108
+ "multiple": false,
109
+ "type": "option"
110
+ },
111
+ "api-base": {
112
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
113
+ "helpGroup": "GLOBAL",
114
+ "hidden": true,
115
+ "name": "api-base",
116
+ "hasDynamicHelp": false,
117
+ "multiple": false,
118
+ "type": "option"
119
+ },
120
+ "insecure-storage": {
121
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
122
+ "helpGroup": "GLOBAL",
123
+ "name": "insecure-storage",
124
+ "allowNo": false,
125
+ "type": "boolean"
126
+ }
127
+ },
128
+ "hasDynamicHelp": false,
129
+ "hiddenAliases": [],
130
+ "id": "describe",
131
+ "pluginAlias": "@allscale/cli",
132
+ "pluginName": "@allscale/cli",
133
+ "pluginType": "core",
134
+ "strict": true,
135
+ "enableJsonFlag": true,
136
+ "legacyStagingNoticeShown": false,
137
+ "emitsOwnOutput": false,
138
+ "requiresEscapeHatch": true,
139
+ "requiresInput": false,
140
+ "isLocalOnly": true,
141
+ "isESM": false,
142
+ "relativePath": [
143
+ "dist",
144
+ "commands",
145
+ "describe.js"
146
+ ]
147
+ },
148
+ "device-login": {
149
+ "aliases": [],
150
+ "args": {},
151
+ "description": "Log in via browser-confirmed device pairing. Use an existing web session or sign in there with Passkey or Email (enter the Email OTP on the webpage), then approve the CLI. The backend mints a scoped agent key — the only credential this CLI issues; no web sign-in secret is entered in the terminal.",
152
+ "examples": [
153
+ "$ allscale device-login",
154
+ "$ allscale device-login --device-label tom-mbp-2026",
155
+ "$ allscale device-login --device-label CI-runner --scopes invoice:read_only --scopes claim_link:all"
156
+ ],
157
+ "flags": {
158
+ "json": {
159
+ "description": "Format output as json.",
160
+ "helpGroup": "GLOBAL",
161
+ "name": "json",
162
+ "allowNo": false,
163
+ "type": "boolean"
164
+ },
165
+ "profile": {
166
+ "description": "Named profile from ~/.allscale/config.toml",
167
+ "helpGroup": "GLOBAL",
168
+ "name": "profile",
169
+ "hasDynamicHelp": false,
170
+ "multiple": false,
171
+ "type": "option"
172
+ },
173
+ "token": {
174
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
175
+ "helpGroup": "GLOBAL",
176
+ "hidden": true,
177
+ "name": "token",
178
+ "hasDynamicHelp": false,
179
+ "multiple": false,
180
+ "type": "option"
181
+ },
182
+ "api-base": {
183
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
184
+ "helpGroup": "GLOBAL",
185
+ "hidden": true,
186
+ "name": "api-base",
187
+ "hasDynamicHelp": false,
188
+ "multiple": false,
189
+ "type": "option"
190
+ },
191
+ "insecure-storage": {
192
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
193
+ "helpGroup": "GLOBAL",
194
+ "name": "insecure-storage",
195
+ "allowNo": false,
196
+ "type": "boolean"
197
+ },
198
+ "device-label": {
199
+ "description": "Human-readable label shown in the browser approval UI so the user can confirm they're authorizing the right device.",
200
+ "name": "device-label",
201
+ "hasDynamicHelp": false,
202
+ "multiple": false,
203
+ "type": "option"
204
+ },
205
+ "scopes": {
206
+ "description": "Requested scopes for the eventual agent key, repeatable. Scope strings use `<category>:<tier>`; `:all` implies `:read_only` for the same category. Pairs the approval screen can grant: invoice:{read_only,all}, contact:{read_only,all}, transaction:read_only, wallet:read_only, claim_link:{read_only,all}, store:all. The final set is chosen — and can be overridden — on that screen, and is ENFORCED server-side on every request. The Wallets toggle is on by default and grants `wallet:read_only`, which `invoice pay` and `wallet list` both need.",
207
+ "name": "scopes",
208
+ "hasDynamicHelp": false,
209
+ "multiple": true,
210
+ "type": "option"
211
+ },
212
+ "no-browser": {
213
+ "description": "Skip launching the browser; print the verification URL only. Open it in a browser to sign in with Passkey or Email and approve (the Email OTP stays on the webpage). Useful for CI or ssh sessions.",
214
+ "name": "no-browser",
215
+ "allowNo": false,
216
+ "type": "boolean"
217
+ },
218
+ "yes": {
219
+ "char": "y",
220
+ "description": "Skip the interactive confirmation and start the pairing immediately. Only a BARE invocation is ever prompted, so passing any flag already skips it; use this to say so explicitly. Automation that allocates a pty for stdin/stdout/stderr and runs the command bare is indistinguishable from a human — that is the case this flag exists for.",
221
+ "name": "yes",
222
+ "allowNo": false,
223
+ "type": "boolean"
224
+ }
225
+ },
226
+ "hasDynamicHelp": false,
227
+ "hiddenAliases": [],
228
+ "id": "device-login",
229
+ "pluginAlias": "@allscale/cli",
230
+ "pluginName": "@allscale/cli",
231
+ "pluginType": "core",
232
+ "strict": true,
233
+ "enableJsonFlag": true,
234
+ "legacyStagingNoticeShown": false,
235
+ "emitsOwnOutput": false,
236
+ "requiresEscapeHatch": false,
237
+ "requiresInput": false,
238
+ "isLocalOnly": false,
239
+ "isESM": false,
240
+ "relativePath": [
241
+ "dist",
242
+ "commands",
243
+ "device-login.js"
244
+ ]
245
+ },
246
+ "logout": {
247
+ "aliases": [],
248
+ "args": {},
249
+ "description": "Clear cached credentials (session token + store keys) for a profile. By default, clears BOTH the OS keychain and plaintext file store. With --insecure-storage or ALLSCALE_INSECURE_STORAGE=1, clears only plaintext files and never probes the keychain; omit/unset that opt-in when a full-machine sweep is wanted. If the keychain is suppressed or unavailable, a bare logout fails closed after attempting the plaintext-file cleanup.",
250
+ "examples": [
251
+ "$ allscale logout",
252
+ "$ allscale logout --profile staging"
253
+ ],
254
+ "flags": {
255
+ "json": {
256
+ "description": "Format output as json.",
257
+ "helpGroup": "GLOBAL",
258
+ "name": "json",
259
+ "allowNo": false,
260
+ "type": "boolean"
261
+ },
262
+ "profile": {
263
+ "description": "Named profile from ~/.allscale/config.toml",
264
+ "helpGroup": "GLOBAL",
265
+ "name": "profile",
266
+ "hasDynamicHelp": false,
267
+ "multiple": false,
268
+ "type": "option"
269
+ },
270
+ "token": {
271
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
272
+ "helpGroup": "GLOBAL",
273
+ "hidden": true,
274
+ "name": "token",
275
+ "hasDynamicHelp": false,
276
+ "multiple": false,
277
+ "type": "option"
278
+ },
279
+ "api-base": {
280
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
281
+ "helpGroup": "GLOBAL",
282
+ "hidden": true,
283
+ "name": "api-base",
284
+ "hasDynamicHelp": false,
285
+ "multiple": false,
286
+ "type": "option"
287
+ },
288
+ "insecure-storage": {
289
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
290
+ "helpGroup": "GLOBAL",
291
+ "name": "insecure-storage",
292
+ "allowNo": false,
293
+ "type": "boolean"
294
+ }
295
+ },
296
+ "hasDynamicHelp": false,
297
+ "hiddenAliases": [],
298
+ "id": "logout",
299
+ "pluginAlias": "@allscale/cli",
300
+ "pluginName": "@allscale/cli",
301
+ "pluginType": "core",
302
+ "strict": true,
303
+ "enableJsonFlag": true,
304
+ "legacyStagingNoticeShown": false,
305
+ "emitsOwnOutput": false,
306
+ "requiresEscapeHatch": false,
307
+ "requiresInput": false,
308
+ "isLocalOnly": true,
309
+ "isESM": false,
310
+ "relativePath": [
311
+ "dist",
312
+ "commands",
313
+ "logout.js"
314
+ ]
315
+ },
316
+ "operations": {
317
+ "aliases": [],
318
+ "args": {},
319
+ "description": "List every operation exposed by the schema (queries and mutations). Disabled by default (exit 10); set ALLSCALE_ALLOW_RAW=1 to enable.",
320
+ "examples": [
321
+ "$ allscale operations",
322
+ "$ allscale operations --kind mutation",
323
+ "$ allscale operations --grep invoice"
324
+ ],
325
+ "flags": {
326
+ "json": {
327
+ "description": "Format output as json.",
328
+ "helpGroup": "GLOBAL",
329
+ "name": "json",
330
+ "allowNo": false,
331
+ "type": "boolean"
332
+ },
333
+ "profile": {
334
+ "description": "Named profile from ~/.allscale/config.toml",
335
+ "helpGroup": "GLOBAL",
336
+ "name": "profile",
337
+ "hasDynamicHelp": false,
338
+ "multiple": false,
339
+ "type": "option"
340
+ },
341
+ "token": {
342
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
343
+ "helpGroup": "GLOBAL",
344
+ "hidden": true,
345
+ "name": "token",
346
+ "hasDynamicHelp": false,
347
+ "multiple": false,
348
+ "type": "option"
349
+ },
350
+ "api-base": {
351
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
352
+ "helpGroup": "GLOBAL",
353
+ "hidden": true,
354
+ "name": "api-base",
355
+ "hasDynamicHelp": false,
356
+ "multiple": false,
357
+ "type": "option"
358
+ },
359
+ "insecure-storage": {
360
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
361
+ "helpGroup": "GLOBAL",
362
+ "name": "insecure-storage",
363
+ "allowNo": false,
364
+ "type": "boolean"
365
+ },
366
+ "kind": {
367
+ "char": "k",
368
+ "description": "Filter by operation kind",
369
+ "name": "kind",
370
+ "hasDynamicHelp": false,
371
+ "multiple": false,
372
+ "options": [
373
+ "query",
374
+ "mutation"
375
+ ],
376
+ "type": "option"
377
+ },
378
+ "grep": {
379
+ "char": "g",
380
+ "description": "Filter by substring match against name + description (case-insensitive)",
381
+ "name": "grep",
382
+ "hasDynamicHelp": false,
383
+ "multiple": false,
384
+ "type": "option"
385
+ }
386
+ },
387
+ "hasDynamicHelp": false,
388
+ "hiddenAliases": [],
389
+ "id": "operations",
390
+ "pluginAlias": "@allscale/cli",
391
+ "pluginName": "@allscale/cli",
392
+ "pluginType": "core",
393
+ "strict": true,
394
+ "enableJsonFlag": true,
395
+ "legacyStagingNoticeShown": false,
396
+ "emitsOwnOutput": false,
397
+ "requiresEscapeHatch": true,
398
+ "requiresInput": false,
399
+ "isLocalOnly": true,
400
+ "isESM": false,
401
+ "relativePath": [
402
+ "dist",
403
+ "commands",
404
+ "operations.js"
405
+ ]
406
+ },
407
+ "otp-login": {
408
+ "aliases": [],
409
+ "args": {},
410
+ "description": "Terminal-only Email OTP login for headless / scripted shells. Works with any account email (external domains included; the account must already exist). Sends the code (unless --otp-id is supplied), reads it in the terminal, and mints a scope-ENFORCED agent API key — the only credential this CLI issues. Scopes are set with --scopes (required; no full-permission default exists).",
411
+ "examples": [
412
+ "$ allscale otp-login --email me@example.com --scopes invoice:read_only # interactive: prompts on stdin",
413
+ "$ printf '%s' \"$OTP\" | allscale otp-login --email me@example.com --scopes invoice:all --otp-stdin",
414
+ "$ ALLSCALE_OTP=$(read-from-mailbox) allscale otp-login --email me@example.com --scopes claim_link:all",
415
+ "$ allscale otp-login --email me@example.com --scopes invoice:read_only --otp-id <id> --otp <code>"
416
+ ],
417
+ "flags": {
418
+ "json": {
419
+ "description": "Format output as json.",
420
+ "helpGroup": "GLOBAL",
421
+ "name": "json",
422
+ "allowNo": false,
423
+ "type": "boolean"
424
+ },
425
+ "profile": {
426
+ "description": "Named profile from ~/.allscale/config.toml",
427
+ "helpGroup": "GLOBAL",
428
+ "name": "profile",
429
+ "hasDynamicHelp": false,
430
+ "multiple": false,
431
+ "type": "option"
432
+ },
433
+ "token": {
434
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
435
+ "helpGroup": "GLOBAL",
436
+ "hidden": true,
437
+ "name": "token",
438
+ "hasDynamicHelp": false,
439
+ "multiple": false,
440
+ "type": "option"
441
+ },
442
+ "api-base": {
443
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
444
+ "helpGroup": "GLOBAL",
445
+ "hidden": true,
446
+ "name": "api-base",
447
+ "hasDynamicHelp": false,
448
+ "multiple": false,
449
+ "type": "option"
450
+ },
451
+ "insecure-storage": {
452
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
453
+ "helpGroup": "GLOBAL",
454
+ "name": "insecure-storage",
455
+ "allowNo": false,
456
+ "type": "boolean"
457
+ },
458
+ "email": {
459
+ "char": "e",
460
+ "description": "Account email",
461
+ "helpGroup": "REQUIRED",
462
+ "name": "email",
463
+ "required": true,
464
+ "hasDynamicHelp": false,
465
+ "multiple": false,
466
+ "type": "option"
467
+ },
468
+ "scopes": {
469
+ "description": "Scopes the minted agent key should carry, repeatable. Scope strings use `<category>:<tier>`; `:all` implies `:read_only` for the same category. Pairs that reach a real operation today: invoice:{read_only,all}, contact:{read_only,all}, claim_link:{read_only,all}, transaction:read_only, store:all, wallet:read_only. Other pairs are accepted by the catalog but grant nothing, and this command does NOT warn when a requested scope is clipped — verify with `allscale scope` after minting. Required — the backend deliberately has no full-permission default. Requested scopes are clipped to your account's role; keys are ENFORCED server-side on every request.",
470
+ "helpGroup": "REQUIRED",
471
+ "name": "scopes",
472
+ "required": true,
473
+ "hasDynamicHelp": false,
474
+ "multiple": true,
475
+ "type": "option"
476
+ },
477
+ "otp-id": {
478
+ "description": "Skip the send step and use this otp_id (e.g. from a previous `otp-send`)",
479
+ "name": "otp-id",
480
+ "hasDynamicHelp": false,
481
+ "multiple": false,
482
+ "type": "option"
483
+ },
484
+ "otp": {
485
+ "description": "OTP code from the email. Prefer ALLSCALE_OTP or --otp-stdin to keep it out of shell history.",
486
+ "exclusive": [
487
+ "otp-stdin"
488
+ ],
489
+ "name": "otp",
490
+ "hasDynamicHelp": false,
491
+ "multiple": false,
492
+ "type": "option"
493
+ },
494
+ "otp-stdin": {
495
+ "description": "Read the OTP code as one line from stdin",
496
+ "exclusive": [
497
+ "otp"
498
+ ],
499
+ "name": "otp-stdin",
500
+ "allowNo": false,
501
+ "type": "boolean"
502
+ },
503
+ "no-existence-check": {
504
+ "description": "(DEPRECATED — now errors) Registration via the CLI OTP flow was removed: the CLI-only login endpoint signs in existing accounts only. Create the account in the AllScale web app first, then log in without this flag.",
505
+ "hidden": true,
506
+ "name": "no-existence-check",
507
+ "allowNo": false,
508
+ "type": "boolean"
509
+ },
510
+ "device-label": {
511
+ "description": "Human-readable device/agent label recorded on the minted key so it is identifiable in the key management list.",
512
+ "name": "device-label",
513
+ "hasDynamicHelp": false,
514
+ "multiple": false,
515
+ "type": "option"
516
+ }
517
+ },
518
+ "hasDynamicHelp": false,
519
+ "hiddenAliases": [],
520
+ "id": "otp-login",
521
+ "pluginAlias": "@allscale/cli",
522
+ "pluginName": "@allscale/cli",
523
+ "pluginType": "core",
524
+ "strict": true,
525
+ "enableJsonFlag": true,
526
+ "legacyStagingNoticeShown": false,
527
+ "emitsOwnOutput": false,
528
+ "requiresEscapeHatch": false,
529
+ "requiresInput": false,
530
+ "isLocalOnly": false,
531
+ "isESM": false,
532
+ "relativePath": [
533
+ "dist",
534
+ "commands",
535
+ "otp-login.js"
536
+ ]
537
+ },
538
+ "otp-send": {
539
+ "aliases": [],
540
+ "args": {},
541
+ "description": "Send an email OTP for login. Works with any account email (external domains included). Returns the otp_id; the user receives the code by email. Login only: the account must already exist.",
542
+ "examples": [
543
+ "$ allscale otp-send --email me@example.com"
544
+ ],
545
+ "flags": {
546
+ "json": {
547
+ "description": "Format output as json.",
548
+ "helpGroup": "GLOBAL",
549
+ "name": "json",
550
+ "allowNo": false,
551
+ "type": "boolean"
552
+ },
553
+ "profile": {
554
+ "description": "Named profile from ~/.allscale/config.toml",
555
+ "helpGroup": "GLOBAL",
556
+ "name": "profile",
557
+ "hasDynamicHelp": false,
558
+ "multiple": false,
559
+ "type": "option"
560
+ },
561
+ "token": {
562
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
563
+ "helpGroup": "GLOBAL",
564
+ "hidden": true,
565
+ "name": "token",
566
+ "hasDynamicHelp": false,
567
+ "multiple": false,
568
+ "type": "option"
569
+ },
570
+ "api-base": {
571
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
572
+ "helpGroup": "GLOBAL",
573
+ "hidden": true,
574
+ "name": "api-base",
575
+ "hasDynamicHelp": false,
576
+ "multiple": false,
577
+ "type": "option"
578
+ },
579
+ "insecure-storage": {
580
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
581
+ "helpGroup": "GLOBAL",
582
+ "name": "insecure-storage",
583
+ "allowNo": false,
584
+ "type": "boolean"
585
+ },
586
+ "email": {
587
+ "char": "e",
588
+ "description": "Account email",
589
+ "helpGroup": "REQUIRED",
590
+ "name": "email",
591
+ "required": true,
592
+ "hasDynamicHelp": false,
593
+ "multiple": false,
594
+ "type": "option"
595
+ },
596
+ "no-existence-check": {
597
+ "description": "(DEPRECATED — now errors) Registration via the CLI OTP flow was removed: the CLI-only login endpoint signs in existing accounts only. Create the account in the AllScale web app first, then log in without this flag.",
598
+ "hidden": true,
599
+ "name": "no-existence-check",
600
+ "allowNo": false,
601
+ "type": "boolean"
602
+ }
603
+ },
604
+ "hasDynamicHelp": false,
605
+ "hiddenAliases": [],
606
+ "id": "otp-send",
607
+ "pluginAlias": "@allscale/cli",
608
+ "pluginName": "@allscale/cli",
609
+ "pluginType": "core",
610
+ "strict": true,
611
+ "enableJsonFlag": true,
612
+ "legacyStagingNoticeShown": false,
613
+ "emitsOwnOutput": false,
614
+ "requiresEscapeHatch": false,
615
+ "requiresInput": false,
616
+ "isLocalOnly": false,
617
+ "isESM": false,
618
+ "relativePath": [
619
+ "dist",
620
+ "commands",
621
+ "otp-send.js"
622
+ ]
623
+ },
624
+ "scope": {
625
+ "aliases": [],
626
+ "args": {},
627
+ "description": "Show the capabilities granted to the current CLI session (chosen on the browser approval screen at `device-login`, or via --scopes on `otp-login`). Scopes are ENFORCED server-side on every request. Read from the cached token bundle; no network call.",
628
+ "examples": [
629
+ "$ allscale scope",
630
+ "$ allscale scope --profile prod"
631
+ ],
632
+ "flags": {
633
+ "json": {
634
+ "description": "Format output as json.",
635
+ "helpGroup": "GLOBAL",
636
+ "name": "json",
637
+ "allowNo": false,
638
+ "type": "boolean"
639
+ },
640
+ "profile": {
641
+ "description": "Named profile from ~/.allscale/config.toml",
642
+ "helpGroup": "GLOBAL",
643
+ "name": "profile",
644
+ "hasDynamicHelp": false,
645
+ "multiple": false,
646
+ "type": "option"
647
+ },
648
+ "token": {
649
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
650
+ "helpGroup": "GLOBAL",
651
+ "hidden": true,
652
+ "name": "token",
653
+ "hasDynamicHelp": false,
654
+ "multiple": false,
655
+ "type": "option"
656
+ },
657
+ "api-base": {
658
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
659
+ "helpGroup": "GLOBAL",
660
+ "hidden": true,
661
+ "name": "api-base",
662
+ "hasDynamicHelp": false,
663
+ "multiple": false,
664
+ "type": "option"
665
+ },
666
+ "insecure-storage": {
667
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
668
+ "helpGroup": "GLOBAL",
669
+ "name": "insecure-storage",
670
+ "allowNo": false,
671
+ "type": "boolean"
672
+ }
673
+ },
674
+ "hasDynamicHelp": false,
675
+ "hiddenAliases": [],
676
+ "id": "scope",
677
+ "pluginAlias": "@allscale/cli",
678
+ "pluginName": "@allscale/cli",
679
+ "pluginType": "core",
680
+ "strict": true,
681
+ "enableJsonFlag": true,
682
+ "legacyStagingNoticeShown": false,
683
+ "emitsOwnOutput": false,
684
+ "requiresEscapeHatch": false,
685
+ "requiresInput": false,
686
+ "isLocalOnly": true,
687
+ "isESM": false,
688
+ "relativePath": [
689
+ "dist",
690
+ "commands",
691
+ "scope.js"
692
+ ]
693
+ },
694
+ "whoami": {
695
+ "aliases": [],
696
+ "args": {},
697
+ "description": "Show the current authenticated identity from the stored credential (agent-key sessions report business_id / scopes / expiry; legacy password sessions decode the cached JWT). No network call.",
698
+ "examples": [
699
+ "$ allscale whoami",
700
+ "$ allscale whoami --profile prod"
701
+ ],
702
+ "flags": {
703
+ "json": {
704
+ "description": "Format output as json.",
705
+ "helpGroup": "GLOBAL",
706
+ "name": "json",
707
+ "allowNo": false,
708
+ "type": "boolean"
709
+ },
710
+ "profile": {
711
+ "description": "Named profile from ~/.allscale/config.toml",
712
+ "helpGroup": "GLOBAL",
713
+ "name": "profile",
714
+ "hasDynamicHelp": false,
715
+ "multiple": false,
716
+ "type": "option"
717
+ },
718
+ "token": {
719
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
720
+ "helpGroup": "GLOBAL",
721
+ "hidden": true,
722
+ "name": "token",
723
+ "hasDynamicHelp": false,
724
+ "multiple": false,
725
+ "type": "option"
726
+ },
727
+ "api-base": {
728
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
729
+ "helpGroup": "GLOBAL",
730
+ "hidden": true,
731
+ "name": "api-base",
732
+ "hasDynamicHelp": false,
733
+ "multiple": false,
734
+ "type": "option"
735
+ },
736
+ "insecure-storage": {
737
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
738
+ "helpGroup": "GLOBAL",
739
+ "name": "insecure-storage",
740
+ "allowNo": false,
741
+ "type": "boolean"
742
+ }
743
+ },
744
+ "hasDynamicHelp": false,
745
+ "hiddenAliases": [],
746
+ "id": "whoami",
747
+ "pluginAlias": "@allscale/cli",
748
+ "pluginName": "@allscale/cli",
749
+ "pluginType": "core",
750
+ "strict": true,
751
+ "enableJsonFlag": true,
752
+ "legacyStagingNoticeShown": false,
753
+ "emitsOwnOutput": false,
754
+ "requiresEscapeHatch": false,
755
+ "requiresInput": false,
756
+ "isLocalOnly": true,
757
+ "isESM": false,
758
+ "relativePath": [
759
+ "dist",
760
+ "commands",
761
+ "whoami.js"
762
+ ]
763
+ },
764
+ "claim-link:claim": {
765
+ "aliases": [],
766
+ "args": {},
767
+ "description": "Claim a Claim Link. Anonymous claims require --to; authenticated business receivers can use --to-wallet. Only an on-chain-proven claimed outcome exits 0.",
768
+ "examples": [
769
+ "$ allscale claim-link claim --claim-token <token> --to 0xabc...",
770
+ "$ allscale claim-link claim --claim-url https://app.allscale.io/claim/<token> --to-wallet"
771
+ ],
772
+ "flags": {
773
+ "json": {
774
+ "description": "Format output as json.",
775
+ "helpGroup": "GLOBAL",
776
+ "name": "json",
777
+ "allowNo": false,
778
+ "type": "boolean"
779
+ },
780
+ "profile": {
781
+ "description": "Named profile from ~/.allscale/config.toml",
782
+ "helpGroup": "GLOBAL",
783
+ "name": "profile",
784
+ "hasDynamicHelp": false,
785
+ "multiple": false,
786
+ "type": "option"
787
+ },
788
+ "token": {
789
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
790
+ "helpGroup": "GLOBAL",
791
+ "hidden": true,
792
+ "name": "token",
793
+ "hasDynamicHelp": false,
794
+ "multiple": false,
795
+ "type": "option"
796
+ },
797
+ "api-base": {
798
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
799
+ "helpGroup": "GLOBAL",
800
+ "hidden": true,
801
+ "name": "api-base",
802
+ "hasDynamicHelp": false,
803
+ "multiple": false,
804
+ "type": "option"
805
+ },
806
+ "insecure-storage": {
807
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
808
+ "helpGroup": "GLOBAL",
809
+ "name": "insecure-storage",
810
+ "allowNo": false,
811
+ "type": "boolean"
812
+ },
813
+ "claim-token": {
814
+ "description": "Raw bearer claim token. Secret: prefer env/history-safe invocation.",
815
+ "helpGroup": "REQUIRED (ONE OF)",
816
+ "name": "claim-token",
817
+ "hasDynamicHelp": false,
818
+ "multiple": false,
819
+ "type": "option"
820
+ },
821
+ "claim-url": {
822
+ "description": "Canonical claim URL, or a same-origin /s/ short URL resolved with one unauthenticated 302.",
823
+ "helpGroup": "REQUIRED (ONE OF)",
824
+ "name": "claim-url",
825
+ "hasDynamicHelp": false,
826
+ "multiple": false,
827
+ "type": "option"
828
+ },
829
+ "to": {
830
+ "description": "Receiver EVM address for anonymous Path-A claims.",
831
+ "exclusive": [
832
+ "to-wallet"
833
+ ],
834
+ "helpGroup": "REQUIRED (ONE OF)",
835
+ "name": "to",
836
+ "hasDynamicHelp": false,
837
+ "multiple": false,
838
+ "type": "option"
839
+ },
840
+ "to-wallet": {
841
+ "description": "Claim into the authenticated receiver business's AllScale wallet for the link's chain. Requires login/token.",
842
+ "exclusive": [
843
+ "to"
844
+ ],
845
+ "helpGroup": "REQUIRED (ONE OF)",
846
+ "name": "to-wallet",
847
+ "allowNo": false,
848
+ "type": "boolean"
849
+ }
850
+ },
851
+ "hasDynamicHelp": false,
852
+ "hiddenAliases": [],
853
+ "id": "claim-link:claim",
854
+ "pluginAlias": "@allscale/cli",
855
+ "pluginName": "@allscale/cli",
856
+ "pluginType": "core",
857
+ "strict": true,
858
+ "usage": "claim-link claim (--claim-token <value> | --claim-url <value>) [--json] [--profile <value>] [--insecure-storage] [--to <value> | --to-wallet]",
859
+ "enableJsonFlag": true,
860
+ "legacyStagingNoticeShown": false,
861
+ "emitsOwnOutput": false,
862
+ "requiresEscapeHatch": false,
863
+ "requiresInput": true,
864
+ "isLocalOnly": false,
865
+ "isESM": false,
866
+ "relativePath": [
867
+ "dist",
868
+ "commands",
869
+ "claim-link",
870
+ "claim.js"
871
+ ]
872
+ },
873
+ "claim-link:create": {
874
+ "aliases": [],
875
+ "args": {},
876
+ "description": "Create and fund a fixed-intent Claim Link in one browser authorization ceremony, then confirm the authoritative lifecycle state. Requires claim_link:all for an agent-key session.",
877
+ "examples": [
878
+ "$ allscale claim-link create --idempotency-key order-1042 --amount 10 --chain base",
879
+ "$ allscale claim-link create --idempotency-key order-1043 --amount 25.50 --stable-coin USDC --chain polygon --expires 7d --message 'Invoice 1043'",
880
+ "$ allscale claim-link create --idempotency-key order-1044 --amount 5 --chain base --receiver-email client@example.com --sender-display-name 'Acme' --no-browser"
881
+ ],
882
+ "flags": {
883
+ "json": {
884
+ "description": "Format output as json.",
885
+ "helpGroup": "GLOBAL",
886
+ "name": "json",
887
+ "allowNo": false,
888
+ "type": "boolean"
889
+ },
890
+ "profile": {
891
+ "description": "Named profile from ~/.allscale/config.toml",
892
+ "helpGroup": "GLOBAL",
893
+ "name": "profile",
894
+ "hasDynamicHelp": false,
895
+ "multiple": false,
896
+ "type": "option"
897
+ },
898
+ "token": {
899
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
900
+ "helpGroup": "GLOBAL",
901
+ "hidden": true,
902
+ "name": "token",
903
+ "hasDynamicHelp": false,
904
+ "multiple": false,
905
+ "type": "option"
906
+ },
907
+ "api-base": {
908
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
909
+ "helpGroup": "GLOBAL",
910
+ "hidden": true,
911
+ "name": "api-base",
912
+ "hasDynamicHelp": false,
913
+ "multiple": false,
914
+ "type": "option"
915
+ },
916
+ "insecure-storage": {
917
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
918
+ "helpGroup": "GLOBAL",
919
+ "name": "insecure-storage",
920
+ "allowNo": false,
921
+ "type": "boolean"
922
+ },
923
+ "amount": {
924
+ "description": "Exact amount the receiver can claim, as a decimal string. Range 0.1-10000; at most 6 effective decimal places. The CLI never rounds it.",
925
+ "helpGroup": "REQUIRED",
926
+ "name": "amount",
927
+ "required": true,
928
+ "hasDynamicHelp": false,
929
+ "multiple": false,
930
+ "type": "option"
931
+ },
932
+ "chain": {
933
+ "description": "EVM chain for the Claim Link.",
934
+ "helpGroup": "REQUIRED",
935
+ "name": "chain",
936
+ "required": true,
937
+ "hasDynamicHelp": false,
938
+ "multiple": false,
939
+ "options": [
940
+ "ethereum",
941
+ "bsc",
942
+ "base",
943
+ "polygon",
944
+ "arbitrum",
945
+ "optimism"
946
+ ],
947
+ "type": "option"
948
+ },
949
+ "idempotency-key": {
950
+ "description": "Required stable key for this logical Claim Link create/fund operation (1-128 characters). Reuse it after an ambiguous result; use a new key only for an intentional second link.",
951
+ "helpGroup": "REQUIRED",
952
+ "name": "idempotency-key",
953
+ "required": true,
954
+ "hasDynamicHelp": false,
955
+ "multiple": false,
956
+ "type": "option"
957
+ },
958
+ "stable-coin": {
959
+ "description": "Stablecoin for the Claim Link.",
960
+ "name": "stable-coin",
961
+ "default": "USDT",
962
+ "hasDynamicHelp": false,
963
+ "multiple": false,
964
+ "options": [
965
+ "USDT",
966
+ "USDC"
967
+ ],
968
+ "type": "option"
969
+ },
970
+ "receiver-email": {
971
+ "description": "Optional sender-only receiver label. AllScale does not email the receiver; you still share the resulting link yourself.",
972
+ "name": "receiver-email",
973
+ "hasDynamicHelp": false,
974
+ "multiple": false,
975
+ "type": "option"
976
+ },
977
+ "sender-display-name": {
978
+ "description": "Optional sender name shown to the receiver. Max 100 characters.",
979
+ "name": "sender-display-name",
980
+ "hasDynamicHelp": false,
981
+ "multiple": false,
982
+ "type": "option"
983
+ },
984
+ "message": {
985
+ "description": "Optional purpose/message shown on the Claim Link page. Max 200 characters.",
986
+ "name": "message",
987
+ "hasDynamicHelp": false,
988
+ "multiple": false,
989
+ "type": "option"
990
+ },
991
+ "expires": {
992
+ "description": "Claim window as a duration using m/h/d (1m-30d). The window starts after funding confirms.",
993
+ "name": "expires",
994
+ "default": "14d",
995
+ "hasDynamicHelp": false,
996
+ "multiple": false,
997
+ "type": "option"
998
+ },
999
+ "bridge-timeout": {
1000
+ "description": "Shorten the browser confirmation deadline, in milliseconds. By default the CLI waits for the broker op TTL.",
1001
+ "name": "bridge-timeout",
1002
+ "hasDynamicHelp": false,
1003
+ "multiple": false,
1004
+ "type": "option"
1005
+ },
1006
+ "browser-base": {
1007
+ "description": "Override the trusted base URL of the printed /cli bridge link (defaults to the session API base).",
1008
+ "name": "browser-base",
1009
+ "hasDynamicHelp": false,
1010
+ "multiple": false,
1011
+ "type": "option"
1012
+ },
1013
+ "no-browser": {
1014
+ "description": "Do not auto-open a local browser. The command still prints the bridge URL and waits for its callback or a pasted receipt.",
1015
+ "name": "no-browser",
1016
+ "allowNo": false,
1017
+ "type": "boolean"
1018
+ }
1019
+ },
1020
+ "hasDynamicHelp": false,
1021
+ "hiddenAliases": [],
1022
+ "id": "claim-link:create",
1023
+ "pluginAlias": "@allscale/cli",
1024
+ "pluginName": "@allscale/cli",
1025
+ "pluginType": "core",
1026
+ "strict": true,
1027
+ "enableJsonFlag": true,
1028
+ "legacyStagingNoticeShown": false,
1029
+ "emitsOwnOutput": false,
1030
+ "requiresEscapeHatch": false,
1031
+ "requiresInput": false,
1032
+ "isLocalOnly": false,
1033
+ "isESM": false,
1034
+ "relativePath": [
1035
+ "dist",
1036
+ "commands",
1037
+ "claim-link",
1038
+ "create.js"
1039
+ ]
1040
+ },
1041
+ "claim-link:get": {
1042
+ "aliases": [],
1043
+ "args": {
1044
+ "id": {
1045
+ "description": "Claim Link id_str.",
1046
+ "name": "id",
1047
+ "required": true
1048
+ }
1049
+ },
1050
+ "description": "Fetch one of your own Claim Links by id. Unknown or non-owned ids are indistinguishable on the backend.",
1051
+ "examples": [
1052
+ "$ allscale claim-link get 65ab1234567890abcdef0123",
1053
+ "$ allscale claim-link get 65ab... --select 'id status amount token_symbol chain'"
1054
+ ],
1055
+ "flags": {
1056
+ "json": {
1057
+ "description": "Format output as json.",
1058
+ "helpGroup": "GLOBAL",
1059
+ "name": "json",
1060
+ "allowNo": false,
1061
+ "type": "boolean"
1062
+ },
1063
+ "profile": {
1064
+ "description": "Named profile from ~/.allscale/config.toml",
1065
+ "helpGroup": "GLOBAL",
1066
+ "name": "profile",
1067
+ "hasDynamicHelp": false,
1068
+ "multiple": false,
1069
+ "type": "option"
1070
+ },
1071
+ "token": {
1072
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
1073
+ "helpGroup": "GLOBAL",
1074
+ "hidden": true,
1075
+ "name": "token",
1076
+ "hasDynamicHelp": false,
1077
+ "multiple": false,
1078
+ "type": "option"
1079
+ },
1080
+ "api-base": {
1081
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
1082
+ "helpGroup": "GLOBAL",
1083
+ "hidden": true,
1084
+ "name": "api-base",
1085
+ "hasDynamicHelp": false,
1086
+ "multiple": false,
1087
+ "type": "option"
1088
+ },
1089
+ "insecure-storage": {
1090
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
1091
+ "helpGroup": "GLOBAL",
1092
+ "name": "insecure-storage",
1093
+ "allowNo": false,
1094
+ "type": "boolean"
1095
+ },
1096
+ "select": {
1097
+ "char": "s",
1098
+ "description": "Override the default selection set with a GraphQL fragment. Default: 'id business_id status amount token_symbol chain sender_display_name sender_message receiver_email reference_id expected_deposit_total funded_amount funded_tx_hash expiry_at claimed_via claim_tx_hash refund_tx_hash refunded_at created_at updated_at'. Other selectable fields on ClaimLink: service_fee, network_fee, cancel_requested_at, claim_url. Pass --show-doc to print the exact GraphQL document that gets sent.",
1099
+ "name": "select",
1100
+ "hasDynamicHelp": false,
1101
+ "multiple": false,
1102
+ "type": "option"
1103
+ },
1104
+ "show-doc": {
1105
+ "description": "Print the GraphQL document to stderr.",
1106
+ "name": "show-doc",
1107
+ "allowNo": false,
1108
+ "type": "boolean"
1109
+ }
1110
+ },
1111
+ "hasDynamicHelp": false,
1112
+ "hiddenAliases": [],
1113
+ "id": "claim-link:get",
1114
+ "pluginAlias": "@allscale/cli",
1115
+ "pluginName": "@allscale/cli",
1116
+ "pluginType": "core",
1117
+ "strict": true,
1118
+ "enableJsonFlag": true,
1119
+ "legacyStagingNoticeShown": false,
1120
+ "emitsOwnOutput": false,
1121
+ "requiresEscapeHatch": false,
1122
+ "requiresInput": false,
1123
+ "isLocalOnly": false,
1124
+ "isESM": false,
1125
+ "relativePath": [
1126
+ "dist",
1127
+ "commands",
1128
+ "claim-link",
1129
+ "get.js"
1130
+ ]
1131
+ },
1132
+ "claim-link:list": {
1133
+ "aliases": [],
1134
+ "args": {},
1135
+ "description": "List your own Claim Links newest first. Defaults to the first 50 rows; pass --input or --all to override.",
1136
+ "examples": [
1137
+ "$ allscale claim-link list",
1138
+ "$ allscale claim-link list --status link_sent --input '{\"limit\":20}'",
1139
+ "$ allscale claim-link list --all --select 'count items { id status amount token_symbol chain }'"
1140
+ ],
1141
+ "flags": {
1142
+ "json": {
1143
+ "description": "Format output as json.",
1144
+ "helpGroup": "GLOBAL",
1145
+ "name": "json",
1146
+ "allowNo": false,
1147
+ "type": "boolean"
1148
+ },
1149
+ "profile": {
1150
+ "description": "Named profile from ~/.allscale/config.toml",
1151
+ "helpGroup": "GLOBAL",
1152
+ "name": "profile",
1153
+ "hasDynamicHelp": false,
1154
+ "multiple": false,
1155
+ "type": "option"
1156
+ },
1157
+ "token": {
1158
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
1159
+ "helpGroup": "GLOBAL",
1160
+ "hidden": true,
1161
+ "name": "token",
1162
+ "hasDynamicHelp": false,
1163
+ "multiple": false,
1164
+ "type": "option"
1165
+ },
1166
+ "api-base": {
1167
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
1168
+ "helpGroup": "GLOBAL",
1169
+ "hidden": true,
1170
+ "name": "api-base",
1171
+ "hasDynamicHelp": false,
1172
+ "multiple": false,
1173
+ "type": "option"
1174
+ },
1175
+ "insecure-storage": {
1176
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
1177
+ "helpGroup": "GLOBAL",
1178
+ "name": "insecure-storage",
1179
+ "allowNo": false,
1180
+ "type": "boolean"
1181
+ },
1182
+ "status": {
1183
+ "description": "Optional ClaimLinkStatus filter. Accepts 1..6 or pending_deposit/link_sent/claiming/claimed/expired/cancelled.",
1184
+ "name": "status",
1185
+ "hasDynamicHelp": false,
1186
+ "multiple": false,
1187
+ "type": "option"
1188
+ },
1189
+ "input": {
1190
+ "char": "i",
1191
+ "description": "QueryInput as JSON, e.g. '{\"skip\":0,\"limit\":50,\"order_by\":[]}'. Overrides the default limit=50.",
1192
+ "exclusive": [
1193
+ "all"
1194
+ ],
1195
+ "name": "input",
1196
+ "hasDynamicHelp": false,
1197
+ "multiple": false,
1198
+ "type": "option"
1199
+ },
1200
+ "all": {
1201
+ "description": "Request all rows in one response (equivalent to --input '{\"limit\":0}'); the CLI rejects read-only responses over 32 MiB.",
1202
+ "exclusive": [
1203
+ "input"
1204
+ ],
1205
+ "name": "all",
1206
+ "allowNo": false,
1207
+ "type": "boolean"
1208
+ },
1209
+ "select": {
1210
+ "char": "s",
1211
+ "description": "Override the default selection set with a GraphQL fragment. Default: 'count items { id business_id status amount token_symbol chain sender_display_name sender_message receiver_email reference_id expected_deposit_total funded_amount funded_tx_hash expiry_at claimed_via claim_tx_hash refund_tx_hash refunded_at created_at updated_at }'. Other selectable fields on ClaimLinkPaginatedResponse.items (ClaimLink): service_fee, network_fee, cancel_requested_at, claim_url. Pass --show-doc to print the exact GraphQL document that gets sent.",
1212
+ "name": "select",
1213
+ "hasDynamicHelp": false,
1214
+ "multiple": false,
1215
+ "type": "option"
1216
+ },
1217
+ "show-doc": {
1218
+ "description": "Print the GraphQL document to stderr.",
1219
+ "name": "show-doc",
1220
+ "allowNo": false,
1221
+ "type": "boolean"
1222
+ }
1223
+ },
1224
+ "hasDynamicHelp": false,
1225
+ "hiddenAliases": [],
1226
+ "id": "claim-link:list",
1227
+ "pluginAlias": "@allscale/cli",
1228
+ "pluginName": "@allscale/cli",
1229
+ "pluginType": "core",
1230
+ "strict": true,
1231
+ "enableJsonFlag": true,
1232
+ "legacyStagingNoticeShown": false,
1233
+ "emitsOwnOutput": false,
1234
+ "requiresEscapeHatch": false,
1235
+ "requiresInput": false,
1236
+ "isLocalOnly": false,
1237
+ "isESM": false,
1238
+ "relativePath": [
1239
+ "dist",
1240
+ "commands",
1241
+ "claim-link",
1242
+ "list.js"
1243
+ ]
1244
+ },
1245
+ "claim-link:preview": {
1246
+ "aliases": [],
1247
+ "args": {},
1248
+ "description": "Preview Claim Link fees without creating a link. Mirrors create_claim_link validation.",
1249
+ "examples": [
1250
+ "$ allscale claim-link preview --amount 10 --chain base --per-transfer-gas 0.02"
1251
+ ],
1252
+ "flags": {
1253
+ "json": {
1254
+ "description": "Format output as json.",
1255
+ "helpGroup": "GLOBAL",
1256
+ "name": "json",
1257
+ "allowNo": false,
1258
+ "type": "boolean"
1259
+ },
1260
+ "profile": {
1261
+ "description": "Named profile from ~/.allscale/config.toml",
1262
+ "helpGroup": "GLOBAL",
1263
+ "name": "profile",
1264
+ "hasDynamicHelp": false,
1265
+ "multiple": false,
1266
+ "type": "option"
1267
+ },
1268
+ "token": {
1269
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
1270
+ "helpGroup": "GLOBAL",
1271
+ "hidden": true,
1272
+ "name": "token",
1273
+ "hasDynamicHelp": false,
1274
+ "multiple": false,
1275
+ "type": "option"
1276
+ },
1277
+ "api-base": {
1278
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
1279
+ "helpGroup": "GLOBAL",
1280
+ "hidden": true,
1281
+ "name": "api-base",
1282
+ "hasDynamicHelp": false,
1283
+ "multiple": false,
1284
+ "type": "option"
1285
+ },
1286
+ "insecure-storage": {
1287
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
1288
+ "helpGroup": "GLOBAL",
1289
+ "name": "insecure-storage",
1290
+ "allowNo": false,
1291
+ "type": "boolean"
1292
+ },
1293
+ "amount": {
1294
+ "description": "Receiver amount as a decimal string in token units; at most 6 effective decimals, or 18 on BSC.",
1295
+ "helpGroup": "REQUIRED",
1296
+ "name": "amount",
1297
+ "required": true,
1298
+ "hasDynamicHelp": false,
1299
+ "multiple": false,
1300
+ "type": "option"
1301
+ },
1302
+ "chain": {
1303
+ "description": "EVM chain for the claim link.",
1304
+ "helpGroup": "REQUIRED",
1305
+ "name": "chain",
1306
+ "required": true,
1307
+ "hasDynamicHelp": false,
1308
+ "multiple": false,
1309
+ "options": [
1310
+ "ethereum",
1311
+ "bsc",
1312
+ "base",
1313
+ "polygon",
1314
+ "arbitrum",
1315
+ "optimism"
1316
+ ],
1317
+ "type": "option"
1318
+ },
1319
+ "per-transfer-gas": {
1320
+ "description": "One ERC-20 transfer's gas estimate in token units.",
1321
+ "helpGroup": "REQUIRED",
1322
+ "name": "per-transfer-gas",
1323
+ "required": true,
1324
+ "hasDynamicHelp": false,
1325
+ "multiple": false,
1326
+ "type": "option"
1327
+ },
1328
+ "stable-coin": {
1329
+ "description": "Stablecoin for the link.",
1330
+ "name": "stable-coin",
1331
+ "default": "USDT",
1332
+ "hasDynamicHelp": false,
1333
+ "multiple": false,
1334
+ "options": [
1335
+ "USDT",
1336
+ "USDC"
1337
+ ],
1338
+ "type": "option"
1339
+ },
1340
+ "show-doc": {
1341
+ "description": "Print the GraphQL document to stderr.",
1342
+ "name": "show-doc",
1343
+ "allowNo": false,
1344
+ "type": "boolean"
1345
+ }
1346
+ },
1347
+ "hasDynamicHelp": false,
1348
+ "hiddenAliases": [],
1349
+ "id": "claim-link:preview",
1350
+ "pluginAlias": "@allscale/cli",
1351
+ "pluginName": "@allscale/cli",
1352
+ "pluginType": "core",
1353
+ "strict": true,
1354
+ "enableJsonFlag": true,
1355
+ "legacyStagingNoticeShown": false,
1356
+ "emitsOwnOutput": false,
1357
+ "requiresEscapeHatch": false,
1358
+ "requiresInput": false,
1359
+ "isLocalOnly": false,
1360
+ "isESM": false,
1361
+ "relativePath": [
1362
+ "dist",
1363
+ "commands",
1364
+ "claim-link",
1365
+ "preview.js"
1366
+ ]
1367
+ },
1368
+ "claim-link:status": {
1369
+ "aliases": [],
1370
+ "args": {},
1371
+ "description": "Read the public receiver-facing status snapshot for a Claim Link bearer token or URL.",
1372
+ "examples": [
1373
+ "$ allscale claim-link status --claim-token <token>",
1374
+ "$ allscale claim-link status --claim-url https://app.allscale.io/claim/<token>"
1375
+ ],
1376
+ "flags": {
1377
+ "json": {
1378
+ "description": "Format output as json.",
1379
+ "helpGroup": "GLOBAL",
1380
+ "name": "json",
1381
+ "allowNo": false,
1382
+ "type": "boolean"
1383
+ },
1384
+ "profile": {
1385
+ "description": "Named profile from ~/.allscale/config.toml",
1386
+ "helpGroup": "GLOBAL",
1387
+ "name": "profile",
1388
+ "hasDynamicHelp": false,
1389
+ "multiple": false,
1390
+ "type": "option"
1391
+ },
1392
+ "token": {
1393
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
1394
+ "helpGroup": "GLOBAL",
1395
+ "hidden": true,
1396
+ "name": "token",
1397
+ "hasDynamicHelp": false,
1398
+ "multiple": false,
1399
+ "type": "option"
1400
+ },
1401
+ "api-base": {
1402
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
1403
+ "helpGroup": "GLOBAL",
1404
+ "hidden": true,
1405
+ "name": "api-base",
1406
+ "hasDynamicHelp": false,
1407
+ "multiple": false,
1408
+ "type": "option"
1409
+ },
1410
+ "insecure-storage": {
1411
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
1412
+ "helpGroup": "GLOBAL",
1413
+ "name": "insecure-storage",
1414
+ "allowNo": false,
1415
+ "type": "boolean"
1416
+ },
1417
+ "claim-token": {
1418
+ "description": "Raw bearer claim token. Secret: prefer env/history-safe invocation.",
1419
+ "helpGroup": "REQUIRED (ONE OF)",
1420
+ "name": "claim-token",
1421
+ "hasDynamicHelp": false,
1422
+ "multiple": false,
1423
+ "type": "option"
1424
+ },
1425
+ "claim-url": {
1426
+ "description": "Canonical claim URL, or a same-origin /s/ short URL resolved with one unauthenticated 302.",
1427
+ "helpGroup": "REQUIRED (ONE OF)",
1428
+ "name": "claim-url",
1429
+ "hasDynamicHelp": false,
1430
+ "multiple": false,
1431
+ "type": "option"
1432
+ }
1433
+ },
1434
+ "hasDynamicHelp": false,
1435
+ "hiddenAliases": [],
1436
+ "id": "claim-link:status",
1437
+ "pluginAlias": "@allscale/cli",
1438
+ "pluginName": "@allscale/cli",
1439
+ "pluginType": "core",
1440
+ "strict": true,
1441
+ "usage": "claim-link status (--claim-token <value> | --claim-url <value>) [--json] [--profile <value>] [--insecure-storage]",
1442
+ "enableJsonFlag": true,
1443
+ "legacyStagingNoticeShown": false,
1444
+ "emitsOwnOutput": false,
1445
+ "requiresEscapeHatch": false,
1446
+ "requiresInput": true,
1447
+ "isLocalOnly": false,
1448
+ "isESM": false,
1449
+ "relativePath": [
1450
+ "dist",
1451
+ "commands",
1452
+ "claim-link",
1453
+ "status.js"
1454
+ ]
1455
+ },
1456
+ "invoice:get": {
1457
+ "aliases": [],
1458
+ "args": {
1459
+ "id": {
1460
+ "description": "Invoice id_str (the backend's Payment.id_str)",
1461
+ "name": "id",
1462
+ "required": true
1463
+ }
1464
+ },
1465
+ "description": "Fetch one invoice by id. Wraps the `payment` GraphQL query.",
1466
+ "examples": [
1467
+ "$ allscale invoice get 65ab1234567890abcdef0123",
1468
+ "$ allscale invoice get 65ab... --select 'id status amount currency'"
1469
+ ],
1470
+ "flags": {
1471
+ "json": {
1472
+ "description": "Format output as json.",
1473
+ "helpGroup": "GLOBAL",
1474
+ "name": "json",
1475
+ "allowNo": false,
1476
+ "type": "boolean"
1477
+ },
1478
+ "profile": {
1479
+ "description": "Named profile from ~/.allscale/config.toml",
1480
+ "helpGroup": "GLOBAL",
1481
+ "name": "profile",
1482
+ "hasDynamicHelp": false,
1483
+ "multiple": false,
1484
+ "type": "option"
1485
+ },
1486
+ "token": {
1487
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
1488
+ "helpGroup": "GLOBAL",
1489
+ "hidden": true,
1490
+ "name": "token",
1491
+ "hasDynamicHelp": false,
1492
+ "multiple": false,
1493
+ "type": "option"
1494
+ },
1495
+ "api-base": {
1496
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
1497
+ "helpGroup": "GLOBAL",
1498
+ "hidden": true,
1499
+ "name": "api-base",
1500
+ "hasDynamicHelp": false,
1501
+ "multiple": false,
1502
+ "type": "option"
1503
+ },
1504
+ "insecure-storage": {
1505
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
1506
+ "helpGroup": "GLOBAL",
1507
+ "name": "insecure-storage",
1508
+ "allowNo": false,
1509
+ "type": "boolean"
1510
+ },
1511
+ "select": {
1512
+ "char": "s",
1513
+ "description": "Override the default selection set with a GraphQL fragment. Default: 'created_at updated_at id recipient_business_id sender_business_id sender_contact_id payment_type accepted_stable_coins payment_extra_info currency status amount_cents amount_coins invoice_url invoice_visible_id tax_id error_message memo due_datetime display_amount encrypted_id'. Pass --show-doc to print the exact GraphQL document that gets sent.",
1514
+ "name": "select",
1515
+ "hasDynamicHelp": false,
1516
+ "multiple": false,
1517
+ "type": "option"
1518
+ },
1519
+ "show-doc": {
1520
+ "description": "Print the generated GraphQL document to stderr",
1521
+ "name": "show-doc",
1522
+ "allowNo": false,
1523
+ "type": "boolean"
1524
+ }
1525
+ },
1526
+ "hasDynamicHelp": false,
1527
+ "hiddenAliases": [],
1528
+ "id": "invoice:get",
1529
+ "pluginAlias": "@allscale/cli",
1530
+ "pluginName": "@allscale/cli",
1531
+ "pluginType": "core",
1532
+ "strict": true,
1533
+ "enableJsonFlag": true,
1534
+ "legacyStagingNoticeShown": false,
1535
+ "emitsOwnOutput": false,
1536
+ "requiresEscapeHatch": false,
1537
+ "requiresInput": false,
1538
+ "isLocalOnly": false,
1539
+ "isESM": false,
1540
+ "relativePath": [
1541
+ "dist",
1542
+ "commands",
1543
+ "invoice",
1544
+ "get.js"
1545
+ ]
1546
+ },
1547
+ "invoice:list": {
1548
+ "aliases": [],
1549
+ "args": {},
1550
+ "description": "List invoices for a business. Wraps the `payments` GraphQL query. Defaults to the first 50 rows; pass --input '{\"limit\":N,\"skip\":M}' to paginate, or --all to request one unpaginated response. Filter with --status / --payment-type (repeatable), the creation-date range --from / --to (half-open: --from inclusive, --to exclusive), and --to-email, which narrows this both-directions view to the invoices you ISSUED to that contact.",
1551
+ "examples": [
1552
+ "$ allscale invoice list",
1553
+ "$ allscale invoice list --business-id <id>",
1554
+ "$ allscale invoice list --input '{\"limit\":50,\"skip\":50}' # second page",
1555
+ "$ allscale invoice list --all # everything (be careful)",
1556
+ "$ allscale invoice list --input '{\"limit\":5}' --select 'count items { id status amount }'",
1557
+ "$ allscale invoice list --status SENT --status OVERDUE # unpaid work",
1558
+ "$ allscale invoice list --payment-type USDC # only USDC invoices",
1559
+ "$ allscale invoice list --from 2026-07-01 --to 2026-08-01 # exactly July (--to is exclusive)",
1560
+ "$ allscale invoice list --to-email client@example.com # what you billed that customer"
1561
+ ],
1562
+ "flags": {
1563
+ "json": {
1564
+ "description": "Format output as json.",
1565
+ "helpGroup": "GLOBAL",
1566
+ "name": "json",
1567
+ "allowNo": false,
1568
+ "type": "boolean"
1569
+ },
1570
+ "profile": {
1571
+ "description": "Named profile from ~/.allscale/config.toml",
1572
+ "helpGroup": "GLOBAL",
1573
+ "name": "profile",
1574
+ "hasDynamicHelp": false,
1575
+ "multiple": false,
1576
+ "type": "option"
1577
+ },
1578
+ "token": {
1579
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
1580
+ "helpGroup": "GLOBAL",
1581
+ "hidden": true,
1582
+ "name": "token",
1583
+ "hasDynamicHelp": false,
1584
+ "multiple": false,
1585
+ "type": "option"
1586
+ },
1587
+ "api-base": {
1588
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
1589
+ "helpGroup": "GLOBAL",
1590
+ "hidden": true,
1591
+ "name": "api-base",
1592
+ "hasDynamicHelp": false,
1593
+ "multiple": false,
1594
+ "type": "option"
1595
+ },
1596
+ "insecure-storage": {
1597
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
1598
+ "helpGroup": "GLOBAL",
1599
+ "name": "insecure-storage",
1600
+ "allowNo": false,
1601
+ "type": "boolean"
1602
+ },
1603
+ "business-id": {
1604
+ "char": "b",
1605
+ "description": "Business id_str. Defaults to the logged-in user's business when omitted.",
1606
+ "name": "business-id",
1607
+ "hasDynamicHelp": false,
1608
+ "multiple": false,
1609
+ "type": "option"
1610
+ },
1611
+ "input": {
1612
+ "char": "i",
1613
+ "description": "QueryInput as JSON. Supported fields: limit (0 = unbounded), skip, order_by (array of field names, '-field' for descending), created_at_gte / created_at_lte (both INCLUSIVE, format YYYY-MM-DDTHH:MM:SS.ffffffZ — the fractional seconds and trailing Z are required). Only these fields are accepted. Overrides the default limit=50. Prefer --from / --to, which accept ordinary dates, normalize them for you, and give you a half-open range.",
1614
+ "exclusive": [
1615
+ "all"
1616
+ ],
1617
+ "name": "input",
1618
+ "hasDynamicHelp": false,
1619
+ "multiple": false,
1620
+ "type": "option"
1621
+ },
1622
+ "status": {
1623
+ "description": "Only invoices in this status. Repeatable (matches any of them). Accepted: OVERDUE, FAILED, DRAFT, SENT, ACKNOWLEDGED, PROCESSING, PAID (case-insensitive), or a raw integer.",
1624
+ "name": "status",
1625
+ "hasDynamicHelp": false,
1626
+ "multiple": true,
1627
+ "type": "option"
1628
+ },
1629
+ "payment-type": {
1630
+ "description": "Only invoices denominated in this currency. Repeatable (matches any of them). Accepted: CURRENCY (fiat), USDT, USDC, BUSD, DAI, TUSD, PAX, GUSD, USTC, FRAX, EURS (case-insensitive), or a raw integer.",
1631
+ "name": "payment-type",
1632
+ "hasDynamicHelp": false,
1633
+ "multiple": true,
1634
+ "type": "option"
1635
+ },
1636
+ "from": {
1637
+ "description": "Only invoices created at or after this time. INCLUSIVE — an invoice created at exactly this instant is included. Accepts a date (2026-08-05), a naive datetime (2026-08-05T12:30:00, read as UTC), or an offset datetime (2026-08-05T20:30:00+08:00); the CLI converts to UTC and pads it to the backend's required YYYY-MM-DDTHH:MM:SS.ffffffZ.",
1638
+ "name": "from",
1639
+ "hasDynamicHelp": false,
1640
+ "multiple": false,
1641
+ "type": "option"
1642
+ },
1643
+ "to": {
1644
+ "description": "Only invoices created strictly before this time. EXCLUSIVE — an invoice created at exactly this instant is NOT included, so --from 2026-07-01 --to 2026-08-01 is exactly July and consecutive ranges never overlap. A bare date therefore covers the whole day before it. Accepts a date (2026-08-05), a naive datetime (2026-08-05T12:30:00, read as UTC), or an offset datetime (2026-08-05T20:30:00+08:00); the CLI converts to UTC and pads it to the backend's required YYYY-MM-DDTHH:MM:SS.ffffffZ.",
1645
+ "name": "to",
1646
+ "hasDynamicHelp": false,
1647
+ "multiple": false,
1648
+ "type": "option"
1649
+ },
1650
+ "to-email": {
1651
+ "description": "Only invoices you ISSUED to the contact with this email. The invoice's contact record belongs to the business that issued it, so this filter is inherently issue-side: on `invoice received` it is exactly 'invoices I billed to them', and on `invoice list` it narrows the both-directions view to the ones you issued. The email must match a contact in your business EXACTLY (no fuzzy match); an email with no contact is an error, not an empty list, because every invoice is issued to a contact. Under an agent key the contact lookup additionally requires the contact:read_only scope.",
1652
+ "name": "to-email",
1653
+ "hasDynamicHelp": false,
1654
+ "multiple": false,
1655
+ "type": "option"
1656
+ },
1657
+ "all": {
1658
+ "description": "Request all rows in one response (equivalent to --input '{\"limit\":0}'); the CLI rejects read-only responses over 32 MiB.",
1659
+ "exclusive": [
1660
+ "input"
1661
+ ],
1662
+ "name": "all",
1663
+ "allowNo": false,
1664
+ "type": "boolean"
1665
+ },
1666
+ "select": {
1667
+ "char": "s",
1668
+ "description": "Override the default selection set with a GraphQL fragment. Default: 'count items { created_at updated_at id recipient_business_id sender_business_id sender_contact_id payment_type accepted_stable_coins payment_extra_info currency status amount_cents amount_coins invoice_url invoice_visible_id tax_id error_message memo due_datetime display_amount encrypted_id }'. Pass --show-doc to print the exact GraphQL document that gets sent.",
1669
+ "name": "select",
1670
+ "hasDynamicHelp": false,
1671
+ "multiple": false,
1672
+ "type": "option"
1673
+ },
1674
+ "show-doc": {
1675
+ "description": "Print the generated GraphQL document to stderr",
1676
+ "name": "show-doc",
1677
+ "allowNo": false,
1678
+ "type": "boolean"
1679
+ }
1680
+ },
1681
+ "hasDynamicHelp": false,
1682
+ "hiddenAliases": [],
1683
+ "id": "invoice:list",
1684
+ "pluginAlias": "@allscale/cli",
1685
+ "pluginName": "@allscale/cli",
1686
+ "pluginType": "core",
1687
+ "strict": true,
1688
+ "enableJsonFlag": true,
1689
+ "legacyStagingNoticeShown": false,
1690
+ "emitsOwnOutput": false,
1691
+ "requiresEscapeHatch": false,
1692
+ "requiresInput": false,
1693
+ "isLocalOnly": false,
1694
+ "isESM": false,
1695
+ "relativePath": [
1696
+ "dist",
1697
+ "commands",
1698
+ "invoice",
1699
+ "list.js"
1700
+ ]
1701
+ },
1702
+ "invoice:pay": {
1703
+ "aliases": [],
1704
+ "args": {
1705
+ "id": {
1706
+ "description": "Invoice id_str (the backend Payment.id_str) to pay.",
1707
+ "name": "id",
1708
+ "required": true
1709
+ }
1710
+ },
1711
+ "description": "Pay a received invoice from your AllScale wallet. Resolves the invoice's destination + amount, moves the funds via the same signing path as `wallet send` (confirmed in the browser at /cli), then reports and confirms the payment. Needs TWO scopes: `invoice:all` to create, report and confirm the pay intent, and `wallet:read_only` to look up the address you are paying FROM. Neither flow grants `invoice:all` for you: on `device-login` the Invoices toggle starts at Read, so tick its write tier on the approval screen; on `otp-login` pass BOTH --scopes invoice:all --scopes wallet:read_only, because naming any scope turns every unnamed category off.",
1712
+ "examples": [
1713
+ "$ allscale invoice pay 65ab1234567890abcdef0123",
1714
+ "$ allscale invoice pay 65ab... --chain bsc --stable-coin USDT"
1715
+ ],
1716
+ "flags": {
1717
+ "json": {
1718
+ "description": "Format output as json.",
1719
+ "helpGroup": "GLOBAL",
1720
+ "name": "json",
1721
+ "allowNo": false,
1722
+ "type": "boolean"
1723
+ },
1724
+ "profile": {
1725
+ "description": "Named profile from ~/.allscale/config.toml",
1726
+ "helpGroup": "GLOBAL",
1727
+ "name": "profile",
1728
+ "hasDynamicHelp": false,
1729
+ "multiple": false,
1730
+ "type": "option"
1731
+ },
1732
+ "token": {
1733
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
1734
+ "helpGroup": "GLOBAL",
1735
+ "hidden": true,
1736
+ "name": "token",
1737
+ "hasDynamicHelp": false,
1738
+ "multiple": false,
1739
+ "type": "option"
1740
+ },
1741
+ "api-base": {
1742
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
1743
+ "helpGroup": "GLOBAL",
1744
+ "hidden": true,
1745
+ "name": "api-base",
1746
+ "hasDynamicHelp": false,
1747
+ "multiple": false,
1748
+ "type": "option"
1749
+ },
1750
+ "insecure-storage": {
1751
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
1752
+ "helpGroup": "GLOBAL",
1753
+ "name": "insecure-storage",
1754
+ "allowNo": false,
1755
+ "type": "boolean"
1756
+ },
1757
+ "business-id": {
1758
+ "description": "Your own business id. Optional and redundant — payment always comes from the wallet of the business you are signed in as. Supplying a different business id is rejected rather than silently paying from your own wallet; omit the flag unless a script needs to assert which business it is acting as.",
1759
+ "name": "business-id",
1760
+ "hasDynamicHelp": false,
1761
+ "multiple": false,
1762
+ "type": "option"
1763
+ },
1764
+ "chain": {
1765
+ "description": "Chain to pay on. Optional when the invoice lists a single receiving wallet; required when it lists several.",
1766
+ "name": "chain",
1767
+ "hasDynamicHelp": false,
1768
+ "multiple": false,
1769
+ "options": [
1770
+ "ethereum",
1771
+ "bsc",
1772
+ "base",
1773
+ "polygon",
1774
+ "arbitrum",
1775
+ "optimism"
1776
+ ],
1777
+ "type": "option"
1778
+ },
1779
+ "stable-coin": {
1780
+ "description": "Stablecoin to pay with. Defaults to the invoice's own currency (from its payment_type); only needed to disambiguate an invoice that doesn't pin one. A value that conflicts with the invoice is rejected.",
1781
+ "name": "stable-coin",
1782
+ "hasDynamicHelp": false,
1783
+ "multiple": false,
1784
+ "options": [
1785
+ "USDT",
1786
+ "USDC"
1787
+ ],
1788
+ "type": "option"
1789
+ },
1790
+ "browser-base": {
1791
+ "description": "Override the base URL of the /cli confirmation link (defaults to the session API base). (Browser-bridge only — not valid with --headless.)",
1792
+ "exclusive": [
1793
+ "headless"
1794
+ ],
1795
+ "name": "browser-base",
1796
+ "hasDynamicHelp": false,
1797
+ "multiple": false,
1798
+ "type": "option"
1799
+ },
1800
+ "bridge-timeout": {
1801
+ "description": "Override the confirmation deadline in milliseconds (default 180000). (Browser-bridge only — not valid with --headless.)",
1802
+ "exclusive": [
1803
+ "headless"
1804
+ ],
1805
+ "name": "bridge-timeout",
1806
+ "default": 180000,
1807
+ "hasDynamicHelp": false,
1808
+ "multiple": false,
1809
+ "type": "option"
1810
+ },
1811
+ "headless": {
1812
+ "description": "Pay without a browser via Turnkey email-OTP (accounts with email-OTP enabled and no passkey; passkey accounts must use the browser flow). Supply the OTP via --otp-stdin (recommended for automation) or interactively; --otp / ALLSCALE_OTP work ONLY combined with --otp-id. This removes the in-browser human confirmation, so use it only on a trusted machine. Requires an existing legacy JWT session, which this build cannot create — use the browser-bridge flow instead.",
1813
+ "name": "headless",
1814
+ "allowNo": false,
1815
+ "type": "boolean"
1816
+ },
1817
+ "otp": {
1818
+ "dependsOn": [
1819
+ "headless"
1820
+ ],
1821
+ "description": "Turnkey signing OTP code (with --headless). Only works combined with --otp-id (an externally-triggered flow): without --otp-id the CLI emails a FRESH code at run time, so any pre-set --otp / ALLSCALE_OTP value is stale and fails with 'Invalid or expired OTP code'. For automation prefer --otp-stdin (CLI emails; pipe the fresh code back). Passing --otp as a flag also exposes it in shell history AND the process list (ps / /proc/<pid>/cmdline).",
1822
+ "exclusive": [
1823
+ "otp-stdin"
1824
+ ],
1825
+ "name": "otp",
1826
+ "hasDynamicHelp": false,
1827
+ "multiple": false,
1828
+ "type": "option"
1829
+ },
1830
+ "otp-stdin": {
1831
+ "dependsOn": [
1832
+ "headless"
1833
+ ],
1834
+ "description": "Read the Turnkey signing OTP as one line from stdin (with --headless).",
1835
+ "name": "otp-stdin",
1836
+ "allowNo": false,
1837
+ "type": "boolean"
1838
+ },
1839
+ "otp-id": {
1840
+ "dependsOn": [
1841
+ "headless"
1842
+ ],
1843
+ "description": "Skip the OTP-send step and reuse a prior Turnkey otpId (with --headless). The OTP code itself is still required via --otp / ALLSCALE_OTP / --otp-stdin.",
1844
+ "name": "otp-id",
1845
+ "hasDynamicHelp": false,
1846
+ "multiple": false,
1847
+ "type": "option"
1848
+ }
1849
+ },
1850
+ "hasDynamicHelp": false,
1851
+ "hiddenAliases": [],
1852
+ "id": "invoice:pay",
1853
+ "pluginAlias": "@allscale/cli",
1854
+ "pluginName": "@allscale/cli",
1855
+ "pluginType": "core",
1856
+ "strict": true,
1857
+ "enableJsonFlag": true,
1858
+ "legacyStagingNoticeShown": false,
1859
+ "emitsOwnOutput": false,
1860
+ "requiresEscapeHatch": false,
1861
+ "requiresInput": false,
1862
+ "isLocalOnly": false,
1863
+ "isESM": false,
1864
+ "relativePath": [
1865
+ "dist",
1866
+ "commands",
1867
+ "invoice",
1868
+ "pay.js"
1869
+ ]
1870
+ },
1871
+ "invoice:received": {
1872
+ "aliases": [],
1873
+ "args": {},
1874
+ "description": "List invoices you are the PAYEE on — where the money is owed to your business. Wraps `recipient_payments` (the backend's `recipient` is the payee). This INCLUDES every invoice you issued with `invoice send`. Defaults to the first 50 rows; pass --input or --all to override. Filter with --status / --payment-type (repeatable), the creation-date range --from / --to (half-open: --from inclusive, --to exclusive), and --to-email to narrow to the invoices you billed to one contact.",
1875
+ "examples": [
1876
+ "$ allscale invoice received",
1877
+ "$ allscale invoice received --business-id <id> --input '{\"limit\":10}'",
1878
+ "$ allscale invoice received --all",
1879
+ "$ allscale invoice received --status SENT --status OVERDUE",
1880
+ "$ allscale invoice received --from 2026-07-01 --to 2026-08-01",
1881
+ "$ allscale invoice received --to-email client@example.com"
1882
+ ],
1883
+ "flags": {
1884
+ "json": {
1885
+ "description": "Format output as json.",
1886
+ "helpGroup": "GLOBAL",
1887
+ "name": "json",
1888
+ "allowNo": false,
1889
+ "type": "boolean"
1890
+ },
1891
+ "profile": {
1892
+ "description": "Named profile from ~/.allscale/config.toml",
1893
+ "helpGroup": "GLOBAL",
1894
+ "name": "profile",
1895
+ "hasDynamicHelp": false,
1896
+ "multiple": false,
1897
+ "type": "option"
1898
+ },
1899
+ "token": {
1900
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
1901
+ "helpGroup": "GLOBAL",
1902
+ "hidden": true,
1903
+ "name": "token",
1904
+ "hasDynamicHelp": false,
1905
+ "multiple": false,
1906
+ "type": "option"
1907
+ },
1908
+ "api-base": {
1909
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
1910
+ "helpGroup": "GLOBAL",
1911
+ "hidden": true,
1912
+ "name": "api-base",
1913
+ "hasDynamicHelp": false,
1914
+ "multiple": false,
1915
+ "type": "option"
1916
+ },
1917
+ "insecure-storage": {
1918
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
1919
+ "helpGroup": "GLOBAL",
1920
+ "name": "insecure-storage",
1921
+ "allowNo": false,
1922
+ "type": "boolean"
1923
+ },
1924
+ "business-id": {
1925
+ "char": "b",
1926
+ "description": "Business id_str. Defaults to the logged-in user's business when omitted.",
1927
+ "name": "business-id",
1928
+ "hasDynamicHelp": false,
1929
+ "multiple": false,
1930
+ "type": "option"
1931
+ },
1932
+ "input": {
1933
+ "char": "i",
1934
+ "description": "QueryInput as JSON. Supported fields: limit (0 = unbounded), skip, order_by (array of field names, '-field' for descending), created_at_gte / created_at_lte (both INCLUSIVE, format YYYY-MM-DDTHH:MM:SS.ffffffZ — the fractional seconds and trailing Z are required). Only these fields are accepted. Overrides the default limit=50. Prefer --from / --to, which accept ordinary dates, normalize them for you, and give you a half-open range.",
1935
+ "exclusive": [
1936
+ "all"
1937
+ ],
1938
+ "name": "input",
1939
+ "hasDynamicHelp": false,
1940
+ "multiple": false,
1941
+ "type": "option"
1942
+ },
1943
+ "status": {
1944
+ "description": "Only invoices in this status. Repeatable (matches any of them). Accepted: OVERDUE, FAILED, DRAFT, SENT, ACKNOWLEDGED, PROCESSING, PAID (case-insensitive), or a raw integer.",
1945
+ "name": "status",
1946
+ "hasDynamicHelp": false,
1947
+ "multiple": true,
1948
+ "type": "option"
1949
+ },
1950
+ "payment-type": {
1951
+ "description": "Only invoices denominated in this currency. Repeatable (matches any of them). Accepted: CURRENCY (fiat), USDT, USDC, BUSD, DAI, TUSD, PAX, GUSD, USTC, FRAX, EURS (case-insensitive), or a raw integer.",
1952
+ "name": "payment-type",
1953
+ "hasDynamicHelp": false,
1954
+ "multiple": true,
1955
+ "type": "option"
1956
+ },
1957
+ "from": {
1958
+ "description": "Only invoices created at or after this time. INCLUSIVE — an invoice created at exactly this instant is included. Accepts a date (2026-08-05), a naive datetime (2026-08-05T12:30:00, read as UTC), or an offset datetime (2026-08-05T20:30:00+08:00); the CLI converts to UTC and pads it to the backend's required YYYY-MM-DDTHH:MM:SS.ffffffZ.",
1959
+ "name": "from",
1960
+ "hasDynamicHelp": false,
1961
+ "multiple": false,
1962
+ "type": "option"
1963
+ },
1964
+ "to": {
1965
+ "description": "Only invoices created strictly before this time. EXCLUSIVE — an invoice created at exactly this instant is NOT included, so --from 2026-07-01 --to 2026-08-01 is exactly July and consecutive ranges never overlap. A bare date therefore covers the whole day before it. Accepts a date (2026-08-05), a naive datetime (2026-08-05T12:30:00, read as UTC), or an offset datetime (2026-08-05T20:30:00+08:00); the CLI converts to UTC and pads it to the backend's required YYYY-MM-DDTHH:MM:SS.ffffffZ.",
1966
+ "name": "to",
1967
+ "hasDynamicHelp": false,
1968
+ "multiple": false,
1969
+ "type": "option"
1970
+ },
1971
+ "to-email": {
1972
+ "description": "Only invoices you ISSUED to the contact with this email. The invoice's contact record belongs to the business that issued it, so this filter is inherently issue-side: on `invoice received` it is exactly 'invoices I billed to them', and on `invoice list` it narrows the both-directions view to the ones you issued. The email must match a contact in your business EXACTLY (no fuzzy match); an email with no contact is an error, not an empty list, because every invoice is issued to a contact. Under an agent key the contact lookup additionally requires the contact:read_only scope.",
1973
+ "name": "to-email",
1974
+ "hasDynamicHelp": false,
1975
+ "multiple": false,
1976
+ "type": "option"
1977
+ },
1978
+ "all": {
1979
+ "description": "Request all rows in one response; the CLI rejects read-only responses over 32 MiB.",
1980
+ "exclusive": [
1981
+ "input"
1982
+ ],
1983
+ "name": "all",
1984
+ "allowNo": false,
1985
+ "type": "boolean"
1986
+ },
1987
+ "select": {
1988
+ "char": "s",
1989
+ "description": "Override the default selection set with a GraphQL fragment. Default: 'count items { created_at updated_at id recipient_business_id sender_business_id sender_contact_id payment_type accepted_stable_coins payment_extra_info currency status amount_cents amount_coins invoice_url invoice_visible_id tax_id error_message memo due_datetime display_amount encrypted_id }'. Pass --show-doc to print the exact GraphQL document that gets sent.",
1990
+ "name": "select",
1991
+ "hasDynamicHelp": false,
1992
+ "multiple": false,
1993
+ "type": "option"
1994
+ },
1995
+ "show-doc": {
1996
+ "description": "Print the generated GraphQL document to stderr",
1997
+ "name": "show-doc",
1998
+ "allowNo": false,
1999
+ "type": "boolean"
2000
+ }
2001
+ },
2002
+ "hasDynamicHelp": false,
2003
+ "hiddenAliases": [],
2004
+ "id": "invoice:received",
2005
+ "pluginAlias": "@allscale/cli",
2006
+ "pluginName": "@allscale/cli",
2007
+ "pluginType": "core",
2008
+ "strict": true,
2009
+ "enableJsonFlag": true,
2010
+ "legacyStagingNoticeShown": false,
2011
+ "emitsOwnOutput": false,
2012
+ "requiresEscapeHatch": false,
2013
+ "requiresInput": false,
2014
+ "isLocalOnly": false,
2015
+ "isESM": false,
2016
+ "relativePath": [
2017
+ "dist",
2018
+ "commands",
2019
+ "invoice",
2020
+ "received.js"
2021
+ ]
2022
+ },
2023
+ "invoice:send": {
2024
+ "aliases": [],
2025
+ "args": {},
2026
+ "description": "Send an invoice by email. Resolves the contact, selects receiving wallets, renders a minimal HTML invoice, and submits create_payment through the authenticated session. No browser ceremony — the payer signs when they pay, not when you issue. Returns a fixed summary (payment_id, contact, amount, wallet count) rather than a GraphQL selection, which is why there is no --select here; read the created invoice back with `invoice get <payment_id> --select ...`. Note the direction: an invoice you send lists YOU as the payee, so it appears under `invoice received`, not `invoice sent`.",
2027
+ "examples": [
2028
+ "$ allscale invoice send --to-email client@example.com --amount 1.00",
2029
+ "$ allscale invoice send --to-email client@example.com --amount 250 --payment-type 2 --currency-label USDC --memo \"January retainer\" --due 2026-06-01",
2030
+ "$ allscale invoice send --to-contact-id 695da2cd3b9598f5edcdcb56 --amount 50 --line \"Design|1|30.00\" --line \"Copy|1|20.00\"",
2031
+ "$ allscale invoice send --to-email client@example.com --amount 75 --line \"Consulting retainer\"",
2032
+ "$ allscale invoice send --to-email client@example.com --amount 350 --line \"Discovery (4h)|4|25.00\" --line \"Implementation (10h)|10|25.00\"",
2033
+ "$ allscale invoice send --to-email client@example.com --line \"Discovery (4h)|4|25.00\" --line \"Implementation (10h)|10|25.00\"",
2034
+ "$ allscale invoice send --to-email client@example.com --amount 100 --wallet-id 66ac....",
2035
+ "$ allscale invoice send --to-email newclient@example.com --amount 100 --auto-create-contact",
2036
+ "$ allscale invoice send --to-email billing@acme.com --amount 100 --auto-create-contact --contact-name \"Acme Inc\""
2037
+ ],
2038
+ "flags": {
2039
+ "json": {
2040
+ "description": "Format output as json.",
2041
+ "helpGroup": "GLOBAL",
2042
+ "name": "json",
2043
+ "allowNo": false,
2044
+ "type": "boolean"
2045
+ },
2046
+ "profile": {
2047
+ "description": "Named profile from ~/.allscale/config.toml",
2048
+ "helpGroup": "GLOBAL",
2049
+ "name": "profile",
2050
+ "hasDynamicHelp": false,
2051
+ "multiple": false,
2052
+ "type": "option"
2053
+ },
2054
+ "token": {
2055
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
2056
+ "helpGroup": "GLOBAL",
2057
+ "hidden": true,
2058
+ "name": "token",
2059
+ "hasDynamicHelp": false,
2060
+ "multiple": false,
2061
+ "type": "option"
2062
+ },
2063
+ "api-base": {
2064
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
2065
+ "helpGroup": "GLOBAL",
2066
+ "hidden": true,
2067
+ "name": "api-base",
2068
+ "hasDynamicHelp": false,
2069
+ "multiple": false,
2070
+ "type": "option"
2071
+ },
2072
+ "insecure-storage": {
2073
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
2074
+ "helpGroup": "GLOBAL",
2075
+ "name": "insecure-storage",
2076
+ "allowNo": false,
2077
+ "type": "boolean"
2078
+ },
2079
+ "to-email": {
2080
+ "description": "Email of the contact to invoice. Resolves via contact_by_email. If no contact exists for the email, add --auto-create-contact to create one before invoicing. Mutually exclusive with --to-contact-id.",
2081
+ "exclusive": [
2082
+ "to-contact-id"
2083
+ ],
2084
+ "helpGroup": "REQUIRED (ONE OF)",
2085
+ "name": "to-email",
2086
+ "hasDynamicHelp": false,
2087
+ "multiple": false,
2088
+ "type": "option"
2089
+ },
2090
+ "to-contact-id": {
2091
+ "description": "Contact id_str directly (skip the email lookup). Mutually exclusive with --to-email.",
2092
+ "exclusive": [
2093
+ "to-email"
2094
+ ],
2095
+ "helpGroup": "REQUIRED (ONE OF)",
2096
+ "name": "to-contact-id",
2097
+ "hasDynamicHelp": false,
2098
+ "multiple": false,
2099
+ "type": "option"
2100
+ },
2101
+ "amount": {
2102
+ "description": "Decimal amount in coin units (e.g. \"1.00\" for one USDT; minimum 0.10 for USDT/USDC). Optional when every --line is the three-field \"<description>|<quantity>|<amount>\" form — in that case the CLI sums the lines to derive the invoice total. Required otherwise.",
2103
+ "helpGroup": "CONDITIONAL",
2104
+ "name": "amount",
2105
+ "hasDynamicHelp": false,
2106
+ "multiple": false,
2107
+ "type": "option"
2108
+ },
2109
+ "auto-create-contact": {
2110
+ "description": "If --to-email doesn't resolve to an existing contact, auto-create the contact (using the email + your business as owner; name defaults to the full email address, override with --contact-name) and proceed with the invoice. Ignored when the contact already exists (safe to leave on in scripts). Requires --to-email; not valid with --to-contact-id.",
2111
+ "exclusive": [
2112
+ "to-contact-id"
2113
+ ],
2114
+ "name": "auto-create-contact",
2115
+ "allowNo": false,
2116
+ "type": "boolean"
2117
+ },
2118
+ "contact-name": {
2119
+ "description": "Display name to use when --auto-create-contact creates a new contact. Optional — defaults to the full email address (unique enough to avoid the BE's per-business name-uniqueness collision). Has no effect when the contact already exists or when --auto-create-contact is not set.",
2120
+ "exclusive": [
2121
+ "to-contact-id"
2122
+ ],
2123
+ "name": "contact-name",
2124
+ "hasDynamicHelp": false,
2125
+ "multiple": false,
2126
+ "type": "option"
2127
+ },
2128
+ "currency-label": {
2129
+ "description": "Label shown next to the amount in the rendered invoice (e.g. USDT, USDC). Display only; select the stablecoin with --payment-type=1 (USDT) or --payment-type=2 (USDC). --currency-int applies only to --payment-type=0 fiat invoices. Default: USDT.",
2130
+ "name": "currency-label",
2131
+ "default": "USDT",
2132
+ "hasDynamicHelp": false,
2133
+ "multiple": false,
2134
+ "type": "option"
2135
+ },
2136
+ "currency-int": {
2137
+ "description": "Backend Currency enum value (USD=1, AED=2, ...). Only sent when --payment-type=0 (CURRENCY/fiat invoice); ignored for stablecoin payment types. Default: 1 (USD).",
2138
+ "name": "currency-int",
2139
+ "default": 1,
2140
+ "hasDynamicHelp": false,
2141
+ "multiple": false,
2142
+ "type": "option"
2143
+ },
2144
+ "payment-type": {
2145
+ "description": "CreatePaymentInput.payment_type. Run `allscale describe create_payment` for the enum. Default: 1.",
2146
+ "name": "payment-type",
2147
+ "default": 1,
2148
+ "hasDynamicHelp": false,
2149
+ "multiple": false,
2150
+ "type": "option"
2151
+ },
2152
+ "memo": {
2153
+ "description": "Free-form invoice memo / description shown to the payer.",
2154
+ "name": "memo",
2155
+ "hasDynamicHelp": false,
2156
+ "multiple": false,
2157
+ "type": "option"
2158
+ },
2159
+ "due": {
2160
+ "description": "Invoice due date / datetime (ISO 8601), e.g. 2026-06-01, 2026-06-01T09:30:00, 2026-06-01T09:30:00Z, or 2026-06-01T09:30:00+08:00. A value without a UTC offset is read as UTC (so 2026-06-01 means 2026-06-01T00:00:00Z) — stated explicitly because interpreting it in the local timezone would make the same command mean different things on different machines. Rendered in the HTML body exactly as you typed it.",
2161
+ "name": "due",
2162
+ "hasDynamicHelp": false,
2163
+ "multiple": false,
2164
+ "type": "option"
2165
+ },
2166
+ "tax-id": {
2167
+ "description": "Optional taxpayer identification shown in the invoice footer.",
2168
+ "name": "tax-id",
2169
+ "hasDynamicHelp": false,
2170
+ "multiple": false,
2171
+ "type": "option"
2172
+ },
2173
+ "line": {
2174
+ "description": "Line item on the rendered invoice. Repeatable. Two forms: \"<description>\" (qty=1, amount=full --amount) or \"<description>|<quantity>|<amount>\" (all explicit; same decimal units as --amount). Use the three-field form for more than one line: the single-field form gives EVERY line the full --amount, so two such lines sum to twice --amount and trigger the totals-mismatch warning. With three-field lines you may omit --amount entirely and the CLI sums them. The backend charges --amount regardless; --line only shapes the rendered HTML.",
2175
+ "name": "line",
2176
+ "hasDynamicHelp": false,
2177
+ "multiple": true,
2178
+ "type": "option"
2179
+ },
2180
+ "wallet-id": {
2181
+ "description": "id_str of a wallet to receive payment. Repeatable. When given, the backend resolves and validates the ids (no wallet read needed — works with an invoice-scope-only agent key). When omitted, the CLI fetches your wallets via the narrow `business_wallets` query, which requires the wallet:read_only scope on an agent key.",
2182
+ "name": "wallet-id",
2183
+ "hasDynamicHelp": false,
2184
+ "multiple": true,
2185
+ "type": "option"
2186
+ },
2187
+ "business-id": {
2188
+ "description": "Your own business id_str. Optional and redundant — the invoice is always issued as the business you are signed in as, and contacts and wallets always resolve against it. Supplying a different business id is rejected rather than silently ignored; omit the flag unless a script needs to assert which business it is acting as.",
2189
+ "name": "business-id",
2190
+ "hasDynamicHelp": false,
2191
+ "multiple": false,
2192
+ "type": "option"
2193
+ },
2194
+ "show-doc": {
2195
+ "description": "Print the generated GraphQL document to stderr.",
2196
+ "name": "show-doc",
2197
+ "allowNo": false,
2198
+ "type": "boolean"
2199
+ }
2200
+ },
2201
+ "hasDynamicHelp": false,
2202
+ "hiddenAliases": [],
2203
+ "id": "invoice:send",
2204
+ "pluginAlias": "@allscale/cli",
2205
+ "pluginName": "@allscale/cli",
2206
+ "pluginType": "core",
2207
+ "strict": true,
2208
+ "enableJsonFlag": true,
2209
+ "legacyStagingNoticeShown": false,
2210
+ "emitsOwnOutput": false,
2211
+ "requiresEscapeHatch": false,
2212
+ "requiresInput": true,
2213
+ "isLocalOnly": false,
2214
+ "isESM": false,
2215
+ "relativePath": [
2216
+ "dist",
2217
+ "commands",
2218
+ "invoice",
2219
+ "send.js"
2220
+ ]
2221
+ },
2222
+ "invoice:sent": {
2223
+ "aliases": [],
2224
+ "args": {},
2225
+ "description": "List invoices you are the PAYER on — where your business owes the money. Wraps `sender_payments` (the backend's `sender` is the payer). NOTE: invoices you issued with `invoice send` are NOT here — you are the payee on those, so they appear under `invoice received`. Defaults to the first 50 rows; pass --input or --all to override. Filter with --status / --payment-type (repeatable) and the creation-date range --from / --to, which is half-open: --from is inclusive, --to exclusive. There is no --to-email here: an invoice's contact record belongs to the business that issued it, so filtering the invoices you OWE by your own contacts is not possible — use `invoice received --to-email`.",
2226
+ "examples": [
2227
+ "$ allscale invoice sent",
2228
+ "$ allscale invoice sent --business-id <id> --input '{\"limit\":10}'",
2229
+ "$ allscale invoice sent --all",
2230
+ "$ allscale invoice sent --status SENT --status OVERDUE",
2231
+ "$ allscale invoice sent --from 2026-07-01 --to 2026-08-01"
2232
+ ],
2233
+ "flags": {
2234
+ "json": {
2235
+ "description": "Format output as json.",
2236
+ "helpGroup": "GLOBAL",
2237
+ "name": "json",
2238
+ "allowNo": false,
2239
+ "type": "boolean"
2240
+ },
2241
+ "profile": {
2242
+ "description": "Named profile from ~/.allscale/config.toml",
2243
+ "helpGroup": "GLOBAL",
2244
+ "name": "profile",
2245
+ "hasDynamicHelp": false,
2246
+ "multiple": false,
2247
+ "type": "option"
2248
+ },
2249
+ "token": {
2250
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
2251
+ "helpGroup": "GLOBAL",
2252
+ "hidden": true,
2253
+ "name": "token",
2254
+ "hasDynamicHelp": false,
2255
+ "multiple": false,
2256
+ "type": "option"
2257
+ },
2258
+ "api-base": {
2259
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
2260
+ "helpGroup": "GLOBAL",
2261
+ "hidden": true,
2262
+ "name": "api-base",
2263
+ "hasDynamicHelp": false,
2264
+ "multiple": false,
2265
+ "type": "option"
2266
+ },
2267
+ "insecure-storage": {
2268
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
2269
+ "helpGroup": "GLOBAL",
2270
+ "name": "insecure-storage",
2271
+ "allowNo": false,
2272
+ "type": "boolean"
2273
+ },
2274
+ "business-id": {
2275
+ "char": "b",
2276
+ "description": "Business id_str. Defaults to the logged-in user's business when omitted.",
2277
+ "name": "business-id",
2278
+ "hasDynamicHelp": false,
2279
+ "multiple": false,
2280
+ "type": "option"
2281
+ },
2282
+ "input": {
2283
+ "char": "i",
2284
+ "description": "QueryInput as JSON. Supported fields: limit (0 = unbounded), skip, order_by (array of field names, '-field' for descending), created_at_gte / created_at_lte (both INCLUSIVE, format YYYY-MM-DDTHH:MM:SS.ffffffZ — the fractional seconds and trailing Z are required). Only these fields are accepted. Overrides the default limit=50. Prefer --from / --to, which accept ordinary dates, normalize them for you, and give you a half-open range.",
2285
+ "exclusive": [
2286
+ "all"
2287
+ ],
2288
+ "name": "input",
2289
+ "hasDynamicHelp": false,
2290
+ "multiple": false,
2291
+ "type": "option"
2292
+ },
2293
+ "status": {
2294
+ "description": "Only invoices in this status. Repeatable (matches any of them). Accepted: OVERDUE, FAILED, DRAFT, SENT, ACKNOWLEDGED, PROCESSING, PAID (case-insensitive), or a raw integer.",
2295
+ "name": "status",
2296
+ "hasDynamicHelp": false,
2297
+ "multiple": true,
2298
+ "type": "option"
2299
+ },
2300
+ "payment-type": {
2301
+ "description": "Only invoices denominated in this currency. Repeatable (matches any of them). Accepted: CURRENCY (fiat), USDT, USDC, BUSD, DAI, TUSD, PAX, GUSD, USTC, FRAX, EURS (case-insensitive), or a raw integer.",
2302
+ "name": "payment-type",
2303
+ "hasDynamicHelp": false,
2304
+ "multiple": true,
2305
+ "type": "option"
2306
+ },
2307
+ "from": {
2308
+ "description": "Only invoices created at or after this time. INCLUSIVE — an invoice created at exactly this instant is included. Accepts a date (2026-08-05), a naive datetime (2026-08-05T12:30:00, read as UTC), or an offset datetime (2026-08-05T20:30:00+08:00); the CLI converts to UTC and pads it to the backend's required YYYY-MM-DDTHH:MM:SS.ffffffZ.",
2309
+ "name": "from",
2310
+ "hasDynamicHelp": false,
2311
+ "multiple": false,
2312
+ "type": "option"
2313
+ },
2314
+ "to": {
2315
+ "description": "Only invoices created strictly before this time. EXCLUSIVE — an invoice created at exactly this instant is NOT included, so --from 2026-07-01 --to 2026-08-01 is exactly July and consecutive ranges never overlap. A bare date therefore covers the whole day before it. Accepts a date (2026-08-05), a naive datetime (2026-08-05T12:30:00, read as UTC), or an offset datetime (2026-08-05T20:30:00+08:00); the CLI converts to UTC and pads it to the backend's required YYYY-MM-DDTHH:MM:SS.ffffffZ.",
2316
+ "name": "to",
2317
+ "hasDynamicHelp": false,
2318
+ "multiple": false,
2319
+ "type": "option"
2320
+ },
2321
+ "to-email": {
2322
+ "description": "Not supported on `invoice sent` — see the runtime error.",
2323
+ "hidden": true,
2324
+ "name": "to-email",
2325
+ "hasDynamicHelp": false,
2326
+ "multiple": false,
2327
+ "type": "option"
2328
+ },
2329
+ "all": {
2330
+ "description": "Request all rows in one response; the CLI rejects read-only responses over 32 MiB.",
2331
+ "exclusive": [
2332
+ "input"
2333
+ ],
2334
+ "name": "all",
2335
+ "allowNo": false,
2336
+ "type": "boolean"
2337
+ },
2338
+ "select": {
2339
+ "char": "s",
2340
+ "description": "Override the default selection set with a GraphQL fragment. Default: 'count items { created_at updated_at id recipient_business_id sender_business_id sender_contact_id payment_type accepted_stable_coins payment_extra_info currency status amount_cents amount_coins invoice_url invoice_visible_id tax_id error_message memo due_datetime display_amount encrypted_id }'. Pass --show-doc to print the exact GraphQL document that gets sent.",
2341
+ "name": "select",
2342
+ "hasDynamicHelp": false,
2343
+ "multiple": false,
2344
+ "type": "option"
2345
+ },
2346
+ "show-doc": {
2347
+ "description": "Print the generated GraphQL document to stderr",
2348
+ "name": "show-doc",
2349
+ "allowNo": false,
2350
+ "type": "boolean"
2351
+ }
2352
+ },
2353
+ "hasDynamicHelp": false,
2354
+ "hiddenAliases": [],
2355
+ "id": "invoice:sent",
2356
+ "pluginAlias": "@allscale/cli",
2357
+ "pluginName": "@allscale/cli",
2358
+ "pluginType": "core",
2359
+ "strict": true,
2360
+ "enableJsonFlag": true,
2361
+ "legacyStagingNoticeShown": false,
2362
+ "emitsOwnOutput": false,
2363
+ "requiresEscapeHatch": false,
2364
+ "requiresInput": false,
2365
+ "isLocalOnly": false,
2366
+ "isESM": false,
2367
+ "relativePath": [
2368
+ "dist",
2369
+ "commands",
2370
+ "invoice",
2371
+ "sent.js"
2372
+ ]
2373
+ },
2374
+ "invoice:update": {
2375
+ "aliases": [],
2376
+ "args": {
2377
+ "id": {
2378
+ "description": "Invoice id_str (the backend's Payment.id_str)",
2379
+ "name": "id",
2380
+ "required": true
2381
+ }
2382
+ },
2383
+ "description": "Update an existing invoice's memo, payer, or (for an overdue invoice) its due date. Only those three fields can be changed; anything else is rejected by the backend.",
2384
+ "examples": [
2385
+ "$ allscale invoice update 65ab... --input '{\"memo\":\"corrected memo\"}'",
2386
+ "$ allscale invoice update 65ab... --input '{\"due_datetime\":\"2026-12-31T00:00:00Z\"}'",
2387
+ "$ allscale invoice update 65ab... --input '{\"sender_business_id\":\"6a288fb5f9b4689d8b09a50a\"}'"
2388
+ ],
2389
+ "flags": {
2390
+ "json": {
2391
+ "description": "Format output as json.",
2392
+ "helpGroup": "GLOBAL",
2393
+ "name": "json",
2394
+ "allowNo": false,
2395
+ "type": "boolean"
2396
+ },
2397
+ "profile": {
2398
+ "description": "Named profile from ~/.allscale/config.toml",
2399
+ "helpGroup": "GLOBAL",
2400
+ "name": "profile",
2401
+ "hasDynamicHelp": false,
2402
+ "multiple": false,
2403
+ "type": "option"
2404
+ },
2405
+ "token": {
2406
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
2407
+ "helpGroup": "GLOBAL",
2408
+ "hidden": true,
2409
+ "name": "token",
2410
+ "hasDynamicHelp": false,
2411
+ "multiple": false,
2412
+ "type": "option"
2413
+ },
2414
+ "api-base": {
2415
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
2416
+ "helpGroup": "GLOBAL",
2417
+ "hidden": true,
2418
+ "name": "api-base",
2419
+ "hasDynamicHelp": false,
2420
+ "multiple": false,
2421
+ "type": "option"
2422
+ },
2423
+ "insecure-storage": {
2424
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
2425
+ "helpGroup": "GLOBAL",
2426
+ "name": "insecure-storage",
2427
+ "allowNo": false,
2428
+ "type": "boolean"
2429
+ },
2430
+ "input": {
2431
+ "char": "i",
2432
+ "description": "JSON object of fields to change. Exactly three are accepted: \"memo\" (free text), \"sender_business_id\" (the payer's business id), and \"due_datetime\" (ISO 8601, e.g. 2026-12-31 or 2026-12-31T00:00:00Z — a value without a UTC offset is read as UTC, exactly as `invoice send --due` does). Note that due_datetime only applies to an OVERDUE invoice and may only move FORWARD; extending past now also revives the invoice so buyers can pay again. Any other field is rejected by the backend.",
2433
+ "helpGroup": "REQUIRED",
2434
+ "name": "input",
2435
+ "required": true,
2436
+ "hasDynamicHelp": false,
2437
+ "multiple": false,
2438
+ "type": "option"
2439
+ },
2440
+ "select": {
2441
+ "char": "s",
2442
+ "description": "Override the default selection set with a GraphQL fragment. Default: 'created_at updated_at id recipient_business_id sender_business_id sender_contact_id payment_type accepted_stable_coins payment_extra_info currency status amount_cents amount_coins invoice_url invoice_visible_id tax_id error_message memo due_datetime display_amount encrypted_id'. Pass --show-doc to print the exact GraphQL document that gets sent.",
2443
+ "name": "select",
2444
+ "hasDynamicHelp": false,
2445
+ "multiple": false,
2446
+ "type": "option"
2447
+ },
2448
+ "show-doc": {
2449
+ "description": "Print the generated GraphQL document to stderr",
2450
+ "name": "show-doc",
2451
+ "allowNo": false,
2452
+ "type": "boolean"
2453
+ }
2454
+ },
2455
+ "hasDynamicHelp": false,
2456
+ "hiddenAliases": [],
2457
+ "id": "invoice:update",
2458
+ "pluginAlias": "@allscale/cli",
2459
+ "pluginName": "@allscale/cli",
2460
+ "pluginType": "core",
2461
+ "strict": true,
2462
+ "enableJsonFlag": true,
2463
+ "legacyStagingNoticeShown": false,
2464
+ "emitsOwnOutput": false,
2465
+ "requiresEscapeHatch": false,
2466
+ "requiresInput": false,
2467
+ "isLocalOnly": false,
2468
+ "isESM": false,
2469
+ "relativePath": [
2470
+ "dist",
2471
+ "commands",
2472
+ "invoice",
2473
+ "update.js"
2474
+ ]
2475
+ },
2476
+ "payout:send": {
2477
+ "aliases": [],
2478
+ "args": {},
2479
+ "description": "Create and auto-fund a claim link from this store's enabled auto-payout wallet. Authenticates with the store API key/secret (NOT your login), so it needs a store that has completed Payout onboarding. Idempotent on --reference-id.",
2480
+ "examples": [
2481
+ "$ ALLSCALE_STORE_API_SECRET=… allscale payout send --api-key ak_… --amount 10 --chain base --reference-id order-1042",
2482
+ "$ allscale payout send --payout-api-base https://openapi.allscale.io --api-key ak_… --api-secret … --amount 25 --stable-coin USDC --chain polygon --reference-id inv-77 --receiver-email client@example.com"
2483
+ ],
2484
+ "flags": {
2485
+ "json": {
2486
+ "description": "Format output as json.",
2487
+ "helpGroup": "GLOBAL",
2488
+ "name": "json",
2489
+ "allowNo": false,
2490
+ "type": "boolean"
2491
+ },
2492
+ "profile": {
2493
+ "description": "Named profile from ~/.allscale/config.toml",
2494
+ "helpGroup": "GLOBAL",
2495
+ "name": "profile",
2496
+ "hasDynamicHelp": false,
2497
+ "multiple": false,
2498
+ "type": "option"
2499
+ },
2500
+ "token": {
2501
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
2502
+ "helpGroup": "GLOBAL",
2503
+ "hidden": true,
2504
+ "name": "token",
2505
+ "hasDynamicHelp": false,
2506
+ "multiple": false,
2507
+ "type": "option"
2508
+ },
2509
+ "api-base": {
2510
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
2511
+ "helpGroup": "GLOBAL",
2512
+ "hidden": true,
2513
+ "name": "api-base",
2514
+ "hasDynamicHelp": false,
2515
+ "multiple": false,
2516
+ "type": "option"
2517
+ },
2518
+ "insecure-storage": {
2519
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
2520
+ "helpGroup": "GLOBAL",
2521
+ "name": "insecure-storage",
2522
+ "allowNo": false,
2523
+ "type": "boolean"
2524
+ },
2525
+ "amount": {
2526
+ "description": "Claimable amount in token units (decimal string, e.g. 10 or 25.50); at most 6 effective decimals, or 18 on BSC.",
2527
+ "helpGroup": "REQUIRED",
2528
+ "name": "amount",
2529
+ "required": true,
2530
+ "hasDynamicHelp": false,
2531
+ "multiple": false,
2532
+ "type": "option"
2533
+ },
2534
+ "chain": {
2535
+ "description": "EVM mainnet chain slug.",
2536
+ "helpGroup": "REQUIRED",
2537
+ "name": "chain",
2538
+ "required": true,
2539
+ "hasDynamicHelp": false,
2540
+ "multiple": false,
2541
+ "options": [
2542
+ "ethereum",
2543
+ "bsc",
2544
+ "base",
2545
+ "polygon",
2546
+ "arbitrum",
2547
+ "optimism"
2548
+ ],
2549
+ "type": "option"
2550
+ },
2551
+ "reference-id": {
2552
+ "description": "Your idempotency key (e.g. your order id). REQUIRED — a retry with the same value is safe (no double-fund).",
2553
+ "helpGroup": "REQUIRED",
2554
+ "name": "reference-id",
2555
+ "required": true,
2556
+ "hasDynamicHelp": false,
2557
+ "multiple": false,
2558
+ "type": "option"
2559
+ },
2560
+ "payout-api-base": {
2561
+ "description": "Standalone partner API origin for store-HMAC payouts. Defaults to https://openapi.allscale.io. Also via ALLSCALE_PAYOUT_API_BASE.",
2562
+ "name": "payout-api-base",
2563
+ "hasDynamicHelp": false,
2564
+ "multiple": false,
2565
+ "type": "option"
2566
+ },
2567
+ "stable-coin": {
2568
+ "description": "Stablecoin to fund in.",
2569
+ "name": "stable-coin",
2570
+ "default": "USDT",
2571
+ "hasDynamicHelp": false,
2572
+ "multiple": false,
2573
+ "options": [
2574
+ "USDT",
2575
+ "USDC"
2576
+ ],
2577
+ "type": "option"
2578
+ },
2579
+ "receiver-email": {
2580
+ "description": "Optional email to send the claim invite to.",
2581
+ "name": "receiver-email",
2582
+ "hasDynamicHelp": false,
2583
+ "multiple": false,
2584
+ "type": "option"
2585
+ },
2586
+ "sender-display-name": {
2587
+ "description": "Optional display name shown to the receiver. Max 100 chars.",
2588
+ "name": "sender-display-name",
2589
+ "hasDynamicHelp": false,
2590
+ "multiple": false,
2591
+ "type": "option"
2592
+ },
2593
+ "message": {
2594
+ "description": "Optional message shown to the receiver. Max 200 chars.",
2595
+ "name": "message",
2596
+ "hasDynamicHelp": false,
2597
+ "multiple": false,
2598
+ "type": "option"
2599
+ },
2600
+ "api-key": {
2601
+ "description": "Store API key (public id). Falls back to ALLSCALE_STORE_API_KEY.",
2602
+ "name": "api-key",
2603
+ "hasDynamicHelp": false,
2604
+ "multiple": false,
2605
+ "type": "option"
2606
+ },
2607
+ "api-secret": {
2608
+ "description": "Store API secret. Prefer the ALLSCALE_STORE_API_SECRET env var (a flag value can leak via shell history / process list).",
2609
+ "name": "api-secret",
2610
+ "hasDynamicHelp": false,
2611
+ "multiple": false,
2612
+ "type": "option"
2613
+ }
2614
+ },
2615
+ "hasDynamicHelp": false,
2616
+ "hiddenAliases": [],
2617
+ "id": "payout:send",
2618
+ "pluginAlias": "@allscale/cli",
2619
+ "pluginName": "@allscale/cli",
2620
+ "pluginType": "core",
2621
+ "strict": true,
2622
+ "enableJsonFlag": true,
2623
+ "legacyStagingNoticeShown": false,
2624
+ "emitsOwnOutput": false,
2625
+ "requiresEscapeHatch": false,
2626
+ "requiresInput": false,
2627
+ "isLocalOnly": false,
2628
+ "isESM": false,
2629
+ "relativePath": [
2630
+ "dist",
2631
+ "commands",
2632
+ "payout",
2633
+ "send.js"
2634
+ ]
2635
+ },
2636
+ "payout:status": {
2637
+ "aliases": [],
2638
+ "args": {},
2639
+ "description": "Show this merchant's claim-link auto-payout session: whether it's enabled, the spending caps, remaining budget, and expiry. Read-only — a non-enabled account returns provisioned=false.",
2640
+ "examples": [
2641
+ "$ allscale payout status",
2642
+ "$ allscale payout status --select 'provisioned active remaining_usd session_expires_at'"
2643
+ ],
2644
+ "flags": {
2645
+ "json": {
2646
+ "description": "Format output as json.",
2647
+ "helpGroup": "GLOBAL",
2648
+ "name": "json",
2649
+ "allowNo": false,
2650
+ "type": "boolean"
2651
+ },
2652
+ "profile": {
2653
+ "description": "Named profile from ~/.allscale/config.toml",
2654
+ "helpGroup": "GLOBAL",
2655
+ "name": "profile",
2656
+ "hasDynamicHelp": false,
2657
+ "multiple": false,
2658
+ "type": "option"
2659
+ },
2660
+ "token": {
2661
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
2662
+ "helpGroup": "GLOBAL",
2663
+ "hidden": true,
2664
+ "name": "token",
2665
+ "hasDynamicHelp": false,
2666
+ "multiple": false,
2667
+ "type": "option"
2668
+ },
2669
+ "api-base": {
2670
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
2671
+ "helpGroup": "GLOBAL",
2672
+ "hidden": true,
2673
+ "name": "api-base",
2674
+ "hasDynamicHelp": false,
2675
+ "multiple": false,
2676
+ "type": "option"
2677
+ },
2678
+ "insecure-storage": {
2679
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
2680
+ "helpGroup": "GLOBAL",
2681
+ "name": "insecure-storage",
2682
+ "allowNo": false,
2683
+ "type": "boolean"
2684
+ },
2685
+ "select": {
2686
+ "char": "s",
2687
+ "description": "Override the default selection set with a GraphQL fragment. Default: 'provisioned active session_expires_at total_cap_usd used_usd remaining_usd per_transaction_limit authorized_pairs { chain token_symbol policy_id }'. Other selectable fields on AutoPayoutSessionStatus: sponsor_address. Pass --show-doc to print the exact GraphQL document that gets sent.",
2688
+ "name": "select",
2689
+ "hasDynamicHelp": false,
2690
+ "multiple": false,
2691
+ "type": "option"
2692
+ },
2693
+ "show-doc": {
2694
+ "description": "Print the GraphQL document to stderr.",
2695
+ "name": "show-doc",
2696
+ "allowNo": false,
2697
+ "type": "boolean"
2698
+ }
2699
+ },
2700
+ "hasDynamicHelp": false,
2701
+ "hiddenAliases": [],
2702
+ "id": "payout:status",
2703
+ "pluginAlias": "@allscale/cli",
2704
+ "pluginName": "@allscale/cli",
2705
+ "pluginType": "core",
2706
+ "strict": true,
2707
+ "enableJsonFlag": true,
2708
+ "legacyStagingNoticeShown": false,
2709
+ "emitsOwnOutput": false,
2710
+ "requiresEscapeHatch": false,
2711
+ "requiresInput": false,
2712
+ "isLocalOnly": false,
2713
+ "isESM": false,
2714
+ "relativePath": [
2715
+ "dist",
2716
+ "commands",
2717
+ "payout",
2718
+ "status.js"
2719
+ ]
2720
+ },
2721
+ "store:create": {
2722
+ "aliases": [],
2723
+ "args": {},
2724
+ "description": "Create a store for the logged-in business. Returns the API key and one-time API secret in stdout; capture the result securely. Business must have checkout enabled; only one sandbox store is allowed per business.",
2725
+ "examples": [
2726
+ "$ allscale store create --name \"My Shop\"",
2727
+ "$ allscale store create --name \"Live Shop\" --live",
2728
+ "$ allscale store create --name \"Acme\" --business-id 665f0c..."
2729
+ ],
2730
+ "flags": {
2731
+ "json": {
2732
+ "description": "Format output as json.",
2733
+ "helpGroup": "GLOBAL",
2734
+ "name": "json",
2735
+ "allowNo": false,
2736
+ "type": "boolean"
2737
+ },
2738
+ "profile": {
2739
+ "description": "Named profile from ~/.allscale/config.toml",
2740
+ "helpGroup": "GLOBAL",
2741
+ "name": "profile",
2742
+ "hasDynamicHelp": false,
2743
+ "multiple": false,
2744
+ "type": "option"
2745
+ },
2746
+ "token": {
2747
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
2748
+ "helpGroup": "GLOBAL",
2749
+ "hidden": true,
2750
+ "name": "token",
2751
+ "hasDynamicHelp": false,
2752
+ "multiple": false,
2753
+ "type": "option"
2754
+ },
2755
+ "api-base": {
2756
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
2757
+ "helpGroup": "GLOBAL",
2758
+ "hidden": true,
2759
+ "name": "api-base",
2760
+ "hasDynamicHelp": false,
2761
+ "multiple": false,
2762
+ "type": "option"
2763
+ },
2764
+ "insecure-storage": {
2765
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
2766
+ "helpGroup": "GLOBAL",
2767
+ "name": "insecure-storage",
2768
+ "allowNo": false,
2769
+ "type": "boolean"
2770
+ },
2771
+ "name": {
2772
+ "description": "Store display name (required).",
2773
+ "helpGroup": "REQUIRED",
2774
+ "name": "name",
2775
+ "required": true,
2776
+ "hasDynamicHelp": false,
2777
+ "multiple": false,
2778
+ "type": "option"
2779
+ },
2780
+ "business-id": {
2781
+ "description": "Owning business id. Defaults to the logged-in business (decoded from the session token). Admins creating for another business must pass this.",
2782
+ "name": "business-id",
2783
+ "hasDynamicHelp": false,
2784
+ "multiple": false,
2785
+ "type": "option"
2786
+ },
2787
+ "live": {
2788
+ "description": "Create a live store. Default is a sandbox store (backend allows only one sandbox store per business).",
2789
+ "name": "live",
2790
+ "allowNo": false,
2791
+ "type": "boolean"
2792
+ },
2793
+ "type": {
2794
+ "description": "Store type (backend StoreType int). Omit for the default.",
2795
+ "name": "type",
2796
+ "hasDynamicHelp": false,
2797
+ "multiple": false,
2798
+ "type": "option"
2799
+ },
2800
+ "description": {
2801
+ "description": "Optional store description.",
2802
+ "name": "description",
2803
+ "hasDynamicHelp": false,
2804
+ "multiple": false,
2805
+ "type": "option"
2806
+ }
2807
+ },
2808
+ "hasDynamicHelp": false,
2809
+ "hiddenAliases": [],
2810
+ "id": "store:create",
2811
+ "pluginAlias": "@allscale/cli",
2812
+ "pluginName": "@allscale/cli",
2813
+ "pluginType": "core",
2814
+ "strict": true,
2815
+ "enableJsonFlag": true,
2816
+ "legacyStagingNoticeShown": false,
2817
+ "emitsOwnOutput": false,
2818
+ "requiresEscapeHatch": false,
2819
+ "requiresInput": false,
2820
+ "isLocalOnly": false,
2821
+ "isESM": false,
2822
+ "relativePath": [
2823
+ "dist",
2824
+ "commands",
2825
+ "store",
2826
+ "create.js"
2827
+ ]
2828
+ },
2829
+ "transaction:get": {
2830
+ "aliases": [],
2831
+ "args": {
2832
+ "id": {
2833
+ "description": "Transaction id_str",
2834
+ "name": "id",
2835
+ "required": true
2836
+ }
2837
+ },
2838
+ "description": "Fetch one transaction by id. Wraps the `transaction` query.",
2839
+ "examples": [
2840
+ "$ allscale transaction get 65ab1234567890abcdef0123",
2841
+ "$ allscale transaction get 65ab... --select 'id status type direction'"
2842
+ ],
2843
+ "flags": {
2844
+ "json": {
2845
+ "description": "Format output as json.",
2846
+ "helpGroup": "GLOBAL",
2847
+ "name": "json",
2848
+ "allowNo": false,
2849
+ "type": "boolean"
2850
+ },
2851
+ "profile": {
2852
+ "description": "Named profile from ~/.allscale/config.toml",
2853
+ "helpGroup": "GLOBAL",
2854
+ "name": "profile",
2855
+ "hasDynamicHelp": false,
2856
+ "multiple": false,
2857
+ "type": "option"
2858
+ },
2859
+ "token": {
2860
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
2861
+ "helpGroup": "GLOBAL",
2862
+ "hidden": true,
2863
+ "name": "token",
2864
+ "hasDynamicHelp": false,
2865
+ "multiple": false,
2866
+ "type": "option"
2867
+ },
2868
+ "api-base": {
2869
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
2870
+ "helpGroup": "GLOBAL",
2871
+ "hidden": true,
2872
+ "name": "api-base",
2873
+ "hasDynamicHelp": false,
2874
+ "multiple": false,
2875
+ "type": "option"
2876
+ },
2877
+ "insecure-storage": {
2878
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
2879
+ "helpGroup": "GLOBAL",
2880
+ "name": "insecure-storage",
2881
+ "allowNo": false,
2882
+ "type": "boolean"
2883
+ },
2884
+ "select": {
2885
+ "char": "s",
2886
+ "description": "Override the default selection set with a GraphQL fragment. Default: 'created_at updated_at id owner_type owner_business_id owner_employee_id transaction_type direction reference_type payment_id counterparty_business_id counterparty_employee_id counterparty_name payment_type currency amount_cents amount_coins status memo transaction_time tx_hash tx_block_chain tx_from tx_to tx_block_number total_fee network_fee service_fee'. Pass --show-doc to print the exact GraphQL document that gets sent.",
2887
+ "name": "select",
2888
+ "hasDynamicHelp": false,
2889
+ "multiple": false,
2890
+ "type": "option"
2891
+ },
2892
+ "show-doc": {
2893
+ "description": "Print the generated GraphQL document to stderr",
2894
+ "name": "show-doc",
2895
+ "allowNo": false,
2896
+ "type": "boolean"
2897
+ }
2898
+ },
2899
+ "hasDynamicHelp": false,
2900
+ "hiddenAliases": [],
2901
+ "id": "transaction:get",
2902
+ "pluginAlias": "@allscale/cli",
2903
+ "pluginName": "@allscale/cli",
2904
+ "pluginType": "core",
2905
+ "strict": true,
2906
+ "enableJsonFlag": true,
2907
+ "legacyStagingNoticeShown": false,
2908
+ "emitsOwnOutput": false,
2909
+ "requiresEscapeHatch": false,
2910
+ "requiresInput": false,
2911
+ "isLocalOnly": false,
2912
+ "isESM": false,
2913
+ "relativePath": [
2914
+ "dist",
2915
+ "commands",
2916
+ "transaction",
2917
+ "get.js"
2918
+ ]
2919
+ },
2920
+ "transaction:list": {
2921
+ "aliases": [],
2922
+ "args": {},
2923
+ "description": "List transactions. --scope picks between mine (default; backend my_transactions), business (business_transaction_records), or activities. All scopes default to the first 50 rows; pass --input or --all to override.",
2924
+ "examples": [
2925
+ "$ allscale transaction list",
2926
+ "$ allscale transaction list --scope business --input '{\"limit\":20}'",
2927
+ "$ allscale transaction list --scope activities --skip 0 --limit 25",
2928
+ "$ allscale transaction list --scope activities --all"
2929
+ ],
2930
+ "flags": {
2931
+ "json": {
2932
+ "description": "Format output as json.",
2933
+ "helpGroup": "GLOBAL",
2934
+ "name": "json",
2935
+ "allowNo": false,
2936
+ "type": "boolean"
2937
+ },
2938
+ "profile": {
2939
+ "description": "Named profile from ~/.allscale/config.toml",
2940
+ "helpGroup": "GLOBAL",
2941
+ "name": "profile",
2942
+ "hasDynamicHelp": false,
2943
+ "multiple": false,
2944
+ "type": "option"
2945
+ },
2946
+ "token": {
2947
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
2948
+ "helpGroup": "GLOBAL",
2949
+ "hidden": true,
2950
+ "name": "token",
2951
+ "hasDynamicHelp": false,
2952
+ "multiple": false,
2953
+ "type": "option"
2954
+ },
2955
+ "api-base": {
2956
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
2957
+ "helpGroup": "GLOBAL",
2958
+ "hidden": true,
2959
+ "name": "api-base",
2960
+ "hasDynamicHelp": false,
2961
+ "multiple": false,
2962
+ "type": "option"
2963
+ },
2964
+ "insecure-storage": {
2965
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
2966
+ "helpGroup": "GLOBAL",
2967
+ "name": "insecure-storage",
2968
+ "allowNo": false,
2969
+ "type": "boolean"
2970
+ },
2971
+ "scope": {
2972
+ "description": "Which transaction-list query to call: mine (backend my_transactions), business (business_transaction_records), or activities",
2973
+ "name": "scope",
2974
+ "default": "mine",
2975
+ "hasDynamicHelp": false,
2976
+ "multiple": false,
2977
+ "options": [
2978
+ "mine",
2979
+ "business",
2980
+ "activities"
2981
+ ],
2982
+ "type": "option"
2983
+ },
2984
+ "input": {
2985
+ "char": "i",
2986
+ "description": "QueryInput (mine/business) or ActivityFilterInput (activities) as JSON. For mine/business this overrides the default limit=50.",
2987
+ "exclusive": [
2988
+ "all"
2989
+ ],
2990
+ "name": "input",
2991
+ "hasDynamicHelp": false,
2992
+ "multiple": false,
2993
+ "type": "option"
2994
+ },
2995
+ "all": {
2996
+ "description": "Request all rows in one response (mine/business query_input.limit=0; activities top-level limit=0); the CLI rejects read-only responses over 32 MiB.",
2997
+ "exclusive": [
2998
+ "input"
2999
+ ],
3000
+ "name": "all",
3001
+ "allowNo": false,
3002
+ "type": "boolean"
3003
+ },
3004
+ "skip": {
3005
+ "description": "Pagination skip (activities scope only)",
3006
+ "name": "skip",
3007
+ "hasDynamicHelp": false,
3008
+ "multiple": false,
3009
+ "type": "option"
3010
+ },
3011
+ "limit": {
3012
+ "description": "Pagination limit (activities scope only). Defaults to 50; --all requests one unpaginated response.",
3013
+ "name": "limit",
3014
+ "hasDynamicHelp": false,
3015
+ "multiple": false,
3016
+ "type": "option"
3017
+ },
3018
+ "select": {
3019
+ "char": "s",
3020
+ "description": "Override the default selection set with a GraphQL fragment. Default (--scope mine, --scope business): 'count items { created_at updated_at id owner_type owner_business_id owner_employee_id transaction_type direction reference_type payment_id counterparty_business_id counterparty_employee_id counterparty_name payment_type currency amount_cents amount_coins status memo transaction_time tx_hash tx_block_chain tx_from tx_to tx_block_number total_fee network_fee service_fee }'. Default (--scope activities): 'count items { transaction_id amount_coins amount_cents transaction_time created_at transaction_status payment_id transaction_type direction wallet_address tx_hash tx_block_chain tx_block_number memo payment_type currency total_fee network_fee service_fee counterparty_business_id claim_link_id }'. Pass --show-doc to print the exact GraphQL document that gets sent.",
3021
+ "name": "select",
3022
+ "hasDynamicHelp": false,
3023
+ "multiple": false,
3024
+ "type": "option"
3025
+ },
3026
+ "show-doc": {
3027
+ "description": "Print the generated GraphQL document to stderr",
3028
+ "name": "show-doc",
3029
+ "allowNo": false,
3030
+ "type": "boolean"
3031
+ }
3032
+ },
3033
+ "hasDynamicHelp": false,
3034
+ "hiddenAliases": [],
3035
+ "id": "transaction:list",
3036
+ "pluginAlias": "@allscale/cli",
3037
+ "pluginName": "@allscale/cli",
3038
+ "pluginType": "core",
3039
+ "strict": true,
3040
+ "enableJsonFlag": true,
3041
+ "legacyStagingNoticeShown": false,
3042
+ "emitsOwnOutput": false,
3043
+ "requiresEscapeHatch": false,
3044
+ "requiresInput": false,
3045
+ "isLocalOnly": false,
3046
+ "isESM": false,
3047
+ "relativePath": [
3048
+ "dist",
3049
+ "commands",
3050
+ "transaction",
3051
+ "list.js"
3052
+ ]
3053
+ },
3054
+ "wallet:list": {
3055
+ "aliases": [],
3056
+ "args": {},
3057
+ "description": "List your noncustodial wallets and their per-coin balances via the narrow `business_wallets` query. Works with an agent key holding wallet:read_only (and with legacy password sessions); the owner is derived from the authenticated identity, so no business id is needed.",
3058
+ "examples": [
3059
+ "$ allscale wallet list",
3060
+ "$ allscale wallet list --select 'id_str address'"
3061
+ ],
3062
+ "flags": {
3063
+ "json": {
3064
+ "description": "Format output as json.",
3065
+ "helpGroup": "GLOBAL",
3066
+ "name": "json",
3067
+ "allowNo": false,
3068
+ "type": "boolean"
3069
+ },
3070
+ "profile": {
3071
+ "description": "Named profile from ~/.allscale/config.toml",
3072
+ "helpGroup": "GLOBAL",
3073
+ "name": "profile",
3074
+ "hasDynamicHelp": false,
3075
+ "multiple": false,
3076
+ "type": "option"
3077
+ },
3078
+ "token": {
3079
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
3080
+ "helpGroup": "GLOBAL",
3081
+ "hidden": true,
3082
+ "name": "token",
3083
+ "hasDynamicHelp": false,
3084
+ "multiple": false,
3085
+ "type": "option"
3086
+ },
3087
+ "api-base": {
3088
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
3089
+ "helpGroup": "GLOBAL",
3090
+ "hidden": true,
3091
+ "name": "api-base",
3092
+ "hasDynamicHelp": false,
3093
+ "multiple": false,
3094
+ "type": "option"
3095
+ },
3096
+ "insecure-storage": {
3097
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
3098
+ "helpGroup": "GLOBAL",
3099
+ "name": "insecure-storage",
3100
+ "allowNo": false,
3101
+ "type": "boolean"
3102
+ },
3103
+ "select": {
3104
+ "char": "s",
3105
+ "description": "Override the default selection set with a GraphQL fragment. Default: 'id_str chain address coin_balances { coin_type balance }'. Passing a non-blank --select also disables the chain/coin label enrichment this command adds by default, since the selection is then entirely caller-controlled. Pass --show-doc to print the exact GraphQL document that gets sent.",
3106
+ "name": "select",
3107
+ "hasDynamicHelp": false,
3108
+ "multiple": false,
3109
+ "type": "option"
3110
+ },
3111
+ "show-doc": {
3112
+ "description": "Print the generated GraphQL document to stderr",
3113
+ "name": "show-doc",
3114
+ "allowNo": false,
3115
+ "type": "boolean"
3116
+ }
3117
+ },
3118
+ "hasDynamicHelp": false,
3119
+ "hiddenAliases": [],
3120
+ "id": "wallet:list",
3121
+ "pluginAlias": "@allscale/cli",
3122
+ "pluginName": "@allscale/cli",
3123
+ "pluginType": "core",
3124
+ "strict": true,
3125
+ "enableJsonFlag": true,
3126
+ "legacyStagingNoticeShown": false,
3127
+ "emitsOwnOutput": false,
3128
+ "requiresEscapeHatch": false,
3129
+ "requiresInput": false,
3130
+ "isLocalOnly": false,
3131
+ "isESM": false,
3132
+ "relativePath": [
3133
+ "dist",
3134
+ "commands",
3135
+ "wallet",
3136
+ "list.js"
3137
+ ]
3138
+ },
3139
+ "wallet:send": {
3140
+ "aliases": [],
3141
+ "args": {},
3142
+ "description": "Withdraw a stablecoin from your AllScale wallet to an EVM address. Confirms in the browser by default; the CLI prints the transaction hash and explorer URL when the network accepts the transfer. Accounts with Turnkey email-OTP enabled and no passkey can sign without a browser via --headless. Requires an existing legacy JWT session, which this build cannot create — use the browser-bridge flow instead.",
3143
+ "examples": [
3144
+ "$ allscale wallet send --idempotency-key order-1042 --to 0xabc... --amount 100 --chain ethereum",
3145
+ "$ allscale wallet send --idempotency-key order-1043 --to 0xabc... --amount 50 --chain polygon --stable-coin USDC",
3146
+ "$ allscale wallet send --idempotency-key order-1044 --to 0xabc... --amount 1 --chain base --bridge-timeout 300000",
3147
+ "$ allscale wallet send --idempotency-key order-1045 --to 0xabc... --amount 1 --chain bsc # over SSH: open the printed URL on any device, paste the tx hash back",
3148
+ "$ allscale wallet send --to 0xabc... --amount 1 --chain base --headless --otp-stdin --idempotency-key order-1042 # reuse the same key only when retrying this operation"
3149
+ ],
3150
+ "flags": {
3151
+ "json": {
3152
+ "description": "Format output as json.",
3153
+ "helpGroup": "GLOBAL",
3154
+ "name": "json",
3155
+ "allowNo": false,
3156
+ "type": "boolean"
3157
+ },
3158
+ "profile": {
3159
+ "description": "Named profile from ~/.allscale/config.toml",
3160
+ "helpGroup": "GLOBAL",
3161
+ "name": "profile",
3162
+ "hasDynamicHelp": false,
3163
+ "multiple": false,
3164
+ "type": "option"
3165
+ },
3166
+ "token": {
3167
+ "description": "Override the access token for this invocation (precedence: --token > ALLSCALE_TOKEN > --profile)",
3168
+ "helpGroup": "GLOBAL",
3169
+ "hidden": true,
3170
+ "name": "token",
3171
+ "hasDynamicHelp": false,
3172
+ "multiple": false,
3173
+ "type": "option"
3174
+ },
3175
+ "api-base": {
3176
+ "description": "Override the API base URL (public builds accept only https://app.allscale.io)",
3177
+ "helpGroup": "GLOBAL",
3178
+ "hidden": true,
3179
+ "name": "api-base",
3180
+ "hasDynamicHelp": false,
3181
+ "multiple": false,
3182
+ "type": "option"
3183
+ },
3184
+ "insecure-storage": {
3185
+ "description": "Force POSIX plaintext token storage at ~/.allscale/credentials.json (mode 0600) instead of the OS keychain — for headless / CI / agent use. Unavailable on Windows because Node cannot verify owner-only ACL/link safety. Also via ALLSCALE_INSECURE_STORAGE=1.",
3186
+ "helpGroup": "GLOBAL",
3187
+ "name": "insecure-storage",
3188
+ "allowNo": false,
3189
+ "type": "boolean"
3190
+ },
3191
+ "to": {
3192
+ "description": "Recipient EVM address (0x… 40-hex).",
3193
+ "helpGroup": "REQUIRED",
3194
+ "name": "to",
3195
+ "required": true,
3196
+ "hasDynamicHelp": false,
3197
+ "multiple": false,
3198
+ "type": "option"
3199
+ },
3200
+ "amount": {
3201
+ "description": "Amount to send as a decimal string (e.g. '100', '1.50'). Min 0.1; at most 6 effective decimals, or 18 on BSC.",
3202
+ "helpGroup": "REQUIRED",
3203
+ "name": "amount",
3204
+ "required": true,
3205
+ "hasDynamicHelp": false,
3206
+ "multiple": false,
3207
+ "type": "option"
3208
+ },
3209
+ "chain": {
3210
+ "description": "EVM chain to send on.",
3211
+ "helpGroup": "REQUIRED",
3212
+ "name": "chain",
3213
+ "required": true,
3214
+ "hasDynamicHelp": false,
3215
+ "multiple": false,
3216
+ "options": [
3217
+ "ethereum",
3218
+ "bsc",
3219
+ "base",
3220
+ "polygon",
3221
+ "arbitrum",
3222
+ "optimism"
3223
+ ],
3224
+ "type": "option"
3225
+ },
3226
+ "idempotency-key": {
3227
+ "description": "Stable key for retrying this same logical transfer (1-128 characters); use a new key for an intentional second payment.",
3228
+ "helpGroup": "REQUIRED",
3229
+ "name": "idempotency-key",
3230
+ "required": true,
3231
+ "hasDynamicHelp": false,
3232
+ "multiple": false,
3233
+ "type": "option"
3234
+ },
3235
+ "stable-coin": {
3236
+ "description": "Stablecoin to withdraw.",
3237
+ "name": "stable-coin",
3238
+ "default": "USDT",
3239
+ "hasDynamicHelp": false,
3240
+ "multiple": false,
3241
+ "options": [
3242
+ "USDT",
3243
+ "USDC"
3244
+ ],
3245
+ "type": "option"
3246
+ },
3247
+ "bridge-timeout": {
3248
+ "description": "Shorten the confirmation deadline, in milliseconds. By default the CLI waits the full broker op TTL (~5 min, shared by the loopback and paste channels); pass this to abort sooner. (Browser-bridge only — not valid with --headless.)",
3249
+ "exclusive": [
3250
+ "headless"
3251
+ ],
3252
+ "name": "bridge-timeout",
3253
+ "hasDynamicHelp": false,
3254
+ "multiple": false,
3255
+ "type": "option"
3256
+ },
3257
+ "browser-base": {
3258
+ "description": "Override the base URL of the printed /cli confirmation link (defaults to the session API base). (Browser-bridge only — not valid with --headless.)",
3259
+ "exclusive": [
3260
+ "headless"
3261
+ ],
3262
+ "name": "browser-base",
3263
+ "hasDynamicHelp": false,
3264
+ "multiple": false,
3265
+ "type": "option"
3266
+ },
3267
+ "headless": {
3268
+ "description": "Sign without a browser via Turnkey email-OTP (accounts with email-OTP enabled and no passkey; passkey accounts must use the browser flow). Supply the OTP via --otp-stdin (recommended for automation) or interactively; --otp / ALLSCALE_OTP work ONLY combined with --otp-id. This removes the in-browser human confirmation, so use it only on a trusted machine. Requires an existing legacy JWT session, which this build cannot create — use the browser-bridge flow instead.",
3269
+ "name": "headless",
3270
+ "allowNo": false,
3271
+ "type": "boolean"
3272
+ },
3273
+ "otp": {
3274
+ "dependsOn": [
3275
+ "headless"
3276
+ ],
3277
+ "description": "Turnkey signing OTP code (with --headless). Only works combined with --otp-id (an externally-triggered flow): without --otp-id the CLI emails a FRESH code at run time, so any pre-set --otp / ALLSCALE_OTP value is stale and fails with 'Invalid or expired OTP code'. For automation prefer --otp-stdin (CLI emails; pipe the fresh code back). Passing --otp as a flag also exposes it in shell history AND the process list (ps / /proc/<pid>/cmdline).",
3278
+ "exclusive": [
3279
+ "otp-stdin"
3280
+ ],
3281
+ "name": "otp",
3282
+ "hasDynamicHelp": false,
3283
+ "multiple": false,
3284
+ "type": "option"
3285
+ },
3286
+ "otp-stdin": {
3287
+ "dependsOn": [
3288
+ "headless"
3289
+ ],
3290
+ "description": "Read the Turnkey signing OTP as one line from stdin (with --headless).",
3291
+ "name": "otp-stdin",
3292
+ "allowNo": false,
3293
+ "type": "boolean"
3294
+ },
3295
+ "otp-id": {
3296
+ "dependsOn": [
3297
+ "headless"
3298
+ ],
3299
+ "description": "Skip the OTP-send step and reuse a prior Turnkey otpId (with --headless). The OTP code itself is still required via --otp / ALLSCALE_OTP / --otp-stdin.",
3300
+ "name": "otp-id",
3301
+ "hasDynamicHelp": false,
3302
+ "multiple": false,
3303
+ "type": "option"
3304
+ }
3305
+ },
3306
+ "hasDynamicHelp": false,
3307
+ "hiddenAliases": [],
3308
+ "id": "wallet:send",
3309
+ "pluginAlias": "@allscale/cli",
3310
+ "pluginName": "@allscale/cli",
3311
+ "pluginType": "core",
3312
+ "strict": true,
3313
+ "enableJsonFlag": true,
3314
+ "legacyStagingNoticeShown": false,
3315
+ "emitsOwnOutput": false,
3316
+ "requiresEscapeHatch": false,
3317
+ "requiresInput": false,
3318
+ "isLocalOnly": false,
3319
+ "isESM": false,
3320
+ "relativePath": [
3321
+ "dist",
3322
+ "commands",
3323
+ "wallet",
3324
+ "send.js"
3325
+ ]
3326
+ }
3327
+ },
3328
+ "version": "0.1.0"
3329
+ }