diff --git a/packages/insomnia-inso/src/analytics.ts b/packages/insomnia-inso/src/analytics.ts index 1f1aa813b2..ba4c0bf657 100644 --- a/packages/insomnia-inso/src/analytics.ts +++ b/packages/insomnia-inso/src/analytics.ts @@ -2,9 +2,10 @@ import os from 'node:os'; import { Analytics } from '@segment/analytics-node'; import { getSegmentWriteKey } from 'insomnia/src/common/constants'; -import type { Settings } from 'insomnia/src/models/settings'; import { v4 as uuidv4 } from 'uuid'; +import type { Settings } from '~/insomnia-data'; + import packageJson from '../package.json'; import neDbAdapter from './db/adapters/ne-db-adapter'; import { getAppDataDir, getDefaultProductName } from './util'; diff --git a/packages/insomnia-inso/src/db/types.ts b/packages/insomnia-inso/src/db/types.ts index 05972c90bb..b8ec0d018a 100644 --- a/packages/insomnia-inso/src/db/types.ts +++ b/packages/insomnia-inso/src/db/types.ts @@ -1,9 +1,8 @@ import type { ClientCertificate } from 'insomnia/src/models/client-certificate'; import type { CloudProviderCredential } from 'insomnia/src/models/cloud-credential'; import type { CookieJar } from 'insomnia/src/models/cookie-jar'; -import type { Settings } from 'insomnia/src/models/settings'; -import type { CaCertificate } from '~/insomnia-data'; +import type { CaCertificate, Settings } from '~/insomnia-data'; import type { ApiSpec, diff --git a/packages/insomnia-scripting-environment/src/objects/insomnia.ts b/packages/insomnia-scripting-environment/src/objects/insomnia.ts index 383bb99830..dcc33976a6 100644 --- a/packages/insomnia-scripting-environment/src/objects/insomnia.ts +++ b/packages/insomnia-scripting-environment/src/objects/insomnia.ts @@ -1,9 +1,10 @@ import { expect } from 'chai'; import type { ClientCertificate } from 'insomnia/src/models/client-certificate'; import type { RequestHeader } from 'insomnia/src/models/request'; -import type { Settings } from 'insomnia/src/models/settings'; import { filterClientCertificates } from 'insomnia/src/network/certificate'; +import type { Settings } from '~/insomnia-data'; + import { toPreRequestAuth } from './auth'; import { getExistingConsole } from './console'; import { CookieObject } from './cookies'; diff --git a/packages/insomnia-scripting-environment/src/objects/interfaces.ts b/packages/insomnia-scripting-environment/src/objects/interfaces.ts index a72cb2069b..8da74ea9e2 100644 --- a/packages/insomnia-scripting-environment/src/objects/interfaces.ts +++ b/packages/insomnia-scripting-environment/src/objects/interfaces.ts @@ -1,9 +1,10 @@ import type { ClientCertificate } from 'insomnia/src/models/client-certificate'; import type { CookieJar as InsomniaCookieJar } from 'insomnia/src/models/cookie-jar'; import type { Request } from 'insomnia/src/models/request'; -import type { Settings } from 'insomnia/src/models/settings'; import type { sendCurlAndWriteTimelineError, sendCurlAndWriteTimelineResponse } from 'insomnia/src/network/network'; +import type { Settings } from '~/insomnia-data'; + import type { ExecutionOption } from './execution'; import type { RequestInfoOption } from './request-info'; import type { RequestTestResult } from './test'; diff --git a/packages/insomnia-scripting-environment/src/objects/request.ts b/packages/insomnia-scripting-environment/src/objects/request.ts index f593ecad4d..f9fe233965 100644 --- a/packages/insomnia-scripting-environment/src/objects/request.ts +++ b/packages/insomnia-scripting-environment/src/objects/request.ts @@ -5,7 +5,8 @@ import type { RequestBodyParameter, RequestPathParameter, } from 'insomnia/src/models/request'; -import type { Settings } from 'insomnia/src/models/settings'; + +import type { Settings } from '~/insomnia-data'; import { type AuthOptions, type AuthOptionTypes, fromPreRequestAuth, RequestAuth } from './auth'; import type { CertificateOptions } from './certificates'; diff --git a/packages/insomnia-scripting-environment/src/objects/send-request.ts b/packages/insomnia-scripting-environment/src/objects/send-request.ts index 48ae0b16eb..048a9fbe1d 100644 --- a/packages/insomnia-scripting-environment/src/objects/send-request.ts +++ b/packages/insomnia-scripting-environment/src/objects/send-request.ts @@ -1,9 +1,10 @@ import type { CurlRequestOutput } from 'insomnia/src/main/network/libcurl-promise'; import { readCurlResponse } from 'insomnia/src/models/helpers/response-operations'; -import type { Settings } from 'insomnia/src/models/settings'; import { Cookie } from 'tough-cookie'; import { v4 as uuidv4 } from 'uuid'; +import type { Settings } from '~/insomnia-data'; + import { RequestAuth } from './auth'; import { fromPreRequestAuth } from './auth'; import type { CookieOptions } from './cookies'; diff --git a/packages/insomnia/src/account/session.ts b/packages/insomnia/src/account/session.ts index 74af388746..d484318ab5 100644 --- a/packages/insomnia/src/account/session.ts +++ b/packages/insomnia/src/account/session.ts @@ -1,5 +1,7 @@ import { logout as logoutAPI, whoami } from 'insomnia-api'; +import { services } from '~/insomnia-data'; + import { AI_PLUGIN_NAME, LLM_BACKENDS } from '../common/constants'; import { database } from '../common/database'; import { @@ -8,7 +10,6 @@ import { gitRepository, pluginData, project, - settings, userSession, workspaceMeta, } from '../models'; @@ -202,12 +203,12 @@ async function _removeAllCredentials() { removals.push(_removeGitRepository(repo)); } - const proxySettings = await settings.get(); + const proxySettings = await services.settings.get(); if (proxySettings.httpProxy?.includes('@')) { - removals.push(settings.update(proxySettings, { httpProxy: '' })); + removals.push(services.settings.update(proxySettings, { httpProxy: '' })); } if (proxySettings.httpsProxy?.includes('@')) { - removals.push(settings.update(proxySettings, { httpsProxy: '' })); + removals.push(services.settings.update(proxySettings, { httpsProxy: '' })); } await Promise.all(removals); diff --git a/packages/insomnia/src/common/__tests__/har.test.ts b/packages/insomnia/src/common/__tests__/har.test.ts index 4c7a0ef132..0db6c84104 100644 --- a/packages/insomnia/src/common/__tests__/har.test.ts +++ b/packages/insomnia/src/common/__tests__/har.test.ts @@ -2,6 +2,8 @@ import path from 'node:path'; import { beforeEach, describe, expect, it } from 'vitest'; +import { services } from '~/insomnia-data'; + import { database as db } from '../../common/database'; import * as models from '../../models'; import type { Cookie } from '../../models/cookie-jar'; @@ -14,7 +16,7 @@ describe('export', () => { beforeEach(async () => { await db.init({ inMemoryOnly: true }, true); await models.project.all(); - await models.settings.getOrCreate(); + await services.settings.getOrCreate(); }); describe('exportHar()', () => { diff --git a/packages/insomnia/src/common/__tests__/insomnia-v5.test.ts b/packages/insomnia/src/common/__tests__/insomnia-v5.test.ts index 70b93e65cc..722c73e9d8 100644 --- a/packages/insomnia/src/common/__tests__/insomnia-v5.test.ts +++ b/packages/insomnia/src/common/__tests__/insomnia-v5.test.ts @@ -41,7 +41,7 @@ describe('Insomnia v5 Import/Export - Comprehensive Tests', () => { scope: 'collection', }); - await models.settings.getOrCreate(); + await services.settings.getOrCreate(); }); describe('insomniaSchemaTypeToScope', () => { diff --git a/packages/insomnia/src/common/__tests__/render.test.ts b/packages/insomnia/src/common/__tests__/render.test.ts index 012bcc0e8d..aa38e92b2a 100644 --- a/packages/insomnia/src/common/__tests__/render.test.ts +++ b/packages/insomnia/src/common/__tests__/render.test.ts @@ -1,6 +1,8 @@ import { createBuilder } from '@develohpanda/fluent-builder'; import { beforeEach, describe, expect, it } from 'vitest'; +import { services } from '~/insomnia-data'; + import * as models from '../../models'; import { environmentModelSchema, requestGroupModelSchema } from '../../models/__schemas__/model-schemas'; import type { Environment } from '../../models/environment'; @@ -13,7 +15,7 @@ const reqGroupBuilder = createBuilder(requestGroupModelSchema); describe('render tests', () => { beforeEach(async () => { await models.project.all(); - await models.settings.getOrCreate(); + await services.settings.getOrCreate(); envBuilder.reset(); reqGroupBuilder.reset(); }); diff --git a/packages/insomnia/src/common/render.ts b/packages/insomnia/src/common/render.ts index 42b0d2d53b..420a3c433c 100644 --- a/packages/insomnia/src/common/render.ts +++ b/packages/insomnia/src/common/render.ts @@ -1,7 +1,7 @@ import clone from 'clone'; import orderedJSON from 'json-order'; -import { type McpRequest } from '~/insomnia-data'; +import { type McpRequest, services } from '~/insomnia-data'; import * as models from '../models'; import { @@ -290,7 +290,7 @@ export async function render( // explicitly configure rendering to happen on the same thread/process as the rest of the app, in // which case it's okay to render locally. - const settings = await models.settings.get(); + const settings = await services.settings.get(); const pluginsAreRestrictedToRunInWorker = settings?.pluginsAllowElevatedAccess === false; const currentProcessIsRendererAndPluginsAreRestricted = process.type === 'renderer' && pluginsAreRestrictedToRunInWorker; @@ -473,7 +473,7 @@ export async function getRenderContext({ getKeySource(transientVariables.data || {}, inKey, transientVariables.name || 'scriptLocalVariables'); } - const settings = await models.settings.get(); + const settings = await services.settings.get(); // Add meta data helper function const baseContext: BaseRenderContext = { diff --git a/packages/insomnia/src/common/send-request.ts b/packages/insomnia/src/common/send-request.ts index a2707036ed..7c7c565619 100644 --- a/packages/insomnia/src/common/send-request.ts +++ b/packages/insomnia/src/common/send-request.ts @@ -1,14 +1,12 @@ import fs from 'node:fs/promises'; import path from 'node:path'; -import { database, initDatabase } from '~/insomnia-data'; +import { database, initDatabase, services, type Settings } from '~/insomnia-data'; import { createNedbDatabase } from '~/insomnia-data/node'; import { getBodyBuffer } from '~/models/helpers/response-operations'; import type { BaseModel } from '../models'; -import * as models from '../models'; import type { Environment, UserUploadEnvironment } from '../models/environment'; -import type { Settings } from '../models/settings'; import { defaultSendActionRuntime, fetchRequestData, @@ -69,7 +67,7 @@ export async function getSendRequestCallbackMemDb( }); // Now get settings (may come from fixtures) and merge with overrides - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const mergedSettings = { ...settings, ...settingsOverrides }; await database.batchModifyDocs({ upsert: [mergedSettings], diff --git a/packages/insomnia/src/entry.client.tsx b/packages/insomnia/src/entry.client.tsx index 8602ccd02c..b93fd43ca7 100644 --- a/packages/insomnia/src/entry.client.tsx +++ b/packages/insomnia/src/entry.client.tsx @@ -6,13 +6,12 @@ import { startTransition, StrictMode } from 'react'; import { hydrateRoot } from 'react-dom/client'; import { HydratedRouter } from 'react-router/dom'; -import { initDatabase, initServices } from '~/insomnia-data'; +import { initDatabase, initServices, services } from '~/insomnia-data'; import { database as clientDatabase } from '~/ui/database.client'; import { insomniaFetch } from '~/ui/insomnia-fetch'; import { migrateFromLocalStorage, type SessionData, setSessionData, setVaultSessionData } from './account/session'; import { getInsomniaSession, getInsomniaVaultKey, getInsomniaVaultSalt, getSkipOnboarding } from './common/constants'; -import * as models from './models'; import { initNewOAuthSession } from './network/o-auth-2/get-token'; import { init as initPlugins } from './plugins'; import { applyColorScheme } from './plugins/misc'; @@ -128,7 +127,7 @@ if (insomniaSession) { } } -const appSettings = await models.settings.getOrCreate(); +const appSettings = await services.settings.getOrCreate(); if (appSettings.clearOAuth2SessionOnRestart) { initNewOAuthSession(); diff --git a/packages/insomnia/src/entry.main.ts b/packages/insomnia/src/entry.main.ts index 10706c6048..ff2e799f21 100644 --- a/packages/insomnia/src/entry.main.ts +++ b/packages/insomnia/src/entry.main.ts @@ -9,7 +9,7 @@ import installExtension, { REACT_DEVELOPER_TOOLS } from 'electron-devtools-insta import { configureFetch } from 'insomnia-api'; import { getCurrentSessionId } from '~/account/session'; -import { database, initDatabase, initServices } from '~/insomnia-data'; +import { database, initDatabase, initServices, services } from '~/insomnia-data'; import { servicesNodeImpl } from '~/insomnia-data/node'; import { mainDatabase } from '~/main/database.main'; import { registerPathHandlers } from '~/main/ipc/path'; @@ -292,7 +292,7 @@ const _launchApp = async () => { */ async function _createModelInstances() { await models.stats.get(); - await models.settings.getOrCreate(); + await services.settings.getOrCreate(); try { const scratchpadProject = await models.project.getById(models.project.SCRATCHPAD_PROJECT_ID); const scratchPad = await models.workspace.getById(models.workspace.SCRATCHPAD_WORKSPACE_ID); @@ -368,7 +368,7 @@ async function _trackStats() { parentId: { $ne: null }, }); - const settings = await models.settings.get(); + const settings = await services.settings.get(); trackSegmentEvent(SegmentEvent.appStarted, { localProjects, diff --git a/packages/insomnia/src/insomnia-data/node-src/services/index.ts b/packages/insomnia/src/insomnia-data/node-src/services/index.ts index 9cb891ed2a..b070cea117 100644 --- a/packages/insomnia/src/insomnia-data/node-src/services/index.ts +++ b/packages/insomnia/src/insomnia-data/node-src/services/index.ts @@ -2,6 +2,7 @@ import * as caCertificateService from './ca-certificate'; import * as mcpPayloadService from './mcp-payload'; import * as mcpRequestService from './mcp-request'; import * as mcpResponseService from './mcp-response'; +import * as settingsService from './settings'; // Services are consumed from renderer via preload -> IPC (`ipcRenderer.invoke`), so this contract // must stay async across runtimes even if a main-process implementation could be synchronous. @@ -11,4 +12,5 @@ export const servicesNodeImpl = { mcpRequest: mcpRequestService, mcpResponse: mcpResponseService, mcpPayload: mcpPayloadService, + settings: settingsService, } satisfies Record Promise>>; diff --git a/packages/insomnia/src/insomnia-data/node-src/services/mcp-response.ts b/packages/insomnia/src/insomnia-data/node-src/services/mcp-response.ts index 2ba41384c8..b4488869c7 100644 --- a/packages/insomnia/src/insomnia-data/node-src/services/mcp-response.ts +++ b/packages/insomnia/src/insomnia-data/node-src/services/mcp-response.ts @@ -3,6 +3,7 @@ import * as requestOperations from '~/models/helpers/request-operations'; import { database as db } from '../../src/database'; import { type McpResponse } from '../../src/models/types'; +import * as SettingsService from './settings'; const { type } = models.mcpResponse; @@ -33,7 +34,7 @@ export async function create(patch: Partial = {}, maxResponses = 20 parentId, }; - if ((await models.settings.get()).filterResponsesByEnv && 'environmentId' in patch) { + if ((await SettingsService.get()).filterResponsesByEnv && 'environmentId' in patch) { query.environmentId = patch.environmentId; } @@ -71,7 +72,7 @@ export async function updateOrCreate(patch: Partial, maxResponses = export async function getLatestForRequestId(requestId: string, environmentId: string | null) { // Filter responses by environment if setting is enabled - const shouldFilter = (await models.settings.get()).filterResponsesByEnv; + const shouldFilter = (await SettingsService.get()).filterResponsesByEnv; const response = await db.findOne( type, diff --git a/packages/insomnia/src/insomnia-data/node-src/services/settings.ts b/packages/insomnia/src/insomnia-data/node-src/services/settings.ts new file mode 100644 index 0000000000..d18c873124 --- /dev/null +++ b/packages/insomnia/src/insomnia-data/node-src/services/settings.ts @@ -0,0 +1,42 @@ +import { database as db, models, type Settings } from '~/insomnia-data'; + +const { type } = models.settings; + +export async function all() { + let settingsList = await db.find(type); + + if (settingsList?.length === 0) { + settingsList = [await getOrCreate()]; + } + + return settingsList; +} + +async function create() { + const settings = await db.docCreate(type); + return settings; +} + +export async function update(settings: Settings, patch: Partial) { + const updatedSettings = await db.docUpdate(settings, patch); + return updatedSettings; +} + +export async function patch(settingsPatch: Partial) { + const settings = await getOrCreate(); + const updatedSettings = await db.docUpdate(settings, settingsPatch); + return updatedSettings; +} + +export async function getOrCreate() { + const result = await db.findOne(type); + + if (!result) { + return await create(); + } + return result; +} + +export async function get() { + return getOrCreate(); +} diff --git a/packages/insomnia/src/insomnia-data/src/models/index.ts b/packages/insomnia/src/insomnia-data/src/models/index.ts index 664631c3f7..b196f65e8d 100644 --- a/packages/insomnia/src/insomnia-data/src/models/index.ts +++ b/packages/insomnia/src/insomnia-data/src/models/index.ts @@ -3,10 +3,12 @@ import * as caCertificate from './ca-certificate'; import * as mcpPayload from './mcp-payload'; import * as mcpRequest from './mcp-request'; import * as mcpResponse from './mcp-response'; +import * as settings from './settings'; export const models = { caCertificate, mcpRequest, mcpPayload, mcpResponse, + settings, } as const; diff --git a/packages/insomnia/src/models/settings.ts b/packages/insomnia/src/insomnia-data/src/models/settings.ts similarity index 74% rename from packages/insomnia/src/models/settings.ts rename to packages/insomnia/src/insomnia-data/src/models/settings.ts index a6d08902a1..f801df3aed 100644 --- a/packages/insomnia/src/models/settings.ts +++ b/packages/insomnia/src/insomnia-data/src/models/settings.ts @@ -1,8 +1,7 @@ -import { getAppDefaultDarkTheme, getAppDefaultLightTheme, getAppDefaultTheme } from '../common/constants'; -import { database as db } from '../common/database'; -import * as hotkeys from '../common/hotkeys'; -import { HttpVersions, type KeyboardShortcut, type Settings as BaseSettings, UpdateChannel } from '../common/settings'; -import type { BaseModel } from './types'; +import { getAppDefaultDarkTheme, getAppDefaultLightTheme, getAppDefaultTheme } from '~/common/constants'; +import * as hotkeys from '~/common/hotkeys'; +import { HttpVersions, type KeyboardShortcut, type Settings as BaseSettings, UpdateChannel } from '~/common/settings'; +import type { BaseModel } from '~/models/types'; export type Settings = BaseModel & BaseSettings; export const name = 'Settings'; @@ -89,45 +88,6 @@ export function migrate(doc: Settings) { } } -export async function all() { - let settingsList = await db.find(type); - - if (settingsList?.length === 0) { - settingsList = [await getOrCreate()]; - } - - return settingsList; -} - -async function create() { - const settings = await db.docCreate(type); - return settings; -} - -export async function update(settings: Settings, patch: Partial) { - const updatedSettings = await db.docUpdate(settings, patch); - return updatedSettings; -} - -export async function patch(settingsPatch: Partial) { - const settings = await getOrCreate(); - const updatedSettings = await db.docUpdate(settings, settingsPatch); - return updatedSettings; -} - -export async function getOrCreate() { - const result = await db.findOne(type); - - if (!result) { - return await create(); - } - return result; -} - -export async function get() { - return getOrCreate(); -} - /** * Ensure map is updated when new hotkeys are added */ diff --git a/packages/insomnia/src/insomnia-data/src/models/types.ts b/packages/insomnia/src/insomnia-data/src/models/types.ts index 3cb5b556ac..1b0c420382 100644 --- a/packages/insomnia/src/insomnia-data/src/models/types.ts +++ b/packages/insomnia/src/insomnia-data/src/models/types.ts @@ -3,3 +3,4 @@ export type { CaCertificate } from './ca-certificate'; export type { McpRequest, McpTransportType, McpServerPrimitiveTypes } from './mcp-request'; export type { McpPayload } from './mcp-payload'; export type { McpResponse } from './mcp-response'; +export type { Settings, ThemeSettings } from './settings'; diff --git a/packages/insomnia/src/main/analytics.ts b/packages/insomnia/src/main/analytics.ts index d44b54b230..dd56595211 100644 --- a/packages/insomnia/src/main/analytics.ts +++ b/packages/insomnia/src/main/analytics.ts @@ -5,6 +5,8 @@ import * as Sentry from '@sentry/electron/main'; import { net } from 'electron'; import { v4 as uuidv4 } from 'uuid'; +import { services } from '~/insomnia-data'; + import { getApiBaseURL, getAppPlatform, @@ -37,8 +39,8 @@ const analytics = new Analytics({ }); const getDeviceId = async () => { - const settings = await models.settings.get(); - return settings.deviceId || (await models.settings.update(settings, { deviceId: uuidv4() })).deviceId; + const settings = await services.settings.get(); + return settings.deviceId || (await services.settings.update(settings, { deviceId: uuidv4() })).deviceId; }; export enum SegmentEvent { @@ -85,7 +87,7 @@ export async function trackSegmentEvent(event: SegmentEvent, properties?: Record if (PLAYWRIGHT) { return; } - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const userSession = await models.userSession.getOrCreate(); if (!userSession?.hashedAccountId) { userSession.hashedAccountId = userSession?.accountId ? hashString(userSession.accountId) : ''; @@ -139,7 +141,7 @@ export async function trackPageView(name: string) { if (PLAYWRIGHT) { return; } - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const userSession = await models.userSession.getOrCreate(); if (!userSession?.hashedAccountId) { userSession.hashedAccountId = userSession?.accountId ? hashString(userSession.accountId) : ''; diff --git a/packages/insomnia/src/main/api.protocol.ts b/packages/insomnia/src/main/api.protocol.ts index 96ad3609ac..b6e1bd9342 100644 --- a/packages/insomnia/src/main/api.protocol.ts +++ b/packages/insomnia/src/main/api.protocol.ts @@ -5,8 +5,9 @@ import { parse as urlParse } from 'node:url'; import { Curl, CurlAuth, CurlFeature, CurlProxy, CurlSslOpt, type HeaderInfo } from '@getinsomnia/node-libcurl'; import { app, net, protocol, session } from 'electron'; +import { services } from '~/insomnia-data'; + import { getApiBaseURL } from '../common/constants'; -import { get as getSettings } from '../models/settings'; import * as _userSession from '../models/user-session'; import { setDefaultProtocol } from './network/libcurl-promise'; import { resolveDbByKey } from './templating-worker-database'; @@ -52,7 +53,7 @@ export async function registerInsomniaProtocols() { const apiURL = getApiBaseURL(); const url = new URL(`${apiURL}/${originalRequest.url.replace(`${insomniaStreamScheme}://`, '')}`); const urlStr = url.toString(); - const settings = await getSettings(); + const settings = await services.settings.get(); // systemProxy follows the PAC return value format. // https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file#return_value_format let systemProxyStr = await session.defaultSession.resolveProxy(urlStr); diff --git a/packages/insomnia/src/main/authorize-user-in-window.ts b/packages/insomnia/src/main/authorize-user-in-window.ts index 79ffe085a5..9b4b721520 100644 --- a/packages/insomnia/src/main/authorize-user-in-window.ts +++ b/packages/insomnia/src/main/authorize-user-in-window.ts @@ -1,6 +1,6 @@ import { BrowserWindow, dialog } from 'electron'; -import * as models from '../models'; +import { services } from '~/insomnia-data'; export enum ChromiumVerificationResult { BLIND_TRUST = 0, @@ -32,7 +32,7 @@ export function authorizeUserInWindow({ let finalUrl: string | null = null; // Fetch user setting to determine whether to validate SSL certificates during auth - const { validateAuthSSL, proxyEnabled, httpProxy, httpsProxy, noProxy } = await models.settings.get(); + const { validateAuthSSL, proxyEnabled, httpProxy, httpsProxy, noProxy } = await services.settings.get(); // Create a child window const child = new BrowserWindow({ diff --git a/packages/insomnia/src/main/backup.ts b/packages/insomnia/src/main/backup.ts index fd814798ea..404bdb7a83 100644 --- a/packages/insomnia/src/main/backup.ts +++ b/packages/insomnia/src/main/backup.ts @@ -3,15 +3,15 @@ import path from 'node:path'; import electron from 'electron'; +import { services } from '~/insomnia-data'; import { getUpdateUrl } from '~/main/updates'; import { version } from '../../package.json'; import { getClientString } from '../common/constants'; -import * as models from '../models'; export async function backupIfNewerVersionAvailable() { try { - const settings = await models.settings.get(); + const settings = await services.settings.get(); console.log('[main] Checking for newer version than', version); const url = getUpdateUrl(settings.updateChannel); if (!url) { diff --git a/packages/insomnia/src/main/install-plugin.ts b/packages/insomnia/src/main/install-plugin.ts index a099c033a1..a956f4bf61 100644 --- a/packages/insomnia/src/main/install-plugin.ts +++ b/packages/insomnia/src/main/install-plugin.ts @@ -6,10 +6,10 @@ import { promisify } from 'node:util'; import { app, net } from 'electron'; +import { services } from '~/insomnia-data'; import { SegmentEvent, trackSegmentEvent } from '~/main/analytics'; import { isDevelopment } from '../common/constants'; -import * as models from '../models'; import { validatePluginName } from '../utils/plugin'; // Promisified version of execFile to use async/await @@ -414,7 +414,7 @@ export function safeTrim(value: unknown): string | undefined { * Pulls settings from the application models. */ export async function getYarnEnvValues(): Promise> { - const settings = await models.settings.get(); + const settings = await services.settings.get(); const yarnEnv: Record = { NODE_ENV: 'production', diff --git a/packages/insomnia/src/main/ipc/grpc.ts b/packages/insomnia/src/main/ipc/grpc.ts index 5b9191c9e4..8b507fb73b 100644 --- a/packages/insomnia/src/main/ipc/grpc.ts +++ b/packages/insomnia/src/main/ipc/grpc.ts @@ -28,6 +28,8 @@ import * as protoLoader from '@grpc/proto-loader'; import electron, { type IpcMainEvent } from 'electron'; import * as grpcReflection from 'grpc-reflection-js'; +import { services } from '~/insomnia-data'; + import { version } from '../../../package.json'; import * as models from '../../models'; import type { GrpcRequest, GrpcRequestBody, GrpcRequestHeader } from '../../models/grpc-request'; @@ -304,7 +306,7 @@ export const getSelectedMethod = async ( invariant(methods, 'No methods found'); return methods.find(c => c.path === request.protoMethodName); } - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const methods = await getMethodsFromReflection( request.url, request.metadata, diff --git a/packages/insomnia/src/main/mcp/transport-stdio.ts b/packages/insomnia/src/main/mcp/transport-stdio.ts index 1b2057f5ef..cebb84b758 100644 --- a/packages/insomnia/src/main/mcp/transport-stdio.ts +++ b/packages/insomnia/src/main/mcp/transport-stdio.ts @@ -100,7 +100,7 @@ export const createStdioTransport = async ( eventLogPath, transportType: models.mcpRequest.TRANSPORT_TYPES.STDIO, }; - const settings = await models.settings.get(); + const settings = await services.settings.get(); const res = await services.mcpResponse.updateOrCreate(responsePatch, settings.maxHistoryResponses); models.requestMeta.updateOrCreateByParentId(requestId, { activeResponseId: res._id }); } diff --git a/packages/insomnia/src/main/mcp/transport-streamable-http.ts b/packages/insomnia/src/main/mcp/transport-streamable-http.ts index 180b986a84..5426b7f4e2 100644 --- a/packages/insomnia/src/main/mcp/transport-streamable-http.ts +++ b/packages/insomnia/src/main/mcp/transport-streamable-http.ts @@ -135,7 +135,7 @@ const wrappedFetch = async ( eventLogPath, transportType: models.mcpRequest.TRANSPORT_TYPES.HTTP, }; - const settings = await models.settings.get(); + const settings = await services.settings.get(); const res = await services.mcpResponse.updateOrCreate(responsePatch, settings.maxHistoryResponses); models.requestMeta.updateOrCreateByParentId(requestId, { activeResponseId: res._id }); } diff --git a/packages/insomnia/src/main/network/curl.ts b/packages/insomnia/src/main/network/curl.ts index 638937258e..8455fb837f 100644 --- a/packages/insomnia/src/main/network/curl.ts +++ b/packages/insomnia/src/main/network/curl.ts @@ -159,7 +159,7 @@ const openCurlConnection = async ( } const readyStateChannel = `${protocolName}.${request._id}.${REALTIME_EVENTS_CHANNELS.READY_STATE}`; - const settings = await models.settings.get(); + const settings = await services.settings.get(); const start = performance.now(); const clientCertificates = await models.clientCertificate.findByParentId(options.workspaceId); const filteredClientCertificates = filterClientCertificates(clientCertificates, options.url, 'https:'); @@ -264,7 +264,7 @@ const openCurlConnection = async ( settingStoreCookies: request.settingStoreCookies, bodyCompression: null, }; - const settings = await models.settings.get(); + const settings = await services.settings.get(); const res = await models.response.create(responsePatch, settings.maxHistoryResponses); models.requestMeta.updateOrCreateByParentId(request._id, { activeResponseId: res._id }); @@ -343,7 +343,7 @@ const createErrorResponse = async ( timelinePath: string, message: string, ) => { - const settings = await models.settings.get(); + const settings = await services.settings.get(); const responsePatch = { _id: responseId, parentId: requestId, diff --git a/packages/insomnia/src/main/network/mcp.ts b/packages/insomnia/src/main/network/mcp.ts index 87e5d1a59f..6e0c27a838 100644 --- a/packages/insomnia/src/main/network/mcp.ts +++ b/packages/insomnia/src/main/network/mcp.ts @@ -190,7 +190,7 @@ const createErrorResponse = async ( }, ) => { const { requestId, responseId, environmentId, timelinePath, options } = context; - const settings = await models.settings.get(); + const settings = await services.settings.get(); const responsePatch = { _id: responseId, parentId: requestId, diff --git a/packages/insomnia/src/main/network/socket-io.ts b/packages/insomnia/src/main/network/socket-io.ts index ec4fdb07c2..eecc4bc817 100644 --- a/packages/insomnia/src/main/network/socket-io.ts +++ b/packages/insomnia/src/main/network/socket-io.ts @@ -217,7 +217,7 @@ const createErrorResponse = async ( timelinePath: string, message: string, ) => { - const settings = await models.settings.get(); + const settings = await services.settings.get(); const responsePatch = { _id: responseId, parentId: requestId, @@ -292,7 +292,7 @@ const openSocketIOConnection = async ( url: options.url, requestId: options.requestId, }); - const settings = await models.settings.get(); + const settings = await services.settings.get(); const socketIOoptions: Partial = { extraHeaders: lowerCasedEnabledHeaders, diff --git a/packages/insomnia/src/main/network/websocket.ts b/packages/insomnia/src/main/network/websocket.ts index 517e49662b..2801069ed3 100644 --- a/packages/insomnia/src/main/network/websocket.ts +++ b/packages/insomnia/src/main/network/websocket.ts @@ -222,7 +222,7 @@ const openWebSocketConnection = async ( const lowerCasedEnabledHeaders = headers .filter(({ name, disabled }) => Boolean(name) && !disabled) .reduce(reduceArrayToLowerCaseKeyedDictionary, {}); - const settings = await models.settings.get(); + const settings = await services.settings.get(); const start = performance.now(); const clientCertificates = await models.clientCertificate.findByParentId(options.workspaceId); @@ -320,7 +320,7 @@ const openWebSocketConnection = async ( settingStoreCookies: request.settingStoreCookies, }; - const settings = await models.settings.get(); + const settings = await services.settings.get(); const res = await models.webSocketResponse.create(responsePatch, settings.maxHistoryResponses); models.requestMeta.updateOrCreateByParentId(request._id, { activeResponseId: res._id }); @@ -376,7 +376,7 @@ const openWebSocketConnection = async ( settingSendCookies: request.settingSendCookies, settingStoreCookies: request.settingStoreCookies, }; - const settings = await models.settings.get(); + const settings = await services.settings.get(); const res = await models.webSocketResponse.create(responsePatch, settings.maxHistoryResponses); models.requestMeta.updateOrCreateByParentId(request._id, { activeResponseId: res._id }); deleteRequestMaps(request._id, `Unexpected response ${incomingMessage.statusCode}`); @@ -512,7 +512,7 @@ const createErrorResponse = async ( timelinePath: string, message: string, ) => { - const settings = await models.settings.get(); + const settings = await services.settings.get(); const responsePatch = { _id: responseId, parentId: requestId, diff --git a/packages/insomnia/src/main/proxy.ts b/packages/insomnia/src/main/proxy.ts index ab0efc53f8..442dfdfc49 100644 --- a/packages/insomnia/src/main/proxy.ts +++ b/packages/insomnia/src/main/proxy.ts @@ -1,13 +1,13 @@ import { session } from 'electron/main'; +import { models, services } from '~/insomnia-data'; + import { type ChangeBufferEvent, database as db } from '../common/database'; -import { settings } from '../models'; -import { isSettings } from '../models/settings'; import { setDefaultProtocol } from '../utils/url/protocol'; // Update the proxy settings before making the request. async function updateProxy() { - const { proxyEnabled, httpProxy, httpsProxy, noProxy } = await settings.get(); + const { proxyEnabled, httpProxy, httpsProxy, noProxy } = await services.settings.get(); if (proxyEnabled) { // Supported values for proxyUrl are like: http://localhost:8888, https://localhost:8888 or localhost:8888 @@ -42,12 +42,12 @@ async function updateProxy() { } export async function watchProxySettings() { - let old = await settings.get(); + let old = await services.settings.get(); updateProxy(); db.onChange(async (changes: ChangeBufferEvent[]) => { for (const change of changes) { const [event, doc] = change; - const isSettingsUpdate = isSettings(doc) && event === 'update'; + const isSettingsUpdate = models.settings.isSettings(doc) && event === 'update'; if (isSettingsUpdate) { const hasProxyChanged = old.proxyEnabled !== doc.proxyEnabled || diff --git a/packages/insomnia/src/main/secure-read-file.ts b/packages/insomnia/src/main/secure-read-file.ts index 93f8ac8f15..6bb5c558c8 100644 --- a/packages/insomnia/src/main/secure-read-file.ts +++ b/packages/insomnia/src/main/secure-read-file.ts @@ -4,10 +4,10 @@ import path from 'node:path'; import electron from 'electron'; +import { services } from '~/insomnia-data'; import { invariant } from '~/utils/invariant'; import { SECURITY_SETTINGS_PATH_LABEL } from '../common/misc'; -import * as models from '../models/index'; export const isPathAllowed = (filePath: string, userAllowList: string[]) => { const allowList = getSecuredFolderAllowList(userAllowList); @@ -25,7 +25,7 @@ const getSecuredFolderAllowList = (userAllowList: string[]) => { }; // For reading files specified by plugins, environment variables, and scripts which could come from an imported collection export const secureReadFile = async (filePath: string): Promise => { - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const { isAllowed, securedPath } = isPathAllowed(filePath, settings.dataFolders); invariant( diff --git a/packages/insomnia/src/main/sentry.ts b/packages/insomnia/src/main/sentry.ts index 9091f1b53d..bd45d33253 100644 --- a/packages/insomnia/src/main/sentry.ts +++ b/packages/insomnia/src/main/sentry.ts @@ -1,10 +1,11 @@ import * as Sentry from '@sentry/electron/main'; +import { services } from '~/insomnia-data'; + import * as session from '../account/session'; import { type ChangeBufferEvent, database as db } from '../common/database'; import { SENTRY_OPTIONS } from '../common/sentry'; import * as models from '../models/index'; -import { isSettings } from '../models/settings'; let enabled = false; @@ -12,14 +13,14 @@ let enabled = false; * Watch setting for changes. This must be called after the DB is initialized. */ export function sentryWatchAnalyticsEnabled() { - models.settings.get().then(async settings => { + services.settings.get().then(async settings => { enabled = settings.enableAnalytics || (await session.isLoggedIn()); }); db.onChange(async (changes: ChangeBufferEvent[]) => { for (const change of changes) { const [event, doc] = change; - if (isSettings(doc) && event === 'update') { + if (models.settings.isSettings(doc) && event === 'update') { enabled = doc.enableAnalytics || (await session.isLoggedIn()); } diff --git a/packages/insomnia/src/main/templating-worker-database.ts b/packages/insomnia/src/main/templating-worker-database.ts index 13102142af..55e0442582 100644 --- a/packages/insomnia/src/main/templating-worker-database.ts +++ b/packages/insomnia/src/main/templating-worker-database.ts @@ -7,6 +7,7 @@ import iconv from 'iconv-lite'; import { v4 as uuidv4 } from 'uuid'; import { jarFromCookies } from '~/common/cookies'; +import { services } from '~/insomnia-data'; import { getBodyBuffer, readCurlResponse } from '~/models/helpers/response-operations'; import { getAppBundlePlugins, RESPONSE_CODE_REASONS } from '../common/constants'; @@ -149,7 +150,7 @@ const pluginToMainAPI: Record Promise< return await models.cloudCredential.update(body.originCredential, body.patch); }, 'settings.get': async () => { - return await models.settings.get(); + return await services.settings.get(); }, 'openInBrowser': async (body: { url: string }) => { const { url } = body; @@ -186,7 +187,7 @@ const pluginToMainAPI: Record Promise< }; }) => { const requestId = uuidv4(); - const settings = await models.settings.get(); + const settings = await services.settings.get(); const settingFollowRedirects = settings?.followRedirects ? 'on' : 'off'; const { request: originRequest, caCertficatePath = null } = body.options; const response = await curlRequest({ diff --git a/packages/insomnia/src/main/updates.ts b/packages/insomnia/src/main/updates.ts index 6e2a84bd13..5716d059f0 100644 --- a/packages/insomnia/src/main/updates.ts +++ b/packages/insomnia/src/main/updates.ts @@ -6,13 +6,12 @@ import { app, autoUpdater, BrowserWindow, dialog } from 'electron'; import log from 'electron-log'; import { autoUpdater as electronUpdater } from 'electron-updater'; -import type { Settings } from '~/models/settings'; +import { services, type Settings } from '~/insomnia-data'; import appConfig from '../../config/config.json'; import packageJSON from '../../package.json'; import { CHECK_FOR_UPDATES_INTERVAL, isDevelopment } from '../common/constants'; import { delay } from '../common/misc'; -import * as models from '../models/index'; import { invariant } from '../utils/invariant'; import { ipcMainOn } from './ipc/electron'; @@ -70,7 +69,7 @@ export const init = async () => { // nsis installer uses electron-updater package rather than electron.autoUpdater const isNsis = await isNsisInstaller(); const checkForUpdates = isNsis ? initNsisUpdater() : initAutoUpdater(); - const settings = await models.settings.get(); + const settings = await services.settings.get(); const updateSupported = isUpdateSupported(); // perhaps disable this method of upgrading just in case it trigger before backup is complete // on app start @@ -80,7 +79,7 @@ export const init = async () => { } // on an interval (3h) setInterval(async () => { - const settings = await models.settings.get(); + const settings = await services.settings.get(); if (settings.updateAutomatically) { checkForUpdates(settings); } @@ -95,7 +94,7 @@ export const init = async () => { await delay(300); // Pacing - checkForUpdates(await models.settings.get()); + checkForUpdates(await services.settings.get()); }); }; diff --git a/packages/insomnia/src/models/__tests__/request.test.ts b/packages/insomnia/src/models/__tests__/request.test.ts index b604bc2536..9b36bc98ea 100644 --- a/packages/insomnia/src/models/__tests__/request.test.ts +++ b/packages/insomnia/src/models/__tests__/request.test.ts @@ -8,6 +8,8 @@ import { v4 as uuidv4 } from 'uuid'; import { beforeEach, describe, expect, it } from 'vitest'; +import { services } from '~/insomnia-data'; + import * as models from '../index'; import type { AuthTypeAPIKey, @@ -31,7 +33,7 @@ import type { describe('Request Model - Comprehensive Tests', () => { beforeEach(async () => { await models.project.all(); - await models.settings.getOrCreate(); + await services.settings.getOrCreate(); // Create test project for all tests try { diff --git a/packages/insomnia/src/models/helpers/response-operations.ts b/packages/insomnia/src/models/helpers/response-operations.ts index b6ad9a3d4d..7c070447b7 100644 --- a/packages/insomnia/src/models/helpers/response-operations.ts +++ b/packages/insomnia/src/models/helpers/response-operations.ts @@ -3,7 +3,7 @@ import type { Readable } from 'node:stream'; import zlib from 'node:zlib'; import { database as db } from '~/common/database'; -import { type McpResponse } from '~/insomnia-data'; +import { type McpResponse, services } from '~/insomnia-data'; import type { ResponseTimelineEntry } from '~/main/network/libcurl-promise'; import * as models from '~/models/index'; import { type Compression, isResponse, type Response, type as responseType } from '~/models/response'; @@ -18,7 +18,7 @@ import { import { deserializeNDJSON } from '~/utils/ndjson'; export async function removeResponsesForRequest(requestId: string, environmentId?: string | null) { - const settings = await models.settings.get(); + const settings = await services.settings.get(); const query: Record = { parentId: requestId, }; diff --git a/packages/insomnia/src/models/index.ts b/packages/insomnia/src/models/index.ts index bfe1534c38..c14da0ed96 100644 --- a/packages/insomnia/src/models/index.ts +++ b/packages/insomnia/src/models/index.ts @@ -26,7 +26,6 @@ import * as _requestMeta from './request-meta'; import * as _requestVersion from './request-version'; import * as _response from './response'; import * as _runnerTestResult from './runner-test-result'; -import * as _settings from './settings'; import * as _socketIOPayload from './socket-io-payload'; import * as _socketIORequest from './socket-io-request'; import * as _socketIoResponse from './socket-io-response'; @@ -61,7 +60,7 @@ export const requestMeta = _requestMeta; export const requestVersion = _requestVersion; export const runnerTestResult = _runnerTestResult; export const response = _response; -export const settings = _settings; +export const settings = models.settings; export const project = _project; export const stats = _stats; export const unitTest = _unitTest; diff --git a/packages/insomnia/src/models/response.ts b/packages/insomnia/src/models/response.ts index 966f504534..04e41e4c7c 100644 --- a/packages/insomnia/src/models/response.ts +++ b/packages/insomnia/src/models/response.ts @@ -1,8 +1,9 @@ +import { services } from '~/insomnia-data'; + import type { RequestTestResult } from '../../../insomnia-scripting-environment/src/objects'; import { database as db } from '../common/database'; import * as requestOperations from '../models/helpers/request-operations'; import * as requestVersionModel from './request-version'; -import * as settingsModel from './settings'; import type { BaseModel } from './types'; export const name = 'Response'; @@ -109,7 +110,7 @@ export async function getLatestForRequestId( environmentId: string | null, ): Promise { // Filter responses by environment if setting is enabled - const shouldFilter = (await settingsModel.get()).filterResponsesByEnv; + const shouldFilter = (await services.settings.get()).filterResponsesByEnv; const response = await db.findOne( type, @@ -134,7 +135,7 @@ export async function create(patch: Partial = {}, maxResponses = 20): const requestVersion = request ? await requestVersionModel.create(request) : null; patch.requestVersionId = requestVersion ? requestVersion._id : null; // Filter responses by environment if setting is enabled - const settings = await settingsModel.get(); + const settings = await services.settings.get(); const shouldQueryByEnvId = 'environmentId' in patch && settings.filterResponsesByEnv; const query = { parentId, diff --git a/packages/insomnia/src/models/socket-io-response.ts b/packages/insomnia/src/models/socket-io-response.ts index 516b1bc3d5..702e5b9b1a 100644 --- a/packages/insomnia/src/models/socket-io-response.ts +++ b/packages/insomnia/src/models/socket-io-response.ts @@ -1,3 +1,5 @@ +import { services } from '~/insomnia-data'; + import { database as db } from '../common/database'; import * as requestOperations from './helpers/request-operations'; import * as models from './index'; @@ -76,7 +78,7 @@ export async function create(patch: Partial = {}, maxResponses parentId, }; - if ((await models.settings.get()).filterResponsesByEnv && 'environmentId' in patch) { + if ((await services.settings.get()).filterResponsesByEnv && 'environmentId' in patch) { query.environmentId = patch.environmentId; } @@ -97,7 +99,7 @@ export async function create(patch: Partial = {}, maxResponses export async function getLatestForRequestId(requestId: string, environmentId: string | null) { // Filter responses by environment if setting is enabled - const shouldFilter = (await models.settings.get()).filterResponsesByEnv; + const shouldFilter = (await services.settings.get()).filterResponsesByEnv; const response = await db.findOne( type, diff --git a/packages/insomnia/src/models/websocket-response.ts b/packages/insomnia/src/models/websocket-response.ts index 264e5b2c0e..4ca622eb90 100644 --- a/packages/insomnia/src/models/websocket-response.ts +++ b/packages/insomnia/src/models/websocket-response.ts @@ -1,3 +1,5 @@ +import { services } from '~/insomnia-data'; + import { database as db } from '../common/database'; import * as requestOperations from './helpers/request-operations'; import * as models from './index'; @@ -87,7 +89,7 @@ export async function create(patch: Partial = {}, maxResponse parentId, }; - if ((await models.settings.get()).filterResponsesByEnv && 'environmentId' in patch) { + if ((await services.settings.get()).filterResponsesByEnv && 'environmentId' in patch) { query.environmentId = patch.environmentId; } @@ -111,7 +113,7 @@ export async function create(patch: Partial = {}, maxResponse export async function getLatestForRequestId(requestId: string, environmentId: string | null) { // Filter responses by environment if setting is enabled - const shouldFilter = (await models.settings.get()).filterResponsesByEnv; + const shouldFilter = (await services.settings.get()).filterResponsesByEnv; const response = await db.findOne( type, diff --git a/packages/insomnia/src/network/__tests__/network.test.ts b/packages/insomnia/src/network/__tests__/network.test.ts index a37e3fe44c..3eae5fa45a 100644 --- a/packages/insomnia/src/network/__tests__/network.test.ts +++ b/packages/insomnia/src/network/__tests__/network.test.ts @@ -4,6 +4,8 @@ import nodePath from 'node:path'; import { CurlHttpVersion, CurlNetrc } from '@getinsomnia/node-libcurl'; import { beforeEach, describe, expect, it } from 'vitest'; +import { services } from '~/insomnia-data'; + import { CONTENT_TYPE_FILE, CONTENT_TYPE_FORM_DATA, CONTENT_TYPE_FORM_URLENCODED } from '../../common/constants'; import { filterHeaders } from '../../common/misc'; import { getRenderedRequestAndContext } from '../../common/render'; @@ -26,7 +28,7 @@ describe('sendCurlAndWriteTimeline()', () => { it('sends a generic request', async () => { const workspace = await models.workspace.create(); - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const cookies = [ { creation: new Date('2016-10-05T04:40:49.505Z'), @@ -139,7 +141,7 @@ describe('sendCurlAndWriteTimeline()', () => { it('sends a urlencoded', async () => { const workspace = await models.workspace.create(); - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const request = Object.assign(models.request.init(), { _id: 'req_123', parentId: workspace._id, @@ -212,7 +214,7 @@ describe('sendCurlAndWriteTimeline()', () => { it('skips sending and storing cookies with setting', async () => { const workspace = await models.workspace.create(); - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const cookies = [ { creation: new Date('2016-10-05T04:40:49.505Z'), @@ -316,8 +318,8 @@ describe('sendCurlAndWriteTimeline()', () => { it('sends a file', async () => { const workspace = await models.workspace.create(); - let settings = await models.settings.getOrCreate(); - settings = await models.settings.update(settings, { dataFolders: [nodePath.resolve(__dirname)] }); + let settings = await services.settings.getOrCreate(); + settings = await services.settings.update(settings, { dataFolders: [nodePath.resolve(__dirname)] }); await models.cookieJar.create({ parentId: workspace._id, }); @@ -384,7 +386,7 @@ describe('sendCurlAndWriteTimeline()', () => { it('sends multipart form data', async () => { const workspace = await models.workspace.create(); - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); await models.cookieJar.create({ parentId: workspace._id, }); @@ -480,7 +482,7 @@ describe('sendCurlAndWriteTimeline()', () => { it('uses unix socket', async () => { const workspace = await models.workspace.create(); - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const request = Object.assign(models.request.init(), { _id: 'req_123', parentId: workspace._id, @@ -524,7 +526,7 @@ describe('sendCurlAndWriteTimeline()', () => { it('uses works with HEAD', async () => { const workspace = await models.workspace.create(); - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const request = Object.assign(models.request.init(), { _id: 'req_123', parentId: workspace._id, @@ -567,7 +569,7 @@ describe('sendCurlAndWriteTimeline()', () => { it('uses works with "unix" host', async () => { const workspace = await models.workspace.create(); - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const request = Object.assign(models.request.init(), { _id: 'req_123', parentId: workspace._id, @@ -610,7 +612,7 @@ describe('sendCurlAndWriteTimeline()', () => { it('uses netrc', async () => { const workspace = await models.workspace.create(); - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const request = Object.assign(models.request.init(), { _id: 'req_123', parentId: workspace._id, @@ -659,7 +661,7 @@ describe('sendCurlAndWriteTimeline()', () => { return; } const workspace = await models.workspace.create(); - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const cookies = [ { creation: new Date('2016-10-05T04:40:49.505Z'), @@ -774,7 +776,7 @@ describe('sendCurlAndWriteTimeline()', () => { it('sets HTTP version', async () => { const workspace = await models.workspace.create(); - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const request = Object.assign(models.request.init(), { _id: 'req_123', parentId: workspace._id, diff --git a/packages/insomnia/src/network/concurrency.ts b/packages/insomnia/src/network/concurrency.ts index 5a0cca93d7..82803384dc 100644 --- a/packages/insomnia/src/network/concurrency.ts +++ b/packages/insomnia/src/network/concurrency.ts @@ -1,7 +1,7 @@ import type { queueAsPromised } from 'fastq'; import * as fastq from 'fastq'; -import type { Settings } from '~/models/settings'; +import type { Settings } from '~/insomnia-data'; import type { RequestContext, RequestTestResult } from '../../../insomnia-scripting-environment/src/objects'; import type { ClientCertificate } from '../models/client-certificate'; diff --git a/packages/insomnia/src/network/network.ts b/packages/insomnia/src/network/network.ts index fae991f67d..deab9fee05 100644 --- a/packages/insomnia/src/network/network.ts +++ b/packages/insomnia/src/network/network.ts @@ -4,7 +4,7 @@ import nodePath from 'node:path'; import clone from 'clone'; import orderedJSON from 'json-order'; -import { type CaCertificate, services } from '~/insomnia-data'; +import { type CaCertificate, services, type Settings } from '~/insomnia-data'; import { getKVPairFromData } from '~/utils/environment-utils'; import type { @@ -40,7 +40,6 @@ import { type RequestParameter, } from '../models/request'; import { isRequestGroup, type RequestGroup } from '../models/request-group'; -import type { Settings } from '../models/settings'; import type { SocketIORequest } from '../models/socket-io-request'; import type { WebSocketRequest } from '../models/websocket-request'; import { isWorkspace, type Workspace } from '../models/workspace'; @@ -150,7 +149,7 @@ export const fetchRequestGroupData = async (requestGroupId: string) => { const environment = activeEnvironment || (await models.environment.getOrCreateForParentId(workspace._id)); invariant(environment, 'failed to find environment ' + activeEnvironmentId); - const settings = await models.settings.get(); + const settings = await services.settings.get(); invariant(settings, 'failed to create settings'); const clientCertificates = await models.clientCertificate.findByParentId(workspaceId); const caCert = await services.caCertificate.getByParentId(workspaceId); @@ -215,7 +214,7 @@ export const fetchRequestData = async ( } } - const settings = await models.settings.get(); + const settings = await services.settings.get(); invariant(settings, 'failed to create settings'); const clientCertificates = await models.clientCertificate.findByParentId(workspaceId); const caCert = await services.caCertificate.getByParentId(workspaceId); @@ -261,7 +260,7 @@ export const fetchMcpRequestData = async (mcpRequestId: string) => { const environment = activeEnvironment || baseEnvironment; invariant(environment, 'failed to find environment ' + activeEnvironmentId); - const settings = await models.settings.get(); + const settings = await services.settings.get(); invariant(settings, 'failed to create settings'); const responseId = generateId('res'); diff --git a/packages/insomnia/src/plugins/context/network.ts b/packages/insomnia/src/plugins/context/network.ts index b892096c05..23d10b5078 100644 --- a/packages/insomnia/src/plugins/context/network.ts +++ b/packages/insomnia/src/plugins/context/network.ts @@ -1,5 +1,6 @@ import { v4 as uuidv4 } from 'uuid'; +import { services } from '~/insomnia-data'; import { readCurlResponse } from '~/models/helpers/response-operations'; import { RESPONSE_CODE_REASONS } from '../../common/constants'; @@ -75,7 +76,7 @@ export function init(): { // using node-curl to send a request directly, without context render and database write for request and response async sendRequestWithoutSideEffects(options: NodeCurlRequestOptions): Promise { const requestId = uuidv4(); - const settings = await models.settings.get(); + const settings = await services.settings.get(); const settingFollowRedirects = settings?.followRedirects ? 'on' : 'off'; const { request: originRequest, caCertficatePath = null } = options; const curlRequest = diff --git a/packages/insomnia/src/plugins/index.ts b/packages/insomnia/src/plugins/index.ts index 3e14bbf819..b7301ffbe2 100644 --- a/packages/insomnia/src/plugins/index.ts +++ b/packages/insomnia/src/plugins/index.ts @@ -3,6 +3,7 @@ import path from 'node:path'; import electron from 'electron'; +import { services } from '~/insomnia-data'; import { getBodyBuffer } from '~/models/helpers/response-operations'; import type { ParsedApiSpec } from '../common/api-specs'; @@ -198,7 +199,7 @@ export async function getPlugins(force = false): Promise { } if (!plugins) { - const settings = await models.settings.get(); + const settings = await services.settings.get(); const allConfigs: PluginConfigMap = settings.pluginConfig; const extraPaths = settings.pluginPath .split(':') @@ -414,7 +415,7 @@ export function getPluginCommonContext({ getBodyBuffer, }, settings: { - get: models.settings.get, + get: services.settings.get, }, }, }, diff --git a/packages/insomnia/src/plugins/misc.ts b/packages/insomnia/src/plugins/misc.ts index b4070ccb27..8aa6c7b0bb 100644 --- a/packages/insomnia/src/plugins/misc.ts +++ b/packages/insomnia/src/plugins/misc.ts @@ -1,7 +1,8 @@ import Color from 'color'; +import type { ThemeSettings } from '~/insomnia-data'; + import { getAppDefaultTheme } from '../common/constants'; -import type { ThemeSettings } from '../models/settings'; import type { Theme } from './index'; import { type ColorScheme, getThemes } from './index'; diff --git a/packages/insomnia/src/root.tsx b/packages/insomnia/src/root.tsx index 84861586c3..2ef44c7bf8 100644 --- a/packages/insomnia/src/root.tsx +++ b/packages/insomnia/src/root.tsx @@ -19,8 +19,8 @@ import { } from 'react-router'; import { EXTERNAL_VAULT_PLUGIN_NAME, isDevelopment } from '~/common/constants'; +import { services, type Settings } from '~/insomnia-data'; import * as models from '~/models'; -import type { Settings } from '~/models/settings'; import type { UserSession } from '~/models/user-session'; import { executePluginMainAction, reloadPlugins } from '~/plugins'; import { createPlugin } from '~/plugins/create'; @@ -155,7 +155,7 @@ export const useRootLoaderData = () => { }; export async function clientLoader(_args: Route.ClientLoaderArgs) { - const settings = await models.settings.get(); + const settings = await services.settings.get(); const workspaceCount = await models.workspace.count(); const userSession = await models.userSession.getOrCreate(); const cloudCredentials = await models.cloudCredential.all(); @@ -424,8 +424,8 @@ const Root = () => { if (isYes) { const mainJsContent = `module.exports.themes = [${JSON.stringify(parsedTheme, null, 2)}];`; await createPlugin(`theme-${parsedTheme.name}`, mainJsContent); - const settings = await models.settings.get(); - await models.settings.update(settings, { + const settings = await services.settings.get(); + await services.settings.update(settings, { theme: parsedTheme.name, }); await reloadPlugins(); diff --git a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.$requestId.send.tsx b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.$requestId.send.tsx index 91ac442b27..5874b288db 100644 --- a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.$requestId.send.tsx +++ b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.$requestId.send.tsx @@ -7,6 +7,7 @@ import { href, redirect } from 'react-router'; import { v4 as uuidv4 } from 'uuid'; import { getContentDispositionHeader } from '~/common/misc'; +import { services } from '~/insomnia-data'; import type { ResponsePatch } from '~/main/network/libcurl-promise'; import type { TimingStep } from '~/main/network/request-timing'; import * as models from '~/models'; @@ -351,7 +352,7 @@ export async function clientAction({ request, params }: Route.ClientActionArgs) if (requestMeta?.activeResponseId) { const response = await models.response.getById(requestMeta.activeResponseId); if (response) { - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const activeRequest = await models.request.getById(requestId); if (activeRequest) { diff --git a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.$requestId.tsx b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.$requestId.tsx index 286417af70..8611c493cc 100644 --- a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.$requestId.tsx +++ b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.$requestId.tsx @@ -118,7 +118,7 @@ export async function clientLoader({ params }: Route.ClientLoaderArgs) { } as GrpcRequestLoaderData; } const activeRequestMeta = await models.requestMeta.updateOrCreateByParentId(requestId, { lastActive: Date.now() }); - const { filterResponsesByEnv } = await models.settings.get(); + const { filterResponsesByEnv } = await services.settings.get(); const isGraphqlWsRequest = isGraphqlSubscriptionRequest(activeRequest); // Handle MCP requests early (like gRPC) since MCP response methods are on services diff --git a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.new.tsx b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.new.tsx index 623601b49c..d7a1552d99 100644 --- a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.new.tsx +++ b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.new.tsx @@ -8,6 +8,7 @@ import { METHOD_GET, METHOD_POST, } from '~/common/constants'; +import { services } from '~/insomnia-data'; import * as models from '~/models'; import type { Request, RequestBody, RequestParameter } from '~/models/request'; import { SegmentEvent } from '~/ui/analytics'; @@ -26,7 +27,7 @@ export async function clientAction({ params, request }: Route.ClientActionArgs) req?: Request; }; - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const defaultHeaders = settings.disableAppVersionUserAgent ? [] : [ diff --git a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.new.tsx b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.new.tsx index d1ad3961b8..8e2a93031b 100644 --- a/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.new.tsx +++ b/packages/insomnia/src/routes/organization.$organizationId.project.$projectId.workspace.new.tsx @@ -140,7 +140,7 @@ export async function clientAction({ request, params }: Route.ClientActionArgs) } if (workspaceData.scope === 'mcp') { - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const defaultHeaders = settings.disableAppVersionUserAgent ? [] : [{ name: 'User-Agent', value: `insomnia/${getAppVersion()}` }]; @@ -198,7 +198,7 @@ export async function clientAction({ request, params }: Route.ClientActionArgs) }); if (workspaceData.withRequest) { - const settings = await models.settings.getOrCreate(); + const settings = await services.settings.getOrCreate(); const defaultHeaders = settings.disableAppVersionUserAgent ? [] : [ diff --git a/packages/insomnia/src/routes/organization.tsx b/packages/insomnia/src/routes/organization.tsx index d13384f05b..fd656d0578 100644 --- a/packages/insomnia/src/routes/organization.tsx +++ b/packages/insomnia/src/routes/organization.tsx @@ -15,9 +15,9 @@ import { href, NavLink, Outlet, useLocation, useNavigate, useParams, useRouteLoa import * as reactUse from 'react-use'; import { getAppWebsiteBaseURL } from '~/common/constants'; +import type { Settings } from '~/insomnia-data'; import { userSession } from '~/models'; import { isOwnerOfOrganization, isPersonalOrganization } from '~/models/organization'; -import type { Settings } from '~/models/settings'; import { isScratchpad } from '~/models/workspace'; import { useRootLoaderData } from '~/root'; import { useWorkspaceLoaderData } from '~/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId'; diff --git a/packages/insomnia/src/routes/settings.update.tsx b/packages/insomnia/src/routes/settings.update.tsx index b1f4d4964c..8452d064fc 100644 --- a/packages/insomnia/src/routes/settings.update.tsx +++ b/packages/insomnia/src/routes/settings.update.tsx @@ -1,5 +1,4 @@ -import * as models from '~/models'; -import type { Settings } from '~/models/settings'; +import { services, type Settings } from '~/insomnia-data'; import { SegmentEvent } from '~/ui/analytics'; import { createFetcherSubmitHook } from '~/utils/router'; @@ -10,7 +9,7 @@ export async function clientAction({ request }: Route.ClientActionArgs) { if ('enableAnalytics' in patch && !patch.enableAnalytics) { window.main.trackSegmentEvent({ event: SegmentEvent.analyticsDisabled }); } - await models.settings.patch(patch); + await services.settings.patch(patch); return null; } diff --git a/packages/insomnia/src/templating/base-extension.ts b/packages/insomnia/src/templating/base-extension.ts index f5e0583324..7bf7e5e4eb 100644 --- a/packages/insomnia/src/templating/base-extension.ts +++ b/packages/insomnia/src/templating/base-extension.ts @@ -5,6 +5,7 @@ import os from 'node:os'; import iconv from 'iconv-lite'; import { jarFromCookies } from '~/common/cookies'; +import { services } from '~/insomnia-data'; import { getBodyBuffer } from '~/models/helpers/response-operations'; import { database as db } from '../common/database'; @@ -166,7 +167,7 @@ export default class BaseExtension { getBodyBuffer, }, settings: { - get: models.settings.get, + get: services.settings.get, }, }, }, diff --git a/packages/insomnia/src/templating/types.ts b/packages/insomnia/src/templating/types.ts index 038e954bd2..0f463b5749 100644 --- a/packages/insomnia/src/templating/types.ts +++ b/packages/insomnia/src/templating/types.ts @@ -2,7 +2,7 @@ import type { BinaryToTextEncoding } from 'node:crypto'; import type { Cookie } from 'tough-cookie'; -import type { McpRequest } from '~/insomnia-data'; +import type { McpRequest, Services } from '~/insomnia-data'; import type { getBodyBuffer } from '~/models/helpers/response-operations'; import type { CloudProviderCredential } from '../models/cloud-credential'; @@ -14,7 +14,6 @@ import type { Project } from '../models/project'; import type { Request } from '../models/request'; import type { RequestGroup } from '../models/request-group'; import type { getLatestForRequestId, Response } from '../models/response'; -import type { get as getSettings } from '../models/settings'; import type { SocketIORequest } from '../models/socket-io-request'; import type { WebSocketRequest } from '../models/websocket-request'; import type { Workspace } from '../models/workspace'; @@ -295,7 +294,7 @@ export interface PluginTemplateTagContext { getBodyBuffer: typeof getBodyBuffer; }; settings: { - get: typeof getSettings; + get: Services['settings']['get']; }; }; }; diff --git a/packages/insomnia/src/ui/components/editors/request-script-editor.tsx b/packages/insomnia/src/ui/components/editors/request-script-editor.tsx index fac41457ad..a746640988 100644 --- a/packages/insomnia/src/ui/components/editors/request-script-editor.tsx +++ b/packages/insomnia/src/ui/components/editors/request-script-editor.tsx @@ -12,6 +12,7 @@ import { Toolbar, } from 'react-aria-components'; +import type { Settings } from '~/insomnia-data'; import { translateHandlersInScript } from '~/main/importers/importers/translate-postman-script'; import { CodeEditor, type CodeEditorHandle } from '~/ui/components/.client/codemirror/code-editor'; @@ -28,7 +29,6 @@ import { Vault, } from '../../../../../insomnia-scripting-environment/src/objects'; import { ParentFolders } from '../../../../../insomnia-scripting-environment/src/objects/folders'; -import type { Settings } from '../../../models/settings'; import { Icon } from '../icon'; interface Props { diff --git a/packages/insomnia/src/ui/components/modals/__tests__/import-export.test.ts b/packages/insomnia/src/ui/components/modals/__tests__/import-export.test.ts index 9278fd7261..ac0e77c943 100644 --- a/packages/insomnia/src/ui/components/modals/__tests__/import-export.test.ts +++ b/packages/insomnia/src/ui/components/modals/__tests__/import-export.test.ts @@ -1,6 +1,8 @@ import { exportRequestsHAR, exportWorkspacesHAR } from 'insomnia/src/common/har'; import { beforeEach, describe, expect, it } from 'vitest'; +import { services } from '~/insomnia-data'; + import { database as db } from '../../../../common/database'; import * as models from '../../../../models'; @@ -8,7 +10,7 @@ import * as models from '../../../../models'; describe('exportWorkspacesHAR() and exportRequestsHAR()', () => { beforeEach(async () => { await models.project.all(); - await models.settings.getOrCreate(); + await services.settings.getOrCreate(); }); it('exports a single workspace and some requests only as an HTTP Archive', async () => { diff --git a/packages/insomnia/src/ui/components/panes/request-group-pane.tsx b/packages/insomnia/src/ui/components/panes/request-group-pane.tsx index 2d7826ac9a..c646b63b15 100644 --- a/packages/insomnia/src/ui/components/panes/request-group-pane.tsx +++ b/packages/insomnia/src/ui/components/panes/request-group-pane.tsx @@ -1,11 +1,11 @@ import React, { type FC, useRef, useState } from 'react'; import { Heading, Tab, TabList, TabPanel, Tabs, ToggleButton } from 'react-aria-components'; +import type { Settings } from '~/insomnia-data'; import { useToggleEnvironmentType } from '~/ui/hooks/use-toggle-environment-type'; import { getDataFromKVPair } from '~/utils/environment-utils'; import { type EnvironmentKvPairData, EnvironmentType } from '../../../models/environment'; -import type { Settings } from '../../../models/settings'; import { getAuthObjectOrNull } from '../../../network/authentication'; import { useWorkspaceLoaderData } from '../../../routes/organization.$organizationId.project.$projectId.workspace.$workspaceId'; import { useRequestGroupLoaderData } from '../../../routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request-group.$requestGroupId'; diff --git a/packages/insomnia/src/ui/components/panes/request-pane.tsx b/packages/insomnia/src/ui/components/panes/request-pane.tsx index 157ab62e5f..bc6d715d79 100644 --- a/packages/insomnia/src/ui/components/panes/request-pane.tsx +++ b/packages/insomnia/src/ui/components/panes/request-pane.tsx @@ -4,13 +4,13 @@ import { Panel, PanelGroup, PanelResizeHandle } from 'react-resizable-panels'; import { useParams } from 'react-router'; import * as reactUse from 'react-use'; +import type { Settings } from '~/insomnia-data'; import { OneLineEditor } from '~/ui/components/.client/codemirror/one-line-editor'; import { getContentTypeFromHeaders } from '../../../common/constants'; import * as models from '../../../models'; import { queryAllWorkspaceUrls } from '../../../models/helpers/query-all-workspace-urls'; import { getCombinedPathParametersFromUrl, type RequestParameter } from '../../../models/request'; -import type { Settings } from '../../../models/settings'; import { getAuthObjectOrNull } from '../../../network/authentication'; import { useWorkspaceLoaderData } from '../../../routes/organization.$organizationId.project.$projectId.workspace.$workspaceId'; import { diff --git a/packages/insomnia/src/ui/hooks/theme.ts b/packages/insomnia/src/ui/hooks/theme.ts index 08e6047ece..81f9d568bb 100644 --- a/packages/insomnia/src/ui/hooks/theme.ts +++ b/packages/insomnia/src/ui/hooks/theme.ts @@ -1,10 +1,10 @@ import { useCallback, useEffect, useState } from 'react'; import * as reactUse from 'react-use'; +import type { ThemeSettings } from '~/insomnia-data'; import { useRootLoaderData } from '~/root'; import { SegmentEvent } from '~/ui/analytics'; -import type { ThemeSettings } from '../../models/settings'; import { type ColorScheme, getThemes } from '../../plugins'; import { applyColorScheme, getColorScheme, type PluginTheme } from '../../plugins/misc'; import { useSettingsPatcher } from './use-request'; diff --git a/packages/insomnia/src/ui/hooks/use-request.ts b/packages/insomnia/src/ui/hooks/use-request.ts index b9fc10b692..537dd2fd7c 100644 --- a/packages/insomnia/src/ui/hooks/use-request.ts +++ b/packages/insomnia/src/ui/hooks/use-request.ts @@ -1,6 +1,6 @@ import { useParams } from 'react-router'; -import type { McpPayload, McpRequest } from '~/insomnia-data'; +import type { McpPayload, McpRequest, Settings } from '~/insomnia-data'; import { useRequestUpdateActionFetcher } from '~/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.$requestId.update'; import { useRequestUpdateMetaActionFetcher } from '~/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.$requestId.update-meta'; import { useRequestUpdatePayloadActionFetcher } from '~/routes/organization.$organizationId.project.$projectId.workspace.$workspaceId.debug.request.$requestId.update-payload'; @@ -15,7 +15,6 @@ import type { Request } from '../../models/request'; import type { RequestGroup } from '../../models/request-group'; import type { RequestGroupMeta } from '../../models/request-group-meta'; import type { RequestMeta } from '../../models/request-meta'; -import type { Settings } from '../../models/settings'; import type { SocketIOPayload } from '../../models/socket-io-payload'; import type { SocketIORequest } from '../../models/socket-io-request'; import type { WebSocketRequest } from '../../models/websocket-request'; diff --git a/packages/insomnia/src/ui/renderer-listeners.ts b/packages/insomnia/src/ui/renderer-listeners.ts index 37000897a8..791d631bb3 100644 --- a/packages/insomnia/src/ui/renderer-listeners.ts +++ b/packages/insomnia/src/ui/renderer-listeners.ts @@ -1,6 +1,6 @@ +import { services } from '~/insomnia-data'; import { type RAToastContent, showToast } from '~/ui/components/toast-notification'; -import * as models from '../models'; import * as plugins from '../plugins'; import * as themes from '../plugins/misc'; import * as templating from '../templating'; @@ -12,7 +12,7 @@ window.main.on('toggle-preferences', () => { }); window.main.on('reload-plugins', async () => { - const settings = await models.settings.get(); + const settings = await services.settings.get(); await plugins.reloadPlugins(); await themes.applyColorScheme(settings); templating.reload(); diff --git a/packages/insomnia/src/utils/vault.ts b/packages/insomnia/src/utils/vault.ts index db0a59284b..1093b7b95e 100644 --- a/packages/insomnia/src/utils/vault.ts +++ b/packages/insomnia/src/utils/vault.ts @@ -1,6 +1,7 @@ +import { services } from '~/insomnia-data'; + import { type AESMessage, decryptAES, encryptAES } from '../account/crypt'; import { getInsomniaVaultKey, PLAYWRIGHT } from '../common/constants'; -import * as settings from '../models/settings'; export const base64encode = (input: string | JsonWebKey) => { const inputStr = typeof input === 'string' ? input : JSON.stringify(input); @@ -45,7 +46,7 @@ export async function decryptVaultKeyFromSession(vaultKey: string, toJsonWebKey: const getVaultSecretKey = (accountId: string) => `vault_${accountId}`; export const saveVaultKeyIfNecessary = async (accountId: string, vaultKey: string) => { - const userSetting = await settings.getOrCreate(); + const userSetting = await services.settings.getOrCreate(); const { saveVaultKeyLocally } = userSetting; if (saveVaultKeyLocally) { await window.main.secretStorage.setSecret(getVaultSecretKey(accountId), vaultKey); diff --git a/packages/insomnia/types/codemirror.d.ts b/packages/insomnia/types/codemirror.d.ts index d61006a9f6..72c518a7c3 100644 --- a/packages/insomnia/types/codemirror.d.ts +++ b/packages/insomnia/types/codemirror.d.ts @@ -4,8 +4,9 @@ import { GraphQLInfoOptions } from 'codemirror-graphql/info'; import { ModifiedGraphQLJumpOptions } from 'codemirror-graphql/jump'; import { GraphQLSchema } from 'graphql'; +import type { Settings } from '~/insomnia-data'; + import { HandleRender } from '../src/common/render'; -import { Settings } from '../src/models/settings'; import { NunjucksParsedTag } from '../src/templating/utils'; type LinkClickCallback = (url: string) => void;