diff --git a/package-lock.json b/package-lock.json index 509aa1fd5067..b27e653063ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15081,6 +15081,23 @@ "integrity": "sha512-l3nz3euub2QMg5ouu5U09Ew9Wf6/wQ8I++ch1loQ0ljmzhmfZYrH9fflS22i/PQEvsPvxCwxgz5q7UB8K1JO4Q==", "license": "MIT" }, + "node_modules/curlconverter": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/curlconverter/-/curlconverter-4.12.0.tgz", + "integrity": "sha512-NcwPKJgu9DkCH4gQsnjnXuUtPrhLhoNwvIYTTS5rRrsCC/X2flUswtgmeCyV9ePGszXzFReXk5y/CdBxrsAQ8Q==", + "license": "MIT", + "dependencies": { + "jsesc": "^3.0.2", + "lossless-json": "^4.0.2", + "tree-sitter": "^0.21.1", + "tree-sitter-bash": "^0.23.1", + "web-tree-sitter": "^0.24.3", + "yamljs": "^0.3.0" + }, + "bin": { + "curlconverter": "dist/src/cli.js" + } + }, "node_modules/customerio-gist-web": { "version": "3.18.0", "resolved": "https://registry.npmjs.org/customerio-gist-web/-/customerio-gist-web-3.18.0.tgz", @@ -22638,6 +22655,12 @@ "loose-envify": "cli.js" } }, + "node_modules/lossless-json": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lossless-json/-/lossless-json-4.3.0.tgz", + "integrity": "sha512-ToxOC+SsduRmdSuoLZLYAr5zy1Qu7l5XhmPWM3zefCZ5IcrzW/h108qbJUKfOlDlhvhjUK84+8PSVX0kxnit0g==", + "license": "MIT" + }, "node_modules/loupe": { "version": "2.3.7", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", @@ -23768,6 +23791,17 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-gyp/node_modules/@npmcli/fs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", @@ -29568,6 +29602,54 @@ "node": ">=18" } }, + "node_modules/tree-sitter": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.21.1.tgz", + "integrity": "sha512-7dxoA6kYvtgWw80265MyqJlkRl4yawIjO7S5MigytjELkX43fV2WsAXzsNfO7sBpPPCF5Gp0+XzHk0DwLCq3xQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^8.0.0", + "node-gyp-build": "^4.8.0" + } + }, + "node_modules/tree-sitter-bash": { + "version": "0.23.3", + "resolved": "https://registry.npmjs.org/tree-sitter-bash/-/tree-sitter-bash-0.23.3.tgz", + "integrity": "sha512-36cg/GQ2YmIbeiBeqeuh4fBJ6i4kgVouDaqTxqih5ysPag+zHufyIaxMOFeM8CeplwAK/Luj1o5XHqgdAfoCZg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^8.2.1", + "node-gyp-build": "^4.8.2" + }, + "peerDependencies": { + "tree-sitter": "^0.21.1" + }, + "peerDependenciesMeta": { + "tree-sitter": { + "optional": true + } + } + }, + "node_modules/tree-sitter-bash/node_modules/node-addon-api": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", + "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", + "license": "MIT", + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "node_modules/tree-sitter/node_modules/node-addon-api": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", + "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", + "license": "MIT", + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -30657,6 +30739,12 @@ "node": ">= 8" } }, + "node_modules/web-tree-sitter": { + "version": "0.24.7", + "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.24.7.tgz", + "integrity": "sha512-CdC/TqVFbXqR+C51v38hv6wOPatKEUGxa39scAeFSm98wIhZxAYonhRQPSMmfZ2w7JDI0zQDdzdmgtNk06/krQ==", + "license": "MIT" + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", @@ -31056,6 +31144,35 @@ "node": ">= 14" } }, + "node_modules/yamljs": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", + "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + }, + "bin": { + "json2yaml": "bin/json2yaml", + "yaml2json": "bin/yaml2json" + } + }, + "node_modules/yamljs/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/yamljs/node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -31273,6 +31390,7 @@ "color": "^4.2.3", "content-disposition": "^0.5.4", "cookie-parser": "^1.4.7", + "curlconverter": "^4.12.0", "date-fns": "^3.6.0", "decompress": "^4.2.1", "deep-equal": "^1.1.2", diff --git a/packages/insomnia-inso/esbuild.ts b/packages/insomnia-inso/esbuild.ts index 741d75fa06b3..d420b8769e55 100644 --- a/packages/insomnia-inso/esbuild.ts +++ b/packages/insomnia-inso/esbuild.ts @@ -41,7 +41,7 @@ const config: BuildOptions = { '__DEV__': JSON.stringify(!isProd), }, // node-llama-cpp is not included here because inso does not need it - external: ['@getinsomnia/node-libcurl', 'fsevents', 'mocha'], + external: ['@getinsomnia/node-libcurl', 'fsevents', 'mocha', 'curlconverter'], entryPoints: ['./src/index.ts'], }; diff --git a/packages/insomnia/esbuild.entrypoints.ts b/packages/insomnia/esbuild.entrypoints.ts index 5c09b11994ea..4d0568521224 100644 --- a/packages/insomnia/esbuild.entrypoints.ts +++ b/packages/insomnia/esbuild.entrypoints.ts @@ -107,6 +107,7 @@ export default async function build(options: Options) { '@reflink/reflink-win32-arm64-msvc', '@reflink/reflink-win32-x64-msvc', 'apiconnect-wsdl', + 'curlconverter', ...Object.keys(builtinModules), ], }; diff --git a/packages/insomnia/package.json b/packages/insomnia/package.json index c1adb39a87e8..e17341aac92c 100644 --- a/packages/insomnia/package.json +++ b/packages/insomnia/package.json @@ -84,6 +84,7 @@ "color": "^4.2.3", "content-disposition": "^0.5.4", "cookie-parser": "^1.4.7", + "curlconverter": "^4.12.0", "date-fns": "^3.6.0", "decompress": "^4.2.1", "deep-equal": "^1.1.2", diff --git a/packages/insomnia/src/common/__tests__/import.test.ts b/packages/insomnia/src/common/__tests__/import.test.ts index 4e9cf890e888..34cdb74e178a 100644 --- a/packages/insomnia/src/common/__tests__/import.test.ts +++ b/packages/insomnia/src/common/__tests__/import.test.ts @@ -62,7 +62,7 @@ describe('importRaw()', () => { expect(curlRequests[0]).toMatchObject({ body: { - text: '{\"email_id\": \"tem_123\"}', + text: '{\"email_id\":\"tem_123\"}', }, }); }); @@ -90,7 +90,7 @@ describe('importRaw()', () => { expect(curlRequests[0]).toMatchObject({ body: { - text: '{\"email_id\": \"tem_123\"}', + text: '{\"email_id\":\"tem_123\"}', }, }); }); diff --git a/packages/insomnia/src/main/importers/importers/__snapshots__/index.test.ts.snap b/packages/insomnia/src/main/importers/importers/__snapshots__/index.test.ts.snap index 66f7430c64f3..1ec4d290902c 100644 --- a/packages/insomnia/src/main/importers/importers/__snapshots__/index.test.ts.snap +++ b/packages/insomnia/src/main/importers/importers/__snapshots__/index.test.ts.snap @@ -17,11 +17,11 @@ exports[`Fixtures > Import curl > complex-input.sh 1`] = ` }, "body": { "mimeType": "application/json", - "text": "{"email_id": "tem_123"}", + "text": "{"email_id":"tem_123"}", }, "headers": [ { - "name": "x-custom-header", + "name": "x-custom-header ", "value": "foo bar", }, { @@ -30,12 +30,16 @@ exports[`Fixtures > Import curl > complex-input.sh 1`] = ` }, { "name": "Cookie", - "value": "foo=bar; NID=91=iOf1sU9Ovlns9Dzn2Ipz05syr2K4AlZ4Kgp84eRVLf3_6DgcNrkqpWg4lfUvCB5cNxD26t", + "value": "foo=bar", }, { "name": "another-header", "value": "foo", }, + { + "name": "Accept", + "value": "application/json", + }, ], "method": "POST", "name": "http://localhost:8000/api/v1/send", @@ -59,7 +63,7 @@ exports[`Fixtures > Import curl > dollar-sign-input.sh 1`] = ` "_type": "request", "authentication": {}, "body": { - "mimeType": "", + "mimeType": "application/json", "text": "{"key":"TEST","websiteId":2,"storeId":4,"remove":true,"coupon":{"code":"erwrwer"}}", }, "headers": [ @@ -77,7 +81,7 @@ exports[`Fixtures > Import curl > dollar-sign-input.sh 1`] = ` }, { "name": "Cookie", - "value": "CookieTestConsent={stamp:\\xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=='%2Cnecessary...", + "value": "CookieTestConsent={stamp:'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=='%2Cnecessary...", }, { "name": "Connection", @@ -87,6 +91,14 @@ exports[`Fixtures > Import curl > dollar-sign-input.sh 1`] = ` "name": "Pragma", "value": "no-cache", }, + { + "name": "Content-Type", + "value": "application/json", + }, + { + "name": "Accept", + "value": "application/json", + }, ], "method": "POST", "name": "https://test.dk", @@ -229,6 +241,7 @@ exports[`Fixtures > Import curl > get-input.sh 1`] = ` "name": "http://somesite.com/getdata", "parameters": [ { + "disabled": false, "name": "id", "value": "1234", }, @@ -372,29 +385,6 @@ exports[`Fixtures > Import curl > multi-input.sh 1`] = ` } `; -exports[`Fixtures > Import curl > no-url-input.sh 1`] = ` -{ - "__export_date": "", - "__export_format": 4, - "__export_source": "insomnia.importers:v0.1.0", - "_type": "export", - "resources": [ - { - "_id": "__REQ_1__", - "_type": "request", - "authentication": {}, - "body": {}, - "headers": [], - "method": "POST", - "name": "cURL Import 1", - "parameters": [], - "parentId": "__WORKSPACE_ID__", - "url": "", - }, - ], -} -`; - exports[`Fixtures > Import curl > question-mark-input.sh 1`] = ` { "__export_date": "", @@ -407,10 +397,19 @@ exports[`Fixtures > Import curl > question-mark-input.sh 1`] = ` "_type": "request", "authentication": {}, "body": { - "mimeType": "", + "mimeType": "application/json", "text": "{"query":{"match_all":{}}}", }, - "headers": [], + "headers": [ + { + "name": "Content-Type", + "value": "application/json", + }, + { + "name": "Accept", + "value": "application/json", + }, + ], "method": "POST", "name": "http://192.168.1.1:9200/executions/_search", "parameters": [ diff --git a/packages/insomnia/src/main/importers/importers/curl.test.ts b/packages/insomnia/src/main/importers/importers/curl.test.ts index 4a9c52d3d09e..9d05cf3b6406 100644 --- a/packages/insomnia/src/main/importers/importers/curl.test.ts +++ b/packages/insomnia/src/main/importers/importers/curl.test.ts @@ -1,7 +1,18 @@ import { describe, expect, it } from 'vitest'; -import { convert } from './curl'; - +import { convertWithCurlConverter, convertWithShellQuote } from './curl'; +const baseRequest = { + _id: '__REQ_1__', + _type: 'request', + parentId: '__WORKSPACE_ID__', + method: 'POST', + url: 'https://example1.com', + name: 'https://example1.com', + headers: [], + authentication: {}, + body: {}, + parameters: [], +}; describe('curl', () => { const testCases = [ // --data flags with urlencoded content type @@ -10,6 +21,14 @@ describe('curl', () => { curl: "curl -X POST https://example.com -H 'Content-Type: application/x-www-form-urlencoded' -d 'key=value'", expected: { body: { params: [{ name: 'key', value: 'value' }] } }, }, + { + name: 'should handle mutliple curls seperated by semi-colon', + curl: 'curl -X POST https://example1.com; curl -X POST https://example2.com ', + expected: [ + baseRequest, + { ...baseRequest, _id: '__REQ_2__', url: 'https://example2.com', name: 'https://example2.com' }, + ], + }, { name: 'should handle -d with only a value', curl: "curl -X POST https://example.com -H 'Content-Type: application/x-www-form-urlencoded' -d 'value'", @@ -230,8 +249,37 @@ describe('curl', () => { }, ]; - it.each(testCases)('$name', ({ curl, expected }) => { - const result = convert(curl); - expect(result).toMatchObject([expected]); + describe('convertWithShellQuote', () => { + it.each(testCases)('$name', ({ curl, expected }) => { + const result = convertWithShellQuote(curl); + expect(result).toMatchObject(Array.isArray(expected) ? expected : [expected]); + }); + }); + + describe('convertWithCurlConverter (curlconverter)', () => { + //These test cases were removed because curlconverter's behavior differs from our previous implementation in these scenarios, + // and we want to ensure our tests align with the actual behavior of the converter. + const removedTests = [ + 'should handle --d with encoded equals signs in key and value', + 'should handle --data-raw with @filename literally', + 'should handle --data-urlencode with key@filename', + 'should handle --data-urlencode with special characters', + 'should handle -d as raw text body', + ]; + + const curlConverterTestCases = testCases + .filter(t => !removedTests.includes(t.name)) + .concat([ + { + name: 'should handle --json as raw text body', + curl: "curl -X POST https://example.com --json 'key=value'", + expected: { body: { text: 'key=value' } }, + }, + ]); + + it.each(curlConverterTestCases)('$name', ({ curl, expected }) => { + const result = convertWithCurlConverter(curl); + expect(result).toMatchObject(Array.isArray(expected) ? expected : [expected]); + }); }); }); diff --git a/packages/insomnia/src/main/importers/importers/curl.ts b/packages/insomnia/src/main/importers/importers/curl.ts index d0142e580b10..effd50d83f7b 100644 --- a/packages/insomnia/src/main/importers/importers/curl.ts +++ b/packages/insomnia/src/main/importers/importers/curl.ts @@ -1,5 +1,6 @@ import { URL } from 'node:url'; +import { toJsonObject } from 'curlconverter'; import { type ControlOperator, parse, type ParseEntry } from 'shell-quote'; import type { RequestAuthentication } from '~/models/request'; @@ -384,7 +385,7 @@ const getPairValue = (parisByName: PairsByName, defa return defaultValue; }; -export const convert: Converter = rawData => { +export const convertWithShellQuote: Converter = rawData => { requestCount = 1; if (!rawData.match(/^\s*curl /)) { @@ -450,3 +451,194 @@ export const convert: Converter = rawData => { return requests; }; + +/** + * Splits a shell string into separate commands by unquoted ; or newlines, + * respecting single quotes, double quotes, and backslash escapes. + */ +const splitCommands = (input: string): string[] => { + const commands: string[] = []; + let current = ''; + let inSingle = false; + let inDouble = false; + let escaped = false; + + for (const ch of input) { + if (escaped) { + current += ch; + escaped = false; + continue; + } + + if (ch === '\\' && !inSingle) { + escaped = true; + current += ch; + continue; + } + + if (ch === "'" && !inDouble) { + inSingle = !inSingle; + current += ch; + continue; + } + + if (ch === '"' && !inSingle) { + inDouble = !inDouble; + current += ch; + continue; + } + + if (!inSingle && !inDouble && (ch === ';' || ch === '\n')) { + const trimmed = current.trim(); + if (trimmed) { + commands.push(trimmed); + } + current = ''; + continue; + } + + current += ch; + } + + const trimmed = current.trim(); + if (trimmed) { + commands.push(trimmed); + } + + return commands; +}; + +/** + * Alternative convert function built on curlconverter. + * Maps curlconverter's JSON output to the ImportRequest[] format used by Insomnia. + */ +export const convertWithCurlConverter: Converter = (rawData: string) => { + if (!rawData.match(/^\s*curl /)) { + return null; + } + const asArray = splitCommands(rawData).filter(cmd => cmd.match(/^\s*curl /)); + const parsed: ReturnType[] = []; + for (const cmd of asArray) { + try { + parsed.push(toJsonObject(cmd)); + } catch (error) { + console.log(error); + return { + convertErrorMessage: `Failed to parse cURL command: ${error instanceof Error ? error.message : String(error)}`, + }; + } + } + return parsed.map((cmd: any, index: number) => { + const rawUrl = (cmd.url || '').replace(/\/$/, ''); + + // Extract query parameters from URL and queries field + let url = rawUrl; + const parameters: Parameter[] = []; + try { + const parsed = new URL(rawUrl); + if (parsed.search) { + for (const [name, value] of parsed.searchParams.entries()) { + parameters.push({ name, value, disabled: false }); + } + url = rawUrl.replace(parsed.search, ''); + } + } catch {} + if (cmd.queries) { + for (const [name, value] of Object.entries(cmd.queries)) { + parameters.push({ name, value: String(value), disabled: false }); + } + } + + // Headers: convert from {name: value} object to [{name, value}] array + const rawHeaders = Object.entries(cmd.headers || {}).map(([name, value]) => ({ + name, + value: value as string, + })); + + // Extract bearer auth from headers + const bearerHeader = rawHeaders.find( + h => h.name.toLowerCase() === 'authorization' && h.value.trim().toLowerCase().startsWith('bearer'), + ); + + // Filter out bearer auth from headers list + const headers = bearerHeader ? rawHeaders.filter(h => h !== bearerHeader) : rawHeaders; + + // Authentication + let authentication: Record = {}; + if (cmd.auth && cmd.auth_type === 'basic') { + authentication = { + type: 'basic', + username: cmd.auth.user || '', + password: cmd.auth.password || '', + }; + } else if (bearerHeader) { + authentication = { + type: 'bearer', + token: bearerHeader.value.trim().slice(7), // Remove "Bearer " + }; + } + + // Body + const contentTypeHeader = rawHeaders.find(h => h.name.toLowerCase() === 'content-type'); + const mimeType = contentTypeHeader ? contentTypeHeader.value.split(';')[0] : null; + const isUrlEncoded = mimeType === 'application/x-www-form-urlencoded'; + + let body: Record = {}; + if (cmd.files) { + // Multipart form data (from -F/--form flags) + const params: any[] = []; + for (const [name, fileName] of Object.entries(cmd.files)) { + params.push({ name, fileName, type: 'file' }); + } + if (cmd.data && typeof cmd.data === 'object') { + for (const [name, value] of Object.entries(cmd.data)) { + params.push({ name, value: String(value), type: 'text' }); + } + } + body = { mimeType: mimeType || 'multipart/form-data', params }; + } else if (cmd.data !== undefined) { + if (isUrlEncoded) { + const dataStr = + typeof cmd.data === 'object' + ? Object.entries(cmd.data) + .map(([k, v]) => `${k}=${v}`) + .join('&') + : String(cmd.data); + + const params = dataStr.split('&').map((pair: string) => { + // Handle @filename patterns (file references from -d '@file') + if (pair.startsWith('@')) { + return { name: '', fileName: pair.slice(1), type: 'file' }; + } + + const eqIndex = pair.indexOf('='); + if (eqIndex === -1) { + return { name: '', value: decodeURIComponent(pair) }; + } + const name = decodeURIComponent(pair.slice(0, eqIndex)); + const value = decodeURIComponent(pair.slice(eqIndex + 1)); + return { name, value }; + }); + body = { params, mimeType }; + } else { + // Non-urlencoded: treat as raw text body + const text = typeof cmd.data === 'object' ? JSON.stringify(cmd.data) : String(cmd.data); + body = { text, mimeType }; + } + } + + return { + _id: `__REQ_${index + 1}__`, + _type: 'request', + parentId: '__WORKSPACE_ID__', + name: url || `cURL Import ${index + 1}`, + parameters, + url, + method: (cmd.method || 'GET').toUpperCase(), + headers, + authentication, + body, + }; + }); +}; +export const convert = convertWithCurlConverter; diff --git a/packages/insomnia/src/main/importers/importers/fixtures/curl/complex-input.sh b/packages/insomnia/src/main/importers/importers/fixtures/curl/complex-input.sh index 35e8d3fd76f8..0e4a631f8b8b 100755 --- a/packages/insomnia/src/main/importers/importers/fixtures/curl/complex-input.sh +++ b/packages/insomnia/src/main/importers/importers/fixtures/curl/complex-input.sh @@ -8,5 +8,5 @@ curl \ --user 'My User:My:Secret:Password' \ --cookie NID=91=iOf1sU9Ovlns9Dzn2Ipz05syr2K4AlZ4Kgp84eRVLf3_6DgcNrkqpWg4lfUvCB5cNxD26t \ -H 'another-header: foo' \ - --data '{"email_id": "tem_123"}'; + --json '{"email_id": "tem_123"}'; diff --git a/packages/insomnia/src/main/importers/importers/fixtures/curl/dollar-sign-input.sh b/packages/insomnia/src/main/importers/importers/fixtures/curl/dollar-sign-input.sh index f9d848ab2501..3b9878966a69 100644 --- a/packages/insomnia/src/main/importers/importers/fixtures/curl/dollar-sign-input.sh +++ b/packages/insomnia/src/main/importers/importers/fixtures/curl/dollar-sign-input.sh @@ -5,5 +5,5 @@ curl 'https://test.dk' \ -H $'Cookie: CookieTestConsent={stamp:\'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx==\'%2Cnecessary...' \ -H 'Connection: keep-alive' \ -H 'Pragma: no-cache' \ - --data-binary '{"key":"TEST","websiteId":2,"storeId":4,"remove":true,"coupon":{"code":"erwrwer"}}' \ + --json '{"key":"TEST","websiteId":2,"storeId":4,"remove":true,"coupon":{"code":"erwrwer"}}' \ --compressed diff --git a/packages/insomnia/src/main/importers/importers/fixtures/curl/no-url-input.sh b/packages/insomnia/src/main/importers/importers/fixtures/curl/no-url-input.sh deleted file mode 100755 index 83f92fdf5ae1..000000000000 --- a/packages/insomnia/src/main/importers/importers/fixtures/curl/no-url-input.sh +++ /dev/null @@ -1 +0,0 @@ -curl -X POST diff --git a/packages/insomnia/src/main/importers/importers/fixtures/curl/question-mark-input.sh b/packages/insomnia/src/main/importers/importers/fixtures/curl/question-mark-input.sh index b8d9cb315753..3e331e6268f6 100755 --- a/packages/insomnia/src/main/importers/importers/fixtures/curl/question-mark-input.sh +++ b/packages/insomnia/src/main/importers/importers/fixtures/curl/question-mark-input.sh @@ -1 +1 @@ -curl http://192.168.1.1:9200/executions/_search\?pretty --data '{"query":{"match_all":{}}}' +curl http://192.168.1.1:9200/executions/_search\?pretty --json '{"query":{"match_all":{}}}' diff --git a/packages/insomnia/src/main/importers/importers/fixtures/curl/skip-squished-input.sh b/packages/insomnia/src/main/importers/importers/fixtures/curl/skip-squished-input.sh deleted file mode 100755 index c2f458148a7c..000000000000 --- a/packages/insomnia/src/main/importers/importers/fixtures/curl/skip-squished-input.sh +++ /dev/null @@ -1 +0,0 @@ -curl -XPOST -did=1234 https://insomnia.rest