@thupham/volley-mcp 1.0.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/dist/collections.d.ts +50 -0
- package/dist/collections.js +125 -0
- package/dist/collections.js.map +1 -0
- package/dist/curl.d.ts +14 -0
- package/dist/curl.js +90 -0
- package/dist/curl.js.map +1 -0
- package/dist/format.d.ts +10 -0
- package/dist/format.js +70 -0
- package/dist/format.js.map +1 -0
- package/dist/importers.d.ts +75 -0
- package/dist/importers.js +164 -0
- package/dist/importers.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/junit.d.ts +5 -0
- package/dist/junit.js +30 -0
- package/dist/junit.js.map +1 -0
- package/dist/native.d.ts +56 -0
- package/dist/native.js +44 -0
- package/dist/native.js.map +1 -0
- package/dist/session.d.ts +52 -0
- package/dist/session.js +135 -0
- package/dist/session.js.map +1 -0
- package/dist/tools/collections.d.ts +3 -0
- package/dist/tools/collections.js +50 -0
- package/dist/tools/collections.js.map +1 -0
- package/dist/tools/env.d.ts +3 -0
- package/dist/tools/env.js +33 -0
- package/dist/tools/env.js.map +1 -0
- package/dist/tools/graphql.d.ts +3 -0
- package/dist/tools/graphql.js +44 -0
- package/dist/tools/graphql.js.map +1 -0
- package/dist/tools/importCurl.d.ts +3 -0
- package/dist/tools/importCurl.js +36 -0
- package/dist/tools/importCurl.js.map +1 -0
- package/dist/tools/importers.d.ts +2 -0
- package/dist/tools/importers.js +62 -0
- package/dist/tools/importers.js.map +1 -0
- package/dist/tools/inspect.d.ts +3 -0
- package/dist/tools/inspect.js +102 -0
- package/dist/tools/inspect.js.map +1 -0
- package/dist/tools/ping.d.ts +6 -0
- package/dist/tools/ping.js +29 -0
- package/dist/tools/ping.js.map +1 -0
- package/dist/tools/policy.d.ts +3 -0
- package/dist/tools/policy.js +28 -0
- package/dist/tools/policy.js.map +1 -0
- package/dist/tools/request.d.ts +3 -0
- package/dist/tools/request.js +111 -0
- package/dist/tools/request.js.map +1 -0
- package/dist/tools/save.d.ts +3 -0
- package/dist/tools/save.js +67 -0
- package/dist/tools/save.js.map +1 -0
- package/dist/tools/stream.d.ts +3 -0
- package/dist/tools/stream.js +76 -0
- package/dist/tools/stream.js.map +1 -0
- package/dist/tools/ws.d.ts +3 -0
- package/dist/tools/ws.js +68 -0
- package/dist/tools/ws.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Session } from "./session.js";
|
|
2
|
+
export interface Step {
|
|
3
|
+
id?: string;
|
|
4
|
+
type?: "http" | "graphql" | "ws" | "sse";
|
|
5
|
+
request?: Record<string, unknown>;
|
|
6
|
+
assert?: unknown[];
|
|
7
|
+
extract?: Record<string, string>;
|
|
8
|
+
tags?: string[];
|
|
9
|
+
skip?: boolean;
|
|
10
|
+
continueOnError?: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface Collection {
|
|
13
|
+
name?: string;
|
|
14
|
+
vars?: Record<string, unknown>;
|
|
15
|
+
defaults?: {
|
|
16
|
+
headers?: Record<string, unknown>;
|
|
17
|
+
timeoutMs?: number;
|
|
18
|
+
};
|
|
19
|
+
steps?: Step[];
|
|
20
|
+
}
|
|
21
|
+
export declare function loadCollection(path: string): Collection;
|
|
22
|
+
export declare function listCollectionFiles(dir: string): string[];
|
|
23
|
+
export interface StepReport {
|
|
24
|
+
id: string;
|
|
25
|
+
type: string;
|
|
26
|
+
ok: boolean;
|
|
27
|
+
status?: number | null;
|
|
28
|
+
assertions?: {
|
|
29
|
+
passed: number;
|
|
30
|
+
failed: number;
|
|
31
|
+
skipped: number;
|
|
32
|
+
};
|
|
33
|
+
failures?: string[];
|
|
34
|
+
note?: string | null;
|
|
35
|
+
error?: string | null;
|
|
36
|
+
skipped?: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface RunReport {
|
|
39
|
+
name: string;
|
|
40
|
+
ok: boolean;
|
|
41
|
+
passed: number;
|
|
42
|
+
failed: number;
|
|
43
|
+
skipped: number;
|
|
44
|
+
steps: StepReport[];
|
|
45
|
+
}
|
|
46
|
+
export declare function runCollection(session: Session, path: string, opts?: {
|
|
47
|
+
env?: string;
|
|
48
|
+
only?: string[];
|
|
49
|
+
tags?: string[];
|
|
50
|
+
}): Promise<RunReport>;
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Declarative collection loading and execution. Collections are YAML/JSON files describing
|
|
3
|
+
* ordered steps with per-step assertions and variable extraction (see docs/collection-format.md).
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, readdirSync, statSync } from "node:fs";
|
|
6
|
+
import { join, extname, resolve } from "node:path";
|
|
7
|
+
import { parse as parseYaml } from "yaml";
|
|
8
|
+
import { httpRequest, graphqlRequest, wsSession, sseSession } from "./native.js";
|
|
9
|
+
const PLACEHOLDER = /\{\{\s*([^}]+?)\s*\}\}/g;
|
|
10
|
+
function lookup(base, path) {
|
|
11
|
+
return path.split(".").reduce((acc, seg) => {
|
|
12
|
+
if (acc && typeof acc === "object")
|
|
13
|
+
return acc[seg];
|
|
14
|
+
return undefined;
|
|
15
|
+
}, base);
|
|
16
|
+
}
|
|
17
|
+
/** Resolve {{...}} inside collection var values against the current variable base. */
|
|
18
|
+
function resolveColVars(vars, base) {
|
|
19
|
+
const out = {};
|
|
20
|
+
for (const [k, v] of Object.entries(vars)) {
|
|
21
|
+
if (typeof v === "string") {
|
|
22
|
+
out[k] = v.replace(PLACEHOLDER, (_m, expr) => {
|
|
23
|
+
const val = lookup(base, String(expr).trim());
|
|
24
|
+
return val === undefined ? "" : typeof val === "string" ? val : JSON.stringify(val);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
out[k] = v;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return out;
|
|
32
|
+
}
|
|
33
|
+
export function loadCollection(path) {
|
|
34
|
+
const text = readFileSync(path, "utf8");
|
|
35
|
+
if (extname(path) === ".json")
|
|
36
|
+
return JSON.parse(text);
|
|
37
|
+
return parseYaml(text);
|
|
38
|
+
}
|
|
39
|
+
export function listCollectionFiles(dir) {
|
|
40
|
+
const root = resolve(dir);
|
|
41
|
+
const out = [];
|
|
42
|
+
const walk = (d, depth) => {
|
|
43
|
+
if (depth > 3)
|
|
44
|
+
return;
|
|
45
|
+
for (const entry of readdirSync(d)) {
|
|
46
|
+
if (entry === "node_modules" || entry.startsWith("."))
|
|
47
|
+
continue;
|
|
48
|
+
const p = join(d, entry);
|
|
49
|
+
const st = statSync(p);
|
|
50
|
+
if (st.isDirectory())
|
|
51
|
+
walk(p, depth + 1);
|
|
52
|
+
else if ([".yaml", ".yml", ".json"].includes(extname(p)))
|
|
53
|
+
out.push(p);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
try {
|
|
57
|
+
walk(root, 0);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
/* ignore */
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
63
|
+
}
|
|
64
|
+
async function execStep(step, vars, defaults) {
|
|
65
|
+
const req = { ...(step.request ?? {}) };
|
|
66
|
+
req.headers = { ...(defaults?.headers ?? {}), ...(req.headers ?? {}) };
|
|
67
|
+
if (defaults?.timeoutMs && req.timeoutMs === undefined)
|
|
68
|
+
req.timeoutMs = defaults.timeoutMs;
|
|
69
|
+
const spec = { ...req, assert: step.assert, extract: step.extract, vars };
|
|
70
|
+
switch (step.type ?? "http") {
|
|
71
|
+
case "graphql":
|
|
72
|
+
return graphqlRequest(spec);
|
|
73
|
+
case "ws":
|
|
74
|
+
return wsSession(spec);
|
|
75
|
+
case "sse":
|
|
76
|
+
return sseSession(spec);
|
|
77
|
+
default:
|
|
78
|
+
return httpRequest(spec);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export async function runCollection(session, path, opts = {}) {
|
|
82
|
+
const col = loadCollection(path);
|
|
83
|
+
const steps = col.steps ?? [];
|
|
84
|
+
const report = { name: col.name ?? path, ok: true, passed: 0, failed: 0, skipped: 0, steps: [] };
|
|
85
|
+
for (let i = 0; i < steps.length; i++) {
|
|
86
|
+
const step = steps[i];
|
|
87
|
+
const id = step.id ?? `step-${i + 1}`;
|
|
88
|
+
const selected = (!opts.only || opts.only.includes(id)) &&
|
|
89
|
+
(!opts.tags || (step.tags ?? []).some((t) => opts.tags.includes(t)));
|
|
90
|
+
if (step.skip || !selected) {
|
|
91
|
+
report.skipped++;
|
|
92
|
+
report.steps.push({ id, type: step.type ?? "http", ok: true, skipped: true });
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
const base = session.mergedVars(opts.env);
|
|
96
|
+
const colVars = resolveColVars(col.vars ?? {}, base);
|
|
97
|
+
const vars = { ...colVars, ...base };
|
|
98
|
+
const result = await execStep(step, vars, col.defaults);
|
|
99
|
+
session.applyExtracted(result.extracted);
|
|
100
|
+
const failures = (result.assertions?.results ?? []).filter((r) => !r.ok && !r.skipped).map((r) => `${r.desc}: ${r.detail ?? ""}`);
|
|
101
|
+
const ok = !result.error && (result.ok ?? false);
|
|
102
|
+
report.steps.push({
|
|
103
|
+
id,
|
|
104
|
+
type: step.type ?? "http",
|
|
105
|
+
ok,
|
|
106
|
+
status: result.status,
|
|
107
|
+
assertions: result.assertions
|
|
108
|
+
? { passed: result.assertions.passed, failed: result.assertions.failed, skipped: result.assertions.skipped }
|
|
109
|
+
: undefined,
|
|
110
|
+
failures: failures.length ? failures : undefined,
|
|
111
|
+
note: result.note,
|
|
112
|
+
error: result.error,
|
|
113
|
+
});
|
|
114
|
+
if (ok)
|
|
115
|
+
report.passed++;
|
|
116
|
+
else {
|
|
117
|
+
report.failed++;
|
|
118
|
+
report.ok = false;
|
|
119
|
+
if (!step.continueOnError)
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return report;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=collections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collections.js","sourceRoot":"","sources":["../src/collections.ts"],"names":[],"mappings":"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"}
|
package/dist/curl.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Minimal `curl` command parser -> structured http_request spec. */
|
|
2
|
+
export interface ParsedCurl {
|
|
3
|
+
method: string;
|
|
4
|
+
url: string;
|
|
5
|
+
headers: Record<string, string>;
|
|
6
|
+
body?: unknown;
|
|
7
|
+
bodyType?: "json" | "text";
|
|
8
|
+
auth?: {
|
|
9
|
+
type: "basic";
|
|
10
|
+
username: string;
|
|
11
|
+
password?: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export declare function parseCurl(command: string): ParsedCurl;
|
package/dist/curl.js
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/** Minimal `curl` command parser -> structured http_request spec. */
|
|
2
|
+
/** Tokenize a shell-ish command respecting single/double quotes and line continuations. */
|
|
3
|
+
function tokenize(input) {
|
|
4
|
+
const cleaned = input.replace(/\\\r?\n/g, " ");
|
|
5
|
+
const tokens = [];
|
|
6
|
+
let cur = "";
|
|
7
|
+
let quote = null;
|
|
8
|
+
for (let i = 0; i < cleaned.length; i++) {
|
|
9
|
+
const c = cleaned[i];
|
|
10
|
+
if (quote) {
|
|
11
|
+
if (c === quote)
|
|
12
|
+
quote = null;
|
|
13
|
+
else
|
|
14
|
+
cur += c;
|
|
15
|
+
}
|
|
16
|
+
else if (c === '"' || c === "'") {
|
|
17
|
+
quote = c;
|
|
18
|
+
}
|
|
19
|
+
else if (/\s/.test(c)) {
|
|
20
|
+
if (cur)
|
|
21
|
+
tokens.push(cur), (cur = "");
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
cur += c;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (cur)
|
|
28
|
+
tokens.push(cur);
|
|
29
|
+
return tokens;
|
|
30
|
+
}
|
|
31
|
+
export function parseCurl(command) {
|
|
32
|
+
const tokens = tokenize(command.trim());
|
|
33
|
+
const out = { method: "", url: "", headers: {} };
|
|
34
|
+
const dataParts = [];
|
|
35
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
36
|
+
const t = tokens[i];
|
|
37
|
+
const next = () => tokens[++i];
|
|
38
|
+
if (t === "curl")
|
|
39
|
+
continue;
|
|
40
|
+
if (t === "-X" || t === "--request")
|
|
41
|
+
out.method = next().toUpperCase();
|
|
42
|
+
else if (t === "-H" || t === "--header") {
|
|
43
|
+
const h = next();
|
|
44
|
+
const idx = h.indexOf(":");
|
|
45
|
+
if (idx > 0)
|
|
46
|
+
out.headers[h.slice(0, idx).trim()] = h.slice(idx + 1).trim();
|
|
47
|
+
}
|
|
48
|
+
else if (t === "-d" || t === "--data" || t === "--data-raw" || t === "--data-binary" || t === "--data-ascii") {
|
|
49
|
+
dataParts.push(next());
|
|
50
|
+
}
|
|
51
|
+
else if (t === "-u" || t === "--user") {
|
|
52
|
+
const [username, password] = next().split(":");
|
|
53
|
+
out.auth = { type: "basic", username, password };
|
|
54
|
+
}
|
|
55
|
+
else if (t === "--url") {
|
|
56
|
+
out.url = next();
|
|
57
|
+
}
|
|
58
|
+
else if (t === "--compressed" || t === "-L" || t === "--location" || t === "-s" || t === "--silent" || t === "-k" || t === "--insecure") {
|
|
59
|
+
/* flags without values, ignore */
|
|
60
|
+
}
|
|
61
|
+
else if (t.startsWith("-")) {
|
|
62
|
+
// Unknown flag; skip a following value if it isn't another flag or the URL.
|
|
63
|
+
if (tokens[i + 1] && !tokens[i + 1].startsWith("-") && !/^https?:\/\//.test(tokens[i + 1]))
|
|
64
|
+
i++;
|
|
65
|
+
}
|
|
66
|
+
else if (!out.url && /^https?:\/\//.test(t)) {
|
|
67
|
+
out.url = t;
|
|
68
|
+
}
|
|
69
|
+
else if (!out.url) {
|
|
70
|
+
out.url = t;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (dataParts.length) {
|
|
74
|
+
const raw = dataParts.join("&");
|
|
75
|
+
try {
|
|
76
|
+
out.body = JSON.parse(raw);
|
|
77
|
+
out.bodyType = "json";
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
out.body = raw;
|
|
81
|
+
out.bodyType = "text";
|
|
82
|
+
}
|
|
83
|
+
if (!out.method)
|
|
84
|
+
out.method = "POST";
|
|
85
|
+
}
|
|
86
|
+
if (!out.method)
|
|
87
|
+
out.method = "GET";
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=curl.js.map
|
package/dist/curl.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"curl.js","sourceRoot":"","sources":["../src/curl.ts"],"names":[],"mappings":"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"}
|
package/dist/format.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shapes an ExecResult into a token-efficient object for the model, honoring `verbosity`.
|
|
3
|
+
* Full bodies live in the response store; only summaries/handles are surfaced by default.
|
|
4
|
+
* Arrays (frames, events) are capped to prevent token blow-up.
|
|
5
|
+
*/
|
|
6
|
+
import type { ExecResult } from "./native.js";
|
|
7
|
+
import type { Verbosity } from "./session.js";
|
|
8
|
+
export declare function formatHttp(result: ExecResult, verbosity: Verbosity, handle: string): Record<string, unknown>;
|
|
9
|
+
export declare function formatWs(result: ExecResult, verbosity: Verbosity, handle: string): Record<string, unknown>;
|
|
10
|
+
export declare function formatSse(result: ExecResult, verbosity: Verbosity, handle: string): Record<string, unknown>;
|
package/dist/format.js
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
const MAX_FRAMES_PREVIEW = 10;
|
|
2
|
+
const MAX_EVENTS_PREVIEW = 10;
|
|
3
|
+
function capArray(arr, max) {
|
|
4
|
+
if (!arr || arr.length <= max)
|
|
5
|
+
return arr;
|
|
6
|
+
return [...arr.slice(0, max), `…(+${arr.length - max} more, use inspect_response)`];
|
|
7
|
+
}
|
|
8
|
+
function assertionSummary(a, verbosity) {
|
|
9
|
+
if (!a)
|
|
10
|
+
return undefined;
|
|
11
|
+
const failed = a.results.filter((r) => !r.ok && !r.skipped);
|
|
12
|
+
return {
|
|
13
|
+
passed: a.passed,
|
|
14
|
+
failed: a.failed,
|
|
15
|
+
skipped: a.skipped,
|
|
16
|
+
// Always surface failures; surface all results only when full.
|
|
17
|
+
results: verbosity === "full" ? a.results : failed,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export function formatHttp(result, verbosity, handle) {
|
|
21
|
+
if (result.error)
|
|
22
|
+
return { ok: false, error: result.error };
|
|
23
|
+
const out = {
|
|
24
|
+
ok: result.ok,
|
|
25
|
+
status: result.status,
|
|
26
|
+
statusText: result.statusText,
|
|
27
|
+
timeMs: result.timeMs,
|
|
28
|
+
assertions: assertionSummary(result.assertions, verbosity),
|
|
29
|
+
extracted: result.extracted && Object.keys(result.extracted).length ? result.extracted : undefined,
|
|
30
|
+
bodyShape: result.bodyShape,
|
|
31
|
+
bodyBytes: result.bodyBytes,
|
|
32
|
+
responseHandle: handle,
|
|
33
|
+
hint: "Use inspect_response with this handle + a jsonpath to read more of the body.",
|
|
34
|
+
};
|
|
35
|
+
if (result.graphqlErrors)
|
|
36
|
+
out.graphqlErrors = result.graphqlErrors;
|
|
37
|
+
if (verbosity === "headers" || verbosity === "full")
|
|
38
|
+
out.headers = result.headers;
|
|
39
|
+
if (verbosity === "full")
|
|
40
|
+
out.body = result.bodyJson ?? result.bodyText ?? result.bodyPreview;
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
export function formatWs(result, verbosity, handle) {
|
|
44
|
+
if (result.error)
|
|
45
|
+
return { ok: false, connected: false, error: result.error };
|
|
46
|
+
return {
|
|
47
|
+
ok: result.ok,
|
|
48
|
+
connected: result.connected,
|
|
49
|
+
frameCount: result.frameCount,
|
|
50
|
+
assertions: assertionSummary(result.assertions, verbosity),
|
|
51
|
+
note: result.note,
|
|
52
|
+
responseHandle: handle,
|
|
53
|
+
frames: verbosity === "full" ? capArray(result.frames, MAX_FRAMES_PREVIEW) : result.framesPreview,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
export function formatSse(result, verbosity, handle) {
|
|
57
|
+
if (result.error)
|
|
58
|
+
return { ok: false, connected: false, error: result.error };
|
|
59
|
+
return {
|
|
60
|
+
ok: result.ok,
|
|
61
|
+
connected: result.connected,
|
|
62
|
+
status: result.status,
|
|
63
|
+
eventCount: result.eventCount,
|
|
64
|
+
assertions: assertionSummary(result.assertions, verbosity),
|
|
65
|
+
note: result.note,
|
|
66
|
+
responseHandle: handle,
|
|
67
|
+
events: verbosity === "full" ? capArray(result.events, MAX_EVENTS_PREVIEW) : result.eventsPreview,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { Collection } from "./collections.js";
|
|
2
|
+
interface OpenApiPathItem {
|
|
3
|
+
summary?: string;
|
|
4
|
+
operationId?: string;
|
|
5
|
+
tags?: string[];
|
|
6
|
+
parameters?: {
|
|
7
|
+
name: string;
|
|
8
|
+
in: string;
|
|
9
|
+
required?: boolean;
|
|
10
|
+
schema?: Record<string, unknown>;
|
|
11
|
+
}[];
|
|
12
|
+
requestBody?: {
|
|
13
|
+
content?: Record<string, {
|
|
14
|
+
schema?: Record<string, unknown>;
|
|
15
|
+
example?: unknown;
|
|
16
|
+
}>;
|
|
17
|
+
};
|
|
18
|
+
responses?: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
type OpenApiPaths = Record<string, Record<string, OpenApiPathItem>>;
|
|
21
|
+
interface OpenApiDoc {
|
|
22
|
+
openapi?: string;
|
|
23
|
+
swagger?: string;
|
|
24
|
+
info?: {
|
|
25
|
+
title?: string;
|
|
26
|
+
version?: string;
|
|
27
|
+
};
|
|
28
|
+
servers?: {
|
|
29
|
+
url: string;
|
|
30
|
+
}[];
|
|
31
|
+
host?: string;
|
|
32
|
+
basePath?: string;
|
|
33
|
+
paths?: OpenApiPaths;
|
|
34
|
+
components?: {
|
|
35
|
+
securitySchemes?: Record<string, unknown>;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/** Convert an OpenAPI/Swagger document (parsed) into a Volley Collection. */
|
|
39
|
+
export declare function openApiToCollection(doc: OpenApiDoc, opts?: {
|
|
40
|
+
includeTags?: string[];
|
|
41
|
+
maxSteps?: number;
|
|
42
|
+
}): Collection;
|
|
43
|
+
export declare function loadOpenApi(path: string): OpenApiDoc;
|
|
44
|
+
interface HarEntry {
|
|
45
|
+
request: {
|
|
46
|
+
method: string;
|
|
47
|
+
url: string;
|
|
48
|
+
headers?: {
|
|
49
|
+
name: string;
|
|
50
|
+
value: string;
|
|
51
|
+
}[];
|
|
52
|
+
queryString?: {
|
|
53
|
+
name: string;
|
|
54
|
+
value: string;
|
|
55
|
+
}[];
|
|
56
|
+
postData?: {
|
|
57
|
+
mimeType: string;
|
|
58
|
+
text?: string;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
response?: {
|
|
62
|
+
status: number;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
interface HarDoc {
|
|
66
|
+
log?: {
|
|
67
|
+
entries?: HarEntry[];
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export declare function harToCollection(har: HarDoc, opts?: {
|
|
71
|
+
maxSteps?: number;
|
|
72
|
+
filter?: (e: HarEntry) => boolean;
|
|
73
|
+
}): Collection;
|
|
74
|
+
export declare function loadHar(path: string): HarDoc;
|
|
75
|
+
export {};
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Importers that convert OpenAPI/Swagger and HAR documents into Volley collection files.
|
|
3
|
+
* The output is a Collection object (see collections.ts) that can be serialized to YAML/JSON
|
|
4
|
+
* and run with `run_collection`.
|
|
5
|
+
*/
|
|
6
|
+
import { readFileSync } from "node:fs";
|
|
7
|
+
import { extname } from "node:path";
|
|
8
|
+
import { parse as parseYaml } from "yaml";
|
|
9
|
+
function exampleForSchema(schema) {
|
|
10
|
+
if (!schema)
|
|
11
|
+
return undefined;
|
|
12
|
+
if (schema.example !== undefined)
|
|
13
|
+
return schema.example;
|
|
14
|
+
if (schema.default !== undefined)
|
|
15
|
+
return schema.default;
|
|
16
|
+
const type = schema.type;
|
|
17
|
+
if (type === "object" && schema.properties) {
|
|
18
|
+
const obj = {};
|
|
19
|
+
for (const [k, v] of Object.entries(schema.properties)) {
|
|
20
|
+
const ex = exampleForSchema(v);
|
|
21
|
+
if (ex !== undefined)
|
|
22
|
+
obj[k] = ex;
|
|
23
|
+
}
|
|
24
|
+
return obj;
|
|
25
|
+
}
|
|
26
|
+
if (type === "array" && schema.items) {
|
|
27
|
+
const ex = exampleForSchema(schema.items);
|
|
28
|
+
return ex !== undefined ? [ex] : [];
|
|
29
|
+
}
|
|
30
|
+
if (type === "string")
|
|
31
|
+
return "";
|
|
32
|
+
if (type === "integer" || type === "number")
|
|
33
|
+
return 0;
|
|
34
|
+
if (type === "boolean")
|
|
35
|
+
return false;
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
function joinUrl(base, path) {
|
|
39
|
+
if (!base)
|
|
40
|
+
return path;
|
|
41
|
+
if (base.endsWith("/") && path.startsWith("/"))
|
|
42
|
+
return base + path.slice(1);
|
|
43
|
+
if (!base.endsWith("/") && !path.startsWith("/"))
|
|
44
|
+
return `${base}/${path}`;
|
|
45
|
+
return base + path;
|
|
46
|
+
}
|
|
47
|
+
function buildBase(doc) {
|
|
48
|
+
if (doc.servers && doc.servers.length)
|
|
49
|
+
return doc.servers[0].url;
|
|
50
|
+
if (doc.host)
|
|
51
|
+
return `https://${doc.host}${doc.basePath ?? ""}`;
|
|
52
|
+
return "";
|
|
53
|
+
}
|
|
54
|
+
/** Convert an OpenAPI/Swagger document (parsed) into a Volley Collection. */
|
|
55
|
+
export function openApiToCollection(doc, opts = {}) {
|
|
56
|
+
const base = buildBase(doc);
|
|
57
|
+
const steps = [];
|
|
58
|
+
const paths = doc.paths ?? {};
|
|
59
|
+
const max = opts.maxSteps ?? 200;
|
|
60
|
+
for (const [path, methods] of Object.entries(paths)) {
|
|
61
|
+
for (const [method, op] of Object.entries(methods)) {
|
|
62
|
+
if (!["get", "post", "put", "patch", "delete", "head", "options"].includes(method))
|
|
63
|
+
continue;
|
|
64
|
+
if (opts.includeTags && opts.includeTags.length && !(op.tags ?? []).some((t) => opts.includeTags.includes(t)))
|
|
65
|
+
continue;
|
|
66
|
+
if (steps.length >= max)
|
|
67
|
+
break;
|
|
68
|
+
const url = joinUrl(base, path);
|
|
69
|
+
const request = { method: method.toUpperCase(), url };
|
|
70
|
+
// Query parameters.
|
|
71
|
+
const query = {};
|
|
72
|
+
for (const p of op.parameters ?? []) {
|
|
73
|
+
if (p.in === "query")
|
|
74
|
+
query[p.name] = exampleForSchema(p.schema);
|
|
75
|
+
else if (p.in === "header" && p.required) {
|
|
76
|
+
request.headers = { ...request.headers, [p.name]: `{{${p.name}}}` };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (Object.keys(query).length)
|
|
80
|
+
request.query = query;
|
|
81
|
+
// Request body.
|
|
82
|
+
const jsonBody = op.requestBody?.content?.["application/json"];
|
|
83
|
+
if (jsonBody) {
|
|
84
|
+
const body = jsonBody.example ?? exampleForSchema(jsonBody.schema);
|
|
85
|
+
if (body !== undefined)
|
|
86
|
+
request.body = body;
|
|
87
|
+
}
|
|
88
|
+
const id = op.operationId ?? `${method}_${path.replace(/[^a-zA-Z0-9]+/g, "_").replace(/^_|_$/g, "")}`;
|
|
89
|
+
steps.push({
|
|
90
|
+
id,
|
|
91
|
+
type: "http",
|
|
92
|
+
request,
|
|
93
|
+
tags: op.tags,
|
|
94
|
+
// Light default assertion: expect a 2xx.
|
|
95
|
+
assert: [{ status: { gte: 200, lt: 300 } }],
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return { name: doc.info?.title ?? "imported-openapi", steps };
|
|
100
|
+
}
|
|
101
|
+
export function loadOpenApi(path) {
|
|
102
|
+
const text = readFileSync(path, "utf8");
|
|
103
|
+
if (extname(path) === ".json")
|
|
104
|
+
return JSON.parse(text);
|
|
105
|
+
return parseYaml(text);
|
|
106
|
+
}
|
|
107
|
+
export function harToCollection(har, opts = {}) {
|
|
108
|
+
const entries = har.log?.entries ?? [];
|
|
109
|
+
const max = opts.maxSteps ?? 200;
|
|
110
|
+
const steps = [];
|
|
111
|
+
for (let i = 0; i < entries.length && steps.length < max; i++) {
|
|
112
|
+
const e = entries[i];
|
|
113
|
+
if (opts.filter && !opts.filter(e))
|
|
114
|
+
continue;
|
|
115
|
+
const req = e.request;
|
|
116
|
+
let parsedUrl = req.url;
|
|
117
|
+
try {
|
|
118
|
+
const u = new URL(req.url);
|
|
119
|
+
// Reconstruct without query string; we'll move it to `query`.
|
|
120
|
+
parsedUrl = `${u.origin}${u.pathname}`;
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
/* keep raw */
|
|
124
|
+
}
|
|
125
|
+
const request = { method: (req.method || "GET").toUpperCase(), url: parsedUrl };
|
|
126
|
+
if (req.queryString && req.queryString.length) {
|
|
127
|
+
const q = {};
|
|
128
|
+
for (const item of req.queryString)
|
|
129
|
+
q[item.name] = item.value;
|
|
130
|
+
request.query = q;
|
|
131
|
+
}
|
|
132
|
+
if (req.headers && req.headers.length) {
|
|
133
|
+
const h = {};
|
|
134
|
+
for (const item of req.headers) {
|
|
135
|
+
const lower = item.name.toLowerCase();
|
|
136
|
+
if (lower === "content-type" || lower === "content-length")
|
|
137
|
+
continue;
|
|
138
|
+
h[item.name] = item.value;
|
|
139
|
+
}
|
|
140
|
+
if (Object.keys(h).length)
|
|
141
|
+
request.headers = h;
|
|
142
|
+
}
|
|
143
|
+
if (req.postData?.text) {
|
|
144
|
+
try {
|
|
145
|
+
request.body = JSON.parse(req.postData.text);
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
request.body = req.postData.text;
|
|
149
|
+
request.bodyType = "text";
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
steps.push({
|
|
153
|
+
id: `har-${i + 1}`,
|
|
154
|
+
type: "http",
|
|
155
|
+
request,
|
|
156
|
+
assert: [{ status: { gte: 200, lt: 300 } }],
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
return { name: "imported-har", steps };
|
|
160
|
+
}
|
|
161
|
+
export function loadHar(path) {
|
|
162
|
+
return JSON.parse(readFileSync(path, "utf8"));
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=importers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"importers.js","sourceRoot":"","sources":["../src/importers.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED