@tailor-platform/sdk 0.12.3 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +78 -0
- package/dist/cli/api.d.mts +3 -2
- package/dist/cli/api.mjs +2 -2
- package/dist/cli/index.mjs +475 -16
- package/dist/cli/index.mjs.map +1 -1
- package/dist/configure/index.d.mts +3 -3
- package/dist/configure/index.mjs +1 -1
- package/dist/configure/index.mjs.map +1 -1
- package/dist/{index-R8wrvOCv.d.mts → index-BbM-sCHw.d.mts} +25 -28
- package/dist/{job-B8jI-poE.mjs → job-vYIg6hFf.mjs} +3 -13
- package/dist/job-vYIg6hFf.mjs.map +1 -0
- package/dist/{list-DeXjmUU0.mjs → list-D-R1mEOM.mjs} +1972 -1859
- package/dist/list-D-R1mEOM.mjs.map +1 -0
- package/dist/{types-BdwXWhOF.d.mts → types-JFLKYNHP.d.mts} +14 -10
- package/dist/utils/test/index.d.mts +2 -2
- package/docs/cli-reference.md +122 -0
- package/docs/core-concepts.md +2 -2
- package/package.json +1 -1
- package/dist/job-B8jI-poE.mjs.map +0 -1
- package/dist/list-DeXjmUU0.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"list-DeXjmUU0.mjs","names":["config: AuthOwnConfig","tailorDBServices: ReadonlyArray<TailorDBService>","userProfileNamespace: string | undefined","tenantProviderNamespace: string | undefined","files: string[]","config: ExecutorServiceConfig","namespace: string","config: ResolverServiceConfig","namespace: string","config: TailorDBServiceConfig","allTypes: Record<string, TailorDBType>","fields: Record<string, ParsedField>","forwardRelationships: Record<string, ParsedRelationship>","parsedField: ParsedField","name: string","config: AppConfig","workflows: Record<string, Workflow>","workflowSources: Array<{ workflow: Workflow; sourceFile: string }>","collectedJobs: CollectedJob[]","unusedJobs: string[]","notExportedJobs: string[]","jobs: Array<{\n name: string;\n exportName: string;\n sourceFile: string;\n }>","workflow: Workflow | null","executors: ExecutorInfo[]","tsconfig: string | undefined","resolvers: ResolverInfo[]","tsconfig: string | undefined","jobs: JobLocation[]","statementRange: { start: number; end: number } | undefined","replacements: Replacement[]","tsconfig: string | undefined","builtinGenerators","enums: EnumConstantMetadata[\"enums\"]","lines: string[]","options: {\n distPath: string;\n }","allEnums: EnumDefinition[]","files: GeneratorResult[\"files\"]","fileFields: string[]","options: {\n distPath: string;\n }","files: GeneratorResult[\"files\"]","allNamespaceData: { namespace: string; types: FileUtilMetadata[] }[]","type: string","utilityTypeDeclarations: string[]","options: {\n distPath: string;\n }","files: GeneratorResult[\"files\"]","allNamespaceData: KyselyNamespaceMetadata[]","indexes: IndexDefinition[]","foreignKeys: ForeignKeyDefinition[]","schemaOptions: string[]","entityDependencies: Record<\n /* outputDir */ string,\n Record</* type */ string, /* dependencies */ string[]>\n >","files: GeneratorResult[\"files\"]","allGenerators: Generator[]","packageJson: PackageJson | null","lastError: unknown","items: T[]","users: PfConfig[\"users\"]","profiles: PfConfig[\"profiles\"]","currentUser: PfConfig[\"current_user\"]","packageJson","title: string","trn","changeSet: ChangeSet<\n CreateApplication,\n UpdateApplication,\n DeleteApplication\n >","authNamespace: string | undefined","authIdpConfigName: string | undefined","idpConfigs","serviceType: Subgraph_ServiceType","planServices","trn","changeSet: ChangeSet<CreateService, UpdateService, DeleteService>","conflicts: OwnerConflict[]","unmanaged: UnmanagedResource[]","existingServices: WithLabel<(typeof withoutLabel)[number]>","changeSet: ChangeSet<CreateClient, UpdateClient, DeleteClient>","client","auths: Readonly<AuthService>[]","planServices","trn","changeSet: ChangeSet<CreateService, UpdateService, DeleteService>","conflicts: OwnerConflict[]","unmanaged: UnmanagedResource[]","existingServices: WithLabel<(typeof withoutLabel)[number]>","changeSet: ChangeSet<\n CreateIdPConfig,\n UpdateIdPConfig,\n DeleteIdPConfig\n >","idpConfig","changeSet: ChangeSet<\n CreateUserProfileConfig,\n UpdateUserProfileConfig,\n DeleteUserProfileConfig\n >","changeSet: ChangeSet<\n CreateTenantConfig,\n UpdateTenantConfig,\n DeleteTenantConfig\n >","changeSet: ChangeSet<\n CreateMachineUser,\n UpdateMachineUser,\n DeleteMachineUser\n >","ret: Record<string, MessageInitShape<typeof ValueSchema>>","changeSet: ChangeSet<\n CreateOAuth2Clients,\n UpdateOAuth2Client,\n DeleteOAuth2Client\n >","changeSet: ChangeSet<\n CreateSCIMConfig,\n UpdateSCIMConfig,\n DeleteSCIMConfig\n >","changeSet: ChangeSet<\n CreateSCIMResource,\n UpdateSCIMResource,\n DeleteSCIMResource\n >","attr","trn","changeSet: ChangeSet<CreateExecutor, UpdateExecutor, DeleteExecutor>","conflicts: OwnerConflict[]","unmanaged: UnmanagedResource[]","executors","existingExecutors: WithLabel<(typeof withoutLabel)[number]>","triggerType: ExecutorTriggerType","triggerConfig: MessageInitShape<typeof ExecutorTriggerConfigSchema>","eventType: { [key in Trigger[\"kind\"]]?: string }","targetType: ExecutorTargetType","targetConfig: MessageInitShape<typeof ExecutorTargetConfigSchema>","value: MessageInitShape<\n typeof ExecutorTargetWebhookHeaderSchema\n >[\"value\"]","pipelines: Readonly<ResolverService>[]","planServices","trn","changeSet: ChangeSet<CreateService, UpdateService, DeleteService>","conflicts: OwnerConflict[]","unmanaged: UnmanagedResource[]","existingServices: WithLabel<(typeof withoutLabel)[number]>","changeSet: ChangeSet<CreateResolver, UpdateResolver, DeleteResolver>","pipelines: MessageInitShape<typeof PipelineResolver_PipelineSchema>[]","inputs: MessageInitShape<typeof PipelineResolver_FieldSchema>[]","response: MessageInitShape<typeof PipelineResolver_FieldSchema>","type: MessageInitShape<typeof PipelineResolver_TypeSchema>","trn","changeSet: ChangeSet<\n CreateStaticWebsite,\n UpdateStaticWebsite,\n DeleteStaticWebsite\n >","conflicts: OwnerConflict[]","unmanaged: UnmanagedResource[]","existingWebsites: WithLabel<(typeof withoutLabel)[number]>","tailordbs: TailorDBService[]","changeSet: ChangeSet<CreateService, UpdateService, DeleteService>","conflicts: OwnerConflict[]","unmanaged: UnmanagedResource[]","existingServices: WithLabel<(typeof withoutLabel)[number]>","changeSet: ChangeSet<CreateType, UpdateType, DeleteType>","fields: Record<\n string,\n MessageInitShape<typeof TailorDBType_FieldConfigSchema>\n >","fieldEntry: MessageInitShape<\n typeof TailorDBType_FieldConfigSchema\n >","relationships: Record<\n string,\n MessageInitShape<typeof TailorDBType_RelationshipConfigSchema>\n >","indexes: Record<\n string,\n MessageInitShape<typeof TailorDBType_IndexSchema>\n >","files: Record<\n string,\n MessageInitShape<typeof TailorDBType_FileConfigSchema>\n >","nestedFields: Record<\n string,\n MessageInitShape<typeof TailorDBType_FieldConfigSchema>\n >","ret: MessageInitShape<typeof TailorDBType_PermissionSchema>","permit: TailorDBType_Permission_Permit","op: TailorDBType_Permission_Operator","changeSet: ChangeSet<\n CreateGqlPermission,\n UpdateGqlPermission,\n DeleteGqlPermission\n >","actions: TailorDBGQLPermission_Action[]","permit: TailorDBGQLPermission_Permit","op: TailorDBGQLPermission_Operator","jobFunctions: { [key: string]: bigint }","changeSet: ChangeSet<CreateWorkflow, UpdateWorkflow, DeleteWorkflow>","workflowResult: WorkflowLoadResult | undefined","app","pipeline","ctx: PlanContext","allConflicts: OwnerConflict[]","allUnmanaged: UnmanagedResource[]","importantDeletions: ImportantResourceDeletion[]","code: WatcherErrorCode","filePath?: string","originalError?: Error","options: Parameters<MadgeLoader>[1]","result: string[]","options: WatcherOptions","watchGroup: WatchGroup","allFiles: string[]","generators: Generator[]","configPath?: string","tailordbResults: TailorDBNamespaceResult<any>[]","resolverResults: ResolverNamespaceResult<any>[]","relativePath","loadOptions","ctx: PlanContext","validateUuid","listCommand","validateUuid","listCommand"],"sources":["../src/cli/application/auth/service.ts","../src/cli/application/file-loader.ts","../src/parser/service/common.ts","../src/parser/service/executor/schema.ts","../src/cli/application/executor/service.ts","../src/parser/service/resolver/schema.ts","../src/cli/application/resolver/service.ts","../src/cli/application/tailordb/service.ts","../src/parser/service/idp/schema.ts","../src/parser/service/staticwebsite/schema.ts","../src/cli/application/index.ts","../src/parser/service/workflow/schema.ts","../src/cli/application/workflow/service.ts","../src/cli/bundler/executor/loader.ts","../src/cli/bundler/executor/executor-bundler.ts","../src/cli/bundler/resolver/loader.ts","../src/cli/bundler/resolver/resolver-bundler.ts","../src/cli/bundler/workflow/ast-transformer.ts","../src/cli/bundler/workflow/workflow-bundler.ts","../src/parser/generator-config/index.ts","../src/cli/generator/builtin/enum-constants/enum-processor.ts","../src/cli/generator/builtin/enum-constants/index.ts","../src/cli/generator/builtin/file-utils/file-processor.ts","../src/cli/generator/builtin/file-utils/index.ts","../src/cli/generator/builtin/kysely-type/type-processor.ts","../src/cli/generator/builtin/kysely-type/index.ts","../src/cli/generator/builtin/seed/gql-ingest-processor.ts","../src/cli/generator/builtin/seed/idp-user-processor.ts","../src/cli/generator/builtin/seed/lines-db-processor.ts","../src/cli/generator/builtin/seed/index.ts","../src/cli/mock.ts","../src/cli/config-loader.ts","../src/cli/type-generator.ts","../src/cli/args.ts","../../tailor-proto/src/buf/validate/validate_pb.js","../../tailor-proto/src/tailor/fieldmask/v1/option_pb.js","../../tailor-proto/src/google/api/field_behavior_pb.js","../../tailor-proto/src/tailor/v1/application_resource_pb.js","../../tailor-proto/src/tailor/v1/resource_pb.js","../../tailor-proto/src/tailor/v1/application_pb.js","../../tailor-proto/src/tailor/v1/secret_manager_resource_pb.js","../../tailor-proto/src/tailor/v1/auth_resource_pb.js","../../tailor-proto/src/tailor/v1/auth_pb.js","../../tailor-proto/src/tailor/v1/events_resource_pb.js","../../tailor-proto/src/tailor/v1/events_pb.js","../../tailor-proto/src/tailor/v1/executor_resource_pb.js","../../tailor-proto/src/tailor/v1/executor_pb.js","../../tailor-proto/src/tailor/v1/function_resource_pb.js","../../tailor-proto/src/tailor/v1/function_pb.js","../../tailor-proto/src/tailor/v1/idp_resource_pb.js","../../tailor-proto/src/tailor/v1/idp_pb.js","../../tailor-proto/src/tailor/v1/metadata_resource_pb.js","../../tailor-proto/src/tailor/v1/metadata_pb.js","../../tailor-proto/src/tailor/v1/meter_pb.js","../../tailor-proto/src/tailor/v1/pipeline_resource_pb.js","../../tailor-proto/src/tailor/v1/pipeline_pb.js","../../tailor-proto/src/tailor/v1/secret_manager_pb.js","../../tailor-proto/src/tailor/v1/stateflow_resource_pb.js","../../tailor-proto/src/tailor/v1/stateflow_pb.js","../../tailor-proto/src/tailor/v1/staticwebsite_resource_pb.js","../../tailor-proto/src/tailor/v1/staticwebsite_pb.js","../../tailor-proto/src/tailor/v1/tailordb_resource_pb.js","../../tailor-proto/src/tailor/v1/tailordb_pb.js","../../tailor-proto/src/tailor/v1/workflow_resource_pb.js","../../tailor-proto/src/tailor/v1/workflow_pb.js","../../tailor-proto/src/tailor/v1/workspace_resource_pb.js","../../tailor-proto/src/tailor/v1/workspace_pb.js","../../tailor-proto/src/tailor/v1/service_pb.js","../src/cli/package-json.ts","../src/cli/client.ts","../src/cli/context.ts","../src/cli/apply/services/label.ts","../src/cli/apply/services/index.ts","../src/cli/apply/services/application.ts","../src/cli/apply/services/idp.ts","../src/cli/apply/services/auth.ts","../src/cli/apply/services/confirm.ts","../src/cli/apply/services/executor.ts","../src/cli/apply/services/resolver.ts","../src/cli/apply/services/staticwebsite.ts","../src/cli/apply/services/tailordb.ts","../src/cli/apply/services/workflow.ts","../src/cli/apply/index.ts","../src/cli/generator/watch/index.ts","../src/cli/generator/index.ts","../src/cli/show.ts","../src/cli/remove.ts","../src/cli/workspace/transform.ts","../src/cli/workspace/create.ts","../src/cli/workspace/list.ts","../src/cli/workspace/delete.ts","../src/cli/machineuser/list.ts","../src/cli/machineuser/token.ts","../src/cli/oauth2client/transform.ts","../src/cli/oauth2client/get.ts","../src/cli/oauth2client/list.ts"],"sourcesContent":["import type { TailorDBService } from \"@/cli/application/tailordb/service\";\nimport type { AuthOwnConfig } from \"@/configure/services/auth\";\n\nexport class AuthService {\n private _userProfile?: AuthOwnConfig[\"userProfile\"] & {\n namespace: string;\n };\n private _tenantProvider?: AuthOwnConfig[\"tenantProvider\"] & {\n namespace: string;\n };\n\n constructor(\n public readonly config: AuthOwnConfig,\n public readonly tailorDBServices: ReadonlyArray<TailorDBService>,\n ) {}\n\n get userProfile() {\n return this._userProfile;\n }\n\n get tenantProvider() {\n return this._tenantProvider;\n }\n\n async resolveNamespaces(): Promise<void> {\n // Load types for all TailorDB services\n await Promise.all(\n this.tailorDBServices.map((service) => service.loadTypes()),\n );\n\n // Default to single namespace if only one service exists\n if (this.tailorDBServices.length === 1) {\n const singleNamespace = this.tailorDBServices[0].namespace;\n this._userProfile = this.config.userProfile\n ? {\n ...this.config.userProfile,\n namespace: singleNamespace,\n }\n : undefined;\n this._tenantProvider = this.config.tenantProvider\n ? {\n ...this.config.tenantProvider,\n namespace: singleNamespace,\n }\n : undefined;\n return;\n }\n\n // Extract type names to search for\n const userProfileTypeName =\n this.config.userProfile?.type &&\n typeof this.config.userProfile.type === \"object\" &&\n \"name\" in this.config.userProfile.type\n ? this.config.userProfile.type.name\n : undefined;\n\n const tenantProviderTypeName =\n typeof this.config.tenantProvider?.type === \"string\"\n ? this.config.tenantProvider.type\n : undefined;\n\n // Find namespaces in a single loop\n let userProfileNamespace: string | undefined;\n let tenantProviderNamespace: string | undefined;\n\n for (const service of this.tailorDBServices) {\n const types = service.getTypes();\n\n if (\n userProfileTypeName &&\n !userProfileNamespace &&\n Object.prototype.hasOwnProperty.call(types, userProfileTypeName)\n ) {\n userProfileNamespace = service.namespace;\n }\n if (\n tenantProviderTypeName &&\n !tenantProviderNamespace &&\n Object.prototype.hasOwnProperty.call(types, tenantProviderTypeName)\n ) {\n tenantProviderNamespace = service.namespace;\n }\n\n // Early exit if both are found\n if (userProfileNamespace && tenantProviderNamespace) {\n break;\n }\n }\n\n if (this.config.userProfile && !userProfileNamespace) {\n throw new Error(\n `userProfile type \"${this.config.userProfile.type.name}\" not found in any TailorDB namespace`,\n );\n }\n\n if (this.config.tenantProvider && !tenantProviderNamespace) {\n throw new Error(\n `tenantProvider type \"${this.config.tenantProvider.type}\" not found in any TailorDB namespace`,\n );\n }\n\n this._userProfile = this.config.userProfile\n ? {\n ...this.config.userProfile,\n namespace: userProfileNamespace!,\n }\n : undefined;\n this._tenantProvider = this.config.tenantProvider\n ? {\n ...this.config.tenantProvider,\n namespace: tenantProviderNamespace!,\n }\n : undefined;\n }\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nexport interface FileLoadConfig {\n files: string[];\n ignores?: string[];\n}\n\nconst DEFAULT_IGNORE_PATTERNS = [\"**/*.test.ts\", \"**/*.spec.ts\"];\n\n/**\n * Load files matching the given patterns, excluding files that match ignore patterns.\n * By default, test files (*.test.ts, *.spec.ts) are excluded unless ignores is explicitly specified.\n *\n * @param config - Configuration with files patterns and optional ignores patterns\n * @returns Array of absolute file paths\n */\nexport function loadFilesWithIgnores(config: FileLoadConfig): string[] {\n // Use user-provided patterns if specified, otherwise use defaults\n const ignorePatterns = config.ignores ?? DEFAULT_IGNORE_PATTERNS;\n\n const ignoreFiles = new Set<string>();\n for (const ignorePattern of ignorePatterns) {\n const absoluteIgnorePattern = path.resolve(process.cwd(), ignorePattern);\n try {\n const matchedIgnoreFiles = fs.globSync(absoluteIgnorePattern);\n matchedIgnoreFiles.forEach((file) => ignoreFiles.add(file));\n } catch (error) {\n console.warn(`Failed to glob ignore pattern \"${ignorePattern}\":`, error);\n }\n }\n\n const files: string[] = [];\n for (const pattern of config.files) {\n const absolutePattern = path.resolve(process.cwd(), pattern);\n try {\n const matchedFiles = fs.globSync(absolutePattern);\n // Filter out ignored files\n const filteredFiles = matchedFiles.filter(\n (file) => !ignoreFiles.has(file),\n );\n files.push(...filteredFiles);\n } catch (error) {\n console.warn(`Failed to glob pattern \"${pattern}\":`, error);\n }\n }\n\n return files;\n}\n","import { z } from \"zod\";\n\n// Use `z.custom` instead of `z.function`, since `z.function` changes `toString` representation.\n// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\nexport const functionSchema = z.custom<Function>(\n (val) => typeof val === \"function\",\n);\n","import { z } from \"zod\";\nimport { functionSchema } from \"../common\";\n\nexport const InvokerSchema = z.object({\n authName: z.string(),\n machineUser: z.string(),\n});\n\nexport const RecordTriggerSchema = z.object({\n kind: z.enum([\"recordCreated\", \"recordUpdated\", \"recordDeleted\"]),\n typeName: z.string(),\n condition: functionSchema.optional(),\n});\n\nexport const ResolverExecutedTriggerSchema = z.object({\n kind: z.literal(\"resolverExecuted\"),\n resolverName: z.string(),\n condition: functionSchema.optional(),\n});\n\nexport const ScheduleTriggerSchema = z.object({\n kind: z.literal(\"schedule\"),\n cron: z.string(),\n timezone: z.string().optional().default(\"UTC\"),\n});\n\nexport const IncomingWebhookTriggerSchema = z.object({\n kind: z.literal(\"incomingWebhook\"),\n});\n\nexport const TriggerSchema = z.discriminatedUnion(\"kind\", [\n RecordTriggerSchema,\n ResolverExecutedTriggerSchema,\n ScheduleTriggerSchema,\n IncomingWebhookTriggerSchema,\n]);\n\nexport const FunctionOperationSchema = z.object({\n kind: z.enum([\"function\", \"jobFunction\"]),\n body: functionSchema,\n invoker: InvokerSchema.optional(),\n});\n\nexport const GqlOperationSchema = z.object({\n kind: z.literal(\"graphql\"),\n appName: z.string().optional(),\n query: z.string(),\n variables: functionSchema.optional(),\n invoker: InvokerSchema.optional(),\n});\n\nexport const WebhookOperationSchema = z.object({\n kind: z.literal(\"webhook\"),\n url: functionSchema,\n body: functionSchema.optional(),\n headers: z\n .record(\n z.string(),\n z.union([z.string(), z.object({ vault: z.string(), key: z.string() })]),\n )\n .optional(),\n});\n\nexport const OperationSchema = z.discriminatedUnion(\"kind\", [\n FunctionOperationSchema,\n GqlOperationSchema,\n WebhookOperationSchema,\n]);\n\nexport const ExecutorSchema = z.object({\n name: z.string(),\n description: z.string().optional(),\n disabled: z.boolean().optional().default(false),\n trigger: TriggerSchema,\n operation: OperationSchema,\n});\n","import * as path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { styleText } from \"node:util\";\nimport { loadFilesWithIgnores } from \"@/cli/application/file-loader\";\nimport { type ExecutorServiceConfig } from \"@/configure/services/executor/types\";\nimport { type Executor, ExecutorSchema } from \"@/parser/service/executor\";\n\nexport class ExecutorService {\n private executors: Record<string, Executor> = {};\n\n constructor(public readonly config: ExecutorServiceConfig) {}\n\n async loadExecutors() {\n if (Object.keys(this.executors).length > 0) {\n return this.executors;\n }\n if (!this.config.files || this.config.files.length === 0) {\n return;\n }\n\n const executorFiles = loadFilesWithIgnores(this.config);\n\n console.log(\"\");\n console.log(\n \"Found\",\n styleText(\"cyanBright\", executorFiles.length.toString()),\n \"executor files\",\n );\n\n for (const executorFile of executorFiles) {\n await this.loadExecutorForFile(executorFile);\n }\n return this.executors;\n }\n\n async loadExecutorForFile(executorFile: string, timestamp?: Date) {\n try {\n const baseUrl = pathToFileURL(executorFile).href;\n const moduleSpecifier =\n timestamp === undefined\n ? baseUrl\n : `${baseUrl}?t=${timestamp.getTime()}`;\n\n const executorModule = await import(moduleSpecifier);\n const result = ExecutorSchema.safeParse(executorModule.default);\n if (result.success) {\n const relativePath = path.relative(process.cwd(), executorFile);\n console.log(\n \"Executor:\",\n styleText(\"greenBright\", `\"${result.data.name}\"`),\n \"loaded from\",\n styleText(\"cyan\", relativePath),\n );\n this.executors[executorFile] = result.data;\n }\n } catch (error) {\n const relativePath = path.relative(process.cwd(), executorFile);\n console.error(\n styleText(\"red\", \"Failed to load executor from\"),\n styleText(\"redBright\", relativePath),\n );\n console.error(error);\n throw error;\n }\n return this.executors[executorFile];\n }\n\n getExecutors() {\n return this.executors;\n }\n}\n","import { z } from \"zod\";\nimport { functionSchema } from \"../common\";\n\nexport const TailorFieldTypeSchema = z.enum([\n \"uuid\",\n \"string\",\n \"boolean\",\n \"integer\",\n \"float\",\n \"enum\",\n \"date\",\n \"datetime\",\n \"time\",\n \"nested\",\n]);\n\nexport const QueryTypeSchema = z.union([\n z.literal(\"query\"),\n z.literal(\"mutation\"),\n]);\n\nexport const AllowedValueSchema = z.object({\n value: z.string(),\n description: z.string().optional(),\n});\n\nexport const FieldMetadataSchema = z.object({\n required: z.boolean().optional(),\n array: z.boolean().optional(),\n description: z.string().optional(),\n allowedValues: z.array(AllowedValueSchema).optional(),\n hooks: z\n .object({\n create: functionSchema.optional(),\n update: functionSchema.optional(),\n })\n .optional(),\n typeName: z.string().optional(),\n});\n\nexport const TailorFieldSchema = z.object({\n type: TailorFieldTypeSchema,\n metadata: FieldMetadataSchema,\n get fields() {\n return z.record(z.string(), TailorFieldSchema);\n },\n});\n\nexport const ResolverSchema = z.object({\n operation: QueryTypeSchema,\n name: z.string(),\n description: z.string().optional(),\n input: z.record(z.string(), TailorFieldSchema).optional(),\n body: functionSchema,\n output: TailorFieldSchema,\n});\n","import * as path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { styleText } from \"node:util\";\nimport { loadFilesWithIgnores } from \"@/cli/application/file-loader\";\nimport { type ResolverServiceConfig } from \"@/configure/services/resolver/types\";\nimport { type Resolver, ResolverSchema } from \"@/parser/service/resolver\";\n\nexport class ResolverService {\n private resolvers: Record<string, Resolver> = {};\n\n constructor(\n public readonly namespace: string,\n public readonly config: ResolverServiceConfig,\n ) {}\n\n async loadResolvers(): Promise<void> {\n if (Object.keys(this.resolvers).length > 0) {\n return;\n }\n if (!this.config.files || this.config.files.length === 0) {\n return;\n }\n\n const resolverFiles = loadFilesWithIgnores(this.config);\n\n console.log(\"\");\n console.log(\n \"Found\",\n styleText(\"cyanBright\", resolverFiles.length.toString()),\n \"resolver files for service\",\n styleText(\"cyanBright\", `\"${this.namespace}\"`),\n );\n\n for (const resolverFile of resolverFiles) {\n await this.loadResolverForFile(resolverFile);\n }\n }\n\n async loadResolverForFile(resolverFile: string, timestamp?: Date) {\n try {\n const baseUrl = pathToFileURL(resolverFile).href;\n const moduleSpecifier =\n timestamp === undefined\n ? baseUrl\n : `${baseUrl}?t=${timestamp.getTime()}`;\n\n const resolverModule = await import(moduleSpecifier);\n const result = ResolverSchema.safeParse(resolverModule.default);\n if (result.success) {\n const relativePath = path.relative(process.cwd(), resolverFile);\n console.log(\n \"Resolver:\",\n styleText(\"greenBright\", `\"${result.data.name}\"`),\n \"loaded from\",\n styleText(\"cyan\", relativePath),\n );\n this.resolvers[resolverFile] = result.data;\n }\n } catch (error) {\n const relativePath = path.relative(process.cwd(), resolverFile);\n console.error(\n styleText(\"red\", \"Failed to load resolver from\"),\n styleText(\"redBright\", relativePath),\n );\n console.error(error);\n throw error;\n }\n return this.resolvers[resolverFile];\n }\n\n getResolvers(): Record<string, Resolver> {\n return this.resolvers;\n }\n}\n","import * as path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { styleText } from \"node:util\";\nimport * as inflection from \"inflection\";\nimport { loadFilesWithIgnores } from \"@/cli/application/file-loader\";\nimport { type TailorDBType } from \"@/configure/services/tailordb/schema\";\nimport { type TailorDBServiceConfig } from \"@/configure/services/tailordb/types\";\nimport type {\n ParsedTailorDBType,\n ParsedField,\n ParsedRelationship,\n} from \"@/parser/service/tailordb/types\";\n\nexport class TailorDBService {\n private rawTypes: Record<string, Record<string, TailorDBType>> = {};\n private types: Record<string, ParsedTailorDBType> = {};\n private typeSourceInfo: Record<\n string,\n { filePath: string; exportName: string }\n > = {};\n\n constructor(\n public readonly namespace: string,\n public readonly config: TailorDBServiceConfig,\n ) {}\n\n getTypes() {\n return this.types as Readonly<typeof this.types>;\n }\n\n getTypeSourceInfo() {\n return this.typeSourceInfo as Readonly<typeof this.typeSourceInfo>;\n }\n\n async loadTypes() {\n if (Object.keys(this.rawTypes).length > 0) {\n return this.rawTypes;\n }\n\n if (!this.config.files || this.config.files.length === 0) {\n return;\n }\n\n const typeFiles = loadFilesWithIgnores(this.config);\n\n console.log(\"\");\n console.log(\n \"Found\",\n styleText(\"cyanBright\", typeFiles.length.toString()),\n \"type files for TailorDB service\",\n styleText(\"cyanBright\", `\"${this.namespace}\"`),\n );\n\n for (const typeFile of typeFiles) {\n await this.loadTypesForFile(typeFile);\n }\n this.parseTypes();\n return this.types;\n }\n\n async loadTypesForFile(typeFile: string, timestamp?: Date) {\n this.rawTypes[typeFile] = {};\n try {\n const baseUrl = pathToFileURL(typeFile).href;\n const moduleSpecifier =\n timestamp === undefined\n ? baseUrl\n : `${baseUrl}?t=${timestamp.getTime()}`;\n\n const module = await import(moduleSpecifier);\n\n for (const exportName of Object.keys(module)) {\n const exportedValue = module[exportName];\n\n const isDBTypeLike =\n exportedValue &&\n typeof exportedValue === \"object\" &&\n exportedValue.constructor?.name === \"TailorDBType\" &&\n typeof exportedValue.name === \"string\" &&\n typeof exportedValue.fields === \"object\" &&\n exportedValue.metadata &&\n typeof exportedValue.metadata === \"object\";\n\n if (isDBTypeLike) {\n const relativePath = path.relative(process.cwd(), typeFile);\n console.log(\n \"Type:\",\n styleText(\"greenBright\", `\"${exportName}\"`),\n \"loaded from\",\n styleText(\"cyan\", relativePath),\n );\n this.rawTypes[typeFile][exportedValue.name] = exportedValue;\n // Store source info mapping\n this.typeSourceInfo[exportedValue.name] = {\n filePath: typeFile,\n exportName,\n };\n }\n }\n } catch (error) {\n const relativePath = path.relative(process.cwd(), typeFile);\n console.error(\n styleText(\"red\", \"Failed to load type from\"),\n styleText(\"redBright\", relativePath),\n );\n console.error(error);\n throw error;\n }\n this.parseTypes();\n return this.rawTypes[typeFile];\n }\n\n private parseTypes() {\n const allTypes: Record<string, TailorDBType> = {};\n for (const fileTypes of Object.values(this.rawTypes)) {\n for (const [typeName, type] of Object.entries(fileTypes)) {\n allTypes[typeName] = type;\n }\n }\n\n this.types = {};\n for (const [typeName, type] of Object.entries(allTypes)) {\n this.types[typeName] = this.parseTailorDBType(type);\n }\n\n this.buildBackwardRelationships(this.types);\n }\n\n private parseTailorDBType(type: TailorDBType): ParsedTailorDBType {\n const metadata = type.metadata;\n const schema = metadata.schema;\n\n const pluralForm =\n schema?.settings?.pluralForm || inflection.pluralize(type.name);\n\n const fields: Record<string, ParsedField> = {};\n const forwardRelationships: Record<string, ParsedRelationship> = {};\n\n for (const [fieldName, fieldDef] of Object.entries(type.fields)) {\n const fieldConfig = schema.fields?.[fieldName];\n if (!fieldConfig) continue;\n\n const parsedField: ParsedField = { name: fieldName, config: fieldConfig };\n\n const ref = (fieldDef as any).reference;\n if (ref) {\n const targetType = ref.type?.name;\n if (targetType) {\n const forwardName =\n ref.nameMap?.[0] || inflection.camelize(targetType, true);\n const backwardName = ref.nameMap?.[1] || \"\";\n const key = ref.key || \"id\";\n const unique = (fieldDef as any).metadata?.unique ?? false;\n\n parsedField.relation = {\n targetType,\n forwardName,\n backwardName,\n key,\n unique,\n };\n\n forwardRelationships[forwardName] = {\n name: forwardName,\n targetType,\n targetField: fieldName,\n sourceField: key,\n isArray: false,\n description: ref.type?.metadata?.description || \"\",\n };\n }\n }\n\n fields[fieldName] = parsedField;\n }\n\n return {\n name: type.name,\n pluralForm,\n description: schema?.description,\n fields,\n forwardRelationships,\n backwardRelationships: {},\n settings: schema?.settings || {},\n permissions: schema?.permissions || {},\n indexes: schema?.indexes,\n files: schema?.files,\n };\n }\n\n private buildBackwardRelationships(\n types: Record<string, ParsedTailorDBType>,\n ): void {\n for (const [typeName, type] of Object.entries(types)) {\n for (const [otherTypeName, otherType] of Object.entries(types)) {\n for (const [fieldName, field] of Object.entries(otherType.fields)) {\n if (field.relation && field.relation.targetType === typeName) {\n let backwardName = field.relation.backwardName;\n\n if (!backwardName) {\n const lowerName = inflection.camelize(otherTypeName, true);\n backwardName = field.relation.unique\n ? inflection.singularize(lowerName)\n : inflection.pluralize(lowerName);\n }\n\n type.backwardRelationships[backwardName] = {\n name: backwardName,\n targetType: otherTypeName,\n targetField: fieldName,\n sourceField: field.relation.key,\n isArray: !field.relation.unique,\n description: otherType.description || \"\",\n };\n }\n }\n }\n }\n }\n}\n","import { z } from \"zod\";\n\nexport const IdPSchema = z\n .object({\n name: z.string(),\n authorization: z.union([\n z.literal(\"insecure\"),\n z.literal(\"loggedIn\"),\n z.object({ cel: z.string() }),\n ]),\n clients: z.array(z.string()),\n })\n .brand(\"IdPConfig\");\n","import { z } from \"zod\";\n\nexport const StaticWebsiteSchema = z\n .object({\n name: z.string(),\n description: z.string().optional(),\n allowedIpAddresses: z.array(z.string()).optional(),\n })\n .brand(\"StaticWebsiteConfig\");\n","import { AuthService } from \"@/cli/application/auth/service\";\nimport { ExecutorService } from \"@/cli/application/executor/service\";\nimport { ResolverService } from \"@/cli/application/resolver/service\";\nimport { TailorDBService } from \"@/cli/application/tailordb/service\";\nimport { type AppConfig } from \"@/configure/config\";\nimport { type AuthConfig } from \"@/configure/services/auth\";\nimport { type ExecutorServiceInput } from \"@/configure/services/executor/types\";\nimport { type ResolverServiceInput } from \"@/configure/services/resolver/types\";\nimport { type TailorDBServiceInput } from \"@/configure/services/tailordb/types\";\nimport { type WorkflowServiceConfig } from \"@/configure/services/workflow/types\";\nimport { IdPSchema, type IdP } from \"@/parser/service/idp\";\nimport {\n StaticWebsiteSchema,\n type StaticWebsite,\n type StaticWebsiteInput,\n} from \"@/parser/service/staticwebsite\";\nimport type { IdPConfig } from \"@/configure/services/idp\";\n\nexport class Application {\n private _tailorDBServices: TailorDBService[] = [];\n private _resolverServices: ResolverService[] = [];\n private _idpServices: IdP[] = [];\n private _authService?: AuthService = undefined;\n private _subgraphs: Array<{ Type: string; Name: string }> = [];\n private _executorService?: ExecutorService = undefined;\n private _workflowConfig?: WorkflowServiceConfig = undefined;\n private _staticWebsiteServices: StaticWebsite[] = [];\n private _env: Record<string, string | number | boolean> = {};\n\n constructor(\n public readonly name: string,\n public readonly config: AppConfig,\n ) {\n this._env = config.env || {};\n }\n\n private addSubgraph(type: string, name: string) {\n this._subgraphs.push({ Type: type, Name: name });\n }\n\n get subgraphs() {\n return this._subgraphs as ReadonlyArray<{ Type: string; Name: string }>;\n }\n\n get tailorDBServices() {\n return this._tailorDBServices as ReadonlyArray<TailorDBService>;\n }\n\n get resolverServices() {\n return this._resolverServices as ReadonlyArray<ResolverService>;\n }\n\n get idpServices() {\n return this._idpServices as ReadonlyArray<IdP>;\n }\n\n get authService() {\n return this._authService as Readonly<AuthService> | undefined;\n }\n\n get executorService() {\n return this._executorService as Readonly<ExecutorService> | undefined;\n }\n\n get workflowConfig() {\n return this._workflowConfig;\n }\n\n get staticWebsiteServices() {\n return this._staticWebsiteServices as ReadonlyArray<StaticWebsite>;\n }\n\n get env() {\n return this._env as Readonly<Record<string, string | number | boolean>>;\n }\n\n get applications() {\n return [this] as ReadonlyArray<Application>;\n }\n\n defineTailorDB(config?: TailorDBServiceInput) {\n if (!config) {\n return;\n }\n\n for (const [namespace, serviceConfig] of Object.entries(config)) {\n if (!(\"external\" in serviceConfig)) {\n const tailorDB = new TailorDBService(namespace, serviceConfig);\n this._tailorDBServices.push(tailorDB);\n }\n this.addSubgraph(\"tailordb\", namespace);\n }\n }\n\n defineResolver(config?: ResolverServiceInput) {\n if (!config) {\n return;\n }\n\n for (const [namespace, serviceConfig] of Object.entries(config)) {\n if (!(\"external\" in serviceConfig)) {\n const resolverService = new ResolverService(namespace, serviceConfig);\n this._resolverServices.push(resolverService);\n }\n this.addSubgraph(\"pipeline\", namespace);\n }\n }\n\n defineIdp(config?: readonly IdPConfig[]) {\n if (!config) {\n return;\n }\n\n const idpNames = new Set<string>();\n config.forEach((idpConfig) => {\n const name = idpConfig.name;\n if (idpNames.has(name)) {\n throw new Error(`IdP with name \"${name}\" already defined.`);\n }\n idpNames.add(name);\n if (!(\"external\" in idpConfig)) {\n const idp = IdPSchema.parse(idpConfig);\n this._idpServices.push(idp);\n }\n this.addSubgraph(\"idp\", name);\n });\n }\n\n defineAuth(config?: AuthConfig) {\n if (!config) {\n return;\n }\n\n if (!(\"external\" in config)) {\n const authService = new AuthService(config, this.tailorDBServices);\n this._authService = authService;\n }\n this.addSubgraph(\"auth\", config.name);\n }\n\n defineExecutor(config?: ExecutorServiceInput) {\n if (!config) {\n return;\n }\n this._executorService = new ExecutorService(config);\n }\n\n defineWorkflow(config?: WorkflowServiceConfig) {\n if (!config) {\n return;\n }\n this._workflowConfig = config;\n }\n\n defineStaticWebsites(websites?: readonly StaticWebsiteInput[]) {\n const websiteNames = new Set<string>();\n (websites ?? []).forEach((config) => {\n const website = StaticWebsiteSchema.parse(config);\n if (websiteNames.has(website.name)) {\n throw new Error(\n `Static website with name \"${website.name}\" already defined.`,\n );\n }\n websiteNames.add(website.name);\n this._staticWebsiteServices.push(website);\n });\n }\n}\n\nexport function defineApplication(config: AppConfig) {\n const app = new Application(config.name, config);\n app.defineTailorDB(config.db);\n app.defineResolver(config.resolver);\n app.defineIdp(config.idp);\n app.defineAuth(config.auth);\n app.defineExecutor(config.executor);\n app.defineWorkflow(config.workflow);\n app.defineStaticWebsites(config.staticWebsites);\n return app;\n}\n","import { z } from \"zod\";\nimport { functionSchema } from \"../common\";\n\nexport const WorkflowJobSchema = z.object({\n name: z.string(),\n get deps() {\n return z.array(WorkflowJobSchema).optional();\n },\n body: functionSchema,\n});\n\nexport const WorkflowSchema = z.object({\n name: z.string(),\n mainJob: WorkflowJobSchema,\n});\n","import * as path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { styleText } from \"node:util\";\nimport { loadFilesWithIgnores } from \"@/cli/application/file-loader\";\nimport { WORKFLOW_JOB_BRAND } from \"@/configure/services/workflow/job\";\nimport {\n type Workflow,\n type WorkflowJob,\n WorkflowJobSchema,\n WorkflowSchema,\n} from \"@/parser/service/workflow\";\nimport type { WorkflowServiceConfig } from \"@/configure/services/workflow/types\";\n\nexport interface CollectedJob {\n name: string;\n exportName: string;\n sourceFile: string;\n deps?: string[];\n}\n\nexport interface WorkflowLoadResult {\n workflows: Record<string, Workflow>;\n workflowSources: Array<{ workflow: Workflow; sourceFile: string }>;\n jobs: CollectedJob[];\n unusedJobs: string[];\n fileCount: number;\n}\n\n/**\n * Load workflow files and collect all jobs in a single pass.\n */\nexport async function loadAndCollectJobs(\n config: WorkflowServiceConfig,\n): Promise<WorkflowLoadResult> {\n const workflows: Record<string, Workflow> = {};\n const workflowSources: Array<{ workflow: Workflow; sourceFile: string }> = [];\n const collectedJobs: CollectedJob[] = [];\n let unusedJobs: string[] = [];\n\n if (!config.files || config.files.length === 0) {\n return {\n workflows,\n workflowSources,\n jobs: collectedJobs,\n unusedJobs,\n fileCount: 0,\n };\n }\n\n const workflowFiles = loadFilesWithIgnores(config);\n const fileCount = workflowFiles.length;\n\n // Maps for collecting data\n const allJobsMap = new Map<\n string,\n { name: string; exportName: string; sourceFile: string }\n >();\n\n // Load all files and collect jobs and workflows\n for (const workflowFile of workflowFiles) {\n const { jobs, workflow } = await loadFileContent(workflowFile);\n\n if (workflow) {\n workflowSources.push({ workflow, sourceFile: workflowFile });\n workflows[workflowFile] = workflow;\n }\n\n for (const job of jobs) {\n const existing = allJobsMap.get(job.name);\n if (existing) {\n throw new Error(\n `Duplicate job name \"${job.name}\" found:\\n` +\n ` - ${existing.sourceFile} (export: ${existing.exportName})\\n` +\n ` - ${job.sourceFile} (export: ${job.exportName})\\n` +\n `Each job must have a unique name.`,\n );\n }\n allJobsMap.set(job.name, job);\n }\n }\n\n // Trace dependencies from mainJob of each workflow\n const tracedJobs = new Map<string, WorkflowJob>();\n for (const { workflow } of workflowSources) {\n traceJobDependencies(workflow.mainJob, tracedJobs);\n }\n\n // Validate all traced jobs are exported\n const notExportedJobs: string[] = [];\n for (const jobName of tracedJobs.keys()) {\n if (!allJobsMap.has(jobName)) {\n notExportedJobs.push(jobName);\n }\n }\n\n if (notExportedJobs.length > 0) {\n throw new Error(\n `The following workflow jobs are used but not exported:\\n` +\n notExportedJobs.map((name) => ` - \"${name}\"`).join(\"\\n\") +\n `\\n\\nAll workflow jobs must be named exports. Example:\\n` +\n ` export const myJob = createWorkflowJob({ name: \"my-job\", ... });\\n\\n` +\n `Also ensure that files containing job exports are included in the workflow.files glob pattern.`,\n );\n }\n\n // Collect unused jobs for later warning\n unusedJobs = Array.from(allJobsMap.keys()).filter(\n (jobName) => !tracedJobs.has(jobName),\n );\n\n // Build collected jobs result\n for (const [jobName, job] of tracedJobs) {\n const exportedMetadata = allJobsMap.get(jobName);\n const depNames = job.deps?.map((dep) => dep.name);\n collectedJobs.push({ ...exportedMetadata!, deps: depNames });\n }\n\n return {\n workflows,\n workflowSources,\n jobs: collectedJobs,\n unusedJobs,\n fileCount,\n };\n}\n\n/**\n * Print workflow loading logs.\n */\nexport function printLoadedWorkflows(result: WorkflowLoadResult): void {\n if (result.fileCount === 0) {\n return;\n }\n\n console.log(\"\");\n console.log(\n \"Found\",\n styleText(\"cyanBright\", result.fileCount.toString()),\n \"workflow files\",\n );\n\n for (const { workflow, sourceFile } of result.workflowSources) {\n const relativePath = path.relative(process.cwd(), sourceFile);\n console.log(\n \"Workflow:\",\n styleText(\"greenBright\", `\"${workflow.name}\"`),\n \"loaded from\",\n styleText(\"cyan\", relativePath),\n );\n }\n\n if (result.unusedJobs.length > 0) {\n console.warn(\n `⚠️ Warning: Unused workflow jobs found: ${result.unusedJobs.join(\", \")}`,\n );\n }\n}\n\n/**\n * Load a single file and extract jobs and workflow\n */\nasync function loadFileContent(filePath: string): Promise<{\n jobs: Array<{ name: string; exportName: string; sourceFile: string }>;\n workflow: Workflow | null;\n}> {\n const jobs: Array<{\n name: string;\n exportName: string;\n sourceFile: string;\n }> = [];\n let workflow: Workflow | null = null;\n\n try {\n const moduleSpecifier = `${pathToFileURL(filePath).href}?t=${Date.now()}`;\n const module = await import(moduleSpecifier);\n\n for (const [exportName, exportValue] of Object.entries(module)) {\n // Check if it's a workflow (default export)\n if (exportName === \"default\") {\n const workflowResult = WorkflowSchema.safeParse(exportValue);\n if (workflowResult.success) {\n workflow = workflowResult.data;\n }\n continue;\n }\n\n // Check if it's a workflow job using Symbol brand\n if (isWorkflowJob(exportValue)) {\n const jobResult = WorkflowJobSchema.safeParse(exportValue);\n if (jobResult.success) {\n jobs.push({\n name: jobResult.data.name,\n exportName,\n sourceFile: filePath,\n });\n }\n }\n }\n } catch (error) {\n const relativePath = path.relative(process.cwd(), filePath);\n console.error(\n styleText(\"red\", \"Failed to load workflow from\"),\n styleText(\"redBright\", relativePath),\n );\n console.error(error);\n throw error;\n }\n\n return { jobs, workflow };\n}\n\n/**\n * Check if a value is a WorkflowJob by looking for the brand symbol\n */\nfunction isWorkflowJob(value: unknown): boolean {\n return (\n value != null &&\n typeof value === \"object\" &&\n WORKFLOW_JOB_BRAND in value &&\n (value as Record<symbol, unknown>)[WORKFLOW_JOB_BRAND] === true\n );\n}\n\n/**\n * Recursively trace all job dependencies\n */\nfunction traceJobDependencies(\n job: WorkflowJob,\n visited: Map<string, WorkflowJob>,\n): void {\n if (visited.has(job.name)) {\n return;\n }\n visited.set(job.name, job);\n\n if (job.deps && Array.isArray(job.deps)) {\n for (const dep of job.deps) {\n traceJobDependencies(dep, visited);\n }\n }\n}\n","import { pathToFileURL } from \"node:url\";\nimport { ExecutorSchema, type Executor } from \"@/parser/service/executor\";\n\nexport async function loadExecutor(\n executorFilePath: string,\n): Promise<Executor | null> {\n const executorModule = await import(\n `${pathToFileURL(executorFilePath).href}?t=${Date.now()}`\n );\n const executor = executorModule.default;\n\n const parseResult = ExecutorSchema.safeParse(executor);\n if (!parseResult.success) {\n return null;\n }\n\n return parseResult.data;\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { styleText } from \"node:util\";\nimport ml from \"multiline-ts\";\nimport { resolveTSConfig } from \"pkg-types\";\nimport * as rolldown from \"rolldown\";\nimport {\n loadFilesWithIgnores,\n type FileLoadConfig,\n} from \"@/cli/application/file-loader\";\nimport { getDistDir } from \"@/configure/config\";\nimport { loadExecutor } from \"./loader\";\n\ninterface ExecutorInfo {\n name: string;\n sourceFile: string;\n}\n\n/**\n * Bundle executors from the specified configuration\n *\n * This function:\n * 1. Creates entry file that extracts operation.body\n * 2. Bundles in a single step with tree-shaking\n */\nexport async function bundleExecutors(config: FileLoadConfig): Promise<void> {\n const files = loadFilesWithIgnores(config);\n if (files.length === 0) {\n throw new Error(\n `No files found matching pattern: ${config.files?.join(\", \")}`,\n );\n }\n\n console.log(\"\");\n console.log(\n \"Bundling\",\n styleText(\"cyanBright\", files.length.toString()),\n \"files for\",\n styleText(\"cyan\", '\"executor\"'),\n );\n\n // Load all executors and filter to function/jobFunction only\n const executors: ExecutorInfo[] = [];\n for (const file of files) {\n const executor = await loadExecutor(file);\n if (!executor) {\n console.log(\n styleText(\"dim\", ` Skipping: ${file} (could not be loaded)`),\n );\n continue;\n }\n\n // Only bundle function and jobFunction executors\n if (![\"function\", \"jobFunction\"].includes(executor.operation.kind)) {\n console.log(\n styleText(\n \"dim\",\n ` Skipping: ${executor.name} (not a function executor)`,\n ),\n );\n continue;\n }\n\n executors.push({\n name: executor.name,\n sourceFile: file,\n });\n }\n\n if (executors.length === 0) {\n console.log(styleText(\"dim\", \" No function executors to bundle\"));\n return;\n }\n\n const outputDir = path.resolve(getDistDir(), \"executors\");\n\n fs.mkdirSync(outputDir, { recursive: true });\n\n let tsconfig: string | undefined;\n try {\n tsconfig = await resolveTSConfig();\n } catch {\n tsconfig = undefined;\n }\n\n // Process each executor\n await Promise.all(\n executors.map((executor) =>\n bundleSingleExecutor(executor, outputDir, tsconfig),\n ),\n );\n\n console.log(styleText(\"green\", \"Bundled\"), styleText(\"cyan\", '\"executor\"'));\n}\n\nasync function bundleSingleExecutor(\n executor: ExecutorInfo,\n outputDir: string,\n tsconfig: string | undefined,\n): Promise<void> {\n // Step 1: Create entry file that imports and extracts operation.body\n const entryPath = path.join(outputDir, `${executor.name}.entry.js`);\n const absoluteSourcePath = path\n .resolve(executor.sourceFile)\n .replace(/\\\\/g, \"/\");\n\n const entryContent = ml /* js */ `\n import _internalExecutor from \"${absoluteSourcePath}\";\n\n const __executor_function = _internalExecutor.operation.body;\n\n globalThis.main = __executor_function;\n `;\n fs.writeFileSync(entryPath, entryContent);\n\n // Step 2: Bundle with tree-shaking\n const outputPath = path.join(outputDir, `${executor.name}.js`);\n\n await rolldown.build(\n rolldown.defineConfig({\n input: entryPath,\n output: {\n file: outputPath,\n format: \"esm\",\n sourcemap: true,\n minify: true,\n inlineDynamicImports: true,\n },\n tsconfig,\n treeshake: {\n moduleSideEffects: false,\n annotations: true,\n unknownGlobalSideEffects: false,\n },\n logLevel: \"silent\",\n }) as rolldown.BuildOptions,\n );\n}\n","import { pathToFileURL } from \"node:url\";\nimport { type Resolver, ResolverSchema } from \"@/parser/service/resolver\";\n\nexport async function loadResolver(\n resolverFilePath: string,\n): Promise<Resolver | null> {\n const resolverModule = await import(\n `${pathToFileURL(resolverFilePath).href}?t=${Date.now()}`\n );\n const resolver = resolverModule.default;\n\n const parseResult = ResolverSchema.safeParse(resolver);\n if (!parseResult.success) {\n return null;\n }\n\n return parseResult.data;\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { styleText } from \"node:util\";\nimport ml from \"multiline-ts\";\nimport { resolveTSConfig } from \"pkg-types\";\nimport * as rolldown from \"rolldown\";\nimport {\n loadFilesWithIgnores,\n type FileLoadConfig,\n} from \"@/cli/application/file-loader\";\nimport { getDistDir } from \"@/configure/config\";\nimport { loadResolver } from \"./loader\";\n\ninterface ResolverInfo {\n name: string;\n sourceFile: string;\n}\n\n/**\n * Bundle resolvers for the specified namespace\n *\n * This function:\n * 1. Uses a transform plugin to add validation wrapper during bundling\n * 2. Creates entry file\n * 3. Bundles in a single step with tree-shaking\n */\nexport async function bundleResolvers(\n namespace: string,\n config: FileLoadConfig,\n): Promise<void> {\n const files = loadFilesWithIgnores(config);\n if (files.length === 0) {\n throw new Error(\n `No files found matching pattern: ${config.files?.join(\", \")}`,\n );\n }\n\n console.log(\"\");\n console.log(\n \"Bundling\",\n styleText(\"cyanBright\", files.length.toString()),\n \"files for\",\n styleText(\"cyan\", `\"${namespace}\"`),\n );\n\n // Load all resolvers to get their names\n const resolvers: ResolverInfo[] = [];\n for (const file of files) {\n const resolver = await loadResolver(file);\n if (!resolver) {\n console.log(\n styleText(\"dim\", ` Skipping: ${file} (could not be loaded)`),\n );\n continue;\n }\n resolvers.push({\n name: resolver.name,\n sourceFile: file,\n });\n }\n\n const outputDir = path.resolve(getDistDir(), \"resolvers\");\n\n fs.mkdirSync(outputDir, { recursive: true });\n\n let tsconfig: string | undefined;\n try {\n tsconfig = await resolveTSConfig();\n } catch {\n tsconfig = undefined;\n }\n\n // Process each resolver\n await Promise.all(\n resolvers.map((resolver) =>\n bundleSingleResolver(resolver, outputDir, tsconfig),\n ),\n );\n\n console.log(\n styleText(\"green\", \"Bundled\"),\n styleText(\"cyan\", `\"${namespace}\"`),\n );\n}\n\nasync function bundleSingleResolver(\n resolver: ResolverInfo,\n outputDir: string,\n tsconfig: string | undefined,\n): Promise<void> {\n // Step 1: Create entry file that imports from the original source\n const entryPath = path.join(outputDir, `${resolver.name}.entry.js`);\n const absoluteSourcePath = path\n .resolve(resolver.sourceFile)\n .replace(/\\\\/g, \"/\");\n\n const entryContent = ml /* js */ `\n import _internalResolver from \"${absoluteSourcePath}\";\n import { t } from \"@tailor-platform/sdk\";\n\n const $tailor_resolver_body = async (context) => {\n if (_internalResolver.input) {\n const result = t.object(_internalResolver.input).parse({\n value: context.input,\n data: context.input,\n user: context.user,\n });\n\n if (result.issues) {\n const errorMessages = result.issues\n .map(issue => {\n const path = issue.path ? issue.path.join('.') : '';\n return path ? \\` \\${path}: \\${issue.message}\\` : issue.message;\n })\n .join('\\\\n');\n throw new Error(\\`Failed to input validation:\\\\n\\${errorMessages}\\`);\n }\n }\n\n return _internalResolver.body(context);\n };\n\n globalThis.main = $tailor_resolver_body;\n `;\n fs.writeFileSync(entryPath, entryContent);\n\n // Step 2: Bundle with tree-shaking\n const outputPath = path.join(outputDir, `${resolver.name}.js`);\n\n await rolldown.build(\n rolldown.defineConfig({\n input: entryPath,\n output: {\n file: outputPath,\n format: \"esm\",\n sourcemap: true,\n minify: true,\n inlineDynamicImports: true,\n },\n tsconfig,\n treeshake: {\n moduleSideEffects: false,\n annotations: true,\n unknownGlobalSideEffects: false,\n },\n logLevel: \"silent\",\n }) as rolldown.BuildOptions,\n );\n}\n","import { parseSync } from \"oxc-parser\";\nimport type {\n Program,\n Expression,\n AwaitExpression,\n ImportExpression,\n CallExpression,\n ImportDeclaration,\n VariableDeclaration,\n ObjectExpression,\n ObjectPropertyKind,\n ObjectProperty,\n StaticMemberExpression,\n IdentifierReference,\n ImportSpecifier,\n ImportDefaultSpecifier,\n ImportNamespaceSpecifier,\n ObjectPattern,\n BindingProperty,\n ExportNamedDeclaration,\n ArrowFunctionExpression,\n Function as FunctionExpression,\n} from \"@oxc-project/types\";\n\n/** A generic AST node for walking purposes */\ntype ASTNode = Record<string, unknown>;\n\ninterface JobLocation {\n name: string;\n nameRange: { start: number; end: number };\n depsRange?: { start: number; end: number };\n bodyValueRange: { start: number; end: number };\n // Range of the entire variable declaration statement (for removal)\n statementRange?: { start: number; end: number };\n}\n\ninterface Replacement {\n start: number;\n end: number;\n text: string;\n}\n\n/**\n * Check if a module source is from \\@tailor-platform/sdk (including subpaths)\n */\nfunction isTailorSdkSource(source: string): boolean {\n return /^@tailor-platform\\/sdk(\\/|$)/.test(source);\n}\n\n/**\n * Get the source string from a dynamic import or require call\n */\nfunction getImportSource(node: Expression | null | undefined): string | null {\n if (!node) return null;\n // await import(\"@tailor-platform/sdk\")\n if (node.type === \"ImportExpression\") {\n const importExpr = node as ImportExpression;\n const source = importExpr.source;\n if (source.type === \"Literal\" && typeof source.value === \"string\") {\n return source.value;\n }\n }\n // require(\"@tailor-platform/sdk\")\n if (node.type === \"CallExpression\") {\n const callExpr = node as CallExpression;\n if (\n callExpr.callee.type === \"Identifier\" &&\n callExpr.callee.name === \"require\"\n ) {\n const arg = callExpr.arguments[0];\n if (\n arg &&\n \"type\" in arg &&\n arg.type === \"Literal\" &&\n \"value\" in arg &&\n typeof arg.value === \"string\"\n ) {\n return arg.value;\n }\n }\n }\n return null;\n}\n\n/**\n * Unwrap AwaitExpression to get the inner expression\n */\nfunction unwrapAwait(\n node: Expression | null | undefined,\n): Expression | null | undefined {\n if (node?.type === \"AwaitExpression\") {\n return (node as AwaitExpression).argument;\n }\n return node;\n}\n\n/**\n * Collect all import bindings for createWorkflowJob from \\@tailor-platform/sdk\n * Returns a Set of local names that refer to createWorkflowJob\n */\nfunction collectCreateWorkflowJobBindings(program: Program): Set<string> {\n const bindings = new Set<string>();\n\n function walk(node: ASTNode | null | undefined): void {\n if (!node || typeof node !== \"object\") return;\n\n const nodeType = node.type as string | undefined;\n\n // Static imports: import { createWorkflowJob } from \"@tailor-platform/sdk\"\n if (nodeType === \"ImportDeclaration\") {\n const importDecl = node as unknown as ImportDeclaration;\n const source = importDecl.source?.value;\n if (typeof source === \"string\" && isTailorSdkSource(source)) {\n for (const specifier of importDecl.specifiers || []) {\n // import { createWorkflowJob } from \"@tailor-platform/sdk\"\n // import { createWorkflowJob as create } from \"@tailor-platform/sdk\"\n if (specifier.type === \"ImportSpecifier\") {\n const importSpec = specifier as ImportSpecifier;\n const imported =\n importSpec.imported.type === \"Identifier\"\n ? importSpec.imported.name\n : (importSpec.imported as { value?: string }).value;\n if (imported === \"createWorkflowJob\") {\n bindings.add(importSpec.local?.name || imported);\n }\n }\n // import sdk from \"@tailor-platform/sdk\" → sdk.createWorkflowJob\n // import * as sdk from \"@tailor-platform/sdk\" → sdk.createWorkflowJob\n else if (\n specifier.type === \"ImportDefaultSpecifier\" ||\n specifier.type === \"ImportNamespaceSpecifier\"\n ) {\n const spec = specifier as\n | ImportDefaultSpecifier\n | ImportNamespaceSpecifier;\n // Store namespace/default with special prefix to track member access\n bindings.add(`__namespace__:${spec.local?.name}`);\n }\n }\n }\n }\n\n // Dynamic imports and require:\n // const sdk = await import(\"@tailor-platform/sdk\")\n // const sdk = require(\"@tailor-platform/sdk\")\n // const { createWorkflowJob } = await import(\"@tailor-platform/sdk\")\n // const { createWorkflowJob } = require(\"@tailor-platform/sdk\")\n if (nodeType === \"VariableDeclaration\") {\n const varDecl = node as unknown as VariableDeclaration;\n for (const decl of varDecl.declarations || []) {\n const init = unwrapAwait(decl.init);\n const source = getImportSource(init);\n\n if (source && isTailorSdkSource(source)) {\n const id = decl.id;\n\n // const sdk = await import(...) / const sdk = require(...)\n if (id?.type === \"Identifier\") {\n bindings.add(`__namespace__:${id.name}`);\n }\n // const { createWorkflowJob } = await import(...) / require(...)\n // const { createWorkflowJob: create } = await import(...) / require(...)\n else if (id?.type === \"ObjectPattern\") {\n const objPattern = id as unknown as ObjectPattern;\n for (const prop of objPattern.properties || []) {\n if (prop.type === \"Property\") {\n const bindingProp = prop as BindingProperty;\n const keyName =\n bindingProp.key.type === \"Identifier\"\n ? bindingProp.key.name\n : (bindingProp.key as { value?: string }).value;\n if (keyName === \"createWorkflowJob\") {\n const localName =\n bindingProp.value.type === \"Identifier\"\n ? bindingProp.value.name\n : keyName;\n bindings.add(localName ?? \"\");\n }\n }\n }\n }\n }\n }\n }\n\n for (const key of Object.keys(node)) {\n const child = node[key] as unknown;\n if (Array.isArray(child)) {\n child.forEach((c: unknown) => walk(c as ASTNode | null));\n } else if (child && typeof child === \"object\") {\n walk(child as ASTNode);\n }\n }\n }\n\n walk(program as unknown as ASTNode);\n return bindings;\n}\n\n/**\n * Check if a CallExpression is a createWorkflowJob call\n */\nfunction isCreateWorkflowJobCall(\n node: ASTNode,\n bindings: Set<string>,\n): node is ASTNode & { type: \"CallExpression\" } {\n if (node.type !== \"CallExpression\") return false;\n\n const callExpr = node as unknown as CallExpression;\n const callee = callExpr.callee;\n\n // Direct call: createWorkflowJob(...) or create(...)\n if (callee.type === \"Identifier\") {\n const identifier = callee as IdentifierReference;\n return bindings.has(identifier.name);\n }\n\n // Member access: sdk.createWorkflowJob(...)\n // Note: oxc uses MemberExpression with computed: false for static member access\n if (callee.type === \"MemberExpression\") {\n const memberExpr = callee as unknown as StaticMemberExpression;\n if (!memberExpr.computed) {\n const object = memberExpr.object;\n const property = memberExpr.property;\n if (\n object.type === \"Identifier\" &&\n bindings.has(`__namespace__:${(object as IdentifierReference).name}`) &&\n property.name === \"createWorkflowJob\"\n ) {\n return true;\n }\n }\n }\n\n return false;\n}\n\n/**\n * Check if a node is a string literal\n */\nfunction isStringLiteral(\n node: Expression | null | undefined,\n): node is Expression & { type: \"Literal\"; value: string } {\n // Note: oxc uses \"Literal\" for all literals, distinguishing by value type\n return (\n node?.type === \"Literal\" &&\n typeof (node as { value?: unknown }).value === \"string\"\n );\n}\n\n/**\n * Check if a node is a function expression (arrow or regular)\n */\nfunction isFunctionExpression(\n node: Expression | null | undefined,\n): node is ArrowFunctionExpression | FunctionExpression {\n return (\n node?.type === \"ArrowFunctionExpression\" ||\n node?.type === \"FunctionExpression\"\n );\n}\n\ninterface FoundProperty {\n key: ObjectProperty[\"key\"];\n value: Expression;\n start: number;\n end: number;\n}\n\n/**\n * Find a property in an object expression\n */\nfunction findProperty(\n properties: ObjectPropertyKind[],\n name: string,\n): FoundProperty | null {\n for (const prop of properties) {\n // Note: oxc uses \"Property\" for object properties\n if (prop.type === \"Property\") {\n const objProp = prop as ObjectProperty;\n const keyName =\n objProp.key.type === \"Identifier\"\n ? objProp.key.name\n : objProp.key.type === \"Literal\"\n ? (objProp.key as { value?: string }).value\n : null;\n if (keyName === name) {\n return {\n key: objProp.key,\n value: objProp.value,\n start: objProp.start,\n end: objProp.end,\n };\n }\n }\n }\n return null;\n}\n\n/**\n * Find all workflow jobs by detecting createWorkflowJob calls from \\@tailor-platform/sdk\n */\nexport function findAllJobs(\n program: Program,\n _sourceText: string,\n): JobLocation[] {\n const jobs: JobLocation[] = [];\n const bindings = collectCreateWorkflowJobBindings(program);\n\n function walk(\n node: ASTNode | null | undefined,\n parents: ASTNode[] = [],\n ): void {\n if (!node || typeof node !== \"object\") return;\n\n // Detect createWorkflowJob(...) calls\n if (isCreateWorkflowJobCall(node, bindings)) {\n const callExpr = node as unknown as CallExpression;\n const args = callExpr.arguments;\n if (args?.length >= 1 && args[0]?.type === \"ObjectExpression\") {\n const configObj = args[0] as ObjectExpression;\n const nameProp = findProperty(configObj.properties, \"name\");\n const bodyProp = findProperty(configObj.properties, \"body\");\n const depsProp = findProperty(configObj.properties, \"deps\");\n\n if (\n nameProp &&\n isStringLiteral(nameProp.value) &&\n bodyProp &&\n isFunctionExpression(bodyProp.value)\n ) {\n // Find the outermost enclosing statement\n let statementRange: { start: number; end: number } | undefined;\n for (let i = 0; i < parents.length; i++) {\n const parent = parents[i];\n if (\n parent.type === \"ExportNamedDeclaration\" ||\n parent.type === \"VariableDeclaration\"\n ) {\n statementRange = {\n start: parent.start as number,\n end: parent.end as number,\n };\n break;\n }\n }\n\n jobs.push({\n name: nameProp.value.value,\n nameRange: { start: nameProp.start, end: nameProp.end },\n depsRange: depsProp\n ? { start: depsProp.start, end: depsProp.end }\n : undefined,\n bodyValueRange: {\n start: bodyProp.value.start,\n end: bodyProp.value.end,\n },\n statementRange,\n });\n }\n }\n }\n\n const newParents = [...parents, node];\n for (const key of Object.keys(node)) {\n const child = node[key] as unknown;\n if (Array.isArray(child)) {\n child.forEach((c: unknown) => walk(c as ASTNode | null, newParents));\n } else if (child && typeof child === \"object\") {\n walk(child as ASTNode, newParents);\n }\n }\n }\n\n walk(program as unknown as ASTNode);\n return jobs;\n}\n\n/**\n * Apply string replacements to source code\n * Replacements are applied from end to start to maintain positions\n */\nfunction applyReplacements(\n source: string,\n replacements: Replacement[],\n): string {\n const sorted = [...replacements].sort((a, b) => b.start - a.start);\n let result = source;\n for (const r of sorted) {\n result = result.slice(0, r.start) + r.text + result.slice(r.end);\n }\n return result;\n}\n\n/**\n * Find the end position including trailing comma\n */\nfunction findTrailingCommaEnd(source: string, position: number): number {\n let i = position;\n while (i < source.length) {\n const char = source[i];\n if (char === \",\") return i + 1;\n if (!/\\s/.test(char)) break;\n i++;\n }\n return position;\n}\n\n/**\n * Find the end of a statement including any trailing newline\n */\nfunction findStatementEnd(source: string, position: number): number {\n let i = position;\n // Skip any trailing semicolons and whitespace on the same line\n while (\n i < source.length &&\n (source[i] === \";\" || source[i] === \" \" || source[i] === \"\\t\")\n ) {\n i++;\n }\n // Include the newline if present\n if (i < source.length && source[i] === \"\\n\") {\n i++;\n }\n return i;\n}\n\n/**\n * Find variable declarations by export names\n * Returns a map of export name to statement range\n */\nfunction findVariableDeclarationsByName(\n program: Program,\n): Map<string, { start: number; end: number }> {\n const declarations = new Map<string, { start: number; end: number }>();\n\n function walk(node: ASTNode | null | undefined): void {\n if (!node || typeof node !== \"object\") return;\n\n const nodeType = node.type as string | undefined;\n\n // Handle variable declarations: const job1 = ...\n // Only set if not already set (ExportNamedDeclaration is processed first and sets the outer range)\n if (nodeType === \"VariableDeclaration\") {\n const varDecl = node as unknown as VariableDeclaration;\n for (const decl of varDecl.declarations || []) {\n if (decl.id?.type === \"Identifier\" && decl.id.name) {\n if (!declarations.has(decl.id.name)) {\n declarations.set(decl.id.name, {\n start: varDecl.start,\n end: varDecl.end,\n });\n }\n }\n }\n }\n\n // Handle export declarations: export const job1 = ...\n if (nodeType === \"ExportNamedDeclaration\") {\n const exportDecl = node as unknown as ExportNamedDeclaration;\n const declaration = exportDecl.declaration;\n if (declaration?.type === \"VariableDeclaration\") {\n const varDecl = declaration as VariableDeclaration;\n for (const decl of varDecl.declarations || []) {\n if (decl.id?.type === \"Identifier\" && decl.id.name) {\n declarations.set(decl.id.name, {\n start: exportDecl.start,\n end: exportDecl.end,\n });\n }\n }\n }\n }\n\n for (const key of Object.keys(node)) {\n const child = node[key] as unknown;\n if (Array.isArray(child)) {\n child.forEach((c: unknown) => walk(c as ASTNode | null));\n } else if (child && typeof child === \"object\") {\n walk(child as ASTNode);\n }\n }\n }\n\n walk(program as unknown as ASTNode);\n return declarations;\n}\n\n/**\n * Transform workflow source code\n * - Target job: remove deps\n * - Other jobs: remove entire variable declaration\n *\n * @param source - The source code to transform\n * @param targetJobName - The name of the target job (from job config)\n * @param targetJobExportName - The export name of the target job (optional, for enhanced detection)\n * @param otherJobExportNames - Export names of other jobs to remove (optional, for enhanced detection)\n */\nexport function transformWorkflowSource(\n source: string,\n targetJobName: string,\n targetJobExportName?: string,\n otherJobExportNames?: string[],\n): string {\n // Use .ts extension to properly parse TypeScript code\n const { program } = parseSync(\"input.ts\", source);\n\n // Find all jobs using AST detection (for deps removal and fallback)\n const detectedJobs = findAllJobs(program, source);\n\n // Find all variable declarations for export name-based removal\n const allDeclarations = findVariableDeclarationsByName(program);\n\n const replacements: Replacement[] = [];\n const removedRanges = new Set<string>();\n\n // Helper to track removed ranges (avoid duplicate removals)\n const markRemoved = (start: number, end: number) => {\n removedRanges.add(`${start}-${end}`);\n };\n const isRemoved = (start: number, end: number) => {\n return removedRanges.has(`${start}-${end}`);\n };\n\n // Step 1: Process AST-detected jobs\n for (const job of detectedJobs) {\n if (job.name === targetJobName) {\n // Target job: remove deps\n if (job.depsRange) {\n replacements.push({\n start: job.depsRange.start,\n end: findTrailingCommaEnd(source, job.depsRange.end),\n text: \"\",\n });\n }\n } else {\n // Other jobs: remove entire variable declaration\n if (\n job.statementRange &&\n !isRemoved(job.statementRange.start, job.statementRange.end)\n ) {\n replacements.push({\n start: job.statementRange.start,\n end: findStatementEnd(source, job.statementRange.end),\n text: \"\",\n });\n markRemoved(job.statementRange.start, job.statementRange.end);\n } else if (!job.statementRange) {\n // Fallback: replace body with empty function if we can't find the statement\n replacements.push({\n start: job.bodyValueRange.start,\n end: job.bodyValueRange.end,\n text: \"() => {}\",\n });\n }\n }\n }\n\n // Step 2: Remove other jobs by export name (catches jobs missed by AST detection)\n if (otherJobExportNames) {\n for (const exportName of otherJobExportNames) {\n // Skip the target job's export name\n if (exportName === targetJobExportName) continue;\n\n const declRange = allDeclarations.get(exportName);\n if (declRange && !isRemoved(declRange.start, declRange.end)) {\n replacements.push({\n start: declRange.start,\n end: findStatementEnd(source, declRange.end),\n text: \"\",\n });\n markRemoved(declRange.start, declRange.end);\n }\n }\n }\n\n return applyReplacements(source, replacements);\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { styleText } from \"node:util\";\nimport ml from \"multiline-ts\";\nimport { resolveTSConfig } from \"pkg-types\";\nimport * as rolldown from \"rolldown\";\nimport { getDistDir } from \"@/configure/config\";\nimport { transformWorkflowSource } from \"./ast-transformer\";\n\ninterface JobInfo {\n name: string;\n exportName: string;\n sourceFile: string;\n deps?: string[];\n}\n\n/**\n * Bundle workflow jobs\n *\n * This function:\n * 1. Uses a transform plugin to remove deps during bundling (preserves module resolution)\n * 2. Creates entry file\n * 3. Bundles in a single step with tree-shaking\n */\nexport async function bundleWorkflowJobs(allJobs: JobInfo[]): Promise<void> {\n if (allJobs.length === 0) {\n console.log(styleText(\"dim\", \"No workflow jobs to bundle\"));\n return;\n }\n\n console.log(\"\");\n console.log(\n \"Bundling\",\n styleText(\"cyanBright\", allJobs.length.toString()),\n \"files for\",\n styleText(\"cyan\", '\"workflow-job\"'),\n );\n\n const outputDir = path.resolve(getDistDir(), \"workflow-jobs\");\n\n fs.mkdirSync(outputDir, { recursive: true });\n\n let tsconfig: string | undefined;\n try {\n tsconfig = await resolveTSConfig();\n } catch {\n tsconfig = undefined;\n }\n\n // Process each job\n await Promise.all(\n allJobs.map((job) => bundleSingleJob(job, allJobs, outputDir, tsconfig)),\n );\n\n console.log(\n styleText(\"green\", \"Bundled\"),\n styleText(\"cyan\", '\"workflow-job\"'),\n );\n}\n\nasync function bundleSingleJob(\n job: JobInfo,\n allJobs: JobInfo[],\n outputDir: string,\n tsconfig: string | undefined,\n): Promise<void> {\n // Step 1: Find deps for this job to create the jobs proxy object\n const depsJobNames = findJobDeps(job.name, allJobs);\n const jobsObject = generateJobsObject(depsJobNames);\n\n // Step 2: Create entry file that imports job by named export\n const entryPath = path.join(outputDir, `${job.name}.entry.js`);\n const absoluteSourcePath = path.resolve(job.sourceFile).replace(/\\\\/g, \"/\");\n\n const entryContent = ml /* js */ `\n import { ${job.exportName} } from \"${absoluteSourcePath}\";\n\n const jobs = {\n ${jobsObject}\n };\n\n globalThis.main = async (input) => {\n return await ${job.exportName}.body(input, jobs);\n };\n `;\n fs.writeFileSync(entryPath, entryContent);\n\n // Step 3: Bundle with a transform plugin that removes deps from target job\n const outputPath = path.join(outputDir, `${job.name}.js`);\n\n // Collect export names for enhanced AST removal (catches jobs missed by AST detection)\n const otherJobExportNames = allJobs\n .filter((j) => j.name !== job.name)\n .map((j) => j.exportName);\n\n // Create transform plugin to remove deps from target job and other job declarations\n const transformPlugin: rolldown.Plugin = {\n name: \"workflow-transform\",\n transform: {\n filter: {\n id: {\n include: [/\\.ts$/, /\\.js$/],\n },\n },\n handler(code) {\n // Only transform source files that contain workflow jobs\n if (!code.includes(\"createWorkflowJob\")) {\n return null;\n }\n const transformed = transformWorkflowSource(\n code,\n job.name,\n job.exportName,\n otherJobExportNames,\n );\n return { code: transformed };\n },\n },\n };\n\n await rolldown.build(\n rolldown.defineConfig({\n input: entryPath,\n output: {\n file: outputPath,\n format: \"esm\",\n sourcemap: true,\n minify: true,\n inlineDynamicImports: true,\n },\n tsconfig,\n plugins: [transformPlugin],\n treeshake: {\n moduleSideEffects: false,\n annotations: true,\n unknownGlobalSideEffects: false,\n },\n logLevel: \"silent\",\n }) as rolldown.BuildOptions,\n );\n}\n\n/**\n * Find the dependencies of a specific job\n */\nfunction findJobDeps(targetJobName: string, allJobs: JobInfo[]): string[] {\n const targetJob = allJobs.find((j) => j.name === targetJobName);\n return targetJob?.deps ?? [];\n}\n\nfunction generateJobsObject(jobNames: string[]): string {\n if (jobNames.length === 0) {\n return \"\";\n }\n return jobNames\n .map((jobName) => {\n const snakeCaseName = jobName.replace(/[-\\s]/g, \"_\");\n return `\"${snakeCaseName}\": (args) => tailor.workflow.triggerJobFunction(\"${jobName}\", args)`;\n })\n .join(\",\\n \");\n}\n","import { z } from \"zod\";\nimport type { CodeGeneratorBase } from \"./types\";\n\n// Literal-based schemas for each generator\nexport const KyselyTypeConfigSchema = z.tuple([\n z.literal(\"@tailor-platform/kysely-type\"),\n z.object({ distPath: z.string() }),\n]);\n\nexport const SeedConfigSchema = z.tuple([\n z.literal(\"@tailor-platform/seed\"),\n z.object({ distPath: z.string(), machineUserName: z.string().optional() }),\n]);\n\nexport const EnumConstantsConfigSchema = z.tuple([\n z.literal(\"@tailor-platform/enum-constants\"),\n z.object({ distPath: z.string() }),\n]);\n\nexport const FileUtilsConfigSchema = z.tuple([\n z.literal(\"@tailor-platform/file-utils\"),\n z.object({ distPath: z.string() }),\n]);\n\n// FIXME: more strict schema validation\nexport const CodeGeneratorSchema = z.object({\n id: z.string(),\n description: z.string(),\n processType: z.function(),\n processResolver: z.function(),\n processExecutor: z.function(),\n processTailorDBNamespace: z.function().optional(),\n processResolverNamespace: z.function().optional(),\n aggregate: z.function({ output: z.any() }),\n});\n\n// Base schema for generator config (before transformation to actual Generator instances)\nexport const BaseGeneratorConfigSchema = z.union([\n KyselyTypeConfigSchema,\n SeedConfigSchema,\n EnumConstantsConfigSchema,\n FileUtilsConfigSchema,\n CodeGeneratorSchema,\n]);\n\nexport type * from \"./types\";\n\n/**\n * Creates a GeneratorConfigSchema with built-in generator support\n * @param builtinGenerators - Map of generator IDs to their constructor functions\n */\nexport function createGeneratorConfigSchema(\n builtinGenerators: Map<\n string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (options: any) => CodeGeneratorBase\n >,\n) {\n return z\n .union([\n KyselyTypeConfigSchema,\n SeedConfigSchema,\n EnumConstantsConfigSchema,\n FileUtilsConfigSchema,\n CodeGeneratorSchema,\n ])\n .transform((gen) => {\n if (Array.isArray(gen)) {\n const [id, options] = gen;\n const constructor = builtinGenerators.get(id);\n if (constructor) {\n return constructor(options);\n }\n throw new Error(`Unknown generator ID: ${id}`);\n }\n return gen as CodeGeneratorBase;\n })\n .brand(\"CodeGenerator\");\n}\n\nexport type GeneratorConfigSchemaType = ReturnType<\n typeof createGeneratorConfigSchema\n>;\nexport type Generator = z.output<GeneratorConfigSchemaType>;\n","import type { EnumConstantMetadata, EnumDefinition } from \"./types\";\nimport type { ParsedTailorDBType } from \"@/parser/service/tailordb/types\";\n\n/**\n * Processor that collects enum fields and generates enum constants.\n */\nexport class EnumProcessor {\n static async processType(\n type: ParsedTailorDBType,\n ): Promise<EnumConstantMetadata> {\n const enums = this.collectEnums(type);\n\n return {\n name: type.name,\n enums,\n };\n }\n\n private static collectEnums(type: ParsedTailorDBType) {\n const enums: EnumConstantMetadata[\"enums\"] = [];\n\n for (const [fieldName, parsedField] of Object.entries(type.fields)) {\n if (\n parsedField.config.type === \"enum\" &&\n parsedField.config.allowedValues\n ) {\n const enumTypeName = `${type.name}${this.capitalizeFirst(fieldName)}`;\n enums.push({\n name: enumTypeName,\n values: parsedField.config.allowedValues,\n fieldDescription: parsedField.config.description,\n });\n }\n\n // Process nested fields\n if (parsedField.config.type === \"nested\" && parsedField.config.fields) {\n for (const [nestedFieldName, nestedFieldConfig] of Object.entries(\n parsedField.config.fields,\n )) {\n if (\n nestedFieldConfig.type === \"enum\" &&\n nestedFieldConfig.allowedValues\n ) {\n const fullFieldName = `${fieldName}${this.capitalizeFirst(nestedFieldName)}`;\n const enumTypeName = `${type.name}${this.capitalizeFirst(fullFieldName)}`;\n enums.push({\n name: enumTypeName,\n values: nestedFieldConfig.allowedValues,\n fieldDescription: nestedFieldConfig.description,\n });\n }\n }\n }\n }\n\n return enums;\n }\n\n /**\n * Generate enum constant definitions from collected metadata.\n */\n static generateUnifiedEnumConstants(allEnums: EnumDefinition[]): string {\n if (allEnums.length === 0) {\n return \"\";\n }\n\n const enumMap = new Map<string, EnumDefinition>();\n for (const enumDef of allEnums) {\n enumMap.set(enumDef.name, enumDef);\n }\n\n const enumDefs = Array.from(enumMap.values())\n .map((e) => {\n const members = e.values\n .map((v) => {\n const key = v.value.replace(/[-\\s]/g, \"_\");\n return ` \"${key}\": \"${v.value}\"`;\n })\n .join(\",\\n\");\n\n const hasDescriptions = e.values.some((v) => v.description);\n let jsDoc = \"\";\n if (e.fieldDescription || hasDescriptions) {\n const lines: string[] = [];\n\n if (e.fieldDescription) {\n lines.push(` * ${e.fieldDescription}`);\n if (hasDescriptions) {\n lines.push(\" *\");\n }\n }\n\n if (hasDescriptions) {\n const propertyDocs = e.values.map((v) => {\n const key = v.value.replace(/[-\\s]/g, \"_\");\n return ` * @property ${[key, v.description].filter(Boolean).join(\" - \")}`;\n });\n lines.push(...propertyDocs);\n }\n\n if (lines.length > 0) {\n jsDoc = `/**\\n${lines.join(\"\\n\")}\\n */\\n`;\n }\n }\n\n const constDef = `${jsDoc}export const ${e.name} = {\\n${members}\\n} as const;`;\n const typeDef = `export type ${e.name} = (typeof ${e.name})[keyof typeof ${e.name}];`;\n return `${constDef}\\n${typeDef}`;\n })\n .join(\"\\n\\n\");\n\n if (!enumDefs) {\n return \"\";\n }\n\n return enumDefs + \"\\n\";\n }\n\n private static capitalizeFirst(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n}\n","import {\n type CodeGenerator,\n type GeneratorResult,\n type GeneratorInput,\n} from \"@/cli/generator/types\";\nimport { EnumProcessor } from \"./enum-processor\";\nimport {\n type EnumConstantMetadata,\n type EnumDefinition,\n type EnumNamespaceMetadata,\n} from \"./types\";\nimport type { ParsedTailorDBType } from \"@/parser/service/tailordb/types\";\n\nexport const EnumConstantsGeneratorID = \"@tailor-platform/enum-constants\";\n\n/**\n * Generator for enum constants from TailorDB type definitions.\n */\nexport class EnumConstantsGenerator implements CodeGenerator<\n EnumConstantMetadata,\n undefined,\n undefined,\n EnumNamespaceMetadata,\n undefined\n> {\n readonly id = EnumConstantsGeneratorID;\n readonly description =\n \"Generates enum constants from TailorDB type definitions\";\n\n constructor(\n private readonly options: {\n distPath: string;\n },\n ) {}\n\n async processType(args: {\n type: ParsedTailorDBType;\n namespace: string;\n }): Promise<EnumConstantMetadata> {\n return await EnumProcessor.processType(args.type);\n }\n\n processResolver(): undefined {\n return undefined;\n }\n\n processExecutor(): undefined {\n return undefined;\n }\n\n async processTailorDBNamespace(args: {\n namespace: string;\n types: Record<string, EnumConstantMetadata>;\n }): Promise<EnumNamespaceMetadata> {\n const allEnums: EnumDefinition[] = [];\n for (const enumConstantMetadata of Object.values(args.types)) {\n allEnums.push(...enumConstantMetadata.enums);\n }\n\n return {\n namespace: args.namespace,\n enums: allEnums,\n };\n }\n\n processIdProvider(): undefined {\n return undefined;\n }\n\n processAuth(): undefined {\n return undefined;\n }\n\n processStaticWebsite(): undefined {\n return undefined;\n }\n\n aggregate(args: {\n input: GeneratorInput<EnumNamespaceMetadata, undefined>;\n executorInputs: undefined[];\n baseDir: string;\n }): GeneratorResult {\n const files: GeneratorResult[\"files\"] = [];\n\n const allEnums: EnumDefinition[] = [];\n\n for (const nsResult of args.input.tailordb) {\n if (nsResult.types && nsResult.types.enums.length > 0) {\n allEnums.push(...nsResult.types.enums);\n }\n }\n\n if (allEnums.length > 0) {\n const content = EnumProcessor.generateUnifiedEnumConstants(allEnums);\n files.push({\n path: this.options.distPath,\n content,\n });\n }\n\n return { files };\n }\n}\n","import multiline from \"multiline-ts\";\nimport type { FileUtilMetadata } from \"./types\";\nimport type { ParsedTailorDBType } from \"@/parser/service/tailordb/types\";\n\n/**\n * Processor that collects file fields and generates TypeWithFiles interface.\n */\nexport class FileProcessor {\n static async processType(\n type: ParsedTailorDBType,\n ): Promise<FileUtilMetadata> {\n const fileFields: string[] = [];\n\n if (type.files) {\n for (const fileFieldName of Object.keys(type.files)) {\n fileFields.push(fileFieldName);\n }\n }\n\n return {\n name: type.name,\n fileFields,\n };\n }\n\n static generateUnifiedFileUtils(\n namespaceData: { namespace: string; types: FileUtilMetadata[] }[],\n ): string {\n if (namespaceData.length === 0) {\n return \"\";\n }\n\n // Collect all types with their namespace\n const typeNamespaceMap = new Map<string, string>();\n const typeFieldsMap = new Map<string, string[]>();\n\n for (const { namespace, types } of namespaceData) {\n for (const type of types) {\n typeNamespaceMap.set(type.name, namespace);\n typeFieldsMap.set(type.name, type.fileFields);\n }\n }\n\n if (typeNamespaceMap.size === 0) {\n return \"\";\n }\n\n // Generate interface fields\n const interfaceFields = Array.from(typeFieldsMap.entries())\n .map(([typeName, fields]) => {\n const fieldNamesUnion = fields.map((field) => `\"${field}\"`).join(\" | \");\n return ` ${typeName}: {\\n fields: ${fieldNamesUnion};\\n };`;\n })\n .join(\"\\n\");\n\n const interfaceDefinition =\n multiline /* ts */ `\n export interface TypeWithFiles {\n ${interfaceFields}\n }\n ` + \"\\n\";\n\n // Generate namespaces object\n const namespaceEntries = Array.from(typeNamespaceMap.entries())\n .map(([typeName, namespace]) => ` ${typeName}: \"${namespace}\"`)\n .join(\",\\n\");\n\n const namespacesDefinition =\n multiline /* ts */ `\n const namespaces: Record<keyof TypeWithFiles, string> = {\n ${namespaceEntries},\n };\n ` + \"\\n\";\n\n // Generate downloadFile helper function\n const downloadFunction =\n multiline /* ts */ `\n export async function downloadFile<T extends keyof TypeWithFiles>(\n type: T,\n field: TypeWithFiles[T][\"fields\"],\n recordId: string,\n ) {\n return await tailordb.file.download(namespaces[type], type, field, recordId);\n }\n ` + \"\\n\";\n\n // Generate uploadFile helper function\n const uploadFunction =\n multiline /* ts */ `\n export async function uploadFile<T extends keyof TypeWithFiles>(\n type: T,\n field: TypeWithFiles[T][\"fields\"],\n recordId: string,\n data: string | ArrayBuffer | Uint8Array<ArrayBufferLike> | number[],\n options?: FileUploadOptions,\n ): Promise<FileUploadResponse> {\n return await tailordb.file.upload(namespaces[type], type, field, recordId, data, options);\n }\n ` + \"\\n\";\n\n // Generate deleteFile helper function\n const deleteFunction =\n multiline /* ts */ `\n export async function deleteFile<T extends keyof TypeWithFiles>(\n type: T,\n field: TypeWithFiles[T][\"fields\"],\n recordId: string,\n ): Promise<void> {\n return await tailordb.file.delete(namespaces[type], type, field, recordId);\n }\n ` + \"\\n\";\n\n // Generate getFileMetadata helper function\n const getMetadataFunction =\n multiline /* ts */ `\n export async function getFileMetadata<T extends keyof TypeWithFiles>(\n type: T,\n field: TypeWithFiles[T][\"fields\"],\n recordId: string,\n ): Promise<FileMetadata> {\n return await tailordb.file.getMetadata(namespaces[type], type, field, recordId);\n }\n ` + \"\\n\";\n\n // Generate openFileDownloadStream helper function\n const openDownloadStreamFunction =\n multiline /* ts */ `\n export async function openFileDownloadStream<T extends keyof TypeWithFiles>(\n type: T,\n field: TypeWithFiles[T][\"fields\"],\n recordId: string,\n ): Promise<FileStreamIterator> {\n return await tailordb.file.openDownloadStream(namespaces[type], type, field, recordId);\n }\n ` + \"\\n\";\n\n return [\n interfaceDefinition,\n namespacesDefinition,\n downloadFunction,\n uploadFunction,\n deleteFunction,\n getMetadataFunction,\n openDownloadStreamFunction,\n ].join(\"\\n\");\n }\n}\n","import {\n type CodeGenerator,\n type GeneratorInput,\n type GeneratorResult,\n} from \"@/cli/generator/types\";\nimport { FileProcessor } from \"./file-processor\";\nimport { type FileUtilMetadata } from \"./types\";\nimport type { ParsedTailorDBType } from \"@/parser/service/tailordb/types\";\n\nexport const FileUtilsGeneratorID = \"@tailor-platform/file-utils\";\n\n/**\n * Generator for file utility functions from TailorDB type definitions.\n */\nexport class FileUtilsGenerator implements CodeGenerator<\n FileUtilMetadata,\n undefined,\n undefined,\n string,\n undefined\n> {\n readonly id = FileUtilsGeneratorID;\n readonly description =\n \"Generates TypeWithFiles interface from TailorDB type definitions\";\n\n constructor(\n private readonly options: {\n distPath: string;\n },\n ) {}\n\n async processType(args: {\n type: ParsedTailorDBType;\n namespace: string;\n }): Promise<FileUtilMetadata> {\n return await FileProcessor.processType(args.type);\n }\n\n processResolver(): undefined {\n return undefined;\n }\n\n processExecutor(): undefined {\n return undefined;\n }\n\n async processTailorDBNamespace(args: {\n namespace: string;\n types: Record<string, FileUtilMetadata>;\n }): Promise<string> {\n // Return empty string for now - actual generation happens in aggregate\n const typesWithFiles = Object.values(args.types).filter(\n (t) => t.fileFields.length > 0,\n );\n if (typesWithFiles.length === 0) {\n return \"\";\n }\n // Store namespace info as JSON to be parsed in aggregate\n return JSON.stringify({\n namespace: args.namespace,\n types: typesWithFiles,\n });\n }\n\n processIdProvider(): undefined {\n return undefined;\n }\n\n processAuth(): undefined {\n return undefined;\n }\n\n processStaticWebsite(): undefined {\n return undefined;\n }\n\n aggregate(args: {\n input: GeneratorInput<string, undefined>;\n executorInputs: undefined[];\n baseDir: string;\n }): GeneratorResult {\n const files: GeneratorResult[\"files\"] = [];\n\n // Collect all namespace metadata\n const allNamespaceData: { namespace: string; types: FileUtilMetadata[] }[] =\n [];\n\n for (const nsResult of args.input.tailordb) {\n if (nsResult.types) {\n try {\n const parsed = JSON.parse(nsResult.types);\n if (parsed.namespace && parsed.types) {\n allNamespaceData.push(parsed);\n }\n } catch {\n // Ignore invalid JSON (should not happen)\n }\n }\n }\n\n // If there are any types with files, generate the unified output\n if (allNamespaceData.length > 0) {\n const content = FileProcessor.generateUnifiedFileUtils(allNamespaceData);\n if (content) {\n files.push({\n path: this.options.distPath,\n content,\n });\n }\n }\n\n return { files };\n }\n}\n","import multiline from \"multiline-ts\";\nimport { type KyselyTypeMetadata, type KyselyNamespaceMetadata } from \"./types\";\nimport type { TailorDBTypeConfig } from \"@/configure/services/tailordb/operator-types\";\nimport type { ParsedTailorDBType } from \"@/parser/service/tailordb/types\";\n\ntype FieldConfig = TailorDBTypeConfig[\"schema\"][\"fields\"][string];\n\n/**\n * Processor that converts a ParsedTailorDBType into Kysely type metadata.\n */\nexport class TypeProcessor {\n /**\n * Convert a ParsedTailorDBType into KyselyTypeMetadata.\n */\n static async processType(\n type: ParsedTailorDBType,\n ): Promise<KyselyTypeMetadata> {\n const result = this.generateTableInterface(type);\n\n return {\n name: type.name,\n typeDef: result.typeDef,\n usedUtilityTypes: result.usedUtilityTypes,\n };\n }\n\n /**\n * Generate the table interface.\n */\n private static generateTableInterface(type: ParsedTailorDBType): {\n typeDef: string;\n usedUtilityTypes: { Timestamp: boolean; Serial: boolean };\n } {\n const fieldEntries = Object.entries(type.fields).filter(\n ([fieldName]) => fieldName !== \"id\",\n );\n\n const fieldResults = fieldEntries.map(([fieldName, parsedField]) => ({\n fieldName,\n ...this.generateFieldType(parsedField.config),\n }));\n\n const fields = [\n \"id: Generated<string>;\",\n ...fieldResults.map((result) => `${result.fieldName}: ${result.type};`),\n ];\n\n const aggregatedUtilityTypes = fieldResults.reduce(\n (acc, result) => ({\n Timestamp: acc.Timestamp || result.usedUtilityTypes.Timestamp,\n Serial: acc.Serial || result.usedUtilityTypes.Serial,\n }),\n { Timestamp: false, Serial: false },\n );\n\n const typeDef = multiline /* ts */ `\n ${type.name}: {\n ${fields.join(\"\\n\")}\n }\n `;\n\n return { typeDef, usedUtilityTypes: aggregatedUtilityTypes };\n }\n\n /**\n * Generate the complete field type including array and null modifiers.\n */\n private static generateFieldType(fieldConfig: FieldConfig): {\n type: string;\n usedUtilityTypes: { Timestamp: boolean; Serial: boolean };\n } {\n const baseTypeResult = this.getBaseType(fieldConfig);\n const usedUtilityTypes = { ...baseTypeResult.usedUtilityTypes };\n\n const isArray = fieldConfig.array === true;\n const isNullable = fieldConfig.required !== true;\n\n let finalType = baseTypeResult.type;\n if (isArray) {\n finalType = `${baseTypeResult.type}[]`;\n }\n if (isNullable) {\n finalType = `${finalType} | null`;\n }\n\n if (fieldConfig.serial) {\n usedUtilityTypes.Serial = true;\n finalType = `Serial<${finalType}>`;\n }\n if (fieldConfig.hooks?.create) {\n finalType = `Generated<${finalType}>`;\n }\n\n return { type: finalType, usedUtilityTypes };\n }\n\n /**\n * Get the base Kysely type for a field (without array/null modifiers).\n */\n private static getBaseType(fieldConfig: FieldConfig): {\n type: string;\n usedUtilityTypes: { Timestamp: boolean; Serial: boolean };\n } {\n const fieldType = fieldConfig.type;\n const usedUtilityTypes = { Timestamp: false, Serial: false };\n\n let type: string;\n switch (fieldType) {\n case \"uuid\":\n case \"string\":\n type = \"string\";\n break;\n case \"integer\":\n case \"float\":\n type = \"number\";\n break;\n case \"date\":\n case \"datetime\":\n usedUtilityTypes.Timestamp = true;\n type = \"Timestamp\";\n break;\n case \"bool\":\n case \"boolean\":\n type = \"boolean\";\n break;\n case \"enum\":\n type = this.getEnumType(fieldConfig);\n break;\n case \"nested\": {\n const nestedResult = this.getNestedType(fieldConfig);\n return nestedResult;\n }\n default:\n type = \"string\";\n break;\n }\n\n return { type, usedUtilityTypes };\n }\n\n /**\n * Get the enum type definition.\n */\n private static getEnumType(fieldConfig: FieldConfig): string {\n const allowedValues = fieldConfig.allowedValues;\n\n if (allowedValues && Array.isArray(allowedValues)) {\n return allowedValues\n .map((v: string | { value: string }) => {\n const value = typeof v === \"string\" ? v : v.value;\n return `\"${value}\"`;\n })\n .join(\" | \");\n }\n return \"string\";\n }\n\n /**\n * Get the nested object type definition.\n */\n private static getNestedType(fieldConfig: FieldConfig): {\n type: string;\n usedUtilityTypes: { Timestamp: boolean; Serial: boolean };\n } {\n const fields = fieldConfig.fields;\n if (!fields || typeof fields !== \"object\") {\n return {\n type: \"string\",\n usedUtilityTypes: { Timestamp: false, Serial: false },\n };\n }\n\n const fieldResults = Object.entries(fields).map(\n ([fieldName, nestedFieldConfig]) => ({\n fieldName,\n ...this.generateFieldType(nestedFieldConfig),\n }),\n );\n\n const fieldTypes = fieldResults.map(\n (result) => `${result.fieldName}: ${result.type}`,\n );\n\n const aggregatedUtilityTypes = fieldResults.reduce(\n (acc, result) => ({\n Timestamp: acc.Timestamp || result.usedUtilityTypes.Timestamp,\n Serial: acc.Serial || result.usedUtilityTypes.Serial,\n }),\n { Timestamp: false, Serial: false },\n );\n\n const type = `{\\n ${fieldTypes.join(\";\\n \")}${fieldTypes.length > 0 ? \";\" : \"\"}\\n}`;\n return { type, usedUtilityTypes: aggregatedUtilityTypes };\n }\n\n /**\n * Generate unified types file from multiple namespaces.\n */\n static generateUnifiedTypes(\n namespaceData: KyselyNamespaceMetadata[],\n ): string {\n if (namespaceData.length === 0) {\n return \"\";\n }\n\n // Aggregate used utility types from all namespaces\n const globalUsedUtilityTypes = namespaceData.reduce(\n (acc, ns) => ({\n Timestamp: acc.Timestamp || ns.usedUtilityTypes.Timestamp,\n Serial: acc.Serial || ns.usedUtilityTypes.Serial,\n }),\n { Timestamp: false, Serial: false },\n );\n\n const utilityTypeDeclarations: string[] = [];\n if (globalUsedUtilityTypes.Timestamp) {\n utilityTypeDeclarations.push(\n /* ts */ `type Timestamp = ColumnType<Date, Date | string, Date | string>;`,\n );\n }\n\n // Generated is always needed for the id field\n utilityTypeDeclarations.push(\n multiline /* ts */ `\n type Generated<T> = T extends ColumnType<infer S, infer I, infer U>\n ? ColumnType<S, I | undefined, U>\n : ColumnType<T, T | undefined, T>;\n `,\n );\n if (globalUsedUtilityTypes.Serial) {\n utilityTypeDeclarations.push(\n /* ts */ `type Serial<T = string | number> = ColumnType<T, never, never>;`,\n );\n }\n\n const importsSection = multiline /* ts */ `\n import { type ColumnType, Kysely } from \"kysely\";\n import { TailordbDialect } from \"@tailor-platform/function-kysely-tailordb\";\n\n ${utilityTypeDeclarations.join(\"\\n\")}\n `;\n\n // Generate Namespace interface with multiple namespaces\n const namespaceInterfaces = namespaceData\n .map(({ namespace, types }) => {\n const typeDefsWithIndent = types\n .map((type) => {\n return type.typeDef\n .split(\"\\n\")\n .map((line) => (line.trim() ? ` ${line}` : \"\"))\n .join(\"\\n\");\n })\n .join(\"\\n\\n\");\n\n return ` \"${namespace}\": {\\n${typeDefsWithIndent}\\n }`;\n })\n .join(\",\\n\");\n\n const namespaceInterface = `export interface Namespace {\\n${namespaceInterfaces}\\n}`;\n\n const getDBFunction = multiline /* ts */ `\n export function getDB<const N extends keyof Namespace>(namespace: N): Kysely<Namespace[N]> {\n const client = new tailordb.Client({ namespace });\n return new Kysely<Namespace[N]>({ dialect: new TailordbDialect(client) });\n }\n\n export type DB<N extends keyof Namespace = keyof Namespace> = ReturnType<typeof getDB<N>>;\n `;\n\n return (\n [importsSection, namespaceInterface, getDBFunction].join(\"\\n\\n\") + \"\\n\"\n );\n }\n}\n","import {\n type CodeGenerator,\n type GeneratorResult,\n type GeneratorInput,\n} from \"@/cli/generator/types\";\nimport { TypeProcessor } from \"./type-processor\";\nimport { type KyselyTypeMetadata, type KyselyNamespaceMetadata } from \"./types\";\nimport type { ParsedTailorDBType } from \"@/parser/service/tailordb/types\";\n\nexport const KyselyGeneratorID = \"@tailor-platform/kysely-type\";\n\n/**\n * Main entry point for the Kysely type generation system.\n */\nexport class KyselyGenerator implements CodeGenerator<\n KyselyTypeMetadata,\n undefined,\n undefined,\n KyselyNamespaceMetadata,\n undefined\n> {\n readonly id = KyselyGeneratorID;\n readonly description = \"Generates Kysely type definitions for TailorDB types\";\n\n constructor(\n private readonly options: {\n distPath: string;\n },\n ) {}\n\n async processType(args: {\n type: ParsedTailorDBType;\n namespace: string;\n }): Promise<KyselyTypeMetadata> {\n return await TypeProcessor.processType(args.type);\n }\n\n processResolver(): undefined {\n return undefined;\n }\n\n processExecutor(): undefined {\n return undefined;\n }\n\n async processTailorDBNamespace(args: {\n namespace: string;\n types: Record<string, KyselyTypeMetadata>;\n }): Promise<KyselyNamespaceMetadata> {\n const typesList = Object.values(args.types);\n\n const usedUtilityTypes = typesList.reduce(\n (acc, type) => ({\n Timestamp: acc.Timestamp || type.usedUtilityTypes.Timestamp,\n Serial: acc.Serial || type.usedUtilityTypes.Serial,\n }),\n { Timestamp: false, Serial: false },\n );\n\n return {\n namespace: args.namespace,\n types: typesList,\n usedUtilityTypes,\n };\n }\n\n aggregate(args: {\n input: GeneratorInput<KyselyNamespaceMetadata, undefined>;\n executorInputs: undefined[];\n baseDir: string;\n }): GeneratorResult {\n const files: GeneratorResult[\"files\"] = [];\n\n const allNamespaceData: KyselyNamespaceMetadata[] = [];\n\n for (const nsResult of args.input.tailordb) {\n if (nsResult.types && nsResult.types.types.length > 0) {\n allNamespaceData.push(nsResult.types);\n }\n }\n\n if (allNamespaceData.length > 0) {\n const content = TypeProcessor.generateUnifiedTypes(allNamespaceData);\n files.push({\n path: this.options.distPath,\n content,\n });\n }\n\n return { files };\n }\n}\n","import type { GqlIngestMetadata } from \"./types\";\nimport type { ParsedTailorDBType } from \"@/parser/service/tailordb/types\";\n\n/**\n * Processes TailorDB types to generate GraphQL Ingest metadata\n */\nexport function processGqlIngest(type: ParsedTailorDBType): GqlIngestMetadata {\n // Extract dependencies from relations\n const dependencies = Array.from(\n Object.values(type.fields).reduce<Set<string>>((set, field) => {\n if (\n field.relation?.targetType &&\n field.relation.targetType !== type.name\n ) {\n set.add(field.relation.targetType);\n }\n return set;\n }, new Set<string>()),\n );\n\n // Generate GraphQL mutation\n const graphql = /* gql */ `mutation Create${type.name}($input: ${type.name}CreateInput!) {\n create${type.name}(input: $input) {\n id\n }\n}\n`;\n\n return {\n name: type.name,\n dependencies,\n mapping: {\n dataFile: `data/${type.name}.jsonl`,\n dataFormat: \"jsonl\",\n graphqlFile: `graphql/${type.name}.graphql`,\n mapping: { input: \"$\" },\n },\n graphql,\n };\n}\n","import ml from \"multiline-ts\";\nimport type { GeneratorAuthInput } from \"@/cli/generator/types\";\n\nexport interface IdpUserMetadata {\n name: \"_User\";\n dependencies: string[];\n mapping: {\n dataFile: string;\n dataFormat: string;\n graphqlFile: string;\n mapping: { input: \"$\" };\n };\n graphql: string;\n schema: {\n usernameField: string;\n userTypeName: string;\n };\n}\n\n/**\n * Processes auth configuration to generate IdP user seed metadata\n */\nexport function processIdpUser(\n auth: GeneratorAuthInput,\n): IdpUserMetadata | undefined {\n // Only process if idProvider is BuiltInIdP and userProfile is defined\n if (auth.idProvider?.kind !== \"BuiltInIdP\" || !auth.userProfile) {\n return undefined;\n }\n\n const { typeName, usernameField } = auth.userProfile;\n\n const graphql = /* gql */ `mutation CreateUser($input: _CreateUserInput!) {\n _createUser(input: $input) {\n id\n }\n}\n`;\n\n return {\n name: \"_User\",\n dependencies: [typeName],\n mapping: {\n dataFile: \"data/_User.jsonl\",\n dataFormat: \"jsonl\",\n graphqlFile: \"graphql/_User.graphql\",\n mapping: { input: \"$\" },\n },\n graphql,\n schema: {\n usernameField,\n userTypeName: typeName,\n },\n };\n}\n\n/**\n * Generates the schema file content for IdP users with foreign key\n */\nexport function generateIdpUserSchemaFile(\n usernameField: string,\n userTypeName: string,\n): string {\n return ml /* ts */ `\n import { t } from \"@tailor-platform/sdk\";\n import { createStandardSchema } from \"@tailor-platform/sdk/test\";\n import { defineSchema } from \"@toiroakr/lines-db\";\n\n const schemaType = t.object({\n name: t.string(),\n password: t.string(),\n });\n\n // Simple identity hook for _User (no TailorDB backing type)\n const hook = <T>(data: unknown) => data as T;\n\n export const schema = defineSchema(\n createStandardSchema(schemaType, hook),\n {\n primaryKey: \"name\",\n indexes: [\n { name: \"_user_name_unique_idx\", columns: [\"name\"], unique: true },\n ],\n foreignKeys: [\n {\n column: \"name\",\n references: {\n table: \"${userTypeName}\",\n column: \"${usernameField}\",\n },\n },\n ],\n }\n );\n\n `;\n}\n","import ml from \"multiline-ts\";\nimport type { LinesDbMetadata } from \"./types\";\nimport type { ParsedTailorDBType } from \"@/parser/service/tailordb/types\";\nimport type { ForeignKeyDefinition, IndexDefinition } from \"@toiroakr/lines-db\";\n\n/**\n * Processes TailorDB types to generate lines-db metadata\n */\nexport function processLinesDb(\n type: ParsedTailorDBType,\n source: { filePath: string; exportName: string },\n): LinesDbMetadata {\n if (!source.filePath || !source.exportName) {\n throw new Error(`Missing source info for type ${type.name}`);\n }\n\n const optionalFields = [\"id\"]; // id is always optional\n const omitFields = [];\n const indexes: IndexDefinition[] = [];\n const foreignKeys: ForeignKeyDefinition[] = [];\n\n // Find fields with hooks.create or serial\n for (const [fieldName, field] of Object.entries(type.fields)) {\n if (field.config.hooks?.create) {\n optionalFields.push(fieldName);\n }\n // Serial fields are auto-generated, so they should be optional in seed data\n if (field.config.serial) {\n omitFields.push(fieldName);\n }\n if (field.config.unique) {\n indexes.push({\n name: `${type.name.toLowerCase()}_${fieldName}_unique_idx`,\n columns: [fieldName],\n unique: true,\n });\n }\n }\n\n // Extract indexes\n if (type.indexes) {\n for (const [indexName, indexDef] of Object.entries(type.indexes)) {\n indexes.push({\n name: indexName,\n columns: indexDef.fields,\n unique: indexDef.unique,\n });\n }\n }\n\n // Extract foreign keys from relations\n for (const [fieldName, field] of Object.entries(type.fields)) {\n if (field.relation) {\n foreignKeys.push({\n column: fieldName,\n references: {\n table: field.relation.targetType,\n column: field.relation.key,\n },\n });\n }\n }\n\n return {\n typeName: type.name,\n exportName: source.exportName,\n importPath: source.filePath,\n optionalFields,\n omitFields,\n foreignKeys,\n indexes,\n };\n}\n\n/**\n * Generates the schema file content for lines-db\n */\nexport function generateLinesDbSchemaFile(\n metadata: LinesDbMetadata,\n importPath: string,\n): string {\n const { exportName, optionalFields, omitFields, foreignKeys, indexes } =\n metadata;\n\n const schemaTypeCode = ml /* ts */ `\n const schemaType = t.object({\n ...${exportName}.pickFields(${JSON.stringify(optionalFields)}, { optional: true }),\n ...${exportName}.omitFields(${JSON.stringify([...optionalFields, ...omitFields])}),\n });\n `;\n\n // Generate SchemaOptions\n const schemaOptions: string[] = [];\n\n if (foreignKeys.length > 0) {\n schemaOptions.push(`foreignKeys: [`);\n foreignKeys.forEach((fk) => {\n schemaOptions.push(` ${JSON.stringify(fk)},`);\n });\n schemaOptions.push(`],`);\n }\n\n if (indexes.length > 0) {\n schemaOptions.push(`indexes: [`);\n indexes.forEach((index) => {\n schemaOptions.push(` ${JSON.stringify(index)},`);\n });\n schemaOptions.push(\"],\");\n }\n\n return ml /* ts */ `\n import { t } from \"@tailor-platform/sdk\";\n import { createTailorDBHook, createStandardSchema } from \"@tailor-platform/sdk/test\";\n import { defineSchema } from \"@toiroakr/lines-db\";\n import { ${exportName} } from \"${importPath}\";\n\n ${schemaTypeCode}\n\n const hook = createTailorDBHook(${exportName});\n\n export const schema = defineSchema(\n createStandardSchema(schemaType, hook),${\n schemaOptions.length > 0\n ? [\n \"\\n {\",\n ...schemaOptions.map((option) => ` ${option}`),\n \" }\",\n ].join(\"\\n\")\n : \"\"\n }\n );\n\n `;\n}\n","import * as path from \"node:path\";\nimport ml from \"multiline-ts\";\nimport {\n type CodeGenerator,\n type GeneratorResult,\n} from \"@/cli/generator/types\";\nimport { processGqlIngest } from \"./gql-ingest-processor\";\nimport {\n processIdpUser,\n generateIdpUserSchemaFile,\n} from \"./idp-user-processor\";\nimport {\n processLinesDb,\n generateLinesDbSchemaFile,\n} from \"./lines-db-processor\";\nimport type { SeedTypeMetadata } from \"./types\";\nimport type { Executor } from \"@/parser/service/executor\";\n\nexport const SeedGeneratorID = \"@tailor-platform/seed\";\n\n/**\n * Factory function to create a Seed generator.\n * Combines GraphQL Ingest and lines-db schema generation.\n */\n/**\n * Generates the exec.mjs script content (Node.js executable)\n */\nfunction generateExecScript(\n machineUserName: string,\n configDir: string,\n): string {\n return ml /* js */ `\n import { execSync } from \"node:child_process\";\n import { show, machineUserToken } from \"@tailor-platform/sdk/cli\";\n\n console.log(\"Starting seed data generation...\");\n\n const appInfo = await show();\n const endpoint = \\`\\${appInfo.url}/query\\`;\n\n const tokenInfo = await machineUserToken({ name: \"${machineUserName}\" });\n const headers = JSON.stringify({ Authorization: \\`Bearer \\${tokenInfo.accessToken}\\` });\n\n // Build command with platform-specific quoting\n const headersArg = process.platform === \"win32\"\n ? \\`\"\\${headers.replace(/\"/g, '\\\\\\\\\"')}\"\\` // Windows: escape \" as \\\\\"\n : \\`'\\${headers}'\\`; // Unix: use single quotes\n\n const cmd = \\`npx gql-ingest -c ${configDir} -e \"\\${endpoint}\" --headers \\${headersArg}\\`;\n console.log(\"Running:\", cmd);\n\n try {\n execSync(cmd, { stdio: \"inherit\" });\n } catch (error) {\n console.error(\"Seed failed with exit code:\", error.status);\n process.exit(error.status ?? 1);\n }\n\n `;\n}\n\nexport function createSeedGenerator(options: {\n distPath: string;\n machineUserName?: string;\n}): CodeGenerator<\n SeedTypeMetadata,\n undefined,\n undefined,\n Record<string, SeedTypeMetadata>,\n undefined\n> {\n return {\n id: SeedGeneratorID,\n description: \"Generates seed data files (GraphQL Ingest + lines-db schema)\",\n\n processType: ({ type, source }) => {\n const gqlIngest = processGqlIngest(type);\n const linesDb = processLinesDb(type, source);\n return { gqlIngest, linesDb };\n },\n\n processTailorDBNamespace: ({ types }) => types,\n\n processExecutor: (_executor: Executor) => undefined,\n\n processResolver: (_args) => undefined,\n\n aggregate: ({ input }) => {\n const entityDependencies: Record<\n /* outputDir */ string,\n Record</* type */ string, /* dependencies */ string[]>\n > = {};\n\n const files: GeneratorResult[\"files\"] = [];\n\n for (const nsResult of input.tailordb) {\n if (!nsResult.types) continue;\n\n const outputBaseDir = options.distPath;\n if (!(outputBaseDir in entityDependencies)) {\n entityDependencies[outputBaseDir] = {};\n }\n\n for (const [_typeName, metadata] of Object.entries(nsResult.types)) {\n const { gqlIngest, linesDb } = metadata;\n\n entityDependencies[outputBaseDir][gqlIngest.name] =\n gqlIngest.dependencies;\n\n // Generate GraphQL Ingest files\n files.push(\n {\n path: path.join(\n outputBaseDir,\n \"mappings\",\n `${gqlIngest.name}.json`,\n ),\n content: JSON.stringify(gqlIngest.mapping, null, 2) + \"\\n\",\n },\n {\n path: path.join(outputBaseDir, gqlIngest.mapping.dataFile),\n content: \"\",\n skipIfExists: true,\n },\n {\n path: path.join(outputBaseDir, gqlIngest.mapping.graphqlFile),\n content: gqlIngest.graphql,\n },\n );\n\n // Generate lines-db schema file\n const schemaOutputPath = path.join(\n outputBaseDir,\n \"data\",\n `${linesDb.typeName}.schema.ts`,\n );\n const importPath = path.relative(\n path.dirname(schemaOutputPath),\n linesDb.importPath,\n );\n const normalizedImportPath = importPath\n .replace(/\\.ts$/, \"\")\n .startsWith(\".\")\n ? importPath.replace(/\\.ts$/, \"\")\n : `./${importPath.replace(/\\.ts$/, \"\")}`;\n\n files.push({\n path: schemaOutputPath,\n content: generateLinesDbSchemaFile(linesDb, normalizedImportPath),\n });\n }\n }\n\n // Generate IdP user files if BuiltInIdP is configured\n if (input.auth) {\n const idpUser = processIdpUser(input.auth);\n if (idpUser) {\n const outputBaseDir = options.distPath;\n if (!(outputBaseDir in entityDependencies)) {\n entityDependencies[outputBaseDir] = {};\n }\n\n // Add _User to entityDependencies\n entityDependencies[outputBaseDir][idpUser.name] =\n idpUser.dependencies;\n\n // Generate GraphQL mutation file\n files.push({\n path: path.join(outputBaseDir, idpUser.mapping.graphqlFile),\n content: idpUser.graphql,\n });\n\n // Generate mapping file\n files.push({\n path: path.join(outputBaseDir, \"mappings\", `${idpUser.name}.json`),\n content: JSON.stringify(idpUser.mapping, null, 2) + \"\\n\",\n });\n\n // Generate empty JSONL data file\n files.push({\n path: path.join(outputBaseDir, idpUser.mapping.dataFile),\n content: \"\",\n skipIfExists: true,\n });\n\n // Generate schema file with foreign key\n files.push({\n path: path.join(outputBaseDir, \"data\", `${idpUser.name}.schema.ts`),\n content: generateIdpUserSchemaFile(\n idpUser.schema.usernameField,\n idpUser.schema.userTypeName,\n ),\n });\n }\n }\n\n // Generate config.yaml for each output directory\n for (const [outputDir, dependencies] of Object.entries(\n entityDependencies,\n )) {\n files.push({\n path: path.join(outputDir, \"config.yaml\"),\n content: /* yaml */ `entityDependencies:\n ${Object.entries(dependencies)\n .map(([type, deps]) => `${type}: [${deps.join(\", \")}]`)\n .join(\"\\n \")}\n`,\n });\n\n // Generate exec.mjs if machineUserName is provided\n if (options.machineUserName) {\n files.push({\n path: path.join(outputDir, \"exec.mjs\"),\n content: generateExecScript(\n options.machineUserName,\n path.basename(outputDir),\n ),\n });\n }\n }\n\n return { files };\n },\n };\n}\n","// Mock tailordb Client for CLI environment\n(\n globalThis as unknown as {\n tailordb: {\n Client: typeof tailordb.Client;\n };\n }\n).tailordb = {\n Client: class {\n constructor(_config: { namespace: string }) {}\n async connect(): Promise<void> {}\n async end(): Promise<void> {}\n async queryObject<O>(): Promise<Tailordb.QueryResult<O>> {\n return {} as Promise<Tailordb.QueryResult<O>>;\n }\n },\n};\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport {\n createGeneratorConfigSchema,\n type CodeGeneratorBase,\n type Generator,\n} from \"@/parser/generator-config\";\nimport {\n EnumConstantsGenerator,\n EnumConstantsGeneratorID,\n} from \"./generator/builtin/enum-constants\";\nimport {\n FileUtilsGenerator,\n FileUtilsGeneratorID,\n} from \"./generator/builtin/file-utils\";\nimport {\n KyselyGenerator,\n KyselyGeneratorID,\n} from \"./generator/builtin/kysely-type\";\nimport { createSeedGenerator, SeedGeneratorID } from \"./generator/builtin/seed\";\nimport type { AppConfig } from \"@/configure/config\";\nimport \"./mock\";\n\n// Register built-in generators with their constructor functions\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst builtinGenerators = new Map<string, (options: any) => CodeGeneratorBase>([\n [\n KyselyGeneratorID,\n (options: { distPath: string }) => new KyselyGenerator(options),\n ],\n [\n SeedGeneratorID,\n (options: { distPath: string }) => createSeedGenerator(options),\n ],\n [\n EnumConstantsGeneratorID,\n (options: { distPath: string }) => new EnumConstantsGenerator(options),\n ],\n [\n FileUtilsGeneratorID,\n (options: { distPath: string }) => new FileUtilsGenerator(options),\n ],\n]);\n\nexport const GeneratorConfigSchema =\n createGeneratorConfigSchema(builtinGenerators);\n\nexport async function loadConfig(\n configPath: string,\n): Promise<{ config: AppConfig; generators: Generator[] }> {\n const resolvedPath = path.resolve(process.cwd(), configPath);\n\n if (!fs.existsSync(resolvedPath)) {\n throw new Error(`Configuration file not found: ${configPath}`);\n }\n\n const configModule = await import(pathToFileURL(resolvedPath).href);\n if (!configModule || !configModule.default) {\n throw new Error(\"Invalid Tailor config module: default export not found\");\n }\n\n // Collect all generator exports (generators, generators2, etc.)\n const allGenerators: Generator[] = [];\n for (const value of Object.values(configModule)) {\n if (Array.isArray(value)) {\n const parsed = value.reduce(\n (acc, item) => {\n if (!acc.success) return acc;\n\n const result = GeneratorConfigSchema.safeParse(item);\n if (result.success) {\n acc.items.push(result.data);\n } else {\n acc.success = false;\n }\n return acc;\n },\n { success: true, items: [] as Generator[] },\n );\n allGenerators.push(...parsed.items);\n }\n }\n\n return {\n config: configModule.default as AppConfig,\n generators: allGenerators,\n };\n}\n","import * as fs from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport * as path from \"node:path\";\nimport { styleText } from \"node:util\";\nimport ml from \"multiline-ts\";\nimport type { AppConfig } from \"@/configure/config\";\n\nexport interface AttributeMapConfig {\n [key: string]: string;\n}\n\nexport type AttributeListConfig = readonly string[];\n\ninterface ExtractedAttributes {\n attributeMap?: AttributeMapConfig;\n attributeList?: AttributeListConfig;\n env?: Record<string, string | number | boolean>;\n}\n\nfunction extractAttributesFromConfig(config: AppConfig): ExtractedAttributes {\n return collectAttributesFromConfig(config);\n}\n\nexport function generateTypeDefinition(\n attributeMap: AttributeMapConfig | undefined,\n attributeList: AttributeListConfig | undefined,\n env?: Record<string, string | number | boolean>,\n): string {\n // Generate AttributeMap interface\n // attributeMap values are type string representations (e.g., \"string\", \"boolean\", \"string[]\")\n const mapFields = attributeMap\n ? Object.entries(attributeMap)\n .map(([key, value]) => ` ${key}: ${value};`)\n .join(\"\\n\")\n : \"\";\n\n const mapBody =\n !attributeMap || Object.keys(attributeMap).length === 0\n ? \"{}\"\n : `{\n${mapFields}\n }`;\n\n // Generate AttributeList type as a tuple of strings based on the length\n const listType = attributeList\n ? `[${attributeList.map(() => \"string\").join(\", \")}]`\n : \"[]\";\n\n // Use interface with __tuple marker for declaration merging and tuple type support\n const listBody = `{\n __tuple?: ${listType};\n }`;\n\n // Generate Env interface\n const envFields = env\n ? Object.entries(env)\n .map(([key, value]) => {\n const valueType =\n typeof value === \"string\" ? `\"${value}\"` : String(value);\n return ` ${key}: ${valueType};`;\n })\n .join(\"\\n\")\n : \"\";\n\n const envBody =\n !env || Object.keys(env).length === 0\n ? \"{}\"\n : `{\n${envFields}\n }`;\n\n return ml /* ts */ `\n/* eslint-disable @typescript-eslint/no-empty-object-type */\n// This file is auto-generated by @tailor-platform/sdk\n// Do not edit this file manually\n// Regenerated automatically when running 'tailor-sdk apply' or 'tailor-sdk generate'\n\ndeclare module \"@tailor-platform/sdk\" {\n interface AttributeMap ${mapBody}\n interface AttributeList ${listBody}\n interface Env ${envBody}\n}\n\nexport {};\n\n`;\n}\n\nconst require = createRequire(import.meta.url);\n\nfunction collectAttributesFromConfig(config: AppConfig): ExtractedAttributes {\n const auth = config.auth;\n if (!auth || typeof auth !== \"object\") {\n return {};\n }\n\n // Check if auth has userProfile with attributes/attributeList\n if (\"userProfile\" in auth) {\n const userProfile = (\n auth as {\n userProfile?: {\n type?: {\n fields?: Record<\n string,\n {\n type: string;\n metadata?: {\n array?: boolean;\n allowedValues?: Array<{ value: string }>;\n };\n }\n >;\n };\n attributes?: Record<string, true>;\n attributeList?: AttributeListConfig;\n };\n }\n ).userProfile;\n\n const attributes = userProfile?.attributes;\n const fields = userProfile?.type?.fields;\n const attributeList = userProfile?.attributeList;\n\n // Convert attributes to AttributeMapConfig by inferring types from field metadata\n const attributeMap: AttributeMapConfig | undefined = attributes\n ? Object.keys(attributes).reduce((acc, key) => {\n const { type, metadata } = fields?.[key] ?? {};\n\n // Default to string if no metadata\n if (!metadata) {\n acc[key] = \"string\";\n return acc;\n }\n\n let typeStr = \"string\";\n\n if (type === \"boolean\") {\n typeStr = \"boolean\";\n } else if (type === \"enum\" && metadata.allowedValues) {\n // Generate union type from enum values\n typeStr = metadata.allowedValues\n .map((v) => `\"${v.value}\"`)\n .join(\" | \");\n }\n\n // Add array suffix if needed\n if (metadata.array) {\n typeStr += \"[]\";\n }\n\n acc[key] = typeStr;\n return acc;\n }, {} as AttributeMapConfig)\n : undefined;\n\n return {\n attributeMap,\n attributeList,\n };\n }\n\n return {};\n}\n\nexport function resolveTypeDefinitionPath(configPath: string): string {\n // Check for environment variable override\n const typePath = process.env.TAILOR_PLATFORM_SDK_TYPE_PATH;\n if (typePath) {\n return path.resolve(process.cwd(), typePath);\n }\n\n const configDir = path.dirname(path.resolve(configPath));\n const packageDir = resolvePackageDirectory(configDir);\n\n if (!packageDir) {\n return path.join(\n configDir,\n \"node_modules\",\n \"@tailor-platform\",\n \"sdk\",\n \"dist\",\n \"user-defined.d.ts\",\n );\n }\n\n return path.join(packageDir, \"dist\", \"user-defined.d.ts\");\n}\n\nexport async function generateUserTypes(\n config: AppConfig,\n configPath: string,\n): Promise<void> {\n try {\n const { attributeMap, attributeList } = extractAttributesFromConfig(config);\n if (!attributeMap && !attributeList) {\n console.log(styleText(\"cyan\", \"No attributes found in configuration\"));\n }\n\n if (attributeMap) {\n console.log(\"Extracted AttributeMap:\", attributeMap);\n }\n if (attributeList) {\n console.log(\"Extracted AttributeList:\", attributeList);\n }\n\n const env = config.env;\n if (env) {\n console.log(\"Extracted Env:\", env);\n }\n\n // Generate type definition\n const typeDefContent = generateTypeDefinition(\n attributeMap,\n attributeList,\n env,\n );\n const outputPath = resolveTypeDefinitionPath(configPath);\n\n // Write to file\n fs.mkdirSync(path.dirname(outputPath), { recursive: true });\n fs.writeFileSync(outputPath, typeDefContent);\n const relativePath = path.relative(process.cwd(), outputPath);\n console.log(\"\");\n console.log(\n \"Generated type definitions:\",\n styleText(\"green\", relativePath),\n );\n } catch (error) {\n console.error(styleText(\"red\", \"Error generating types\"));\n console.error(error);\n // Don't throw - this should not block apply/generate\n }\n}\n\nfunction resolvePackageDirectory(startDir: string): string | null {\n let currentDir = startDir;\n const root = path.parse(currentDir).root;\n\n while (true) {\n const candidate = path.join(\n currentDir,\n \"node_modules\",\n \"@tailor-platform\",\n \"sdk\",\n );\n const packageJsonPath = path.join(candidate, \"package.json\");\n if (fs.existsSync(packageJsonPath)) {\n return candidate;\n }\n\n if (currentDir === root) {\n break;\n }\n\n const parentDir = path.dirname(currentDir);\n currentDir = parentDir;\n }\n\n try {\n const resolved = require.resolve(\"@tailor-platform/sdk/package.json\", {\n paths: [startDir],\n });\n return path.dirname(resolved);\n } catch {\n return null;\n }\n}\n","import * as path from \"node:path\";\nimport { loadEnvFile } from \"node:process\";\nimport { consola } from \"consola\";\nimport { table } from \"table\";\nimport { z } from \"zod\";\nimport type { ParsedArgs } from \"citty\";\n\nexport const commonArgs = {\n \"env-file\": {\n type: \"string\",\n description: \"Path to the environment file\",\n alias: \"e\",\n },\n verbose: {\n type: \"boolean\",\n description: \"Enable verbose logging\",\n alias: \"v\",\n default: false,\n },\n} as const;\n\nexport const withCommonArgs =\n <T extends ParsedArgs<typeof commonArgs>>(\n handler: (args: T) => Promise<void>,\n ) =>\n async ({ args }: { args: T }) => {\n try {\n if (args[\"env-file\"] !== undefined) {\n const envPath = path.resolve(process.cwd(), args[\"env-file\"]);\n loadEnvFile(envPath);\n }\n await handler(args);\n } catch (error) {\n if (error instanceof Error) {\n consola.error(error.message);\n if (args.verbose && error.stack) {\n consola.log(`Stack trace:\\n${error.stack}`);\n }\n } else {\n consola.error(`Unknown error: ${error}`);\n }\n process.exit(1);\n }\n process.exit(0);\n };\n\nconst formatSchema = z.enum([\"table\", \"json\"]);\n\nexport const formatArgs = {\n format: {\n type: \"string\",\n description: `Output format (${formatSchema.options.join(\", \")})`,\n alias: \"f\",\n default: \"table\",\n },\n} as const;\n\nexport function parseFormat(format: string) {\n const parsed = formatSchema.safeParse(format);\n if (!parsed.success) {\n throw new Error(\n `Format \"${format}\" is invalid. Must be one of: ${formatSchema.options.join(\", \")}`,\n );\n }\n return parsed.data;\n}\n\nexport function printWithFormat(\n data: object | object[],\n format: z.output<typeof formatSchema>,\n) {\n switch (format) {\n case \"table\": {\n if (Array.isArray(data)) {\n data.forEach((item) => {\n const t = table(Object.entries(item), {\n singleLine: true,\n });\n process.stdout.write(t);\n });\n } else {\n const t = table(Object.entries(data), {\n singleLine: true,\n });\n process.stdout.write(t);\n }\n break;\n }\n case \"json\":\n console.log(JSON.stringify(data));\n break;\n default:\n throw new Error(`Format \"${format satisfies never}\" is invalid.`);\n }\n}\n","// Copyright 2023-2025 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.6.3\n// @generated from file buf/validate/validate.proto (package buf.validate, syntax proto2)\n/* eslint-disable */\n\nimport { enumDesc, extDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file buf/validate/validate.proto.\n */\nexport const file_buf_validate_validate = /*@__PURE__*/\n fileDesc(\"ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSJuCgxNZXNzYWdlUnVsZXMSHwoDY2VsGAMgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSLQoFb25lb2YYBCADKAsyHi5idWYudmFsaWRhdGUuTWVzc2FnZU9uZW9mUnVsZUoECAEQAlIIZGlzYWJsZWQiNAoQTWVzc2FnZU9uZW9mUnVsZRIOCgZmaWVsZHMYASADKAkSEAoIcmVxdWlyZWQYAiABKAgiHgoKT25lb2ZSdWxlcxIQCghyZXF1aXJlZBgBIAEoCCK/CAoKRmllbGRSdWxlcxIfCgNjZWwYFyADKAsyEi5idWYudmFsaWRhdGUuUnVsZRIQCghyZXF1aXJlZBgZIAEoCBIkCgZpZ25vcmUYGyABKA4yFC5idWYudmFsaWRhdGUuSWdub3JlEikKBWZsb2F0GAEgASgLMhguYnVmLnZhbGlkYXRlLkZsb2F0UnVsZXNIABIrCgZkb3VibGUYAiABKAsyGS5idWYudmFsaWRhdGUuRG91YmxlUnVsZXNIABIpCgVpbnQzMhgDIAEoCzIYLmJ1Zi52YWxpZGF0ZS5JbnQzMlJ1bGVzSAASKQoFaW50NjQYBCABKAsyGC5idWYudmFsaWRhdGUuSW50NjRSdWxlc0gAEisKBnVpbnQzMhgFIAEoCzIZLmJ1Zi52YWxpZGF0ZS5VSW50MzJSdWxlc0gAEisKBnVpbnQ2NBgGIAEoCzIZLmJ1Zi52YWxpZGF0ZS5VSW50NjRSdWxlc0gAEisKBnNpbnQzMhgHIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TSW50MzJSdWxlc0gAEisKBnNpbnQ2NBgIIAEoCzIZLmJ1Zi52YWxpZGF0ZS5TSW50NjRSdWxlc0gAEi0KB2ZpeGVkMzIYCSABKAsyGi5idWYudmFsaWRhdGUuRml4ZWQzMlJ1bGVzSAASLQoHZml4ZWQ2NBgKIAEoCzIaLmJ1Zi52YWxpZGF0ZS5GaXhlZDY0UnVsZXNIABIvCghzZml4ZWQzMhgLIAEoCzIbLmJ1Zi52YWxpZGF0ZS5TRml4ZWQzMlJ1bGVzSAASLwoIc2ZpeGVkNjQYDCABKAsyGy5idWYudmFsaWRhdGUuU0ZpeGVkNjRSdWxlc0gAEicKBGJvb2wYDSABKAsyFy5idWYudmFsaWRhdGUuQm9vbFJ1bGVzSAASKwoGc3RyaW5nGA4gASgLMhkuYnVmLnZhbGlkYXRlLlN0cmluZ1J1bGVzSAASKQoFYnl0ZXMYDyABKAsyGC5idWYudmFsaWRhdGUuQnl0ZXNSdWxlc0gAEicKBGVudW0YECABKAsyFy5idWYudmFsaWRhdGUuRW51bVJ1bGVzSAASLwoIcmVwZWF0ZWQYEiABKAsyGy5idWYudmFsaWRhdGUuUmVwZWF0ZWRSdWxlc0gAEiUKA21hcBgTIAEoCzIWLmJ1Zi52YWxpZGF0ZS5NYXBSdWxlc0gAEiUKA2FueRgUIAEoCzIWLmJ1Zi52YWxpZGF0ZS5BbnlSdWxlc0gAEi8KCGR1cmF0aW9uGBUgASgLMhsuYnVmLnZhbGlkYXRlLkR1cmF0aW9uUnVsZXNIABIxCgl0aW1lc3RhbXAYFiABKAsyHC5idWYudmFsaWRhdGUuVGltZXN0YW1wUnVsZXNIAEIGCgR0eXBlSgQIGBAZSgQIGhAbUgdza2lwcGVkUgxpZ25vcmVfZW1wdHkiVQoPUHJlZGVmaW5lZFJ1bGVzEh8KA2NlbBgBIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlSgQIGBAZSgQIGhAbUgdza2lwcGVkUgxpZ25vcmVfZW1wdHki2hcKCkZsb2F0UnVsZXMSgwEKBWNvbnN0GAEgASgCQnTCSHEKbwoLZmxvYXQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKfAQoCbHQYAiABKAJCkAHCSIwBCokBCghmbG9hdC5sdBp9IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKvAQoDbHRlGAMgASgCQp8BwkibAQqYAQoJZmxvYXQubHRlGooBIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAAS7wcKAmd0GAQgASgCQuAHwkjcBwqNAQoIZmxvYXQuZ3QagAEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwrDAQoLZmxvYXQuZ3RfbHQaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrNAQoVZmxvYXQuZ3RfbHRfZXhjbHVzaXZlGrMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycK0wEKDGZsb2F0Lmd0X2x0ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCt0BChZmbG9hdC5ndF9sdGVfZXhjbHVzaXZlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARK6CAoDZ3RlGAUgASgCQqoIwkimCAqbAQoJZmxvYXQuZ3RlGo0BIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCtIBCgxmbG9hdC5ndGVfbHQawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtwBChZmbG9hdC5ndGVfbHRfZXhjbHVzaXZlGsEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwriAQoNZmxvYXQuZ3RlX2x0ZRrQAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK7AEKF2Zsb2F0Lmd0ZV9sdGVfZXhjbHVzaXZlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygCQnPCSHAKbgoIZmxvYXQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoAkJmwkhjCmEKDGZsb2F0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEnUKBmZpbml0ZRgIIAEoCEJlwkhiCmAKDGZsb2F0LmZpbml0ZRpQcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAndmFsdWUgbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSKwoHZXhhbXBsZRgJIAMoAkIawkgXChUKDWZsb2F0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIu0XCgtEb3VibGVSdWxlcxKEAQoFY29uc3QYASABKAFCdcJIcgpwCgxkb3VibGUuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKgAQoCbHQYAiABKAFCkQHCSI0BCooBCglkb3VibGUubHQafSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQpPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASsAEKA2x0ZRgDIAEoAUKgAcJInAEKmQEKCmRvdWJsZS5sdGUaigEhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlKT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABL0BwoCZ3QYBCABKAFC5QfCSOEHCo4BCglkb3VibGUuZ3QagAEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwrEAQoMZG91YmxlLmd0X2x0GrMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKzgEKFmRvdWJsZS5ndF9sdF9leGNsdXNpdmUaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrUAQoNZG91YmxlLmd0X2x0ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCt4BChdkb3VibGUuZ3RfbHRlX2V4Y2x1c2l2ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESvwgKA2d0ZRgFIAEoAUKvCMJIqwgKnAEKCmRvdWJsZS5ndGUajQEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycK0wEKDWRvdWJsZS5ndGVfbHQawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCt0BChdkb3VibGUuZ3RlX2x0X2V4Y2x1c2l2ZRrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK4wEKDmRvdWJsZS5ndGVfbHRlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrtAQoYZG91YmxlLmd0ZV9sdGVfZXhjbHVzaXZlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoAUJ0wkhxCm8KCWRvdWJsZS5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygBQmfCSGQKYgoNZG91YmxlLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEnYKBmZpbml0ZRgIIAEoCEJmwkhjCmEKDWRvdWJsZS5maW5pdGUaUHJ1bGVzLmZpbml0ZSA/ICh0aGlzLmlzTmFuKCkgfHwgdGhpcy5pc0luZigpID8gJ3ZhbHVlIG11c3QgYmUgZmluaXRlJyA6ICcnKSA6ICcnEiwKB2V4YW1wbGUYCSADKAFCG8JIGAoWCg5kb3VibGUuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ijBUKCkludDMyUnVsZXMSgwEKBWNvbnN0GAEgASgFQnTCSHEKbwoLaW50MzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKKAQoCbHQYAiABKAVCfMJIeQp3CghpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKcAQoDbHRlGAMgASgFQowBwkiIAQqFAQoJaW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKXBwoCZ3QYBCABKAVCiAfCSIQHCnoKCGludDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqzAQoLaW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrsBChVpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrDAQoMaW50MzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrLAQoWaW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES4wcKA2d0ZRgFIAEoBULTB8JIzwcKiAEKCWludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsIBCgxpbnQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKygEKFmludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtIBCg1pbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtoBChdpbnQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ/CgJpbhgGIAMoBUJzwkhwCm4KCGludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YByADKAVCZsJIYwphCgxpbnQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIrCgdleGFtcGxlGAggAygFQhrCSBcKFQoNaW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ijBUKCkludDY0UnVsZXMSgwEKBWNvbnN0GAEgASgDQnTCSHEKbwoLaW50NjQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKKAQoCbHQYAiABKANCfMJIeQp3CghpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKcAQoDbHRlGAMgASgDQowBwkiIAQqFAQoJaW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKXBwoCZ3QYBCABKANCiAfCSIQHCnoKCGludDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqzAQoLaW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrsBChVpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrDAQoMaW50NjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrLAQoWaW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES4wcKA2d0ZRgFIAEoA0LTB8JIzwcKiAEKCWludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsIBCgxpbnQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKygEKFmludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtIBCg1pbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtoBChdpbnQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ/CgJpbhgGIAMoA0JzwkhwCm4KCGludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YByADKANCZsJIYwphCgxpbnQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIrCgdleGFtcGxlGAkgAygDQhrCSBcKFQoNaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1VJbnQzMlJ1bGVzEoQBCgVjb25zdBgBIAEoDUJ1wkhyCnAKDHVpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoDUJ9wkh6CngKCXVpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgNQo0BwkiJAQqGAQoKdWludDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgNQo0HwkiJBwp7Cgl1aW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgx1aW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZ1aW50MzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXVpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChd1aW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoDULYB8JI1AcKiQEKCnVpbnQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNdWludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXdWludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg51aW50MzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYdWludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoDUJ0wkhxCm8KCXVpbnQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygNQmfCSGQKYgoNdWludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKA1CG8JIGAoWCg51aW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1VJbnQ2NFJ1bGVzEoQBCgVjb25zdBgBIAEoBEJ1wkhyCnAKDHVpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoBEJ9wkh6CngKCXVpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgEQo0BwkiJAQqGAQoKdWludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgEQo0HwkiJBwp7Cgl1aW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgx1aW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZ1aW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXVpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChd1aW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoBELYB8JI1AcKiQEKCnVpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNdWludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXdWludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg51aW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYdWludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoBEJ0wkhxCm8KCXVpbnQ2NC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygEQmfCSGQKYgoNdWludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKARCG8JIGAoWCg51aW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1NJbnQzMlJ1bGVzEoQBCgVjb25zdBgBIAEoEUJ1wkhyCnAKDHNpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoEUJ9wkh6CngKCXNpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgRQo0BwkiJAQqGAQoKc2ludDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgRQo0HwkiJBwp7CglzaW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgxzaW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZzaW50MzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXNpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChdzaW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoEULYB8JI1AcKiQEKCnNpbnQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNc2ludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXc2ludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg5zaW50MzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYc2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoEUJ0wkhxCm8KCXNpbnQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygRQmfCSGQKYgoNc2ludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBFCG8JIGAoWCg5zaW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1NJbnQ2NFJ1bGVzEoQBCgVjb25zdBgBIAEoEkJ1wkhyCnAKDHNpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoEkJ9wkh6CngKCXNpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgSQo0BwkiJAQqGAQoKc2ludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgSQo0HwkiJBwp7CglzaW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgxzaW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZzaW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXNpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChdzaW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoEkLYB8JI1AcKiQEKCnNpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNc2ludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXc2ludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg5zaW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYc2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoEkJ0wkhxCm8KCXNpbnQ2NC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygSQmfCSGQKYgoNc2ludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBJCG8JIGAoWCg5zaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4irxUKDEZpeGVkMzJSdWxlcxKFAQoFY29uc3QYASABKAdCdsJIcwpxCg1maXhlZDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjAEKAmx0GAIgASgHQn7CSHsKeQoKZml4ZWQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKeAQoDbHRlGAMgASgHQo4BwkiKAQqHAQoLZml4ZWQzMi5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEqEHCgJndBgEIAEoB0KSB8JIjgcKfAoKZml4ZWQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtQEKDWZpeGVkMzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr0BChdmaXhlZDMyLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsUBCg5maXhlZDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzQEKGGZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES7QcKA2d0ZRgFIAEoB0LdB8JI2QcKigEKC2ZpeGVkMzIuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxAEKDmZpeGVkMzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCswBChhmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtQBCg9maXhlZDMyLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3AEKGWZpeGVkMzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgQEKAmluGAYgAygHQnXCSHIKcAoKZml4ZWQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSeAoGbm90X2luGAcgAygHQmjCSGUKYwoOZml4ZWQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxItCgdleGFtcGxlGAggAygHQhzCSBkKFwoPZml4ZWQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKvFQoMRml4ZWQ2NFJ1bGVzEoUBCgVjb25zdBgBIAEoBkJ2wkhzCnEKDWZpeGVkNjQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKMAQoCbHQYAiABKAZCfsJIewp5CgpmaXhlZDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp4BCgNsdGUYAyABKAZCjgHCSIoBCocBCgtmaXhlZDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASoQcKAmd0GAQgASgGQpIHwkiOBwp8CgpmaXhlZDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq1AQoNZml4ZWQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKF2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxQEKDmZpeGVkNjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrNAQoYZml4ZWQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLtBwoDZ3RlGAUgASgGQt0HwkjZBwqKAQoLZml4ZWQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrEAQoOZml4ZWQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKGGZpeGVkNjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1AEKD2ZpeGVkNjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrcAQoZZml4ZWQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKBAQoCaW4YBiADKAZCdcJIcgpwCgpmaXhlZDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ4CgZub3RfaW4YByADKAZCaMJIZQpjCg5maXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAZCHMJIGQoXCg9maXhlZDY0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsAVCg1TRml4ZWQzMlJ1bGVzEoYBCgVjb25zdBgBIAEoD0J3wkh0CnIKDnNmaXhlZDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjQEKAmx0GAIgASgPQn/CSHwKegoLc2ZpeGVkMzIubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnwEKA2x0ZRgDIAEoD0KPAcJIiwEKiAEKDHNmaXhlZDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASpgcKAmd0GAQgASgPQpcHwkiTBwp9CgtzZml4ZWQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDnNmaXhlZDMyLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYc2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD3NmaXhlZDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGXNmaXhlZDMyLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEvIHCgNndGUYBSABKA9C4gfCSN4HCosBCgxzZml4ZWQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPc2ZpeGVkMzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlzZml4ZWQzMi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQc2ZpeGVkMzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoac2ZpeGVkMzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESggEKAmluGAYgAygPQnbCSHMKcQoLc2ZpeGVkMzIuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnkKBm5vdF9pbhgHIAMoD0JpwkhmCmQKD3NmaXhlZDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi4KB2V4YW1wbGUYCCADKA9CHcJIGgoYChBzZml4ZWQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLAFQoNU0ZpeGVkNjRSdWxlcxKGAQoFY29uc3QYASABKBBCd8JIdApyCg5zZml4ZWQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEo0BCgJsdBgCIAEoEEJ/wkh8CnoKC3NmaXhlZDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp8BCgNsdGUYAyABKBBCjwHCSIsBCogBCgxzZml4ZWQ2NC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEqYHCgJndBgEIAEoEEKXB8JIkwcKfQoLc2ZpeGVkNjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrYBCg5zZml4ZWQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvgEKGHNmaXhlZDY0Lmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsYBCg9zZml4ZWQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs4BChlzZml4ZWQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLyBwoDZ3RlGAUgASgQQuIHwkjeBwqLAQoMc2ZpeGVkNjQuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxQEKD3NmaXhlZDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrNAQoZc2ZpeGVkNjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1QEKEHNmaXhlZDY0Lmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3QEKGnNmaXhlZDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoIBCgJpbhgGIAMoEEJ2wkhzCnEKC3NmaXhlZDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ5CgZub3RfaW4YByADKBBCacJIZgpkCg9zZml4ZWQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIuCgdleGFtcGxlGAggAygQQh3CSBoKGAoQc2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ixwEKCUJvb2xSdWxlcxKCAQoFY29uc3QYASABKAhCc8JIcApuCgpib29sLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSKgoHZXhhbXBsZRgCIAMoCEIZwkgWChQKDGJvb2wuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIpA3CgtTdHJpbmdSdWxlcxKGAQoFY29uc3QYASABKAlCd8JIdApyCgxzdHJpbmcuY29uc3QaYnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgYCVzYCcuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEn4KA2xlbhgTIAEoBEJxwkhuCmwKCnN0cmluZy5sZW4aXnVpbnQodGhpcy5zaXplKCkpICE9IHJ1bGVzLmxlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSAlcyBjaGFyYWN0ZXJzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSmQEKB21pbl9sZW4YAiABKARChwHCSIMBCoABCg5zdHJpbmcubWluX2xlbhpudWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fbGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSlwEKB21heF9sZW4YAyABKARChQHCSIEBCn8KDnN0cmluZy5tYXhfbGVuGm11aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbW9zdCAlcyBjaGFyYWN0ZXJzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEpsBCglsZW5fYnl0ZXMYFCABKARChwHCSIMBCoABChBzdHJpbmcubGVuX2J5dGVzGmx1aW50KGJ5dGVzKHRoaXMpLnNpemUoKSkgIT0gcnVsZXMubGVuX2J5dGVzID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl9ieXRlc10pIDogJycSowEKCW1pbl9ieXRlcxgEIAEoBEKPAcJIiwEKiAEKEHN0cmluZy5taW5fYnl0ZXMadHVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9ieXRlcyA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5taW5fYnl0ZXNdKSA6ICcnEqIBCgltYXhfYnl0ZXMYBSABKARCjgHCSIoBCocBChBzdHJpbmcubWF4X2J5dGVzGnN1aW50KGJ5dGVzKHRoaXMpLnNpemUoKSkgPiBydWxlcy5tYXhfYnl0ZXMgPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbW9zdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5tYXhfYnl0ZXNdKSA6ICcnEo0BCgdwYXR0ZXJuGAYgASgJQnzCSHkKdwoOc3RyaW5nLnBhdHRlcm4aZSF0aGlzLm1hdGNoZXMocnVsZXMucGF0dGVybikgPyAndmFsdWUgZG9lcyBub3QgbWF0Y2ggcmVnZXggcGF0dGVybiBgJXNgJy5mb3JtYXQoW3J1bGVzLnBhdHRlcm5dKSA6ICcnEoQBCgZwcmVmaXgYByABKAlCdMJIcQpvCg1zdHJpbmcucHJlZml4Gl4hdGhpcy5zdGFydHNXaXRoKHJ1bGVzLnByZWZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBwcmVmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEoIBCgZzdWZmaXgYCCABKAlCcsJIbwptCg1zdHJpbmcuc3VmZml4GlwhdGhpcy5lbmRzV2l0aChydWxlcy5zdWZmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgc3VmZml4IGAlc2AnLmZvcm1hdChbcnVsZXMuc3VmZml4XSkgOiAnJxKQAQoIY29udGFpbnMYCSABKAlCfsJIewp5Cg9zdHJpbmcuY29udGFpbnMaZiF0aGlzLmNvbnRhaW5zKHJ1bGVzLmNvbnRhaW5zKSA/ICd2YWx1ZSBkb2VzIG5vdCBjb250YWluIHN1YnN0cmluZyBgJXNgJy5mb3JtYXQoW3J1bGVzLmNvbnRhaW5zXSkgOiAnJxKYAQoMbm90X2NvbnRhaW5zGBcgASgJQoEBwkh+CnwKE3N0cmluZy5ub3RfY29udGFpbnMaZXRoaXMuY29udGFpbnMocnVsZXMubm90X2NvbnRhaW5zKSA/ICd2YWx1ZSBjb250YWlucyBzdWJzdHJpbmcgYCVzYCcuZm9ybWF0KFtydWxlcy5ub3RfY29udGFpbnNdKSA6ICcnEoABCgJpbhgKIAMoCUJ0wkhxCm8KCXN0cmluZy5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAsgAygJQmfCSGQKYgoNc3RyaW5nLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEt8BCgVlbWFpbBgMIAEoCELNAcJIyQEKYQoMc3RyaW5nLmVtYWlsEiN2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgZW1haWwgYWRkcmVzcxosIXJ1bGVzLmVtYWlsIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0VtYWlsKCkKZAoSc3RyaW5nLmVtYWlsX2VtcHR5EjJ2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcxoaIXJ1bGVzLmVtYWlsIHx8IHRoaXMgIT0gJydIABLnAQoIaG9zdG5hbWUYDSABKAhC0gHCSM4BCmUKD3N0cmluZy5ob3N0bmFtZRIedmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lGjIhcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKQplChVzdHJpbmcuaG9zdG5hbWVfZW1wdHkSLXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0bmFtZRodIXJ1bGVzLmhvc3RuYW1lIHx8IHRoaXMgIT0gJydIABLHAQoCaXAYDiABKAhCuAHCSLQBClUKCXN0cmluZy5pcBIgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIGFkZHJlc3MaJiFydWxlcy5pcCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCgpClsKD3N0cmluZy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaFyFydWxlcy5pcCB8fCB0aGlzICE9ICcnSAAS1gEKBGlwdjQYDyABKAhCxQHCSMEBClwKC3N0cmluZy5pcHY0EiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzGikhcnVsZXMuaXB2NCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg0KQphChFzdHJpbmcuaXB2NF9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcxoZIXJ1bGVzLmlwdjQgfHwgdGhpcyAhPSAnJ0gAEtYBCgRpcHY2GBAgASgIQsUBwkjBAQpcCgtzdHJpbmcuaXB2NhIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxopIXJ1bGVzLmlwdjYgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXAoNikKYQoRc3RyaW5nLmlwdjZfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3MaGSFydWxlcy5pcHY2IHx8IHRoaXMgIT0gJydIABK/AQoDdXJpGBEgASgIQq8BwkirAQpRCgpzdHJpbmcudXJpEhl2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVJJGighcnVsZXMudXJpIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc1VyaSgpClYKEHN0cmluZy51cmlfZW1wdHkSKHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVUkkaGCFydWxlcy51cmkgfHwgdGhpcyAhPSAnJ0gAEnAKB3VyaV9yZWYYEiABKAhCXcJIWgpYCg5zdHJpbmcudXJpX3JlZhIjdmFsdWUgbXVzdCBiZSBhIHZhbGlkIFVSSSBSZWZlcmVuY2UaISFydWxlcy51cmlfcmVmIHx8IHRoaXMuaXNVcmlSZWYoKUgAEpACCgdhZGRyZXNzGBUgASgIQvwBwkj4AQqBAQoOc3RyaW5nLmFkZHJlc3MSLXZhbHVlIG11c3QgYmUgYSB2YWxpZCBob3N0bmFtZSwgb3IgaXAgYWRkcmVzcxpAIXJ1bGVzLmFkZHJlc3MgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKSB8fCB0aGlzLmlzSXAoKQpyChRzdHJpbmcuYWRkcmVzc19lbXB0eRI8dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGhwhcnVsZXMuYWRkcmVzcyB8fCB0aGlzICE9ICcnSAASmAIKBHV1aWQYFiABKAhChwLCSIMCCqUBCgtzdHJpbmcudXVpZBIadmFsdWUgbXVzdCBiZSBhIHZhbGlkIFVVSUQaeiFydWxlcy51dWlkIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpClkKEXN0cmluZy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBoZIXJ1bGVzLnV1aWQgfHwgdGhpcyAhPSAnJ0gAEvABCgV0dXVpZBghIAEoCELeAcJI2gEKcwoMc3RyaW5nLnR1dWlkEiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgdHJpbW1lZCBVVUlEGj8hcnVsZXMudHV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXszMn0kJykKYwoSc3RyaW5nLnR1dWlkX2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgdHJpbW1lZCBVVUlEGhohcnVsZXMudHV1aWQgfHwgdGhpcyAhPSAnJ0gAEpYCChFpcF93aXRoX3ByZWZpeGxlbhgaIAEoCEL4AcJI9AEKeAoYc3RyaW5nLmlwX3dpdGhfcHJlZml4bGVuEh92YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgcHJlZml4GjshcnVsZXMuaXBfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoKQp4Ch5zdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW5fZW1wdHkSLnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUCBwcmVmaXgaJiFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAASzwIKE2lwdjRfd2l0aF9wcmVmaXhsZW4YGyABKAhCrwLCSKsCCpMBChpzdHJpbmcuaXB2NF93aXRoX3ByZWZpeGxlbhI1dmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgYWRkcmVzcyB3aXRoIHByZWZpeCBsZW5ndGgaPiFydWxlcy5pcHY0X3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDQpCpIBCiBzdHJpbmcuaXB2NF93aXRoX3ByZWZpeGxlbl9lbXB0eRJEdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcyB3aXRoIHByZWZpeCBsZW5ndGgaKCFydWxlcy5pcHY0X3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLPAgoTaXB2Nl93aXRoX3ByZWZpeGxlbhgcIAEoCEKvAsJIqwIKkwEKGnN0cmluZy5pcHY2X3dpdGhfcHJlZml4bGVuEjV2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjZfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNikKkgEKIHN0cmluZy5pcHY2X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NiBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjZfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEvIBCglpcF9wcmVmaXgYHSABKAhC3AHCSNgBCmwKEHN0cmluZy5pcF9wcmVmaXgSH3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaNyFydWxlcy5pcF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgodHJ1ZSkKaAoWc3RyaW5nLmlwX3ByZWZpeF9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBoeIXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzICE9ICcnSAASgwIKC2lwdjRfcHJlZml4GB4gASgIQusBwkjnAQp1ChJzdHJpbmcuaXB2NF9wcmVmaXgSIXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IHByZWZpeBo8IXJ1bGVzLmlwdjRfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDQsIHRydWUpCm4KGHN0cmluZy5pcHY0X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgcHJlZml4GiAhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAEoMCCgtpcHY2X3ByZWZpeBgfIAEoCELrAcJI5wEKdQoSc3RyaW5nLmlwdjZfcHJlZml4EiF2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBwcmVmaXgaPCFydWxlcy5pcHY2X3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2LCB0cnVlKQpuChhzdHJpbmcuaXB2Nl9wcmVmaXhfZW1wdHkSMHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IHByZWZpeBogIXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgIT0gJydIABK1AgoNaG9zdF9hbmRfcG9ydBggIAEoCEKbAsJIlwIKmQEKFHN0cmluZy5ob3N0X2FuZF9wb3J0EkF2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaG9zdCAoaG9zdG5hbWUgb3IgSVAgYWRkcmVzcykgYW5kIHBvcnQgcGFpcho+IXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdEFuZFBvcnQodHJ1ZSkKeQoac3RyaW5nLmhvc3RfYW5kX3BvcnRfZW1wdHkSN3ZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0IGFuZCBwb3J0IHBhaXIaIiFydWxlcy5ob3N0X2FuZF9wb3J0IHx8IHRoaXMgIT0gJydIABKoBQoQd2VsbF9rbm93bl9yZWdleBgYIAEoDjIYLmJ1Zi52YWxpZGF0ZS5Lbm93blJlZ2V4QvEEwkjtBArwAQojc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWUSJnZhbHVlIG11c3QgYmUgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGqABcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeOj9bMC05YS16QS1aISMkJSZcJyorLS5eX3x+XHg2MF0rJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKyQnKQqNAQopc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWVfZW1wdHkSNXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGilydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDEgfHwgdGhpcyAhPSAnJwrnAQokc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX3ZhbHVlEid2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgdmFsdWUalQFydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDIgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeW15cdTAwMDAtXHUwMDA4XHUwMDBBLVx1MDAxRlx1MDA3Rl0qJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKiQnKUgAEg4KBnN0cmljdBgZIAEoCBIsCgdleGFtcGxlGCIgAygJQhvCSBgKFgoOc3RyaW5nLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkIMCgp3ZWxsX2tub3duIuoQCgpCeXRlc1J1bGVzEoABCgVjb25zdBgBIAEoDEJxwkhuCmwKC2J5dGVzLmNvbnN0Gl10aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGJlICV4Jy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSeAoDbGVuGA0gASgEQmvCSGgKZgoJYnl0ZXMubGVuGll1aW50KHRoaXMuc2l6ZSgpKSAhPSBydWxlcy5sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuXSkgOiAnJxKQAQoHbWluX2xlbhgCIAEoBEJ/wkh8CnoKDWJ5dGVzLm1pbl9sZW4aaXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2xlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKIAQoHbWF4X2xlbhgDIAEoBEJ3wkh0CnIKDWJ5dGVzLm1heF9sZW4aYXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICd2YWx1ZSBtdXN0IGJlIGF0IG1vc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSkAEKB3BhdHRlcm4YBCABKAlCf8JIfAp6Cg1ieXRlcy5wYXR0ZXJuGmkhc3RyaW5nKHRoaXMpLm1hdGNoZXMocnVsZXMucGF0dGVybikgPyAndmFsdWUgbXVzdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycSgQEKBnByZWZpeBgFIAEoDEJxwkhuCmwKDGJ5dGVzLnByZWZpeBpcIXRoaXMuc3RhcnRzV2l0aChydWxlcy5wcmVmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgcHJlZml4ICV4Jy5mb3JtYXQoW3J1bGVzLnByZWZpeF0pIDogJycSfwoGc3VmZml4GAYgASgMQm/CSGwKagoMYnl0ZXMuc3VmZml4GlohdGhpcy5lbmRzV2l0aChydWxlcy5zdWZmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgc3VmZml4ICV4Jy5mb3JtYXQoW3J1bGVzLnN1ZmZpeF0pIDogJycSgwEKCGNvbnRhaW5zGAcgASgMQnHCSG4KbAoOYnl0ZXMuY29udGFpbnMaWiF0aGlzLmNvbnRhaW5zKHJ1bGVzLmNvbnRhaW5zKSA/ICd2YWx1ZSBkb2VzIG5vdCBjb250YWluICV4Jy5mb3JtYXQoW3J1bGVzLmNvbnRhaW5zXSkgOiAnJxKnAQoCaW4YCCADKAxCmgHCSJYBCpMBCghieXRlcy5pbhqGAWdldEZpZWxkKHJ1bGVzLCAnaW4nKS5zaXplKCkgPiAwICYmICEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgJIAMoDEJmwkhjCmEKDGJ5dGVzLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEusBCgJpcBgKIAEoCELcAcJI2AEKdAoIYnl0ZXMuaXASIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBhZGRyZXNzGkYhcnVsZXMuaXAgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSA0IHx8IHRoaXMuc2l6ZSgpID09IDE2CmAKDmJ5dGVzLmlwX2VtcHR5Ei92YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgYWRkcmVzcxodIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpICE9IDBIABLkAQoEaXB2NBgLIAEoCELTAcJIzwEKZQoKYnl0ZXMuaXB2NBIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgYWRkcmVzcxozIXJ1bGVzLmlwdjQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSA0CmYKEGJ5dGVzLmlwdjRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY0IGFkZHJlc3MaHyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpICE9IDBIABLlAQoEaXB2NhgMIAEoCELUAcJI0AEKZgoKYnl0ZXMuaXB2NhIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxo0IXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpmChBieXRlcy5pcHY2X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NiBhZGRyZXNzGh8hcnVsZXMuaXB2NiB8fCB0aGlzLnNpemUoKSAhPSAwSAASKwoHZXhhbXBsZRgOIAMoDEIawkgXChUKDWJ5dGVzLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkIMCgp3ZWxsX2tub3duItQDCglFbnVtUnVsZXMSggEKBWNvbnN0GAEgASgFQnPCSHAKbgoKZW51bS5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEhQKDGRlZmluZWRfb25seRgCIAEoCBJ+CgJpbhgDIAMoBUJywkhvCm0KB2VudW0uaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnUKBm5vdF9pbhgEIAMoBUJlwkhiCmAKC2VudW0ubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKgoHZXhhbXBsZRgFIAMoBUIZwkgWChQKDGVudW0uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIvsDCg1SZXBlYXRlZFJ1bGVzEp4BCgltaW5faXRlbXMYASABKARCigHCSIYBCoMBChJyZXBlYXRlZC5taW5faXRlbXMabXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2l0ZW1zID8gJ3ZhbHVlIG11c3QgY29udGFpbiBhdCBsZWFzdCAlZCBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1pbl9pdGVtc10pIDogJycSogEKCW1heF9pdGVtcxgCIAEoBEKOAcJIigEKhwEKEnJlcGVhdGVkLm1heF9pdGVtcxpxdWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfaXRlbXMgPyAndmFsdWUgbXVzdCBjb250YWluIG5vIG1vcmUgdGhhbiAlcyBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1heF9pdGVtc10pIDogJycScAoGdW5pcXVlGAMgASgIQmDCSF0KWwoPcmVwZWF0ZWQudW5pcXVlEihyZXBlYXRlZCB2YWx1ZSBtdXN0IGNvbnRhaW4gdW5pcXVlIGl0ZW1zGh4hcnVsZXMudW5pcXVlIHx8IHRoaXMudW5pcXVlKCkSJwoFaXRlbXMYBCABKAsyGC5idWYudmFsaWRhdGUuRmllbGRSdWxlcyoJCOgHEICAgIACIooDCghNYXBSdWxlcxKPAQoJbWluX3BhaXJzGAEgASgEQnzCSHkKdwoNbWFwLm1pbl9wYWlycxpmdWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbGVhc3QgJWQgZW50cmllcycuZm9ybWF0KFtydWxlcy5taW5fcGFpcnNdKSA6ICcnEo4BCgltYXhfcGFpcnMYAiABKARCe8JIeAp2Cg1tYXAubWF4X3BhaXJzGmV1aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9wYWlycyA/ICdtYXAgbXVzdCBiZSBhdCBtb3N0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWF4X3BhaXJzXSkgOiAnJxImCgRrZXlzGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMSKAoGdmFsdWVzGAUgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiImCghBbnlSdWxlcxIKCgJpbhgCIAMoCRIOCgZub3RfaW4YAyADKAkimRcKDUR1cmF0aW9uUnVsZXMSoQEKBWNvbnN0GAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnfCSHQKcgoOZHVyYXRpb24uY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKoAQoCbHQYAyABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25Cf8JIfAp6CgtkdXJhdGlvbi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABK6AQoDbHRlGAQgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQo8BwkiLAQqIAQoMZHVyYXRpb24ubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABLBBwoCZ3QYBSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25ClwfCSJMHCn0KC2R1cmF0aW9uLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq2AQoOZHVyYXRpb24uZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BChhkdXJhdGlvbi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrGAQoPZHVyYXRpb24uZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrOAQoZZHVyYXRpb24uZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESjQgKA2d0ZRgGIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkLiB8JI3gcKiwEKDGR1cmF0aW9uLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsUBCg9kdXJhdGlvbi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKGWR1cmF0aW9uLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtUBChBkdXJhdGlvbi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt0BChpkdXJhdGlvbi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKdAQoCaW4YByADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CdsJIcwpxCgtkdXJhdGlvbi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSlAEKBm5vdF9pbhgIIAMoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJpwkhmCmQKD2R1cmF0aW9uLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEkkKB2V4YW1wbGUYCSADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CHcJIGgoYChBkdXJhdGlvbi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKSGAoOVGltZXN0YW1wUnVsZXMSowEKBWNvbnN0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEJ4wkh1CnMKD3RpbWVzdGFtcC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEqsBCgJsdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCgAHCSH0KewoMdGltZXN0YW1wLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAErwBCgNsdGUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQpABwkiMAQqJAQoNdGltZXN0YW1wLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASbAoGbHRfbm93GAcgASgIQlrCSFcKVQoQdGltZXN0YW1wLmx0X25vdxpBKHJ1bGVzLmx0X25vdyAmJiB0aGlzID4gbm93KSA/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBub3cnIDogJydIABLHBwoCZ3QYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQpwHwkiYBwp+Cgx0aW1lc3RhbXAuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrcBCg90aW1lc3RhbXAuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr8BChl0aW1lc3RhbXAuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxwEKEHRpbWVzdGFtcC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs8BChp0aW1lc3RhbXAuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESkwgKA2d0ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBC5wfCSOMHCowBCg10aW1lc3RhbXAuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxgEKEHRpbWVzdGFtcC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzgEKGnRpbWVzdGFtcC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrWAQoRdGltZXN0YW1wLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3gEKG3RpbWVzdGFtcC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJvCgZndF9ub3cYCCABKAhCXcJIWgpYChB0aW1lc3RhbXAuZ3Rfbm93GkQocnVsZXMuZ3Rfbm93ICYmIHRoaXMgPCBub3cpID8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG5vdycgOiAnJ0gBErgBCgZ3aXRoaW4YCSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CjAHCSIgBCoUBChB0aW1lc3RhbXAud2l0aGluGnF0aGlzIDwgbm93LXJ1bGVzLndpdGhpbiB8fCB0aGlzID4gbm93K3J1bGVzLndpdGhpbiA/ICd2YWx1ZSBtdXN0IGJlIHdpdGhpbiAlcyBvZiBub3cnLmZvcm1hdChbcnVsZXMud2l0aGluXSkgOiAnJxJLCgdleGFtcGxlGAogAygLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIewkgbChkKEXRpbWVzdGFtcC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiI5CgpWaW9sYXRpb25zEisKCnZpb2xhdGlvbnMYASADKAsyFy5idWYudmFsaWRhdGUuVmlvbGF0aW9uIp8BCglWaW9sYXRpb24SJgoFZmllbGQYBSABKAsyFy5idWYudmFsaWRhdGUuRmllbGRQYXRoEiUKBHJ1bGUYBiABKAsyFy5idWYudmFsaWRhdGUuRmllbGRQYXRoEg8KB3J1bGVfaWQYAiABKAkSDwoHbWVzc2FnZRgDIAEoCRIPCgdmb3Jfa2V5GAQgASgISgQIARACUgpmaWVsZF9wYXRoIj0KCUZpZWxkUGF0aBIwCghlbGVtZW50cxgBIAMoCzIeLmJ1Zi52YWxpZGF0ZS5GaWVsZFBhdGhFbGVtZW50IukCChBGaWVsZFBhdGhFbGVtZW50EhQKDGZpZWxkX251bWJlchgBIAEoBRISCgpmaWVsZF9uYW1lGAIgASgJEj4KCmZpZWxkX3R5cGUYAyABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRI8CghrZXlfdHlwZRgEIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlEj4KCnZhbHVlX3R5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRIPCgVpbmRleBgGIAEoBEgAEhIKCGJvb2xfa2V5GAcgASgISAASEQoHaW50X2tleRgIIAEoA0gAEhIKCHVpbnRfa2V5GAkgASgESAASFAoKc3RyaW5nX2tleRgKIAEoCUgAQgsKCXN1YnNjcmlwdCqhAQoGSWdub3JlEhYKEklHTk9SRV9VTlNQRUNJRklFRBAAEhgKFElHTk9SRV9JRl9aRVJPX1ZBTFVFEAESEQoNSUdOT1JFX0FMV0FZUxADIgQIAhACKgxJR05PUkVfRU1QVFkqDklHTk9SRV9ERUZBVUxUKhdJR05PUkVfSUZfREVGQVVMVF9WQUxVRSoVSUdOT1JFX0lGX1VOUE9QVUxBVEVEKm4KCktub3duUmVnZXgSGwoXS05PV05fUkVHRVhfVU5TUEVDSUZJRUQQABIgChxLTk9XTl9SRUdFWF9IVFRQX0hFQURFUl9OQU1FEAESIQodS05PV05fUkVHRVhfSFRUUF9IRUFERVJfVkFMVUUQAjpWCgdtZXNzYWdlEh8uZ29vZ2xlLnByb3RvYnVmLk1lc3NhZ2VPcHRpb25zGIcJIAEoCzIaLmJ1Zi52YWxpZGF0ZS5NZXNzYWdlUnVsZXNSB21lc3NhZ2U6TgoFb25lb2YSHS5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zGIcJIAEoCzIYLmJ1Zi52YWxpZGF0ZS5PbmVvZlJ1bGVzUgVvbmVvZjpOCgVmaWVsZBIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYhwkgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXNSBWZpZWxkOl0KCnByZWRlZmluZWQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGIgJIAEoCzIdLmJ1Zi52YWxpZGF0ZS5QcmVkZWZpbmVkUnVsZXNSCnByZWRlZmluZWRCbgoSYnVpbGQuYnVmLnZhbGlkYXRlQg1WYWxpZGF0ZVByb3RvUAFaR2J1Zi5idWlsZC9nZW4vZ28vYnVmYnVpbGQvcHJvdG92YWxpZGF0ZS9wcm90b2NvbGJ1ZmZlcnMvZ28vYnVmL3ZhbGlkYXRl\", [file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message buf.validate.Rule.\n * Use `create(RuleSchema)` to create a new message.\n */\nexport const RuleSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 0);\n\n/**\n * Describes the message buf.validate.MessageRules.\n * Use `create(MessageRulesSchema)` to create a new message.\n */\nexport const MessageRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 1);\n\n/**\n * Describes the message buf.validate.MessageOneofRule.\n * Use `create(MessageOneofRuleSchema)` to create a new message.\n */\nexport const MessageOneofRuleSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 2);\n\n/**\n * Describes the message buf.validate.OneofRules.\n * Use `create(OneofRulesSchema)` to create a new message.\n */\nexport const OneofRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 3);\n\n/**\n * Describes the message buf.validate.FieldRules.\n * Use `create(FieldRulesSchema)` to create a new message.\n */\nexport const FieldRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 4);\n\n/**\n * Describes the message buf.validate.PredefinedRules.\n * Use `create(PredefinedRulesSchema)` to create a new message.\n */\nexport const PredefinedRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 5);\n\n/**\n * Describes the message buf.validate.FloatRules.\n * Use `create(FloatRulesSchema)` to create a new message.\n */\nexport const FloatRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 6);\n\n/**\n * Describes the message buf.validate.DoubleRules.\n * Use `create(DoubleRulesSchema)` to create a new message.\n */\nexport const DoubleRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 7);\n\n/**\n * Describes the message buf.validate.Int32Rules.\n * Use `create(Int32RulesSchema)` to create a new message.\n */\nexport const Int32RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 8);\n\n/**\n * Describes the message buf.validate.Int64Rules.\n * Use `create(Int64RulesSchema)` to create a new message.\n */\nexport const Int64RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 9);\n\n/**\n * Describes the message buf.validate.UInt32Rules.\n * Use `create(UInt32RulesSchema)` to create a new message.\n */\nexport const UInt32RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 10);\n\n/**\n * Describes the message buf.validate.UInt64Rules.\n * Use `create(UInt64RulesSchema)` to create a new message.\n */\nexport const UInt64RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 11);\n\n/**\n * Describes the message buf.validate.SInt32Rules.\n * Use `create(SInt32RulesSchema)` to create a new message.\n */\nexport const SInt32RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 12);\n\n/**\n * Describes the message buf.validate.SInt64Rules.\n * Use `create(SInt64RulesSchema)` to create a new message.\n */\nexport const SInt64RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 13);\n\n/**\n * Describes the message buf.validate.Fixed32Rules.\n * Use `create(Fixed32RulesSchema)` to create a new message.\n */\nexport const Fixed32RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 14);\n\n/**\n * Describes the message buf.validate.Fixed64Rules.\n * Use `create(Fixed64RulesSchema)` to create a new message.\n */\nexport const Fixed64RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 15);\n\n/**\n * Describes the message buf.validate.SFixed32Rules.\n * Use `create(SFixed32RulesSchema)` to create a new message.\n */\nexport const SFixed32RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 16);\n\n/**\n * Describes the message buf.validate.SFixed64Rules.\n * Use `create(SFixed64RulesSchema)` to create a new message.\n */\nexport const SFixed64RulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 17);\n\n/**\n * Describes the message buf.validate.BoolRules.\n * Use `create(BoolRulesSchema)` to create a new message.\n */\nexport const BoolRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 18);\n\n/**\n * Describes the message buf.validate.StringRules.\n * Use `create(StringRulesSchema)` to create a new message.\n */\nexport const StringRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 19);\n\n/**\n * Describes the message buf.validate.BytesRules.\n * Use `create(BytesRulesSchema)` to create a new message.\n */\nexport const BytesRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 20);\n\n/**\n * Describes the message buf.validate.EnumRules.\n * Use `create(EnumRulesSchema)` to create a new message.\n */\nexport const EnumRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 21);\n\n/**\n * Describes the message buf.validate.RepeatedRules.\n * Use `create(RepeatedRulesSchema)` to create a new message.\n */\nexport const RepeatedRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 22);\n\n/**\n * Describes the message buf.validate.MapRules.\n * Use `create(MapRulesSchema)` to create a new message.\n */\nexport const MapRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 23);\n\n/**\n * Describes the message buf.validate.AnyRules.\n * Use `create(AnyRulesSchema)` to create a new message.\n */\nexport const AnyRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 24);\n\n/**\n * Describes the message buf.validate.DurationRules.\n * Use `create(DurationRulesSchema)` to create a new message.\n */\nexport const DurationRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 25);\n\n/**\n * Describes the message buf.validate.TimestampRules.\n * Use `create(TimestampRulesSchema)` to create a new message.\n */\nexport const TimestampRulesSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 26);\n\n/**\n * Describes the message buf.validate.Violations.\n * Use `create(ViolationsSchema)` to create a new message.\n */\nexport const ViolationsSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 27);\n\n/**\n * Describes the message buf.validate.Violation.\n * Use `create(ViolationSchema)` to create a new message.\n */\nexport const ViolationSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 28);\n\n/**\n * Describes the message buf.validate.FieldPath.\n * Use `create(FieldPathSchema)` to create a new message.\n */\nexport const FieldPathSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 29);\n\n/**\n * Describes the message buf.validate.FieldPathElement.\n * Use `create(FieldPathElementSchema)` to create a new message.\n */\nexport const FieldPathElementSchema = /*@__PURE__*/\n messageDesc(file_buf_validate_validate, 30);\n\n/**\n * Describes the enum buf.validate.Ignore.\n */\nexport const IgnoreSchema = /*@__PURE__*/\n enumDesc(file_buf_validate_validate, 0);\n\n/**\n * Specifies how `FieldRules.ignore` behaves, depending on the field's value, and\n * whether the field tracks presence.\n *\n * @generated from enum buf.validate.Ignore\n */\nexport const Ignore = /*@__PURE__*/\n tsEnum(IgnoreSchema);\n\n/**\n * Describes the enum buf.validate.KnownRegex.\n */\nexport const KnownRegexSchema = /*@__PURE__*/\n enumDesc(file_buf_validate_validate, 1);\n\n/**\n * KnownRegex contains some well-known patterns.\n *\n * @generated from enum buf.validate.KnownRegex\n */\nexport const KnownRegex = /*@__PURE__*/\n tsEnum(KnownRegexSchema);\n\n/**\n * Rules specify the validations to be performed on this message. By default,\n * no validation is performed against a message.\n *\n * @generated from extension: optional buf.validate.MessageRules message = 1159;\n */\nexport const message = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 0);\n\n/**\n * Rules specify the validations to be performed on this oneof. By default,\n * no validation is performed against a oneof.\n *\n * @generated from extension: optional buf.validate.OneofRules oneof = 1159;\n */\nexport const oneof = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 1);\n\n/**\n * Rules specify the validations to be performed on this field. By default,\n * no validation is performed against a field.\n *\n * @generated from extension: optional buf.validate.FieldRules field = 1159;\n */\nexport const field = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 2);\n\n/**\n * Specifies predefined rules. When extending a standard rule message,\n * this adds additional CEL expressions that apply when the extension is used.\n *\n * ```proto\n * extend buf.validate.Int32Rules {\n * bool is_zero [(buf.validate.predefined).cel = {\n * id: \"int32.is_zero\",\n * message: \"value must be zero\",\n * expression: \"!rule || this == 0\",\n * }];\n * }\n *\n * message Foo {\n * int32 reserved = 1 [(buf.validate.field).int32.(is_zero) = true];\n * }\n * ```\n *\n * @generated from extension: optional buf.validate.PredefinedRules predefined = 1160;\n */\nexport const predefined = /*@__PURE__*/\n extDesc(file_buf_validate_validate, 3);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/fieldmask/v1/option.proto (package tailor.fieldmask.v1, syntax proto3)\n/* eslint-disable */\n\nimport { extDesc, fileDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_protobuf_descriptor } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/fieldmask/v1/option.proto.\n */\nexport const file_tailor_fieldmask_v1_option = /*@__PURE__*/\n fileDesc(\"CiB0YWlsb3IvZmllbGRtYXNrL3YxL29wdGlvbi5wcm90bxITdGFpbG9yLmZpZWxkbWFzay52MTo1CgVtYXNrcxIdLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE9wdGlvbnMYkb8FIAMoCVIFbWFza3NiBnByb3RvMw\", [file_google_protobuf_descriptor]);\n\n/**\n * @generated from extension: repeated string masks = 90001;\n */\nexport const masks = /*@__PURE__*/\n extDesc(file_tailor_fieldmask_v1_option, 0);\n\n","// Copyright 2025 Google LLC\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// @generated by protoc-gen-es v2.6.3\n// @generated from file google/api/field_behavior.proto (package google.api, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, extDesc, fileDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_protobuf_descriptor } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file google/api/field_behavior.proto.\n */\nexport const file_google_api_field_behavior = /*@__PURE__*/\n fileDesc(\"Ch9nb29nbGUvYXBpL2ZpZWxkX2JlaGF2aW9yLnByb3RvEgpnb29nbGUuYXBpKrYBCg1GaWVsZEJlaGF2aW9yEh4KGkZJRUxEX0JFSEFWSU9SX1VOU1BFQ0lGSUVEEAASDAoIT1BUSU9OQUwQARIMCghSRVFVSVJFRBACEg8KC09VVFBVVF9PTkxZEAMSDgoKSU5QVVRfT05MWRAEEg0KCUlNTVVUQUJMRRAFEhIKDlVOT1JERVJFRF9MSVNUEAYSFQoRTk9OX0VNUFRZX0RFRkFVTFQQBxIOCgpJREVOVElGSUVSEAg6ZAoOZmllbGRfYmVoYXZpb3ISHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGJwIIAMoDjIZLmdvb2dsZS5hcGkuRmllbGRCZWhhdmlvckICEABSDWZpZWxkQmVoYXZpb3JCcAoOY29tLmdvb2dsZS5hcGlCEkZpZWxkQmVoYXZpb3JQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICBEdBUEliBnByb3RvMw\", [file_google_protobuf_descriptor]);\n\n/**\n * Describes the enum google.api.FieldBehavior.\n */\nexport const FieldBehaviorSchema = /*@__PURE__*/\n enumDesc(file_google_api_field_behavior, 0);\n\n/**\n * An indicator of the behavior of a given field (for example, that a field\n * is required in requests, or given as output but ignored as input).\n * This **does not** change the behavior in protocol buffers itself; it only\n * denotes the behavior and may affect how API tooling handles the field.\n *\n * Note: This enum **may** receive new values in the future.\n *\n * @generated from enum google.api.FieldBehavior\n */\nexport const FieldBehavior = /*@__PURE__*/\n tsEnum(FieldBehaviorSchema);\n\n/**\n * A designation of a specific field behavior (required, output only, etc.)\n * in protobuf messages.\n *\n * Examples:\n *\n * string name = 1 [(google.api.field_behavior) = REQUIRED];\n * State state = 1 [(google.api.field_behavior) = OUTPUT_ONLY];\n * google.protobuf.Duration ttl = 1\n * [(google.api.field_behavior) = INPUT_ONLY];\n * google.protobuf.Timestamp expire_time = 1\n * [(google.api.field_behavior) = OUTPUT_ONLY,\n * (google.api.field_behavior) = IMMUTABLE];\n *\n * @generated from extension: repeated google.api.FieldBehavior field_behavior = 1052 [packed = false];\n */\nexport const field_behavior = /*@__PURE__*/\n extDesc(file_google_api_field_behavior, 0);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/application_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/application_resource.proto.\n */\nexport const file_tailor_v1_application_resource = /*@__PURE__*/\n fileDesc(\"CiR0YWlsb3IvdjEvYXBwbGljYXRpb25fcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSLQAwoLQXBwbGljYXRpb24SDAoEbmFtZRgBIAEoCRITCgZkb21haW4YAiABKAlCA+BBAxIWCg5hdXRoX25hbWVzcGFjZRgDIAEoCRIMCgRjb3JzGAQgAygJEhwKFGFsbG93ZWRfaXBfYWRkcmVzc2VzGAsgAygJEiYKCXN1YmdyYXBocxgFIAMoCzITLnRhaWxvci52MS5TdWJncmFwaBIbCg5jcmVhdGVfdXNlcl9pZBgGIAEoCUID4EEDEhsKDnVwZGF0ZV91c2VyX2lkGAcgASgJQgPgQQMSNAoLY3JlYXRlX3RpbWUYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSNAoLdXBkYXRlX3RpbWUYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSEAoDdXJsGAogASgJQgPgQQMSHQoVZGlzYWJsZV9pbnRyb3NwZWN0aW9uGAwgASgIEhAKCGRpc2FibGVkGA0gASgIEkkKFGF1dGhfaWRwX2NvbmZpZ19uYW1lGA4gASgJQiu6SChyJjIkXihbYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldKT8kIqIBCh5BcHBsaWNhdGlvblNjaGVtYVVwZGF0ZUF0dGVtcHQSMAoMYXR0ZW1wdF90aW1lGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI/CgZzdGF0dXMYAiABKA4yLy50YWlsb3IudjEuQXBwbGljYXRpb25TY2hlbWFVcGRhdGVBdHRlbXB0U3RhdHVzEg0KBWVycm9yGAMgASgJIsgCCghTdWJncmFwaBI1CgxzZXJ2aWNlX3R5cGUYASABKA4yHy50YWlsb3IudjEuU3ViZ3JhcGguU2VydmljZVR5cGUSQwoRc2VydmljZV9uYW1lc3BhY2UYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQivwEKC1NlcnZpY2VUeXBlEhwKGFNFUlZJQ0VfVFlQRV9VTlNQRUNJRklFRBAAEhkKFVNFUlZJQ0VfVFlQRV9QSVBFTElORRABEhoKFlNFUlZJQ0VfVFlQRV9TVEFURUZMT1cQAhIZChVTRVJWSUNFX1RZUEVfVEFJTE9SREIQAxIVChFTRVJWSUNFX1RZUEVfQVVUSBAEEhMKD1NFUlZJQ0VfVFlQRV9BSRAFEhQKEFNFUlZJQ0VfVFlQRV9JRFAQBirNAQokQXBwbGljYXRpb25TY2hlbWFVcGRhdGVBdHRlbXB0U3RhdHVzEjgKNEFQUExJQ0FUSU9OX1NDSEVNQV9VUERBVEVfQVRURU1QVF9TVEFUVVNfVU5TUEVDSUZJRUQQABI2CjJBUFBMSUNBVElPTl9TQ0hFTUFfVVBEQVRFX0FUVEVNUFRfU1RBVFVTX1NVQ0NFRURFRBABEjMKL0FQUExJQ0FUSU9OX1NDSEVNQV9VUERBVEVfQVRURU1QVF9TVEFUVVNfRkFJTEVEEAJiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.Application.\n * Use `create(ApplicationSchema)` to create a new message.\n */\nexport const ApplicationSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application_resource, 0);\n\n/**\n * Describes the message tailor.v1.ApplicationSchemaUpdateAttempt.\n * Use `create(ApplicationSchemaUpdateAttemptSchema)` to create a new message.\n */\nexport const ApplicationSchemaUpdateAttemptSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application_resource, 1);\n\n/**\n * Describes the message tailor.v1.Subgraph.\n * Use `create(SubgraphSchema)` to create a new message.\n */\nexport const SubgraphSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application_resource, 2);\n\n/**\n * Describes the enum tailor.v1.Subgraph.ServiceType.\n */\nexport const Subgraph_ServiceTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_application_resource, 2, 0);\n\n/**\n * @generated from enum tailor.v1.Subgraph.ServiceType\n */\nexport const Subgraph_ServiceType = /*@__PURE__*/\n tsEnum(Subgraph_ServiceTypeSchema);\n\n/**\n * Describes the enum tailor.v1.ApplicationSchemaUpdateAttemptStatus.\n */\nexport const ApplicationSchemaUpdateAttemptStatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_application_resource, 0);\n\n/**\n * @generated from enum tailor.v1.ApplicationSchemaUpdateAttemptStatus\n */\nexport const ApplicationSchemaUpdateAttemptStatus = /*@__PURE__*/\n tsEnum(ApplicationSchemaUpdateAttemptStatusSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_struct } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/resource.proto.\n */\nexport const file_tailor_v1_resource = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSKqAgoHU2VydmljZRInCgluYW1lc3BhY2UYASABKAsyFC50YWlsb3IudjEuTmFtZXNwYWNlEjQKDHNlcnZpY2VfdHlwZRgCIAEoDjIeLnRhaWxvci52MS5TZXJ2aWNlLlNlcnZpY2VUeXBlIr8BCgtTZXJ2aWNlVHlwZRIcChhTRVJWSUNFX1RZUEVfVU5TUEVDSUZJRUQQABIZChVTRVJWSUNFX1RZUEVfVEFJTE9SREIQARIVChFTRVJWSUNFX1RZUEVfQVVUSBACEhkKFVNFUlZJQ0VfVFlQRV9QSVBFTElORRADEhoKFlNFUlZJQ0VfVFlQRV9TVEFURUZMT1cQBBITCg9TRVJWSUNFX1RZUEVfQUkQBRIUChBTRVJWSUNFX1RZUEVfSURQEAYiGQoJTmFtZXNwYWNlEgwKBG5hbWUYASABKAkiFgoGU2NyaXB0EgwKBGV4cHIYASABKAkicAoGRmlsdGVyEicKCWNvbmRpdGlvbhgBIAEoCzIULnRhaWxvci52MS5Db25kaXRpb24SHgoDYW5kGAIgAygLMhEudGFpbG9yLnYxLkZpbHRlchIdCgJvchgDIAMoCzIRLnRhaWxvci52MS5GaWx0ZXIirAIKCUNvbmRpdGlvbhINCgVmaWVsZBgBIAEoCRI7CghvcGVyYXRvchgCIAEoDjIdLnRhaWxvci52MS5Db25kaXRpb24uT3BlcmF0b3JCCrpIB4IBBBABIAASJQoFdmFsdWUYAyABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWUiqwEKCE9wZXJhdG9yEhgKFE9QRVJBVE9SX1VOU1BFQ0lGSUVEEAASDwoLT1BFUkFUT1JfRVEQARIVChFPUEVSQVRPUl9DT05UQUlOUxACEg8KC09QRVJBVE9SX0dUEAMSDwoLT1BFUkFUT1JfR0UQBBIPCgtPUEVSQVRPUl9MVBAFEg8KC09QRVJBVE9SX0xFEAYSGQoVT1BFUkFUT1JfTk9UX0NPTlRBSU5TEAcqYAoNUGFnZURpcmVjdGlvbhIeChpQQUdFX0RJUkVDVElPTl9VTlNQRUNJRklFRBAAEhYKElBBR0VfRElSRUNUSU9OX0FTQxABEhcKE1BBR0VfRElSRUNUSU9OX0RFU0MQAmIGcHJvdG8z\", [file_buf_validate_validate, file_google_protobuf_struct]);\n\n/**\n * Describes the message tailor.v1.Service.\n * Use `create(ServiceSchema)` to create a new message.\n */\nexport const ServiceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_resource, 0);\n\n/**\n * Describes the enum tailor.v1.Service.ServiceType.\n */\nexport const Service_ServiceTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_resource, 0, 0);\n\n/**\n * @generated from enum tailor.v1.Service.ServiceType\n */\nexport const Service_ServiceType = /*@__PURE__*/\n tsEnum(Service_ServiceTypeSchema);\n\n/**\n * Describes the message tailor.v1.Namespace.\n * Use `create(NamespaceSchema)` to create a new message.\n */\nexport const NamespaceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_resource, 1);\n\n/**\n * Describes the message tailor.v1.Script.\n * Use `create(ScriptSchema)` to create a new message.\n */\nexport const ScriptSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_resource, 2);\n\n/**\n * Describes the message tailor.v1.Filter.\n * Use `create(FilterSchema)` to create a new message.\n */\nexport const FilterSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_resource, 3);\n\n/**\n * Describes the message tailor.v1.Condition.\n * Use `create(ConditionSchema)` to create a new message.\n */\nexport const ConditionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_resource, 4);\n\n/**\n * Describes the enum tailor.v1.Condition.Operator.\n */\nexport const Condition_OperatorSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_resource, 4, 0);\n\n/**\n * @generated from enum tailor.v1.Condition.Operator\n */\nexport const Condition_Operator = /*@__PURE__*/\n tsEnum(Condition_OperatorSchema);\n\n/**\n * Describes the enum tailor.v1.PageDirection.\n */\nexport const PageDirectionSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_resource, 0);\n\n/**\n * @generated from enum tailor.v1.PageDirection\n */\nexport const PageDirection = /*@__PURE__*/\n tsEnum(PageDirectionSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/application.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_field_mask, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_fieldmask_v1_option } from \"../fieldmask/v1/option_pb\";\nimport { file_tailor_v1_application_resource } from \"./application_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/application.proto.\n */\nexport const file_tailor_v1_application = /*@__PURE__*/\n fileDesc(\"Cht0YWlsb3IvdjEvYXBwbGljYXRpb24ucHJvdG8SCXRhaWxvci52MSKTAwoYQ3JlYXRlQXBwbGljYXRpb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQgoQYXBwbGljYXRpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDI4fVthLXowLTldJBJDCg5hdXRoX25hbWVzcGFjZRgDIAEoCUIrukgociYyJF4oW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSk/JBJJChRhdXRoX2lkcF9jb25maWdfbmFtZRgEIAEoCUIrukgociYyJF4oW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSk/JBIMCgRjb3JzGAUgAygJEiYKCXN1YmdyYXBocxgGIAMoCzITLnRhaWxvci52MS5TdWJncmFwaBIcChRhbGxvd2VkX2lwX2FkZHJlc3NlcxgHIAMoCRIdChVkaXNhYmxlX2ludHJvc3BlY3Rpb24YCCABKAgSEAoIZGlzYWJsZWQYCSABKAgiSAoZQ3JlYXRlQXBwbGljYXRpb25SZXNwb25zZRIrCgthcHBsaWNhdGlvbhgBIAEoCzIWLnRhaWxvci52MS5BcHBsaWNhdGlvbiLDBAoYVXBkYXRlQXBwbGljYXRpb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQgoQYXBwbGljYXRpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDI4fVthLXowLTldJBJDCg5hdXRoX25hbWVzcGFjZRgDIAEoCUIrukgociYyJF4oW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSk/JBJJChRhdXRoX2lkcF9jb25maWdfbmFtZRgEIAEoCUIrukgociYyJF4oW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSk/JBIMCgRjb3JzGAUgAygJEiYKCXN1YmdyYXBocxgGIAMoCzITLnRhaWxvci52MS5TdWJncmFwaBIcChRhbGxvd2VkX2lwX2FkZHJlc3NlcxgHIAMoCRIdChVkaXNhYmxlX2ludHJvc3BlY3Rpb24YCCABKAgSEAoIZGlzYWJsZWQYCSABKAgSrQEKC3VwZGF0ZV9tYXNrGGQgASgLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza0J8ivkrFWRpc2FibGVfaW50cm9zcGVjdGlvbor5KwhkaXNhYmxlZIr5Kw5hdXRoX25hbWVzcGFjZYr5KxRhdXRoX2lkcF9jb25maWdfbmFtZYr5KwRjb3JzivkrCXN1YmdyYXBoc4r5KxRhbGxvd2VkX2lwX2FkZHJlc3NlcyJIChlVcGRhdGVBcHBsaWNhdGlvblJlc3BvbnNlEisKC2FwcGxpY2F0aW9uGAEgASgLMhYudGFpbG9yLnYxLkFwcGxpY2F0aW9uIn4KGERlbGV0ZUFwcGxpY2F0aW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkIKEGFwcGxpY2F0aW9uX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSwyOH1bYS16MC05XSQiGwoZRGVsZXRlQXBwbGljYXRpb25SZXNwb25zZSKSAQoXTGlzdEFwcGxpY2F0aW9uc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uInYKGExpc3RBcHBsaWNhdGlvbnNSZXNwb25zZRIsCgxhcHBsaWNhdGlvbnMYASADKAsyFi50YWlsb3IudjEuQXBwbGljYXRpb24SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDInsKFUdldEFwcGxpY2F0aW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkIKEGFwcGxpY2F0aW9uX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSwyOH1bYS16MC05XSQiRQoWR2V0QXBwbGljYXRpb25SZXNwb25zZRIrCgthcHBsaWNhdGlvbhgBIAEoCzIWLnRhaWxvci52MS5BcHBsaWNhdGlvbiKHAQohR2V0QXBwbGljYXRpb25TY2hlbWFIZWFsdGhSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQgoQYXBwbGljYXRpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDI4fVthLXowLTldJCLNAwoiR2V0QXBwbGljYXRpb25TY2hlbWFIZWFsdGhSZXNwb25zZRJbCgZzdGF0dXMYASABKA4ySy50YWlsb3IudjEuR2V0QXBwbGljYXRpb25TY2hlbWFIZWFsdGhSZXNwb25zZS5BcHBsaWNhdGlvblNjaGVtYUhlYWx0aFN0YXR1cxJGCiJjdXJyZW50X3NlcnZpbmdfc2NoZW1hX3VwZGF0ZV90aW1lGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBJNChpsYXN0X3NjaGVtYV91cGRhdGVfYXR0ZW1wdBgDIAEoCzIpLnRhaWxvci52MS5BcHBsaWNhdGlvblNjaGVtYVVwZGF0ZUF0dGVtcHQisgEKHUFwcGxpY2F0aW9uU2NoZW1hSGVhbHRoU3RhdHVzEjAKLEFQUExJQ0FUSU9OX1NDSEVNQV9IRUFMVEhfU1RBVFVTX1VOU1BFQ0lGSUVEEAASJwojQVBQTElDQVRJT05fU0NIRU1BX0hFQUxUSF9TVEFUVVNfT0sQARI2CjJBUFBMSUNBVElPTl9TQ0hFTUFfSEVBTFRIX1NUQVRVU19DT01QT1NJVElPTl9FUlJPUhACYgZwcm90bzM\", [file_buf_validate_validate, file_google_protobuf_field_mask, file_google_protobuf_timestamp, file_tailor_fieldmask_v1_option, file_tailor_v1_application_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.CreateApplicationRequest.\n * Use `create(CreateApplicationRequestSchema)` to create a new message.\n */\nexport const CreateApplicationRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 0);\n\n/**\n * Describes the message tailor.v1.CreateApplicationResponse.\n * Use `create(CreateApplicationResponseSchema)` to create a new message.\n */\nexport const CreateApplicationResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 1);\n\n/**\n * Describes the message tailor.v1.UpdateApplicationRequest.\n * Use `create(UpdateApplicationRequestSchema)` to create a new message.\n */\nexport const UpdateApplicationRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 2);\n\n/**\n * Describes the message tailor.v1.UpdateApplicationResponse.\n * Use `create(UpdateApplicationResponseSchema)` to create a new message.\n */\nexport const UpdateApplicationResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 3);\n\n/**\n * Describes the message tailor.v1.DeleteApplicationRequest.\n * Use `create(DeleteApplicationRequestSchema)` to create a new message.\n */\nexport const DeleteApplicationRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 4);\n\n/**\n * Describes the message tailor.v1.DeleteApplicationResponse.\n * Use `create(DeleteApplicationResponseSchema)` to create a new message.\n */\nexport const DeleteApplicationResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 5);\n\n/**\n * Describes the message tailor.v1.ListApplicationsRequest.\n * Use `create(ListApplicationsRequestSchema)` to create a new message.\n */\nexport const ListApplicationsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 6);\n\n/**\n * Describes the message tailor.v1.ListApplicationsResponse.\n * Use `create(ListApplicationsResponseSchema)` to create a new message.\n */\nexport const ListApplicationsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 7);\n\n/**\n * Describes the message tailor.v1.GetApplicationRequest.\n * Use `create(GetApplicationRequestSchema)` to create a new message.\n */\nexport const GetApplicationRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 8);\n\n/**\n * Describes the message tailor.v1.GetApplicationResponse.\n * Use `create(GetApplicationResponseSchema)` to create a new message.\n */\nexport const GetApplicationResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 9);\n\n/**\n * Describes the message tailor.v1.GetApplicationSchemaHealthRequest.\n * Use `create(GetApplicationSchemaHealthRequestSchema)` to create a new message.\n */\nexport const GetApplicationSchemaHealthRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 10);\n\n/**\n * Describes the message tailor.v1.GetApplicationSchemaHealthResponse.\n * Use `create(GetApplicationSchemaHealthResponseSchema)` to create a new message.\n */\nexport const GetApplicationSchemaHealthResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_application, 11);\n\n/**\n * Describes the enum tailor.v1.GetApplicationSchemaHealthResponse.ApplicationSchemaHealthStatus.\n */\nexport const GetApplicationSchemaHealthResponse_ApplicationSchemaHealthStatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_application, 11, 0);\n\n/**\n * @generated from enum tailor.v1.GetApplicationSchemaHealthResponse.ApplicationSchemaHealthStatus\n */\nexport const GetApplicationSchemaHealthResponse_ApplicationSchemaHealthStatus = /*@__PURE__*/\n tsEnum(GetApplicationSchemaHealthResponse_ApplicationSchemaHealthStatusSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/secret_manager_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/secret_manager_resource.proto.\n */\nexport const file_tailor_v1_secret_manager_resource = /*@__PURE__*/\n fileDesc(\"Cid0YWlsb3IvdjEvc2VjcmV0X21hbmFnZXJfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSKOAQoSU2VjcmV0TWFuYWdlclZhdWx0EgwKBG5hbWUYASABKAkSNAoLY3JlYXRlX3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSNAoLdXBkYXRlX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMijwEKE1NlY3JldE1hbmFnZXJTZWNyZXQSDAoEbmFtZRgBIAEoCRI0CgtjcmVhdGVfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAxI0Cgt1cGRhdGVfdGltZRgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAyI1CgtTZWNyZXRWYWx1ZRISCgp2YXVsdF9uYW1lGAEgASgJEhIKCnNlY3JldF9rZXkYAiABKAliBnByb3RvMw\", [file_google_api_field_behavior, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.SecretManagerVault.\n * Use `create(SecretManagerVaultSchema)` to create a new message.\n */\nexport const SecretManagerVaultSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager_resource, 0);\n\n/**\n * Describes the message tailor.v1.SecretManagerSecret.\n * Use `create(SecretManagerSecretSchema)` to create a new message.\n */\nexport const SecretManagerSecretSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager_resource, 1);\n\n/**\n * Describes the message tailor.v1.SecretValue.\n * Use `create(SecretValueSchema)` to create a new message.\n */\nexport const SecretValueSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager_resource, 2);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/auth_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_struct, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_secret_manager_resource } from \"./secret_manager_resource_pb\";\n\n/**\n * Describes the file tailor/v1/auth_resource.proto.\n */\nexport const file_tailor_v1_auth_resource = /*@__PURE__*/\n fileDesc(\"Ch10YWlsb3IvdjEvYXV0aF9yZXNvdXJjZS5wcm90bxIJdGFpbG9yLnYxIjYKC0F1dGhTZXJ2aWNlEicKCW5hbWVzcGFjZRgBIAEoCzIULnRhaWxvci52MS5OYW1lc3BhY2Ui6wYKDUF1dGhJRFBDb25maWcSNgoEbmFtZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI0CglhdXRoX3R5cGUYAiABKA4yIS50YWlsb3IudjEuQXV0aElEUENvbmZpZy5BdXRoVHlwZRIvCgZjb25maWcYAyABKAsyHy50YWlsb3IudjEuQXV0aElEUENvbmZpZy5Db25maWcauAEKBkNvbmZpZxIzCgRvaWRjGAEgASgLMiMudGFpbG9yLnYxLkF1dGhJRFBDb25maWcuT0lEQ0NvbmZpZ0gAEjMKBHNhbWwYAiABKAsyIy50YWlsb3IudjEuQXV0aElEUENvbmZpZy5TQU1MQ29uZmlnSAASOgoIaWRfdG9rZW4YAyABKAsyJi50YWlsb3IudjEuQXV0aElEUENvbmZpZy5JRFRva2VuQ29uZmlnSABCCAoGY29uZmlnGpgBCgpPSURDQ29uZmlnEhUKDWNsaWVudF9pZF9rZXkYASABKAkSMQoRY2xpZW50X3NlY3JldF9rZXkYAiABKAsyFi50YWlsb3IudjEuU2VjcmV0VmFsdWUSFAoMcHJvdmlkZXJfdXJsGAMgASgJEhIKCmlzc3Vlcl91cmwYBCABKAkSFgoOdXNlcm5hbWVfY2xhaW0YBSABKAkalwEKClNBTUxDb25maWcSFAoMbWV0YWRhdGFfdXJsGAEgASgJEi4KDnNwX2NlcnRfYmFzZTY0GAIgASgLMhYudGFpbG9yLnYxLlNlY3JldFZhbHVlEi0KDXNwX2tleV9iYXNlNjQYAyABKAsyFi50YWlsb3IudjEuU2VjcmV0VmFsdWUSFAoMcmF3X21ldGFkYXRhGAQgASgJGmQKDUlEVG9rZW5Db25maWcSFAoMcHJvdmlkZXJfdXJsGAEgASgJEhEKCWNsaWVudF9pZBgCIAEoCRISCgppc3N1ZXJfdXJsGAMgASgJEhYKDnVzZXJuYW1lX2NsYWltGAQgASgJImUKCEF1dGhUeXBlEhkKFUFVVEhfVFlQRV9VTlNQRUNJRklFRBAAEhIKDkFVVEhfVFlQRV9PSURDEAESEgoOQVVUSF9UWVBFX1NBTUwQAhIWChJBVVRIX1RZUEVfSURfVE9LRU4QAyKtBgoZVXNlclByb2ZpbGVQcm92aWRlckNvbmZpZxIUCghwcm92aWRlchgBIAEoCUICGAESUwoNcHJvdmlkZXJfdHlwZRgCIAEoDjI8LnRhaWxvci52MS5Vc2VyUHJvZmlsZVByb3ZpZGVyQ29uZmlnLlVzZXJQcm9maWxlUHJvdmlkZXJUeXBlEjsKBmNvbmZpZxgDIAEoCzIrLnRhaWxvci52MS5Vc2VyUHJvZmlsZVByb3ZpZGVyQ29uZmlnLkNvbmZpZxpjCgZDb25maWcSTwoIdGFpbG9yZGIYASABKAsyOy50YWlsb3IudjEuVXNlclByb2ZpbGVQcm92aWRlckNvbmZpZy5UYWlsb3JEQlByb3ZpZGVyQ29uZmlnSABCCAoGY29uZmlnGpIDChZUYWlsb3JEQlByb3ZpZGVyQ29uZmlnEjsKCW5hbWVzcGFjZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBItCgR0eXBlGAIgASgJQh+6SBxyGjIYXltBLVpdW2EtekEtWjAtOV17MCw2Mn0kEhYKDnVzZXJuYW1lX2ZpZWxkGAMgASgJEhkKEWF0dHJpYnV0ZXNfZmllbGRzGAQgAygJEhcKD3RlbmFudF9pZF9maWVsZBgFIAEoCRKKAQoNYXR0cmlidXRlX21hcBgGIAMoCzJNLnRhaWxvci52MS5Vc2VyUHJvZmlsZVByb3ZpZGVyQ29uZmlnLlRhaWxvckRCUHJvdmlkZXJDb25maWcuQXR0cmlidXRlTWFwRW50cnlCJLpIIZoBHiIcchoyGF5bYS16XVswLTlhLXpBLVpdezAsNjJ9JBozChFBdHRyaWJ1dGVNYXBFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIm4KF1VzZXJQcm9maWxlUHJvdmlkZXJUeXBlEioKJlVTRVJfUFJPRklMRV9QUk9WSURFUl9UWVBFX1VOU1BFQ0lGSUVEEAASJwojVVNFUl9QUk9GSUxFX1BST1ZJREVSX1RZUEVfVEFJTE9SREIQASK+AwoUVGVuYW50UHJvdmlkZXJDb25maWcSEAoIcHJvdmlkZXIYASABKAkSSQoNcHJvdmlkZXJfdHlwZRgCIAEoDjIyLnRhaWxvci52MS5UZW5hbnRQcm92aWRlckNvbmZpZy5UZW5hbnRQcm92aWRlclR5cGUSNgoGY29uZmlnGAMgASgLMiYudGFpbG9yLnYxLlRlbmFudFByb3ZpZGVyQ29uZmlnLkNvbmZpZxpeCgZDb25maWcSSgoIdGFpbG9yZGIYASABKAsyNi50YWlsb3IudjEuVGVuYW50UHJvdmlkZXJDb25maWcuVGFpbG9yREJQcm92aWRlckNvbmZpZ0gAQggKBmNvbmZpZxpSChZUYWlsb3JEQlByb3ZpZGVyQ29uZmlnEhEKCW5hbWVzcGFjZRgBIAEoCRIMCgR0eXBlGAIgASgJEhcKD3NpZ25hdHVyZV9maWVsZBgDIAEoCSJdChJUZW5hbnRQcm92aWRlclR5cGUSJAogVEVOQU5UX1BST1ZJREVSX1RZUEVfVU5TUEVDSUZJRUQQABIhCh1URU5BTlRfUFJPVklERVJfVFlQRV9UQUlMT1JEQhABIjsKC0F1dGhJbnZva2VyEhEKCW5hbWVzcGFjZRgBIAEoCRIZChFtYWNoaW5lX3VzZXJfbmFtZRgCIAEoCSJIChNQZXJzb25hbEFjY2Vzc1Rva2VuEgwKBG5hbWUYASABKAkSIwoGc2NvcGVzGAIgAygOMhMudGFpbG9yLnYxLlBBVFNjb3BlIsYDCgtNYWNoaW5lVXNlchIKCgJpZBgBIAEoCRI2CgRuYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhYKCWNsaWVudF9pZBgDIAEoCUID4EEDEhoKDWNsaWVudF9zZWNyZXQYBCABKAlCA+BBAxIhCgphdHRyaWJ1dGVzGAUgAygJQg26SAqSAQciBXIDsAEBEjMKCmNyZWF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSMwoKdXBkYXRlZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAxJlCg1hdHRyaWJ1dGVfbWFwGAggAygLMigudGFpbG9yLnYxLk1hY2hpbmVVc2VyLkF0dHJpYnV0ZU1hcEVudHJ5QiS6SCGaAR4iHHIaMhheW2Etel1bMC05YS16QS1aXXswLDYyfSQaSwoRQXR0cmlidXRlTWFwRW50cnkSCwoDa2V5GAEgASgJEiUKBXZhbHVlGAIgASgLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlOgI4ASLeAgoOQXV0aFNDSU1Db25maWcSQwoRbWFjaGluZV91c2VyX25hbWUYASABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSRwoSYXV0aG9yaXphdGlvbl90eXBlGAIgASgOMisudGFpbG9yLnYxLkF1dGhTQ0lNQ29uZmlnLkF1dGhvcml6YXRpb25UeXBlEi8KDWJlYXJlcl9zZWNyZXQYCiABKAsyFi50YWlsb3IudjEuU2VjcmV0VmFsdWVIACJ1ChFBdXRob3JpemF0aW9uVHlwZRIiCh5BVVRIT1JJWkFUSU9OX1RZUEVfVU5TUEVDSUZJRUQQABIdChlBVVRIT1JJWkFUSU9OX1RZUEVfQkVBUkVSEAESHQoZQVVUSE9SSVpBVElPTl9UWVBFX09BVVRIMhACQhYKFGF1dGhvcml6YXRpb25fY29uZmlnIroCChBBdXRoU0NJTVJlc291cmNlEjYKBG5hbWUYASABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSRQoTdGFpbG9yX2RiX25hbWVzcGFjZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI3Cg50YWlsb3JfZGJfdHlwZRgDIAEoCUIfukgcchoyGF5bQS1aXVthLXpBLVowLTldezAsNjJ9JBI+ChFhdHRyaWJ1dGVfbWFwcGluZxgEIAMoCzIjLnRhaWxvci52MS5BdXRoU0NJTUF0dHJpYnV0ZU1hcHBpbmcSLgoLY29yZV9zY2hlbWEYBSABKAsyGS50YWlsb3IudjEuQXV0aFNDSU1TY2hlbWEiRgoYQXV0aFNDSU1BdHRyaWJ1dGVNYXBwaW5nEhcKD3RhaWxvcl9kYl9maWVsZBgBIAEoCRIRCglzY2ltX3BhdGgYAiABKAkiUAoOQXV0aFNDSU1TY2hlbWESDAoEbmFtZRgBIAEoCRIwCgphdHRyaWJ1dGVzGAIgAygLMhwudGFpbG9yLnYxLkF1dGhTQ0lNQXR0cmlidXRlIrcFChFBdXRoU0NJTUF0dHJpYnV0ZRIvCgR0eXBlGAEgASgOMiEudGFpbG9yLnYxLkF1dGhTQ0lNQXR0cmlidXRlLlR5cGUSDAoEbmFtZRgCIAEoCRITCgtkZXNjcmlwdGlvbhgDIAEoCRI7CgptdXRhYmlsaXR5GAQgASgOMicudGFpbG9yLnYxLkF1dGhTQ0lNQXR0cmlidXRlLk11dGFiaWxpdHkSEAoIcmVxdWlyZWQYBSABKAgSFAoMbXVsdGlfdmFsdWVkGAYgASgIEjsKCnVuaXF1ZW5lc3MYByABKA4yJy50YWlsb3IudjEuQXV0aFNDSU1BdHRyaWJ1dGUuVW5pcXVlbmVzcxIYChBjYW5vbmljYWxfdmFsdWVzGAggAygJEjQKDnN1Yl9hdHRyaWJ1dGVzGAkgAygLMhwudGFpbG9yLnYxLkF1dGhTQ0lNQXR0cmlidXRlInUKBFR5cGUSFAoQVFlQRV9VTlNQRUNJRklFRBAAEhAKDFRZUEVfQ09NUExFWBABEg8KC1RZUEVfU1RSSU5HEAISDwoLVFlQRV9OVU1CRVIQAxIQCgxUWVBFX0JPT0xFQU4QBBIRCg1UWVBFX0RBVEVUSU1FEAUieAoKTXV0YWJpbGl0eRIaChZNVVRBQklMSVRZX1VOU1BFQ0lGSUVEEAASGAoUTVVUQUJJTElUWV9SRUFEX09OTFkQARIZChVNVVRBQklMSVRZX1JFQURfV1JJVEUQAhIZChVNVVRBQklMSVRZX1dSSVRFX09OTFkQAyJrCgpVbmlxdWVuZXNzEhoKFlVOSVFVRU5FU1NfVU5TUEVDSUZJRUQQABITCg9VTklRVUVORVNTX05PTkUQARIVChFVTklRVUVORVNTX1NFUlZFUhACEhUKEVVOSVFVRU5FU1NfR0xPQkFMEAMiqgMKDkF1dGhDb25uZWN0aW9uEjYKBG5hbWUYASABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSLAoEdHlwZRgCIAEoDjIeLnRhaWxvci52MS5BdXRoQ29ubmVjdGlvbi5UeXBlEkYKBm9hdXRoMhgDIAEoCzI0LnRhaWxvci52MS5BdXRoQ29ubmVjdGlvbi5BdXRoQ29ubmVjdGlvbk9BdXRoMkNvbmZpZ0gAEjMKCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMadQoaQXV0aENvbm5lY3Rpb25PQXV0aDJDb25maWcSFAoMcHJvdmlkZXJfdXJsGAEgASgJEhIKCmlzc3Vlcl91cmwYAiABKAkSEQoJY2xpZW50X2lkGAMgASgJEhoKDWNsaWVudF9zZWNyZXQYBCABKAlCA+BBBCItCgRUeXBlEhQKEFRZUEVfVU5TUEVDSUZJRUQQABIPCgtUWVBFX09BVVRIMhABQg8KBmNvbmZpZxIFukgCCAEioQQKEEF1dGhPQXV0aDJDbGllbnQSDAoEbmFtZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCRI6CgtncmFudF90eXBlcxgDIAMoDjIlLnRhaWxvci52MS5BdXRoT0F1dGgyQ2xpZW50LkdyYW50VHlwZRIVCg1yZWRpcmVjdF91cmlzGAQgAygJEhYKCWNsaWVudF9pZBgFIAEoCUID4EEDEhoKDWNsaWVudF9zZWNyZXQYBiABKAlCA+BBAxIzCgpjcmVhdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDEkoKC2NsaWVudF90eXBlGAggASgOMiYudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQuQ2xpZW50VHlwZUINukgK2AEBggEEEAEgACJoCglHcmFudFR5cGUSGgoWR1JBTlRfVFlQRV9VTlNQRUNJRklFRBAAEiEKHUdSQU5UX1RZUEVfQVVUSE9SSVpBVElPTl9DT0RFEAESHAoYR1JBTlRfVFlQRV9SRUZSRVNIX1RPS0VOEAIieAoKQ2xpZW50VHlwZRIbChdDTElFTlRfVFlQRV9VTlNQRUNJRklFRBAAEhwKGENMSUVOVF9UWVBFX0NPTkZJREVOVElBTBABEhYKEkNMSUVOVF9UWVBFX1BVQkxJQxACEhcKE0NMSUVOVF9UWVBFX0JST1dTRVIQAypOCghQQVRTY29wZRIZChVQQVRfU0NPUEVfVU5TUEVDSUZJRUQQABISCg5QQVRfU0NPUEVfUkVBRBABEhMKD1BBVF9TQ09QRV9XUklURRACYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_struct, file_google_protobuf_timestamp, file_tailor_v1_resource, file_tailor_v1_secret_manager_resource]);\n\n/**\n * Describes the message tailor.v1.AuthService.\n * Use `create(AuthServiceSchema)` to create a new message.\n */\nexport const AuthServiceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 0);\n\n/**\n * Describes the message tailor.v1.AuthIDPConfig.\n * Use `create(AuthIDPConfigSchema)` to create a new message.\n */\nexport const AuthIDPConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 1);\n\n/**\n * Describes the message tailor.v1.AuthIDPConfig.Config.\n * Use `create(AuthIDPConfig_ConfigSchema)` to create a new message.\n */\nexport const AuthIDPConfig_ConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 1, 0);\n\n/**\n * Describes the message tailor.v1.AuthIDPConfig.OIDCConfig.\n * Use `create(AuthIDPConfig_OIDCConfigSchema)` to create a new message.\n */\nexport const AuthIDPConfig_OIDCConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 1, 1);\n\n/**\n * Describes the message tailor.v1.AuthIDPConfig.SAMLConfig.\n * Use `create(AuthIDPConfig_SAMLConfigSchema)` to create a new message.\n */\nexport const AuthIDPConfig_SAMLConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 1, 2);\n\n/**\n * Describes the message tailor.v1.AuthIDPConfig.IDTokenConfig.\n * Use `create(AuthIDPConfig_IDTokenConfigSchema)` to create a new message.\n */\nexport const AuthIDPConfig_IDTokenConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 1, 3);\n\n/**\n * Describes the enum tailor.v1.AuthIDPConfig.AuthType.\n */\nexport const AuthIDPConfig_AuthTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 1, 0);\n\n/**\n * @generated from enum tailor.v1.AuthIDPConfig.AuthType\n */\nexport const AuthIDPConfig_AuthType = /*@__PURE__*/\n tsEnum(AuthIDPConfig_AuthTypeSchema);\n\n/**\n * Describes the message tailor.v1.UserProfileProviderConfig.\n * Use `create(UserProfileProviderConfigSchema)` to create a new message.\n */\nexport const UserProfileProviderConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 2);\n\n/**\n * Describes the message tailor.v1.UserProfileProviderConfig.Config.\n * Use `create(UserProfileProviderConfig_ConfigSchema)` to create a new message.\n */\nexport const UserProfileProviderConfig_ConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 2, 0);\n\n/**\n * Describes the message tailor.v1.UserProfileProviderConfig.TailorDBProviderConfig.\n * Use `create(UserProfileProviderConfig_TailorDBProviderConfigSchema)` to create a new message.\n */\nexport const UserProfileProviderConfig_TailorDBProviderConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 2, 1);\n\n/**\n * Describes the enum tailor.v1.UserProfileProviderConfig.UserProfileProviderType.\n */\nexport const UserProfileProviderConfig_UserProfileProviderTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 2, 0);\n\n/**\n * @generated from enum tailor.v1.UserProfileProviderConfig.UserProfileProviderType\n */\nexport const UserProfileProviderConfig_UserProfileProviderType = /*@__PURE__*/\n tsEnum(UserProfileProviderConfig_UserProfileProviderTypeSchema);\n\n/**\n * Describes the message tailor.v1.TenantProviderConfig.\n * Use `create(TenantProviderConfigSchema)` to create a new message.\n */\nexport const TenantProviderConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 3);\n\n/**\n * Describes the message tailor.v1.TenantProviderConfig.Config.\n * Use `create(TenantProviderConfig_ConfigSchema)` to create a new message.\n */\nexport const TenantProviderConfig_ConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 3, 0);\n\n/**\n * Describes the message tailor.v1.TenantProviderConfig.TailorDBProviderConfig.\n * Use `create(TenantProviderConfig_TailorDBProviderConfigSchema)` to create a new message.\n */\nexport const TenantProviderConfig_TailorDBProviderConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 3, 1);\n\n/**\n * Describes the enum tailor.v1.TenantProviderConfig.TenantProviderType.\n */\nexport const TenantProviderConfig_TenantProviderTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 3, 0);\n\n/**\n * @generated from enum tailor.v1.TenantProviderConfig.TenantProviderType\n */\nexport const TenantProviderConfig_TenantProviderType = /*@__PURE__*/\n tsEnum(TenantProviderConfig_TenantProviderTypeSchema);\n\n/**\n * Describes the message tailor.v1.AuthInvoker.\n * Use `create(AuthInvokerSchema)` to create a new message.\n */\nexport const AuthInvokerSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 4);\n\n/**\n * Describes the message tailor.v1.PersonalAccessToken.\n * Use `create(PersonalAccessTokenSchema)` to create a new message.\n */\nexport const PersonalAccessTokenSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 5);\n\n/**\n * Describes the message tailor.v1.MachineUser.\n * Use `create(MachineUserSchema)` to create a new message.\n */\nexport const MachineUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 6);\n\n/**\n * Describes the message tailor.v1.AuthSCIMConfig.\n * Use `create(AuthSCIMConfigSchema)` to create a new message.\n */\nexport const AuthSCIMConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 7);\n\n/**\n * Describes the enum tailor.v1.AuthSCIMConfig.AuthorizationType.\n */\nexport const AuthSCIMConfig_AuthorizationTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 7, 0);\n\n/**\n * @generated from enum tailor.v1.AuthSCIMConfig.AuthorizationType\n */\nexport const AuthSCIMConfig_AuthorizationType = /*@__PURE__*/\n tsEnum(AuthSCIMConfig_AuthorizationTypeSchema);\n\n/**\n * Describes the message tailor.v1.AuthSCIMResource.\n * Use `create(AuthSCIMResourceSchema)` to create a new message.\n */\nexport const AuthSCIMResourceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 8);\n\n/**\n * Describes the message tailor.v1.AuthSCIMAttributeMapping.\n * Use `create(AuthSCIMAttributeMappingSchema)` to create a new message.\n */\nexport const AuthSCIMAttributeMappingSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 9);\n\n/**\n * Describes the message tailor.v1.AuthSCIMSchema.\n * Use `create(AuthSCIMSchemaSchema)` to create a new message.\n */\nexport const AuthSCIMSchemaSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 10);\n\n/**\n * Describes the message tailor.v1.AuthSCIMAttribute.\n * Use `create(AuthSCIMAttributeSchema)` to create a new message.\n */\nexport const AuthSCIMAttributeSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 11);\n\n/**\n * Describes the enum tailor.v1.AuthSCIMAttribute.Type.\n */\nexport const AuthSCIMAttribute_TypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 11, 0);\n\n/**\n * @generated from enum tailor.v1.AuthSCIMAttribute.Type\n */\nexport const AuthSCIMAttribute_Type = /*@__PURE__*/\n tsEnum(AuthSCIMAttribute_TypeSchema);\n\n/**\n * Describes the enum tailor.v1.AuthSCIMAttribute.Mutability.\n */\nexport const AuthSCIMAttribute_MutabilitySchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 11, 1);\n\n/**\n * @generated from enum tailor.v1.AuthSCIMAttribute.Mutability\n */\nexport const AuthSCIMAttribute_Mutability = /*@__PURE__*/\n tsEnum(AuthSCIMAttribute_MutabilitySchema);\n\n/**\n * Describes the enum tailor.v1.AuthSCIMAttribute.Uniqueness.\n */\nexport const AuthSCIMAttribute_UniquenessSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 11, 2);\n\n/**\n * @generated from enum tailor.v1.AuthSCIMAttribute.Uniqueness\n */\nexport const AuthSCIMAttribute_Uniqueness = /*@__PURE__*/\n tsEnum(AuthSCIMAttribute_UniquenessSchema);\n\n/**\n * Describes the message tailor.v1.AuthConnection.\n * Use `create(AuthConnectionSchema)` to create a new message.\n */\nexport const AuthConnectionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 12);\n\n/**\n * Describes the message tailor.v1.AuthConnection.AuthConnectionOAuth2Config.\n * Use `create(AuthConnection_AuthConnectionOAuth2ConfigSchema)` to create a new message.\n */\nexport const AuthConnection_AuthConnectionOAuth2ConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 12, 0);\n\n/**\n * Describes the enum tailor.v1.AuthConnection.Type.\n */\nexport const AuthConnection_TypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 12, 0);\n\n/**\n * @generated from enum tailor.v1.AuthConnection.Type\n */\nexport const AuthConnection_Type = /*@__PURE__*/\n tsEnum(AuthConnection_TypeSchema);\n\n/**\n * Describes the message tailor.v1.AuthOAuth2Client.\n * Use `create(AuthOAuth2ClientSchema)` to create a new message.\n */\nexport const AuthOAuth2ClientSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth_resource, 13);\n\n/**\n * Describes the enum tailor.v1.AuthOAuth2Client.GrantType.\n */\nexport const AuthOAuth2Client_GrantTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 13, 0);\n\n/**\n * @generated from enum tailor.v1.AuthOAuth2Client.GrantType\n */\nexport const AuthOAuth2Client_GrantType = /*@__PURE__*/\n tsEnum(AuthOAuth2Client_GrantTypeSchema);\n\n/**\n * Describes the enum tailor.v1.AuthOAuth2Client.ClientType.\n */\nexport const AuthOAuth2Client_ClientTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 13, 1);\n\n/**\n * @generated from enum tailor.v1.AuthOAuth2Client.ClientType\n */\nexport const AuthOAuth2Client_ClientType = /*@__PURE__*/\n tsEnum(AuthOAuth2Client_ClientTypeSchema);\n\n/**\n * Describes the enum tailor.v1.PATScope.\n */\nexport const PATScopeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_auth_resource, 0);\n\n/**\n * @generated from enum tailor.v1.PATScope\n */\nexport const PATScope = /*@__PURE__*/\n tsEnum(PATScopeSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/auth.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_struct, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_v1_auth_resource } from \"./auth_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/auth.proto.\n */\nexport const file_tailor_v1_auth = /*@__PURE__*/\n fileDesc(\"ChR0YWlsb3IvdjEvYXV0aC5wcm90bxIJdGFpbG9yLnYxInwKGENyZWF0ZUF1dGhTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIkkKGUNyZWF0ZUF1dGhTZXJ2aWNlUmVzcG9uc2USLAoMYXV0aF9zZXJ2aWNlGAEgASgLMhYudGFpbG9yLnYxLkF1dGhTZXJ2aWNlInwKGERlbGV0ZUF1dGhTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIhsKGURlbGV0ZUF1dGhTZXJ2aWNlUmVzcG9uc2UieQoVR2V0QXV0aFNlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiRgoWR2V0QXV0aFNlcnZpY2VSZXNwb25zZRIsCgxhdXRoX3NlcnZpY2UYASABKAsyFi50YWlsb3IudjEuQXV0aFNlcnZpY2UikgEKF0xpc3RBdXRoU2VydmljZXNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ3ChhMaXN0QXV0aFNlcnZpY2VzUmVzcG9uc2USLQoNYXV0aF9zZXJ2aWNlcxgBIAMoCzIWLnRhaWxvci52MS5BdXRoU2VydmljZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMirAEKGkNyZWF0ZUF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSLAoKaWRwX2NvbmZpZxgDIAEoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnIksKG0NyZWF0ZUF1dGhJRFBDb25maWdSZXNwb25zZRIsCgppZHBfY29uZmlnGAEgASgLMhgudGFpbG9yLnYxLkF1dGhJRFBDb25maWcirAEKGlVwZGF0ZUF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSLAoKaWRwX2NvbmZpZxgDIAEoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnIksKG1VwZGF0ZUF1dGhJRFBDb25maWdSZXNwb25zZRIsCgppZHBfY29uZmlnGAEgASgLMhgudGFpbG9yLnYxLkF1dGhJRFBDb25maWcitgEKGkRlbGV0ZUF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIdChtEZWxldGVBdXRoSURQQ29uZmlnUmVzcG9uc2UiswEKF0dldEF1dGhJRFBDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJIChhHZXRBdXRoSURQQ29uZmlnUmVzcG9uc2USLAoKaWRwX2NvbmZpZxgBIAEoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnItYBChlMaXN0QXV0aElEUENvbmZpZ3NSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSEgoKcGFnZV90b2tlbhgDIAEoCRIRCglwYWdlX3NpemUYBCABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBSABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ5ChpMaXN0QXV0aElEUENvbmZpZ3NSZXNwb25zZRItCgtpZHBfY29uZmlncxgBIAMoCzIYLnRhaWxvci52MS5BdXRoSURQQ29uZmlnEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyLOAQoeQ3JlYXRlVXNlclByb2ZpbGVDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSSgocdXNlcl9wcm9maWxlX3Byb3ZpZGVyX2NvbmZpZxgDIAEoCzIkLnRhaWxvci52MS5Vc2VyUHJvZmlsZVByb3ZpZGVyQ29uZmlnIm0KH0NyZWF0ZVVzZXJQcm9maWxlQ29uZmlnUmVzcG9uc2USSgocdXNlcl9wcm9maWxlX3Byb3ZpZGVyX2NvbmZpZxgBIAEoCzIkLnRhaWxvci52MS5Vc2VyUHJvZmlsZVByb3ZpZGVyQ29uZmlnIs4BCh5VcGRhdGVVc2VyUHJvZmlsZUNvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJKChx1c2VyX3Byb2ZpbGVfcHJvdmlkZXJfY29uZmlnGAMgASgLMiQudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWcibQofVXBkYXRlVXNlclByb2ZpbGVDb25maWdSZXNwb25zZRJKChx1c2VyX3Byb2ZpbGVfcHJvdmlkZXJfY29uZmlnGAEgASgLMiQudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWciggEKHkRlbGV0ZVVzZXJQcm9maWxlQ29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIiEKH0RlbGV0ZVVzZXJQcm9maWxlQ29uZmlnUmVzcG9uc2UifwobR2V0VXNlclByb2ZpbGVDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiagocR2V0VXNlclByb2ZpbGVDb25maWdSZXNwb25zZRJKChx1c2VyX3Byb2ZpbGVfcHJvdmlkZXJfY29uZmlnGAEgASgLMiQudGFpbG9yLnYxLlVzZXJQcm9maWxlUHJvdmlkZXJDb25maWcixgEKGUNyZWF0ZVRlbmFudENvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJHChZ0ZW5hbnRfcHJvdmlkZXJfY29uZmlnGAMgASgLMh8udGFpbG9yLnYxLlRlbmFudFByb3ZpZGVyQ29uZmlnQga6SAPIAQEiXQoaQ3JlYXRlVGVuYW50Q29uZmlnUmVzcG9uc2USPwoWdGVuYW50X3Byb3ZpZGVyX2NvbmZpZxgBIAEoCzIfLnRhaWxvci52MS5UZW5hbnRQcm92aWRlckNvbmZpZyLGAQoZVXBkYXRlVGVuYW50Q29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkcKFnRlbmFudF9wcm92aWRlcl9jb25maWcYAyABKAsyHy50YWlsb3IudjEuVGVuYW50UHJvdmlkZXJDb25maWdCBrpIA8gBASJdChpVcGRhdGVUZW5hbnRDb25maWdSZXNwb25zZRI/ChZ0ZW5hbnRfcHJvdmlkZXJfY29uZmlnGAEgASgLMh8udGFpbG9yLnYxLlRlbmFudFByb3ZpZGVyQ29uZmlnIn0KGURlbGV0ZVRlbmFudENvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIcChpEZWxldGVUZW5hbnRDb25maWdSZXNwb25zZSJ6ChZHZXRUZW5hbnRDb25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiWgoXR2V0VGVuYW50Q29uZmlnUmVzcG9uc2USPwoWdGVuYW50X3Byb3ZpZGVyX2NvbmZpZxgBIAEoCzIfLnRhaWxvci52MS5UZW5hbnRQcm92aWRlckNvbmZpZyKSAQogQ3JlYXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlcXVlc3QSNgoEbmFtZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI2CgZzY29wZXMYAiADKA4yEy50YWlsb3IudjEuUEFUU2NvcGVCEbpIDpIBCwgBIgeCAQQQASAAIjkKIUNyZWF0ZVBlcnNvbmFsQWNjZXNzVG9rZW5SZXNwb25zZRIUCgxhY2Nlc3NfdG9rZW4YASABKAkiWgogRGVsZXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlcXVlc3QSNgoEbmFtZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIjCiFEZWxldGVQZXJzb25hbEFjY2Vzc1Rva2VuUmVzcG9uc2UiegofTGlzdFBlcnNvbmFsQWNjZXNzVG9rZW5zUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgDIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIpABCiBMaXN0UGVyc29uYWxBY2Nlc3NUb2tlbnNSZXNwb25zZRI+ChZwZXJzb25hbF9hY2Nlc3NfdG9rZW5zGAEgAygLMh4udGFpbG9yLnYxLlBlcnNvbmFsQWNjZXNzVG9rZW4SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIqMDChxDcmVhdGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQwoOYXV0aF9uYW1lc3BhY2UYAiABKAlCK7pIKHImMiReKFthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0pPyQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIhCgphdHRyaWJ1dGVzGAQgAygJQg26SAqSAQciBXIDsAEBEnYKDWF0dHJpYnV0ZV9tYXAYBSADKAsyOS50YWlsb3IudjEuQ3JlYXRlQXV0aE1hY2hpbmVVc2VyUmVxdWVzdC5BdHRyaWJ1dGVNYXBFbnRyeUIkukghmgEeIhxyGjIYXlthLXpdWzAtOWEtekEtWl17MCw2Mn0kGksKEUF0dHJpYnV0ZU1hcEVudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEiTQodQ3JlYXRlQXV0aE1hY2hpbmVVc2VyUmVzcG9uc2USLAoMbWFjaGluZV91c2VyGAEgASgLMhYudGFpbG9yLnYxLk1hY2hpbmVVc2VyIqADChxVcGRhdGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoOYXV0aF9uYW1lc3BhY2UYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIhCgphdHRyaWJ1dGVzGAQgAygJQg26SAqSAQciBXIDsAEBEnYKDWF0dHJpYnV0ZV9tYXAYBSADKAsyOS50YWlsb3IudjEuVXBkYXRlQXV0aE1hY2hpbmVVc2VyUmVxdWVzdC5BdHRyaWJ1dGVNYXBFbnRyeUIkukghmgEeIhxyGjIYXlthLXpdWzAtOWEtekEtWl17MCw2Mn0kGksKEUF0dHJpYnV0ZU1hcEVudHJ5EgsKA2tleRgBIAEoCRIlCgV2YWx1ZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZToCOAEiTQodVXBkYXRlQXV0aE1hY2hpbmVVc2VyUmVzcG9uc2USLAoMbWFjaGluZV91c2VyGAEgASgLMhYudGFpbG9yLnYxLk1hY2hpbmVVc2VyIrgBChxEZWxldGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoOYXV0aF9uYW1lc3BhY2UYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoEbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIfCh1EZWxldGVBdXRoTWFjaGluZVVzZXJSZXNwb25zZSK1AQoZR2V0QXV0aE1hY2hpbmVVc2VyUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDmF1dGhfbmFtZXNwYWNlGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjYKBG5hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiSgoaR2V0QXV0aE1hY2hpbmVVc2VyUmVzcG9uc2USLAoMbWFjaGluZV91c2VyGAEgASgLMhYudGFpbG9yLnYxLk1hY2hpbmVVc2VyItgBChtMaXN0QXV0aE1hY2hpbmVVc2Vyc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5hdXRoX25hbWVzcGFjZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBISCgpwYWdlX3Rva2VuGAMgASgJEhEKCXBhZ2Vfc2l6ZRgEIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgFIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uInsKHExpc3RBdXRoTWFjaGluZVVzZXJzUmVzcG9uc2USLQoNbWFjaGluZV91c2VycxgBIAMoCzIWLnRhaWxvci52MS5NYWNoaW5lVXNlchIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMirwEKG0NyZWF0ZUF1dGhTQ0lNQ29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEi4KC3NjaW1fY29uZmlnGAMgASgLMhkudGFpbG9yLnYxLkF1dGhTQ0lNQ29uZmlnIk4KHENyZWF0ZUF1dGhTQ0lNQ29uZmlnUmVzcG9uc2USLgoLc2NpbV9jb25maWcYASABKAsyGS50YWlsb3IudjEuQXV0aFNDSU1Db25maWcirwEKG1VwZGF0ZUF1dGhTQ0lNQ29uZmlnUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEi4KC3NjaW1fY29uZmlnGAMgASgLMhkudGFpbG9yLnYxLkF1dGhTQ0lNQ29uZmlnIk4KHFVwZGF0ZUF1dGhTQ0lNQ29uZmlnUmVzcG9uc2USLgoLc2NpbV9jb25maWcYASABKAsyGS50YWlsb3IudjEuQXV0aFNDSU1Db25maWcifAoYR2V0QXV0aFNDSU1Db25maWdSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiSwoZR2V0QXV0aFNDSU1Db25maWdSZXNwb25zZRIuCgtzY2ltX2NvbmZpZxgBIAEoCzIZLnRhaWxvci52MS5BdXRoU0NJTUNvbmZpZyJ/ChtEZWxldGVBdXRoU0NJTUNvbmZpZ1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIeChxEZWxldGVBdXRoU0NJTUNvbmZpZ1Jlc3BvbnNlIrUBCh1DcmVhdGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjIKDXNjaW1fcmVzb3VyY2UYAyABKAsyGy50YWlsb3IudjEuQXV0aFNDSU1SZXNvdXJjZSJUCh5DcmVhdGVBdXRoU0NJTVJlc291cmNlUmVzcG9uc2USMgoNc2NpbV9yZXNvdXJjZRgBIAEoCzIbLnRhaWxvci52MS5BdXRoU0NJTVJlc291cmNlIrUBCh1VcGRhdGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjIKDXNjaW1fcmVzb3VyY2UYAyABKAsyGy50YWlsb3IudjEuQXV0aFNDSU1SZXNvdXJjZSJUCh5VcGRhdGVBdXRoU0NJTVJlc291cmNlUmVzcG9uc2USMgoNc2NpbV9yZXNvdXJjZRgBIAEoCzIbLnRhaWxvci52MS5BdXRoU0NJTVJlc291cmNlIo8BCh1EZWxldGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEgwKBG5hbWUYAyABKAkiIAoeRGVsZXRlQXV0aFNDSU1SZXNvdXJjZVJlc3BvbnNlIrYBChpHZXRBdXRoU0NJTVJlc291cmNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjYKBG5hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiUQobR2V0QXV0aFNDSU1SZXNvdXJjZVJlc3BvbnNlEjIKDXNjaW1fcmVzb3VyY2UYASABKAsyGy50YWlsb3IudjEuQXV0aFNDSU1SZXNvdXJjZSJ/ChtHZXRBdXRoU0NJTVJlc291cmNlc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJTChxHZXRBdXRoU0NJTVJlc291cmNlc1Jlc3BvbnNlEjMKDnNjaW1fcmVzb3VyY2VzGAEgAygLMhsudGFpbG9yLnYxLkF1dGhTQ0lNUmVzb3VyY2UidAobQ3JlYXRlQXV0aENvbm5lY3Rpb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESNQoKY29ubmVjdGlvbhgCIAEoCzIZLnRhaWxvci52MS5BdXRoQ29ubmVjdGlvbkIGukgDyAEBIh4KHENyZWF0ZUF1dGhDb25uZWN0aW9uUmVzcG9uc2UilQEKGkxpc3RBdXRoQ29ubmVjdGlvbnNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ7ChtMaXN0QXV0aENvbm5lY3Rpb25zUmVzcG9uc2USLgoLY29ubmVjdGlvbnMYASADKAsyGS50YWlsb3IudjEuQXV0aENvbm5lY3Rpb24SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIoABChtSZXZva2VBdXRoQ29ubmVjdGlvblJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJBCg9jb25uZWN0aW9uX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiHgocUmV2b2tlQXV0aENvbm5lY3Rpb25SZXNwb25zZSLmAQokUmVnaXN0ZXJBdXRoQ29ubmVjdGlvblNlc3Npb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQQoPY29ubmVjdGlvbl9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhQKDGFjY2Vzc190b2tlbhgDIAEoCRIVCg1yZWZyZXNoX3Rva2VuGAQgASgJEi4KCmV4cGlyZXNfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIicKJVJlZ2lzdGVyQXV0aENvbm5lY3Rpb25TZXNzaW9uUmVzcG9uc2Ui1wEKLkV4Y2hhbmdlQXV0aENvbm5lY3Rpb25BdXRob3JpemF0aW9uQ29kZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJBCg9jb25uZWN0aW9uX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSIwoSYXV0aG9yaXphdGlvbl9jb2RlGAMgASgJQge6SARyAhABEh0KDHJlZGlyZWN0X3VyaRgEIAEoCUIHukgEcgIQASIxCi9FeGNoYW5nZUF1dGhDb25uZWN0aW9uQXV0aG9yaXphdGlvbkNvZGVSZXNwb25zZSKLAQodQ3JlYXRlQXV0aE9BdXRoMkNsaWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIWCg5uYW1lc3BhY2VfbmFtZRgCIAEoCRIyCg1vYXV0aDJfY2xpZW50GAMgASgLMhsudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQiVAoeQ3JlYXRlQXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlEjIKDW9hdXRoMl9jbGllbnQYASABKAsyGy50YWlsb3IudjEuQXV0aE9BdXRoMkNsaWVudCKLAQodVXBkYXRlQXV0aE9BdXRoMkNsaWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIWCg5uYW1lc3BhY2VfbmFtZRgCIAEoCRIyCg1vYXV0aDJfY2xpZW50GAMgASgLMhsudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQiVAoeVXBkYXRlQXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlEjIKDW9hdXRoMl9jbGllbnQYASABKAsyGy50YWlsb3IudjEuQXV0aE9BdXRoMkNsaWVudCJlCh1EZWxldGVBdXRoT0F1dGgyQ2xpZW50UmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhYKDm5hbWVzcGFjZV9uYW1lGAIgASgJEgwKBG5hbWUYAyABKAkiIAoeRGVsZXRlQXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlIrYBChpHZXRBdXRoT0F1dGgyQ2xpZW50UmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjYKBG5hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiUQobR2V0QXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlEjIKDW9hdXRoMl9jbGllbnQYASABKAsyGy50YWlsb3IudjEuQXV0aE9BdXRoMkNsaWVudCKvAQocTGlzdEF1dGhPQXV0aDJDbGllbnRzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhYKDm5hbWVzcGFjZV9uYW1lGAIgASgJEhIKCnBhZ2VfdG9rZW4YAyABKAkSEQoJcGFnZV9zaXplGAQgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAUgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24iggEKHUxpc3RBdXRoT0F1dGgyQ2xpZW50c1Jlc3BvbnNlEjMKDm9hdXRoMl9jbGllbnRzGAEgAygLMhsudGFpbG9yLnYxLkF1dGhPQXV0aDJDbGllbnQSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDYgZwcm90bzM\", [file_buf_validate_validate, file_google_protobuf_struct, file_google_protobuf_timestamp, file_tailor_v1_auth_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.CreateAuthServiceRequest.\n * Use `create(CreateAuthServiceRequestSchema)` to create a new message.\n */\nexport const CreateAuthServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 0);\n\n/**\n * Describes the message tailor.v1.CreateAuthServiceResponse.\n * Use `create(CreateAuthServiceResponseSchema)` to create a new message.\n */\nexport const CreateAuthServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 1);\n\n/**\n * Describes the message tailor.v1.DeleteAuthServiceRequest.\n * Use `create(DeleteAuthServiceRequestSchema)` to create a new message.\n */\nexport const DeleteAuthServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 2);\n\n/**\n * Describes the message tailor.v1.DeleteAuthServiceResponse.\n * Use `create(DeleteAuthServiceResponseSchema)` to create a new message.\n */\nexport const DeleteAuthServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 3);\n\n/**\n * Describes the message tailor.v1.GetAuthServiceRequest.\n * Use `create(GetAuthServiceRequestSchema)` to create a new message.\n */\nexport const GetAuthServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 4);\n\n/**\n * Describes the message tailor.v1.GetAuthServiceResponse.\n * Use `create(GetAuthServiceResponseSchema)` to create a new message.\n */\nexport const GetAuthServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 5);\n\n/**\n * Describes the message tailor.v1.ListAuthServicesRequest.\n * Use `create(ListAuthServicesRequestSchema)` to create a new message.\n */\nexport const ListAuthServicesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 6);\n\n/**\n * Describes the message tailor.v1.ListAuthServicesResponse.\n * Use `create(ListAuthServicesResponseSchema)` to create a new message.\n */\nexport const ListAuthServicesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 7);\n\n/**\n * Describes the message tailor.v1.CreateAuthIDPConfigRequest.\n * Use `create(CreateAuthIDPConfigRequestSchema)` to create a new message.\n */\nexport const CreateAuthIDPConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 8);\n\n/**\n * Describes the message tailor.v1.CreateAuthIDPConfigResponse.\n * Use `create(CreateAuthIDPConfigResponseSchema)` to create a new message.\n */\nexport const CreateAuthIDPConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 9);\n\n/**\n * Describes the message tailor.v1.UpdateAuthIDPConfigRequest.\n * Use `create(UpdateAuthIDPConfigRequestSchema)` to create a new message.\n */\nexport const UpdateAuthIDPConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 10);\n\n/**\n * Describes the message tailor.v1.UpdateAuthIDPConfigResponse.\n * Use `create(UpdateAuthIDPConfigResponseSchema)` to create a new message.\n */\nexport const UpdateAuthIDPConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 11);\n\n/**\n * Describes the message tailor.v1.DeleteAuthIDPConfigRequest.\n * Use `create(DeleteAuthIDPConfigRequestSchema)` to create a new message.\n */\nexport const DeleteAuthIDPConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 12);\n\n/**\n * Describes the message tailor.v1.DeleteAuthIDPConfigResponse.\n * Use `create(DeleteAuthIDPConfigResponseSchema)` to create a new message.\n */\nexport const DeleteAuthIDPConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 13);\n\n/**\n * Describes the message tailor.v1.GetAuthIDPConfigRequest.\n * Use `create(GetAuthIDPConfigRequestSchema)` to create a new message.\n */\nexport const GetAuthIDPConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 14);\n\n/**\n * Describes the message tailor.v1.GetAuthIDPConfigResponse.\n * Use `create(GetAuthIDPConfigResponseSchema)` to create a new message.\n */\nexport const GetAuthIDPConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 15);\n\n/**\n * Describes the message tailor.v1.ListAuthIDPConfigsRequest.\n * Use `create(ListAuthIDPConfigsRequestSchema)` to create a new message.\n */\nexport const ListAuthIDPConfigsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 16);\n\n/**\n * Describes the message tailor.v1.ListAuthIDPConfigsResponse.\n * Use `create(ListAuthIDPConfigsResponseSchema)` to create a new message.\n */\nexport const ListAuthIDPConfigsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 17);\n\n/**\n * Describes the message tailor.v1.CreateUserProfileConfigRequest.\n * Use `create(CreateUserProfileConfigRequestSchema)` to create a new message.\n */\nexport const CreateUserProfileConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 18);\n\n/**\n * Describes the message tailor.v1.CreateUserProfileConfigResponse.\n * Use `create(CreateUserProfileConfigResponseSchema)` to create a new message.\n */\nexport const CreateUserProfileConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 19);\n\n/**\n * Describes the message tailor.v1.UpdateUserProfileConfigRequest.\n * Use `create(UpdateUserProfileConfigRequestSchema)` to create a new message.\n */\nexport const UpdateUserProfileConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 20);\n\n/**\n * Describes the message tailor.v1.UpdateUserProfileConfigResponse.\n * Use `create(UpdateUserProfileConfigResponseSchema)` to create a new message.\n */\nexport const UpdateUserProfileConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 21);\n\n/**\n * Describes the message tailor.v1.DeleteUserProfileConfigRequest.\n * Use `create(DeleteUserProfileConfigRequestSchema)` to create a new message.\n */\nexport const DeleteUserProfileConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 22);\n\n/**\n * Describes the message tailor.v1.DeleteUserProfileConfigResponse.\n * Use `create(DeleteUserProfileConfigResponseSchema)` to create a new message.\n */\nexport const DeleteUserProfileConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 23);\n\n/**\n * Describes the message tailor.v1.GetUserProfileConfigRequest.\n * Use `create(GetUserProfileConfigRequestSchema)` to create a new message.\n */\nexport const GetUserProfileConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 24);\n\n/**\n * Describes the message tailor.v1.GetUserProfileConfigResponse.\n * Use `create(GetUserProfileConfigResponseSchema)` to create a new message.\n */\nexport const GetUserProfileConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 25);\n\n/**\n * Describes the message tailor.v1.CreateTenantConfigRequest.\n * Use `create(CreateTenantConfigRequestSchema)` to create a new message.\n */\nexport const CreateTenantConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 26);\n\n/**\n * Describes the message tailor.v1.CreateTenantConfigResponse.\n * Use `create(CreateTenantConfigResponseSchema)` to create a new message.\n */\nexport const CreateTenantConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 27);\n\n/**\n * Describes the message tailor.v1.UpdateTenantConfigRequest.\n * Use `create(UpdateTenantConfigRequestSchema)` to create a new message.\n */\nexport const UpdateTenantConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 28);\n\n/**\n * Describes the message tailor.v1.UpdateTenantConfigResponse.\n * Use `create(UpdateTenantConfigResponseSchema)` to create a new message.\n */\nexport const UpdateTenantConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 29);\n\n/**\n * Describes the message tailor.v1.DeleteTenantConfigRequest.\n * Use `create(DeleteTenantConfigRequestSchema)` to create a new message.\n */\nexport const DeleteTenantConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 30);\n\n/**\n * Describes the message tailor.v1.DeleteTenantConfigResponse.\n * Use `create(DeleteTenantConfigResponseSchema)` to create a new message.\n */\nexport const DeleteTenantConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 31);\n\n/**\n * Describes the message tailor.v1.GetTenantConfigRequest.\n * Use `create(GetTenantConfigRequestSchema)` to create a new message.\n */\nexport const GetTenantConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 32);\n\n/**\n * Describes the message tailor.v1.GetTenantConfigResponse.\n * Use `create(GetTenantConfigResponseSchema)` to create a new message.\n */\nexport const GetTenantConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 33);\n\n/**\n * Describes the message tailor.v1.CreatePersonalAccessTokenRequest.\n * Use `create(CreatePersonalAccessTokenRequestSchema)` to create a new message.\n */\nexport const CreatePersonalAccessTokenRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 34);\n\n/**\n * Describes the message tailor.v1.CreatePersonalAccessTokenResponse.\n * Use `create(CreatePersonalAccessTokenResponseSchema)` to create a new message.\n */\nexport const CreatePersonalAccessTokenResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 35);\n\n/**\n * Describes the message tailor.v1.DeletePersonalAccessTokenRequest.\n * Use `create(DeletePersonalAccessTokenRequestSchema)` to create a new message.\n */\nexport const DeletePersonalAccessTokenRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 36);\n\n/**\n * Describes the message tailor.v1.DeletePersonalAccessTokenResponse.\n * Use `create(DeletePersonalAccessTokenResponseSchema)` to create a new message.\n */\nexport const DeletePersonalAccessTokenResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 37);\n\n/**\n * Describes the message tailor.v1.ListPersonalAccessTokensRequest.\n * Use `create(ListPersonalAccessTokensRequestSchema)` to create a new message.\n */\nexport const ListPersonalAccessTokensRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 38);\n\n/**\n * Describes the message tailor.v1.ListPersonalAccessTokensResponse.\n * Use `create(ListPersonalAccessTokensResponseSchema)` to create a new message.\n */\nexport const ListPersonalAccessTokensResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 39);\n\n/**\n * Describes the message tailor.v1.CreateAuthMachineUserRequest.\n * Use `create(CreateAuthMachineUserRequestSchema)` to create a new message.\n */\nexport const CreateAuthMachineUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 40);\n\n/**\n * Describes the message tailor.v1.CreateAuthMachineUserResponse.\n * Use `create(CreateAuthMachineUserResponseSchema)` to create a new message.\n */\nexport const CreateAuthMachineUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 41);\n\n/**\n * Describes the message tailor.v1.UpdateAuthMachineUserRequest.\n * Use `create(UpdateAuthMachineUserRequestSchema)` to create a new message.\n */\nexport const UpdateAuthMachineUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 42);\n\n/**\n * Describes the message tailor.v1.UpdateAuthMachineUserResponse.\n * Use `create(UpdateAuthMachineUserResponseSchema)` to create a new message.\n */\nexport const UpdateAuthMachineUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 43);\n\n/**\n * Describes the message tailor.v1.DeleteAuthMachineUserRequest.\n * Use `create(DeleteAuthMachineUserRequestSchema)` to create a new message.\n */\nexport const DeleteAuthMachineUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 44);\n\n/**\n * Describes the message tailor.v1.DeleteAuthMachineUserResponse.\n * Use `create(DeleteAuthMachineUserResponseSchema)` to create a new message.\n */\nexport const DeleteAuthMachineUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 45);\n\n/**\n * Describes the message tailor.v1.GetAuthMachineUserRequest.\n * Use `create(GetAuthMachineUserRequestSchema)` to create a new message.\n */\nexport const GetAuthMachineUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 46);\n\n/**\n * Describes the message tailor.v1.GetAuthMachineUserResponse.\n * Use `create(GetAuthMachineUserResponseSchema)` to create a new message.\n */\nexport const GetAuthMachineUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 47);\n\n/**\n * Describes the message tailor.v1.ListAuthMachineUsersRequest.\n * Use `create(ListAuthMachineUsersRequestSchema)` to create a new message.\n */\nexport const ListAuthMachineUsersRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 48);\n\n/**\n * Describes the message tailor.v1.ListAuthMachineUsersResponse.\n * Use `create(ListAuthMachineUsersResponseSchema)` to create a new message.\n */\nexport const ListAuthMachineUsersResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 49);\n\n/**\n * Describes the message tailor.v1.CreateAuthSCIMConfigRequest.\n * Use `create(CreateAuthSCIMConfigRequestSchema)` to create a new message.\n */\nexport const CreateAuthSCIMConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 50);\n\n/**\n * Describes the message tailor.v1.CreateAuthSCIMConfigResponse.\n * Use `create(CreateAuthSCIMConfigResponseSchema)` to create a new message.\n */\nexport const CreateAuthSCIMConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 51);\n\n/**\n * Describes the message tailor.v1.UpdateAuthSCIMConfigRequest.\n * Use `create(UpdateAuthSCIMConfigRequestSchema)` to create a new message.\n */\nexport const UpdateAuthSCIMConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 52);\n\n/**\n * Describes the message tailor.v1.UpdateAuthSCIMConfigResponse.\n * Use `create(UpdateAuthSCIMConfigResponseSchema)` to create a new message.\n */\nexport const UpdateAuthSCIMConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 53);\n\n/**\n * Describes the message tailor.v1.GetAuthSCIMConfigRequest.\n * Use `create(GetAuthSCIMConfigRequestSchema)` to create a new message.\n */\nexport const GetAuthSCIMConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 54);\n\n/**\n * Describes the message tailor.v1.GetAuthSCIMConfigResponse.\n * Use `create(GetAuthSCIMConfigResponseSchema)` to create a new message.\n */\nexport const GetAuthSCIMConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 55);\n\n/**\n * Describes the message tailor.v1.DeleteAuthSCIMConfigRequest.\n * Use `create(DeleteAuthSCIMConfigRequestSchema)` to create a new message.\n */\nexport const DeleteAuthSCIMConfigRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 56);\n\n/**\n * Describes the message tailor.v1.DeleteAuthSCIMConfigResponse.\n * Use `create(DeleteAuthSCIMConfigResponseSchema)` to create a new message.\n */\nexport const DeleteAuthSCIMConfigResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 57);\n\n/**\n * Describes the message tailor.v1.CreateAuthSCIMResourceRequest.\n * Use `create(CreateAuthSCIMResourceRequestSchema)` to create a new message.\n */\nexport const CreateAuthSCIMResourceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 58);\n\n/**\n * Describes the message tailor.v1.CreateAuthSCIMResourceResponse.\n * Use `create(CreateAuthSCIMResourceResponseSchema)` to create a new message.\n */\nexport const CreateAuthSCIMResourceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 59);\n\n/**\n * Describes the message tailor.v1.UpdateAuthSCIMResourceRequest.\n * Use `create(UpdateAuthSCIMResourceRequestSchema)` to create a new message.\n */\nexport const UpdateAuthSCIMResourceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 60);\n\n/**\n * Describes the message tailor.v1.UpdateAuthSCIMResourceResponse.\n * Use `create(UpdateAuthSCIMResourceResponseSchema)` to create a new message.\n */\nexport const UpdateAuthSCIMResourceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 61);\n\n/**\n * Describes the message tailor.v1.DeleteAuthSCIMResourceRequest.\n * Use `create(DeleteAuthSCIMResourceRequestSchema)` to create a new message.\n */\nexport const DeleteAuthSCIMResourceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 62);\n\n/**\n * Describes the message tailor.v1.DeleteAuthSCIMResourceResponse.\n * Use `create(DeleteAuthSCIMResourceResponseSchema)` to create a new message.\n */\nexport const DeleteAuthSCIMResourceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 63);\n\n/**\n * Describes the message tailor.v1.GetAuthSCIMResourceRequest.\n * Use `create(GetAuthSCIMResourceRequestSchema)` to create a new message.\n */\nexport const GetAuthSCIMResourceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 64);\n\n/**\n * Describes the message tailor.v1.GetAuthSCIMResourceResponse.\n * Use `create(GetAuthSCIMResourceResponseSchema)` to create a new message.\n */\nexport const GetAuthSCIMResourceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 65);\n\n/**\n * Describes the message tailor.v1.GetAuthSCIMResourcesRequest.\n * Use `create(GetAuthSCIMResourcesRequestSchema)` to create a new message.\n */\nexport const GetAuthSCIMResourcesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 66);\n\n/**\n * Describes the message tailor.v1.GetAuthSCIMResourcesResponse.\n * Use `create(GetAuthSCIMResourcesResponseSchema)` to create a new message.\n */\nexport const GetAuthSCIMResourcesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 67);\n\n/**\n * Describes the message tailor.v1.CreateAuthConnectionRequest.\n * Use `create(CreateAuthConnectionRequestSchema)` to create a new message.\n */\nexport const CreateAuthConnectionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 68);\n\n/**\n * Describes the message tailor.v1.CreateAuthConnectionResponse.\n * Use `create(CreateAuthConnectionResponseSchema)` to create a new message.\n */\nexport const CreateAuthConnectionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 69);\n\n/**\n * Describes the message tailor.v1.ListAuthConnectionsRequest.\n * Use `create(ListAuthConnectionsRequestSchema)` to create a new message.\n */\nexport const ListAuthConnectionsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 70);\n\n/**\n * Describes the message tailor.v1.ListAuthConnectionsResponse.\n * Use `create(ListAuthConnectionsResponseSchema)` to create a new message.\n */\nexport const ListAuthConnectionsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 71);\n\n/**\n * Describes the message tailor.v1.RevokeAuthConnectionRequest.\n * Use `create(RevokeAuthConnectionRequestSchema)` to create a new message.\n */\nexport const RevokeAuthConnectionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 72);\n\n/**\n * Describes the message tailor.v1.RevokeAuthConnectionResponse.\n * Use `create(RevokeAuthConnectionResponseSchema)` to create a new message.\n */\nexport const RevokeAuthConnectionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 73);\n\n/**\n * Describes the message tailor.v1.RegisterAuthConnectionSessionRequest.\n * Use `create(RegisterAuthConnectionSessionRequestSchema)` to create a new message.\n */\nexport const RegisterAuthConnectionSessionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 74);\n\n/**\n * Describes the message tailor.v1.RegisterAuthConnectionSessionResponse.\n * Use `create(RegisterAuthConnectionSessionResponseSchema)` to create a new message.\n */\nexport const RegisterAuthConnectionSessionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 75);\n\n/**\n * Describes the message tailor.v1.ExchangeAuthConnectionAuthorizationCodeRequest.\n * Use `create(ExchangeAuthConnectionAuthorizationCodeRequestSchema)` to create a new message.\n */\nexport const ExchangeAuthConnectionAuthorizationCodeRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 76);\n\n/**\n * Describes the message tailor.v1.ExchangeAuthConnectionAuthorizationCodeResponse.\n * Use `create(ExchangeAuthConnectionAuthorizationCodeResponseSchema)` to create a new message.\n */\nexport const ExchangeAuthConnectionAuthorizationCodeResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 77);\n\n/**\n * Describes the message tailor.v1.CreateAuthOAuth2ClientRequest.\n * Use `create(CreateAuthOAuth2ClientRequestSchema)` to create a new message.\n */\nexport const CreateAuthOAuth2ClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 78);\n\n/**\n * Describes the message tailor.v1.CreateAuthOAuth2ClientResponse.\n * Use `create(CreateAuthOAuth2ClientResponseSchema)` to create a new message.\n */\nexport const CreateAuthOAuth2ClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 79);\n\n/**\n * Describes the message tailor.v1.UpdateAuthOAuth2ClientRequest.\n * Use `create(UpdateAuthOAuth2ClientRequestSchema)` to create a new message.\n */\nexport const UpdateAuthOAuth2ClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 80);\n\n/**\n * Describes the message tailor.v1.UpdateAuthOAuth2ClientResponse.\n * Use `create(UpdateAuthOAuth2ClientResponseSchema)` to create a new message.\n */\nexport const UpdateAuthOAuth2ClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 81);\n\n/**\n * Describes the message tailor.v1.DeleteAuthOAuth2ClientRequest.\n * Use `create(DeleteAuthOAuth2ClientRequestSchema)` to create a new message.\n */\nexport const DeleteAuthOAuth2ClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 82);\n\n/**\n * Describes the message tailor.v1.DeleteAuthOAuth2ClientResponse.\n * Use `create(DeleteAuthOAuth2ClientResponseSchema)` to create a new message.\n */\nexport const DeleteAuthOAuth2ClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 83);\n\n/**\n * Describes the message tailor.v1.GetAuthOAuth2ClientRequest.\n * Use `create(GetAuthOAuth2ClientRequestSchema)` to create a new message.\n */\nexport const GetAuthOAuth2ClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 84);\n\n/**\n * Describes the message tailor.v1.GetAuthOAuth2ClientResponse.\n * Use `create(GetAuthOAuth2ClientResponseSchema)` to create a new message.\n */\nexport const GetAuthOAuth2ClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 85);\n\n/**\n * Describes the message tailor.v1.ListAuthOAuth2ClientsRequest.\n * Use `create(ListAuthOAuth2ClientsRequestSchema)` to create a new message.\n */\nexport const ListAuthOAuth2ClientsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 86);\n\n/**\n * Describes the message tailor.v1.ListAuthOAuth2ClientsResponse.\n * Use `create(ListAuthOAuth2ClientsResponseSchema)` to create a new message.\n */\nexport const ListAuthOAuth2ClientsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_auth, 87);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/events_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_protobuf_struct, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/events_resource.proto.\n */\nexport const file_tailor_v1_events_resource = /*@__PURE__*/\n fileDesc(\"Ch90YWlsb3IvdjEvZXZlbnRzX3Jlc291cmNlLnByb3RvEgl0YWlsb3IudjEitgEKDkRhdGFwbGFuZUV2ZW50EhcKD2lkZW1wb3RlbmN5X2tleRgBIAEoCRIUCgx3b3Jrc3BhY2VfaWQYAiABKAkSEgoKZXZlbnRfdHlwZRgDIAEoCRIQCghhY3Rvcl9pZBgEIAEoCRIlCgRkYXRhGAUgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIoCgR0aW1lGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLBAQoXQ29udHJvbHBsYW5lQWN0aXZpdHlMb2cSFwoPaWRlbXBvdGVuY3lfa2V5GAEgASgJEhQKDHdvcmtzcGFjZV9pZBgCIAEoCRIQCghhY3Rvcl9pZBgDIAEoCRIQCghyZXNvdXJjZRgEIAEoCRIOCgZhY3Rpb24YBSABKAkSEgoKaWRlbnRpZmllchgGIAEoCRIvCgtvcGVyYXRlZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBiBnByb3RvMw\", [file_google_protobuf_struct, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.DataplaneEvent.\n * Use `create(DataplaneEventSchema)` to create a new message.\n */\nexport const DataplaneEventSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_events_resource, 0);\n\n/**\n * Describes the message tailor.v1.ControlplaneActivityLog.\n * Use `create(ControlplaneActivityLogSchema)` to create a new message.\n */\nexport const ControlplaneActivityLogSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_events_resource, 1);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/events.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_events_resource } from \"./events_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/events.proto.\n */\nexport const file_tailor_v1_events = /*@__PURE__*/\n fileDesc(\"ChZ0YWlsb3IvdjEvZXZlbnRzLnByb3RvEgl0YWlsb3IudjEiuAEKGkxpc3REYXRhcGxhbmVFdmVudHNSZXF1ZXN0EhIKCnBhZ2VfdG9rZW4YASABKAkSEQoJcGFnZV9zaXplGAIgASgNEh4KDHdvcmtzcGFjZV9pZBgDIAEoCUIIukgFcgOwAQESMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbhIhCgZmaWx0ZXIYBSABKAsyES50YWlsb3IudjEuRmlsdGVyInYKG0xpc3REYXRhcGxhbmVFdmVudHNSZXNwb25zZRIXCg9uZXh0X3BhZ2VfdG9rZW4YASABKAkSKQoGZXZlbnRzGAIgAygLMhkudGFpbG9yLnYxLkRhdGFwbGFuZUV2ZW50EhMKC3RvdGFsX2NvdW50GAMgASgDIsEBCiNMaXN0Q29udHJvbHBsYW5lQWN0aXZpdHlMb2dzUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIeCgx3b3Jrc3BhY2VfaWQYAyABKAlCCLpIBXIDsAEBEjAKDnBhZ2VfZGlyZWN0aW9uGAQgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24SIQoGZmlsdGVyGAUgASgLMhEudGFpbG9yLnYxLkZpbHRlciKGAQokTGlzdENvbnRyb2xwbGFuZUFjdGl2aXR5TG9nc1Jlc3BvbnNlEhcKD25leHRfcGFnZV90b2tlbhgBIAEoCRIwCgRsb2dzGAIgAygLMiIudGFpbG9yLnYxLkNvbnRyb2xwbGFuZUFjdGl2aXR5TG9nEhMKC3RvdGFsX2NvdW50GAMgASgDYgZwcm90bzM\", [file_buf_validate_validate, file_tailor_v1_events_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.ListDataplaneEventsRequest.\n * Use `create(ListDataplaneEventsRequestSchema)` to create a new message.\n */\nexport const ListDataplaneEventsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_events, 0);\n\n/**\n * Describes the message tailor.v1.ListDataplaneEventsResponse.\n * Use `create(ListDataplaneEventsResponseSchema)` to create a new message.\n */\nexport const ListDataplaneEventsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_events, 1);\n\n/**\n * Describes the message tailor.v1.ListControlplaneActivityLogsRequest.\n * Use `create(ListControlplaneActivityLogsRequestSchema)` to create a new message.\n */\nexport const ListControlplaneActivityLogsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_events, 2);\n\n/**\n * Describes the message tailor.v1.ListControlplaneActivityLogsResponse.\n * Use `create(ListControlplaneActivityLogsResponseSchema)` to create a new message.\n */\nexport const ListControlplaneActivityLogsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_events, 3);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/executor_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_struct, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_v1_auth_resource } from \"./auth_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_secret_manager_resource } from \"./secret_manager_resource_pb\";\n\n/**\n * Describes the file tailor/v1/executor_resource.proto.\n */\nexport const file_tailor_v1_executor_resource = /*@__PURE__*/\n fileDesc(\"CiF0YWlsb3IvdjEvZXhlY3V0b3JfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSL7AgoQRXhlY3V0b3JFeGVjdXRvchI2CgRuYW1lGAEgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhMKC2Rlc2NyaXB0aW9uGAIgASgJEkIKDHRyaWdnZXJfdHlwZRgDIAEoDjIeLnRhaWxvci52MS5FeGVjdXRvclRyaWdnZXJUeXBlQgy6SAmCAQYYARgCGAMSQAoOdHJpZ2dlcl9jb25maWcYBCABKAsyIC50YWlsb3IudjEuRXhlY3V0b3JUcmlnZ2VyQ29uZmlnQga6SAPIAQESQgoLdGFyZ2V0X3R5cGUYBSABKA4yHS50YWlsb3IudjEuRXhlY3V0b3JUYXJnZXRUeXBlQg66SAuCAQgYARgCGAMYBBI+Cg10YXJnZXRfY29uZmlnGAYgASgLMh8udGFpbG9yLnYxLkV4ZWN1dG9yVGFyZ2V0Q29uZmlnQga6SAPIAQESEAoIZGlzYWJsZWQYByABKAgi6wEKFUV4ZWN1dG9yVHJpZ2dlckNvbmZpZxI8CghzY2hlZHVsZRgBIAEoCzIoLnRhaWxvci52MS5FeGVjdXRvclRyaWdnZXJTY2hlZHVsZUNvbmZpZ0gAEjYKBWV2ZW50GAIgASgLMiUudGFpbG9yLnYxLkV4ZWN1dG9yVHJpZ2dlckV2ZW50Q29uZmlnSAASSwoQaW5jb21pbmdfd2ViaG9vaxgDIAEoCzIvLnRhaWxvci52MS5FeGVjdXRvclRyaWdnZXJJbmNvbWluZ1dlYmhvb2tDb25maWdIAEIPCgZjb25maWcSBbpIAggBIlYKHUV4ZWN1dG9yVHJpZ2dlclNjaGVkdWxlQ29uZmlnEhkKCHRpbWV6b25lGAEgASgJQge6SARyAhABEhoKCWZyZXF1ZW5jeRgCIAEoCUIHukgEcgIQASJfChpFeGVjdXRvclRyaWdnZXJFdmVudENvbmZpZxIbCgpldmVudF90eXBlGAEgASgJQge6SARyAhABEiQKCWNvbmRpdGlvbhgCIAEoCzIRLnRhaWxvci52MS5TY3JpcHQiOwokRXhlY3V0b3JUcmlnZ2VySW5jb21pbmdXZWJob29rQ29uZmlnEhMKBnNlY3JldBgBIAEoCUID4EEDIuEBChRFeGVjdXRvclRhcmdldENvbmZpZxIzCgd3ZWJob29rGAEgASgLMiAudGFpbG9yLnYxLkV4ZWN1dG9yV2ViaG9va0NvbmZpZ0gAEkYKDnRhaWxvcl9ncmFwaHFsGAIgASgLMiwudGFpbG9yLnYxLkV4ZWN1dG9yVGFyZ2V0VGFpbG9yR3JhcGhxbENvbmZpZ0gAEjsKCGZ1bmN0aW9uGAMgASgLMicudGFpbG9yLnYxLkV4ZWN1dG9yVGFyZ2V0RnVuY3Rpb25Db25maWdIAEIPCgZjb25maWcSBbpIAggBIrkBChVFeGVjdXRvcldlYmhvb2tDb25maWcSHgoDdXJsGAEgASgLMhEudGFpbG9yLnYxLlNjcmlwdBImCgZzZWNyZXQYAiABKAsyFi50YWlsb3IudjEuU2VjcmV0VmFsdWUSNwoHaGVhZGVycxgDIAMoCzImLnRhaWxvci52MS5FeGVjdXRvclRhcmdldFdlYmhvb2tIZWFkZXISHwoEYm9keRgEIAEoCzIRLnRhaWxvci52MS5TY3JpcHQikQEKG0V4ZWN1dG9yVGFyZ2V0V2ViaG9va0hlYWRlchIUCgNrZXkYASABKAlCB7pIBHICEAESHAoJcmF3X3ZhbHVlGAIgASgJQge6SARyAhABSAASLgoMc2VjcmV0X3ZhbHVlGAMgASgLMhYudGFpbG9yLnYxLlNlY3JldFZhbHVlSABCDgoFdmFsdWUSBbpIAggBIqUBCiFFeGVjdXRvclRhcmdldFRhaWxvckdyYXBocWxDb25maWcSGQoIYXBwX25hbWUYASABKAlCB7pIBHICEAESFgoFcXVlcnkYAiABKAlCB7pIBHICEAESJAoJdmFyaWFibGVzGAMgASgLMhEudGFpbG9yLnYxLlNjcmlwdBInCgdpbnZva2VyGAQgASgLMhYudGFpbG9yLnYxLkF1dGhJbnZva2VyIp0BChxFeGVjdXRvclRhcmdldEZ1bmN0aW9uQ29uZmlnEhUKBG5hbWUYASABKAlCB7pIBHICEAESFwoGc2NyaXB0GAIgASgJQge6SARyAhABEiQKCXZhcmlhYmxlcxgDIAEoCzIRLnRhaWxvci52MS5TY3JpcHQSJwoHaW52b2tlchgEIAEoCzIWLnRhaWxvci52MS5BdXRoSW52b2tlciLeAgoLRXhlY3V0b3JKb2ISCgoCaWQYASABKAkSFQoNZXhlY3V0b3JfbmFtZRgCIAEoCRIsCgZzdGF0dXMYAyABKA4yHC50YWlsb3IudjEuRXhlY3V0b3JKb2JTdGF0dXMSJgoFYWN0b3IYBCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EiUKBGRhdGEYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Eh0KFWV2ZW50X2lkZW1wb3RlbmN5X2tleRgGIAEoCRIwCgxzY2hlZHVsZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmNyZWF0ZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIssCChJFeGVjdXRvckpvYkF0dGVtcHQSCgoCaWQYASABKAkSDgoGam9iX2lkGAIgASgJEiwKBnN0YXR1cxgDIAEoDjIcLnRhaWxvci52MS5FeGVjdXRvckpvYlN0YXR1cxINCgVlcnJvchgEIAEoCRIuCgpzdGFydGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIvCgtmaW5pc2hlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKY3JlYXRlZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGwoTb3BlcmF0aW9uX3JlZmVyZW5jZRgJIAEoCSJPChdFeGVjdXRvckluY29taW5nV2ViaG9vaxIVCg1leGVjdXRvcl9uYW1lGAEgASgJEgsKA3VybBgCIAEoCRIQCghkaXNhYmxlZBgDIAEoCCqtAQoTRXhlY3V0b3JUcmlnZ2VyVHlwZRIlCiFFWEVDVVRPUl9UUklHR0VSX1RZUEVfVU5TUEVDSUZJRUQQABIiCh5FWEVDVVRPUl9UUklHR0VSX1RZUEVfU0NIRURVTEUQARIfChtFWEVDVVRPUl9UUklHR0VSX1RZUEVfRVZFTlQQAhIqCiZFWEVDVVRPUl9UUklHR0VSX1RZUEVfSU5DT01JTkdfV0VCSE9PSxADKs8BChJFeGVjdXRvclRhcmdldFR5cGUSJAogRVhFQ1VUT1JfVEFSR0VUX1RZUEVfVU5TUEVDSUZJRUQQABIgChxFWEVDVVRPUl9UQVJHRVRfVFlQRV9XRUJIT09LEAESJwojRVhFQ1VUT1JfVEFSR0VUX1RZUEVfVEFJTE9SX0dSQVBIUUwQAhIhCh1FWEVDVVRPUl9UQVJHRVRfVFlQRV9GVU5DVElPThADEiUKIUVYRUNVVE9SX1RBUkdFVF9UWVBFX0pPQl9GVU5DVElPThAEKt0BChFFeGVjdXRvckpvYlN0YXR1cxIjCh9FWEVDVVRPUl9KT0JfU1RBVFVTX1VOU1BFQ0lGSUVEEAASHwobRVhFQ1VUT1JfSk9CX1NUQVRVU19QRU5ESU5HEAESHwobRVhFQ1VUT1JfSk9CX1NUQVRVU19SVU5OSU5HEAISHwobRVhFQ1VUT1JfSk9CX1NUQVRVU19TVUNDRVNTEAMSHgoaRVhFQ1VUT1JfSk9CX1NUQVRVU19GQUlMRUQQBBIgChxFWEVDVVRPUl9KT0JfU1RBVFVTX0NBTkNFTEVEEAViBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_struct, file_google_protobuf_timestamp, file_tailor_v1_auth_resource, file_tailor_v1_resource, file_tailor_v1_secret_manager_resource]);\n\n/**\n * Describes the message tailor.v1.ExecutorExecutor.\n * Use `create(ExecutorExecutorSchema)` to create a new message.\n */\nexport const ExecutorExecutorSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 0);\n\n/**\n * Describes the message tailor.v1.ExecutorTriggerConfig.\n * Use `create(ExecutorTriggerConfigSchema)` to create a new message.\n */\nexport const ExecutorTriggerConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 1);\n\n/**\n * Describes the message tailor.v1.ExecutorTriggerScheduleConfig.\n * Use `create(ExecutorTriggerScheduleConfigSchema)` to create a new message.\n */\nexport const ExecutorTriggerScheduleConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 2);\n\n/**\n * Describes the message tailor.v1.ExecutorTriggerEventConfig.\n * Use `create(ExecutorTriggerEventConfigSchema)` to create a new message.\n */\nexport const ExecutorTriggerEventConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 3);\n\n/**\n * Describes the message tailor.v1.ExecutorTriggerIncomingWebhookConfig.\n * Use `create(ExecutorTriggerIncomingWebhookConfigSchema)` to create a new message.\n */\nexport const ExecutorTriggerIncomingWebhookConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 4);\n\n/**\n * Describes the message tailor.v1.ExecutorTargetConfig.\n * Use `create(ExecutorTargetConfigSchema)` to create a new message.\n */\nexport const ExecutorTargetConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 5);\n\n/**\n * Describes the message tailor.v1.ExecutorWebhookConfig.\n * Use `create(ExecutorWebhookConfigSchema)` to create a new message.\n */\nexport const ExecutorWebhookConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 6);\n\n/**\n * Describes the message tailor.v1.ExecutorTargetWebhookHeader.\n * Use `create(ExecutorTargetWebhookHeaderSchema)` to create a new message.\n */\nexport const ExecutorTargetWebhookHeaderSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 7);\n\n/**\n * Describes the message tailor.v1.ExecutorTargetTailorGraphqlConfig.\n * Use `create(ExecutorTargetTailorGraphqlConfigSchema)` to create a new message.\n */\nexport const ExecutorTargetTailorGraphqlConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 8);\n\n/**\n * Describes the message tailor.v1.ExecutorTargetFunctionConfig.\n * Use `create(ExecutorTargetFunctionConfigSchema)` to create a new message.\n */\nexport const ExecutorTargetFunctionConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 9);\n\n/**\n * Describes the message tailor.v1.ExecutorJob.\n * Use `create(ExecutorJobSchema)` to create a new message.\n */\nexport const ExecutorJobSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 10);\n\n/**\n * Describes the message tailor.v1.ExecutorJobAttempt.\n * Use `create(ExecutorJobAttemptSchema)` to create a new message.\n */\nexport const ExecutorJobAttemptSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 11);\n\n/**\n * Describes the message tailor.v1.ExecutorIncomingWebhook.\n * Use `create(ExecutorIncomingWebhookSchema)` to create a new message.\n */\nexport const ExecutorIncomingWebhookSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor_resource, 12);\n\n/**\n * Describes the enum tailor.v1.ExecutorTriggerType.\n */\nexport const ExecutorTriggerTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_executor_resource, 0);\n\n/**\n * @generated from enum tailor.v1.ExecutorTriggerType\n */\nexport const ExecutorTriggerType = /*@__PURE__*/\n tsEnum(ExecutorTriggerTypeSchema);\n\n/**\n * Describes the enum tailor.v1.ExecutorTargetType.\n */\nexport const ExecutorTargetTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_executor_resource, 1);\n\n/**\n * @generated from enum tailor.v1.ExecutorTargetType\n */\nexport const ExecutorTargetType = /*@__PURE__*/\n tsEnum(ExecutorTargetTypeSchema);\n\n/**\n * Describes the enum tailor.v1.ExecutorJobStatus.\n */\nexport const ExecutorJobStatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_executor_resource, 2);\n\n/**\n * @generated from enum tailor.v1.ExecutorJobStatus\n */\nexport const ExecutorJobStatus = /*@__PURE__*/\n tsEnum(ExecutorJobStatusSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/executor.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_executor_resource } from \"./executor_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/executor.proto.\n */\nexport const file_tailor_v1_executor = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvZXhlY3V0b3IucHJvdG8SCXRhaWxvci52MSJ2Ch1DcmVhdGVFeGVjdXRvckV4ZWN1dG9yUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjUKCGV4ZWN1dG9yGAIgASgLMhsudGFpbG9yLnYxLkV4ZWN1dG9yRXhlY3V0b3JCBrpIA8gBASJPCh5DcmVhdGVFeGVjdXRvckV4ZWN1dG9yUmVzcG9uc2USLQoIZXhlY3V0b3IYASABKAsyGy50YWlsb3IudjEuRXhlY3V0b3JFeGVjdXRvciJ2Ch1VcGRhdGVFeGVjdXRvckV4ZWN1dG9yUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjUKCGV4ZWN1dG9yGAIgASgLMhsudGFpbG9yLnYxLkV4ZWN1dG9yRXhlY3V0b3JCBrpIA8gBASJPCh5VcGRhdGVFeGVjdXRvckV4ZWN1dG9yUmVzcG9uc2USLQoIZXhlY3V0b3IYASABKAsyGy50YWlsb3IudjEuRXhlY3V0b3JFeGVjdXRvciJ0ChpHZXRFeGVjdXRvckV4ZWN1dG9yUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjYKBG5hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiTAobR2V0RXhlY3V0b3JFeGVjdXRvclJlc3BvbnNlEi0KCGV4ZWN1dG9yGAEgASgLMhsudGFpbG9yLnYxLkV4ZWN1dG9yRXhlY3V0b3IidwodRGVsZXRlRXhlY3V0b3JFeGVjdXRvclJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI2CgRuYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIiAKHkRlbGV0ZUV4ZWN1dG9yRXhlY3V0b3JSZXNwb25zZSKXAQocTGlzdEV4ZWN1dG9yRXhlY3V0b3JzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhIKCnBhZ2VfdG9rZW4YAiABKAkSEQoJcGFnZV9zaXplGAMgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAQgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24ifQodTGlzdEV4ZWN1dG9yRXhlY3V0b3JzUmVzcG9uc2USLgoJZXhlY3V0b3JzGAEgAygLMhsudGFpbG9yLnYxLkV4ZWN1dG9yRXhlY3V0b3ISFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIpIBChVHZXRFeGVjdXRvckpvYlJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI/Cg1leGVjdXRvcl9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhgKBmpvYl9pZBgDIAEoCUIIukgFcgOwAQEiPQoWR2V0RXhlY3V0b3JKb2JSZXNwb25zZRIjCgNqb2IYASABKAsyFi50YWlsb3IudjEuRXhlY3V0b3JKb2Ii9gEKF0xpc3RFeGVjdXRvckpvYnNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESPwoNZXhlY3V0b3JfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBISCgpwYWdlX3Rva2VuGAMgASgJEhEKCXBhZ2Vfc2l6ZRgEIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgFIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uEiEKBmZpbHRlchgGIAEoCzIRLnRhaWxvci52MS5GaWx0ZXIibgoYTGlzdEV4ZWN1dG9ySm9ic1Jlc3BvbnNlEiQKBGpvYnMYASADKAsyFi50YWlsb3IudjEuRXhlY3V0b3JKb2ISFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIrMBCh5MaXN0RXhlY3V0b3JKb2JBdHRlbXB0c1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIYCgZqb2JfaWQYAiABKAlCCLpIBXIDsAEBEhIKCnBhZ2VfdG9rZW4YAyABKAkSEQoJcGFnZV9zaXplGAQgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAUgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24igAEKH0xpc3RFeGVjdXRvckpvYkF0dGVtcHRzUmVzcG9uc2USLwoIYXR0ZW1wdHMYASADKAsyHS50YWlsb3IudjEuRXhlY3V0b3JKb2JBdHRlbXB0EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyKeAQojTGlzdEV4ZWN1dG9ySW5jb21pbmdXZWJob29rc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIooBCiRMaXN0RXhlY3V0b3JJbmNvbWluZ1dlYmhvb2tzUmVzcG9uc2USNAoId2ViaG9va3MYASADKAsyIi50YWlsb3IudjEuRXhlY3V0b3JJbmNvbWluZ1dlYmhvb2sSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDInsKIUdldEV4ZWN1dG9ySW5jb21pbmdXZWJob29rUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjYKBG5hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiWQoiR2V0RXhlY3V0b3JJbmNvbWluZ1dlYmhvb2tSZXNwb25zZRIzCgd3ZWJob29rGAEgASgLMiIudGFpbG9yLnYxLkV4ZWN1dG9ySW5jb21pbmdXZWJob29rYgZwcm90bzM\", [file_buf_validate_validate, file_tailor_v1_executor_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.CreateExecutorExecutorRequest.\n * Use `create(CreateExecutorExecutorRequestSchema)` to create a new message.\n */\nexport const CreateExecutorExecutorRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 0);\n\n/**\n * Describes the message tailor.v1.CreateExecutorExecutorResponse.\n * Use `create(CreateExecutorExecutorResponseSchema)` to create a new message.\n */\nexport const CreateExecutorExecutorResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 1);\n\n/**\n * Describes the message tailor.v1.UpdateExecutorExecutorRequest.\n * Use `create(UpdateExecutorExecutorRequestSchema)` to create a new message.\n */\nexport const UpdateExecutorExecutorRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 2);\n\n/**\n * Describes the message tailor.v1.UpdateExecutorExecutorResponse.\n * Use `create(UpdateExecutorExecutorResponseSchema)` to create a new message.\n */\nexport const UpdateExecutorExecutorResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 3);\n\n/**\n * Describes the message tailor.v1.GetExecutorExecutorRequest.\n * Use `create(GetExecutorExecutorRequestSchema)` to create a new message.\n */\nexport const GetExecutorExecutorRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 4);\n\n/**\n * Describes the message tailor.v1.GetExecutorExecutorResponse.\n * Use `create(GetExecutorExecutorResponseSchema)` to create a new message.\n */\nexport const GetExecutorExecutorResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 5);\n\n/**\n * Describes the message tailor.v1.DeleteExecutorExecutorRequest.\n * Use `create(DeleteExecutorExecutorRequestSchema)` to create a new message.\n */\nexport const DeleteExecutorExecutorRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 6);\n\n/**\n * Describes the message tailor.v1.DeleteExecutorExecutorResponse.\n * Use `create(DeleteExecutorExecutorResponseSchema)` to create a new message.\n */\nexport const DeleteExecutorExecutorResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 7);\n\n/**\n * Describes the message tailor.v1.ListExecutorExecutorsRequest.\n * Use `create(ListExecutorExecutorsRequestSchema)` to create a new message.\n */\nexport const ListExecutorExecutorsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 8);\n\n/**\n * Describes the message tailor.v1.ListExecutorExecutorsResponse.\n * Use `create(ListExecutorExecutorsResponseSchema)` to create a new message.\n */\nexport const ListExecutorExecutorsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 9);\n\n/**\n * Describes the message tailor.v1.GetExecutorJobRequest.\n * Use `create(GetExecutorJobRequestSchema)` to create a new message.\n */\nexport const GetExecutorJobRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 10);\n\n/**\n * Describes the message tailor.v1.GetExecutorJobResponse.\n * Use `create(GetExecutorJobResponseSchema)` to create a new message.\n */\nexport const GetExecutorJobResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 11);\n\n/**\n * Describes the message tailor.v1.ListExecutorJobsRequest.\n * Use `create(ListExecutorJobsRequestSchema)` to create a new message.\n */\nexport const ListExecutorJobsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 12);\n\n/**\n * Describes the message tailor.v1.ListExecutorJobsResponse.\n * Use `create(ListExecutorJobsResponseSchema)` to create a new message.\n */\nexport const ListExecutorJobsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 13);\n\n/**\n * Describes the message tailor.v1.ListExecutorJobAttemptsRequest.\n * Use `create(ListExecutorJobAttemptsRequestSchema)` to create a new message.\n */\nexport const ListExecutorJobAttemptsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 14);\n\n/**\n * Describes the message tailor.v1.ListExecutorJobAttemptsResponse.\n * Use `create(ListExecutorJobAttemptsResponseSchema)` to create a new message.\n */\nexport const ListExecutorJobAttemptsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 15);\n\n/**\n * Describes the message tailor.v1.ListExecutorIncomingWebhooksRequest.\n * Use `create(ListExecutorIncomingWebhooksRequestSchema)` to create a new message.\n */\nexport const ListExecutorIncomingWebhooksRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 16);\n\n/**\n * Describes the message tailor.v1.ListExecutorIncomingWebhooksResponse.\n * Use `create(ListExecutorIncomingWebhooksResponseSchema)` to create a new message.\n */\nexport const ListExecutorIncomingWebhooksResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 17);\n\n/**\n * Describes the message tailor.v1.GetExecutorIncomingWebhookRequest.\n * Use `create(GetExecutorIncomingWebhookRequestSchema)` to create a new message.\n */\nexport const GetExecutorIncomingWebhookRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 18);\n\n/**\n * Describes the message tailor.v1.GetExecutorIncomingWebhookResponse.\n * Use `create(GetExecutorIncomingWebhookResponseSchema)` to create a new message.\n */\nexport const GetExecutorIncomingWebhookResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_executor, 19);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/function_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/function_resource.proto.\n */\nexport const file_tailor_v1_function_resource = /*@__PURE__*/\n fileDesc(\"CiF0YWlsb3IvdjEvZnVuY3Rpb25fcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSLrAwoRRnVuY3Rpb25FeGVjdXRpb24SFAoCaWQYASABKAlCCLpIBXIDsAEBEh4KDHdvcmtzcGFjZV9pZBgCIAEoCUIIukgFcgOwAQESEwoLc2NyaXB0X25hbWUYAyABKAkSMwoGc3RhdHVzGAQgASgOMiMudGFpbG9yLnYxLkZ1bmN0aW9uRXhlY3V0aW9uLlN0YXR1cxIMCgRsb2dzGAUgASgJEi4KCnN0YXJ0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi8KC2ZpbmlzaGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBI7CgR0eXBlGAggASgOMiEudGFpbG9yLnYxLkZ1bmN0aW9uRXhlY3V0aW9uLlR5cGVCCrpIB4IBBBgBGAISDgoGcmVzdWx0GAkgASgJIlsKBlN0YXR1cxIWChJTVEFUVVNfVU5TUEVDSUZJRUQQABISCg5TVEFUVVNfU1VDQ0VTUxABEhEKDVNUQVRVU19GQUlMRUQQAhISCg5TVEFUVVNfUlVOTklORxADIj0KBFR5cGUSFAoQVFlQRV9VTlNQRUNJRklFRBAAEhEKDVRZUEVfU1RBTkRBUkQQARIMCghUWVBFX0pPQhACYgZwcm90bzM\", [file_buf_validate_validate, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.FunctionExecution.\n * Use `create(FunctionExecutionSchema)` to create a new message.\n */\nexport const FunctionExecutionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function_resource, 0);\n\n/**\n * Describes the enum tailor.v1.FunctionExecution.Status.\n */\nexport const FunctionExecution_StatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_function_resource, 0, 0);\n\n/**\n * @generated from enum tailor.v1.FunctionExecution.Status\n */\nexport const FunctionExecution_Status = /*@__PURE__*/\n tsEnum(FunctionExecution_StatusSchema);\n\n/**\n * Describes the enum tailor.v1.FunctionExecution.Type.\n */\nexport const FunctionExecution_TypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_function_resource, 0, 1);\n\n/**\n * @generated from enum tailor.v1.FunctionExecution.Type\n */\nexport const FunctionExecution_Type = /*@__PURE__*/\n tsEnum(FunctionExecution_TypeSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/function.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_auth_resource } from \"./auth_resource_pb\";\nimport { file_tailor_v1_function_resource } from \"./function_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/function.proto.\n */\nexport const file_tailor_v1_function = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvZnVuY3Rpb24ucHJvdG8SCXRhaWxvci52MSKcAQoVVGVzdEV4ZWNTY3JpcHRSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESDAoEbmFtZRgCIAEoCRIMCgRjb2RlGAMgASgJEhAKA2FyZxgEIAEoCUgAiAEBEicKB2ludm9rZXIYBSABKAsyFi50YWlsb3IudjEuQXV0aEludm9rZXJCBgoEX2FyZ0oECAYQByJOChZUZXN0RXhlY1NjcmlwdFJlc3BvbnNlEg4KBnJlc3VsdBgBIAEoCRIeCgxleGVjdXRpb25faWQYAyABKAlCCLpIBXIDsAEBSgQIAhADIl0KG0dldEZ1bmN0aW9uRXhlY3V0aW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEh4KDGV4ZWN1dGlvbl9pZBgCIAEoCUIIukgFcgOwAQEiTwocR2V0RnVuY3Rpb25FeGVjdXRpb25SZXNwb25zZRIvCglleGVjdXRpb24YASABKAsyHC50YWlsb3IudjEuRnVuY3Rpb25FeGVjdXRpb24izAEKHUxpc3RGdW5jdGlvbkV4ZWN1dGlvbnNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbhIhCgZmaWx0ZXIYBSABKAsyES50YWlsb3IudjEuRmlsdGVyEg8KB3NvcnRfYnkYBiABKAkigAEKHkxpc3RGdW5jdGlvbkV4ZWN1dGlvbnNSZXNwb25zZRIwCgpleGVjdXRpb25zGAEgAygLMhwudGFpbG9yLnYxLkZ1bmN0aW9uRXhlY3V0aW9uEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoA2IGcHJvdG8z\", [file_buf_validate_validate, file_tailor_v1_auth_resource, file_tailor_v1_function_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.TestExecScriptRequest.\n * Use `create(TestExecScriptRequestSchema)` to create a new message.\n */\nexport const TestExecScriptRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function, 0);\n\n/**\n * Describes the message tailor.v1.TestExecScriptResponse.\n * Use `create(TestExecScriptResponseSchema)` to create a new message.\n */\nexport const TestExecScriptResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function, 1);\n\n/**\n * Describes the message tailor.v1.GetFunctionExecutionRequest.\n * Use `create(GetFunctionExecutionRequestSchema)` to create a new message.\n */\nexport const GetFunctionExecutionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function, 2);\n\n/**\n * Describes the message tailor.v1.GetFunctionExecutionResponse.\n * Use `create(GetFunctionExecutionResponseSchema)` to create a new message.\n */\nexport const GetFunctionExecutionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function, 3);\n\n/**\n * Describes the message tailor.v1.ListFunctionExecutionsRequest.\n * Use `create(ListFunctionExecutionsRequestSchema)` to create a new message.\n */\nexport const ListFunctionExecutionsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function, 4);\n\n/**\n * Describes the message tailor.v1.ListFunctionExecutionsResponse.\n * Use `create(ListFunctionExecutionsResponseSchema)` to create a new message.\n */\nexport const ListFunctionExecutionsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_function, 5);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/idp_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/idp_resource.proto.\n */\nexport const file_tailor_v1_idp_resource = /*@__PURE__*/\n fileDesc(\"Chx0YWlsb3IvdjEvaWRwX3Jlc291cmNlLnByb3RvEgl0YWlsb3IudjEinwEKCklkUFNlcnZpY2USJwoJbmFtZXNwYWNlGAEgASgLMhQudGFpbG9yLnYxLk5hbWVzcGFjZRIVCg1hdXRob3JpemF0aW9uGAIgASgJEhkKDHByb3ZpZGVyX3VybBgDIAEoCUID4EEDEjYKEHVzZXJfYXV0aF9wb2xpY3kYBCABKAsyHC50YWlsb3IudjEuSWRQVXNlckF1dGhQb2xpY3kiTQoJSWRQQ2xpZW50EgwKBG5hbWUYASABKAkSFgoJY2xpZW50X2lkGAIgASgJQgPgQQMSGgoNY2xpZW50X3NlY3JldBgDIAEoCUID4EEDIjUKEUlkUFVzZXJBdXRoUG9saWN5EiAKGHVzZV9ub25fZW1haWxfaWRlbnRpZmllchgBIAEoCGIGcHJvdG8z\", [file_google_api_field_behavior, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.IdPService.\n * Use `create(IdPServiceSchema)` to create a new message.\n */\nexport const IdPServiceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp_resource, 0);\n\n/**\n * Describes the message tailor.v1.IdPClient.\n * Use `create(IdPClientSchema)` to create a new message.\n */\nexport const IdPClientSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp_resource, 1);\n\n/**\n * Describes the message tailor.v1.IdPUserAuthPolicy.\n * Use `create(IdPUserAuthPolicySchema)` to create a new message.\n */\nexport const IdPUserAuthPolicySchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp_resource, 2);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/idp.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_idp_resource } from \"./idp_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/idp.proto.\n */\nexport const file_tailor_v1_idp = /*@__PURE__*/\n fileDesc(\"ChN0YWlsb3IvdjEvaWRwLnByb3RvEgl0YWlsb3IudjEikQEKFkxpc3RJZFBTZXJ2aWNlc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uInQKF0xpc3RJZFBTZXJ2aWNlc1Jlc3BvbnNlEisKDGlkcF9zZXJ2aWNlcxgBIAMoCzIVLnRhaWxvci52MS5JZFBTZXJ2aWNlEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyLKAQoXQ3JlYXRlSWRQU2VydmljZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIVCg1hdXRob3JpemF0aW9uGAMgASgJEjYKEHVzZXJfYXV0aF9wb2xpY3kYBCABKAsyHC50YWlsb3IudjEuSWRQVXNlckF1dGhQb2xpY3kiRgoYQ3JlYXRlSWRQU2VydmljZVJlc3BvbnNlEioKC2lkcF9zZXJ2aWNlGAEgASgLMhUudGFpbG9yLnYxLklkUFNlcnZpY2UiygEKF1VwZGF0ZUlkUFNlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSFQoNYXV0aG9yaXphdGlvbhgDIAEoCRI2ChB1c2VyX2F1dGhfcG9saWN5GAQgASgLMhwudGFpbG9yLnYxLklkUFVzZXJBdXRoUG9saWN5IkYKGFVwZGF0ZUlkUFNlcnZpY2VSZXNwb25zZRIqCgtpZHBfc2VydmljZRgBIAEoCzIVLnRhaWxvci52MS5JZFBTZXJ2aWNlInsKF0RlbGV0ZUlkUFNlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiGgoYRGVsZXRlSWRQU2VydmljZVJlc3BvbnNlIngKFEdldElkUFNlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiQwoVR2V0SWRQU2VydmljZVJlc3BvbnNlEioKC2lkcF9zZXJ2aWNlGAEgASgLMhUudGFpbG9yLnYxLklkUFNlcnZpY2Ui0gEKFUxpc3RJZFBDbGllbnRzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhIKCnBhZ2VfdG9rZW4YAyABKAkSEQoJcGFnZV9zaXplGAQgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAUgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24ibQoWTGlzdElkUENsaWVudHNSZXNwb25zZRIlCgdjbGllbnRzGAEgAygLMhQudGFpbG9yLnYxLklkUENsaWVudBIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMioAEKFkNyZWF0ZUlkUENsaWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIkCgZjbGllbnQYAyABKAsyFC50YWlsb3IudjEuSWRQQ2xpZW50Ij8KF0NyZWF0ZUlkUENsaWVudFJlc3BvbnNlEiQKBmNsaWVudBgBIAEoCzIULnRhaWxvci52MS5JZFBDbGllbnQirwEKE0dldElkUENsaWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI2CgRuYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIjwKFEdldElkUENsaWVudFJlc3BvbnNlEiQKBmNsaWVudBgBIAEoCzIULnRhaWxvci52MS5JZFBDbGllbnQisgEKFkRlbGV0ZUlkUENsaWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI2CgRuYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIhkKF0RlbGV0ZUlkUENsaWVudFJlc3BvbnNlYgZwcm90bzM\", [file_buf_validate_validate, file_tailor_v1_idp_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.ListIdPServicesRequest.\n * Use `create(ListIdPServicesRequestSchema)` to create a new message.\n */\nexport const ListIdPServicesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 0);\n\n/**\n * Describes the message tailor.v1.ListIdPServicesResponse.\n * Use `create(ListIdPServicesResponseSchema)` to create a new message.\n */\nexport const ListIdPServicesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 1);\n\n/**\n * Describes the message tailor.v1.CreateIdPServiceRequest.\n * Use `create(CreateIdPServiceRequestSchema)` to create a new message.\n */\nexport const CreateIdPServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 2);\n\n/**\n * Describes the message tailor.v1.CreateIdPServiceResponse.\n * Use `create(CreateIdPServiceResponseSchema)` to create a new message.\n */\nexport const CreateIdPServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 3);\n\n/**\n * Describes the message tailor.v1.UpdateIdPServiceRequest.\n * Use `create(UpdateIdPServiceRequestSchema)` to create a new message.\n */\nexport const UpdateIdPServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 4);\n\n/**\n * Describes the message tailor.v1.UpdateIdPServiceResponse.\n * Use `create(UpdateIdPServiceResponseSchema)` to create a new message.\n */\nexport const UpdateIdPServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 5);\n\n/**\n * Describes the message tailor.v1.DeleteIdPServiceRequest.\n * Use `create(DeleteIdPServiceRequestSchema)` to create a new message.\n */\nexport const DeleteIdPServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 6);\n\n/**\n * Describes the message tailor.v1.DeleteIdPServiceResponse.\n * Use `create(DeleteIdPServiceResponseSchema)` to create a new message.\n */\nexport const DeleteIdPServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 7);\n\n/**\n * Describes the message tailor.v1.GetIdPServiceRequest.\n * Use `create(GetIdPServiceRequestSchema)` to create a new message.\n */\nexport const GetIdPServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 8);\n\n/**\n * Describes the message tailor.v1.GetIdPServiceResponse.\n * Use `create(GetIdPServiceResponseSchema)` to create a new message.\n */\nexport const GetIdPServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 9);\n\n/**\n * Describes the message tailor.v1.ListIdPClientsRequest.\n * Use `create(ListIdPClientsRequestSchema)` to create a new message.\n */\nexport const ListIdPClientsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 10);\n\n/**\n * Describes the message tailor.v1.ListIdPClientsResponse.\n * Use `create(ListIdPClientsResponseSchema)` to create a new message.\n */\nexport const ListIdPClientsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 11);\n\n/**\n * Describes the message tailor.v1.CreateIdPClientRequest.\n * Use `create(CreateIdPClientRequestSchema)` to create a new message.\n */\nexport const CreateIdPClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 12);\n\n/**\n * Describes the message tailor.v1.CreateIdPClientResponse.\n * Use `create(CreateIdPClientResponseSchema)` to create a new message.\n */\nexport const CreateIdPClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 13);\n\n/**\n * Describes the message tailor.v1.GetIdPClientRequest.\n * Use `create(GetIdPClientRequestSchema)` to create a new message.\n */\nexport const GetIdPClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 14);\n\n/**\n * Describes the message tailor.v1.GetIdPClientResponse.\n * Use `create(GetIdPClientResponseSchema)` to create a new message.\n */\nexport const GetIdPClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 15);\n\n/**\n * Describes the message tailor.v1.DeleteIdPClientRequest.\n * Use `create(DeleteIdPClientRequestSchema)` to create a new message.\n */\nexport const DeleteIdPClientRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 16);\n\n/**\n * Describes the message tailor.v1.DeleteIdPClientResponse.\n * Use `create(DeleteIdPClientResponseSchema)` to create a new message.\n */\nexport const DeleteIdPClientResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_idp, 17);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/metadata_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\n\n/**\n * Describes the file tailor/v1/metadata_resource.proto.\n */\nexport const file_tailor_v1_metadata_resource = /*@__PURE__*/\n fileDesc(\"CiF0YWlsb3IvdjEvbWV0YWRhdGFfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSJqCghNZXRhZGF0YRIvCgZsYWJlbHMYASADKAsyHy50YWlsb3IudjEuTWV0YWRhdGEuTGFiZWxzRW50cnkaLQoLTGFiZWxzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4AWIGcHJvdG8z\");\n\n/**\n * Describes the message tailor.v1.Metadata.\n * Use `create(MetadataSchema)` to create a new message.\n */\nexport const MetadataSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_metadata_resource, 0);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/metadata.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_metadata_resource } from \"./metadata_resource_pb\";\n\n/**\n * Describes the file tailor/v1/metadata.proto.\n */\nexport const file_tailor_v1_metadata = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvbWV0YWRhdGEucHJvdG8SCXRhaWxvci52MSLJAgoSU2V0TWV0YWRhdGFSZXF1ZXN0EoMBCgN0cm4YASABKAlCdrpIc3JxMm9edHJuOnYxOndvcmtzcGFjZTpbMC05YS1mQS1GXXs4fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXs0fS1bMC05YS1mQS1GXXsxMn06W2EtekEtWjAtOV86Ki1dKyQSfgoGbGFiZWxzGAIgAygLMikudGFpbG9yLnYxLlNldE1ldGFkYXRhUmVxdWVzdC5MYWJlbHNFbnRyeUJDukhAmgE9IhtyGTIXXlthLXpdW2EtejAtOV8tXXswLDYyfSQqHnIcMhpeJHxeW2Etel1bYS16MC05Xy1dezAsNjJ9JBotCgtMYWJlbHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIjwKE1NldE1ldGFkYXRhUmVzcG9uc2USJQoIbWV0YWRhdGEYASABKAsyEy50YWlsb3IudjEuTWV0YWRhdGEimgEKEkdldE1ldGFkYXRhUmVxdWVzdBKDAQoDdHJuGAEgASgJQna6SHNycTJvXnRybjp2MTp3b3Jrc3BhY2U6WzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9OlthLXpBLVowLTlfOiotXSskIjwKE0dldE1ldGFkYXRhUmVzcG9uc2USJQoIbWV0YWRhdGEYASABKAsyEy50YWlsb3IudjEuTWV0YWRhdGFiBnByb3RvMw\", [file_buf_validate_validate, file_tailor_v1_metadata_resource]);\n\n/**\n * Describes the message tailor.v1.SetMetadataRequest.\n * Use `create(SetMetadataRequestSchema)` to create a new message.\n */\nexport const SetMetadataRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_metadata, 0);\n\n/**\n * Describes the message tailor.v1.SetMetadataResponse.\n * Use `create(SetMetadataResponseSchema)` to create a new message.\n */\nexport const SetMetadataResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_metadata, 1);\n\n/**\n * Describes the message tailor.v1.GetMetadataRequest.\n * Use `create(GetMetadataRequestSchema)` to create a new message.\n */\nexport const GetMetadataRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_metadata, 2);\n\n/**\n * Describes the message tailor.v1.GetMetadataResponse.\n * Use `create(GetMetadataResponseSchema)` to create a new message.\n */\nexport const GetMetadataResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_metadata, 3);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/meter.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_duration, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/meter.proto.\n */\nexport const file_tailor_v1_meter = /*@__PURE__*/\n fileDesc(\"ChV0YWlsb3IvdjEvbWV0ZXIucHJvdG8SCXRhaWxvci52MSLsAQodTGlzdE1ldGVyUmVxdWVzdENvdW50c1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI2CgpzdGFydF90aW1lGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIGukgDyAEBEjQKCGVuZF90aW1lGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIGukgDyAEBEj0KBHN0ZXAYBCABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CFLpIEcgBAaoBCyIECICjBTIDCJAcIsUCCh5MaXN0TWV0ZXJSZXF1ZXN0Q291bnRzUmVzcG9uc2USTgoOcmVxdWVzdF9jb3VudHMYASADKAsyNi50YWlsb3IudjEuTGlzdE1ldGVyUmVxdWVzdENvdW50c1Jlc3BvbnNlLlJlcXVlc3RDb3VudBppCgxSZXF1ZXN0Q291bnQSGAoQYXBwbGljYXRpb25fbmFtZRgBIAEoCRI/CgZ2YWx1ZXMYAiADKAsyLy50YWlsb3IudjEuTGlzdE1ldGVyUmVxdWVzdENvdW50c1Jlc3BvbnNlLlZhbHVlGmgKBVZhbHVlEigKBGZyb20YASABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiYKAnRvGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBINCgVjb3VudBgDIAEoAyLuAQofTGlzdE1ldGVyRXhlY3V0aW9uQ291bnRzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjYKCnN0YXJ0X3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQga6SAPIAQESNAoIZW5kX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQga6SAPIAQESPQoEc3RlcBgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkIUukgRyAEBqgELIgQIgKMFMgMIkBwizQIKIExpc3RNZXRlckV4ZWN1dGlvbkNvdW50c1Jlc3BvbnNlElQKEGV4ZWN1dGlvbl9jb3VudHMYASADKAsyOi50YWlsb3IudjEuTGlzdE1ldGVyRXhlY3V0aW9uQ291bnRzUmVzcG9uc2UuRXhlY3V0aW9uQ291bnQaaQoORXhlY3V0aW9uQ291bnQSFAoMc2VydmljZV9uYW1lGAEgASgJEkEKBnZhbHVlcxgCIAMoCzIxLnRhaWxvci52MS5MaXN0TWV0ZXJFeGVjdXRpb25Db3VudHNSZXNwb25zZS5WYWx1ZRpoCgVWYWx1ZRIoCgRmcm9tGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBImCgJ0bxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDQoFY291bnQYAyABKAMi6gEKG0xpc3RNZXRlckV2ZW50Q291bnRzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjYKCnN0YXJ0X3RpbWUYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQga6SAPIAQESNAoIZW5kX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQga6SAPIAQESPQoEc3RlcBgEIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkIUukgRyAEBqgELIgQIgKMFMgMIkBwitQIKHExpc3RNZXRlckV2ZW50Q291bnRzUmVzcG9uc2USSAoMZXZlbnRfY291bnRzGAEgAygLMjIudGFpbG9yLnYxLkxpc3RNZXRlckV2ZW50Q291bnRzUmVzcG9uc2UuRXZlbnRDb3VudBphCgpFdmVudENvdW50EhQKDHNlcnZpY2VfbmFtZRgBIAEoCRI9CgZ2YWx1ZXMYAiADKAsyLS50YWlsb3IudjEuTGlzdE1ldGVyRXZlbnRDb3VudHNSZXNwb25zZS5WYWx1ZRpoCgVWYWx1ZRIoCgRmcm9tGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBImCgJ0bxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDQoFY291bnQYAyABKANiBnByb3RvMw\", [file_buf_validate_validate, file_google_protobuf_duration, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.ListMeterRequestCountsRequest.\n * Use `create(ListMeterRequestCountsRequestSchema)` to create a new message.\n */\nexport const ListMeterRequestCountsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 0);\n\n/**\n * Describes the message tailor.v1.ListMeterRequestCountsResponse.\n * Use `create(ListMeterRequestCountsResponseSchema)` to create a new message.\n */\nexport const ListMeterRequestCountsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 1);\n\n/**\n * Describes the message tailor.v1.ListMeterRequestCountsResponse.RequestCount.\n * Use `create(ListMeterRequestCountsResponse_RequestCountSchema)` to create a new message.\n */\nexport const ListMeterRequestCountsResponse_RequestCountSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 1, 0);\n\n/**\n * Describes the message tailor.v1.ListMeterRequestCountsResponse.Value.\n * Use `create(ListMeterRequestCountsResponse_ValueSchema)` to create a new message.\n */\nexport const ListMeterRequestCountsResponse_ValueSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 1, 1);\n\n/**\n * Describes the message tailor.v1.ListMeterExecutionCountsRequest.\n * Use `create(ListMeterExecutionCountsRequestSchema)` to create a new message.\n */\nexport const ListMeterExecutionCountsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 2);\n\n/**\n * Describes the message tailor.v1.ListMeterExecutionCountsResponse.\n * Use `create(ListMeterExecutionCountsResponseSchema)` to create a new message.\n */\nexport const ListMeterExecutionCountsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 3);\n\n/**\n * Describes the message tailor.v1.ListMeterExecutionCountsResponse.ExecutionCount.\n * Use `create(ListMeterExecutionCountsResponse_ExecutionCountSchema)` to create a new message.\n */\nexport const ListMeterExecutionCountsResponse_ExecutionCountSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 3, 0);\n\n/**\n * Describes the message tailor.v1.ListMeterExecutionCountsResponse.Value.\n * Use `create(ListMeterExecutionCountsResponse_ValueSchema)` to create a new message.\n */\nexport const ListMeterExecutionCountsResponse_ValueSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 3, 1);\n\n/**\n * Describes the message tailor.v1.ListMeterEventCountsRequest.\n * Use `create(ListMeterEventCountsRequestSchema)` to create a new message.\n */\nexport const ListMeterEventCountsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 4);\n\n/**\n * Describes the message tailor.v1.ListMeterEventCountsResponse.\n * Use `create(ListMeterEventCountsResponseSchema)` to create a new message.\n */\nexport const ListMeterEventCountsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 5);\n\n/**\n * Describes the message tailor.v1.ListMeterEventCountsResponse.EventCount.\n * Use `create(ListMeterEventCountsResponse_EventCountSchema)` to create a new message.\n */\nexport const ListMeterEventCountsResponse_EventCountSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 5, 0);\n\n/**\n * Describes the message tailor.v1.ListMeterEventCountsResponse.Value.\n * Use `create(ListMeterEventCountsResponse_ValueSchema)` to create a new message.\n */\nexport const ListMeterEventCountsResponse_ValueSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_meter, 5, 1);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/pipeline_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_struct, file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_v1_auth_resource } from \"./auth_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/pipeline_resource.proto.\n */\nexport const file_tailor_v1_pipeline_resource = /*@__PURE__*/\n fileDesc(\"CiF0YWlsb3IvdjEvcGlwZWxpbmVfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSJOCg9QaXBlbGluZVNlcnZpY2USJwoJbmFtZXNwYWNlGAEgASgLMhQudGFpbG9yLnYxLk5hbWVzcGFjZRISCgpjb21tb25fc2RsGAIgASgJIoUOChBQaXBlbGluZVJlc29sdmVyEgwKBG5hbWUYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSFQoNYXV0aG9yaXphdGlvbhgEIAEoCRIXCgpwcmVfc2NyaXB0GAUgASgJSACIAQESGAoLcG9zdF9zY3JpcHQYBiABKAlIAYgBARI3CglwaXBlbGluZXMYByADKAsyJC50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlci5QaXBlbGluZRIVCghvbl9lcnJvchgIIAEoCUgCiAEBEjEKBmlucHV0cxgJIAMoCzIhLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyLkZpZWxkEjgKCHJlc3BvbnNlGAogASgLMiEudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuRmllbGRIA4gBARIbCg5vcGVyYXRpb25fdHlwZRgLIAEoCUgEiAEBEiMKCHByZV9ob29rGAwgASgLMhEudGFpbG9yLnYxLlNjcmlwdBIkCglwb3N0X2hvb2sYDSABKAsyES50YWlsb3IudjEuU2NyaXB0EiAKGHB1Ymxpc2hfZXhlY3V0aW9uX2V2ZW50cxgOIAEoCBILCgNzZGwYDyABKAkavQEKBFR5cGUSDAoEa2luZBgBIAEoCRIMCgRuYW1lGAIgASgJEjEKBmZpZWxkcxgEIAMoCzIhLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyLkZpZWxkEhAKCHJlcXVpcmVkGAUgASgIEhMKC2Rlc2NyaXB0aW9uGAYgASgJEjkKDmFsbG93ZWRfdmFsdWVzGAcgAygLMiEudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuVmFsdWVKBAgDEAQaewoFRmllbGQSDAoEbmFtZRgBIAEoCRIuCgR0eXBlGAIgASgLMiAudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuVHlwZRINCgVhcnJheRgDIAEoCBIQCghyZXF1aXJlZBgEIAEoCBITCgtkZXNjcmlwdGlvbhgFIAEoCRpjCgVWYWx1ZRJFCgV2YWx1ZRgBIAEoCUI2ukgzcjEyHF5bYS16QS1aXVthLXpBLVowLTlfXXswLDYyfSRaBHRydWVaBWZhbHNlWgRudWxsEhMKC2Rlc2NyaXB0aW9uGAIgASgJGtEFCghQaXBlbGluZRIMCgRuYW1lGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEkEKDm9wZXJhdGlvbl90eXBlGAQgASgOMikudGFpbG9yLnYxLlBpcGVsaW5lUmVzb2x2ZXIuT3BlcmF0aW9uVHlwZRIdChBvcGVyYXRpb25fc291cmNlGAYgASgJSACIAQESHwoXc2tpcF9vcGVyYXRpb25fb25fZXJyb3IYByABKAgSEQoEdGVzdBgIIAEoCUgBiAEBEhsKDnByZV92YWxpZGF0aW9uGAkgASgJSAKIAQESFwoKcHJlX3NjcmlwdBgKIAEoCUgDiAEBEhgKC3Bvc3Rfc2NyaXB0GAsgASgJSASIAQESHAoPcG9zdF92YWxpZGF0aW9uGAwgASgJSAWIAQESGQoMY29udGV4dF9kYXRhGA0gASgJSAaIAQESFQoIZm9yX2VhY2gYDiABKAlIB4gBARIsCgdpbnZva2VyGA8gASgLMhYudGFpbG9yLnYxLkF1dGhJbnZva2VySAiIAQESIwoIcHJlX2hvb2sYECABKAsyES50YWlsb3IudjEuU2NyaXB0EiQKCXBvc3RfaG9vaxgRIAEoCzIRLnRhaWxvci52MS5TY3JpcHQSGwoOb3BlcmF0aW9uX25hbWUYEiABKAlICYgBARIpCg5vcGVyYXRpb25faG9vaxgTIAEoCzIRLnRhaWxvci52MS5TY3JpcHRCEwoRX29wZXJhdGlvbl9zb3VyY2VCBwoFX3Rlc3RCEQoPX3ByZV92YWxpZGF0aW9uQg0KC19wcmVfc2NyaXB0Qg4KDF9wb3N0X3NjcmlwdEISChBfcG9zdF92YWxpZGF0aW9uQg8KDV9jb250ZXh0X2RhdGFCCwoJX2Zvcl9lYWNoQgoKCF9pbnZva2VyQhEKD19vcGVyYXRpb25fbmFtZUoECAEQAkoECAUQBiJoCg1PcGVyYXRpb25UeXBlEh4KGk9QRVJBVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASGgoWT1BFUkFUSU9OX1RZUEVfR1JBUEhRTBABEhsKF09QRVJBVElPTl9UWVBFX0ZVTkNUSU9OEAJCDQoLX3ByZV9zY3JpcHRCDgoMX3Bvc3Rfc2NyaXB0QgsKCV9vbl9lcnJvckILCglfcmVzcG9uc2VCEQoPX29wZXJhdGlvbl90eXBlSgQIARACIkMKEVBpcGVsaW5lUmVzb2x2ZXJzEi4KCXJlc29sdmVycxgBIAMoCzIbLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyIqgFCh9QaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0EgoKAmlkGAEgASgJEhsKE3NvdXJjZV9leGVjdXRpb25faWQYAiABKAkSFQoNcmVzb2x2ZXJfbmFtZRgDIAEoCRJHCgZzdGF0dXMYBCABKA4yNy50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdC5SZXN1bHRTdGF0dXMSKAoHY29udGV4dBgFIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QSMAoPaW5pdGlhbF9jb250ZXh0GAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIaChJsYXN0X3BpcGVsaW5lX25hbWUYByABKAkSHAoUbGFzdF9waXBlbGluZV9hY3Rpb24YCCABKAkSDQoFZXJyb3IYCSABKAkSLgoKc3RhcnRlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLZmluaXNoZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIpUBCgxSZXN1bHRTdGF0dXMSHQoZUkVTVUxUX1NUQVRVU19VTlNQRUNJRklFRBAAEhYKElJFU1VMVF9TVEFUVVNfRE9ORRABEhgKFFJFU1VMVF9TVEFUVVNfRkFJTEVEEAISGQoVUkVTVUxUX1NUQVRVU19BQk9SVEVEEAMSGQoVUkVTVUxUX1NUQVRVU19SRVRSSUVEEARiBnByb3RvMw\", [file_buf_validate_validate, file_google_protobuf_struct, file_google_protobuf_timestamp, file_tailor_v1_auth_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.PipelineService.\n * Use `create(PipelineServiceSchema)` to create a new message.\n */\nexport const PipelineServiceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 0);\n\n/**\n * Describes the message tailor.v1.PipelineResolver.\n * Use `create(PipelineResolverSchema)` to create a new message.\n */\nexport const PipelineResolverSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 1);\n\n/**\n * Describes the message tailor.v1.PipelineResolver.Type.\n * Use `create(PipelineResolver_TypeSchema)` to create a new message.\n */\nexport const PipelineResolver_TypeSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 1, 0);\n\n/**\n * Describes the message tailor.v1.PipelineResolver.Field.\n * Use `create(PipelineResolver_FieldSchema)` to create a new message.\n */\nexport const PipelineResolver_FieldSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 1, 1);\n\n/**\n * Describes the message tailor.v1.PipelineResolver.Value.\n * Use `create(PipelineResolver_ValueSchema)` to create a new message.\n */\nexport const PipelineResolver_ValueSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 1, 2);\n\n/**\n * Describes the message tailor.v1.PipelineResolver.Pipeline.\n * Use `create(PipelineResolver_PipelineSchema)` to create a new message.\n */\nexport const PipelineResolver_PipelineSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 1, 3);\n\n/**\n * Describes the enum tailor.v1.PipelineResolver.OperationType.\n */\nexport const PipelineResolver_OperationTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_pipeline_resource, 1, 0);\n\n/**\n * @generated from enum tailor.v1.PipelineResolver.OperationType\n */\nexport const PipelineResolver_OperationType = /*@__PURE__*/\n tsEnum(PipelineResolver_OperationTypeSchema);\n\n/**\n * Describes the message tailor.v1.PipelineResolvers.\n * Use `create(PipelineResolversSchema)` to create a new message.\n */\nexport const PipelineResolversSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 2);\n\n/**\n * Describes the message tailor.v1.PipelineResolverExecutionResult.\n * Use `create(PipelineResolverExecutionResultSchema)` to create a new message.\n */\nexport const PipelineResolverExecutionResultSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline_resource, 3);\n\n/**\n * Describes the enum tailor.v1.PipelineResolverExecutionResult.ResultStatus.\n */\nexport const PipelineResolverExecutionResult_ResultStatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_pipeline_resource, 3, 0);\n\n/**\n * @generated from enum tailor.v1.PipelineResolverExecutionResult.ResultStatus\n */\nexport const PipelineResolverExecutionResult_ResultStatus = /*@__PURE__*/\n tsEnum(PipelineResolverExecutionResult_ResultStatusSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/pipeline.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_pipeline_resource } from \"./pipeline_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/pipeline.proto.\n */\nexport const file_tailor_v1_pipeline = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvcGlwZWxpbmUucHJvdG8SCXRhaWxvci52MSKUAQocQ3JlYXRlUGlwZWxpbmVTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhIKCmNvbW1vbl9zZGwYAyABKAkiVQodQ3JlYXRlUGlwZWxpbmVTZXJ2aWNlUmVzcG9uc2USNAoQcGlwZWxpbmVfc2VydmljZRgBIAEoCzIaLnRhaWxvci52MS5QaXBlbGluZVNlcnZpY2UilAEKHFVwZGF0ZVBpcGVsaW5lU2VydmljZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBISCgpjb21tb25fc2RsGAMgASgJIlUKHVVwZGF0ZVBpcGVsaW5lU2VydmljZVJlc3BvbnNlEjQKEHBpcGVsaW5lX3NlcnZpY2UYASABKAsyGi50YWlsb3IudjEuUGlwZWxpbmVTZXJ2aWNlIoABChxEZWxldGVQaXBlbGluZVNlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiHwodRGVsZXRlUGlwZWxpbmVTZXJ2aWNlUmVzcG9uc2UifQoZR2V0UGlwZWxpbmVTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIlIKGkdldFBpcGVsaW5lU2VydmljZVJlc3BvbnNlEjQKEHBpcGVsaW5lX3NlcnZpY2UYASABKAsyGi50YWlsb3IudjEuUGlwZWxpbmVTZXJ2aWNlIpYBChtMaXN0UGlwZWxpbmVTZXJ2aWNlc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIoMBChxMaXN0UGlwZWxpbmVTZXJ2aWNlc1Jlc3BvbnNlEjUKEXBpcGVsaW5lX3NlcnZpY2VzGAEgAygLMhoudGFpbG9yLnYxLlBpcGVsaW5lU2VydmljZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMiuQEKHUNyZWF0ZVBpcGVsaW5lUmVzb2x2ZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSNgoRcGlwZWxpbmVfcmVzb2x2ZXIYAyABKAsyGy50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlciJYCh5DcmVhdGVQaXBlbGluZVJlc29sdmVyUmVzcG9uc2USNgoRcGlwZWxpbmVfcmVzb2x2ZXIYASABKAsyGy50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlciK5AQodVXBkYXRlUGlwZWxpbmVSZXNvbHZlclJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI2ChFwaXBlbGluZV9yZXNvbHZlchgDIAEoCzIbLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyIlgKHlVwZGF0ZVBpcGVsaW5lUmVzb2x2ZXJSZXNwb25zZRI2ChFwaXBlbGluZV9yZXNvbHZlchgBIAEoCzIbLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyIpgBCh1EZWxldGVQaXBlbGluZVJlc29sdmVyUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhUKDXJlc29sdmVyX25hbWUYAyABKAkiIAoeRGVsZXRlUGlwZWxpbmVSZXNvbHZlclJlc3BvbnNlIn0KGUNvbXBvc2VQaXBlbGluZVNETFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIcChpDb21wb3NlUGlwZWxpbmVTRExSZXNwb25zZSKVAQoaR2V0UGlwZWxpbmVSZXNvbHZlclJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIVCg1yZXNvbHZlcl9uYW1lGAMgASgJIlUKG0dldFBpcGVsaW5lUmVzb2x2ZXJSZXNwb25zZRI2ChFwaXBlbGluZV9yZXNvbHZlchgBIAEoCzIbLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyIr0CChxMaXN0UGlwZWxpbmVSZXNvbHZlcnNSZXF1ZXN0EhIKCnBhZ2VfdG9rZW4YASABKAkSEQoJcGFnZV9zaXplGAIgASgNEh4KDHdvcmtzcGFjZV9pZBgDIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYBCABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSPwoWcGlwZWxpbmVfcmVzb2x2ZXJfdmlldxgFIAEoDjIfLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyVmlldxIhCgZmaWx0ZXIYBiABKAsyES50YWlsb3IudjEuRmlsdGVyEjAKDnBhZ2VfZGlyZWN0aW9uGAcgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24ihgEKHUxpc3RQaXBlbGluZVJlc29sdmVyc1Jlc3BvbnNlEhcKD25leHRfcGFnZV90b2tlbhgBIAEoCRI3ChJwaXBlbGluZV9yZXNvbHZlcnMYAiADKAsyGy50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlchITCgt0b3RhbF9jb3VudBgDIAEoAyLHAgorTGlzdFBpcGVsaW5lUmVzb2x2ZXJFeGVjdXRpb25SZXN1bHRzUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIeCgx3b3Jrc3BhY2VfaWQYAyABKAlCCLpIBXIDsAEBEhYKDm5hbWVzcGFjZV9uYW1lGAQgASgJEhUKDXJlc29sdmVyX25hbWUYBSABKAkSMAoOcGFnZV9kaXJlY3Rpb24YBiABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbhIhCgZmaWx0ZXIYByABKAsyES50YWlsb3IudjEuRmlsdGVyEjwKBHZpZXcYCCABKA4yLi50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdFZpZXcSDwoHc29ydF9ieRgJIAEoCSKZAQosTGlzdFBpcGVsaW5lUmVzb2x2ZXJFeGVjdXRpb25SZXN1bHRzUmVzcG9uc2USOwoHcmVzdWx0cxgBIAMoCzIqLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyKqAQopR2V0UGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIbCglyZXN1bHRfaWQYAiABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kImgKKkdldFBpcGVsaW5lUmVzb2x2ZXJFeGVjdXRpb25SZXN1bHRSZXNwb25zZRI6CgZyZXN1bHQYASABKAsyKi50YWlsb3IudjEuUGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdCK6AQoeUmVzdGFydFBpcGVsaW5lUmVzb2x2ZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSGwoJcmVzdWx0X2lkGAMgASgJQgi6SAVyA7ABARIZChFzdGFydF9mcm9tX2ZhaWxlZBgEIAEoCCJdCh9SZXN0YXJ0UGlwZWxpbmVSZXNvbHZlclJlc3BvbnNlEjoKBnJlc3VsdBgBIAEoCzIqLnRhaWxvci52MS5QaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0KoEBChRQaXBlbGluZVJlc29sdmVyVmlldxImCiJQSVBFTElORV9SRVNPTFZFUl9WSUVXX1VOU1BFQ0lGSUVEEAASIAocUElQRUxJTkVfUkVTT0xWRVJfVklFV19CQVNJQxABEh8KG1BJUEVMSU5FX1JFU09MVkVSX1ZJRVdfRlVMTBACKsMBCiNQaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0VmlldxI3CjNQSVBFTElORV9SRVNPTFZFUl9FWEVDVVRJT05fUkVTVUxUX1ZJRVdfVU5TUEVDSUZJRUQQABIxCi1QSVBFTElORV9SRVNPTFZFUl9FWEVDVVRJT05fUkVTVUxUX1ZJRVdfQkFTSUMQARIwCixQSVBFTElORV9SRVNPTFZFUl9FWEVDVVRJT05fUkVTVUxUX1ZJRVdfRlVMTBACYgZwcm90bzM\", [file_buf_validate_validate, file_tailor_v1_pipeline_resource, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.CreatePipelineServiceRequest.\n * Use `create(CreatePipelineServiceRequestSchema)` to create a new message.\n */\nexport const CreatePipelineServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 0);\n\n/**\n * Describes the message tailor.v1.CreatePipelineServiceResponse.\n * Use `create(CreatePipelineServiceResponseSchema)` to create a new message.\n */\nexport const CreatePipelineServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 1);\n\n/**\n * Describes the message tailor.v1.UpdatePipelineServiceRequest.\n * Use `create(UpdatePipelineServiceRequestSchema)` to create a new message.\n */\nexport const UpdatePipelineServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 2);\n\n/**\n * Describes the message tailor.v1.UpdatePipelineServiceResponse.\n * Use `create(UpdatePipelineServiceResponseSchema)` to create a new message.\n */\nexport const UpdatePipelineServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 3);\n\n/**\n * Describes the message tailor.v1.DeletePipelineServiceRequest.\n * Use `create(DeletePipelineServiceRequestSchema)` to create a new message.\n */\nexport const DeletePipelineServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 4);\n\n/**\n * Describes the message tailor.v1.DeletePipelineServiceResponse.\n * Use `create(DeletePipelineServiceResponseSchema)` to create a new message.\n */\nexport const DeletePipelineServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 5);\n\n/**\n * Describes the message tailor.v1.GetPipelineServiceRequest.\n * Use `create(GetPipelineServiceRequestSchema)` to create a new message.\n */\nexport const GetPipelineServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 6);\n\n/**\n * Describes the message tailor.v1.GetPipelineServiceResponse.\n * Use `create(GetPipelineServiceResponseSchema)` to create a new message.\n */\nexport const GetPipelineServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 7);\n\n/**\n * Describes the message tailor.v1.ListPipelineServicesRequest.\n * Use `create(ListPipelineServicesRequestSchema)` to create a new message.\n */\nexport const ListPipelineServicesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 8);\n\n/**\n * Describes the message tailor.v1.ListPipelineServicesResponse.\n * Use `create(ListPipelineServicesResponseSchema)` to create a new message.\n */\nexport const ListPipelineServicesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 9);\n\n/**\n * Describes the message tailor.v1.CreatePipelineResolverRequest.\n * Use `create(CreatePipelineResolverRequestSchema)` to create a new message.\n */\nexport const CreatePipelineResolverRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 10);\n\n/**\n * Describes the message tailor.v1.CreatePipelineResolverResponse.\n * Use `create(CreatePipelineResolverResponseSchema)` to create a new message.\n */\nexport const CreatePipelineResolverResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 11);\n\n/**\n * Describes the message tailor.v1.UpdatePipelineResolverRequest.\n * Use `create(UpdatePipelineResolverRequestSchema)` to create a new message.\n */\nexport const UpdatePipelineResolverRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 12);\n\n/**\n * Describes the message tailor.v1.UpdatePipelineResolverResponse.\n * Use `create(UpdatePipelineResolverResponseSchema)` to create a new message.\n */\nexport const UpdatePipelineResolverResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 13);\n\n/**\n * Describes the message tailor.v1.DeletePipelineResolverRequest.\n * Use `create(DeletePipelineResolverRequestSchema)` to create a new message.\n */\nexport const DeletePipelineResolverRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 14);\n\n/**\n * Describes the message tailor.v1.DeletePipelineResolverResponse.\n * Use `create(DeletePipelineResolverResponseSchema)` to create a new message.\n */\nexport const DeletePipelineResolverResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 15);\n\n/**\n * Describes the message tailor.v1.ComposePipelineSDLRequest.\n * Use `create(ComposePipelineSDLRequestSchema)` to create a new message.\n */\nexport const ComposePipelineSDLRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 16);\n\n/**\n * Describes the message tailor.v1.ComposePipelineSDLResponse.\n * Use `create(ComposePipelineSDLResponseSchema)` to create a new message.\n */\nexport const ComposePipelineSDLResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 17);\n\n/**\n * Describes the message tailor.v1.GetPipelineResolverRequest.\n * Use `create(GetPipelineResolverRequestSchema)` to create a new message.\n */\nexport const GetPipelineResolverRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 18);\n\n/**\n * Describes the message tailor.v1.GetPipelineResolverResponse.\n * Use `create(GetPipelineResolverResponseSchema)` to create a new message.\n */\nexport const GetPipelineResolverResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 19);\n\n/**\n * Describes the message tailor.v1.ListPipelineResolversRequest.\n * Use `create(ListPipelineResolversRequestSchema)` to create a new message.\n */\nexport const ListPipelineResolversRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 20);\n\n/**\n * Describes the message tailor.v1.ListPipelineResolversResponse.\n * Use `create(ListPipelineResolversResponseSchema)` to create a new message.\n */\nexport const ListPipelineResolversResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 21);\n\n/**\n * Describes the message tailor.v1.ListPipelineResolverExecutionResultsRequest.\n * Use `create(ListPipelineResolverExecutionResultsRequestSchema)` to create a new message.\n */\nexport const ListPipelineResolverExecutionResultsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 22);\n\n/**\n * Describes the message tailor.v1.ListPipelineResolverExecutionResultsResponse.\n * Use `create(ListPipelineResolverExecutionResultsResponseSchema)` to create a new message.\n */\nexport const ListPipelineResolverExecutionResultsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 23);\n\n/**\n * Describes the message tailor.v1.GetPipelineResolverExecutionResultRequest.\n * Use `create(GetPipelineResolverExecutionResultRequestSchema)` to create a new message.\n */\nexport const GetPipelineResolverExecutionResultRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 24);\n\n/**\n * Describes the message tailor.v1.GetPipelineResolverExecutionResultResponse.\n * Use `create(GetPipelineResolverExecutionResultResponseSchema)` to create a new message.\n */\nexport const GetPipelineResolverExecutionResultResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 25);\n\n/**\n * Describes the message tailor.v1.RestartPipelineResolverRequest.\n * Use `create(RestartPipelineResolverRequestSchema)` to create a new message.\n */\nexport const RestartPipelineResolverRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 26);\n\n/**\n * Describes the message tailor.v1.RestartPipelineResolverResponse.\n * Use `create(RestartPipelineResolverResponseSchema)` to create a new message.\n */\nexport const RestartPipelineResolverResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_pipeline, 27);\n\n/**\n * Describes the enum tailor.v1.PipelineResolverView.\n */\nexport const PipelineResolverViewSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_pipeline, 0);\n\n/**\n * @generated from enum tailor.v1.PipelineResolverView\n */\nexport const PipelineResolverView = /*@__PURE__*/\n tsEnum(PipelineResolverViewSchema);\n\n/**\n * Describes the enum tailor.v1.PipelineResolverExecutionResultView.\n */\nexport const PipelineResolverExecutionResultViewSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_pipeline, 1);\n\n/**\n * @generated from enum tailor.v1.PipelineResolverExecutionResultView\n */\nexport const PipelineResolverExecutionResultView = /*@__PURE__*/\n tsEnum(PipelineResolverExecutionResultViewSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/secret_manager.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_secret_manager_resource } from \"./secret_manager_resource_pb\";\n\n/**\n * Describes the file tailor/v1/secret_manager.proto.\n */\nexport const file_tailor_v1_secret_manager = /*@__PURE__*/\n fileDesc(\"Ch50YWlsb3IvdjEvc2VjcmV0X21hbmFnZXIucHJvdG8SCXRhaWxvci52MSKNAQofQ3JlYXRlU2VjcmV0TWFuYWdlclZhdWx0UmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkoKGHNlY3JldG1hbmFnZXJfdmF1bHRfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJQCiBDcmVhdGVTZWNyZXRNYW5hZ2VyVmF1bHRSZXNwb25zZRIsCgV2YXVsdBgBIAEoCzIdLnRhaWxvci52MS5TZWNyZXRNYW5hZ2VyVmF1bHQiigEKHEdldFNlY3JldE1hbmFnZXJWYXVsdFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJKChhzZWNyZXRtYW5hZ2VyX3ZhdWx0X25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiTQodR2V0U2VjcmV0TWFuYWdlclZhdWx0UmVzcG9uc2USLAoFdmF1bHQYASABKAsyHS50YWlsb3IudjEuU2VjcmV0TWFuYWdlclZhdWx0Io0BCh9EZWxldGVTZWNyZXRNYW5hZ2VyVmF1bHRSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESSgoYc2VjcmV0bWFuYWdlcl92YXVsdF9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIiIKIERlbGV0ZVNlY3JldE1hbmFnZXJWYXVsdFJlc3BvbnNlIpkBCh5MaXN0U2VjcmV0TWFuYWdlclZhdWx0c1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIn4KH0xpc3RTZWNyZXRNYW5hZ2VyVmF1bHRzUmVzcG9uc2USLQoGdmF1bHRzGAEgAygLMh0udGFpbG9yLnYxLlNlY3JldE1hbmFnZXJWYXVsdBIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMi/wEKIENyZWF0ZVNlY3JldE1hbmFnZXJTZWNyZXRSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESSgoYc2VjcmV0bWFuYWdlcl92YXVsdF9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEksKGXNlY3JldG1hbmFnZXJfc2VjcmV0X25hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSIgoac2VjcmV0bWFuYWdlcl9zZWNyZXRfdmFsdWUYBCABKAkiUwohQ3JlYXRlU2VjcmV0TWFuYWdlclNlY3JldFJlc3BvbnNlEi4KBnNlY3JldBgBIAEoCzIeLnRhaWxvci52MS5TZWNyZXRNYW5hZ2VyU2VjcmV0Iv8BCiBVcGRhdGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkoKGHNlY3JldG1hbmFnZXJfdmF1bHRfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJLChlzZWNyZXRtYW5hZ2VyX3NlY3JldF9uYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEiIKGnNlY3JldG1hbmFnZXJfc2VjcmV0X3ZhbHVlGAQgASgJIlMKIVVwZGF0ZVNlY3JldE1hbmFnZXJTZWNyZXRSZXNwb25zZRIuCgZzZWNyZXQYASABKAsyHi50YWlsb3IudjEuU2VjcmV0TWFuYWdlclNlY3JldCLbAQogRGVsZXRlU2VjcmV0TWFuYWdlclNlY3JldFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJKChhzZWNyZXRtYW5hZ2VyX3ZhdWx0X25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSSwoZc2VjcmV0bWFuYWdlcl9zZWNyZXRfbmFtZRgDIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCIjCiFEZWxldGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVzcG9uc2Ui2AEKHUdldFNlY3JldE1hbmFnZXJTZWNyZXRSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESSgoYc2VjcmV0bWFuYWdlcl92YXVsdF9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEksKGXNlY3JldG1hbmFnZXJfc2VjcmV0X25hbWUYAyABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiUAoeR2V0U2VjcmV0TWFuYWdlclNlY3JldFJlc3BvbnNlEi4KBnNlY3JldBgBIAEoCzIeLnRhaWxvci52MS5TZWNyZXRNYW5hZ2VyU2VjcmV0IuYBCh9MaXN0U2VjcmV0TWFuYWdlclNlY3JldHNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESSgoYc2VjcmV0bWFuYWdlcl92YXVsdF9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhIKCnBhZ2VfdG9rZW4YAyABKAkSEQoJcGFnZV9zaXplGAQgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAUgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24igQEKIExpc3RTZWNyZXRNYW5hZ2VyU2VjcmV0c1Jlc3BvbnNlEi8KB3NlY3JldHMYASADKAsyHi50YWlsb3IudjEuU2VjcmV0TWFuYWdlclNlY3JldBIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKANiBnByb3RvMw\", [file_buf_validate_validate, file_tailor_v1_resource, file_tailor_v1_secret_manager_resource]);\n\n/**\n * Describes the message tailor.v1.CreateSecretManagerVaultRequest.\n * Use `create(CreateSecretManagerVaultRequestSchema)` to create a new message.\n */\nexport const CreateSecretManagerVaultRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 0);\n\n/**\n * Describes the message tailor.v1.CreateSecretManagerVaultResponse.\n * Use `create(CreateSecretManagerVaultResponseSchema)` to create a new message.\n */\nexport const CreateSecretManagerVaultResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 1);\n\n/**\n * Describes the message tailor.v1.GetSecretManagerVaultRequest.\n * Use `create(GetSecretManagerVaultRequestSchema)` to create a new message.\n */\nexport const GetSecretManagerVaultRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 2);\n\n/**\n * Describes the message tailor.v1.GetSecretManagerVaultResponse.\n * Use `create(GetSecretManagerVaultResponseSchema)` to create a new message.\n */\nexport const GetSecretManagerVaultResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 3);\n\n/**\n * Describes the message tailor.v1.DeleteSecretManagerVaultRequest.\n * Use `create(DeleteSecretManagerVaultRequestSchema)` to create a new message.\n */\nexport const DeleteSecretManagerVaultRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 4);\n\n/**\n * Describes the message tailor.v1.DeleteSecretManagerVaultResponse.\n * Use `create(DeleteSecretManagerVaultResponseSchema)` to create a new message.\n */\nexport const DeleteSecretManagerVaultResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 5);\n\n/**\n * Describes the message tailor.v1.ListSecretManagerVaultsRequest.\n * Use `create(ListSecretManagerVaultsRequestSchema)` to create a new message.\n */\nexport const ListSecretManagerVaultsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 6);\n\n/**\n * Describes the message tailor.v1.ListSecretManagerVaultsResponse.\n * Use `create(ListSecretManagerVaultsResponseSchema)` to create a new message.\n */\nexport const ListSecretManagerVaultsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 7);\n\n/**\n * Describes the message tailor.v1.CreateSecretManagerSecretRequest.\n * Use `create(CreateSecretManagerSecretRequestSchema)` to create a new message.\n */\nexport const CreateSecretManagerSecretRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 8);\n\n/**\n * Describes the message tailor.v1.CreateSecretManagerSecretResponse.\n * Use `create(CreateSecretManagerSecretResponseSchema)` to create a new message.\n */\nexport const CreateSecretManagerSecretResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 9);\n\n/**\n * Describes the message tailor.v1.UpdateSecretManagerSecretRequest.\n * Use `create(UpdateSecretManagerSecretRequestSchema)` to create a new message.\n */\nexport const UpdateSecretManagerSecretRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 10);\n\n/**\n * Describes the message tailor.v1.UpdateSecretManagerSecretResponse.\n * Use `create(UpdateSecretManagerSecretResponseSchema)` to create a new message.\n */\nexport const UpdateSecretManagerSecretResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 11);\n\n/**\n * Describes the message tailor.v1.DeleteSecretManagerSecretRequest.\n * Use `create(DeleteSecretManagerSecretRequestSchema)` to create a new message.\n */\nexport const DeleteSecretManagerSecretRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 12);\n\n/**\n * Describes the message tailor.v1.DeleteSecretManagerSecretResponse.\n * Use `create(DeleteSecretManagerSecretResponseSchema)` to create a new message.\n */\nexport const DeleteSecretManagerSecretResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 13);\n\n/**\n * Describes the message tailor.v1.GetSecretManagerSecretRequest.\n * Use `create(GetSecretManagerSecretRequestSchema)` to create a new message.\n */\nexport const GetSecretManagerSecretRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 14);\n\n/**\n * Describes the message tailor.v1.GetSecretManagerSecretResponse.\n * Use `create(GetSecretManagerSecretResponseSchema)` to create a new message.\n */\nexport const GetSecretManagerSecretResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 15);\n\n/**\n * Describes the message tailor.v1.ListSecretManagerSecretsRequest.\n * Use `create(ListSecretManagerSecretsRequestSchema)` to create a new message.\n */\nexport const ListSecretManagerSecretsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 16);\n\n/**\n * Describes the message tailor.v1.ListSecretManagerSecretsResponse.\n * Use `create(ListSecretManagerSecretsResponseSchema)` to create a new message.\n */\nexport const ListSecretManagerSecretsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_secret_manager, 17);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/stateflow_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/stateflow_resource.proto.\n */\nexport const file_tailor_v1_stateflow_resource = /*@__PURE__*/\n fileDesc(\"CiJ0YWlsb3IvdjEvc3RhdGVmbG93X3Jlc291cmNlLnByb3RvEgl0YWlsb3IudjEilQEKEFN0YXRlZmxvd1NlcnZpY2USJwoJbmFtZXNwYWNlGAEgASgLMhQudGFpbG9yLnYxLk5hbWVzcGFjZRI6CgthZG1pbl91c2VycxgCIAMoCzIlLnRhaWxvci52MS5TdGF0ZWZsb3dTZXJ2aWNlLkFkbWluVXNlchocCglBZG1pblVzZXISDwoHdXNlcl9pZBgBIAEoCWIGcHJvdG8z\", [file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.StateflowService.\n * Use `create(StateflowServiceSchema)` to create a new message.\n */\nexport const StateflowServiceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow_resource, 0);\n\n/**\n * Describes the message tailor.v1.StateflowService.AdminUser.\n * Use `create(StateflowService_AdminUserSchema)` to create a new message.\n */\nexport const StateflowService_AdminUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow_resource, 0, 0);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/stateflow.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_stateflow_resource } from \"./stateflow_resource_pb\";\n\n/**\n * Describes the file tailor/v1/stateflow.proto.\n */\nexport const file_tailor_v1_stateflow = /*@__PURE__*/\n fileDesc(\"Chl0YWlsb3IvdjEvc3RhdGVmbG93LnByb3RvEgl0YWlsb3IudjEiqAEKHUNyZWF0ZVN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSJQoOYWRtaW5fdXNlcl9pZHMYAyADKAlCDbpICpIBByIFcgOwAQEiWAoeQ3JlYXRlU3RhdGVmbG93U2VydmljZVJlc3BvbnNlEjYKEXN0YXRlZmxvd19zZXJ2aWNlGAEgASgLMhsudGFpbG9yLnYxLlN0YXRlZmxvd1NlcnZpY2UiqAEKHVVwZGF0ZVN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSJQoOYWRtaW5fdXNlcl9pZHMYAyADKAlCDbpICpIBByIFcgOwAQEiWAoeVXBkYXRlU3RhdGVmbG93U2VydmljZVJlc3BvbnNlEjYKEXN0YXRlZmxvd19zZXJ2aWNlGAEgASgLMhsudGFpbG9yLnYxLlN0YXRlZmxvd1NlcnZpY2UigQEKHURlbGV0ZVN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiIAoeRGVsZXRlU3RhdGVmbG93U2VydmljZVJlc3BvbnNlIn4KGkdldFN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiVQobR2V0U3RhdGVmbG93U2VydmljZVJlc3BvbnNlEjYKEXN0YXRlZmxvd19zZXJ2aWNlGAEgASgLMhsudGFpbG9yLnYxLlN0YXRlZmxvd1NlcnZpY2UilwEKHExpc3RTdGF0ZWZsb3dTZXJ2aWNlc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIoYBCh1MaXN0U3RhdGVmbG93U2VydmljZXNSZXNwb25zZRI3ChJzdGF0ZWZsb3dfc2VydmljZXMYASADKAsyGy50YWlsb3IudjEuU3RhdGVmbG93U2VydmljZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKANiBnByb3RvMw\", [file_buf_validate_validate, file_tailor_v1_resource, file_tailor_v1_stateflow_resource]);\n\n/**\n * Describes the message tailor.v1.CreateStateflowServiceRequest.\n * Use `create(CreateStateflowServiceRequestSchema)` to create a new message.\n */\nexport const CreateStateflowServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 0);\n\n/**\n * Describes the message tailor.v1.CreateStateflowServiceResponse.\n * Use `create(CreateStateflowServiceResponseSchema)` to create a new message.\n */\nexport const CreateStateflowServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 1);\n\n/**\n * Describes the message tailor.v1.UpdateStateflowServiceRequest.\n * Use `create(UpdateStateflowServiceRequestSchema)` to create a new message.\n */\nexport const UpdateStateflowServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 2);\n\n/**\n * Describes the message tailor.v1.UpdateStateflowServiceResponse.\n * Use `create(UpdateStateflowServiceResponseSchema)` to create a new message.\n */\nexport const UpdateStateflowServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 3);\n\n/**\n * Describes the message tailor.v1.DeleteStateflowServiceRequest.\n * Use `create(DeleteStateflowServiceRequestSchema)` to create a new message.\n */\nexport const DeleteStateflowServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 4);\n\n/**\n * Describes the message tailor.v1.DeleteStateflowServiceResponse.\n * Use `create(DeleteStateflowServiceResponseSchema)` to create a new message.\n */\nexport const DeleteStateflowServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 5);\n\n/**\n * Describes the message tailor.v1.GetStateflowServiceRequest.\n * Use `create(GetStateflowServiceRequestSchema)` to create a new message.\n */\nexport const GetStateflowServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 6);\n\n/**\n * Describes the message tailor.v1.GetStateflowServiceResponse.\n * Use `create(GetStateflowServiceResponseSchema)` to create a new message.\n */\nexport const GetStateflowServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 7);\n\n/**\n * Describes the message tailor.v1.ListStateflowServicesRequest.\n * Use `create(ListStateflowServicesRequestSchema)` to create a new message.\n */\nexport const ListStateflowServicesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 8);\n\n/**\n * Describes the message tailor.v1.ListStateflowServicesResponse.\n * Use `create(ListStateflowServicesResponseSchema)` to create a new message.\n */\nexport const ListStateflowServicesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_stateflow, 9);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/staticwebsite_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\n\n/**\n * Describes the file tailor/v1/staticwebsite_resource.proto.\n */\nexport const file_tailor_v1_staticwebsite_resource = /*@__PURE__*/\n fileDesc(\"CiZ0YWlsb3IvdjEvc3RhdGljd2Vic2l0ZV9yZXNvdXJjZS5wcm90bxIJdGFpbG9yLnYxIowBCg1TdGF0aWNXZWJzaXRlEjYKBG5hbWUYASABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSEwoLZGVzY3JpcHRpb24YAiABKAkSHAoUYWxsb3dlZF9pcF9hZGRyZXNzZXMYAyADKAkSEAoDdXJsGAQgASgJQgPgQQNiBnByb3RvMw\", [file_buf_validate_validate, file_google_api_field_behavior]);\n\n/**\n * Describes the message tailor.v1.StaticWebsite.\n * Use `create(StaticWebsiteSchema)` to create a new message.\n */\nexport const StaticWebsiteSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite_resource, 0);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/staticwebsite.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_staticwebsite_resource } from \"./staticwebsite_resource_pb\";\n\n/**\n * Describes the file tailor/v1/staticwebsite.proto.\n */\nexport const file_tailor_v1_staticwebsite = /*@__PURE__*/\n fileDesc(\"Ch10YWlsb3IvdjEvc3RhdGljd2Vic2l0ZS5wcm90bxIJdGFpbG9yLnYxInUKGkNyZWF0ZVN0YXRpY1dlYnNpdGVSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESNwoNc3RhdGljd2Vic2l0ZRgCIAEoCzIYLnRhaWxvci52MS5TdGF0aWNXZWJzaXRlQga6SAPIAQEiTgobQ3JlYXRlU3RhdGljV2Vic2l0ZVJlc3BvbnNlEi8KDXN0YXRpY3dlYnNpdGUYASABKAsyGC50YWlsb3IudjEuU3RhdGljV2Vic2l0ZSJ1ChpVcGRhdGVTdGF0aWNXZWJzaXRlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEjcKDXN0YXRpY3dlYnNpdGUYAiABKAsyGC50YWlsb3IudjEuU3RhdGljV2Vic2l0ZUIGukgDyAEBIk4KG1VwZGF0ZVN0YXRpY1dlYnNpdGVSZXNwb25zZRIvCg1zdGF0aWN3ZWJzaXRlGAEgASgLMhgudGFpbG9yLnYxLlN0YXRpY1dlYnNpdGUicQoXR2V0U3RhdGljV2Vic2l0ZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI2CgRuYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIksKGEdldFN0YXRpY1dlYnNpdGVSZXNwb25zZRIvCg1zdGF0aWN3ZWJzaXRlGAEgASgLMhgudGFpbG9yLnYxLlN0YXRpY1dlYnNpdGUidAoaRGVsZXRlU3RhdGljV2Vic2l0ZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI2CgRuYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIh0KG0RlbGV0ZVN0YXRpY1dlYnNpdGVSZXNwb25zZSKUAQoZTGlzdFN0YXRpY1dlYnNpdGVzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhIKCnBhZ2VfdG9rZW4YAiABKAkSEQoJcGFnZV9zaXplGAMgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAQgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24ifAoaTGlzdFN0YXRpY1dlYnNpdGVzUmVzcG9uc2USMAoOc3RhdGljd2Vic2l0ZXMYASADKAsyGC50YWlsb3IudjEuU3RhdGljV2Vic2l0ZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMicQoXQ3JlYXRlRGVwbG95bWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI2CgRuYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIjsKGENyZWF0ZURlcGxveW1lbnRSZXNwb25zZRIfCg1kZXBsb3ltZW50X2lkGAEgASgJQgi6SAVyA7ABASK9AgoRVXBsb2FkRmlsZVJlcXVlc3QSTgoQaW5pdGlhbF9tZXRhZGF0YRgBIAEoCzIyLnRhaWxvci52MS5VcGxvYWRGaWxlUmVxdWVzdC5Jbml0aWFsVXBsb2FkTWV0YWRhdGFIABIUCgpjaHVua19kYXRhGAIgASgMSAAatgEKFUluaXRpYWxVcGxvYWRNZXRhZGF0YRIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEh8KDWRlcGxveW1lbnRfaWQYAiABKAlCCLpIBXIDsAEBEioKCWZpbGVfcGF0aBgDIAEoCUIXukgUchIyEF5bXi9dKygvW14vXSspKiQSMAoMY29udGVudF90eXBlGAQgASgJQhq6SBdyFTITXlteL10rL1teL10rKDsuKik/JEIJCgdwYXlsb2FkIhQKElVwbG9hZEZpbGVSZXNwb25zZSJbChhQdWJsaXNoRGVwbG95bWVudFJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIfCg1kZXBsb3ltZW50X2lkGAIgASgJQgi6SAVyA7ABASIoChlQdWJsaXNoRGVwbG95bWVudFJlc3BvbnNlEgsKA3VybBgBIAEoCWIGcHJvdG8z\", [file_buf_validate_validate, file_tailor_v1_resource, file_tailor_v1_staticwebsite_resource]);\n\n/**\n * Describes the message tailor.v1.CreateStaticWebsiteRequest.\n * Use `create(CreateStaticWebsiteRequestSchema)` to create a new message.\n */\nexport const CreateStaticWebsiteRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 0);\n\n/**\n * Describes the message tailor.v1.CreateStaticWebsiteResponse.\n * Use `create(CreateStaticWebsiteResponseSchema)` to create a new message.\n */\nexport const CreateStaticWebsiteResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 1);\n\n/**\n * Describes the message tailor.v1.UpdateStaticWebsiteRequest.\n * Use `create(UpdateStaticWebsiteRequestSchema)` to create a new message.\n */\nexport const UpdateStaticWebsiteRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 2);\n\n/**\n * Describes the message tailor.v1.UpdateStaticWebsiteResponse.\n * Use `create(UpdateStaticWebsiteResponseSchema)` to create a new message.\n */\nexport const UpdateStaticWebsiteResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 3);\n\n/**\n * Describes the message tailor.v1.GetStaticWebsiteRequest.\n * Use `create(GetStaticWebsiteRequestSchema)` to create a new message.\n */\nexport const GetStaticWebsiteRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 4);\n\n/**\n * Describes the message tailor.v1.GetStaticWebsiteResponse.\n * Use `create(GetStaticWebsiteResponseSchema)` to create a new message.\n */\nexport const GetStaticWebsiteResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 5);\n\n/**\n * Describes the message tailor.v1.DeleteStaticWebsiteRequest.\n * Use `create(DeleteStaticWebsiteRequestSchema)` to create a new message.\n */\nexport const DeleteStaticWebsiteRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 6);\n\n/**\n * Describes the message tailor.v1.DeleteStaticWebsiteResponse.\n * Use `create(DeleteStaticWebsiteResponseSchema)` to create a new message.\n */\nexport const DeleteStaticWebsiteResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 7);\n\n/**\n * Describes the message tailor.v1.ListStaticWebsitesRequest.\n * Use `create(ListStaticWebsitesRequestSchema)` to create a new message.\n */\nexport const ListStaticWebsitesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 8);\n\n/**\n * Describes the message tailor.v1.ListStaticWebsitesResponse.\n * Use `create(ListStaticWebsitesResponseSchema)` to create a new message.\n */\nexport const ListStaticWebsitesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 9);\n\n/**\n * Describes the message tailor.v1.CreateDeploymentRequest.\n * Use `create(CreateDeploymentRequestSchema)` to create a new message.\n */\nexport const CreateDeploymentRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 10);\n\n/**\n * Describes the message tailor.v1.CreateDeploymentResponse.\n * Use `create(CreateDeploymentResponseSchema)` to create a new message.\n */\nexport const CreateDeploymentResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 11);\n\n/**\n * Describes the message tailor.v1.UploadFileRequest.\n * Use `create(UploadFileRequestSchema)` to create a new message.\n */\nexport const UploadFileRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 12);\n\n/**\n * Describes the message tailor.v1.UploadFileRequest.InitialUploadMetadata.\n * Use `create(UploadFileRequest_InitialUploadMetadataSchema)` to create a new message.\n */\nexport const UploadFileRequest_InitialUploadMetadataSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 12, 0);\n\n/**\n * Describes the message tailor.v1.UploadFileResponse.\n * Use `create(UploadFileResponseSchema)` to create a new message.\n */\nexport const UploadFileResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 13);\n\n/**\n * Describes the message tailor.v1.PublishDeploymentRequest.\n * Use `create(PublishDeploymentRequestSchema)` to create a new message.\n */\nexport const PublishDeploymentRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 14);\n\n/**\n * Describes the message tailor.v1.PublishDeploymentResponse.\n * Use `create(PublishDeploymentResponseSchema)` to create a new message.\n */\nexport const PublishDeploymentResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_staticwebsite, 15);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/tailordb_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_struct } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\n\n/**\n * Describes the file tailor/v1/tailordb_resource.proto.\n */\nexport const file_tailor_v1_tailordb_resource = /*@__PURE__*/\n fileDesc(\"CiF0YWlsb3IvdjEvdGFpbG9yZGJfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSJUCg9UYWlsb3JEQlNlcnZpY2USJwoJbmFtZXNwYWNlGAEgASgLMhQudGFpbG9yLnYxLk5hbWVzcGFjZRIYChBkZWZhdWx0X3RpbWV6b25lGAIgASgJIsYlCgxUYWlsb3JEQlR5cGUSLQoEbmFtZRgBIAEoCUIfukgcchoyGF5bQS1aXVthLXpBLVowLTldezAsNjJ9JBIyCgZzY2hlbWEYAiABKAsyIi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlR5cGVDb25maWca3gcKClR5cGVDb25maWcSPgoGZmllbGRzGAEgAygLMi4udGFpbG9yLnYxLlRhaWxvckRCVHlwZS5UeXBlQ29uZmlnLkZpZWxkc0VudHJ5EhMKC2Rlc2NyaXB0aW9uGAIgASgJEjUKCHNldHRpbmdzGAMgASgLMiMudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5UeXBlU2V0dGluZxI/Cg90eXBlX3Blcm1pc3Npb24YBCABKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlR5cGVQZXJtaXNzaW9uEg8KB2V4dGVuZHMYBSABKAgSNQoKZGlyZWN0aXZlcxgGIAMoCzIhLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRGlyZWN0aXZlEkAKB2luZGV4ZXMYByADKAsyLy50YWlsb3IudjEuVGFpbG9yREJUeXBlLlR5cGVDb25maWcuSW5kZXhlc0VudHJ5EkgKEXJlY29yZF9wZXJtaXNzaW9uGAggASgLMigudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5SZWNvcmRQZXJtaXNzaW9uSACIAQESTAoNcmVsYXRpb25zaGlwcxgJIAMoCzI1LnRhaWxvci52MS5UYWlsb3JEQlR5cGUuVHlwZUNvbmZpZy5SZWxhdGlvbnNoaXBzRW50cnkSNgoKcGVybWlzc2lvbhgKIAEoCzIiLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbhI8CgVmaWxlcxgLIAMoCzItLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuVHlwZUNvbmZpZy5GaWxlc0VudHJ5GlIKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIyCgV2YWx1ZRgCIAEoCzIjLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRmllbGRDb25maWc6AjgBGk0KDEluZGV4ZXNFbnRyeRILCgNrZXkYASABKAkSLAoFdmFsdWUYAiABKAsyHS50YWlsb3IudjEuVGFpbG9yREJUeXBlLkluZGV4OgI4ARpgChJSZWxhdGlvbnNoaXBzRW50cnkSCwoDa2V5GAEgASgJEjkKBXZhbHVlGAIgASgLMioudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5SZWxhdGlvbnNoaXBDb25maWc6AjgBGlAKCkZpbGVzRW50cnkSCwoDa2V5GAEgASgJEjEKBXZhbHVlGAIgASgLMiIudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5GaWxlQ29uZmlnOgI4AUIUChJfcmVjb3JkX3Blcm1pc3Npb24avAIKC1R5cGVTZXR0aW5nEhMKC2FnZ3JlZ2F0aW9uGAIgASgIEhMKC2J1bGtfdXBzZXJ0GAMgASgIEiUKGGRlZmF1bHRfcXVlcnlfbGltaXRfc2l6ZRgEIAEoA0gAiAEBEiEKFG1heF9idWxrX3Vwc2VydF9zaXplGAUgASgDSAGIAQESPwoLcGx1cmFsX2Zvcm0YBiABKAlCJbpIItgBAXIdMhteJHxeW2Etel1bYS16QS1aMC05XXswLDYyfSRIAogBARIdChVwdWJsaXNoX3JlY29yZF9ldmVudHMYByABKAgSDQoFZHJhZnQYCCABKAhCGwoZX2RlZmF1bHRfcXVlcnlfbGltaXRfc2l6ZUIXChVfbWF4X2J1bGtfdXBzZXJ0X3NpemVCDgoMX3BsdXJhbF9mb3JtSgQIARACGk0KCURpcmVjdGl2ZRIMCgRuYW1lGAEgASgJEjIKBGFyZ3MYAiADKAsyJC50YWlsb3IudjEuVGFpbG9yREJUeXBlLkRpcmVjdGl2ZUFyZxorCgxEaXJlY3RpdmVBcmcSDAoEbmFtZRgBIAEoCRINCgV2YWx1ZRgCIAEoCRosCgVJbmRleBITCgtmaWVsZF9uYW1lcxgBIAMoCRIOCgZ1bmlxdWUYAiABKAgaogUKC0ZpZWxkQ29uZmlnEgwKBHR5cGUYASABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSFgoJc291cmNlX2lkGAQgASgJSACIAQESEAoIcmVxdWlyZWQYBSABKAgSDQoFYXJyYXkYBiABKAgSOAoIdmFsaWRhdGUYByADKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlZhbGlkYXRlQ29uZmlnEj8KBmZpZWxkcxgIIAMoCzIvLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRmllbGRDb25maWcuRmllbGRzRW50cnkSDQoFaW5kZXgYCSABKAgSDgoGdW5pcXVlGAogASgIEhMKC2ZvcmVpZ25fa2V5GAsgASgIEh0KEGZvcmVpZ25fa2V5X3R5cGUYDCABKAlIAYgBARIeChFmb3JlaWduX2tleV9maWVsZBgNIAEoCUgCiAEBEjUKBWhvb2tzGA4gASgLMiEudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5GaWVsZEhvb2tIA4gBARI1Cg5hbGxvd2VkX3ZhbHVlcxgPIAMoCzIdLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuVmFsdWUSDgoGdmVjdG9yGBAgASgIEi4KBnNlcmlhbBgRIAEoCzIeLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuU2VyaWFsGlIKC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIyCgV2YWx1ZRgCIAEoCzIjLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuRmllbGRDb25maWc6AjgBQgwKCl9zb3VyY2VfaWRCEwoRX2ZvcmVpZ25fa2V5X3R5cGVCFAoSX2ZvcmVpZ25fa2V5X2ZpZWxkQggKBl9ob29rc0oECAIQAxpwChJSZWxhdGlvbnNoaXBDb25maWcSEAoIcmVmX3R5cGUYASABKAkSEQoJcmVmX2ZpZWxkGAIgASgJEhEKCXNyY19maWVsZBgDIAEoCRINCgVhcnJheRgEIAEoCBITCgtkZXNjcmlwdGlvbhgFIAEoCRohCgpGaWxlQ29uZmlnEhMKC2Rlc2NyaXB0aW9uGAEgASgJGmMKBVZhbHVlEkUKBXZhbHVlGAEgASgJQja6SDNyMTIcXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNjJ9JFoEdHJ1ZVoFZmFsc2VaBG51bGwSEwoLZGVzY3JpcHRpb24YAiABKAkapQEKCUZpZWxkSG9vaxIYCgtjcmVhdGVfZXhwchgBIAEoCUgAiAEBEhgKC3VwZGF0ZV9leHByGAIgASgJSAGIAQESIQoGY3JlYXRlGAMgASgLMhEudGFpbG9yLnYxLlNjcmlwdBIhCgZ1cGRhdGUYBCABKAsyES50YWlsb3IudjEuU2NyaXB0Qg4KDF9jcmVhdGVfZXhwckIOCgxfdXBkYXRlX2V4cHIargEKBlNlcmlhbBIWCgVzdGFydBgBIAEoA0IHukgEIgIgABIfCgltYXhfdmFsdWUYAiABKANCB7pIBCICIABIAIgBARJSCgZmb3JtYXQYAyABKAlCPbpIOnI4GCAyNF4oPzooPzolJXxbXiVdKSopJSg/OlswLTldKyk/W2RveFhdKD86KD86JSV8W14lXSkqKSRIAYgBAUIMCgpfbWF4X3ZhbHVlQgkKB19mb3JtYXQasQEKDlZhbGlkYXRlQ29uZmlnEgwKBGV4cHIYASABKAkSQAoGYWN0aW9uGAIgASgOMiQudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXRBY3Rpb25CCrpIB4IBBBABIAASGgoNZXJyb3JfbWVzc2FnZRgDIAEoCUgAiAEBEiEKBnNjcmlwdBgEIAEoCzIRLnRhaWxvci52MS5TY3JpcHRCEAoOX2Vycm9yX21lc3NhZ2UapQIKDlR5cGVQZXJtaXNzaW9uEjYKBmNyZWF0ZRgBIAMoCzImLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbkl0ZW0SNAoEcmVhZBgCIAMoCzImLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbkl0ZW0SNgoGdXBkYXRlGAMgAygLMiYudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uSXRlbRI2CgZkZWxldGUYBCADKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb25JdGVtEjUKBWFkbWluGAUgAygLMiYudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uSXRlbRq4AQoQUmVjb3JkUGVybWlzc2lvbhI0CgRyZWFkGAEgAygLMiYudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uSXRlbRI2CgZ1cGRhdGUYAiADKAsyJi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb25JdGVtEjYKBmRlbGV0ZRgDIAMoCzImLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbkl0ZW0aawoOUGVybWlzc2lvbkl0ZW0SQAoGcGVybWl0GAEgASgOMiQudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXRBY3Rpb25CCrpIB4IBBBABIAASCgoCaWQYAiABKAkSCwoDaWRzGAMgAygJGpAICgpQZXJtaXNzaW9uEjkKBmNyZWF0ZRgBIAMoCzIpLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbi5Qb2xpY3kSNwoEcmVhZBgCIAMoCzIpLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbi5Qb2xpY3kSOQoGdXBkYXRlGAMgAygLMikudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uLlBvbGljeRI5CgZkZWxldGUYBCADKAsyKS50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb24uUG9saWN5GrsBCgZQb2xpY3kSQAoKY29uZGl0aW9ucxgBIAMoCzIsLnRhaWxvci52MS5UYWlsb3JEQlR5cGUuUGVybWlzc2lvbi5Db25kaXRpb24SRQoGcGVybWl0GAIgASgOMikudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uLlBlcm1pdEIKukgHggEEEAEgABIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBQg4KDF9kZXNjcmlwdGlvbhrbAQoJQ29uZGl0aW9uEkAKBGxlZnQYASABKAsyKi50YWlsb3IudjEuVGFpbG9yREJUeXBlLlBlcm1pc3Npb24uT3BlcmFuZEIGukgDyAEBEkkKCG9wZXJhdG9yGAIgASgOMisudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uLk9wZXJhdG9yQgq6SAeCAQQQASAAEkEKBXJpZ2h0GAMgASgLMioudGFpbG9yLnYxLlRhaWxvckRCVHlwZS5QZXJtaXNzaW9uLk9wZXJhbmRCBrpIA8gBARrLAQoHT3BlcmFuZBIdCgp1c2VyX2ZpZWxkGAEgASgJQge6SARyAhABSAASHwoMcmVjb3JkX2ZpZWxkGAIgASgJQge6SARyAhABSAASIwoQb2xkX3JlY29yZF9maWVsZBgDIAEoCUIHukgEcgIQAUgAEiMKEG5ld19yZWNvcmRfZmllbGQYBCABKAlCB7pIBHICEAFIABInCgV2YWx1ZRgFIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5WYWx1ZUgAQg0KBGtpbmQSBbpIAggBImkKCE9wZXJhdG9yEhgKFE9QRVJBVE9SX1VOU1BFQ0lGSUVEEAASDwoLT1BFUkFUT1JfRVEQARIPCgtPUEVSQVRPUl9ORRACEg8KC09QRVJBVE9SX0lOEAMSEAoMT1BFUkFUT1JfTklOEAQiQwoGUGVybWl0EhYKElBFUk1JVF9VTlNQRUNJRklFRBAAEhAKDFBFUk1JVF9BTExPVxABEg8KC1BFUk1JVF9ERU5ZEAIiegoMUGVybWl0QWN0aW9uEh0KGVBFUk1JVF9BQ1RJT05fVU5TUEVDSUZJRUQQABIXChNQRVJNSVRfQUNUSU9OX0FMTE9XEAESGgoSUEVSTUlUX0FDVElPTl9TS0lQEAIaAggBEhYKElBFUk1JVF9BQ1RJT05fREVOWRADIv8HChVUYWlsb3JEQkdRTFBlcm1pc3Npb24SDwoCaWQYASABKAlCA+BBAxI5Cghwb2xpY2llcxgCIAMoCzInLnRhaWxvci52MS5UYWlsb3JEQkdRTFBlcm1pc3Npb24uUG9saWN5GoQCCgZQb2xpY3kSPgoKY29uZGl0aW9ucxgBIAMoCzIqLnRhaWxvci52MS5UYWlsb3JEQkdRTFBlcm1pc3Npb24uQ29uZGl0aW9uEksKB2FjdGlvbnMYAiADKA4yJy50YWlsb3IudjEuVGFpbG9yREJHUUxQZXJtaXNzaW9uLkFjdGlvbkIRukgOkgELCAEiB4IBBBABIAASQwoGcGVybWl0GAMgASgOMicudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbi5QZXJtaXRCCrpIB4IBBBABIAASGAoLZGVzY3JpcHRpb24YBCABKAlIAIgBAUIOCgxfZGVzY3JpcHRpb24a1QEKCUNvbmRpdGlvbhI+CgRsZWZ0GAEgASgLMigudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbi5PcGVyYW5kQga6SAPIAQESRwoIb3BlcmF0b3IYAiABKA4yKS50YWlsb3IudjEuVGFpbG9yREJHUUxQZXJtaXNzaW9uLk9wZXJhdG9yQgq6SAeCAQQQASAAEj8KBXJpZ2h0GAMgASgLMigudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbi5PcGVyYW5kQga6SAPIAQEaYAoHT3BlcmFuZBIdCgp1c2VyX2ZpZWxkGAEgASgJQge6SARyAhABSAASJwoFdmFsdWUYBSABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVIAEINCgRraW5kEgW6SAIIASJpCghPcGVyYXRvchIYChRPUEVSQVRPUl9VTlNQRUNJRklFRBAAEg8KC09QRVJBVE9SX0VREAESDwoLT1BFUkFUT1JfTkUQAhIPCgtPUEVSQVRPUl9JThADEhAKDE9QRVJBVE9SX05JThAEIqgBCgZBY3Rpb24SFgoSQUNUSU9OX1VOU1BFQ0lGSUVEEAASDgoKQUNUSU9OX0FMTBABEhEKDUFDVElPTl9DUkVBVEUQAhIPCgtBQ1RJT05fUkVBRBADEhEKDUFDVElPTl9VUERBVEUQBBIRCg1BQ1RJT05fREVMRVRFEAUSFAoQQUNUSU9OX0FHR1JFR0FURRAGEhYKEkFDVElPTl9CVUxLX1VQU0VSVBAHIkMKBlBlcm1pdBIWChJQRVJNSVRfVU5TUEVDSUZJRUQQABIQCgxQRVJNSVRfQUxMT1cQARIPCgtQRVJNSVRfREVOWRACYgZwcm90bzM\", [file_buf_validate_validate, file_google_api_field_behavior, file_google_protobuf_struct, file_tailor_v1_resource]);\n\n/**\n * Describes the message tailor.v1.TailorDBService.\n * Use `create(TailorDBServiceSchema)` to create a new message.\n */\nexport const TailorDBServiceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 0);\n\n/**\n * Describes the message tailor.v1.TailorDBType.\n * Use `create(TailorDBTypeSchema)` to create a new message.\n */\nexport const TailorDBTypeSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1);\n\n/**\n * Describes the message tailor.v1.TailorDBType.TypeConfig.\n * Use `create(TailorDBType_TypeConfigSchema)` to create a new message.\n */\nexport const TailorDBType_TypeConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 0);\n\n/**\n * Describes the message tailor.v1.TailorDBType.TypeSetting.\n * Use `create(TailorDBType_TypeSettingSchema)` to create a new message.\n */\nexport const TailorDBType_TypeSettingSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 1);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Directive.\n * Use `create(TailorDBType_DirectiveSchema)` to create a new message.\n */\nexport const TailorDBType_DirectiveSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 2);\n\n/**\n * Describes the message tailor.v1.TailorDBType.DirectiveArg.\n * Use `create(TailorDBType_DirectiveArgSchema)` to create a new message.\n */\nexport const TailorDBType_DirectiveArgSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 3);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Index.\n * Use `create(TailorDBType_IndexSchema)` to create a new message.\n */\nexport const TailorDBType_IndexSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 4);\n\n/**\n * Describes the message tailor.v1.TailorDBType.FieldConfig.\n * Use `create(TailorDBType_FieldConfigSchema)` to create a new message.\n */\nexport const TailorDBType_FieldConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 5);\n\n/**\n * Describes the message tailor.v1.TailorDBType.RelationshipConfig.\n * Use `create(TailorDBType_RelationshipConfigSchema)` to create a new message.\n */\nexport const TailorDBType_RelationshipConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 6);\n\n/**\n * Describes the message tailor.v1.TailorDBType.FileConfig.\n * Use `create(TailorDBType_FileConfigSchema)` to create a new message.\n */\nexport const TailorDBType_FileConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 7);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Value.\n * Use `create(TailorDBType_ValueSchema)` to create a new message.\n */\nexport const TailorDBType_ValueSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 8);\n\n/**\n * Describes the message tailor.v1.TailorDBType.FieldHook.\n * Use `create(TailorDBType_FieldHookSchema)` to create a new message.\n */\nexport const TailorDBType_FieldHookSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 9);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Serial.\n * Use `create(TailorDBType_SerialSchema)` to create a new message.\n */\nexport const TailorDBType_SerialSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 10);\n\n/**\n * Describes the message tailor.v1.TailorDBType.ValidateConfig.\n * Use `create(TailorDBType_ValidateConfigSchema)` to create a new message.\n */\nexport const TailorDBType_ValidateConfigSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 11);\n\n/**\n * Describes the message tailor.v1.TailorDBType.TypePermission.\n * Use `create(TailorDBType_TypePermissionSchema)` to create a new message.\n */\nexport const TailorDBType_TypePermissionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 12);\n\n/**\n * Describes the message tailor.v1.TailorDBType.RecordPermission.\n * Use `create(TailorDBType_RecordPermissionSchema)` to create a new message.\n */\nexport const TailorDBType_RecordPermissionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 13);\n\n/**\n * Describes the message tailor.v1.TailorDBType.PermissionItem.\n * Use `create(TailorDBType_PermissionItemSchema)` to create a new message.\n */\nexport const TailorDBType_PermissionItemSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 14);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Permission.\n * Use `create(TailorDBType_PermissionSchema)` to create a new message.\n */\nexport const TailorDBType_PermissionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 15);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Permission.Policy.\n * Use `create(TailorDBType_Permission_PolicySchema)` to create a new message.\n */\nexport const TailorDBType_Permission_PolicySchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 15, 0);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Permission.Condition.\n * Use `create(TailorDBType_Permission_ConditionSchema)` to create a new message.\n */\nexport const TailorDBType_Permission_ConditionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 15, 1);\n\n/**\n * Describes the message tailor.v1.TailorDBType.Permission.Operand.\n * Use `create(TailorDBType_Permission_OperandSchema)` to create a new message.\n */\nexport const TailorDBType_Permission_OperandSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 1, 15, 2);\n\n/**\n * Describes the enum tailor.v1.TailorDBType.Permission.Operator.\n */\nexport const TailorDBType_Permission_OperatorSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_tailordb_resource, 1, 15, 0);\n\n/**\n * @generated from enum tailor.v1.TailorDBType.Permission.Operator\n */\nexport const TailorDBType_Permission_Operator = /*@__PURE__*/\n tsEnum(TailorDBType_Permission_OperatorSchema);\n\n/**\n * Describes the enum tailor.v1.TailorDBType.Permission.Permit.\n */\nexport const TailorDBType_Permission_PermitSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_tailordb_resource, 1, 15, 1);\n\n/**\n * @generated from enum tailor.v1.TailorDBType.Permission.Permit\n */\nexport const TailorDBType_Permission_Permit = /*@__PURE__*/\n tsEnum(TailorDBType_Permission_PermitSchema);\n\n/**\n * Describes the enum tailor.v1.TailorDBType.PermitAction.\n */\nexport const TailorDBType_PermitActionSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_tailordb_resource, 1, 0);\n\n/**\n * @generated from enum tailor.v1.TailorDBType.PermitAction\n */\nexport const TailorDBType_PermitAction = /*@__PURE__*/\n tsEnum(TailorDBType_PermitActionSchema);\n\n/**\n * Describes the message tailor.v1.TailorDBGQLPermission.\n * Use `create(TailorDBGQLPermissionSchema)` to create a new message.\n */\nexport const TailorDBGQLPermissionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 2);\n\n/**\n * Describes the message tailor.v1.TailorDBGQLPermission.Policy.\n * Use `create(TailorDBGQLPermission_PolicySchema)` to create a new message.\n */\nexport const TailorDBGQLPermission_PolicySchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 2, 0);\n\n/**\n * Describes the message tailor.v1.TailorDBGQLPermission.Condition.\n * Use `create(TailorDBGQLPermission_ConditionSchema)` to create a new message.\n */\nexport const TailorDBGQLPermission_ConditionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 2, 1);\n\n/**\n * Describes the message tailor.v1.TailorDBGQLPermission.Operand.\n * Use `create(TailorDBGQLPermission_OperandSchema)` to create a new message.\n */\nexport const TailorDBGQLPermission_OperandSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb_resource, 2, 2);\n\n/**\n * Describes the enum tailor.v1.TailorDBGQLPermission.Operator.\n */\nexport const TailorDBGQLPermission_OperatorSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_tailordb_resource, 2, 0);\n\n/**\n * @generated from enum tailor.v1.TailorDBGQLPermission.Operator\n */\nexport const TailorDBGQLPermission_Operator = /*@__PURE__*/\n tsEnum(TailorDBGQLPermission_OperatorSchema);\n\n/**\n * Describes the enum tailor.v1.TailorDBGQLPermission.Action.\n */\nexport const TailorDBGQLPermission_ActionSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_tailordb_resource, 2, 1);\n\n/**\n * @generated from enum tailor.v1.TailorDBGQLPermission.Action\n */\nexport const TailorDBGQLPermission_Action = /*@__PURE__*/\n tsEnum(TailorDBGQLPermission_ActionSchema);\n\n/**\n * Describes the enum tailor.v1.TailorDBGQLPermission.Permit.\n */\nexport const TailorDBGQLPermission_PermitSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_tailordb_resource, 2, 2);\n\n/**\n * @generated from enum tailor.v1.TailorDBGQLPermission.Permit\n */\nexport const TailorDBGQLPermission_Permit = /*@__PURE__*/\n tsEnum(TailorDBGQLPermission_PermitSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/tailordb.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_field_mask } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_fieldmask_v1_option } from \"../fieldmask/v1/option_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_tailordb_resource } from \"./tailordb_resource_pb\";\n\n/**\n * Describes the file tailor/v1/tailordb.proto.\n */\nexport const file_tailor_v1_tailordb = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvdGFpbG9yZGIucHJvdG8SCXRhaWxvci52MSJ9ChlDb21wb3NlVGFpbG9yREJTRExSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiHAoaQ29tcG9zZVRhaWxvckRCU0RMUmVzcG9uc2UiowEKHENyZWF0ZVRhaWxvckRCU2VydmljZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIhChBkZWZhdWx0X3RpbWV6b25lGAMgASgJQge6SARyAhggIlUKHUNyZWF0ZVRhaWxvckRCU2VydmljZVJlc3BvbnNlEjQKEHRhaWxvcmRiX3NlcnZpY2UYASABKAsyGi50YWlsb3IudjEuVGFpbG9yREJTZXJ2aWNlIqMBChxVcGRhdGVUYWlsb3JEQlNlcnZpY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSIQoQZGVmYXVsdF90aW1lem9uZRgDIAEoCUIHukgEcgIYICJVCh1VcGRhdGVUYWlsb3JEQlNlcnZpY2VSZXNwb25zZRI0ChB0YWlsb3JkYl9zZXJ2aWNlGAEgASgLMhoudGFpbG9yLnYxLlRhaWxvckRCU2VydmljZSKAAQocRGVsZXRlVGFpbG9yREJTZXJ2aWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIh8KHURlbGV0ZVRhaWxvckRCU2VydmljZVJlc3BvbnNlIn0KGUdldFRhaWxvckRCU2VydmljZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJSChpHZXRUYWlsb3JEQlNlcnZpY2VSZXNwb25zZRI0ChB0YWlsb3JkYl9zZXJ2aWNlGAEgASgLMhoudGFpbG9yLnYxLlRhaWxvckRCU2VydmljZSKWAQobTGlzdFRhaWxvckRCU2VydmljZXNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiKDAQocTGlzdFRhaWxvckRCU2VydmljZXNSZXNwb25zZRI1ChF0YWlsb3JkYl9zZXJ2aWNlcxgBIAMoCzIaLnRhaWxvci52MS5UYWlsb3JEQlNlcnZpY2USFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIq0BChlDcmVhdGVUYWlsb3JEQlR5cGVSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSLgoNdGFpbG9yZGJfdHlwZRgDIAEoCzIXLnRhaWxvci52MS5UYWlsb3JEQlR5cGUiTAoaQ3JlYXRlVGFpbG9yREJUeXBlUmVzcG9uc2USLgoNdGFpbG9yZGJfdHlwZRgBIAEoCzIXLnRhaWxvci52MS5UYWlsb3JEQlR5cGUigAYKGVVwZGF0ZVRhaWxvckRCVHlwZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIuCg10YWlsb3JkYl90eXBlGAMgASgLMhcudGFpbG9yLnYxLlRhaWxvckRCVHlwZRLQBAoLdXBkYXRlX21hc2sYZCABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrQp4EivkrBmZpZWxkc4r5Kw1yZWxhdGlvbnNoaXBzivkrBWZpbGVzivkrC2Rlc2NyaXB0aW9uivkrCHNldHRpbmdzivkrFHNldHRpbmdzLmFnZ3JlZ2F0aW9uivkrFHNldHRpbmdzLmJ1bGtfdXBzZXJ0ivkrIXNldHRpbmdzLmRlZmF1bHRfcXVlcnlfbGltaXRfc2l6ZYr5Kx1zZXR0aW5ncy5tYXhfYnVsa191cHNlcnRfc2l6ZYr5KxRzZXR0aW5ncy5wbHVyYWxfZm9ybYr5Kx5zZXR0aW5ncy5wdWJsaXNoX3JlY29yZF9ldmVudHOK+SsOc2V0dGluZ3MuZHJhZnSK+SsPdHlwZV9wZXJtaXNzaW9uivkrFnR5cGVfcGVybWlzc2lvbi5jcmVhdGWK+SsUdHlwZV9wZXJtaXNzaW9uLnJlYWSK+SsWdHlwZV9wZXJtaXNzaW9uLnVwZGF0ZYr5KxZ0eXBlX3Blcm1pc3Npb24uZGVsZXRlivkrFXR5cGVfcGVybWlzc2lvbi5hZG1pbor5KwdleHRlbmRzivkrCmRpcmVjdGl2ZXOK+SsHaW5kZXhlc4r5KxFyZWNvcmRfcGVybWlzc2lvbor5KxZyZWNvcmRfcGVybWlzc2lvbi5yZWFkivkrGHJlY29yZF9wZXJtaXNzaW9uLnVwZGF0ZYr5KxhyZWNvcmRfcGVybWlzc2lvbi5kZWxldGUiTAoaVXBkYXRlVGFpbG9yREJUeXBlUmVzcG9uc2USLgoNdGFpbG9yZGJfdHlwZRgBIAEoCzIXLnRhaWxvci52MS5UYWlsb3JEQlR5cGUimQEKGURlbGV0ZVRhaWxvckRCVHlwZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIaChJ0YWlsb3JkYl90eXBlX25hbWUYAyABKAkiHAoaRGVsZXRlVGFpbG9yREJUeXBlUmVzcG9uc2UivAEKG1RydW5jYXRlVGFpbG9yREJUeXBlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjsKEnRhaWxvcmRiX3R5cGVfbmFtZRgDIAEoCUIfukgcchoyGF5bQS1aXVthLXpBLVowLTldezAsNjJ9JCIeChxUcnVuY2F0ZVRhaWxvckRCVHlwZVJlc3BvbnNlIoABChxUcnVuY2F0ZVRhaWxvckRCVHlwZXNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiHwodVHJ1bmNhdGVUYWlsb3JEQlR5cGVzUmVzcG9uc2Ui+AEKGExpc3RUYWlsb3JEQlR5cGVzUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEhIKCnBhZ2VfdG9rZW4YAyABKAkSEQoJcGFnZV9zaXplGAQgASgNEiEKBmZpbHRlchgFIAEoCzIRLnRhaWxvci52MS5GaWx0ZXISMAoOcGFnZV9kaXJlY3Rpb24YBiABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ6ChlMaXN0VGFpbG9yREJUeXBlc1Jlc3BvbnNlEi8KDnRhaWxvcmRiX3R5cGVzGAEgAygLMhcudGFpbG9yLnYxLlRhaWxvckRCVHlwZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMitwEKFkdldFRhaWxvckRCVHlwZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBI7ChJ0YWlsb3JkYl90eXBlX25hbWUYAyABKAlCH7pIHHIaMhheW0EtWl1bYS16QS1aMC05XXswLDYyfSQiSQoXR2V0VGFpbG9yREJUeXBlUmVzcG9uc2USLgoNdGFpbG9yZGJfdHlwZRgBIAEoCzIXLnRhaWxvci52MS5UYWlsb3JEQlR5cGUi+AEKIkNyZWF0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJACg5uYW1lc3BhY2VfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIyCgl0eXBlX25hbWUYAyABKAlCH7pIHHIaMhheW0EtWl1bYS16QS1aMC05XXswLDYyfSQSPAoKcGVybWlzc2lvbhgEIAEoCzIgLnRhaWxvci52MS5UYWlsb3JEQkdRTFBlcm1pc3Npb25CBrpIA8gBASJbCiNDcmVhdGVUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXNwb25zZRI0CgpwZXJtaXNzaW9uGAEgASgLMiAudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbiK3AQofR2V0VGFpbG9yREJHUUxQZXJtaXNzaW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjIKCXR5cGVfbmFtZRgDIAEoCUIfukgcchoyGF5bQS1aXVthLXpBLVowLTldezAsNjJ9JCJYCiBHZXRUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXNwb25zZRI0CgpwZXJtaXNzaW9uGAEgASgLMiAudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbiLeAQohTGlzdFRhaWxvckRCR1FMUGVybWlzc2lvbnNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSEgoKcGFnZV90b2tlbhgDIAEoCRIRCglwYWdlX3NpemUYBCABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBSABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiKmAgoiTGlzdFRhaWxvckRCR1FMUGVybWlzc2lvbnNSZXNwb25zZRJkCgtwZXJtaXNzaW9ucxgBIAMoCzJPLnRhaWxvci52MS5MaXN0VGFpbG9yREJHUUxQZXJtaXNzaW9uc1Jlc3BvbnNlLlRhaWxvckRCR1FMUGVybWlzc2lvbldpdGhUeXBlTmFtZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMabAohVGFpbG9yREJHUUxQZXJtaXNzaW9uV2l0aFR5cGVOYW1lEhEKCXR5cGVfbmFtZRgBIAEoCRI0CgpwZXJtaXNzaW9uGAIgASgLMiAudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbiL4AQoiVXBkYXRlVGFpbG9yREJHUUxQZXJtaXNzaW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkAKDm5hbWVzcGFjZV9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEjIKCXR5cGVfbmFtZRgDIAEoCUIfukgcchoyGF5bQS1aXVthLXpBLVowLTldezAsNjJ9JBI8CgpwZXJtaXNzaW9uGAQgASgLMiAudGFpbG9yLnYxLlRhaWxvckRCR1FMUGVybWlzc2lvbkIGukgDyAEBIlsKI1VwZGF0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlc3BvbnNlEjQKCnBlcm1pc3Npb24YASABKAsyIC50YWlsb3IudjEuVGFpbG9yREJHUUxQZXJtaXNzaW9uIroBCiJEZWxldGVUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQAoObmFtZXNwYWNlX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSMgoJdHlwZV9uYW1lGAMgASgJQh+6SBxyGjIYXltBLVpdW2EtekEtWjAtOV17MCw2Mn0kIiUKI0RlbGV0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlc3BvbnNlYgZwcm90bzM\", [file_buf_validate_validate, file_google_protobuf_field_mask, file_tailor_fieldmask_v1_option, file_tailor_v1_resource, file_tailor_v1_tailordb_resource]);\n\n/**\n * Describes the message tailor.v1.ComposeTailorDBSDLRequest.\n * Use `create(ComposeTailorDBSDLRequestSchema)` to create a new message.\n */\nexport const ComposeTailorDBSDLRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 0);\n\n/**\n * Describes the message tailor.v1.ComposeTailorDBSDLResponse.\n * Use `create(ComposeTailorDBSDLResponseSchema)` to create a new message.\n */\nexport const ComposeTailorDBSDLResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 1);\n\n/**\n * Describes the message tailor.v1.CreateTailorDBServiceRequest.\n * Use `create(CreateTailorDBServiceRequestSchema)` to create a new message.\n */\nexport const CreateTailorDBServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 2);\n\n/**\n * Describes the message tailor.v1.CreateTailorDBServiceResponse.\n * Use `create(CreateTailorDBServiceResponseSchema)` to create a new message.\n */\nexport const CreateTailorDBServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 3);\n\n/**\n * Describes the message tailor.v1.UpdateTailorDBServiceRequest.\n * Use `create(UpdateTailorDBServiceRequestSchema)` to create a new message.\n */\nexport const UpdateTailorDBServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 4);\n\n/**\n * Describes the message tailor.v1.UpdateTailorDBServiceResponse.\n * Use `create(UpdateTailorDBServiceResponseSchema)` to create a new message.\n */\nexport const UpdateTailorDBServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 5);\n\n/**\n * Describes the message tailor.v1.DeleteTailorDBServiceRequest.\n * Use `create(DeleteTailorDBServiceRequestSchema)` to create a new message.\n */\nexport const DeleteTailorDBServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 6);\n\n/**\n * Describes the message tailor.v1.DeleteTailorDBServiceResponse.\n * Use `create(DeleteTailorDBServiceResponseSchema)` to create a new message.\n */\nexport const DeleteTailorDBServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 7);\n\n/**\n * Describes the message tailor.v1.GetTailorDBServiceRequest.\n * Use `create(GetTailorDBServiceRequestSchema)` to create a new message.\n */\nexport const GetTailorDBServiceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 8);\n\n/**\n * Describes the message tailor.v1.GetTailorDBServiceResponse.\n * Use `create(GetTailorDBServiceResponseSchema)` to create a new message.\n */\nexport const GetTailorDBServiceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 9);\n\n/**\n * Describes the message tailor.v1.ListTailorDBServicesRequest.\n * Use `create(ListTailorDBServicesRequestSchema)` to create a new message.\n */\nexport const ListTailorDBServicesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 10);\n\n/**\n * Describes the message tailor.v1.ListTailorDBServicesResponse.\n * Use `create(ListTailorDBServicesResponseSchema)` to create a new message.\n */\nexport const ListTailorDBServicesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 11);\n\n/**\n * Describes the message tailor.v1.CreateTailorDBTypeRequest.\n * Use `create(CreateTailorDBTypeRequestSchema)` to create a new message.\n */\nexport const CreateTailorDBTypeRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 12);\n\n/**\n * Describes the message tailor.v1.CreateTailorDBTypeResponse.\n * Use `create(CreateTailorDBTypeResponseSchema)` to create a new message.\n */\nexport const CreateTailorDBTypeResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 13);\n\n/**\n * Describes the message tailor.v1.UpdateTailorDBTypeRequest.\n * Use `create(UpdateTailorDBTypeRequestSchema)` to create a new message.\n */\nexport const UpdateTailorDBTypeRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 14);\n\n/**\n * Describes the message tailor.v1.UpdateTailorDBTypeResponse.\n * Use `create(UpdateTailorDBTypeResponseSchema)` to create a new message.\n */\nexport const UpdateTailorDBTypeResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 15);\n\n/**\n * Describes the message tailor.v1.DeleteTailorDBTypeRequest.\n * Use `create(DeleteTailorDBTypeRequestSchema)` to create a new message.\n */\nexport const DeleteTailorDBTypeRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 16);\n\n/**\n * Describes the message tailor.v1.DeleteTailorDBTypeResponse.\n * Use `create(DeleteTailorDBTypeResponseSchema)` to create a new message.\n */\nexport const DeleteTailorDBTypeResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 17);\n\n/**\n * Describes the message tailor.v1.TruncateTailorDBTypeRequest.\n * Use `create(TruncateTailorDBTypeRequestSchema)` to create a new message.\n */\nexport const TruncateTailorDBTypeRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 18);\n\n/**\n * Describes the message tailor.v1.TruncateTailorDBTypeResponse.\n * Use `create(TruncateTailorDBTypeResponseSchema)` to create a new message.\n */\nexport const TruncateTailorDBTypeResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 19);\n\n/**\n * Describes the message tailor.v1.TruncateTailorDBTypesRequest.\n * Use `create(TruncateTailorDBTypesRequestSchema)` to create a new message.\n */\nexport const TruncateTailorDBTypesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 20);\n\n/**\n * Describes the message tailor.v1.TruncateTailorDBTypesResponse.\n * Use `create(TruncateTailorDBTypesResponseSchema)` to create a new message.\n */\nexport const TruncateTailorDBTypesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 21);\n\n/**\n * Describes the message tailor.v1.ListTailorDBTypesRequest.\n * Use `create(ListTailorDBTypesRequestSchema)` to create a new message.\n */\nexport const ListTailorDBTypesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 22);\n\n/**\n * Describes the message tailor.v1.ListTailorDBTypesResponse.\n * Use `create(ListTailorDBTypesResponseSchema)` to create a new message.\n */\nexport const ListTailorDBTypesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 23);\n\n/**\n * Describes the message tailor.v1.GetTailorDBTypeRequest.\n * Use `create(GetTailorDBTypeRequestSchema)` to create a new message.\n */\nexport const GetTailorDBTypeRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 24);\n\n/**\n * Describes the message tailor.v1.GetTailorDBTypeResponse.\n * Use `create(GetTailorDBTypeResponseSchema)` to create a new message.\n */\nexport const GetTailorDBTypeResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 25);\n\n/**\n * Describes the message tailor.v1.CreateTailorDBGQLPermissionRequest.\n * Use `create(CreateTailorDBGQLPermissionRequestSchema)` to create a new message.\n */\nexport const CreateTailorDBGQLPermissionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 26);\n\n/**\n * Describes the message tailor.v1.CreateTailorDBGQLPermissionResponse.\n * Use `create(CreateTailorDBGQLPermissionResponseSchema)` to create a new message.\n */\nexport const CreateTailorDBGQLPermissionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 27);\n\n/**\n * Describes the message tailor.v1.GetTailorDBGQLPermissionRequest.\n * Use `create(GetTailorDBGQLPermissionRequestSchema)` to create a new message.\n */\nexport const GetTailorDBGQLPermissionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 28);\n\n/**\n * Describes the message tailor.v1.GetTailorDBGQLPermissionResponse.\n * Use `create(GetTailorDBGQLPermissionResponseSchema)` to create a new message.\n */\nexport const GetTailorDBGQLPermissionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 29);\n\n/**\n * Describes the message tailor.v1.ListTailorDBGQLPermissionsRequest.\n * Use `create(ListTailorDBGQLPermissionsRequestSchema)` to create a new message.\n */\nexport const ListTailorDBGQLPermissionsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 30);\n\n/**\n * Describes the message tailor.v1.ListTailorDBGQLPermissionsResponse.\n * Use `create(ListTailorDBGQLPermissionsResponseSchema)` to create a new message.\n */\nexport const ListTailorDBGQLPermissionsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 31);\n\n/**\n * Describes the message tailor.v1.ListTailorDBGQLPermissionsResponse.TailorDBGQLPermissionWithTypeName.\n * Use `create(ListTailorDBGQLPermissionsResponse_TailorDBGQLPermissionWithTypeNameSchema)` to create a new message.\n */\nexport const ListTailorDBGQLPermissionsResponse_TailorDBGQLPermissionWithTypeNameSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 31, 0);\n\n/**\n * Describes the message tailor.v1.UpdateTailorDBGQLPermissionRequest.\n * Use `create(UpdateTailorDBGQLPermissionRequestSchema)` to create a new message.\n */\nexport const UpdateTailorDBGQLPermissionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 32);\n\n/**\n * Describes the message tailor.v1.UpdateTailorDBGQLPermissionResponse.\n * Use `create(UpdateTailorDBGQLPermissionResponseSchema)` to create a new message.\n */\nexport const UpdateTailorDBGQLPermissionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 33);\n\n/**\n * Describes the message tailor.v1.DeleteTailorDBGQLPermissionRequest.\n * Use `create(DeleteTailorDBGQLPermissionRequestSchema)` to create a new message.\n */\nexport const DeleteTailorDBGQLPermissionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 34);\n\n/**\n * Describes the message tailor.v1.DeleteTailorDBGQLPermissionResponse.\n * Use `create(DeleteTailorDBGQLPermissionResponseSchema)` to create a new message.\n */\nexport const DeleteTailorDBGQLPermissionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_tailordb, 35);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/workflow_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/workflow_resource.proto.\n */\nexport const file_tailor_v1_workflow_resource = /*@__PURE__*/\n fileDesc(\"CiF0YWlsb3IvdjEvd29ya2Zsb3dfcmVzb3VyY2UucHJvdG8SCXRhaWxvci52MSKFAQoTV29ya2Zsb3dKb2JGdW5jdGlvbhIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEg4KBnNjcmlwdBgDIAEoCRIPCgd2ZXJzaW9uGAQgASgDEjMKCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMioQIKCFdvcmtmbG93EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSHgoWbWFpbl9qb2JfZnVuY3Rpb25fbmFtZRgDIAEoCRI8Cg1qb2JfZnVuY3Rpb25zGAQgAygLMiUudGFpbG9yLnYxLldvcmtmbG93LkpvYkZ1bmN0aW9uc0VudHJ5EjMKCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSMwoKdXBkYXRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAxozChFKb2JGdW5jdGlvbnNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAM6AjgBItwCChRXb3JrZmxvd0pvYkV4ZWN1dGlvbhIKCgJpZBgBIAEoCRIYChBzdGFja2VkX2pvYl9uYW1lGAIgASgJEjYKBnN0YXR1cxgDIAEoDjImLnRhaWxvci52MS5Xb3JrZmxvd0pvYkV4ZWN1dGlvbi5TdGF0dXMSFAoMZXhlY3V0aW9uX2lkGAQgASgJEi4KCnN0YXJ0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi8KC2ZpbmlzaGVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJvCgZTdGF0dXMSFgoSU1RBVFVTX1VOU1BFQ0lGSUVEEAASEgoOU1RBVFVTX1JVTk5JTkcQARISCg5TVEFUVVNfU1VTUEVORBACEhIKDlNUQVRVU19TVUNDRVNTEAMSEQoNU1RBVFVTX0ZBSUxFRBAEIpIDChFXb3JrZmxvd0V4ZWN1dGlvbhIKCgJpZBgBIAEoCRIVCg13b3JrZmxvd19uYW1lGAIgASgJEjMKBnN0YXR1cxgDIAEoDjIjLnRhaWxvci52MS5Xb3JrZmxvd0V4ZWN1dGlvbi5TdGF0dXMSNwoOam9iX2V4ZWN1dGlvbnMYBCADKAsyHy50YWlsb3IudjEuV29ya2Zsb3dKb2JFeGVjdXRpb24SLgoKc3RhcnRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLwoLZmluaXNoZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIooBCgZTdGF0dXMSFgoSU1RBVFVTX1VOU1BFQ0lGSUVEEAASEgoOU1RBVFVTX1BFTkRJTkcQARIZChVTVEFUVVNfUEVORElOR19SRVNVTUUQAhISCg5TVEFUVVNfUlVOTklORxADEhIKDlNUQVRVU19TVUNDRVNTEAQSEQoNU1RBVFVTX0ZBSUxFRBAFYgZwcm90bzM\", [file_google_api_field_behavior, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.WorkflowJobFunction.\n * Use `create(WorkflowJobFunctionSchema)` to create a new message.\n */\nexport const WorkflowJobFunctionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow_resource, 0);\n\n/**\n * Describes the message tailor.v1.Workflow.\n * Use `create(WorkflowSchema)` to create a new message.\n */\nexport const WorkflowSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow_resource, 1);\n\n/**\n * Describes the message tailor.v1.WorkflowJobExecution.\n * Use `create(WorkflowJobExecutionSchema)` to create a new message.\n */\nexport const WorkflowJobExecutionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow_resource, 2);\n\n/**\n * Describes the enum tailor.v1.WorkflowJobExecution.Status.\n */\nexport const WorkflowJobExecution_StatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workflow_resource, 2, 0);\n\n/**\n * @generated from enum tailor.v1.WorkflowJobExecution.Status\n */\nexport const WorkflowJobExecution_Status = /*@__PURE__*/\n tsEnum(WorkflowJobExecution_StatusSchema);\n\n/**\n * Describes the message tailor.v1.WorkflowExecution.\n * Use `create(WorkflowExecutionSchema)` to create a new message.\n */\nexport const WorkflowExecutionSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow_resource, 3);\n\n/**\n * Describes the enum tailor.v1.WorkflowExecution.Status.\n */\nexport const WorkflowExecution_StatusSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workflow_resource, 3, 0);\n\n/**\n * @generated from enum tailor.v1.WorkflowExecution.Status\n */\nexport const WorkflowExecution_Status = /*@__PURE__*/\n tsEnum(WorkflowExecution_StatusSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/workflow.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_tailor_v1_auth_resource } from \"./auth_resource_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_workflow_resource } from \"./workflow_resource_pb\";\n\n/**\n * Describes the file tailor/v1/workflow.proto.\n */\nexport const file_tailor_v1_workflow = /*@__PURE__*/\n fileDesc(\"Chh0YWlsb3IvdjEvd29ya2Zsb3cucHJvdG8SCXRhaWxvci52MSLCAgoVQ3JlYXRlV29ya2Zsb3dSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESPwoNd29ya2Zsb3dfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJIChZtYWluX2pvYl9mdW5jdGlvbl9uYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkkKDWpvYl9mdW5jdGlvbnMYBCADKAsyMi50YWlsb3IudjEuQ3JlYXRlV29ya2Zsb3dSZXF1ZXN0LkpvYkZ1bmN0aW9uc0VudHJ5GjMKEUpvYkZ1bmN0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoAzoCOAEiPwoWQ3JlYXRlV29ya2Zsb3dSZXNwb25zZRIlCgh3b3JrZmxvdxgBIAEoCzITLnRhaWxvci52MS5Xb3JrZmxvdyLCAgoVVXBkYXRlV29ya2Zsb3dSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESPwoNd29ya2Zsb3dfbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBJIChZtYWluX2pvYl9mdW5jdGlvbl9uYW1lGAMgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEkkKDWpvYl9mdW5jdGlvbnMYBCADKAsyMi50YWlsb3IudjEuVXBkYXRlV29ya2Zsb3dSZXF1ZXN0LkpvYkZ1bmN0aW9uc0VudHJ5GjMKEUpvYkZ1bmN0aW9uc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoAzoCOAEiPwoWVXBkYXRlV29ya2Zsb3dSZXNwb25zZRIlCgh3b3JrZmxvdxgBIAEoCzITLnRhaWxvci52MS5Xb3JrZmxvdyJWChVEZWxldGVXb3JrZmxvd1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIdCgt3b3JrZmxvd19pZBgCIAEoCUIIukgFcgOwAQEiGAoWRGVsZXRlV29ya2Zsb3dSZXNwb25zZSJTChJHZXRXb3JrZmxvd1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIdCgt3b3JrZmxvd19pZBgCIAEoCUIIukgFcgOwAQEiPAoTR2V0V29ya2Zsb3dSZXNwb25zZRIlCgh3b3JrZmxvdxgBIAEoCzITLnRhaWxvci52MS5Xb3JrZmxvdyJ7ChhHZXRXb3JrZmxvd0J5TmFtZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARI/Cg13b3JrZmxvd19uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kIkIKGUdldFdvcmtmbG93QnlOYW1lUmVzcG9uc2USJQoId29ya2Zsb3cYASABKAsyEy50YWlsb3IudjEuV29ya2Zsb3cijwEKFExpc3RXb3JrZmxvd3NSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJtChVMaXN0V29ya2Zsb3dzUmVzcG9uc2USJgoJd29ya2Zsb3dzGAEgAygLMhMudGFpbG9yLnYxLldvcmtmbG93EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyKXAQogQ3JlYXRlV29ya2Zsb3dKb2JGdW5jdGlvblJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJDChFqb2JfZnVuY3Rpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIOCgZzY3JpcHQYAyABKAkiWQohQ3JlYXRlV29ya2Zsb3dKb2JGdW5jdGlvblJlc3BvbnNlEjQKDGpvYl9mdW5jdGlvbhgBIAEoCzIeLnRhaWxvci52MS5Xb3JrZmxvd0pvYkZ1bmN0aW9uIpcBCiBVcGRhdGVXb3JrZmxvd0pvYkZ1bmN0aW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEkMKEWpvYl9mdW5jdGlvbl9uYW1lGAIgASgJQii6SCVyIzIhXlthLXowLTldW2EtejAtOS1dezEsNjF9W2EtejAtOV0kEg4KBnNjcmlwdBgDIAEoCSJZCiFVcGRhdGVXb3JrZmxvd0pvYkZ1bmN0aW9uUmVzcG9uc2USNAoMam9iX2Z1bmN0aW9uGAEgASgLMh4udGFpbG9yLnYxLldvcmtmbG93Sm9iRnVuY3Rpb24iYgodR2V0V29ya2Zsb3dKb2JGdW5jdGlvblJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIhCg9qb2JfZnVuY3Rpb25faWQYAiABKAlCCLpIBXIDsAEBIlYKHkdldFdvcmtmbG93Sm9iRnVuY3Rpb25SZXNwb25zZRI0Cgxqb2JfZnVuY3Rpb24YASABKAsyHi50YWlsb3IudjEuV29ya2Zsb3dKb2JGdW5jdGlvbiKKAQojR2V0V29ya2Zsb3dKb2JGdW5jdGlvbkJ5TmFtZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARJDChFqb2JfZnVuY3Rpb25fbmFtZRgCIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJCJcCiRHZXRXb3JrZmxvd0pvYkZ1bmN0aW9uQnlOYW1lUmVzcG9uc2USNAoMam9iX2Z1bmN0aW9uGAEgASgLMh4udGFpbG9yLnYxLldvcmtmbG93Sm9iRnVuY3Rpb24imgEKH0xpc3RXb3JrZmxvd0pvYkZ1bmN0aW9uc1JlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARISCgpwYWdlX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgEIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uIocBCiBMaXN0V29ya2Zsb3dKb2JGdW5jdGlvbnNSZXNwb25zZRI1Cg1qb2JfZnVuY3Rpb25zGAEgAygLMh4udGFpbG9yLnYxLldvcmtmbG93Sm9iRnVuY3Rpb24SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgDIl0KG0dldFdvcmtmbG93RXhlY3V0aW9uUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEh4KDGV4ZWN1dGlvbl9pZBgCIAEoCUIIukgFcgOwAQEiTwocR2V0V29ya2Zsb3dFeGVjdXRpb25SZXNwb25zZRIvCglleGVjdXRpb24YASABKAsyHC50YWlsb3IudjEuV29ya2Zsb3dFeGVjdXRpb24iuwEKHUxpc3RXb3JrZmxvd0V4ZWN1dGlvbnNSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESEgoKcGFnZV90b2tlbhgCIAEoCRIRCglwYWdlX3NpemUYAyABKA0SMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbhIhCgZmaWx0ZXIYBSABKAsyES50YWlsb3IudjEuRmlsdGVyIoABCh5MaXN0V29ya2Zsb3dFeGVjdXRpb25zUmVzcG9uc2USMAoKZXhlY3V0aW9ucxgBIAMoCzIcLnRhaWxvci52MS5Xb3JrZmxvd0V4ZWN1dGlvbhIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMioQEKGFRlc3RTdGFydFdvcmtmbG93UmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEh0KC3dvcmtmbG93X2lkGAIgASgJQgi6SAVyA7ABARIsCgxhdXRoX2ludm9rZXIYAyABKAsyFi50YWlsb3IudjEuQXV0aEludm9rZXISEAoDYXJnGAQgASgJSACIAQFCBgoEX2FyZyIxChlUZXN0U3RhcnRXb3JrZmxvd1Jlc3BvbnNlEhQKDGV4ZWN1dGlvbl9pZBgBIAEoCSJbChlUZXN0UmVzdW1lV29ya2Zsb3dSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESHgoMZXhlY3V0aW9uX2lkGAIgASgJQgi6SAVyA7ABASIyChpUZXN0UmVzdW1lV29ya2Zsb3dSZXNwb25zZRIUCgxleGVjdXRpb25faWQYASABKAliBnByb3RvMw\", [file_buf_validate_validate, file_tailor_v1_auth_resource, file_tailor_v1_resource, file_tailor_v1_workflow_resource]);\n\n/**\n * Describes the message tailor.v1.CreateWorkflowRequest.\n * Use `create(CreateWorkflowRequestSchema)` to create a new message.\n */\nexport const CreateWorkflowRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 0);\n\n/**\n * Describes the message tailor.v1.CreateWorkflowResponse.\n * Use `create(CreateWorkflowResponseSchema)` to create a new message.\n */\nexport const CreateWorkflowResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 1);\n\n/**\n * Describes the message tailor.v1.UpdateWorkflowRequest.\n * Use `create(UpdateWorkflowRequestSchema)` to create a new message.\n */\nexport const UpdateWorkflowRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 2);\n\n/**\n * Describes the message tailor.v1.UpdateWorkflowResponse.\n * Use `create(UpdateWorkflowResponseSchema)` to create a new message.\n */\nexport const UpdateWorkflowResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 3);\n\n/**\n * Describes the message tailor.v1.DeleteWorkflowRequest.\n * Use `create(DeleteWorkflowRequestSchema)` to create a new message.\n */\nexport const DeleteWorkflowRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 4);\n\n/**\n * Describes the message tailor.v1.DeleteWorkflowResponse.\n * Use `create(DeleteWorkflowResponseSchema)` to create a new message.\n */\nexport const DeleteWorkflowResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 5);\n\n/**\n * Describes the message tailor.v1.GetWorkflowRequest.\n * Use `create(GetWorkflowRequestSchema)` to create a new message.\n */\nexport const GetWorkflowRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 6);\n\n/**\n * Describes the message tailor.v1.GetWorkflowResponse.\n * Use `create(GetWorkflowResponseSchema)` to create a new message.\n */\nexport const GetWorkflowResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 7);\n\n/**\n * Describes the message tailor.v1.GetWorkflowByNameRequest.\n * Use `create(GetWorkflowByNameRequestSchema)` to create a new message.\n */\nexport const GetWorkflowByNameRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 8);\n\n/**\n * Describes the message tailor.v1.GetWorkflowByNameResponse.\n * Use `create(GetWorkflowByNameResponseSchema)` to create a new message.\n */\nexport const GetWorkflowByNameResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 9);\n\n/**\n * Describes the message tailor.v1.ListWorkflowsRequest.\n * Use `create(ListWorkflowsRequestSchema)` to create a new message.\n */\nexport const ListWorkflowsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 10);\n\n/**\n * Describes the message tailor.v1.ListWorkflowsResponse.\n * Use `create(ListWorkflowsResponseSchema)` to create a new message.\n */\nexport const ListWorkflowsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 11);\n\n/**\n * Describes the message tailor.v1.CreateWorkflowJobFunctionRequest.\n * Use `create(CreateWorkflowJobFunctionRequestSchema)` to create a new message.\n */\nexport const CreateWorkflowJobFunctionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 12);\n\n/**\n * Describes the message tailor.v1.CreateWorkflowJobFunctionResponse.\n * Use `create(CreateWorkflowJobFunctionResponseSchema)` to create a new message.\n */\nexport const CreateWorkflowJobFunctionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 13);\n\n/**\n * Describes the message tailor.v1.UpdateWorkflowJobFunctionRequest.\n * Use `create(UpdateWorkflowJobFunctionRequestSchema)` to create a new message.\n */\nexport const UpdateWorkflowJobFunctionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 14);\n\n/**\n * Describes the message tailor.v1.UpdateWorkflowJobFunctionResponse.\n * Use `create(UpdateWorkflowJobFunctionResponseSchema)` to create a new message.\n */\nexport const UpdateWorkflowJobFunctionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 15);\n\n/**\n * Describes the message tailor.v1.GetWorkflowJobFunctionRequest.\n * Use `create(GetWorkflowJobFunctionRequestSchema)` to create a new message.\n */\nexport const GetWorkflowJobFunctionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 16);\n\n/**\n * Describes the message tailor.v1.GetWorkflowJobFunctionResponse.\n * Use `create(GetWorkflowJobFunctionResponseSchema)` to create a new message.\n */\nexport const GetWorkflowJobFunctionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 17);\n\n/**\n * Describes the message tailor.v1.GetWorkflowJobFunctionByNameRequest.\n * Use `create(GetWorkflowJobFunctionByNameRequestSchema)` to create a new message.\n */\nexport const GetWorkflowJobFunctionByNameRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 18);\n\n/**\n * Describes the message tailor.v1.GetWorkflowJobFunctionByNameResponse.\n * Use `create(GetWorkflowJobFunctionByNameResponseSchema)` to create a new message.\n */\nexport const GetWorkflowJobFunctionByNameResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 19);\n\n/**\n * Describes the message tailor.v1.ListWorkflowJobFunctionsRequest.\n * Use `create(ListWorkflowJobFunctionsRequestSchema)` to create a new message.\n */\nexport const ListWorkflowJobFunctionsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 20);\n\n/**\n * Describes the message tailor.v1.ListWorkflowJobFunctionsResponse.\n * Use `create(ListWorkflowJobFunctionsResponseSchema)` to create a new message.\n */\nexport const ListWorkflowJobFunctionsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 21);\n\n/**\n * Describes the message tailor.v1.GetWorkflowExecutionRequest.\n * Use `create(GetWorkflowExecutionRequestSchema)` to create a new message.\n */\nexport const GetWorkflowExecutionRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 22);\n\n/**\n * Describes the message tailor.v1.GetWorkflowExecutionResponse.\n * Use `create(GetWorkflowExecutionResponseSchema)` to create a new message.\n */\nexport const GetWorkflowExecutionResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 23);\n\n/**\n * Describes the message tailor.v1.ListWorkflowExecutionsRequest.\n * Use `create(ListWorkflowExecutionsRequestSchema)` to create a new message.\n */\nexport const ListWorkflowExecutionsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 24);\n\n/**\n * Describes the message tailor.v1.ListWorkflowExecutionsResponse.\n * Use `create(ListWorkflowExecutionsResponseSchema)` to create a new message.\n */\nexport const ListWorkflowExecutionsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 25);\n\n/**\n * Describes the message tailor.v1.TestStartWorkflowRequest.\n * Use `create(TestStartWorkflowRequestSchema)` to create a new message.\n */\nexport const TestStartWorkflowRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 26);\n\n/**\n * Describes the message tailor.v1.TestStartWorkflowResponse.\n * Use `create(TestStartWorkflowResponseSchema)` to create a new message.\n */\nexport const TestStartWorkflowResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 27);\n\n/**\n * Describes the message tailor.v1.TestResumeWorkflowRequest.\n * Use `create(TestResumeWorkflowRequestSchema)` to create a new message.\n */\nexport const TestResumeWorkflowRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 28);\n\n/**\n * Describes the message tailor.v1.TestResumeWorkflowResponse.\n * Use `create(TestResumeWorkflowResponseSchema)` to create a new message.\n */\nexport const TestResumeWorkflowResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workflow, 29);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/workspace_resource.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_google_api_field_behavior } from \"../../google/api/field_behavior_pb\";\nimport { file_google_protobuf_timestamp } from \"@bufbuild/protobuf/wkt\";\n\n/**\n * Describes the file tailor/v1/workspace_resource.proto.\n */\nexport const file_tailor_v1_workspace_resource = /*@__PURE__*/\n fileDesc(\"CiJ0YWlsb3IvdjEvd29ya3NwYWNlX3Jlc291cmNlLnByb3RvEgl0YWlsb3IudjEilAEKDE9yZ2FuaXphdGlvbhIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEjQKC2NyZWF0ZV90aW1lGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDEjQKC3VwZGF0ZV90aW1lGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDIqgCChJPcmdhbml6YXRpb25BY2Nlc3MSFwoPb3JnYW5pemF0aW9uX2lkGAEgASgJEikKBHJvbGUYAiABKA4yGy50YWlsb3IudjEuT3JnYW5pemF0aW9uUm9sZRIyCgR0ZWFtGAMgASgLMiIudGFpbG9yLnYxLk9yZ2FuaXphdGlvbkFjY2Vzcy5UZWFtSAASQwoNcGxhdGZvcm1fdXNlchgEIAEoCzIqLnRhaWxvci52MS5Pcmdhbml6YXRpb25BY2Nlc3MuUGxhdGZvcm1Vc2VySAAaKQoMUGxhdGZvcm1Vc2VyEgoKAmlkGAEgASgJEg0KBWVtYWlsGAIgASgJGiAKBFRlYW0SCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCUIICgZtZW1iZXIi1wEKBkZvbGRlchIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgDIAEoCRIYChBwYXJlbnRfZm9sZGVyX2lkGAQgASgJEhQKDGhhc19jaGlsZHJlbhgHIAEoCBI0CgtjcmVhdGVfdGltZRgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAxI0Cgt1cGRhdGVfdGltZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCA+BBAyKKAgoMRm9sZGVyQWNjZXNzEhEKCWZvbGRlcl9pZBgBIAEoCRIjCgRyb2xlGAIgASgOMhUudGFpbG9yLnYxLkZvbGRlclJvbGUSLAoEdGVhbRgDIAEoCzIcLnRhaWxvci52MS5Gb2xkZXJBY2Nlc3MuVGVhbUgAEj0KDXBsYXRmb3JtX3VzZXIYBCABKAsyJC50YWlsb3IudjEuRm9sZGVyQWNjZXNzLlBsYXRmb3JtVXNlckgAGikKDFBsYXRmb3JtVXNlchIKCgJpZBgBIAEoCRINCgVlbWFpbBgCIAEoCRogCgRUZWFtEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAlCCAoGbWVtYmVyIqUBCgRUZWFtEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAMgASgJEjQKC2NyZWF0ZV90aW1lGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDEjQKC3VwZGF0ZV90aW1lGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEID4EEDIqsBCgpUZWFtTWVtYmVyEg8KB3RlYW1faWQYASABKAkSOQoNcGxhdGZvcm1fdXNlchgCIAEoCzIiLnRhaWxvci52MS5UZWFtTWVtYmVyLlBsYXRmb3JtVXNlchIhCgRyb2xlGAMgASgOMhMudGFpbG9yLnYxLlRlYW1Sb2xlGi4KDFBsYXRmb3JtVXNlchIPCgd1c2VyX2lkGAEgASgJEg0KBWVtYWlsGAIgASgJIq0CCglXb3Jrc3BhY2USCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIbCg5jcmVhdGVfdXNlcl9pZBgDIAEoCUID4EEDEhsKDnVwZGF0ZV91c2VyX2lkGAQgASgJQgPgQQMSNAoLY3JlYXRlX3RpbWUYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSNAoLdXBkYXRlX3RpbWUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgPgQQMSEwoGcmVnaW9uGAggASgJQgPgQQMSGQoRZGVsZXRlX3Byb3RlY3Rpb24YCSABKAgSFwoPb3JnYW5pemF0aW9uX2lkGAogASgJEhEKCWZvbGRlcl9pZBgLIAEoCUoECAcQCCLBAQoVV29ya3NwYWNlUGxhdGZvcm1Vc2VyEjIKBHJvbGUYASABKA4yJC50YWlsb3IudjEuV29ya3NwYWNlUGxhdGZvcm1Vc2VyUm9sZRJECg1wbGF0Zm9ybV91c2VyGAIgASgLMi0udGFpbG9yLnYxLldvcmtzcGFjZVBsYXRmb3JtVXNlci5QbGF0Zm9ybVVzZXIaLgoMUGxhdGZvcm1Vc2VyEg8KB3VzZXJfaWQYASABKAkSDQoFZW1haWwYAiABKAkirgIKE1BsYXRmb3JtQWNjb3VudFBsYW4SNQoJcGxhbl90eXBlGAEgASgOMiIudGFpbG9yLnYxLlBsYXRmb3JtQWNjb3VudFBsYW5UeXBlEkgKBXRyaWFsGAIgASgLMjcudGFpbG9yLnYxLlBsYXRmb3JtQWNjb3VudFBsYW4uUGxhdGZvcm1BY2NvdW50UGxhblRyaWFsSAAaiAEKGFBsYXRmb3JtQWNjb3VudFBsYW5UcmlhbBIsCghzdGFydF9hdBgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKgoGZW5kX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBISCgppc19leHBpcmVkGAMgASgIQgsKCXBsYW5fbWV0YSqOAQoQT3JnYW5pemF0aW9uUm9sZRIhCh1PUkdBTklaQVRJT05fUk9MRV9VTlNQRUNJRklFRBAAEhsKF09SR0FOSVpBVElPTl9ST0xFX0FETUlOEAESHAoYT1JHQU5JWkFUSU9OX1JPTEVfRURJVE9SEAISHAoYT1JHQU5JWkFUSU9OX1JPTEVfVklFV0VSEAMqcAoKRm9sZGVyUm9sZRIbChdGT0xERVJfUk9MRV9VTlNQRUNJRklFRBAAEhUKEUZPTERFUl9ST0xFX0FETUlOEAESFgoSRk9MREVSX1JPTEVfRURJVE9SEAISFgoSRk9MREVSX1JPTEVfVklFV0VSEAMqZwoIVGVhbVJvbGUSGQoVVEVBTV9ST0xFX1VOU1BFQ0lGSUVEEAASEwoPVEVBTV9ST0xFX0FETUlOEAESFQoRVEVBTV9ST0xFX01BTkFHRVIQAhIUChBURUFNX1JPTEVfTUVNQkVSEAMqwwEKGVdvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGUSLAooV09SS1NQQUNFX1BMQVRGT1JNX1VTRVJfUk9MRV9VTlNQRUNJRklFRBAAEiYKIldPUktTUEFDRV9QTEFURk9STV9VU0VSX1JPTEVfQURNSU4QARInCiNXT1JLU1BBQ0VfUExBVEZPUk1fVVNFUl9ST0xFX0VESVRPUhACEicKI1dPUktTUEFDRV9QTEFURk9STV9VU0VSX1JPTEVfVklFV0VSEAMqkQEKF1BsYXRmb3JtQWNjb3VudFBsYW5UeXBlEioKJlBMQVRGT1JNX0FDQ09VTlRfUExBTl9UWVBFX1VOU1BFQ0lGSUVEEAASJAogUExBVEZPUk1fQUNDT1VOVF9QTEFOX1RZUEVfVFJJQUwQARIkCiBQTEFURk9STV9BQ0NPVU5UX1BMQU5fVFlQRV9CQVNJQxACYgZwcm90bzM\", [file_google_api_field_behavior, file_google_protobuf_timestamp]);\n\n/**\n * Describes the message tailor.v1.Organization.\n * Use `create(OrganizationSchema)` to create a new message.\n */\nexport const OrganizationSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 0);\n\n/**\n * Describes the message tailor.v1.OrganizationAccess.\n * Use `create(OrganizationAccessSchema)` to create a new message.\n */\nexport const OrganizationAccessSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 1);\n\n/**\n * Describes the message tailor.v1.OrganizationAccess.PlatformUser.\n * Use `create(OrganizationAccess_PlatformUserSchema)` to create a new message.\n */\nexport const OrganizationAccess_PlatformUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 1, 0);\n\n/**\n * Describes the message tailor.v1.OrganizationAccess.Team.\n * Use `create(OrganizationAccess_TeamSchema)` to create a new message.\n */\nexport const OrganizationAccess_TeamSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 1, 1);\n\n/**\n * Describes the message tailor.v1.Folder.\n * Use `create(FolderSchema)` to create a new message.\n */\nexport const FolderSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 2);\n\n/**\n * Describes the message tailor.v1.FolderAccess.\n * Use `create(FolderAccessSchema)` to create a new message.\n */\nexport const FolderAccessSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 3);\n\n/**\n * Describes the message tailor.v1.FolderAccess.PlatformUser.\n * Use `create(FolderAccess_PlatformUserSchema)` to create a new message.\n */\nexport const FolderAccess_PlatformUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 3, 0);\n\n/**\n * Describes the message tailor.v1.FolderAccess.Team.\n * Use `create(FolderAccess_TeamSchema)` to create a new message.\n */\nexport const FolderAccess_TeamSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 3, 1);\n\n/**\n * Describes the message tailor.v1.Team.\n * Use `create(TeamSchema)` to create a new message.\n */\nexport const TeamSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 4);\n\n/**\n * Describes the message tailor.v1.TeamMember.\n * Use `create(TeamMemberSchema)` to create a new message.\n */\nexport const TeamMemberSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 5);\n\n/**\n * Describes the message tailor.v1.TeamMember.PlatformUser.\n * Use `create(TeamMember_PlatformUserSchema)` to create a new message.\n */\nexport const TeamMember_PlatformUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 5, 0);\n\n/**\n * Describes the message tailor.v1.Workspace.\n * Use `create(WorkspaceSchema)` to create a new message.\n */\nexport const WorkspaceSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 6);\n\n/**\n * Describes the message tailor.v1.WorkspacePlatformUser.\n * Use `create(WorkspacePlatformUserSchema)` to create a new message.\n */\nexport const WorkspacePlatformUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 7);\n\n/**\n * Describes the message tailor.v1.WorkspacePlatformUser.PlatformUser.\n * Use `create(WorkspacePlatformUser_PlatformUserSchema)` to create a new message.\n */\nexport const WorkspacePlatformUser_PlatformUserSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 7, 0);\n\n/**\n * Describes the message tailor.v1.PlatformAccountPlan.\n * Use `create(PlatformAccountPlanSchema)` to create a new message.\n */\nexport const PlatformAccountPlanSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 8);\n\n/**\n * Describes the message tailor.v1.PlatformAccountPlan.PlatformAccountPlanTrial.\n * Use `create(PlatformAccountPlan_PlatformAccountPlanTrialSchema)` to create a new message.\n */\nexport const PlatformAccountPlan_PlatformAccountPlanTrialSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace_resource, 8, 0);\n\n/**\n * Describes the enum tailor.v1.OrganizationRole.\n */\nexport const OrganizationRoleSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workspace_resource, 0);\n\n/**\n * @generated from enum tailor.v1.OrganizationRole\n */\nexport const OrganizationRole = /*@__PURE__*/\n tsEnum(OrganizationRoleSchema);\n\n/**\n * Describes the enum tailor.v1.FolderRole.\n */\nexport const FolderRoleSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workspace_resource, 1);\n\n/**\n * @generated from enum tailor.v1.FolderRole\n */\nexport const FolderRole = /*@__PURE__*/\n tsEnum(FolderRoleSchema);\n\n/**\n * Describes the enum tailor.v1.TeamRole.\n */\nexport const TeamRoleSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workspace_resource, 2);\n\n/**\n * @generated from enum tailor.v1.TeamRole\n */\nexport const TeamRole = /*@__PURE__*/\n tsEnum(TeamRoleSchema);\n\n/**\n * Describes the enum tailor.v1.WorkspacePlatformUserRole.\n */\nexport const WorkspacePlatformUserRoleSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workspace_resource, 3);\n\n/**\n * @generated from enum tailor.v1.WorkspacePlatformUserRole\n */\nexport const WorkspacePlatformUserRole = /*@__PURE__*/\n tsEnum(WorkspacePlatformUserRoleSchema);\n\n/**\n * Describes the enum tailor.v1.PlatformAccountPlanType.\n */\nexport const PlatformAccountPlanTypeSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workspace_resource, 4);\n\n/**\n * @generated from enum tailor.v1.PlatformAccountPlanType\n */\nexport const PlatformAccountPlanType = /*@__PURE__*/\n tsEnum(PlatformAccountPlanTypeSchema);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/workspace.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { enumDesc, fileDesc, messageDesc, tsEnum } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_buf_validate_validate } from \"../../buf/validate/validate_pb\";\nimport { file_google_protobuf_field_mask } from \"@bufbuild/protobuf/wkt\";\nimport { file_tailor_fieldmask_v1_option } from \"../fieldmask/v1/option_pb\";\nimport { file_tailor_v1_resource } from \"./resource_pb\";\nimport { file_tailor_v1_workspace_resource } from \"./workspace_resource_pb\";\n\n/**\n * Describes the file tailor/v1/workspace.proto.\n */\nexport const file_tailor_v1_workspace = /*@__PURE__*/\n fileDesc(\"Chl0YWlsb3IvdjEvd29ya3NwYWNlLnByb3RvEgl0YWlsb3IudjEiJgokTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVJlZ2lvbnNSZXF1ZXN0IjgKJUxpc3RBdmFpbGFibGVXb3Jrc3BhY2VSZWdpb25zUmVzcG9uc2USDwoHcmVnaW9ucxgBIAMoCSLVAQoWQ3JlYXRlV29ya3NwYWNlUmVxdWVzdBJACg53b3Jrc3BhY2VfbmFtZRgBIAEoCUIoukglciMyIV5bYS16MC05XVthLXowLTktXXsxLDYxfVthLXowLTldJBIYChB3b3Jrc3BhY2VfcmVnaW9uGAIgASgJEiQKD29yZ2FuaXphdGlvbl9pZBgDIAEoCUILukgI2AEBcgOwAQESHgoJZm9sZGVyX2lkGAQgASgJQgu6SAjYAQFyA7ABARIZChFkZWxldGVfcHJvdGVjdGlvbhgFIAEoCCJCChdDcmVhdGVXb3Jrc3BhY2VSZXNwb25zZRInCgl3b3Jrc3BhY2UYASABKAsyFC50YWlsb3IudjEuV29ya3NwYWNlItgCChZVcGRhdGVXb3Jrc3BhY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESQwoOd29ya3NwYWNlX25hbWUYAiABKAlCK7pIKNgBAXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQSJAoPb3JnYW5pemF0aW9uX2lkGAMgASgJQgu6SAjYAQFyA7ABARIeCglmb2xkZXJfaWQYBCABKAlCC7pICNgBAXIDsAEBEhkKEWRlbGV0ZV9wcm90ZWN0aW9uGAUgASgIEngKC3VwZGF0ZV9tYXNrGGQgASgLMhouZ29vZ2xlLnByb3RvYnVmLkZpZWxkTWFza0JHivkrDndvcmtzcGFjZV9uYW1livkrD29yZ2FuaXphdGlvbl9pZIr5Kwlmb2xkZXJfaWSK+SsRZGVsZXRlX3Byb3RlY3Rpb24iQgoXVXBkYXRlV29ya3NwYWNlUmVzcG9uc2USJwoJd29ya3NwYWNlGAEgASgLMhQudGFpbG9yLnYxLldvcmtzcGFjZSI4ChZEZWxldGVXb3Jrc3BhY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQEiGQoXRGVsZXRlV29ya3NwYWNlUmVzcG9uc2Ui8wEKFUxpc3RXb3Jrc3BhY2VzUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgDIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uEkIKBHZpZXcYBCABKA4yJS50YWlsb3IudjEuTGlzdFdvcmtzcGFjZXNSZXF1ZXN0LlZpZXdCDbpICtgBAYIBBBABIAAiPQoEVmlldxIUChBWSUVXX1VOU1BFQ0lGSUVEEAASDAoIVklFV19BTEwQARIRCg1WSUVXX1BFUlNPTkFMEAIicAoWTGlzdFdvcmtzcGFjZXNSZXNwb25zZRIoCgp3b3Jrc3BhY2VzGAEgAygLMhQudGFpbG9yLnYxLldvcmtzcGFjZRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMivwEKIUxpc3RPcmdhbml6YXRpb25Xb3Jrc3BhY2VzUmVxdWVzdBISCgpwYWdlX3Rva2VuGAEgASgJEhEKCXBhZ2Vfc2l6ZRgCIAEoDRIwCg5wYWdlX2RpcmVjdGlvbhgDIAEoDjIYLnRhaWxvci52MS5QYWdlRGlyZWN0aW9uEiEKD29yZ2FuaXphdGlvbl9pZBgEIAEoCUIIukgFcgOwAQESHgoJZm9sZGVyX2lkGAUgASgJQgu6SAjYAQFyA7ABASJ8CiJMaXN0T3JnYW5pemF0aW9uV29ya3NwYWNlc1Jlc3BvbnNlEhcKD25leHRfcGFnZV90b2tlbhgBIAEoCRITCgt0b3RhbF9jb3VudBgCIAEoAxIoCgp3b3Jrc3BhY2VzGAMgAygLMhQudGFpbG9yLnYxLldvcmtzcGFjZSI5ChdSZXN0b3JlV29ya3NwYWNlUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBIhoKGFJlc3RvcmVXb3Jrc3BhY2VSZXNwb25zZSI1ChNHZXRXb3Jrc3BhY2VSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQEiPwoUR2V0V29ya3NwYWNlUmVzcG9uc2USJwoJd29ya3NwYWNlGAEgASgLMhQudGFpbG9yLnYxLldvcmtzcGFjZSKcAQohTGlzdFdvcmtzcGFjZVBsYXRmb3JtVXNlcnNSZXF1ZXN0EhIKCnBhZ2VfdG9rZW4YASABKAkSEQoJcGFnZV9zaXplGAIgASgNEh4KDHdvcmtzcGFjZV9pZBgDIAEoCUIIukgFcgOwAQESMAoOcGFnZV9kaXJlY3Rpb24YBCABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiKWAQoiTGlzdFdvcmtzcGFjZVBsYXRmb3JtVXNlcnNSZXNwb25zZRIXCg9uZXh0X3BhZ2VfdG9rZW4YASABKAkSQgoYd29ya3NwYWNlX3BsYXRmb3JtX3VzZXJzGAIgAygLMiAudGFpbG9yLnYxLldvcmtzcGFjZVBsYXRmb3JtVXNlchITCgt0b3RhbF9jb3VudBgDIAEoAyIwCi5MaXN0QXZhaWxhYmxlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUm9sZXNSZXF1ZXN0ImYKL0xpc3RBdmFpbGFibGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSb2xlc1Jlc3BvbnNlEjMKBXJvbGVzGAEgAygOMiQudGFpbG9yLnYxLldvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGUikAEKIkludml0ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABARIWCgVlbWFpbBgCIAEoCUIHukgEcgJgARIyCgRyb2xlGAMgASgOMiQudGFpbG9yLnYxLldvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGUiJQojSW52aXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVzcG9uc2UiXAoiUmVtb3ZlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVxdWVzdBIeCgx3b3Jrc3BhY2VfaWQYASABKAlCCLpIBXIDsAEBEhYKBWVtYWlsGAIgASgJQge6SARyAmABIiUKI1JlbW92ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlc3BvbnNlIpABCiJVcGRhdGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXF1ZXN0Eh4KDHdvcmtzcGFjZV9pZBgBIAEoCUIIukgFcgOwAQESFgoFZW1haWwYAiABKAlCB7pIBHICYAESMgoEcm9sZRgDIAEoDjIkLnRhaWxvci52MS5Xb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSb2xlIiUKI1VwZGF0ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlc3BvbnNlIkEKH0dldFdvcmtzcGFjZVBsYXRmb3JtVXNlclJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABASJlCiBHZXRXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXNwb25zZRJBChd3b3Jrc3BhY2VfcGxhdGZvcm1fdXNlchgBIAEoCzIgLnRhaWxvci52MS5Xb3Jrc3BhY2VQbGF0Zm9ybVVzZXIiOQoXR2V0V29ya3NwYWNlUm9sZVJlcXVlc3QSHgoMd29ya3NwYWNlX2lkGAEgASgJQgi6SAVyA7ABASJOChhHZXRXb3Jrc3BhY2VSb2xlUmVzcG9uc2USMgoEcm9sZRgBIAEoDjIkLnRhaWxvci52MS5Xb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSb2xlIoMBChlVcGRhdGVPcmdhbml6YXRpb25SZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESQwoRb3JnYW5pemF0aW9uX25hbWUYAiABKAlCKLpIJXIjMiFeW2EtejAtOV1bYS16MC05LV17MSw2MX1bYS16MC05XSQiSwoaVXBkYXRlT3JnYW5pemF0aW9uUmVzcG9uc2USLQoMb3JnYW5pemF0aW9uGAEgASgLMhcudGFpbG9yLnYxLk9yZ2FuaXphdGlvbiI7ChZHZXRPcmdhbml6YXRpb25SZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQEiSAoXR2V0T3JnYW5pemF0aW9uUmVzcG9uc2USLQoMb3JnYW5pemF0aW9uGAEgASgLMhcudGFpbG9yLnYxLk9yZ2FuaXphdGlvbiJzChhMaXN0T3JnYW5pemF0aW9uc1JlcXVlc3QSEgoKcGFnZV90b2tlbhgBIAEoCRIRCglwYWdlX3NpemUYAiABKA0SMAoOcGFnZV9kaXJlY3Rpb24YAyABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbiJ5ChlMaXN0T3JnYW5pemF0aW9uc1Jlc3BvbnNlEi4KDW9yZ2FuaXphdGlvbnMYASADKAsyFy50YWlsb3IudjEuT3JnYW5pemF0aW9uEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyIeChxMaXN0VXNlck9yZ2FuaXphdGlvbnNSZXF1ZXN0IocCCh1MaXN0VXNlck9yZ2FuaXphdGlvbnNSZXNwb25zZRJVChJ1c2VyX29yZ2FuaXphdGlvbnMYASADKAsyOS50YWlsb3IudjEuTGlzdFVzZXJPcmdhbml6YXRpb25zUmVzcG9uc2UuVXNlck9yZ2FuaXphdGlvbhqOAQoQVXNlck9yZ2FuaXphdGlvbhIXCg9vcmdhbml6YXRpb25faWQYASABKAkSGQoRb3JnYW5pemF0aW9uX25hbWUYAiABKAkSFgoOcm9vdF9mb2xkZXJfaWQYAyABKAkSGAoQcm9vdF9mb2xkZXJfbmFtZRgEIAEoCRIUCgxkaXNwbGF5X25hbWUYBSABKAkiwgEKHkdyYW50T3JnYW5pemF0aW9uQWNjZXNzUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEjUKBHJvbGUYAiABKA4yGy50YWlsb3IudjEuT3JnYW5pemF0aW9uUm9sZUIKukgHggEEEAEgABIbCgd0ZWFtX2lkGAMgASgJQgi6SAVyA7ABAUgAEhgKBWVtYWlsGAQgASgJQge6SARyAmABSABCDwoGbWVtYmVyEgW6SAIIASIhCh9HcmFudE9yZ2FuaXphdGlvbkFjY2Vzc1Jlc3BvbnNlIsMBCh9VcGRhdGVPcmdhbml6YXRpb25BY2Nlc3NSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESNQoEcm9sZRgCIAEoDjIbLnRhaWxvci52MS5Pcmdhbml6YXRpb25Sb2xlQgq6SAeCAQQQASAAEhsKB3RlYW1faWQYAyABKAlCCLpIBXIDsAEBSAASGAoFZW1haWwYBCABKAlCB7pIBHICYAFIAEIPCgZtZW1iZXISBbpIAggBIiIKIFVwZGF0ZU9yZ2FuaXphdGlvbkFjY2Vzc1Jlc3BvbnNlIowBCh9SZXZva2VPcmdhbml6YXRpb25BY2Nlc3NSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGwoHdGVhbV9pZBgCIAEoCUIIukgFcgOwAQFIABIYCgVlbWFpbBgDIAEoCUIHukgEcgJgAUgAQg8KBm1lbWJlchIFukgCCAEiIgogUmV2b2tlT3JnYW5pemF0aW9uQWNjZXNzUmVzcG9uc2UinQEKH0xpc3RPcmdhbml6YXRpb25BY2Nlc3Nlc1JlcXVlc3QSEgoKcGFnZV90b2tlbhgBIAEoCRIRCglwYWdlX3NpemUYAiABKA0SMAoOcGFnZV9kaXJlY3Rpb24YAyABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbhIhCg9vcmdhbml6YXRpb25faWQYBCABKAlCCLpIBXIDsAEBIo4BCiBMaXN0T3JnYW5pemF0aW9uQWNjZXNzZXNSZXNwb25zZRI8ChVvcmdhbml6YXRpb25fYWNjZXNzZXMYASADKAsyHS50YWlsb3IudjEuT3JnYW5pemF0aW9uQWNjZXNzEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyKJAQocR2V0T3JnYW5pemF0aW9uQWNjZXNzUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhsKB3RlYW1faWQYAiABKAlCCLpIBXIDsAEBSAASGAoFZW1haWwYAyABKAlCB7pIBHICYAFIAEIPCgZtZW1iZXISBbpIAggBIlsKHUdldE9yZ2FuaXphdGlvbkFjY2Vzc1Jlc3BvbnNlEjoKE29yZ2FuaXphdGlvbl9hY2Nlc3MYASABKAsyHS50YWlsb3IudjEuT3JnYW5pemF0aW9uQWNjZXNzIokBCh9DcmVhdGVPcmdhbml6YXRpb25Gb2xkZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESJQoQcGFyZW50X2ZvbGRlcl9pZBgCIAEoCUILukgI2AEBcgOwAQESHAoLZm9sZGVyX25hbWUYAyABKAlCB7pIBHICEAEiRQogQ3JlYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVzcG9uc2USIQoGZm9sZGVyGAEgASgLMhEudGFpbG9yLnYxLkZvbGRlciKmAQofVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhsKCWZvbGRlcl9pZBgCIAEoCUIIukgFcgOwAQESJQoQcGFyZW50X2ZvbGRlcl9pZBgDIAEoCUILukgI2AEBcgOwAQESHAoLZm9sZGVyX25hbWUYBCABKAlCB7pIBHICEAEiRQogVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVzcG9uc2USIQoGZm9sZGVyGAEgASgLMhEudGFpbG9yLnYxLkZvbGRlciJhCh9EZWxldGVPcmdhbml6YXRpb25Gb2xkZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGwoJZm9sZGVyX2lkGAIgASgJQgi6SAVyA7ABASIiCiBEZWxldGVPcmdhbml6YXRpb25Gb2xkZXJSZXNwb25zZSJeChxHZXRPcmdhbml6YXRpb25Gb2xkZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGwoJZm9sZGVyX2lkGAIgASgJQgi6SAVyA7ABASJCCh1HZXRPcmdhbml6YXRpb25Gb2xkZXJSZXNwb25zZRIhCgZmb2xkZXIYASABKAsyES50YWlsb3IudjEuRm9sZGVyIsMBCh5MaXN0T3JnYW5pemF0aW9uRm9sZGVyc1JlcXVlc3QSEgoKcGFnZV90b2tlbhgBIAEoCRIRCglwYWdlX3NpemUYAiABKA0SMAoOcGFnZV9kaXJlY3Rpb24YAyABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbhIhCg9vcmdhbml6YXRpb25faWQYBCABKAlCCLpIBXIDsAEBEiUKEHBhcmVudF9mb2xkZXJfaWQYBSABKAlCC7pICNgBAXIDsAEBInMKH0xpc3RPcmdhbml6YXRpb25Gb2xkZXJzUmVzcG9uc2USFwoPbmV4dF9wYWdlX3Rva2VuGAEgASgJEhMKC3RvdGFsX2NvdW50GAIgASgDEiIKB2ZvbGRlcnMYAyADKAsyES50YWlsb3IudjEuRm9sZGVyIt8BCiRHcmFudE9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc1JlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIbCglmb2xkZXJfaWQYAiABKAlCCLpIBXIDsAEBEi8KBHJvbGUYAyABKA4yFS50YWlsb3IudjEuRm9sZGVyUm9sZUIKukgHggEEEAEgABIbCgd0ZWFtX2lkGAQgASgJQgi6SAVyA7ABAUgAEhgKBWVtYWlsGAUgASgJQge6SARyAmABSABCDwoGbWVtYmVyEgW6SAIIASInCiVHcmFudE9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc1Jlc3BvbnNlIuABCiVVcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGwoJZm9sZGVyX2lkGAIgASgJQgi6SAVyA7ABARIvCgRyb2xlGAMgASgOMhUudGFpbG9yLnYxLkZvbGRlclJvbGVCCrpIB4IBBBABIAASGwoHdGVhbV9pZBgEIAEoCUIIukgFcgOwAQFIABIYCgVlbWFpbBgFIAEoCUIHukgEcgJgAUgAQg8KBm1lbWJlchIFukgCCAEiKAomVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVzcG9uc2UirwEKJVJldm9rZU9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc1JlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIbCglmb2xkZXJfaWQYAiABKAlCCLpIBXIDsAEBEhsKB3RlYW1faWQYAyABKAlCCLpIBXIDsAEBSAASGAoFZW1haWwYBCABKAlCB7pIBHICYAFIAEIPCgZtZW1iZXISBbpIAggBIigKJlJldm9rZU9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc1Jlc3BvbnNlIsABCiVMaXN0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzZXNSZXF1ZXN0EhIKCnBhZ2VfdG9rZW4YASABKAkSEQoJcGFnZV9zaXplGAIgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAMgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24SIQoPb3JnYW5pemF0aW9uX2lkGAQgASgJQgi6SAVyA7ABARIbCglmb2xkZXJfaWQYBSABKAlCCLpIBXIDsAEBIogBCiZMaXN0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzZXNSZXNwb25zZRIwCg9mb2xkZXJfYWNjZXNzZXMYASADKAsyFy50YWlsb3IudjEuRm9sZGVyQWNjZXNzEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyKsAQoiR2V0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhsKCWZvbGRlcl9pZBgCIAEoCUIIukgFcgOwAQESGwoHdGVhbV9pZBgDIAEoCUIIukgFcgOwAQFIABIYCgVlbWFpbBgEIAEoCUIHukgEcgJgAUgAQg8KBm1lbWJlchIFukgCCAEiVQojR2V0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVzcG9uc2USLgoNZm9sZGVyX2FjY2VzcxgBIAEoCzIXLnRhaWxvci52MS5Gb2xkZXJBY2Nlc3MiXgodQ3JlYXRlT3JnYW5pemF0aW9uVGVhbVJlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIaCgl0ZWFtX25hbWUYAiABKAlCB7pIBHICEAEiPwoeQ3JlYXRlT3JnYW5pemF0aW9uVGVhbVJlc3BvbnNlEh0KBHRlYW0YASABKAsyDy50YWlsb3IudjEuVGVhbSJ5Ch1VcGRhdGVPcmdhbml6YXRpb25UZWFtUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhkKB3RlYW1faWQYAiABKAlCCLpIBXIDsAEBEhoKCXRlYW1fbmFtZRgDIAEoCUIHukgEcgIQASI/Ch5VcGRhdGVPcmdhbml6YXRpb25UZWFtUmVzcG9uc2USHQoEdGVhbRgBIAEoCzIPLnRhaWxvci52MS5UZWFtIl0KHURlbGV0ZU9yZ2FuaXphdGlvblRlYW1SZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGQoHdGVhbV9pZBgCIAEoCUIIukgFcgOwAQEiIAoeRGVsZXRlT3JnYW5pemF0aW9uVGVhbVJlc3BvbnNlIpoBChxMaXN0T3JnYW5pemF0aW9uVGVhbXNSZXF1ZXN0EhIKCnBhZ2VfdG9rZW4YASABKAkSEQoJcGFnZV9zaXplGAIgASgNEjAKDnBhZ2VfZGlyZWN0aW9uGAMgASgOMhgudGFpbG9yLnYxLlBhZ2VEaXJlY3Rpb24SIQoPb3JnYW5pemF0aW9uX2lkGAQgASgJQgi6SAVyA7ABASJtCh1MaXN0T3JnYW5pemF0aW9uVGVhbXNSZXNwb25zZRIeCgV0ZWFtcxgBIAMoCzIPLnRhaWxvci52MS5UZWFtEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRITCgt0b3RhbF9jb3VudBgDIAEoAyJaChpHZXRPcmdhbml6YXRpb25UZWFtUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhkKB3RlYW1faWQYAiABKAlCCLpIBXIDsAEBIjwKG0dldE9yZ2FuaXphdGlvblRlYW1SZXNwb25zZRIdCgR0ZWFtGAEgASgLMg8udGFpbG9yLnYxLlRlYW0ipwEKIEFkZE9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGQoHdGVhbV9pZBgCIAEoCUIIukgFcgOwAQESFgoFZW1haWwYAyABKAlCB7pIBHICYAESLQoEcm9sZRgEIAEoDjITLnRhaWxvci52MS5UZWFtUm9sZUIKukgHggEEEAEgACIjCiFBZGRPcmdhbml6YXRpb25UZWFtTWVtYmVyUmVzcG9uc2UiqgEKI1VwZGF0ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGQoHdGVhbV9pZBgCIAEoCUIIukgFcgOwAQESFgoFZW1haWwYAyABKAlCB7pIBHICYAESLQoEcm9sZRgEIAEoDjITLnRhaWxvci52MS5UZWFtUm9sZUIKukgHggEEEAEgACImCiRVcGRhdGVPcmdhbml6YXRpb25UZWFtTWVtYmVyUmVzcG9uc2UiewojUmVtb3ZlT3JnYW5pemF0aW9uVGVhbU1lbWJlclJlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIZCgd0ZWFtX2lkGAIgASgJQgi6SAVyA7ABARIWCgVlbWFpbBgDIAEoCUIHukgEcgJgASImCiRSZW1vdmVPcmdhbml6YXRpb25UZWFtTWVtYmVyUmVzcG9uc2UiuwEKIkxpc3RPcmdhbml6YXRpb25UZWFtTWVtYmVyc1JlcXVlc3QSEgoKcGFnZV90b2tlbhgBIAEoCRIRCglwYWdlX3NpemUYAiABKA0SMAoOcGFnZV9kaXJlY3Rpb24YAyABKA4yGC50YWlsb3IudjEuUGFnZURpcmVjdGlvbhIhCg9vcmdhbml6YXRpb25faWQYBCABKAlCCLpIBXIDsAEBEhkKB3RlYW1faWQYBSABKAlCCLpIBXIDsAEBIoABCiNMaXN0T3JnYW5pemF0aW9uVGVhbU1lbWJlcnNSZXNwb25zZRIrCgx0ZWFtX21lbWJlcnMYASADKAsyFS50YWlsb3IudjEuVGVhbU1lbWJlchIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkSEwoLdG90YWxfY291bnQYAyABKAMieAogR2V0T3JnYW5pemF0aW9uVGVhbU1lbWJlclJlcXVlc3QSIQoPb3JnYW5pemF0aW9uX2lkGAEgASgJQgi6SAVyA7ABARIZCgd0ZWFtX2lkGAIgASgJQgi6SAVyA7ABARIWCgVlbWFpbBgDIAEoCUIHukgEcgJgASJPCiFHZXRPcmdhbml6YXRpb25UZWFtTWVtYmVyUmVzcG9uc2USKgoLdGVhbV9tZW1iZXIYASABKAsyFS50YWlsb3IudjEuVGVhbU1lbWJlciIfCh1HZXRQbGF0Zm9ybUFjY291bnRQbGFuUmVxdWVzdCJWCh5HZXRQbGF0Zm9ybUFjY291bnRQbGFuUmVzcG9uc2USNAoMY3VycmVudF9wbGFuGAEgASgLMh4udGFpbG9yLnYxLlBsYXRmb3JtQWNjb3VudFBsYW5iBnByb3RvMw\", [file_buf_validate_validate, file_google_protobuf_field_mask, file_tailor_fieldmask_v1_option, file_tailor_v1_resource, file_tailor_v1_workspace_resource]);\n\n/**\n * Describes the message tailor.v1.ListAvailableWorkspaceRegionsRequest.\n * Use `create(ListAvailableWorkspaceRegionsRequestSchema)` to create a new message.\n */\nexport const ListAvailableWorkspaceRegionsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 0);\n\n/**\n * Describes the message tailor.v1.ListAvailableWorkspaceRegionsResponse.\n * Use `create(ListAvailableWorkspaceRegionsResponseSchema)` to create a new message.\n */\nexport const ListAvailableWorkspaceRegionsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 1);\n\n/**\n * Describes the message tailor.v1.CreateWorkspaceRequest.\n * Use `create(CreateWorkspaceRequestSchema)` to create a new message.\n */\nexport const CreateWorkspaceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 2);\n\n/**\n * Describes the message tailor.v1.CreateWorkspaceResponse.\n * Use `create(CreateWorkspaceResponseSchema)` to create a new message.\n */\nexport const CreateWorkspaceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 3);\n\n/**\n * Describes the message tailor.v1.UpdateWorkspaceRequest.\n * Use `create(UpdateWorkspaceRequestSchema)` to create a new message.\n */\nexport const UpdateWorkspaceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 4);\n\n/**\n * Describes the message tailor.v1.UpdateWorkspaceResponse.\n * Use `create(UpdateWorkspaceResponseSchema)` to create a new message.\n */\nexport const UpdateWorkspaceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 5);\n\n/**\n * Describes the message tailor.v1.DeleteWorkspaceRequest.\n * Use `create(DeleteWorkspaceRequestSchema)` to create a new message.\n */\nexport const DeleteWorkspaceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 6);\n\n/**\n * Describes the message tailor.v1.DeleteWorkspaceResponse.\n * Use `create(DeleteWorkspaceResponseSchema)` to create a new message.\n */\nexport const DeleteWorkspaceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 7);\n\n/**\n * Describes the message tailor.v1.ListWorkspacesRequest.\n * Use `create(ListWorkspacesRequestSchema)` to create a new message.\n */\nexport const ListWorkspacesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 8);\n\n/**\n * Describes the enum tailor.v1.ListWorkspacesRequest.View.\n */\nexport const ListWorkspacesRequest_ViewSchema = /*@__PURE__*/\n enumDesc(file_tailor_v1_workspace, 8, 0);\n\n/**\n * @generated from enum tailor.v1.ListWorkspacesRequest.View\n */\nexport const ListWorkspacesRequest_View = /*@__PURE__*/\n tsEnum(ListWorkspacesRequest_ViewSchema);\n\n/**\n * Describes the message tailor.v1.ListWorkspacesResponse.\n * Use `create(ListWorkspacesResponseSchema)` to create a new message.\n */\nexport const ListWorkspacesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 9);\n\n/**\n * Describes the message tailor.v1.ListOrganizationWorkspacesRequest.\n * Use `create(ListOrganizationWorkspacesRequestSchema)` to create a new message.\n */\nexport const ListOrganizationWorkspacesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 10);\n\n/**\n * Describes the message tailor.v1.ListOrganizationWorkspacesResponse.\n * Use `create(ListOrganizationWorkspacesResponseSchema)` to create a new message.\n */\nexport const ListOrganizationWorkspacesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 11);\n\n/**\n * Describes the message tailor.v1.RestoreWorkspaceRequest.\n * Use `create(RestoreWorkspaceRequestSchema)` to create a new message.\n */\nexport const RestoreWorkspaceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 12);\n\n/**\n * Describes the message tailor.v1.RestoreWorkspaceResponse.\n * Use `create(RestoreWorkspaceResponseSchema)` to create a new message.\n */\nexport const RestoreWorkspaceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 13);\n\n/**\n * Describes the message tailor.v1.GetWorkspaceRequest.\n * Use `create(GetWorkspaceRequestSchema)` to create a new message.\n */\nexport const GetWorkspaceRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 14);\n\n/**\n * Describes the message tailor.v1.GetWorkspaceResponse.\n * Use `create(GetWorkspaceResponseSchema)` to create a new message.\n */\nexport const GetWorkspaceResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 15);\n\n/**\n * Describes the message tailor.v1.ListWorkspacePlatformUsersRequest.\n * Use `create(ListWorkspacePlatformUsersRequestSchema)` to create a new message.\n */\nexport const ListWorkspacePlatformUsersRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 16);\n\n/**\n * Describes the message tailor.v1.ListWorkspacePlatformUsersResponse.\n * Use `create(ListWorkspacePlatformUsersResponseSchema)` to create a new message.\n */\nexport const ListWorkspacePlatformUsersResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 17);\n\n/**\n * Describes the message tailor.v1.ListAvailableWorkspacePlatformUserRolesRequest.\n * Use `create(ListAvailableWorkspacePlatformUserRolesRequestSchema)` to create a new message.\n */\nexport const ListAvailableWorkspacePlatformUserRolesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 18);\n\n/**\n * Describes the message tailor.v1.ListAvailableWorkspacePlatformUserRolesResponse.\n * Use `create(ListAvailableWorkspacePlatformUserRolesResponseSchema)` to create a new message.\n */\nexport const ListAvailableWorkspacePlatformUserRolesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 19);\n\n/**\n * Describes the message tailor.v1.InviteWorkspacePlatformUserRequest.\n * Use `create(InviteWorkspacePlatformUserRequestSchema)` to create a new message.\n */\nexport const InviteWorkspacePlatformUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 20);\n\n/**\n * Describes the message tailor.v1.InviteWorkspacePlatformUserResponse.\n * Use `create(InviteWorkspacePlatformUserResponseSchema)` to create a new message.\n */\nexport const InviteWorkspacePlatformUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 21);\n\n/**\n * Describes the message tailor.v1.RemoveWorkspacePlatformUserRequest.\n * Use `create(RemoveWorkspacePlatformUserRequestSchema)` to create a new message.\n */\nexport const RemoveWorkspacePlatformUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 22);\n\n/**\n * Describes the message tailor.v1.RemoveWorkspacePlatformUserResponse.\n * Use `create(RemoveWorkspacePlatformUserResponseSchema)` to create a new message.\n */\nexport const RemoveWorkspacePlatformUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 23);\n\n/**\n * Describes the message tailor.v1.UpdateWorkspacePlatformUserRequest.\n * Use `create(UpdateWorkspacePlatformUserRequestSchema)` to create a new message.\n */\nexport const UpdateWorkspacePlatformUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 24);\n\n/**\n * Describes the message tailor.v1.UpdateWorkspacePlatformUserResponse.\n * Use `create(UpdateWorkspacePlatformUserResponseSchema)` to create a new message.\n */\nexport const UpdateWorkspacePlatformUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 25);\n\n/**\n * Describes the message tailor.v1.GetWorkspacePlatformUserRequest.\n * Use `create(GetWorkspacePlatformUserRequestSchema)` to create a new message.\n */\nexport const GetWorkspacePlatformUserRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 26);\n\n/**\n * Describes the message tailor.v1.GetWorkspacePlatformUserResponse.\n * Use `create(GetWorkspacePlatformUserResponseSchema)` to create a new message.\n */\nexport const GetWorkspacePlatformUserResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 27);\n\n/**\n * Describes the message tailor.v1.GetWorkspaceRoleRequest.\n * Use `create(GetWorkspaceRoleRequestSchema)` to create a new message.\n */\nexport const GetWorkspaceRoleRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 28);\n\n/**\n * Describes the message tailor.v1.GetWorkspaceRoleResponse.\n * Use `create(GetWorkspaceRoleResponseSchema)` to create a new message.\n */\nexport const GetWorkspaceRoleResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 29);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationRequest.\n * Use `create(UpdateOrganizationRequestSchema)` to create a new message.\n */\nexport const UpdateOrganizationRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 30);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationResponse.\n * Use `create(UpdateOrganizationResponseSchema)` to create a new message.\n */\nexport const UpdateOrganizationResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 31);\n\n/**\n * Describes the message tailor.v1.GetOrganizationRequest.\n * Use `create(GetOrganizationRequestSchema)` to create a new message.\n */\nexport const GetOrganizationRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 32);\n\n/**\n * Describes the message tailor.v1.GetOrganizationResponse.\n * Use `create(GetOrganizationResponseSchema)` to create a new message.\n */\nexport const GetOrganizationResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 33);\n\n/**\n * Describes the message tailor.v1.ListOrganizationsRequest.\n * Use `create(ListOrganizationsRequestSchema)` to create a new message.\n */\nexport const ListOrganizationsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 34);\n\n/**\n * Describes the message tailor.v1.ListOrganizationsResponse.\n * Use `create(ListOrganizationsResponseSchema)` to create a new message.\n */\nexport const ListOrganizationsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 35);\n\n/**\n * Describes the message tailor.v1.ListUserOrganizationsRequest.\n * Use `create(ListUserOrganizationsRequestSchema)` to create a new message.\n */\nexport const ListUserOrganizationsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 36);\n\n/**\n * Describes the message tailor.v1.ListUserOrganizationsResponse.\n * Use `create(ListUserOrganizationsResponseSchema)` to create a new message.\n */\nexport const ListUserOrganizationsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 37);\n\n/**\n * Describes the message tailor.v1.ListUserOrganizationsResponse.UserOrganization.\n * Use `create(ListUserOrganizationsResponse_UserOrganizationSchema)` to create a new message.\n */\nexport const ListUserOrganizationsResponse_UserOrganizationSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 37, 0);\n\n/**\n * Describes the message tailor.v1.GrantOrganizationAccessRequest.\n * Use `create(GrantOrganizationAccessRequestSchema)` to create a new message.\n */\nexport const GrantOrganizationAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 38);\n\n/**\n * Describes the message tailor.v1.GrantOrganizationAccessResponse.\n * Use `create(GrantOrganizationAccessResponseSchema)` to create a new message.\n */\nexport const GrantOrganizationAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 39);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationAccessRequest.\n * Use `create(UpdateOrganizationAccessRequestSchema)` to create a new message.\n */\nexport const UpdateOrganizationAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 40);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationAccessResponse.\n * Use `create(UpdateOrganizationAccessResponseSchema)` to create a new message.\n */\nexport const UpdateOrganizationAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 41);\n\n/**\n * Describes the message tailor.v1.RevokeOrganizationAccessRequest.\n * Use `create(RevokeOrganizationAccessRequestSchema)` to create a new message.\n */\nexport const RevokeOrganizationAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 42);\n\n/**\n * Describes the message tailor.v1.RevokeOrganizationAccessResponse.\n * Use `create(RevokeOrganizationAccessResponseSchema)` to create a new message.\n */\nexport const RevokeOrganizationAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 43);\n\n/**\n * Describes the message tailor.v1.ListOrganizationAccessesRequest.\n * Use `create(ListOrganizationAccessesRequestSchema)` to create a new message.\n */\nexport const ListOrganizationAccessesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 44);\n\n/**\n * Describes the message tailor.v1.ListOrganizationAccessesResponse.\n * Use `create(ListOrganizationAccessesResponseSchema)` to create a new message.\n */\nexport const ListOrganizationAccessesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 45);\n\n/**\n * Describes the message tailor.v1.GetOrganizationAccessRequest.\n * Use `create(GetOrganizationAccessRequestSchema)` to create a new message.\n */\nexport const GetOrganizationAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 46);\n\n/**\n * Describes the message tailor.v1.GetOrganizationAccessResponse.\n * Use `create(GetOrganizationAccessResponseSchema)` to create a new message.\n */\nexport const GetOrganizationAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 47);\n\n/**\n * Describes the message tailor.v1.CreateOrganizationFolderRequest.\n * Use `create(CreateOrganizationFolderRequestSchema)` to create a new message.\n */\nexport const CreateOrganizationFolderRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 48);\n\n/**\n * Describes the message tailor.v1.CreateOrganizationFolderResponse.\n * Use `create(CreateOrganizationFolderResponseSchema)` to create a new message.\n */\nexport const CreateOrganizationFolderResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 49);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationFolderRequest.\n * Use `create(UpdateOrganizationFolderRequestSchema)` to create a new message.\n */\nexport const UpdateOrganizationFolderRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 50);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationFolderResponse.\n * Use `create(UpdateOrganizationFolderResponseSchema)` to create a new message.\n */\nexport const UpdateOrganizationFolderResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 51);\n\n/**\n * Describes the message tailor.v1.DeleteOrganizationFolderRequest.\n * Use `create(DeleteOrganizationFolderRequestSchema)` to create a new message.\n */\nexport const DeleteOrganizationFolderRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 52);\n\n/**\n * Describes the message tailor.v1.DeleteOrganizationFolderResponse.\n * Use `create(DeleteOrganizationFolderResponseSchema)` to create a new message.\n */\nexport const DeleteOrganizationFolderResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 53);\n\n/**\n * Describes the message tailor.v1.GetOrganizationFolderRequest.\n * Use `create(GetOrganizationFolderRequestSchema)` to create a new message.\n */\nexport const GetOrganizationFolderRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 54);\n\n/**\n * Describes the message tailor.v1.GetOrganizationFolderResponse.\n * Use `create(GetOrganizationFolderResponseSchema)` to create a new message.\n */\nexport const GetOrganizationFolderResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 55);\n\n/**\n * Describes the message tailor.v1.ListOrganizationFoldersRequest.\n * Use `create(ListOrganizationFoldersRequestSchema)` to create a new message.\n */\nexport const ListOrganizationFoldersRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 56);\n\n/**\n * Describes the message tailor.v1.ListOrganizationFoldersResponse.\n * Use `create(ListOrganizationFoldersResponseSchema)` to create a new message.\n */\nexport const ListOrganizationFoldersResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 57);\n\n/**\n * Describes the message tailor.v1.GrantOrganizationFolderAccessRequest.\n * Use `create(GrantOrganizationFolderAccessRequestSchema)` to create a new message.\n */\nexport const GrantOrganizationFolderAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 58);\n\n/**\n * Describes the message tailor.v1.GrantOrganizationFolderAccessResponse.\n * Use `create(GrantOrganizationFolderAccessResponseSchema)` to create a new message.\n */\nexport const GrantOrganizationFolderAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 59);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationFolderAccessRequest.\n * Use `create(UpdateOrganizationFolderAccessRequestSchema)` to create a new message.\n */\nexport const UpdateOrganizationFolderAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 60);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationFolderAccessResponse.\n * Use `create(UpdateOrganizationFolderAccessResponseSchema)` to create a new message.\n */\nexport const UpdateOrganizationFolderAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 61);\n\n/**\n * Describes the message tailor.v1.RevokeOrganizationFolderAccessRequest.\n * Use `create(RevokeOrganizationFolderAccessRequestSchema)` to create a new message.\n */\nexport const RevokeOrganizationFolderAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 62);\n\n/**\n * Describes the message tailor.v1.RevokeOrganizationFolderAccessResponse.\n * Use `create(RevokeOrganizationFolderAccessResponseSchema)` to create a new message.\n */\nexport const RevokeOrganizationFolderAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 63);\n\n/**\n * Describes the message tailor.v1.ListOrganizationFolderAccessesRequest.\n * Use `create(ListOrganizationFolderAccessesRequestSchema)` to create a new message.\n */\nexport const ListOrganizationFolderAccessesRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 64);\n\n/**\n * Describes the message tailor.v1.ListOrganizationFolderAccessesResponse.\n * Use `create(ListOrganizationFolderAccessesResponseSchema)` to create a new message.\n */\nexport const ListOrganizationFolderAccessesResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 65);\n\n/**\n * Describes the message tailor.v1.GetOrganizationFolderAccessRequest.\n * Use `create(GetOrganizationFolderAccessRequestSchema)` to create a new message.\n */\nexport const GetOrganizationFolderAccessRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 66);\n\n/**\n * Describes the message tailor.v1.GetOrganizationFolderAccessResponse.\n * Use `create(GetOrganizationFolderAccessResponseSchema)` to create a new message.\n */\nexport const GetOrganizationFolderAccessResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 67);\n\n/**\n * Describes the message tailor.v1.CreateOrganizationTeamRequest.\n * Use `create(CreateOrganizationTeamRequestSchema)` to create a new message.\n */\nexport const CreateOrganizationTeamRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 68);\n\n/**\n * Describes the message tailor.v1.CreateOrganizationTeamResponse.\n * Use `create(CreateOrganizationTeamResponseSchema)` to create a new message.\n */\nexport const CreateOrganizationTeamResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 69);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationTeamRequest.\n * Use `create(UpdateOrganizationTeamRequestSchema)` to create a new message.\n */\nexport const UpdateOrganizationTeamRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 70);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationTeamResponse.\n * Use `create(UpdateOrganizationTeamResponseSchema)` to create a new message.\n */\nexport const UpdateOrganizationTeamResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 71);\n\n/**\n * Describes the message tailor.v1.DeleteOrganizationTeamRequest.\n * Use `create(DeleteOrganizationTeamRequestSchema)` to create a new message.\n */\nexport const DeleteOrganizationTeamRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 72);\n\n/**\n * Describes the message tailor.v1.DeleteOrganizationTeamResponse.\n * Use `create(DeleteOrganizationTeamResponseSchema)` to create a new message.\n */\nexport const DeleteOrganizationTeamResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 73);\n\n/**\n * Describes the message tailor.v1.ListOrganizationTeamsRequest.\n * Use `create(ListOrganizationTeamsRequestSchema)` to create a new message.\n */\nexport const ListOrganizationTeamsRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 74);\n\n/**\n * Describes the message tailor.v1.ListOrganizationTeamsResponse.\n * Use `create(ListOrganizationTeamsResponseSchema)` to create a new message.\n */\nexport const ListOrganizationTeamsResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 75);\n\n/**\n * Describes the message tailor.v1.GetOrganizationTeamRequest.\n * Use `create(GetOrganizationTeamRequestSchema)` to create a new message.\n */\nexport const GetOrganizationTeamRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 76);\n\n/**\n * Describes the message tailor.v1.GetOrganizationTeamResponse.\n * Use `create(GetOrganizationTeamResponseSchema)` to create a new message.\n */\nexport const GetOrganizationTeamResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 77);\n\n/**\n * Describes the message tailor.v1.AddOrganizationTeamMemberRequest.\n * Use `create(AddOrganizationTeamMemberRequestSchema)` to create a new message.\n */\nexport const AddOrganizationTeamMemberRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 78);\n\n/**\n * Describes the message tailor.v1.AddOrganizationTeamMemberResponse.\n * Use `create(AddOrganizationTeamMemberResponseSchema)` to create a new message.\n */\nexport const AddOrganizationTeamMemberResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 79);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationTeamMemberRequest.\n * Use `create(UpdateOrganizationTeamMemberRequestSchema)` to create a new message.\n */\nexport const UpdateOrganizationTeamMemberRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 80);\n\n/**\n * Describes the message tailor.v1.UpdateOrganizationTeamMemberResponse.\n * Use `create(UpdateOrganizationTeamMemberResponseSchema)` to create a new message.\n */\nexport const UpdateOrganizationTeamMemberResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 81);\n\n/**\n * Describes the message tailor.v1.RemoveOrganizationTeamMemberRequest.\n * Use `create(RemoveOrganizationTeamMemberRequestSchema)` to create a new message.\n */\nexport const RemoveOrganizationTeamMemberRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 82);\n\n/**\n * Describes the message tailor.v1.RemoveOrganizationTeamMemberResponse.\n * Use `create(RemoveOrganizationTeamMemberResponseSchema)` to create a new message.\n */\nexport const RemoveOrganizationTeamMemberResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 83);\n\n/**\n * Describes the message tailor.v1.ListOrganizationTeamMembersRequest.\n * Use `create(ListOrganizationTeamMembersRequestSchema)` to create a new message.\n */\nexport const ListOrganizationTeamMembersRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 84);\n\n/**\n * Describes the message tailor.v1.ListOrganizationTeamMembersResponse.\n * Use `create(ListOrganizationTeamMembersResponseSchema)` to create a new message.\n */\nexport const ListOrganizationTeamMembersResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 85);\n\n/**\n * Describes the message tailor.v1.GetOrganizationTeamMemberRequest.\n * Use `create(GetOrganizationTeamMemberRequestSchema)` to create a new message.\n */\nexport const GetOrganizationTeamMemberRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 86);\n\n/**\n * Describes the message tailor.v1.GetOrganizationTeamMemberResponse.\n * Use `create(GetOrganizationTeamMemberResponseSchema)` to create a new message.\n */\nexport const GetOrganizationTeamMemberResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 87);\n\n/**\n * Describes the message tailor.v1.GetPlatformAccountPlanRequest.\n * Use `create(GetPlatformAccountPlanRequestSchema)` to create a new message.\n */\nexport const GetPlatformAccountPlanRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 88);\n\n/**\n * Describes the message tailor.v1.GetPlatformAccountPlanResponse.\n * Use `create(GetPlatformAccountPlanResponseSchema)` to create a new message.\n */\nexport const GetPlatformAccountPlanResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_workspace, 89);\n\n","// @generated by protoc-gen-es v2.6.3\n// @generated from file tailor/v1/service.proto (package tailor.v1, syntax proto3)\n/* eslint-disable */\n\nimport { fileDesc, messageDesc, serviceDesc } from \"@bufbuild/protobuf/codegenv2\";\nimport { file_tailor_v1_application } from \"./application_pb\";\nimport { file_tailor_v1_auth } from \"./auth_pb\";\nimport { file_tailor_v1_events } from \"./events_pb\";\nimport { file_tailor_v1_executor } from \"./executor_pb\";\nimport { file_tailor_v1_function } from \"./function_pb\";\nimport { file_tailor_v1_idp } from \"./idp_pb\";\nimport { file_tailor_v1_metadata } from \"./metadata_pb\";\nimport { file_tailor_v1_meter } from \"./meter_pb\";\nimport { file_tailor_v1_pipeline } from \"./pipeline_pb\";\nimport { file_tailor_v1_secret_manager } from \"./secret_manager_pb\";\nimport { file_tailor_v1_stateflow } from \"./stateflow_pb\";\nimport { file_tailor_v1_staticwebsite } from \"./staticwebsite_pb\";\nimport { file_tailor_v1_tailordb } from \"./tailordb_pb\";\nimport { file_tailor_v1_workflow } from \"./workflow_pb\";\nimport { file_tailor_v1_workspace } from \"./workspace_pb\";\n\n/**\n * Describes the file tailor/v1/service.proto.\n */\nexport const file_tailor_v1_service = /*@__PURE__*/\n fileDesc(\"Chd0YWlsb3IvdjEvc2VydmljZS5wcm90bxIJdGFpbG9yLnYxIg0KC1BpbmdSZXF1ZXN0Ig4KDFBpbmdSZXNwb25zZTL3pQEKD09wZXJhdG9yU2VydmljZRI5CgRQaW5nEhYudGFpbG9yLnYxLlBpbmdSZXF1ZXN0GhcudGFpbG9yLnYxLlBpbmdSZXNwb25zZSIAEoQBCh1MaXN0QXZhaWxhYmxlV29ya3NwYWNlUmVnaW9ucxIvLnRhaWxvci52MS5MaXN0QXZhaWxhYmxlV29ya3NwYWNlUmVnaW9uc1JlcXVlc3QaMC50YWlsb3IudjEuTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVJlZ2lvbnNSZXNwb25zZSIAEloKD0NyZWF0ZVdvcmtzcGFjZRIhLnRhaWxvci52MS5DcmVhdGVXb3Jrc3BhY2VSZXF1ZXN0GiIudGFpbG9yLnYxLkNyZWF0ZVdvcmtzcGFjZVJlc3BvbnNlIgASWgoPVXBkYXRlV29ya3NwYWNlEiEudGFpbG9yLnYxLlVwZGF0ZVdvcmtzcGFjZVJlcXVlc3QaIi50YWlsb3IudjEuVXBkYXRlV29ya3NwYWNlUmVzcG9uc2UiABJaCg9EZWxldGVXb3Jrc3BhY2USIS50YWlsb3IudjEuRGVsZXRlV29ya3NwYWNlUmVxdWVzdBoiLnRhaWxvci52MS5EZWxldGVXb3Jrc3BhY2VSZXNwb25zZSIAElcKDkxpc3RXb3Jrc3BhY2VzEiAudGFpbG9yLnYxLkxpc3RXb3Jrc3BhY2VzUmVxdWVzdBohLnRhaWxvci52MS5MaXN0V29ya3NwYWNlc1Jlc3BvbnNlIgASewoaTGlzdE9yZ2FuaXphdGlvbldvcmtzcGFjZXMSLC50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbldvcmtzcGFjZXNSZXF1ZXN0Gi0udGFpbG9yLnYxLkxpc3RPcmdhbml6YXRpb25Xb3Jrc3BhY2VzUmVzcG9uc2UiABJdChBSZXN0b3JlV29ya3NwYWNlEiIudGFpbG9yLnYxLlJlc3RvcmVXb3Jrc3BhY2VSZXF1ZXN0GiMudGFpbG9yLnYxLlJlc3RvcmVXb3Jrc3BhY2VSZXNwb25zZSIAElEKDEdldFdvcmtzcGFjZRIeLnRhaWxvci52MS5HZXRXb3Jrc3BhY2VSZXF1ZXN0Gh8udGFpbG9yLnYxLkdldFdvcmtzcGFjZVJlc3BvbnNlIgASewoaTGlzdFdvcmtzcGFjZVBsYXRmb3JtVXNlcnMSLC50YWlsb3IudjEuTGlzdFdvcmtzcGFjZVBsYXRmb3JtVXNlcnNSZXF1ZXN0Gi0udGFpbG9yLnYxLkxpc3RXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJzUmVzcG9uc2UiABKiAQonTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGVzEjkudGFpbG9yLnYxLkxpc3RBdmFpbGFibGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSb2xlc1JlcXVlc3QaOi50YWlsb3IudjEuTGlzdEF2YWlsYWJsZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJvbGVzUmVzcG9uc2UiABJ+ChtJbnZpdGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXISLS50YWlsb3IudjEuSW52aXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVxdWVzdBouLnRhaWxvci52MS5JbnZpdGVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXNwb25zZSIAEn4KG1JlbW92ZVdvcmtzcGFjZVBsYXRmb3JtVXNlchItLnRhaWxvci52MS5SZW1vdmVXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXF1ZXN0Gi4udGFpbG9yLnYxLlJlbW92ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlc3BvbnNlIgASfgobVXBkYXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyEi0udGFpbG9yLnYxLlVwZGF0ZVdvcmtzcGFjZVBsYXRmb3JtVXNlclJlcXVlc3QaLi50YWlsb3IudjEuVXBkYXRlV29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVzcG9uc2UiABJ1ChhHZXRXb3Jrc3BhY2VQbGF0Zm9ybVVzZXISKi50YWlsb3IudjEuR2V0V29ya3NwYWNlUGxhdGZvcm1Vc2VyUmVxdWVzdBorLnRhaWxvci52MS5HZXRXb3Jrc3BhY2VQbGF0Zm9ybVVzZXJSZXNwb25zZSIAEl0KEEdldFdvcmtzcGFjZVJvbGUSIi50YWlsb3IudjEuR2V0V29ya3NwYWNlUm9sZVJlcXVlc3QaIy50YWlsb3IudjEuR2V0V29ya3NwYWNlUm9sZVJlc3BvbnNlIgASYwoSVXBkYXRlT3JnYW5pemF0aW9uEiQudGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvblJlcXVlc3QaJS50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uUmVzcG9uc2UiABJaCg9HZXRPcmdhbml6YXRpb24SIS50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uUmVxdWVzdBoiLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25SZXNwb25zZSIAEmAKEUxpc3RPcmdhbml6YXRpb25zEiMudGFpbG9yLnYxLkxpc3RPcmdhbml6YXRpb25zUmVxdWVzdBokLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uc1Jlc3BvbnNlIgASbAoVTGlzdFVzZXJPcmdhbml6YXRpb25zEicudGFpbG9yLnYxLkxpc3RVc2VyT3JnYW5pemF0aW9uc1JlcXVlc3QaKC50YWlsb3IudjEuTGlzdFVzZXJPcmdhbml6YXRpb25zUmVzcG9uc2UiABJyChdHcmFudE9yZ2FuaXphdGlvbkFjY2VzcxIpLnRhaWxvci52MS5HcmFudE9yZ2FuaXphdGlvbkFjY2Vzc1JlcXVlc3QaKi50YWlsb3IudjEuR3JhbnRPcmdhbml6YXRpb25BY2Nlc3NSZXNwb25zZSIAEnUKGFVwZGF0ZU9yZ2FuaXphdGlvbkFjY2VzcxIqLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25BY2Nlc3NSZXF1ZXN0GisudGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvbkFjY2Vzc1Jlc3BvbnNlIgASdQoYUmV2b2tlT3JnYW5pemF0aW9uQWNjZXNzEioudGFpbG9yLnYxLlJldm9rZU9yZ2FuaXphdGlvbkFjY2Vzc1JlcXVlc3QaKy50YWlsb3IudjEuUmV2b2tlT3JnYW5pemF0aW9uQWNjZXNzUmVzcG9uc2UiABJ1ChhMaXN0T3JnYW5pemF0aW9uQWNjZXNzZXMSKi50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbkFjY2Vzc2VzUmVxdWVzdBorLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uQWNjZXNzZXNSZXNwb25zZSIAEmwKFUdldE9yZ2FuaXphdGlvbkFjY2VzcxInLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25BY2Nlc3NSZXF1ZXN0GigudGFpbG9yLnYxLkdldE9yZ2FuaXphdGlvbkFjY2Vzc1Jlc3BvbnNlIgASdQoYQ3JlYXRlT3JnYW5pemF0aW9uRm9sZGVyEioudGFpbG9yLnYxLkNyZWF0ZU9yZ2FuaXphdGlvbkZvbGRlclJlcXVlc3QaKy50YWlsb3IudjEuQ3JlYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVzcG9uc2UiABJ1ChhVcGRhdGVPcmdhbml6YXRpb25Gb2xkZXISKi50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyUmVxdWVzdBorLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJSZXNwb25zZSIAEnUKGERlbGV0ZU9yZ2FuaXphdGlvbkZvbGRlchIqLnRhaWxvci52MS5EZWxldGVPcmdhbml6YXRpb25Gb2xkZXJSZXF1ZXN0GisudGFpbG9yLnYxLkRlbGV0ZU9yZ2FuaXphdGlvbkZvbGRlclJlc3BvbnNlIgASbAoVR2V0T3JnYW5pemF0aW9uRm9sZGVyEicudGFpbG9yLnYxLkdldE9yZ2FuaXphdGlvbkZvbGRlclJlcXVlc3QaKC50YWlsb3IudjEuR2V0T3JnYW5pemF0aW9uRm9sZGVyUmVzcG9uc2UiABJyChdMaXN0T3JnYW5pemF0aW9uRm9sZGVycxIpLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uRm9sZGVyc1JlcXVlc3QaKi50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbkZvbGRlcnNSZXNwb25zZSIAEoQBCh1HcmFudE9yZ2FuaXphdGlvbkZvbGRlckFjY2VzcxIvLnRhaWxvci52MS5HcmFudE9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc1JlcXVlc3QaMC50YWlsb3IudjEuR3JhbnRPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIAEocBCh5VcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3MSMC50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBoxLnRhaWxvci52MS5VcGRhdGVPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIAEocBCh5SZXZva2VPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3MSMC50YWlsb3IudjEuUmV2b2tlT3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzUmVxdWVzdBoxLnRhaWxvci52MS5SZXZva2VPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXNwb25zZSIAEocBCh5MaXN0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzZXMSMC50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc2VzUmVxdWVzdBoxLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uRm9sZGVyQWNjZXNzZXNSZXNwb25zZSIAEn4KG0dldE9yZ2FuaXphdGlvbkZvbGRlckFjY2VzcxItLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25Gb2xkZXJBY2Nlc3NSZXF1ZXN0Gi4udGFpbG9yLnYxLkdldE9yZ2FuaXphdGlvbkZvbGRlckFjY2Vzc1Jlc3BvbnNlIgASbwoWQ3JlYXRlT3JnYW5pemF0aW9uVGVhbRIoLnRhaWxvci52MS5DcmVhdGVPcmdhbml6YXRpb25UZWFtUmVxdWVzdBopLnRhaWxvci52MS5DcmVhdGVPcmdhbml6YXRpb25UZWFtUmVzcG9uc2UiABJvChZVcGRhdGVPcmdhbml6YXRpb25UZWFtEigudGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvblRlYW1SZXF1ZXN0GikudGFpbG9yLnYxLlVwZGF0ZU9yZ2FuaXphdGlvblRlYW1SZXNwb25zZSIAEm8KFkRlbGV0ZU9yZ2FuaXphdGlvblRlYW0SKC50YWlsb3IudjEuRGVsZXRlT3JnYW5pemF0aW9uVGVhbVJlcXVlc3QaKS50YWlsb3IudjEuRGVsZXRlT3JnYW5pemF0aW9uVGVhbVJlc3BvbnNlIgASZgoTR2V0T3JnYW5pemF0aW9uVGVhbRIlLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25UZWFtUmVxdWVzdBomLnRhaWxvci52MS5HZXRPcmdhbml6YXRpb25UZWFtUmVzcG9uc2UiABJsChVMaXN0T3JnYW5pemF0aW9uVGVhbXMSJy50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvblRlYW1zUmVxdWVzdBooLnRhaWxvci52MS5MaXN0T3JnYW5pemF0aW9uVGVhbXNSZXNwb25zZSIAEngKGUFkZE9yZ2FuaXphdGlvblRlYW1NZW1iZXISKy50YWlsb3IudjEuQWRkT3JnYW5pemF0aW9uVGVhbU1lbWJlclJlcXVlc3QaLC50YWlsb3IudjEuQWRkT3JnYW5pemF0aW9uVGVhbU1lbWJlclJlc3BvbnNlIgASgQEKHFVwZGF0ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXISLi50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uVGVhbU1lbWJlclJlcXVlc3QaLy50YWlsb3IudjEuVXBkYXRlT3JnYW5pemF0aW9uVGVhbU1lbWJlclJlc3BvbnNlIgASgQEKHFJlbW92ZU9yZ2FuaXphdGlvblRlYW1NZW1iZXISLi50YWlsb3IudjEuUmVtb3ZlT3JnYW5pemF0aW9uVGVhbU1lbWJlclJlcXVlc3QaLy50YWlsb3IudjEuUmVtb3ZlT3JnYW5pemF0aW9uVGVhbU1lbWJlclJlc3BvbnNlIgASfgobTGlzdE9yZ2FuaXphdGlvblRlYW1NZW1iZXJzEi0udGFpbG9yLnYxLkxpc3RPcmdhbml6YXRpb25UZWFtTWVtYmVyc1JlcXVlc3QaLi50YWlsb3IudjEuTGlzdE9yZ2FuaXphdGlvblRlYW1NZW1iZXJzUmVzcG9uc2UiABJ4ChlHZXRPcmdhbml6YXRpb25UZWFtTWVtYmVyEisudGFpbG9yLnYxLkdldE9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXF1ZXN0GiwudGFpbG9yLnYxLkdldE9yZ2FuaXphdGlvblRlYW1NZW1iZXJSZXNwb25zZSIAEm8KFkdldFBsYXRmb3JtQWNjb3VudFBsYW4SKC50YWlsb3IudjEuR2V0UGxhdGZvcm1BY2NvdW50UGxhblJlcXVlc3QaKS50YWlsb3IudjEuR2V0UGxhdGZvcm1BY2NvdW50UGxhblJlc3BvbnNlIgASYAoRQ3JlYXRlQXBwbGljYXRpb24SIy50YWlsb3IudjEuQ3JlYXRlQXBwbGljYXRpb25SZXF1ZXN0GiQudGFpbG9yLnYxLkNyZWF0ZUFwcGxpY2F0aW9uUmVzcG9uc2UiABJgChFVcGRhdGVBcHBsaWNhdGlvbhIjLnRhaWxvci52MS5VcGRhdGVBcHBsaWNhdGlvblJlcXVlc3QaJC50YWlsb3IudjEuVXBkYXRlQXBwbGljYXRpb25SZXNwb25zZSIAEmAKEURlbGV0ZUFwcGxpY2F0aW9uEiMudGFpbG9yLnYxLkRlbGV0ZUFwcGxpY2F0aW9uUmVxdWVzdBokLnRhaWxvci52MS5EZWxldGVBcHBsaWNhdGlvblJlc3BvbnNlIgASXQoQTGlzdEFwcGxpY2F0aW9ucxIiLnRhaWxvci52MS5MaXN0QXBwbGljYXRpb25zUmVxdWVzdBojLnRhaWxvci52MS5MaXN0QXBwbGljYXRpb25zUmVzcG9uc2UiABJXCg5HZXRBcHBsaWNhdGlvbhIgLnRhaWxvci52MS5HZXRBcHBsaWNhdGlvblJlcXVlc3QaIS50YWlsb3IudjEuR2V0QXBwbGljYXRpb25SZXNwb25zZSIAEnsKGkdldEFwcGxpY2F0aW9uU2NoZW1hSGVhbHRoEiwudGFpbG9yLnYxLkdldEFwcGxpY2F0aW9uU2NoZW1hSGVhbHRoUmVxdWVzdBotLnRhaWxvci52MS5HZXRBcHBsaWNhdGlvblNjaGVtYUhlYWx0aFJlc3BvbnNlIgASYwoSQ29tcG9zZVRhaWxvckRCU0RMEiQudGFpbG9yLnYxLkNvbXBvc2VUYWlsb3JEQlNETFJlcXVlc3QaJS50YWlsb3IudjEuQ29tcG9zZVRhaWxvckRCU0RMUmVzcG9uc2UiABJsChVDcmVhdGVUYWlsb3JEQlNlcnZpY2USJy50YWlsb3IudjEuQ3JlYXRlVGFpbG9yREJTZXJ2aWNlUmVxdWVzdBooLnRhaWxvci52MS5DcmVhdGVUYWlsb3JEQlNlcnZpY2VSZXNwb25zZSIAEmwKFVVwZGF0ZVRhaWxvckRCU2VydmljZRInLnRhaWxvci52MS5VcGRhdGVUYWlsb3JEQlNlcnZpY2VSZXF1ZXN0GigudGFpbG9yLnYxLlVwZGF0ZVRhaWxvckRCU2VydmljZVJlc3BvbnNlIgASbAoVRGVsZXRlVGFpbG9yREJTZXJ2aWNlEicudGFpbG9yLnYxLkRlbGV0ZVRhaWxvckRCU2VydmljZVJlcXVlc3QaKC50YWlsb3IudjEuRGVsZXRlVGFpbG9yREJTZXJ2aWNlUmVzcG9uc2UiABJjChJHZXRUYWlsb3JEQlNlcnZpY2USJC50YWlsb3IudjEuR2V0VGFpbG9yREJTZXJ2aWNlUmVxdWVzdBolLnRhaWxvci52MS5HZXRUYWlsb3JEQlNlcnZpY2VSZXNwb25zZSIAEmkKFExpc3RUYWlsb3JEQlNlcnZpY2VzEiYudGFpbG9yLnYxLkxpc3RUYWlsb3JEQlNlcnZpY2VzUmVxdWVzdBonLnRhaWxvci52MS5MaXN0VGFpbG9yREJTZXJ2aWNlc1Jlc3BvbnNlIgASYwoSQ3JlYXRlVGFpbG9yREJUeXBlEiQudGFpbG9yLnYxLkNyZWF0ZVRhaWxvckRCVHlwZVJlcXVlc3QaJS50YWlsb3IudjEuQ3JlYXRlVGFpbG9yREJUeXBlUmVzcG9uc2UiABJjChJVcGRhdGVUYWlsb3JEQlR5cGUSJC50YWlsb3IudjEuVXBkYXRlVGFpbG9yREJUeXBlUmVxdWVzdBolLnRhaWxvci52MS5VcGRhdGVUYWlsb3JEQlR5cGVSZXNwb25zZSIAEmMKEkRlbGV0ZVRhaWxvckRCVHlwZRIkLnRhaWxvci52MS5EZWxldGVUYWlsb3JEQlR5cGVSZXF1ZXN0GiUudGFpbG9yLnYxLkRlbGV0ZVRhaWxvckRCVHlwZVJlc3BvbnNlIgASbAoVVHJ1bmNhdGVUYWlsb3JEQlR5cGVzEicudGFpbG9yLnYxLlRydW5jYXRlVGFpbG9yREJUeXBlc1JlcXVlc3QaKC50YWlsb3IudjEuVHJ1bmNhdGVUYWlsb3JEQlR5cGVzUmVzcG9uc2UiABJpChRUcnVuY2F0ZVRhaWxvckRCVHlwZRImLnRhaWxvci52MS5UcnVuY2F0ZVRhaWxvckRCVHlwZVJlcXVlc3QaJy50YWlsb3IudjEuVHJ1bmNhdGVUYWlsb3JEQlR5cGVSZXNwb25zZSIAEmAKEUxpc3RUYWlsb3JEQlR5cGVzEiMudGFpbG9yLnYxLkxpc3RUYWlsb3JEQlR5cGVzUmVxdWVzdBokLnRhaWxvci52MS5MaXN0VGFpbG9yREJUeXBlc1Jlc3BvbnNlIgASWgoPR2V0VGFpbG9yREJUeXBlEiEudGFpbG9yLnYxLkdldFRhaWxvckRCVHlwZVJlcXVlc3QaIi50YWlsb3IudjEuR2V0VGFpbG9yREJUeXBlUmVzcG9uc2UiABJ+ChtDcmVhdGVUYWlsb3JEQkdRTFBlcm1pc3Npb24SLS50YWlsb3IudjEuQ3JlYXRlVGFpbG9yREJHUUxQZXJtaXNzaW9uUmVxdWVzdBouLnRhaWxvci52MS5DcmVhdGVUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXNwb25zZSIAEngKGEdldFRhaWxvckRCR1FMUGVybWlzc2lvbhIqLnRhaWxvci52MS5HZXRUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXF1ZXN0GisudGFpbG9yLnYxLkdldFRhaWxvckRCR1FMUGVybWlzc2lvblJlc3BvbnNlIgOQAgESfgoaTGlzdFRhaWxvckRCR1FMUGVybWlzc2lvbnMSLC50YWlsb3IudjEuTGlzdFRhaWxvckRCR1FMUGVybWlzc2lvbnNSZXF1ZXN0Gi0udGFpbG9yLnYxLkxpc3RUYWlsb3JEQkdRTFBlcm1pc3Npb25zUmVzcG9uc2UiA5ACARJ+ChtVcGRhdGVUYWlsb3JEQkdRTFBlcm1pc3Npb24SLS50YWlsb3IudjEuVXBkYXRlVGFpbG9yREJHUUxQZXJtaXNzaW9uUmVxdWVzdBouLnRhaWxvci52MS5VcGRhdGVUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXNwb25zZSIAEn4KG0RlbGV0ZVRhaWxvckRCR1FMUGVybWlzc2lvbhItLnRhaWxvci52MS5EZWxldGVUYWlsb3JEQkdRTFBlcm1pc3Npb25SZXF1ZXN0Gi4udGFpbG9yLnYxLkRlbGV0ZVRhaWxvckRCR1FMUGVybWlzc2lvblJlc3BvbnNlIgASbAoVQ3JlYXRlUGlwZWxpbmVTZXJ2aWNlEicudGFpbG9yLnYxLkNyZWF0ZVBpcGVsaW5lU2VydmljZVJlcXVlc3QaKC50YWlsb3IudjEuQ3JlYXRlUGlwZWxpbmVTZXJ2aWNlUmVzcG9uc2UiABJsChVVcGRhdGVQaXBlbGluZVNlcnZpY2USJy50YWlsb3IudjEuVXBkYXRlUGlwZWxpbmVTZXJ2aWNlUmVxdWVzdBooLnRhaWxvci52MS5VcGRhdGVQaXBlbGluZVNlcnZpY2VSZXNwb25zZSIAEmwKFURlbGV0ZVBpcGVsaW5lU2VydmljZRInLnRhaWxvci52MS5EZWxldGVQaXBlbGluZVNlcnZpY2VSZXF1ZXN0GigudGFpbG9yLnYxLkRlbGV0ZVBpcGVsaW5lU2VydmljZVJlc3BvbnNlIgASYwoSR2V0UGlwZWxpbmVTZXJ2aWNlEiQudGFpbG9yLnYxLkdldFBpcGVsaW5lU2VydmljZVJlcXVlc3QaJS50YWlsb3IudjEuR2V0UGlwZWxpbmVTZXJ2aWNlUmVzcG9uc2UiABJpChRMaXN0UGlwZWxpbmVTZXJ2aWNlcxImLnRhaWxvci52MS5MaXN0UGlwZWxpbmVTZXJ2aWNlc1JlcXVlc3QaJy50YWlsb3IudjEuTGlzdFBpcGVsaW5lU2VydmljZXNSZXNwb25zZSIAEmYKE0dldFBpcGVsaW5lUmVzb2x2ZXISJS50YWlsb3IudjEuR2V0UGlwZWxpbmVSZXNvbHZlclJlcXVlc3QaJi50YWlsb3IudjEuR2V0UGlwZWxpbmVSZXNvbHZlclJlc3BvbnNlIgASbAoVTGlzdFBpcGVsaW5lUmVzb2x2ZXJzEicudGFpbG9yLnYxLkxpc3RQaXBlbGluZVJlc29sdmVyc1JlcXVlc3QaKC50YWlsb3IudjEuTGlzdFBpcGVsaW5lUmVzb2x2ZXJzUmVzcG9uc2UiABJvChZDcmVhdGVQaXBlbGluZVJlc29sdmVyEigudGFpbG9yLnYxLkNyZWF0ZVBpcGVsaW5lUmVzb2x2ZXJSZXF1ZXN0GikudGFpbG9yLnYxLkNyZWF0ZVBpcGVsaW5lUmVzb2x2ZXJSZXNwb25zZSIAEm8KFlVwZGF0ZVBpcGVsaW5lUmVzb2x2ZXISKC50YWlsb3IudjEuVXBkYXRlUGlwZWxpbmVSZXNvbHZlclJlcXVlc3QaKS50YWlsb3IudjEuVXBkYXRlUGlwZWxpbmVSZXNvbHZlclJlc3BvbnNlIgASbwoWRGVsZXRlUGlwZWxpbmVSZXNvbHZlchIoLnRhaWxvci52MS5EZWxldGVQaXBlbGluZVJlc29sdmVyUmVxdWVzdBopLnRhaWxvci52MS5EZWxldGVQaXBlbGluZVJlc29sdmVyUmVzcG9uc2UiABJjChJDb21wb3NlUGlwZWxpbmVTREwSJC50YWlsb3IudjEuQ29tcG9zZVBpcGVsaW5lU0RMUmVxdWVzdBolLnRhaWxvci52MS5Db21wb3NlUGlwZWxpbmVTRExSZXNwb25zZSIAEpkBCiRMaXN0UGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdHMSNi50YWlsb3IudjEuTGlzdFBpcGVsaW5lUmVzb2x2ZXJFeGVjdXRpb25SZXN1bHRzUmVxdWVzdBo3LnRhaWxvci52MS5MaXN0UGlwZWxpbmVSZXNvbHZlckV4ZWN1dGlvblJlc3VsdHNSZXNwb25zZSIAEpMBCiJHZXRQaXBlbGluZVJlc29sdmVyRXhlY3V0aW9uUmVzdWx0EjQudGFpbG9yLnYxLkdldFBpcGVsaW5lUmVzb2x2ZXJFeGVjdXRpb25SZXN1bHRSZXF1ZXN0GjUudGFpbG9yLnYxLkdldFBpcGVsaW5lUmVzb2x2ZXJFeGVjdXRpb25SZXN1bHRSZXNwb25zZSIAEnIKF1Jlc3RhcnRQaXBlbGluZVJlc29sdmVyEikudGFpbG9yLnYxLlJlc3RhcnRQaXBlbGluZVJlc29sdmVyUmVxdWVzdBoqLnRhaWxvci52MS5SZXN0YXJ0UGlwZWxpbmVSZXNvbHZlclJlc3BvbnNlIgASbwoWQ3JlYXRlU3RhdGVmbG93U2VydmljZRIoLnRhaWxvci52MS5DcmVhdGVTdGF0ZWZsb3dTZXJ2aWNlUmVxdWVzdBopLnRhaWxvci52MS5DcmVhdGVTdGF0ZWZsb3dTZXJ2aWNlUmVzcG9uc2UiABJvChZVcGRhdGVTdGF0ZWZsb3dTZXJ2aWNlEigudGFpbG9yLnYxLlVwZGF0ZVN0YXRlZmxvd1NlcnZpY2VSZXF1ZXN0GikudGFpbG9yLnYxLlVwZGF0ZVN0YXRlZmxvd1NlcnZpY2VSZXNwb25zZSIAEm8KFkRlbGV0ZVN0YXRlZmxvd1NlcnZpY2USKC50YWlsb3IudjEuRGVsZXRlU3RhdGVmbG93U2VydmljZVJlcXVlc3QaKS50YWlsb3IudjEuRGVsZXRlU3RhdGVmbG93U2VydmljZVJlc3BvbnNlIgASZgoTR2V0U3RhdGVmbG93U2VydmljZRIlLnRhaWxvci52MS5HZXRTdGF0ZWZsb3dTZXJ2aWNlUmVxdWVzdBomLnRhaWxvci52MS5HZXRTdGF0ZWZsb3dTZXJ2aWNlUmVzcG9uc2UiABJsChVMaXN0U3RhdGVmbG93U2VydmljZXMSJy50YWlsb3IudjEuTGlzdFN0YXRlZmxvd1NlcnZpY2VzUmVxdWVzdBooLnRhaWxvci52MS5MaXN0U3RhdGVmbG93U2VydmljZXNSZXNwb25zZSIAEm8KFkNyZWF0ZUV4ZWN1dG9yRXhlY3V0b3ISKC50YWlsb3IudjEuQ3JlYXRlRXhlY3V0b3JFeGVjdXRvclJlcXVlc3QaKS50YWlsb3IudjEuQ3JlYXRlRXhlY3V0b3JFeGVjdXRvclJlc3BvbnNlIgASbwoWVXBkYXRlRXhlY3V0b3JFeGVjdXRvchIoLnRhaWxvci52MS5VcGRhdGVFeGVjdXRvckV4ZWN1dG9yUmVxdWVzdBopLnRhaWxvci52MS5VcGRhdGVFeGVjdXRvckV4ZWN1dG9yUmVzcG9uc2UiABJmChNHZXRFeGVjdXRvckV4ZWN1dG9yEiUudGFpbG9yLnYxLkdldEV4ZWN1dG9yRXhlY3V0b3JSZXF1ZXN0GiYudGFpbG9yLnYxLkdldEV4ZWN1dG9yRXhlY3V0b3JSZXNwb25zZSIAEm8KFkRlbGV0ZUV4ZWN1dG9yRXhlY3V0b3ISKC50YWlsb3IudjEuRGVsZXRlRXhlY3V0b3JFeGVjdXRvclJlcXVlc3QaKS50YWlsb3IudjEuRGVsZXRlRXhlY3V0b3JFeGVjdXRvclJlc3BvbnNlIgASbAoVTGlzdEV4ZWN1dG9yRXhlY3V0b3JzEicudGFpbG9yLnYxLkxpc3RFeGVjdXRvckV4ZWN1dG9yc1JlcXVlc3QaKC50YWlsb3IudjEuTGlzdEV4ZWN1dG9yRXhlY3V0b3JzUmVzcG9uc2UiABJXCg5HZXRFeGVjdXRvckpvYhIgLnRhaWxvci52MS5HZXRFeGVjdXRvckpvYlJlcXVlc3QaIS50YWlsb3IudjEuR2V0RXhlY3V0b3JKb2JSZXNwb25zZSIAEl0KEExpc3RFeGVjdXRvckpvYnMSIi50YWlsb3IudjEuTGlzdEV4ZWN1dG9ySm9ic1JlcXVlc3QaIy50YWlsb3IudjEuTGlzdEV4ZWN1dG9ySm9ic1Jlc3BvbnNlIgAScgoXTGlzdEV4ZWN1dG9ySm9iQXR0ZW1wdHMSKS50YWlsb3IudjEuTGlzdEV4ZWN1dG9ySm9iQXR0ZW1wdHNSZXF1ZXN0GioudGFpbG9yLnYxLkxpc3RFeGVjdXRvckpvYkF0dGVtcHRzUmVzcG9uc2UiABKBAQocTGlzdEV4ZWN1dG9ySW5jb21pbmdXZWJob29rcxIuLnRhaWxvci52MS5MaXN0RXhlY3V0b3JJbmNvbWluZ1dlYmhvb2tzUmVxdWVzdBovLnRhaWxvci52MS5MaXN0RXhlY3V0b3JJbmNvbWluZ1dlYmhvb2tzUmVzcG9uc2UiABJ7ChpHZXRFeGVjdXRvckluY29taW5nV2ViaG9vaxIsLnRhaWxvci52MS5HZXRFeGVjdXRvckluY29taW5nV2ViaG9va1JlcXVlc3QaLS50YWlsb3IudjEuR2V0RXhlY3V0b3JJbmNvbWluZ1dlYmhvb2tSZXNwb25zZSIAEnUKGENyZWF0ZVNlY3JldE1hbmFnZXJWYXVsdBIqLnRhaWxvci52MS5DcmVhdGVTZWNyZXRNYW5hZ2VyVmF1bHRSZXF1ZXN0GisudGFpbG9yLnYxLkNyZWF0ZVNlY3JldE1hbmFnZXJWYXVsdFJlc3BvbnNlIgASbAoVR2V0U2VjcmV0TWFuYWdlclZhdWx0EicudGFpbG9yLnYxLkdldFNlY3JldE1hbmFnZXJWYXVsdFJlcXVlc3QaKC50YWlsb3IudjEuR2V0U2VjcmV0TWFuYWdlclZhdWx0UmVzcG9uc2UiABJ1ChhEZWxldGVTZWNyZXRNYW5hZ2VyVmF1bHQSKi50YWlsb3IudjEuRGVsZXRlU2VjcmV0TWFuYWdlclZhdWx0UmVxdWVzdBorLnRhaWxvci52MS5EZWxldGVTZWNyZXRNYW5hZ2VyVmF1bHRSZXNwb25zZSIAEnIKF0xpc3RTZWNyZXRNYW5hZ2VyVmF1bHRzEikudGFpbG9yLnYxLkxpc3RTZWNyZXRNYW5hZ2VyVmF1bHRzUmVxdWVzdBoqLnRhaWxvci52MS5MaXN0U2VjcmV0TWFuYWdlclZhdWx0c1Jlc3BvbnNlIgASeAoZQ3JlYXRlU2VjcmV0TWFuYWdlclNlY3JldBIrLnRhaWxvci52MS5DcmVhdGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVxdWVzdBosLnRhaWxvci52MS5DcmVhdGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVzcG9uc2UiABJ4ChlVcGRhdGVTZWNyZXRNYW5hZ2VyU2VjcmV0EisudGFpbG9yLnYxLlVwZGF0ZVNlY3JldE1hbmFnZXJTZWNyZXRSZXF1ZXN0GiwudGFpbG9yLnYxLlVwZGF0ZVNlY3JldE1hbmFnZXJTZWNyZXRSZXNwb25zZSIAEm8KFkdldFNlY3JldE1hbmFnZXJTZWNyZXQSKC50YWlsb3IudjEuR2V0U2VjcmV0TWFuYWdlclNlY3JldFJlcXVlc3QaKS50YWlsb3IudjEuR2V0U2VjcmV0TWFuYWdlclNlY3JldFJlc3BvbnNlIgASeAoZRGVsZXRlU2VjcmV0TWFuYWdlclNlY3JldBIrLnRhaWxvci52MS5EZWxldGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVxdWVzdBosLnRhaWxvci52MS5EZWxldGVTZWNyZXRNYW5hZ2VyU2VjcmV0UmVzcG9uc2UiABJ1ChhMaXN0U2VjcmV0TWFuYWdlclNlY3JldHMSKi50YWlsb3IudjEuTGlzdFNlY3JldE1hbmFnZXJTZWNyZXRzUmVxdWVzdBorLnRhaWxvci52MS5MaXN0U2VjcmV0TWFuYWdlclNlY3JldHNSZXNwb25zZSIAEmAKEUNyZWF0ZUF1dGhTZXJ2aWNlEiMudGFpbG9yLnYxLkNyZWF0ZUF1dGhTZXJ2aWNlUmVxdWVzdBokLnRhaWxvci52MS5DcmVhdGVBdXRoU2VydmljZVJlc3BvbnNlIgASYAoRRGVsZXRlQXV0aFNlcnZpY2USIy50YWlsb3IudjEuRGVsZXRlQXV0aFNlcnZpY2VSZXF1ZXN0GiQudGFpbG9yLnYxLkRlbGV0ZUF1dGhTZXJ2aWNlUmVzcG9uc2UiABJXCg5HZXRBdXRoU2VydmljZRIgLnRhaWxvci52MS5HZXRBdXRoU2VydmljZVJlcXVlc3QaIS50YWlsb3IudjEuR2V0QXV0aFNlcnZpY2VSZXNwb25zZSIAEl0KEExpc3RBdXRoU2VydmljZXMSIi50YWlsb3IudjEuTGlzdEF1dGhTZXJ2aWNlc1JlcXVlc3QaIy50YWlsb3IudjEuTGlzdEF1dGhTZXJ2aWNlc1Jlc3BvbnNlIgASZgoTQ3JlYXRlQXV0aElEUENvbmZpZxIlLnRhaWxvci52MS5DcmVhdGVBdXRoSURQQ29uZmlnUmVxdWVzdBomLnRhaWxvci52MS5DcmVhdGVBdXRoSURQQ29uZmlnUmVzcG9uc2UiABJmChNVcGRhdGVBdXRoSURQQ29uZmlnEiUudGFpbG9yLnYxLlVwZGF0ZUF1dGhJRFBDb25maWdSZXF1ZXN0GiYudGFpbG9yLnYxLlVwZGF0ZUF1dGhJRFBDb25maWdSZXNwb25zZSIAEmYKE0RlbGV0ZUF1dGhJRFBDb25maWcSJS50YWlsb3IudjEuRGVsZXRlQXV0aElEUENvbmZpZ1JlcXVlc3QaJi50YWlsb3IudjEuRGVsZXRlQXV0aElEUENvbmZpZ1Jlc3BvbnNlIgASXQoQR2V0QXV0aElEUENvbmZpZxIiLnRhaWxvci52MS5HZXRBdXRoSURQQ29uZmlnUmVxdWVzdBojLnRhaWxvci52MS5HZXRBdXRoSURQQ29uZmlnUmVzcG9uc2UiABJjChJMaXN0QXV0aElEUENvbmZpZ3MSJC50YWlsb3IudjEuTGlzdEF1dGhJRFBDb25maWdzUmVxdWVzdBolLnRhaWxvci52MS5MaXN0QXV0aElEUENvbmZpZ3NSZXNwb25zZSIAEnIKF0NyZWF0ZVVzZXJQcm9maWxlQ29uZmlnEikudGFpbG9yLnYxLkNyZWF0ZVVzZXJQcm9maWxlQ29uZmlnUmVxdWVzdBoqLnRhaWxvci52MS5DcmVhdGVVc2VyUHJvZmlsZUNvbmZpZ1Jlc3BvbnNlIgAScgoXVXBkYXRlVXNlclByb2ZpbGVDb25maWcSKS50YWlsb3IudjEuVXBkYXRlVXNlclByb2ZpbGVDb25maWdSZXF1ZXN0GioudGFpbG9yLnYxLlVwZGF0ZVVzZXJQcm9maWxlQ29uZmlnUmVzcG9uc2UiABJyChdEZWxldGVVc2VyUHJvZmlsZUNvbmZpZxIpLnRhaWxvci52MS5EZWxldGVVc2VyUHJvZmlsZUNvbmZpZ1JlcXVlc3QaKi50YWlsb3IudjEuRGVsZXRlVXNlclByb2ZpbGVDb25maWdSZXNwb25zZSIAEmkKFEdldFVzZXJQcm9maWxlQ29uZmlnEiYudGFpbG9yLnYxLkdldFVzZXJQcm9maWxlQ29uZmlnUmVxdWVzdBonLnRhaWxvci52MS5HZXRVc2VyUHJvZmlsZUNvbmZpZ1Jlc3BvbnNlIgASYwoSQ3JlYXRlVGVuYW50Q29uZmlnEiQudGFpbG9yLnYxLkNyZWF0ZVRlbmFudENvbmZpZ1JlcXVlc3QaJS50YWlsb3IudjEuQ3JlYXRlVGVuYW50Q29uZmlnUmVzcG9uc2UiABJjChJVcGRhdGVUZW5hbnRDb25maWcSJC50YWlsb3IudjEuVXBkYXRlVGVuYW50Q29uZmlnUmVxdWVzdBolLnRhaWxvci52MS5VcGRhdGVUZW5hbnRDb25maWdSZXNwb25zZSIAEmMKEkRlbGV0ZVRlbmFudENvbmZpZxIkLnRhaWxvci52MS5EZWxldGVUZW5hbnRDb25maWdSZXF1ZXN0GiUudGFpbG9yLnYxLkRlbGV0ZVRlbmFudENvbmZpZ1Jlc3BvbnNlIgASWgoPR2V0VGVuYW50Q29uZmlnEiEudGFpbG9yLnYxLkdldFRlbmFudENvbmZpZ1JlcXVlc3QaIi50YWlsb3IudjEuR2V0VGVuYW50Q29uZmlnUmVzcG9uc2UiABJ4ChlDcmVhdGVQZXJzb25hbEFjY2Vzc1Rva2VuEisudGFpbG9yLnYxLkNyZWF0ZVBlcnNvbmFsQWNjZXNzVG9rZW5SZXF1ZXN0GiwudGFpbG9yLnYxLkNyZWF0ZVBlcnNvbmFsQWNjZXNzVG9rZW5SZXNwb25zZSIAEngKGURlbGV0ZVBlcnNvbmFsQWNjZXNzVG9rZW4SKy50YWlsb3IudjEuRGVsZXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlcXVlc3QaLC50YWlsb3IudjEuRGVsZXRlUGVyc29uYWxBY2Nlc3NUb2tlblJlc3BvbnNlIgASdQoYTGlzdFBlcnNvbmFsQWNjZXNzVG9rZW5zEioudGFpbG9yLnYxLkxpc3RQZXJzb25hbEFjY2Vzc1Rva2Vuc1JlcXVlc3QaKy50YWlsb3IudjEuTGlzdFBlcnNvbmFsQWNjZXNzVG9rZW5zUmVzcG9uc2UiABJsChVDcmVhdGVBdXRoTWFjaGluZVVzZXISJy50YWlsb3IudjEuQ3JlYXRlQXV0aE1hY2hpbmVVc2VyUmVxdWVzdBooLnRhaWxvci52MS5DcmVhdGVBdXRoTWFjaGluZVVzZXJSZXNwb25zZSIAEmwKFVVwZGF0ZUF1dGhNYWNoaW5lVXNlchInLnRhaWxvci52MS5VcGRhdGVBdXRoTWFjaGluZVVzZXJSZXF1ZXN0GigudGFpbG9yLnYxLlVwZGF0ZUF1dGhNYWNoaW5lVXNlclJlc3BvbnNlIgASbAoVRGVsZXRlQXV0aE1hY2hpbmVVc2VyEicudGFpbG9yLnYxLkRlbGV0ZUF1dGhNYWNoaW5lVXNlclJlcXVlc3QaKC50YWlsb3IudjEuRGVsZXRlQXV0aE1hY2hpbmVVc2VyUmVzcG9uc2UiABJjChJHZXRBdXRoTWFjaGluZVVzZXISJC50YWlsb3IudjEuR2V0QXV0aE1hY2hpbmVVc2VyUmVxdWVzdBolLnRhaWxvci52MS5HZXRBdXRoTWFjaGluZVVzZXJSZXNwb25zZSIAEmkKFExpc3RBdXRoTWFjaGluZVVzZXJzEiYudGFpbG9yLnYxLkxpc3RBdXRoTWFjaGluZVVzZXJzUmVxdWVzdBonLnRhaWxvci52MS5MaXN0QXV0aE1hY2hpbmVVc2Vyc1Jlc3BvbnNlIgASaQoUQ3JlYXRlQXV0aFNDSU1Db25maWcSJi50YWlsb3IudjEuQ3JlYXRlQXV0aFNDSU1Db25maWdSZXF1ZXN0GicudGFpbG9yLnYxLkNyZWF0ZUF1dGhTQ0lNQ29uZmlnUmVzcG9uc2UiABJpChRVcGRhdGVBdXRoU0NJTUNvbmZpZxImLnRhaWxvci52MS5VcGRhdGVBdXRoU0NJTUNvbmZpZ1JlcXVlc3QaJy50YWlsb3IudjEuVXBkYXRlQXV0aFNDSU1Db25maWdSZXNwb25zZSIAEmkKFERlbGV0ZUF1dGhTQ0lNQ29uZmlnEiYudGFpbG9yLnYxLkRlbGV0ZUF1dGhTQ0lNQ29uZmlnUmVxdWVzdBonLnRhaWxvci52MS5EZWxldGVBdXRoU0NJTUNvbmZpZ1Jlc3BvbnNlIgASYAoRR2V0QXV0aFNDSU1Db25maWcSIy50YWlsb3IudjEuR2V0QXV0aFNDSU1Db25maWdSZXF1ZXN0GiQudGFpbG9yLnYxLkdldEF1dGhTQ0lNQ29uZmlnUmVzcG9uc2UiABJvChZDcmVhdGVBdXRoU0NJTVJlc291cmNlEigudGFpbG9yLnYxLkNyZWF0ZUF1dGhTQ0lNUmVzb3VyY2VSZXF1ZXN0GikudGFpbG9yLnYxLkNyZWF0ZUF1dGhTQ0lNUmVzb3VyY2VSZXNwb25zZSIAEm8KFlVwZGF0ZUF1dGhTQ0lNUmVzb3VyY2USKC50YWlsb3IudjEuVXBkYXRlQXV0aFNDSU1SZXNvdXJjZVJlcXVlc3QaKS50YWlsb3IudjEuVXBkYXRlQXV0aFNDSU1SZXNvdXJjZVJlc3BvbnNlIgASbwoWRGVsZXRlQXV0aFNDSU1SZXNvdXJjZRIoLnRhaWxvci52MS5EZWxldGVBdXRoU0NJTVJlc291cmNlUmVxdWVzdBopLnRhaWxvci52MS5EZWxldGVBdXRoU0NJTVJlc291cmNlUmVzcG9uc2UiABJmChNHZXRBdXRoU0NJTVJlc291cmNlEiUudGFpbG9yLnYxLkdldEF1dGhTQ0lNUmVzb3VyY2VSZXF1ZXN0GiYudGFpbG9yLnYxLkdldEF1dGhTQ0lNUmVzb3VyY2VSZXNwb25zZSIAEmkKFEdldEF1dGhTQ0lNUmVzb3VyY2VzEiYudGFpbG9yLnYxLkdldEF1dGhTQ0lNUmVzb3VyY2VzUmVxdWVzdBonLnRhaWxvci52MS5HZXRBdXRoU0NJTVJlc291cmNlc1Jlc3BvbnNlIgASaQoUQ3JlYXRlQXV0aENvbm5lY3Rpb24SJi50YWlsb3IudjEuQ3JlYXRlQXV0aENvbm5lY3Rpb25SZXF1ZXN0GicudGFpbG9yLnYxLkNyZWF0ZUF1dGhDb25uZWN0aW9uUmVzcG9uc2UiABJmChNMaXN0QXV0aENvbm5lY3Rpb25zEiUudGFpbG9yLnYxLkxpc3RBdXRoQ29ubmVjdGlvbnNSZXF1ZXN0GiYudGFpbG9yLnYxLkxpc3RBdXRoQ29ubmVjdGlvbnNSZXNwb25zZSIAEmkKFFJldm9rZUF1dGhDb25uZWN0aW9uEiYudGFpbG9yLnYxLlJldm9rZUF1dGhDb25uZWN0aW9uUmVxdWVzdBonLnRhaWxvci52MS5SZXZva2VBdXRoQ29ubmVjdGlvblJlc3BvbnNlIgAShAEKHVJlZ2lzdGVyQXV0aENvbm5lY3Rpb25TZXNzaW9uEi8udGFpbG9yLnYxLlJlZ2lzdGVyQXV0aENvbm5lY3Rpb25TZXNzaW9uUmVxdWVzdBowLnRhaWxvci52MS5SZWdpc3RlckF1dGhDb25uZWN0aW9uU2Vzc2lvblJlc3BvbnNlIgASogEKJ0V4Y2hhbmdlQXV0aENvbm5lY3Rpb25BdXRob3JpemF0aW9uQ29kZRI5LnRhaWxvci52MS5FeGNoYW5nZUF1dGhDb25uZWN0aW9uQXV0aG9yaXphdGlvbkNvZGVSZXF1ZXN0GjoudGFpbG9yLnYxLkV4Y2hhbmdlQXV0aENvbm5lY3Rpb25BdXRob3JpemF0aW9uQ29kZVJlc3BvbnNlIgASbwoWQ3JlYXRlQXV0aE9BdXRoMkNsaWVudBIoLnRhaWxvci52MS5DcmVhdGVBdXRoT0F1dGgyQ2xpZW50UmVxdWVzdBopLnRhaWxvci52MS5DcmVhdGVBdXRoT0F1dGgyQ2xpZW50UmVzcG9uc2UiABJvChZVcGRhdGVBdXRoT0F1dGgyQ2xpZW50EigudGFpbG9yLnYxLlVwZGF0ZUF1dGhPQXV0aDJDbGllbnRSZXF1ZXN0GikudGFpbG9yLnYxLlVwZGF0ZUF1dGhPQXV0aDJDbGllbnRSZXNwb25zZSIAEm8KFkRlbGV0ZUF1dGhPQXV0aDJDbGllbnQSKC50YWlsb3IudjEuRGVsZXRlQXV0aE9BdXRoMkNsaWVudFJlcXVlc3QaKS50YWlsb3IudjEuRGVsZXRlQXV0aE9BdXRoMkNsaWVudFJlc3BvbnNlIgASZgoTR2V0QXV0aE9BdXRoMkNsaWVudBIlLnRhaWxvci52MS5HZXRBdXRoT0F1dGgyQ2xpZW50UmVxdWVzdBomLnRhaWxvci52MS5HZXRBdXRoT0F1dGgyQ2xpZW50UmVzcG9uc2UiABJsChVMaXN0QXV0aE9BdXRoMkNsaWVudHMSJy50YWlsb3IudjEuTGlzdEF1dGhPQXV0aDJDbGllbnRzUmVxdWVzdBooLnRhaWxvci52MS5MaXN0QXV0aE9BdXRoMkNsaWVudHNSZXNwb25zZSIAEmYKE0xpc3REYXRhcGxhbmVFdmVudHMSJS50YWlsb3IudjEuTGlzdERhdGFwbGFuZUV2ZW50c1JlcXVlc3QaJi50YWlsb3IudjEuTGlzdERhdGFwbGFuZUV2ZW50c1Jlc3BvbnNlIgASgQEKHExpc3RDb250cm9scGxhbmVBY3Rpdml0eUxvZ3MSLi50YWlsb3IudjEuTGlzdENvbnRyb2xwbGFuZUFjdGl2aXR5TG9nc1JlcXVlc3QaLy50YWlsb3IudjEuTGlzdENvbnRyb2xwbGFuZUFjdGl2aXR5TG9nc1Jlc3BvbnNlIgASVwoOVGVzdEV4ZWNTY3JpcHQSIC50YWlsb3IudjEuVGVzdEV4ZWNTY3JpcHRSZXF1ZXN0GiEudGFpbG9yLnYxLlRlc3RFeGVjU2NyaXB0UmVzcG9uc2UiABJpChRHZXRGdW5jdGlvbkV4ZWN1dGlvbhImLnRhaWxvci52MS5HZXRGdW5jdGlvbkV4ZWN1dGlvblJlcXVlc3QaJy50YWlsb3IudjEuR2V0RnVuY3Rpb25FeGVjdXRpb25SZXNwb25zZSIAEm8KFkxpc3RGdW5jdGlvbkV4ZWN1dGlvbnMSKC50YWlsb3IudjEuTGlzdEZ1bmN0aW9uRXhlY3V0aW9uc1JlcXVlc3QaKS50YWlsb3IudjEuTGlzdEZ1bmN0aW9uRXhlY3V0aW9uc1Jlc3BvbnNlIgASbwoWTGlzdE1ldGVyUmVxdWVzdENvdW50cxIoLnRhaWxvci52MS5MaXN0TWV0ZXJSZXF1ZXN0Q291bnRzUmVxdWVzdBopLnRhaWxvci52MS5MaXN0TWV0ZXJSZXF1ZXN0Q291bnRzUmVzcG9uc2UiABJ1ChhMaXN0TWV0ZXJFeGVjdXRpb25Db3VudHMSKi50YWlsb3IudjEuTGlzdE1ldGVyRXhlY3V0aW9uQ291bnRzUmVxdWVzdBorLnRhaWxvci52MS5MaXN0TWV0ZXJFeGVjdXRpb25Db3VudHNSZXNwb25zZSIAEmkKFExpc3RNZXRlckV2ZW50Q291bnRzEiYudGFpbG9yLnYxLkxpc3RNZXRlckV2ZW50Q291bnRzUmVxdWVzdBonLnRhaWxvci52MS5MaXN0TWV0ZXJFdmVudENvdW50c1Jlc3BvbnNlIgASXQoPTGlzdElkUFNlcnZpY2VzEiEudGFpbG9yLnYxLkxpc3RJZFBTZXJ2aWNlc1JlcXVlc3QaIi50YWlsb3IudjEuTGlzdElkUFNlcnZpY2VzUmVzcG9uc2UiA5ACARJdChBDcmVhdGVJZFBTZXJ2aWNlEiIudGFpbG9yLnYxLkNyZWF0ZUlkUFNlcnZpY2VSZXF1ZXN0GiMudGFpbG9yLnYxLkNyZWF0ZUlkUFNlcnZpY2VSZXNwb25zZSIAEl0KEFVwZGF0ZUlkUFNlcnZpY2USIi50YWlsb3IudjEuVXBkYXRlSWRQU2VydmljZVJlcXVlc3QaIy50YWlsb3IudjEuVXBkYXRlSWRQU2VydmljZVJlc3BvbnNlIgASXQoQRGVsZXRlSWRQU2VydmljZRIiLnRhaWxvci52MS5EZWxldGVJZFBTZXJ2aWNlUmVxdWVzdBojLnRhaWxvci52MS5EZWxldGVJZFBTZXJ2aWNlUmVzcG9uc2UiABJXCg1HZXRJZFBTZXJ2aWNlEh8udGFpbG9yLnYxLkdldElkUFNlcnZpY2VSZXF1ZXN0GiAudGFpbG9yLnYxLkdldElkUFNlcnZpY2VSZXNwb25zZSIDkAIBEloKDkxpc3RJZFBDbGllbnRzEiAudGFpbG9yLnYxLkxpc3RJZFBDbGllbnRzUmVxdWVzdBohLnRhaWxvci52MS5MaXN0SWRQQ2xpZW50c1Jlc3BvbnNlIgOQAgESWgoPQ3JlYXRlSWRQQ2xpZW50EiEudGFpbG9yLnYxLkNyZWF0ZUlkUENsaWVudFJlcXVlc3QaIi50YWlsb3IudjEuQ3JlYXRlSWRQQ2xpZW50UmVzcG9uc2UiABJaCg9EZWxldGVJZFBDbGllbnQSIS50YWlsb3IudjEuRGVsZXRlSWRQQ2xpZW50UmVxdWVzdBoiLnRhaWxvci52MS5EZWxldGVJZFBDbGllbnRSZXNwb25zZSIAElQKDEdldElkUENsaWVudBIeLnRhaWxvci52MS5HZXRJZFBDbGllbnRSZXF1ZXN0Gh8udGFpbG9yLnYxLkdldElkUENsaWVudFJlc3BvbnNlIgOQAgESZgoTQ3JlYXRlU3RhdGljV2Vic2l0ZRIlLnRhaWxvci52MS5DcmVhdGVTdGF0aWNXZWJzaXRlUmVxdWVzdBomLnRhaWxvci52MS5DcmVhdGVTdGF0aWNXZWJzaXRlUmVzcG9uc2UiABJmChNVcGRhdGVTdGF0aWNXZWJzaXRlEiUudGFpbG9yLnYxLlVwZGF0ZVN0YXRpY1dlYnNpdGVSZXF1ZXN0GiYudGFpbG9yLnYxLlVwZGF0ZVN0YXRpY1dlYnNpdGVSZXNwb25zZSIAEmYKE0RlbGV0ZVN0YXRpY1dlYnNpdGUSJS50YWlsb3IudjEuRGVsZXRlU3RhdGljV2Vic2l0ZVJlcXVlc3QaJi50YWlsb3IudjEuRGVsZXRlU3RhdGljV2Vic2l0ZVJlc3BvbnNlIgASYAoQR2V0U3RhdGljV2Vic2l0ZRIiLnRhaWxvci52MS5HZXRTdGF0aWNXZWJzaXRlUmVxdWVzdBojLnRhaWxvci52MS5HZXRTdGF0aWNXZWJzaXRlUmVzcG9uc2UiA5ACARJmChJMaXN0U3RhdGljV2Vic2l0ZXMSJC50YWlsb3IudjEuTGlzdFN0YXRpY1dlYnNpdGVzUmVxdWVzdBolLnRhaWxvci52MS5MaXN0U3RhdGljV2Vic2l0ZXNSZXNwb25zZSIDkAIBEl0KEENyZWF0ZURlcGxveW1lbnQSIi50YWlsb3IudjEuQ3JlYXRlRGVwbG95bWVudFJlcXVlc3QaIy50YWlsb3IudjEuQ3JlYXRlRGVwbG95bWVudFJlc3BvbnNlIgASTQoKVXBsb2FkRmlsZRIcLnRhaWxvci52MS5VcGxvYWRGaWxlUmVxdWVzdBodLnRhaWxvci52MS5VcGxvYWRGaWxlUmVzcG9uc2UiACgBEmAKEVB1Ymxpc2hEZXBsb3ltZW50EiMudGFpbG9yLnYxLlB1Ymxpc2hEZXBsb3ltZW50UmVxdWVzdBokLnRhaWxvci52MS5QdWJsaXNoRGVwbG95bWVudFJlc3BvbnNlIgASVwoOQ3JlYXRlV29ya2Zsb3cSIC50YWlsb3IudjEuQ3JlYXRlV29ya2Zsb3dSZXF1ZXN0GiEudGFpbG9yLnYxLkNyZWF0ZVdvcmtmbG93UmVzcG9uc2UiABJXCg5VcGRhdGVXb3JrZmxvdxIgLnRhaWxvci52MS5VcGRhdGVXb3JrZmxvd1JlcXVlc3QaIS50YWlsb3IudjEuVXBkYXRlV29ya2Zsb3dSZXNwb25zZSIAElcKDkRlbGV0ZVdvcmtmbG93EiAudGFpbG9yLnYxLkRlbGV0ZVdvcmtmbG93UmVxdWVzdBohLnRhaWxvci52MS5EZWxldGVXb3JrZmxvd1Jlc3BvbnNlIgASTgoLR2V0V29ya2Zsb3cSHS50YWlsb3IudjEuR2V0V29ya2Zsb3dSZXF1ZXN0Gh4udGFpbG9yLnYxLkdldFdvcmtmbG93UmVzcG9uc2UiABJgChFHZXRXb3JrZmxvd0J5TmFtZRIjLnRhaWxvci52MS5HZXRXb3JrZmxvd0J5TmFtZVJlcXVlc3QaJC50YWlsb3IudjEuR2V0V29ya2Zsb3dCeU5hbWVSZXNwb25zZSIAElQKDUxpc3RXb3JrZmxvd3MSHy50YWlsb3IudjEuTGlzdFdvcmtmbG93c1JlcXVlc3QaIC50YWlsb3IudjEuTGlzdFdvcmtmbG93c1Jlc3BvbnNlIgASeAoZQ3JlYXRlV29ya2Zsb3dKb2JGdW5jdGlvbhIrLnRhaWxvci52MS5DcmVhdGVXb3JrZmxvd0pvYkZ1bmN0aW9uUmVxdWVzdBosLnRhaWxvci52MS5DcmVhdGVXb3JrZmxvd0pvYkZ1bmN0aW9uUmVzcG9uc2UiABJ4ChlVcGRhdGVXb3JrZmxvd0pvYkZ1bmN0aW9uEisudGFpbG9yLnYxLlVwZGF0ZVdvcmtmbG93Sm9iRnVuY3Rpb25SZXF1ZXN0GiwudGFpbG9yLnYxLlVwZGF0ZVdvcmtmbG93Sm9iRnVuY3Rpb25SZXNwb25zZSIAEm8KFkdldFdvcmtmbG93Sm9iRnVuY3Rpb24SKC50YWlsb3IudjEuR2V0V29ya2Zsb3dKb2JGdW5jdGlvblJlcXVlc3QaKS50YWlsb3IudjEuR2V0V29ya2Zsb3dKb2JGdW5jdGlvblJlc3BvbnNlIgASgQEKHEdldFdvcmtmbG93Sm9iRnVuY3Rpb25CeU5hbWUSLi50YWlsb3IudjEuR2V0V29ya2Zsb3dKb2JGdW5jdGlvbkJ5TmFtZVJlcXVlc3QaLy50YWlsb3IudjEuR2V0V29ya2Zsb3dKb2JGdW5jdGlvbkJ5TmFtZVJlc3BvbnNlIgASdQoYTGlzdFdvcmtmbG93Sm9iRnVuY3Rpb25zEioudGFpbG9yLnYxLkxpc3RXb3JrZmxvd0pvYkZ1bmN0aW9uc1JlcXVlc3QaKy50YWlsb3IudjEuTGlzdFdvcmtmbG93Sm9iRnVuY3Rpb25zUmVzcG9uc2UiABJpChRHZXRXb3JrZmxvd0V4ZWN1dGlvbhImLnRhaWxvci52MS5HZXRXb3JrZmxvd0V4ZWN1dGlvblJlcXVlc3QaJy50YWlsb3IudjEuR2V0V29ya2Zsb3dFeGVjdXRpb25SZXNwb25zZSIAEm8KFkxpc3RXb3JrZmxvd0V4ZWN1dGlvbnMSKC50YWlsb3IudjEuTGlzdFdvcmtmbG93RXhlY3V0aW9uc1JlcXVlc3QaKS50YWlsb3IudjEuTGlzdFdvcmtmbG93RXhlY3V0aW9uc1Jlc3BvbnNlIgASYAoRVGVzdFN0YXJ0V29ya2Zsb3cSIy50YWlsb3IudjEuVGVzdFN0YXJ0V29ya2Zsb3dSZXF1ZXN0GiQudGFpbG9yLnYxLlRlc3RTdGFydFdvcmtmbG93UmVzcG9uc2UiABJjChJUZXN0UmVzdW1lV29ya2Zsb3cSJC50YWlsb3IudjEuVGVzdFJlc3VtZVdvcmtmbG93UmVxdWVzdBolLnRhaWxvci52MS5UZXN0UmVzdW1lV29ya2Zsb3dSZXNwb25zZSIAEk4KC1NldE1ldGFkYXRhEh0udGFpbG9yLnYxLlNldE1ldGFkYXRhUmVxdWVzdBoeLnRhaWxvci52MS5TZXRNZXRhZGF0YVJlc3BvbnNlIgASUQoLR2V0TWV0YWRhdGESHS50YWlsb3IudjEuR2V0TWV0YWRhdGFSZXF1ZXN0Gh4udGFpbG9yLnYxLkdldE1ldGFkYXRhUmVzcG9uc2UiA5ACAWIGcHJvdG8z\", [file_tailor_v1_application, file_tailor_v1_auth, file_tailor_v1_events, file_tailor_v1_executor, file_tailor_v1_function, file_tailor_v1_idp, file_tailor_v1_metadata, file_tailor_v1_meter, file_tailor_v1_pipeline, file_tailor_v1_secret_manager, file_tailor_v1_stateflow, file_tailor_v1_staticwebsite, file_tailor_v1_tailordb, file_tailor_v1_workflow, file_tailor_v1_workspace]);\n\n/**\n * Describes the message tailor.v1.PingRequest.\n * Use `create(PingRequestSchema)` to create a new message.\n */\nexport const PingRequestSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_service, 0);\n\n/**\n * Describes the message tailor.v1.PingResponse.\n * Use `create(PingResponseSchema)` to create a new message.\n */\nexport const PingResponseSchema = /*@__PURE__*/\n messageDesc(file_tailor_v1_service, 1);\n\n/**\n * @generated from service tailor.v1.OperatorService\n */\nexport const OperatorService = /*@__PURE__*/\n serviceDesc(file_tailor_v1_service, 0);\n\n","import { readPackageJSON, type PackageJson } from \"pkg-types\";\n\nlet packageJson: PackageJson | null = null;\n\n// Reads and caches the package.json of the SDK package\nexport async function readPackageJson() {\n if (packageJson) {\n return packageJson;\n }\n packageJson = await readPackageJSON(import.meta.url);\n return packageJson;\n}\n","import { OAuth2Client } from \"@badgateway/oauth2-client\";\nimport { MethodOptions_IdempotencyLevel } from \"@bufbuild/protobuf/wkt\";\nimport {\n type Client,\n Code,\n ConnectError,\n createClient,\n type Interceptor,\n} from \"@connectrpc/connect\";\nimport { createConnectTransport } from \"@connectrpc/connect-node\";\nimport { OperatorService } from \"@tailor-proto/tailor/v1/service_pb\";\nimport { z } from \"zod\";\nimport { readPackageJson } from \"./package-json\";\n\nexport const platformBaseUrl =\n process.env.PLATFORM_URL ?? \"https://api.tailor.tech\";\n\nconst oauth2ClientId = \"cpoc_0Iudir72fqSpqC6GQ58ri1cLAqcq5vJl\";\nconst oauth2DiscoveryEndpoint =\n \"/.well-known/oauth-authorization-server/oauth2/platform\";\n\nexport function initOAuth2Client() {\n return new OAuth2Client({\n clientId: oauth2ClientId,\n server: platformBaseUrl,\n discoveryEndpoint: oauth2DiscoveryEndpoint,\n });\n}\n\nexport type OperatorClient = Client<typeof OperatorService>;\n\nexport async function initOperatorClient(accessToken: string) {\n const transport = createConnectTransport({\n httpVersion: \"2\",\n baseUrl: platformBaseUrl,\n interceptors: [\n await userAgentInterceptor(),\n await bearerTokenInterceptor(accessToken),\n retryInterceptor(),\n ],\n });\n return createClient(OperatorService, transport);\n}\n\nasync function userAgentInterceptor(): Promise<Interceptor> {\n const ua = await userAgent();\n return (next) => async (req) => {\n if (req.stream) {\n return await next(req);\n }\n\n req.header.set(\"User-Agent\", ua);\n return await next(req);\n };\n}\n\nexport async function userAgent() {\n const packageJson = await readPackageJson();\n return `tailor-sdk/${packageJson.version ?? \"unknown\"}`;\n}\n\nasync function bearerTokenInterceptor(\n accessToken: string,\n): Promise<Interceptor> {\n return (next) => async (req) => {\n if (req.stream) {\n return await next(req);\n }\n\n req.header.set(\"Authorization\", `Bearer ${accessToken}`);\n return await next(req);\n };\n}\n\nfunction retryInterceptor(): Interceptor {\n return (next) => async (req) => {\n if (req.stream) {\n return await next(req);\n }\n\n let lastError: unknown;\n for (let i = 0; i < 3; i++) {\n if (i > 0) {\n await waitRetryBackoff(i);\n }\n\n try {\n return await next(req);\n } catch (error) {\n if (isRetirable(error, req.method.idempotency)) {\n lastError = error;\n continue;\n }\n throw error;\n }\n }\n throw lastError;\n };\n}\n\nfunction waitRetryBackoff(attempt: number) {\n const base = 50 * 2 ** (attempt - 1);\n const jitter = 0.1 * (Math.random() * 2 - 1);\n const backoff = base * (1 + jitter);\n return new Promise((resolve) => setTimeout(resolve, backoff));\n}\n\nfunction isRetirable(\n error: unknown,\n idempotency: MethodOptions_IdempotencyLevel,\n) {\n if (!(error instanceof ConnectError)) {\n return false;\n }\n\n switch (error.code) {\n case Code.ResourceExhausted | Code.Unavailable:\n return true;\n case Code.Internal:\n return (\n idempotency === MethodOptions_IdempotencyLevel.NO_SIDE_EFFECTS ||\n idempotency === MethodOptions_IdempotencyLevel.IDEMPOTENT\n );\n default:\n return false;\n }\n}\n\nexport async function fetchAll<T>(\n fn: (pageToken: string) => Promise<[T[], string]>,\n) {\n const items: T[] = [];\n let pageToken = \"\";\n\n while (true) {\n const [batch, nextPageToken] = await fn(pageToken);\n items.push(...batch);\n if (!nextPageToken) break;\n pageToken = nextPageToken;\n }\n return items;\n}\n\nexport async function fetchUserInfo(accessToken: string) {\n const userInfoUrl = new URL(\"/auth/platform/userinfo\", platformBaseUrl).href;\n const resp = await fetch(userInfoUrl, {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"User-Agent\": await userAgent(),\n },\n });\n if (!resp.ok) {\n throw new Error(`Failed to fetch user info: ${resp.statusText}`);\n }\n\n const rawJson = await resp.json();\n const schema = z.object({\n email: z.string(),\n });\n return schema.parse(rawJson);\n}\n\n// Converting \"name:url\" patterns to actual Static Website URLs\nexport async function resolveStaticWebsiteUrls(\n client: OperatorClient,\n workspaceId: string,\n urls: string[] | undefined,\n context: string, // for logging context (e.g., \"CORS\", \"OAuth2 redirect URIs\")\n): Promise<string[]> {\n if (!urls) {\n return [];\n }\n\n const results = await Promise.all(\n urls.map(async (url) => {\n const urlPattern = /:url(\\/.*)?$/;\n const match = url.match(urlPattern);\n\n if (match && match.index !== undefined) {\n const siteName = url.substring(0, match.index);\n const pathSuffix = match[1] || \"\";\n\n try {\n const response = await client.getStaticWebsite({\n workspaceId,\n name: siteName,\n });\n\n if (response.staticwebsite?.url) {\n return [response.staticwebsite.url + pathSuffix];\n } else {\n console.warn(\n `Static website \"${siteName}\" has no URL assigned yet. Excluding from ${context}.`,\n );\n return [];\n }\n } catch {\n console.warn(\n `Static website \"${siteName}\" not found for ${context} configuration. Excluding from ${context}.`,\n );\n return [];\n }\n }\n return [url];\n }),\n );\n\n return results.flat();\n}\n\nexport async function fetchMachineUserToken(\n url: string,\n clientId: string,\n clientSecret: string,\n) {\n const tokenEndpoint = new URL(\"/oauth2/token\", url).href;\n const formData = new URLSearchParams();\n formData.append(\"grant_type\", \"client_credentials\");\n formData.append(\"client_id\", clientId);\n formData.append(\"client_secret\", clientSecret);\n\n const resp = await fetch(tokenEndpoint, {\n method: \"POST\",\n headers: {\n \"User-Agent\": await userAgent(),\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n },\n body: formData,\n });\n if (!resp.ok) {\n throw new Error(\"Failed to fetch machine user token\");\n }\n const rawJson = await resp.json();\n\n const schema = z.object({\n token_type: z.string(),\n access_token: z.string(),\n expires_in: z.number(),\n });\n return schema.parse(rawJson);\n}\n","import * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { parseYAML, stringifyYAML, parseTOML } from \"confbox\";\nimport { consola } from \"consola\";\nimport ml from \"multiline-ts\";\nimport { xdgConfig } from \"xdg-basedir\";\nimport { z } from \"zod\";\nimport { initOAuth2Client } from \"./client\";\n\nconst pfConfigSchema = z.object({\n version: z.literal(1),\n users: z.partialRecord(\n z.string(),\n z.object({\n access_token: z.string(),\n refresh_token: z.string(),\n token_expires_at: z.string(),\n }),\n ),\n profiles: z.partialRecord(\n z.string(),\n z.object({\n user: z.string(),\n workspace_id: z.string(),\n }),\n ),\n // null if no user is currently selected\n current_user: z.string().nullable(),\n});\n\ntype PfConfig = z.output<typeof pfConfigSchema>;\n\nfunction platformConfigPath() {\n if (!xdgConfig) {\n throw new Error(\"User home directory not found\");\n }\n return path.join(xdgConfig, \"tailor-platform\", \"config.yaml\");\n}\n\nexport function readPlatformConfig(): PfConfig {\n const configPath = platformConfigPath();\n\n // If platform config doesn't exist, try to read tailorctl config and migrate\n if (!fs.existsSync(configPath)) {\n consola.warn(\n `Config not found at ${configPath}, migrating from tailorctl config...`,\n );\n const tcConfig = readTailorctlConfig();\n const pfConfig = tcConfig\n ? fromTailorctlConfig(tcConfig)\n : ({ version: 1, users: {}, profiles: {}, current_user: null } as const);\n writePlatformConfig(pfConfig);\n return pfConfig;\n }\n const rawConfig = parseYAML(fs.readFileSync(configPath, \"utf-8\"));\n return pfConfigSchema.parse(rawConfig);\n}\n\nexport function writePlatformConfig(config: PfConfig) {\n const configPath = platformConfigPath();\n fs.mkdirSync(path.dirname(configPath), { recursive: true });\n fs.writeFileSync(configPath, stringifyYAML(config));\n}\n\nconst tcContextConfigSchema = z.object({\n username: z.string().optional(),\n controlplaneaccesstoken: z.string().optional(),\n controlplanerefreshtoken: z.string().optional(),\n controlplanetokenexpiresat: z.string().optional(),\n workspaceid: z.string().optional(),\n});\n\nconst tcConfigSchema = z\n .object({\n global: z\n .object({\n context: z.string().optional(),\n })\n .optional(),\n })\n .catchall(tcContextConfigSchema.optional());\n\ntype TcConfig = z.output<typeof tcConfigSchema>;\ntype TcContextConfig = z.output<typeof tcContextConfigSchema>;\n\nfunction readTailorctlConfig(): TcConfig | undefined {\n const configPath = path.join(os.homedir(), \".tailorctl\", \"config\");\n if (!fs.existsSync(configPath)) {\n return;\n }\n const rawConfig = parseTOML(fs.readFileSync(configPath, \"utf-8\"));\n return tcConfigSchema.parse(rawConfig);\n}\n\nfunction fromTailorctlConfig(config: TcConfig): PfConfig {\n const users: PfConfig[\"users\"] = {};\n const profiles: PfConfig[\"profiles\"] = {};\n let currentUser: PfConfig[\"current_user\"] = null;\n\n const currentContext = config.global?.context || \"default\";\n for (const [key, val] of Object.entries(config)) {\n if (key === \"global\") {\n continue;\n }\n const context = val as TcContextConfig;\n if (\n !context.username ||\n !context.controlplaneaccesstoken ||\n !context.controlplanerefreshtoken ||\n !context.controlplanetokenexpiresat ||\n !context.workspaceid\n ) {\n continue;\n }\n if (key === currentContext) {\n currentUser = context.username;\n }\n profiles[key] = {\n user: context.username,\n workspace_id: context.workspaceid,\n };\n const user = users[context.username];\n if (\n !user ||\n new Date(user.token_expires_at) <\n new Date(context.controlplanetokenexpiresat)\n ) {\n users[context.username] = {\n access_token: context.controlplaneaccesstoken,\n refresh_token: context.controlplanerefreshtoken,\n token_expires_at: context.controlplanetokenexpiresat,\n };\n }\n }\n return { version: 1, users, profiles, current_user: currentUser };\n}\n\n// Load workspace ID from command options, environment variables, or platform config.\n// Priority: opts/workspaceId > env/workspaceId > opts/profile > env/profile > error\nexport function loadWorkspaceId(opts?: {\n workspaceId?: string;\n profile?: string;\n}) {\n // opts/workspaceId\n if (opts?.workspaceId) {\n return opts.workspaceId;\n }\n\n // env/workspaceId\n if (process.env.TAILOR_PLATFORM_WORKSPACE_ID) {\n return process.env.TAILOR_PLATFORM_WORKSPACE_ID;\n }\n\n // opts/profile > env/profile\n const profile = opts?.profile || process.env.TAILOR_PLATFORM_PROFILE;\n if (profile) {\n const pfConfig = readPlatformConfig();\n const wsId = pfConfig.profiles[profile]?.workspace_id;\n if (!wsId) {\n throw new Error(`Profile \"${profile}\" not found`);\n }\n return wsId;\n }\n\n // error\n throw new Error(ml`\n Workspace ID not found.\n Please specify workspace ID via --workspace-id option or TAILOR_PLATFORM_WORKSPACE_ID environment variable.\n `);\n}\n\n// Load access token from command options, environment variables, or platform config.\n// Priority: env/pat > opts/profile > env/profile > config/currentUser > error\nexport async function loadAccessToken(opts?: {\n useProfile?: boolean;\n profile?: string;\n}) {\n // env/pat\n if (process.env.TAILOR_PLATFORM_TOKEN) {\n return process.env.TAILOR_PLATFORM_TOKEN;\n }\n if (process.env.TAILOR_TOKEN) {\n return process.env.TAILOR_TOKEN;\n }\n\n const pfConfig = readPlatformConfig();\n let user;\n // opts/profile > env/profile\n const profile = opts?.useProfile\n ? opts.profile || process.env.TAILOR_PLATFORM_PROFILE\n : undefined;\n if (profile) {\n const u = pfConfig.profiles[profile]?.user;\n if (!u) {\n throw new Error(`Profile \"${profile}\" not found`);\n }\n user = u;\n } else {\n // config/currentUser\n const u = pfConfig.current_user;\n if (!u) {\n // error\n throw new Error(ml`\n Tailor Platform token not found.\n Please specify token via TAILOR_PLATFORM_TOKEN environment variable or login using 'tailor-sdk login' command.\n `);\n }\n user = u;\n }\n\n return await fetchLatestToken(pfConfig, user);\n}\n\nexport async function fetchLatestToken(\n config: PfConfig,\n user: string,\n): Promise<string> {\n const tokens = config.users[user];\n if (!tokens) {\n throw new Error(ml`\n User \"${user}\" not found.\n Please verify your user name and login using 'tailor-sdk login' command.\n `);\n }\n if (new Date(tokens.token_expires_at) > new Date()) {\n return tokens.access_token;\n }\n\n const client = initOAuth2Client();\n const resp = await client.refreshToken({\n accessToken: tokens.access_token,\n refreshToken: tokens.refresh_token,\n expiresAt: Date.parse(tokens.token_expires_at),\n });\n config.users[user] = {\n access_token: resp.accessToken,\n refresh_token: resp.refreshToken!,\n token_expires_at: new Date(resp.expiresAt!).toISOString(),\n };\n writePlatformConfig(config);\n return resp.accessToken;\n}\n\n// Load config path from command options or environment variables.\n// Priority: opts/config > env/config > default(\"tailor.config.ts\")\nexport function loadConfigPath(configPath?: string): string {\n if (configPath) {\n return configPath;\n }\n if (process.env.TAILOR_PLATFORM_SDK_CONFIG_PATH) {\n return process.env.TAILOR_PLATFORM_SDK_CONFIG_PATH;\n }\n return \"tailor.config.ts\";\n}\n","import { readPackageJson } from \"@/cli/package-json\";\nimport type { MessageInitShape } from \"@bufbuild/protobuf\";\nimport type { SetMetadataRequestSchema } from \"@tailor-proto/tailor/v1/metadata_pb\";\n\nexport type WithLabel<T> = Partial<\n Record<\n string,\n {\n resource: T;\n label: string | undefined;\n }\n >\n>;\n\nexport function trnPrefix(workspaceId: string): string {\n return `trn:v1:workspace:${workspaceId}`;\n}\n\nexport const sdkNameLabelKey = \"sdk-name\";\n\nexport async function buildMetaRequest(\n trn: string,\n appName: string,\n): Promise<MessageInitShape<typeof SetMetadataRequestSchema>> {\n const packageJson = await readPackageJson();\n // Format version to be suitable for label value\n const sdkVersion = packageJson.version\n ? `v${packageJson.version.replace(/\\./g, \"-\")}`\n : \"unknown\";\n\n return {\n trn,\n labels: {\n [sdkNameLabelKey]: appName,\n \"sdk-version\": sdkVersion,\n },\n };\n}\n","import { styleText } from \"node:util\";\n\nexport interface HasName {\n name: string;\n}\n\nexport class ChangeSet<\n C extends HasName,\n U extends HasName,\n D extends HasName,\n> {\n creates: C[] = [];\n updates: U[] = [];\n deletes: D[] = [];\n\n constructor(private title: string) {}\n\n print() {\n if (\n this.creates.length === 0 &&\n this.updates.length === 0 &&\n this.deletes.length === 0\n ) {\n return;\n }\n\n console.log(styleText(\"bold\", `${this.title}:`));\n this.creates.forEach((item) => {\n console.log(styleText(\"green\", ` + ${item.name}`));\n });\n this.deletes.forEach((item) => {\n console.log(styleText(\"red\", ` - ${item.name}`));\n });\n this.updates.forEach((item) => {\n console.log(` * ${item.name}`);\n });\n }\n}\n","import { type MessageInitShape } from \"@bufbuild/protobuf\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport {\n Subgraph_ServiceType,\n type SubgraphSchema,\n} from \"@tailor-proto/tailor/v1/application_resource_pb\";\nimport {\n fetchAll,\n resolveStaticWebsiteUrls,\n type OperatorClient,\n} from \"../../client\";\nimport { buildMetaRequest } from \"./label\";\nimport { ChangeSet } from \".\";\nimport type { ApplyPhase, PlanContext } from \"..\";\nimport type {\n DeleteApplicationRequestSchema,\n CreateApplicationRequestSchema,\n UpdateApplicationRequestSchema,\n} from \"@tailor-proto/tailor/v1/application_pb\";\nimport type { SetMetadataRequestSchema } from \"@tailor-proto/tailor/v1/metadata_pb\";\n\nexport async function applyApplication(\n client: OperatorClient,\n changeSet: Awaited<ReturnType<typeof planApplication>>,\n phase: ApplyPhase = \"create-update\",\n) {\n if (phase === \"create-update\") {\n // Applications\n await Promise.all([\n ...changeSet.creates.map(async (create) => {\n create.request.cors = await resolveStaticWebsiteUrls(\n client,\n create.request.workspaceId!,\n create.request.cors,\n \"CORS\",\n );\n await client.createApplication(create.request);\n await client.setMetadata(create.metaRequest);\n }),\n ...changeSet.updates.map(async (update) => {\n update.request.cors = await resolveStaticWebsiteUrls(\n client,\n update.request.workspaceId!,\n update.request.cors,\n \"CORS\",\n );\n await client.updateApplication(update.request);\n await client.setMetadata(update.metaRequest);\n }),\n ]);\n } else if (phase === \"delete\") {\n // Delete in reverse order of dependencies\n // Applications\n await Promise.all(\n changeSet.deletes.map(async (del) => {\n await client.deleteApplication(del.request);\n }),\n );\n }\n}\n\ntype CreateApplication = {\n name: string;\n request: MessageInitShape<typeof CreateApplicationRequestSchema>;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype UpdateApplication = {\n name: string;\n request: MessageInitShape<typeof UpdateApplicationRequestSchema>;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype DeleteApplication = {\n name: string;\n request: MessageInitShape<typeof DeleteApplicationRequestSchema>;\n};\n\nfunction trn(workspaceId: string, name: string) {\n return `trn:v1:workspace:${workspaceId}:application:${name}`;\n}\n\nexport async function planApplication({\n client,\n workspaceId,\n application,\n forRemoval,\n}: PlanContext) {\n const changeSet: ChangeSet<\n CreateApplication,\n UpdateApplication,\n DeleteApplication\n > = new ChangeSet(\"Applications\");\n\n const existingApplications = await fetchAll(async (pageToken) => {\n try {\n const { applications, nextPageToken } = await client.listApplications({\n workspaceId,\n pageToken,\n });\n return [applications, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n\n if (forRemoval) {\n if (existingApplications.some((app) => app.name === application.name)) {\n changeSet.deletes.push({\n name: application.name,\n request: {\n workspaceId,\n applicationName: application.name,\n },\n });\n }\n changeSet.print();\n return changeSet;\n }\n\n let authNamespace: string | undefined;\n let authIdpConfigName: string | undefined;\n if (application.authService && application.authService.config) {\n authNamespace = application.authService.config.name;\n\n const idProvider = application.authService.config.idProvider;\n if (idProvider) {\n authIdpConfigName = idProvider.name;\n }\n } else if (application.config.auth) {\n // Retrieve idpConfig from remote when auth references an external namespace\n authNamespace = application.config.auth.name;\n const idpConfigs = await fetchAll(async (pageToken) => {\n try {\n const { idpConfigs, nextPageToken } = await client.listAuthIDPConfigs({\n workspaceId,\n namespaceName: authNamespace!,\n pageToken,\n });\n return [idpConfigs, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n if (idpConfigs.length > 0) {\n authIdpConfigName = idpConfigs[0].name;\n }\n }\n const metaRequest = await buildMetaRequest(\n trn(workspaceId, application.name),\n application.name,\n );\n\n if (existingApplications.some((app) => app.name === application.name)) {\n changeSet.updates.push({\n name: application.name,\n request: {\n workspaceId,\n applicationName: application.name,\n authNamespace,\n authIdpConfigName,\n cors: application.config.cors,\n subgraphs: application.subgraphs.map((subgraph) =>\n protoSubgraph(subgraph),\n ),\n allowedIpAddresses: application.config.allowedIPAddresses,\n disableIntrospection: application.config.disableIntrospection,\n },\n metaRequest,\n });\n } else {\n changeSet.creates.push({\n name: application.name,\n request: {\n workspaceId,\n applicationName: application.name,\n authNamespace,\n authIdpConfigName,\n cors: application.config.cors,\n subgraphs: application.subgraphs.map((subgraph) =>\n protoSubgraph(subgraph),\n ),\n allowedIpAddresses: application.config.allowedIPAddresses,\n disableIntrospection: application.config.disableIntrospection,\n },\n metaRequest,\n });\n }\n\n changeSet.print();\n return changeSet;\n}\n\nfunction protoSubgraph(\n subgraph: Readonly<{ Type: string; Name: string }>,\n): MessageInitShape<typeof SubgraphSchema> {\n // TODO(remiposo): Make it type-safe\n let serviceType: Subgraph_ServiceType;\n switch (subgraph.Type) {\n case \"tailordb\":\n serviceType = Subgraph_ServiceType.TAILORDB;\n break;\n case \"pipeline\":\n serviceType = Subgraph_ServiceType.PIPELINE;\n break;\n case \"idp\":\n serviceType = Subgraph_ServiceType.IDP;\n break;\n case \"auth\":\n serviceType = Subgraph_ServiceType.AUTH;\n break;\n default:\n throw new Error(`Unknown subgraph type: ${subgraph.Type}`);\n }\n return {\n serviceType,\n serviceNamespace: subgraph.Name,\n };\n}\n","import { type MessageInitShape } from \"@bufbuild/protobuf\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport {\n type CreateIdPClientRequestSchema,\n type CreateIdPServiceRequestSchema,\n type DeleteIdPClientRequestSchema,\n type DeleteIdPServiceRequestSchema,\n type UpdateIdPServiceRequestSchema,\n} from \"@tailor-proto/tailor/v1/idp_pb\";\nimport { type IdP } from \"@/parser/service/idp\";\nimport { fetchAll, type OperatorClient } from \"../../client\";\nimport { buildMetaRequest, sdkNameLabelKey, type WithLabel } from \"./label\";\nimport { ChangeSet } from \".\";\nimport type { ApplyPhase, PlanContext } from \"..\";\nimport type { OwnerConflict, UnmanagedResource } from \"./confirm\";\nimport type { SetMetadataRequestSchema } from \"@tailor-proto/tailor/v1/metadata_pb\";\n\nexport function idpClientVaultName(namespaceName: string, clientName: string) {\n return `idp-${namespaceName}-${clientName}`;\n}\n\nexport function idpClientSecretName(namespaceName: string, clientName: string) {\n return `client-secret-${namespaceName}-${clientName}`;\n}\n\nexport async function applyIdP(\n client: OperatorClient,\n result: Awaited<ReturnType<typeof planIdP>>,\n phase: ApplyPhase = \"create-update\",\n) {\n const { changeSet } = result;\n if (phase === \"create-update\") {\n // Services\n await Promise.all([\n ...changeSet.service.creates.map(async (create) => {\n await client.createIdPService(create.request);\n await client.setMetadata(create.metaRequest);\n }),\n ...changeSet.service.updates.map(async (update) => {\n await client.updateIdPService(update.request);\n await client.setMetadata(update.metaRequest);\n }),\n ]);\n\n // Clients\n await Promise.all([\n ...changeSet.client.creates.map(async (create) => {\n const resp = await client.createIdPClient(create.request);\n\n // Create the secret manager vault and secret\n const vaultName = idpClientVaultName(\n create.request.namespaceName!,\n create.request.client?.name || \"\",\n );\n const secretName = idpClientSecretName(\n create.request.namespaceName!,\n create.request.client?.name || \"\",\n );\n await client.createSecretManagerVault({\n workspaceId: create.request.workspaceId,\n secretmanagerVaultName: vaultName,\n });\n await client.createSecretManagerSecret({\n workspaceId: create.request.workspaceId,\n secretmanagerVaultName: vaultName,\n secretmanagerSecretName: secretName,\n secretmanagerSecretValue: resp.client?.clientSecret,\n });\n }),\n ...changeSet.client.updates.map(async (update) => {\n // Ensure the vault and secret exist\n const vaultName = idpClientVaultName(update.namespaceName, update.name);\n const secretName = idpClientSecretName(\n update.namespaceName,\n update.name,\n );\n try {\n await client.getSecretManagerVault({\n workspaceId: update.workspaceId,\n secretmanagerVaultName: vaultName,\n });\n return;\n } catch (error) {\n if (\n !(error instanceof ConnectError && error.code === Code.NotFound)\n ) {\n throw error;\n }\n }\n await client.createSecretManagerVault({\n workspaceId: update.workspaceId,\n secretmanagerVaultName: vaultName,\n });\n await client.createSecretManagerSecret({\n workspaceId: update.workspaceId,\n secretmanagerVaultName: vaultName,\n secretmanagerSecretName: secretName,\n secretmanagerSecretValue: update.clientSecret,\n });\n }),\n ]);\n } else if (phase === \"delete\") {\n // Delete in reverse order of dependencies\n // Clients\n await Promise.all(\n changeSet.client.deletes.map(async (del) => {\n await client.deleteIdPClient(del.request);\n\n // Delete the secret manager vault and secret\n const vaultName = `idp-${del.request.namespaceName}-${del.request.name}`;\n await client.deleteSecretManagerVault({\n workspaceId: del.request.workspaceId,\n secretmanagerVaultName: vaultName,\n });\n }),\n );\n\n // Services\n await Promise.all(\n changeSet.service.deletes.map((del) =>\n client.deleteIdPService(del.request),\n ),\n );\n }\n}\n\nexport async function planIdP({\n client,\n workspaceId,\n application,\n forRemoval,\n}: PlanContext) {\n const idps = forRemoval ? [] : application.idpServices;\n const {\n changeSet: serviceChangeSet,\n conflicts,\n unmanaged,\n resourceOwners,\n } = await planServices(client, workspaceId, application.name, idps);\n const deletedServices = serviceChangeSet.deletes.map((del) => del.name);\n const clientChangeSet = await planClients(\n client,\n workspaceId,\n idps,\n deletedServices,\n );\n\n serviceChangeSet.print();\n clientChangeSet.print();\n return {\n changeSet: {\n service: serviceChangeSet,\n client: clientChangeSet,\n },\n conflicts,\n unmanaged,\n resourceOwners,\n };\n}\n\ntype CreateService = {\n name: string;\n request: MessageInitShape<typeof CreateIdPServiceRequestSchema>;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype UpdateService = {\n name: string;\n request: MessageInitShape<typeof UpdateIdPServiceRequestSchema>;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype DeleteService = {\n name: string;\n request: MessageInitShape<typeof DeleteIdPServiceRequestSchema>;\n};\n\nfunction trn(workspaceId: string, name: string) {\n return `trn:v1:workspace:${workspaceId}:idp:${name}`;\n}\n\nasync function planServices(\n client: OperatorClient,\n workspaceId: string,\n appName: string,\n idps: ReadonlyArray<IdP>,\n) {\n const changeSet: ChangeSet<CreateService, UpdateService, DeleteService> =\n new ChangeSet(\"IdP services\");\n const conflicts: OwnerConflict[] = [];\n const unmanaged: UnmanagedResource[] = [];\n const resourceOwners = new Set<string>();\n\n const withoutLabel = await fetchAll(async (pageToken) => {\n try {\n const { idpServices, nextPageToken } = await client.listIdPServices({\n workspaceId,\n pageToken,\n });\n return [idpServices, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n const existingServices: WithLabel<(typeof withoutLabel)[number]> = {};\n await Promise.all(\n withoutLabel.map(async (resource) => {\n if (!resource.namespace?.name) {\n return;\n }\n const { metadata } = await client.getMetadata({\n trn: trn(workspaceId, resource.namespace.name),\n });\n existingServices[resource.namespace.name] = {\n resource,\n label: metadata?.labels[sdkNameLabelKey],\n };\n }),\n );\n\n for (const idp of idps) {\n const namespaceName = idp.name;\n const existing = existingServices[namespaceName];\n const metaRequest = await buildMetaRequest(\n trn(workspaceId, namespaceName),\n appName,\n );\n let authorization;\n switch (idp.authorization) {\n case \"insecure\":\n authorization = \"true==true\";\n break;\n case \"loggedIn\":\n authorization = \"user != null && size(user.id) > 0\";\n break;\n default:\n authorization = idp.authorization.cel;\n break;\n }\n\n if (existing) {\n if (!existing.label) {\n unmanaged.push({\n resourceType: \"IdP service\",\n resourceName: idp.name,\n });\n } else if (existing.label !== appName) {\n conflicts.push({\n resourceType: \"IdP service\",\n resourceName: idp.name,\n currentOwner: existing.label,\n });\n }\n\n changeSet.updates.push({\n name: namespaceName,\n request: {\n workspaceId,\n namespaceName,\n authorization,\n },\n metaRequest,\n });\n delete existingServices[namespaceName];\n } else {\n changeSet.creates.push({\n name: namespaceName,\n request: {\n workspaceId,\n namespaceName,\n authorization,\n },\n metaRequest,\n });\n }\n }\n Object.entries(existingServices).forEach(([namespaceName]) => {\n const label = existingServices[namespaceName]?.label;\n if (label && label !== appName) {\n resourceOwners.add(label);\n }\n // Only delete services managed by this application\n if (label === appName) {\n changeSet.deletes.push({\n name: namespaceName,\n request: {\n workspaceId,\n namespaceName,\n },\n });\n }\n });\n\n return { changeSet, conflicts, unmanaged, resourceOwners };\n}\n\ntype CreateClient = {\n name: string;\n request: MessageInitShape<typeof CreateIdPClientRequestSchema>;\n};\n\ntype UpdateClient = {\n name: string;\n workspaceId: string;\n namespaceName: string;\n clientSecret: string;\n};\n\ntype DeleteClient = {\n name: string;\n request: MessageInitShape<typeof DeleteIdPClientRequestSchema>;\n};\n\nasync function planClients(\n client: OperatorClient,\n workspaceId: string,\n idps: ReadonlyArray<IdP>,\n deletedServices: string[],\n) {\n const changeSet: ChangeSet<CreateClient, UpdateClient, DeleteClient> =\n new ChangeSet(\"IdP clients\");\n\n const fetchClients = (namespaceName: string) => {\n return fetchAll(async (pageToken) => {\n try {\n const { clients, nextPageToken } = await client.listIdPClients({\n workspaceId,\n namespaceName,\n pageToken,\n });\n return [clients, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n };\n\n for (const idp of idps) {\n const namespaceName = idp.name;\n const existingClients = await fetchClients(namespaceName);\n const existingNameMap = new Map<string, string>();\n existingClients.forEach((client) => {\n existingNameMap.set(client.name, client.clientSecret);\n });\n for (const name of idp.clients) {\n if (existingNameMap.has(name)) {\n changeSet.updates.push({\n name,\n workspaceId,\n namespaceName,\n clientSecret: existingNameMap.get(name)!,\n });\n existingNameMap.delete(name);\n } else {\n changeSet.creates.push({\n name,\n request: {\n workspaceId,\n namespaceName,\n client: {\n name,\n },\n },\n });\n }\n }\n existingNameMap.forEach((name) => {\n changeSet.deletes.push({\n name,\n request: {\n workspaceId,\n namespaceName,\n name,\n },\n });\n });\n }\n\n for (const namespaceName of deletedServices) {\n const existingClients = await fetchClients(namespaceName);\n existingClients.forEach((client) => {\n changeSet.deletes.push({\n name: client.name,\n request: {\n workspaceId,\n namespaceName,\n name: client.name,\n },\n });\n });\n }\n return changeSet;\n}\n","import { fromJson, type MessageInitShape } from \"@bufbuild/protobuf\";\nimport { ValueSchema } from \"@bufbuild/protobuf/wkt\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport {\n AuthIDPConfig_AuthType,\n AuthOAuth2Client_ClientType,\n AuthOAuth2Client_GrantType,\n AuthSCIMAttribute_Mutability,\n AuthSCIMAttribute_Type,\n AuthSCIMAttribute_Uniqueness,\n AuthSCIMConfig_AuthorizationType,\n TenantProviderConfig_TenantProviderType,\n UserProfileProviderConfig_UserProfileProviderType,\n} from \"@tailor-proto/tailor/v1/auth_resource_pb\";\nimport {\n fetchAll,\n resolveStaticWebsiteUrls,\n type OperatorClient,\n} from \"../../client\";\nimport { idpClientSecretName, idpClientVaultName } from \"./idp\";\nimport { buildMetaRequest, sdkNameLabelKey, type WithLabel } from \"./label\";\nimport { ChangeSet } from \".\";\nimport type { ApplyPhase, PlanContext } from \"..\";\nimport type { OwnerConflict, UnmanagedResource } from \"./confirm\";\nimport type { AuthService } from \"@/cli/application/auth/service\";\nimport type {\n BuiltinIdP,\n IdProviderConfig,\n OAuth2Client,\n SCIMAttribute,\n SCIMConfig,\n SCIMResource,\n AuthAttributeValue,\n} from \"@/parser/service/auth\";\nimport type {\n CreateAuthIDPConfigRequestSchema,\n CreateAuthMachineUserRequestSchema,\n CreateAuthOAuth2ClientRequestSchema,\n CreateAuthSCIMConfigRequestSchema,\n CreateAuthSCIMResourceRequestSchema,\n CreateAuthServiceRequestSchema,\n CreateTenantConfigRequestSchema,\n CreateUserProfileConfigRequestSchema,\n DeleteAuthIDPConfigRequestSchema,\n DeleteAuthMachineUserRequestSchema,\n DeleteAuthOAuth2ClientRequestSchema,\n DeleteAuthSCIMConfigRequestSchema,\n DeleteAuthSCIMResourceRequestSchema,\n DeleteAuthServiceRequestSchema,\n DeleteTenantConfigRequestSchema,\n DeleteUserProfileConfigRequestSchema,\n UpdateAuthIDPConfigRequestSchema,\n UpdateAuthMachineUserRequestSchema,\n UpdateAuthOAuth2ClientRequestSchema,\n UpdateAuthSCIMConfigRequestSchema,\n UpdateAuthSCIMResourceRequestSchema,\n UpdateTenantConfigRequestSchema,\n UpdateUserProfileConfigRequestSchema,\n} from \"@tailor-proto/tailor/v1/auth_pb\";\nimport type {\n AuthIDPConfig_ConfigSchema,\n AuthIDPConfigSchema,\n AuthOAuth2ClientSchema,\n AuthSCIMAttributeSchema,\n AuthSCIMConfigSchema,\n AuthSCIMResourceSchema,\n TenantProviderConfigSchema,\n UserProfileProviderConfigSchema,\n} from \"@tailor-proto/tailor/v1/auth_resource_pb\";\nimport type { SetMetadataRequestSchema } from \"@tailor-proto/tailor/v1/metadata_pb\";\n\nexport async function applyAuth(\n client: OperatorClient,\n result: Awaited<ReturnType<typeof planAuth>>,\n phase: ApplyPhase = \"create-update\",\n) {\n const { changeSet } = result;\n if (phase === \"create-update\") {\n // Services\n await Promise.all([\n ...changeSet.service.creates.map(async (create) => {\n await client.createAuthService(create.request);\n await client.setMetadata(create.metaRequest);\n }),\n ...changeSet.service.updates.map((update) =>\n client.setMetadata(update.metaRequest),\n ),\n ]);\n\n // IdPConfigs\n await Promise.all([\n ...changeSet.idpConfig.creates.map(async (create) => {\n if (create.idpConfig.kind === \"BuiltInIdP\") {\n create.request.idpConfig!.config = await protoBuiltinIdPConfig(\n client,\n create.request.workspaceId!,\n create.idpConfig,\n );\n }\n return client.createAuthIDPConfig(create.request);\n }),\n ...changeSet.idpConfig.updates.map(async (update) => {\n if (update.idpConfig.kind === \"BuiltInIdP\") {\n update.request.idpConfig!.config = await protoBuiltinIdPConfig(\n client,\n update.request.workspaceId!,\n update.idpConfig,\n );\n }\n return client.updateAuthIDPConfig(update.request);\n }),\n ]);\n\n // UserProfileConfigs\n await Promise.all([\n ...changeSet.userProfileConfig.creates.map((create) =>\n client.createUserProfileConfig(create.request),\n ),\n ...changeSet.userProfileConfig.updates.map((update) =>\n client.updateUserProfileConfig(update.request),\n ),\n ]);\n\n // TenantConfigs\n await Promise.all([\n ...changeSet.tenantConfig.creates.map((create) =>\n client.createTenantConfig(create.request),\n ),\n ...changeSet.tenantConfig.updates.map((update) =>\n client.updateTenantConfig(update.request),\n ),\n ]);\n\n // MachineUsers\n await Promise.all([\n ...changeSet.machineUser.creates.map((create) =>\n client.createAuthMachineUser(create.request),\n ),\n ...changeSet.machineUser.updates.map((update) =>\n client.updateAuthMachineUser(update.request),\n ),\n ]);\n\n // OAuth2Clients\n await Promise.all([\n ...changeSet.oauth2Client.creates.map(async (create) => {\n create.request.oauth2Client!.redirectUris =\n await resolveStaticWebsiteUrls(\n client,\n create.request.workspaceId!,\n create.request.oauth2Client!.redirectUris,\n \"OAuth2 redirect URIs\",\n );\n return client.createAuthOAuth2Client(create.request);\n }),\n ...changeSet.oauth2Client.updates.map(async (update) => {\n update.request.oauth2Client!.redirectUris =\n await resolveStaticWebsiteUrls(\n client,\n update.request.workspaceId!,\n update.request.oauth2Client!.redirectUris,\n \"OAuth2 redirect URIs\",\n );\n return client.updateAuthOAuth2Client(update.request);\n }),\n ]);\n\n // SCIMConfigs\n await Promise.all([\n ...changeSet.scim.creates.map((create) =>\n client.createAuthSCIMConfig(create.request),\n ),\n ...changeSet.scim.updates.map((update) =>\n client.updateAuthSCIMConfig(update.request),\n ),\n ]);\n\n // SCIMResources\n await Promise.all([\n ...changeSet.scimResource.creates.map((create) =>\n client.createAuthSCIMResource(create.request),\n ),\n ...changeSet.scimResource.updates.map((update) =>\n client.updateAuthSCIMResource(update.request),\n ),\n ]);\n } else if (phase === \"delete\") {\n // Delete in reverse order of dependencies\n // SCIMResources\n await Promise.all(\n changeSet.scimResource.deletes.map((del) =>\n client.deleteAuthSCIMResource(del.request),\n ),\n );\n\n // SCIMConfigs\n await Promise.all(\n changeSet.scim.deletes.map((del) =>\n client.deleteAuthSCIMConfig(del.request),\n ),\n );\n\n // OAuth2Clients\n await Promise.all(\n changeSet.oauth2Client.deletes.map((del) =>\n client.deleteAuthOAuth2Client(del.request),\n ),\n );\n\n // MachineUsers\n await Promise.all(\n changeSet.machineUser.deletes.map((del) =>\n client.deleteAuthMachineUser(del.request),\n ),\n );\n\n // TenantConfigs\n await Promise.all(\n changeSet.tenantConfig.deletes.map((del) =>\n client.deleteTenantConfig(del.request),\n ),\n );\n\n // UserProfileConfigs\n await Promise.all(\n changeSet.userProfileConfig.deletes.map((del) =>\n client.deleteUserProfileConfig(del.request),\n ),\n );\n\n // IdPConfigs\n await Promise.all(\n changeSet.idpConfig.deletes.map((del) =>\n client.deleteAuthIDPConfig(del.request),\n ),\n );\n\n // Services\n await Promise.all(\n changeSet.service.deletes.map((del) =>\n client.deleteAuthService(del.request),\n ),\n );\n }\n}\n\nexport async function planAuth({\n client,\n workspaceId,\n application,\n forRemoval,\n}: PlanContext) {\n const auths: Readonly<AuthService>[] = [];\n if (!forRemoval && application.authService) {\n await application.authService.resolveNamespaces();\n auths.push(application.authService);\n }\n const {\n changeSet: serviceChangeSet,\n conflicts,\n unmanaged,\n resourceOwners,\n } = await planServices(client, workspaceId, application.name, auths);\n const deletedServices = serviceChangeSet.deletes.map((del) => del.name);\n const idpConfigChangeSet = await planIdPConfigs(\n client,\n workspaceId,\n auths,\n deletedServices,\n );\n const userProfileConfigChangeSet = await planUserProfileConfigs(\n client,\n workspaceId,\n auths,\n deletedServices,\n );\n const tenantConfigChangeSet = await planTenantConfigs(\n client,\n workspaceId,\n auths,\n deletedServices,\n );\n const machineUserChangeSet = await planMachineUsers(\n client,\n workspaceId,\n auths,\n deletedServices,\n );\n const oauth2ClientChangeSet = await planOAuth2Clients(\n client,\n workspaceId,\n auths,\n deletedServices,\n );\n const scimChangeSet = await planSCIMConfigs(\n client,\n workspaceId,\n auths,\n deletedServices,\n );\n const scimResourceChangeSet = await planSCIMResources(\n client,\n workspaceId,\n auths,\n deletedServices,\n );\n\n serviceChangeSet.print();\n idpConfigChangeSet.print();\n userProfileConfigChangeSet.print();\n tenantConfigChangeSet.print();\n machineUserChangeSet.print();\n oauth2ClientChangeSet.print();\n scimChangeSet.print();\n scimResourceChangeSet.print();\n return {\n changeSet: {\n service: serviceChangeSet,\n idpConfig: idpConfigChangeSet,\n userProfileConfig: userProfileConfigChangeSet,\n tenantConfig: tenantConfigChangeSet,\n machineUser: machineUserChangeSet,\n oauth2Client: oauth2ClientChangeSet,\n scim: scimChangeSet,\n scimResource: scimResourceChangeSet,\n },\n conflicts,\n unmanaged,\n resourceOwners,\n };\n}\n\ntype CreateService = {\n name: string;\n request: MessageInitShape<typeof CreateAuthServiceRequestSchema>;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype UpdateService = {\n name: string;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype DeleteService = {\n name: string;\n request: MessageInitShape<typeof DeleteAuthServiceRequestSchema>;\n};\n\nfunction trn(workspaceId: string, name: string) {\n return `trn:v1:workspace:${workspaceId}:auth:${name}`;\n}\n\nasync function planServices(\n client: OperatorClient,\n workspaceId: string,\n appName: string,\n auths: ReadonlyArray<Readonly<AuthService>>,\n) {\n const changeSet: ChangeSet<CreateService, UpdateService, DeleteService> =\n new ChangeSet(\"Auth services\");\n const conflicts: OwnerConflict[] = [];\n const unmanaged: UnmanagedResource[] = [];\n const resourceOwners = new Set<string>();\n\n const withoutLabel = await fetchAll(async (pageToken) => {\n try {\n const { authServices, nextPageToken } = await client.listAuthServices({\n workspaceId,\n pageToken,\n });\n return [authServices, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n const existingServices: WithLabel<(typeof withoutLabel)[number]> = {};\n await Promise.all(\n withoutLabel.map(async (resource) => {\n if (!resource.namespace?.name) {\n return;\n }\n const { metadata } = await client.getMetadata({\n trn: trn(workspaceId, resource.namespace.name),\n });\n existingServices[resource.namespace.name] = {\n resource,\n label: metadata?.labels[sdkNameLabelKey],\n };\n }),\n );\n\n for (const { config } of auths) {\n const existing = existingServices[config.name];\n const metaRequest = await buildMetaRequest(\n trn(workspaceId, config.name),\n appName,\n );\n if (existing) {\n if (!existing.label) {\n unmanaged.push({\n resourceType: \"Auth service\",\n resourceName: config.name,\n });\n } else if (existing.label !== appName) {\n conflicts.push({\n resourceType: \"Auth service\",\n resourceName: config.name,\n currentOwner: existing.label,\n });\n }\n\n changeSet.updates.push({\n name: config.name,\n metaRequest,\n });\n delete existingServices[config.name];\n } else {\n changeSet.creates.push({\n name: config.name,\n request: {\n workspaceId,\n namespaceName: config.name,\n },\n metaRequest,\n });\n }\n }\n Object.entries(existingServices).forEach(([namespaceName]) => {\n const label = existingServices[namespaceName]?.label;\n if (label && label !== appName) {\n resourceOwners.add(label);\n }\n // Only delete services managed by this application\n if (label === appName) {\n changeSet.deletes.push({\n name: namespaceName,\n request: {\n workspaceId,\n namespaceName,\n },\n });\n }\n });\n\n return { changeSet, conflicts, unmanaged, resourceOwners };\n}\n\ntype CreateIdPConfig = {\n name: string;\n idpConfig: Readonly<IdProviderConfig>;\n request: MessageInitShape<typeof CreateAuthIDPConfigRequestSchema>;\n};\n\ntype UpdateIdPConfig = {\n name: string;\n idpConfig: Readonly<IdProviderConfig>;\n request: MessageInitShape<typeof UpdateAuthIDPConfigRequestSchema>;\n};\n\ntype DeleteIdPConfig = {\n name: string;\n request: MessageInitShape<typeof DeleteAuthIDPConfigRequestSchema>;\n};\n\nasync function planIdPConfigs(\n client: OperatorClient,\n workspaceId: string,\n auths: ReadonlyArray<Readonly<AuthService>>,\n deletedServices: ReadonlyArray<string>,\n) {\n const changeSet: ChangeSet<\n CreateIdPConfig,\n UpdateIdPConfig,\n DeleteIdPConfig\n > = new ChangeSet(\"Auth idpConfigs\");\n\n const fetchIdPConfigs = (namespaceName: string) => {\n return fetchAll(async (pageToken) => {\n try {\n const { idpConfigs, nextPageToken } = await client.listAuthIDPConfigs({\n workspaceId,\n namespaceName,\n pageToken,\n });\n return [idpConfigs, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n };\n\n for (const { config } of auths) {\n const existingIdPConfigs = await fetchIdPConfigs(config.name);\n const existingNameSet = new Set<string>();\n existingIdPConfigs.forEach((idpConfig) => {\n existingNameSet.add(idpConfig.name);\n });\n const idpConfig = config.idProvider;\n if (idpConfig) {\n if (existingNameSet.has(idpConfig.name)) {\n changeSet.updates.push({\n name: idpConfig.name,\n idpConfig,\n request: {\n workspaceId,\n namespaceName: config.name,\n idpConfig: protoIdPConfig(idpConfig),\n },\n });\n existingNameSet.delete(idpConfig.name);\n } else {\n changeSet.creates.push({\n name: idpConfig.name,\n idpConfig,\n request: {\n workspaceId,\n namespaceName: config.name,\n idpConfig: protoIdPConfig(idpConfig),\n },\n });\n }\n }\n existingNameSet.forEach((name) => {\n changeSet.deletes.push({\n name,\n request: {\n workspaceId,\n namespaceName: config.name,\n name,\n },\n });\n });\n }\n\n for (const namespaceName of deletedServices) {\n const existingIdPConfigs = await fetchIdPConfigs(namespaceName);\n existingIdPConfigs.forEach((idpConfig) => {\n changeSet.deletes.push({\n name: idpConfig.name,\n request: {\n workspaceId,\n namespaceName,\n name: idpConfig.name,\n },\n });\n });\n }\n return changeSet;\n}\n\nfunction protoIdPConfig(\n idpConfig: IdProviderConfig,\n): MessageInitShape<typeof AuthIDPConfigSchema> {\n switch (idpConfig.kind) {\n case \"IDToken\":\n return {\n name: idpConfig.name,\n authType: AuthIDPConfig_AuthType.ID_TOKEN,\n config: {\n config: {\n case: \"idToken\",\n value: {\n providerUrl: idpConfig.providerURL,\n clientId: idpConfig.clientID,\n issuerUrl: idpConfig.issuerURL,\n usernameClaim: idpConfig.usernameClaim,\n },\n },\n },\n };\n case \"SAML\":\n return {\n name: idpConfig.name,\n authType: AuthIDPConfig_AuthType.SAML,\n config: {\n config: {\n case: \"saml\",\n value: {\n ...(idpConfig.metadataURL !== undefined\n ? { metadataUrl: idpConfig.metadataURL }\n : { rawMetadata: idpConfig.rawMetadata! }),\n ...(idpConfig.spCertBase64 && {\n spCertBase64: {\n vaultName: idpConfig.spCertBase64.VaultName,\n secretKey: idpConfig.spCertBase64.SecretKey,\n },\n }),\n ...(idpConfig.spKeyBase64 && {\n spKeyBase64: {\n vaultName: idpConfig.spKeyBase64.VaultName,\n secretKey: idpConfig.spKeyBase64.SecretKey,\n },\n }),\n },\n },\n },\n };\n case \"OIDC\":\n return {\n name: idpConfig.name,\n authType: AuthIDPConfig_AuthType.OIDC,\n config: {\n config: {\n case: \"oidc\",\n value: {\n clientIdKey: idpConfig.clientID,\n clientSecretKey: {\n vaultName: idpConfig.clientSecret.VaultName,\n secretKey: idpConfig.clientSecret.SecretKey,\n },\n providerUrl: idpConfig.providerURL,\n issuerUrl: idpConfig.issuerURL,\n usernameClaim: idpConfig.usernameClaim,\n },\n },\n },\n };\n case \"BuiltInIdP\":\n return {\n name: idpConfig.name,\n authType: AuthIDPConfig_AuthType.OIDC,\n // config is set at apply time\n config: {},\n };\n default:\n throw new Error(`Unexpected idp kind: ${idpConfig satisfies never}`);\n }\n}\n\nasync function protoBuiltinIdPConfig(\n client: OperatorClient,\n workspaceId: string,\n builtinIdPConfig: BuiltinIdP,\n): Promise<MessageInitShape<typeof AuthIDPConfig_ConfigSchema>> {\n let idpService;\n try {\n idpService = await client.getIdPService({\n workspaceId,\n namespaceName: builtinIdPConfig.namespace,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n throw new Error(\n `Built-in IdP \"${builtinIdPConfig.namespace}\" not found. Please ensure that idp is configured correctly.`,\n );\n }\n throw error;\n }\n const idpClient = await client.getIdPClient({\n workspaceId,\n namespaceName: builtinIdPConfig.namespace,\n name: builtinIdPConfig.clientName,\n });\n const vaultName = idpClientVaultName(\n builtinIdPConfig.namespace,\n builtinIdPConfig.clientName,\n );\n const secretKey = idpClientSecretName(\n builtinIdPConfig.namespace,\n builtinIdPConfig.clientName,\n );\n return {\n config: {\n case: \"oidc\",\n value: {\n clientIdKey: idpClient.client?.clientId,\n clientSecretKey: {\n vaultName,\n secretKey,\n },\n providerUrl: idpService.idpService?.providerUrl,\n usernameClaim: \"name\",\n },\n },\n };\n}\n\ntype CreateUserProfileConfig = {\n name: string;\n request: MessageInitShape<typeof CreateUserProfileConfigRequestSchema>;\n};\n\ntype UpdateUserProfileConfig = {\n name: string;\n request: MessageInitShape<typeof UpdateUserProfileConfigRequestSchema>;\n};\n\ntype DeleteUserProfileConfig = {\n name: string;\n request: MessageInitShape<typeof DeleteUserProfileConfigRequestSchema>;\n};\n\nasync function planUserProfileConfigs(\n client: OperatorClient,\n workspaceId: string,\n auths: ReadonlyArray<Readonly<AuthService>>,\n deletedServices: ReadonlyArray<string>,\n) {\n const changeSet: ChangeSet<\n CreateUserProfileConfig,\n UpdateUserProfileConfig,\n DeleteUserProfileConfig\n > = new ChangeSet(\"Auth userProfileConfigs\");\n\n for (const auth of auths) {\n const name = `${auth.config.name}-user-profile-config`;\n try {\n await client.getUserProfileConfig({\n workspaceId,\n namespaceName: auth.config.name,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n if (auth.userProfile) {\n changeSet.creates.push({\n name,\n request: {\n workspaceId,\n namespaceName: auth.config.name,\n userProfileProviderConfig: protoUserProfileConfig(\n auth.userProfile,\n ),\n },\n });\n }\n continue;\n }\n throw error;\n }\n if (auth.userProfile) {\n changeSet.updates.push({\n name,\n request: {\n workspaceId,\n namespaceName: auth.config.name,\n userProfileProviderConfig: protoUserProfileConfig(auth.userProfile),\n },\n });\n } else {\n changeSet.deletes.push({\n name,\n request: {\n workspaceId,\n namespaceName: auth.config.name,\n },\n });\n }\n }\n\n for (const namespaceName of deletedServices) {\n try {\n await client.getUserProfileConfig({\n workspaceId,\n namespaceName,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n continue;\n }\n throw error;\n }\n changeSet.deletes.push({\n name: `${namespaceName}-user-profile-config`,\n request: {\n workspaceId,\n namespaceName,\n },\n });\n }\n return changeSet;\n}\n\nfunction protoUserProfileConfig(\n userProfile: NonNullable<AuthService[\"userProfile\"]>,\n): MessageInitShape<typeof UserProfileProviderConfigSchema> {\n // Convert attributes from { key: true } to { key: \"key\" }\n const attributeMap = userProfile.attributes\n ? Object.fromEntries(\n Object.keys(userProfile.attributes).map((key) => [key, key]),\n )\n : undefined;\n\n return {\n provider: \"TAILORDB\",\n providerType: UserProfileProviderConfig_UserProfileProviderType.TAILORDB,\n config: {\n config: {\n case: \"tailordb\",\n value: {\n namespace: userProfile.namespace,\n type: userProfile.type.name,\n usernameField: userProfile.usernameField,\n tenantIdField: undefined,\n attributesFields: userProfile.attributeList,\n attributeMap,\n },\n },\n },\n };\n}\n\ntype CreateTenantConfig = {\n name: string;\n request: MessageInitShape<typeof CreateTenantConfigRequestSchema>;\n};\n\ntype UpdateTenantConfig = {\n name: string;\n request: MessageInitShape<typeof UpdateTenantConfigRequestSchema>;\n};\n\ntype DeleteTenantConfig = {\n name: string;\n request: MessageInitShape<typeof DeleteTenantConfigRequestSchema>;\n};\n\nasync function planTenantConfigs(\n client: OperatorClient,\n workspaceId: string,\n auths: ReadonlyArray<Readonly<AuthService>>,\n deletedServices: ReadonlyArray<string>,\n) {\n const changeSet: ChangeSet<\n CreateTenantConfig,\n UpdateTenantConfig,\n DeleteTenantConfig\n > = new ChangeSet(\"Auth tenantConfigs\");\n\n for (const auth of auths) {\n const name = `${auth.config.name}-tenant-config`;\n try {\n await client.getTenantConfig({\n workspaceId,\n namespaceName: auth.config.name,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n if (auth.tenantProvider) {\n changeSet.creates.push({\n name,\n request: {\n workspaceId,\n namespaceName: auth.config.name,\n tenantProviderConfig: protoTenantConfig(auth.tenantProvider),\n },\n });\n }\n continue;\n }\n throw error;\n }\n if (auth.tenantProvider) {\n changeSet.updates.push({\n name,\n request: {\n workspaceId,\n namespaceName: auth.config.name,\n tenantProviderConfig: protoTenantConfig(auth.tenantProvider),\n },\n });\n } else {\n changeSet.deletes.push({\n name,\n request: {\n workspaceId,\n namespaceName: auth.config.name,\n },\n });\n }\n }\n\n for (const namespaceName of deletedServices) {\n try {\n await client.getTenantConfig({\n workspaceId,\n namespaceName,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n continue;\n }\n throw error;\n }\n changeSet.deletes.push({\n name: `${namespaceName}-tenant-config`,\n request: {\n workspaceId,\n namespaceName,\n },\n });\n }\n return changeSet;\n}\n\nfunction protoTenantConfig(\n tenantConfig: NonNullable<AuthService[\"tenantProvider\"]>,\n): MessageInitShape<typeof TenantProviderConfigSchema> {\n return {\n providerType: TenantProviderConfig_TenantProviderType.TAILORDB,\n config: {\n config: {\n case: \"tailordb\",\n value: {\n namespace: tenantConfig.namespace,\n type: tenantConfig.type,\n signatureField: tenantConfig.signatureField,\n },\n },\n },\n };\n}\n\ntype CreateMachineUser = {\n name: string;\n request: MessageInitShape<typeof CreateAuthMachineUserRequestSchema>;\n};\n\ntype UpdateMachineUser = {\n name: string;\n request: MessageInitShape<typeof UpdateAuthMachineUserRequestSchema>;\n};\n\ntype DeleteMachineUser = {\n name: string;\n request: MessageInitShape<typeof DeleteAuthMachineUserRequestSchema>;\n};\n\nasync function planMachineUsers(\n client: OperatorClient,\n workspaceId: string,\n auths: ReadonlyArray<Readonly<AuthService>>,\n deletedServices: ReadonlyArray<string>,\n) {\n const changeSet: ChangeSet<\n CreateMachineUser,\n UpdateMachineUser,\n DeleteMachineUser\n > = new ChangeSet(\"Auth machineUsers\");\n\n const fetchMachineUsers = (authNamespace: string) => {\n return fetchAll(async (pageToken) => {\n try {\n const { machineUsers, nextPageToken } =\n await client.listAuthMachineUsers({\n workspaceId,\n authNamespace,\n pageToken,\n });\n return [machineUsers, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n };\n\n for (const { config } of auths) {\n const existingMachineUsers = await fetchMachineUsers(config.name);\n const existingNameSet = new Set<string>();\n existingMachineUsers.forEach((machineUser) => {\n existingNameSet.add(machineUser.name);\n });\n for (const machineUsername of Object.keys(config.machineUsers ?? {})) {\n const machineUser = config.machineUsers?.[machineUsername];\n if (!machineUser) {\n continue;\n }\n if (existingNameSet.has(machineUsername)) {\n changeSet.updates.push({\n name: machineUsername,\n request: {\n workspaceId,\n authNamespace: config.name,\n name: machineUsername,\n attributes: machineUser.attributeList,\n attributeMap: machineUser.attributes\n ? protoMachineUserAttributeMap(machineUser.attributes)\n : undefined,\n },\n });\n existingNameSet.delete(machineUsername);\n } else {\n changeSet.creates.push({\n name: machineUsername,\n request: {\n workspaceId,\n authNamespace: config.name,\n name: machineUsername,\n attributes: machineUser.attributeList,\n attributeMap: machineUser.attributes\n ? protoMachineUserAttributeMap(machineUser.attributes)\n : undefined,\n },\n });\n }\n }\n existingNameSet.forEach((name) => {\n changeSet.deletes.push({\n name,\n request: {\n workspaceId,\n authNamespace: config.name,\n name,\n },\n });\n });\n }\n\n for (const namespaceName of deletedServices) {\n const existingMachineUsers = await fetchMachineUsers(namespaceName);\n existingMachineUsers.forEach((machineUser) => {\n changeSet.deletes.push({\n name: machineUser.name,\n request: {\n workspaceId,\n authNamespace: namespaceName,\n name: machineUser.name,\n },\n });\n });\n }\n return changeSet;\n}\n\nfunction protoMachineUserAttributeMap(\n attributeMap: Record<string, AuthAttributeValue>,\n): Record<string, MessageInitShape<typeof ValueSchema>> {\n const ret: Record<string, MessageInitShape<typeof ValueSchema>> = {};\n for (const [key, value] of Object.entries(attributeMap)) {\n ret[key] = fromJson(ValueSchema, value ?? null);\n }\n return ret;\n}\n\ntype CreateOAuth2Clients = {\n name: string;\n request: MessageInitShape<typeof CreateAuthOAuth2ClientRequestSchema>;\n};\n\ntype UpdateOAuth2Client = {\n name: string;\n request: MessageInitShape<typeof UpdateAuthOAuth2ClientRequestSchema>;\n};\n\ntype DeleteOAuth2Client = {\n name: string;\n request: MessageInitShape<typeof DeleteAuthOAuth2ClientRequestSchema>;\n};\n\nasync function planOAuth2Clients(\n client: OperatorClient,\n workspaceId: string,\n auths: ReadonlyArray<Readonly<AuthService>>,\n deletedServices: ReadonlyArray<string>,\n) {\n const changeSet: ChangeSet<\n CreateOAuth2Clients,\n UpdateOAuth2Client,\n DeleteOAuth2Client\n > = new ChangeSet(\"Auth oauth2Clients\");\n\n const fetchOAuth2Clients = (namespaceName: string) => {\n return fetchAll(async (pageToken) => {\n try {\n const { oauth2Clients, nextPageToken } =\n await client.listAuthOAuth2Clients({\n workspaceId,\n namespaceName,\n pageToken,\n });\n return [oauth2Clients, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n };\n\n for (const { config } of auths) {\n const existingOAuth2Clients = await fetchOAuth2Clients(config.name);\n const existingNameSet = new Set<string>();\n existingOAuth2Clients.forEach((oauth2Client) => {\n existingNameSet.add(oauth2Client.name);\n });\n for (const oauth2ClientName of Object.keys(config.oauth2Clients ?? {})) {\n const oauth2Client = config.oauth2Clients?.[oauth2ClientName];\n if (!oauth2Client) {\n continue;\n }\n if (existingNameSet.has(oauth2ClientName)) {\n changeSet.updates.push({\n name: oauth2ClientName,\n request: {\n workspaceId,\n namespaceName: config.name,\n oauth2Client: protoOAuth2Client(oauth2ClientName, oauth2Client),\n },\n });\n existingNameSet.delete(oauth2ClientName);\n } else {\n changeSet.creates.push({\n name: oauth2ClientName,\n request: {\n workspaceId,\n namespaceName: config.name,\n oauth2Client: protoOAuth2Client(oauth2ClientName, oauth2Client),\n },\n });\n }\n }\n existingNameSet.forEach((name) => {\n changeSet.deletes.push({\n name,\n request: {\n workspaceId,\n namespaceName: config.name,\n name,\n },\n });\n });\n }\n\n for (const namespaceName of deletedServices) {\n const existingOAuth2Clients = await fetchOAuth2Clients(namespaceName);\n existingOAuth2Clients.forEach((oauth2Client) => {\n changeSet.deletes.push({\n name: oauth2Client.name,\n request: {\n workspaceId,\n namespaceName,\n name: oauth2Client.name,\n },\n });\n });\n }\n return changeSet;\n}\n\nfunction protoOAuth2Client(\n oauth2ClientName: string,\n oauth2Client: OAuth2Client,\n): MessageInitShape<typeof AuthOAuth2ClientSchema> {\n return {\n name: oauth2ClientName,\n description: oauth2Client.description,\n grantTypes: oauth2Client.grantTypes?.map((grantType) => {\n switch (grantType) {\n case \"authorization_code\":\n return AuthOAuth2Client_GrantType.AUTHORIZATION_CODE;\n case \"refresh_token\":\n return AuthOAuth2Client_GrantType.REFRESH_TOKEN;\n default:\n throw new Error(\n `Unknown OAuth2 client grant type: ${grantType satisfies never}`,\n );\n }\n }),\n redirectUris: oauth2Client.redirectURIs,\n clientType: (\n {\n confidential: AuthOAuth2Client_ClientType.CONFIDENTIAL,\n public: AuthOAuth2Client_ClientType.PUBLIC,\n browser: AuthOAuth2Client_ClientType.BROWSER,\n } satisfies Record<\n NonNullable<OAuth2Client[\"clientType\"]>,\n AuthOAuth2Client_ClientType\n >\n )[oauth2Client.clientType ?? \"confidential\"],\n };\n}\n\ntype CreateSCIMConfig = {\n name: string;\n request: MessageInitShape<typeof CreateAuthSCIMConfigRequestSchema>;\n};\n\ntype UpdateSCIMConfig = {\n name: string;\n request: MessageInitShape<typeof UpdateAuthSCIMConfigRequestSchema>;\n};\n\ntype DeleteSCIMConfig = {\n name: string;\n request: MessageInitShape<typeof DeleteAuthSCIMConfigRequestSchema>;\n};\n\nasync function planSCIMConfigs(\n client: OperatorClient,\n workspaceId: string,\n auths: ReadonlyArray<Readonly<AuthService>>,\n deletedServices: ReadonlyArray<string>,\n) {\n const changeSet: ChangeSet<\n CreateSCIMConfig,\n UpdateSCIMConfig,\n DeleteSCIMConfig\n > = new ChangeSet(\"Auth scimConfigs\");\n\n for (const { config } of auths) {\n const name = `${config.name}-scim-config`;\n try {\n await client.getAuthSCIMConfig({\n workspaceId,\n namespaceName: config.name,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n if (config.scim) {\n changeSet.creates.push({\n name,\n request: {\n workspaceId,\n namespaceName: config.name,\n scimConfig: protoSCIMConfig(config.scim),\n },\n });\n }\n continue;\n }\n throw error;\n }\n if (config.scim) {\n changeSet.updates.push({\n name,\n request: {\n workspaceId,\n namespaceName: config.name,\n scimConfig: protoSCIMConfig(config.scim),\n },\n });\n } else {\n changeSet.deletes.push({\n name,\n request: {\n workspaceId,\n namespaceName: config.name,\n },\n });\n }\n }\n\n for (const namespaceName of deletedServices) {\n try {\n await client.getAuthSCIMConfig({\n workspaceId,\n namespaceName,\n });\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n continue;\n }\n throw error;\n }\n changeSet.deletes.push({\n name: `${namespaceName}-scim-config`,\n request: {\n workspaceId,\n namespaceName,\n },\n });\n }\n return changeSet;\n}\n\nfunction protoSCIMConfig(\n scimConfig: SCIMConfig,\n): MessageInitShape<typeof AuthSCIMConfigSchema> {\n let authorizationType;\n switch (scimConfig.authorization.type) {\n case \"bearer\":\n authorizationType = AuthSCIMConfig_AuthorizationType.BEARER;\n break;\n case \"oauth2\":\n authorizationType = AuthSCIMConfig_AuthorizationType.OAUTH2;\n break;\n default:\n throw new Error(\n `Unknown SCIM authorization type: ${scimConfig.authorization.type satisfies never}`,\n );\n }\n\n return {\n machineUserName: scimConfig.machineUserName,\n authorizationType,\n authorizationConfig: {\n case: \"bearerSecret\",\n value: {\n vaultName: scimConfig.authorization.bearerSecret?.VaultName,\n secretKey: scimConfig.authorization.bearerSecret?.SecretKey,\n },\n },\n };\n}\n\ntype CreateSCIMResource = {\n name: string;\n request: MessageInitShape<typeof CreateAuthSCIMResourceRequestSchema>;\n};\n\ntype UpdateSCIMResource = {\n name: string;\n request: MessageInitShape<typeof UpdateAuthSCIMResourceRequestSchema>;\n};\n\ntype DeleteSCIMResource = {\n name: string;\n request: MessageInitShape<typeof DeleteAuthSCIMResourceRequestSchema>;\n};\n\nasync function planSCIMResources(\n client: OperatorClient,\n workspaceId: string,\n auths: ReadonlyArray<Readonly<AuthService>>,\n deletedServices: ReadonlyArray<string>,\n) {\n const changeSet: ChangeSet<\n CreateSCIMResource,\n UpdateSCIMResource,\n DeleteSCIMResource\n > = new ChangeSet(\"Auth scimResources\");\n\n const fetchSCIMResources = async (namespaceName: string) => {\n try {\n const { scimResources } = await client.getAuthSCIMResources({\n workspaceId,\n namespaceName,\n });\n return scimResources;\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [];\n }\n throw error;\n }\n };\n\n for (const { config } of auths) {\n const existingSCIMResources = await fetchSCIMResources(config.name);\n const existingNameSet = new Set<string>();\n existingSCIMResources.forEach((scimResource) => {\n existingNameSet.add(scimResource.name);\n });\n for (const scimResource of config.scim?.resources ?? []) {\n if (existingNameSet.has(scimResource.name)) {\n changeSet.updates.push({\n name: scimResource.name,\n request: {\n workspaceId,\n namespaceName: config.name,\n scimResource: protoSCIMResource(scimResource),\n },\n });\n existingNameSet.delete(scimResource.name);\n } else {\n changeSet.creates.push({\n name: scimResource.name,\n request: {\n workspaceId,\n namespaceName: config.name,\n scimResource: protoSCIMResource(scimResource),\n },\n });\n }\n }\n existingNameSet.forEach((name) => {\n changeSet.deletes.push({\n name,\n request: {\n workspaceId,\n namespaceName: config.name,\n name,\n },\n });\n });\n }\n\n for (const namespaceName of deletedServices) {\n const existingSCIMResources = await fetchSCIMResources(namespaceName);\n existingSCIMResources.forEach((scimResource) => {\n changeSet.deletes.push({\n name: scimResource.name,\n request: {\n workspaceId,\n namespaceName,\n name: scimResource.name,\n },\n });\n });\n }\n return changeSet;\n}\n\nfunction protoSCIMResource(\n scimResource: SCIMResource,\n): MessageInitShape<typeof AuthSCIMResourceSchema> {\n return {\n name: scimResource.name,\n tailorDbNamespace: scimResource.tailorDBNamespace,\n tailorDbType: scimResource.tailorDBType,\n coreSchema: {\n name: scimResource.coreSchema.name,\n attributes: scimResource.coreSchema.attributes.map((attr) =>\n protoSCIMAttribute(attr),\n ),\n },\n attributeMapping: scimResource.attributeMapping.map((attr) => ({\n tailorDbField: attr.tailorDBField,\n scimPath: attr.scimPath,\n })),\n };\n}\n\nfunction protoSCIMAttribute(\n attr: SCIMAttribute,\n): MessageInitShape<typeof AuthSCIMAttributeSchema> {\n let typ;\n switch (attr.type) {\n case \"string\":\n typ = AuthSCIMAttribute_Type.STRING;\n break;\n case \"number\":\n typ = AuthSCIMAttribute_Type.NUMBER;\n break;\n case \"boolean\":\n typ = AuthSCIMAttribute_Type.BOOLEAN;\n break;\n case \"datetime\":\n typ = AuthSCIMAttribute_Type.DATETIME;\n break;\n case \"complex\":\n typ = AuthSCIMAttribute_Type.COMPLEX;\n break;\n default:\n throw new Error(\n `Unknown SCIM attribute type: ${attr.type satisfies never}`,\n );\n }\n let mutability;\n if (attr.mutability) {\n switch (attr.mutability) {\n case \"readOnly\":\n mutability = AuthSCIMAttribute_Mutability.READ_ONLY;\n break;\n case \"readWrite\":\n mutability = AuthSCIMAttribute_Mutability.READ_WRITE;\n break;\n case \"writeOnly\":\n mutability = AuthSCIMAttribute_Mutability.WRITE_ONLY;\n break;\n default:\n throw new Error(\n `Unknown SCIM attribute mutability: ${attr.mutability satisfies never}`,\n );\n }\n }\n let uniqueness;\n if (attr.uniqueness) {\n switch (attr.uniqueness) {\n case \"none\":\n uniqueness = AuthSCIMAttribute_Uniqueness.NONE;\n break;\n case \"server\":\n uniqueness = AuthSCIMAttribute_Uniqueness.SERVER;\n break;\n case \"global\":\n uniqueness = AuthSCIMAttribute_Uniqueness.GLOBAL;\n break;\n default:\n throw new Error(\n `Unknown SCIM attribute uniqueness: ${attr.uniqueness satisfies never}`,\n );\n }\n }\n return {\n type: typ,\n name: attr.name,\n description: attr.description,\n mutability,\n required: attr.required,\n multiValued: attr.multiValued,\n uniqueness,\n canonicalValues: attr.canonicalValues ?? undefined,\n subAttributes: attr.subAttributes?.map((attr) => protoSCIMAttribute(attr)),\n };\n}\n","import chalk from \"chalk\";\nimport { consola } from \"consola\";\nimport ml from \"multiline-ts\";\n\nexport interface OwnerConflict {\n resourceType: string;\n resourceName: string;\n currentOwner: string;\n}\n\nexport interface UnmanagedResource {\n resourceType: string;\n resourceName: string;\n}\n\nexport async function confirmOwnerConflict(\n conflicts: OwnerConflict[],\n appName: string,\n yes: boolean,\n): Promise<void> {\n if (conflicts.length === 0) return;\n\n const currentOwners = [...new Set(conflicts.map((c) => c.currentOwner))];\n\n consola.warn(\"Application name mismatch detected:\");\n\n console.log(\n ` ${chalk.yellow(\"Current application(s)\")}: ${currentOwners.map((o) => chalk.bold(`\"${o}\"`)).join(\", \")}`,\n );\n console.log(\n ` ${chalk.green(\"New application\")}: ${chalk.bold(`\"${appName}\"`)}`,\n );\n console.log(\"\");\n console.log(` ${chalk.cyan(\"Resources\")}:`);\n for (const c of conflicts) {\n console.log(\n ` • ${chalk.bold(c.resourceType)} ${chalk.cyan(`\"${c.resourceName}\"`)}`,\n );\n }\n\n if (yes) {\n consola.success(\"Updating resources (--yes flag specified)...\");\n return;\n }\n\n const promptMessage =\n currentOwners.length === 1\n ? `Update these resources to be managed by \"${appName}\"?\\n${chalk.gray(\"(Common when renaming your application)\")}`\n : `Update these resources to be managed by \"${appName}\"?`;\n const confirmed = await consola.prompt(promptMessage, {\n type: \"confirm\",\n initial: false,\n });\n if (!confirmed) {\n throw new Error(ml`\n Apply cancelled. Resources remain managed by their current applications.\n To override, run again and confirm, or use --yes flag.\n `);\n }\n}\n\nexport async function confirmUnmanagedResources(\n resources: UnmanagedResource[],\n appName: string,\n yes: boolean,\n): Promise<void> {\n if (resources.length === 0) return;\n\n consola.warn(\"Unmanaged resources detected:\");\n\n console.log(` ${chalk.cyan(\"Resources\")}:`);\n for (const r of resources) {\n console.log(\n ` • ${chalk.bold(r.resourceType)} ${chalk.cyan(`\"${r.resourceName}\"`)}`,\n );\n }\n console.log(\"\");\n console.log(\" These resources are not managed by any application.\");\n\n if (yes) {\n consola.success(`Adding to \"${appName}\" (--yes flag specified)...`);\n return;\n }\n\n const confirmed = await consola.prompt(\n `Add these resources to \"${appName}\"?`,\n { type: \"confirm\", initial: false },\n );\n if (!confirmed) {\n throw new Error(ml`\n Apply cancelled. Resources remain unmanaged.\n To override, run again and confirm, or use --yes flag.\n `);\n }\n}\n\nexport interface ImportantResourceDeletion {\n resourceType: string;\n resourceName: string;\n}\n\nexport async function confirmImportantResourceDeletion(\n resources: ImportantResourceDeletion[],\n yes: boolean,\n): Promise<void> {\n if (resources.length === 0) return;\n\n consola.warn(\"The following resources will be deleted:\");\n\n console.log(` ${chalk.cyan(\"Resources\")}:`);\n for (const r of resources) {\n console.log(\n ` • ${chalk.bold(r.resourceType)} ${chalk.red(`\"${r.resourceName}\"`)}`,\n );\n }\n console.log(\"\");\n console.log(\n chalk.yellow(\n \" Deleting these resources will permanently remove all associated data.\",\n ),\n );\n\n if (yes) {\n consola.success(\"Deleting resources (--yes flag specified)...\");\n return;\n }\n\n const confirmed = await consola.prompt(\n \"Are you sure you want to delete these resources?\",\n { type: \"confirm\", initial: false },\n );\n if (!confirmed) {\n throw new Error(ml`\n Apply cancelled. Resources will not be deleted.\n To override, run again and confirm, or use --yes flag.\n `);\n }\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { type MessageInitShape } from \"@bufbuild/protobuf\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport {\n type CreateExecutorExecutorRequestSchema,\n type DeleteExecutorExecutorRequestSchema,\n type UpdateExecutorExecutorRequestSchema,\n} from \"@tailor-proto/tailor/v1/executor_pb\";\nimport {\n type ExecutorExecutorSchema,\n type ExecutorTargetConfigSchema,\n ExecutorTargetType,\n type ExecutorTargetWebhookHeaderSchema,\n type ExecutorTriggerConfigSchema,\n ExecutorTriggerType,\n} from \"@tailor-proto/tailor/v1/executor_resource_pb\";\nimport { getDistDir } from \"@/configure/config\";\nimport { fetchAll, type OperatorClient } from \"../../client\";\nimport { buildMetaRequest, sdkNameLabelKey, type WithLabel } from \"./label\";\nimport { ChangeSet } from \".\";\nimport type { ApplyPhase, PlanContext } from \"..\";\nimport type { OwnerConflict, UnmanagedResource } from \"./confirm\";\nimport type { Executor, Trigger } from \"@/parser/service/executor\";\nimport type { SetMetadataRequestSchema } from \"@tailor-proto/tailor/v1/metadata_pb\";\n\nexport async function applyExecutor(\n client: OperatorClient,\n result: Awaited<ReturnType<typeof planExecutor>>,\n phase: ApplyPhase = \"create-update\",\n) {\n const { changeSet } = result;\n if (phase === \"create-update\") {\n // Executors\n await Promise.all([\n ...changeSet.creates.map(async (create) => {\n await client.createExecutorExecutor(create.request);\n await client.setMetadata(create.metaRequest);\n }),\n ...changeSet.updates.map(async (update) => {\n await client.updateExecutorExecutor(update.request);\n await client.setMetadata(update.metaRequest);\n }),\n ]);\n } else if (phase === \"delete\") {\n // Delete in reverse order of dependencies\n // Executors\n await Promise.all(\n changeSet.deletes.map((del) =>\n client.deleteExecutorExecutor(del.request),\n ),\n );\n }\n}\n\ntype CreateExecutor = {\n name: string;\n request: MessageInitShape<typeof CreateExecutorExecutorRequestSchema>;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype UpdateExecutor = {\n name: string;\n request: MessageInitShape<typeof UpdateExecutorExecutorRequestSchema>;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype DeleteExecutor = {\n name: string;\n request: MessageInitShape<typeof DeleteExecutorExecutorRequestSchema>;\n};\n\nfunction trn(workspaceId: string, name: string) {\n return `trn:v1:workspace:${workspaceId}:executor:${name}`;\n}\n\nexport async function planExecutor({\n client,\n workspaceId,\n application,\n forRemoval,\n}: PlanContext) {\n const changeSet: ChangeSet<CreateExecutor, UpdateExecutor, DeleteExecutor> =\n new ChangeSet(\"Executors\");\n const conflicts: OwnerConflict[] = [];\n const unmanaged: UnmanagedResource[] = [];\n const resourceOwners = new Set<string>();\n\n const withoutLabel = await fetchAll(async (pageToken) => {\n try {\n const { executors, nextPageToken } = await client.listExecutorExecutors({\n workspaceId,\n pageToken,\n });\n return [executors, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n const existingExecutors: WithLabel<(typeof withoutLabel)[number]> = {};\n await Promise.all(\n withoutLabel.map(async (resource) => {\n const { metadata } = await client.getMetadata({\n trn: trn(workspaceId, resource.name),\n });\n existingExecutors[resource.name] = {\n resource,\n label: metadata?.labels[sdkNameLabelKey],\n };\n }),\n );\n\n const executors = forRemoval\n ? {}\n : ((await application.executorService?.loadExecutors()) ?? {});\n for (const executor of Object.values(executors)) {\n const existing = existingExecutors[executor.name];\n const metaRequest = await buildMetaRequest(\n trn(workspaceId, executor.name),\n application.name,\n );\n if (existing) {\n if (!existing.label) {\n unmanaged.push({\n resourceType: \"Executor\",\n resourceName: executor.name,\n });\n } else if (existing.label !== application.name) {\n conflicts.push({\n resourceType: \"Executor\",\n resourceName: executor.name,\n currentOwner: existing.label,\n });\n }\n\n changeSet.updates.push({\n name: executor.name,\n request: {\n workspaceId,\n executor: protoExecutor(application.name, executor, application.env),\n },\n metaRequest,\n });\n delete existingExecutors[executor.name];\n } else {\n changeSet.creates.push({\n name: executor.name,\n request: {\n workspaceId,\n executor: protoExecutor(application.name, executor, application.env),\n },\n metaRequest,\n });\n }\n }\n Object.entries(existingExecutors).forEach(([name]) => {\n const label = existingExecutors[name]?.label;\n if (label && label !== application.name) {\n resourceOwners.add(label);\n }\n // Only delete executors managed by this application\n if (label === application.name) {\n changeSet.deletes.push({\n name,\n request: {\n workspaceId,\n name,\n },\n });\n }\n });\n\n changeSet.print();\n return { changeSet, conflicts, unmanaged, resourceOwners };\n}\n\nfunction protoExecutor(\n appName: string,\n executor: Executor,\n env: Record<string, string | number | boolean>,\n): MessageInitShape<typeof ExecutorExecutorSchema> {\n const trigger = executor.trigger;\n let triggerType: ExecutorTriggerType;\n let triggerConfig: MessageInitShape<typeof ExecutorTriggerConfigSchema>;\n const eventType: { [key in Trigger[\"kind\"]]?: string } = {\n recordCreated: \"tailordb.type_record.created\",\n recordUpdated: \"tailordb.type_record.updated\",\n recordDeleted: \"tailordb.type_record.deleted\",\n resolverExecuted: \"pipeline.resolver.executed\",\n };\n switch (trigger.kind) {\n case \"schedule\":\n triggerType = ExecutorTriggerType.SCHEDULE;\n triggerConfig = {\n config: {\n case: \"schedule\",\n value: {\n timezone: trigger.timezone,\n frequency: trigger.cron,\n },\n },\n };\n break;\n case \"recordCreated\":\n case \"recordUpdated\":\n case \"recordDeleted\":\n triggerType = ExecutorTriggerType.EVENT;\n triggerConfig = {\n config: {\n case: \"event\",\n value: {\n eventType: eventType[trigger.kind],\n condition: {\n expr: [\n /* js */ `args.typeName === \"${trigger.typeName}\"`,\n ...(trigger.condition\n ? [\n /* js */ `(${trigger.condition.toString()})({ ...args, appNamespace: args.namespaceName })`,\n ]\n : []),\n ].join(\" && \"),\n },\n },\n },\n };\n break;\n case \"resolverExecuted\":\n triggerType = ExecutorTriggerType.EVENT;\n triggerConfig = {\n config: {\n case: \"event\",\n value: {\n eventType: eventType[trigger.kind],\n condition: {\n expr: [\n /* js */ `args.resolverName === \"${trigger.resolverName}\"`,\n ...(trigger.condition\n ? [\n /* js */ `(${trigger.condition.toString()})({ ...args, appNamespace: args.namespaceName, result: args.succeeded?.result, error: args.failed?.error })`,\n ]\n : []),\n ].join(\" && \"),\n },\n },\n },\n };\n break;\n case \"incomingWebhook\":\n triggerType = ExecutorTriggerType.INCOMING_WEBHOOK;\n triggerConfig = {\n config: {\n case: \"incomingWebhook\",\n value: {},\n },\n };\n break;\n default:\n throw new Error(`Unknown trigger: ${trigger satisfies never}`);\n }\n\n const target = executor.operation;\n let targetType: ExecutorTargetType;\n let targetConfig: MessageInitShape<typeof ExecutorTargetConfigSchema>;\n switch (target.kind) {\n case \"webhook\": {\n targetType = ExecutorTargetType.WEBHOOK;\n targetConfig = {\n config: {\n case: \"webhook\",\n value: {\n url: {\n expr: `(${target.url.toString()})(args)`,\n },\n headers: target.headers\n ? Object.entries(target.headers).map(([key, v]) => {\n let value: MessageInitShape<\n typeof ExecutorTargetWebhookHeaderSchema\n >[\"value\"];\n if (typeof v === \"string\") {\n value = {\n case: \"rawValue\",\n value: v,\n };\n } else {\n value = {\n case: \"secretValue\",\n value: {\n vaultName: v.vault,\n secretKey: v.key,\n },\n };\n }\n return { key, value };\n })\n : undefined,\n body: target.body\n ? {\n expr: `(${target.body.toString()})(args)`,\n }\n : undefined,\n },\n },\n };\n break;\n }\n case \"graphql\":\n targetType = ExecutorTargetType.TAILOR_GRAPHQL;\n targetConfig = {\n config: {\n case: \"tailorGraphql\",\n value: {\n appName: target.appName ?? appName,\n query: target.query,\n variables: target.variables\n ? {\n expr: `(${target.variables.toString()})(args)`,\n }\n : undefined,\n invoker: target.invoker\n ? {\n namespace: target.invoker.authName,\n machineUserName: target.invoker.machineUser,\n }\n : undefined,\n },\n },\n };\n break;\n case \"function\":\n case \"jobFunction\": {\n if (target.kind === \"function\") {\n targetType = ExecutorTargetType.FUNCTION;\n } else {\n targetType = ExecutorTargetType.JOB_FUNCTION;\n }\n\n const scriptPath = path.join(\n getDistDir(),\n \"executors\",\n `${executor.name}.js`,\n );\n const script = fs.readFileSync(scriptPath, \"utf-8\");\n targetConfig = {\n config: {\n case: \"function\",\n value: {\n name: `${executor.name}__target`,\n script,\n variables: {\n expr: `({ ...args, appNamespace: args.namespaceName, env: ${JSON.stringify(env)} })`,\n },\n invoker: target.invoker\n ? {\n namespace: target.invoker.authName,\n machineUserName: target.invoker.machineUser,\n }\n : undefined,\n },\n },\n };\n break;\n }\n default:\n throw new Error(`Unknown target: ${target satisfies never}`);\n }\n\n return {\n name: executor.name,\n description: executor.description,\n disabled: executor.disabled,\n triggerType,\n triggerConfig,\n targetType,\n targetConfig,\n };\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { type MessageInitShape } from \"@bufbuild/protobuf\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport {\n type CreatePipelineResolverRequestSchema,\n type CreatePipelineServiceRequestSchema,\n type DeletePipelineResolverRequestSchema,\n type DeletePipelineServiceRequestSchema,\n type UpdatePipelineResolverRequestSchema,\n type UpdatePipelineServiceRequestSchema,\n} from \"@tailor-proto/tailor/v1/pipeline_pb\";\nimport {\n type PipelineResolver_FieldSchema,\n PipelineResolver_OperationType,\n type PipelineResolver_PipelineSchema,\n type PipelineResolver_TypeSchema,\n type PipelineResolverSchema,\n} from \"@tailor-proto/tailor/v1/pipeline_resource_pb\";\nimport * as inflection from \"inflection\";\nimport { type ResolverService } from \"@/cli/application/resolver/service\";\nimport { getDistDir } from \"@/configure/config\";\nimport { tailorUserMap } from \"@/configure/types\";\nimport { type Resolver, type TailorField } from \"@/parser/service/resolver\";\nimport { fetchAll, type OperatorClient } from \"../../client\";\nimport { buildMetaRequest, sdkNameLabelKey, type WithLabel } from \"./label\";\nimport { ChangeSet } from \".\";\nimport type { ApplyPhase, PlanContext } from \"..\";\nimport type { OwnerConflict, UnmanagedResource } from \"./confirm\";\nimport type { Executor } from \"@/parser/service/executor\";\nimport type { SetMetadataRequestSchema } from \"@tailor-proto/tailor/v1/metadata_pb\";\n\n// Scalar type mapping for field type conversion\nconst SCALAR_TYPE_MAP = {\n uuid: { kind: \"ScalarType\", name: \"ID\" },\n string: { kind: \"ScalarType\", name: \"String\" },\n integer: { kind: \"ScalarType\", name: \"Int\" },\n float: { kind: \"ScalarType\", name: \"Float\" },\n boolean: { kind: \"ScalarType\", name: \"Boolean\" },\n date: { kind: \"CustomScalarType\", name: \"Date\" },\n datetime: { kind: \"CustomScalarType\", name: \"DateTime\" },\n time: { kind: \"CustomScalarType\", name: \"Time\" },\n} as const satisfies Record<\n Exclude<TailorField[\"type\"], \"enum\" | \"nested\">,\n { kind: \"ScalarType\" | \"CustomScalarType\"; name: string }\n>;\n\nexport async function applyPipeline(\n client: OperatorClient,\n result: Awaited<ReturnType<typeof planPipeline>>,\n phase: ApplyPhase = \"create-update\",\n) {\n const { changeSet } = result;\n if (phase === \"create-update\") {\n // Services\n await Promise.all([\n ...changeSet.service.creates.map(async (create) => {\n await client.createPipelineService(create.request);\n await client.setMetadata(create.metaRequest);\n }),\n ...changeSet.service.updates.map(async (update) => {\n await client.updatePipelineService(update.request);\n await client.setMetadata(update.metaRequest);\n }),\n ]);\n\n // Resolvers\n await Promise.all([\n ...changeSet.resolver.creates.map((create) =>\n client.createPipelineResolver(create.request),\n ),\n ...changeSet.resolver.updates.map((update) =>\n client.updatePipelineResolver(update.request),\n ),\n ]);\n } else if (phase === \"delete\") {\n // Delete in reverse order of dependencies\n // Resolvers\n await Promise.all(\n changeSet.resolver.deletes.map((del) =>\n client.deletePipelineResolver(del.request),\n ),\n );\n\n // Services\n await Promise.all(\n changeSet.service.deletes.map((del) =>\n client.deletePipelineService(del.request),\n ),\n );\n }\n}\nexport async function planPipeline({\n client,\n workspaceId,\n application,\n forRemoval,\n}: PlanContext) {\n const pipelines: Readonly<ResolverService>[] = [];\n if (!forRemoval) {\n for (const pipeline of application.resolverServices) {\n await pipeline.loadResolvers();\n pipelines.push(pipeline);\n }\n }\n const executors = forRemoval\n ? []\n : Object.values((await application.executorService?.loadExecutors()) ?? {});\n\n const {\n changeSet: serviceChangeSet,\n conflicts,\n unmanaged,\n resourceOwners,\n } = await planServices(client, workspaceId, application.name, pipelines);\n const deletedServices = serviceChangeSet.deletes.map((del) => del.name);\n const resolverChangeSet = await planResolvers(\n client,\n workspaceId,\n pipelines,\n executors,\n deletedServices,\n application.env,\n );\n\n serviceChangeSet.print();\n resolverChangeSet.print();\n return {\n changeSet: {\n service: serviceChangeSet,\n resolver: resolverChangeSet,\n },\n conflicts,\n unmanaged,\n resourceOwners,\n };\n}\n\ntype CreateService = {\n name: string;\n request: MessageInitShape<typeof CreatePipelineServiceRequestSchema>;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype UpdateService = {\n name: string;\n request: MessageInitShape<typeof UpdatePipelineServiceRequestSchema>;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype DeleteService = {\n name: string;\n request: MessageInitShape<typeof DeletePipelineServiceRequestSchema>;\n};\n\nfunction trn(workspaceId: string, name: string) {\n return `trn:v1:workspace:${workspaceId}:pipeline:${name}`;\n}\n\nasync function planServices(\n client: OperatorClient,\n workspaceId: string,\n appName: string,\n pipelines: ReadonlyArray<Readonly<ResolverService>>,\n) {\n const changeSet: ChangeSet<CreateService, UpdateService, DeleteService> =\n new ChangeSet(\"Pipeline services\");\n const conflicts: OwnerConflict[] = [];\n const unmanaged: UnmanagedResource[] = [];\n const resourceOwners = new Set<string>();\n\n const withoutLabel = await fetchAll(async (pageToken) => {\n try {\n const { pipelineServices, nextPageToken } =\n await client.listPipelineServices({\n workspaceId,\n pageToken,\n });\n return [pipelineServices, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n const existingServices: WithLabel<(typeof withoutLabel)[number]> = {};\n await Promise.all(\n withoutLabel.map(async (resource) => {\n if (!resource.namespace?.name) {\n return;\n }\n const { metadata } = await client.getMetadata({\n trn: trn(workspaceId, resource.namespace.name),\n });\n existingServices[resource.namespace.name] = {\n resource,\n label: metadata?.labels[sdkNameLabelKey],\n };\n }),\n );\n\n for (const pipeline of pipelines) {\n const existing = existingServices[pipeline.namespace];\n const metaRequest = await buildMetaRequest(\n trn(workspaceId, pipeline.namespace),\n appName,\n );\n if (existing) {\n if (!existing.label) {\n unmanaged.push({\n resourceType: \"Pipeline service\",\n resourceName: pipeline.namespace,\n });\n } else if (existing.label !== appName) {\n conflicts.push({\n resourceType: \"Pipeline service\",\n resourceName: pipeline.namespace,\n currentOwner: existing.label,\n });\n }\n\n changeSet.updates.push({\n name: pipeline.namespace,\n request: {\n workspaceId,\n namespaceName: pipeline.namespace,\n },\n metaRequest,\n });\n delete existingServices[pipeline.namespace];\n } else {\n changeSet.creates.push({\n name: pipeline.namespace,\n request: {\n workspaceId,\n namespaceName: pipeline.namespace,\n },\n metaRequest,\n });\n }\n }\n Object.entries(existingServices).forEach(([namespaceName]) => {\n const label = existingServices[namespaceName]?.label;\n if (label && label !== appName) {\n resourceOwners.add(label);\n }\n // Only delete services managed by this application\n if (label === appName) {\n changeSet.deletes.push({\n name: namespaceName,\n request: {\n workspaceId,\n namespaceName,\n },\n });\n }\n });\n\n return { changeSet, conflicts, unmanaged, resourceOwners };\n}\n\ntype CreateResolver = {\n name: string;\n request: MessageInitShape<typeof CreatePipelineResolverRequestSchema>;\n};\n\ntype UpdateResolver = {\n name: string;\n request: MessageInitShape<typeof UpdatePipelineResolverRequestSchema>;\n};\n\ntype DeleteResolver = {\n name: string;\n request: MessageInitShape<typeof DeletePipelineResolverRequestSchema>;\n};\n\nasync function planResolvers(\n client: OperatorClient,\n workspaceId: string,\n pipelines: ReadonlyArray<Readonly<ResolverService>>,\n executors: ReadonlyArray<Executor>,\n deletedServices: ReadonlyArray<string>,\n env: Record<string, string | number | boolean>,\n) {\n const changeSet: ChangeSet<CreateResolver, UpdateResolver, DeleteResolver> =\n new ChangeSet(\"Pipeline resolvers\");\n\n const fetchResolvers = (namespaceName: string) => {\n return fetchAll(async (pageToken) => {\n try {\n const { pipelineResolvers, nextPageToken } =\n await client.listPipelineResolvers({\n workspaceId,\n namespaceName,\n pageToken,\n });\n return [pipelineResolvers, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n };\n\n const executorUsedResolvers = new Set<string>();\n for (const executor of executors) {\n if (executor.trigger.kind === \"resolverExecuted\") {\n executorUsedResolvers.add(executor.trigger.resolverName);\n }\n }\n\n for (const pipeline of pipelines) {\n const existingResolvers = await fetchResolvers(pipeline.namespace);\n const existingNameSet = new Set<string>();\n existingResolvers.forEach((resolver) => {\n existingNameSet.add(resolver.name);\n });\n for (const resolver of Object.values(pipeline.getResolvers())) {\n if (existingNameSet.has(resolver.name)) {\n changeSet.updates.push({\n name: resolver.name,\n request: {\n workspaceId,\n namespaceName: pipeline.namespace,\n pipelineResolver: processResolver(\n resolver,\n executorUsedResolvers,\n env,\n ),\n },\n });\n existingNameSet.delete(resolver.name);\n } else {\n changeSet.creates.push({\n name: resolver.name,\n request: {\n workspaceId,\n namespaceName: pipeline.namespace,\n pipelineResolver: processResolver(\n resolver,\n executorUsedResolvers,\n env,\n ),\n },\n });\n }\n }\n existingNameSet.forEach((name) => {\n changeSet.deletes.push({\n name,\n request: {\n workspaceId,\n namespaceName: pipeline.namespace,\n resolverName: name,\n },\n });\n });\n }\n\n for (const namespaceName of deletedServices) {\n const existingResolvers = await fetchResolvers(namespaceName);\n existingResolvers.forEach((resolver) => {\n changeSet.deletes.push({\n name: resolver.name,\n request: {\n workspaceId,\n namespaceName,\n resolverName: resolver.name,\n },\n });\n });\n }\n return changeSet;\n}\n\nfunction processResolver(\n resolver: Resolver,\n executorUsedResolvers: ReadonlySet<string>,\n env: Record<string, string | number | boolean>,\n): MessageInitShape<typeof PipelineResolverSchema> {\n // Read body function code\n const functionPath = path.join(\n getDistDir(),\n \"resolvers\",\n `${resolver.name}.js`,\n );\n let functionCode = \"\";\n try {\n functionCode = fs.readFileSync(functionPath, \"utf-8\");\n } catch {\n console.warn(`Function file not found: ${functionPath}`);\n }\n\n const pipelines: MessageInitShape<typeof PipelineResolver_PipelineSchema>[] =\n [\n {\n name: \"body\",\n operationName: \"body\",\n description: `${resolver.name} function body`,\n operationType: PipelineResolver_OperationType.FUNCTION,\n operationSource: functionCode,\n operationHook: {\n expr: `({ ...context.pipeline, input: context.args, user: ${tailorUserMap}, env: ${JSON.stringify(env)} });`,\n },\n postScript: `args.body`,\n },\n ];\n\n const typeBaseName = inflection.camelize(resolver.name);\n\n // Build inputs\n const inputs: MessageInitShape<typeof PipelineResolver_FieldSchema>[] =\n resolver.input\n ? protoFields(resolver.input, `${typeBaseName}Input`, true)\n : [];\n\n // Build response\n const response: MessageInitShape<typeof PipelineResolver_FieldSchema> =\n protoFields({ \"\": resolver.output }, `${typeBaseName}Output`, false)[0];\n\n // Build description (combine resolver description and output description)\n const resolverDescription =\n resolver.description || `${resolver.name} resolver`;\n const outputDescription = resolver.output.metadata.description;\n const combinedDescription = outputDescription\n ? `${resolverDescription}\\n\\nReturns:\\n${outputDescription}`\n : resolverDescription;\n\n return {\n authorization: \"true==true\",\n description: combinedDescription,\n inputs,\n name: resolver.name,\n operationType: resolver.operation,\n response,\n pipelines,\n publishExecutionEvents: executorUsedResolvers.has(resolver.name),\n };\n}\n\nfunction protoFields(\n fields: Record<string, TailorField>,\n baseName: string,\n isInput: boolean,\n): MessageInitShape<typeof PipelineResolver_FieldSchema>[] {\n if (!fields) {\n return [];\n }\n\n return Object.entries(fields).map(([fieldName, field]) => {\n let type: MessageInitShape<typeof PipelineResolver_TypeSchema>;\n const hasCreateHook = isInput && field.metadata.hooks?.create !== undefined;\n const required = hasCreateHook ? false : (field.metadata.required ?? true);\n\n if (field.type === \"nested\") {\n const typeName =\n field.metadata.typeName ??\n `${baseName}${inflection.camelize(fieldName)}`;\n type = {\n kind: \"UserDefined\",\n name: typeName,\n description: field.metadata.description ?? \"\",\n required,\n fields: protoFields(field.fields, typeName, isInput),\n };\n } else if (field.type === \"enum\") {\n const typeName =\n field.metadata.typeName ??\n `${baseName}${inflection.camelize(fieldName)}`;\n type = {\n kind: \"EnumType\",\n name: typeName,\n required,\n allowedValues: field.metadata.allowedValues,\n };\n } else {\n type = { ...SCALAR_TYPE_MAP[field.type], required };\n }\n\n return {\n name: fieldName,\n description: field.metadata.description,\n array: field.metadata.array ?? false,\n required,\n type,\n };\n });\n}\n","import { type MessageInitShape } from \"@bufbuild/protobuf\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport {\n type CreateStaticWebsiteRequestSchema,\n type DeleteStaticWebsiteRequestSchema,\n type UpdateStaticWebsiteRequestSchema,\n} from \"@tailor-proto/tailor/v1/staticwebsite_pb\";\nimport { fetchAll, type OperatorClient } from \"../../client\";\nimport { buildMetaRequest, sdkNameLabelKey, type WithLabel } from \"./label\";\nimport { ChangeSet } from \".\";\nimport type { ApplyPhase, PlanContext } from \"..\";\nimport type { OwnerConflict, UnmanagedResource } from \"./confirm\";\nimport type { SetMetadataRequestSchema } from \"@tailor-proto/tailor/v1/metadata_pb\";\n\nexport async function applyStaticWebsite(\n client: OperatorClient,\n result: Awaited<ReturnType<typeof planStaticWebsite>>,\n phase: ApplyPhase = \"create-update\",\n) {\n const { changeSet } = result;\n if (phase === \"create-update\") {\n // StaticWebsites\n await Promise.all([\n ...changeSet.creates.map(async (create) => {\n await client.createStaticWebsite(create.request);\n await client.setMetadata(create.metaRequest);\n }),\n ...changeSet.updates.map(async (update) => {\n await client.updateStaticWebsite(update.request);\n await client.setMetadata(update.metaRequest);\n }),\n ]);\n } else if (phase === \"delete\") {\n // Delete in reverse order of dependencies\n // StaticWebsites\n await Promise.all(\n changeSet.deletes.map((del) => client.deleteStaticWebsite(del.request)),\n );\n }\n}\n\ntype CreateStaticWebsite = {\n name: string;\n request: MessageInitShape<typeof CreateStaticWebsiteRequestSchema>;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype UpdateStaticWebsite = {\n name: string;\n request: MessageInitShape<typeof UpdateStaticWebsiteRequestSchema>;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype DeleteStaticWebsite = {\n name: string;\n request: MessageInitShape<typeof DeleteStaticWebsiteRequestSchema>;\n};\n\nfunction trn(workspaceId: string, name: string) {\n return `trn:v1:workspace:${workspaceId}:staticwebsite:${name}`;\n}\n\nexport async function planStaticWebsite({\n client,\n workspaceId,\n application,\n forRemoval,\n}: PlanContext) {\n const changeSet: ChangeSet<\n CreateStaticWebsite,\n UpdateStaticWebsite,\n DeleteStaticWebsite\n > = new ChangeSet(\"StaticWebsites\");\n const conflicts: OwnerConflict[] = [];\n const unmanaged: UnmanagedResource[] = [];\n const resourceOwners = new Set<string>();\n\n // Fetch existing static websites\n const withoutLabel = await fetchAll(async (pageToken) => {\n try {\n const { staticwebsites, nextPageToken } = await client.listStaticWebsites(\n {\n workspaceId,\n pageToken,\n },\n );\n return [staticwebsites, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n const existingWebsites: WithLabel<(typeof withoutLabel)[number]> = {};\n await Promise.all(\n withoutLabel.map(async (resource) => {\n const { metadata } = await client.getMetadata({\n trn: trn(workspaceId, resource.name),\n });\n existingWebsites[resource.name] = {\n resource,\n label: metadata?.labels[sdkNameLabelKey],\n };\n }),\n );\n\n const staticWebsiteServices = forRemoval\n ? []\n : application.staticWebsiteServices;\n for (const websiteService of staticWebsiteServices) {\n const config = websiteService;\n const name = websiteService.name;\n const existing = existingWebsites[name];\n const metaRequest = await buildMetaRequest(\n trn(workspaceId, name),\n application.name,\n );\n\n if (existing) {\n if (!existing.label) {\n unmanaged.push({\n resourceType: \"StaticWebsite\",\n resourceName: name,\n });\n } else if (existing.label !== application.name) {\n conflicts.push({\n resourceType: \"StaticWebsite\",\n resourceName: name,\n currentOwner: existing.label,\n });\n }\n\n changeSet.updates.push({\n name,\n request: {\n workspaceId,\n staticwebsite: {\n name,\n description: config.description || \"\",\n allowedIpAddresses: config.allowedIpAddresses || [],\n },\n },\n metaRequest,\n });\n delete existingWebsites[name];\n } else {\n changeSet.creates.push({\n name,\n request: {\n workspaceId,\n staticwebsite: {\n name,\n description: config.description || \"\",\n allowedIpAddresses: config.allowedIpAddresses || [],\n },\n },\n metaRequest,\n });\n }\n }\n Object.entries(existingWebsites).forEach(([name]) => {\n const label = existingWebsites[name]?.label;\n if (label && label !== application.name) {\n resourceOwners.add(label);\n }\n // Only delete websites managed by this application\n if (label === application.name) {\n changeSet.deletes.push({\n name,\n request: {\n workspaceId,\n name,\n },\n });\n }\n });\n\n changeSet.print();\n return { changeSet, conflicts, unmanaged, resourceOwners };\n}\n","import { fromJson, type MessageInitShape } from \"@bufbuild/protobuf\";\nimport { ValueSchema } from \"@bufbuild/protobuf/wkt\";\nimport { Code, ConnectError } from \"@connectrpc/connect\";\nimport {\n type CreateTailorDBGQLPermissionRequestSchema,\n type CreateTailorDBServiceRequestSchema,\n type CreateTailorDBTypeRequestSchema,\n type DeleteTailorDBGQLPermissionRequestSchema,\n type DeleteTailorDBServiceRequestSchema,\n type DeleteTailorDBTypeRequestSchema,\n type UpdateTailorDBGQLPermissionRequestSchema,\n type UpdateTailorDBTypeRequestSchema,\n} from \"@tailor-proto/tailor/v1/tailordb_pb\";\nimport {\n TailorDBGQLPermission_Action,\n type TailorDBGQLPermission_ConditionSchema,\n type TailorDBGQLPermission_OperandSchema,\n TailorDBGQLPermission_Operator,\n TailorDBGQLPermission_Permit,\n type TailorDBGQLPermission_PolicySchema,\n type TailorDBGQLPermissionSchema,\n type TailorDBType_FieldConfigSchema,\n type TailorDBType_FileConfigSchema,\n type TailorDBType_IndexSchema,\n type TailorDBType_Permission_ConditionSchema,\n type TailorDBType_Permission_OperandSchema,\n TailorDBType_Permission_Operator,\n TailorDBType_Permission_Permit,\n type TailorDBType_Permission_PolicySchema,\n type TailorDBType_PermissionSchema,\n TailorDBType_PermitAction,\n type TailorDBType_RelationshipConfigSchema,\n type TailorDBTypeSchema,\n} from \"@tailor-proto/tailor/v1/tailordb_resource_pb\";\nimport * as inflection from \"inflection\";\nimport { type TailorDBService } from \"@/cli/application/tailordb/service\";\nimport {\n type PermissionOperand,\n type StandardActionPermission,\n type StandardGqlPermissionPolicy,\n type StandardPermissionCondition,\n type StandardTailorTypeGqlPermission,\n type StandardTailorTypePermission,\n} from \"@/configure/services/tailordb/permission\";\nimport { fetchAll, type OperatorClient } from \"../../client\";\nimport {\n buildMetaRequest,\n sdkNameLabelKey,\n trnPrefix,\n type WithLabel,\n} from \"./label\";\nimport { ChangeSet } from \".\";\nimport type { ApplyPhase, PlanContext } from \"..\";\nimport type { OwnerConflict, UnmanagedResource } from \"./confirm\";\nimport type { TailorDBTypeConfig } from \"@/configure/services/tailordb/operator-types\";\nimport type { Executor } from \"@/parser/service/executor\";\nimport type { ParsedTailorDBType } from \"@/parser/service/tailordb/types\";\nimport type { SetMetadataRequestSchema } from \"@tailor-proto/tailor/v1/metadata_pb\";\n\nexport async function applyTailorDB(\n client: OperatorClient,\n result: Awaited<ReturnType<typeof planTailorDB>>,\n phase: ApplyPhase = \"create-update\",\n) {\n const { changeSet } = result;\n if (phase === \"create-update\") {\n // Services\n await Promise.all([\n ...changeSet.service.creates.map(async (create) => {\n await client.createTailorDBService(create.request);\n await client.setMetadata(create.metaRequest);\n }),\n ...changeSet.service.updates.map((update) =>\n client.setMetadata(update.metaRequest),\n ),\n ]);\n\n // Types\n await Promise.all([\n ...changeSet.type.creates.map((create) =>\n client.createTailorDBType(create.request),\n ),\n ...changeSet.type.updates.map((update) =>\n client.updateTailorDBType(update.request),\n ),\n ]);\n\n // GQLPermissions\n await Promise.all([\n ...changeSet.gqlPermission.creates.map((create) =>\n client.createTailorDBGQLPermission(create.request),\n ),\n ...changeSet.gqlPermission.updates.map((update) =>\n client.updateTailorDBGQLPermission(update.request),\n ),\n ]);\n } else if (phase === \"delete\") {\n // Delete in reverse order of dependencies\n // GQLPermissions\n await Promise.all(\n changeSet.gqlPermission.deletes.map((del) =>\n client.deleteTailorDBGQLPermission(del.request),\n ),\n );\n\n // Types\n await Promise.all(\n changeSet.type.deletes.map((del) =>\n client.deleteTailorDBType(del.request),\n ),\n );\n\n // Services\n await Promise.all(\n changeSet.service.deletes.map((del) =>\n client.deleteTailorDBService(del.request),\n ),\n );\n }\n}\n\nexport async function planTailorDB({\n client,\n workspaceId,\n application,\n forRemoval,\n}: PlanContext) {\n const tailordbs: TailorDBService[] = [];\n if (!forRemoval) {\n for (const tailordb of application.tailorDBServices) {\n await tailordb.loadTypes();\n tailordbs.push(tailordb);\n }\n }\n const executors = forRemoval\n ? []\n : Object.values((await application.executorService?.loadExecutors()) ?? {});\n\n const {\n changeSet: serviceChangeSet,\n conflicts,\n unmanaged,\n resourceOwners,\n } = await planServices(client, workspaceId, application.name, tailordbs);\n const deletedServices = serviceChangeSet.deletes.map((del) => del.name);\n const typeChangeSet = await planTypes(\n client,\n workspaceId,\n tailordbs,\n executors,\n deletedServices,\n );\n const gqlPermissionChangeSet = await planGqlPermissions(\n client,\n workspaceId,\n tailordbs,\n deletedServices,\n );\n\n serviceChangeSet.print();\n typeChangeSet.print();\n gqlPermissionChangeSet.print();\n\n return {\n changeSet: {\n service: serviceChangeSet,\n type: typeChangeSet,\n gqlPermission: gqlPermissionChangeSet,\n },\n conflicts,\n unmanaged,\n resourceOwners,\n };\n}\n\ntype CreateService = {\n name: string;\n request: MessageInitShape<typeof CreateTailorDBServiceRequestSchema>;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype UpdateService = {\n name: string;\n metaRequest: MessageInitShape<typeof SetMetadataRequestSchema>;\n};\n\ntype DeleteService = {\n name: string;\n request: MessageInitShape<typeof DeleteTailorDBServiceRequestSchema>;\n};\n\nfunction trn(workspaceId: string, name: string) {\n return `${trnPrefix(workspaceId)}:tailordb:${name}`;\n}\n\nasync function planServices(\n client: OperatorClient,\n workspaceId: string,\n appName: string,\n tailordbs: ReadonlyArray<TailorDBService>,\n) {\n const changeSet: ChangeSet<CreateService, UpdateService, DeleteService> =\n new ChangeSet(\"TailorDB services\");\n const conflicts: OwnerConflict[] = [];\n const unmanaged: UnmanagedResource[] = [];\n const resourceOwners = new Set<string>();\n\n const withoutLabel = await fetchAll(async (pageToken) => {\n try {\n const { tailordbServices, nextPageToken } =\n await client.listTailorDBServices({\n workspaceId,\n pageToken,\n });\n return [tailordbServices, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n const existingServices: WithLabel<(typeof withoutLabel)[number]> = {};\n await Promise.all(\n withoutLabel.map(async (resource) => {\n if (!resource.namespace?.name) {\n return;\n }\n const { metadata } = await client.getMetadata({\n trn: trn(workspaceId, resource.namespace.name),\n });\n existingServices[resource.namespace.name] = {\n resource,\n label: metadata?.labels[sdkNameLabelKey],\n };\n }),\n );\n\n for (const tailordb of tailordbs) {\n const existing = existingServices[tailordb.namespace];\n const metaRequest = await buildMetaRequest(\n trn(workspaceId, tailordb.namespace),\n appName,\n );\n if (existing) {\n if (!existing.label) {\n unmanaged.push({\n resourceType: \"TailorDB service\",\n resourceName: tailordb.namespace,\n });\n } else if (existing.label !== appName) {\n conflicts.push({\n resourceType: \"TailorDB service\",\n resourceName: tailordb.namespace,\n currentOwner: existing.label,\n });\n }\n\n changeSet.updates.push({\n name: tailordb.namespace,\n metaRequest,\n });\n delete existingServices[tailordb.namespace];\n } else {\n changeSet.creates.push({\n name: tailordb.namespace,\n request: {\n workspaceId,\n namespaceName: tailordb.namespace,\n // Set UTC to match tailorctl/terraform\n defaultTimezone: \"UTC\",\n },\n metaRequest,\n });\n }\n }\n Object.entries(existingServices).forEach(([namespaceName]) => {\n const label = existingServices[namespaceName]?.label;\n if (label && label !== appName) {\n resourceOwners.add(label);\n }\n // Only delete services managed by this application\n if (label === appName) {\n changeSet.deletes.push({\n name: namespaceName,\n request: {\n workspaceId,\n namespaceName,\n },\n });\n }\n });\n\n return { changeSet, conflicts, unmanaged, resourceOwners };\n}\n\ntype CreateType = {\n name: string;\n request: MessageInitShape<typeof CreateTailorDBTypeRequestSchema>;\n};\n\ntype UpdateType = {\n name: string;\n request: MessageInitShape<typeof UpdateTailorDBTypeRequestSchema>;\n};\n\ntype DeleteType = {\n name: string;\n request: MessageInitShape<typeof DeleteTailorDBTypeRequestSchema>;\n};\n\nasync function planTypes(\n client: OperatorClient,\n workspaceId: string,\n tailordbs: ReadonlyArray<TailorDBService>,\n executors: ReadonlyArray<Executor>,\n deletedServices: ReadonlyArray<string>,\n) {\n const changeSet: ChangeSet<CreateType, UpdateType, DeleteType> =\n new ChangeSet(\"TailorDB types\");\n\n const fetchTypes = (namespaceName: string) => {\n return fetchAll(async (pageToken) => {\n try {\n const { tailordbTypes, nextPageToken } = await client.listTailorDBTypes(\n {\n workspaceId,\n namespaceName,\n pageToken,\n },\n );\n return [tailordbTypes, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n };\n\n const executorUsedTypes = new Set<string>();\n for (const executor of executors) {\n if (\n executor.trigger.kind === \"recordCreated\" ||\n executor.trigger.kind === \"recordUpdated\" ||\n executor.trigger.kind === \"recordDeleted\"\n ) {\n executorUsedTypes.add(executor.trigger.typeName);\n }\n }\n\n for (const tailordb of tailordbs) {\n const existingTypes = await fetchTypes(tailordb.namespace);\n const existingNameSet = new Set<string>();\n existingTypes.forEach((type) => existingNameSet.add(type.name));\n\n const types = tailordb.getTypes();\n for (const typeName of Object.keys(types)) {\n const tailordbType = generateTailorDBTypeManifest(\n types[typeName],\n executorUsedTypes,\n );\n if (existingNameSet.has(typeName)) {\n changeSet.updates.push({\n name: typeName,\n request: {\n workspaceId,\n namespaceName: tailordb.namespace,\n tailordbType,\n },\n });\n existingNameSet.delete(typeName);\n } else {\n changeSet.creates.push({\n name: typeName,\n request: {\n workspaceId,\n namespaceName: tailordb.namespace,\n tailordbType,\n },\n });\n }\n }\n existingNameSet.forEach((name) => {\n changeSet.deletes.push({\n name,\n request: {\n workspaceId,\n namespaceName: tailordb.namespace,\n tailordbTypeName: name,\n },\n });\n });\n }\n for (const namespaceName of deletedServices) {\n const existingTypes = await fetchTypes(namespaceName);\n existingTypes.forEach((typ) => {\n changeSet.deletes.push({\n name: typ.name,\n request: {\n workspaceId,\n namespaceName,\n tailordbTypeName: typ.name,\n },\n });\n });\n }\n return changeSet;\n}\n\n// TODO(remiposo): Copied the type-processor / aggregator processing almost as-is.\n// This will need refactoring later.\nfunction generateTailorDBTypeManifest(\n type: ParsedTailorDBType,\n executorUsedTypes: ReadonlySet<string>,\n): MessageInitShape<typeof TailorDBTypeSchema> {\n // This ensures that explicitly provided pluralForm like \"PurchaseOrderList\" becomes \"purchaseOrderList\"\n const pluralForm = inflection.camelize(type.pluralForm, true);\n\n const defaultSettings = {\n aggregation: type.settings?.aggregation || false,\n bulkUpsert: type.settings?.bulkUpsert || false,\n draft: false,\n defaultQueryLimitSize: 100n,\n maxBulkUpsertSize: 1000n,\n pluralForm,\n publishRecordEvents: false,\n };\n if (executorUsedTypes.has(type.name)) {\n defaultSettings.publishRecordEvents = true;\n }\n\n const fields: Record<\n string,\n MessageInitShape<typeof TailorDBType_FieldConfigSchema>\n > = {};\n\n Object.keys(type.fields)\n .filter((fieldName) => fieldName !== \"id\")\n .forEach((fieldName) => {\n const fieldConfig = type.fields[fieldName].config;\n const fieldType = fieldConfig.type;\n const fieldEntry: MessageInitShape<\n typeof TailorDBType_FieldConfigSchema\n > = {\n type: fieldType,\n allowedValues:\n fieldType === \"enum\" ? fieldConfig.allowedValues || [] : [],\n description: fieldConfig.description || \"\",\n validate: (fieldConfig.validate || []).map((val) => ({\n action: TailorDBType_PermitAction.DENY,\n errorMessage: val.errorMessage || \"\",\n ...(val.script && {\n script: {\n expr: val.script.expr ? `!${val.script.expr}` : \"\",\n },\n }),\n })),\n array: fieldConfig.array || false,\n index: (fieldConfig.index && !fieldConfig.array) || false,\n unique: (fieldConfig.unique && !fieldConfig.array) || false,\n foreignKey: fieldConfig.foreignKey || false,\n foreignKeyType: fieldConfig.foreignKeyType,\n foreignKeyField: fieldConfig.foreignKeyField,\n required: fieldConfig.required !== false,\n vector: fieldConfig.vector || false,\n ...(fieldConfig.hooks && {\n hooks: {\n create: fieldConfig.hooks?.create\n ? {\n expr: fieldConfig.hooks.create.expr || \"\",\n }\n : undefined,\n update: fieldConfig.hooks?.update\n ? {\n expr: fieldConfig.hooks.update.expr || \"\",\n }\n : undefined,\n },\n }),\n ...(fieldConfig.serial && {\n serial: {\n start: fieldConfig.serial.start as unknown as bigint,\n ...(fieldConfig.serial.maxValue && {\n maxValue: fieldConfig.serial.maxValue as unknown as bigint,\n }),\n ...(fieldConfig.serial.format && {\n format: fieldConfig.serial.format,\n }),\n },\n }),\n };\n\n // Handle nested fields\n if (fieldConfig.type === \"nested\" && fieldConfig.fields) {\n fieldEntry.fields = processNestedFields(fieldConfig.fields);\n }\n\n fields[fieldName] = fieldEntry;\n });\n\n const relationships: Record<\n string,\n MessageInitShape<typeof TailorDBType_RelationshipConfigSchema>\n > = {};\n\n for (const [relationName, rel] of Object.entries(type.forwardRelationships)) {\n relationships[relationName] = {\n refType: rel.targetType,\n refField: rel.sourceField,\n srcField: rel.targetField,\n array: rel.isArray,\n description: rel.description,\n };\n }\n\n for (const [relationName, rel] of Object.entries(\n type.backwardRelationships,\n )) {\n relationships[relationName] = {\n refType: rel.targetType,\n refField: rel.targetField,\n srcField: rel.sourceField,\n array: rel.isArray,\n description: rel.description,\n };\n }\n\n // Process indexes from metadata\n const indexes: Record<\n string,\n MessageInitShape<typeof TailorDBType_IndexSchema>\n > = {};\n if (type.indexes) {\n Object.entries(type.indexes).forEach(([key, index]) => {\n indexes[key] = {\n fieldNames: index.fields,\n unique: index.unique || false,\n };\n });\n }\n\n // Process files from metadata\n const files: Record<\n string,\n MessageInitShape<typeof TailorDBType_FileConfigSchema>\n > = {};\n if (type.files) {\n Object.entries(type.files).forEach(([key, description]) => {\n files[key] = { description: description || \"\" };\n });\n }\n\n // To be secure by default, add Permission settings that reject everyone\n // when Permission/RecordPermission is not configured.\n const defaultPermission: MessageInitShape<\n typeof TailorDBType_PermissionSchema\n > = {\n create: [],\n read: [],\n update: [],\n delete: [],\n };\n const permission = type.permissions.record\n ? protoPermission(type.permissions.record)\n : defaultPermission;\n\n return {\n name: type.name,\n schema: {\n description: type.description || \"\",\n fields,\n relationships: relationships,\n settings: defaultSettings,\n extends: false,\n directives: [],\n indexes,\n files,\n permission,\n },\n };\n}\n\nfunction processNestedFields(\n fields: Record<string, TailorDBTypeConfig[\"schema\"][\"fields\"][string]>,\n): Record<string, MessageInitShape<typeof TailorDBType_FieldConfigSchema>> {\n const nestedFields: Record<\n string,\n MessageInitShape<typeof TailorDBType_FieldConfigSchema>\n > = {};\n\n Object.entries(fields).forEach(([nestedFieldName, nestedFieldConfig]) => {\n const nestedType = nestedFieldConfig.type;\n\n if (nestedType === \"nested\" && nestedFieldConfig.fields) {\n const deepNestedFields = processNestedFields(nestedFieldConfig.fields);\n nestedFields[nestedFieldName] = {\n type: \"nested\",\n allowedValues: nestedFieldConfig.allowedValues || [],\n description: nestedFieldConfig.description || \"\",\n validate: [],\n required: nestedFieldConfig.required ?? true,\n array: nestedFieldConfig.array ?? false,\n index: false,\n unique: false,\n foreignKey: false,\n vector: false,\n fields: deepNestedFields,\n };\n } else {\n nestedFields[nestedFieldName] = {\n type: nestedType,\n allowedValues:\n nestedType === \"enum\" ? nestedFieldConfig.allowedValues || [] : [],\n description: nestedFieldConfig.description || \"\",\n validate: [],\n required: nestedFieldConfig.required ?? true,\n array: nestedFieldConfig.array ?? false,\n index: false,\n unique: false,\n foreignKey: false,\n vector: false,\n ...(nestedFieldConfig.serial && {\n serial: {\n start: nestedFieldConfig.serial.start as unknown as bigint,\n ...(nestedFieldConfig.serial.maxValue && {\n maxValue: nestedFieldConfig.serial.maxValue as unknown as bigint,\n }),\n ...(nestedFieldConfig.serial.format && {\n format: nestedFieldConfig.serial.format,\n }),\n },\n }),\n };\n }\n });\n\n return nestedFields;\n}\n\nfunction protoPermission(\n permission: StandardTailorTypePermission,\n): MessageInitShape<typeof TailorDBType_PermissionSchema> {\n const ret: MessageInitShape<typeof TailorDBType_PermissionSchema> = {};\n for (const [key, policies] of Object.entries(permission)) {\n ret[key as keyof StandardTailorTypePermission] = policies.map((policy) =>\n protoPolicy(policy),\n );\n }\n return ret;\n}\n\nfunction protoPolicy(\n policy: StandardActionPermission<\"record\">,\n): MessageInitShape<typeof TailorDBType_Permission_PolicySchema> {\n let permit: TailorDBType_Permission_Permit;\n switch (policy.permit) {\n case \"allow\":\n permit = TailorDBType_Permission_Permit.ALLOW;\n break;\n case \"deny\":\n permit = TailorDBType_Permission_Permit.DENY;\n break;\n default:\n throw new Error(`Unknown permission: ${policy.permit satisfies never}`);\n }\n return {\n conditions: policy.conditions.map((cond) => protoCondition(cond)),\n permit,\n description: policy.description,\n };\n}\n\nfunction protoCondition(\n condition: StandardPermissionCondition<\"record\">,\n): MessageInitShape<typeof TailorDBType_Permission_ConditionSchema> {\n const [left, operator, right] = condition;\n\n const l = protoOperand(left);\n const r = protoOperand(right);\n let op: TailorDBType_Permission_Operator;\n switch (operator) {\n case \"eq\":\n op = TailorDBType_Permission_Operator.EQ;\n break;\n case \"ne\":\n op = TailorDBType_Permission_Operator.NE;\n break;\n case \"in\":\n op = TailorDBType_Permission_Operator.IN;\n break;\n case \"nin\":\n op = TailorDBType_Permission_Operator.NIN;\n break;\n default:\n throw new Error(`Unknown operator: ${operator satisfies never}`);\n }\n return {\n left: l,\n operator: op,\n right: r,\n };\n}\n\nfunction protoOperand(\n operand: PermissionOperand<\n \"record\",\n Record<string, unknown>,\n Record<string, unknown>\n >,\n): MessageInitShape<typeof TailorDBType_Permission_OperandSchema> {\n if (typeof operand === \"object\" && !Array.isArray(operand)) {\n if (\"user\" in operand) {\n return {\n kind: {\n case: \"userField\",\n value: operand.user,\n },\n };\n } else if (\"record\" in operand) {\n return {\n kind: {\n case: \"recordField\",\n value: operand.record,\n },\n };\n } else if (\"newRecord\" in operand) {\n return {\n kind: {\n case: \"newRecordField\",\n value: operand.newRecord,\n },\n };\n } else if (\"oldRecord\" in operand) {\n return {\n kind: {\n case: \"oldRecordField\",\n value: operand.oldRecord,\n },\n };\n } else {\n throw new Error(`Unknown operand: ${operand satisfies never}`);\n }\n }\n\n return {\n kind: {\n case: \"value\",\n value: fromJson(ValueSchema, operand),\n },\n };\n}\n\ntype CreateGqlPermission = {\n name: string;\n request: MessageInitShape<typeof CreateTailorDBGQLPermissionRequestSchema>;\n};\n\ntype UpdateGqlPermission = {\n name: string;\n request: MessageInitShape<typeof UpdateTailorDBGQLPermissionRequestSchema>;\n};\n\ntype DeleteGqlPermission = {\n name: string;\n request: MessageInitShape<typeof DeleteTailorDBGQLPermissionRequestSchema>;\n};\n\nasync function planGqlPermissions(\n client: OperatorClient,\n workspaceId: string,\n tailordbs: ReadonlyArray<TailorDBService>,\n deletedServices: ReadonlyArray<string>,\n) {\n const changeSet: ChangeSet<\n CreateGqlPermission,\n UpdateGqlPermission,\n DeleteGqlPermission\n > = new ChangeSet(\"TailorDB gqlPermissions\");\n\n const fetchGqlPermissions = (namespaceName: string) => {\n return fetchAll(async (pageToken) => {\n try {\n const { permissions, nextPageToken } =\n await client.listTailorDBGQLPermissions({\n workspaceId,\n namespaceName,\n pageToken,\n });\n return [permissions, nextPageToken];\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n return [[], \"\"];\n }\n throw error;\n }\n });\n };\n\n for (const tailordb of tailordbs) {\n const existingGqlPermissions = await fetchGqlPermissions(\n tailordb.namespace,\n );\n const existingNameSet = new Set<string>();\n existingGqlPermissions.forEach((gqlPermission) => {\n existingNameSet.add(gqlPermission.typeName);\n });\n\n const types = tailordb.getTypes();\n for (const typeName of Object.keys(types)) {\n const gqlPermission = types[typeName].permissions.gql;\n if (!gqlPermission) {\n continue;\n }\n if (existingNameSet.has(typeName)) {\n changeSet.updates.push({\n name: typeName,\n request: {\n workspaceId,\n namespaceName: tailordb.namespace,\n typeName: typeName,\n permission: protoGqlPermission(gqlPermission),\n },\n });\n existingNameSet.delete(typeName);\n } else {\n changeSet.creates.push({\n name: typeName,\n request: {\n workspaceId,\n namespaceName: tailordb.namespace,\n typeName: typeName,\n permission: protoGqlPermission(gqlPermission),\n },\n });\n }\n }\n existingNameSet.forEach((name) => {\n changeSet.deletes.push({\n name,\n request: {\n workspaceId,\n namespaceName: tailordb.namespace,\n typeName: name,\n },\n });\n });\n }\n for (const namespaceName of deletedServices) {\n const existingGqlPermissions = await fetchGqlPermissions(namespaceName);\n existingGqlPermissions.forEach((gqlPermission) => {\n changeSet.deletes.push({\n name: gqlPermission.typeName,\n request: {\n workspaceId,\n namespaceName,\n typeName: gqlPermission.typeName,\n },\n });\n });\n }\n return changeSet;\n}\n\nfunction protoGqlPermission(\n permission: StandardTailorTypeGqlPermission,\n): MessageInitShape<typeof TailorDBGQLPermissionSchema> {\n return {\n policies: permission.map((policy) => protoGqlPolicy(policy)),\n };\n}\n\nfunction protoGqlPolicy(\n policy: StandardGqlPermissionPolicy,\n): MessageInitShape<typeof TailorDBGQLPermission_PolicySchema> {\n const actions: TailorDBGQLPermission_Action[] = [];\n for (const action of policy.actions) {\n switch (action) {\n case \"all\":\n actions.push(TailorDBGQLPermission_Action.ALL);\n break;\n case \"create\":\n actions.push(TailorDBGQLPermission_Action.CREATE);\n break;\n case \"read\":\n actions.push(TailorDBGQLPermission_Action.READ);\n break;\n case \"update\":\n actions.push(TailorDBGQLPermission_Action.UPDATE);\n break;\n case \"delete\":\n actions.push(TailorDBGQLPermission_Action.DELETE);\n break;\n case \"aggregate\":\n actions.push(TailorDBGQLPermission_Action.AGGREGATE);\n break;\n case \"bulkUpsert\":\n actions.push(TailorDBGQLPermission_Action.BULK_UPSERT);\n break;\n default:\n throw new Error(`Unknown action: ${action satisfies never}`);\n }\n }\n let permit: TailorDBGQLPermission_Permit;\n switch (policy.permit) {\n case \"allow\":\n permit = TailorDBGQLPermission_Permit.ALLOW;\n break;\n case \"deny\":\n permit = TailorDBGQLPermission_Permit.DENY;\n break;\n default:\n throw new Error(`Unknown permission: ${policy.permit satisfies never}`);\n }\n return {\n conditions: policy.conditions.map((cond) => protoGqlCondition(cond)),\n actions,\n permit,\n description: policy.description,\n };\n}\n\nfunction protoGqlCondition(\n condition: StandardPermissionCondition<\"gql\">,\n): MessageInitShape<typeof TailorDBGQLPermission_ConditionSchema> {\n const [left, operator, right] = condition;\n\n const l = protoGqlOperand(left);\n const r = protoGqlOperand(right);\n let op: TailorDBGQLPermission_Operator;\n switch (operator) {\n case \"eq\":\n op = TailorDBGQLPermission_Operator.EQ;\n break;\n case \"ne\":\n op = TailorDBGQLPermission_Operator.NE;\n break;\n case \"in\":\n op = TailorDBGQLPermission_Operator.IN;\n break;\n case \"nin\":\n op = TailorDBGQLPermission_Operator.NIN;\n break;\n default:\n throw new Error(`Unknown operator: ${operator satisfies never}`);\n }\n return {\n left: l,\n operator: op,\n right: r,\n };\n}\n\nfunction protoGqlOperand(\n operand: PermissionOperand<\n \"gql\",\n Record<string, unknown>,\n Record<string, unknown>\n >,\n): MessageInitShape<typeof TailorDBGQLPermission_OperandSchema> {\n if (typeof operand === \"object\" && !Array.isArray(operand)) {\n if (\"user\" in operand) {\n return {\n kind: {\n case: \"userField\",\n value: operand.user,\n },\n };\n } else {\n throw new Error(`Unknown operand: ${operand satisfies never}`);\n }\n }\n\n return {\n kind: {\n case: \"value\",\n value: fromJson(ValueSchema, operand),\n },\n };\n}\n","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { getDistDir } from \"@/configure/config\";\nimport { type ApplyPhase } from \"..\";\nimport { type OperatorClient, fetchAll } from \"../../client\";\nimport { ChangeSet } from \".\";\nimport type { Workflow, WorkflowJob } from \"@/parser/service/workflow\";\n\nexport async function applyWorkflow(\n client: OperatorClient,\n changeSet: Awaited<ReturnType<typeof planWorkflow>>,\n phase: ApplyPhase = \"create-update\",\n) {\n if (phase === \"create-update\") {\n // Create workflows and their job functions\n await Promise.all(\n changeSet.creates.map(async (create) => {\n // Create job functions first\n const jobFunctions: { [key: string]: bigint } = {};\n for (const [jobName, script] of create.scripts.entries()) {\n const response = await client.createWorkflowJobFunction({\n workspaceId: create.workspaceId,\n jobFunctionName: jobName,\n script: script,\n });\n if (response.jobFunction) {\n jobFunctions[jobName] = response.jobFunction.version;\n }\n }\n\n // Create workflow with job function versions\n await client.createWorkflow({\n workspaceId: create.workspaceId,\n workflowName: create.workflow.name,\n mainJobFunctionName: create.workflow.mainJob.name,\n jobFunctions: jobFunctions,\n });\n }),\n );\n\n // Update workflows and their job functions\n await Promise.all(\n changeSet.updates.map(async (update) => {\n // Update or create job functions\n const jobFunctions: { [key: string]: bigint } = {};\n for (const [jobName, script] of update.scripts.entries()) {\n const response = await client.updateWorkflowJobFunction({\n workspaceId: update.workspaceId,\n jobFunctionName: jobName,\n script: script,\n });\n if (response.jobFunction) {\n jobFunctions[jobName] = response.jobFunction.version;\n }\n }\n\n // Update workflow with job function versions\n await client.updateWorkflow({\n workspaceId: update.workspaceId,\n workflowName: update.workflow.name,\n mainJobFunctionName: update.workflow.mainJob.name,\n jobFunctions: jobFunctions,\n });\n }),\n );\n } else if (phase === \"delete\") {\n // Delete workflows\n await Promise.all(\n changeSet.deletes.map((del) =>\n client.deleteWorkflow({\n workspaceId: del.workspaceId,\n workflowId: del.workflowId,\n }),\n ),\n );\n }\n}\n\ntype CreateWorkflow = {\n name: string;\n workspaceId: string;\n workflow: Workflow;\n scripts: Map<string, string>;\n};\n\ntype UpdateWorkflow = {\n name: string;\n workspaceId: string;\n workflow: Workflow;\n scripts: Map<string, string>;\n};\n\ntype DeleteWorkflow = {\n name: string;\n workspaceId: string;\n workflowId: string;\n};\n\n/**\n * Recursively collect all job names from a workflow's mainJob and its dependencies\n */\nexport function collectJobNamesFromWorkflow(workflow: Workflow): Set<string> {\n const jobNames = new Set<string>();\n\n const collectFromJob = (job: WorkflowJob) => {\n if (!job || jobNames.has(job.name)) {\n return;\n }\n jobNames.add(job.name);\n\n if (job.deps && Array.isArray(job.deps)) {\n for (const dep of job.deps) {\n collectFromJob(dep);\n }\n }\n };\n\n collectFromJob(workflow.mainJob);\n return jobNames;\n}\n\nexport async function planWorkflow(\n client: OperatorClient,\n workspaceId: string,\n workflows: Record<string, Workflow>,\n) {\n const changeSet: ChangeSet<CreateWorkflow, UpdateWorkflow, DeleteWorkflow> =\n new ChangeSet(\"Workflows\");\n\n // Fetch existing workflows from API\n const existingWorkflows = await fetchAll(async (pageToken) => {\n const response = await client.listWorkflows({\n workspaceId,\n pageToken,\n pageSize: 100,\n pageDirection: 0, // FORWARD\n });\n return [\n response.workflows.map((w) => ({ id: w.id, name: w.name })),\n response.nextPageToken,\n ];\n });\n\n const existingWorkflowMap = new Map<string, { id: string; name: string }>();\n existingWorkflows.forEach((workflow) => {\n existingWorkflowMap.set(workflow.name, {\n id: workflow.id,\n name: workflow.name,\n });\n });\n\n // Load all available scripts once\n const allScripts = await loadWorkflowScripts();\n\n for (const workflow of Object.values(workflows)) {\n // Get only the jobs needed for this specific workflow\n const requiredJobNames = collectJobNamesFromWorkflow(workflow);\n const scripts = new Map<string, string>();\n\n for (const jobName of requiredJobNames) {\n const script = allScripts.get(jobName);\n if (script) {\n scripts.set(jobName, script);\n } else {\n console.warn(\n `Warning: Script for job \"${jobName}\" not found in workflow \"${workflow.name}\"`,\n );\n }\n }\n\n const existing = existingWorkflowMap.get(workflow.name);\n if (existing) {\n changeSet.updates.push({\n name: workflow.name,\n workspaceId,\n workflow,\n scripts,\n });\n existingWorkflowMap.delete(workflow.name);\n } else {\n changeSet.creates.push({\n name: workflow.name,\n workspaceId,\n workflow,\n scripts,\n });\n }\n }\n\n existingWorkflowMap.forEach((existing) => {\n changeSet.deletes.push({\n name: existing.name,\n workspaceId,\n workflowId: existing.id,\n });\n });\n\n changeSet.print();\n return changeSet;\n}\n\nasync function loadWorkflowScripts(): Promise<Map<string, string>> {\n const scripts = new Map<string, string>();\n\n // Load all job scripts from workflow-jobs directory\n const jobsDir = path.join(getDistDir(), \"workflow-jobs\");\n if (!fs.existsSync(jobsDir)) {\n return scripts;\n }\n\n const files = fs.readdirSync(jobsDir);\n for (const file of files) {\n // Only load final bundled .js files (not .base.js, .transformed.js, or .map files)\n if (\n file.endsWith(\".js\") &&\n !file.endsWith(\".base.js\") &&\n !file.endsWith(\".transformed.js\") &&\n !file.endsWith(\".map\")\n ) {\n const jobName = file.replace(/\\.js$/, \"\");\n const scriptPath = path.join(jobsDir, file);\n const script = fs.readFileSync(scriptPath, \"utf-8\");\n scripts.set(jobName, script);\n }\n }\n\n return scripts;\n}\n","import { defineCommand } from \"citty\";\nimport { defineApplication } from \"@/cli/application\";\nimport {\n loadAndCollectJobs,\n printLoadedWorkflows,\n type CollectedJob,\n type WorkflowLoadResult,\n} from \"@/cli/application/workflow/service\";\nimport { bundleExecutors } from \"@/cli/bundler/executor/executor-bundler\";\nimport { bundleResolvers } from \"@/cli/bundler/resolver/resolver-bundler\";\nimport { bundleWorkflowJobs } from \"@/cli/bundler/workflow/workflow-bundler\";\nimport { loadConfig } from \"@/cli/config-loader\";\nimport { generateUserTypes } from \"@/cli/type-generator\";\nimport { commonArgs, withCommonArgs } from \"../args\";\nimport { initOperatorClient } from \"../client\";\nimport { loadAccessToken, loadConfigPath, loadWorkspaceId } from \"../context\";\nimport { applyApplication, planApplication } from \"./services/application\";\nimport { applyAuth, planAuth } from \"./services/auth\";\nimport {\n confirmImportantResourceDeletion,\n confirmOwnerConflict,\n confirmUnmanagedResources,\n type ImportantResourceDeletion,\n type OwnerConflict,\n type UnmanagedResource,\n} from \"./services/confirm\";\nimport { applyExecutor, planExecutor } from \"./services/executor\";\nimport { applyIdP, planIdP } from \"./services/idp\";\nimport { applyPipeline, planPipeline } from \"./services/resolver\";\nimport {\n applyStaticWebsite,\n planStaticWebsite,\n} from \"./services/staticwebsite\";\nimport { applyTailorDB, planTailorDB } from \"./services/tailordb\";\nimport { applyWorkflow, planWorkflow } from \"./services/workflow\";\nimport type { Application } from \"@/cli/application\";\nimport type { FileLoadConfig } from \"@/cli/application/file-loader\";\nimport type { OperatorClient } from \"@/cli/client\";\n\nexport interface ApplyOptions {\n workspaceId?: string;\n profile?: string;\n configPath?: string;\n dryRun?: boolean;\n yes?: boolean;\n // NOTE(remiposo): Provide an option to run build-only for testing purposes.\n // This could potentially be exposed as a CLI option.\n buildOnly?: boolean;\n}\n\nexport interface PlanContext {\n client: OperatorClient;\n workspaceId: string;\n application: Readonly<Application>;\n forRemoval: boolean;\n}\n\nexport type ApplyPhase = \"create-update\" | \"delete\";\n\nexport async function apply(options?: ApplyOptions) {\n // Load and validate options\n const configPath = loadConfigPath(options?.configPath);\n const { config } = await loadConfig(configPath);\n const dryRun = options?.dryRun ?? false;\n const yes = options?.yes ?? false;\n const buildOnly = options?.buildOnly ?? false;\n\n // Generate user types from loaded config\n await generateUserTypes(config, configPath);\n const application = defineApplication(config);\n\n // Load files first (before building)\n // Load workflows first and collect jobs for bundling\n let workflowResult: WorkflowLoadResult | undefined;\n if (application.workflowConfig) {\n workflowResult = await loadAndCollectJobs(application.workflowConfig);\n }\n\n // Build functions (using already loaded data)\n for (const app of application.applications) {\n for (const pipeline of app.resolverServices) {\n await buildPipeline(pipeline.namespace, pipeline.config);\n }\n }\n if (application.executorService) {\n await buildExecutor(application.executorService.config);\n }\n if (workflowResult && workflowResult.jobs.length > 0) {\n await buildWorkflow(workflowResult.jobs);\n }\n if (buildOnly) return;\n\n // Initialize client\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: options?.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options?.workspaceId,\n profile: options?.profile,\n });\n\n // Load remaining files and print logs\n // Order: TailorDB → Resolver → Executor → Workflow\n for (const tailordb of application.tailorDBServices) {\n await tailordb.loadTypes();\n }\n for (const pipeline of application.resolverServices) {\n await pipeline.loadResolvers();\n }\n if (application.executorService) {\n await application.executorService.loadExecutors();\n }\n // Print workflow loading logs last (workflows were already loaded for bundling)\n if (workflowResult) {\n printLoadedWorkflows(workflowResult);\n }\n console.log(\"\");\n\n // Phase 1: Plan\n const ctx: PlanContext = {\n client,\n workspaceId,\n application,\n forRemoval: false,\n };\n const tailorDB = await planTailorDB(ctx);\n const staticWebsite = await planStaticWebsite(ctx);\n const idp = await planIdP(ctx);\n const auth = await planAuth(ctx);\n const pipeline = await planPipeline(ctx);\n const app = await planApplication(ctx);\n const executor = await planExecutor(ctx);\n const workflow = await planWorkflow(\n client,\n workspaceId,\n workflowResult?.workflows ?? {},\n );\n\n // Confirm conflicts\n const allConflicts: OwnerConflict[] = [\n ...tailorDB.conflicts,\n ...staticWebsite.conflicts,\n ...idp.conflicts,\n ...auth.conflicts,\n ...pipeline.conflicts,\n ...executor.conflicts,\n ];\n await confirmOwnerConflict(allConflicts, application.name, yes);\n // Confirm unmanaged resources\n const allUnmanaged: UnmanagedResource[] = [\n ...tailorDB.unmanaged,\n ...staticWebsite.unmanaged,\n ...idp.unmanaged,\n ...auth.unmanaged,\n ...pipeline.unmanaged,\n ...executor.unmanaged,\n ];\n await confirmUnmanagedResources(allUnmanaged, application.name, yes);\n // Confirm important deletions\n const importantDeletions: ImportantResourceDeletion[] = [];\n for (const del of tailorDB.changeSet.type.deletes) {\n importantDeletions.push({\n resourceType: \"TailorDB type\",\n resourceName: del.name,\n });\n }\n for (const del of staticWebsite.changeSet.deletes) {\n importantDeletions.push({\n resourceType: \"StaticWebsite\",\n resourceName: del.name,\n });\n }\n await confirmImportantResourceDeletion(importantDeletions, yes);\n\n // Delete renamed applications\n // NOTE: When removing resources while renaming the app at the same time,\n // the app and its resources don't get deleted and are left orphaned...\n const resourceOwners = new Set([\n ...tailorDB.resourceOwners,\n ...staticWebsite.resourceOwners,\n ...idp.resourceOwners,\n ...auth.resourceOwners,\n ...pipeline.resourceOwners,\n ...executor.resourceOwners,\n ]);\n const conflictOwners = new Set(allConflicts.map((c) => c.currentOwner));\n const emptyApps = [...conflictOwners].filter(\n (owner) => !resourceOwners.has(owner),\n );\n for (const emptyApp of emptyApps) {\n app.deletes.push({\n name: emptyApp,\n request: {\n workspaceId,\n applicationName: emptyApp,\n },\n });\n }\n if (dryRun) {\n console.log(\"Dry run enabled. No changes applied.\");\n return;\n }\n\n // Phase 2: Apply Create/Update\n await applyTailorDB(client, tailorDB, \"create-update\");\n await applyStaticWebsite(client, staticWebsite, \"create-update\");\n await applyIdP(client, idp, \"create-update\");\n await applyAuth(client, auth, \"create-update\");\n await applyPipeline(client, pipeline, \"create-update\");\n await applyApplication(client, app, \"create-update\");\n await applyExecutor(client, executor, \"create-update\");\n await applyWorkflow(client, workflow, \"create-update\");\n\n // Phase 3: Apply Delete in reverse order\n await applyWorkflow(client, workflow, \"delete\");\n await applyExecutor(client, executor, \"delete\");\n await applyApplication(client, app, \"delete\");\n await applyPipeline(client, pipeline, \"delete\");\n await applyAuth(client, auth, \"delete\");\n await applyIdP(client, idp, \"delete\");\n await applyStaticWebsite(client, staticWebsite, \"delete\");\n await applyTailorDB(client, tailorDB, \"delete\");\n\n console.log(\"Successfully applied changes.\");\n}\n\nasync function buildPipeline(namespace: string, config: FileLoadConfig) {\n await bundleResolvers(namespace, config);\n}\n\nasync function buildExecutor(config: FileLoadConfig) {\n await bundleExecutors(config);\n}\n\nasync function buildWorkflow(collectedJobs: CollectedJob[]) {\n // Use the workflow bundler with already collected jobs\n await bundleWorkflowJobs(collectedJobs);\n}\n\nexport const applyCommand = defineCommand({\n meta: {\n name: \"apply\",\n description: \"Apply Tailor configuration to generate files\",\n },\n args: {\n ...commonArgs,\n \"workspace-id\": {\n type: \"string\",\n description: \"ID of the workspace to apply the configuration to\",\n alias: \"w\",\n },\n profile: {\n type: \"string\",\n description: \"Workspace profile to use\",\n alias: \"p\",\n },\n config: {\n type: \"string\",\n description: \"Path to SDK config file\",\n alias: \"c\",\n default: \"tailor.config.ts\",\n },\n dryRun: {\n type: \"boolean\",\n description: \"Run the command without making any changes\",\n alias: \"d\",\n },\n yes: {\n type: \"boolean\",\n description: \"Skip all confirmation prompts\",\n alias: \"y\",\n },\n },\n run: withCommonArgs(async (args) => {\n await apply({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n configPath: args.config,\n dryRun: args.dryRun,\n yes: args.yes,\n });\n }),\n});\n","import { glob } from \"node:fs/promises\";\nimport * as path from \"node:path\";\nimport { styleText } from \"node:util\";\nimport chokidar from \"chokidar\";\nimport * as madgeModule from \"madge\";\n\ntype MadgeLoader = typeof madgeModule;\n\n/**\n * Types of file change events.\n */\ntype FileChangeEvent = \"add\" | \"change\" | \"unlink\";\n\n/**\n * Definition of a watch group.\n */\ninterface WatchGroup {\n /** Unique identifier of the group. */\n id: string;\n /** File patterns to watch (glob format). */\n patterns: string[];\n /** List of absolute file paths in the group. */\n files: Set<string>;\n}\n\n/**\n * Node in the dependency graph.\n */\ninterface DependencyNode {\n /** Absolute path of the file. */\n filePath: string;\n /** List of files this file depends on. */\n dependencies: Set<string>;\n /** List of files that depend on this file. */\n dependents: Set<string>;\n}\n\n/**\n * Impact analysis result.\n */\ninterface ImpactAnalysisResult {\n /** Changed file. */\n changedFile: string;\n /** List of affected files (all files depending on the changed file). */\n affectedFiles: string[];\n /** List of affected watch groups. */\n affectedGroups: string[];\n}\n\n/**\n * Type of the error handling callback.\n */\ntype ErrorCallback = (error: WatcherError) => void;\n\n/**\n * Options for the watcher system.\n */\ninterface WatcherOptions {\n /** Options for chokidar. */\n chokidarOptions?: Parameters<typeof chokidar.watch>[1];\n /** Options for madge. */\n madgeOptions?: Parameters<MadgeLoader>[1];\n /** Update interval for the dependency graph (milliseconds). */\n dependencyUpdateInterval?: number;\n /** Debounce duration (milliseconds). */\n debounceTime?: number;\n /** Whether to enable circular dependency detection. */\n detectCircularDependencies?: boolean;\n}\n\n/**\n * Watcher status.\n */\ninterface WatchStatus {\n /** Whether watching is active. */\n isWatching: boolean;\n /** Number of watch groups. */\n groupCount: number;\n /** Number of watched files. */\n fileCount: number;\n /** Number of nodes in the dependency graph. */\n dependencyNodeCount: number;\n}\n\n/**\n * Graph statistics.\n */\ninterface GraphStats {\n /** Number of nodes. */\n nodeCount: number;\n /** Number of edges. */\n edgeCount: number;\n /** Number of circular dependencies. */\n circularDependencyCount: number;\n}\n\n/**\n * Error codes.\n */\nconst WatcherErrorCode = {\n DEPENDENCY_ANALYSIS_FAILED: \"DEPENDENCY_ANALYSIS_FAILED\",\n FILE_WATCH_FAILED: \"FILE_WATCH_FAILED\",\n CIRCULAR_DEPENDENCY_DETECTED: \"CIRCULAR_DEPENDENCY_DETECTED\",\n INVALID_WATCH_GROUP: \"INVALID_WATCH_GROUP\",\n MADGE_INITIALIZATION_FAILED: \"MADGE_INITIALIZATION_FAILED\",\n} as const;\ntype WatcherErrorCode =\n (typeof WatcherErrorCode)[keyof typeof WatcherErrorCode];\n\n/**\n * Watcher-specific error.\n */\nexport class WatcherError extends Error {\n constructor(\n message: string,\n public readonly code: WatcherErrorCode,\n public readonly filePath?: string,\n public readonly originalError?: Error,\n ) {\n super(message);\n this.name = \"WatcherError\";\n }\n}\n\n/**\n * Class dedicated to managing the dependency graph.\n */\nexport class DependencyGraphManager {\n private graph: Map<string, DependencyNode> = new Map();\n private madgeInstance: Awaited<ReturnType<MadgeLoader>> | null = null;\n private madgeLoader: MadgeLoader | null = null;\n\n constructor(private readonly options: Parameters<MadgeLoader>[1] = {}) {}\n\n /**\n * Build the dependency graph from the given files.\n */\n async buildGraph(filePaths: string[]): Promise<void> {\n try {\n if (filePaths.length === 0) return;\n\n const madge = this.getMadgeLoader();\n\n this.madgeInstance = await madge(filePaths, {\n fileExtensions: [\"ts\", \"js\"],\n excludeRegExp: [/node_modules/],\n baseDir: \".\",\n ...this.options,\n });\n\n const dependencyObj = this.madgeInstance.obj() as Record<\n string,\n string[]\n >;\n this.graph.clear();\n\n for (const filePath of filePaths) {\n this.addNode(filePath);\n }\n\n for (const [filePath, dependencies] of Object.entries(dependencyObj)) {\n const absoluteFilePath = path.resolve(\".\", filePath);\n const node = this.graph.get(absoluteFilePath);\n if (!node) continue;\n\n for (const dep of dependencies) {\n const absoluteDepPath = path.resolve(\".\", dep);\n node.dependencies.add(absoluteDepPath);\n\n const depNode = this.graph.get(absoluteDepPath);\n if (depNode) {\n depNode.dependents.add(absoluteFilePath);\n }\n }\n }\n } catch (error) {\n if (error instanceof WatcherError) {\n throw error;\n }\n throw new WatcherError(\n `Failed to build dependency graph: ${error instanceof Error ? error.message : String(error)}`,\n WatcherErrorCode.DEPENDENCY_ANALYSIS_FAILED,\n undefined,\n error instanceof Error ? error : undefined,\n );\n }\n }\n\n private getMadgeLoader(): MadgeLoader {\n if (this.madgeLoader) {\n return this.madgeLoader;\n }\n\n const defaultExport = (madgeModule as { default?: unknown }).default;\n if (typeof defaultExport === \"function\") {\n this.madgeLoader = defaultExport as MadgeLoader;\n return this.madgeLoader;\n }\n\n if (typeof (madgeModule as unknown) === \"function\") {\n this.madgeLoader = madgeModule as unknown as MadgeLoader;\n return this.madgeLoader;\n }\n\n throw new WatcherError(\n \"Failed to initialize madge analyzer: module did not export a callable function.\",\n WatcherErrorCode.MADGE_INITIALIZATION_FAILED,\n );\n }\n\n /**\n * Get every file that depends on the specified file (all levels).\n */\n getDependents(filePath: string): string[] {\n const visited = new Set<string>();\n return this.traverseDependents(path.resolve(filePath), visited);\n }\n\n /**\n * Get every file the specified file depends on (all levels).\n */\n getDependencies(filePath: string): string[] {\n const visited = new Set<string>();\n return this.traverseDependencies(path.resolve(filePath), visited);\n }\n\n /**\n * Detect circular dependencies.\n */\n findCircularDependencies(): string[][] {\n if (!this.madgeInstance) return [];\n try {\n return this.madgeInstance.circular();\n } catch (error) {\n console.warn(\"Failed to detect circular dependencies:\", error);\n return [];\n }\n }\n\n /**\n * Add a node to the graph.\n */\n addNode(filePath: string): void {\n const absolutePath = path.resolve(filePath);\n if (!this.graph.has(absolutePath)) {\n this.graph.set(absolutePath, {\n filePath: absolutePath,\n dependencies: new Set(),\n dependents: new Set(),\n });\n }\n }\n\n /**\n * Remove a node from the graph.\n */\n removeNode(filePath: string): void {\n const absolutePath = path.resolve(filePath);\n const node = this.graph.get(absolutePath);\n if (!node) return;\n\n for (const dep of node.dependencies) {\n const depNode = this.graph.get(dep);\n if (depNode) {\n depNode.dependents.delete(absolutePath);\n }\n }\n\n for (const dependent of node.dependents) {\n const dependentNode = this.graph.get(dependent);\n if (dependentNode) {\n dependentNode.dependencies.delete(absolutePath);\n }\n }\n\n this.graph.delete(absolutePath);\n }\n\n /**\n * Get graph statistics.\n */\n getGraphStats(): GraphStats {\n let edgeCount = 0;\n for (const node of this.graph.values()) {\n edgeCount += node.dependencies.size;\n }\n\n return {\n nodeCount: this.graph.size,\n edgeCount,\n circularDependencyCount: this.findCircularDependencies().length,\n };\n }\n\n private traverseDependents(filePath: string, visited: Set<string>): string[] {\n if (visited.has(filePath)) return [];\n visited.add(filePath);\n\n const node = this.graph.get(filePath);\n if (!node) return [];\n\n const result: string[] = [];\n for (const dependent of node.dependents) {\n result.push(dependent);\n result.push(...this.traverseDependents(dependent, visited));\n }\n\n return result;\n }\n\n private traverseDependencies(\n filePath: string,\n visited: Set<string>,\n ): string[] {\n if (visited.has(filePath)) return [];\n visited.add(filePath);\n\n const node = this.graph.get(filePath);\n if (!node) return [];\n\n const result: string[] = [];\n for (const dependency of node.dependencies) {\n result.push(dependency);\n result.push(...this.traverseDependencies(dependency, visited));\n }\n\n return result;\n }\n}\n\n/**\n * Dependency watching system backed by chokidar and madge.\n */\nclass DependencyWatcher {\n private chokidarWatcher: ReturnType<typeof chokidar.watch> | null = null;\n private watchGroups: Map<string, WatchGroup> = new Map();\n private dependencyGraphManager: DependencyGraphManager;\n private errorCallback: ErrorCallback | null = null;\n private debounceTimers: Map<string, NodeJS.Timeout> = new Map();\n private isInitialized = false;\n private dependencyCache: Map<string, string[]> = new Map();\n private readonly maxCacheSize = 1000;\n private signalHandlersRegistered = false;\n\n constructor(private readonly options: WatcherOptions = {}) {\n this.dependencyGraphManager = new DependencyGraphManager(\n options.madgeOptions,\n );\n }\n\n /**\n * Initialize the watcher system.\n */\n async initialize(): Promise<void> {\n if (this.isInitialized) return;\n\n try {\n this.chokidarWatcher = chokidar.watch([], {\n ignored: /node_modules/,\n persistent: true,\n ignoreInitial: true,\n usePolling: false,\n awaitWriteFinish: {\n stabilityThreshold: 100,\n pollInterval: 100,\n },\n ...this.options.chokidarOptions,\n });\n\n this.chokidarWatcher.on(\"add\", (filePath: string) => {\n console.log(styleText(\"gray\", `File added: ${filePath}`));\n this.debounceFileChange(\"add\", filePath);\n });\n\n this.chokidarWatcher.on(\"change\", (filePath: string) => {\n console.log(styleText(\"gray\", `File changed: ${filePath}`));\n this.debounceFileChange(\"change\", filePath);\n });\n\n this.chokidarWatcher.on(\"unlink\", (filePath: string) => {\n console.log(styleText(\"gray\", `File removed: ${filePath}`));\n this.debounceFileChange(\"unlink\", filePath);\n });\n\n this.chokidarWatcher.on(\"error\", (error: unknown) => {\n console.error(\n styleText(\n \"red\",\n `Watcher error: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n this.handleError(\n new WatcherError(\n `File watcher error: ${error instanceof Error ? error.message : String(error)}`,\n WatcherErrorCode.FILE_WATCH_FAILED,\n undefined,\n error instanceof Error ? error : undefined,\n ),\n );\n });\n\n this.setupSignalHandlers();\n this.isInitialized = true;\n } catch (error) {\n throw new WatcherError(\n `Failed to initialize watcher: ${error instanceof Error ? error.message : String(error)}`,\n WatcherErrorCode.FILE_WATCH_FAILED,\n undefined,\n error instanceof Error ? error : undefined,\n );\n }\n }\n\n /**\n * Add a watch group.\n */\n async addWatchGroup(groupId: string, patterns: string[]): Promise<void> {\n this.validateWatchGroup(groupId, patterns);\n\n if (!this.isInitialized) {\n await this.initialize();\n }\n\n const files = new Set<string>();\n for (const pattern of patterns) {\n console.log(\n styleText(\"gray\", `Watch pattern for`),\n styleText(\"gray\", groupId + \":\"),\n path.relative(process.cwd(), pattern),\n );\n for await (const file of glob(pattern)) {\n files.add(path.resolve(file));\n }\n }\n\n const watchGroup: WatchGroup = {\n id: groupId,\n patterns,\n files,\n };\n\n this.watchGroups.set(groupId, watchGroup);\n\n if (this.chokidarWatcher) {\n const filePaths = Array.from(files);\n this.chokidarWatcher.add(filePaths);\n }\n\n await this.updateDependencyGraph();\n }\n\n /**\n * Remove a watch group.\n */\n async removeWatchGroup(groupId: string): Promise<void> {\n const watchGroup = this.watchGroups.get(groupId);\n if (!watchGroup) return;\n\n if (this.chokidarWatcher) {\n this.chokidarWatcher.unwatch(watchGroup.patterns);\n }\n\n for (const filePath of watchGroup.files) {\n this.dependencyGraphManager.removeNode(filePath);\n }\n\n this.watchGroups.delete(groupId);\n this.dependencyCache.clear();\n }\n\n /**\n * Start watching.\n */\n async start(): Promise<void> {\n if (!this.isInitialized) {\n await this.initialize();\n }\n await this.updateDependencyGraph();\n }\n\n /**\n * Stop watching.\n */\n async stop(): Promise<void> {\n if (this.chokidarWatcher) {\n await this.chokidarWatcher.close();\n this.chokidarWatcher = null;\n }\n\n for (const timer of this.debounceTimers.values()) {\n clearTimeout(timer);\n }\n this.debounceTimers.clear();\n\n this.removeSignalHandlers();\n this.isInitialized = false;\n }\n\n /**\n * Set the error handling callback.\n */\n onError(callback: ErrorCallback): void {\n this.errorCallback = callback;\n }\n\n /**\n * Manually refresh the dependency graph.\n */\n async updateDependencyGraph(): Promise<void> {\n const allFiles: string[] = [];\n for (const group of this.watchGroups.values()) {\n allFiles.push(...Array.from(group.files));\n }\n\n await this.dependencyGraphManager.buildGraph(allFiles);\n this.dependencyCache.clear();\n\n if (this.options.detectCircularDependencies) {\n const circularDeps =\n this.dependencyGraphManager.findCircularDependencies();\n if (circularDeps.length > 0) {\n console.warn(\"Circular dependencies detected:\", circularDeps);\n }\n }\n }\n\n /**\n * Compute the impact scope of a specific file.\n */\n calculateImpact(filePath: string): ImpactAnalysisResult {\n const cacheKey = `impact:${filePath}`;\n let affectedFiles = this.dependencyCache.get(cacheKey);\n\n if (!affectedFiles) {\n affectedFiles = this.findAffectedFiles(filePath);\n this.setCacheValue(cacheKey, affectedFiles);\n }\n\n // Include the changed file itself in the affected files\n const allAffectedFiles = [filePath, ...affectedFiles];\n const affectedGroups = this.findAffectedGroups(allAffectedFiles);\n\n return {\n changedFile: filePath,\n affectedFiles: allAffectedFiles,\n affectedGroups,\n };\n }\n\n /**\n * Detect circular dependencies.\n */\n detectCircularDependencies(): string[][] {\n return this.dependencyGraphManager.findCircularDependencies();\n }\n\n /**\n * Retrieve the current watcher status.\n */\n getWatchStatus(): WatchStatus {\n let fileCount = 0;\n for (const group of this.watchGroups.values()) {\n fileCount += group.files.size;\n }\n\n const stats = this.dependencyGraphManager.getGraphStats();\n\n return {\n isWatching: this.isInitialized && this.chokidarWatcher !== null,\n groupCount: this.watchGroups.size,\n fileCount,\n dependencyNodeCount: stats.nodeCount,\n };\n }\n\n private debounceFileChange(event: FileChangeEvent, filePath: string): void {\n const key = `${event}:${filePath}`;\n\n if (this.debounceTimers.has(key)) {\n clearTimeout(this.debounceTimers.get(key));\n }\n\n const timer = setTimeout(() => {\n this.handleFileChange(event, filePath);\n this.debounceTimers.delete(key);\n }, this.options.debounceTime || 100);\n\n this.debounceTimers.set(key, timer);\n }\n\n private restartCallback: (() => void) | null = null;\n\n /**\n * Set the restart callback to be called when a file change is detected.\n */\n setRestartCallback(callback: () => void): void {\n this.restartCallback = callback;\n }\n\n private async handleFileChange(\n event: FileChangeEvent,\n filePath: string,\n ): Promise<void> {\n try {\n const absolutePath = path.resolve(filePath);\n\n if (event === \"unlink\") {\n this.dependencyGraphManager.removeNode(absolutePath);\n } else {\n this.dependencyGraphManager.addNode(absolutePath);\n if (event === \"change\") {\n await this.updateDependencyGraph();\n }\n }\n\n this.dependencyCache.clear();\n\n const impactResult = this.calculateImpact(absolutePath);\n\n // If any groups are affected, trigger restart instead of calling callbacks\n if (impactResult.affectedGroups.length > 0) {\n console.log(\n styleText(\n \"yellow\",\n \"File change detected, restarting watch process...\",\n ),\n );\n console.log(styleText(\"cyan\", `Changed file: ${absolutePath}`));\n console.log(\n styleText(\n \"cyan\",\n `Affected groups: ${impactResult.affectedGroups.join(\", \")}`,\n ),\n );\n\n if (this.restartCallback) {\n this.restartCallback();\n }\n } else {\n console.log(\n styleText(\n \"gray\",\n `No affected groups found for file: ${absolutePath}`,\n ),\n );\n }\n } catch (error) {\n this.handleError(\n new WatcherError(\n `Failed to handle file change: ${error instanceof Error ? error.message : String(error)}`,\n WatcherErrorCode.DEPENDENCY_ANALYSIS_FAILED,\n filePath,\n error instanceof Error ? error : undefined,\n ),\n );\n }\n }\n\n private findAffectedFiles(changedFile: string): string[] {\n return this.dependencyGraphManager.getDependents(changedFile);\n }\n\n private findAffectedGroups(affectedFiles: string[]): string[] {\n console.log(\n styleText(\n \"gray\",\n `Finding affected groups for files: ${affectedFiles.join(\", \")}`,\n ),\n );\n const affectedGroups = new Set<string>();\n\n for (const [groupId, group] of this.watchGroups) {\n for (const affectedFile of affectedFiles) {\n if (group.files.has(affectedFile)) {\n console.log(\n styleText(\n \"gray\",\n `Group ${groupId} is affected by file: ${affectedFile}`,\n ),\n );\n affectedGroups.add(groupId);\n break;\n }\n }\n }\n\n return Array.from(affectedGroups);\n }\n\n private validateWatchGroup(groupId: string, patterns: string[]): void {\n if (!groupId || typeof groupId !== \"string\") {\n throw new WatcherError(\n \"Group ID must be a non-empty string\",\n WatcherErrorCode.INVALID_WATCH_GROUP,\n );\n }\n\n if (!Array.isArray(patterns) || patterns.length === 0) {\n throw new WatcherError(\n \"Patterns must be a non-empty array\",\n WatcherErrorCode.INVALID_WATCH_GROUP,\n );\n }\n\n if (this.watchGroups.has(groupId)) {\n throw new WatcherError(\n `Watch group with ID '${groupId}' already exists`,\n WatcherErrorCode.INVALID_WATCH_GROUP,\n );\n }\n }\n\n private handleError(error: WatcherError): void {\n console.error(`[DependencyWatcher] ${error.message}`, {\n code: error.code,\n filePath: error.filePath,\n });\n\n if (this.errorCallback) {\n this.errorCallback(error);\n }\n }\n\n private setCacheValue(key: string, value: string[]): void {\n if (this.dependencyCache.size >= this.maxCacheSize) {\n const firstKey = this.dependencyCache.keys().next().value;\n if (firstKey) {\n this.dependencyCache.delete(firstKey);\n }\n }\n this.dependencyCache.set(key, value);\n }\n\n /**\n * Register signal handlers.\n */\n private setupSignalHandlers(): void {\n if (this.signalHandlersRegistered) return;\n\n const handleSignal = async () => {\n try {\n await this.stop();\n console.log(\"Watcher stopped successfully\");\n process.exit(0);\n } catch (error) {\n console.error(\"Error during shutdown:\", error);\n process.exit(0);\n }\n };\n\n process.on(\"SIGINT\", () => handleSignal());\n process.on(\"SIGTERM\", () => handleSignal());\n this.signalHandlersRegistered = true;\n }\n\n /**\n * Remove signal handlers.\n */\n private removeSignalHandlers(): void {\n if (!this.signalHandlersRegistered) return;\n\n process.removeAllListeners(\"SIGINT\");\n process.removeAllListeners(\"SIGTERM\");\n this.signalHandlersRegistered = false;\n }\n}\n\nexport { DependencyWatcher, WatcherErrorCode };\n","import { spawn } from \"node:child_process\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport { styleText } from \"node:util\";\nimport { defineCommand } from \"citty\";\nimport { defineApplication, type Application } from \"@/cli/application\";\nimport { loadConfig } from \"@/cli/config-loader\";\nimport {\n type CodeGenerator,\n type TailorDBNamespaceResult,\n type ResolverNamespaceResult,\n type GeneratorAuthInput,\n} from \"@/cli/generator/types\";\nimport { generateUserTypes } from \"@/cli/type-generator\";\nimport { getDistDir, type AppConfig } from \"@/configure/config\";\nimport { type Generator } from \"@/parser/generator-config\";\nimport { type Executor } from \"@/parser/service/executor\";\nimport { type Resolver } from \"@/parser/service/resolver\";\nimport { commonArgs, withCommonArgs } from \"../args\";\nimport { loadConfigPath } from \"../context\";\nimport { DependencyWatcher } from \"./watch\";\nimport type { GenerateOptions } from \"./options\";\nimport type { ParsedTailorDBType } from \"@/parser/service/tailordb/types\";\n\nexport type { CodeGenerator } from \"@/cli/generator/types\";\n\ninterface TypeInfo {\n types: Record<string, ParsedTailorDBType>;\n sourceInfo: Record<string, { filePath: string; exportName: string }>;\n}\nexport class GenerationManager {\n public readonly application: Application;\n private services: {\n tailordb: Record<string, TypeInfo>;\n resolver: Record<string, Record<string, Resolver>>;\n executor: Record<string, Executor>;\n } = { tailordb: {}, resolver: {}, executor: {} };\n private readonly baseDir;\n\n constructor(\n config: AppConfig,\n private generators: Generator[] = [],\n private configPath?: string,\n ) {\n this.application = defineApplication(config);\n this.baseDir = path.join(getDistDir(), \"generated\");\n fs.mkdirSync(this.baseDir, { recursive: true });\n }\n\n async generate(watch: boolean) {\n console.log(\"\");\n console.log(\n \"Generation for application:\",\n styleText(\"cyanBright\", this.application.config.name),\n );\n console.log(\"\");\n\n // Initialize data structure\n const app = this.application;\n\n for (const db of app.tailorDBServices) {\n const namespace = db.namespace;\n try {\n await db.loadTypes();\n this.services.tailordb[namespace] = {\n types: db.getTypes(),\n sourceInfo: db.getTypeSourceInfo(),\n };\n } catch (error) {\n console.error(\n styleText(\"red\", \"Error loading types for TailorDB service\"),\n styleText(\"redBright\", namespace),\n );\n console.error(error);\n if (!watch) {\n throw error;\n }\n }\n }\n\n // Resolver services\n for (const resolverService of app.resolverServices) {\n const namespace = resolverService.namespace;\n try {\n await resolverService.loadResolvers();\n this.services.resolver[namespace] = {};\n Object.entries(resolverService.getResolvers()).forEach(\n ([_, resolver]) => {\n this.services.resolver[namespace][resolver.name] = resolver;\n },\n );\n } catch (error) {\n console.error(\n styleText(\"red\", \"Error loading resolvers for Resolver service\"),\n styleText(\"redBright\", namespace),\n );\n console.error(error);\n if (!watch) {\n throw error;\n }\n }\n }\n\n // Auth service\n if (app.authService) {\n await app.authService.resolveNamespaces();\n }\n\n // Executor services\n const executors = await this.application.executorService?.loadExecutors();\n Object.entries(executors ?? {}).forEach(([filePath, executor]) => {\n this.services.executor[filePath] = executor as Executor;\n });\n\n await this.processGenerators();\n }\n\n // Store results for each generator, service type, and namespace\n private generatorResults: Record<\n /* generator */ string,\n {\n tailordbResults: Record<\n /* namespace */ string,\n Record</* type */ string, any>\n >;\n resolverResults: Record<\n /* namespace */ string,\n Record</* resolver */ string, any>\n >;\n tailordbNamespaceResults: Record</* namespace */ string, any>;\n resolverNamespaceResults: Record</* namespace */ string, any>;\n executorResults: Record</* executor */ string, any>;\n }\n > = {};\n\n async processGenerators() {\n await Promise.allSettled(\n this.generators.map(async (gen) => await this.processGenerator(gen)),\n );\n }\n\n async processGenerator(gen: CodeGenerator) {\n try {\n this.generatorResults[gen.id] = {\n tailordbResults: {},\n resolverResults: {},\n tailordbNamespaceResults: {},\n resolverNamespaceResults: {},\n executorResults: {},\n };\n\n for (const [namespace, types] of Object.entries(this.services.tailordb)) {\n await this.processTailorDBNamespace(gen, namespace, types);\n }\n\n // Process Resolver namespaces\n for (const [namespace, resolvers] of Object.entries(\n this.services.resolver,\n )) {\n await this.processResolverNamespace(gen, namespace, resolvers);\n }\n\n // Process Executors\n await this.processExecutors(gen);\n\n // Aggregate all results\n await this.aggregate(gen);\n } catch (error) {\n console.error(\n styleText(\"red\", \"Error processing generator\"),\n styleText(\"redBright\", gen.id),\n );\n console.error(error);\n }\n }\n\n async processTailorDBNamespace(\n gen: CodeGenerator,\n namespace: string,\n typeInfo: TypeInfo,\n ) {\n const results = this.generatorResults[gen.id];\n results.tailordbResults[namespace] = {};\n\n await Promise.allSettled(\n Object.entries(typeInfo.types).map(async ([typeName, type]) => {\n try {\n results.tailordbResults[namespace][typeName] = await gen.processType({\n type,\n namespace,\n source: typeInfo.sourceInfo[typeName],\n });\n } catch (error) {\n console.error(\n styleText(\"red\", `Error processing type`),\n styleText(\"redBright\", typeName),\n styleText(\"red\", `in ${namespace} with generator ${gen.id}`),\n );\n console.error(error);\n }\n }),\n );\n\n // Process namespace summary if available\n if (gen.processTailorDBNamespace) {\n try {\n results.tailordbNamespaceResults[namespace] =\n await gen.processTailorDBNamespace({\n namespace,\n types: results.tailordbResults[namespace],\n });\n } catch (error) {\n console.error(\n styleText(\"red\", `Error processing TailorDB namespace`),\n styleText(\"redBright\", namespace),\n styleText(\"red\", `with generator ${gen.id}`),\n );\n console.error(error);\n }\n } else {\n results.tailordbNamespaceResults[namespace] =\n results.tailordbResults[namespace];\n }\n }\n\n async processResolverNamespace(\n gen: CodeGenerator,\n namespace: string,\n resolvers: Record<string, Resolver>,\n ) {\n const results = this.generatorResults[gen.id];\n results.resolverResults[namespace] = {};\n\n // Process individual resolvers\n await Promise.allSettled(\n Object.entries(resolvers).map(async ([resolverName, resolver]) => {\n try {\n results.resolverResults[namespace][resolverName] =\n await gen.processResolver({\n resolver,\n namespace,\n });\n } catch (error) {\n console.error(\n styleText(\"red\", `Error processing resolver`),\n styleText(\"redBright\", resolverName),\n styleText(\"red\", `in ${namespace} with generator ${gen.id}`),\n );\n console.error(error);\n }\n }),\n );\n\n // Process namespace summary if available\n if (gen.processResolverNamespace) {\n try {\n results.resolverNamespaceResults[namespace] =\n await gen.processResolverNamespace({\n namespace,\n resolvers: results.resolverResults[namespace],\n });\n } catch (error) {\n console.error(\n styleText(\"red\", `Error processing Resolver namespace`),\n styleText(\"redBright\", namespace),\n styleText(\"red\", `with generator ${gen.id}`),\n );\n console.error(error);\n }\n } else {\n results.resolverNamespaceResults[namespace] =\n results.resolverResults[namespace];\n }\n }\n\n async processExecutors(gen: CodeGenerator) {\n const results = this.generatorResults[gen.id];\n\n // Process individual executors\n await Promise.allSettled(\n Object.entries(this.services.executor).map(\n async ([executorId, executor]) => {\n try {\n results.executorResults[executorId] =\n await gen.processExecutor(executor);\n } catch (error) {\n console.error(\n styleText(\"red\", `Error processing executor`),\n styleText(\"redBright\", executor.name),\n styleText(\"red\", `with generator ${gen.id}`),\n );\n console.error(error);\n }\n },\n ),\n );\n }\n\n private getAuthInput(): GeneratorAuthInput | undefined {\n const authService = this.application.authService;\n if (!authService) return undefined;\n\n const config = authService.config;\n return {\n name: config.name,\n userProfile: authService.userProfile\n ? {\n typeName: authService.userProfile.type.name,\n namespace: authService.userProfile.namespace,\n usernameField: authService.userProfile.usernameField,\n }\n : undefined,\n machineUsers: config.machineUsers,\n oauth2Clients: config.oauth2Clients,\n idProvider: config.idProvider,\n };\n }\n\n async aggregate(gen: CodeGenerator) {\n const results = this.generatorResults[gen.id];\n\n const tailordbResults: TailorDBNamespaceResult<any>[] = [];\n const resolverResults: ResolverNamespaceResult<any>[] = [];\n\n // Collect TailorDB namespace results\n for (const [namespace, types] of Object.entries(\n results.tailordbNamespaceResults,\n )) {\n tailordbResults.push({\n namespace,\n types,\n });\n }\n\n // Collect Resolver namespace results\n for (const [namespace, resolvers] of Object.entries(\n results.resolverNamespaceResults,\n )) {\n resolverResults.push({\n namespace,\n resolvers,\n });\n }\n const input = {\n tailordb: tailordbResults,\n resolver: resolverResults,\n auth: this.getAuthInput(),\n };\n\n // Call generator's aggregate method\n const result = await gen.aggregate({\n input,\n executorInputs: Object.values(results.executorResults),\n baseDir: path.join(this.baseDir, gen.id),\n });\n\n // Write generated files\n await Promise.all(\n result.files.map(async (file) => {\n fs.mkdirSync(path.dirname(file.path), { recursive: true });\n return new Promise<void>((resolve, reject) => {\n if (file.skipIfExists && fs.existsSync(file.path)) {\n const relativePath = path.relative(process.cwd(), file.path);\n console.log(\n styleText(\"gray\", `${gen.id} | skip existing: ${relativePath}`),\n );\n return resolve();\n }\n\n fs.writeFile(file.path, file.content, (err) => {\n if (err) {\n const relativePath = path.relative(process.cwd(), file.path);\n console.error(\n styleText(\"red\", \"Error writing file\"),\n styleText(\"redBright\", relativePath),\n );\n console.error(err);\n reject(err);\n } else {\n const relativePath = path.relative(process.cwd(), file.path);\n console.log(\n `${gen.id} | generate:`,\n styleText(\"green\", relativePath),\n );\n // Set executable permission if requested\n if (file.executable) {\n fs.chmod(file.path, 0o755, (chmodErr) => {\n if (chmodErr) {\n const relativePath = path.relative(\n process.cwd(),\n file.path,\n );\n console.error(\n styleText(\n \"red\",\n \"Error setting executable permission on\",\n ),\n styleText(\"redBright\", relativePath),\n );\n console.error(chmodErr);\n reject(chmodErr);\n } else {\n resolve();\n }\n });\n } else {\n resolve();\n }\n }\n });\n });\n }),\n );\n console.log(\"\");\n }\n\n private watcher: DependencyWatcher | null = null;\n async watch() {\n this.watcher = new DependencyWatcher();\n\n // Set up restart callback\n this.watcher.setRestartCallback(() => {\n this.restartWatchProcess();\n });\n\n // Watch config file if available\n if (this.configPath) {\n await this.watcher.addWatchGroup(\"Config\", [this.configPath]);\n }\n\n // Watch application services\n const app = this.application;\n\n // Watch TailorDB services\n for (const db of app.tailorDBServices) {\n const dbNamespace = db.namespace;\n await this.watcher?.addWatchGroup(\n `TailorDB/${dbNamespace}`,\n db.config.files,\n );\n }\n\n // Watch Resolver services\n for (const resolverService of app.resolverServices) {\n const resolverNamespace = resolverService.namespace;\n await this.watcher?.addWatchGroup(\n `Resolver/${resolverNamespace}`,\n resolverService[\"config\"].files,\n );\n }\n\n // Keep the process running\n await new Promise(() => {});\n }\n\n private async restartWatchProcess() {\n console.log(\"\");\n console.log(\n styleText(\"yellow\", \"Restarting watch process to clear module cache...\"),\n );\n console.log(\"\");\n\n // Clean up watcher first\n if (this.watcher) {\n await this.watcher.stop();\n }\n\n // Spawn a new process with the same arguments\n const args = process.argv.slice(2);\n const env = {\n ...process.env,\n TAILOR_WATCH_GENERATION: (\n parseInt(process.env.TAILOR_WATCH_GENERATION || \"0\", 10) + 1\n ).toString(),\n };\n\n const child = spawn(process.argv[0], [process.argv[1], ...args], {\n stdio: \"inherit\",\n env,\n detached: false,\n });\n\n // Forward signals to child\n const forwardSignal = (signal: NodeJS.Signals) => {\n child.kill(signal);\n };\n\n process.on(\"SIGINT\", forwardSignal);\n process.on(\"SIGTERM\", forwardSignal);\n\n // Wait for child to exit, then exit parent\n child.on(\"exit\", (code) => {\n process.exit(code || 0);\n });\n\n // Don't exit immediately - let child handle everything\n }\n}\n\nexport async function generate(options?: GenerateOptions) {\n // Load and validate options\n const configPath = loadConfigPath(options?.configPath);\n const { config, generators } = await loadConfig(configPath);\n const watch = options?.watch ?? false;\n\n // Generate user types from loaded config\n await generateUserTypes(config, configPath);\n const manager = new GenerationManager(config, generators, configPath);\n await manager.generate(watch);\n if (watch) {\n await manager.watch();\n }\n}\n\nexport const generateCommand = defineCommand({\n meta: {\n name: \"generate\",\n description: \"Generate files using Tailor configuration\",\n },\n args: {\n ...commonArgs,\n config: {\n type: \"string\",\n description: \"Path to SDK config file\",\n alias: \"c\",\n default: \"tailor.config.ts\",\n },\n watch: {\n type: \"boolean\",\n description: \"Watch for type/resolver changes and regenerate\",\n alias: \"w\",\n default: false,\n },\n },\n run: withCommonArgs(async (args) => {\n await generate({\n configPath: args.config,\n watch: args.watch,\n });\n }),\n});\n","import { timestampDate } from \"@bufbuild/protobuf/wkt\";\nimport { defineCommand } from \"citty\";\nimport {\n commonArgs,\n formatArgs,\n parseFormat,\n printWithFormat,\n withCommonArgs,\n} from \"./args\";\nimport { initOperatorClient } from \"./client\";\nimport { loadConfig } from \"./config-loader\";\nimport { loadAccessToken, loadConfigPath, loadWorkspaceId } from \"./context\";\nimport type { Application } from \"@tailor-proto/tailor/v1/application_resource_pb\";\n\nexport interface ShowOptions {\n workspaceId?: string;\n profile?: string;\n configPath?: string;\n}\n\nexport interface ApplicationInfo {\n name: string;\n domain: string;\n url: string;\n auth: string;\n cors: string[];\n allowedIpAddresses: string[];\n disableIntrospection: boolean;\n createdAt: string;\n updatedAt: string;\n}\n\nfunction applicationInfo(app: Application): ApplicationInfo {\n return {\n name: app.name,\n domain: app.domain,\n url: app.url,\n auth: app.authNamespace,\n cors: app.cors,\n allowedIpAddresses: app.allowedIpAddresses,\n disableIntrospection: app.disableIntrospection,\n createdAt: app.createTime\n ? timestampDate(app.createTime).toISOString()\n : \"N/A\",\n updatedAt: app.updateTime\n ? timestampDate(app.updateTime).toISOString()\n : \"N/A\",\n };\n}\n\nexport async function show(options?: ShowOptions): Promise<ApplicationInfo> {\n // Load and validate options\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: options?.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options?.workspaceId,\n profile: options?.profile,\n });\n const configPath = loadConfigPath(options?.configPath);\n\n // Get application\n const { config } = await loadConfig(configPath);\n const resp = await client.getApplication({\n workspaceId,\n applicationName: config.name,\n });\n return applicationInfo(resp.application!);\n}\n\nexport const showCommand = defineCommand({\n meta: {\n name: \"show\",\n description: \"Show applied application information\",\n },\n args: {\n ...commonArgs,\n ...formatArgs,\n \"workspace-id\": {\n type: \"string\",\n description: \"Workspace ID\",\n alias: \"w\",\n },\n profile: {\n type: \"string\",\n description: \"Workspace profile\",\n alias: \"p\",\n },\n config: {\n type: \"string\",\n description: \"Path to SDK config file\",\n alias: \"c\",\n default: \"tailor.config.ts\",\n },\n },\n run: withCommonArgs(async (args) => {\n // Validate cli specific args\n const format = parseFormat(args.format);\n\n // Execute show logic\n const appInfo = await show({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n configPath: args.config,\n });\n\n // Show application\n printWithFormat(appInfo, format);\n }),\n});\n","import { defineCommand } from \"citty\";\nimport { consola } from \"consola\";\nimport ml from \"multiline-ts\";\nimport { type Application, defineApplication } from \"@/cli/application\";\nimport { type PlanContext } from \"@/cli/apply\";\nimport {\n applyApplication,\n planApplication,\n} from \"@/cli/apply/services/application\";\nimport { applyAuth, planAuth } from \"@/cli/apply/services/auth\";\nimport { applyExecutor, planExecutor } from \"@/cli/apply/services/executor\";\nimport { applyIdP, planIdP } from \"@/cli/apply/services/idp\";\nimport { applyPipeline, planPipeline } from \"@/cli/apply/services/resolver\";\nimport {\n applyStaticWebsite,\n planStaticWebsite,\n} from \"@/cli/apply/services/staticwebsite\";\nimport { applyTailorDB, planTailorDB } from \"@/cli/apply/services/tailordb\";\nimport { loadConfig } from \"@/cli/config-loader\";\nimport { commonArgs, withCommonArgs } from \"./args\";\nimport { initOperatorClient, type OperatorClient } from \"./client\";\nimport { loadAccessToken, loadConfigPath, loadWorkspaceId } from \"./context\";\n\nexport interface RemoveOptions {\n workspaceId?: string;\n profile?: string;\n configPath?: string;\n}\n\nasync function loadOptions(options?: RemoveOptions) {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: options?.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options?.workspaceId,\n profile: options?.profile,\n });\n const configPath = loadConfigPath(options?.configPath);\n const { config } = await loadConfig(configPath);\n const application = defineApplication(config);\n return {\n client,\n workspaceId,\n application,\n };\n}\n\nasync function execRemove(\n client: OperatorClient,\n workspaceId: string,\n application: Application,\n confirm?: () => Promise<void>,\n) {\n // Plan all resources with forRemoval=true\n const ctx: PlanContext = {\n client,\n workspaceId,\n application,\n forRemoval: true,\n };\n const tailorDB = await planTailorDB(ctx);\n const staticWebsite = await planStaticWebsite(ctx);\n const idp = await planIdP(ctx);\n const auth = await planAuth(ctx);\n const pipeline = await planPipeline(ctx);\n const app = await planApplication(ctx);\n const executor = await planExecutor(ctx);\n\n if (\n tailorDB.changeSet.service.deletes.length === 0 &&\n staticWebsite.changeSet.deletes.length === 0 &&\n idp.changeSet.service.deletes.length === 0 &&\n auth.changeSet.service.deletes.length === 0 &&\n pipeline.changeSet.service.deletes.length === 0 &&\n app.deletes.length === 0 &&\n executor.changeSet.deletes.length === 0\n ) {\n return;\n }\n\n // Confirm deletion\n if (confirm) {\n await confirm();\n }\n\n // Apply deletions in reverse order of dependencies\n await applyExecutor(client, executor, \"delete\");\n await applyApplication(client, app, \"delete\");\n await applyPipeline(client, pipeline, \"delete\");\n await applyAuth(client, auth, \"delete\");\n await applyIdP(client, idp, \"delete\");\n await applyStaticWebsite(client, staticWebsite, \"delete\");\n await applyTailorDB(client, tailorDB, \"delete\");\n}\n\nexport async function remove(options?: RemoveOptions): Promise<void> {\n const { client, workspaceId, application } = await loadOptions(options);\n await execRemove(client, workspaceId, application);\n}\n\nexport const removeCommand = defineCommand({\n meta: {\n name: \"remove\",\n description: \"Remove all resources managed by the application\",\n },\n args: {\n ...commonArgs,\n \"workspace-id\": {\n type: \"string\",\n description: \"Workspace ID\",\n alias: \"w\",\n },\n profile: {\n type: \"string\",\n description: \"Workspace profile\",\n alias: \"p\",\n },\n config: {\n type: \"string\",\n description: \"Path to SDK config file\",\n alias: \"c\",\n default: \"tailor.config.ts\",\n },\n yes: {\n type: \"boolean\",\n description: \"Skip confirmation prompt\",\n alias: \"y\",\n default: false,\n },\n },\n run: withCommonArgs(async (args) => {\n const { client, workspaceId, application } = await loadOptions({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n configPath: args.config,\n });\n\n console.log(\n `Planning removal of resources managed by \"${application.name}\"...\\n`,\n );\n\n await execRemove(client, workspaceId, application, async () => {\n if (!args.yes) {\n const confirmed = await consola.prompt(\n \"Are you sure you want to remove all resources?\",\n { type: \"confirm\", initial: false },\n );\n if (!confirmed) {\n throw new Error(ml`\n Remove cancelled. No resources were deleted.\n To override, run again and confirm, or use --yes flag.\n `);\n }\n } else {\n consola.success(\"Removing all resources (--yes flag specified)...\");\n }\n });\n\n consola.success(\n `Successfully removed all resources managed by \"${application.name}\".`,\n );\n }),\n});\n","import { timestampDate } from \"@bufbuild/protobuf/wkt\";\nimport type { Workspace } from \"@tailor-proto/tailor/v1/workspace_resource_pb\";\n\nexport interface WorkspaceInfo {\n id: string;\n name: string;\n region: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport const workspaceInfo = (workspace: Workspace): WorkspaceInfo => {\n return {\n id: workspace.id,\n name: workspace.name,\n region: workspace.region,\n createdAt: workspace.createTime\n ? timestampDate(workspace.createTime).toISOString()\n : \"N/A\",\n updatedAt: workspace.updateTime\n ? timestampDate(workspace.updateTime).toISOString()\n : \"N/A\",\n };\n};\n","import { defineCommand } from \"citty\";\nimport { consola } from \"consola\";\nimport { validate as validateUuid } from \"uuid\";\nimport {\n commonArgs,\n formatArgs,\n parseFormat,\n printWithFormat,\n withCommonArgs,\n} from \"../args\";\nimport { initOperatorClient, type OperatorClient } from \"../client\";\nimport { loadAccessToken } from \"../context\";\nimport { workspaceInfo, type WorkspaceInfo } from \"./transform\";\n\nexport interface WorkspaceCreateOptions {\n name: string;\n region: string;\n deleteProtection?: boolean;\n organizationId?: string;\n folderId?: string;\n}\n\nconst validateName = (name: string) => {\n if (name.length < 3 || name.length > 63) {\n throw new Error(`Name must be between 3 and 63 characters long.`);\n }\n if (!/^[a-z0-9-]+$/.test(name)) {\n throw new Error(\n \"Name can only contain lowercase letters, numbers, and hyphens.\",\n );\n }\n if (name.startsWith(\"-\") || name.endsWith(\"-\")) {\n throw new Error(\"Name cannot start or end with a hyphen.\");\n }\n};\n\nconst validateRegion = async (region: string, client: OperatorClient) => {\n const availableRegions = await client.listAvailableWorkspaceRegions({});\n if (!availableRegions.regions.includes(region)) {\n throw new Error(\n `Region must be one of: ${availableRegions.regions.join(\", \")}.`,\n );\n }\n};\n\nexport async function workspaceCreate(\n options: WorkspaceCreateOptions,\n): Promise<WorkspaceInfo> {\n // Load and validate options\n const accessToken = await loadAccessToken();\n const client = await initOperatorClient(accessToken);\n validateName(options.name);\n await validateRegion(options.region, client);\n const deleteProtection = options.deleteProtection ?? false;\n if (options.organizationId && !validateUuid(options.organizationId)) {\n throw new Error(`Organization ID must be a valid UUID.`);\n }\n if (options.folderId && !validateUuid(options.folderId)) {\n throw new Error(`Folder ID must be a valid UUID.`);\n }\n\n // Create workspace\n const resp = await client.createWorkspace({\n workspaceName: options.name,\n workspaceRegion: options.region,\n deleteProtection,\n organizationId: options.organizationId,\n folderId: options.folderId,\n });\n\n return workspaceInfo(resp.workspace!);\n}\n\nexport const createCommand = defineCommand({\n meta: {\n name: \"create\",\n description: \"Create new workspace\",\n },\n args: {\n ...commonArgs,\n ...formatArgs,\n name: {\n type: \"string\",\n description: \"Workspace name\",\n required: true,\n alias: \"n\",\n },\n region: {\n type: \"string\",\n description: \"Workspace region (us-west, asia-northeast)\",\n required: true,\n alias: \"r\",\n },\n \"delete-protection\": {\n type: \"boolean\",\n description: \"Enable delete protection\",\n alias: \"d\",\n default: false,\n },\n \"organization-id\": {\n type: \"string\",\n description: \"Organization ID to workspace associate with\",\n alias: \"o\",\n },\n \"folder-id\": {\n type: \"string\",\n description: \"Folder ID to workspace associate with\",\n alias: \"f\",\n },\n },\n run: withCommonArgs(async (args) => {\n // Validate CLI specific args\n const format = parseFormat(args.format);\n\n // Execute workspace create logic\n const workspace = await workspaceCreate({\n name: args.name,\n region: args.region,\n deleteProtection: args[\"delete-protection\"],\n organizationId: args[\"organization-id\"],\n folderId: args[\"folder-id\"],\n });\n\n // Show success message for table format\n if (format === \"table\") {\n consola.success(`Workspace \"${args.name}\" created successfully.`);\n }\n\n // Show workspace info\n printWithFormat(workspace, format);\n }),\n});\n","import { defineCommand } from \"citty\";\nimport {\n commonArgs,\n formatArgs,\n parseFormat,\n printWithFormat,\n withCommonArgs,\n} from \"../args\";\nimport { fetchAll, initOperatorClient } from \"../client\";\nimport { loadAccessToken } from \"../context\";\nimport { workspaceInfo, type WorkspaceInfo } from \"./transform\";\n\nexport async function workspaceList(): Promise<WorkspaceInfo[]> {\n // Load and validate options\n const accessToken = await loadAccessToken();\n const client = await initOperatorClient(accessToken);\n\n // Fetch all workspaces\n const workspaces = await fetchAll(async (pageToken) => {\n const { workspaces, nextPageToken } = await client.listWorkspaces({\n pageToken,\n });\n return [workspaces, nextPageToken];\n });\n\n return workspaces.map(workspaceInfo);\n}\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all Tailor Platform workspaces\",\n },\n args: {\n ...commonArgs,\n ...formatArgs,\n },\n run: withCommonArgs(async (args) => {\n // Validate CLI specific args\n const format = parseFormat(args.format);\n\n // Execute workspace list logic\n const workspaces = await workspaceList();\n\n // Show workspaces info\n printWithFormat(workspaces, format);\n }),\n});\n","import { defineCommand } from \"citty\";\nimport { consola } from \"consola\";\nimport { validate as validateUuid } from \"uuid\";\nimport { commonArgs, withCommonArgs } from \"../args\";\nimport { initOperatorClient } from \"../client\";\nimport { loadAccessToken } from \"../context\";\n\nexport interface WorkspaceDeleteOptions {\n workspaceId: string;\n}\n\nasync function loadOptions(options: WorkspaceDeleteOptions) {\n const accessToken = await loadAccessToken();\n const client = await initOperatorClient(accessToken);\n if (!validateUuid(options.workspaceId)) {\n throw new Error(\n `Workspace ID \"${options.workspaceId}\" is not a valid UUID.`,\n );\n }\n return {\n client,\n workspaceId: options.workspaceId,\n };\n}\n\nexport async function workspaceDelete(\n options: WorkspaceDeleteOptions,\n): Promise<void> {\n // Load and validate options\n const { client, workspaceId } = await loadOptions(options);\n\n // Delete workspace\n await client.deleteWorkspace({\n workspaceId,\n });\n}\n\nexport const deleteCommand = defineCommand({\n meta: {\n name: \"delete\",\n description: \"Delete workspace\",\n },\n args: {\n ...commonArgs,\n \"workspace-id\": {\n type: \"string\",\n description: \"Workspace ID\",\n required: true,\n alias: \"w\",\n },\n yes: {\n type: \"boolean\",\n description: \"Skip confirmation prompt\",\n alias: \"y\",\n default: false,\n },\n },\n run: withCommonArgs(async (args) => {\n // Load and validate options\n const { client, workspaceId } = await loadOptions({\n workspaceId: args[\"workspace-id\"],\n });\n\n // Check if workspace exists\n let workspace;\n try {\n workspace = await client.getWorkspace({\n workspaceId,\n });\n } catch {\n throw new Error(`Workspace \"${workspaceId}\" not found.`);\n }\n\n // Confirm deletion if not forced\n if (!args.yes) {\n const confirmation = await consola.prompt(\n `Enter the workspace name to confirm deletion (${workspace.workspace?.name}):`,\n {\n type: \"text\",\n },\n );\n if (confirmation !== workspace.workspace?.name) {\n consola.info(\"Workspace deletion cancelled.\");\n return;\n }\n }\n\n // Delete workspace\n await client.deleteWorkspace({\n workspaceId,\n });\n\n // Show success message\n consola.success(\n `Workspace \"${args[\"workspace-id\"]}\" deleted successfully.`,\n );\n }),\n});\n","import { timestampDate } from \"@bufbuild/protobuf/wkt\";\nimport { defineCommand } from \"citty\";\nimport {\n commonArgs,\n formatArgs,\n parseFormat,\n printWithFormat,\n withCommonArgs,\n} from \"../args\";\nimport { fetchAll, initOperatorClient } from \"../client\";\nimport { loadConfig } from \"../config-loader\";\nimport { loadAccessToken, loadConfigPath, loadWorkspaceId } from \"../context\";\nimport type { MachineUser } from \"@tailor-proto/tailor/v1/auth_resource_pb\";\n\nexport interface MachineUserListOptions {\n workspaceId?: string;\n profile?: string;\n configPath?: string;\n}\n\nexport interface MachineUserInfo {\n name: string;\n clientId: string;\n clientSecret: string;\n createdAt: string;\n updatedAt: string;\n}\n\nfunction machineUserInfo(user: MachineUser): MachineUserInfo {\n return {\n name: user.name,\n clientId: user.clientId,\n clientSecret: user.clientSecret,\n createdAt: user.createdAt\n ? timestampDate(user.createdAt).toISOString()\n : \"N/A\",\n updatedAt: user.updatedAt\n ? timestampDate(user.updatedAt).toISOString()\n : \"N/A\",\n };\n}\n\nexport async function machineUserList(\n options?: MachineUserListOptions,\n): Promise<MachineUserInfo[]> {\n // Load and validate options\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: options?.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options?.workspaceId,\n profile: options?.profile,\n });\n const configPath = loadConfigPath(options?.configPath);\n\n // Get application\n const { config } = await loadConfig(configPath);\n const { application } = await client.getApplication({\n workspaceId,\n applicationName: config.name,\n });\n if (!application?.authNamespace) {\n throw new Error(\n `Application ${config.name} does not have an auth configuration.`,\n );\n }\n\n // Fetch all machine users\n const machineUsers = await fetchAll(async (pageToken) => {\n const { machineUsers, nextPageToken } = await client.listAuthMachineUsers({\n workspaceId,\n pageToken,\n authNamespace: application.authNamespace,\n });\n return [machineUsers, nextPageToken];\n });\n\n return machineUsers.map(machineUserInfo);\n}\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all machine users\",\n },\n args: {\n ...commonArgs,\n ...formatArgs,\n \"workspace-id\": {\n type: \"string\",\n description: \"Workspace ID\",\n alias: \"w\",\n },\n profile: {\n type: \"string\",\n description: \"Workspace profile\",\n alias: \"p\",\n },\n config: {\n type: \"string\",\n description: \"Path to SDK config file\",\n alias: \"c\",\n default: \"tailor.config.ts\",\n },\n },\n run: withCommonArgs(async (args) => {\n // Validate CLI specific args\n const format = parseFormat(args.format);\n\n // Execute machineuser list logic\n const machineUsers = await machineUserList({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n configPath: args.config,\n });\n\n // Show machine users info\n printWithFormat(machineUsers, format);\n }),\n});\n","import { defineCommand } from \"citty\";\nimport {\n commonArgs,\n formatArgs,\n parseFormat,\n printWithFormat,\n withCommonArgs,\n} from \"../args\";\nimport { fetchMachineUserToken, initOperatorClient } from \"../client\";\nimport { loadConfig } from \"../config-loader\";\nimport { loadAccessToken, loadConfigPath, loadWorkspaceId } from \"../context\";\n\nexport interface MachineUserTokenOptions {\n name: string;\n workspaceId?: string;\n profile?: string;\n configPath?: string;\n}\n\nexport interface MachineUserTokenInfo {\n accessToken: string;\n tokenType: string;\n expiresAt: string;\n}\n\nexport async function machineUserToken(\n options: MachineUserTokenOptions,\n): Promise<MachineUserTokenInfo> {\n // Load and validate options\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: options.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options.workspaceId,\n profile: options.profile,\n });\n const configPath = loadConfigPath(options.configPath);\n\n // Get application\n const { config } = await loadConfig(configPath);\n const { application } = await client.getApplication({\n workspaceId,\n applicationName: config.name,\n });\n if (!application?.authNamespace) {\n throw new Error(\n `Application ${config.name} does not have an auth configuration.`,\n );\n }\n\n // Get machine user\n const { machineUser } = await client.getAuthMachineUser({\n workspaceId,\n authNamespace: application.authNamespace,\n name: options.name,\n });\n if (!machineUser) {\n throw new Error(`Machine user ${options.name} not found.`);\n }\n\n // Fetch machine user token\n const resp = await fetchMachineUserToken(\n application.url,\n machineUser.clientId,\n machineUser.clientSecret,\n );\n const expiresAt = new Date();\n expiresAt.setSeconds(expiresAt.getSeconds() + resp.expires_in);\n\n return {\n accessToken: resp.access_token,\n tokenType: resp.token_type,\n expiresAt: expiresAt.toISOString(),\n };\n}\n\nexport const tokenCommand = defineCommand({\n meta: {\n name: \"token\",\n description: \"Get machine user token\",\n },\n args: {\n ...commonArgs,\n ...formatArgs,\n \"workspace-id\": {\n type: \"string\",\n description: \"Workspace ID\",\n alias: \"w\",\n },\n profile: {\n type: \"string\",\n description: \"Workspace profile\",\n alias: \"p\",\n },\n config: {\n type: \"string\",\n description: \"Path to SDK config file\",\n alias: \"c\",\n default: \"tailor.config.ts\",\n },\n name: {\n type: \"positional\",\n description: \"Machine user name\",\n required: true,\n },\n },\n run: withCommonArgs(async (args) => {\n // Validate CLI specific args\n const format = parseFormat(args.format);\n\n // Execute machineuser token logic\n const token = await machineUserToken({\n name: args.name,\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n configPath: args.config,\n });\n\n // Show machine user token info\n // TODO: remove this transformation\n const tokenInfo = {\n access_token: token.accessToken,\n token_type: token.tokenType,\n expires_at: token.expiresAt,\n };\n printWithFormat(tokenInfo, format);\n }),\n});\n","import { timestampDate } from \"@bufbuild/protobuf/wkt\";\nimport {\n type AuthOAuth2Client,\n AuthOAuth2Client_GrantType,\n} from \"@tailor-proto/tailor/v1/auth_resource_pb\";\n\nexport const grantTypeToString = (\n grantType: AuthOAuth2Client_GrantType,\n): string => {\n switch (grantType) {\n case AuthOAuth2Client_GrantType.AUTHORIZATION_CODE:\n return \"authorization_code\";\n case AuthOAuth2Client_GrantType.REFRESH_TOKEN:\n return \"refresh_token\";\n default:\n return \"unknown\";\n }\n};\n\nexport interface OAuth2ClientInfo {\n name: string;\n description: string;\n clientId: string;\n grantTypes: string[];\n redirectUris: string[];\n createdAt: string;\n}\n\nexport interface OAuth2ClientCredentials {\n name: string;\n description: string;\n clientId: string;\n clientSecret: string;\n grantTypes: string[];\n redirectUris: string[];\n createdAt: string;\n}\n\nexport function toOAuth2ClientInfo(client: AuthOAuth2Client): OAuth2ClientInfo {\n return {\n name: client.name,\n description: client.description,\n clientId: client.clientId,\n grantTypes: client.grantTypes.map(grantTypeToString),\n redirectUris: client.redirectUris,\n createdAt: client.createdAt\n ? timestampDate(client.createdAt).toISOString()\n : \"N/A\",\n };\n}\n\nexport function toOAuth2ClientCredentials(\n client: AuthOAuth2Client,\n): OAuth2ClientCredentials {\n return {\n name: client.name,\n description: client.description,\n clientId: client.clientId,\n clientSecret: client.clientSecret,\n grantTypes: client.grantTypes.map(grantTypeToString),\n redirectUris: client.redirectUris,\n createdAt: client.createdAt\n ? timestampDate(client.createdAt).toISOString()\n : \"N/A\",\n };\n}\n","import { Code, ConnectError } from \"@connectrpc/connect\";\nimport { defineCommand } from \"citty\";\nimport {\n commonArgs,\n formatArgs,\n parseFormat,\n printWithFormat,\n withCommonArgs,\n} from \"../args\";\nimport { initOperatorClient } from \"../client\";\nimport { loadConfig } from \"../config-loader\";\nimport { loadAccessToken, loadConfigPath, loadWorkspaceId } from \"../context\";\nimport {\n type OAuth2ClientCredentials,\n toOAuth2ClientCredentials,\n} from \"./transform\";\n\nexport interface OAuth2ClientGetOptions {\n name: string;\n workspaceId?: string;\n profile?: string;\n configPath?: string;\n}\n\nexport async function oauth2ClientGet(\n options: OAuth2ClientGetOptions,\n): Promise<OAuth2ClientCredentials> {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: options.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options.workspaceId,\n profile: options.profile,\n });\n const configPath = loadConfigPath(options.configPath);\n\n const { config } = await loadConfig(configPath);\n const { application } = await client.getApplication({\n workspaceId,\n applicationName: config.name,\n });\n if (!application?.authNamespace) {\n throw new Error(\n `Application ${config.name} does not have an auth configuration.`,\n );\n }\n\n try {\n const { oauth2Client } = await client.getAuthOAuth2Client({\n workspaceId,\n namespaceName: application.authNamespace,\n name: options.name,\n });\n\n return toOAuth2ClientCredentials(oauth2Client!);\n } catch (error) {\n if (error instanceof ConnectError && error.code === Code.NotFound) {\n throw new Error(`OAuth2 client '${options.name}' not found.`);\n }\n throw error;\n }\n}\n\nexport const getCommand = defineCommand({\n meta: {\n name: \"get\",\n description: \"Get OAuth2 client credentials\",\n },\n args: {\n ...commonArgs,\n ...formatArgs,\n name: {\n type: \"positional\",\n description: \"OAuth2 client name\",\n required: true,\n },\n \"workspace-id\": {\n type: \"string\",\n description: \"Workspace ID\",\n alias: \"w\",\n },\n profile: {\n type: \"string\",\n description: \"Workspace profile\",\n alias: \"p\",\n },\n config: {\n type: \"string\",\n description: \"Path to SDK config file\",\n alias: \"c\",\n default: \"tailor.config.ts\",\n },\n },\n run: withCommonArgs(async (args) => {\n const format = parseFormat(args.format);\n\n const credentials = await oauth2ClientGet({\n name: args.name,\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n configPath: args.config,\n });\n\n printWithFormat(credentials, format);\n }),\n});\n","import { defineCommand } from \"citty\";\nimport {\n commonArgs,\n formatArgs,\n parseFormat,\n printWithFormat,\n withCommonArgs,\n} from \"../args\";\nimport { fetchAll, initOperatorClient } from \"../client\";\nimport { loadConfig } from \"../config-loader\";\nimport { loadAccessToken, loadConfigPath, loadWorkspaceId } from \"../context\";\nimport { type OAuth2ClientInfo, toOAuth2ClientInfo } from \"./transform\";\n\nexport interface OAuth2ClientListOptions {\n workspaceId?: string;\n profile?: string;\n configPath?: string;\n}\n\nexport async function oauth2ClientList(\n options?: OAuth2ClientListOptions,\n): Promise<OAuth2ClientInfo[]> {\n const accessToken = await loadAccessToken({\n useProfile: true,\n profile: options?.profile,\n });\n const client = await initOperatorClient(accessToken);\n const workspaceId = loadWorkspaceId({\n workspaceId: options?.workspaceId,\n profile: options?.profile,\n });\n const configPath = loadConfigPath(options?.configPath);\n\n const { config } = await loadConfig(configPath);\n const { application } = await client.getApplication({\n workspaceId,\n applicationName: config.name,\n });\n if (!application?.authNamespace) {\n throw new Error(\n `Application ${config.name} does not have an auth configuration.`,\n );\n }\n\n const oauth2Clients = await fetchAll(async (pageToken) => {\n const { oauth2Clients, nextPageToken } = await client.listAuthOAuth2Clients(\n {\n workspaceId,\n pageToken,\n namespaceName: application.authNamespace,\n },\n );\n return [oauth2Clients, nextPageToken];\n });\n\n return oauth2Clients.map(toOAuth2ClientInfo);\n}\n\nexport const listCommand = defineCommand({\n meta: {\n name: \"list\",\n description: \"List all OAuth2 clients\",\n },\n args: {\n ...commonArgs,\n ...formatArgs,\n \"workspace-id\": {\n type: \"string\",\n description: \"Workspace ID\",\n alias: \"w\",\n },\n profile: {\n type: \"string\",\n description: \"Workspace profile\",\n alias: \"p\",\n },\n config: {\n type: \"string\",\n description: \"Path to SDK config file\",\n alias: \"c\",\n default: \"tailor.config.ts\",\n },\n },\n run: withCommonArgs(async (args) => {\n const format = parseFormat(args.format);\n\n const oauth2Clients = await oauth2ClientList({\n workspaceId: args[\"workspace-id\"],\n profile: args.profile,\n configPath: args.config,\n });\n\n printWithFormat(oauth2Clients, format);\n }),\n});\n"],"mappings":"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"}
|