UNPKG

appwrite-utils

Version:
725 lines (724 loc) 36.1 kB
/** * @fileoverview AppwriteUtils sidecar (extension) configuration schema. * * This schema is a STRICT SUPERSET of the official Appwrite CLI config. It * exists so that AppwriteUtils can hold its own per-resource extensions * (importDefs, attributeDisplayOrder, deployDir, predeployCommands, etc.) * WITHOUT mutating the user's `appwrite.config.json` — the file the official * CLI consumes. * * Two source-of-truth modes for the underlying Appwrite resources: * - referenced: `appwriteConfig` points at an external * `appwrite.config.json` file owned by the official CLI. * - owned: `appwrite` embeds the full official config inline. * * If both are provided, the inline `appwrite` block wins — see the * `appwriteConfig`/`appwrite` descriptions below. * * The root object intentionally uses `.passthrough()` (NOT `.strict()`) so * that users can stuff forward-compatible fields without parser errors. The * per-resource extension sub-schemas also default to `passthrough` because * we have not yet enumerated all extension fields. */ import { z } from "zod"; /** * Function-specific extensions (predeployCommands, deployDir, ignore, etc. * still to be formalised). Currently passthrough. * * Known field: `forceOverwriteSecrets` — when false (default), the var-sync * step skips updating any Appwrite-side variable whose `secret` flag is true, * preserving server-managed secrets across deploys. Set to true to opt into * overwriting secrets from this function's local `vars` block. */ export declare const FunctionExtensionSchema: z.ZodObject<{ forceOverwriteSecrets: z.ZodOptional<z.ZodBoolean>; }, z.core.$loose>; /** * Site-specific extensions (predeployCommands, deployDir, ignore, etc. * still to be formalised). Currently passthrough. */ export declare const SiteExtensionSchema: z.ZodObject<{}, z.core.$loose>; /** * Bucket-specific extensions (currently passthrough). */ export declare const BucketExtensionSchema: z.ZodObject<{}, z.core.$loose>; /** * Collection-specific extensions. Recognises `importDefs` (typed against the * existing `importDefSchemas`) and `attributeDisplayOrder`. Other fields are * passed through. */ export declare const CollectionExtensionSchema: z.ZodObject<{ importDefs: z.ZodOptional<z.ZodArray<z.ZodObject<{ type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{ create: "create"; update: "update"; }>>>; filePath: z.ZodString; basePath: z.ZodOptional<z.ZodString>; primaryKeyField: z.ZodDefault<z.ZodString>; idMappings: z.ZodOptional<z.ZodArray<z.ZodObject<{ sourceField: z.ZodString; fieldToSet: z.ZodOptional<z.ZodString>; targetFieldToMatch: z.ZodOptional<z.ZodString>; targetField: z.ZodString; targetCollection: z.ZodString; }, z.core.$strip>>>; createUsers: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodBoolean>>>; updateMapping: z.ZodOptional<z.ZodObject<{ originalIdField: z.ZodString; targetField: z.ZodString; }, z.core.$strip>>; attributeMappings: z.ZodArray<z.ZodObject<{ oldKey: z.ZodOptional<z.ZodString>; oldKeys: z.ZodOptional<z.ZodArray<z.ZodString>>; targetKey: z.ZodString; valueToSet: z.ZodOptional<z.ZodAny>; fileData: z.ZodOptional<z.ZodObject<{ name: z.ZodString; path: z.ZodString; }, z.core.$strip>>; converters: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>; validationActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{ action: z.ZodString; params: z.ZodArray<z.ZodString>; }, z.core.$strip>>>>; postImportActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{ action: z.ZodString; params: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>]>>; }, z.core.$strip>>>>; }, z.core.$strip>>; }, z.core.$strip>>>; attributeDisplayOrder: z.ZodOptional<z.ZodArray<z.ZodString>>; }, z.core.$loose>; /** * Table-specific extensions. Same shape as `CollectionExtensionSchema`, * defined separately so that they can evolve independently. */ export declare const TableExtensionSchema: z.ZodObject<{ importDefs: z.ZodOptional<z.ZodArray<z.ZodObject<{ type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{ create: "create"; update: "update"; }>>>; filePath: z.ZodString; basePath: z.ZodOptional<z.ZodString>; primaryKeyField: z.ZodDefault<z.ZodString>; idMappings: z.ZodOptional<z.ZodArray<z.ZodObject<{ sourceField: z.ZodString; fieldToSet: z.ZodOptional<z.ZodString>; targetFieldToMatch: z.ZodOptional<z.ZodString>; targetField: z.ZodString; targetCollection: z.ZodString; }, z.core.$strip>>>; createUsers: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodBoolean>>>; updateMapping: z.ZodOptional<z.ZodObject<{ originalIdField: z.ZodString; targetField: z.ZodString; }, z.core.$strip>>; attributeMappings: z.ZodArray<z.ZodObject<{ oldKey: z.ZodOptional<z.ZodString>; oldKeys: z.ZodOptional<z.ZodArray<z.ZodString>>; targetKey: z.ZodString; valueToSet: z.ZodOptional<z.ZodAny>; fileData: z.ZodOptional<z.ZodObject<{ name: z.ZodString; path: z.ZodString; }, z.core.$strip>>; converters: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>; validationActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{ action: z.ZodString; params: z.ZodArray<z.ZodString>; }, z.core.$strip>>>>; postImportActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{ action: z.ZodString; params: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>]>>; }, z.core.$strip>>>>; }, z.core.$strip>>; }, z.core.$strip>>>; attributeDisplayOrder: z.ZodOptional<z.ZodArray<z.ZodString>>; }, z.core.$loose>; /** * Per-function YAML file at `functions/<id>/appwrite-utils.yaml`. Combines * the official function shape with our extension fields in one document. * Unknown keys pass through (FunctionExtensionSchema is itself passthrough). */ export declare const PerFunctionConfigSchema: z.ZodObject<{ forceOverwriteSecrets: z.ZodOptional<z.ZodBoolean>; path: z.ZodOptional<z.ZodString>; $id: z.ZodString; execute: z.ZodOptional<z.ZodArray<z.ZodString>>; name: z.ZodString; enabled: z.ZodOptional<z.ZodBoolean>; logging: z.ZodOptional<z.ZodBoolean>; runtime: z.ZodString; buildSpecification: z.ZodOptional<z.ZodString>; runtimeSpecification: z.ZodOptional<z.ZodString>; deploymentRetention: z.ZodOptional<z.ZodNumber>; scopes: z.ZodOptional<z.ZodArray<z.ZodString>>; events: z.ZodOptional<z.ZodArray<z.ZodString>>; schedule: z.ZodOptional<z.ZodString>; timeout: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>; entrypoint: z.ZodOptional<z.ZodString>; commands: z.ZodOptional<z.ZodString>; vars: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>; ignore: z.ZodOptional<z.ZodString>; }, z.core.$loose>; /** * Per-site YAML file at `sites/<id>/appwrite-utils.yaml`. Same pattern as * PerFunctionConfigSchema. */ export declare const PerSiteConfigSchema: z.ZodObject<{ path: z.ZodOptional<z.ZodString>; $id: z.ZodString; name: z.ZodString; logging: z.ZodOptional<z.ZodBoolean>; timeout: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>; framework: z.ZodOptional<z.ZodString>; buildRuntime: z.ZodOptional<z.ZodString>; adapter: z.ZodOptional<z.ZodString>; installCommand: z.ZodOptional<z.ZodString>; buildCommand: z.ZodOptional<z.ZodString>; outputDirectory: z.ZodOptional<z.ZodString>; fallbackFile: z.ZodOptional<z.ZodString>; buildSpecification: z.ZodOptional<z.ZodString>; runtimeSpecification: z.ZodOptional<z.ZodString>; deploymentRetention: z.ZodOptional<z.ZodNumber>; startCommand: z.ZodOptional<z.ZodString>; vars: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>; }, z.core.$loose>; export declare const ResourceExtensionsSchema: z.ZodObject<{ functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{ forceOverwriteSecrets: z.ZodOptional<z.ZodBoolean>; }, z.core.$loose>>]>>; sites: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; buckets: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; collections: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{ importDefs: z.ZodOptional<z.ZodArray<z.ZodObject<{ type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{ create: "create"; update: "update"; }>>>; filePath: z.ZodString; basePath: z.ZodOptional<z.ZodString>; primaryKeyField: z.ZodDefault<z.ZodString>; idMappings: z.ZodOptional<z.ZodArray<z.ZodObject<{ sourceField: z.ZodString; fieldToSet: z.ZodOptional<z.ZodString>; targetFieldToMatch: z.ZodOptional<z.ZodString>; targetField: z.ZodString; targetCollection: z.ZodString; }, z.core.$strip>>>; createUsers: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodBoolean>>>; updateMapping: z.ZodOptional<z.ZodObject<{ originalIdField: z.ZodString; targetField: z.ZodString; }, z.core.$strip>>; attributeMappings: z.ZodArray<z.ZodObject<{ oldKey: z.ZodOptional<z.ZodString>; oldKeys: z.ZodOptional<z.ZodArray<z.ZodString>>; targetKey: z.ZodString; valueToSet: z.ZodOptional<z.ZodAny>; fileData: z.ZodOptional<z.ZodObject<{ name: z.ZodString; path: z.ZodString; }, z.core.$strip>>; converters: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>; validationActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{ action: z.ZodString; params: z.ZodArray<z.ZodString>; }, z.core.$strip>>>>; postImportActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{ action: z.ZodString; params: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>]>>; }, z.core.$strip>>>>; }, z.core.$strip>>; }, z.core.$strip>>>; attributeDisplayOrder: z.ZodOptional<z.ZodArray<z.ZodString>>; }, z.core.$loose>>]>>; tablesDB: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; tables: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{ importDefs: z.ZodOptional<z.ZodArray<z.ZodObject<{ type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{ create: "create"; update: "update"; }>>>; filePath: z.ZodString; basePath: z.ZodOptional<z.ZodString>; primaryKeyField: z.ZodDefault<z.ZodString>; idMappings: z.ZodOptional<z.ZodArray<z.ZodObject<{ sourceField: z.ZodString; fieldToSet: z.ZodOptional<z.ZodString>; targetFieldToMatch: z.ZodOptional<z.ZodString>; targetField: z.ZodString; targetCollection: z.ZodString; }, z.core.$strip>>>; createUsers: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodBoolean>>>; updateMapping: z.ZodOptional<z.ZodObject<{ originalIdField: z.ZodString; targetField: z.ZodString; }, z.core.$strip>>; attributeMappings: z.ZodArray<z.ZodObject<{ oldKey: z.ZodOptional<z.ZodString>; oldKeys: z.ZodOptional<z.ZodArray<z.ZodString>>; targetKey: z.ZodString; valueToSet: z.ZodOptional<z.ZodAny>; fileData: z.ZodOptional<z.ZodObject<{ name: z.ZodString; path: z.ZodString; }, z.core.$strip>>; converters: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>; validationActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{ action: z.ZodString; params: z.ZodArray<z.ZodString>; }, z.core.$strip>>>>; postImportActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{ action: z.ZodString; params: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>]>>; }, z.core.$strip>>>>; }, z.core.$strip>>; }, z.core.$strip>>>; attributeDisplayOrder: z.ZodOptional<z.ZodArray<z.ZodString>>; }, z.core.$loose>>]>>; teams: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; webhooks: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; topics: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; messages: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; }, z.core.$loose>; export declare const AuthBlockSchema: z.ZodObject<{ endpoint: z.ZodOptional<z.ZodString>; projectId: z.ZodOptional<z.ZodString>; apiKey: z.ZodOptional<z.ZodString>; authMode: z.ZodDefault<z.ZodEnum<{ apiKey: "apiKey"; session: "session"; auto: "auto"; }>>; sessionCookie: z.ZodOptional<z.ZodString>; }, z.core.$loose>; export declare const LoggingBlockSchema: z.ZodObject<{ enabled: z.ZodDefault<z.ZodBoolean>; level: z.ZodDefault<z.ZodEnum<{ error: "error"; warn: "warn"; info: "info"; debug: "debug"; }>>; logDirectory: z.ZodOptional<z.ZodString>; console: z.ZodDefault<z.ZodBoolean>; }, z.core.$loose>; export declare const SchemaConfigSchema: z.ZodObject<{ outputDirectory: z.ZodDefault<z.ZodString>; yamlSchemaDirectory: z.ZodDefault<z.ZodString>; importDirectory: z.ZodDefault<z.ZodString>; collectionsDirectory: z.ZodDefault<z.ZodString>; tablesDirectory: z.ZodDefault<z.ZodString>; }, z.core.$loose>; export declare const AppwriteUtilsExtensionSchema: z.ZodObject<{ appwriteConfig: z.ZodOptional<z.ZodString>; appwrite: z.ZodOptional<z.ZodObject<{ projectId: z.ZodString; projectName: z.ZodOptional<z.ZodString>; endpoint: z.ZodOptional<z.ZodString>; settings: z.ZodOptional<z.ZodObject<{ services: z.ZodOptional<z.ZodObject<{ account: z.ZodOptional<z.ZodBoolean>; avatars: z.ZodOptional<z.ZodBoolean>; databases: z.ZodOptional<z.ZodBoolean>; locale: z.ZodOptional<z.ZodBoolean>; health: z.ZodOptional<z.ZodBoolean>; storage: z.ZodOptional<z.ZodBoolean>; teams: z.ZodOptional<z.ZodBoolean>; users: z.ZodOptional<z.ZodBoolean>; sites: z.ZodOptional<z.ZodBoolean>; functions: z.ZodOptional<z.ZodBoolean>; graphql: z.ZodOptional<z.ZodBoolean>; messaging: z.ZodOptional<z.ZodBoolean>; }, z.core.$strict>>; protocols: z.ZodOptional<z.ZodObject<{ rest: z.ZodOptional<z.ZodBoolean>; graphql: z.ZodOptional<z.ZodBoolean>; websocket: z.ZodOptional<z.ZodBoolean>; }, z.core.$strict>>; auth: z.ZodOptional<z.ZodObject<{ methods: z.ZodOptional<z.ZodObject<{ jwt: z.ZodOptional<z.ZodBoolean>; phone: z.ZodOptional<z.ZodBoolean>; invites: z.ZodOptional<z.ZodBoolean>; anonymous: z.ZodOptional<z.ZodBoolean>; "email-otp": z.ZodOptional<z.ZodBoolean>; "magic-url": z.ZodOptional<z.ZodBoolean>; "email-password": z.ZodOptional<z.ZodBoolean>; }, z.core.$strict>>; security: z.ZodOptional<z.ZodObject<{ duration: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>; limit: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>; sessionsLimit: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>; passwordHistory: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>; passwordDictionary: z.ZodOptional<z.ZodBoolean>; personalDataCheck: z.ZodOptional<z.ZodBoolean>; sessionAlerts: z.ZodOptional<z.ZodBoolean>; mockNumbers: z.ZodOptional<z.ZodArray<z.ZodObject<{ phone: z.ZodString; otp: z.ZodString; }, z.core.$strict>>>; }, z.core.$strict>>; }, z.core.$strict>>; }, z.core.$strict>>; includes: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>; functions: z.ZodOptional<z.ZodArray<z.ZodObject<{ path: z.ZodOptional<z.ZodString>; $id: z.ZodString; execute: z.ZodOptional<z.ZodArray<z.ZodString>>; name: z.ZodString; enabled: z.ZodOptional<z.ZodBoolean>; logging: z.ZodOptional<z.ZodBoolean>; runtime: z.ZodString; buildSpecification: z.ZodOptional<z.ZodString>; runtimeSpecification: z.ZodOptional<z.ZodString>; deploymentRetention: z.ZodOptional<z.ZodNumber>; scopes: z.ZodOptional<z.ZodArray<z.ZodString>>; events: z.ZodOptional<z.ZodArray<z.ZodString>>; schedule: z.ZodOptional<z.ZodString>; timeout: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>; entrypoint: z.ZodOptional<z.ZodString>; commands: z.ZodOptional<z.ZodString>; vars: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>; ignore: z.ZodOptional<z.ZodString>; }, z.core.$strict>>>; sites: z.ZodOptional<z.ZodArray<z.ZodObject<{ path: z.ZodOptional<z.ZodString>; $id: z.ZodString; name: z.ZodString; logging: z.ZodOptional<z.ZodBoolean>; timeout: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodBigInt]>>; framework: z.ZodOptional<z.ZodString>; buildRuntime: z.ZodOptional<z.ZodString>; adapter: z.ZodOptional<z.ZodString>; installCommand: z.ZodOptional<z.ZodString>; buildCommand: z.ZodOptional<z.ZodString>; outputDirectory: z.ZodOptional<z.ZodString>; fallbackFile: z.ZodOptional<z.ZodString>; buildSpecification: z.ZodOptional<z.ZodString>; runtimeSpecification: z.ZodOptional<z.ZodString>; deploymentRetention: z.ZodOptional<z.ZodNumber>; startCommand: z.ZodOptional<z.ZodString>; vars: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>; }, z.core.$strict>>>; databases: z.ZodOptional<z.ZodArray<z.ZodObject<{ $id: z.ZodString; name: z.ZodString; enabled: z.ZodOptional<z.ZodBoolean>; }, z.core.$strict>>>; collections: z.ZodOptional<z.ZodArray<z.ZodObject<{ $id: z.ZodString; $permissions: z.ZodOptional<z.ZodArray<z.ZodString>>; databaseId: z.ZodString; name: z.ZodString; enabled: z.ZodOptional<z.ZodBoolean>; documentSecurity: z.ZodDefault<z.ZodBoolean>; attributes: z.ZodOptional<z.ZodArray<z.ZodObject<{ key: z.ZodString; type: z.ZodEnum<{ string: "string"; bigint: "bigint"; boolean: "boolean"; datetime: "datetime"; integer: "integer"; double: "double"; relationship: "relationship"; varchar: "varchar"; text: "text"; mediumtext: "mediumtext"; longtext: "longtext"; point: "point"; polygon: "polygon"; linestring: "linestring"; }>; required: z.ZodOptional<z.ZodBoolean>; array: z.ZodOptional<z.ZodBoolean>; size: z.ZodOptional<z.ZodNumber>; default: z.ZodOptional<z.ZodAny>; min: z.ZodPreprocess<z.ZodOptional<z.ZodNullable<z.ZodBigInt>>>; max: z.ZodPreprocess<z.ZodOptional<z.ZodNullable<z.ZodBigInt>>>; format: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{ enum: "enum"; email: "email"; ip: "ip"; url: "url"; datetime: "datetime"; }>, z.ZodLiteral<"">]>>; elements: z.ZodOptional<z.ZodArray<z.ZodString>>; relatedCollection: z.ZodOptional<z.ZodString>; relatedTable: z.ZodOptional<z.ZodString>; relationType: z.ZodOptional<z.ZodString>; twoWay: z.ZodOptional<z.ZodBoolean>; twoWayKey: z.ZodOptional<z.ZodString>; onDelete: z.ZodOptional<z.ZodString>; side: z.ZodOptional<z.ZodString>; attributes: z.ZodOptional<z.ZodArray<z.ZodString>>; orders: z.ZodOptional<z.ZodArray<z.ZodString>>; encrypt: z.ZodOptional<z.ZodBoolean>; }, z.core.$strict>>>; indexes: z.ZodOptional<z.ZodArray<z.ZodObject<{ key: z.ZodString; type: z.ZodString; status: z.ZodOptional<z.ZodString>; attributes: z.ZodArray<z.ZodString>; orders: z.ZodOptional<z.ZodArray<z.ZodString>>; }, z.core.$strict>>>; }, z.core.$strict>>>; tablesDB: z.ZodOptional<z.ZodArray<z.ZodObject<{ $id: z.ZodString; name: z.ZodString; enabled: z.ZodOptional<z.ZodBoolean>; }, z.core.$strict>>>; tables: z.ZodOptional<z.ZodArray<z.ZodObject<{ $id: z.ZodString; $permissions: z.ZodOptional<z.ZodArray<z.ZodString>>; databaseId: z.ZodString; name: z.ZodString; enabled: z.ZodOptional<z.ZodBoolean>; rowSecurity: z.ZodDefault<z.ZodBoolean>; columns: z.ZodOptional<z.ZodArray<z.ZodObject<{ key: z.ZodString; type: z.ZodEnum<{ string: "string"; bigint: "bigint"; boolean: "boolean"; datetime: "datetime"; integer: "integer"; double: "double"; relationship: "relationship"; varchar: "varchar"; text: "text"; mediumtext: "mediumtext"; longtext: "longtext"; point: "point"; polygon: "polygon"; linestring: "linestring"; }>; required: z.ZodOptional<z.ZodBoolean>; array: z.ZodOptional<z.ZodBoolean>; size: z.ZodOptional<z.ZodNumber>; default: z.ZodOptional<z.ZodAny>; min: z.ZodPreprocess<z.ZodOptional<z.ZodNullable<z.ZodBigInt>>>; max: z.ZodPreprocess<z.ZodOptional<z.ZodNullable<z.ZodBigInt>>>; format: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{ enum: "enum"; email: "email"; ip: "ip"; url: "url"; datetime: "datetime"; }>, z.ZodLiteral<"">]>>; elements: z.ZodOptional<z.ZodArray<z.ZodString>>; relatedTable: z.ZodOptional<z.ZodString>; relationType: z.ZodOptional<z.ZodString>; twoWay: z.ZodOptional<z.ZodBoolean>; twoWayKey: z.ZodOptional<z.ZodString>; onDelete: z.ZodOptional<z.ZodString>; side: z.ZodOptional<z.ZodString>; columns: z.ZodOptional<z.ZodArray<z.ZodString>>; orders: z.ZodOptional<z.ZodArray<z.ZodString>>; encrypt: z.ZodOptional<z.ZodBoolean>; }, z.core.$strict>>>; indexes: z.ZodOptional<z.ZodArray<z.ZodObject<{ key: z.ZodString; type: z.ZodString; status: z.ZodOptional<z.ZodString>; columns: z.ZodArray<z.ZodString>; orders: z.ZodOptional<z.ZodArray<z.ZodString>>; }, z.core.$strict>>>; }, z.core.$strict>>>; buckets: z.ZodOptional<z.ZodArray<z.ZodObject<{ $id: z.ZodString; $permissions: z.ZodOptional<z.ZodArray<z.ZodString>>; fileSecurity: z.ZodOptional<z.ZodBoolean>; name: z.ZodString; enabled: z.ZodOptional<z.ZodBoolean>; maximumFileSize: z.ZodOptional<z.ZodNumber>; allowedFileExtensions: z.ZodOptional<z.ZodArray<z.ZodString>>; compression: z.ZodOptional<z.ZodString>; encryption: z.ZodOptional<z.ZodBoolean>; antivirus: z.ZodOptional<z.ZodBoolean>; }, z.core.$strict>>>; teams: z.ZodOptional<z.ZodArray<z.ZodObject<{ $id: z.ZodString; name: z.ZodString; }, z.core.$strict>>>; webhooks: z.ZodOptional<z.ZodArray<z.ZodObject<{ $id: z.ZodString; name: z.ZodString; url: z.ZodString; events: z.ZodArray<z.ZodString>; enabled: z.ZodOptional<z.ZodBoolean>; tls: z.ZodOptional<z.ZodBoolean>; }, z.core.$strict>>>; topics: z.ZodOptional<z.ZodArray<z.ZodObject<{ $id: z.ZodString; name: z.ZodString; subscribe: z.ZodOptional<z.ZodArray<z.ZodString>>; }, z.core.$strict>>>; messages: z.ZodOptional<z.ZodArray<z.ZodObject<{ $id: z.ZodString; name: z.ZodString; emailTotal: z.ZodOptional<z.ZodNumber>; smsTotal: z.ZodOptional<z.ZodNumber>; pushTotal: z.ZodOptional<z.ZodNumber>; subscribe: z.ZodOptional<z.ZodArray<z.ZodString>>; }, z.core.$strict>>>; }, z.core.$strict>>; auth: z.ZodOptional<z.ZodObject<{ endpoint: z.ZodOptional<z.ZodString>; projectId: z.ZodOptional<z.ZodString>; apiKey: z.ZodOptional<z.ZodString>; authMode: z.ZodDefault<z.ZodEnum<{ apiKey: "apiKey"; session: "session"; auto: "auto"; }>>; sessionCookie: z.ZodOptional<z.ZodString>; }, z.core.$loose>>; extensions: z.ZodOptional<z.ZodObject<{ functions: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{ forceOverwriteSecrets: z.ZodOptional<z.ZodBoolean>; }, z.core.$loose>>]>>; sites: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; buckets: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; collections: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{ importDefs: z.ZodOptional<z.ZodArray<z.ZodObject<{ type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{ create: "create"; update: "update"; }>>>; filePath: z.ZodString; basePath: z.ZodOptional<z.ZodString>; primaryKeyField: z.ZodDefault<z.ZodString>; idMappings: z.ZodOptional<z.ZodArray<z.ZodObject<{ sourceField: z.ZodString; fieldToSet: z.ZodOptional<z.ZodString>; targetFieldToMatch: z.ZodOptional<z.ZodString>; targetField: z.ZodString; targetCollection: z.ZodString; }, z.core.$strip>>>; createUsers: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodBoolean>>>; updateMapping: z.ZodOptional<z.ZodObject<{ originalIdField: z.ZodString; targetField: z.ZodString; }, z.core.$strip>>; attributeMappings: z.ZodArray<z.ZodObject<{ oldKey: z.ZodOptional<z.ZodString>; oldKeys: z.ZodOptional<z.ZodArray<z.ZodString>>; targetKey: z.ZodString; valueToSet: z.ZodOptional<z.ZodAny>; fileData: z.ZodOptional<z.ZodObject<{ name: z.ZodString; path: z.ZodString; }, z.core.$strip>>; converters: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>; validationActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{ action: z.ZodString; params: z.ZodArray<z.ZodString>; }, z.core.$strip>>>>; postImportActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{ action: z.ZodString; params: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>]>>; }, z.core.$strip>>>>; }, z.core.$strip>>; }, z.core.$strip>>>; attributeDisplayOrder: z.ZodOptional<z.ZodArray<z.ZodString>>; }, z.core.$loose>>]>>; tablesDB: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; tables: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{ importDefs: z.ZodOptional<z.ZodArray<z.ZodObject<{ type: z.ZodOptional<z.ZodDefault<z.ZodEnum<{ create: "create"; update: "update"; }>>>; filePath: z.ZodString; basePath: z.ZodOptional<z.ZodString>; primaryKeyField: z.ZodDefault<z.ZodString>; idMappings: z.ZodOptional<z.ZodArray<z.ZodObject<{ sourceField: z.ZodString; fieldToSet: z.ZodOptional<z.ZodString>; targetFieldToMatch: z.ZodOptional<z.ZodString>; targetField: z.ZodString; targetCollection: z.ZodString; }, z.core.$strip>>>; createUsers: z.ZodOptional<z.ZodNullable<z.ZodDefault<z.ZodBoolean>>>; updateMapping: z.ZodOptional<z.ZodObject<{ originalIdField: z.ZodString; targetField: z.ZodString; }, z.core.$strip>>; attributeMappings: z.ZodArray<z.ZodObject<{ oldKey: z.ZodOptional<z.ZodString>; oldKeys: z.ZodOptional<z.ZodArray<z.ZodString>>; targetKey: z.ZodString; valueToSet: z.ZodOptional<z.ZodAny>; fileData: z.ZodOptional<z.ZodObject<{ name: z.ZodString; path: z.ZodString; }, z.core.$strip>>; converters: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodString>>>; validationActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{ action: z.ZodString; params: z.ZodArray<z.ZodString>; }, z.core.$strip>>>>; postImportActions: z.ZodOptional<z.ZodDefault<z.ZodArray<z.ZodObject<{ action: z.ZodString; params: z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodAny>]>>; }, z.core.$strip>>>>; }, z.core.$strip>>; }, z.core.$strip>>>; attributeDisplayOrder: z.ZodOptional<z.ZodArray<z.ZodString>>; }, z.core.$loose>>]>>; teams: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; webhooks: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; topics: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; messages: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodRecord<z.ZodString, z.ZodObject<{}, z.core.$loose>>]>>; }, z.core.$loose>>; apiMode: z.ZodDefault<z.ZodEnum<{ auto: "auto"; legacy: "legacy"; tablesdb: "tablesdb"; }>>; logging: z.ZodOptional<z.ZodObject<{ enabled: z.ZodDefault<z.ZodBoolean>; level: z.ZodDefault<z.ZodEnum<{ error: "error"; warn: "warn"; info: "info"; debug: "debug"; }>>; logDirectory: z.ZodOptional<z.ZodString>; console: z.ZodDefault<z.ZodBoolean>; }, z.core.$loose>>; enableBackups: z.ZodDefault<z.ZodBoolean>; backupInterval: z.ZodDefault<z.ZodNumber>; backupRetention: z.ZodDefault<z.ZodNumber>; enableBackupCleanup: z.ZodDefault<z.ZodBoolean>; enableMockData: z.ZodDefault<z.ZodBoolean>; documentBucketId: z.ZodDefault<z.ZodString>; usersCollectionName: z.ZodDefault<z.ZodString>; schemaConfig: z.ZodOptional<z.ZodObject<{ outputDirectory: z.ZodDefault<z.ZodString>; yamlSchemaDirectory: z.ZodDefault<z.ZodString>; importDirectory: z.ZodDefault<z.ZodString>; collectionsDirectory: z.ZodDefault<z.ZodString>; tablesDirectory: z.ZodDefault<z.ZodString>; }, z.core.$loose>>; }, z.core.$loose>; export type AppwriteUtilsExtension = z.infer<typeof AppwriteUtilsExtensionSchema>; export type AppwriteUtilsExtensionInput = z.input<typeof AppwriteUtilsExtensionSchema>; export type AuthBlock = z.infer<typeof AuthBlockSchema>; export type LoggingBlock = z.infer<typeof LoggingBlockSchema>; export type ResourceExtensions = z.infer<typeof ResourceExtensionsSchema>; export type FunctionExtension = z.infer<typeof FunctionExtensionSchema>; export type SiteExtension = z.infer<typeof SiteExtensionSchema>; export type BucketExtension = z.infer<typeof BucketExtensionSchema>; export type CollectionExtension = z.infer<typeof CollectionExtensionSchema>; export type TableExtension = z.infer<typeof TableExtensionSchema>; export type PerFunctionConfig = z.infer<typeof PerFunctionConfigSchema>; export type PerFunctionConfigInput = z.input<typeof PerFunctionConfigSchema>; export type PerSiteConfig = z.infer<typeof PerSiteConfigSchema>; export type PerSiteConfigInput = z.input<typeof PerSiteConfigSchema>; export type SchemaConfigBlock = z.infer<typeof SchemaConfigSchema>;