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 packages/insomnia-app/app/common/har.ts
Original file line number Diff line number Diff line change
Expand Up @@ -340,7 +340,7 @@ export async function exportHarWithRequest(
async function _applyRequestPluginHooks(
renderedRequest: RenderedRequest,
renderedContext: Record<string, any>,
) {
): Promise<RenderedRequest> {
let newRenderedRequest = renderedRequest;

for (const { plugin, hook } of await plugins.getRequestHooks()) {
Expand Down
15 changes: 1 addition & 14 deletions packages/insomnia-app/app/network/__tests__/network.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ import { getRenderedRequestAndContext } from '../../common/render';
import * as models from '../../models';
import { DEFAULT_BOUNDARY } from '../multipart';
import * as networkUtils from '../network';
const CONTEXT = {};

const getRenderedRequest = async (args: Parameters<typeof getRenderedRequestAndContext>[0]) => (await getRenderedRequestAndContext(args)).request;

Expand Down Expand Up @@ -97,7 +96,6 @@ describe('actuallySend()', () => {
const renderedRequest = await getRenderedRequest({ request });
const response = await networkUtils._actuallySend(
renderedRequest,
CONTEXT,
workspace,
settings,
);
Expand Down Expand Up @@ -172,7 +170,6 @@ describe('actuallySend()', () => {
const renderedRequest = await getRenderedRequest({ request });
const response = await networkUtils._actuallySend(
renderedRequest,
CONTEXT,
workspace,
settings,
);
Expand Down Expand Up @@ -272,7 +269,6 @@ describe('actuallySend()', () => {
const renderedRequest = await getRenderedRequest({ request });
const response = await networkUtils._actuallySend(
renderedRequest,
CONTEXT,
workspace,
settings,
);
Expand Down Expand Up @@ -332,7 +328,6 @@ describe('actuallySend()', () => {
const renderedRequest = await getRenderedRequest({ request });
const response = await networkUtils._actuallySend(
renderedRequest,
CONTEXT,
workspace,
settings,
);
Expand Down Expand Up @@ -412,7 +407,6 @@ describe('actuallySend()', () => {
const renderedRequest = await getRenderedRequest({ request });
const response = await networkUtils._actuallySend(
renderedRequest,
CONTEXT,
workspace,
settings,
);
Expand Down Expand Up @@ -473,7 +467,6 @@ describe('actuallySend()', () => {
const renderedRequest = await getRenderedRequest({ request });
const response = await networkUtils._actuallySend(
renderedRequest,
CONTEXT,
workspace,
settings,
);
Expand Down Expand Up @@ -513,7 +506,6 @@ describe('actuallySend()', () => {
const renderedRequest = await getRenderedRequest({ request });
const response = await networkUtils._actuallySend(
renderedRequest,
CONTEXT,
workspace,
settings,
);
Expand Down Expand Up @@ -552,7 +544,6 @@ describe('actuallySend()', () => {
const renderedRequest = await getRenderedRequest({ request });
const response = await networkUtils._actuallySend(
renderedRequest,
CONTEXT,
workspace,
settings,
);
Expand Down Expand Up @@ -592,7 +583,6 @@ describe('actuallySend()', () => {
const renderedRequest = await getRenderedRequest({ request });
const response = await networkUtils._actuallySend(
renderedRequest,
CONTEXT,
workspace,
settings,
);
Expand Down Expand Up @@ -689,7 +679,6 @@ describe('actuallySend()', () => {
const renderedRequest = await getRenderedRequest({ request });
const response = await networkUtils._actuallySend(
renderedRequest,
CONTEXT,
workspace,
settings,
null,
Expand Down Expand Up @@ -741,7 +730,7 @@ describe('actuallySend()', () => {
parentId: workspace._id,
});
const renderedRequest = await getRenderedRequest({ request });
const responseV1 = await networkUtils._actuallySend(renderedRequest, CONTEXT, workspace, {
const responseV1 = await networkUtils._actuallySend(renderedRequest, workspace, {
...settings,
preferredHttpVersion: HttpVersions.V1_0,
});
Expand Down Expand Up @@ -777,14 +766,12 @@ describe('actuallySend()', () => {
// WHEN
const response1Promise = networkUtils._actuallySend(
renderedRequest1,
CONTEXT,
workspace,
settings,
);

const response2Promise = networkUtils._actuallySend(
renderedRequest2,
CONTEXT,
workspace,
settings,
);
Expand Down
109 changes: 54 additions & 55 deletions packages/insomnia-app/app/network/network.ts
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,6 @@ export function hasCancelFunctionForId(requestId) {

export async function _actuallySend(
renderedRequest: RenderedRequest,
renderContext: Record<string, any>,
workspace: Workspace,
settings: Omit<Settings, 'validateSSL' | 'validateAuthSSL'>,
environment?: Environment | null,
Expand Down Expand Up @@ -183,13 +182,12 @@ export async function _actuallySend(
async function respond(
patch: ResponsePatch,
bodyPath: string | null,
noPlugins = false,
) {
const timelinePath = await storeTimeline(timeline);
// Tear Down the cancellation logic
clearCancelFunctionForId(renderedRequest._id);
const environmentId = environment ? environment._id : null;
const responsePatchBeforeHooks = Object.assign(
return resolve(Object.assign(
{
timelinePath,
environmentId,
Expand All @@ -201,29 +199,7 @@ export async function _actuallySend(
settingStoreCookies: renderedRequest.settingStoreCookies,
} as ResponsePatch,
patch,
);

if (noPlugins) {
resolve(responsePatchBeforeHooks);
return;
}

let responsePatch: ResponsePatch | null = null;

try {
responsePatch = await _applyResponsePluginHooks(
responsePatchBeforeHooks,
renderedRequest,
renderContext,
);
} catch (err) {
await handleError(
new Error(`[plugin] Response hook failed plugin=${err.plugin.name} err=${err.message}`),
);
return;
}

resolve(responsePatch);
));
}

/** Helper function to respond with an error */
Expand All @@ -232,14 +208,13 @@ export async function _actuallySend(
{
url: renderedRequest.url,
parentId: renderedRequest._id,
error: err.message,
error: err.message || 'Something went wrong',
elapsedTime: 0, // 0 because this path is hit during plugin calls
statusMessage: 'Error',
settingSendCookies: renderedRequest.settingSendCookies,
settingStoreCookies: renderedRequest.settingStoreCookies,
},
null,
true,
);
}

Expand Down Expand Up @@ -267,7 +242,6 @@ export async function _actuallySend(
error: 'Request was cancelled',
},
null,
true,
);
// Kill it!
curl.close();
Expand Down Expand Up @@ -839,11 +813,10 @@ export async function _actuallySend(
await respond(
{
statusMessage,
error,
error: error || 'Something went wrong',
elapsedTime: curl.getInfo(Curl.info.TOTAL_TIME) as number * 1000,
},
null,
true,
);
});
curl.perform();
Expand Down Expand Up @@ -896,14 +869,21 @@ export async function sendWithSettings(
throw new Error(`Failed to render request: ${requestId}`);
}

return _actuallySend(
const response = await _actuallySend(
renderResult.request,
renderResult.context,
workspace,
settings,
environment,
settings.validateAuthSSL,
);
if (response.error){
return response;
}
return _applyResponsePluginHooks(
response,
renderResult.request,
renderResult.context,
);
}

export async function send(
Expand Down Expand Up @@ -969,7 +949,7 @@ export async function send(
} catch (err) {
return {
environmentId: environmentId,
error: err.message,
error: err.message || 'Something went wrong',
parentId: renderedRequestBeforePlugins._id,
settingSendCookies: renderedRequestBeforePlugins.settingSendCookies,
settingStoreCookies: renderedRequestBeforePlugins.settingStoreCookies,
Expand All @@ -981,7 +961,6 @@ export async function send(

const response = await _actuallySend(
renderedRequest,
renderedContextBeforePlugins,
workspace,
settings,
environment,
Expand All @@ -992,7 +971,14 @@ export async function send(
? `[network] Response failed req=${requestId} err=${response.error || 'n/a'}`
: `[network] Response succeeded req=${requestId} status=${response.statusCode || '?'}`,
);
return response;
if (response.error){
return response;
}
return _applyResponsePluginHooks(
response,
renderedRequest,
renderedContextBeforePlugins,
);
}

async function _applyRequestPluginHooks(
Expand Down Expand Up @@ -1025,29 +1011,42 @@ async function _applyResponsePluginHooks(
response: ResponsePatch,
renderedRequest: RenderedRequest,
renderedContext: Record<string, any>,
) {
const newResponse = clone(response);
const newRequest = clone(renderedRequest);

for (const { plugin, hook } of await plugins.getResponseHooks()) {
const context = {
...(pluginContexts.app.init(RENDER_PURPOSE_NO_RENDER) as Record<string, any>),
...pluginContexts.data.init(renderedContext.getProjectId()),
...(pluginContexts.store.init(plugin) as Record<string, any>),
...(pluginContexts.response.init(newResponse) as Record<string, any>),
...(pluginContexts.request.init(newRequest, renderedContext, true) as Record<string, any>),
...(pluginContexts.network.init(renderedContext.getEnvironmentId()) as Record<string, any>),
};
): Promise<ResponsePatch> {
try {
const newResponse = clone(response);
const newRequest = clone(renderedRequest);

for (const { plugin, hook } of await plugins.getResponseHooks()) {
const context = {
...(pluginContexts.app.init(RENDER_PURPOSE_NO_RENDER) as Record<string, any>),
...pluginContexts.data.init(renderedContext.getProjectId()),
...(pluginContexts.store.init(plugin) as Record<string, any>),
...(pluginContexts.response.init(newResponse) as Record<string, any>),
...(pluginContexts.request.init(newRequest, renderedContext, true) as Record<string, any>),
...(pluginContexts.network.init(renderedContext.getEnvironmentId()) as Record<string, any>),
};

try {
await hook(context);
} catch (err) {
err.plugin = plugin;
throw err;
try {
await hook(context);
} catch (err) {
err.plugin = plugin;
throw err;
}
}

return newResponse;
} catch (err) {
return {
url: renderedRequest.url,
parentId: renderedRequest._id,
error: `[plugin] Response hook failed plugin=${err.plugin.name} err=${err.message}`,
elapsedTime: 0, // 0 because this path is hit during plugin calls
statusMessage: 'Error',
settingSendCookies: renderedRequest.settingSendCookies,
settingStoreCookies: renderedRequest.settingStoreCookies,
};
}

return newResponse;
}

interface HeaderResult {
Expand Down