From 9ffb5b2fe4100b01d49ef29190c09133d1b7e104 Mon Sep 17 00:00:00 2001 From: Bingbing Date: Tue, 8 Sep 2026 14:46:23 +0800 Subject: [PATCH] refactor: decouple scripting environment imports --- package-lock.json | 1 + .../common-src}/faker-functions.ts | 0 packages/insomnia-data/common-src/index.ts | 4 + .../common-src}/protocol.test.ts | 0 .../common-src}/protocol.ts | 0 .../common-src/response-reasons.ts | 67 +++++++++++++++++ .../common-src}/url-matches-cert-host.test.ts | 2 +- .../common-src}/url-matches-cert-host.ts | 5 +- packages/insomnia-data/package.json | 1 + .../src/models/client-certificate.test.ts} | 10 +-- .../src/models/client-certificate.ts | 16 ++++ .../src/objects/auth.ts | 2 +- .../src/objects/insomnia.ts | 7 +- .../src/objects/interpolator.ts | 2 +- .../src/objects/response.ts | 27 +++++-- .../vitest.config.ts | 3 - packages/insomnia/src/common/constants.ts | 73 ------------------- packages/insomnia/src/common/render.ts | 2 +- .../insomnia/src/common/runner-feedback.ts | 2 +- .../common/templating/local-template-tags.ts | 3 +- .../src/common/utils/url/querystring.ts | 4 +- packages/insomnia/src/main/api.protocol.ts | 4 +- .../src/main/importers/importers/postman.ts | 2 +- packages/insomnia/src/main/network/curl.ts | 9 ++- .../src/main/network/libcurl-promise.ts | 18 +---- .../src/main/network/o-auth-2/get-token.ts | 2 +- .../insomnia/src/main/network/socket-io.ts | 7 +- .../insomnia/src/main/network/websocket.ts | 9 ++- packages/insomnia/src/main/proxy.ts | 3 +- .../src/main/templating-worker-database.ts | 4 +- packages/insomnia/src/network/certificate.ts | 22 ------ packages/insomnia/src/network/network.ts | 3 +- .../insomnia/src/plugins/context/network.ts | 3 +- ...Id.mock-server.mock-route.$mockRouteId.tsx | 2 +- .../ui/components/first-request-creation.tsx | 2 +- .../ui/components/panes/grpc-request-pane.tsx | 3 +- .../src/ui/components/tags/status-tag.tsx | 3 +- .../circular-references/known-violations.json | 23 +----- 38 files changed, 159 insertions(+), 191 deletions(-) rename packages/{insomnia/src/common/templating => insomnia-data/common-src}/faker-functions.ts (100%) rename packages/{insomnia/src/common/utils/url => insomnia-data/common-src}/protocol.test.ts (100%) rename packages/{insomnia/src/common/utils/url => insomnia-data/common-src}/protocol.ts (100%) create mode 100644 packages/insomnia-data/common-src/response-reasons.ts rename packages/{insomnia/src/network/__tests__ => insomnia-data/common-src}/url-matches-cert-host.test.ts (99%) rename packages/{insomnia/src/network => insomnia-data/common-src}/url-matches-cert-host.ts (90%) rename packages/{insomnia/src/network/__tests__/certificate.test.ts => insomnia-data/src/models/client-certificate.test.ts} (84%) delete mode 100644 packages/insomnia/src/network/certificate.ts diff --git a/package-lock.json b/package-lock.json index cceca90cc5..abcb23865d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/packages/insomnia/src/common/templating/faker-functions.ts b/packages/insomnia-data/common-src/faker-functions.ts similarity index 100% rename from packages/insomnia/src/common/templating/faker-functions.ts rename to packages/insomnia-data/common-src/faker-functions.ts diff --git a/packages/insomnia-data/common-src/index.ts b/packages/insomnia-data/common-src/index.ts index 428fab57f2..f8097770a1 100644 --- a/packages/insomnia-data/common-src/index.ts +++ b/packages/insomnia-data/common-src/index.ts @@ -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'; diff --git a/packages/insomnia/src/common/utils/url/protocol.test.ts b/packages/insomnia-data/common-src/protocol.test.ts similarity index 100% rename from packages/insomnia/src/common/utils/url/protocol.test.ts rename to packages/insomnia-data/common-src/protocol.test.ts diff --git a/packages/insomnia/src/common/utils/url/protocol.ts b/packages/insomnia-data/common-src/protocol.ts similarity index 100% rename from packages/insomnia/src/common/utils/url/protocol.ts rename to packages/insomnia-data/common-src/protocol.ts diff --git a/packages/insomnia-data/common-src/response-reasons.ts b/packages/insomnia-data/common-src/response-reasons.ts new file mode 100644 index 0000000000..e25568049c --- /dev/null +++ b/packages/insomnia-data/common-src/response-reasons.ts @@ -0,0 +1,67 @@ +export const RESPONSE_CODE_REASONS: Record = { + [-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', +}; diff --git a/packages/insomnia/src/network/__tests__/url-matches-cert-host.test.ts b/packages/insomnia-data/common-src/url-matches-cert-host.test.ts similarity index 99% rename from packages/insomnia/src/network/__tests__/url-matches-cert-host.test.ts rename to packages/insomnia-data/common-src/url-matches-cert-host.test.ts index 47377e128a..35fdb7fe07 100644 --- a/packages/insomnia/src/network/__tests__/url-matches-cert-host.test.ts +++ b/packages/insomnia-data/common-src/url-matches-cert-host.test.ts @@ -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', () => { diff --git a/packages/insomnia/src/network/url-matches-cert-host.ts b/packages/insomnia-data/common-src/url-matches-cert-host.ts similarity index 90% rename from packages/insomnia/src/network/url-matches-cert-host.ts rename to packages/insomnia-data/common-src/url-matches-cert-host.ts index b0b992de70..3db5e686a5 100644 --- a/packages/insomnia/src/network/url-matches-cert-host.ts +++ b/packages/insomnia-data/common-src/url-matches-cert-host.ts @@ -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; diff --git a/packages/insomnia-data/package.json b/packages/insomnia-data/package.json index 9ab51302b2..f4f12356b6 100644 --- a/packages/insomnia-data/package.json +++ b/packages/insomnia-data/package.json @@ -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", diff --git a/packages/insomnia/src/network/__tests__/certificate.test.ts b/packages/insomnia-data/src/models/client-certificate.test.ts similarity index 84% rename from packages/insomnia/src/network/__tests__/certificate.test.ts rename to packages/insomnia-data/src/models/client-certificate.test.ts index fb41989f79..743fbf0c11 100644 --- a/packages/insomnia/src/network/__tests__/certificate.test.ts +++ b/packages/insomnia-data/src/models/client-certificate.test.ts @@ -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: '', }, diff --git a/packages/insomnia-data/src/models/client-certificate.ts b/packages/insomnia-data/src/models/client-certificate.ts index c7ae399fd8..54c54c665b 100644 --- a/packages/insomnia-data/src/models/client-certificate.ts +++ b/packages/insomnia-data/src/models/client-certificate.ts @@ -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): 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; +} diff --git a/packages/insomnia-scripting-environment/src/objects/auth.ts b/packages/insomnia-scripting-environment/src/objects/auth.ts index 922de11d87..2518d49060 100644 --- a/packages/insomnia-scripting-environment/src/objects/auth.ts +++ b/packages/insomnia-scripting-environment/src/objects/auth.ts @@ -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'; diff --git a/packages/insomnia-scripting-environment/src/objects/insomnia.ts b/packages/insomnia-scripting-environment/src/objects/insomnia.ts index 1fdd5f45ae..92d8adc2ee 100644 --- a/packages/insomnia-scripting-environment/src/objects/insomnia.ts +++ b/packages/insomnia-scripting-environment/src/objects/insomnia.ts @@ -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( diff --git a/packages/insomnia-scripting-environment/src/objects/interpolator.ts b/packages/insomnia-scripting-environment/src/objects/interpolator.ts index 7f149d9f88..eeb92a0155 100644 --- a/packages/insomnia-scripting-environment/src/objects/interpolator.ts +++ b/packages/insomnia-scripting-environment/src/objects/interpolator.ts @@ -1,4 +1,4 @@ -import { fakerFunctions } from 'insomnia/src/common/templating/faker-functions'; +import { fakerFunctions } from 'insomnia-data/common'; import { Liquid } from 'liquidjs'; /** @ignore */ diff --git a/packages/insomnia-scripting-environment/src/objects/response.ts b/packages/insomnia-scripting-environment/src/objects/response.ts index 35f6e252cd..7be4aea484 100644 --- a/packages/insomnia-scripting-environment/src/objects/response.ts +++ b/packages/insomnia-scripting-environment/src/objects/response.ts @@ -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 ''; diff --git a/packages/insomnia-scripting-environment/vitest.config.ts b/packages/insomnia-scripting-environment/vitest.config.ts index 856fe38585..4779c67a23 100644 --- a/packages/insomnia-scripting-environment/vitest.config.ts +++ b/packages/insomnia-scripting-environment/vitest.config.ts @@ -3,8 +3,5 @@ import { defineConfig } from 'vitest/config'; export default defineConfig({ test: { hideSkippedTests: true, - alias: { - '~/': new URL('../insomnia/src/', import.meta.url).pathname, - }, }, }); diff --git a/packages/insomnia/src/common/constants.ts b/packages/insomnia/src/common/constants.ts index e649e9b11f..7e3737a956 100644 --- a/packages/insomnia/src/common/constants.ts +++ b/packages/insomnia/src/common/constants.ts @@ -471,79 +471,6 @@ export const RESPONSE_CODE_DESCRIPTIONS: Record = { 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 = { - // 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; diff --git a/packages/insomnia/src/common/render.ts b/packages/insomnia/src/common/render.ts index f37802b125..b05565534b 100644 --- a/packages/insomnia/src/common/render.ts +++ b/packages/insomnia/src/common/render.ts @@ -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'; diff --git a/packages/insomnia/src/common/runner-feedback.ts b/packages/insomnia/src/common/runner-feedback.ts index 028dddf7dc..ec225ea209 100644 --- a/packages/insomnia/src/common/runner-feedback.ts +++ b/packages/insomnia/src/common/runner-feedback.ts @@ -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'; diff --git a/packages/insomnia/src/common/templating/local-template-tags.ts b/packages/insomnia/src/common/templating/local-template-tags.ts index 27b467fbab..6e38811542 100644 --- a/packages/insomnia/src/common/templating/local-template-tags.ts +++ b/packages/insomnia/src/common/templating/local-template-tags.ts @@ -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 }[] = [ diff --git a/packages/insomnia/src/common/utils/url/querystring.ts b/packages/insomnia/src/common/utils/url/querystring.ts index c0dea57326..05f81e2916 100644 --- a/packages/insomnia/src/common/utils/url/querystring.ts +++ b/packages/insomnia/src/common/utils/url/querystring.ts @@ -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; diff --git a/packages/insomnia/src/main/api.protocol.ts b/packages/insomnia/src/main/api.protocol.ts index f413a786e2..bc137e51cb 100644 --- a/packages/insomnia/src/main/api.protocol.ts +++ b/packages/insomnia/src/main/api.protocol.ts @@ -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 { diff --git a/packages/insomnia/src/main/importers/importers/postman.ts b/packages/insomnia/src/main/importers/importers/postman.ts index b4f9eb4779..ce110f8b13 100644 --- a/packages/insomnia/src/main/importers/importers/postman.ts +++ b/packages/insomnia/src/main/importers/importers/postman.ts @@ -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'; diff --git a/packages/insomnia/src/main/network/curl.ts b/packages/insomnia/src/main/network/curl.ts index ca7098e980..d82ed0e8b9 100644 --- a/packages/insomnia/src/main/network/curl.ts +++ b/packages/insomnia/src/main/network/curl.ts @@ -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')); diff --git a/packages/insomnia/src/main/network/libcurl-promise.ts b/packages/insomnia/src/main/network/libcurl-promise.ts index 6df8d73e27..8e03a0f205 100644 --- a/packages/insomnia/src/main/network/libcurl-promise.ts +++ b/packages/insomnia/src/main/network/libcurl-promise.ts @@ -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; -}; diff --git a/packages/insomnia/src/main/network/o-auth-2/get-token.ts b/packages/insomnia/src/main/network/o-auth-2/get-token.ts index 9b2fdd1bc1..e5fdbc0e0b 100644 --- a/packages/insomnia/src/main/network/o-auth-2/get-token.ts +++ b/packages/insomnia/src/main/network/o-auth-2/get-token.ts @@ -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'; diff --git a/packages/insomnia/src/main/network/socket-io.ts b/packages/insomnia/src/main/network/socket-io.ts index 7a2f3882ab..b88d7afba1 100644 --- a/packages/insomnia/src/main/network/socket-io.ts +++ b/packages/insomnia/src/main/network/socket-io.ts @@ -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[] = []; diff --git a/packages/insomnia/src/main/network/websocket.ts b/packages/insomnia/src/main/network/websocket.ts index e74f5afdcf..b7c939c4c7 100644 --- a/packages/insomnia/src/main/network/websocket.ts +++ b/packages/insomnia/src/main/network/websocket.ts @@ -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[] = []; diff --git a/packages/insomnia/src/main/proxy.ts b/packages/insomnia/src/main/proxy.ts index 0f6374a915..cb8bf43a2c 100644 --- a/packages/insomnia/src/main/proxy.ts +++ b/packages/insomnia/src/main/proxy.ts @@ -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'; diff --git a/packages/insomnia/src/main/templating-worker-database.ts b/packages/insomnia/src/main/templating-worker-database.ts index cc91557508..7add09df93 100644 --- a/packages/insomnia/src/main/templating-worker-database.ts +++ b/packages/insomnia/src/main/templating-worker-database.ts @@ -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'; diff --git a/packages/insomnia/src/network/certificate.ts b/packages/insomnia/src/network/certificate.ts deleted file mode 100644 index 688fb80aac..0000000000 --- a/packages/insomnia/src/network/certificate.ts +++ /dev/null @@ -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; -} diff --git a/packages/insomnia/src/network/network.ts b/packages/insomnia/src/network/network.ts index 8e014946aa..5c86da237e 100644 --- a/packages/insomnia/src/network/network.ts +++ b/packages/insomnia/src/network/network.ts @@ -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, }; diff --git a/packages/insomnia/src/plugins/context/network.ts b/packages/insomnia/src/plugins/context/network.ts index 44f308658f..212c53244b 100644 --- a/packages/insomnia/src/plugins/context/network.ts +++ b/packages/insomnia/src/plugins/context/network.ts @@ -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, diff --git a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.mock-server.mock-route.$mockRouteId.tsx b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.mock-server.mock-route.$mockRouteId.tsx index 2613745be7..f38bcfe42b 100644 --- a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.mock-server.mock-route.$mockRouteId.tsx +++ b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.mock-server.mock-route.$mockRouteId.tsx @@ -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'; diff --git a/packages/insomnia/src/ui/components/first-request-creation.tsx b/packages/insomnia/src/ui/components/first-request-creation.tsx index 69efb639fa..2fa7ee44b6 100644 --- a/packages/insomnia/src/ui/components/first-request-creation.tsx +++ b/packages/insomnia/src/ui/components/first-request-creation.tsx @@ -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'; diff --git a/packages/insomnia/src/ui/components/panes/grpc-request-pane.tsx b/packages/insomnia/src/ui/components/panes/grpc-request-pane.tsx index aaf8a6a4ef..396829edc7 100644 --- a/packages/insomnia/src/ui/components/panes/grpc-request-pane.tsx +++ b/packages/insomnia/src/ui/components/panes/grpc-request-pane.tsx @@ -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 { diff --git a/packages/insomnia/src/ui/components/tags/status-tag.tsx b/packages/insomnia/src/ui/components/tags/status-tag.tsx index f82099eebf..5a527bed6c 100644 --- a/packages/insomnia/src/ui/components/tags/status-tag.tsx +++ b/packages/insomnia/src/ui/components/tags/status-tag.tsx @@ -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 { diff --git a/scripts/circular-references/known-violations.json b/scripts/circular-references/known-violations.json index 4c95f7c1f4..9c45157da1 100644 --- a/scripts/circular-references/known-violations.json +++ b/scripts/circular-references/known-violations.json @@ -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": []