callman-core 1.27.0 → 1.28.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.
Files changed (186) hide show
  1. package/ai-packs/db-queries.md +10 -1
  2. package/ai-packs/diagram-components.md +373 -0
  3. package/ai-packs/scenario-nodes.md +451 -0
  4. package/dist/ai/index.d.ts +1 -0
  5. package/dist/ai/index.d.ts.map +1 -1
  6. package/dist/ai/index.js +1 -0
  7. package/dist/ai/index.js.map +1 -1
  8. package/dist/ai/prompts/scenario.d.ts.map +1 -1
  9. package/dist/ai/prompts/scenario.js +9 -8
  10. package/dist/ai/prompts/scenario.js.map +1 -1
  11. package/dist/ai/prompts/scenarioNodeReference.d.ts +16 -0
  12. package/dist/ai/prompts/scenarioNodeReference.d.ts.map +1 -0
  13. package/dist/ai/prompts/scenarioNodeReference.js +882 -0
  14. package/dist/ai/prompts/scenarioNodeReference.js.map +1 -0
  15. package/dist/curl/bodyFormat.d.ts +4 -0
  16. package/dist/curl/bodyFormat.d.ts.map +1 -0
  17. package/dist/curl/bodyFormat.js +80 -0
  18. package/dist/curl/bodyFormat.js.map +1 -0
  19. package/dist/curl/index.d.ts +5 -0
  20. package/dist/curl/index.d.ts.map +1 -0
  21. package/dist/curl/index.js +4 -0
  22. package/dist/curl/index.js.map +1 -0
  23. package/dist/curl/parseCurl.d.ts +4 -0
  24. package/dist/curl/parseCurl.d.ts.map +1 -0
  25. package/dist/curl/parseCurl.js +288 -0
  26. package/dist/curl/parseCurl.js.map +1 -0
  27. package/dist/curl/rows.d.ts +6 -0
  28. package/dist/curl/rows.d.ts.map +1 -0
  29. package/dist/curl/rows.js +23 -0
  30. package/dist/curl/rows.js.map +1 -0
  31. package/dist/curl/types.d.ts +21 -0
  32. package/dist/curl/types.d.ts.map +1 -0
  33. package/dist/curl/types.js +6 -0
  34. package/dist/curl/types.js.map +1 -0
  35. package/dist/diagram/componentCatalog.d.ts +31 -0
  36. package/dist/diagram/componentCatalog.d.ts.map +1 -0
  37. package/dist/diagram/componentCatalog.data.d.ts +3 -0
  38. package/dist/diagram/componentCatalog.data.d.ts.map +1 -0
  39. package/dist/diagram/componentCatalog.data.js +287 -0
  40. package/dist/diagram/componentCatalog.data.js.map +1 -0
  41. package/dist/diagram/componentCatalog.js +71 -0
  42. package/dist/diagram/componentCatalog.js.map +1 -0
  43. package/dist/diagram/edgeSemantics.d.ts +28 -0
  44. package/dist/diagram/edgeSemantics.d.ts.map +1 -0
  45. package/dist/diagram/edgeSemantics.js +78 -0
  46. package/dist/diagram/edgeSemantics.js.map +1 -0
  47. package/dist/diagram/elkGraph.d.ts +80 -0
  48. package/dist/diagram/elkGraph.d.ts.map +1 -0
  49. package/dist/diagram/elkGraph.js +283 -0
  50. package/dist/diagram/elkGraph.js.map +1 -0
  51. package/dist/diagram/index.d.ts +7 -0
  52. package/dist/diagram/index.d.ts.map +1 -0
  53. package/dist/diagram/index.js +13 -0
  54. package/dist/diagram/index.js.map +1 -0
  55. package/dist/diagram/migrations.d.ts +3 -0
  56. package/dist/diagram/migrations.d.ts.map +1 -0
  57. package/dist/diagram/migrations.js +33 -0
  58. package/dist/diagram/migrations.js.map +1 -0
  59. package/dist/diagram/normalize.d.ts +4 -0
  60. package/dist/diagram/normalize.d.ts.map +1 -0
  61. package/dist/diagram/normalize.js +68 -0
  62. package/dist/diagram/normalize.js.map +1 -0
  63. package/dist/diagram/schema.d.ts +116 -0
  64. package/dist/diagram/schema.d.ts.map +1 -0
  65. package/dist/diagram/schema.js +135 -0
  66. package/dist/diagram/schema.js.map +1 -0
  67. package/dist/http-file/detect.d.ts +12 -0
  68. package/dist/http-file/detect.d.ts.map +1 -0
  69. package/dist/http-file/detect.js +108 -0
  70. package/dist/http-file/detect.js.map +1 -0
  71. package/dist/http-file/flatImport.d.ts +33 -0
  72. package/dist/http-file/flatImport.d.ts.map +1 -0
  73. package/dist/http-file/flatImport.js +102 -0
  74. package/dist/http-file/flatImport.js.map +1 -0
  75. package/dist/http-file/index.d.ts +4 -0
  76. package/dist/http-file/index.d.ts.map +1 -0
  77. package/dist/http-file/index.js +7 -0
  78. package/dist/http-file/index.js.map +1 -0
  79. package/dist/http-file/parseHttpFile.d.ts +13 -0
  80. package/dist/http-file/parseHttpFile.d.ts.map +1 -0
  81. package/dist/http-file/parseHttpFile.js +154 -0
  82. package/dist/http-file/parseHttpFile.js.map +1 -0
  83. package/dist/index.d.ts +4 -0
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +8 -0
  86. package/dist/index.js.map +1 -1
  87. package/dist/request/requestBody.d.ts +55 -0
  88. package/dist/request/requestBody.d.ts.map +1 -0
  89. package/dist/request/requestBody.js +198 -0
  90. package/dist/request/requestBody.js.map +1 -0
  91. package/dist/runner/requestRunner.d.ts.map +1 -1
  92. package/dist/runner/requestRunner.js +127 -43
  93. package/dist/runner/requestRunner.js.map +1 -1
  94. package/dist/runner/runCollection.d.ts +1 -1
  95. package/dist/runner/runCollection.d.ts.map +1 -1
  96. package/dist/runner/runCollection.js +9 -2
  97. package/dist/runner/runCollection.js.map +1 -1
  98. package/dist/scenario-runner/adapters/helpers/request-helpers.d.ts +2 -1
  99. package/dist/scenario-runner/adapters/helpers/request-helpers.d.ts.map +1 -1
  100. package/dist/scenario-runner/adapters/helpers/request-helpers.js +8 -40
  101. package/dist/scenario-runner/adapters/helpers/request-helpers.js.map +1 -1
  102. package/dist/scenario-runner/adapters/request-executor.d.ts.map +1 -1
  103. package/dist/scenario-runner/adapters/request-executor.js +2 -29
  104. package/dist/scenario-runner/adapters/request-executor.js.map +1 -1
  105. package/dist/scenario-runner/index.d.ts +1 -0
  106. package/dist/scenario-runner/index.d.ts.map +1 -1
  107. package/dist/scenario-runner/index.js +1 -0
  108. package/dist/scenario-runner/index.js.map +1 -1
  109. package/dist/scenario-runner/labels.d.ts +3 -0
  110. package/dist/scenario-runner/labels.d.ts.map +1 -0
  111. package/dist/scenario-runner/labels.js +20 -0
  112. package/dist/scenario-runner/labels.js.map +1 -0
  113. package/dist/scenario-runner/runScenario.d.ts.map +1 -1
  114. package/dist/scenario-runner/runScenario.js +4 -11
  115. package/dist/scenario-runner/runScenario.js.map +1 -1
  116. package/dist/script/legacy.d.ts.map +1 -1
  117. package/dist/script/legacy.js +24 -9
  118. package/dist/script/legacy.js.map +1 -1
  119. package/dist/types/index.d.ts +18 -1
  120. package/dist/types/index.d.ts.map +1 -1
  121. package/dist/variables/resolver.d.ts.map +1 -1
  122. package/dist/variables/resolver.js +27 -5
  123. package/dist/variables/resolver.js.map +1 -1
  124. package/dist-cjs/ai/index.js +4 -1
  125. package/dist-cjs/ai/index.js.map +1 -1
  126. package/dist-cjs/ai/prompts/scenario.js +9 -8
  127. package/dist-cjs/ai/prompts/scenario.js.map +1 -1
  128. package/dist-cjs/ai/prompts/scenarioNodeReference.js +886 -0
  129. package/dist-cjs/ai/prompts/scenarioNodeReference.js.map +1 -0
  130. package/dist-cjs/curl/bodyFormat.js +85 -0
  131. package/dist-cjs/curl/bodyFormat.js.map +1 -0
  132. package/dist-cjs/curl/index.js +15 -0
  133. package/dist-cjs/curl/index.js.map +1 -0
  134. package/dist-cjs/curl/parseCurl.js +293 -0
  135. package/dist-cjs/curl/parseCurl.js.map +1 -0
  136. package/dist-cjs/curl/rows.js +30 -0
  137. package/dist-cjs/curl/rows.js.map +1 -0
  138. package/dist-cjs/curl/types.js +7 -0
  139. package/dist-cjs/curl/types.js.map +1 -0
  140. package/dist-cjs/diagram/componentCatalog.data.js +290 -0
  141. package/dist-cjs/diagram/componentCatalog.data.js.map +1 -0
  142. package/dist-cjs/diagram/componentCatalog.js +79 -0
  143. package/dist-cjs/diagram/componentCatalog.js.map +1 -0
  144. package/dist-cjs/diagram/edgeSemantics.js +86 -0
  145. package/dist-cjs/diagram/edgeSemantics.js.map +1 -0
  146. package/dist-cjs/diagram/elkGraph.js +293 -0
  147. package/dist-cjs/diagram/elkGraph.js.map +1 -0
  148. package/dist-cjs/diagram/index.js +33 -0
  149. package/dist-cjs/diagram/index.js.map +1 -0
  150. package/dist-cjs/diagram/migrations.js +37 -0
  151. package/dist-cjs/diagram/migrations.js.map +1 -0
  152. package/dist-cjs/diagram/normalize.js +73 -0
  153. package/dist-cjs/diagram/normalize.js.map +1 -0
  154. package/dist-cjs/diagram/schema.js +144 -0
  155. package/dist-cjs/diagram/schema.js.map +1 -0
  156. package/dist-cjs/http-file/detect.js +113 -0
  157. package/dist-cjs/http-file/detect.js.map +1 -0
  158. package/dist-cjs/http-file/flatImport.js +109 -0
  159. package/dist-cjs/http-file/flatImport.js.map +1 -0
  160. package/dist-cjs/http-file/index.js +21 -0
  161. package/dist-cjs/http-file/index.js.map +1 -0
  162. package/dist-cjs/http-file/parseHttpFile.js +160 -0
  163. package/dist-cjs/http-file/parseHttpFile.js.map +1 -0
  164. package/dist-cjs/index.js +14 -1
  165. package/dist-cjs/index.js.map +1 -1
  166. package/dist-cjs/request/requestBody.js +206 -0
  167. package/dist-cjs/request/requestBody.js.map +1 -0
  168. package/dist-cjs/runner/requestRunner.js +127 -43
  169. package/dist-cjs/runner/requestRunner.js.map +1 -1
  170. package/dist-cjs/runner/runCollection.js +9 -2
  171. package/dist-cjs/runner/runCollection.js.map +1 -1
  172. package/dist-cjs/scenario-runner/adapters/helpers/request-helpers.js +7 -42
  173. package/dist-cjs/scenario-runner/adapters/helpers/request-helpers.js.map +1 -1
  174. package/dist-cjs/scenario-runner/adapters/request-executor.js +3 -30
  175. package/dist-cjs/scenario-runner/adapters/request-executor.js.map +1 -1
  176. package/dist-cjs/scenario-runner/index.js +4 -1
  177. package/dist-cjs/scenario-runner/index.js.map +1 -1
  178. package/dist-cjs/scenario-runner/labels.js +24 -0
  179. package/dist-cjs/scenario-runner/labels.js.map +1 -0
  180. package/dist-cjs/scenario-runner/runScenario.js +4 -11
  181. package/dist-cjs/scenario-runner/runScenario.js.map +1 -1
  182. package/dist-cjs/script/legacy.js +24 -9
  183. package/dist-cjs/script/legacy.js.map +1 -1
  184. package/dist-cjs/variables/resolver.js +27 -5
  185. package/dist-cjs/variables/resolver.js.map +1 -1
  186. package/package.json +1 -1
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ // The diagram DSL — the single source of truth for a diagram. A plain,
3
+ // versioned, git-diffable JSON model that is independent of any renderer
4
+ // (maxGraph in the desktop is just an editor of this document). AI generation,
5
+ // the MCP server and DB persistence produce/consume exactly this shape.
6
+ //
7
+ // Moved here from the desktop so every host validates with ONE validator.
8
+ // zod is intentionally NOT used: the hand validator keeps the module
9
+ // dependency-free and CSP-safe (it runs in the Electron renderer).
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.parseDiagramDocument = exports.safeParseDiagramDocument = exports.DiagramValidationError = exports.createEmptyDocument = exports.genId = exports.nowIso = exports.SCHEMA_VERSION = void 0;
12
+ exports.SCHEMA_VERSION = 1;
13
+ // --- id + time helpers -----------------------------------------------------
14
+ const nowIso = () => new Date().toISOString();
15
+ exports.nowIso = nowIso;
16
+ const randomBytes = (length) => {
17
+ const bytes = new Uint8Array(length);
18
+ const webCrypto = globalThis
19
+ .crypto;
20
+ if (webCrypto && typeof webCrypto.getRandomValues === "function") {
21
+ webCrypto.getRandomValues(bytes);
22
+ }
23
+ else {
24
+ // Node 18 without a global `crypto` — ids only need to be unique, not secret.
25
+ for (let index = 0; index < length; index += 1) {
26
+ bytes[index] = Math.floor(Math.random() * 256);
27
+ }
28
+ }
29
+ return bytes;
30
+ };
31
+ const genId = (prefix = "id") => {
32
+ const bytes = randomBytes(6);
33
+ let s = "";
34
+ for (const b of bytes)
35
+ s += b.toString(36).padStart(2, "0");
36
+ return `${prefix}_${s.slice(0, 8)}`;
37
+ };
38
+ exports.genId = genId;
39
+ // --- factories -------------------------------------------------------------
40
+ const createEmptyDocument = (title = "Untitled diagram") => {
41
+ const ts = (0, exports.nowIso)();
42
+ return {
43
+ schemaVersion: exports.SCHEMA_VERSION,
44
+ id: (0, exports.genId)("doc"),
45
+ meta: { title, createdAt: ts, updatedAt: ts },
46
+ canvas: { background: "dots", gridSize: 16 },
47
+ nodes: [],
48
+ edges: [],
49
+ };
50
+ };
51
+ exports.createEmptyDocument = createEmptyDocument;
52
+ // --- validation ------------------------------------------------------------
53
+ class DiagramValidationError extends Error {
54
+ errors;
55
+ constructor(errors) {
56
+ super(`Invalid DiagramDocument:\n- ${errors.join("\n- ")}`);
57
+ this.name = "DiagramValidationError";
58
+ this.errors = errors;
59
+ }
60
+ }
61
+ exports.DiagramValidationError = DiagramValidationError;
62
+ const isObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
63
+ const isNum = (v) => typeof v === "number" && Number.isFinite(v);
64
+ const isStr = (v) => typeof v === "string";
65
+ const validateNode = (n, i, errors) => {
66
+ if (!isObject(n))
67
+ return void errors.push(`nodes[${i}] is not an object`);
68
+ if (!isStr(n.id))
69
+ errors.push(`nodes[${i}].id must be a string`);
70
+ if (!isStr(n.type))
71
+ errors.push(`nodes[${i}].type must be a string`);
72
+ if (!isObject(n.position) || !isNum(n.position.x) || !isNum(n.position.y))
73
+ errors.push(`nodes[${i}].position must be { x:number, y:number }`);
74
+ if (!isObject(n.size) || !isNum(n.size.width) || !isNum(n.size.height))
75
+ errors.push(`nodes[${i}].size must be { width:number, height:number }`);
76
+ };
77
+ const isPoint = (v) => isObject(v) && isNum(v.x) && isNum(v.y);
78
+ const validateEdge = (e, i, ids, errors) => {
79
+ if (!isObject(e))
80
+ return void errors.push(`edges[${i}] is not an object`);
81
+ if (!isStr(e.id))
82
+ errors.push(`edges[${i}].id must be a string`);
83
+ // Each endpoint is EITHER a cell id (node OR another edge) OR a free point
84
+ // (a standalone "Line" component). At least one of the two must be present.
85
+ if (e.source !== undefined) {
86
+ if (!isStr(e.source))
87
+ errors.push(`edges[${i}].source must be a string`);
88
+ else if (!ids.has(e.source))
89
+ errors.push(`edges[${i}].source "${e.source}" has no matching node/edge`);
90
+ }
91
+ else if (!isPoint(e.sourcePoint)) {
92
+ errors.push(`edges[${i}] needs a source id or a sourcePoint { x, y }`);
93
+ }
94
+ if (e.target !== undefined) {
95
+ if (!isStr(e.target))
96
+ errors.push(`edges[${i}].target must be a string`);
97
+ else if (!ids.has(e.target))
98
+ errors.push(`edges[${i}].target "${e.target}" has no matching node/edge`);
99
+ }
100
+ else if (!isPoint(e.targetPoint)) {
101
+ errors.push(`edges[${i}] needs a target id or a targetPoint { x, y }`);
102
+ }
103
+ };
104
+ const safeParseDiagramDocument = (input) => {
105
+ const errors = [];
106
+ if (!isObject(input))
107
+ return { ok: false, errors: ["document is not an object"] };
108
+ if (!isNum(input.schemaVersion))
109
+ errors.push("schemaVersion must be a number");
110
+ if (!isStr(input.id))
111
+ errors.push("id must be a string");
112
+ if (!isObject(input.meta) || !isStr(input.meta.title))
113
+ errors.push("meta.title must be a string");
114
+ if (!Array.isArray(input.nodes))
115
+ errors.push("nodes must be an array");
116
+ if (!Array.isArray(input.edges))
117
+ errors.push("edges must be an array");
118
+ if (errors.length)
119
+ return { ok: false, errors };
120
+ const nodes = input.nodes;
121
+ const edges = input.edges;
122
+ nodes.forEach((n, i) => validateNode(n, i, errors));
123
+ // Valid edge terminals = node ids + edge ids (edges may connect to edges).
124
+ const terminalIds = new Set();
125
+ for (const n of nodes)
126
+ if (isObject(n) && isStr(n.id))
127
+ terminalIds.add(n.id);
128
+ for (const e of edges)
129
+ if (isObject(e) && isStr(e.id))
130
+ terminalIds.add(e.id);
131
+ edges.forEach((e, i) => validateEdge(e, i, terminalIds, errors));
132
+ if (errors.length)
133
+ return { ok: false, errors };
134
+ return { ok: true, document: input };
135
+ };
136
+ exports.safeParseDiagramDocument = safeParseDiagramDocument;
137
+ const parseDiagramDocument = (input) => {
138
+ const result = (0, exports.safeParseDiagramDocument)(input);
139
+ if (!result.ok)
140
+ throw new DiagramValidationError(result.errors);
141
+ return result.document;
142
+ };
143
+ exports.parseDiagramDocument = parseDiagramDocument;
144
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/diagram/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectImportFormat = exports.importFormatLabel = exports.IMPORT_FORMAT_LABELS = void 0;
4
+ // "Which tool did this file come from?" — the single detector every import
5
+ // entry point (desktop drop zones, MCP `import_content`) routes through, so the
6
+ // format is auto-detected once and the user never has to pick a tool.
7
+ // YAML is only needed for OpenAPI / Insomnia v5; core has no YAML dependency,
8
+ // so the caller injects a loader (js-yaml's `load`) when it has one.
9
+ const parseCurl_js_1 = require("../curl/parseCurl.js");
10
+ // Product-facing tool names ("<label> import started — <file>").
11
+ exports.IMPORT_FORMAT_LABELS = {
12
+ postman: "Postman",
13
+ internal: "Callman",
14
+ scenario: "Callman scenario",
15
+ openapi: "OpenAPI",
16
+ insomnia: "Insomnia",
17
+ bruno: "Bruno",
18
+ curl: "cURL",
19
+ http: "HTTP file",
20
+ environment: "Environment",
21
+ unknown: "Unknown",
22
+ };
23
+ const importFormatLabel = (format) => exports.IMPORT_FORMAT_LABELS[format];
24
+ exports.importFormatLabel = importFormatLabel;
25
+ const extensionOf = (fileName) => {
26
+ const lower = fileName.toLowerCase();
27
+ const dot = lower.lastIndexOf(".");
28
+ return dot === -1 ? "" : lower.slice(dot);
29
+ };
30
+ const asObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value)
31
+ ? value
32
+ : null;
33
+ const tryJson = (text) => {
34
+ try {
35
+ return asObject(JSON.parse(text));
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ };
41
+ // JSON is valid YAML, but JSON is tried first (cheaper, and avoids YAML
42
+ // coercing numbers/dates).
43
+ const tryYaml = (text, parseYaml) => {
44
+ if (!parseYaml)
45
+ return null;
46
+ try {
47
+ return asObject(parseYaml(text));
48
+ }
49
+ catch {
50
+ return null;
51
+ }
52
+ };
53
+ // A cURL script (.sh/.txt) often opens with a shebang, comments and shell
54
+ // variable assignments before the first `curl`, so every line is scanned.
55
+ const hasCurlLine = (text) => text.split(/\r?\n/).some((line) => (0, parseCurl_js_1.isCurlCommand)(line));
56
+ const HTTP_REQUEST_LINE = /(^|\n)\s*(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|TRACE|CONNECT)\s+\S+/i;
57
+ const detect = (fileName, text, options) => {
58
+ const ext = extensionOf(fileName);
59
+ // 1. Unambiguous extensions — content-sniffing these is unreliable
60
+ // (.bru is a custom grammar; .http/.rest have no JSON/YAML shape).
61
+ if (ext === ".bru")
62
+ return "bruno";
63
+ if (ext === ".http" || ext === ".rest")
64
+ return "http";
65
+ // 2. Structured (JSON or YAML) formats. First match wins; order chosen so
66
+ // the shapes can't collide (internal is checked before Postman because
67
+ // both mention a "collection"; Postman uses `item`, Bruno uses `items`).
68
+ const doc = tryJson(text) ?? tryYaml(text, options.parseYaml);
69
+ if (doc) {
70
+ if (doc.kind === "callman.scenario")
71
+ return "scenario";
72
+ if ("collection" in doc && "requests" in doc && "folders" in doc)
73
+ return "internal";
74
+ const info = asObject(doc.info);
75
+ const schema = info && typeof info.schema === "string" ? info.schema : "";
76
+ if (schema.includes("schema.getpostman.com"))
77
+ return "postman";
78
+ if (info && Array.isArray(doc.item))
79
+ return "postman";
80
+ if (doc._type === "export" && "__export_format" in doc)
81
+ return "insomnia";
82
+ if (typeof doc.type === "string" && doc.type.startsWith("collection.insomnia"))
83
+ return "insomnia";
84
+ if (typeof doc.openapi === "string")
85
+ return "openapi";
86
+ if (doc.swagger === "2.0")
87
+ return "openapi";
88
+ if (Array.isArray(doc.items) && "version" in doc)
89
+ return "bruno";
90
+ // Environment export — checked AFTER every collection shape so a
91
+ // collection carrying its own `variable` array can't be mistaken for an
92
+ // env. Postman environment (`values` array / scope marker) or callman's
93
+ // env export (`{ name, variables: {…} }`).
94
+ if (Array.isArray(doc.values) ||
95
+ doc._postman_variable_scope === "environment" ||
96
+ asObject(doc.variables) !== null) {
97
+ return "environment";
98
+ }
99
+ }
100
+ // 3. Plain-text formats. cURL is checked before .http because a cURL line
101
+ // ("curl -X POST https://…") also matches the HTTP request-line regex.
102
+ if (hasCurlLine(text))
103
+ return "curl";
104
+ if (/(^|\n)\s*###/.test(text) || HTTP_REQUEST_LINE.test(text))
105
+ return "http";
106
+ return "unknown";
107
+ };
108
+ const detectImportFormat = (fileName, text, options = {}) => {
109
+ const format = detect(fileName, text, options);
110
+ return { format, label: exports.IMPORT_FORMAT_LABELS[format] };
111
+ };
112
+ exports.detectImportFormat = detectImportFormat;
113
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sourceRoot":"","sources":["../../src/http-file/detect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inferBodyStateFromRaw = exports.parseCurlFile = exports.splitCurlCommands = exports.requestNameFor = exports.collectionNameFromFileName = exports.toPersistedRequestBody = void 0;
4
+ // The flat payload the backend's `format: "requests"` import accepts — a plain
5
+ // list of requests, which is exactly what a cURL script or `.http` file
6
+ // amounts to. The server validates each entry with the same schema
7
+ // `POST /requests` uses, so anything valid for a single request is valid here.
8
+ // Parsers are PURE: they create nothing, so a file that fails partway leaves
9
+ // nothing behind (the caller sends the whole payload in one request).
10
+ const bodyFormat_js_1 = require("../curl/bodyFormat.js");
11
+ Object.defineProperty(exports, "inferBodyStateFromRaw", { enumerable: true, get: function () { return bodyFormat_js_1.inferBodyStateFromRaw; } });
12
+ const parseCurl_js_1 = require("../curl/parseCurl.js");
13
+ const rows_js_1 = require("../curl/rows.js");
14
+ // Editor body state → persisted body (mirror of the desktop's
15
+ // `serializeBodyState`, requestDraft.ts).
16
+ const toPersistedRequestBody = (body) => {
17
+ switch (body.mode) {
18
+ case "raw": {
19
+ if (!body.raw.trim())
20
+ return null;
21
+ const rawLanguage = body.rawLanguage ?? "json";
22
+ if (rawLanguage !== "json") {
23
+ return { mode: "raw", raw: body.raw, rawLanguage };
24
+ }
25
+ try {
26
+ return JSON.parse(body.raw);
27
+ }
28
+ catch {
29
+ return body.raw;
30
+ }
31
+ }
32
+ case "formdata":
33
+ return { mode: "formdata", formEntries: body.formEntries.filter((entry) => entry.key.trim()) };
34
+ case "urlencoded":
35
+ return { mode: "urlencoded", formEntries: body.formEntries.filter((entry) => entry.key.trim()) };
36
+ case "none":
37
+ default:
38
+ return null;
39
+ }
40
+ };
41
+ exports.toPersistedRequestBody = toPersistedRequestBody;
42
+ const collectionNameFromFileName = (fileName, fallback) => fileName.replace(/\.[^.]+$/, "").trim() || fallback;
43
+ exports.collectionNameFromFileName = collectionNameFromFileName;
44
+ // Best-effort human name from the URL path; falls back for templated
45
+ // ({{base}}/…) or malformed URLs that `new URL` can't parse.
46
+ const requestNameFor = (method, url, index) => {
47
+ try {
48
+ const parsed = new URL(url);
49
+ const path = parsed.pathname && parsed.pathname !== "/" ? parsed.pathname : parsed.hostname;
50
+ return `${method} ${path}`;
51
+ }
52
+ catch {
53
+ return `${method} request ${index + 1}`;
54
+ }
55
+ };
56
+ exports.requestNameFor = requestNameFor;
57
+ // A .sh/.txt file may hold one or many cURL commands. Each command starts on
58
+ // a line beginning with `curl`; `parseCurl` handles `\`-continued lines within
59
+ // a command, so this only splits the file into command chunks.
60
+ const splitCurlCommands = (text) => {
61
+ const commands = [];
62
+ let current = [];
63
+ const flush = () => {
64
+ // Drop trailing blank / comment-only lines that sit between commands so a
65
+ // comment like `# 5) GET with -G --data-urlencode` can't leak flag-looking
66
+ // tokens into the preceding command.
67
+ while (current.length > 0 && /^\s*(#|$)/.test(current[current.length - 1])) {
68
+ current.pop();
69
+ }
70
+ const joined = current.join("\n").trim();
71
+ if (joined)
72
+ commands.push(joined);
73
+ current = [];
74
+ };
75
+ for (const line of text.split(/\r?\n/)) {
76
+ if (/^\s*curl(\s|$)/i.test(line)) {
77
+ flush();
78
+ current.push(line);
79
+ }
80
+ else if (current.length > 0) {
81
+ current.push(line); // continuation / body / header lines of the current command
82
+ }
83
+ // Lines before the first `curl` (shebang, comments) are ignored.
84
+ }
85
+ flush();
86
+ return commands;
87
+ };
88
+ exports.splitCurlCommands = splitCurlCommands;
89
+ const parseCurlFile = (fileName, text) => {
90
+ const commands = (0, exports.splitCurlCommands)(text).filter(parseCurl_js_1.isCurlCommand);
91
+ if (commands.length === 0) {
92
+ throw new Error("No cURL commands found in the file");
93
+ }
94
+ const parsed = commands.map((command) => (0, parseCurl_js_1.parseCurl)(command));
95
+ return {
96
+ collectionName: (0, exports.collectionNameFromFileName)(fileName, "Imported cURL"),
97
+ requests: parsed.map((request, index) => ({
98
+ name: (0, exports.requestNameFor)(request.method, request.url, index),
99
+ method: request.method,
100
+ url: request.url,
101
+ // Strip the trailing empty editor row — the backend rejects blank keys.
102
+ headers: (0, rows_js_1.filledRows)(request.headers),
103
+ query: (0, rows_js_1.filledRows)(request.query),
104
+ body: (0, exports.toPersistedRequestBody)(request.body),
105
+ })),
106
+ };
107
+ };
108
+ exports.parseCurlFile = parseCurlFile;
109
+ //# sourceMappingURL=flatImport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatImport.js","sourceRoot":"","sources":["../../src/http-file/flatImport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.importFormatLabel = exports.IMPORT_FORMAT_LABELS = exports.detectImportFormat = exports.parseHttpVariables = exports.parseHttpRequests = exports.parseHttpFile = exports.toPersistedRequestBody = exports.splitCurlCommands = exports.requestNameFor = exports.parseCurlFile = exports.collectionNameFromFileName = void 0;
4
+ // File importers (cURL scripts, .http/.rest files) + format detection —
5
+ // shared by the desktop, the MCP server and the backend. CSP-safe (see
6
+ // ../curl/index.ts).
7
+ var flatImport_js_1 = require("./flatImport.js");
8
+ Object.defineProperty(exports, "collectionNameFromFileName", { enumerable: true, get: function () { return flatImport_js_1.collectionNameFromFileName; } });
9
+ Object.defineProperty(exports, "parseCurlFile", { enumerable: true, get: function () { return flatImport_js_1.parseCurlFile; } });
10
+ Object.defineProperty(exports, "requestNameFor", { enumerable: true, get: function () { return flatImport_js_1.requestNameFor; } });
11
+ Object.defineProperty(exports, "splitCurlCommands", { enumerable: true, get: function () { return flatImport_js_1.splitCurlCommands; } });
12
+ Object.defineProperty(exports, "toPersistedRequestBody", { enumerable: true, get: function () { return flatImport_js_1.toPersistedRequestBody; } });
13
+ var parseHttpFile_js_1 = require("./parseHttpFile.js");
14
+ Object.defineProperty(exports, "parseHttpFile", { enumerable: true, get: function () { return parseHttpFile_js_1.parseHttpFile; } });
15
+ Object.defineProperty(exports, "parseHttpRequests", { enumerable: true, get: function () { return parseHttpFile_js_1.parseHttpRequests; } });
16
+ Object.defineProperty(exports, "parseHttpVariables", { enumerable: true, get: function () { return parseHttpFile_js_1.parseHttpVariables; } });
17
+ var detect_js_1 = require("./detect.js");
18
+ Object.defineProperty(exports, "detectImportFormat", { enumerable: true, get: function () { return detect_js_1.detectImportFormat; } });
19
+ Object.defineProperty(exports, "IMPORT_FORMAT_LABELS", { enumerable: true, get: function () { return detect_js_1.IMPORT_FORMAT_LABELS; } });
20
+ Object.defineProperty(exports, "importFormatLabel", { enumerable: true, get: function () { return detect_js_1.importFormatLabel; } });
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/http-file/index.ts"],"names":[],"mappings":";;;AAAA,wEAAwE;AACxE,uEAAuE;AACvE,qBAAqB;AACrB,iDAUyB;AATvB,2HAAA,0BAA0B,OAAA;AAI1B,8GAAA,aAAa,OAAA;AAEb,+GAAA,cAAc,OAAA;AACd,kHAAA,iBAAiB,OAAA;AACjB,uHAAA,sBAAsB,OAAA;AAExB,uDAK4B;AAH1B,iHAAA,aAAa,OAAA;AACb,qHAAA,iBAAiB,OAAA;AACjB,sHAAA,kBAAkB,OAAA;AAEpB,yCAOqB;AALnB,+GAAA,kBAAkB,OAAA;AAClB,iHAAA,oBAAoB,OAAA;AAGpB,8GAAA,iBAAiB,OAAA"}
@@ -0,0 +1,160 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseHttpFile = exports.parseHttpVariables = exports.parseHttpRequests = void 0;
4
+ // Importer for the VS Code REST Client / JetBrains ".http" (aka ".rest")
5
+ // format: requests separated by `###`, each with a `METHOD url` line, header
6
+ // lines, a blank line, then a body. `{{var}}` references map straight onto
7
+ // callman's templating, so no rewriting is needed.
8
+ //
9
+ // File variables (`@name = value` lines before a request line) are returned
10
+ // as-is in `variables`, NOT substituted into the requests: both clients
11
+ // resolve `{{name}}` at send time, which is exactly what callman does once
12
+ // the caller puts the variables in an environment. A value that references
13
+ // another variable (`@url = {{host}}/api`) stays a template too — callman's
14
+ // resolver expands nested tokens.
15
+ const bodyFormat_js_1 = require("../curl/bodyFormat.js");
16
+ const rows_js_1 = require("../curl/rows.js");
17
+ const urlQuery_js_1 = require("../utils/urlQuery.js");
18
+ const flatImport_js_1 = require("./flatImport.js");
19
+ const REQUEST_LINE = /^(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|TRACE|CONNECT)\s+(\S.*)$/i;
20
+ // Split on `###` delimiter lines. Any trailing text on the delimiter line
21
+ // (`### Get user`) becomes the block title. Content before the first `###`
22
+ // is its own (untitled) block, since many .http files omit the leading one.
23
+ const splitBlocks = (text) => {
24
+ const blocks = [];
25
+ let title = "";
26
+ let lines = [];
27
+ let started = false;
28
+ const push = () => {
29
+ if (started)
30
+ blocks.push({ title, lines });
31
+ };
32
+ for (const raw of text.split(/\r?\n/)) {
33
+ const delimiter = raw.match(/^\s*###+(.*)$/);
34
+ if (delimiter) {
35
+ push();
36
+ title = delimiter[1].trim();
37
+ lines = [];
38
+ started = true;
39
+ }
40
+ else {
41
+ started = true;
42
+ lines.push(raw);
43
+ }
44
+ }
45
+ push();
46
+ return blocks;
47
+ };
48
+ // `@base = https://api.example.com` — a file variable definition line.
49
+ const FILE_VARIABLE_LINE = /^@([\w-]+)\s*=(.*)$/;
50
+ const parseBlock = (block) => {
51
+ const headers = [];
52
+ const variables = [];
53
+ let name = block.title;
54
+ let index = 0;
55
+ // Skip leading comments, capturing an explicit `# @name foo` if present,
56
+ // and collect file-variable definitions.
57
+ for (; index < block.lines.length; index += 1) {
58
+ const line = block.lines[index].trim();
59
+ if (!line)
60
+ continue;
61
+ if (line.startsWith("#") || line.startsWith("//")) {
62
+ const nameMatch = line.match(/@name\s*=?\s*(.+)$/);
63
+ if (nameMatch && !name)
64
+ name = nameMatch[1].trim();
65
+ continue;
66
+ }
67
+ const variable = line.match(FILE_VARIABLE_LINE);
68
+ if (variable) {
69
+ variables.push({ key: variable[1], value: variable[2].trim(), enabled: true });
70
+ continue;
71
+ }
72
+ break;
73
+ }
74
+ if (index >= block.lines.length)
75
+ return { request: null, variables };
76
+ // Request line: `METHOD url [HTTP/1.1]` or a bare url (defaults to GET).
77
+ const requestLine = block.lines[index].trim().replace(/\s+HTTP\/[\d.]+$/i, "");
78
+ const match = requestLine.match(REQUEST_LINE);
79
+ let method;
80
+ let url;
81
+ if (match) {
82
+ method = match[1].toUpperCase();
83
+ url = match[2].trim();
84
+ }
85
+ else if (/^(https?:\/\/|\{\{)/i.test(requestLine)) {
86
+ method = "GET";
87
+ url = requestLine;
88
+ }
89
+ else {
90
+ return { request: null, variables };
91
+ }
92
+ index += 1;
93
+ // Header lines up to the first blank line.
94
+ for (; index < block.lines.length; index += 1) {
95
+ const line = block.lines[index];
96
+ if (!line.trim()) {
97
+ index += 1;
98
+ break;
99
+ }
100
+ const separator = line.indexOf(":");
101
+ if (separator > 0) {
102
+ headers.push({
103
+ key: line.slice(0, separator).trim(),
104
+ value: line.slice(separator + 1).trim(),
105
+ enabled: true,
106
+ });
107
+ }
108
+ }
109
+ const bodyRaw = block.lines.slice(index).join("\n").trim();
110
+ if (!name)
111
+ name = `${method} ${url}`;
112
+ return { request: { name, method, url, headers, bodyRaw }, variables };
113
+ };
114
+ const parseHttpRequests = (text) => splitBlocks(text)
115
+ .map((block) => parseBlock(block).request)
116
+ .filter((request) => request !== null);
117
+ exports.parseHttpRequests = parseHttpRequests;
118
+ // Every `@name = value` file variable, in file order. A name defined twice
119
+ // keeps its first position and its LAST value (a later definition overrides
120
+ // an earlier one for the requests below it; one environment can hold only
121
+ // one value).
122
+ const parseHttpVariables = (text) => {
123
+ const byKey = new Map();
124
+ for (const block of splitBlocks(text)) {
125
+ for (const variable of parseBlock(block).variables) {
126
+ const existing = byKey.get(variable.key);
127
+ if (existing)
128
+ existing.value = variable.value;
129
+ else
130
+ byKey.set(variable.key, variable);
131
+ }
132
+ }
133
+ return [...byKey.values()];
134
+ };
135
+ exports.parseHttpVariables = parseHttpVariables;
136
+ const parseHttpFile = (fileName, text) => {
137
+ const parsed = (0, exports.parseHttpRequests)(text);
138
+ if (parsed.length === 0) {
139
+ throw new Error("No requests found in the .http file");
140
+ }
141
+ const variables = (0, exports.parseHttpVariables)(text);
142
+ return {
143
+ collectionName: (0, flatImport_js_1.collectionNameFromFileName)(fileName, "Imported HTTP file"),
144
+ ...(variables.length > 0 ? { variables } : {}),
145
+ requests: parsed.map((request) => {
146
+ const bodyState = (0, bodyFormat_js_1.inferBodyStateFromRaw)(request.bodyRaw, request.headers);
147
+ return {
148
+ name: request.name,
149
+ method: request.method,
150
+ url: (0, urlQuery_js_1.stripUrlQuery)(request.url),
151
+ // Strip blank rows — the backend rejects headers/query with empty keys.
152
+ headers: (0, rows_js_1.filledRows)(request.headers),
153
+ query: (0, rows_js_1.filledRows)((0, rows_js_1.queryRowsFromUrl)(request.url)),
154
+ body: (0, flatImport_js_1.toPersistedRequestBody)(bodyState),
155
+ };
156
+ }),
157
+ };
158
+ };
159
+ exports.parseHttpFile = parseHttpFile;
160
+ //# sourceMappingURL=parseHttpFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseHttpFile.js","sourceRoot":"","sources":["../../src/http-file/parseHttpFile.ts"],"names":[],"mappings":";;;AAAA,yEAAyE;AACzE,6EAA6E;AAC7E,2EAA2E;AAC3E,mDAAmD;AACnD,EAAE;AACF,4EAA4E;AAC5E,wEAAwE;AACxE,2EAA2E;AAC3E,2EAA2E;AAC3E,4EAA4E;AAC5E,kCAAkC;AAClC,yDAA8D;AAC9D,6CAA+D;AAE/D,sDAAqD;AACrD,mDAIyB;AAUzB,MAAM,YAAY,GAAG,oEAAoE,CAAC;AAO1F,0EAA0E;AAC1E,2EAA2E;AAC3E,4EAA4E;AAC5E,MAAM,WAAW,GAAG,CAAC,IAAY,EAAc,EAAE;IAC/C,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,KAAK,GAAa,EAAE,CAAC;IACzB,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,IAAI,OAAO;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC7C,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,EAAE,CAAC;YACP,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5B,KAAK,GAAG,EAAE,CAAC;YACX,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,IAAI,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,IAAI,EAAE,CAAC;IACP,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,uEAAuE;AACvE,MAAM,kBAAkB,GAAG,qBAAqB,CAAC;AAOjD,MAAM,UAAU,GAAG,CAAC,KAAe,EAAe,EAAE;IAClD,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,MAAM,SAAS,GAAkB,EAAE,CAAC;IACpC,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;IACvB,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,yEAAyE;IACzE,yCAAyC;IACzC,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACnD,IAAI,SAAS,IAAI,CAAC,IAAI;gBAAE,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnD,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/E,SAAS;QACX,CAAC;QACD,MAAM;IACR,CAAC;IACD,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAErE,yEAAyE;IACzE,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC;IAC/E,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC9C,IAAI,MAAc,CAAC;IACnB,IAAI,GAAW,CAAC;IAChB,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAChC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;SAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QACpD,MAAM,GAAG,KAAK,CAAC;QACf,GAAG,GAAG,WAAW,CAAC;IACpB,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACtC,CAAC;IACD,KAAK,IAAI,CAAC,CAAC;IAEX,2CAA2C;IAC3C,OAAO,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACjB,KAAK,IAAI,CAAC,CAAC;YACX,MAAM;QACR,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC;gBACX,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE;gBACpC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;gBACvC,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3D,IAAI,CAAC,IAAI;QAAE,IAAI,GAAG,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC;IAErC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC;AACzE,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAuB,EAAE,CACrE,WAAW,CAAC,IAAI,CAAC;KACd,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;KACzC,MAAM,CAAC,CAAC,OAAO,EAAgC,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;AAH5D,QAAA,iBAAiB,qBAG2C;AAEzE,2EAA2E;AAC3E,4EAA4E;AAC5E,0EAA0E;AAC1E,cAAc;AACP,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAiB,EAAE;IAChE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC7C,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,KAAK,MAAM,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,QAAQ;gBAAE,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;;gBACzC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7B,CAAC,CAAC;AAVW,QAAA,kBAAkB,sBAU7B;AAEK,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,IAAY,EAAqB,EAAE;IACjF,MAAM,MAAM,GAAG,IAAA,yBAAiB,EAAC,IAAI,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,SAAS,GAAG,IAAA,0BAAkB,EAAC,IAAI,CAAC,CAAC;IAE3C,OAAO;QACL,cAAc,EAAE,IAAA,0CAA0B,EAAC,QAAQ,EAAE,oBAAoB,CAAC;QAC1E,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC/B,MAAM,SAAS,GAAG,IAAA,qCAAqB,EAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC1E,OAAO;gBACL,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,EAAE,IAAA,2BAAa,EAAC,OAAO,CAAC,GAAG,CAAC;gBAC/B,wEAAwE;gBACxE,OAAO,EAAE,IAAA,oBAAU,EAAC,OAAO,CAAC,OAAO,CAAC;gBACpC,KAAK,EAAE,IAAA,oBAAU,EAAC,IAAA,0BAAgB,EAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAChD,IAAI,EAAE,IAAA,sCAAsB,EAAC,SAAS,CAAC;aACxC,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AAvBW,QAAA,aAAa,iBAuBxB"}
package/dist-cjs/index.js CHANGED
@@ -14,7 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.getSoapEnvelopeTemplate = exports.SOAP_12_ENVELOPE_TEMPLATE = exports.SOAP_11_ENVELOPE_TEMPLATE = exports.injectWsSecurityHeader = exports.buildWsSecurityHeader = exports.applySoapRequestTransforms = exports.resolveXPathCandidates = exports.isContractFormat = exports.FORMAT_VALIDATORS = exports.SCENARIO_CONTRACT_FORMATS = exports.normalizeContractPathKey = exports.generalizeContractPath = exports.resolveContractPath = exports.normalizeContractRule = exports.evaluateContractCandidate = exports.validateContracts = exports.isDisabledFeatureValue = exports.DisabledFeatureDependencyError = exports.isPendingKafkaValue = exports.PendingKafkaDependencyError = exports.createExpectApi = exports.PmAssertion = exports.RESERVED_LABEL_NAMES = exports.BLOCKED_GLOBAL_NAMES = exports.ALLOWED_GLOBAL_NAMES = exports.renderPmApiReference = exports.PM_API_METADATA = exports.ScriptWorkerPool = exports.createScriptWorkerPool = exports.runScriptIsolated = exports.validateScript = exports.executeScript = exports.runScript = exports.EnvStore = exports.decodeUrlQueryComponent = exports.extractUrlQueryPairs = exports.stripUrlQuery = exports.sanitizeJsonBody = exports.XML_PARSER_OPTIONS = exports.looksLikeXml = exports.parseXml = exports.isXmlContentType = exports.OAuth2Error = exports.buildOAuth2TokenRequest = exports.resolveOAuth2Token = exports.executeRequest = exports.runRequestWithDataset = exports.runRequest = exports.runCollection = void 0;
17
+ exports.injectWsSecurityHeader = exports.buildWsSecurityHeader = exports.applySoapRequestTransforms = exports.resolveXPathCandidates = exports.isContractFormat = exports.FORMAT_VALIDATORS = exports.SCENARIO_CONTRACT_FORMATS = exports.normalizeContractPathKey = exports.generalizeContractPath = exports.resolveContractPath = exports.normalizeContractRule = exports.evaluateContractCandidate = exports.validateContracts = exports.isDisabledFeatureValue = exports.DisabledFeatureDependencyError = exports.isPendingKafkaValue = exports.PendingKafkaDependencyError = exports.createExpectApi = exports.PmAssertion = exports.RESERVED_LABEL_NAMES = exports.BLOCKED_GLOBAL_NAMES = exports.ALLOWED_GLOBAL_NAMES = exports.renderPmApiReference = exports.PM_API_METADATA = exports.ScriptWorkerPool = exports.createScriptWorkerPool = exports.runScriptIsolated = exports.validateScript = exports.executeScript = exports.runScript = exports.EnvStore = exports.decodeUrlQueryComponent = exports.extractUrlQueryPairs = exports.stripUrlQuery = exports.sanitizeJsonBody = exports.XML_PARSER_OPTIONS = exports.looksLikeXml = exports.parseXml = exports.isXmlContentType = exports.OAuth2Error = exports.buildOAuth2TokenRequest = exports.resolveOAuth2Token = exports.readRequestBodyEnvelope = exports.persistedBodyToWire = exports.describeRequestBody = exports.contentTypeForRawLanguage = exports.executeRequest = exports.runRequestWithDataset = exports.runRequest = exports.runCollection = void 0;
18
+ exports.getSoapEnvelopeTemplate = exports.SOAP_12_ENVELOPE_TEMPLATE = exports.SOAP_11_ENVELOPE_TEMPLATE = void 0;
18
19
  var runCollection_js_1 = require("./runner/runCollection.js");
19
20
  Object.defineProperty(exports, "runCollection", { enumerable: true, get: function () { return runCollection_js_1.runCollection; } });
20
21
  var requestRunner_js_1 = require("./runner/requestRunner.js");
@@ -23,6 +24,13 @@ var runRequestWithDataset_js_1 = require("./runner/runRequestWithDataset.js");
23
24
  Object.defineProperty(exports, "runRequestWithDataset", { enumerable: true, get: function () { return runRequestWithDataset_js_1.runRequestWithDataset; } });
24
25
  var executeRequest_js_1 = require("./request/executeRequest.js");
25
26
  Object.defineProperty(exports, "executeRequest", { enumerable: true, get: function () { return executeRequest_js_1.executeRequest; } });
27
+ // Persisted request body → wire form (raw text / urlencoded / multipart text
28
+ // fields / none), shared by runRequest and the scenario request executor.
29
+ var requestBody_js_1 = require("./request/requestBody.js");
30
+ Object.defineProperty(exports, "contentTypeForRawLanguage", { enumerable: true, get: function () { return requestBody_js_1.contentTypeForRawLanguage; } });
31
+ Object.defineProperty(exports, "describeRequestBody", { enumerable: true, get: function () { return requestBody_js_1.describeRequestBody; } });
32
+ Object.defineProperty(exports, "persistedBodyToWire", { enumerable: true, get: function () { return requestBody_js_1.persistedBodyToWire; } });
33
+ Object.defineProperty(exports, "readRequestBodyEnvelope", { enumerable: true, get: function () { return requestBody_js_1.readRequestBodyEnvelope; } });
26
34
  var oauth2_js_1 = require("./request/oauth2.js");
27
35
  Object.defineProperty(exports, "resolveOAuth2Token", { enumerable: true, get: function () { return oauth2_js_1.resolveOAuth2Token; } });
28
36
  Object.defineProperty(exports, "buildOAuth2TokenRequest", { enumerable: true, get: function () { return oauth2_js_1.buildOAuth2TokenRequest; } });
@@ -96,6 +104,11 @@ Object.defineProperty(exports, "getSoapEnvelopeTemplate", { enumerable: true, ge
96
104
  // extraction (jsonRepair) — one source for backend hosted generation and
97
105
  // desktop local-CLI generation.
98
106
  __exportStar(require("./ai/index.js"), exports);
107
+ // Import parsers (cURL, .http) + format detection and the diagram document
108
+ // contract — shared by the desktop, the MCP server and the backend.
109
+ __exportStar(require("./curl/index.js"), exports);
110
+ __exportStar(require("./http-file/index.js"), exports);
111
+ __exportStar(require("./diagram/index.js"), exports);
99
112
  __exportStar(require("./ui-test/compose.js"), exports);
100
113
  __exportStar(require("./scenario-runner/index.js"), exports);
101
114
  __exportStar(require("./host/index.js"), exports);