refactor: decouple scripting environment imports

This commit is contained in:
Bingbing committed 2026-09-29 17:10:55 +08:00
1 parent ab658aa7e4
commit 9ffb5b2fe4
38 files changed
+159 -191

No files matched your search

+1
View File
@@ -27016,6 +27016,7 @@
"version": "13.3.0",
"license": "Apache-2.0",
"dependencies": {
"@faker-js/faker": "9.7.0",
"@seald-io/nedb": "^4.1.1",
"clone": "^2.1.2",
"deep-equal": "2.2.3",
@@ -4,6 +4,10 @@ export * from './ndjson';
export * from './type';
export * from './misc';
export * from './constants';
export * from './response-reasons';
export * from './faker-functions';
export * from './protocol';
export * from './url-matches-cert-host';
export * from './preview-mode';
export * from './platform';
export * from './strings';
@@ -0,0 +1,67 @@
export const RESPONSE_CODE_REASONS: Record<number, string> = {
[-222]: 'Plugin Error',
100: 'Continue',
101: 'Switching Protocols',
200: 'OK',
201: 'Created',
202: 'Accepted',
203: 'Non-Authoritative Information',
204: 'No Content',
205: 'Reset Content',
206: 'Partial Content',
207: 'Multi-Status',
208: 'Already Reported',
226: 'IM Used',
300: 'Multiple Choices',
301: 'Moved Permanently',
302: 'Found',
303: 'See Other',
304: 'Not Modified',
305: 'Use Proxy',
306: 'Switch Proxy',
307: 'Temporary Redirect',
308: 'Permanent Redirect',
400: 'Bad Request',
401: 'Unauthorized',
402: 'Payment Required',
403: 'Forbidden',
404: 'Not Found',
405: 'Method Not Allowed',
406: 'Not Acceptable',
407: 'Proxy Authentication Required',
408: 'Request Timeout',
409: 'Conflict',
410: 'Gone',
411: 'Length Required',
412: 'Precondition Failed',
413: 'Payload Too Large',
414: 'URI Too Long',
415: 'Unsupported Media Type',
416: 'Range Not Satisfiable',
417: 'Expectation Failed',
418: "I'm a Teapot",
421: 'Misdirected Request',
422: 'Unprocessable Entity',
423: 'Locked',
424: 'Failed Dependency',
425: 'Too Early',
426: 'Upgrade Required',
428: 'Precondition Required',
429: 'Too Many Requests',
431: 'Request Header Fields Too Large',
451: 'Unavailable For Legal Reasons',
500: 'Internal Server Error',
501: 'Not Implemented',
502: 'Bad Gateway',
503: 'Service Unavailable',
504: 'Gateway Timeout',
505: 'HTTP Version Not Supported',
506: 'Variant Also Negotiates',
507: 'Insufficient Storage',
508: 'Loop Detected',
509: 'Bandwidth Limit Exceeded',
510: 'Not Extended',
511: 'Network Authentication Required',
598: 'Network read timeout error',
599: 'Network Connect Timeout Error',
};
@@ -1,6 +1,6 @@
import { describe, expect, it } from 'vitest';
import { urlMatchesCertHost } from '../url-matches-cert-host';
import { urlMatchesCertHost } from './url-matches-cert-host';
describe('urlMatchesCertHost', () => {
describe('when the certificate host has no wildcard', () => {
@@ -1,6 +1,7 @@
import { setDefaultProtocol } from '~/common/utils/url/protocol';
import { setDefaultProtocol } from './protocol';
import { escapeRegex } from '../common/misc';
const ESCAPE_REGEX_MATCH = /[-[\]/{}()*+?.\\^$|]/g;
const escapeRegex = (value: string) => value.replace(ESCAPE_REGEX_MATCH, '\\$&');
const DEFAULT_PORT = 443;
+1
View File
@@ -34,6 +34,7 @@
"test": "vitest run"
},
"dependencies": {
"@faker-js/faker": "9.7.0",
"@seald-io/nedb": "^4.1.1",
"clone": "^2.1.2",
"deep-equal": "2.2.3",
@@ -1,8 +1,6 @@
import type { ClientCertificate } from 'insomnia-data';
import { models } from 'insomnia-data';
import { describe, expect, it } from 'vitest';
import { filterClientCertificates } from '../certificate';
import { type ClientCertificate, filterClientCertificates, type } from './client-certificate';
describe('filterClientCertificates', () => {
const requestUrl = 'https://www.example.com:1234';
@@ -18,7 +16,7 @@ describe('filterClientCertificates', () => {
disabled: false,
isPrivate: true,
modified: 0,
type: models.clientCertificate.type,
type,
created: 0,
name: '',
},
@@ -33,7 +31,7 @@ describe('filterClientCertificates', () => {
disabled: false,
isPrivate: true,
modified: 0,
type: models.clientCertificate.type,
type,
created: 0,
name: '',
},
@@ -51,7 +49,7 @@ describe('filterClientCertificates', () => {
disabled: false,
isPrivate: true,
modified: 0,
type: models.clientCertificate.type,
type,
created: 0,
name: '',
},
@@ -1,3 +1,5 @@
import { setDefaultProtocol, urlMatchesCertHost } from 'insomnia-data/common';
import type { BaseModel } from './base-types';
export const name = 'Client Certificate';
@@ -38,3 +40,17 @@ export function init(): BaseClientCertificate {
}
export const isClientCertificate = (model: Pick<BaseModel, 'type'>): model is ClientCertificate => model.type === type;
export function filterClientCertificates(clientCertificates: ClientCertificate[], requestUrl: string, protocol?: string) {
const res = clientCertificates.filter(
certificate =>
!certificate.disabled && urlMatchesCertHost(setDefaultProtocol(certificate.host, protocol), requestUrl, true),
);
if (!res.length) {
return clientCertificates.filter(
certificate =>
!certificate.disabled && urlMatchesCertHost(setDefaultProtocol(certificate.host, protocol), requestUrl, false),
);
}
return res;
}
@@ -1,5 +1,5 @@
import type { OAuth1SignatureMethod } from 'insomnia/src/common/constants';
import type { OAuth2ResponseType, RequestAuthentication } from 'insomnia-data';
import type { OAuth1SignatureMethod } from 'insomnia-data/common';
import { Property } from './properties';
import { Variable, VariableList } from './variables';
@@ -1,6 +1,6 @@
import { expect } from 'chai';
import { filterClientCertificates } from 'insomnia/src/network/certificate';
import type { ClientCertificate, RequestHeader, RequestTestResult, Settings } from 'insomnia-data';
import { models } from 'insomnia-data';
import { toPreRequestAuth } from './auth';
import { getExistingConsole } from './console';
@@ -202,7 +202,10 @@ export async function initInsomniaObject(rawObj: RequestContext, log: (...args:
// todo: find if theres a better way to get the best cert
// (╯°□°)╯︵ ┻━┻
const ifUrlIncludesTag = checkIfUrlIncludesTag(rawObj.request.url);
const matchedCertificates = filterClientCertificates(rawObj.clientCertificates || [], rawObj.request.url);
const matchedCertificates = models.clientCertificate.filterClientCertificates(
rawObj.clientCertificates || [],
rawObj.request.url,
);
const initEmptyCert = ifUrlIncludesTag || matchedCertificates?.length === 0;
if (initEmptyCert) {
getExistingConsole().warn(
@@ -1,4 +1,4 @@
import { fakerFunctions } from 'insomnia/src/common/templating/faker-functions';
import { fakerFunctions } from 'insomnia-data/common';
import { Liquid } from 'liquidjs';
/** @ignore */
@@ -1,8 +1,7 @@
import { Ajv, type ErrorObject } from 'ajv';
import * as chai from 'chai';
import { RESPONSE_CODE_REASONS } from 'insomnia/src/common/constants';
import type { sendCurlAndWriteTimelineError, sendCurlAndWriteTimelineResponse } from 'insomnia/src/network/network';
import { services } from 'insomnia-data';
import { RESPONSE_CODE_REASONS } from 'insomnia-data/common';
import { Cookie, type CookieOptions } from './cookies';
import { CookieList } from './cookies';
@@ -33,6 +32,22 @@ export interface ResponseContentInfo {
contentType: string;
}
export interface ScriptResponseError {
error: string;
}
export interface ScriptResponseData {
statusCode?: number;
statusMessage?: string;
headers?: { name: string; value: string }[];
elapsedTime: number;
bytesRead?: number;
bodyPath?: string;
bodyCompression?: 'zip' | null;
}
export type ScriptResponseInput = ScriptResponseData | ScriptResponseError;
// TODO: unknown usage
// export interface Timings
@@ -343,14 +358,14 @@ export class Response extends Property {
export function toScriptResponse(
originalRequest: Request,
partialInsoResponse: sendCurlAndWriteTimelineResponse | sendCurlAndWriteTimelineError,
partialInsoResponse: ScriptResponseInput,
responseBody: string,
): Response | undefined {
if ('error' in partialInsoResponse) {
// it is sendCurlAndWriteTimelineError and basically doesn't contain anything useful
return undefined;
}
const partialResponse = partialInsoResponse as sendCurlAndWriteTimelineResponse;
const partialResponse = partialInsoResponse;
const headers = partialResponse.headers
? partialResponse.headers.map(
@@ -385,9 +400,7 @@ export function toScriptResponse(
return new Response(responseOption);
}
export async function readBodyFromPath(
response: sendCurlAndWriteTimelineResponse | sendCurlAndWriteTimelineError | undefined,
) {
export async function readBodyFromPath(response: ScriptResponseInput | undefined) {
// it allows to execute scripts (e.g., for testing) but body contains nothing
if (!response || 'error' in response) {
return '';
@@ -3,8 +3,5 @@ import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
hideSkippedTests: true,
alias: {
'~/': new URL('../insomnia/src/', import.meta.url).pathname,
},
},
});
-73
View File
@@ -471,79 +471,6 @@ export const RESPONSE_CODE_DESCRIPTIONS: Record<number, string> = {
599: 'An error used by some HTTP proxies to signal a network connect timeout behind the proxy to a client in front of the proxy.',
};
export const RESPONSE_CODE_REASONS: Record<number, string> = {
// Special
[STATUS_CODE_PLUGIN_ERROR]: 'Plugin Error',
// 100s
100: 'Continue',
101: 'Switching Protocols',
// 200s
200: 'OK',
201: 'Created',
202: 'Accepted',
203: 'Non-Authoritative Information',
204: 'No Content',
205: 'Reset Content',
206: 'Partial Content',
207: 'Multi-Status',
208: 'Already Reported',
226: 'IM Used',
// 300s
300: 'Multiple Choices',
301: 'Moved Permanently',
302: 'Found',
303: 'See Other',
304: 'Not Modified',
305: 'Use Proxy',
306: 'Switch Proxy',
307: 'Temporary Redirect',
308: 'Permanent Redirect',
// 400s
400: 'Bad Request',
401: 'Unauthorized',
402: 'Payment Required',
403: 'Forbidden',
404: 'Not Found',
405: 'Method Not Allowed',
406: 'Not Acceptable',
407: 'Proxy Authentication Required',
408: 'Request Timeout',
409: 'Conflict',
410: 'Gone',
411: 'Length Required',
412: 'Precondition Failed',
413: 'Payload Too Large',
414: 'URI Too Long',
415: 'Unsupported Media Type',
416: 'Range Not Satisfiable',
417: 'Expectation Failed',
418: "I'm a Teapot",
421: 'Misdirected Request',
422: 'Unprocessable Entity',
423: 'Locked',
424: 'Failed Dependency',
425: 'Too Early',
426: 'Upgrade Required',
428: 'Precondition Required',
429: 'Too Many Requests',
431: 'Request Header Fields Too Large',
451: 'Unavailable For Legal Reasons',
// 500s
500: 'Internal Server Error',
501: 'Not Implemented',
502: 'Bad Gateway',
503: 'Service Unavailable',
504: 'Gateway Timeout',
505: 'HTTP Version Not Supported',
506: 'Variant Also Negotiates',
507: 'Insufficient Storage',
508: 'Loop Detected',
509: 'Bandwidth Limit Exceeded',
510: 'Not Extended',
511: 'Network Authentication Required',
598: 'Network read timeout error',
599: 'Network Connect Timeout Error',
};
// (ms) curently server timeout is 30s
export const INSOMNIA_FETCH_TIME_OUT = 30_000;
+1 -1
View File
@@ -12,6 +12,7 @@ import type {
Workspace,
} from 'insomnia-data';
import { models, services } from 'insomnia-data';
import { setDefaultProtocol } from 'insomnia-data/common';
import orderedJSON from 'json-order';
import { NUNJUCKS_TEMPLATE_GLOBAL_PROPERTY_NAME } from '~/common/templating/constants';
@@ -25,7 +26,6 @@ import type {
RenderedRequest,
} from '~/common/templating/types';
import * as templatingUtils from '~/common/templating/utils';
import { setDefaultProtocol } from '~/common/utils/url/protocol';
import { getOrInheritAuthentication, getOrInheritHeaders, shouldSuppressUserAgent } from '../network/network';
import { getRuntime } from '../runtimes';
@@ -1,6 +1,6 @@
import type { RequestTestResult } from 'insomnia-data';
import { RESPONSE_CODE_REASONS } from 'insomnia-data/common';
import { RESPONSE_CODE_REASONS } from './constants';
import { describeByteSize } from './misc';
export type RunnerItemStatus = 'pending' | 'running' | 'completed' | 'failed' | 'canceled' | 'skipped';
@@ -1,5 +1,6 @@
import { format } from 'date-fns';
import type { PluginTemplateTag } from 'insomnia/src/common/templating/types';
import { fakerFunctions } from 'insomnia-data/common';
import JSONBig from 'json-bigint';
import { JSONPath } from 'jsonpath-plus';
@@ -7,8 +8,6 @@ import type { TemplateTag } from '~/common/plugins/types';
import { invariant } from '~/common/utils/invariant';
import { utf8StringFromBytes } from '~/common/utils/utf8-bytes';
import { fakerFunctions } from './faker-functions';
const JSONBigStringParser = JSONBig({ storeAsString: true });
const localTemplatePlugins: { templateTag: PluginTemplateTag }[] = [
@@ -1,7 +1,5 @@
import type { IQueryStringOptions, StrictNullSearchParamsValueType } from 'insomnia-data/common';
import { deconstructQueryStringToParams } from 'insomnia-data/common';
import { setDefaultProtocol } from './protocol';
import { deconstructQueryStringToParams, setDefaultProtocol } from 'insomnia-data/common';
const ESCAPE_REGEX_MATCH = /[-[\]/{}()*+?.\\^$|]/g;
+2 -2
View File
@@ -5,10 +5,10 @@ import { parse as urlParse } from 'node:url';
import { Curl, CurlAuth, CurlFeature, CurlSslOpt, type HeaderInfo } from '@getinsomnia/node-libcurl';
import { app, net, protocol, session } from 'electron';
import { services } from 'insomnia-data';
import { ProxyScopes } from 'insomnia-data/common';
import { ProxyScopes, setDefaultProtocol } from 'insomnia-data/common';
import { getApiBaseURL } from '../common/constants';
import { parseResolvedProxy, setDefaultProtocol, shouldBypassProxyForHost } from './network/libcurl-promise';
import { parseResolvedProxy, shouldBypassProxyForHost } from './network/libcurl-promise';
import { resolveDbByKey } from './templating-worker-database';
export interface RegisterProtocolOptions {
@@ -1,7 +1,7 @@
import { CONTENT_TYPE_JSON, CONTENT_TYPE_PLAINTEXT, CONTENT_TYPE_XML } from 'insomnia/src/common/constants';
import { fakerFunctions } from 'insomnia/src/common/templating/faker-functions';
import { forceBracketNotation } from 'insomnia/src/common/templating/utils';
import type { AuthTypeOAuth2 } from 'insomnia-data';
import { fakerFunctions } from 'insomnia-data/common';
import { translateHandlersInScript } from '~/main/importers/importers/translate-postman-script';
+6 -3
View File
@@ -5,7 +5,7 @@ import type { Readable } from 'node:stream';
import { Curl, CurlFeature, CurlInfoDebug, type HeaderInfo } from '@getinsomnia/node-libcurl';
import electron, { BrowserWindow } from 'electron';
import type { Response } from 'insomnia-data';
import { services } from 'insomnia-data';
import { models, services } from 'insomnia-data';
import { v4 as uuidV4 } from 'uuid';
import { REALTIME_EVENTS_CHANNELS } from '~/common/constants';
@@ -14,7 +14,6 @@ import { invariant } from '~/common/utils/invariant';
import { insecureReadFile } from '~/main/secure-read-file';
import { describeByteSize, generateId, getSetCookieHeaders } from '../../common/misc';
import { filterClientCertificates } from '../../network/certificate';
import { parseHeaderStrings } from '../../network/parse-header-strings';
import { addSetCookiesToToughCookieJar } from '../../network/set-cookie-util';
import { ipcMainHandle, ipcMainOn } from '../ipc/electron';
@@ -151,7 +150,11 @@ const openCurlConnection = async (
const settings = await services.settings.get();
const start = performance.now();
const clientCertificates = await services.clientCertificate.findByParentId(workspaceId);
const filteredClientCertificates = filterClientCertificates(clientCertificates, req.url, 'https:');
const filteredClientCertificates = models.clientCertificate.filterClientCertificates(
clientCertificates,
req.url,
'https:',
);
const { header: authHeader, timeline: authTimeline } = await getAuthHeader(req, req.url);
authTimeline?.forEach(entry => timelineFileStreams.get(requestId)?.write(JSON.stringify(entry) + '\n'));
@@ -19,6 +19,7 @@ import {
import { isValid } from 'date-fns';
import electron from 'electron';
import type { ClientCertificate, RequestHeader, ResponseHeader, ResponseTimelineEntry } from 'insomnia-data';
import { setDefaultProtocol } from 'insomnia-data/common';
import { v4 as uuidv4 } from 'uuid';
import { invariant } from '~/common/utils/invariant';
@@ -669,20 +670,3 @@ export function shouldBypassProxyForHost(hostname: string | null, noProxy: strin
return normalizedHostname === entry;
});
}
export const setDefaultProtocol = (url: string, defaultProto?: string) => {
const trimmedUrl = url.trim();
defaultProto = defaultProto || 'http:';
// If no url, don't bother returning anything
if (!trimmedUrl) {
return '';
}
// Default the proto if it doesn't exist
if (!trimmedUrl.includes('://')) {
return `${defaultProto}//${trimmedUrl}`;
}
return trimmedUrl;
};
@@ -14,10 +14,10 @@ import type {
ResponseTimelineEntry,
} from 'insomnia-data';
import { database as db, models, services } from 'insomnia-data';
import { setDefaultProtocol } from 'insomnia-data/common';
import { v4 as uuidv4 } from 'uuid';
import { invariant } from '~/common/utils/invariant';
import { setDefaultProtocol } from '~/common/utils/url/protocol';
import { authorizeUserInDefaultBrowser } from '~/main/authorize-user-in-default-browser';
import { authorizeUserInWindow } from '~/main/authorize-user-in-window';
import { getElectronStorage as getSharedElectronStorage } from '~/main/electron-storage';
@@ -12,18 +12,17 @@ import type {
RequestHeader,
SocketIOResponse,
} from 'insomnia-data';
import { services } from 'insomnia-data';
import { models, services } from 'insomnia-data';
import { setDefaultProtocol } from 'insomnia-data/common';
import { io as SocketIOClient, type ManagerOptions, type Socket, type SocketOptions } from 'socket.io-client';
import { v4 as uuidV4 } from 'uuid';
import { REALTIME_EVENTS_CHANNELS } from '~/common/constants';
import { invariant } from '~/common/utils/invariant';
import { setDefaultProtocol } from '~/common/utils/url/protocol';
import { version } from '../../../package.json';
import { jarFromCookies } from '../../common/cookies';
import { generateId } from '../../common/misc';
import { filterClientCertificates } from '../../network/certificate';
import { ipcMainHandle, ipcMainOn } from '../ipc/electron';
import { insecureReadFile, secureReadFile } from '../secure-read-file';
@@ -170,7 +169,7 @@ const getCertificates = async ({
(caCertficatePath && (await insecureReadFile(caCertficatePath))) || tls.rootCertificates.join('\n');
const clientCertificates = await services.clientCertificate.findByParentId(workspaceId);
const filteredClientCertificates = filterClientCertificates(clientCertificates, url, 'wss:');
const filteredClientCertificates = models.clientCertificate.filterClientCertificates(clientCertificates, url, 'wss:');
const pemCertificates: string[] = [];
const pemCertificateKeys: string[] = [];
const pfxCertificates: string[] = [];
@@ -16,6 +16,7 @@ import type {
WebSocketResponse,
} from 'insomnia-data';
import { models, services } from 'insomnia-data';
import { setDefaultProtocol } from 'insomnia-data/common';
import { v4 as uuidV4 } from 'uuid';
import { type CloseEvent, type ErrorEvent, type Event, type MessageEvent, WebSocket } from 'ws';
@@ -24,7 +25,6 @@ import { database } from '~/common/database';
import type { RenderedRequest } from '~/common/templating/types';
import { parseGraphQLReqeustBody } from '~/common/utils/graph-ql';
import { invariant } from '~/common/utils/invariant';
import { setDefaultProtocol } from '~/common/utils/url/protocol';
import { buildQueryStringFromParams, joinUrlAndQueryString } from '~/common/utils/url/querystring';
import { version } from '../../../package.json';
@@ -33,7 +33,6 @@ import { generateId, getSetCookieHeaders } from '../../common/misc';
import { COOKIE, HEADER, QUERY_PARAMS } from '../../network/api-key/constants';
import { getBasicAuthHeader } from '../../network/basic-auth/get-header';
import { getBearerAuthHeader } from '../../network/bearer-auth/get-header';
import { filterClientCertificates } from '../../network/certificate';
import { addSetCookiesToToughCookieJar } from '../../network/set-cookie-util';
import { ipcMainHandle, ipcMainOn } from '../ipc/electron';
import { insecureReadFile, secureReadFile } from '../secure-read-file';
@@ -242,7 +241,11 @@ const openWebSocketConnection = async (
const start = performance.now();
const clientCertificates = await services.clientCertificate.findByParentId(options.workspaceId);
const filteredClientCertificates = filterClientCertificates(clientCertificates, options.url, 'wss:');
const filteredClientCertificates = models.clientCertificate.filterClientCertificates(
clientCertificates,
options.url,
'wss:',
);
const pemCertificates: string[] = [];
const pemCertificateKeys: KeyObject[] = [];
const pfxCertificates: PxfObject[] = [];
+1 -2
View File
@@ -1,6 +1,6 @@
import { session } from 'electron/main';
import { models, services } from 'insomnia-data';
import { ProxyScopes } from 'insomnia-data/common';
import { ProxyScopes, setDefaultProtocol } from 'insomnia-data/common';
import {
getAIServiceURL,
@@ -12,7 +12,6 @@ import {
getMockServiceURL,
getSentryDsn,
} from '~/common/constants';
import { setDefaultProtocol } from '~/common/utils/url/protocol';
import { type ChangeBufferEvent, database as db } from '../common/database';
import { getUpdatesBaseURL } from './updates';
@@ -8,7 +8,7 @@ import { app, BrowserWindow, clipboard, dialog, shell } from 'electron';
import iconv from 'iconv-lite';
import type { AllTypes, CloudProviderCredential, Request as DBRequest, RequestGroup, Workspace } from 'insomnia-data';
import { services } from 'insomnia-data';
import { ProxyScopes } from 'insomnia-data/common';
import { ProxyScopes, RESPONSE_CODE_REASONS } from 'insomnia-data/common';
import { v4 as uuidv4 } from 'uuid';
import { jarFromCookies } from '~/common/cookies';
@@ -28,7 +28,7 @@ import {
} from '~/templating/sandbox/marshal';
import type { SandboxModuleDenialError } from '~/templating/sandbox/plugin-tag-sandbox';
import { getAppBundlePlugins, RESPONSE_CODE_REASONS } from '../common/constants';
import { getAppBundlePlugins } from '../common/constants';
import { isDevelopment } from '../common/constants';
import { database as db } from '../common/database';
import { fetchRequestData, sendCurlAndWriteTimeline, tryToInterpolateRequest } from '../network/network';
@@ -1,22 +0,0 @@
import type { ClientCertificate } from 'insomnia-data';
import { setDefaultProtocol } from '~/common/utils/url/protocol';
import { urlMatchesCertHost } from './url-matches-cert-host';
export function filterClientCertificates(
clientCertificates: ClientCertificate[],
requestUrl: string,
protocol?: string,
) {
const res = clientCertificates.filter(
c => !c.disabled && urlMatchesCertHost(setDefaultProtocol(c.host, protocol), requestUrl, true),
);
// If didn't get a matching certificate at the first time, ignore the port check and try again
if (!res.length) {
return clientCertificates.filter(
c => !c.disabled && urlMatchesCertHost(setDefaultProtocol(c.host, protocol), requestUrl, false),
);
}
return res;
}
+1 -2
View File
@@ -41,7 +41,6 @@ import { ascendingFirstIndexStringSort } from '../common/sorting';
import type { ResponsePatch } from '../main/network/libcurl-promise';
import { QUERY_PARAMS } from './api-key/constants';
import { getAuthObjectOrNull, isAuthEnabled } from './authentication';
import { filterClientCertificates } from './certificate';
import type { TransformedExecuteScriptContext } from './concurrency.renderer';
const { isRequest } = models.request;
@@ -876,7 +875,7 @@ export async function sendCurlAndWriteTimeline(
finalUrl,
socketPath,
settings,
certificates: filterClientCertificates(clientCertificates, renderedRequest.url, 'https:'),
certificates: models.clientCertificate.filterClientCertificates(clientCertificates, renderedRequest.url, 'https:'),
caCertficatePath: caCert?.disabled === false ? caCert.path : null,
authHeader,
};
@@ -1,10 +1,9 @@
import { services } from 'insomnia-data';
import { ProxyScopes } from 'insomnia-data/common';
import { ProxyScopes, RESPONSE_CODE_REASONS } from 'insomnia-data/common';
import { v4 as uuidv4 } from 'uuid';
import type { NodeCurlRequestOptions, NodeCurlResponseType, PluginTemplateTagContext } from '~/common/templating/types';
import { RESPONSE_CODE_REASONS } from '../../common/constants';
import {
fetchRequestData,
responseTransform,
@@ -2,6 +2,7 @@ import type * as Har from 'har-format';
import { isApiError, upsertMockbin } from 'insomnia-api';
import type { MockRoute, MockServer, Request, RequestHeader, Response } from 'insomnia-data';
import { models, services } from 'insomnia-data';
import { RESPONSE_CODE_REASONS } from 'insomnia-data/common';
import { useCallback } from 'react';
import { Button, Tab, TabList, TabPanel, Tabs, Toolbar } from 'react-aria-components';
import { useParams, useRouteLoaderData } from 'react-router';
@@ -15,7 +16,6 @@ import {
contentTypesMap,
getMockServiceBinURL,
getMockServiceURL,
RESPONSE_CODE_REASONS,
} from '~/common/constants';
import { database as db } from '~/common/database';
import { invariant } from '~/common/utils/invariant';
@@ -2,6 +2,7 @@ import type { IconProp } from '@fortawesome/fontawesome-svg-core';
import { getOnboardingState, type UserOnboarding } from 'insomnia-api';
import type { Request } from 'insomnia-data';
import { services } from 'insomnia-data';
import { setDefaultProtocol } from 'insomnia-data/common';
import { type KeyboardEvent as ReactKeyboardEvent, useEffect, useRef, useState } from 'react';
import { useParams } from 'react-router';
@@ -10,7 +11,6 @@ import { SelectPopover } from '~/basic-components/select-popover';
import { getCurrentSessionId } from '~/common/account/session';
import { METHOD_GET } from '~/common/constants';
import { isCurlCommand } from '~/common/utils/curl';
import { setDefaultProtocol } from '~/common/utils/url/protocol';
import { useRootLoaderData } from '~/root';
import { AnalyticsEvent } from '~/ui/analytics';
import { MethodSelector } from '~/ui/components/dropdowns/method-selector';
@@ -1,12 +1,12 @@
import type { GrpcRequest, GrpcRequestHeader, RequestGroup } from 'insomnia-data';
import { models, services } from 'insomnia-data';
import { setDefaultProtocol, urlMatchesCertHost } from 'insomnia-data/common';
import React, { type FunctionComponent, useRef, useState } from 'react';
import { Tab, TabList, TabPanel, Tabs } from 'react-aria-components';
import { useParams } from 'react-router';
import * as reactUse from 'react-use';
import { RenderError } from '~/common/templating/render-error';
import { setDefaultProtocol } from '~/common/utils/url/protocol';
import { useRootLoaderData } from '~/root';
import { AnalyticsEvent } from '~/ui/analytics';
import { CodeEditor, type CodeEditorHandle } from '~/ui/components/.client/codemirror/code-editor';
@@ -21,7 +21,6 @@ import { generateId } from '../../../common/misc';
import { getRenderedGrpcRequest, getRenderedGrpcRequestMessage } from '../../../common/render';
import type { GrpcMethodType } from '../../../main/ipc/grpc';
import { getOrInheritHeaders } from '../../../network/network';
import { urlMatchesCertHost } from '../../../network/url-matches-cert-host';
import { useWorkspaceLoaderData } from '../../../routes/organization.$organizationId.project.$projectId.workspace.$workspaceId';
import type { GrpcRequestState } from '../../../routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug';
import {
@@ -1,7 +1,8 @@
import classnames from 'classnames';
import { RESPONSE_CODE_REASONS } from 'insomnia-data/common';
import React, { type FC, memo, type ReactNode } from 'react';
import { RESPONSE_CODE_DESCRIPTIONS, RESPONSE_CODE_REASONS } from '../../../common/constants';
import { RESPONSE_CODE_DESCRIPTIONS } from '../../../common/constants';
import { Tooltip } from '../tooltip';
interface Props {
@@ -1,15 +1,5 @@
{
"insomnia": [
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia/src/common/render.ts -> packages/insomnia/src/common/templating/mask-or-decrypt-vault-data.ts -> packages/insomnia/src/common/utils/vault.ts -> packages/insomnia/src/runtimes/index.ts -> packages/insomnia/src/runtimes/types.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia/src/common/render.ts -> packages/insomnia/src/runtimes/index.ts -> packages/insomnia/src/runtimes/types.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia/src/common/templating/mask-or-decrypt-vault-data.ts -> packages/insomnia/src/common/utils/vault.ts -> packages/insomnia/src/runtimes/index.ts -> packages/insomnia/src/runtimes/types.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia/src/common/templating/mask-or-decrypt-vault-data.ts -> packages/insomnia/src/runtimes/index.ts -> packages/insomnia/src/runtimes/types.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia/src/network/concurrency.renderer.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia/src/runtimes/index.ts -> packages/insomnia/src/runtimes/types.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/index.ts -> packages/insomnia-scripting-environment/src/objects/insomnia.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts",
"packages/insomnia-scripting-environment/src/objects/index.ts -> packages/insomnia-scripting-environment/src/objects/insomnia.ts -> packages/insomnia-scripting-environment/src/objects/send-request.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts",
"packages/insomnia-scripting-environment/src/objects/index.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts",
"packages/insomnia/src/common/import.ts -> packages/insomnia/src/common/insomnia-v5.ts",
"packages/insomnia/src/common/render.ts -> packages/insomnia/src/network/network.ts",
"packages/insomnia/src/main/git-service.ts -> packages/insomnia/src/sync/git/repo-file-watcher.ts",
@@ -98,18 +88,7 @@
"insomnia-api": [],
"insomnia-data": [],
"insomnia-inso": [],
"insomnia-scripting-environment": [
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia/src/common/render.ts -> packages/insomnia/src/common/templating/mask-or-decrypt-vault-data.ts -> packages/insomnia/src/common/utils/vault.ts -> packages/insomnia/src/runtimes/index.ts -> packages/insomnia/src/runtimes/types.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia/src/common/render.ts -> packages/insomnia/src/runtimes/index.ts -> packages/insomnia/src/runtimes/types.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia/src/common/templating/mask-or-decrypt-vault-data.ts -> packages/insomnia/src/common/utils/vault.ts -> packages/insomnia/src/runtimes/index.ts -> packages/insomnia/src/runtimes/types.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia/src/common/templating/mask-or-decrypt-vault-data.ts -> packages/insomnia/src/runtimes/index.ts -> packages/insomnia/src/runtimes/types.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia/src/network/concurrency.renderer.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/collection.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts -> packages/insomnia/src/runtimes/index.ts -> packages/insomnia/src/runtimes/types.ts -> packages/insomnia-scripting-environment/src/objects/index.ts",
"packages/insomnia-scripting-environment/src/objects/index.ts -> packages/insomnia-scripting-environment/src/objects/insomnia.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts",
"packages/insomnia-scripting-environment/src/objects/index.ts -> packages/insomnia-scripting-environment/src/objects/insomnia.ts -> packages/insomnia-scripting-environment/src/objects/send-request.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts",
"packages/insomnia-scripting-environment/src/objects/index.ts -> packages/insomnia-scripting-environment/src/objects/response.ts -> packages/insomnia/src/network/network.ts"
],
"insomnia-scripting-environment": [],
"insomnia-smoke-test": [],
"insomnia-testing": [],
"insomnia-vcs": []