From 369e5d6c382bb2c537d3cb4b9437a724e0b3236c Mon Sep 17 00:00:00 2001 From: Greg Richardson Date: Tue, 10 Jun 2025 16:41:34 -0600 Subject: [PATCH] feat: self-hosted supabase stack --- packages/mcp-server-supabase/package.json | 3 + packages/mcp-server-supabase/src/logs.ts | 4 +- .../src/platform/local-platform.ts | 285 ++++++++++++ .../src/transports/stdio.ts | 37 +- packages/mcp-utils/src/server.ts | 24 + pnpm-lock.yaml | 430 ++++++++++++++++++ 6 files changed, 769 insertions(+), 14 deletions(-) create mode 100644 packages/mcp-server-supabase/src/platform/local-platform.ts diff --git a/packages/mcp-server-supabase/package.json b/packages/mcp-server-supabase/package.json index 01eec80..0f095af 100644 --- a/packages/mcp-server-supabase/package.json +++ b/packages/mcp-server-supabase/package.json @@ -50,7 +50,9 @@ "@modelcontextprotocol/sdk": "^1.11.0", "@supabase/mcp-utils": "workspace:^", "common-tags": "^1.8.2", + "dockerode": "^4.0.7", "graphql": "^16.11.0", + "js-toml": "^1.0.1", "openapi-fetch": "^0.13.5", "zod": "^3.24.1" }, @@ -59,6 +61,7 @@ "@electric-sql/pglite": "^0.2.17", "@total-typescript/tsconfig": "^1.0.4", "@types/common-tags": "^1.8.4", + "@types/dockerode": "^3.3.40", "@types/node": "^22.8.6", "@vitest/coverage-v8": "^2.1.9", "ai": "^4.3.4", diff --git a/packages/mcp-server-supabase/src/logs.ts b/packages/mcp-server-supabase/src/logs.ts index 28b3311..2128026 100644 --- a/packages/mcp-server-supabase/src/logs.ts +++ b/packages/mcp-server-supabase/src/logs.ts @@ -14,7 +14,7 @@ export function getLogQuery( switch (service) { case 'api': return stripIndent` - select id, identifier, timestamp, event_message, request.method, request.path, response.status_code + select id, timestamp, event_message, request.method, request.path, response.status_code from edge_logs cross join unnest(metadata) as m cross join unnest(m.request) as request @@ -30,7 +30,7 @@ export function getLogQuery( `; case 'postgres': return stripIndent` - select identifier, postgres_logs.timestamp, id, event_message, parsed.error_severity from postgres_logs + select postgres_logs.timestamp, id, event_message, parsed.error_severity from postgres_logs cross join unnest(metadata) as m cross join unnest(m.parsed) as parsed order by timestamp desc diff --git a/packages/mcp-server-supabase/src/platform/local-platform.ts b/packages/mcp-server-supabase/src/platform/local-platform.ts new file mode 100644 index 0000000..7bd2380 --- /dev/null +++ b/packages/mcp-server-supabase/src/platform/local-platform.ts @@ -0,0 +1,285 @@ +import type { InitData } from '@supabase/mcp-utils'; +import Docker from 'dockerode'; +import { load } from 'js-toml'; +import { readFile } from 'node:fs/promises'; +import { join } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { z } from 'zod'; +import type { + ApplyMigrationOptions, + DatabaseOperations, + DebuggingOperations, + DevelopmentOperations, + ExecuteSqlOptions, + SupabasePlatform, +} from './index.js'; + +export type SupabaseLocalPlatformOptions = { + /** + * The local Supabase project ID. This is found under the `project_id` key + * in the `supabase/config.toml` file of your local Supabase project. + * + * Defaults to the `project_id` for the Supabase project + * in the current working directory. Note that not all MCP clients + * expose the current working directory, so you may need to provide + * this ID explicitly. + * + * Make sure the local stack is running via `supabase start` before + * running the MCP server. + */ + projectId?: string; +}; + +/** + * Creates a Supabase platform implementation using the Supabase Management API. + */ +export function createSupabaseLocalPlatform( + options: SupabaseLocalPlatformOptions = {} +): SupabasePlatform { + const { projectId } = options; + + let studioUrl: string | undefined; + + const database: DatabaseOperations = { + async executeSql(projectId: string, options: ExecuteSqlOptions) { + // TODO: support read-only mode + + const response = await fetch( + `${studioUrl}/api/platform/pg-meta/${projectId}/query`, + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query: options.query, + }), + } + ); + + await assertSuccess(response, 'Failed to execute SQL query'); + + return await response.json(); + }, + async listMigrations(projectId: string) { + throw new Error('Method not implemented.'); + }, + async applyMigration(projectId: string, options: ApplyMigrationOptions) { + throw new Error('Method not implemented.'); + }, + }; + + const debugging: DebuggingOperations = { + async getLogs(projectId, options) { + // TODO: figure out why edge function logs produce an error + + const queryParams = new URLSearchParams(); + + queryParams.set('project', projectId); + queryParams.set('sql', options.sql); + if (options.iso_timestamp_start) { + queryParams.set('iso_timestamp_start', options.iso_timestamp_start); + } + if (options.iso_timestamp_end) { + queryParams.set('iso_timestamp_end', options.iso_timestamp_end); + } + + const url = new URL( + `/api/platform/projects/${projectId}/analytics/endpoints/logs.all`, + studioUrl + ); + + url.search = queryParams.toString(); + + const response = await fetch(url); + + await assertSuccess(response, 'Failed to retrieve logs'); + + return await response.json(); + }, + getPerformanceAdvisors(projectId) { + throw new Error( + 'Performance advisors are not yet supported in local Supabase stacks.' + ); + }, + getSecurityAdvisors(projectId) { + throw new Error( + 'Security advisors are not yet supported in local Supabase stacks.' + ); + }, + }; + + const development: DevelopmentOperations = { + async getProjectUrl(projectId) { + const response = await fetch( + `${studioUrl}/api/platform/projects/${projectId}/settings` + ); + + await assertSuccess(response, 'Failed to retrieve project settings'); + + const settings = await response.json(); + + const appConfig: { endpoint: string; protocol: string } = + settings.app_config; + + return `${appConfig.protocol}://${appConfig.endpoint}`; + }, + async getAnonKey(projectId) { + const response = await fetch( + `${studioUrl}/api/platform/projects/${projectId}/settings` + ); + + await assertSuccess(response, 'Failed to retrieve project settings'); + + const settings = await response.json(); + + const apiKeys: { api_key: string; name: string }[] = + settings.service_api_keys; + + const anonKey = apiKeys.find((key) => key.name === 'anon key'); + + if (!anonKey) { + throw new Error('Anon key not found in project settings'); + } + + return anonKey.api_key; + }, + async generateTypescriptTypes(projectId) { + const response = await fetch( + `${studioUrl}/api/v1/projects/${projectId}/types/typescript` + ); + + await assertSuccess(response, 'Failed to generate TypeScript types'); + + return await response.json(); + }, + }; + + const platform: SupabasePlatform = { + async init(info: InitData) { + try { + // If a local project ID is provided, we can use it directly + if (projectId) { + studioUrl = await getStudioUrl(projectId); + return; + } + + const projectPathCandidates: string[] = []; + + // If roots are provided, prioritize them first + if (info.roots) { + const fileRoots = info.roots + .filter((root) => new URL(root.uri).protocol === 'file:') + .map((root) => fileURLToPath(root.uri)); + + projectPathCandidates.push(...fileRoots); + } + + // Fallback to Cursor's custom WORKSPACE_FOLDER_PATHS environment variable + if (process.env.WORKSPACE_FOLDER_PATHS) { + projectPathCandidates.push(process.env.WORKSPACE_FOLDER_PATHS); + } + + // Then try the current working directory + projectPathCandidates.push(process.cwd()); + + console.error( + 'Found local Supabase project candidates:', + projectPathCandidates + ); + + // Lookup the studio URL for each candidate + const stacks = await Promise.all( + projectPathCandidates.map(async (path) => { + const projectId = await getProjectId(path).catch(() => undefined); + + if (!projectId) { + return undefined; + } + + const studioUrl = await getStudioUrl(projectId).catch( + () => undefined + ); + if (!studioUrl) { + return undefined; + } + + return { projectId, studioUrl }; + }) + ); + + // Pick the first defined studio URL + const stack = stacks.find((stack) => stack?.studioUrl !== undefined); + + if (!stack) { + console.error( + 'Could not infer the local Supabase project. Please pass the `project_id` from your config.toml to `--project-ref` and ensure the local Supabase stack is running via `supabase start`.' + ); + return; + } + + console.error('Identified local Supabase stack:', stack); + + studioUrl = stack.studioUrl; + } catch (error) { + console.error('Error initializing local Supabase platform:', error); + throw error; + } + }, + database, + debugging, + development, + }; + + return platform; +} + +const configSchema = z.object({ + project_id: z.string(), +}); + +async function getProjectId(projectPath: string) { + const configPath = join(projectPath, 'supabase', 'config.toml'); + const configContents = await readFile(configPath, 'utf8'); + const config = load(configContents); + const { project_id } = configSchema.parse(config); + return project_id; +} + +async function getStudioUrl(projectId: string) { + const docker = new Docker(); + + const containers = await docker.listContainers({ + all: true, + filters: { + label: [`com.supabase.cli.project=${projectId}`], + }, + }); + + const studioContainer = containers.find((container) => + container.Image.includes('supabase/studio') + ); + + if (!studioContainer) { + return undefined; + } + + const port = studioContainer.Ports.find((port) => port.PublicPort === 54323); + + if (!port) { + return undefined; + } + + return `http://localhost:${port.PublicPort}`; +} + +export async function assertSuccess( + response: Response, + fallbackMessage: string +) { + if (!response.ok) { + const result = await response.json().catch(() => null); + console.error('Response error:', result); + throw new Error(fallbackMessage); + } +} diff --git a/packages/mcp-server-supabase/src/transports/stdio.ts b/packages/mcp-server-supabase/src/transports/stdio.ts index e974296..ac5ef97 100644 --- a/packages/mcp-server-supabase/src/transports/stdio.ts +++ b/packages/mcp-server-supabase/src/transports/stdio.ts @@ -4,6 +4,7 @@ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js' import { parseArgs } from 'node:util'; import packageJson from '../../package.json' with { type: 'json' }; import { createSupabaseApiPlatform } from '../platform/api-platform.js'; +import { createSupabaseLocalPlatform } from '../platform/local-platform.js'; import { createSupabaseMcpServer } from '../server.js'; import { parseList } from './util.js'; @@ -14,6 +15,7 @@ async function main() { values: { ['access-token']: cliAccessToken, ['project-ref']: projectId, + ['local']: local, ['read-only']: readOnly, ['api-url']: apiUrl, ['version']: showVersion, @@ -27,6 +29,10 @@ async function main() { ['project-ref']: { type: 'string', }, + ['local']: { + type: 'boolean', + default: false, + }, ['read-only']: { type: 'boolean', default: false, @@ -48,25 +54,32 @@ async function main() { process.exit(0); } - const accessToken = cliAccessToken ?? process.env.SUPABASE_ACCESS_TOKEN; + function createPlatform() { + if (local) { + return createSupabaseLocalPlatform({ projectId }); + } + + const accessToken = cliAccessToken ?? process.env.SUPABASE_ACCESS_TOKEN; - if (!accessToken) { - console.error( - 'Please provide a personal access token (PAT) with the --access-token flag or set the SUPABASE_ACCESS_TOKEN environment variable' - ); - process.exit(1); + if (!accessToken) { + console.error( + 'Please provide a personal access token (PAT) with the --access-token flag or set the SUPABASE_ACCESS_TOKEN environment variable' + ); + process.exit(1); + } + + return createSupabaseApiPlatform({ + accessToken, + apiUrl: apiUrl ?? 'https://api.supabase.io', + }); } + const platform = createPlatform(); const features = cliFeatures ? parseList(cliFeatures) : undefined; - const platform = createSupabaseApiPlatform({ - accessToken, - apiUrl, - }); - const server = createSupabaseMcpServer({ platform, - projectId, + projectId: local ? 'default' : projectId, readOnly, features, }); diff --git a/packages/mcp-utils/src/server.ts b/packages/mcp-utils/src/server.ts index 7ba44f9..e41b56b 100644 --- a/packages/mcp-utils/src/server.ts +++ b/packages/mcp-utils/src/server.ts @@ -165,9 +165,15 @@ export function tool, Result>( return tool; } +export type Root = { + uri: string; + name?: string; +}; + export type InitData = { clientInfo: Implementation; clientCapabilities: ClientCapabilities; + roots?: Root[]; }; export type InitCallback = (initData: InitData) => void | Promise; @@ -276,9 +282,27 @@ export function createMcpServer(options: McpServerOptions) { throw new Error('client capabilities not available after initialization'); } + let roots: Root[] | undefined; + + if (clientCapabilities.roots) { + const { roots: r, error } = await server + .listRoots() + .catch((error) => ({ roots: undefined, error })); + + if (error) { + console.error( + `MCP client '${clientInfo.name}/${clientInfo.version}' advertised 'roots' capability, but fetching roots failed:`, + error.message + ); + } + + roots = r; + } + const initData: InitData = { clientInfo, clientCapabilities, + roots, }; await options.onInitialize?.(initData); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d0e728f..5d5e26f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -72,9 +72,15 @@ importers: common-tags: specifier: ^1.8.2 version: 1.8.2 + dockerode: + specifier: ^4.0.7 + version: 4.0.8 graphql: specifier: ^16.11.0 version: 16.11.0 + js-toml: + specifier: ^1.0.1 + version: 1.0.2 openapi-fetch: specifier: ^0.13.5 version: 0.13.8 @@ -94,6 +100,9 @@ importers: '@types/common-tags': specifier: ^1.8.4 version: 1.8.4 + '@types/dockerode': + specifier: ^3.3.40 + version: 3.3.43 '@types/node': specifier: ^22.8.6 version: 22.17.2 @@ -226,10 +235,17 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/runtime-corejs3@7.28.4': + resolution: {integrity: sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==} + engines: {node: '>=6.9.0'} + '@babel/types@7.28.2': resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} + '@balena/dockerignore@1.0.2': + resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -298,6 +314,21 @@ packages: '@bundled-es-modules/tough-cookie@0.1.6': resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} + '@chevrotain/cst-dts-gen@11.0.3': + resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==} + + '@chevrotain/gast@11.0.3': + resolution: {integrity: sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==} + + '@chevrotain/regexp-to-ast@11.0.3': + resolution: {integrity: sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==} + + '@chevrotain/types@11.0.3': + resolution: {integrity: sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==} + + '@chevrotain/utils@11.0.3': + resolution: {integrity: sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==} + '@electric-sql/pglite@0.2.17': resolution: {integrity: sha512-qEpKRT2oUaWDH6tjRxLHjdzMqRUGYDnGZlKrnL4dJ77JVMcP2Hpo3NYnOSPKdZdeec57B6QPprCUFg0picx5Pw==} @@ -595,6 +626,15 @@ packages: cpu: [x64] os: [win32] + '@grpc/grpc-js@1.13.4': + resolution: {integrity: sha512-GsFaMXCkMqkKIvwCQjCrwH+GHbPKBjhwo/8ZuUkWHqbI73Kky9I+pQltrlT0+MWpedCoosda53lgjYfyEPgxBg==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.7.15': + resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} + engines: {node: '>=6'} + hasBin: true + '@inquirer/confirm@5.1.15': resolution: {integrity: sha512-SwHMGa8Z47LawQN0rog0sT+6JpiL0B7eW9p1Bb7iCeKDGTI5Ez25TSc2l8kw52VV7hA4sX/C78CGkMrKXfuspA==} engines: {node: '>=18'} @@ -651,6 +691,9 @@ packages: '@jridgewell/trace-mapping@0.3.30': resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + '@mjackson/headers@0.11.1': resolution: {integrity: sha512-uXXhd4rtDdDwkqAuGef1nuafkCa1NlTmEc1Jzc0NL4YiA1yON1NFXuqJ3hOuKvNKQwkiDwdD+JJlKVyz4dunFA==} @@ -682,6 +725,36 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@redocly/ajv@8.11.3': resolution: {integrity: sha512-4P3iZse91TkBiY+Dx5DUgxQ9GXkVJf++cmI0MOyLDxV9b5MUBI4II6ES8zA5JCbO72nKAJxWrw4PUPW+YP3ZDQ==} @@ -817,12 +890,24 @@ packages: '@types/diff-match-patch@1.0.36': resolution: {integrity: sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==} + '@types/docker-modem@3.0.6': + resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==} + + '@types/dockerode@3.3.43': + resolution: {integrity: sha512-YCi0aKKpKeC9dhKTbuglvsWDnAyuIITd6CCJSTKiAdbDzPH4RWu0P9IK2XkJHdyplH6mzYtDYO+gB06JlzcPxg==} + '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + '@types/node@18.19.125': + resolution: {integrity: sha512-4TWNu0IxTQcszliYdW2mxrVvhHeERUeDCUwVuvQFn9JCU02kxrUDs8v52yOazPo7wLHKgqEd2FKxlSN6m8Deqg==} + '@types/node@22.17.2': resolution: {integrity: sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w==} + '@types/ssh2@1.15.5': + resolution: {integrity: sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==} + '@types/statuses@2.0.6': resolution: {integrity: sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==} @@ -923,6 +1008,9 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -930,10 +1018,19 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + bin-links@5.0.0: resolution: {integrity: sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA==} engines: {node: ^18.17.0 || >=20.5.0} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + body-parser@2.2.0: resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} engines: {node: '>=18'} @@ -941,6 +1038,13 @@ packages: brace-expansion@2.0.2: resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buildcheck@0.0.6: + resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==} + engines: {node: '>=10.0.0'} + bundle-require@5.1.0: resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -978,10 +1082,16 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + chevrotain@11.0.3: + resolution: {integrity: sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==} + chokidar@4.0.3: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} @@ -1039,10 +1149,17 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} + core-js-pure@3.45.1: + resolution: {integrity: sha512-OHnWFKgTUshEU8MK+lOs1H8kC8GkTi9Z1tvNkxrCcw9wl3MJIO7q2ld77wjWn4/xuGrVu2X+nME1iIIPBSdyEQ==} + cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} + cpu-features@0.0.10: + resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} + engines: {node: '>=10.0.0'} + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -1078,6 +1195,14 @@ packages: diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} + docker-modem@5.0.6: + resolution: {integrity: sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==} + engines: {node: '>= 8.0'} + + dockerode@4.0.8: + resolution: {integrity: sha512-HdPBprWmwfHMHi12AVIFDhXIqIS+EpiOVkZaAZxgML4xf5McqEZjJZtahTPkLDxWOt84ApfWPAH9EoQwOiaAIQ==} + engines: {node: '>= 8.0'} + dotenv@16.6.1: resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} @@ -1102,6 +1227,9 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} engines: {node: '>= 0.4'} @@ -1205,6 +1333,9 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1270,6 +1401,9 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -1328,6 +1462,9 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-toml@1.0.2: + resolution: {integrity: sha512-/7IQ//bzn2a/5IDazPUNzlW7bsjxS51cxciYZDR+Z+3Le60yzT0YfI8KOWqTtBcZkXXVklhWd2OuGd8ZksB0wQ==} + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -1357,9 +1494,18 @@ packages: resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + loupe@3.2.0: resolution: {integrity: sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==} @@ -1412,6 +1558,9 @@ packages: resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} engines: {node: '>= 18'} + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} @@ -1440,6 +1589,9 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nan@2.23.0: + resolution: {integrity: sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==} + nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1586,6 +1738,10 @@ packages: resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} engines: {node: ^18.17.0 || >=20.5.0} + protobufjs@7.5.4: + resolution: {integrity: sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg==} + engines: {node: '>=12.0.0'} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -1593,6 +1749,9 @@ packages: psl@1.15.0: resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -1620,6 +1779,10 @@ packages: resolution: {integrity: sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw==} engines: {node: ^18.17.0 || >=20.5.0} + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + readdirp@4.1.2: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} @@ -1716,6 +1879,13 @@ packages: engines: {node: '>= 8'} deprecated: The work that was done in this beta branch won't be included in future versions + split-ca@1.0.1: + resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} + + ssh2@1.17.0: + resolution: {integrity: sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ==} + engines: {node: '>=10.16.0'} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -1741,6 +1911,9 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -1772,6 +1945,13 @@ packages: peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + tar-fs@2.1.3: + resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + tar@7.4.3: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} @@ -1858,6 +2038,9 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -1878,6 +2061,9 @@ packages: ufo@1.6.1: resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -1903,6 +2089,13 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -2013,6 +2206,9 @@ packages: resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} engines: {node: ^18.17.0 || >=20.5.0} + xregexp@5.1.2: + resolution: {integrity: sha512-6hGgEMCGhqCTFEJbqmWrNIPqfpdirdGWkqshu7fFZddmTSfgv5Sn9D2SaKloR79s5VUiUlpwzg3CM3G6D3VIlw==} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -2099,11 +2295,17 @@ snapshots: dependencies: '@babel/types': 7.28.2 + '@babel/runtime-corejs3@7.28.4': + dependencies: + core-js-pure: 3.45.1 + '@babel/types@7.28.2': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@balena/dockerignore@1.0.2': {} + '@bcoe/v8-coverage@0.2.3': {} '@biomejs/biome@1.9.4': @@ -2156,6 +2358,23 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 + '@chevrotain/cst-dts-gen@11.0.3': + dependencies: + '@chevrotain/gast': 11.0.3 + '@chevrotain/types': 11.0.3 + lodash-es: 4.17.21 + + '@chevrotain/gast@11.0.3': + dependencies: + '@chevrotain/types': 11.0.3 + lodash-es: 4.17.21 + + '@chevrotain/regexp-to-ast@11.0.3': {} + + '@chevrotain/types@11.0.3': {} + + '@chevrotain/utils@11.0.3': {} + '@electric-sql/pglite@0.2.17': {} '@esbuild/aix-ppc64@0.21.5': @@ -2305,6 +2524,18 @@ snapshots: '@esbuild/win32-x64@0.25.9': optional: true + '@grpc/grpc-js@1.13.4': + dependencies: + '@grpc/proto-loader': 0.7.15 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.7.15': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.5.4 + yargs: 17.7.2 + '@inquirer/confirm@5.1.15(@types/node@22.17.2)': dependencies: '@inquirer/core': 10.1.15(@types/node@22.17.2) @@ -2360,6 +2591,8 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@js-sdsl/ordered-map@4.4.2': {} + '@mjackson/headers@0.11.1': {} '@mjackson/multipart-parser@0.10.1': @@ -2406,6 +2639,29 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + '@redocly/ajv@8.11.3': dependencies: fast-deep-equal: 3.1.3 @@ -2515,12 +2771,31 @@ snapshots: '@types/diff-match-patch@1.0.36': {} + '@types/docker-modem@3.0.6': + dependencies: + '@types/node': 22.17.2 + '@types/ssh2': 1.15.5 + + '@types/dockerode@3.3.43': + dependencies: + '@types/docker-modem': 3.0.6 + '@types/node': 22.17.2 + '@types/ssh2': 1.15.5 + '@types/estree@1.0.8': {} + '@types/node@18.19.125': + dependencies: + undici-types: 5.26.5 + '@types/node@22.17.2': dependencies: undici-types: 6.21.0 + '@types/ssh2@1.15.5': + dependencies: + '@types/node': 18.19.125 + '@types/statuses@2.0.6': {} '@types/tough-cookie@4.0.5': {} @@ -2632,10 +2907,20 @@ snapshots: argparse@2.0.1: {} + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + assertion-error@2.0.1: {} balanced-match@1.0.2: {} + base64-js@1.5.1: {} + + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + bin-links@5.0.0: dependencies: cmd-shim: 7.0.0 @@ -2644,6 +2929,12 @@ snapshots: read-cmd-shim: 5.0.0 write-file-atomic: 6.0.0 + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + body-parser@2.2.0: dependencies: bytes: 3.1.2 @@ -2662,6 +2953,14 @@ snapshots: dependencies: balanced-match: 1.0.2 + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buildcheck@0.0.6: + optional: true + bundle-require@5.1.0(esbuild@0.25.9): dependencies: esbuild: 0.25.9 @@ -2695,10 +2994,21 @@ snapshots: check-error@2.1.1: {} + chevrotain@11.0.3: + dependencies: + '@chevrotain/cst-dts-gen': 11.0.3 + '@chevrotain/gast': 11.0.3 + '@chevrotain/regexp-to-ast': 11.0.3 + '@chevrotain/types': 11.0.3 + '@chevrotain/utils': 11.0.3 + lodash-es: 4.17.21 + chokidar@4.0.3: dependencies: readdirp: 4.1.2 + chownr@1.1.4: {} + chownr@3.0.0: {} cli-width@4.1.0: {} @@ -2737,11 +3047,19 @@ snapshots: cookie@0.7.2: {} + core-js-pure@3.45.1: {} + cors@2.8.5: dependencies: object-assign: 4.1.1 vary: 1.1.2 + cpu-features@0.0.10: + dependencies: + buildcheck: 0.0.6 + nan: 2.23.0 + optional: true + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -2766,6 +3084,27 @@ snapshots: diff-match-patch@1.0.5: {} + docker-modem@5.0.6: + dependencies: + debug: 4.4.1(supports-color@10.2.0) + readable-stream: 3.6.2 + split-ca: 1.0.1 + ssh2: 1.17.0 + transitivePeerDependencies: + - supports-color + + dockerode@4.0.8: + dependencies: + '@balena/dockerignore': 1.0.2 + '@grpc/grpc-js': 1.13.4 + '@grpc/proto-loader': 0.7.15 + docker-modem: 5.0.6 + protobufjs: 7.5.4 + tar-fs: 2.1.3 + uuid: 10.0.0 + transitivePeerDependencies: + - supports-color + dotenv@16.6.1: {} dunder-proto@1.0.1: @@ -2784,6 +3123,10 @@ snapshots: encodeurl@2.0.0: {} + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + es-define-property@1.0.1: {} es-errors@1.3.0: {} @@ -2946,6 +3289,8 @@ snapshots: fresh@2.0.0: {} + fs-constants@1.0.0: {} + fsevents@2.3.3: optional: true @@ -3019,6 +3364,8 @@ snapshots: dependencies: safer-buffer: 2.1.2 + ieee754@1.2.1: {} + imurmurhash@0.1.4: {} index-to-position@1.1.0: {} @@ -3068,6 +3415,11 @@ snapshots: js-tokens@4.0.0: {} + js-toml@1.0.2: + dependencies: + chevrotain: 11.0.3 + xregexp: 5.1.2 + js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -3090,8 +3442,14 @@ snapshots: load-tsconfig@0.2.5: {} + lodash-es@4.17.21: {} + + lodash.camelcase@4.3.0: {} + lodash.sortby@4.7.0: {} + long@5.3.2: {} + loupe@3.2.0: {} lru-cache@10.4.3: {} @@ -3136,6 +3494,8 @@ snapshots: dependencies: minipass: 7.1.2 + mkdirp-classic@0.5.3: {} + mkdirp@3.0.1: {} mlly@1.7.4: @@ -3180,6 +3540,9 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 + nan@2.23.0: + optional: true + nanoid@3.3.11: {} nanoid@5.1.5: {} @@ -3286,6 +3649,21 @@ snapshots: proc-log@5.0.0: {} + protobufjs@7.5.4: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 22.17.2 + long: 5.3.2 + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -3295,6 +3673,11 @@ snapshots: dependencies: punycode: 2.3.1 + pump@3.0.3: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + punycode@2.3.1: {} qs@6.14.0: @@ -3316,6 +3699,12 @@ snapshots: read-cmd-shim@5.0.0: {} + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + readdirp@4.1.2: {} require-directory@2.1.1: {} @@ -3443,6 +3832,16 @@ snapshots: dependencies: whatwg-url: 7.1.0 + split-ca@1.0.1: {} + + ssh2@1.17.0: + dependencies: + asn1: 0.2.6 + bcrypt-pbkdf: 1.0.2 + optionalDependencies: + cpu-features: 0.0.10 + nan: 2.23.0 + stackback@0.0.2: {} statuses@2.0.1: {} @@ -3465,6 +3864,10 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -3504,6 +3907,21 @@ snapshots: react: 19.1.1 use-sync-external-store: 1.5.0(react@19.1.1) + tar-fs@2.1.3: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.3 + tar-stream: 2.2.0 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + tar@7.4.3: dependencies: '@isaacs/fs-minipass': 4.0.1 @@ -3598,6 +4016,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + tweetnacl@0.14.5: {} + type-fest@0.21.3: {} type-fest@4.41.0: {} @@ -3612,6 +4032,8 @@ snapshots: ufo@1.6.1: {} + undici-types@5.26.5: {} + undici-types@6.21.0: {} universalify@0.2.0: {} @@ -3633,6 +4055,10 @@ snapshots: dependencies: react: 19.1.1 + util-deprecate@1.0.2: {} + + uuid@10.0.0: {} + vary@1.1.2: {} vite-node@2.1.9(@types/node@22.17.2): @@ -3748,6 +4174,10 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 + xregexp@5.1.2: + dependencies: + '@babel/runtime-corejs3': 7.28.4 + y18n@5.0.8: {} yallist@5.0.0: {}