usepaso 0.2.3 → 0.3.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/README.md +18 -21
- package/dist/commands/init.js +4 -4
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/inspect.d.ts.map +1 -1
- package/dist/commands/inspect.js +50 -1
- package/dist/commands/inspect.js.map +1 -1
- package/dist/commands/serve.d.ts.map +1 -1
- package/dist/commands/serve.js +14 -7
- package/dist/commands/serve.js.map +1 -1
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +6 -1
- package/dist/commands/shared.js.map +1 -1
- package/dist/commands/test.d.ts +1 -0
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +72 -19
- package/dist/commands/test.js.map +1 -1
- package/dist/commands/validate.d.ts.map +1 -1
- package/dist/commands/validate.js +49 -3
- package/dist/commands/validate.js.map +1 -1
- package/dist/executor.d.ts +6 -3
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +73 -14
- package/dist/executor.js.map +1 -1
- package/dist/generators/mcp.d.ts.map +1 -1
- package/dist/generators/mcp.js +30 -6
- package/dist/generators/mcp.js.map +1 -1
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -1
- package/dist/openapi.d.ts.map +1 -1
- package/dist/openapi.js +24 -14
- package/dist/openapi.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +46 -4
- package/dist/validator.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
#
|
|
1
|
+
# usepaso
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
One paso. Every protocol.
|
|
4
|
+
|
|
5
|
+
Declare your API's agent capabilities once. UsePaso generates the MCP server. No protocol expertise required.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Self-hosted. Open source. Apache 2.0.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
[](https://github.com/5h1vmani/usepaso/actions/workflows/ci.yml)
|
|
10
|
+
[](https://www.npmjs.com/package/usepaso)
|
|
10
11
|
|
|
11
12
|
## Install
|
|
12
13
|
|
|
@@ -23,19 +24,21 @@ npx usepaso init --name "MyService"
|
|
|
23
24
|
# Or generate from an existing OpenAPI spec
|
|
24
25
|
npx usepaso init --from-openapi ./openapi.json
|
|
25
26
|
|
|
26
|
-
#
|
|
27
|
+
# Check it
|
|
27
28
|
npx usepaso validate
|
|
28
29
|
|
|
29
30
|
# Preview what MCP tools will be generated
|
|
30
31
|
npx usepaso inspect
|
|
31
32
|
|
|
32
|
-
# Test a capability
|
|
33
|
+
# Test a capability (without the consequences)
|
|
33
34
|
npx usepaso test list_issues -p org=acme -p project=web --dry-run
|
|
34
35
|
|
|
35
36
|
# Start the MCP server
|
|
36
37
|
npx usepaso serve
|
|
37
38
|
```
|
|
38
39
|
|
|
40
|
+
That's it. Your API is agent-ready.
|
|
41
|
+
|
|
39
42
|
## What You Write
|
|
40
43
|
|
|
41
44
|
```yaml
|
|
@@ -71,23 +74,19 @@ capabilities:
|
|
|
71
74
|
|
|
72
75
|
## What UsePaso Does With It
|
|
73
76
|
|
|
74
|
-
|
|
75
|
-
usepaso.yaml → MCP server (Claude, Cursor, any MCP client)
|
|
76
|
-
```
|
|
77
|
+
Each capability becomes an MCP tool. When an agent calls it, UsePaso makes the HTTP request to your API with proper auth, parameters, and error handling.
|
|
77
78
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
## CLI Commands
|
|
79
|
+
## CLI
|
|
81
80
|
|
|
82
81
|
| Command | What it does |
|
|
83
82
|
|---------|-------------|
|
|
84
83
|
| `usepaso init` | Scaffold a `usepaso.yaml` template |
|
|
85
|
-
| `usepaso init --from-openapi` | Generate from OpenAPI spec
|
|
84
|
+
| `usepaso init --from-openapi` | Generate from an OpenAPI spec |
|
|
86
85
|
| `usepaso validate` | Check your declaration for errors |
|
|
87
86
|
| `usepaso inspect` | Preview MCP tools that will be generated |
|
|
88
|
-
| `usepaso test <capability>` | Test a capability
|
|
89
|
-
| `usepaso test
|
|
90
|
-
| `usepaso serve` | Start an MCP server (stdio
|
|
87
|
+
| `usepaso test <capability>` | Test a capability against the live API |
|
|
88
|
+
| `usepaso test --dry-run` | Same thing, minus the consequences |
|
|
89
|
+
| `usepaso serve` | Start an MCP server (stdio) |
|
|
91
90
|
| `usepaso serve --verbose` | Serve with request logging |
|
|
92
91
|
|
|
93
92
|
## Programmatic Usage
|
|
@@ -100,9 +99,7 @@ const errors = validate(decl);
|
|
|
100
99
|
const server = generateMcpServer(decl);
|
|
101
100
|
```
|
|
102
101
|
|
|
103
|
-
## Connect to
|
|
104
|
-
|
|
105
|
-
### Claude Desktop
|
|
102
|
+
## Connect to Claude Desktop
|
|
106
103
|
|
|
107
104
|
```json
|
|
108
105
|
{
|
package/dist/commands/init.js
CHANGED
|
@@ -66,7 +66,7 @@ function registerInit(program) {
|
|
|
66
66
|
if (result.totalOperations > result.generatedCount) {
|
|
67
67
|
console.log(` Note: ${result.totalOperations} operations found, capped at ${result.generatedCount}. Edit usepaso.yaml to add more.`);
|
|
68
68
|
}
|
|
69
|
-
console.log('Review the file
|
|
69
|
+
console.log('Review the file. Adjust permissions. Then: usepaso validate');
|
|
70
70
|
}
|
|
71
71
|
catch (err) {
|
|
72
72
|
console.error(`Failed to convert OpenAPI spec: ${err instanceof Error ? err.message : err}`);
|
|
@@ -75,10 +75,10 @@ function registerInit(program) {
|
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
77
|
const name = opts.name || 'MyService';
|
|
78
|
-
const template = loadTemplate().
|
|
78
|
+
const template = loadTemplate().replaceAll('__SERVICE_NAME__', name);
|
|
79
79
|
(0, fs_1.writeFileSync)(outPath, template, 'utf-8');
|
|
80
|
-
console.log(`Created usepaso.yaml for "${name}"
|
|
81
|
-
console.log('
|
|
80
|
+
console.log(`Created usepaso.yaml for "${name}".`);
|
|
81
|
+
console.log('Declare your capabilities, then run: usepaso validate');
|
|
82
82
|
});
|
|
83
83
|
}
|
|
84
84
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"inspect.d.ts","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8FtD"}
|
package/dist/commands/inspect.js
CHANGED
|
@@ -2,15 +2,64 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerInspect = registerInspect;
|
|
4
4
|
const path_1 = require("path");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const parser_1 = require("../parser");
|
|
7
|
+
const validator_1 = require("../validator");
|
|
5
8
|
const shared_1 = require("./shared");
|
|
6
9
|
function registerInspect(program) {
|
|
7
10
|
program
|
|
8
11
|
.command('inspect')
|
|
9
12
|
.description('Show what MCP tools would be generated (dry run)')
|
|
10
13
|
.option('-f, --file <path>', 'Path to usepaso.yaml', 'usepaso.yaml')
|
|
14
|
+
.option('--json', 'Output result as JSON')
|
|
11
15
|
.action((opts) => {
|
|
16
|
+
const filePath = (0, path_1.resolve)(opts.file);
|
|
17
|
+
if (opts.json) {
|
|
18
|
+
// JSON mode: handle errors as JSON, not stderr
|
|
19
|
+
if (!(0, fs_1.existsSync)(filePath)) {
|
|
20
|
+
console.log(JSON.stringify({ error: `File not found: ${filePath}` }));
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
let decl;
|
|
24
|
+
try {
|
|
25
|
+
decl = (0, parser_1.parseFile)(filePath);
|
|
26
|
+
const results = (0, validator_1.validate)(decl);
|
|
27
|
+
const errors = results.filter((e) => e.level !== 'warning');
|
|
28
|
+
if (errors.length > 0) {
|
|
29
|
+
console.log(JSON.stringify({
|
|
30
|
+
error: `Validation failed`,
|
|
31
|
+
errors: errors.map((e) => ({ path: e.path, message: e.message })),
|
|
32
|
+
}));
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
console.log(JSON.stringify({ error: err instanceof Error ? err.message : String(err) }));
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
const forbidden = new Set(decl.permissions?.forbidden || []);
|
|
41
|
+
const tools = decl.capabilities.filter((c) => !forbidden.has(c.name));
|
|
42
|
+
console.log(JSON.stringify({
|
|
43
|
+
service: decl.service.name,
|
|
44
|
+
auth: decl.service.auth?.type || 'none',
|
|
45
|
+
tools: tools.map((t) => ({
|
|
46
|
+
name: t.name,
|
|
47
|
+
permission: t.permission,
|
|
48
|
+
method: t.method,
|
|
49
|
+
path: t.path,
|
|
50
|
+
description: t.description,
|
|
51
|
+
consent_required: t.consent_required || false,
|
|
52
|
+
params: t.inputs
|
|
53
|
+
? Object.entries(t.inputs).map(([k, v]) => `${k}${v.required ? '*' : ''}: ${v.type}`)
|
|
54
|
+
: [],
|
|
55
|
+
})),
|
|
56
|
+
forbidden: decl.permissions?.forbidden || [],
|
|
57
|
+
}));
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Normal mode
|
|
12
61
|
try {
|
|
13
|
-
const decl = (0, shared_1.loadAndValidate)(
|
|
62
|
+
const decl = (0, shared_1.loadAndValidate)(filePath);
|
|
14
63
|
const forbidden = new Set(decl.permissions?.forbidden || []);
|
|
15
64
|
const tools = decl.capabilities.filter((c) => !forbidden.has(c.name));
|
|
16
65
|
console.log(`Service: ${decl.service.name}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../src/commands/inspect.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2EpD"}
|
package/dist/commands/serve.js
CHANGED
|
@@ -16,14 +16,21 @@ function registerServe(program) {
|
|
|
16
16
|
const filePath = (0, path_1.resolve)(opts.file);
|
|
17
17
|
try {
|
|
18
18
|
const decl = (0, shared_1.loadAndValidate)(filePath);
|
|
19
|
-
// Auth
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
console.error(`Warning: auth type "${decl.service.auth.type}" is configured but USEPASO_AUTH_TOKEN is not set. API requests will likely fail with 401.`);
|
|
19
|
+
// Auth notices (logged once at startup, not per-request)
|
|
20
|
+
const authToken = process.env.USEPASO_AUTH_TOKEN;
|
|
21
|
+
if (authToken !== undefined && authToken === '') {
|
|
22
|
+
console.error(`Warning: USEPASO_AUTH_TOKEN is set but empty. API requests will likely fail.`);
|
|
24
23
|
}
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
if (decl.service.auth) {
|
|
25
|
+
if (decl.service.auth.type === 'none' && authToken) {
|
|
26
|
+
console.error(`Note: auth.type is "none" — ignoring USEPASO_AUTH_TOKEN`);
|
|
27
|
+
}
|
|
28
|
+
else if (decl.service.auth.type !== 'none' && !authToken) {
|
|
29
|
+
console.error(`Warning: auth type "${decl.service.auth.type}" is configured but USEPASO_AUTH_TOKEN is not set. API requests will likely fail with 401.`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
console.error(`usepaso serving "${decl.service.name}" (${decl.capabilities.length} capabilities). Agents welcome.`);
|
|
33
|
+
console.error('Transport: stdio. Waiting for an MCP client...');
|
|
27
34
|
// Show MCP config snippet
|
|
28
35
|
console.error((0, shared_1.mcpConfigSnippet)(filePath, decl.service.name));
|
|
29
36
|
console.error('');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAuBjE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAyB9E"}
|
package/dist/commands/shared.js
CHANGED
|
@@ -12,7 +12,9 @@ function loadAndValidate(filePath) {
|
|
|
12
12
|
process.exit(1);
|
|
13
13
|
}
|
|
14
14
|
const decl = (0, parser_1.parseFile)(filePath);
|
|
15
|
-
const
|
|
15
|
+
const results = (0, validator_1.validate)(decl);
|
|
16
|
+
const errors = results.filter((e) => e.level !== 'warning');
|
|
17
|
+
const warnings = results.filter((e) => e.level === 'warning');
|
|
16
18
|
if (errors.length > 0) {
|
|
17
19
|
console.error(`Validation failed with ${errors.length} error(s):`);
|
|
18
20
|
for (const err of errors) {
|
|
@@ -20,6 +22,9 @@ function loadAndValidate(filePath) {
|
|
|
20
22
|
}
|
|
21
23
|
process.exit(1);
|
|
22
24
|
}
|
|
25
|
+
for (const w of warnings) {
|
|
26
|
+
console.error(` warning: ${w.path}: ${w.message}`);
|
|
27
|
+
}
|
|
23
28
|
return decl;
|
|
24
29
|
}
|
|
25
30
|
function mcpConfigSnippet(filePath, serviceName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":";;AAMA,
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":";;AAMA,0CAuBC;AAED,4CAyBC;AAxDD,+BAA+B;AAC/B,2BAAgC;AAChC,sCAAsC;AACtC,4CAAwC;AAGxC,SAAgB,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC,IAAA,eAAU,EAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,IAAA,kBAAS,EAAC,QAAQ,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,IAAA,oBAAQ,EAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IAE9D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,MAAM,YAAY,CAAC,CAAC;QACnE,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAAgB,EAAE,WAAmB;IACpE,MAAM,OAAO,GAAG,IAAA,cAAO,EAAC,QAAQ,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IACnE,OAAO;;;;;;OAMF,IAAI;;4CAEiC,OAAO;;;;;;;;KAQ9C,IAAI;;0CAEiC,OAAO;;;EAG/C,CAAC;AACH,CAAC"}
|
package/dist/commands/test.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAwB3E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8HnD"}
|
package/dist/commands/test.js
CHANGED
|
@@ -1,62 +1,114 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.coerceValue = coerceValue;
|
|
3
4
|
exports.registerTest = registerTest;
|
|
4
5
|
const path_1 = require("path");
|
|
5
6
|
const shared_1 = require("./shared");
|
|
6
7
|
const executor_1 = require("../executor");
|
|
8
|
+
const INTEGER_RE = /^-?\d+$/;
|
|
9
|
+
const NUMBER_RE = /^-?\d+(\.\d+)?$/;
|
|
10
|
+
function coerceValue(raw, type, key) {
|
|
11
|
+
switch (type) {
|
|
12
|
+
case 'integer': {
|
|
13
|
+
if (!INTEGER_RE.test(raw)) {
|
|
14
|
+
throw new Error(`Parameter "${key}" must be an integer, got "${raw}"`);
|
|
15
|
+
}
|
|
16
|
+
return parseInt(raw, 10);
|
|
17
|
+
}
|
|
18
|
+
case 'number': {
|
|
19
|
+
if (!NUMBER_RE.test(raw)) {
|
|
20
|
+
throw new Error(`Parameter "${key}" must be a number, got "${raw}"`);
|
|
21
|
+
}
|
|
22
|
+
return parseFloat(raw);
|
|
23
|
+
}
|
|
24
|
+
case 'boolean':
|
|
25
|
+
if (raw === 'true')
|
|
26
|
+
return true;
|
|
27
|
+
if (raw === 'false')
|
|
28
|
+
return false;
|
|
29
|
+
throw new Error(`Parameter "${key}" must be true or false, got "${raw}"`);
|
|
30
|
+
case 'string':
|
|
31
|
+
case 'enum':
|
|
32
|
+
return raw;
|
|
33
|
+
default:
|
|
34
|
+
return raw;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
7
37
|
function registerTest(program) {
|
|
8
38
|
program
|
|
9
39
|
.command('test <capability>')
|
|
10
|
-
.description('Test a capability
|
|
40
|
+
.description('Test a capability against the live API (or --dry-run, minus the consequences)')
|
|
11
41
|
.option('-f, --file <path>', 'Path to usepaso.yaml', 'usepaso.yaml')
|
|
12
42
|
.option('-p, --param <key=value...>', 'Parameters (repeatable)', (val, acc) => {
|
|
13
43
|
acc.push(val);
|
|
14
44
|
return acc;
|
|
15
45
|
}, [])
|
|
16
46
|
.option('--dry-run', 'Show the HTTP request without executing it')
|
|
47
|
+
.option('--timeout <seconds>', 'Request timeout in seconds', '30')
|
|
17
48
|
.action(async (capabilityName, opts) => {
|
|
18
49
|
try {
|
|
19
50
|
const decl = (0, shared_1.loadAndValidate)((0, path_1.resolve)(opts.file));
|
|
51
|
+
// Auth notices (once, not per-request)
|
|
52
|
+
const authToken = process.env.USEPASO_AUTH_TOKEN;
|
|
53
|
+
if (decl.service.auth?.type === 'none' && authToken) {
|
|
54
|
+
console.error(`Note: auth.type is "none" — ignoring USEPASO_AUTH_TOKEN`);
|
|
55
|
+
}
|
|
56
|
+
if (authToken !== undefined && authToken === '') {
|
|
57
|
+
console.error(`Warning: USEPASO_AUTH_TOKEN is set but empty. API requests will likely fail.`);
|
|
58
|
+
}
|
|
20
59
|
const cap = decl.capabilities.find((c) => c.name === capabilityName);
|
|
21
60
|
if (!cap) {
|
|
22
61
|
console.error(`Capability "${capabilityName}" not found.`);
|
|
23
62
|
console.error(`Available: ${decl.capabilities.map((c) => c.name).join(', ')}`);
|
|
24
63
|
process.exit(1);
|
|
25
64
|
}
|
|
26
|
-
// Parse params
|
|
65
|
+
// Parse params using declared input types
|
|
27
66
|
const args = {};
|
|
67
|
+
const paramErrors = [];
|
|
28
68
|
for (const p of opts.param) {
|
|
29
69
|
const eq = p.indexOf('=');
|
|
30
70
|
if (eq === -1) {
|
|
31
|
-
|
|
32
|
-
|
|
71
|
+
paramErrors.push(`Invalid param format: "${p}". Use key=value.`);
|
|
72
|
+
continue;
|
|
33
73
|
}
|
|
34
74
|
const key = p.slice(0, eq);
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
75
|
+
const raw = p.slice(eq + 1);
|
|
76
|
+
const inputDef = cap.inputs?.[key];
|
|
77
|
+
if (inputDef) {
|
|
78
|
+
try {
|
|
79
|
+
args[key] = coerceValue(raw, inputDef.type, key);
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
paramErrors.push(e instanceof Error ? e.message : String(e));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// Unknown param — keep as string but warn
|
|
87
|
+
args[key] = raw;
|
|
88
|
+
console.error(`Warning: unknown parameter "${key}" — not declared in inputs for ${capabilityName}`);
|
|
89
|
+
}
|
|
43
90
|
}
|
|
44
91
|
// Check for missing required params
|
|
45
92
|
if (cap.inputs) {
|
|
46
93
|
for (const [name, input] of Object.entries(cap.inputs)) {
|
|
47
94
|
if (input.required && !(name in args)) {
|
|
48
|
-
|
|
49
|
-
process.exit(1);
|
|
95
|
+
paramErrors.push(`Missing required parameter: ${name} (${input.description})`);
|
|
50
96
|
}
|
|
51
97
|
}
|
|
52
98
|
}
|
|
53
|
-
|
|
99
|
+
if (paramErrors.length > 0) {
|
|
100
|
+
for (const err of paramErrors)
|
|
101
|
+
console.error(err);
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
const req = (0, executor_1.buildRequest)(cap, args, decl, authToken);
|
|
54
105
|
if (opts.dryRun) {
|
|
55
106
|
console.log('--- DRY RUN (no request will be made) ---');
|
|
56
107
|
console.log('');
|
|
57
108
|
console.log(`${req.method} ${req.url}`);
|
|
109
|
+
const token = authToken;
|
|
58
110
|
for (const [k, v] of Object.entries(req.headers)) {
|
|
59
|
-
const display =
|
|
111
|
+
const display = token && token.length >= 8 && v.includes(token) ? `${v.slice(0, 12)}...` : v;
|
|
60
112
|
console.log(`${k}: ${display}`);
|
|
61
113
|
}
|
|
62
114
|
if (req.body) {
|
|
@@ -70,15 +122,16 @@ function registerTest(program) {
|
|
|
70
122
|
if (req.body)
|
|
71
123
|
console.log(`→ Body: ${req.body}`);
|
|
72
124
|
console.log('');
|
|
73
|
-
const
|
|
125
|
+
const timeoutMs = Math.round(parseFloat(opts.timeout) * 1000);
|
|
126
|
+
const result = await (0, executor_1.executeRequest)(req, { timeout: timeoutMs });
|
|
74
127
|
if (result.error) {
|
|
75
|
-
console.error((0, executor_1.formatError)(result, decl));
|
|
128
|
+
console.error((0, executor_1.formatError)(result, decl, authToken));
|
|
76
129
|
process.exit(1);
|
|
77
130
|
}
|
|
78
131
|
console.log(`← ${result.status} ${result.statusText} (${result.durationMs}ms)`);
|
|
79
132
|
console.log('');
|
|
80
133
|
if (result.status && result.status >= 400) {
|
|
81
|
-
console.error((0, executor_1.formatError)(result, decl));
|
|
134
|
+
console.error((0, executor_1.formatError)(result, decl, authToken));
|
|
82
135
|
process.exit(1);
|
|
83
136
|
}
|
|
84
137
|
console.log(result.body);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkEvD"}
|
|
@@ -2,19 +2,65 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.registerValidate = registerValidate;
|
|
4
4
|
const path_1 = require("path");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const parser_1 = require("../parser");
|
|
7
|
+
const validator_1 = require("../validator");
|
|
5
8
|
const shared_1 = require("./shared");
|
|
6
9
|
function registerValidate(program) {
|
|
7
10
|
program
|
|
8
11
|
.command('validate')
|
|
9
12
|
.description('Validate a usepaso.yaml file')
|
|
10
13
|
.option('-f, --file <path>', 'Path to usepaso.yaml', 'usepaso.yaml')
|
|
14
|
+
.option('--json', 'Output result as JSON')
|
|
11
15
|
.action((opts) => {
|
|
16
|
+
const filePath = (0, path_1.resolve)(opts.file);
|
|
17
|
+
if (opts.json) {
|
|
18
|
+
// JSON mode: capture everything as structured data
|
|
19
|
+
if (!(0, fs_1.existsSync)(filePath)) {
|
|
20
|
+
console.log(JSON.stringify({
|
|
21
|
+
valid: false,
|
|
22
|
+
service: null,
|
|
23
|
+
capabilities: 0,
|
|
24
|
+
errors: [{ path: '', message: `File not found: ${filePath}` }],
|
|
25
|
+
warnings: [],
|
|
26
|
+
}));
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const decl = (0, parser_1.parseFile)(filePath);
|
|
31
|
+
const results = (0, validator_1.validate)(decl);
|
|
32
|
+
const errors = results.filter((e) => e.level !== 'warning');
|
|
33
|
+
const warnings = results.filter((e) => e.level === 'warning');
|
|
34
|
+
const valid = errors.length === 0;
|
|
35
|
+
console.log(JSON.stringify({
|
|
36
|
+
valid,
|
|
37
|
+
service: decl.service?.name || null,
|
|
38
|
+
capabilities: decl.capabilities?.length || 0,
|
|
39
|
+
errors: errors.map((e) => ({ path: e.path, message: e.message })),
|
|
40
|
+
warnings: warnings.map((e) => ({ path: e.path, message: e.message })),
|
|
41
|
+
}));
|
|
42
|
+
if (!valid)
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
console.log(JSON.stringify({
|
|
47
|
+
valid: false,
|
|
48
|
+
service: null,
|
|
49
|
+
capabilities: 0,
|
|
50
|
+
errors: [{ path: '', message: err instanceof Error ? err.message : String(err) }],
|
|
51
|
+
warnings: [],
|
|
52
|
+
}));
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
// Normal mode
|
|
12
58
|
try {
|
|
13
|
-
const decl = (0, shared_1.loadAndValidate)(
|
|
14
|
-
console.log(`valid (${decl.service.name}, ${decl.capabilities.length} capabilities)`);
|
|
59
|
+
const decl = (0, shared_1.loadAndValidate)(filePath);
|
|
60
|
+
console.log(`valid (${decl.service.name}, ${decl.capabilities.length} capabilities, 0 regrets)`);
|
|
15
61
|
}
|
|
16
62
|
catch (err) {
|
|
17
|
-
console.error(`
|
|
63
|
+
console.error(`Error: ${err instanceof Error ? err.message : err}`);
|
|
18
64
|
process.exit(1);
|
|
19
65
|
}
|
|
20
66
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
|
package/dist/executor.d.ts
CHANGED
|
@@ -15,14 +15,17 @@ export interface ExecutionResult {
|
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* Build the HTTP request for a capability without executing it.
|
|
18
|
+
* Note: does not validate required inputs — callers (CLI, MCP) must validate before calling.
|
|
18
19
|
*/
|
|
19
|
-
export declare function buildRequest(cap: PasoCapability, args: Record<string, unknown>, decl: PasoDeclaration): ExecutionRequest;
|
|
20
|
+
export declare function buildRequest(cap: PasoCapability, args: Record<string, unknown>, decl: PasoDeclaration, authToken?: string): ExecutionRequest;
|
|
20
21
|
/**
|
|
21
22
|
* Execute an HTTP request and return the result.
|
|
22
23
|
*/
|
|
23
|
-
export declare function executeRequest(req: ExecutionRequest
|
|
24
|
+
export declare function executeRequest(req: ExecutionRequest, options?: {
|
|
25
|
+
timeout?: number;
|
|
26
|
+
}): Promise<ExecutionResult>;
|
|
24
27
|
/**
|
|
25
28
|
* Format a friendly error message for common HTTP status codes.
|
|
26
29
|
*/
|
|
27
|
-
export declare function formatError(result: ExecutionResult, decl: PasoDeclaration): string;
|
|
30
|
+
export declare function formatError(result: ExecutionResult, decl: PasoDeclaration, authToken?: string): string;
|
|
28
31
|
//# sourceMappingURL=executor.d.ts.map
|
package/dist/executor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE,eAAe,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,gBAAgB,CAgGlB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,gBAAgB,EACrB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7B,OAAO,CAAC,eAAe,CAAC,CA2E1B;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,eAAe,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAqCR"}
|