Variable manifestSchemaConst
manifestSchema: ZodEffects<
ZodObject<
{
$schema: ZodOptional<ZodString>;
bot: ZodObject<
{
commands: ZodOptional<
ZodArray<
ZodObject<
{
command: ZodString;
description: ZodOptional<ZodString>;
handler: ZodOptional<ZodString>;
},
"strip",
ZodTypeAny,
{ command: string; description?: string; handler?: string },
{ command: string; description?: string; handler?: string },
>,
"many",
>,
>;
tokenEnv: ZodDefault<ZodString>;
username: ZodString;
webhook: ZodObject<
{ path: ZodString; secretEnv: ZodString },
"strict",
ZodTypeAny,
{ path: string; secretEnv: string },
{ path: string; secretEnv: string },
>;
},
"strict",
ZodTypeAny,
{
commands?: {
command: string;
description?: string;
handler?: string;
}[];
tokenEnv: string;
username: string;
webhook: { path: string; secretEnv: string };
},
{
commands?: {
command: string;
description?: string;
handler?: string;
}[];
tokenEnv?: string;
username: string;
webhook: { path: string; secretEnv: string };
},
>;
build: ZodOptional<
ZodObject<
{
outDir: ZodOptional<ZodString>;
publicDir: ZodOptional<ZodString>;
},
"strict",
ZodTypeAny,
{ outDir?: string; publicDir?: string },
{ outDir?: string; publicDir?: string },
>,
>;
dev: ZodOptional<
ZodObject<
{
httpsPort: ZodOptional<ZodNumber>;
port: ZodOptional<ZodNumber>;
tunnel: ZodOptional<ZodBoolean>;
},
"strict",
ZodTypeAny,
{ httpsPort?: number; port?: number; tunnel?: boolean },
{ httpsPort?: number; port?: number; tunnel?: boolean },
>,
>;
features: ZodOptional<
ZodObject<
{
backButton: ZodOptional<ZodBoolean>;
cloudStorage: ZodOptional<ZodBoolean>;
hapticFeedback: ZodOptional<ZodBoolean>;
payments: ZodOptional<ZodBoolean>;
settingsButton: ZodOptional<ZodBoolean>;
},
"strict",
ZodTypeAny,
{
backButton?: boolean;
cloudStorage?: boolean;
hapticFeedback?: boolean;
payments?: boolean;
settingsButton?: boolean;
},
{
backButton?: boolean;
cloudStorage?: boolean;
hapticFeedback?: boolean;
payments?: boolean;
settingsButton?: boolean;
},
>,
>;
id: ZodString;
miniApp: ZodEffects<
ZodObject<
{
capabilities: ZodArray<ZodString, "many">;
defaultMode: ZodEnum<["inline", "compact", "fullscreen"]>;
entryPoint: ZodString;
launchModes: ZodArray<
ZodEnum<["inline", "compact", "fullscreen"]>,
"many",
>;
url: ZodOptional<ZodString>;
},
"strict",
ZodTypeAny,
{
capabilities: string[];
defaultMode: "inline"
| "compact"
| "fullscreen";
entryPoint: string;
launchModes: ("inline" | "compact" | "fullscreen")[];
url?: string;
},
{
capabilities: string[];
defaultMode: "inline"
| "compact"
| "fullscreen";
entryPoint: string;
launchModes: ("inline" | "compact" | "fullscreen")[];
url?: string;
},
>,
{
capabilities: string[];
defaultMode: "inline"
| "compact"
| "fullscreen";
entryPoint: string;
launchModes: ("inline" | "compact" | "fullscreen")[];
url?: string;
},
{
capabilities: string[];
defaultMode: "inline"
| "compact"
| "fullscreen";
entryPoint: string;
launchModes: ("inline" | "compact" | "fullscreen")[];
url?: string;
},
>;
name: ZodString;
permissions: ZodOptional<
ZodArray<
ZodEffects<
ZodObject<
{
capability: ZodOptional<ZodString>;
description: ZodOptional<ZodString>;
scope: ZodOptional<ZodString>;
},
"strict",
ZodTypeAny,
{ capability?: string; description?: string; scope?: string },
{ capability?: string; description?: string; scope?: string },
>,
{ capability?: string; description?: string; scope?: string },
{ capability?: string; description?: string; scope?: string },
>,
"many",
>,
>;
routes: ZodArray<
ZodObject<
{
capabilities: ZodOptional<
ZodObject<
{
auth: ZodOptional<ZodBoolean>;
launchMode: ZodOptional<ZodEnum<(...)>>;
payments: ZodOptional<ZodBoolean>;
},
"strict",
ZodTypeAny,
{
auth?: boolean;
launchMode?: "inline"
| "compact"
| "fullscreen";
payments?: boolean;
},
{
auth?: boolean;
launchMode?: "inline"
| "compact"
| "fullscreen";
payments?: boolean;
},
>,
>;
component: ZodOptional<ZodString>;
coordination: ZodOptional<
ZodObject<
{
entryPoints: ZodArray<ZodUnion<(...)>, "many">;
flow: ZodOptional<ZodObject<(...), (...), (...), (...), (...)>>;
returnToChat: ZodOptional<
ZodObject<(...), (...), (...), (...), (...)>,
>;
},
"strict",
ZodTypeAny,
{
entryPoints: ((...) | (...) | (...) | (...))[];
flow?: { entryStep: ...; flowId: ...; requestWriteAccess?: ... };
returnToChat?: { stayInChat?: ...; text: ... };
},
{
entryPoints: ((...) | (...) | (...) | (...))[];
flow?: { entryStep: ...; flowId: ...; requestWriteAccess?: ... };
returnToChat?: { stayInChat?: ...; text: ... };
},
>,
>;
description: ZodOptional<ZodString>;
guards: ZodOptional<ZodArray<ZodString, "many">>;
launchModes: ZodOptional<
ZodArray<ZodEnum<["inline", "compact", "fullscreen"]>, "many">,
>;
meta: ZodOptional<
ZodObject<
{
description: ZodOptional<ZodString>;
title: ZodOptional<ZodString>;
},
"strict",
ZodTypeAny,
{ description?: string; title?: string },
{ description?: string; title?: string },
>,
>;
path: ZodString;
title: ZodOptional<ZodString>;
ui: ZodOptional<
ZodObject<
{
header: ZodOptional<
ZodObject<(...), (...), (...), (...), (...)>,
>;
mainButton: ZodOptional<
ZodObject<(...), (...), (...), (...), (...)>,
>;
},
"strict",
ZodTypeAny,
{
header?: { hideBackButton?: ...; title?: ... };
mainButton?: { text: ...; visible?: ... };
},
{
header?: { hideBackButton?: ...; title?: ... };
mainButton?: { text: ...; visible?: ... };
},
>,
>;
},
"strict",
ZodTypeAny,
{
capabilities?: {
auth?: boolean;
launchMode?: "inline"
| "compact"
| "fullscreen";
payments?: boolean;
};
component?: string;
coordination?: {
entryPoints: (
| { startParam?: ...; type: ... }
| { command: ...; type: ... }
| { text: ...; type: ... }
| { type: ...; url: ... }
)[];
flow?: {
entryStep: string;
flowId: string;
requestWriteAccess?: (...) | (...) | (...);
};
returnToChat?: { stayInChat?: (...)
| (...)
| (...); text: string };
};
description?: string;
guards?: string[];
launchModes?: ("inline" | "compact" | "fullscreen")[];
meta?: { description?: string; title?: string };
path: string;
title?: string;
ui?: {
header?: {
hideBackButton?: (...) | (...) | (...);
title?: (...) | (...);
};
mainButton?: { text: string; visible?: (...)
| (...)
| (...) };
};
},
{
capabilities?: {
auth?: boolean;
launchMode?: "inline"
| "compact"
| "fullscreen";
payments?: boolean;
};
component?: string;
coordination?: {
entryPoints: (
| { startParam?: ...; type: ... }
| { command: ...; type: ... }
| { text: ...; type: ... }
| { type: ...; url: ... }
)[];
flow?: {
entryStep: string;
flowId: string;
requestWriteAccess?: (...) | (...) | (...);
};
returnToChat?: { stayInChat?: (...)
| (...)
| (...); text: string };
};
description?: string;
guards?: string[];
launchModes?: ("inline" | "compact" | "fullscreen")[];
meta?: { description?: string; title?: string };
path: string;
title?: string;
ui?: {
header?: {
hideBackButton?: (...) | (...) | (...);
title?: (...) | (...);
};
mainButton?: { text: string; visible?: (...)
| (...)
| (...) };
};
},
>,
"many",
>;
runtime: ZodObject<
{
apiPrefix: ZodOptional<ZodString>;
apiRoutes: ZodOptional<ZodString>;
build: ZodOptional<
ZodObject<
{
basePath: ZodOptional<ZodString>;
outDir: ZodOptional<ZodString>;
},
"strict",
ZodTypeAny,
{ basePath?: string; outDir?: string },
{ basePath?: string; outDir?: string },
>,
>;
mode: ZodEnum<["spa", "bff"]>;
ssr: ZodOptional<ZodBoolean>;
webFramework: ZodEnum<["vite", "nextjs", "custom"]>;
},
"strict",
ZodTypeAny,
{
apiPrefix?: string;
apiRoutes?: string;
build?: { basePath?: string; outDir?: string };
mode: "spa" | "bff";
ssr?: boolean;
webFramework: "vite" | "nextjs" | "custom";
},
{
apiPrefix?: string;
apiRoutes?: string;
build?: { basePath?: string; outDir?: string };
mode: "spa" | "bff";
ssr?: boolean;
webFramework: "vite" | "nextjs" | "custom";
},
>;
security: ZodOptional<
ZodObject<
{
allowedOrigins: ZodOptional<ZodArray<ZodString, "many">>;
validateInitData: ZodOptional<ZodBoolean>;
webhookSecret: ZodOptional<ZodString>;
},
"strict",
ZodTypeAny,
{
allowedOrigins?: string[];
validateInitData?: boolean;
webhookSecret?: string;
},
{
allowedOrigins?: string[];
validateInitData?: boolean;
webhookSecret?: string;
},
>,
>;
version: ZodString;
},
"strict",
ZodTypeAny,
{
$schema?: string;
bot: {
commands?: {
command: string;
description?: string;
handler?: string;
}[];
tokenEnv: string;
username: string;
webhook: { path: string; secretEnv: string };
};
build?: { outDir?: string; publicDir?: string };
dev?: { httpsPort?: number; port?: number; tunnel?: boolean };
features?: {
backButton?: boolean;
cloudStorage?: boolean;
hapticFeedback?: boolean;
payments?: boolean;
settingsButton?: boolean;
};
id: string;
miniApp: {
capabilities: string[];
defaultMode: "inline"
| "compact"
| "fullscreen";
entryPoint: string;
launchModes: ("inline" | "compact" | "fullscreen")[];
url?: string;
};
name: string;
permissions?: {
capability?: string;
description?: string;
scope?: string;
}[];
routes: {
capabilities?: {
auth?: boolean;
launchMode?: "inline"
| "compact"
| "fullscreen";
payments?: boolean;
};
component?: string;
coordination?: {
entryPoints: (
| { startParam?: (...)
| (...); type: "miniapp" }
| { command: string; type: "bot_command" }
| { text: string; type: "bot_button" }
| { type: "deep_link"; url: string }
)[];
flow?: {
entryStep: string;
flowId: string;
requestWriteAccess?: boolean;
};
returnToChat?: { stayInChat?: boolean; text: string };
};
description?: string;
guards?: string[];
launchModes?: ("inline" | "compact" | "fullscreen")[];
meta?: { description?: string; title?: string };
path: string;
title?: string;
ui?: {
header?: { hideBackButton?: boolean; title?: string };
mainButton?: { text: string; visible?: boolean };
};
}[];
runtime: {
apiPrefix?: string;
apiRoutes?: string;
build?: { basePath?: string; outDir?: string };
mode: "spa" | "bff";
ssr?: boolean;
webFramework: "vite" | "nextjs" | "custom";
};
security?: {
allowedOrigins?: string[];
validateInitData?: boolean;
webhookSecret?: string;
};
version: string;
},
{
$schema?: string;
bot: {
commands?: {
command: string;
description?: string;
handler?: string;
}[];
tokenEnv?: string;
username: string;
webhook: { path: string; secretEnv: string };
};
build?: { outDir?: string; publicDir?: string };
dev?: { httpsPort?: number; port?: number; tunnel?: boolean };
features?: {
backButton?: boolean;
cloudStorage?: boolean;
hapticFeedback?: boolean;
payments?: boolean;
settingsButton?: boolean;
};
id: string;
miniApp: {
capabilities: string[];
defaultMode: "inline"
| "compact"
| "fullscreen";
entryPoint: string;
launchModes: ("inline" | "compact" | "fullscreen")[];
url?: string;
};
name: string;
permissions?: {
capability?: string;
description?: string;
scope?: string;
}[];
routes: {
capabilities?: {
auth?: boolean;
launchMode?: "inline"
| "compact"
| "fullscreen";
payments?: boolean;
};
component?: string;
coordination?: {
entryPoints: (
| { startParam?: (...)
| (...); type: "miniapp" }
| { command: string; type: "bot_command" }
| { text: string; type: "bot_button" }
| { type: "deep_link"; url: string }
)[];
flow?: {
entryStep: string;
flowId: string;
requestWriteAccess?: boolean;
};
returnToChat?: { stayInChat?: boolean; text: string };
};
description?: string;
guards?: string[];
launchModes?: ("inline" | "compact" | "fullscreen")[];
meta?: { description?: string; title?: string };
path: string;
title?: string;
ui?: {
header?: { hideBackButton?: boolean; title?: string };
mainButton?: { text: string; visible?: boolean };
};
}[];
runtime: {
apiPrefix?: string;
apiRoutes?: string;
build?: { basePath?: string; outDir?: string };
mode: "spa" | "bff";
ssr?: boolean;
webFramework: "vite" | "nextjs" | "custom";
};
security?: {
allowedOrigins?: string[];
validateInitData?: boolean;
webhookSecret?: string;
};
version: string;
},
>,
{
$schema?: string;
bot: {
commands?: { command: string; description?: string; handler?: string }[];
tokenEnv: string;
username: string;
webhook: { path: string; secretEnv: string };
};
build?: { outDir?: string; publicDir?: string };
dev?: { httpsPort?: number; port?: number; tunnel?: boolean };
features?: {
backButton?: boolean;
cloudStorage?: boolean;
hapticFeedback?: boolean;
payments?: boolean;
settingsButton?: boolean;
};
id: string;
miniApp: {
capabilities: string[];
defaultMode: "inline"
| "compact"
| "fullscreen";
entryPoint: string;
launchModes: ("inline" | "compact" | "fullscreen")[];
url?: string;
};
name: string;
permissions?: {
capability?: string;
description?: string;
scope?: string;
}[];
routes: {
capabilities?: {
auth?: boolean;
launchMode?: "inline"
| "compact"
| "fullscreen";
payments?: boolean;
};
component?: string;
coordination?: {
entryPoints: (
| { startParam?: string; type: "miniapp" }
| { command: string; type: "bot_command" }
| { text: string; type: "bot_button" }
| { type: "deep_link"; url: string }
)[];
flow?: {
entryStep: string;
flowId: string;
requestWriteAccess?: boolean;
};
returnToChat?: { stayInChat?: boolean; text: string };
};
description?: string;
guards?: string[];
launchModes?: ("inline" | "compact" | "fullscreen")[];
meta?: { description?: string; title?: string };
path: string;
title?: string;
ui?: {
header?: { hideBackButton?: boolean; title?: string };
mainButton?: { text: string; visible?: boolean };
};
}[];
runtime: {
apiPrefix?: string;
apiRoutes?: string;
build?: { basePath?: string; outDir?: string };
mode: "spa" | "bff";
ssr?: boolean;
webFramework: "vite" | "nextjs" | "custom";
};
security?: {
allowedOrigins?: string[];
validateInitData?: boolean;
webhookSecret?: string;
};
version: string;
},
{
$schema?: string;
bot: {
commands?: { command: string; description?: string; handler?: string }[];
tokenEnv?: string;
username: string;
webhook: { path: string; secretEnv: string };
};
build?: { outDir?: string; publicDir?: string };
dev?: { httpsPort?: number; port?: number; tunnel?: boolean };
features?: {
backButton?: boolean;
cloudStorage?: boolean;
hapticFeedback?: boolean;
payments?: boolean;
settingsButton?: boolean;
};
id: string;
miniApp: {
capabilities: string[];
defaultMode: "inline"
| "compact"
| "fullscreen";
entryPoint: string;
launchModes: ("inline" | "compact" | "fullscreen")[];
url?: string;
};
name: string;
permissions?: {
capability?: string;
description?: string;
scope?: string;
}[];
routes: {
capabilities?: {
auth?: boolean;
launchMode?: "inline"
| "compact"
| "fullscreen";
payments?: boolean;
};
component?: string;
coordination?: {
entryPoints: (
| { startParam?: string; type: "miniapp" }
| { command: string; type: "bot_command" }
| { text: string; type: "bot_button" }
| { type: "deep_link"; url: string }
)[];
flow?: {
entryStep: string;
flowId: string;
requestWriteAccess?: boolean;
};
returnToChat?: { stayInChat?: boolean; text: string };
};
description?: string;
guards?: string[];
launchModes?: ("inline" | "compact" | "fullscreen")[];
meta?: { description?: string; title?: string };
path: string;
title?: string;
ui?: {
header?: { hideBackButton?: boolean; title?: string };
mainButton?: { text: string; visible?: boolean };
};
}[];
runtime: {
apiPrefix?: string;
apiRoutes?: string;
build?: { basePath?: string; outDir?: string };
mode: "spa" | "bff";
ssr?: boolean;
webFramework: "vite" | "nextjs" | "custom";
};
security?: {
allowedOrigins?: string[];
validateInitData?: boolean;
webhookSecret?: string;
};
version: string;
},
> = ...