wawesome 0.14.1 → 0.14.3

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 (3) hide show
  1. package/README.md +75 -47
  2. package/dist/index.mjs +129 -9
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -312,27 +312,38 @@ stderr, so a redirect catches the secret and not one character besides:
312
312
  npx wawesome credentials mint ci-pipeline > secret.txt
313
313
  ```
314
314
 
315
- A credential carries `deploy`, reaches every App in the workspace, and expires in ninety days unless
316
- you say otherwise:
315
+ A capability is one cell of a grid: a verb, `read` or `write`, and the resource it acts on. A
316
+ credential carries the words a deploy needs, reaches every App in the workspace, and expires in
317
+ ninety days unless you say otherwise:
317
318
 
318
319
  ```bash
319
- # reads and runs what somebody else shipped, restricted to one App, never expires
320
- npx wawesome credentials mint agent -c read,logs:read,invoke -a prod --expires never
320
+ # reads what ran and fires a run of what somebody else shipped, on one App, never expires
321
+ npx wawesome credentials mint runner -c read:apps,read:functions,read:invocations,write:runs -a prod --expires never
321
322
 
322
- # ships code and attaches the domain the project declares
323
- npx wawesome credentials mint ci -c deploy,domains:attach -a prod
323
+ # ships code into an App it may create, and attaches the domain the project declares
324
+ npx wawesome credentials mint ci -c write:apps,write:functions,write:env,read:tenant,write:domains -a prod
324
325
  ```
325
326
 
326
327
  | Flag | Meaning |
327
328
  |:---------------------|:------------------------------------------------------------------------------|
328
- | `-c, --capability` | `deploy`, `read`, `logs:read`, `invoke`, `domains:attach`, or any mix. Repeatable or comma-separated. Default `deploy` |
329
+ | `-c, --capability` | A `{read\|write}:{resource}` word — `read:apps`, `write:functions`, `write:env`, `write:runs` and the rest. Repeatable or comma-separated. Default: `write:apps`, `write:functions`, `write:env`, `read:domains`, `read:tenant` |
330
+ | `--preset` | The words one job needs, by the job's name: `viewer`, `deployer`, `member`. [Which credential for which job](#which-credential-for-which-job) is what each one grants. Not with `-c` |
329
331
  | `-a, --app` | Restrict to these Apps, by slug. Repeatable. Default: every App in the workspace |
330
332
  | `--expires` | Days, or `never`. Default: 90 |
331
333
 
334
+ The resources are `tenant`, `apps`, `functions`, `env`, `domains`, `invocations`, `runs`,
335
+ `schedules`, `previews` and `egress`. A write reaches the read of the same resource, so
336
+ `write:functions` carries `read:functions` and there is no reason to name both. The command prints
337
+ the words the credential ended up with.
338
+
339
+ Some things are a person's alone, whatever a credential carries: renaming the workspace, detaching a
340
+ domain, widening the egress allowlist, billing, and this workspace's own credentials and members.
341
+ Those are not words to mint — a credential asking for one is told a person has to be at the keyboard.
342
+
332
343
  An App named in a restriction does not have to exist yet. A pipeline whose first deploy creates the
333
- App it was minted for is the ordinary case. A restriction bounds what a credential can disturb, not
334
- what it can read. A Function deployed into one App still reads the whole workspace's environment at
335
- runtime.
344
+ App it was minted for is the ordinary case. A restriction bounds what a credential reads as well as
345
+ what it disturbs, and `write:functions` is the hole in it: a Function deployed into an App the
346
+ credential does reach still reads the whole workspace's environment at runtime.
336
347
 
337
348
  ### List them
338
349
 
@@ -468,19 +479,22 @@ concluding the platform cannot do it.
468
479
  |:---------------------------|:------------------------------------------------------------------------|:--------------|
469
480
  | `list_templates` | The template catalogue, with what each one is for | nothing |
470
481
  | `get_template` | One template's files, environment contract and outbound providers | nothing |
471
- | `list_apps` | The Apps in the workspace, with the slug each is addressed by | `deploy` |
472
- | `list_functions` | The Functions in one App, and what their live version carries | `read` |
473
- | `list_versions` | A Function's Versions, and which one is live | `read` |
474
- | `get_usage` | The Tenant's usage and headroom | `read` |
475
- | `list_invocations` | Recent Invocations of a Function, failures included | `logs:read` |
476
- | `get_invocation` | One Invocation by id | `logs:read` |
477
- | `read_invocation_logs` | An Invocation's log body, a page at a time | `logs:read` |
478
- | `diagnose_latest_failure` | The latest failure, its logs and the Version that ran it, in one call | `logs:read`, `read` |
479
- | `deploy_function` | Deploys code and the static files it carries | `deploy` |
480
- | `deploy_status` | How a deploy went, by the handle it answered with | `deploy` |
481
- | `rollback_function` | Puts a Version the Function already has back on its public address | `deploy` |
482
- | `set_env_var` | Sets an App's environment variable, read at the next invocation | `deploy` |
483
- | `invoke_function` | Runs a deployed Function once and answers with the Invocation id | `invoke` |
482
+ | `list_apps` | The Apps the credential reaches, with the slug each is addressed by | `read:apps` |
483
+ | `list_functions` | The Functions in one App, and what their live version carries | `read:functions` |
484
+ | `list_versions` | A Function's Versions, and which one is live | `read:functions` |
485
+ | `get_usage` | The Tenant's usage and headroom | `read:tenant` |
486
+ | `list_invocations` | Recent Invocations of a Function, failures included | `read:invocations` |
487
+ | `get_invocation` | One Invocation by id | `read:invocations` |
488
+ | `read_invocation_logs` | An Invocation's log body, a page at a time | `read:invocations` |
489
+ | `diagnose_latest_failure` | The latest failure, its logs and the Version that ran it, in one call | `read:invocations`, `read:functions` |
490
+ | `deploy_function` | Deploys code and the static files it carries | `write:functions` |
491
+ | `deploy_status` | How a deploy went, by the handle it answered with | `read:functions` |
492
+ | `rollback_function` | Puts a Version the Function already has back on its public address | `write:functions` |
493
+ | `set_env_var` | Sets an App's environment variable, read at the next invocation | `write:env` |
494
+ | `invoke_function` | Runs a deployed Function once and answers with the Invocation id | `write:runs` |
495
+
496
+ A word that writes reaches the read of the same thing, so `write:functions` needs no `read:functions`
497
+ beside it, and the presets below are named in exactly these words.
484
498
 
485
499
  A deploy is two calls. The first says which of your files the platform does not already hold, by
486
500
  content hash; your agent uploads those bytes to `PUT /v1/assets/{content_hash}` with the same
@@ -499,42 +513,48 @@ is all the platform permits, and an agent taking it would end yours.
499
513
  ### Which credential for which job
500
514
 
501
515
  A credential carries the words its job needs and stops there. They are the same words
502
- [Deploy credentials](#mint-one) mints with.
516
+ [Deploy credentials](#mint-one) mints with, and `--preset` fills them in for you: it expands into the
517
+ words below before the request is built, and the command prints the words the credential ended up
518
+ with. A preset and `-c` together are refused rather than merged, since both name the same thing. The
519
+ preset is the name of the job; the words are the grant, and they are what travels.
520
+
521
+ A preset is a workspace role, and the ones offered here are the roles carrying nothing only a person
522
+ can hold. The name a job is minted under and the standing a member is given are one thing, rather
523
+ than two lists somebody has to keep level.
503
524
 
504
- **Read and investigate, without the ability to ship.** The agent reads Functions, Versions,
505
- Invocations and log bodies, diagnoses a failure, checks usage, and browses templates. Every tool that
506
- ships code or runs it refuses:
525
+ **Read and investigate, without the ability to ship** — `viewer`, which is every `read:` word the
526
+ platform has. The agent enumerates your Apps, reads Functions, Versions, Invocations and log bodies,
527
+ diagnoses a failure, checks usage, and browses templates. Every tool that ships code or runs it
528
+ refuses:
507
529
 
508
530
  ```bash
509
- npx wawesome credentials mint investigator -c read,logs:read -a prod
531
+ npx wawesome credentials mint reader --preset viewer -a prod
510
532
  ```
511
533
 
512
- One thing to know before you hand it over: `list_apps` sits behind `deploy`, the same word the HTTP
513
- route behind it asks for, so an investigation credential cannot enumerate your Apps. Name the App in
514
- the task and every other read works.
515
-
516
- **Read, investigate and run.** The same, plus `invoke_function`, so the agent can exercise a Function
517
- and read what it did. It still cannot deploy, roll back, or set a variable:
534
+ **Ship and read back** — `deployer`, which is every read plus `write:apps`, `write:functions`,
535
+ `write:env` and `write:runs`. Deploy, run, diagnose, roll back, set a key. Every tool in the table:
518
536
 
519
537
  ```bash
520
- npx wawesome credentials mint runner -c read,logs:read,invoke -a prod
538
+ npx wawesome credentials mint ci --preset deployer -a prod
521
539
  ```
522
540
 
523
- **The whole loop.** Deploy, run, diagnose, roll back, set a key. Every tool in the table:
541
+ **The whole workspace** — `member`, which is the deployer's words plus `write:schedules` and
542
+ `write:previews`, for an agent that pauses a schedule or cuts a preview as well:
524
543
 
525
544
  ```bash
526
- npx wawesome credentials mint agent -c deploy,read,logs:read,invoke -a prod
545
+ npx wawesome credentials mint agent --preset member -a prod
527
546
  ```
528
547
 
529
- Add `domains:attach` where the project declares a custom domain the deploy should claim. Nothing
530
- gives an agent billing, plan changes, credential management or your workspace's slug: those are
531
- closed to every credential, whatever it carries.
548
+ Add `write:domains` where the project declares a custom domain the deploy should claim. Nothing gives
549
+ an agent billing, a plan change, credential management or your workspace's slug: those are closed to
550
+ every credential, whatever it carries.
532
551
 
533
552
  Keep `-a` on all three. A credential restricted to one App is refused on every tool that names
534
553
  another, which is what stops an agent working on one client's project from touching another's.
535
- `get_invocation` and `read_invocation_logs` take an Invocation id rather than an App, and neither is
536
- held to the restriction yet, so an agent already holding an id can read that Invocation's telemetry
537
- and log body whichever App it belongs to.
554
+ `get_invocation` and `read_invocation_logs` take an Invocation id rather than an App, and an id
555
+ belonging to an App the credential cannot reach is answered as an id naming nothing. `list_apps`
556
+ answers a set rather than one App, so it is narrowed instead of refused: the credential is listed the
557
+ Apps it reaches and told nothing about the rest.
538
558
 
539
559
  ### When a tool refuses
540
560
 
@@ -542,10 +562,18 @@ A refusal is the tool's answer, not a protocol error, and it carries the same `r
542
562
  prints:
543
563
 
544
564
  - `credential-missing-capability`. The credential does not carry a word this tool needs. The refusal
545
- names it in `missing_capability`, which is the word to mint a credential with.
565
+ names the first in `missing_capability` and every one of them in `missing_capabilities`, which are
566
+ the words to mint a credential with. This one answers `403` rather than `200`, with a
567
+ `WWW-Authenticate: Bearer error="insufficient_scope"` challenge naming the same words and where
568
+ this endpoint's OAuth metadata is — a connector installed through consent reads it and asks its
569
+ human to widen the grant rather than to install again.
546
570
  - `app-outside-credential-scope`. The credential is restricted to named Apps and this is not one of
547
571
  them. A wider capability changes nothing here.
548
572
 
573
+ A `401` is the credential itself: revoked, expired, or one this platform never issued. Nothing else
574
+ answers one — a workspace that cannot deploy for a lapsed plan or a restriction is refused under its
575
+ own reason, and re-installing the connector would not fix either.
576
+
549
577
  A quota refusal carries its numbers under `allowance` beside the prose, so your agent reports
550
578
  "3 of 3 App slots" rather than handing you a sentence to read.
551
579
 
@@ -731,9 +759,9 @@ npx wawesome domains
731
759
  ```
732
760
 
733
761
  It prints the domain, where it got to, when the platform last checked, and the records to add. It
734
- changes nothing, and a deploy credential carrying `deploy` can run it, so a pipeline reads the same
735
- thing you do. The TXT record is minted a moment after the name is claimed, and an attach that outran
736
- it prints a row saying so rather than dropping the record from the list. That row is what this
762
+ changes nothing, and a deploy credential carrying `read:domains` can run it, so a pipeline reads the
763
+ same thing you do. The TXT record is minted a moment after the name is claimed, and an attach that
764
+ outran it prints a row saying so rather than dropping the record from the list. That row is what this
737
765
  command fills in, and it is where the deploy sends you: deploying again would change nothing, and a
738
766
  deploy that changes nothing is refused.
739
767
 
package/dist/index.mjs CHANGED
@@ -883,7 +883,7 @@ async function buildJs(entryInput, options) {
883
883
  * that has to name this version — `--version`, the dependency a scaffolded
884
884
  * project pins — reads it here, so a release bumps one file.
885
885
  */
886
- const CLI_VERSION = "0.14.1";
886
+ const CLI_VERSION = "0.14.3";
887
887
  //#endregion
888
888
  //#region src/prompt.ts
889
889
  /**
@@ -1685,7 +1685,7 @@ async function detachDomainCommand(hostname, options = {}) {
1685
1685
  * The one place a Tenant can ask. The records used to exist only in the output
1686
1686
  * of a deploy that changed something, so a deploy that outran the vendor left
1687
1687
  * nothing to run but a second deploy, which is refused for changing nothing
1688
- * (#617). Open to a deploy credential carrying `deploy`, since a pipeline asks
1688
+ * (#617). Open to a deploy credential carrying `read:domains`, since a pipeline asks
1689
1689
  * this too.
1690
1690
  */
1691
1691
  async function showDomainCommand(options = {}) {
@@ -4667,6 +4667,74 @@ async function workspaceCommand(action, target, options) {
4667
4667
  process.exit(1);
4668
4668
  }
4669
4669
  //#endregion
4670
+ //#region ../shared/mint-surface.generated.ts
4671
+ const MINT_PRESETS = [
4672
+ {
4673
+ name: "viewer",
4674
+ job: "Read and investigate",
4675
+ capabilities: [
4676
+ "read:tenant",
4677
+ "read:apps",
4678
+ "read:functions",
4679
+ "read:env",
4680
+ "read:domains",
4681
+ "read:invocations",
4682
+ "read:runs",
4683
+ "read:schedules",
4684
+ "read:previews",
4685
+ "read:egress"
4686
+ ],
4687
+ summary: "Reads the workspace, Apps, Functions, environment variables, domains, invocations, runs, schedules, previews and the egress allowlist. It writes nothing."
4688
+ },
4689
+ {
4690
+ name: "deployer",
4691
+ job: "Ship and read back",
4692
+ capabilities: [
4693
+ "read:tenant",
4694
+ "read:apps",
4695
+ "read:functions",
4696
+ "read:env",
4697
+ "read:domains",
4698
+ "read:invocations",
4699
+ "read:runs",
4700
+ "read:schedules",
4701
+ "read:previews",
4702
+ "read:egress",
4703
+ "write:apps",
4704
+ "write:functions",
4705
+ "write:env",
4706
+ "write:runs"
4707
+ ],
4708
+ summary: "Reads the workspace, Apps, Functions, environment variables, domains, invocations, runs, schedules, previews and the egress allowlist, and can create Apps, deploy Functions, set environment variables and run Functions. It does not attach domains, pause and resume schedules or create previews."
4709
+ },
4710
+ {
4711
+ name: "member",
4712
+ job: "Build in the workspace",
4713
+ capabilities: [
4714
+ "read:tenant",
4715
+ "read:apps",
4716
+ "read:functions",
4717
+ "read:env",
4718
+ "read:domains",
4719
+ "read:invocations",
4720
+ "read:runs",
4721
+ "read:schedules",
4722
+ "read:previews",
4723
+ "read:egress",
4724
+ "write:apps",
4725
+ "write:functions",
4726
+ "write:env",
4727
+ "write:runs",
4728
+ "write:schedules",
4729
+ "write:previews"
4730
+ ],
4731
+ summary: "Reads the workspace, Apps, Functions, environment variables, domains, invocations, runs, schedules, previews and the egress allowlist, and can create Apps, deploy Functions, set environment variables, run Functions, pause and resume schedules and create previews. It does not attach domains."
4732
+ }
4733
+ ];
4734
+ function mintPreset(name) {
4735
+ return MINT_PRESETS.find((preset) => preset.name === name);
4736
+ }
4737
+ //#endregion
4670
4738
  //#region src/deploy-credentials.ts
4671
4739
  const SECRET_SHOWN_ONCE = "Copy it now. This is the only time it will be shown. If you lose it, revoke this credential and mint another.";
4672
4740
  const REGENERATED_SECRET_SHOWN_ONCE = "Copy it now. This is the only time it will be shown. If you lose it, regenerate this credential again.";
@@ -4689,6 +4757,54 @@ function asList(raw) {
4689
4757
  const words = (Array.isArray(raw) ? raw : [raw]).flatMap((word) => String(word).split(",")).map((word) => word.trim()).filter((word) => word.length > 0);
4690
4758
  return words.length > 0 ? words : void 0;
4691
4759
  }
4760
+ /** What the help block is written to fit. A narrower terminal wraps it again;
4761
+ * a wider one leaves the words where they are put. */
4762
+ const HELP_WIDTH = 88;
4763
+ function wordsUnder(words, gutter) {
4764
+ const lines = [];
4765
+ let line = "";
4766
+ words.forEach((word, i) => {
4767
+ const piece = i < words.length - 1 ? `${word},` : word;
4768
+ const joined = line ? `${line} ${piece}` : piece;
4769
+ if (line && gutter.length + joined.length > HELP_WIDTH) {
4770
+ lines.push(gutter + line);
4771
+ line = piece;
4772
+ } else line = joined;
4773
+ });
4774
+ return line ? [...lines, gutter + line] : lines;
4775
+ }
4776
+ /**
4777
+ * Every preset with the job on one line and the words it grants under it,
4778
+ * wherever one is offered or refused.
4779
+ *
4780
+ * The words are printed rather than stood for: a name on its own would be a
4781
+ * label an owner has to trust, free to drift from the grant it makes. They are
4782
+ * under the name rather than beside it because a grid word names one resource
4783
+ * and one verb, so a job takes ten of them or more.
4784
+ */
4785
+ function presetsOffered(indent = " ", pad = 12) {
4786
+ return MINT_PRESETS.flatMap((preset) => [`${indent}${preset.name.padEnd(pad)}${preset.job}`, ...wordsUnder(preset.capabilities, `${indent}${" ".repeat(pad)}`)]);
4787
+ }
4788
+ /** The `--preset` flag as `--help` states it: the job each one is for, the
4789
+ * words being too many to fit on a flag's line and printed by the command's
4790
+ * own help. */
4791
+ const PRESET_FLAG_HELP = `Grant the words a job needs: ${MINT_PRESETS.map((preset) => `${preset.name} (${preset.job.toLowerCase()})`).join(", ")}. 'wawesome credentials --help' prints what each one grants. Not with --capability`;
4792
+ /**
4793
+ * The words to mint with: the ones named, or the ones a preset names.
4794
+ *
4795
+ * A preset expands here rather than travelling as a name, so what the command
4796
+ * sends and prints is the vocabulary itself: a label the platform never sees
4797
+ * would be free to drift from the words it stands for.
4798
+ */
4799
+ function capabilitiesAsked(options) {
4800
+ const named = asList(options.capability);
4801
+ const preset = options.preset?.trim();
4802
+ if (!preset) return named;
4803
+ if (named) fail(`--preset ${preset} and --capability ${named.join(",")} both name what this credential carries.`, "Name one of them. A preset is a fill, so pass its words to --capability if you mean to edit them:", ...presetsOffered());
4804
+ const found = mintPreset(preset);
4805
+ if (!found) fail(`'${preset}' is not a preset. The ones offered are:`, ...presetsOffered());
4806
+ return [...found.capabilities];
4807
+ }
4692
4808
  function parseExpiry(raw) {
4693
4809
  if (raw === void 0) return void 0;
4694
4810
  const asked = String(raw).trim().toLowerCase();
@@ -4786,10 +4902,10 @@ async function deleteCredential(creds, credentialId) {
4786
4902
  * and not one character besides.
4787
4903
  */
4788
4904
  async function mintCredentialCommand(name, options) {
4789
- if (!name || !name.trim()) fail("No name given. Usage: wawesome credentials mint <name> [--capability deploy] [--app <app>] [--expires 90|never]", "The name is what tells the CI one from the agent one a year from now.");
4905
+ if (!name || !name.trim()) fail("No name given. Usage: wawesome credentials mint <name> [--capability write:functions] [--app <app>] [--expires 90|never]", "The name is what tells the CI one from the agent one a year from now.");
4906
+ const capabilities = capabilitiesAsked(options);
4790
4907
  const creds = requireCredentials$1();
4791
4908
  const payload = { name: name.trim() };
4792
- const capabilities = asList(options.capability);
4793
4909
  if (capabilities) payload.capabilities = capabilities;
4794
4910
  const apps = asList(options.app);
4795
4911
  if (apps) payload.apps = apps;
@@ -5516,19 +5632,23 @@ cli.command("credentials [action] [target]", "Mint, list, regenerate, revoke and
5516
5632
  revoke <name-or-prefix> Revoke one, immediately and for good
5517
5633
  delete <name-or-prefix> Forget a revoked or expired one, freeing its name
5518
5634
 
5635
+ Presets (--preset), each the words one job needs, a write carrying its read:
5636
+ ${presetsOffered(" ").join("\n")}
5637
+
5519
5638
  Examples:
5520
5639
  wawesome credentials
5521
5640
  wawesome credentials mint ci-pipeline
5522
- wawesome credentials mint agent -c read,logs:read,invoke --expires never
5523
- wawesome credentials mint prod-deploy -c deploy -a prod --expires 30
5524
- wawesome credentials mint ci -c deploy,domains:attach -a prod
5641
+ wawesome credentials mint viewer --preset viewer -a prod
5642
+ wawesome credentials mint reader -c read:apps,read:functions,read:invocations -a prod
5643
+ wawesome credentials mint ci --preset deployer --expires never
5644
+ wawesome credentials mint ci -c write:apps,write:functions,write:env,read:tenant,write:domains -a prod
5525
5645
  wawesome credentials mint ci-pipeline > /tmp/secret
5526
5646
  wawesome credentials regenerate ci-pipeline
5527
5647
  wawesome credentials regenerate ci --expires never --yes
5528
5648
  wawesome credentials revoke ci-pipeline
5529
5649
  wawesome credentials revoke wawe_ab3k9x --yes
5530
- wawesome credentials delete ci-pipeline`).option("-c, --capability <capability>", "Capability to grant: deploy, read, logs:read, invoke, domains:attach (repeatable or comma-separated, default: deploy)").option("-a, --app <app>", "Restrict the credential to this App (repeatable or comma-separated, default: every App)").option("--expires <days|never>", "Days until the credential expires, or 'never' (default: 90)").option("-y, --yes", "Skip the confirmation a regenerate, revoke or delete asks for").option("-v, --verbose", "Enable verbose debug output").action((action, target, options) => credentialsCommand(action, target, options));
5531
- cli.command("credentials mint <name>", "Mint a deploy credential, printing its secret exactly once").option("-c, --capability <capability>", "Capability to grant: deploy, read, logs:read, invoke, domains:attach (repeatable or comma-separated)").option("-a, --app <app>", "Restrict the credential to this App (repeatable or comma-separated)").option("--expires <days|never>", "Days until the credential expires, or 'never' (default: 90)").option("-v, --verbose", "Enable verbose debug output").action((name, options) => mintCredentialCommand(name, options));
5650
+ wawesome credentials delete ci-pipeline`).option("-c, --capability <capability>", "Capability to grant, as {read|write}:{resource}: read:apps, write:functions, write:env, write:runs and the rest (repeatable or comma-separated, default: what a deploy needs)").option("--preset <preset>", PRESET_FLAG_HELP).option("-a, --app <app>", "Restrict the credential to this App (repeatable or comma-separated, default: every App)").option("--expires <days|never>", "Days until the credential expires, or 'never' (default: 90)").option("-y, --yes", "Skip the confirmation a regenerate, revoke or delete asks for").option("-v, --verbose", "Enable verbose debug output").action((action, target, options) => credentialsCommand(action, target, options));
5651
+ cli.command("credentials mint <name>", "Mint a deploy credential, printing its secret exactly once").option("-c, --capability <capability>", "Capability to grant, as {read|write}:{resource}: read:apps, write:functions, write:env, write:runs and the rest (repeatable or comma-separated; a write carries its read)").option("--preset <preset>", PRESET_FLAG_HELP).option("-a, --app <app>", "Restrict the credential to this App (repeatable or comma-separated)").option("--expires <days|never>", "Days until the credential expires, or 'never' (default: 90)").option("-v, --verbose", "Enable verbose debug output").action((name, options) => mintCredentialCommand(name, options));
5532
5652
  cli.command("credentials list", "List deploy credentials, never their secrets").alias("credentials ls").option("-v, --verbose", "Enable verbose debug output").action((options) => listCredentialsCommand(options));
5533
5653
  cli.command("credentials regenerate <name-or-prefix>", "Replace a deploy credential's secret, keeping its name, capabilities and Apps").option("--expires <days|never>", "Days until the regenerated credential expires, or 'never' (default: 90)").option("-y, --yes", "Regenerate without being asked to confirm").option("-v, --verbose", "Enable verbose debug output").action((target, options) => regenerateCredentialCommand(target, options));
5534
5654
  cli.command("credentials revoke <name-or-prefix>", "Revoke a deploy credential, immediately and for good").option("-y, --yes", "Revoke without being asked to confirm").option("-v, --verbose", "Enable verbose debug output").action((target, options) => revokeCredentialCommand(target, options));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wawesome",
3
- "version": "0.14.1",
3
+ "version": "0.14.3",
4
4
  "description": "CLI tool for building and deploying serverless functions on wawesome.io platform",
5
5
  "type": "module",
6
6
  "bin": {