Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"version": "3.19.0-beta.2",
"version": "3.19.0-beta.4",
"packages": [
"packages/*",
"plugins/*"
Expand Down
4 changes: 2 additions & 2 deletions packages/insomnia-inso/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

34 changes: 17 additions & 17 deletions packages/insomnia-inso/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"private": true,
"name": "insomnia-inso",
"version": "3.19.0-beta.2",
"version": "3.19.0-beta.4",
"homepage": "https://insomnia.rest",
"description": "A CLI for Insomnia - The Collaborative API Design Tool",
"author": "Kong <office@konghq.com>",
Expand Down Expand Up @@ -62,23 +62,23 @@
"consola": "^2.15.0",
"cosmiconfig": "^6.0.0",
"enquirer": "^2.3.6",
"insomnia-plugin-base64": "^3.19.0-beta.2",
"insomnia-plugin-cookie-jar": "^3.19.0-beta.2",
"insomnia-plugin-core-themes": "^3.19.0-beta.2",
"insomnia-plugin-default-headers": "^3.19.0-beta.2",
"insomnia-plugin-file": "^3.19.0-beta.2",
"insomnia-plugin-hash": "^3.19.0-beta.2",
"insomnia-plugin-jsonpath": "^3.19.0-beta.2",
"insomnia-plugin-now": "^3.19.0-beta.2",
"insomnia-plugin-os": "^3.19.0-beta.2",
"insomnia-plugin-prompt": "^3.19.0-beta.2",
"insomnia-plugin-request": "^3.19.0-beta.2",
"insomnia-plugin-response": "^3.19.0-beta.2",
"insomnia-plugin-uuid": "^3.19.0-beta.2",
"insomnia-send-request": "^3.19.0-beta.2",
"insomnia-testing": "^3.19.0-beta.2",
"insomnia-plugin-base64": "^3.19.0-beta.4",
"insomnia-plugin-cookie-jar": "^3.19.0-beta.4",
"insomnia-plugin-core-themes": "^3.19.0-beta.4",
"insomnia-plugin-default-headers": "^3.19.0-beta.4",
"insomnia-plugin-file": "^3.19.0-beta.4",
"insomnia-plugin-hash": "^3.19.0-beta.4",
"insomnia-plugin-jsonpath": "^3.19.0-beta.4",
"insomnia-plugin-now": "^3.19.0-beta.4",
"insomnia-plugin-os": "^3.19.0-beta.4",
"insomnia-plugin-prompt": "^3.19.0-beta.4",
"insomnia-plugin-request": "^3.19.0-beta.4",
"insomnia-plugin-response": "^3.19.0-beta.4",
"insomnia-plugin-uuid": "^3.19.0-beta.4",
"insomnia-send-request": "^3.19.0-beta.4",
"insomnia-testing": "^3.19.0-beta.4",
"nedb": "^1.8.0",
"openapi-2-kong": "^3.19.0-beta.2",
"openapi-2-kong": "^3.19.0-beta.4",
"string-argv": "^0.3.2",
"yaml": "^2.3.1"
}
Expand Down
4 changes: 2 additions & 2 deletions packages/insomnia-send-request/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions packages/insomnia-send-request/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"private": true,
"name": "insomnia-send-request",
"license": "Apache-2.0",
"version": "3.19.0-beta.2",
"version": "3.19.0-beta.4",
"author": "Kong <office@konghq.com>",
"main": "dist/index.js",
"types": "dist/send-request/index.d.ts",
Expand All @@ -21,7 +21,7 @@
"hkdf": "0.0.2",
"html-entities": "^2.4.0",
"httpsnippet": "^1.22.0",
"insomnia-testing": "^3.19.0-beta.2",
"insomnia-testing": "^3.19.0-beta.4",
"isomorphic-git": "^1.5.0",
"jshint": "^2.13.6",
"jsonlint-mod-fixed": "1.7.7",
Expand All @@ -33,7 +33,7 @@
"node-forge": "^1.3.1",
"nunjucks": "^3.2.4",
"oauth-1.0a": "^2.2.6",
"openapi-2-kong": "^3.19.0-beta.2",
"openapi-2-kong": "^3.19.0-beta.4",
"tough-cookie": "^4.1.3",
"tslib": "2.0.1",
"url-join": "^4.0.1",
Expand Down
4 changes: 2 additions & 2 deletions packages/insomnia-smoke-test/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/insomnia-smoke-test/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"bugs": {
"url": "https://github.com/kong/insomnia/issues"
},
"version": "3.19.0-beta.2",
"version": "3.19.0-beta.4",
"scripts": {
"test:dev": "xvfb-maybe cross-env BUNDLE=dev playwright test",
"test:build": "xvfb-maybe cross-env BUNDLE=build playwright test",
Expand Down
4 changes: 2 additions & 2 deletions packages/insomnia-testing/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/insomnia-testing/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"private": true,
"name": "insomnia-testing",
"license": "Apache-2.0",
"version": "3.19.0-beta.2",
"version": "3.19.0-beta.4",
"author": "Kong <office@konghq.com>",
"repository": {
"type": "git",
Expand Down
4 changes: 2 additions & 2 deletions packages/insomnia/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 19 additions & 19 deletions packages/insomnia/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "insomnia",
"version": "2023.5.0-beta.3",
"version": "2023.5.0-beta.5",
"productName": "Insomnia",
"private": true,
"description": "The Collaborative API Design Tool",
Expand Down Expand Up @@ -69,23 +69,23 @@
"html-entities": "^2.4.0",
"httpsnippet": "^2.0.0",
"iconv-lite": "^0.6.3",
"insomnia-plugin-base64": "^3.19.0-beta.2",
"insomnia-plugin-cookie-jar": "^3.19.0-beta.2",
"insomnia-plugin-core-themes": "^3.19.0-beta.2",
"insomnia-plugin-default-headers": "^3.19.0-beta.2",
"insomnia-plugin-file": "^3.19.0-beta.2",
"insomnia-plugin-hash": "^3.19.0-beta.2",
"insomnia-plugin-jsonpath": "^3.19.0-beta.2",
"insomnia-plugin-kong-declarative-config": "^3.19.0-beta.2",
"insomnia-plugin-kong-kubernetes-config": "^3.19.0-beta.2",
"insomnia-plugin-kong-portal": "^3.19.0-beta.2",
"insomnia-plugin-now": "^3.19.0-beta.2",
"insomnia-plugin-os": "^3.19.0-beta.2",
"insomnia-plugin-prompt": "^3.19.0-beta.2",
"insomnia-plugin-request": "^3.19.0-beta.2",
"insomnia-plugin-response": "^3.19.0-beta.2",
"insomnia-plugin-uuid": "^3.19.0-beta.2",
"insomnia-testing": "^3.19.0-beta.2",
"insomnia-plugin-base64": "^3.19.0-beta.4",
"insomnia-plugin-cookie-jar": "^3.19.0-beta.4",
"insomnia-plugin-core-themes": "^3.19.0-beta.4",
"insomnia-plugin-default-headers": "^3.19.0-beta.4",
"insomnia-plugin-file": "^3.19.0-beta.4",
"insomnia-plugin-hash": "^3.19.0-beta.4",
"insomnia-plugin-jsonpath": "^3.19.0-beta.4",
"insomnia-plugin-kong-declarative-config": "^3.19.0-beta.4",
"insomnia-plugin-kong-kubernetes-config": "^3.19.0-beta.4",
"insomnia-plugin-kong-portal": "^3.19.0-beta.4",
"insomnia-plugin-now": "^3.19.0-beta.4",
"insomnia-plugin-os": "^3.19.0-beta.4",
"insomnia-plugin-prompt": "^3.19.0-beta.4",
"insomnia-plugin-request": "^3.19.0-beta.4",
"insomnia-plugin-response": "^3.19.0-beta.4",
"insomnia-plugin-uuid": "^3.19.0-beta.4",
"insomnia-testing": "^3.19.0-beta.4",
"isomorphic-git": "^1.10.4",
"js-yaml": "^3.14.1",
"jshint": "^2.13.6",
Expand All @@ -99,7 +99,7 @@
"node-forge": "^1.3.1",
"nunjucks": "^3.2.4",
"oauth-1.0a": "^2.2.6",
"openapi-2-kong": "^3.19.0-beta.2",
"openapi-2-kong": "^3.19.0-beta.4",
"papaparse": "^5.4.1",
"prettier": "2.4.1",
"shell-quote": "^1.8.1",
Expand Down
33 changes: 19 additions & 14 deletions packages/insomnia/src/main/export.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import fs, { mkdir } from 'node:fs/promises';
import { mkdir, writeFile } from 'node:fs/promises';
import path from 'node:path';

import electron from 'electron';
Expand All @@ -11,17 +11,22 @@ import { isGrpcRequest } from '../models/grpc-request';
import { isRequest } from '../models/request';
import { isWebSocketRequest } from '../models/websocket-request';
export async function exportAllWorkspaces() {
const projects = await models.project.all();
await Promise.all(projects.map(async project => {
const dataPath = process.env['INSOMNIA_DATA_PATH'] || electron.app.getPath('userData');
const versionPath = path.join(dataPath, 'backups', version);
await mkdir(versionPath, { recursive: true });
const fileName = path.join(versionPath, `${project.name}.insomnia.json`);
const workspaces = await models.workspace.findByParentId(project._id);
const docs = await Promise.all(workspaces.map(parentDoc => db.withDescendants(parentDoc)));
const requests = docs.flat().filter(doc => isRequest(doc) || isGrpcRequest(doc) || isWebSocketRequest(doc));
const stringifiedExport = await exportRequestsData(requests, true, 'json');
await fs.writeFile(fileName, stringifiedExport);
console.log('Exported project backup to:', fileName);
}));
try {
const projects = await models.project.all();
await Promise.all(projects.map(async project => {
const dataPath = process.env['INSOMNIA_DATA_PATH'] || electron.app.getPath('userData');
const versionPath = path.join(dataPath, 'backups', version);
await mkdir(versionPath, { recursive: true });
const fileName = path.join(versionPath, `${project.name}.insomnia.json`);
const workspaces = await models.workspace.findByParentId(project._id);
const docs = await Promise.all(workspaces.map(parentDoc => db.withDescendants(parentDoc)));
const requests = docs.flat().filter(doc => isRequest(doc) || isGrpcRequest(doc) || isWebSocketRequest(doc));
const stringifiedExport = await exportRequestsData(requests, true, 'json');
await writeFile(fileName, stringifiedExport);
console.log('Exported project backup to:', fileName);
}
));
} catch (err) {
console.log('Error exporting project backup:', err);
}
}
69 changes: 36 additions & 33 deletions packages/insomnia/src/main/network/curl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import { urlMatchesCertHost } from '../../network/url-matches-cert-host';
import { invariant } from '../../utils/invariant';
import { setDefaultProtocol } from '../../utils/url/protocol';
import { createConfiguredCurlInstance } from './libcurl-promise';
import { parseHeaderStrings } from './parse-header-strings';

export interface CurlConnection extends Curl {
_id: string;
Expand Down Expand Up @@ -138,16 +139,40 @@ const openCurlConnection = async (
const clientCertificates = await models.clientCertificate.findByParentId(options.workspaceId);
const filteredClientCertificates = clientCertificates.filter(c => !c.disabled && urlMatchesCertHost(setDefaultProtocol(c.host, 'https:'), options.url));
const { curl, debugTimeline } = createConfiguredCurlInstance({
// TODO: get cookies here
req: { ...request, cookieJar: options.cookieJar, cookies: [] },
finalUrl: options.url,
settings,
caCert: caCertificate,
certificates: filteredClientCertificates,
});
debugTimeline.forEach(entry => timelineFileStreams.get(options.requestId)?.write(JSON.stringify(entry) + '\n'));
curl.enable(CurlFeature.StreamResponse);
curl.setOpt(Curl.option.DEBUGFUNCTION, (infoType, buffer) => {
CurlConnections.set(options.requestId, curl);
CurlConnections.get(options.requestId)?.enable(CurlFeature.StreamResponse);
// TODO: add authHeader and request body?
const headerStrings = parseHeaderStrings({ req: request, finalUrl: options.url });
CurlConnections.get(options.requestId)?.setOpt(Curl.option.HTTPHEADER, headerStrings);
CurlConnections.get(options.requestId)?.on('error', async (error, errorCode) => {
const errorEvent: CurlErrorEvent = {
_id: uuidV4(),
requestId: options.requestId,
message: error.message,
type: 'error',
error,
timestamp: Date.now(),
};
console.error('curl - error: ', error, errorCode);
deleteRequestMaps(request._id, error.message, errorEvent);
event.sender.send(readyStateChannel, false);
curl.close();
if (errorCode) {
const res = await models.response.getById(responseId);
if (!res) {
createErrorResponse(responseId, request._id, responseEnvironmentId, timelinePath, error.message || 'Something went wrong');
}
}
});

CurlConnections.get(options.requestId)?.setOpt(Curl.option.DEBUGFUNCTION, (infoType, buffer) => {
const isSSLData = infoType === CurlInfoDebug.SslDataIn || infoType === CurlInfoDebug.SslDataOut;
const isEmpty = buffer.length === 0;
// Don't show cookie setting because this will display every domain in the jar
Expand All @@ -157,7 +182,7 @@ const openCurlConnection = async (
}

// NOTE: resolves "Text" from CurlInfoDebug[CurlInfoDebug.Text]
const name = CurlInfoDebug[infoType] as keyof typeof CurlInfoDebug;
let name = CurlInfoDebug[infoType] as keyof typeof CurlInfoDebug;
let timelineMessage;
const isRequestData = infoType === CurlInfoDebug.DataOut;
if (isRequestData) {
Expand All @@ -166,34 +191,16 @@ const openCurlConnection = async (
timelineMessage = isLessThan10KB ? buffer.toString('utf8') : `(${describeByteSize(buffer.length)} hidden)`;
}
const isResponseData = infoType === CurlInfoDebug.DataIn;
if (!isResponseData) {
const value = timelineMessage || buffer.toString('utf8');
timelineFileStreams.get(options.requestId)?.write(JSON.stringify({ name, value, timestamp: Date.now() }) + '\n');
if (isResponseData) {
timelineMessage = `Received ${describeByteSize(buffer.length)} chunk`;
name = 'Text';
}
const value = timelineMessage || buffer.toString('utf8');
timelineFileStreams.get(options.requestId)?.write(JSON.stringify({ name, value, timestamp: Date.now() }) + '\n');
return 0;
});
curl.on('error', async (error, errorCode) => {
const errorEvent: CurlErrorEvent = {
_id: uuidV4(),
requestId: options.requestId,
message: error.message,
type: 'error',
error,
timestamp: Date.now(),
};
console.error('curl - error: ', error, errorCode);
deleteRequestMaps(request._id, error.message, errorEvent);
event.sender.send(readyStateChannel, false);
curl.close();
if (errorCode) {
const res = await models.response.getById(responseId);
if (!res) {
createErrorResponse(responseId, request._id, responseEnvironmentId, timelinePath, error.message || 'Something went wrong');
}
}
});

curl.on('stream', async (stream: Readable, _code: number, [headersWithStatus]: HeaderInfo[]) => {
CurlConnections.get(options.requestId)?.on('stream', async (stream: Readable, _code: number, [headersWithStatus]: HeaderInfo[]) => {
event.sender.send(readyStateChannel, true);
const { timeline, responseHeaders, statusCode, statusMessage, httpVersion } = parseHeadersAndBuildTimeline(options.url, headersWithStatus);

Expand Down Expand Up @@ -233,10 +240,7 @@ const openCurlConnection = async (
}
timeline.map(t => timelineFileStreams.get(options.requestId)?.write(JSON.stringify(t) + '\n'));

// we are going to write the response stream to this file
const writableStream = eventLogFileStreams.get(request._id);
// two ways to go here
invariant(writableStream, 'writableStream should be defined');
invariant(eventLogFileStreams.get(request._id), 'writableStream should be defined');
for await (const chunk of stream) {
const messageEvent: CurlMessageEvent = {
_id: uuidV4(),
Expand All @@ -254,7 +258,6 @@ const openCurlConnection = async (
event.sender.send(readyStateChannel, false);
});
curl.perform();
CurlConnections.set(options.requestId, curl);
} catch (e) {
console.error('unhandled error:', e);

Expand Down
Loading