callman-core 1.26.0 → 1.28.0

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 (123) hide show
  1. package/ai-packs/db-queries.md +10 -1
  2. package/ai-packs/diagram-components.md +373 -0
  3. package/dist/curl/bodyFormat.d.ts +4 -0
  4. package/dist/curl/bodyFormat.d.ts.map +1 -0
  5. package/dist/curl/bodyFormat.js +80 -0
  6. package/dist/curl/bodyFormat.js.map +1 -0
  7. package/dist/curl/index.d.ts +5 -0
  8. package/dist/curl/index.d.ts.map +1 -0
  9. package/dist/curl/index.js +4 -0
  10. package/dist/curl/index.js.map +1 -0
  11. package/dist/curl/parseCurl.d.ts +4 -0
  12. package/dist/curl/parseCurl.d.ts.map +1 -0
  13. package/dist/curl/parseCurl.js +288 -0
  14. package/dist/curl/parseCurl.js.map +1 -0
  15. package/dist/curl/rows.d.ts +6 -0
  16. package/dist/curl/rows.d.ts.map +1 -0
  17. package/dist/curl/rows.js +23 -0
  18. package/dist/curl/rows.js.map +1 -0
  19. package/dist/curl/types.d.ts +21 -0
  20. package/dist/curl/types.d.ts.map +1 -0
  21. package/dist/curl/types.js +6 -0
  22. package/dist/curl/types.js.map +1 -0
  23. package/dist/diagram/componentCatalog.d.ts +31 -0
  24. package/dist/diagram/componentCatalog.d.ts.map +1 -0
  25. package/dist/diagram/componentCatalog.data.d.ts +3 -0
  26. package/dist/diagram/componentCatalog.data.d.ts.map +1 -0
  27. package/dist/diagram/componentCatalog.data.js +287 -0
  28. package/dist/diagram/componentCatalog.data.js.map +1 -0
  29. package/dist/diagram/componentCatalog.js +71 -0
  30. package/dist/diagram/componentCatalog.js.map +1 -0
  31. package/dist/diagram/edgeSemantics.d.ts +28 -0
  32. package/dist/diagram/edgeSemantics.d.ts.map +1 -0
  33. package/dist/diagram/edgeSemantics.js +78 -0
  34. package/dist/diagram/edgeSemantics.js.map +1 -0
  35. package/dist/diagram/elkGraph.d.ts +80 -0
  36. package/dist/diagram/elkGraph.d.ts.map +1 -0
  37. package/dist/diagram/elkGraph.js +283 -0
  38. package/dist/diagram/elkGraph.js.map +1 -0
  39. package/dist/diagram/index.d.ts +7 -0
  40. package/dist/diagram/index.d.ts.map +1 -0
  41. package/dist/diagram/index.js +13 -0
  42. package/dist/diagram/index.js.map +1 -0
  43. package/dist/diagram/migrations.d.ts +3 -0
  44. package/dist/diagram/migrations.d.ts.map +1 -0
  45. package/dist/diagram/migrations.js +33 -0
  46. package/dist/diagram/migrations.js.map +1 -0
  47. package/dist/diagram/normalize.d.ts +4 -0
  48. package/dist/diagram/normalize.d.ts.map +1 -0
  49. package/dist/diagram/normalize.js +68 -0
  50. package/dist/diagram/normalize.js.map +1 -0
  51. package/dist/diagram/schema.d.ts +116 -0
  52. package/dist/diagram/schema.d.ts.map +1 -0
  53. package/dist/diagram/schema.js +135 -0
  54. package/dist/diagram/schema.js.map +1 -0
  55. package/dist/http-file/detect.d.ts +12 -0
  56. package/dist/http-file/detect.d.ts.map +1 -0
  57. package/dist/http-file/detect.js +108 -0
  58. package/dist/http-file/detect.js.map +1 -0
  59. package/dist/http-file/flatImport.d.ts +32 -0
  60. package/dist/http-file/flatImport.d.ts.map +1 -0
  61. package/dist/http-file/flatImport.js +102 -0
  62. package/dist/http-file/flatImport.js.map +1 -0
  63. package/dist/http-file/index.d.ts +4 -0
  64. package/dist/http-file/index.d.ts.map +1 -0
  65. package/dist/http-file/index.js +7 -0
  66. package/dist/http-file/index.js.map +1 -0
  67. package/dist/http-file/parseHttpFile.d.ts +12 -0
  68. package/dist/http-file/parseHttpFile.d.ts.map +1 -0
  69. package/dist/http-file/parseHttpFile.js +122 -0
  70. package/dist/http-file/parseHttpFile.js.map +1 -0
  71. package/dist/index.d.ts +3 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +5 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/scenario-runner/adapters/request-executor.d.ts.map +1 -1
  76. package/dist/scenario-runner/adapters/request-executor.js +41 -0
  77. package/dist/scenario-runner/adapters/request-executor.js.map +1 -1
  78. package/dist/scenario-runner/runScenario.d.ts.map +1 -1
  79. package/dist/scenario-runner/runScenario.js +112 -0
  80. package/dist/scenario-runner/runScenario.js.map +1 -1
  81. package/dist/scenario-runner/types.d.ts +17 -0
  82. package/dist/scenario-runner/types.d.ts.map +1 -1
  83. package/dist-cjs/curl/bodyFormat.js +85 -0
  84. package/dist-cjs/curl/bodyFormat.js.map +1 -0
  85. package/dist-cjs/curl/index.js +15 -0
  86. package/dist-cjs/curl/index.js.map +1 -0
  87. package/dist-cjs/curl/parseCurl.js +293 -0
  88. package/dist-cjs/curl/parseCurl.js.map +1 -0
  89. package/dist-cjs/curl/rows.js +30 -0
  90. package/dist-cjs/curl/rows.js.map +1 -0
  91. package/dist-cjs/curl/types.js +7 -0
  92. package/dist-cjs/curl/types.js.map +1 -0
  93. package/dist-cjs/diagram/componentCatalog.data.js +290 -0
  94. package/dist-cjs/diagram/componentCatalog.data.js.map +1 -0
  95. package/dist-cjs/diagram/componentCatalog.js +79 -0
  96. package/dist-cjs/diagram/componentCatalog.js.map +1 -0
  97. package/dist-cjs/diagram/edgeSemantics.js +86 -0
  98. package/dist-cjs/diagram/edgeSemantics.js.map +1 -0
  99. package/dist-cjs/diagram/elkGraph.js +293 -0
  100. package/dist-cjs/diagram/elkGraph.js.map +1 -0
  101. package/dist-cjs/diagram/index.js +33 -0
  102. package/dist-cjs/diagram/index.js.map +1 -0
  103. package/dist-cjs/diagram/migrations.js +37 -0
  104. package/dist-cjs/diagram/migrations.js.map +1 -0
  105. package/dist-cjs/diagram/normalize.js +73 -0
  106. package/dist-cjs/diagram/normalize.js.map +1 -0
  107. package/dist-cjs/diagram/schema.js +144 -0
  108. package/dist-cjs/diagram/schema.js.map +1 -0
  109. package/dist-cjs/http-file/detect.js +113 -0
  110. package/dist-cjs/http-file/detect.js.map +1 -0
  111. package/dist-cjs/http-file/flatImport.js +109 -0
  112. package/dist-cjs/http-file/flatImport.js.map +1 -0
  113. package/dist-cjs/http-file/index.js +20 -0
  114. package/dist-cjs/http-file/index.js.map +1 -0
  115. package/dist-cjs/http-file/parseHttpFile.js +127 -0
  116. package/dist-cjs/http-file/parseHttpFile.js.map +1 -0
  117. package/dist-cjs/index.js +5 -0
  118. package/dist-cjs/index.js.map +1 -1
  119. package/dist-cjs/scenario-runner/adapters/request-executor.js +41 -0
  120. package/dist-cjs/scenario-runner/adapters/request-executor.js.map +1 -1
  121. package/dist-cjs/scenario-runner/runScenario.js +112 -0
  122. package/dist-cjs/scenario-runner/runScenario.js.map +1 -1
  123. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.js","sourceRoot":"","sources":["../../src/diagram/normalize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ export declare const SCHEMA_VERSION: 1;
2
+ export type DiagramRouting = "orthogonal" | "straight" | "curved";
3
+ export type ArrowType = "none" | "classic" | "classicThin" | "open" | "block" | "diamond" | "oval";
4
+ export type TokenRef = {
5
+ token: string;
6
+ } | {
7
+ raw: string;
8
+ };
9
+ export interface DiagramStyle {
10
+ fill?: TokenRef;
11
+ stroke?: TokenRef;
12
+ textColor?: TokenRef;
13
+ strokeWidth?: number;
14
+ radius?: number;
15
+ rounded?: boolean;
16
+ dashed?: boolean;
17
+ dashPattern?: string;
18
+ fontSize?: number;
19
+ fontWeight?: number;
20
+ fontFamily?: string;
21
+ fontStyle?: number;
22
+ align?: "left" | "center" | "right";
23
+ verticalAlign?: "top" | "middle" | "bottom";
24
+ shadow?: boolean;
25
+ opacity?: number;
26
+ }
27
+ export interface DiagramNode {
28
+ id: string;
29
+ type: string;
30
+ position: {
31
+ x: number;
32
+ y: number;
33
+ };
34
+ size: {
35
+ width: number;
36
+ height: number;
37
+ };
38
+ label?: string;
39
+ rotation?: number;
40
+ style?: DiagramStyle;
41
+ data?: Record<string, unknown>;
42
+ parentId?: string;
43
+ z?: number;
44
+ hidden?: boolean;
45
+ locked?: boolean;
46
+ }
47
+ export interface DiagramEdge {
48
+ id: string;
49
+ source?: string;
50
+ target?: string;
51
+ sourcePoint?: {
52
+ x: number;
53
+ y: number;
54
+ };
55
+ targetPoint?: {
56
+ x: number;
57
+ y: number;
58
+ };
59
+ sourceAnchor?: {
60
+ x: number;
61
+ y: number;
62
+ dx?: number;
63
+ dy?: number;
64
+ perimeter?: boolean;
65
+ };
66
+ targetAnchor?: {
67
+ x: number;
68
+ y: number;
69
+ dx?: number;
70
+ dy?: number;
71
+ perimeter?: boolean;
72
+ };
73
+ label?: string;
74
+ routing?: DiagramRouting;
75
+ style?: DiagramStyle;
76
+ waypoints?: Array<{
77
+ x: number;
78
+ y: number;
79
+ }>;
80
+ markerStart?: ArrowType;
81
+ markerEnd?: ArrowType;
82
+ }
83
+ export interface DiagramMeta {
84
+ title: string;
85
+ createdAt: string;
86
+ updatedAt: string;
87
+ appVersion?: string;
88
+ }
89
+ export interface DiagramCanvasState {
90
+ background?: "grid" | "dots" | "blank";
91
+ gridSize?: number;
92
+ }
93
+ export interface DiagramDocument {
94
+ schemaVersion: number;
95
+ id: string;
96
+ meta: DiagramMeta;
97
+ canvas?: DiagramCanvasState;
98
+ nodes: DiagramNode[];
99
+ edges: DiagramEdge[];
100
+ }
101
+ export declare const nowIso: () => string;
102
+ export declare const genId: (prefix?: string) => string;
103
+ export declare const createEmptyDocument: (title?: string) => DiagramDocument;
104
+ export declare class DiagramValidationError extends Error {
105
+ readonly errors: string[];
106
+ constructor(errors: string[]);
107
+ }
108
+ export declare const safeParseDiagramDocument: (input: unknown) => {
109
+ ok: true;
110
+ document: DiagramDocument;
111
+ } | {
112
+ ok: false;
113
+ errors: string[];
114
+ };
115
+ export declare const parseDiagramDocument: (input: unknown) => DiagramDocument;
116
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/diagram/schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,135 @@
1
+ // The diagram DSL — the single source of truth for a diagram. A plain,
2
+ // versioned, git-diffable JSON model that is independent of any renderer
3
+ // (maxGraph in the desktop is just an editor of this document). AI generation,
4
+ // the MCP server and DB persistence produce/consume exactly this shape.
5
+ //
6
+ // Moved here from the desktop so every host validates with ONE validator.
7
+ // zod is intentionally NOT used: the hand validator keeps the module
8
+ // dependency-free and CSP-safe (it runs in the Electron renderer).
9
+ export const SCHEMA_VERSION = 1;
10
+ // --- id + time helpers -----------------------------------------------------
11
+ export const nowIso = () => new Date().toISOString();
12
+ const randomBytes = (length) => {
13
+ const bytes = new Uint8Array(length);
14
+ const webCrypto = globalThis
15
+ .crypto;
16
+ if (webCrypto && typeof webCrypto.getRandomValues === "function") {
17
+ webCrypto.getRandomValues(bytes);
18
+ }
19
+ else {
20
+ // Node 18 without a global `crypto` — ids only need to be unique, not secret.
21
+ for (let index = 0; index < length; index += 1) {
22
+ bytes[index] = Math.floor(Math.random() * 256);
23
+ }
24
+ }
25
+ return bytes;
26
+ };
27
+ export const genId = (prefix = "id") => {
28
+ const bytes = randomBytes(6);
29
+ let s = "";
30
+ for (const b of bytes)
31
+ s += b.toString(36).padStart(2, "0");
32
+ return `${prefix}_${s.slice(0, 8)}`;
33
+ };
34
+ // --- factories -------------------------------------------------------------
35
+ export const createEmptyDocument = (title = "Untitled diagram") => {
36
+ const ts = nowIso();
37
+ return {
38
+ schemaVersion: SCHEMA_VERSION,
39
+ id: genId("doc"),
40
+ meta: { title, createdAt: ts, updatedAt: ts },
41
+ canvas: { background: "dots", gridSize: 16 },
42
+ nodes: [],
43
+ edges: [],
44
+ };
45
+ };
46
+ // --- validation ------------------------------------------------------------
47
+ export class DiagramValidationError extends Error {
48
+ errors;
49
+ constructor(errors) {
50
+ super(`Invalid DiagramDocument:\n- ${errors.join("\n- ")}`);
51
+ this.name = "DiagramValidationError";
52
+ this.errors = errors;
53
+ }
54
+ }
55
+ const isObject = (v) => typeof v === "object" && v !== null && !Array.isArray(v);
56
+ const isNum = (v) => typeof v === "number" && Number.isFinite(v);
57
+ const isStr = (v) => typeof v === "string";
58
+ const validateNode = (n, i, errors) => {
59
+ if (!isObject(n))
60
+ return void errors.push(`nodes[${i}] is not an object`);
61
+ if (!isStr(n.id))
62
+ errors.push(`nodes[${i}].id must be a string`);
63
+ if (!isStr(n.type))
64
+ errors.push(`nodes[${i}].type must be a string`);
65
+ if (!isObject(n.position) || !isNum(n.position.x) || !isNum(n.position.y))
66
+ errors.push(`nodes[${i}].position must be { x:number, y:number }`);
67
+ if (!isObject(n.size) || !isNum(n.size.width) || !isNum(n.size.height))
68
+ errors.push(`nodes[${i}].size must be { width:number, height:number }`);
69
+ };
70
+ const isPoint = (v) => isObject(v) && isNum(v.x) && isNum(v.y);
71
+ const validateEdge = (e, i, ids, errors) => {
72
+ if (!isObject(e))
73
+ return void errors.push(`edges[${i}] is not an object`);
74
+ if (!isStr(e.id))
75
+ errors.push(`edges[${i}].id must be a string`);
76
+ // Each endpoint is EITHER a cell id (node OR another edge) OR a free point
77
+ // (a standalone "Line" component). At least one of the two must be present.
78
+ if (e.source !== undefined) {
79
+ if (!isStr(e.source))
80
+ errors.push(`edges[${i}].source must be a string`);
81
+ else if (!ids.has(e.source))
82
+ errors.push(`edges[${i}].source "${e.source}" has no matching node/edge`);
83
+ }
84
+ else if (!isPoint(e.sourcePoint)) {
85
+ errors.push(`edges[${i}] needs a source id or a sourcePoint { x, y }`);
86
+ }
87
+ if (e.target !== undefined) {
88
+ if (!isStr(e.target))
89
+ errors.push(`edges[${i}].target must be a string`);
90
+ else if (!ids.has(e.target))
91
+ errors.push(`edges[${i}].target "${e.target}" has no matching node/edge`);
92
+ }
93
+ else if (!isPoint(e.targetPoint)) {
94
+ errors.push(`edges[${i}] needs a target id or a targetPoint { x, y }`);
95
+ }
96
+ };
97
+ export const safeParseDiagramDocument = (input) => {
98
+ const errors = [];
99
+ if (!isObject(input))
100
+ return { ok: false, errors: ["document is not an object"] };
101
+ if (!isNum(input.schemaVersion))
102
+ errors.push("schemaVersion must be a number");
103
+ if (!isStr(input.id))
104
+ errors.push("id must be a string");
105
+ if (!isObject(input.meta) || !isStr(input.meta.title))
106
+ errors.push("meta.title must be a string");
107
+ if (!Array.isArray(input.nodes))
108
+ errors.push("nodes must be an array");
109
+ if (!Array.isArray(input.edges))
110
+ errors.push("edges must be an array");
111
+ if (errors.length)
112
+ return { ok: false, errors };
113
+ const nodes = input.nodes;
114
+ const edges = input.edges;
115
+ nodes.forEach((n, i) => validateNode(n, i, errors));
116
+ // Valid edge terminals = node ids + edge ids (edges may connect to edges).
117
+ const terminalIds = new Set();
118
+ for (const n of nodes)
119
+ if (isObject(n) && isStr(n.id))
120
+ terminalIds.add(n.id);
121
+ for (const e of edges)
122
+ if (isObject(e) && isStr(e.id))
123
+ terminalIds.add(e.id);
124
+ edges.forEach((e, i) => validateEdge(e, i, terminalIds, errors));
125
+ if (errors.length)
126
+ return { ok: false, errors };
127
+ return { ok: true, document: input };
128
+ };
129
+ export const parseDiagramDocument = (input) => {
130
+ const result = safeParseDiagramDocument(input);
131
+ if (!result.ok)
132
+ throw new DiagramValidationError(result.errors);
133
+ return result.document;
134
+ };
135
+ //# 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,12 @@
1
+ export type ImportFormat = "postman" | "internal" | "scenario" | "openapi" | "insomnia" | "bruno" | "curl" | "http" | "environment" | "unknown";
2
+ export interface ImportDetection {
3
+ format: ImportFormat;
4
+ label: string;
5
+ }
6
+ export interface DetectImportFormatOptions {
7
+ parseYaml?: (text: string) => unknown;
8
+ }
9
+ export declare const IMPORT_FORMAT_LABELS: Record<ImportFormat, string>;
10
+ export declare const importFormatLabel: (format: ImportFormat) => string;
11
+ export declare const detectImportFormat: (fileName: string, text: string, options?: DetectImportFormatOptions) => ImportDetection;
12
+ //# sourceMappingURL=detect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.d.ts","sourceRoot":"","sources":["../../src/http-file/detect.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,UAAU,GACV,UAAU,GACV,SAAS,GACT,UAAU,GACV,OAAO,GACP,MAAM,GACN,MAAM,GACN,aAAa,GACb,SAAS,CAAC;AAEd,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACvC;AAGD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAW7D,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,QAAQ,YAAY,KAAG,MAAsC,CAAC;AA4FhG,eAAO,MAAM,kBAAkB,GAC7B,UAAU,MAAM,EAChB,MAAM,MAAM,EACZ,UAAS,yBAA8B,KACtC,eAGF,CAAC"}
@@ -0,0 +1,108 @@
1
+ // "Which tool did this file come from?" — the single detector every import
2
+ // entry point (desktop drop zones, MCP `import_content`) routes through, so the
3
+ // format is auto-detected once and the user never has to pick a tool.
4
+ // YAML is only needed for OpenAPI / Insomnia v5; core has no YAML dependency,
5
+ // so the caller injects a loader (js-yaml's `load`) when it has one.
6
+ import { isCurlCommand } from "../curl/parseCurl.js";
7
+ // Product-facing tool names ("<label> import started — <file>").
8
+ export const IMPORT_FORMAT_LABELS = {
9
+ postman: "Postman",
10
+ internal: "Callman",
11
+ scenario: "Callman scenario",
12
+ openapi: "OpenAPI",
13
+ insomnia: "Insomnia",
14
+ bruno: "Bruno",
15
+ curl: "cURL",
16
+ http: "HTTP file",
17
+ environment: "Environment",
18
+ unknown: "Unknown",
19
+ };
20
+ export const importFormatLabel = (format) => IMPORT_FORMAT_LABELS[format];
21
+ const extensionOf = (fileName) => {
22
+ const lower = fileName.toLowerCase();
23
+ const dot = lower.lastIndexOf(".");
24
+ return dot === -1 ? "" : lower.slice(dot);
25
+ };
26
+ const asObject = (value) => value !== null && typeof value === "object" && !Array.isArray(value)
27
+ ? value
28
+ : null;
29
+ const tryJson = (text) => {
30
+ try {
31
+ return asObject(JSON.parse(text));
32
+ }
33
+ catch {
34
+ return null;
35
+ }
36
+ };
37
+ // JSON is valid YAML, but JSON is tried first (cheaper, and avoids YAML
38
+ // coercing numbers/dates).
39
+ const tryYaml = (text, parseYaml) => {
40
+ if (!parseYaml)
41
+ return null;
42
+ try {
43
+ return asObject(parseYaml(text));
44
+ }
45
+ catch {
46
+ return null;
47
+ }
48
+ };
49
+ // A cURL script (.sh/.txt) often opens with a shebang, comments and shell
50
+ // variable assignments before the first `curl`, so every line is scanned.
51
+ const hasCurlLine = (text) => text.split(/\r?\n/).some((line) => isCurlCommand(line));
52
+ const HTTP_REQUEST_LINE = /(^|\n)\s*(GET|POST|PUT|PATCH|DELETE|HEAD|OPTIONS|TRACE|CONNECT)\s+\S+/i;
53
+ const detect = (fileName, text, options) => {
54
+ const ext = extensionOf(fileName);
55
+ // 1. Unambiguous extensions — content-sniffing these is unreliable
56
+ // (.bru is a custom grammar; .http/.rest have no JSON/YAML shape).
57
+ if (ext === ".bru")
58
+ return "bruno";
59
+ if (ext === ".http" || ext === ".rest")
60
+ return "http";
61
+ // 2. Structured (JSON or YAML) formats. First match wins; order chosen so
62
+ // the shapes can't collide (internal is checked before Postman because
63
+ // both mention a "collection"; Postman uses `item`, Bruno uses `items`).
64
+ const doc = tryJson(text) ?? tryYaml(text, options.parseYaml);
65
+ if (doc) {
66
+ if (doc.kind === "callman.scenario")
67
+ return "scenario";
68
+ if ("collection" in doc && "requests" in doc && "folders" in doc)
69
+ return "internal";
70
+ const info = asObject(doc.info);
71
+ const schema = info && typeof info.schema === "string" ? info.schema : "";
72
+ if (schema.includes("schema.getpostman.com"))
73
+ return "postman";
74
+ if (info && Array.isArray(doc.item))
75
+ return "postman";
76
+ if (doc._type === "export" && "__export_format" in doc)
77
+ return "insomnia";
78
+ if (typeof doc.type === "string" && doc.type.startsWith("collection.insomnia"))
79
+ return "insomnia";
80
+ if (typeof doc.openapi === "string")
81
+ return "openapi";
82
+ if (doc.swagger === "2.0")
83
+ return "openapi";
84
+ if (Array.isArray(doc.items) && "version" in doc)
85
+ return "bruno";
86
+ // Environment export — checked AFTER every collection shape so a
87
+ // collection carrying its own `variable` array can't be mistaken for an
88
+ // env. Postman environment (`values` array / scope marker) or callman's
89
+ // env export (`{ name, variables: {…} }`).
90
+ if (Array.isArray(doc.values) ||
91
+ doc._postman_variable_scope === "environment" ||
92
+ asObject(doc.variables) !== null) {
93
+ return "environment";
94
+ }
95
+ }
96
+ // 3. Plain-text formats. cURL is checked before .http because a cURL line
97
+ // ("curl -X POST https://…") also matches the HTTP request-line regex.
98
+ if (hasCurlLine(text))
99
+ return "curl";
100
+ if (/(^|\n)\s*###/.test(text) || HTTP_REQUEST_LINE.test(text))
101
+ return "http";
102
+ return "unknown";
103
+ };
104
+ export const detectImportFormat = (fileName, text, options = {}) => {
105
+ const format = detect(fileName, text, options);
106
+ return { format, label: IMPORT_FORMAT_LABELS[format] };
107
+ };
108
+ //# 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,32 @@
1
+ import { inferBodyStateFromRaw } from "../curl/bodyFormat.js";
2
+ import type { KeyValueRow, ParsedRequestBody, RawBodyLanguage } from "../curl/types.js";
3
+ export type FlatImportJsonValue = string | number | boolean | null | FlatImportJsonValue[] | {
4
+ [key: string]: FlatImportJsonValue;
5
+ };
6
+ export type PersistedRequestBody = FlatImportJsonValue | {
7
+ mode: "raw";
8
+ raw: string;
9
+ rawLanguage: RawBodyLanguage;
10
+ } | {
11
+ mode: "formdata" | "urlencoded";
12
+ formEntries: KeyValueRow[];
13
+ };
14
+ export interface FlatImportRequest {
15
+ name: string;
16
+ method: string;
17
+ url: string;
18
+ headers: KeyValueRow[];
19
+ query: KeyValueRow[];
20
+ body: PersistedRequestBody | null;
21
+ }
22
+ export interface FlatImportPayload {
23
+ collectionName: string;
24
+ requests: FlatImportRequest[];
25
+ }
26
+ export declare const toPersistedRequestBody: (body: ParsedRequestBody) => PersistedRequestBody | null;
27
+ export declare const collectionNameFromFileName: (fileName: string, fallback: string) => string;
28
+ export declare const requestNameFor: (method: string, url: string, index: number) => string;
29
+ export declare const splitCurlCommands: (text: string) => string[];
30
+ export declare const parseCurlFile: (fileName: string, text: string) => FlatImportPayload;
31
+ export { inferBodyStateFromRaw };
32
+ //# sourceMappingURL=flatImport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flatImport.d.ts","sourceRoot":"","sources":["../../src/http-file/flatImport.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAG9D,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExF,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,mBAAmB,EAAE,GACrB;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAA;CAAE,CAAC;AAK3C,MAAM,MAAM,oBAAoB,GAC5B,mBAAmB,GACnB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,eAAe,CAAA;CAAE,GAC1D;IAAE,IAAI,EAAE,UAAU,GAAG,YAAY,CAAC;IAAC,WAAW,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAID,eAAO,MAAM,sBAAsB,GAAI,MAAM,iBAAiB,KAAG,oBAAoB,GAAG,IAsBvF,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,UAAU,MAAM,EAAE,UAAU,MAAM,KAAG,MAC3B,CAAC;AAItD,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,MAQ3E,CAAC;AAKF,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,MAAM,EA2BtD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,EAAE,MAAM,MAAM,KAAG,iBAoB9D,CAAC;AAGF,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
@@ -0,0 +1,102 @@
1
+ // The flat payload the backend's `format: "requests"` import accepts — a plain
2
+ // list of requests, which is exactly what a cURL script or `.http` file
3
+ // amounts to. The server validates each entry with the same schema
4
+ // `POST /requests` uses, so anything valid for a single request is valid here.
5
+ // Parsers are PURE: they create nothing, so a file that fails partway leaves
6
+ // nothing behind (the caller sends the whole payload in one request).
7
+ import { inferBodyStateFromRaw } from "../curl/bodyFormat.js";
8
+ import { isCurlCommand, parseCurl } from "../curl/parseCurl.js";
9
+ import { filledRows } from "../curl/rows.js";
10
+ // Editor body state → persisted body (mirror of the desktop's
11
+ // `serializeBodyState`, requestDraft.ts).
12
+ export const toPersistedRequestBody = (body) => {
13
+ switch (body.mode) {
14
+ case "raw": {
15
+ if (!body.raw.trim())
16
+ return null;
17
+ const rawLanguage = body.rawLanguage ?? "json";
18
+ if (rawLanguage !== "json") {
19
+ return { mode: "raw", raw: body.raw, rawLanguage };
20
+ }
21
+ try {
22
+ return JSON.parse(body.raw);
23
+ }
24
+ catch {
25
+ return body.raw;
26
+ }
27
+ }
28
+ case "formdata":
29
+ return { mode: "formdata", formEntries: body.formEntries.filter((entry) => entry.key.trim()) };
30
+ case "urlencoded":
31
+ return { mode: "urlencoded", formEntries: body.formEntries.filter((entry) => entry.key.trim()) };
32
+ case "none":
33
+ default:
34
+ return null;
35
+ }
36
+ };
37
+ export const collectionNameFromFileName = (fileName, fallback) => fileName.replace(/\.[^.]+$/, "").trim() || fallback;
38
+ // Best-effort human name from the URL path; falls back for templated
39
+ // ({{base}}/…) or malformed URLs that `new URL` can't parse.
40
+ export const requestNameFor = (method, url, index) => {
41
+ try {
42
+ const parsed = new URL(url);
43
+ const path = parsed.pathname && parsed.pathname !== "/" ? parsed.pathname : parsed.hostname;
44
+ return `${method} ${path}`;
45
+ }
46
+ catch {
47
+ return `${method} request ${index + 1}`;
48
+ }
49
+ };
50
+ // A .sh/.txt file may hold one or many cURL commands. Each command starts on
51
+ // a line beginning with `curl`; `parseCurl` handles `\`-continued lines within
52
+ // a command, so this only splits the file into command chunks.
53
+ export const splitCurlCommands = (text) => {
54
+ const commands = [];
55
+ let current = [];
56
+ const flush = () => {
57
+ // Drop trailing blank / comment-only lines that sit between commands so a
58
+ // comment like `# 5) GET with -G --data-urlencode` can't leak flag-looking
59
+ // tokens into the preceding command.
60
+ while (current.length > 0 && /^\s*(#|$)/.test(current[current.length - 1])) {
61
+ current.pop();
62
+ }
63
+ const joined = current.join("\n").trim();
64
+ if (joined)
65
+ commands.push(joined);
66
+ current = [];
67
+ };
68
+ for (const line of text.split(/\r?\n/)) {
69
+ if (/^\s*curl(\s|$)/i.test(line)) {
70
+ flush();
71
+ current.push(line);
72
+ }
73
+ else if (current.length > 0) {
74
+ current.push(line); // continuation / body / header lines of the current command
75
+ }
76
+ // Lines before the first `curl` (shebang, comments) are ignored.
77
+ }
78
+ flush();
79
+ return commands;
80
+ };
81
+ export const parseCurlFile = (fileName, text) => {
82
+ const commands = splitCurlCommands(text).filter(isCurlCommand);
83
+ if (commands.length === 0) {
84
+ throw new Error("No cURL commands found in the file");
85
+ }
86
+ const parsed = commands.map((command) => parseCurl(command));
87
+ return {
88
+ collectionName: collectionNameFromFileName(fileName, "Imported cURL"),
89
+ requests: parsed.map((request, index) => ({
90
+ name: requestNameFor(request.method, request.url, index),
91
+ method: request.method,
92
+ url: request.url,
93
+ // Strip the trailing empty editor row — the backend rejects blank keys.
94
+ headers: filledRows(request.headers),
95
+ query: filledRows(request.query),
96
+ body: toPersistedRequestBody(request.body),
97
+ })),
98
+ };
99
+ };
100
+ // Re-exported here so `.http` bodies and cURL bodies go through one mapping.
101
+ export { inferBodyStateFromRaw };
102
+ //# 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,4 @@
1
+ export { collectionNameFromFileName, type FlatImportJsonValue, type FlatImportPayload, type FlatImportRequest, parseCurlFile, type PersistedRequestBody, requestNameFor, splitCurlCommands, toPersistedRequestBody, } from "./flatImport.js";
2
+ export { type ParsedHttpRequest, parseHttpFile, parseHttpRequests } from "./parseHttpFile.js";
3
+ export { type DetectImportFormatOptions, detectImportFormat, IMPORT_FORMAT_LABELS, type ImportDetection, type ImportFormat, importFormatLabel, } from "./detect.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http-file/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,0BAA0B,EAC1B,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,aAAa,EACb,KAAK,oBAAoB,EACzB,cAAc,EACd,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,KAAK,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EACL,KAAK,yBAAyB,EAC9B,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ // File importers (cURL scripts, .http/.rest files) + format detection —
2
+ // shared by the desktop, the MCP server and the backend. CSP-safe (see
3
+ // ../curl/index.ts).
4
+ export { collectionNameFromFileName, parseCurlFile, requestNameFor, splitCurlCommands, toPersistedRequestBody, } from "./flatImport.js";
5
+ export { parseHttpFile, parseHttpRequests } from "./parseHttpFile.js";
6
+ export { detectImportFormat, IMPORT_FORMAT_LABELS, importFormatLabel, } from "./detect.js";
7
+ //# 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,OAAO,EACL,0BAA0B,EAI1B,aAAa,EAEb,cAAc,EACd,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAA0B,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAEL,kBAAkB,EAClB,oBAAoB,EAGpB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { KeyValueRow } from "../curl/types.js";
2
+ import { type FlatImportPayload } from "./flatImport.js";
3
+ export interface ParsedHttpRequest {
4
+ name: string;
5
+ method: string;
6
+ url: string;
7
+ headers: KeyValueRow[];
8
+ bodyRaw: string;
9
+ }
10
+ export declare const parseHttpRequests: (text: string) => ParsedHttpRequest[];
11
+ export declare const parseHttpFile: (fileName: string, text: string) => FlatImportPayload;
12
+ //# sourceMappingURL=parseHttpFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseHttpFile.d.ts","sourceRoot":"","sources":["../../src/http-file/parseHttpFile.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,OAAO,EAEL,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAiGD,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,iBAAiB,EAGM,CAAC;AAEzE,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,EAAE,MAAM,MAAM,KAAG,iBAqB9D,CAAC"}