@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 +15 -1
- package/README.md +15 -20
- package/dist/bundle/eprospera.mjs +68 -67
- package/dist/src/commands/auth/login.js +2 -1
- package/dist/src/prompts/confirm.js +1 -1
- package/package.json +22 -20
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
|
-
|
|
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
|
-
|
|
12
|
-
generated API types, command implementations, completion/doc
|
|
13
|
-
validation tooling, CI, release automation,
|
|
14
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@prospera/eprospera-cli",
|
|
3
|
-
"version": "0.1.
|
|
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
|
+
"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/
|
|
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
|
+
}
|