chore: upgrade npm packages (#5951)

This commit is contained in:
Zane
2025-12-02 10:44:25 -08:00
committed by GitHub
parent 131c7e7228
commit 039a845c42
9 changed files with 1516 additions and 1893 deletions
+34 -1
View File
@@ -95,7 +95,40 @@ export const createClient = (config: Config = {}): Client => {
// fetch must be assigned here, otherwise it would throw the error:
// TypeError: Failed to execute 'fetch' on 'Window': Illegal invocation
const _fetch = opts.fetch!;
let response = await _fetch(request);
let response: Response;
try {
response = await _fetch(request);
} catch (error) {
// Handle fetch exceptions (AbortError, network errors, etc.)
let finalError = error;
for (const fn of interceptors.error.fns) {
if (fn) {
finalError = (await fn(
error,
undefined as any,
request,
opts,
)) as unknown;
}
}
finalError = finalError || ({} as unknown);
if (opts.throwOnError) {
throw finalError;
}
// Return error response
return opts.responseStyle === 'data'
? undefined
: {
error: finalError,
request,
response: undefined as any,
};
}
for (const fn of interceptors.response.fns) {
if (fn) {
-1
View File
@@ -16,7 +16,6 @@ export type {
Config,
CreateClientConfig,
Options,
OptionsLegacyParser,
RequestOptions,
RequestResult,
ResolvedRequestOptions,
+2 -29
View File
@@ -194,7 +194,7 @@ type BuildUrlFn = <
url: string;
},
>(
options: Pick<TData, 'url'> & Options<TData>,
options: TData & Options<TData>,
) => string;
export type Client = CoreClient<
@@ -238,31 +238,4 @@ export type Options<
RequestOptions<TResponse, TResponseStyle, ThrowOnError>,
'body' | 'path' | 'query' | 'url'
> &
Omit<TData, 'url'>;
export type OptionsLegacyParser<
TData = unknown,
ThrowOnError extends boolean = boolean,
TResponseStyle extends ResponseStyle = 'fields',
> = TData extends { body?: any }
? TData extends { headers?: any }
? OmitKeys<
RequestOptions<unknown, TResponseStyle, ThrowOnError>,
'body' | 'headers' | 'url'
> &
TData
: OmitKeys<
RequestOptions<unknown, TResponseStyle, ThrowOnError>,
'body' | 'url'
> &
TData &
Pick<RequestOptions<unknown, TResponseStyle, ThrowOnError>, 'headers'>
: TData extends { headers?: any }
? OmitKeys<
RequestOptions<unknown, TResponseStyle, ThrowOnError>,
'headers' | 'url'
> &
TData &
Pick<RequestOptions<unknown, TResponseStyle, ThrowOnError>, 'body'>
: OmitKeys<RequestOptions<unknown, TResponseStyle, ThrowOnError>, 'url'> &
TData;
([TData] extends [never] ? unknown : Omit<TData, 'url'>);
+9 -8
View File
@@ -12,9 +12,8 @@ import { getUrl } from '../core/utils.gen';
import type { Client, ClientOptions, Config, RequestOptions } from './types.gen';
export const createQuerySerializer = <T = unknown>({
allowReserved,
array,
object,
parameters = {},
...args
}: QuerySerializerOptions = {}) => {
const querySerializer = (queryParams: T) => {
const search: string[] = [];
@@ -26,29 +25,31 @@ export const createQuerySerializer = <T = unknown>({
continue;
}
const options = parameters[name] || args;
if (Array.isArray(value)) {
const serializedArray = serializeArrayParam({
allowReserved,
allowReserved: options.allowReserved,
explode: true,
name,
style: 'form',
value,
...array,
...options.array,
});
if (serializedArray) search.push(serializedArray);
} else if (typeof value === 'object') {
const serializedObject = serializeObjectParam({
allowReserved,
allowReserved: options.allowReserved,
explode: true,
name,
style: 'deepObject',
value: value as Record<string, unknown>,
...object,
...options.object,
});
if (serializedObject) search.push(serializedObject);
} else {
const serializedPrimitive = serializePrimitiveParam({
allowReserved,
allowReserved: options.allowReserved,
name,
value: value as string,
});
+12 -4
View File
@@ -10,11 +10,19 @@ export type QuerySerializer = (query: Record<string, unknown>) => string;
export type BodySerializer = (body: any) => any;
export interface QuerySerializerOptions {
type QuerySerializerOptionsObject = {
allowReserved?: boolean;
array?: SerializerOptions<ArrayStyle>;
object?: SerializerOptions<ObjectStyle>;
}
array?: Partial<SerializerOptions<ArrayStyle>>;
object?: Partial<SerializerOptions<ObjectStyle>>;
};
export type QuerySerializerOptions = QuerySerializerOptionsObject & {
/**
* Per-parameter serialization overrides. When provided, these settings
* override the global array/object settings for specific parameter names.
*/
parameters?: Record<string, QuerySerializerOptionsObject>;
};
const serializeFormDataPair = (
data: FormData,
+34 -11
View File
@@ -22,6 +22,17 @@ export type Field =
*/
key?: string;
map?: string;
}
| {
/**
* Field name. This is the name we want the user to see and use.
*/
key: string;
/**
* Field mapped name. This is the name we want to use in the request.
* If `in` is omitted, `map` aliases `key` to the transport layer.
*/
map: Slot;
};
export interface Fields {
@@ -41,10 +52,14 @@ const extraPrefixes = Object.entries(extraPrefixesMap);
type KeyMap = Map<
string,
{
in: Slot;
map?: string;
}
| {
in: Slot;
map?: string;
}
| {
in?: never;
map: Slot;
}
>;
const buildKeyMap = (fields: FieldsConfig, map?: KeyMap): KeyMap => {
@@ -60,6 +75,10 @@ const buildKeyMap = (fields: FieldsConfig, map?: KeyMap): KeyMap => {
map: config.map,
});
}
} else if ('key' in config) {
map.set(config.key, {
map: config.map,
});
} else if (config.args) {
buildKeyMap(config.args, map);
}
@@ -111,7 +130,9 @@ export const buildClientParams = (
if (config.key) {
const field = map.get(config.key)!;
const name = field.map || config.key;
(params[field.in] as Record<string, unknown>)[name] = arg;
if (field.in) {
(params[field.in] as Record<string, unknown>)[name] = arg;
}
} else {
params.body = arg;
}
@@ -120,8 +141,12 @@ export const buildClientParams = (
const field = map.get(key);
if (field) {
const name = field.map || key;
(params[field.in] as Record<string, unknown>)[name] = value;
if (field.in) {
const name = field.map || key;
(params[field.in] as Record<string, unknown>)[name] = value;
} else {
params[field.map] = value;
}
} else {
const extra = extraPrefixes.find(([prefix]) =>
key.startsWith(prefix),
@@ -132,10 +157,8 @@ export const buildClientParams = (
(params[slot] as Record<string, unknown>)[
key.slice(prefix.length)
] = value;
} else {
for (const [slot, allowed] of Object.entries(
config.allowExtra ?? {},
)) {
} else if ('allowExtra' in config && config.allowExtra) {
for (const [slot, allowed] of Object.entries(config.allowExtra)) {
if (allowed) {
(params[slot as Slot] as Record<string, unknown>)[key] = value;
break;
+299 -540
View File
@@ -18,619 +18,378 @@ export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends
meta?: Record<string, unknown>;
};
export const confirmToolAction = <ThrowOnError extends boolean = false>(options: Options<ConfirmToolActionData, ThrowOnError>) => {
return (options.client ?? client).post<ConfirmToolActionResponses, ConfirmToolActionErrors, ThrowOnError>({
url: '/action-required/tool-confirmation',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const confirmToolAction = <ThrowOnError extends boolean = false>(options: Options<ConfirmToolActionData, ThrowOnError>) => (options.client ?? client).post<ConfirmToolActionResponses, ConfirmToolActionErrors, ThrowOnError>({
url: '/action-required/tool-confirmation',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const agentAddExtension = <ThrowOnError extends boolean = false>(options: Options<AgentAddExtensionData, ThrowOnError>) => {
return (options.client ?? client).post<AgentAddExtensionResponses, AgentAddExtensionErrors, ThrowOnError>({
url: '/agent/add_extension',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const agentAddExtension = <ThrowOnError extends boolean = false>(options: Options<AgentAddExtensionData, ThrowOnError>) => (options.client ?? client).post<AgentAddExtensionResponses, AgentAddExtensionErrors, ThrowOnError>({
url: '/agent/add_extension',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const agentRemoveExtension = <ThrowOnError extends boolean = false>(options: Options<AgentRemoveExtensionData, ThrowOnError>) => {
return (options.client ?? client).post<AgentRemoveExtensionResponses, AgentRemoveExtensionErrors, ThrowOnError>({
url: '/agent/remove_extension',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const agentRemoveExtension = <ThrowOnError extends boolean = false>(options: Options<AgentRemoveExtensionData, ThrowOnError>) => (options.client ?? client).post<AgentRemoveExtensionResponses, AgentRemoveExtensionErrors, ThrowOnError>({
url: '/agent/remove_extension',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const resumeAgent = <ThrowOnError extends boolean = false>(options: Options<ResumeAgentData, ThrowOnError>) => {
return (options.client ?? client).post<ResumeAgentResponses, ResumeAgentErrors, ThrowOnError>({
url: '/agent/resume',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const resumeAgent = <ThrowOnError extends boolean = false>(options: Options<ResumeAgentData, ThrowOnError>) => (options.client ?? client).post<ResumeAgentResponses, ResumeAgentErrors, ThrowOnError>({
url: '/agent/resume',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const startAgent = <ThrowOnError extends boolean = false>(options: Options<StartAgentData, ThrowOnError>) => {
return (options.client ?? client).post<StartAgentResponses, StartAgentErrors, ThrowOnError>({
url: '/agent/start',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const startAgent = <ThrowOnError extends boolean = false>(options: Options<StartAgentData, ThrowOnError>) => (options.client ?? client).post<StartAgentResponses, StartAgentErrors, ThrowOnError>({
url: '/agent/start',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const getTools = <ThrowOnError extends boolean = false>(options: Options<GetToolsData, ThrowOnError>) => {
return (options.client ?? client).get<GetToolsResponses, GetToolsErrors, ThrowOnError>({
url: '/agent/tools',
...options
});
};
export const getTools = <ThrowOnError extends boolean = false>(options: Options<GetToolsData, ThrowOnError>) => (options.client ?? client).get<GetToolsResponses, GetToolsErrors, ThrowOnError>({ url: '/agent/tools', ...options });
export const updateFromSession = <ThrowOnError extends boolean = false>(options: Options<UpdateFromSessionData, ThrowOnError>) => {
return (options.client ?? client).post<UpdateFromSessionResponses, UpdateFromSessionErrors, ThrowOnError>({
url: '/agent/update_from_session',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const updateFromSession = <ThrowOnError extends boolean = false>(options: Options<UpdateFromSessionData, ThrowOnError>) => (options.client ?? client).post<UpdateFromSessionResponses, UpdateFromSessionErrors, ThrowOnError>({
url: '/agent/update_from_session',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const updateAgentProvider = <ThrowOnError extends boolean = false>(options: Options<UpdateAgentProviderData, ThrowOnError>) => {
return (options.client ?? client).post<UpdateAgentProviderResponses, UpdateAgentProviderErrors, ThrowOnError>({
url: '/agent/update_provider',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const updateAgentProvider = <ThrowOnError extends boolean = false>(options: Options<UpdateAgentProviderData, ThrowOnError>) => (options.client ?? client).post<UpdateAgentProviderResponses, UpdateAgentProviderErrors, ThrowOnError>({
url: '/agent/update_provider',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const updateRouterToolSelector = <ThrowOnError extends boolean = false>(options: Options<UpdateRouterToolSelectorData, ThrowOnError>) => {
return (options.client ?? client).post<UpdateRouterToolSelectorResponses, UpdateRouterToolSelectorErrors, ThrowOnError>({
url: '/agent/update_router_tool_selector',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const updateRouterToolSelector = <ThrowOnError extends boolean = false>(options: Options<UpdateRouterToolSelectorData, ThrowOnError>) => (options.client ?? client).post<UpdateRouterToolSelectorResponses, UpdateRouterToolSelectorErrors, ThrowOnError>({
url: '/agent/update_router_tool_selector',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const readAllConfig = <ThrowOnError extends boolean = false>(options?: Options<ReadAllConfigData, ThrowOnError>) => {
return (options?.client ?? client).get<ReadAllConfigResponses, unknown, ThrowOnError>({
url: '/config',
...options
});
};
export const readAllConfig = <ThrowOnError extends boolean = false>(options?: Options<ReadAllConfigData, ThrowOnError>) => (options?.client ?? client).get<ReadAllConfigResponses, unknown, ThrowOnError>({ url: '/config', ...options });
export const backupConfig = <ThrowOnError extends boolean = false>(options?: Options<BackupConfigData, ThrowOnError>) => {
return (options?.client ?? client).post<BackupConfigResponses, BackupConfigErrors, ThrowOnError>({
url: '/config/backup',
...options
});
};
export const backupConfig = <ThrowOnError extends boolean = false>(options?: Options<BackupConfigData, ThrowOnError>) => (options?.client ?? client).post<BackupConfigResponses, BackupConfigErrors, ThrowOnError>({ url: '/config/backup', ...options });
export const checkProvider = <ThrowOnError extends boolean = false>(options: Options<CheckProviderData, ThrowOnError>) => {
return (options.client ?? client).post<unknown, unknown, ThrowOnError>({
url: '/config/check_provider',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const checkProvider = <ThrowOnError extends boolean = false>(options: Options<CheckProviderData, ThrowOnError>) => (options.client ?? client).post<unknown, unknown, ThrowOnError>({
url: '/config/check_provider',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const createCustomProvider = <ThrowOnError extends boolean = false>(options: Options<CreateCustomProviderData, ThrowOnError>) => {
return (options.client ?? client).post<CreateCustomProviderResponses, CreateCustomProviderErrors, ThrowOnError>({
url: '/config/custom-providers',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const createCustomProvider = <ThrowOnError extends boolean = false>(options: Options<CreateCustomProviderData, ThrowOnError>) => (options.client ?? client).post<CreateCustomProviderResponses, CreateCustomProviderErrors, ThrowOnError>({
url: '/config/custom-providers',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const removeCustomProvider = <ThrowOnError extends boolean = false>(options: Options<RemoveCustomProviderData, ThrowOnError>) => {
return (options.client ?? client).delete<RemoveCustomProviderResponses, RemoveCustomProviderErrors, ThrowOnError>({
url: '/config/custom-providers/{id}',
...options
});
};
export const removeCustomProvider = <ThrowOnError extends boolean = false>(options: Options<RemoveCustomProviderData, ThrowOnError>) => (options.client ?? client).delete<RemoveCustomProviderResponses, RemoveCustomProviderErrors, ThrowOnError>({ url: '/config/custom-providers/{id}', ...options });
export const getCustomProvider = <ThrowOnError extends boolean = false>(options: Options<GetCustomProviderData, ThrowOnError>) => {
return (options.client ?? client).get<GetCustomProviderResponses, GetCustomProviderErrors, ThrowOnError>({
url: '/config/custom-providers/{id}',
...options
});
};
export const getCustomProvider = <ThrowOnError extends boolean = false>(options: Options<GetCustomProviderData, ThrowOnError>) => (options.client ?? client).get<GetCustomProviderResponses, GetCustomProviderErrors, ThrowOnError>({ url: '/config/custom-providers/{id}', ...options });
export const updateCustomProvider = <ThrowOnError extends boolean = false>(options: Options<UpdateCustomProviderData, ThrowOnError>) => {
return (options.client ?? client).put<UpdateCustomProviderResponses, UpdateCustomProviderErrors, ThrowOnError>({
url: '/config/custom-providers/{id}',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const updateCustomProvider = <ThrowOnError extends boolean = false>(options: Options<UpdateCustomProviderData, ThrowOnError>) => (options.client ?? client).put<UpdateCustomProviderResponses, UpdateCustomProviderErrors, ThrowOnError>({
url: '/config/custom-providers/{id}',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const getExtensions = <ThrowOnError extends boolean = false>(options?: Options<GetExtensionsData, ThrowOnError>) => {
return (options?.client ?? client).get<GetExtensionsResponses, GetExtensionsErrors, ThrowOnError>({
url: '/config/extensions',
...options
});
};
export const getExtensions = <ThrowOnError extends boolean = false>(options?: Options<GetExtensionsData, ThrowOnError>) => (options?.client ?? client).get<GetExtensionsResponses, GetExtensionsErrors, ThrowOnError>({ url: '/config/extensions', ...options });
export const addExtension = <ThrowOnError extends boolean = false>(options: Options<AddExtensionData, ThrowOnError>) => {
return (options.client ?? client).post<AddExtensionResponses, AddExtensionErrors, ThrowOnError>({
url: '/config/extensions',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const addExtension = <ThrowOnError extends boolean = false>(options: Options<AddExtensionData, ThrowOnError>) => (options.client ?? client).post<AddExtensionResponses, AddExtensionErrors, ThrowOnError>({
url: '/config/extensions',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const removeExtension = <ThrowOnError extends boolean = false>(options: Options<RemoveExtensionData, ThrowOnError>) => {
return (options.client ?? client).delete<RemoveExtensionResponses, RemoveExtensionErrors, ThrowOnError>({
url: '/config/extensions/{name}',
...options
});
};
export const removeExtension = <ThrowOnError extends boolean = false>(options: Options<RemoveExtensionData, ThrowOnError>) => (options.client ?? client).delete<RemoveExtensionResponses, RemoveExtensionErrors, ThrowOnError>({ url: '/config/extensions/{name}', ...options });
export const initConfig = <ThrowOnError extends boolean = false>(options?: Options<InitConfigData, ThrowOnError>) => {
return (options?.client ?? client).post<InitConfigResponses, InitConfigErrors, ThrowOnError>({
url: '/config/init',
...options
});
};
export const initConfig = <ThrowOnError extends boolean = false>(options?: Options<InitConfigData, ThrowOnError>) => (options?.client ?? client).post<InitConfigResponses, InitConfigErrors, ThrowOnError>({ url: '/config/init', ...options });
export const upsertPermissions = <ThrowOnError extends boolean = false>(options: Options<UpsertPermissionsData, ThrowOnError>) => {
return (options.client ?? client).post<UpsertPermissionsResponses, UpsertPermissionsErrors, ThrowOnError>({
url: '/config/permissions',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const upsertPermissions = <ThrowOnError extends boolean = false>(options: Options<UpsertPermissionsData, ThrowOnError>) => (options.client ?? client).post<UpsertPermissionsResponses, UpsertPermissionsErrors, ThrowOnError>({
url: '/config/permissions',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const providers = <ThrowOnError extends boolean = false>(options?: Options<ProvidersData, ThrowOnError>) => {
return (options?.client ?? client).get<ProvidersResponses, unknown, ThrowOnError>({
url: '/config/providers',
...options
});
};
export const providers = <ThrowOnError extends boolean = false>(options?: Options<ProvidersData, ThrowOnError>) => (options?.client ?? client).get<ProvidersResponses, unknown, ThrowOnError>({ url: '/config/providers', ...options });
export const getProviderModels = <ThrowOnError extends boolean = false>(options: Options<GetProviderModelsData, ThrowOnError>) => {
return (options.client ?? client).get<GetProviderModelsResponses, GetProviderModelsErrors, ThrowOnError>({
url: '/config/providers/{name}/models',
...options
});
};
export const getProviderModels = <ThrowOnError extends boolean = false>(options: Options<GetProviderModelsData, ThrowOnError>) => (options.client ?? client).get<GetProviderModelsResponses, GetProviderModelsErrors, ThrowOnError>({ url: '/config/providers/{name}/models', ...options });
export const readConfig = <ThrowOnError extends boolean = false>(options: Options<ReadConfigData, ThrowOnError>) => {
return (options.client ?? client).post<ReadConfigResponses, ReadConfigErrors, ThrowOnError>({
url: '/config/read',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const readConfig = <ThrowOnError extends boolean = false>(options: Options<ReadConfigData, ThrowOnError>) => (options.client ?? client).post<ReadConfigResponses, ReadConfigErrors, ThrowOnError>({
url: '/config/read',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const recoverConfig = <ThrowOnError extends boolean = false>(options?: Options<RecoverConfigData, ThrowOnError>) => {
return (options?.client ?? client).post<RecoverConfigResponses, RecoverConfigErrors, ThrowOnError>({
url: '/config/recover',
...options
});
};
export const recoverConfig = <ThrowOnError extends boolean = false>(options?: Options<RecoverConfigData, ThrowOnError>) => (options?.client ?? client).post<RecoverConfigResponses, RecoverConfigErrors, ThrowOnError>({ url: '/config/recover', ...options });
export const removeConfig = <ThrowOnError extends boolean = false>(options: Options<RemoveConfigData, ThrowOnError>) => {
return (options.client ?? client).post<RemoveConfigResponses, RemoveConfigErrors, ThrowOnError>({
url: '/config/remove',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const removeConfig = <ThrowOnError extends boolean = false>(options: Options<RemoveConfigData, ThrowOnError>) => (options.client ?? client).post<RemoveConfigResponses, RemoveConfigErrors, ThrowOnError>({
url: '/config/remove',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const setConfigProvider = <ThrowOnError extends boolean = false>(options: Options<SetConfigProviderData, ThrowOnError>) => {
return (options.client ?? client).post<unknown, unknown, ThrowOnError>({
url: '/config/set_provider',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const setConfigProvider = <ThrowOnError extends boolean = false>(options: Options<SetConfigProviderData, ThrowOnError>) => (options.client ?? client).post<unknown, unknown, ThrowOnError>({
url: '/config/set_provider',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const getSlashCommands = <ThrowOnError extends boolean = false>(options?: Options<GetSlashCommandsData, ThrowOnError>) => {
return (options?.client ?? client).get<GetSlashCommandsResponses, unknown, ThrowOnError>({
url: '/config/slash_commands',
...options
});
};
export const getSlashCommands = <ThrowOnError extends boolean = false>(options?: Options<GetSlashCommandsData, ThrowOnError>) => (options?.client ?? client).get<GetSlashCommandsResponses, unknown, ThrowOnError>({ url: '/config/slash_commands', ...options });
export const upsertConfig = <ThrowOnError extends boolean = false>(options: Options<UpsertConfigData, ThrowOnError>) => {
return (options.client ?? client).post<UpsertConfigResponses, UpsertConfigErrors, ThrowOnError>({
url: '/config/upsert',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const upsertConfig = <ThrowOnError extends boolean = false>(options: Options<UpsertConfigData, ThrowOnError>) => (options.client ?? client).post<UpsertConfigResponses, UpsertConfigErrors, ThrowOnError>({
url: '/config/upsert',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const validateConfig = <ThrowOnError extends boolean = false>(options?: Options<ValidateConfigData, ThrowOnError>) => {
return (options?.client ?? client).get<ValidateConfigResponses, ValidateConfigErrors, ThrowOnError>({
url: '/config/validate',
...options
});
};
export const validateConfig = <ThrowOnError extends boolean = false>(options?: Options<ValidateConfigData, ThrowOnError>) => (options?.client ?? client).get<ValidateConfigResponses, ValidateConfigErrors, ThrowOnError>({ url: '/config/validate', ...options });
export const diagnostics = <ThrowOnError extends boolean = false>(options: Options<DiagnosticsData, ThrowOnError>) => {
return (options.client ?? client).get<DiagnosticsResponses, DiagnosticsErrors, ThrowOnError>({
url: '/diagnostics/{session_id}',
...options
});
};
export const diagnostics = <ThrowOnError extends boolean = false>(options: Options<DiagnosticsData, ThrowOnError>) => (options.client ?? client).get<DiagnosticsResponses, DiagnosticsErrors, ThrowOnError>({ url: '/diagnostics/{session_id}', ...options });
export const startOpenrouterSetup = <ThrowOnError extends boolean = false>(options?: Options<StartOpenrouterSetupData, ThrowOnError>) => {
return (options?.client ?? client).post<StartOpenrouterSetupResponses, unknown, ThrowOnError>({
url: '/handle_openrouter',
...options
});
};
export const startOpenrouterSetup = <ThrowOnError extends boolean = false>(options?: Options<StartOpenrouterSetupData, ThrowOnError>) => (options?.client ?? client).post<StartOpenrouterSetupResponses, unknown, ThrowOnError>({ url: '/handle_openrouter', ...options });
export const startTetrateSetup = <ThrowOnError extends boolean = false>(options?: Options<StartTetrateSetupData, ThrowOnError>) => {
return (options?.client ?? client).post<StartTetrateSetupResponses, unknown, ThrowOnError>({
url: '/handle_tetrate',
...options
});
};
export const startTetrateSetup = <ThrowOnError extends boolean = false>(options?: Options<StartTetrateSetupData, ThrowOnError>) => (options?.client ?? client).post<StartTetrateSetupResponses, unknown, ThrowOnError>({ url: '/handle_tetrate', ...options });
export const mcpUiProxy = <ThrowOnError extends boolean = false>(options: Options<McpUiProxyData, ThrowOnError>) => {
return (options.client ?? client).get<McpUiProxyResponses, McpUiProxyErrors, ThrowOnError>({
url: '/mcp-ui-proxy',
...options
});
};
export const mcpUiProxy = <ThrowOnError extends boolean = false>(options: Options<McpUiProxyData, ThrowOnError>) => (options.client ?? client).get<McpUiProxyResponses, McpUiProxyErrors, ThrowOnError>({ url: '/mcp-ui-proxy', ...options });
export const createRecipe = <ThrowOnError extends boolean = false>(options: Options<CreateRecipeData, ThrowOnError>) => {
return (options.client ?? client).post<CreateRecipeResponses, CreateRecipeErrors, ThrowOnError>({
url: '/recipes/create',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const createRecipe = <ThrowOnError extends boolean = false>(options: Options<CreateRecipeData, ThrowOnError>) => (options.client ?? client).post<CreateRecipeResponses, CreateRecipeErrors, ThrowOnError>({
url: '/recipes/create',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const decodeRecipe = <ThrowOnError extends boolean = false>(options: Options<DecodeRecipeData, ThrowOnError>) => {
return (options.client ?? client).post<DecodeRecipeResponses, DecodeRecipeErrors, ThrowOnError>({
url: '/recipes/decode',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const decodeRecipe = <ThrowOnError extends boolean = false>(options: Options<DecodeRecipeData, ThrowOnError>) => (options.client ?? client).post<DecodeRecipeResponses, DecodeRecipeErrors, ThrowOnError>({
url: '/recipes/decode',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const deleteRecipe = <ThrowOnError extends boolean = false>(options: Options<DeleteRecipeData, ThrowOnError>) => {
return (options.client ?? client).post<DeleteRecipeResponses, DeleteRecipeErrors, ThrowOnError>({
url: '/recipes/delete',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const deleteRecipe = <ThrowOnError extends boolean = false>(options: Options<DeleteRecipeData, ThrowOnError>) => (options.client ?? client).post<DeleteRecipeResponses, DeleteRecipeErrors, ThrowOnError>({
url: '/recipes/delete',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const encodeRecipe = <ThrowOnError extends boolean = false>(options: Options<EncodeRecipeData, ThrowOnError>) => {
return (options.client ?? client).post<EncodeRecipeResponses, EncodeRecipeErrors, ThrowOnError>({
url: '/recipes/encode',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const encodeRecipe = <ThrowOnError extends boolean = false>(options: Options<EncodeRecipeData, ThrowOnError>) => (options.client ?? client).post<EncodeRecipeResponses, EncodeRecipeErrors, ThrowOnError>({
url: '/recipes/encode',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const listRecipes = <ThrowOnError extends boolean = false>(options?: Options<ListRecipesData, ThrowOnError>) => {
return (options?.client ?? client).get<ListRecipesResponses, ListRecipesErrors, ThrowOnError>({
url: '/recipes/list',
...options
});
};
export const listRecipes = <ThrowOnError extends boolean = false>(options?: Options<ListRecipesData, ThrowOnError>) => (options?.client ?? client).get<ListRecipesResponses, ListRecipesErrors, ThrowOnError>({ url: '/recipes/list', ...options });
export const parseRecipe = <ThrowOnError extends boolean = false>(options: Options<ParseRecipeData, ThrowOnError>) => {
return (options.client ?? client).post<ParseRecipeResponses, ParseRecipeErrors, ThrowOnError>({
url: '/recipes/parse',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const parseRecipe = <ThrowOnError extends boolean = false>(options: Options<ParseRecipeData, ThrowOnError>) => (options.client ?? client).post<ParseRecipeResponses, ParseRecipeErrors, ThrowOnError>({
url: '/recipes/parse',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const saveRecipe = <ThrowOnError extends boolean = false>(options: Options<SaveRecipeData, ThrowOnError>) => {
return (options.client ?? client).post<SaveRecipeResponses, SaveRecipeErrors, ThrowOnError>({
url: '/recipes/save',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const saveRecipe = <ThrowOnError extends boolean = false>(options: Options<SaveRecipeData, ThrowOnError>) => (options.client ?? client).post<SaveRecipeResponses, SaveRecipeErrors, ThrowOnError>({
url: '/recipes/save',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const scanRecipe = <ThrowOnError extends boolean = false>(options: Options<ScanRecipeData, ThrowOnError>) => {
return (options.client ?? client).post<ScanRecipeResponses, unknown, ThrowOnError>({
url: '/recipes/scan',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const scanRecipe = <ThrowOnError extends boolean = false>(options: Options<ScanRecipeData, ThrowOnError>) => (options.client ?? client).post<ScanRecipeResponses, unknown, ThrowOnError>({
url: '/recipes/scan',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const scheduleRecipe = <ThrowOnError extends boolean = false>(options: Options<ScheduleRecipeData, ThrowOnError>) => {
return (options.client ?? client).post<ScheduleRecipeResponses, ScheduleRecipeErrors, ThrowOnError>({
url: '/recipes/schedule',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const scheduleRecipe = <ThrowOnError extends boolean = false>(options: Options<ScheduleRecipeData, ThrowOnError>) => (options.client ?? client).post<ScheduleRecipeResponses, ScheduleRecipeErrors, ThrowOnError>({
url: '/recipes/schedule',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const setRecipeSlashCommand = <ThrowOnError extends boolean = false>(options: Options<SetRecipeSlashCommandData, ThrowOnError>) => {
return (options.client ?? client).post<SetRecipeSlashCommandResponses, SetRecipeSlashCommandErrors, ThrowOnError>({
url: '/recipes/slash-command',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const setRecipeSlashCommand = <ThrowOnError extends boolean = false>(options: Options<SetRecipeSlashCommandData, ThrowOnError>) => (options.client ?? client).post<SetRecipeSlashCommandResponses, SetRecipeSlashCommandErrors, ThrowOnError>({
url: '/recipes/slash-command',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const reply = <ThrowOnError extends boolean = false>(options: Options<ReplyData, ThrowOnError>) => {
return (options.client ?? client).sse.post<ReplyResponses, ReplyErrors, ThrowOnError>({
url: '/reply',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const reply = <ThrowOnError extends boolean = false>(options: Options<ReplyData, ThrowOnError>) => (options.client ?? client).sse.post<ReplyResponses, ReplyErrors, ThrowOnError>({
url: '/reply',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const createSchedule = <ThrowOnError extends boolean = false>(options: Options<CreateScheduleData, ThrowOnError>) => {
return (options.client ?? client).post<CreateScheduleResponses, CreateScheduleErrors, ThrowOnError>({
url: '/schedule/create',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const createSchedule = <ThrowOnError extends boolean = false>(options: Options<CreateScheduleData, ThrowOnError>) => (options.client ?? client).post<CreateScheduleResponses, CreateScheduleErrors, ThrowOnError>({
url: '/schedule/create',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const deleteSchedule = <ThrowOnError extends boolean = false>(options: Options<DeleteScheduleData, ThrowOnError>) => {
return (options.client ?? client).delete<DeleteScheduleResponses, DeleteScheduleErrors, ThrowOnError>({
url: '/schedule/delete/{id}',
...options
});
};
export const deleteSchedule = <ThrowOnError extends boolean = false>(options: Options<DeleteScheduleData, ThrowOnError>) => (options.client ?? client).delete<DeleteScheduleResponses, DeleteScheduleErrors, ThrowOnError>({ url: '/schedule/delete/{id}', ...options });
export const listSchedules = <ThrowOnError extends boolean = false>(options?: Options<ListSchedulesData, ThrowOnError>) => {
return (options?.client ?? client).get<ListSchedulesResponses, ListSchedulesErrors, ThrowOnError>({
url: '/schedule/list',
...options
});
};
export const listSchedules = <ThrowOnError extends boolean = false>(options?: Options<ListSchedulesData, ThrowOnError>) => (options?.client ?? client).get<ListSchedulesResponses, ListSchedulesErrors, ThrowOnError>({ url: '/schedule/list', ...options });
export const updateSchedule = <ThrowOnError extends boolean = false>(options: Options<UpdateScheduleData, ThrowOnError>) => {
return (options.client ?? client).put<UpdateScheduleResponses, UpdateScheduleErrors, ThrowOnError>({
url: '/schedule/{id}',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const updateSchedule = <ThrowOnError extends boolean = false>(options: Options<UpdateScheduleData, ThrowOnError>) => (options.client ?? client).put<UpdateScheduleResponses, UpdateScheduleErrors, ThrowOnError>({
url: '/schedule/{id}',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const inspectRunningJob = <ThrowOnError extends boolean = false>(options: Options<InspectRunningJobData, ThrowOnError>) => {
return (options.client ?? client).get<InspectRunningJobResponses, InspectRunningJobErrors, ThrowOnError>({
url: '/schedule/{id}/inspect',
...options
});
};
export const inspectRunningJob = <ThrowOnError extends boolean = false>(options: Options<InspectRunningJobData, ThrowOnError>) => (options.client ?? client).get<InspectRunningJobResponses, InspectRunningJobErrors, ThrowOnError>({ url: '/schedule/{id}/inspect', ...options });
export const killRunningJob = <ThrowOnError extends boolean = false>(options: Options<KillRunningJobData, ThrowOnError>) => {
return (options.client ?? client).post<KillRunningJobResponses, unknown, ThrowOnError>({
url: '/schedule/{id}/kill',
...options
});
};
export const killRunningJob = <ThrowOnError extends boolean = false>(options: Options<KillRunningJobData, ThrowOnError>) => (options.client ?? client).post<KillRunningJobResponses, unknown, ThrowOnError>({ url: '/schedule/{id}/kill', ...options });
export const pauseSchedule = <ThrowOnError extends boolean = false>(options: Options<PauseScheduleData, ThrowOnError>) => {
return (options.client ?? client).post<PauseScheduleResponses, PauseScheduleErrors, ThrowOnError>({
url: '/schedule/{id}/pause',
...options
});
};
export const pauseSchedule = <ThrowOnError extends boolean = false>(options: Options<PauseScheduleData, ThrowOnError>) => (options.client ?? client).post<PauseScheduleResponses, PauseScheduleErrors, ThrowOnError>({ url: '/schedule/{id}/pause', ...options });
export const runNowHandler = <ThrowOnError extends boolean = false>(options: Options<RunNowHandlerData, ThrowOnError>) => {
return (options.client ?? client).post<RunNowHandlerResponses, RunNowHandlerErrors, ThrowOnError>({
url: '/schedule/{id}/run_now',
...options
});
};
export const runNowHandler = <ThrowOnError extends boolean = false>(options: Options<RunNowHandlerData, ThrowOnError>) => (options.client ?? client).post<RunNowHandlerResponses, RunNowHandlerErrors, ThrowOnError>({ url: '/schedule/{id}/run_now', ...options });
export const sessionsHandler = <ThrowOnError extends boolean = false>(options: Options<SessionsHandlerData, ThrowOnError>) => {
return (options.client ?? client).get<SessionsHandlerResponses, SessionsHandlerErrors, ThrowOnError>({
url: '/schedule/{id}/sessions',
...options
});
};
export const sessionsHandler = <ThrowOnError extends boolean = false>(options: Options<SessionsHandlerData, ThrowOnError>) => (options.client ?? client).get<SessionsHandlerResponses, SessionsHandlerErrors, ThrowOnError>({ url: '/schedule/{id}/sessions', ...options });
export const unpauseSchedule = <ThrowOnError extends boolean = false>(options: Options<UnpauseScheduleData, ThrowOnError>) => {
return (options.client ?? client).post<UnpauseScheduleResponses, UnpauseScheduleErrors, ThrowOnError>({
url: '/schedule/{id}/unpause',
...options
});
};
export const unpauseSchedule = <ThrowOnError extends boolean = false>(options: Options<UnpauseScheduleData, ThrowOnError>) => (options.client ?? client).post<UnpauseScheduleResponses, UnpauseScheduleErrors, ThrowOnError>({ url: '/schedule/{id}/unpause', ...options });
export const listSessions = <ThrowOnError extends boolean = false>(options?: Options<ListSessionsData, ThrowOnError>) => {
return (options?.client ?? client).get<ListSessionsResponses, ListSessionsErrors, ThrowOnError>({
url: '/sessions',
...options
});
};
export const listSessions = <ThrowOnError extends boolean = false>(options?: Options<ListSessionsData, ThrowOnError>) => (options?.client ?? client).get<ListSessionsResponses, ListSessionsErrors, ThrowOnError>({ url: '/sessions', ...options });
export const importSession = <ThrowOnError extends boolean = false>(options: Options<ImportSessionData, ThrowOnError>) => {
return (options.client ?? client).post<ImportSessionResponses, ImportSessionErrors, ThrowOnError>({
url: '/sessions/import',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const importSession = <ThrowOnError extends boolean = false>(options: Options<ImportSessionData, ThrowOnError>) => (options.client ?? client).post<ImportSessionResponses, ImportSessionErrors, ThrowOnError>({
url: '/sessions/import',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const getSessionInsights = <ThrowOnError extends boolean = false>(options?: Options<GetSessionInsightsData, ThrowOnError>) => {
return (options?.client ?? client).get<GetSessionInsightsResponses, GetSessionInsightsErrors, ThrowOnError>({
url: '/sessions/insights',
...options
});
};
export const getSessionInsights = <ThrowOnError extends boolean = false>(options?: Options<GetSessionInsightsData, ThrowOnError>) => (options?.client ?? client).get<GetSessionInsightsResponses, GetSessionInsightsErrors, ThrowOnError>({ url: '/sessions/insights', ...options });
export const deleteSession = <ThrowOnError extends boolean = false>(options: Options<DeleteSessionData, ThrowOnError>) => {
return (options.client ?? client).delete<DeleteSessionResponses, DeleteSessionErrors, ThrowOnError>({
url: '/sessions/{session_id}',
...options
});
};
export const deleteSession = <ThrowOnError extends boolean = false>(options: Options<DeleteSessionData, ThrowOnError>) => (options.client ?? client).delete<DeleteSessionResponses, DeleteSessionErrors, ThrowOnError>({ url: '/sessions/{session_id}', ...options });
export const getSession = <ThrowOnError extends boolean = false>(options: Options<GetSessionData, ThrowOnError>) => {
return (options.client ?? client).get<GetSessionResponses, GetSessionErrors, ThrowOnError>({
url: '/sessions/{session_id}',
...options
});
};
export const getSession = <ThrowOnError extends boolean = false>(options: Options<GetSessionData, ThrowOnError>) => (options.client ?? client).get<GetSessionResponses, GetSessionErrors, ThrowOnError>({ url: '/sessions/{session_id}', ...options });
export const editMessage = <ThrowOnError extends boolean = false>(options: Options<EditMessageData, ThrowOnError>) => {
return (options.client ?? client).post<EditMessageResponses, EditMessageErrors, ThrowOnError>({
url: '/sessions/{session_id}/edit_message',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const editMessage = <ThrowOnError extends boolean = false>(options: Options<EditMessageData, ThrowOnError>) => (options.client ?? client).post<EditMessageResponses, EditMessageErrors, ThrowOnError>({
url: '/sessions/{session_id}/edit_message',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const exportSession = <ThrowOnError extends boolean = false>(options: Options<ExportSessionData, ThrowOnError>) => {
return (options.client ?? client).get<ExportSessionResponses, ExportSessionErrors, ThrowOnError>({
url: '/sessions/{session_id}/export',
...options
});
};
export const exportSession = <ThrowOnError extends boolean = false>(options: Options<ExportSessionData, ThrowOnError>) => (options.client ?? client).get<ExportSessionResponses, ExportSessionErrors, ThrowOnError>({ url: '/sessions/{session_id}/export', ...options });
export const updateSessionName = <ThrowOnError extends boolean = false>(options: Options<UpdateSessionNameData, ThrowOnError>) => {
return (options.client ?? client).put<UpdateSessionNameResponses, UpdateSessionNameErrors, ThrowOnError>({
url: '/sessions/{session_id}/name',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const updateSessionName = <ThrowOnError extends boolean = false>(options: Options<UpdateSessionNameData, ThrowOnError>) => (options.client ?? client).put<UpdateSessionNameResponses, UpdateSessionNameErrors, ThrowOnError>({
url: '/sessions/{session_id}/name',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const updateSessionUserRecipeValues = <ThrowOnError extends boolean = false>(options: Options<UpdateSessionUserRecipeValuesData, ThrowOnError>) => {
return (options.client ?? client).put<UpdateSessionUserRecipeValuesResponses, UpdateSessionUserRecipeValuesErrors, ThrowOnError>({
url: '/sessions/{session_id}/user_recipe_values',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
};
export const updateSessionUserRecipeValues = <ThrowOnError extends boolean = false>(options: Options<UpdateSessionUserRecipeValuesData, ThrowOnError>) => (options.client ?? client).put<UpdateSessionUserRecipeValuesResponses, UpdateSessionUserRecipeValuesErrors, ThrowOnError>({
url: '/sessions/{session_id}/user_recipe_values',
...options,
headers: {
'Content-Type': 'application/json',
...options.headers
}
});
export const status = <ThrowOnError extends boolean = false>(options?: Options<StatusData, ThrowOnError>) => {
return (options?.client ?? client).get<StatusResponses, unknown, ThrowOnError>({
url: '/status',
...options
});
};
export const status = <ThrowOnError extends boolean = false>(options?: Options<StatusData, ThrowOnError>) => (options?.client ?? client).get<StatusResponses, unknown, ThrowOnError>({ url: '/status', ...options });
/**
* Start the tunnel
*/
export const startTunnel = <ThrowOnError extends boolean = false>(options?: Options<StartTunnelData, ThrowOnError>) => {
return (options?.client ?? client).post<StartTunnelResponses, StartTunnelErrors, ThrowOnError>({
url: '/tunnel/start',
...options
});
};
export const startTunnel = <ThrowOnError extends boolean = false>(options?: Options<StartTunnelData, ThrowOnError>) => (options?.client ?? client).post<StartTunnelResponses, StartTunnelErrors, ThrowOnError>({ url: '/tunnel/start', ...options });
/**
* Get tunnel info
*/
export const getTunnelStatus = <ThrowOnError extends boolean = false>(options?: Options<GetTunnelStatusData, ThrowOnError>) => {
return (options?.client ?? client).get<GetTunnelStatusResponses, unknown, ThrowOnError>({
url: '/tunnel/status',
...options
});
};
export const getTunnelStatus = <ThrowOnError extends boolean = false>(options?: Options<GetTunnelStatusData, ThrowOnError>) => (options?.client ?? client).get<GetTunnelStatusResponses, unknown, ThrowOnError>({ url: '/tunnel/status', ...options });
/**
* Stop the tunnel
*/
export const stopTunnel = <ThrowOnError extends boolean = false>(options?: Options<StopTunnelData, ThrowOnError>) => {
return (options?.client ?? client).post<StopTunnelResponses, StopTunnelErrors, ThrowOnError>({
url: '/tunnel/stop',
...options
});
};
export const stopTunnel = <ThrowOnError extends boolean = false>(options?: Options<StopTunnelData, ThrowOnError>) => (options?.client ?? client).post<StopTunnelResponses, StopTunnelErrors, ThrowOnError>({ url: '/tunnel/stop', ...options });