@prospera/eprospera-cli 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -10,4 +10,18 @@ the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html
10
10
 
11
11
  ## Unreleased
12
12
 
13
- - Initial scaffold. No published releases yet.
13
+ No unreleased changes.
14
+
15
+ ## 0.1.1 - 2026-05-25
16
+
17
+ ### Patch Changes
18
+
19
+ - Pin prompt runtime dependencies and align Node engine metadata to avoid npm
20
+ install engine warnings from transitive prompt packages.
21
+
22
+ ## 0.1.0 - 2026-05-25
23
+
24
+ - Initial public release of `@prospera/eprospera-cli`.
25
+ - Added the v0.1 command surface, generated OpenCLI schema/docs/completions,
26
+ API client core, credential handling, output formatting, tests, CI, npm
27
+ packaging, bundled release assets, and GitHub Actions release workflow.
package/README.md CHANGED
@@ -8,22 +8,21 @@ default so it can be used cleanly from shells, CI jobs, and agentic tools.
8
8
 
9
9
  ## Status
10
10
 
11
- This repository is in v0.1 release preparation. The OpenCLI command spec,
12
- generated API types, command implementations, completion/doc generation scripts,
13
- validation tooling, CI, release automation, and bundled executable build are in
14
- place. The npm package is not published until the first Changesets release runs.
11
+ The package is published to npm as `@prospera/eprospera-cli`. The OpenCLI
12
+ command spec, generated API types, command implementations, completion/doc
13
+ generation scripts, validation tooling, CI, release automation, trusted
14
+ publishing, and bundled executable build are in place.
15
15
 
16
16
  ## Requirements
17
17
 
18
- - Node.js 20 or newer
18
+ - Node.js `^20.17.0 || ^22.13.0 || >=23.5.0`
19
19
  - pnpm 10.x
20
20
 
21
21
  ## Install
22
22
 
23
- Once published:
24
-
25
23
  ```sh
26
24
  npm install -g @prospera/eprospera-cli
25
+ eprospera --help
27
26
  ```
28
27
 
29
28
  For local development:
@@ -104,7 +103,7 @@ pnpm run pack:smoke
104
103
 
105
104
  ## Release
106
105
 
107
- The first public release should happen only after the full local gate passes:
106
+ Before publishing or tagging a release, run the full local gate:
108
107
 
109
108
  ```sh
110
109
  pnpm run gen:all
@@ -117,24 +116,20 @@ npm pack --dry-run --json --ignore-scripts
117
116
  pnpm run pack:smoke
118
117
  ```
119
118
 
120
- For the first public publish, use one of these npm auth paths:
121
-
122
- - Manual: publish from a logged-in maintainer account with a one-time code.
123
- - Automated: configure the repository `NPM_TOKEN` secret with a granular token
124
- that can publish `@prospera/eprospera-cli` and bypass publish-time 2FA.
125
-
126
- After the package exists on npm, prefer npm trusted publishing with GitHub
127
- Actions publisher `Honduras-Prospera-inc/eprospera-cli` and workflow filename
128
- `release.yml`, then remove any long-lived publish token.
129
-
130
- Manual first publish:
119
+ Releases are managed by Changesets and GitHub Actions. npm trusted publishing is
120
+ configured for repository `Honduras-Prospera-inc/eprospera-cli` and workflow
121
+ file `release.yml`, so future publishes should not require a long-lived
122
+ `NPM_TOKEN` secret.
131
123
 
132
124
  ```sh
133
- npm publish --access public --otp <one-time-code>
134
125
  npm install -g @prospera/eprospera-cli
135
126
  eprospera --help
136
127
  ```
137
128
 
129
+ The initial `0.1.0` publish was performed manually from an authenticated npm
130
+ maintainer account, then matched with the GitHub release
131
+ `@prospera/eprospera-cli@0.1.0`.
132
+
138
133
  ## License
139
134
 
140
135
  MIT
@@ -15682,70 +15682,6 @@ var use_prefix = __nccwpck_require__(1921);
15682
15682
  var use_keypress = __nccwpck_require__(8729);
15683
15683
  // EXTERNAL MODULE: ./node_modules/.pnpm/@inquirer+core@11.1.10_@types+node@25.9.1/node_modules/@inquirer/core/dist/lib/key.js
15684
15684
  var lib_key = __nccwpck_require__(5372);
15685
- // EXTERNAL MODULE: ./node_modules/.pnpm/@inquirer+ansi@2.0.5/node_modules/@inquirer/ansi/dist/index.js
15686
- var dist = __nccwpck_require__(582);
15687
- ;// CONCATENATED MODULE: ./node_modules/.pnpm/@inquirer+password@5.0.13_@types+node@25.9.1/node_modules/@inquirer/password/dist/index.js
15688
-
15689
-
15690
- const passwordTheme = {
15691
- style: {
15692
- maskedText: '[input is masked]',
15693
- },
15694
- };
15695
- /* harmony default export */ const password_dist = ((0,create_prompt/* createPrompt */.H)((config, done) => {
15696
- const { validate = () => true } = config;
15697
- const theme = (0,make_theme/* makeTheme */.k)(passwordTheme, config.theme);
15698
- const [status, setStatus] = (0,use_state/* useState */.J)('idle');
15699
- const [errorMsg, setError] = (0,use_state/* useState */.J)();
15700
- const [value, setValue] = (0,use_state/* useState */.J)('');
15701
- const prefix = (0,use_prefix/* usePrefix */.M)({ status, theme });
15702
- (0,use_keypress/* useKeypress */.o)(async (key, rl) => {
15703
- // Ignore keypress while our prompt is doing other processing.
15704
- if (status !== 'idle') {
15705
- return;
15706
- }
15707
- if ((0,lib_key/* isEnterKey */.Ci)(key)) {
15708
- const answer = value;
15709
- setStatus('loading');
15710
- const isValid = await validate(answer);
15711
- if (isValid === true) {
15712
- setValue(answer);
15713
- setStatus('done');
15714
- done(answer);
15715
- }
15716
- else {
15717
- // Reset the readline line value to the previous value. On line event, the value
15718
- // get cleared, forcing the user to re-enter the value instead of fixing it.
15719
- rl.write(value);
15720
- setError(isValid || 'You must provide a valid value');
15721
- setStatus('idle');
15722
- }
15723
- }
15724
- else {
15725
- setValue(rl.line);
15726
- setError(undefined);
15727
- }
15728
- });
15729
- const message = theme.style.message(config.message, status);
15730
- let formattedValue = '';
15731
- let helpTip;
15732
- if (config.mask) {
15733
- const maskChar = typeof config.mask === 'string' ? config.mask : '*';
15734
- formattedValue = maskChar.repeat(value.length);
15735
- }
15736
- else if (status !== 'done') {
15737
- helpTip = `${theme.style.help(theme.style.maskedText)}${dist/* cursorHide */.$m}`;
15738
- }
15739
- if (status === 'done') {
15740
- formattedValue = theme.style.answer(formattedValue);
15741
- }
15742
- let error = '';
15743
- if (errorMsg) {
15744
- error = theme.style.error(errorMsg);
15745
- }
15746
- return [[prefix, message, config.mask ? formattedValue : helpTip].join(' '), error];
15747
- }));
15748
-
15749
15685
  // EXTERNAL MODULE: ./node_modules/.pnpm/@inquirer+core@11.1.10_@types+node@25.9.1/node_modules/@inquirer/core/dist/lib/use-effect.js
15750
15686
  var use_effect = __nccwpck_require__(3860);
15751
15687
  ;// CONCATENATED MODULE: ./node_modules/.pnpm/@inquirer+input@5.0.13_@types+node@25.9.1/node_modules/@inquirer/input/dist/index.js
@@ -15753,7 +15689,7 @@ var use_effect = __nccwpck_require__(3860);
15753
15689
  const inputTheme = {
15754
15690
  validationFailureMode: 'keep',
15755
15691
  };
15756
- /* harmony default export */ const input_dist = ((0,create_prompt/* createPrompt */.H)((config, done) => {
15692
+ /* harmony default export */ const dist = ((0,create_prompt/* createPrompt */.H)((config, done) => {
15757
15693
  const { prefill = 'tab' } = config;
15758
15694
  const theme = (0,make_theme/* makeTheme */.k)(inputTheme, config.theme);
15759
15695
  const [status, setStatus] = (0,use_state/* useState */.J)('idle');
@@ -15849,6 +15785,70 @@ const inputTheme = {
15849
15785
  ];
15850
15786
  }));
15851
15787
 
15788
+ // EXTERNAL MODULE: ./node_modules/.pnpm/@inquirer+ansi@2.0.5/node_modules/@inquirer/ansi/dist/index.js
15789
+ var ansi_dist = __nccwpck_require__(582);
15790
+ ;// CONCATENATED MODULE: ./node_modules/.pnpm/@inquirer+password@5.0.13_@types+node@25.9.1/node_modules/@inquirer/password/dist/index.js
15791
+
15792
+
15793
+ const passwordTheme = {
15794
+ style: {
15795
+ maskedText: '[input is masked]',
15796
+ },
15797
+ };
15798
+ /* harmony default export */ const password_dist = ((0,create_prompt/* createPrompt */.H)((config, done) => {
15799
+ const { validate = () => true } = config;
15800
+ const theme = (0,make_theme/* makeTheme */.k)(passwordTheme, config.theme);
15801
+ const [status, setStatus] = (0,use_state/* useState */.J)('idle');
15802
+ const [errorMsg, setError] = (0,use_state/* useState */.J)();
15803
+ const [value, setValue] = (0,use_state/* useState */.J)('');
15804
+ const prefix = (0,use_prefix/* usePrefix */.M)({ status, theme });
15805
+ (0,use_keypress/* useKeypress */.o)(async (key, rl) => {
15806
+ // Ignore keypress while our prompt is doing other processing.
15807
+ if (status !== 'idle') {
15808
+ return;
15809
+ }
15810
+ if ((0,lib_key/* isEnterKey */.Ci)(key)) {
15811
+ const answer = value;
15812
+ setStatus('loading');
15813
+ const isValid = await validate(answer);
15814
+ if (isValid === true) {
15815
+ setValue(answer);
15816
+ setStatus('done');
15817
+ done(answer);
15818
+ }
15819
+ else {
15820
+ // Reset the readline line value to the previous value. On line event, the value
15821
+ // get cleared, forcing the user to re-enter the value instead of fixing it.
15822
+ rl.write(value);
15823
+ setError(isValid || 'You must provide a valid value');
15824
+ setStatus('idle');
15825
+ }
15826
+ }
15827
+ else {
15828
+ setValue(rl.line);
15829
+ setError(undefined);
15830
+ }
15831
+ });
15832
+ const message = theme.style.message(config.message, status);
15833
+ let formattedValue = '';
15834
+ let helpTip;
15835
+ if (config.mask) {
15836
+ const maskChar = typeof config.mask === 'string' ? config.mask : '*';
15837
+ formattedValue = maskChar.repeat(value.length);
15838
+ }
15839
+ else if (status !== 'done') {
15840
+ helpTip = `${theme.style.help(theme.style.maskedText)}${ansi_dist/* cursorHide */.$m}`;
15841
+ }
15842
+ if (status === 'done') {
15843
+ formattedValue = theme.style.answer(formattedValue);
15844
+ }
15845
+ let error = '';
15846
+ if (errorMsg) {
15847
+ error = theme.style.error(errorMsg);
15848
+ }
15849
+ return [[prefix, message, config.mask ? formattedValue : helpTip].join(' '), error];
15850
+ }));
15851
+
15852
15852
  // EXTERNAL MODULE: ./node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.js + 16 modules
15853
15853
  var schemas = __nccwpck_require__(7662);
15854
15854
  // EXTERNAL MODULE: ./dist/src/credentials/store.js + 1 modules
@@ -15866,6 +15866,7 @@ var runtime = __nccwpck_require__(109);
15866
15866
 
15867
15867
 
15868
15868
 
15869
+
15869
15870
  const agentKeySchema = schemas/* string */.Yj()
15870
15871
  .trim()
15871
15872
  .regex(/^ak-.+/, "Agent Key must start with ak-.");
@@ -15906,7 +15907,7 @@ async function resolveScopes(scopes, deps) {
15906
15907
  return parseScopes(scopes);
15907
15908
  }
15908
15909
  const value = (await deps.promptInput?.("Agent Key scopes (comma-separated, optional)")) ??
15909
- (await input_dist({ message: "Agent Key scopes (comma-separated, optional)", default: "" }));
15910
+ (await dist({ message: "Agent Key scopes (comma-separated, optional)", default: "" }));
15910
15911
  return parseScopes(value);
15911
15912
  }
15912
15913
  function parseScopes(value) {
@@ -18614,7 +18615,7 @@ async function confirmAction(message, globals, deps = {}) {
18614
18615
 
18615
18616
 
18616
18617
 
18617
- const BUNDLED_VERSION = "0.1.0";
18618
+ const BUNDLED_VERSION = "0.1.1";
18618
18619
  const VERSION = readPackageVersion() ?? BUNDLED_VERSION;
18619
18620
  function readPackageVersion() {
18620
18621
  let currentDir = (0,node_path__WEBPACK_IMPORTED_MODULE_1__.dirname)((0,node_url__WEBPACK_IMPORTED_MODULE_2__.fileURLToPath)(import.meta.url));
@@ -1,4 +1,5 @@
1
- import { input, password } from "@inquirer/prompts";
1
+ import input from "@inquirer/input";
2
+ import password from "@inquirer/password";
2
3
  import { z } from "zod";
3
4
  import { saveCredential } from "../../credentials/store.js";
4
5
  import { ExitCodes, ExitError } from "../../errors.js";
@@ -1,4 +1,4 @@
1
- import { confirm } from "@inquirer/prompts";
1
+ import confirm from "@inquirer/confirm";
2
2
  import { terminalCapabilities } from "../output/tty.js";
3
3
  export async function confirmAction(message, globals, deps = {}) {
4
4
  if (globals.yes) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prospera/eprospera-cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "TypeScript CLI for the e-Prospera public API.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -13,28 +13,12 @@
13
13
  "bin": {
14
14
  "eprospera": "bin/eprospera.js"
15
15
  },
16
- "scripts": {
17
- "build": "tsc -p tsconfig.json",
18
- "bundle": "pnpm run build && tsx scripts/build-bundle.ts",
19
- "check": "biome check . && tsc --noEmit",
20
- "gen:all": "pnpm run gen:api && pnpm run gen:docs && pnpm run gen:completions",
21
- "gen:api": "tsx scripts/gen-api-client.ts",
22
- "gen:completions": "tsx scripts/gen-completions.ts",
23
- "gen:docs": "tsx scripts/gen-docs.ts",
24
- "pack:smoke": "tsx scripts/smoke-packed-install.ts",
25
- "prepare": "simple-git-hooks",
26
- "test": "vitest run",
27
- "test:e2e": "vitest run test/e2e",
28
- "typecheck": "tsc --noEmit",
29
- "validate:ocs": "tsx scripts/validate-ocs.ts"
30
- },
31
16
  "keywords": [],
32
17
  "author": "",
33
18
  "license": "MIT",
34
19
  "engines": {
35
- "node": ">=20"
20
+ "node": "^20.17.0 || ^22.13.0 || >=23.5.0"
36
21
  },
37
- "packageManager": "pnpm@10.33.4",
38
22
  "publishConfig": {
39
23
  "access": "public"
40
24
  },
@@ -54,10 +38,14 @@
54
38
  "vitest": "^4.1.7"
55
39
  },
56
40
  "dependencies": {
57
- "@inquirer/prompts": "^8.4.3",
41
+ "@inquirer/confirm": "6.0.13",
42
+ "@inquirer/core": "11.1.10",
43
+ "@inquirer/input": "5.0.13",
44
+ "@inquirer/password": "5.0.13",
58
45
  "cli-table3": "^0.6.5",
59
46
  "commander": "^14.0.3",
60
47
  "keytar": "^7.9.0",
48
+ "mute-stream": "3.0.0",
61
49
  "openapi-fetch": "^0.17.0",
62
50
  "ora": "^9.4.0",
63
51
  "picocolors": "^1.1.1",
@@ -66,5 +54,19 @@
66
54
  },
67
55
  "simple-git-hooks": {
68
56
  "pre-commit": "pnpm run gen:all"
57
+ },
58
+ "scripts": {
59
+ "build": "tsc -p tsconfig.json",
60
+ "bundle": "pnpm run build && tsx scripts/build-bundle.ts",
61
+ "check": "biome check . && tsc --noEmit",
62
+ "gen:all": "pnpm run gen:api && pnpm run gen:docs && pnpm run gen:completions",
63
+ "gen:api": "tsx scripts/gen-api-client.ts",
64
+ "gen:completions": "tsx scripts/gen-completions.ts",
65
+ "gen:docs": "tsx scripts/gen-docs.ts",
66
+ "pack:smoke": "tsx scripts/smoke-packed-install.ts",
67
+ "test": "vitest run",
68
+ "test:e2e": "vitest run test/e2e",
69
+ "typecheck": "tsc --noEmit",
70
+ "validate:ocs": "tsx scripts/validate-ocs.ts"
69
71
  }
70
- }
72
+ }